1805 lines
6.9 MiB
1805 lines
6.9 MiB
/*
|
||
* ATTENTION: An "eval-source-map" devtool has been used.
|
||
* This devtool is neither made for production nor for readable output files.
|
||
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
|
||
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
|
||
* or disable the default devtool with "devtool: false".
|
||
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
|
||
*/
|
||
(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([["main-app"],{
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@swc/helpers/esm/_class_private_field_loose_base.js":
|
||
/*!**************************************************************************!*\
|
||
!*** ./node_modules/@swc/helpers/esm/_class_private_field_loose_base.js ***!
|
||
\**************************************************************************/
|
||
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ _: () => (/* binding */ _class_private_field_loose_base)\n/* harmony export */ });\nfunction _class_private_field_loose_base(receiver, privateKey) {\n if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {\n throw new TypeError(\"attempted to use private field on non-instance\");\n }\n\n return receiver;\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2Jhc2UuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDZ0QiLCJzb3VyY2VzIjpbIi9ob21lL05pY2hvbGFpL0RvY3VtZW50cy9EZXYvYmlvaGF6YXJkLXZmeC0xL25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2Jhc2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2VfYmFzZShyZWNlaXZlciwgcHJpdmF0ZUtleSkge1xuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlY2VpdmVyLCBwcml2YXRlS2V5KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXR0ZW1wdGVkIHRvIHVzZSBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZVwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVjZWl2ZXI7XG59XG5leHBvcnQgeyBfY2xhc3NfcHJpdmF0ZV9maWVsZF9sb29zZV9iYXNlIGFzIF8gfTtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@swc/helpers/esm/_class_private_field_loose_base.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@swc/helpers/esm/_class_private_field_loose_key.js":
|
||
/*!*************************************************************************!*\
|
||
!*** ./node_modules/@swc/helpers/esm/_class_private_field_loose_key.js ***!
|
||
\*************************************************************************/
|
||
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ _: () => (/* binding */ _class_private_field_loose_key)\n/* harmony export */ });\nvar id = 0;\n\nfunction _class_private_field_loose_key(name) {\n return \"__private_\" + id++ + \"_\" + name;\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2tleS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQytDIiwic291cmNlcyI6WyIvaG9tZS9OaWNob2xhaS9Eb2N1bWVudHMvRGV2L2Jpb2hhemFyZC12ZngtMS9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2VzbS9fY2xhc3NfcHJpdmF0ZV9maWVsZF9sb29zZV9rZXkuanMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGlkID0gMDtcblxuZnVuY3Rpb24gX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2Vfa2V5KG5hbWUpIHtcbiAgICByZXR1cm4gXCJfX3ByaXZhdGVfXCIgKyBpZCsrICsgXCJfXCIgKyBuYW1lO1xufVxuZXhwb3J0IHsgX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2Vfa2V5IGFzIF8gfTtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@swc/helpers/esm/_class_private_field_loose_key.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js":
|
||
/*!*******************************************************************!*\
|
||
!*** ./node_modules/@swc/helpers/esm/_interop_require_default.js ***!
|
||
\*******************************************************************/
|
||
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ _: () => (/* binding */ _interop_require_default)\n/* harmony export */ });\nfunction _interop_require_default(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQSwyQ0FBMkM7QUFDM0M7QUFDeUMiLCJzb3VyY2VzIjpbIi9ob21lL05pY2hvbGFpL0RvY3VtZW50cy9EZXYvYmlvaGF6YXJkLXZmeC0xL25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07XG59XG5leHBvcnQgeyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQgYXMgXyB9O1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js":
|
||
/*!********************************************************************!*\
|
||
!*** ./node_modules/@swc/helpers/esm/_interop_require_wildcard.js ***!
|
||
\********************************************************************/
|
||
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ _: () => (/* binding */ _interop_require_wildcard)\n/* harmony export */ });\nfunction _getRequireWildcardCache(nodeInterop) {\n if (typeof WeakMap !== \"function\") return null;\n\n var cacheBabelInterop = new WeakMap();\n var cacheNodeInterop = new WeakMap();\n\n return (_getRequireWildcardCache = function(nodeInterop) {\n return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n })(nodeInterop);\n}\nfunction _interop_require_wildcard(obj, nodeInterop) {\n if (!nodeInterop && obj && obj.__esModule) return obj;\n if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") return { default: obj };\n\n var cache = _getRequireWildcardCache(nodeInterop);\n\n if (cache && cache.has(obj)) return cache.get(obj);\n\n var newObj = { __proto__: null };\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n\n for (var key in obj) {\n if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n if (desc && (desc.get || desc.set)) Object.defineProperty(newObj, key, desc);\n else newObj[key] = obj[key];\n }\n }\n\n newObj.default = obj;\n\n if (cache) cache.set(obj, newObj);\n\n return newObj;\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLHVGQUF1Rjs7QUFFdkY7O0FBRUE7O0FBRUEsbUJBQW1CO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDMEMiLCJzb3VyY2VzIjpbIi9ob21lL05pY2hvbGFpL0RvY3VtZW50cy9EZXYvYmlvaGF6YXJkLXZmeC0xL25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKG5vZGVJbnRlcm9wKSB7XG4gICAgaWYgKHR5cGVvZiBXZWFrTWFwICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBudWxsO1xuXG4gICAgdmFyIGNhY2hlQmFiZWxJbnRlcm9wID0gbmV3IFdlYWtNYXAoKTtcbiAgICB2YXIgY2FjaGVOb2RlSW50ZXJvcCA9IG5ldyBXZWFrTWFwKCk7XG5cbiAgICByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uKG5vZGVJbnRlcm9wKSB7XG4gICAgICAgIHJldHVybiBub2RlSW50ZXJvcCA/IGNhY2hlTm9kZUludGVyb3AgOiBjYWNoZUJhYmVsSW50ZXJvcDtcbiAgICB9KShub2RlSW50ZXJvcCk7XG59XG5mdW5jdGlvbiBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkKG9iaiwgbm9kZUludGVyb3ApIHtcbiAgICBpZiAoIW5vZGVJbnRlcm9wICYmIG9iaiAmJiBvYmouX19lc01vZHVsZSkgcmV0dXJuIG9iajtcbiAgICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG9iaiAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4geyBkZWZhdWx0OiBvYmogfTtcblxuICAgIHZhciBjYWNoZSA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShub2RlSW50ZXJvcCk7XG5cbiAgICBpZiAoY2FjaGUgJiYgY2FjaGUuaGFzKG9iaikpIHJldHVybiBjYWNoZS5nZXQob2JqKTtcblxuICAgIHZhciBuZXdPYmogPSB7IF9fcHJvdG9fXzogbnVsbCB9O1xuICAgIHZhciBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgICAgaWYgKGtleSAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICAgICAgdmFyIGRlc2MgPSBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5KSA6IG51bGw7XG4gICAgICAgICAgICBpZiAoZGVzYyAmJiAoZGVzYy5nZXQgfHwgZGVzYy5zZXQpKSBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3T2JqLCBrZXksIGRlc2MpO1xuICAgICAgICAgICAgZWxzZSBuZXdPYmpba2V5XSA9IG9ialtrZXldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmV3T2JqLmRlZmF1bHQgPSBvYmo7XG5cbiAgICBpZiAoY2FjaGUpIGNhY2hlLnNldChvYmosIG5ld09iaik7XG5cbiAgICByZXR1cm4gbmV3T2JqO1xufVxuZXhwb3J0IHsgX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCBhcyBfIH07XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/build/deployment-id.js":
|
||
/*!*******************************************************!*\
|
||
!*** ./node_modules/next/dist/build/deployment-id.js ***!
|
||
\*******************************************************/
|
||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getDeploymentIdQueryOrEmptyString\", ({\n enumerable: true,\n get: function() {\n return getDeploymentIdQueryOrEmptyString;\n }\n}));\nfunction getDeploymentIdQueryOrEmptyString() {\n if (false) {}\n return '';\n}\n\n//# sourceMappingURL=deployment-id.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvZGVwbG95bWVudC1pZC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLHFFQUFvRTtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQztBQUNGO0FBQ0EsUUFBUSxLQUE4QixFQUFFLEVBRW5DO0FBQ0w7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvRG9jdW1lbnRzL0Rldi9iaW9oYXphcmQtdmZ4LTEvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9idWlsZC9kZXBsb3ltZW50LWlkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0RGVwbG95bWVudElkUXVlcnlPckVtcHR5U3RyaW5nXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXREZXBsb3ltZW50SWRRdWVyeU9yRW1wdHlTdHJpbmc7XG4gICAgfVxufSk7XG5mdW5jdGlvbiBnZXREZXBsb3ltZW50SWRRdWVyeU9yRW1wdHlTdHJpbmcoKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5FWFRfREVQTE9ZTUVOVF9JRCkge1xuICAgICAgICByZXR1cm4gYD9kcGw9JHtwcm9jZXNzLmVudi5ORVhUX0RFUExPWU1FTlRfSUR9YDtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZXBsb3ltZW50LWlkLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/build/deployment-id.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/build/polyfills/polyfill-module.js":
|
||
/*!*******************************************************************!*\
|
||
!*** ./node_modules/next/dist/build/polyfills/polyfill-module.js ***!
|
||
\*******************************************************************/
|
||
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
|
||
|
||
eval(__webpack_require__.ts("\"trimStart\"in String.prototype||(String.prototype.trimStart=String.prototype.trimLeft),\"trimEnd\"in String.prototype||(String.prototype.trimEnd=String.prototype.trimRight),\"description\"in Symbol.prototype||Object.defineProperty(Symbol.prototype,\"description\",{configurable:!0,get:function(){var t=/\\((.*)\\)/.exec(this.toString());return t?t[1]:void 0}}),Array.prototype.flat||(Array.prototype.flat=function(t,r){return r=this.concat.apply([],this),t>1&&r.some(Array.isArray)?r.flat(t-1):r},Array.prototype.flatMap=function(t,r){return this.map(t,r).flat()}),Promise.prototype.finally||(Promise.prototype.finally=function(t){if(\"function\"!=typeof t)return this.then(t,t);var r=this.constructor||Promise;return this.then(function(n){return r.resolve(t()).then(function(){return n})},function(n){return r.resolve(t()).then(function(){throw n})})}),Object.fromEntries||(Object.fromEntries=function(t){return Array.from(t).reduce(function(t,r){return t[r[0]]=r[1],t},{})}),Array.prototype.at||(Array.prototype.at=function(t){var r=Math.trunc(t)||0;if(r<0&&(r+=this.length),!(r<0||r>=this.length))return this[r]}),Object.hasOwn||(Object.hasOwn=function(t,r){if(null==t)throw new TypeError(\"Cannot convert undefined or null to object\");return Object.prototype.hasOwnProperty.call(Object(t),r)}),\"canParse\"in URL||(URL.canParse=function(t,r){try{return!!new URL(t,r)}catch(t){return!1}});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvcG9seWZpbGxzL3BvbHlmaWxsLW1vZHVsZS5qcyIsIm1hcHBpbmdzIjoiQUFBQSxtUUFBbVEsK0JBQStCLHVDQUF1QyxzQkFBc0IsNERBQTRELDZFQUE2RSx1Q0FBdUMsNEJBQTRCLG9FQUFvRSw4Q0FBOEMsZ0NBQWdDLDZCQUE2QixzQ0FBc0MsU0FBUyxFQUFFLGFBQWEsc0NBQXNDLFFBQVEsRUFBRSxFQUFFLHNEQUFzRCwwQ0FBMEMsc0JBQXNCLEdBQUcsRUFBRSxzREFBc0QsdUJBQXVCLCtEQUErRCw4Q0FBOEMsNkVBQTZFLHlEQUF5RCxnREFBZ0QsSUFBSSxxQkFBcUIsU0FBUyxVQUFVIiwic291cmNlcyI6WyIvaG9tZS9OaWNob2xhaS9Eb2N1bWVudHMvRGV2L2Jpb2hhemFyZC12ZngtMS9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3BvbHlmaWxscy9wb2x5ZmlsbC1tb2R1bGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ0cmltU3RhcnRcImluIFN0cmluZy5wcm90b3R5cGV8fChTdHJpbmcucHJvdG90eXBlLnRyaW1TdGFydD1TdHJpbmcucHJvdG90eXBlLnRyaW1MZWZ0KSxcInRyaW1FbmRcImluIFN0cmluZy5wcm90b3R5cGV8fChTdHJpbmcucHJvdG90eXBlLnRyaW1FbmQ9U3RyaW5nLnByb3RvdHlwZS50cmltUmlnaHQpLFwiZGVzY3JpcHRpb25cImluIFN5bWJvbC5wcm90b3R5cGV8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTeW1ib2wucHJvdG90eXBlLFwiZGVzY3JpcHRpb25cIix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciB0PS9cXCgoLiopXFwpLy5leGVjKHRoaXMudG9TdHJpbmcoKSk7cmV0dXJuIHQ/dFsxXTp2b2lkIDB9fSksQXJyYXkucHJvdG90eXBlLmZsYXR8fChBcnJheS5wcm90b3R5cGUuZmxhdD1mdW5jdGlvbih0LHIpe3JldHVybiByPXRoaXMuY29uY2F0LmFwcGx5KFtdLHRoaXMpLHQ+MSYmci5zb21lKEFycmF5LmlzQXJyYXkpP3IuZmxhdCh0LTEpOnJ9LEFycmF5LnByb3RvdHlwZS5mbGF0TWFwPWZ1bmN0aW9uKHQscil7cmV0dXJuIHRoaXMubWFwKHQscikuZmxhdCgpfSksUHJvbWlzZS5wcm90b3R5cGUuZmluYWxseXx8KFByb21pc2UucHJvdG90eXBlLmZpbmFsbHk9ZnVuY3Rpb24odCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdClyZXR1cm4gdGhpcy50aGVuKHQsdCk7dmFyIHI9dGhpcy5jb25zdHJ1Y3Rvcnx8UHJvbWlzZTtyZXR1cm4gdGhpcy50aGVuKGZ1bmN0aW9uKG4pe3JldHVybiByLnJlc29sdmUodCgpKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIG59KX0sZnVuY3Rpb24obil7cmV0dXJuIHIucmVzb2x2ZSh0KCkpLnRoZW4oZnVuY3Rpb24oKXt0aHJvdyBufSl9KX0pLE9iamVjdC5mcm9tRW50cmllc3x8KE9iamVjdC5mcm9tRW50cmllcz1mdW5jdGlvbih0KXtyZXR1cm4gQXJyYXkuZnJvbSh0KS5yZWR1Y2UoZnVuY3Rpb24odCxyKXtyZXR1cm4gdFtyWzBdXT1yWzFdLHR9LHt9KX0pLEFycmF5LnByb3RvdHlwZS5hdHx8KEFycmF5LnByb3RvdHlwZS5hdD1mdW5jdGlvbih0KXt2YXIgcj1NYXRoLnRydW5jKHQpfHwwO2lmKHI8MCYmKHIrPXRoaXMubGVuZ3RoKSwhKHI8MHx8cj49dGhpcy5sZW5ndGgpKXJldHVybiB0aGlzW3JdfSksT2JqZWN0Lmhhc093bnx8KE9iamVjdC5oYXNPd249ZnVuY3Rpb24odCxyKXtpZihudWxsPT10KXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3RcIik7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChPYmplY3QodCkscil9KSxcImNhblBhcnNlXCJpbiBVUkx8fChVUkwuY2FuUGFyc2U9ZnVuY3Rpb24odCxyKXt0cnl7cmV0dXJuISFuZXcgVVJMKHQscil9Y2F0Y2godCl7cmV0dXJuITF9fSk7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/build/polyfills/polyfill-module.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js":
|
||
/*!***********************************************************!*\
|
||
!*** ./node_modules/next/dist/build/polyfills/process.js ***!
|
||
\***********************************************************/
|
||
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nvar _global_process, _global_process1;\nmodule.exports = ((_global_process = __webpack_require__.g.process) == null ? void 0 : _global_process.env) && typeof ((_global_process1 = __webpack_require__.g.process) == null ? void 0 : _global_process1.env) === 'object' ? __webpack_require__.g.process : __webpack_require__(/*! next/dist/compiled/process */ \"(app-pages-browser)/./node_modules/next/dist/compiled/process/browser.js\");\n\n//# sourceMappingURL=process.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvcG9seWZpbGxzL3Byb2Nlc3MuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLHFDQUFxQyxxQkFBTSxpRkFBaUYscUJBQU0sa0VBQWtFLHFCQUFNLFdBQVcsbUJBQU8sQ0FBQyw0R0FBNEI7O0FBRXpQIiwic291cmNlcyI6WyIvaG9tZS9OaWNob2xhaS9Eb2N1bWVudHMvRGV2L2Jpb2hhemFyZC12ZngtMS9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3BvbHlmaWxscy9wcm9jZXNzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xudmFyIF9nbG9iYWxfcHJvY2VzcywgX2dsb2JhbF9wcm9jZXNzMTtcbm1vZHVsZS5leHBvcnRzID0gKChfZ2xvYmFsX3Byb2Nlc3MgPSBnbG9iYWwucHJvY2VzcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9nbG9iYWxfcHJvY2Vzcy5lbnYpICYmIHR5cGVvZiAoKF9nbG9iYWxfcHJvY2VzczEgPSBnbG9iYWwucHJvY2VzcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9nbG9iYWxfcHJvY2VzczEuZW52KSA9PT0gJ29iamVjdCcgPyBnbG9iYWwucHJvY2VzcyA6IHJlcXVpcmUoJ25leHQvZGlzdC9jb21waWxlZC9wcm9jZXNzJyk7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByb2Nlc3MuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/add-base-path.js":
|
||
/*!********************************************************!*\
|
||
!*** ./node_modules/next/dist/client/add-base-path.js ***!
|
||
\********************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"addBasePath\", ({\n enumerable: true,\n get: function() {\n return addBasePath;\n }\n}));\nconst _addpathprefix = __webpack_require__(/*! ../shared/lib/router/utils/add-path-prefix */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js\");\nconst _normalizetrailingslash = __webpack_require__(/*! ./normalize-trailing-slash */ \"(app-pages-browser)/./node_modules/next/dist/client/normalize-trailing-slash.js\");\nconst basePath = false || '';\nfunction addBasePath(path, required) {\n return (0, _normalizetrailingslash.normalizePathTrailingSlash)( false ? 0 : (0, _addpathprefix.addPathPrefix)(path, basePath));\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=add-base-path.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2FkZC1iYXNlLXBhdGguanMiLCJtYXBwaW5ncyI6Ijs7OzsrQ0FLZ0JBOzs7ZUFBQUE7OzsyQ0FMYztvREFDYTtBQUUzQyxNQUFNQyxXQUFZQyxNQUFrQyxJQUFlO0FBRTVELFNBQVNGLFlBQVlLLElBQVksRUFBRUMsUUFBa0I7SUFDMUQsT0FBT0MsQ0FBQUEsR0FBQUEsd0JBQUFBLDBCQUFBQSxFQUNMTCxNQUF1REksR0FDbkRELENBQUlBLEdBQ0pJLENBQUFBLEdBQUFBLGVBQUFBLGFBQUFBLEVBQWNKLE1BQU1KO0FBRTVCIiwic291cmNlcyI6WyIvaG9tZS9OaWNob2xhaS9Eb2N1bWVudHMvc3JjL2NsaWVudC9hZGQtYmFzZS1wYXRoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFkZFBhdGhQcmVmaXggfSBmcm9tICcuLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9hZGQtcGF0aC1wcmVmaXgnXG5pbXBvcnQgeyBub3JtYWxpemVQYXRoVHJhaWxpbmdTbGFzaCB9IGZyb20gJy4vbm9ybWFsaXplLXRyYWlsaW5nLXNsYXNoJ1xuXG5jb25zdCBiYXNlUGF0aCA9IChwcm9jZXNzLmVudi5fX05FWFRfUk9VVEVSX0JBU0VQQVRIIGFzIHN0cmluZykgfHwgJydcblxuZXhwb3J0IGZ1bmN0aW9uIGFkZEJhc2VQYXRoKHBhdGg6IHN0cmluZywgcmVxdWlyZWQ/OiBib29sZWFuKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZVBhdGhUcmFpbGluZ1NsYXNoKFxuICAgIHByb2Nlc3MuZW52Ll9fTkVYVF9NQU5VQUxfQ0xJRU5UX0JBU0VfUEFUSCAmJiAhcmVxdWlyZWRcbiAgICAgID8gcGF0aFxuICAgICAgOiBhZGRQYXRoUHJlZml4KHBhdGgsIGJhc2VQYXRoKVxuICApXG59XG4iXSwibmFtZXMiOlsiYWRkQmFzZVBhdGgiLCJiYXNlUGF0aCIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfUk9VVEVSX0JBU0VQQVRIIiwicGF0aCIsInJlcXVpcmVkIiwibm9ybWFsaXplUGF0aFRyYWlsaW5nU2xhc2giLCJfX05FWFRfTUFOVUFMX0NMSUVOVF9CQVNFX1BBVEgiLCJhZGRQYXRoUHJlZml4Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/add-base-path.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/app-bootstrap.js":
|
||
/*!********************************************************!*\
|
||
!*** ./node_modules/next/dist/client/app-bootstrap.js ***!
|
||
\********************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * Before starting the Next.js runtime and requiring any module, we need to make\n * sure the following scripts are executed in the correct order:\n * - Polyfills\n * - next/script with `beforeInteractive` strategy\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"appBootstrap\", ({\n enumerable: true,\n get: function() {\n return appBootstrap;\n }\n}));\nconst version = \"15.4.6\";\nwindow.next = {\n version,\n appDir: true\n};\nfunction loadScriptsInSequence(scripts, hydrate) {\n if (!scripts || !scripts.length) {\n return hydrate();\n }\n return scripts.reduce((promise, param)=>{\n let [src, props] = param;\n return promise.then(()=>{\n return new Promise((resolve, reject)=>{\n const el = document.createElement('script');\n if (props) {\n for(const key in props){\n if (key !== 'children') {\n el.setAttribute(key, props[key]);\n }\n }\n }\n if (src) {\n el.src = src;\n el.onload = ()=>resolve();\n el.onerror = reject;\n } else if (props) {\n el.innerHTML = props.children;\n setTimeout(resolve);\n }\n document.head.appendChild(el);\n });\n });\n }, Promise.resolve()).catch((err)=>{\n console.error(err);\n // Still try to hydrate even if there's an error.\n }).then(()=>{\n hydrate();\n });\n}\nfunction appBootstrap(hydrate) {\n loadScriptsInSequence(self.__next_s, ()=>{\n // If the static shell is being debugged, skip hydration if the\n // `__nextppronly` query is present. This is only enabled when the\n // environment variable `__NEXT_EXPERIMENTAL_STATIC_SHELL_DEBUGGING` is\n // set to `1`. Otherwise the following is optimized out.\n if (false) {}\n hydrate();\n });\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=app-bootstrap.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2FwcC1ib290c3RyYXAuanMiLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0NBS0M7Ozs7Z0RBcURlQTs7O2VBQUFBOzs7QUFuRGhCLE1BQU1DLFVBQVVDLFFBQVFDO0FBRXhCRSxPQUFPQyxJQUFJLEdBQUc7SUFDWkw7SUFDQU0sUUFBUTtBQUNWO0FBRUEsU0FBU0Msc0JBQ1BDLE9BQXdELEVBQ3hEQyxPQUFtQjtJQUVuQixJQUFJLENBQUNELFdBQVcsQ0FBQ0EsUUFBUUUsTUFBTSxFQUFFO1FBQy9CLE9BQU9EO0lBQ1Q7SUFFQSxPQUFPRCxRQUNKRyxNQUFNLENBQUMsQ0FBQ0MsU0FBQUE7WUFBUyxDQUFDQyxLQUFLQyxNQUFNO1FBQzVCLE9BQU9GLFFBQVFHLElBQUksQ0FBQztZQUNsQixPQUFPLElBQUlDLFFBQWMsQ0FBQ0MsU0FBU0M7Z0JBQ2pDLE1BQU1DLEtBQUtDLFNBQVNDLGFBQWEsQ0FBQztnQkFFbEMsSUFBSVAsT0FBTztvQkFDVCxJQUFLLE1BQU1RLE9BQU9SLE1BQU87d0JBQ3ZCLElBQUlRLFFBQVEsWUFBWTs0QkFDdEJILEdBQUdJLFlBQVksQ0FBQ0QsS0FBS1IsS0FBSyxDQUFDUSxJQUFJO3dCQUNqQztvQkFDRjtnQkFDRjtnQkFFQSxJQUFJVCxLQUFLO29CQUNQTSxHQUFHTixHQUFHLEdBQUdBO29CQUNUTSxHQUFHSyxNQUFNLEdBQUcsSUFBTVA7b0JBQ2xCRSxHQUFHTSxPQUFPLEdBQUdQO2dCQUNmLE9BQU8sSUFBSUosT0FBTztvQkFDaEJLLEdBQUdPLFNBQVMsR0FBR1osTUFBTWEsUUFBUTtvQkFDN0JDLFdBQVdYO2dCQUNiO2dCQUVBRyxTQUFTUyxJQUFJLENBQUNDLFdBQVcsQ0FBQ1g7WUFDNUI7UUFDRjtJQUNGLEdBQUdILFFBQVFDLE9BQU8sSUFDakJjLEtBQUssQ0FBQyxDQUFDQztRQUNOQyxRQUFRQyxLQUFLLENBQUNGO0lBQ2QsaURBQWlEO0lBQ25ELEdBQ0NqQixJQUFJLENBQUM7UUFDSk47SUFDRjtBQUNKO0FBRU8sU0FBU1YsYUFBYVUsT0FBbUI7SUFDOUNGLHNCQUF1QjRCLEtBQWFDLFFBQVEsRUFBRTtRQUM1QywrREFBK0Q7UUFDL0Qsa0VBQWtFO1FBQ2xFLHVFQUF1RTtRQUN2RSx3REFBd0Q7UUFDeEQsSUFBSW5DLEtBQThELEVBQUUsRUFXbkU7UUFFRFE7SUFDRjtBQUNGIiwic291cmNlcyI6WyIvaG9tZS9OaWNob2xhaS9Eb2N1bWVudHMvc3JjL2NsaWVudC9hcHAtYm9vdHN0cmFwLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQmVmb3JlIHN0YXJ0aW5nIHRoZSBOZXh0LmpzIHJ1bnRpbWUgYW5kIHJlcXVpcmluZyBhbnkgbW9kdWxlLCB3ZSBuZWVkIHRvIG1ha2VcbiAqIHN1cmUgdGhlIGZvbGxvd2luZyBzY3JpcHRzIGFyZSBleGVjdXRlZCBpbiB0aGUgY29ycmVjdCBvcmRlcjpcbiAqIC0gUG9seWZpbGxzXG4gKiAtIG5leHQvc2NyaXB0IHdpdGggYGJlZm9yZUludGVyYWN0aXZlYCBzdHJhdGVneVxuICovXG5cbmNvbnN0IHZlcnNpb24gPSBwcm9jZXNzLmVudi5fX05FWFRfVkVSU0lPTlxuXG53aW5kb3cubmV4dCA9IHtcbiAgdmVyc2lvbixcbiAgYXBwRGlyOiB0cnVlLFxufVxuXG5mdW5jdGlvbiBsb2FkU2NyaXB0c0luU2VxdWVuY2UoXG4gIHNjcmlwdHM6IFtzcmM6IHN0cmluZywgcHJvcHM6IHsgW3Byb3A6IHN0cmluZ106IGFueSB9XVtdLFxuICBoeWRyYXRlOiAoKSA9PiB2b2lkXG4pIHtcbiAgaWYgKCFzY3JpcHRzIHx8ICFzY3JpcHRzLmxlbmd0aCkge1xuICAgIHJldHVybiBoeWRyYXRlKClcbiAgfVxuXG4gIHJldHVybiBzY3JpcHRzXG4gICAgLnJlZHVjZSgocHJvbWlzZSwgW3NyYywgcHJvcHNdKSA9PiB7XG4gICAgICByZXR1cm4gcHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpXG5cbiAgICAgICAgICBpZiAocHJvcHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHByb3BzKSB7XG4gICAgICAgICAgICAgIGlmIChrZXkgIT09ICdjaGlsZHJlbicpIHtcbiAgICAgICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoa2V5LCBwcm9wc1trZXldKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNyYykge1xuICAgICAgICAgICAgZWwuc3JjID0gc3JjXG4gICAgICAgICAgICBlbC5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKClcbiAgICAgICAgICAgIGVsLm9uZXJyb3IgPSByZWplY3RcbiAgICAgICAgICB9IGVsc2UgaWYgKHByb3BzKSB7XG4gICAgICAgICAgICBlbC5pbm5lckhUTUwgPSBwcm9wcy5jaGlsZHJlblxuICAgICAgICAgICAgc2V0VGltZW91dChyZXNvbHZlKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoZWwpXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH0sIFByb21pc2UucmVzb2x2ZSgpKVxuICAgIC5jYXRjaCgoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgICAvLyBTdGlsbCB0cnkgdG8gaHlkcmF0ZSBldmVuIGlmIHRoZXJlJ3MgYW4gZXJyb3IuXG4gICAgfSlcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICBoeWRyYXRlKClcbiAgICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwQm9vdHN0cmFwKGh5ZHJhdGU6ICgpID0+IHZvaWQpIHtcbiAgbG9hZFNjcmlwdHNJblNlcXVlbmNlKChzZWxmIGFzIGFueSkuX19uZXh0X3MsICgpID0+IHtcbiAgICAvLyBJZiB0aGUgc3RhdGljIHNoZWxsIGlzIGJlaW5nIGRlYnVnZ2VkLCBza2lwIGh5ZHJhdGlvbiBpZiB0aGVcbiAgICAvLyBgX19uZXh0cHByb25seWAgcXVlcnkgaXMgcHJlc2VudC4gVGhpcyBpcyBvbmx5IGVuYWJsZWQgd2hlbiB0aGVcbiAgICAvLyBlbnZpcm9ubWVudCB2YXJpYWJsZSBgX19ORVhUX0VYUEVSSU1FTlRBTF9TVEFUSUNfU0hFTExfREVCVUdHSU5HYCBpc1xuICAgIC8vIHNldCB0byBgMWAuIE90aGVyd2lzZSB0aGUgZm9sbG93aW5nIGlzIG9wdGltaXplZCBvdXQuXG4gICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9FWFBFUklNRU5UQUxfU1RBVElDX1NIRUxMX0RFQlVHR0lORyA9PT0gJzEnKSB7XG4gICAgICBjb25zdCBzZWFyY2ggPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpXG4gICAgICBpZiAoXG4gICAgICAgIHNlYXJjaC5nZXQoJ19fbmV4dHBwcm9ubHknKSA9PT0gJ2ZhbGxiYWNrJyB8fFxuICAgICAgICBzZWFyY2guZ2V0KCdfX25leHRwcHJvbmx5JykgPT09ICcxJ1xuICAgICAgKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgU2tpcHBpbmcgaHlkcmF0aW9uIGR1ZSB0byBfX25leHRwcHJvbmx5PSR7c2VhcmNoLmdldCgnX19uZXh0cHByb25seScpfWBcbiAgICAgICAgKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBoeWRyYXRlKClcbiAgfSlcbn1cbiJdLCJuYW1lcyI6WyJhcHBCb290c3RyYXAiLCJ2ZXJzaW9uIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9WRVJTSU9OIiwid2luZG93IiwibmV4dCIsImFwcERpciIsImxvYWRTY3JpcHRzSW5TZXF1ZW5jZSIsInNjcmlwdHMiLCJoeWRyYXRlIiwibGVuZ3RoIiwicmVkdWNlIiwicHJvbWlzZSIsInNyYyIsInByb3BzIiwidGhlbiIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZWwiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJrZXkiLCJzZXRBdHRyaWJ1dGUiLCJvbmxvYWQiLCJvbmVycm9yIiwiaW5uZXJIVE1MIiwiY2hpbGRyZW4iLCJzZXRUaW1lb3V0IiwiaGVhZCIsImFwcGVuZENoaWxkIiwiY2F0Y2giLCJlcnIiLCJjb25zb2xlIiwiZXJyb3IiLCJzZWxmIiwiX19uZXh0X3MiLCJfX05FWFRfRVhQRVJJTUVOVEFMX1NUQVRJQ19TSEVMTF9ERUJVR0dJTkciLCJzZWFyY2giLCJVUkxTZWFyY2hQYXJhbXMiLCJsb2NhdGlvbiIsImdldCIsIndhcm4iXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/app-bootstrap.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/app-build-id.js":
|
||
/*!*******************************************************!*\
|
||
!*** ./node_modules/next/dist/client/app-build-id.js ***!
|
||
\*******************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// This gets assigned as a side-effect during app initialization. Because it\n// represents the build used to create the JS bundle, it should never change\n// after being set, so we store it in a global variable.\n//\n// When performing RSC requests, if the incoming data has a different build ID,\n// we perform an MPA navigation/refresh to load the updated build and ensure\n// that the client and server in sync.\n// Starts as an empty string. In practice, because setAppBuildId is called\n// during initialization before hydration starts, this will always get\n// reassigned to the actual build ID before it's ever needed by a navigation.\n// If for some reasons it didn't, due to a bug or race condition, then on\n// navigation the build comparision would fail and trigger an MPA navigation.\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n getAppBuildId: function() {\n return getAppBuildId;\n },\n setAppBuildId: function() {\n return setAppBuildId;\n }\n});\nlet globalBuildId = '';\nfunction setAppBuildId(buildId) {\n globalBuildId = buildId;\n}\nfunction getAppBuildId() {\n return globalBuildId;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=app-build-id.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2FwcC1idWlsZC1pZC5qcyIsIm1hcHBpbmdzIjoiQUFBQSw0RUFBNEU7QUFDNUUsNEVBQTRFO0FBQzVFLHdEQUF3RDtBQUN4RCxFQUFFO0FBQ0YsK0VBQStFO0FBQy9FLDRFQUE0RTtBQUM1RSxzQ0FBc0M7QUFFdEMsMEVBQTBFO0FBQzFFLHNFQUFzRTtBQUN0RSw2RUFBNkU7QUFDN0UseUVBQXlFO0FBQ3pFLDZFQUE2RTs7Ozs7Ozs7Ozs7OztJQU83REEsYUFBYTtlQUFiQTs7SUFKQUMsYUFBYTtlQUFiQTs7O0FBRmhCLElBQUlDLGdCQUF3QjtBQUVyQixTQUFTRCxjQUFjRSxPQUFlO0lBQzNDRCxnQkFBZ0JDO0FBQ2xCO0FBRU8sU0FBU0g7SUFDZCxPQUFPRTtBQUNUIiwic291cmNlcyI6WyIvaG9tZS9OaWNob2xhaS9Eb2N1bWVudHMvc3JjL2NsaWVudC9hcHAtYnVpbGQtaWQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyBnZXRzIGFzc2lnbmVkIGFzIGEgc2lkZS1lZmZlY3QgZHVyaW5nIGFwcCBpbml0aWFsaXphdGlvbi4gQmVjYXVzZSBpdFxuLy8gcmVwcmVzZW50cyB0aGUgYnVpbGQgdXNlZCB0byBjcmVhdGUgdGhlIEpTIGJ1bmRsZSwgaXQgc2hvdWxkIG5ldmVyIGNoYW5nZVxuLy8gYWZ0ZXIgYmVpbmcgc2V0LCBzbyB3ZSBzdG9yZSBpdCBpbiBhIGdsb2JhbCB2YXJpYWJsZS5cbi8vXG4vLyBXaGVuIHBlcmZvcm1pbmcgUlNDIHJlcXVlc3RzLCBpZiB0aGUgaW5jb21pbmcgZGF0YSBoYXMgYSBkaWZmZXJlbnQgYnVpbGQgSUQsXG4vLyB3ZSBwZXJmb3JtIGFuIE1QQSBuYXZpZ2F0aW9uL3JlZnJlc2ggdG8gbG9hZCB0aGUgdXBkYXRlZCBidWlsZCBhbmQgZW5zdXJlXG4vLyB0aGF0IHRoZSBjbGllbnQgYW5kIHNlcnZlciBpbiBzeW5jLlxuXG4vLyBTdGFydHMgYXMgYW4gZW1wdHkgc3RyaW5nLiBJbiBwcmFjdGljZSwgYmVjYXVzZSBzZXRBcHBCdWlsZElkIGlzIGNhbGxlZFxuLy8gZHVyaW5nIGluaXRpYWxpemF0aW9uIGJlZm9yZSBoeWRyYXRpb24gc3RhcnRzLCB0aGlzIHdpbGwgYWx3YXlzIGdldFxuLy8gcmVhc3NpZ25lZCB0byB0aGUgYWN0dWFsIGJ1aWxkIElEIGJlZm9yZSBpdCdzIGV2ZXIgbmVlZGVkIGJ5IGEgbmF2aWdhdGlvbi5cbi8vIElmIGZvciBzb21lIHJlYXNvbnMgaXQgZGlkbid0LCBkdWUgdG8gYSBidWcgb3IgcmFjZSBjb25kaXRpb24sIHRoZW4gb25cbi8vIG5hdmlnYXRpb24gdGhlIGJ1aWxkIGNvbXBhcmlzaW9uIHdvdWxkIGZhaWwgYW5kIHRyaWdnZXIgYW4gTVBBIG5hdmlnYXRpb24uXG5sZXQgZ2xvYmFsQnVpbGRJZDogc3RyaW5nID0gJydcblxuZXhwb3J0IGZ1bmN0aW9uIHNldEFwcEJ1aWxkSWQoYnVpbGRJZDogc3RyaW5nKSB7XG4gIGdsb2JhbEJ1aWxkSWQgPSBidWlsZElkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBcHBCdWlsZElkKCk6IHN0cmluZyB7XG4gIHJldHVybiBnbG9iYWxCdWlsZElkXG59XG4iXSwibmFtZXMiOlsiZ2V0QXBwQnVpbGRJZCIsInNldEFwcEJ1aWxkSWQiLCJnbG9iYWxCdWlsZElkIiwiYnVpbGRJZCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/app-build-id.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/app-call-server.js":
|
||
/*!**********************************************************!*\
|
||
!*** ./node_modules/next/dist/client/app-call-server.js ***!
|
||
\**********************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"callServer\", ({\n enumerable: true,\n get: function() {\n return callServer;\n }\n}));\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\nconst _routerreducertypes = __webpack_require__(/*! ./components/router-reducer/router-reducer-types */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst _useactionqueue = __webpack_require__(/*! ./components/use-action-queue */ \"(app-pages-browser)/./node_modules/next/dist/client/components/use-action-queue.js\");\nasync function callServer(actionId, actionArgs) {\n return new Promise((resolve, reject)=>{\n (0, _react.startTransition)(()=>{\n (0, _useactionqueue.dispatchAppRouterAction)({\n type: _routerreducertypes.ACTION_SERVER_ACTION,\n actionId,\n actionArgs,\n resolve,\n reject\n });\n });\n });\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=app-call-server.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2FwcC1jYWxsLXNlcnZlci5qcyIsIm1hcHBpbmdzIjoiOzs7OzhDQUlzQkE7OztlQUFBQTs7O21DQUpVO2dEQUNLOzRDQUNHO0FBRWpDLGVBQWVBLFdBQVdDLFFBQWdCLEVBQUVDLFVBQWlCO0lBQ2xFLE9BQU8sSUFBSUMsUUFBUSxDQUFDQyxTQUFTQztRQUMzQkMsQ0FBQUEsR0FBQUEsT0FBQUEsZUFBQUEsRUFBZ0I7WUFDZEMsQ0FBQUEsR0FBQUEsZ0JBQUFBLHVCQUFBQSxFQUF3QjtnQkFDdEJDLE1BQU1DLG9CQUFBQSxvQkFBb0I7Z0JBQzFCUjtnQkFDQUM7Z0JBQ0FFO2dCQUNBQztZQUNGO1FBQ0Y7SUFDRjtBQUNGIiwic291cmNlcyI6WyIvaG9tZS9OaWNob2xhaS9Eb2N1bWVudHMvc3JjL2NsaWVudC9hcHAtY2FsbC1zZXJ2ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3RhcnRUcmFuc2l0aW9uIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBQ1RJT05fU0VSVkVSX0FDVElPTiB9IGZyb20gJy4vY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9yb3V0ZXItcmVkdWNlci10eXBlcydcbmltcG9ydCB7IGRpc3BhdGNoQXBwUm91dGVyQWN0aW9uIH0gZnJvbSAnLi9jb21wb25lbnRzL3VzZS1hY3Rpb24tcXVldWUnXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjYWxsU2VydmVyKGFjdGlvbklkOiBzdHJpbmcsIGFjdGlvbkFyZ3M6IGFueVtdKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgc3RhcnRUcmFuc2l0aW9uKCgpID0+IHtcbiAgICAgIGRpc3BhdGNoQXBwUm91dGVyQWN0aW9uKHtcbiAgICAgICAgdHlwZTogQUNUSU9OX1NFUlZFUl9BQ1RJT04sXG4gICAgICAgIGFjdGlvbklkLFxuICAgICAgICBhY3Rpb25BcmdzLFxuICAgICAgICByZXNvbHZlLFxuICAgICAgICByZWplY3QsXG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG59XG4iXSwibmFtZXMiOlsiY2FsbFNlcnZlciIsImFjdGlvbklkIiwiYWN0aW9uQXJncyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0Iiwic3RhcnRUcmFuc2l0aW9uIiwiZGlzcGF0Y2hBcHBSb3V0ZXJBY3Rpb24iLCJ0eXBlIiwiQUNUSU9OX1NFUlZFUl9BQ1RJT04iXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/app-call-server.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/app-find-source-map-url.js":
|
||
/*!******************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/app-find-source-map-url.js ***!
|
||
\******************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"findSourceMapURL\", ({\n enumerable: true,\n get: function() {\n return findSourceMapURL;\n }\n}));\nconst basePath = false || '';\nconst pathname = \"\" + basePath + \"/__nextjs_source-map\";\nconst findSourceMapURL = true ? function findSourceMapURL(filename) {\n if (filename === '') {\n return null;\n }\n if (filename.startsWith(document.location.origin) && filename.includes('/_next/static')) {\n // This is a request for a client chunk. This can only happen when\n // using Turbopack. In this case, since we control how those source\n // maps are generated, we can safely assume that the sourceMappingURL\n // is relative to the filename, with an added `.map` extension. The\n // browser can just request this file, and it gets served through the\n // normal dev server, without the need to route this through\n // the `/__nextjs_source-map` dev middleware.\n return \"\" + filename + \".map\";\n }\n const url = new URL(pathname, document.location.origin);\n url.searchParams.set('filename', filename);\n return url.href;\n} : 0;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=app-find-source-map-url.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2FwcC1maW5kLXNvdXJjZS1tYXAtdXJsLmpzIiwibWFwcGluZ3MiOiI7Ozs7b0RBR2FBOzs7ZUFBQUE7OztBQUhiLE1BQU1DLFdBQVdDLE1BQWtDLElBQUk7QUFDdkQsTUFBTUcsV0FBWSxLQUFFSixXQUFTO0FBRXRCLE1BQU1ELG1CQUNYRSxLQUFvQixHQUNoQixTQUFTRixpQkFBaUJPLFFBQWdCO0lBQ3hDLElBQUlBLGFBQWEsSUFBSTtRQUNuQixPQUFPO0lBQ1Q7SUFFQSxJQUNFQSxTQUFTQyxVQUFVLENBQUNDLFNBQVNDLFFBQVEsQ0FBQ0MsTUFBTSxLQUM1Q0osU0FBU0ssUUFBUSxDQUFDLGtCQUNsQjtRQUNBLGtFQUFrRTtRQUNsRSxtRUFBbUU7UUFDbkUscUVBQXFFO1FBQ3JFLG1FQUFtRTtRQUNuRSxxRUFBcUU7UUFDckUsNERBQTREO1FBQzVELDZDQUE2QztRQUM3QyxPQUFRLEtBQUVMLFdBQVM7SUFDckI7SUFFQSxNQUFNTSxNQUFNLElBQUlDLElBQUlULFVBQVVJLFNBQVNDLFFBQVEsQ0FBQ0MsTUFBTTtJQUN0REUsSUFBSUUsWUFBWSxDQUFDQyxHQUFHLENBQUMsWUFBWVQ7SUFFakMsT0FBT00sSUFBSUksSUFBSTtBQUNqQixJQUNBQyxDQUFTQSIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvRG9jdW1lbnRzL3NyYy9jbGllbnQvYXBwLWZpbmQtc291cmNlLW1hcC11cmwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgYmFzZVBhdGggPSBwcm9jZXNzLmVudi5fX05FWFRfUk9VVEVSX0JBU0VQQVRIIHx8ICcnXG5jb25zdCBwYXRobmFtZSA9IGAke2Jhc2VQYXRofS9fX25leHRqc19zb3VyY2UtbWFwYFxuXG5leHBvcnQgY29uc3QgZmluZFNvdXJjZU1hcFVSTCA9XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnXG4gICAgPyBmdW5jdGlvbiBmaW5kU291cmNlTWFwVVJMKGZpbGVuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lID09PSAnJykge1xuICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgZmlsZW5hbWUuc3RhcnRzV2l0aChkb2N1bWVudC5sb2NhdGlvbi5vcmlnaW4pICYmXG4gICAgICAgICAgZmlsZW5hbWUuaW5jbHVkZXMoJy9fbmV4dC9zdGF0aWMnKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGEgcmVxdWVzdCBmb3IgYSBjbGllbnQgY2h1bmsuIFRoaXMgY2FuIG9ubHkgaGFwcGVuIHdoZW5cbiAgICAgICAgICAvLyB1c2luZyBUdXJib3BhY2suIEluIHRoaXMgY2FzZSwgc2luY2Ugd2UgY29udHJvbCBob3cgdGhvc2Ugc291cmNlXG4gICAgICAgICAgLy8gbWFwcyBhcmUgZ2VuZXJhdGVkLCB3ZSBjYW4gc2FmZWx5IGFzc3VtZSB0aGF0IHRoZSBzb3VyY2VNYXBwaW5nVVJMXG4gICAgICAgICAgLy8gaXMgcmVsYXRpdmUgdG8gdGhlIGZpbGVuYW1lLCB3aXRoIGFuIGFkZGVkIGAubWFwYCBleHRlbnNpb24uIFRoZVxuICAgICAgICAgIC8vIGJyb3dzZXIgY2FuIGp1c3QgcmVxdWVzdCB0aGlzIGZpbGUsIGFuZCBpdCBnZXRzIHNlcnZlZCB0aHJvdWdoIHRoZVxuICAgICAgICAgIC8vIG5vcm1hbCBkZXYgc2VydmVyLCB3aXRob3V0IHRoZSBuZWVkIHRvIHJvdXRlIHRoaXMgdGhyb3VnaFxuICAgICAgICAgIC8vIHRoZSBgL19fbmV4dGpzX3NvdXJjZS1tYXBgIGRldiBtaWRkbGV3YXJlLlxuICAgICAgICAgIHJldHVybiBgJHtmaWxlbmFtZX0ubWFwYFxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChwYXRobmFtZSwgZG9jdW1lbnQubG9jYXRpb24ub3JpZ2luKVxuICAgICAgICB1cmwuc2VhcmNoUGFyYW1zLnNldCgnZmlsZW5hbWUnLCBmaWxlbmFtZSlcblxuICAgICAgICByZXR1cm4gdXJsLmhyZWZcbiAgICAgIH1cbiAgICA6IHVuZGVmaW5lZFxuIl0sIm5hbWVzIjpbImZpbmRTb3VyY2VNYXBVUkwiLCJiYXNlUGF0aCIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfUk9VVEVSX0JBU0VQQVRIIiwicGF0aG5hbWUiLCJOT0RFX0VOViIsImZpbGVuYW1lIiwic3RhcnRzV2l0aCIsImRvY3VtZW50IiwibG9jYXRpb24iLCJvcmlnaW4iLCJpbmNsdWRlcyIsInVybCIsIlVSTCIsInNlYXJjaFBhcmFtcyIsInNldCIsImhyZWYiLCJ1bmRlZmluZWQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/app-find-source-map-url.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/app-globals.js":
|
||
/*!******************************************************!*\
|
||
!*** ./node_modules/next/dist/client/app-globals.js ***!
|
||
\******************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// imports polyfill from `@next/polyfill-module` after build.\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n__webpack_require__(/*! ../build/polyfills/polyfill-module */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/polyfill-module.js\");\n// Only setup devtools in development\nif (true) {\n __webpack_require__(/*! ../next-devtools/userspace/app/app-dev-overlay-setup */ \"(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/app-dev-overlay-setup.js\");\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=app-globals.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2FwcC1nbG9iYWxzLmpzIiwibWFwcGluZ3MiOiJBQUFBLDZEQUE2RDs7Ozs7b0JBQ3REO0FBRVAscUNBQXFDO0FBQ3JDLElBQUlBLElBQW9CLEVBQW1CO0lBQ3pDRyxtQkFBT0EsQ0FBQywrSkFBc0Q7QUFDaEUiLCJzb3VyY2VzIjpbIi9ob21lL05pY2hvbGFpL0RvY3VtZW50cy9zcmMvY2xpZW50L2FwcC1nbG9iYWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGltcG9ydHMgcG9seWZpbGwgZnJvbSBgQG5leHQvcG9seWZpbGwtbW9kdWxlYCBhZnRlciBidWlsZC5cbmltcG9ydCAnLi4vYnVpbGQvcG9seWZpbGxzL3BvbHlmaWxsLW1vZHVsZSdcblxuLy8gT25seSBzZXR1cCBkZXZ0b29scyBpbiBkZXZlbG9wbWVudFxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgcmVxdWlyZSgnLi4vbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL2FwcC1kZXYtb3ZlcmxheS1zZXR1cCcpIGFzIHR5cGVvZiBpbXBvcnQoJy4uL25leHQtZGV2dG9vbHMvdXNlcnNwYWNlL2FwcC9hcHAtZGV2LW92ZXJsYXktc2V0dXAnKVxufVxuIl0sIm5hbWVzIjpbInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsInJlcXVpcmUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/app-globals.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/app-index.js":
|
||
/*!****************************************************!*\
|
||
!*** ./node_modules/next/dist/client/app-index.js ***!
|
||
\****************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"hydrate\", ({\n enumerable: true,\n get: function() {\n return hydrate;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\n__webpack_require__(/*! ./app-globals */ \"(app-pages-browser)/./node_modules/next/dist/client/app-globals.js\");\nconst _client = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react-dom/client */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react-dom/client.js\"));\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _client1 = __webpack_require__(/*! react-server-dom-webpack/client */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react-server-dom-webpack/client.browser.js\");\nconst _headmanagercontextsharedruntime = __webpack_require__(/*! ../shared/lib/head-manager-context.shared-runtime */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js\");\nconst _onrecoverableerror = __webpack_require__(/*! ./react-client-callbacks/on-recoverable-error */ \"(app-pages-browser)/./node_modules/next/dist/client/react-client-callbacks/on-recoverable-error.js\");\nconst _errorboundarycallbacks = __webpack_require__(/*! ./react-client-callbacks/error-boundary-callbacks */ \"(app-pages-browser)/./node_modules/next/dist/client/react-client-callbacks/error-boundary-callbacks.js\");\nconst _appcallserver = __webpack_require__(/*! ./app-call-server */ \"(app-pages-browser)/./node_modules/next/dist/client/app-call-server.js\");\nconst _appfindsourcemapurl = __webpack_require__(/*! ./app-find-source-map-url */ \"(app-pages-browser)/./node_modules/next/dist/client/app-find-source-map-url.js\");\nconst _approuterinstance = __webpack_require__(/*! ./components/app-router-instance */ \"(app-pages-browser)/./node_modules/next/dist/client/components/app-router-instance.js\");\nconst _approuter = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./components/app-router */ \"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js\"));\nconst _createinitialrouterstate = __webpack_require__(/*! ./components/router-reducer/create-initial-router-state */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-initial-router-state.js\");\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../shared/lib/app-router-context.shared-runtime */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js\");\nconst _appbuildid = __webpack_require__(/*! ./app-build-id */ \"(app-pages-browser)/./node_modules/next/dist/client/app-build-id.js\");\nconst _isbot = __webpack_require__(/*! ../shared/lib/router/utils/is-bot */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/is-bot.js\");\n/// <reference types=\"react-dom/experimental\" />\nconst createFromReadableStream = _client1.createFromReadableStream;\nconst appElement = document;\nconst encoder = new TextEncoder();\nlet initialServerDataBuffer = undefined;\nlet initialServerDataWriter = undefined;\nlet initialServerDataLoaded = false;\nlet initialServerDataFlushed = false;\nlet initialFormStateData = null;\nfunction nextServerDataCallback(seg) {\n if (seg[0] === 0) {\n initialServerDataBuffer = [];\n } else if (seg[0] === 1) {\n if (!initialServerDataBuffer) throw Object.defineProperty(new Error('Unexpected server data: missing bootstrap script.'), \"__NEXT_ERROR_CODE\", {\n value: \"E18\",\n enumerable: false,\n configurable: true\n });\n if (initialServerDataWriter) {\n initialServerDataWriter.enqueue(encoder.encode(seg[1]));\n } else {\n initialServerDataBuffer.push(seg[1]);\n }\n } else if (seg[0] === 2) {\n initialFormStateData = seg[1];\n } else if (seg[0] === 3) {\n if (!initialServerDataBuffer) throw Object.defineProperty(new Error('Unexpected server data: missing bootstrap script.'), \"__NEXT_ERROR_CODE\", {\n value: \"E18\",\n enumerable: false,\n configurable: true\n });\n // Decode the base64 string back to binary data.\n const binaryString = atob(seg[1]);\n const decodedChunk = new Uint8Array(binaryString.length);\n for(var i = 0; i < binaryString.length; i++){\n decodedChunk[i] = binaryString.charCodeAt(i);\n }\n if (initialServerDataWriter) {\n initialServerDataWriter.enqueue(decodedChunk);\n } else {\n initialServerDataBuffer.push(decodedChunk);\n }\n }\n}\nfunction isStreamErrorOrUnfinished(ctr) {\n // If `desiredSize` is null, it means the stream is closed or errored. If it is lower than 0, the stream is still unfinished.\n return ctr.desiredSize === null || ctr.desiredSize < 0;\n}\n// There might be race conditions between `nextServerDataRegisterWriter` and\n// `DOMContentLoaded`. The former will be called when React starts to hydrate\n// the root, the latter will be called when the DOM is fully loaded.\n// For streaming, the former is called first due to partial hydration.\n// For non-streaming, the latter can be called first.\n// Hence, we use two variables `initialServerDataLoaded` and\n// `initialServerDataFlushed` to make sure the writer will be closed and\n// `initialServerDataBuffer` will be cleared in the right time.\nfunction nextServerDataRegisterWriter(ctr) {\n if (initialServerDataBuffer) {\n initialServerDataBuffer.forEach((val)=>{\n ctr.enqueue(typeof val === 'string' ? encoder.encode(val) : val);\n });\n if (initialServerDataLoaded && !initialServerDataFlushed) {\n if (isStreamErrorOrUnfinished(ctr)) {\n ctr.error(Object.defineProperty(new Error('The connection to the page was unexpectedly closed, possibly due to the stop button being clicked, loss of Wi-Fi, or an unstable internet connection.'), \"__NEXT_ERROR_CODE\", {\n value: \"E117\",\n enumerable: false,\n configurable: true\n }));\n } else {\n ctr.close();\n }\n initialServerDataFlushed = true;\n initialServerDataBuffer = undefined;\n }\n }\n initialServerDataWriter = ctr;\n}\n// When `DOMContentLoaded`, we can close all pending writers to finish hydration.\nconst DOMContentLoaded = function() {\n if (initialServerDataWriter && !initialServerDataFlushed) {\n initialServerDataWriter.close();\n initialServerDataFlushed = true;\n initialServerDataBuffer = undefined;\n }\n initialServerDataLoaded = true;\n};\n_c = DOMContentLoaded;\n// It's possible that the DOM is already loaded.\nif (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', DOMContentLoaded, false);\n} else {\n // Delayed in marco task to ensure it's executed later than hydration\n setTimeout(DOMContentLoaded);\n}\nconst nextServerDataLoadingGlobal = self.__next_f = self.__next_f || [];\nnextServerDataLoadingGlobal.forEach(nextServerDataCallback);\nnextServerDataLoadingGlobal.push = nextServerDataCallback;\nconst readable = new ReadableStream({\n start (controller) {\n nextServerDataRegisterWriter(controller);\n }\n});\nconst initialServerResponse = createFromReadableStream(readable, {\n callServer: _appcallserver.callServer,\n findSourceMapURL: _appfindsourcemapurl.findSourceMapURL\n});\nfunction ServerRoot(param) {\n let { pendingActionQueue } = param;\n const initialRSCPayload = (0, _react.use)(initialServerResponse);\n const actionQueue = (0, _react.use)(pendingActionQueue);\n const router = /*#__PURE__*/ (0, _jsxruntime.jsx)(_approuter.default, {\n gracefullyDegrade: (0, _isbot.isBot)(window.navigator.userAgent),\n actionQueue: actionQueue,\n globalErrorState: initialRSCPayload.G,\n assetPrefix: initialRSCPayload.p\n });\n if ( true && initialRSCPayload.m) {\n // We provide missing slot information in a context provider only during development\n // as we log some additional information about the missing slots in the console.\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_approutercontextsharedruntime.MissingSlotContext, {\n value: initialRSCPayload.m,\n children: router\n });\n }\n return router;\n}\n_c1 = ServerRoot;\nconst StrictModeIfEnabled = true ? _react.default.StrictMode : 0;\nfunction Root(param) {\n let { children } = param;\n if (false) {}\n return children;\n}\n_c2 = Root;\nfunction onDefaultTransitionIndicator() {\n // TODO: Compose default with user-configureable (e.g. nprogress)\n // TODO: Use React's default once we figure out hanging indicators: https://codesandbox.io/p/sandbox/charming-moon-hktkp6?file=%2Fsrc%2Findex.js%3A106%2C30\n return ()=>{};\n}\nconst reactRootOptions = {\n onDefaultTransitionIndicator: onDefaultTransitionIndicator,\n onRecoverableError: _onrecoverableerror.onRecoverableError,\n onCaughtError: _errorboundarycallbacks.onCaughtError,\n onUncaughtError: _errorboundarycallbacks.onUncaughtError\n};\nfunction hydrate(instrumentationHooks) {\n // React overrides `.then` and doesn't return a new promise chain,\n // so we wrap the action queue in a promise to ensure that its value\n // is defined when the promise resolves.\n // https://github.com/facebook/react/blob/163365a07872337e04826c4f501565d43dbd2fd4/packages/react-client/src/ReactFlightClient.js#L189-L190\n const pendingActionQueue = new Promise((resolve, reject)=>{\n initialServerResponse.then((initialRSCPayload)=>{\n // setAppBuildId should be called only once, during JS initialization\n // and before any components have hydrated.\n (0, _appbuildid.setAppBuildId)(initialRSCPayload.b);\n const initialTimestamp = Date.now();\n resolve((0, _approuterinstance.createMutableActionQueue)((0, _createinitialrouterstate.createInitialRouterState)({\n navigatedAt: initialTimestamp,\n initialFlightData: initialRSCPayload.f,\n initialCanonicalUrlParts: initialRSCPayload.c,\n initialParallelRoutes: new Map(),\n location: window.location,\n couldBeIntercepted: initialRSCPayload.i,\n postponed: initialRSCPayload.s,\n prerendered: initialRSCPayload.S\n }), instrumentationHooks));\n }, (err)=>reject(err));\n });\n const reactEl = /*#__PURE__*/ (0, _jsxruntime.jsx)(StrictModeIfEnabled, {\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_headmanagercontextsharedruntime.HeadManagerContext.Provider, {\n value: {\n appDir: true\n },\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(Root, {\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(ServerRoot, {\n pendingActionQueue: pendingActionQueue\n })\n })\n })\n });\n if (document.documentElement.id === '__next_error__') {\n let element = reactEl;\n // Server rendering failed, fall back to client-side rendering\n if (true) {\n const { createRootLevelDevOverlayElement } = __webpack_require__(/*! ../next-devtools/userspace/app/client-entry */ \"(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/client-entry.js\");\n // Note this won't cause hydration mismatch because we are doing CSR w/o hydration\n element = createRootLevelDevOverlayElement(element);\n }\n _client.default.createRoot(appElement, reactRootOptions).render(element);\n } else {\n _react.default.startTransition(()=>{\n _client.default.hydrateRoot(appElement, reactEl, {\n ...reactRootOptions,\n formState: initialFormStateData\n });\n });\n }\n // TODO-APP: Remove this logic when Float has GC built-in in development.\n if (true) {\n const { linkGc } = __webpack_require__(/*! ./app-link-gc */ \"(app-pages-browser)/./node_modules/next/dist/client/app-link-gc.js\");\n linkGc();\n }\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=app-index.js.map\nvar _c, _c1, _c2;\n$RefreshReg$(_c, \"DOMContentLoaded\");\n$RefreshReg$(_c1, \"ServerRoot\");\n$RefreshReg$(_c2, \"Root\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2FwcC1pbmRleC5qcyIsIm1hcHBpbmdzIjoiOzs7OzJDQW9PZ0JBOzs7ZUFBQUE7Ozs7OztvQkFwT1Q7NkVBQ29COzZFQUNBO3FDQUdpRDs2REFDekM7Z0RBQ0E7b0RBSTVCOzJDQUNvQjtpREFDTTsrQ0FJMUI7Z0ZBQ2U7c0RBRW1COzJEQUNOO3dDQUNMO21DQUNSO0FBRXRCLGdEQUFnRDtBQUVoRCxNQUFNQywyQkFDSkMsU0FBQUEsd0JBQStCO0FBRWpDLE1BQU1DLGFBQXFDQztBQUUzQyxNQUFNQyxVQUFVLElBQUlDO0FBRXBCLElBQUlDLDBCQUErREM7QUFDbkUsSUFBSUMsMEJBQ0ZEO0FBQ0YsSUFBSUUsMEJBQTBCO0FBQzlCLElBQUlDLDJCQUEyQjtBQUUvQixJQUFJQyx1QkFBbUM7QUFtQnZDLFNBQVNDLHVCQUF1QkMsR0FBa0I7SUFDaEQsSUFBSUEsR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHO1FBQ2hCUCwwQkFBMEIsRUFBRTtJQUM5QixPQUFPLElBQUlPLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRztRQUN2QixJQUFJLENBQUNQLHlCQUNILE1BQU0scUJBQThELENBQTlELElBQUlRLE1BQU0sc0RBQVY7bUJBQUE7d0JBQUE7MEJBQUE7UUFBNkQ7UUFFckUsSUFBSU4seUJBQXlCO1lBQzNCQSx3QkFBd0JPLE9BQU8sQ0FBQ1gsUUFBUVksTUFBTSxDQUFDSCxHQUFHLENBQUMsRUFBRTtRQUN2RCxPQUFPO1lBQ0xQLHdCQUF3QlcsSUFBSSxDQUFDSixHQUFHLENBQUMsRUFBRTtRQUNyQztJQUNGLE9BQU8sSUFBSUEsR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHO1FBQ3ZCRix1QkFBdUJFLEdBQUcsQ0FBQyxFQUFFO0lBQy9CLE9BQU8sSUFBSUEsR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHO1FBQ3ZCLElBQUksQ0FBQ1AseUJBQ0gsTUFBTSxxQkFBOEQsQ0FBOUQs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aWNob2xhaS9Eb2N1bWVudHMvc3JjL2NsaWVudC9hcHAtaW5kZXgudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnLi9hcHAtZ2xvYmFscydcbmltcG9ydCBSZWFjdERPTUNsaWVudCBmcm9tICdyZWFjdC1kb20vY2xpZW50J1xuaW1wb3J0IFJlYWN0LCB7IHVzZSB9IGZyb20gJ3JlYWN0J1xuLy8gVE9ETzogRXhwbGljaXRseSBpbXBvcnQgZnJvbSBjbGllbnQuYnJvd3NlclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuaW1wb3J0IHsgY3JlYXRlRnJvbVJlYWRhYmxlU3RyZWFtIGFzIGNyZWF0ZUZyb21SZWFkYWJsZVN0cmVhbUJyb3dzZXIgfSBmcm9tICdyZWFjdC1zZXJ2ZXItZG9tLXdlYnBhY2svY2xpZW50J1xuaW1wb3J0IHsgSGVhZE1hbmFnZXJDb250ZXh0IH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9oZWFkLW1hbmFnZXItY29udGV4dC5zaGFyZWQtcnVudGltZSdcbmltcG9ydCB7IG9uUmVjb3ZlcmFibGVFcnJvciB9IGZyb20gJy4vcmVhY3QtY2xpZW50LWNhbGxiYWNrcy9vbi1yZWNvdmVyYWJsZS1lcnJvcidcbmltcG9ydCB7XG4gIG9uQ2F1Z2h0RXJyb3IsXG4gIG9uVW5jYXVnaHRFcnJvcixcbn0gZnJvbSAnLi9yZWFjdC1jbGllbnQtY2FsbGJhY2tzL2Vycm9yLWJvdW5kYXJ5LWNhbGxiYWNrcydcbmltcG9ydCB7IGNhbGxTZXJ2ZXIgfSBmcm9tICcuL2FwcC1jYWxsLXNlcnZlcidcbmltcG9ydCB7IGZpbmRTb3VyY2VNYXBVUkwgfSBmcm9tICcuL2FwcC1maW5kLXNvdXJjZS1tYXAtdXJsJ1xuaW1wb3J0IHtcbiAgdHlwZSBBcHBSb3V0ZXJBY3Rpb25RdWV1ZSxcbiAgY3JlYXRlTXV0YWJsZUFjdGlvblF1ZXVlLFxufSBmcm9tICcuL2NvbXBvbmVudHMvYXBwLXJvdXRlci1pbnN0YW5jZSdcbmltcG9ydCBBcHBSb3V0ZXIgZnJvbSAnLi9jb21wb25lbnRzL2FwcC1yb3V0ZXInXG5pbXBvcnQgdHlwZSB7IEluaXRpYWxSU0NQYXlsb2FkIH0gZnJvbSAnLi4vc2VydmVyL2FwcC1yZW5kZXIvdHlwZXMnXG5pbXBvcnQgeyBjcmVhdGVJbml0aWFsUm91dGVyU3RhdGUgfSBmcm9tICcuL2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvY3JlYXRlLWluaXRpYWwtcm91dGVyLXN0YXRlJ1xuaW1wb3J0IHsgTWlzc2luZ1Nsb3RDb250ZXh0IH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUnXG5pbXBvcnQgeyBzZXRBcHBCdWlsZElkIH0gZnJvbSAnLi9hcHAtYnVpbGQtaWQnXG5pbXBvcnQgeyBpc0JvdCB9IGZyb20gJy4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2lzLWJvdCdcblxuLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCJyZWFjdC1kb20vZXhwZXJpbWVudGFsXCIgLz5cblxuY29uc3QgY3JlYXRlRnJvbVJlYWRhYmxlU3RyZWFtID1cbiAgY3JlYXRlRnJvbVJlYWRhYmxlU3RyZWFtQnJvd3NlciBhcyAodHlwZW9mIGltcG9ydCgncmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrL2NsaWVudC5icm93c2VyJykpWydjcmVhdGVGcm9tUmVhZGFibGVTdHJlYW0nXVxuXG5jb25zdCBhcHBFbGVtZW50OiBIVE1MRWxlbWVudCB8IERvY3VtZW50ID0gZG9jdW1lbnRcblxuY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpXG5cbmxldCBpbml0aWFsU2VydmVyRGF0YUJ1ZmZlcjogKHN0cmluZyB8IFVpbnQ4QXJyYXkpW10gfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcbmxldCBpbml0aWFsU2VydmVyRGF0YVdyaXRlcjogUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciB8IHVuZGVmaW5lZCA9XG4gIHVuZGVmaW5lZFxubGV0IGluaXRpYWxTZXJ2ZXJEYXRhTG9hZGVkID0gZmFsc2VcbmxldCBpbml0aWFsU2VydmVyRGF0YUZsdXNoZWQgPSBmYWxzZVxuXG5sZXQgaW5pdGlhbEZvcm1TdGF0ZURhdGE6IG51bGwgfCBhbnkgPSBudWxsXG5cbnR5cGUgRmxpZ2h0U2VnbWVudCA9XG4gIHwgW2lzQm9vdFN0cmFwOiAwXVxuICB8IFtpc05vdEJvb3RzdHJhcDogMSwgcmVzcG9uc2VQYXJ0aWFsOiBzdHJpbmddXG4gIHwgW2lzRm9ybVN0YXRlOiAyLCBmb3JtU3RhdGU6IGFueV1cbiAgfCBbaXNCaW5hcnk6IDMsIHJlc3BvbnNlQmFzZTY0UGFydGlhbDogc3RyaW5nXVxuXG50eXBlIE5leHRGbGlnaHQgPSBPbWl0PEFycmF5PEZsaWdodFNlZ21lbnQ+LCAncHVzaCc+ICYge1xuICBwdXNoOiAoc2VnOiBGbGlnaHRTZWdtZW50KSA9PiB2b2lkXG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgLy8gSWYgeW91J3JlIHdvcmtpbmcgaW4gYSBicm93c2VyIGVudmlyb25tZW50XG4gIGludGVyZmFjZSBXaW5kb3cge1xuICAgIF9fbmV4dF9mOiBOZXh0RmxpZ2h0XG4gIH1cbn1cblxuZnVuY3Rpb24gbmV4dFNlcnZlckRhdGFDYWxsYmFjayhzZWc6IEZsaWdodFNlZ21lbnQpOiB2b2lkIHtcbiAgaWYgKHNlZ1swXSA9PT0gMCkge1xuICAgIGluaXRpYWxTZXJ2ZXJEYXRhQnVmZmVyID0gW11cbiAgfSBlbHNlIGlmIChzZWdbMF0gPT09IDEpIHtcbiAgICBpZiAoIWluaXRpYWxTZXJ2ZXJEYXRhQnVmZmVyKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIHNlcnZlciBkYXRhOiBtaXNzaW5nIGJvb3RzdHJhcCBzY3JpcHQuJylcblxuICAgIGlmIChpbml0aWFsU2VydmVyRGF0YVdyaXRlcikge1xuICAgICAgaW5pdGlhbFNlcnZlckRhdGFXcml0ZXIuZW5xdWV1ZShlbmNvZGVyLmVuY29kZShzZWdbMV0pKVxuICAgIH0gZWxzZSB7XG4gICAgICBpbml0aWFsU2VydmVyRGF0YUJ1ZmZlci5wdXNoKHNlZ1sxXSlcbiAgICB9XG4gIH0gZWxzZSBpZiAoc2VnWzBdID09PSAyKSB7XG4gICAgaW5pdGlhbEZvcm1TdGF0ZURhdGEgPSBzZWdbMV1cbiAgfSBlbHNlIGlmIChzZWdbMF0gPT09IDMpIHtcbiAgICBpZiAoIWluaXRpYWxTZXJ2ZXJEYXRhQnVmZmVyKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIHNlcnZlciBkYXRhOiBtaXNzaW5nIGJvb3RzdHJhcCBzY3JpcHQuJylcblxuICAgIC8vIERlY29kZSB0aGUgYmFzZTY0IHN0cmluZyBiYWNrIHRvIGJpbmFyeSBkYXRhLlxuICAgIGNvbnN0IGJpbmFyeVN0cmluZyA9IGF0b2Ioc2VnWzFdKVxuICAgIGNvbnN0IGRlY29kZWRDaHVuayA9IG5ldyBVaW50OEFycmF5KGJpbmFyeVN0cmluZy5sZW5ndGgpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiaW5hcnlTdHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRlY29kZWRDaHVua1tpXSA9IGJpbmFyeVN0cmluZy5jaGFyQ29kZUF0KGkpXG4gICAgfVxuXG4gICAgaWYgKGluaXRpYWxTZXJ2ZXJEYXRhV3JpdGVyKSB7XG4gICAgICBpbml0aWFsU2VydmVyRGF0YVdyaXRlci5lbnF1ZXVlKGRlY29kZWRDaHVuaylcbiAgICB9IGVsc2Uge1xuICAgICAgaW5pdGlhbFNlcnZlckRhdGFCdWZmZXIucHVzaChkZWNvZGVkQ2h1bmspXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzU3RyZWFtRXJyb3JPclVuZmluaXNoZWQoY3RyOiBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyKSB7XG4gIC8vIElmIGBkZXNpcmVkU2l6ZWAgaXMgbnVsbCwgaXQgbWVhbnMgdGhlIHN0cmVhbSBpcyBjbG9zZWQgb3IgZXJyb3JlZC4gSWYgaXQgaXMgbG93ZXIgdGhhbiAwLCB0aGUgc3RyZWFtIGlzIHN0aWxsIHVuZmluaXNoZWQuXG4gIHJldHVybiBjdHIuZGVzaXJlZFNpemUgPT09IG51bGwgfHwgY3RyLmRlc2lyZWRTaXplIDwgMFxufVxuXG4vLyBUaGVyZSBtaWdodCBiZSByYWNlIGNvbmRpdGlvbnMgYmV0d2VlbiBgbmV4dFNlcnZlckRhdGFSZWdpc3RlcldyaXRlcmAgYW5kXG4vLyBgRE9NQ29udGVudExvYWRlZGAuIFRoZSBmb3JtZXIgd2lsbCBiZSBjYWxsZWQgd2hlbiBSZWFjdCBzdGFydHMgdG8gaHlkcmF0ZVxuLy8gdGhlIHJvb3QsIHRoZSBsYXR0ZXIgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgRE9NIGlzIGZ1bGx5IGxvYWRlZC5cbi8vIEZvciBzdHJlYW1pbmcsIHRoZSBmb3JtZXIgaXMgY2FsbGVkIGZpcnN0IGR1ZSB0byBwYXJ0aWFsIGh5ZHJhdGlvbi5cbi8vIEZvciBub24tc3RyZWFtaW5nLCB0aGUgbGF0dGVyIGNhbiBiZSBjYWxsZWQgZmlyc3QuXG4vLyBIZW5jZSwgd2UgdXNlIHR3byB2YXJpYWJsZXMgYGluaXRpYWxTZXJ2ZXJEYXRhTG9hZGVkYCBhbmRcbi8vIGBpbml0aWFsU2VydmVyRGF0YUZsdXNoZWRgIHRvIG1ha2Ugc3VyZSB0aGUgd3JpdGVyIHdpbGwgYmUgY2xvc2VkIGFuZFxuLy8gYGluaXRpYWxTZXJ2ZXJEYXRhQnVmZmVyYCB3aWxsIGJlIGNsZWFyZWQgaW4gdGhlIHJpZ2h0IHRpbWUuXG5mdW5jdGlvbiBuZXh0U2VydmVyRGF0YVJlZ2lzdGVyV3JpdGVyKGN0cjogUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcikge1xuICBpZiAoaW5pdGlhbFNlcnZlckRhdGFCdWZmZXIpIHtcbiAgICBpbml0aWFsU2VydmVyRGF0YUJ1ZmZlci5mb3JFYWNoKCh2YWwpID0+IHtcbiAgICAgIGN0ci5lbnF1ZXVlKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnID8gZW5jb2Rlci5lbmNvZGUodmFsKSA6IHZhbClcbiAgICB9KVxuICAgIGlmIChpbml0aWFsU2VydmVyRGF0YUxvYWRlZCAmJiAhaW5pdGlhbFNlcnZlckRhdGFGbHVzaGVkKSB7XG4gICAgICBpZiAoaXNTdHJlYW1FcnJvck9yVW5maW5pc2hlZChjdHIpKSB7XG4gICAgICAgIGN0ci5lcnJvcihcbiAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnVGhlIGNvbm5lY3Rpb24gdG8gdGhlIHBhZ2Ugd2FzIHVuZXhwZWN0ZWRseSBjbG9zZWQsIHBvc3NpYmx5IGR1ZSB0byB0aGUgc3RvcCBidXR0b24gYmVpbmcgY2xpY2tlZCwgbG9zcyBvZiBXaS1GaSwgb3IgYW4gdW5zdGFibGUgaW50ZXJuZXQgY29ubmVjdGlvbi4nXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdHIuY2xvc2UoKVxuICAgICAgfVxuICAgICAgaW5pdGlhbFNlcnZlckRhdGFGbHVzaGVkID0gdHJ1ZVxuICAgICAgaW5pdGlhbFNlcnZlckRhdGFCdWZmZXIgPSB1bmRlZmluZWRcbiAgICB9XG4gIH1cblxuICBpbml0aWFsU2VydmVyRGF0YVdyaXRlciA9IGN0clxufVxuXG4vLyBXaGVuIGBET01Db250ZW50TG9hZGVkYCwgd2UgY2FuIGNsb3NlIGFsbCBwZW5kaW5nIHdyaXRlcnMgdG8gZmluaXNoIGh5ZHJhdGlvbi5cbmNvbnN0IERPTUNvbnRlbnRMb2FkZWQgPSBmdW5jdGlvbiAoKSB7XG4gIGlmIChpbml0aWFsU2VydmVyRGF0YVdyaXRlciAmJiAhaW5pdGlhbFNlcnZlckRhdGFGbHVzaGVkKSB7XG4gICAgaW5pdGlhbFNlcnZlckRhdGFXcml0ZXIuY2xvc2UoKVxuICAgIGluaXRpYWxTZXJ2ZXJEYXRhRmx1c2hlZCA9IHRydWVcbiAgICBpbml0aWFsU2VydmVyRGF0YUJ1ZmZlciA9IHVuZGVmaW5lZFxuICB9XG4gIGluaXRpYWxTZXJ2ZXJEYXRhTG9hZGVkID0gdHJ1ZVxufVxuXG4vLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIERPTSBpcyBhbHJlYWR5IGxvYWRlZC5cbmlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnbG9hZGluZycpIHtcbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIERPTUNvbnRlbnRMb2FkZWQsIGZhbHNlKVxufSBlbHNlIHtcbiAgLy8gRGVsYXllZCBpbiBtYXJjbyB0YXNrIHRvIGVuc3VyZSBpdCdzIGV4ZWN1dGVkIGxhdGVyIHRoYW4gaHlkcmF0aW9uXG4gIHNldFRpbWVvdXQoRE9NQ29udGVudExvYWRlZClcbn1cblxuY29uc3QgbmV4dFNlcnZlckRhdGFMb2FkaW5nR2xvYmFsID0gKHNlbGYuX19uZXh0X2YgPSBzZWxmLl9fbmV4dF9mIHx8IFtdKVxubmV4dFNlcnZlckRhdGFMb2FkaW5nR2xvYmFsLmZvckVhY2gobmV4dFNlcnZlckRhdGFDYWxsYmFjaylcbm5leHRTZXJ2ZXJEYXRhTG9hZGluZ0dsb2JhbC5wdXNoID0gbmV4dFNlcnZlckRhdGFDYWxsYmFja1xuXG5jb25zdCByZWFkYWJsZSA9IG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gIHN0YXJ0KGNvbnRyb2xsZXIpIHtcbiAgICBuZXh0U2VydmVyRGF0YVJlZ2lzdGVyV3JpdGVyKGNvbnRyb2xsZXIpXG4gIH0sXG59KVxuXG5jb25zdCBpbml0aWFsU2VydmVyUmVzcG9uc2UgPSBjcmVhdGVGcm9tUmVhZGFibGVTdHJlYW08SW5pdGlhbFJTQ1BheWxvYWQ+KFxuICByZWFkYWJsZSxcbiAgeyBjYWxsU2VydmVyLCBmaW5kU291cmNlTWFwVVJMIH1cbilcblxuZnVuY3Rpb24gU2VydmVyUm9vdCh7XG4gIHBlbmRpbmdBY3Rpb25RdWV1ZSxcbn06IHtcbiAgcGVuZGluZ0FjdGlvblF1ZXVlOiBQcm9taXNlPEFwcFJvdXRlckFjdGlvblF1ZXVlPlxufSk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IGluaXRpYWxSU0NQYXlsb2FkID0gdXNlKGluaXRpYWxTZXJ2ZXJSZXNwb25zZSlcbiAgY29uc3QgYWN0aW9uUXVldWUgPSB1c2U8QXBwUm91dGVyQWN0aW9uUXVldWU+KHBlbmRpbmdBY3Rpb25RdWV1ZSlcblxuICBjb25zdCByb3V0ZXIgPSAoXG4gICAgPEFwcFJvdXRlclxuICAgICAgZ3JhY2VmdWxseURlZ3JhZGU9e2lzQm90KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KX1cbiAgICAgIGFjdGlvblF1ZXVlPXthY3Rpb25RdWV1ZX1cbiAgICAgIGdsb2JhbEVycm9yU3RhdGU9e2luaXRpYWxSU0NQYXlsb2FkLkd9XG4gICAgICBhc3NldFByZWZpeD17aW5pdGlhbFJTQ1BheWxvYWQucH1cbiAgICAvPlxuICApXG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnICYmIGluaXRpYWxSU0NQYXlsb2FkLm0pIHtcbiAgICAvLyBXZSBwcm92aWRlIG1pc3Npbmcgc2xvdCBpbmZvcm1hdGlvbiBpbiBhIGNvbnRleHQgcHJvdmlkZXIgb25seSBkdXJpbmcgZGV2ZWxvcG1lbnRcbiAgICAvLyBhcyB3ZSBsb2cgc29tZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBtaXNzaW5nIHNsb3RzIGluIHRoZSBjb25zb2xlLlxuICAgIHJldHVybiAoXG4gICAgICA8TWlzc2luZ1Nsb3RDb250ZXh0IHZhbHVlPXtpbml0aWFsUlNDUGF5bG9hZC5tfT5cbiAgICAgICAge3JvdXRlcn1cbiAgICAgIDwvTWlzc2luZ1Nsb3RDb250ZXh0PlxuICAgIClcbiAgfVxuXG4gIHJldHVybiByb3V0ZXJcbn1cblxuY29uc3QgU3RyaWN0TW9kZUlmRW5hYmxlZCA9IHByb2Nlc3MuZW52Ll9fTkVYVF9TVFJJQ1RfTU9ERV9BUFBcbiAgPyBSZWFjdC5TdHJpY3RNb2RlXG4gIDogUmVhY3QuRnJhZ21lbnRcblxuZnVuY3Rpb24gUm9vdCh7IGNoaWxkcmVuIH06IFJlYWN0LlByb3BzV2l0aENoaWxkcmVuPHt9Pikge1xuICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX1RFU1RfTU9ERSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICB3aW5kb3cuX19ORVhUX0hZRFJBVEVEID0gdHJ1ZVxuICAgICAgd2luZG93Ll9fTkVYVF9IWURSQVRFRF9BVCA9IHBlcmZvcm1hbmNlLm5vdygpXG4gICAgICB3aW5kb3cuX19ORVhUX0hZRFJBVEVEX0NCPy4oKVxuICAgIH0sIFtdKVxuICB9XG5cbiAgcmV0dXJuIGNoaWxkcmVuXG59XG5cbmZ1bmN0aW9uIG9uRGVmYXVsdFRyYW5zaXRpb25JbmRpY2F0b3IoKSB7XG4gIC8vIFRPRE86IENvbXBvc2UgZGVmYXVsdCB3aXRoIHVzZXItY29uZmlndXJlYWJsZSAoZS5nLiBucHJvZ3Jlc3MpXG4gIC8vIFRPRE86IFVzZSBSZWFjdCdzIGRlZmF1bHQgb25jZSB3ZSBmaWd1cmUgb3V0IGhhbmdpbmcgaW5kaWNhdG9yczogaHR0cHM6Ly9jb2Rlc2FuZGJveC5pby9wL3NhbmRib3gvY2hhcm1pbmctbW9vbi1oa3RrcDY/ZmlsZT0lMkZzcmMlMkZpbmRleC5qcyUzQTEwNiUyQzMwXG4gIHJldHVybiAoKSA9PiB7fVxufVxuXG5jb25zdCByZWFjdFJvb3RPcHRpb25zOiBSZWFjdERPTUNsaWVudC5Sb290T3B0aW9ucyA9IHtcbiAgb25EZWZhdWx0VHJhbnNpdGlvbkluZGljYXRvcjogb25EZWZhdWx0VHJhbnNpdGlvbkluZGljYXRvcixcbiAgb25SZWNvdmVyYWJsZUVycm9yLFxuICBvbkNhdWdodEVycm9yLFxuICBvblVuY2F1Z2h0RXJyb3IsXG59XG5cbmV4cG9ydCB0eXBlIENsaWVudEluc3RydW1lbnRhdGlvbkhvb2tzID0ge1xuICBvblJvdXRlclRyYW5zaXRpb25TdGFydD86IChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBuYXZpZ2F0aW9uVHlwZTogJ3B1c2gnIHwgJ3JlcGxhY2UnIHwgJ3RyYXZlcnNlJ1xuICApID0+IHZvaWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5ZHJhdGUoXG4gIGluc3RydW1lbnRhdGlvbkhvb2tzOiBDbGllbnRJbnN0cnVtZW50YXRpb25Ib29rcyB8IG51bGxcbikge1xuICAvLyBSZWFjdCBvdmVycmlkZXMgYC50aGVuYCBhbmQgZG9lc24ndCByZXR1cm4gYSBuZXcgcHJvbWlzZSBjaGFpbixcbiAgLy8gc28gd2Ugd3JhcCB0aGUgYWN0aW9uIHF1ZXVlIGluIGEgcHJvbWlzZSB0byBlbnN1cmUgdGhhdCBpdHMgdmFsdWVcbiAgLy8gaXMgZGVmaW5lZCB3aGVuIHRoZSBwcm9taXNlIHJlc29sdmVzLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvYmxvYi8xNjMzNjVhMDc4NzIzMzdlMDQ4MjZjNGY1MDE1NjVkNDNkYmQyZmQ0L3BhY2thZ2VzL3JlYWN0LWNsaWVudC9zcmMvUmVhY3RGbGlnaHRDbGllbnQuanMjTDE4OS1MMTkwXG4gIGNvbnN0IHBlbmRpbmdBY3Rpb25RdWV1ZTogUHJvbWlzZTxBcHBSb3V0ZXJBY3Rpb25RdWV1ZT4gPSBuZXcgUHJvbWlzZShcbiAgICAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpbml0aWFsU2VydmVyUmVzcG9uc2UudGhlbihcbiAgICAgICAgKGluaXRpYWxSU0NQYXlsb2FkKSA9PiB7XG4gICAgICAgICAgLy8gc2V0QXBwQnVpbGRJZCBzaG91bGQgYmUgY2FsbGVkIG9ubHkgb25jZSwgZHVyaW5nIEpTIGluaXRpYWxpemF0aW9uXG4gICAgICAgICAgLy8gYW5kIGJlZm9yZSBhbnkgY29tcG9uZW50cyBoYXZlIGh5ZHJhdGVkLlxuICAgICAgICAgIHNldEFwcEJ1aWxkSWQoaW5pdGlhbFJTQ1BheWxvYWQuYilcblxuICAgICAgICAgIGNvbnN0IGluaXRpYWxUaW1lc3RhbXAgPSBEYXRlLm5vdygpXG5cbiAgICAgICAgICByZXNvbHZlKFxuICAgICAgICAgICAgY3JlYXRlTXV0YWJsZUFjdGlvblF1ZXVlKFxuICAgICAgICAgICAgICBjcmVhdGVJbml0aWFsUm91dGVyU3RhdGUoe1xuICAgICAgICAgICAgICAgIG5hdmlnYXRlZEF0OiBpbml0aWFsVGltZXN0YW1wLFxuICAgICAgICAgICAgICAgIGluaXRpYWxGbGlnaHREYXRhOiBpbml0aWFsUlNDUGF5bG9hZC5mLFxuICAgICAgICAgICAgICAgIGluaXRpYWxDYW5vbmljYWxVcmxQYXJ0czogaW5pdGlhbFJTQ1BheWxvYWQuYyxcbiAgICAgICAgICAgICAgICBpbml0aWFsUGFyYWxsZWxSb3V0ZXM6IG5ldyBNYXAoKSxcbiAgICAgICAgICAgICAgICBsb2NhdGlvbjogd2luZG93LmxvY2F0aW9uLFxuICAgICAgICAgICAgICAgIGNvdWxkQmVJbnRlcmNlcHRlZDogaW5pdGlhbFJTQ1BheWxvYWQuaSxcbiAgICAgICAgICAgICAgICBwb3N0cG9uZWQ6IGluaXRpYWxSU0NQYXlsb2FkLnMsXG4gICAgICAgICAgICAgICAgcHJlcmVuZGVyZWQ6IGluaXRpYWxSU0NQYXlsb2FkLlMsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBpbnN0cnVtZW50YXRpb25Ib29rc1xuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgfSxcbiAgICAgICAgKGVycjogRXJyb3IpID0+IHJlamVjdChlcnIpXG4gICAgICApXG4gICAgfVxuICApXG5cbiAgY29uc3QgcmVhY3RFbCA9IChcbiAgICA8U3RyaWN0TW9kZUlmRW5hYmxlZD5cbiAgICAgIDxIZWFkTWFuYWdlckNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3sgYXBwRGlyOiB0cnVlIH19PlxuICAgICAgICA8Um9vdD5cbiAgICAgICAgICA8U2VydmVyUm9vdCBwZW5kaW5nQWN0aW9uUXVldWU9e3BlbmRpbmdBY3Rpb25RdWV1ZX0gLz5cbiAgICAgICAgPC9Sb290PlxuICAgICAgPC9IZWFkTWFuYWdlckNvbnRleHQuUHJvdmlkZXI+XG4gICAgPC9TdHJpY3RNb2RlSWZFbmFibGVkPlxuICApXG5cbiAgaWYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5pZCA9PT0gJ19fbmV4dF9lcnJvcl9fJykge1xuICAgIGxldCBlbGVtZW50ID0gcmVhY3RFbFxuICAgIC8vIFNlcnZlciByZW5kZXJpbmcgZmFpbGVkLCBmYWxsIGJhY2sgdG8gY2xpZW50LXNpZGUgcmVuZGVyaW5nXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnN0IHsgY3JlYXRlUm9vdExldmVsRGV2T3ZlcmxheUVsZW1lbnQgfSA9XG4gICAgICAgIHJlcXVpcmUoJy4uL25leHQtZGV2dG9vbHMvdXNlcnNwYWNlL2FwcC9jbGllbnQtZW50cnknKSBhcyB0eXBlb2YgaW1wb3J0KCcuLi9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9hcHAvY2xpZW50LWVudHJ5JylcblxuICAgICAgLy8gTm90ZSB0aGlzIHdvbid0IGNhdXNlIGh5ZHJhdGlvbiBtaXNtYXRjaCBiZWNhdXNlIHdlIGFyZSBkb2luZyBDU1Igdy9vIGh5ZHJhdGlvblxuICAgICAgZWxlbWVudCA9IGNyZWF0ZVJvb3RMZXZlbERldk92ZXJsYXlFbGVtZW50KGVsZW1lbnQpXG4gICAgfVxuXG4gICAgUmVhY3RET01DbGllbnQuY3JlYXRlUm9vdChhcHBFbGVtZW50LCByZWFjdFJvb3RPcHRpb25zKS5yZW5kZXIoZWxlbWVudClcbiAgfSBlbHNlIHtcbiAgICBSZWFjdC5zdGFydFRyYW5zaXRpb24oKCkgPT4ge1xuICAgICAgUmVhY3RET01DbGllbnQuaHlkcmF0ZVJvb3QoYXBwRWxlbWVudCwgcmVhY3RFbCwge1xuICAgICAgICAuLi5yZWFjdFJvb3RPcHRpb25zLFxuICAgICAgICBmb3JtU3RhdGU6IGluaXRpYWxGb3JtU3RhdGVEYXRhLFxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgLy8gVE9ETy1BUFA6IFJlbW92ZSB0aGlzIGxvZ2ljIHdoZW4gRmxvYXQgaGFzIEdDIGJ1aWx0LWluIGluIGRldmVsb3BtZW50LlxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGNvbnN0IHsgbGlua0djIH0gPVxuICAgICAgcmVxdWlyZSgnLi9hcHAtbGluay1nYycpIGFzIHR5cGVvZiBpbXBvcnQoJy4vYXBwLWxpbmstZ2MnKVxuICAgIGxpbmtHYygpXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJoeWRyYXRlIiwiY3JlYXRlRnJvbVJlYWRhYmxlU3RyZWFtIiwiY3JlYXRlRnJvbVJlYWRhYmxlU3RyZWFtQnJvd3NlciIsImFwcEVsZW1lbnQiLCJkb2N1bWVudCIsImVuY29kZXIiLCJUZXh0RW5jb2RlciIsImluaXRpYWxTZXJ2ZXJEYXRhQnVmZmVyIiwidW5kZWZpbmVkIiwiaW5pdGlhbFNlcnZlckRhdGFXcml0ZXIiLCJpbml0aWFsU2VydmVyRGF0YUxvYWRlZCIsImluaXRpYWxTZXJ2ZXJEYXRhRmx1c2hlZCIsImluaXRpYWxGb3JtU3RhdGVEYXRhIiwibmV4dFNlcnZlckRhdGFDYWxsYmFjayIsInNlZyIsIkVycm9yIiwiZW5xdWV1ZSIsImVuY29kZSIsInB1c2giLCJiaW5hcnlTdHJpbmciLCJhdG9iIiwiZGVjb2RlZENodW5rIiwiVWludDhBcnJheSIsImxlbmd0aCIsImkiLCJjaGFyQ29kZUF0IiwiaXNTdHJlYW1FcnJvck9yVW5maW5pc2hlZCIsImN0ciIsImRlc2lyZWRTaXplIiwibmV4dFNlcnZlckRhdGFSZWdpc3RlcldyaXRlciIsImZvckVhY2giLCJ2YWwiLCJlcnJvciIsImNsb3NlIiwiRE9NQ29udGVudExvYWRlZCIsInJlYWR5U3RhdGUiLCJhZGRFdmVudExpc3RlbmVyIiwic2V0VGltZW91dCIsIm5leHRTZXJ2ZXJEYXRhTG9hZGluZ0dsb2JhbCIsInNlbGYiLCJfX25leHRfZiIsInJlYWRhYmxlIiwiUmVhZGFibGVTdHJlYW0iLCJzdGFydCIsImNvbnRyb2xsZXIiLCJpbml0aWFsU2VydmVyUmVzcG9uc2UiLCJjYWxsU2VydmVyIiwiZmluZFNvdXJjZU1hcFVSTCIsIlNlcnZlclJvb3QiLCJwZW5kaW5nQWN0aW9uUXVldWUiLCJpbml0aWFsUlNDUGF5bG9hZCIsInVzZSIsImFjdGlvblF1ZXVlIiwicm91dGVyIiwiQXBwUm91dGVyIiwiZ3JhY2VmdWxseURlZ3JhZGUiLCJpc0JvdCIsIndpbmRvdyIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImdsb2JhbEVycm9yU3RhdGUiLCJHIiwiYXNzZXRQcmVmaXgiLCJwIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwibSIsIk1pc3NpbmdTbG90Q29udGV4dCIsInZhbHVlIiwiU3RyaWN0TW9kZUlmRW5hYmxlZCIsIl9fTkVYVF9TVFJJQ1RfTU9ERV9BUFAiLCJSZWFjdCIsIlN0cmljdE1vZGUiLCJGcmFnbWVudCIsIlJvb3QiLCJjaGlsZHJlbiIsIl9fTkVYVF9URVNUX01PREUiLCJ1c2VFZmZlY3QiLCJfX05FWFRfSFlEUkFURUQiLCJfX05FWFRfSFlEUkFURURfQVQiLCJwZXJmb3JtYW5jZSIsIm5vdyIsIl9fTkVYVF9IWURSQVRFRF9DQiIsIm9uRGVmYXVsdFRyYW5zaXRpb25JbmRpY2F0b3IiLCJyZWFjdFJvb3RPcHRpb25zIiwib25SZWNvdmVyYWJsZUVycm9yIiwib25DYXVnaHRFcnJvciIsIm9uVW5jYXVnaHRFcnJvciIsImluc3RydW1lbnRhdGlvbkhvb2tzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ0aGVuIiwic2V0QXBwQnVpbGRJZCIsImIiLCJpbml0aWFsVGltZXN0YW1wIiwiRGF0ZSIsImNyZWF0ZU11dGFibGVBY3Rpb25RdWV1ZSIsImNyZWF0ZUluaXRpYWxSb3V0ZXJTdGF0ZSIsIm5hdmlnYXRlZEF0IiwiaW5pdGlhbEZsaWdodERhdGEiLCJmIiwiaW5pdGlhbENhbm9uaWNhbFVybFBhcnRzIiwiYyIsImluaXRpYWxQYXJhbGxlbFJvdXRlcyIsIk1hcCIsImxvY2F0aW9uIiwiY291bGRCZUludGVyY2VwdGVkIiwicG9zdHBvbmVkIiwicyIsInByZXJlbmRlcmVkIiwiUyIsImVyciIsInJlYWN0RWwiLCJIZWFkTWFuYWdlckNvbnRleHQiLCJQcm92aWRlciIsImFwcERpciIsImRvY3VtZW50RWxlbWVudCIsImlkIiwiZWxlbWVudCIsImNyZWF0ZVJvb3RMZXZlbERldk92ZXJsYXlFbGVtZW50IiwicmVxdWlyZSIsIlJlYWN0RE9NQ2xpZW50IiwiY3JlYXRlUm9vdCIsInJlbmRlciIsInN0YXJ0VHJhbnNpdGlvbiIsImh5ZHJhdGVSb290IiwiZm9ybVN0YXRlIiwibGlua0djIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/app-index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/app-link-gc.js":
|
||
/*!******************************************************!*\
|
||
!*** ./node_modules/next/dist/client/app-link-gc.js ***!
|
||
\******************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"linkGc\", ({\n enumerable: true,\n get: function() {\n return linkGc;\n }\n}));\nfunction linkGc() {\n // TODO-APP: Remove this logic when Float has GC built-in in development.\n if (true) {\n const callback = (mutationList)=>{\n for (const mutation of mutationList){\n if (mutation.type === 'childList') {\n for (const node of mutation.addedNodes){\n if ('tagName' in node && node.tagName === 'LINK') {\n var _link_dataset_precedence;\n const link = node;\n if ((_link_dataset_precedence = link.dataset.precedence) == null ? void 0 : _link_dataset_precedence.startsWith('next')) {\n const href = link.getAttribute('href');\n if (href) {\n const [resource, version] = href.split('?v=', 2);\n if (version) {\n const currentOrigin = window.location.origin;\n const allLinks = [\n ...document.querySelectorAll('link[href^=\"' + resource + '\"]'),\n // It's possible that the resource is a full URL or only pathname,\n // so we need to remove the alternative href as well.\n ...document.querySelectorAll('link[href^=\"' + (resource.startsWith(currentOrigin) ? resource.slice(currentOrigin.length) : currentOrigin + resource) + '\"]')\n ];\n for (const otherLink of allLinks){\n var _otherLink_dataset_precedence;\n if ((_otherLink_dataset_precedence = otherLink.dataset.precedence) == null ? void 0 : _otherLink_dataset_precedence.startsWith('next')) {\n const otherHref = otherLink.getAttribute('href');\n if (otherHref) {\n const [, otherVersion] = otherHref.split('?v=', 2);\n if (!otherVersion || +otherVersion < +version) {\n // Delay the removal of the stylesheet to avoid FOUC\n // caused by `@font-face` rules, as they seem to be\n // a couple of ticks delayed between the old and new\n // styles being swapped even if the font is cached.\n setTimeout(()=>{\n otherLink.remove();\n }, 5);\n const preloadLink = document.querySelector('link[rel=\"preload\"][as=\"style\"][href=\"' + otherHref + '\"]');\n if (preloadLink) {\n preloadLink.remove();\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n };\n // Create an observer instance linked to the callback function\n const observer = new MutationObserver(callback);\n observer.observe(document.head, {\n childList: true\n });\n }\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=app-link-gc.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2FwcC1saW5rLWdjLmpzIiwibWFwcGluZ3MiOiI7Ozs7MENBQWdCQTs7O2VBQUFBOzs7QUFBVCxTQUFTQTtJQUNkLHlFQUF5RTtJQUN6RSxJQUFJQyxJQUFvQixFQUFtQjtRQUN6QyxNQUFNRyxXQUFXLENBQUNDO1lBQ2hCLEtBQUssTUFBTUMsWUFBWUQsYUFBYztnQkFDbkMsSUFBSUMsU0FBU0MsSUFBSSxLQUFLLGFBQWE7b0JBQ2pDLEtBQUssTUFBTUMsUUFBUUYsU0FBU0csVUFBVSxDQUFFO3dCQUN0QyxJQUNFLGFBQWFELFFBQ1pBLEtBQXlCRSxPQUFPLEtBQUssUUFDdEM7Z0NBRUlDOzRCQURKLE1BQU1BLE9BQU9IOzRCQUNiLEtBQUlHLDJCQUFBQSxLQUFLQyxPQUFPLENBQUNDLFVBQUFBLEtBQVUsZ0JBQXZCRix5QkFBeUJHLFVBQVUsQ0FBQyxTQUFTO2dDQUMvQyxNQUFNQyxPQUFPSixLQUFLSyxZQUFZLENBQUM7Z0NBQy9CLElBQUlELE1BQU07b0NBQ1IsTUFBTSxDQUFDRSxVQUFVQyxRQUFRLEdBQUdILEtBQUtJLEtBQUssQ0FBQyxPQUFPO29DQUM5QyxJQUFJRCxTQUFTO3dDQUNYLE1BQU1FLGdCQUFnQkMsT0FBT0MsUUFBUSxDQUFDQyxNQUFNO3dDQUM1QyxNQUFNQyxXQUFXOytDQUNaQyxTQUFTQyxnQkFBZ0IsQ0FDMUIsaUJBQWlCVCxXQUFXOzRDQUU5QixrRUFBa0U7NENBQ2xFLHFEQUFxRDsrQ0FDbERRLFNBQVNDLGdCQUFnQixDQUMxQixpQkFDR1QsQ0FBQUEsU0FBU0gsVUFBVSxDQUFDTSxpQkFDakJILFNBQVNVLEtBQUssQ0FBQ1AsY0FBY1EsTUFBTSxJQUNuQ1IsZ0JBQWdCSCxRQUFBQSxDQUFPLEdBQzNCO3lDQUVMO3dDQUVELEtBQUssTUFBTVksYUFBYUwsU0FBVTtnREFDNUJLOzRDQUFKLEtBQUlBLGdDQUFBQSxVQUFVakIsT0FBTyxDQUFDQyxVQUFBQSxLQUFVLGdCQUE1QmdCLDhCQUE4QmYsVUFBVSxDQUFDLFNBQVM7Z0RBQ3BELE1BQU1nQixZQUFZRCxVQUFVYixZQUFZLENBQUM7Z0RBQ3pDLElBQUljLFdBQVc7b0RBQ2IsTUFBTSxHQUFHQyxhQUFhLEdBQUdELFVBQVVYLEtBQUssQ0FBQyxPQUFPO29EQUNoRCxJQUFJLENBQUNZLGdCQUFnQixDQUFDQSxlQUFlLENBQUNiLFNBQVM7d0RBQzdDLG9EQUFvRDt3REFDcEQsbURBQW1EO3dEQUNuRCxvREFBb0Q7d0RBQ3BELG1EQUFtRDt3REFDbkRjLFdBQVc7NERBQ1RILFVBQVVJLE1BQU07d0RBQ2xCLEdBQUc7d0RBQ0gsTUFBTUMsY0FBY1QsU0FBU1UsYUFBYSxDQUN2QywyQ0FBd0NMLFlBQVU7d0RBRXJELElBQUlJLGFBQWE7NERBQ2ZBLFlBQVlELE1BQU07d0RBQ3BCO29EQUNGO2dEQUNGOzRDQUNGO3dDQUNGO29DQUNGO2dDQUNGOzRCQUNGO3dCQUNGO29CQUNGO2dCQUNGO1lBQ0Y7UUFDRjtRQUVBLDhEQUE4RDtRQUM5RCxNQUFNRyxXQUFXLElBQUlDLGlCQUFpQmpDO1FBQ3RDZ0MsU0FBU0UsT0FBTyxDQUFDYixTQUFTYyxJQUFJLEVBQUU7WUFDOUJDLFdBQVc7UUFDYjtJQUNGO0FBQ0YiLCJzb3VyY2VzIjpbIi9ob21lL05pY2hvbGFpL0RvY3VtZW50cy9zcmMvY2xpZW50L2FwcC1saW5rLWdjLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBsaW5rR2MoKSB7XG4gIC8vIFRPRE8tQVBQOiBSZW1vdmUgdGhpcyBsb2dpYyB3aGVuIEZsb2F0IGhhcyBHQyBidWlsdC1pbiBpbiBkZXZlbG9wbWVudC5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBjb25zdCBjYWxsYmFjayA9IChtdXRhdGlvbkxpc3Q6IE11dGF0aW9uUmVjb3JkW10pID0+IHtcbiAgICAgIGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25MaXN0KSB7XG4gICAgICAgIGlmIChtdXRhdGlvbi50eXBlID09PSAnY2hpbGRMaXN0Jykge1xuICAgICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBtdXRhdGlvbi5hZGRlZE5vZGVzKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICd0YWdOYW1lJyBpbiBub2RlICYmXG4gICAgICAgICAgICAgIChub2RlIGFzIEhUTUxMaW5rRWxlbWVudCkudGFnTmFtZSA9PT0gJ0xJTksnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29uc3QgbGluayA9IG5vZGUgYXMgSFRNTExpbmtFbGVtZW50XG4gICAgICAgICAgICAgIGlmIChsaW5rLmRhdGFzZXQucHJlY2VkZW5jZT8uc3RhcnRzV2l0aCgnbmV4dCcpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaHJlZiA9IGxpbmsuZ2V0QXR0cmlidXRlKCdocmVmJylcbiAgICAgICAgICAgICAgICBpZiAoaHJlZikge1xuICAgICAgICAgICAgICAgICAgY29uc3QgW3Jlc291cmNlLCB2ZXJzaW9uXSA9IGhyZWYuc3BsaXQoJz92PScsIDIpXG4gICAgICAgICAgICAgICAgICBpZiAodmVyc2lvbikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50T3JpZ2luID0gd2luZG93LmxvY2F0aW9uLm9yaWdpblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhbGxMaW5rcyA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2xpbmtbaHJlZl49XCInICsgcmVzb3VyY2UgKyAnXCJdJ1xuICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSByZXNvdXJjZSBpcyBhIGZ1bGwgVVJMIG9yIG9ubHkgcGF0aG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgLy8gc28gd2UgbmVlZCB0byByZW1vdmUgdGhlIGFsdGVybmF0aXZlIGhyZWYgYXMgd2VsbC5cbiAgICAgICAgICAgICAgICAgICAgICAuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2xpbmtbaHJlZl49XCInICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlc291cmNlLnN0YXJ0c1dpdGgoY3VycmVudE9yaWdpbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHJlc291cmNlLnNsaWNlKGN1cnJlbnRPcmlnaW4ubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3VycmVudE9yaWdpbiArIHJlc291cmNlKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdcIl0nXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgXSBhcyBIVE1MTGlua0VsZW1lbnRbXVxuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgb3RoZXJMaW5rIG9mIGFsbExpbmtzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG90aGVyTGluay5kYXRhc2V0LnByZWNlZGVuY2U/LnN0YXJ0c1dpdGgoJ25leHQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RoZXJIcmVmID0gb3RoZXJMaW5rLmdldEF0dHJpYnV0ZSgnaHJlZicpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3RoZXJIcmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFssIG90aGVyVmVyc2lvbl0gPSBvdGhlckhyZWYuc3BsaXQoJz92PScsIDIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3RoZXJWZXJzaW9uIHx8ICtvdGhlclZlcnNpb24gPCArdmVyc2lvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlbGF5IHRoZSByZW1vdmFsIG9mIHRoZSBzdHlsZXNoZWV0IHRvIGF2b2lkIEZPVUNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYXVzZWQgYnkgYEBmb250LWZhY2VgIHJ1bGVzLCBhcyB0aGV5IHNlZW0gdG8gYmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhIGNvdXBsZSBvZiB0aWNrcyBkZWxheWVkIGJldHdlZW4gdGhlIG9sZCBhbmQgbmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3R5bGVzIGJlaW5nIHN3YXBwZWQgZXZlbiBpZiB0aGUgZm9udCBpcyBjYWNoZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlckxpbmsucmVtb3ZlKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCA1KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZWxvYWRMaW5rID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBsaW5rW3JlbD1cInByZWxvYWRcIl1bYXM9XCJzdHlsZVwiXVtocmVmPVwiJHtvdGhlckhyZWZ9XCJdYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJlbG9hZExpbmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWxvYWRMaW5rLnJlbW92ZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGFuIG9ic2VydmVyIGluc3RhbmNlIGxpbmtlZCB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb25cbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGNhbGxiYWNrKVxuICAgIG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuaGVhZCwge1xuICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgIH0pXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJsaW5rR2MiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJjYWxsYmFjayIsIm11dGF0aW9uTGlzdCIsIm11dGF0aW9uIiwidHlwZSIsIm5vZGUiLCJhZGRlZE5vZGVzIiwidGFnTmFtZSIsImxpbmsiLCJkYXRhc2V0IiwicHJlY2VkZW5jZSIsInN0YXJ0c1dpdGgiLCJocmVmIiwiZ2V0QXR0cmlidXRlIiwicmVzb3VyY2UiLCJ2ZXJzaW9uIiwic3BsaXQiLCJjdXJyZW50T3JpZ2luIiwid2luZG93IiwibG9jYXRpb24iLCJvcmlnaW4iLCJhbGxMaW5rcyIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvckFsbCIsInNsaWNlIiwibGVuZ3RoIiwib3RoZXJMaW5rIiwib3RoZXJIcmVmIiwib3RoZXJWZXJzaW9uIiwic2V0VGltZW91dCIsInJlbW92ZSIsInByZWxvYWRMaW5rIiwicXVlcnlTZWxlY3RvciIsIm9ic2VydmVyIiwiTXV0YXRpb25PYnNlcnZlciIsIm9ic2VydmUiLCJoZWFkIiwiY2hpbGRMaXN0Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/app-link-gc.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/app-next-dev.js":
|
||
/*!*******************************************************!*\
|
||
!*** ./node_modules/next/dist/client/app-next-dev.js ***!
|
||
\*******************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// TODO-APP: hydration warning\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n__webpack_require__(/*! ./app-webpack */ \"(app-pages-browser)/./node_modules/next/dist/client/app-webpack.js\");\nconst _nextdevtools = __webpack_require__(/*! next/dist/compiled/next-devtools */ \"(app-pages-browser)/./node_modules/next/dist/compiled/next-devtools/index.js\");\nconst _appbootstrap = __webpack_require__(/*! ./app-bootstrap */ \"(app-pages-browser)/./node_modules/next/dist/client/app-bootstrap.js\");\nconst _stitchederror = __webpack_require__(/*! ../next-devtools/userspace/app/errors/stitched-error */ \"(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/errors/stitched-error.js\");\nconst _onrecoverableerror = __webpack_require__(/*! ./react-client-callbacks/on-recoverable-error */ \"(app-pages-browser)/./node_modules/next/dist/client/react-client-callbacks/on-recoverable-error.js\");\n// eslint-disable-next-line @next/internal/typechecked-require\nconst instrumentationHooks = __webpack_require__(/*! ../lib/require-instrumentation-client */ \"(app-pages-browser)/./node_modules/next/dist/lib/require-instrumentation-client.js\");\n(0, _appbootstrap.appBootstrap)(()=>{\n const { hydrate } = __webpack_require__(/*! ./app-index */ \"(app-pages-browser)/./node_modules/next/dist/client/app-index.js\");\n try {\n hydrate(instrumentationHooks);\n } finally{\n (0, _nextdevtools.renderAppDevOverlay)(_stitchederror.getComponentStack, _stitchederror.getOwnerStack, _onrecoverableerror.isRecoverableError);\n }\n});\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=app-next-dev.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2FwcC1uZXh0LWRldi5qcyIsIm1hcHBpbmdzIjoiQUFBQSw4QkFBOEI7Ozs7O29CQUV2QjswQ0FFNkI7MENBQ1A7MkNBSXRCO2dEQUM0QjtBQUVuQyw4REFBOEQ7QUFDOUQsTUFBTUEsdUJBQXVCQyxtQkFBT0EsQ0FBQyxpSUFBdUM7QUFFNUVDLENBQUFBLEdBQUFBLGNBQUFBLFlBQUFBLEVBQWE7SUFDWCxNQUFNLEVBQUVDLE9BQU8sRUFBRSxHQUFHRixtQkFBT0EsQ0FBQyxxRkFBYTtJQUN6QyxJQUFJO1FBQ0ZFLFFBQVFIO0lBQ1YsU0FBVTtRQUNSSSxDQUFBQSxHQUFBQSxjQUFBQSxtQkFBQUEsRUFBb0JDLGVBQUFBLGlCQUFpQixFQUFFQyxlQUFBQSxhQUFhLEVBQUVDLG9CQUFBQSxrQkFBa0I7SUFDMUU7QUFDRiIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvRG9jdW1lbnRzL3NyYy9jbGllbnQvYXBwLW5leHQtZGV2LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRPRE8tQVBQOiBoeWRyYXRpb24gd2FybmluZ1xuXG5pbXBvcnQgJy4vYXBwLXdlYnBhY2snXG5cbmltcG9ydCB7IHJlbmRlckFwcERldk92ZXJsYXkgfSBmcm9tICduZXh0L2Rpc3QvY29tcGlsZWQvbmV4dC1kZXZ0b29scydcbmltcG9ydCB7IGFwcEJvb3RzdHJhcCB9IGZyb20gJy4vYXBwLWJvb3RzdHJhcCdcbmltcG9ydCB7XG4gIGdldENvbXBvbmVudFN0YWNrLFxuICBnZXRPd25lclN0YWNrLFxufSBmcm9tICcuLi9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9hcHAvZXJyb3JzL3N0aXRjaGVkLWVycm9yJ1xuaW1wb3J0IHsgaXNSZWNvdmVyYWJsZUVycm9yIH0gZnJvbSAnLi9yZWFjdC1jbGllbnQtY2FsbGJhY2tzL29uLXJlY292ZXJhYmxlLWVycm9yJ1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQG5leHQvaW50ZXJuYWwvdHlwZWNoZWNrZWQtcmVxdWlyZVxuY29uc3QgaW5zdHJ1bWVudGF0aW9uSG9va3MgPSByZXF1aXJlKCcuLi9saWIvcmVxdWlyZS1pbnN0cnVtZW50YXRpb24tY2xpZW50JylcblxuYXBwQm9vdHN0cmFwKCgpID0+IHtcbiAgY29uc3QgeyBoeWRyYXRlIH0gPSByZXF1aXJlKCcuL2FwcC1pbmRleCcpIGFzIHR5cGVvZiBpbXBvcnQoJy4vYXBwLWluZGV4JylcbiAgdHJ5IHtcbiAgICBoeWRyYXRlKGluc3RydW1lbnRhdGlvbkhvb2tzKVxuICB9IGZpbmFsbHkge1xuICAgIHJlbmRlckFwcERldk92ZXJsYXkoZ2V0Q29tcG9uZW50U3RhY2ssIGdldE93bmVyU3RhY2ssIGlzUmVjb3ZlcmFibGVFcnJvcilcbiAgfVxufSlcbiJdLCJuYW1lcyI6WyJpbnN0cnVtZW50YXRpb25Ib29rcyIsInJlcXVpcmUiLCJhcHBCb290c3RyYXAiLCJoeWRyYXRlIiwicmVuZGVyQXBwRGV2T3ZlcmxheSIsImdldENvbXBvbmVudFN0YWNrIiwiZ2V0T3duZXJTdGFjayIsImlzUmVjb3ZlcmFibGVFcnJvciJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/app-next-dev.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/app-webpack.js":
|
||
/*!******************************************************!*\
|
||
!*** ./node_modules/next/dist/client/app-webpack.js ***!
|
||
\******************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// Override chunk URL mapping in the webpack runtime\n// https://github.com/webpack/webpack/blob/2738eebc7880835d88c727d364ad37f3ec557593/lib/RuntimeGlobals.js#L204\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nconst _deploymentid = __webpack_require__(/*! ../build/deployment-id */ \"(app-pages-browser)/./node_modules/next/dist/build/deployment-id.js\");\nconst _encodeuripath = __webpack_require__(/*! ../shared/lib/encode-uri-path */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/encode-uri-path.js\");\n// If we have a deployment ID, we need to append it to the webpack chunk names\n// I am keeping the process check explicit so this can be statically optimized\nif (false) {} else {\n // eslint-disable-next-line no-undef\n const getChunkScriptFilename = __webpack_require__.u;\n // eslint-disable-next-line no-undef\n __webpack_require__.u = function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n return(// filename path.\n (0, _encodeuripath.encodeURIPath)(getChunkScriptFilename(...args)));\n };\n// We don't need to override __webpack_require__.k because we don't modify\n// the css chunk name when not using deployment id suffixes\n// WE don't need to override __webpack_require__.miniCssF because we don't modify\n// the mini css chunk name when not using deployment id suffixes\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=app-webpack.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2FwcC13ZWJwYWNrLmpzIiwibWFwcGluZ3MiOiJBQUFBLG9EQUFvRDtBQUNwRCw4R0FBOEc7Ozs7OzBDQUU1RDsyQ0FDcEI7QUFJOUIsOEVBQThFO0FBQzlFLDhFQUE4RTtBQUM5RSxJQUFJQSxLQUE4QixFQUFFLEVBcUJuQyxNQUFNO0lBQ0wsb0NBQW9DO0lBQ3BDLE1BQU1LLHlCQUF5QkMsbUJBQW1CQSxDQUFDQyxDQUFDO0lBQ3BELG9DQUFvQztJQUNwQ0QsbUJBQW1CQSxDQUFDQyxDQUFDLEdBQUc7eUNBQUlDLE9BQUFBLElBQUFBLE1BQUFBLE9BQUFBLE9BQUFBLEdBQUFBLE9BQUFBLE1BQUFBLE9BQUFBO1lBQUFBLElBQUFBLENBQUFBLEtBQUFBLEdBQUFBLFNBQUFBLENBQUFBLEtBQUFBOztlQUUxQixpQkFBaUI7UUFDakJDLENBQUFBLEdBQUFBLGVBQUFBLGFBQUFBLEVBQWNKLDBCQUEwQkc7O0FBRTFDLDBFQUEwRTtBQUMxRSwyREFBMkQ7QUFFM0QsaUZBQWlGO0FBQ2pGLGdFQUFnRTtBQUNsRSIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvRG9jdW1lbnRzL3NyYy9jbGllbnQvYXBwLXdlYnBhY2sudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gT3ZlcnJpZGUgY2h1bmsgVVJMIG1hcHBpbmcgaW4gdGhlIHdlYnBhY2sgcnVudGltZVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2svd2VicGFjay9ibG9iLzI3MzhlZWJjNzg4MDgzNWQ4OGM3MjdkMzY0YWQzN2YzZWM1NTc1OTMvbGliL1J1bnRpbWVHbG9iYWxzLmpzI0wyMDRcblxuaW1wb3J0IHsgZ2V0RGVwbG95bWVudElkUXVlcnlPckVtcHR5U3RyaW5nIH0gZnJvbSAnLi4vYnVpbGQvZGVwbG95bWVudC1pZCdcbmltcG9ydCB7IGVuY29kZVVSSVBhdGggfSBmcm9tICcuLi9zaGFyZWQvbGliL2VuY29kZS11cmktcGF0aCdcblxuZGVjbGFyZSBjb25zdCBfX3dlYnBhY2tfcmVxdWlyZV9fOiBhbnlcblxuLy8gSWYgd2UgaGF2ZSBhIGRlcGxveW1lbnQgSUQsIHdlIG5lZWQgdG8gYXBwZW5kIGl0IHRvIHRoZSB3ZWJwYWNrIGNodW5rIG5hbWVzXG4vLyBJIGFtIGtlZXBpbmcgdGhlIHByb2Nlc3MgY2hlY2sgZXhwbGljaXQgc28gdGhpcyBjYW4gYmUgc3RhdGljYWxseSBvcHRpbWl6ZWRcbmlmIChwcm9jZXNzLmVudi5ORVhUX0RFUExPWU1FTlRfSUQpIHtcbiAgY29uc3Qgc3VmZml4ID0gZ2V0RGVwbG95bWVudElkUXVlcnlPckVtcHR5U3RyaW5nKClcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIGNvbnN0IGdldENodW5rU2NyaXB0RmlsZW5hbWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLnVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIF9fd2VicGFja19yZXF1aXJlX18udSA9ICguLi5hcmdzOiBhbnlbXSkgPT5cbiAgICAvLyBXZSBlbmNvZGUgdGhlIGNodW5rIGZpbGVuYW1lIGJlY2F1c2Ugb3VyIHN0YXRpYyBzZXJ2ZXIgbWF0Y2hlcyBhZ2FpbnN0IGFuZCBlbmNvZGVkXG4gICAgLy8gZmlsZW5hbWUgcGF0aC5cbiAgICBlbmNvZGVVUklQYXRoKGdldENodW5rU2NyaXB0RmlsZW5hbWUoLi4uYXJncykpICsgc3VmZml4XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIGNvbnN0IGdldENodW5rQ3NzRmlsZW5hbWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIF9fd2VicGFja19yZXF1aXJlX18uayA9ICguLi5hcmdzOiBhbnlbXSkgPT5cbiAgICBnZXRDaHVua0Nzc0ZpbGVuYW1lKC4uLmFyZ3MpICsgc3VmZml4XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIGNvbnN0IGdldE1pbmlDc3NGaWxlbmFtZSA9IF9fd2VicGFja19yZXF1aXJlX18ubWluaUNzc0ZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIF9fd2VicGFja19yZXF1aXJlX18ubWluaUNzc0YgPSAoLi4uYXJnczogYW55W10pID0+XG4gICAgZ2V0TWluaUNzc0ZpbGVuYW1lKC4uLmFyZ3MpICsgc3VmZml4XG59IGVsc2Uge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgY29uc3QgZ2V0Q2h1bmtTY3JpcHRGaWxlbmFtZSA9IF9fd2VicGFja19yZXF1aXJlX18udVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgX193ZWJwYWNrX3JlcXVpcmVfXy51ID0gKC4uLmFyZ3M6IGFueVtdKSA9PlxuICAgIC8vIFdlIGVuY29kZSB0aGUgY2h1bmsgZmlsZW5hbWUgYmVjYXVzZSBvdXIgc3RhdGljIHNlcnZlciBtYXRjaGVzIGFnYWluc3QgYW5kIGVuY29kZWRcbiAgICAvLyBmaWxlbmFtZSBwYXRoLlxuICAgIGVuY29kZVVSSVBhdGgoZ2V0Q2h1bmtTY3JpcHRGaWxlbmFtZSguLi5hcmdzKSlcblxuICAvLyBXZSBkb24ndCBuZWVkIHRvIG92ZXJyaWRlIF9fd2VicGFja19yZXF1aXJlX18uayBiZWNhdXNlIHdlIGRvbid0IG1vZGlmeVxuICAvLyB0aGUgY3NzIGNodW5rIG5hbWUgd2hlbiBub3QgdXNpbmcgZGVwbG95bWVudCBpZCBzdWZmaXhlc1xuXG4gIC8vIFdFIGRvbid0IG5lZWQgdG8gb3ZlcnJpZGUgX193ZWJwYWNrX3JlcXVpcmVfXy5taW5pQ3NzRiBiZWNhdXNlIHdlIGRvbid0IG1vZGlmeVxuICAvLyB0aGUgbWluaSBjc3MgY2h1bmsgbmFtZSB3aGVuIG5vdCB1c2luZyBkZXBsb3ltZW50IGlkIHN1ZmZpeGVzXG59XG5cbmV4cG9ydCB7fVxuIl0sIm5hbWVzIjpbInByb2Nlc3MiLCJlbnYiLCJORVhUX0RFUExPWU1FTlRfSUQiLCJzdWZmaXgiLCJnZXREZXBsb3ltZW50SWRRdWVyeU9yRW1wdHlTdHJpbmciLCJnZXRDaHVua1NjcmlwdEZpbGVuYW1lIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsInUiLCJhcmdzIiwiZW5jb2RlVVJJUGF0aCIsImdldENodW5rQ3NzRmlsZW5hbWUiLCJrIiwiZ2V0TWluaUNzc0ZpbGVuYW1lIiwibWluaUNzc0YiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/app-webpack.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/assign-location.js":
|
||
/*!**********************************************************!*\
|
||
!*** ./node_modules/next/dist/client/assign-location.js ***!
|
||
\**********************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"assignLocation\", ({\n enumerable: true,\n get: function() {\n return assignLocation;\n }\n}));\nconst _addbasepath = __webpack_require__(/*! ./add-base-path */ \"(app-pages-browser)/./node_modules/next/dist/client/add-base-path.js\");\nfunction assignLocation(location, url) {\n if (location.startsWith('.')) {\n const urlBase = url.origin + url.pathname;\n return new URL(// new URL('./relative', 'https://example.com/subdir').href -> 'https://example.com/relative'\n // new URL('./relative', 'https://example.com/subdir/').href -> 'https://example.com/subdir/relative'\n (urlBase.endsWith('/') ? urlBase : urlBase + '/') + location);\n }\n return new URL((0, _addbasepath.addBasePath)(location), url.href);\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=assign-location.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2Fzc2lnbi1sb2NhdGlvbi5qcyIsIm1hcHBpbmdzIjoiOzs7O2tEQVNnQkE7OztlQUFBQTs7O3lDQVRZO0FBU3JCLFNBQVNBLGVBQWVDLFFBQWdCLEVBQUVDLEdBQVE7SUFDdkQsSUFBSUQsU0FBU0UsVUFBVSxDQUFDLE1BQU07UUFDNUIsTUFBTUMsVUFBVUYsSUFBSUcsTUFBTSxHQUFHSCxJQUFJSSxRQUFRO1FBQ3pDLE9BQU8sSUFBSUMsSUFDVCw2RkFDNkY7UUFDN0YscUdBQXFHO1NBQ3BHSCxRQUFRSSxRQUFRLENBQUMsT0FBT0osVUFBVUEsVUFBVSxJQUFFLEdBQUtIO0lBRXhEO0lBRUEsT0FBTyxJQUFJTSxJQUFJRSxDQUFBQSxHQUFBQSxhQUFBQSxXQUFBQSxFQUFZUixXQUFXQyxJQUFJUSxJQUFJO0FBQ2hEIiwic291cmNlcyI6WyIvaG9tZS9OaWNob2xhaS9Eb2N1bWVudHMvc3JjL2NsaWVudC9hc3NpZ24tbG9jYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWRkQmFzZVBhdGggfSBmcm9tICcuL2FkZC1iYXNlLXBhdGgnXG5cbi8qKlxuICogRnVuY3Rpb24gdG8gY29ycmVjdGx5IGFzc2lnbiBsb2NhdGlvbiB0byBVUkxcbiAqXG4gKiBUaGUgbWV0aG9kIHdpbGwgYWRkIGJhc2VQYXRoLCBhbmQgd2lsbCBhbHNvIGNvcnJlY3RseSBhZGQgbG9jYXRpb24gKGluY2x1ZGluZyBpZiBpdCBpcyBhIHJlbGF0aXZlIHBhdGgpXG4gKiBAcGFyYW0gbG9jYXRpb24gTG9jYXRpb24gdGhhdCBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIHVybFxuICogQHBhcmFtIHVybCBCYXNlIFVSTCB0byB3aGljaCB0aGUgbG9jYXRpb24gc2hvdWxkIGJlIGFzc2lnbmVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ25Mb2NhdGlvbihsb2NhdGlvbjogc3RyaW5nLCB1cmw6IFVSTCk6IFVSTCB7XG4gIGlmIChsb2NhdGlvbi5zdGFydHNXaXRoKCcuJykpIHtcbiAgICBjb25zdCB1cmxCYXNlID0gdXJsLm9yaWdpbiArIHVybC5wYXRobmFtZVxuICAgIHJldHVybiBuZXcgVVJMKFxuICAgICAgLy8gSW4gb3JkZXIgZm9yIGEgcmVsYXRpdmUgcGF0aCB0byBiZSBhZGRlZCB0byB0aGUgY3VycmVudCB1cmwgY29ycmVjdGx5LCB0aGUgY3VycmVudCB1cmwgbXVzdCBlbmQgd2l0aCBhIHNsYXNoXG4gICAgICAvLyBuZXcgVVJMKCcuL3JlbGF0aXZlJywgJ2h0dHBzOi8vZXhhbXBsZS5jb20vc3ViZGlyJykuaHJlZiAtPiAnaHR0cHM6Ly9leGFtcGxlLmNvbS9yZWxhdGl2ZSdcbiAgICAgIC8vIG5ldyBVUkwoJy4vcmVsYXRpdmUnLCAnaHR0cHM6Ly9leGFtcGxlLmNvbS9zdWJkaXIvJykuaHJlZiAtPiAnaHR0cHM6Ly9leGFtcGxlLmNvbS9zdWJkaXIvcmVsYXRpdmUnXG4gICAgICAodXJsQmFzZS5lbmRzV2l0aCgnLycpID8gdXJsQmFzZSA6IHVybEJhc2UgKyAnLycpICsgbG9jYXRpb25cbiAgICApXG4gIH1cblxuICByZXR1cm4gbmV3IFVSTChhZGRCYXNlUGF0aChsb2NhdGlvbiksIHVybC5ocmVmKVxufVxuIl0sIm5hbWVzIjpbImFzc2lnbkxvY2F0aW9uIiwibG9jYXRpb24iLCJ1cmwiLCJzdGFydHNXaXRoIiwidXJsQmFzZSIsIm9yaWdpbiIsInBhdGhuYW1lIiwiVVJMIiwiZW5kc1dpdGgiLCJhZGRCYXNlUGF0aCIsImhyZWYiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/assign-location.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/app-router-announcer.js":
|
||
/*!**************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/app-router-announcer.js ***!
|
||
\**************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"AppRouterAnnouncer\", ({\n enumerable: true,\n get: function() {\n return AppRouterAnnouncer;\n }\n}));\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\nconst _reactdom = __webpack_require__(/*! react-dom */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react-dom/index.js\");\nconst ANNOUNCER_TYPE = 'next-route-announcer';\nconst ANNOUNCER_ID = '__next-route-announcer__';\nfunction getAnnouncerNode() {\n var _existingAnnouncer_shadowRoot;\n const existingAnnouncer = document.getElementsByName(ANNOUNCER_TYPE)[0];\n if (existingAnnouncer == null ? void 0 : (_existingAnnouncer_shadowRoot = existingAnnouncer.shadowRoot) == null ? void 0 : _existingAnnouncer_shadowRoot.childNodes[0]) {\n return existingAnnouncer.shadowRoot.childNodes[0];\n } else {\n const container = document.createElement(ANNOUNCER_TYPE);\n container.style.cssText = 'position:absolute';\n const announcer = document.createElement('div');\n announcer.ariaLive = 'assertive';\n announcer.id = ANNOUNCER_ID;\n announcer.role = 'alert';\n announcer.style.cssText = 'position:absolute;border:0;height:1px;margin:-1px;padding:0;width:1px;clip:rect(0 0 0 0);overflow:hidden;white-space:nowrap;word-wrap:normal';\n // Use shadow DOM here to avoid any potential CSS bleed\n const shadow = container.attachShadow({\n mode: 'open'\n });\n shadow.appendChild(announcer);\n document.body.appendChild(container);\n return announcer;\n }\n}\nfunction AppRouterAnnouncer(param) {\n let { tree } = param;\n const [portalNode, setPortalNode] = (0, _react.useState)(null);\n (0, _react.useEffect)(()=>{\n const announcer = getAnnouncerNode();\n setPortalNode(announcer);\n return ()=>{\n const container = document.getElementsByTagName(ANNOUNCER_TYPE)[0];\n if (container == null ? void 0 : container.isConnected) {\n document.body.removeChild(container);\n }\n };\n }, []);\n const [routeAnnouncement, setRouteAnnouncement] = (0, _react.useState)('');\n const previousTitle = (0, _react.useRef)(undefined);\n (0, _react.useEffect)(()=>{\n let currentTitle = '';\n if (document.title) {\n currentTitle = document.title;\n } else {\n const pageHeader = document.querySelector('h1');\n if (pageHeader) {\n currentTitle = pageHeader.innerText || pageHeader.textContent || '';\n }\n }\n // Only announce the title change, but not for the first load because screen\n // readers do that automatically.\n if (previousTitle.current !== undefined && previousTitle.current !== currentTitle) {\n setRouteAnnouncement(currentTitle);\n }\n previousTitle.current = currentTitle;\n }, [\n tree\n ]);\n return portalNode ? /*#__PURE__*/ (0, _reactdom.createPortal)(routeAnnouncement, portalNode) : null;\n}\n_c = AppRouterAnnouncer;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=app-router-announcer.js.map\nvar _c;\n$RefreshReg$(_c, \"AppRouterAnnouncer\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvYXBwLXJvdXRlci1hbm5vdW5jZXIuanMiLCJtYXBwaW5ncyI6Ijs7OztzREE2QmdCQTs7O2VBQUFBOzs7bUNBN0I0QjtzQ0FDZjtBQUc3QixNQUFNQyxpQkFBaUI7QUFDdkIsTUFBTUMsZUFBZTtBQUVyQixTQUFTQztRQUVIQztJQURKLE1BQU1BLG9CQUFvQkMsU0FBU0MsaUJBQWlCLENBQUNMLGVBQWUsQ0FBQyxFQUFFO0lBQ3ZFLElBQUlHLHFCQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxDQUFBQSxnQ0FBQUEsa0JBQW1CRyxVQUFBQSxLQUFVLGdCQUE3QkgsOEJBQStCSSxVQUFVLENBQUMsRUFBRSxFQUFFO1FBQ2hELE9BQU9KLGtCQUFrQkcsVUFBVSxDQUFDQyxVQUFVLENBQUMsRUFBRTtJQUNuRCxPQUFPO1FBQ0wsTUFBTUMsWUFBWUosU0FBU0ssYUFBYSxDQUFDVDtRQUN6Q1EsVUFBVUUsS0FBSyxDQUFDQyxPQUFPLEdBQUc7UUFDMUIsTUFBTUMsWUFBWVIsU0FBU0ssYUFBYSxDQUFDO1FBQ3pDRyxVQUFVQyxRQUFRLEdBQUc7UUFDckJELFVBQVVFLEVBQUUsR0FBR2I7UUFDZlcsVUFBVUcsSUFBSSxHQUFHO1FBQ2pCSCxVQUFVRixLQUFLLENBQUNDLE9BQU8sR0FDckI7UUFFRix1REFBdUQ7UUFDdkQsTUFBTUssU0FBU1IsVUFBVVMsWUFBWSxDQUFDO1lBQUVDLE1BQU07UUFBTztRQUNyREYsT0FBT0csV0FBVyxDQUFDUDtRQUNuQlIsU0FBU2dCLElBQUksQ0FBQ0QsV0FBVyxDQUFDWDtRQUMxQixPQUFPSTtJQUNUO0FBQ0Y7QUFFTyw0QkFBNEIsS0FBcUM7SUFBckMsTUFBRVMsSUFBSSxFQUErQixHQUFyQztJQUNqQyxNQUFNLENBQUNDLFlBQVlDLGNBQWMsR0FBR0MsQ0FBQUEsR0FBQUEsT0FBQUEsUUFBQUEsRUFBNkI7SUFFakVDLENBQUFBLEdBQUFBLE9BQUFBLFNBQUFBLEVBQVU7UUFDUixNQUFNYixZQUFZVjtRQUNsQnFCLGNBQWNYO1FBQ2QsT0FBTztZQUNMLE1BQU1KLFlBQVlKLFNBQVNzQixvQkFBb0IsQ0FBQzFCLGVBQWUsQ0FBQyxFQUFFO1lBQ2xFLElBQUlRLGFBQUFBLE9BQUFBLEtBQUFBLElBQUFBLFVBQVdtQixXQUFXLEVBQUU7Z0JBQzFCdkIsU0FBU2dCLElBQUksQ0FBQ1EsV0FBVyxDQUFDcEI7WUFDNUI7UUFDRjtJQUNGLEdBQUcsRUFBRTtJQUVMLE1BQU0sQ0FBQ3FCLG1CQUFtQkMscUJBQXFCLEdBQUdOLENBQUFBLEdBQUFBLE9BQUFBLFFBQUFBLEVBQVM7SUFDM0QsTUFBTU8sZ0JBQWdCQyxDQUFBQSxHQUFBQSxPQUFBQSxNQUFBQSxFQUEyQkM7SUFFakRSLENBQUFBLEdBQUFBLE9BQUFBLFNBQUFBLEVBQVU7UUFDUixJQUFJUyxlQUFlO1FBQ25CLElBQUk5QixTQUFTK0IsS0FBSyxFQUFFO1lBQ2xCRCxlQUFlOUIsU0FBUytCLEtBQUs7UUFDL0IsT0FBTztZQUNMLE1BQU1DLGFBQWFoQyxTQUFTaUMsYUFBYSxDQUFDO1lBQzFDLElBQUlELFlBQVk7Z0JBQ2RGLGVBQWVFLFdBQVdFLFNBQVMsSUFBSUYsV0FBV0csV0FBVyxJQUFJO1lBQ25FO1FBQ0Y7UUFFQSw0RUFBNEU7UUFDNUUsaUNBQWlDO1FBQ2pDLElBQ0VSLGNBQWNTLE9BQU8sS0FBS1AsYUFDMUJGLGNBQWNTLE9BQU8sS0FBS04sY0FDMUI7WUFDQUoscUJBQXFCSTtRQUN2QjtRQUNBSCxjQUFjUyxPQUFPLEdBQUdOO0lBQzFCLEdBQUc7UUFBQ2I7S0FBSztJQUVULE9BQU9DLGFBQUFBLFdBQUFBLEdBQWFtQixDQUFBQSxHQUFBQSxVQUFBQSxZQUFBQSxFQUFhWixtQkFBbUJQLGNBQWM7QUFDcEU7S0F4Q2dCdkIiLCJzb3VyY2VzIjpbIi9ob21lL05pY2hvbGFpL3NyYy9jbGllbnQvY29tcG9uZW50cy9hcHAtcm91dGVyLWFubm91bmNlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgdHlwZSB7IEZsaWdodFJvdXRlclN0YXRlIH0gZnJvbSAnLi4vLi4vc2VydmVyL2FwcC1yZW5kZXIvdHlwZXMnXG5cbmNvbnN0IEFOTk9VTkNFUl9UWVBFID0gJ25leHQtcm91dGUtYW5ub3VuY2VyJ1xuY29uc3QgQU5OT1VOQ0VSX0lEID0gJ19fbmV4dC1yb3V0ZS1hbm5vdW5jZXJfXydcblxuZnVuY3Rpb24gZ2V0QW5ub3VuY2VyTm9kZSgpIHtcbiAgY29uc3QgZXhpc3RpbmdBbm5vdW5jZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShBTk5PVU5DRVJfVFlQRSlbMF1cbiAgaWYgKGV4aXN0aW5nQW5ub3VuY2VyPy5zaGFkb3dSb290Py5jaGlsZE5vZGVzWzBdKSB7XG4gICAgcmV0dXJuIGV4aXN0aW5nQW5ub3VuY2VyLnNoYWRvd1Jvb3QuY2hpbGROb2Rlc1swXSBhcyBIVE1MRWxlbWVudFxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoQU5OT1VOQ0VSX1RZUEUpXG4gICAgY29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246YWJzb2x1dGUnXG4gICAgY29uc3QgYW5ub3VuY2VyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICBhbm5vdW5jZXIuYXJpYUxpdmUgPSAnYXNzZXJ0aXZlJ1xuICAgIGFubm91bmNlci5pZCA9IEFOTk9VTkNFUl9JRFxuICAgIGFubm91bmNlci5yb2xlID0gJ2FsZXJ0J1xuICAgIGFubm91bmNlci5zdHlsZS5jc3NUZXh0ID1cbiAgICAgICdwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXI6MDtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O3BhZGRpbmc6MDt3aWR0aDoxcHg7Y2xpcDpyZWN0KDAgMCAwIDApO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7d29yZC13cmFwOm5vcm1hbCdcblxuICAgIC8vIFVzZSBzaGFkb3cgRE9NIGhlcmUgdG8gYXZvaWQgYW55IHBvdGVudGlhbCBDU1MgYmxlZWRcbiAgICBjb25zdCBzaGFkb3cgPSBjb250YWluZXIuYXR0YWNoU2hhZG93KHsgbW9kZTogJ29wZW4nIH0pXG4gICAgc2hhZG93LmFwcGVuZENoaWxkKGFubm91bmNlcilcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lcilcbiAgICByZXR1cm4gYW5ub3VuY2VyXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEFwcFJvdXRlckFubm91bmNlcih7IHRyZWUgfTogeyB0cmVlOiBGbGlnaHRSb3V0ZXJTdGF0ZSB9KSB7XG4gIGNvbnN0IFtwb3J0YWxOb2RlLCBzZXRQb3J0YWxOb2RlXSA9IHVzZVN0YXRlPEhUTUxFbGVtZW50IHwgbnVsbD4obnVsbClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGFubm91bmNlciA9IGdldEFubm91bmNlck5vZGUoKVxuICAgIHNldFBvcnRhbE5vZGUoYW5ub3VuY2VyKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShBTk5PVU5DRVJfVFlQRSlbMF1cbiAgICAgIGlmIChjb250YWluZXI/LmlzQ29ubmVjdGVkKSB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoY29udGFpbmVyKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgW3JvdXRlQW5ub3VuY2VtZW50LCBzZXRSb3V0ZUFubm91bmNlbWVudF0gPSB1c2VTdGF0ZSgnJylcbiAgY29uc3QgcHJldmlvdXNUaXRsZSA9IHVzZVJlZjxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxldCBjdXJyZW50VGl0bGUgPSAnJ1xuICAgIGlmIChkb2N1bWVudC50aXRsZSkge1xuICAgICAgY3VycmVudFRpdGxlID0gZG9jdW1lbnQudGl0bGVcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcGFnZUhlYWRlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2gxJylcbiAgICAgIGlmIChwYWdlSGVhZGVyKSB7XG4gICAgICAgIGN1cnJlbnRUaXRsZSA9IHBhZ2VIZWFkZXIuaW5uZXJUZXh0IHx8IHBhZ2VIZWFkZXIudGV4dENvbnRlbnQgfHwgJydcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPbmx5IGFubm91bmNlIHRoZSB0aXRsZSBjaGFuZ2UsIGJ1dCBub3QgZm9yIHRoZSBmaXJzdCBsb2FkIGJlY2F1c2Ugc2NyZWVuXG4gICAgLy8gcmVhZGVycyBkbyB0aGF0IGF1dG9tYXRpY2FsbHkuXG4gICAgaWYgKFxuICAgICAgcHJldmlvdXNUaXRsZS5jdXJyZW50ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHByZXZpb3VzVGl0bGUuY3VycmVudCAhPT0gY3VycmVudFRpdGxlXG4gICAgKSB7XG4gICAgICBzZXRSb3V0ZUFubm91bmNlbWVudChjdXJyZW50VGl0bGUpXG4gICAgfVxuICAgIHByZXZpb3VzVGl0bGUuY3VycmVudCA9IGN1cnJlbnRUaXRsZVxuICB9LCBbdHJlZV0pXG5cbiAgcmV0dXJuIHBvcnRhbE5vZGUgPyBjcmVhdGVQb3J0YWwocm91dGVBbm5vdW5jZW1lbnQsIHBvcnRhbE5vZGUpIDogbnVsbFxufVxuIl0sIm5hbWVzIjpbIkFwcFJvdXRlckFubm91bmNlciIsIkFOTk9VTkNFUl9UWVBFIiwiQU5OT1VOQ0VSX0lEIiwiZ2V0QW5ub3VuY2VyTm9kZSIsImV4aXN0aW5nQW5ub3VuY2VyIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50c0J5TmFtZSIsInNoYWRvd1Jvb3QiLCJjaGlsZE5vZGVzIiwiY29udGFpbmVyIiwiY3JlYXRlRWxlbWVudCIsInN0eWxlIiwiY3NzVGV4dCIsImFubm91bmNlciIsImFyaWFMaXZlIiwiaWQiLCJyb2xlIiwic2hhZG93IiwiYXR0YWNoU2hhZG93IiwibW9kZSIsImFwcGVuZENoaWxkIiwiYm9keSIsInRyZWUiLCJwb3J0YWxOb2RlIiwic2V0UG9ydGFsTm9kZSIsInVzZVN0YXRlIiwidXNlRWZmZWN0IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJpc0Nvbm5lY3RlZCIsInJlbW92ZUNoaWxkIiwicm91dGVBbm5vdW5jZW1lbnQiLCJzZXRSb3V0ZUFubm91bmNlbWVudCIsInByZXZpb3VzVGl0bGUiLCJ1c2VSZWYiLCJ1bmRlZmluZWQiLCJjdXJyZW50VGl0bGUiLCJ0aXRsZSIsInBhZ2VIZWFkZXIiLCJxdWVyeVNlbGVjdG9yIiwiaW5uZXJUZXh0IiwidGV4dENvbnRlbnQiLCJjdXJyZW50IiwiY3JlYXRlUG9ydGFsIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/app-router-announcer.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/app-router-headers.js":
|
||
/*!************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/app-router-headers.js ***!
|
||
\************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n ACTION_HEADER: function() {\n return ACTION_HEADER;\n },\n FLIGHT_HEADERS: function() {\n return FLIGHT_HEADERS;\n },\n NEXT_ACTION_NOT_FOUND_HEADER: function() {\n return NEXT_ACTION_NOT_FOUND_HEADER;\n },\n NEXT_DID_POSTPONE_HEADER: function() {\n return NEXT_DID_POSTPONE_HEADER;\n },\n NEXT_HMR_REFRESH_HASH_COOKIE: function() {\n return NEXT_HMR_REFRESH_HASH_COOKIE;\n },\n NEXT_HMR_REFRESH_HEADER: function() {\n return NEXT_HMR_REFRESH_HEADER;\n },\n NEXT_IS_PRERENDER_HEADER: function() {\n return NEXT_IS_PRERENDER_HEADER;\n },\n NEXT_REWRITTEN_PATH_HEADER: function() {\n return NEXT_REWRITTEN_PATH_HEADER;\n },\n NEXT_REWRITTEN_QUERY_HEADER: function() {\n return NEXT_REWRITTEN_QUERY_HEADER;\n },\n NEXT_ROUTER_PREFETCH_HEADER: function() {\n return NEXT_ROUTER_PREFETCH_HEADER;\n },\n NEXT_ROUTER_SEGMENT_PREFETCH_HEADER: function() {\n return NEXT_ROUTER_SEGMENT_PREFETCH_HEADER;\n },\n NEXT_ROUTER_STALE_TIME_HEADER: function() {\n return NEXT_ROUTER_STALE_TIME_HEADER;\n },\n NEXT_ROUTER_STATE_TREE_HEADER: function() {\n return NEXT_ROUTER_STATE_TREE_HEADER;\n },\n NEXT_RSC_UNION_QUERY: function() {\n return NEXT_RSC_UNION_QUERY;\n },\n NEXT_URL: function() {\n return NEXT_URL;\n },\n RSC_CONTENT_TYPE_HEADER: function() {\n return RSC_CONTENT_TYPE_HEADER;\n },\n RSC_HEADER: function() {\n return RSC_HEADER;\n }\n});\nconst RSC_HEADER = 'RSC';\nconst ACTION_HEADER = 'Next-Action';\nconst NEXT_ROUTER_STATE_TREE_HEADER = 'Next-Router-State-Tree';\nconst NEXT_ROUTER_PREFETCH_HEADER = 'Next-Router-Prefetch';\nconst NEXT_ROUTER_SEGMENT_PREFETCH_HEADER = 'Next-Router-Segment-Prefetch';\nconst NEXT_HMR_REFRESH_HEADER = 'Next-HMR-Refresh';\nconst NEXT_HMR_REFRESH_HASH_COOKIE = '__next_hmr_refresh_hash__';\nconst NEXT_URL = 'Next-Url';\nconst RSC_CONTENT_TYPE_HEADER = 'text/x-component';\nconst FLIGHT_HEADERS = [\n RSC_HEADER,\n NEXT_ROUTER_STATE_TREE_HEADER,\n NEXT_ROUTER_PREFETCH_HEADER,\n NEXT_HMR_REFRESH_HEADER,\n NEXT_ROUTER_SEGMENT_PREFETCH_HEADER\n];\nconst NEXT_RSC_UNION_QUERY = '_rsc';\nconst NEXT_ROUTER_STALE_TIME_HEADER = 'x-nextjs-stale-time';\nconst NEXT_DID_POSTPONE_HEADER = 'x-nextjs-postponed';\nconst NEXT_REWRITTEN_PATH_HEADER = 'x-nextjs-rewritten-path';\nconst NEXT_REWRITTEN_QUERY_HEADER = 'x-nextjs-rewritten-query';\nconst NEXT_IS_PRERENDER_HEADER = 'x-nextjs-prerender';\nconst NEXT_ACTION_NOT_FOUND_HEADER = 'x-nextjs-action-not-found';\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=app-router-headers.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvYXBwLXJvdXRlci1oZWFkZXJzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQUNhQSxhQUFhO2VBQWJBOztJQWlCQUMsY0FBYztlQUFkQTs7SUFlQUMsNEJBQTRCO2VBQTVCQTs7SUFKQUMsd0JBQXdCO2VBQXhCQTs7SUFmQUMsNEJBQTRCO2VBQTVCQTs7SUFEQUMsdUJBQXVCO2VBQXZCQTs7SUFtQkFDLHdCQUF3QjtlQUF4QkE7O0lBRkFDLDBCQUEwQjtlQUExQkE7O0lBQ0FDLDJCQUEyQjtlQUEzQkE7O0lBekJBQywyQkFBMkI7ZUFBM0JBOztJQUtBQyxtQ0FBbUM7ZUFBbkNBOztJQWlCQUMsNkJBQTZCO2VBQTdCQTs7SUF2QkFDLDZCQUE2QjtlQUE3QkE7O0lBcUJBQyxvQkFBb0I7ZUFBcEJBOztJQVhBQyxRQUFRO2VBQVJBOztJQUNBQyx1QkFBdUI7ZUFBdkJBOztJQWhCQUMsVUFBVTtlQUFWQTs7O0FBQU4sTUFBTUEsYUFBYTtBQUNuQixNQUFNaEIsZ0JBQWdCO0FBSXRCLE1BQU1ZLGdDQUFnQztBQUN0QyxNQUFNSCw4QkFBOEI7QUFLcEMsTUFBTUMsc0NBQ1g7QUFDSyxNQUFNTCwwQkFBMEI7QUFDaEMsTUFBTUQsK0JBQStCO0FBQ3JDLE1BQU1VLFdBQVc7QUFDakIsTUFBTUMsMEJBQTBCO0FBRWhDLE1BQU1kLGlCQUFpQjtJQUM1QmU7SUFDQUo7SUFDQUg7SUFDQUo7SUFDQUs7Q0FDRDtBQUVNLE1BQU1HLHVCQUF1QjtBQUU3QixNQUFNRixnQ0FBZ0M7QUFDdEMsTUFBTVIsMkJBQTJCO0FBQ2pDLE1BQU1JLDZCQUE2QjtBQUNuQyxNQUFNQyw4QkFBOEI7QUFDcEMsTUFBTUYsMkJBQTJCO0FBQ2pDLE1BQU1KLCtCQUErQiIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvc3JjL2NsaWVudC9jb21wb25lbnRzL2FwcC1yb3V0ZXItaGVhZGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgUlNDX0hFQURFUiA9ICdSU0MnIGFzIGNvbnN0XG5leHBvcnQgY29uc3QgQUNUSU9OX0hFQURFUiA9ICdOZXh0LUFjdGlvbicgYXMgY29uc3Rcbi8vIFRPRE86IEluc3RlYWQgb2Ygc2VuZGluZyB0aGUgZnVsbCByb3V0ZXIgc3RhdGUsIHdlIG9ubHkgbmVlZCB0byBzZW5kIHRoZVxuLy8gc2VnbWVudCBwYXRoLiBTYXZlcyBieXRlcy4gVGhlbiB3ZSBjb3VsZCBhbHNvIHVzZSB0aGlzIGZpZWxkIGZvciBzZWdtZW50XG4vLyBwcmVmZXRjaGVzLCB3aGljaCBhbHNvIG5lZWQgdG8gc3BlY2lmeSBhIHBhcnRpY3VsYXIgc2VnbWVudC5cbmV4cG9ydCBjb25zdCBORVhUX1JPVVRFUl9TVEFURV9UUkVFX0hFQURFUiA9ICdOZXh0LVJvdXRlci1TdGF0ZS1UcmVlJyBhcyBjb25zdFxuZXhwb3J0IGNvbnN0IE5FWFRfUk9VVEVSX1BSRUZFVENIX0hFQURFUiA9ICdOZXh0LVJvdXRlci1QcmVmZXRjaCcgYXMgY29uc3Rcbi8vIFRoaXMgY29udGFpbnMgdGhlIHBhdGggdG8gdGhlIHNlZ21lbnQgYmVpbmcgcHJlZmV0Y2hlZC5cbi8vIFRPRE86IElmIHdlIGNoYW5nZSBOZXh0LVJvdXRlci1TdGF0ZS1UcmVlIHRvIGJlIGEgc2VnbWVudCBwYXRoLCB3ZSBjYW4gdXNlXG4vLyB0aGF0IGluc3RlYWQuIFRoZW4gTmV4dC1Sb3V0ZXItUHJlZmV0Y2ggYW5kIE5leHQtUm91dGVyLVNlZ21lbnQtUHJlZmV0Y2ggY2FuXG4vLyBiZSBtZXJnZWQgaW50byBhIHNpbmdsZSBlbnVtLlxuZXhwb3J0IGNvbnN0IE5FWFRfUk9VVEVSX1NFR01FTlRfUFJFRkVUQ0hfSEVBREVSID1cbiAgJ05leHQtUm91dGVyLVNlZ21lbnQtUHJlZmV0Y2gnIGFzIGNvbnN0XG5leHBvcnQgY29uc3QgTkVYVF9ITVJfUkVGUkVTSF9IRUFERVIgPSAnTmV4dC1ITVItUmVmcmVzaCcgYXMgY29uc3RcbmV4cG9ydCBjb25zdCBORVhUX0hNUl9SRUZSRVNIX0hBU0hfQ09PS0lFID0gJ19fbmV4dF9obXJfcmVmcmVzaF9oYXNoX18nIGFzIGNvbnN0XG5leHBvcnQgY29uc3QgTkVYVF9VUkwgPSAnTmV4dC1VcmwnIGFzIGNvbnN0XG5leHBvcnQgY29uc3QgUlNDX0NPTlRFTlRfVFlQRV9IRUFERVIgPSAndGV4dC94LWNvbXBvbmVudCcgYXMgY29uc3RcblxuZXhwb3J0IGNvbnN0IEZMSUdIVF9IRUFERVJTID0gW1xuICBSU0NfSEVBREVSLFxuICBORVhUX1JPVVRFUl9TVEFURV9UUkVFX0hFQURFUixcbiAgTkVYVF9ST1VURVJfUFJFRkVUQ0hfSEVBREVSLFxuICBORVhUX0hNUl9SRUZSRVNIX0hFQURFUixcbiAgTkVYVF9ST1VURVJfU0VHTUVOVF9QUkVGRVRDSF9IRUFERVIsXG5dIGFzIGNvbnN0XG5cbmV4cG9ydCBjb25zdCBORVhUX1JTQ19VTklPTl9RVUVSWSA9ICdfcnNjJyBhcyBjb25zdFxuXG5leHBvcnQgY29uc3QgTkVYVF9ST1VURVJfU1RBTEVfVElNRV9IRUFERVIgPSAneC1uZXh0anMtc3RhbGUtdGltZScgYXMgY29uc3RcbmV4cG9ydCBjb25zdCBORVhUX0RJRF9QT1NUUE9ORV9IRUFERVIgPSAneC1uZXh0anMtcG9zdHBvbmVkJyBhcyBjb25zdFxuZXhwb3J0IGNvbnN0IE5FWFRfUkVXUklUVEVOX1BBVEhfSEVBREVSID0gJ3gtbmV4dGpzLXJld3JpdHRlbi1wYXRoJyBhcyBjb25zdFxuZXhwb3J0IGNvbnN0IE5FWFRfUkVXUklUVEVOX1FVRVJZX0hFQURFUiA9ICd4LW5leHRqcy1yZXdyaXR0ZW4tcXVlcnknIGFzIGNvbnN0XG5leHBvcnQgY29uc3QgTkVYVF9JU19QUkVSRU5ERVJfSEVBREVSID0gJ3gtbmV4dGpzLXByZXJlbmRlcicgYXMgY29uc3RcbmV4cG9ydCBjb25zdCBORVhUX0FDVElPTl9OT1RfRk9VTkRfSEVBREVSID0gJ3gtbmV4dGpzLWFjdGlvbi1ub3QtZm91bmQnIGFzIGNvbnN0XG4iXSwibmFtZXMiOlsiQUNUSU9OX0hFQURFUiIsIkZMSUdIVF9IRUFERVJTIiwiTkVYVF9BQ1RJT05fTk9UX0ZPVU5EX0hFQURFUiIsIk5FWFRfRElEX1BPU1RQT05FX0hFQURFUiIsIk5FWFRfSE1SX1JFRlJFU0hfSEFTSF9DT09LSUUiLCJORVhUX0hNUl9SRUZSRVNIX0hFQURFUiIsIk5FWFRfSVNfUFJFUkVOREVSX0hFQURFUiIsIk5FWFRfUkVXUklUVEVOX1BBVEhfSEVBREVSIiwiTkVYVF9SRVdSSVRURU5fUVVFUllfSEVBREVSIiwiTkVYVF9ST1VURVJfUFJFRkVUQ0hfSEVBREVSIiwiTkVYVF9ST1VURVJfU0VHTUVOVF9QUkVGRVRDSF9IRUFERVIiLCJORVhUX1JPVVRFUl9TVEFMRV9USU1FX0hFQURFUiIsIk5FWFRfUk9VVEVSX1NUQVRFX1RSRUVfSEVBREVSIiwiTkVYVF9SU0NfVU5JT05fUVVFUlkiLCJORVhUX1VSTCIsIlJTQ19DT05URU5UX1RZUEVfSEVBREVSIiwiUlNDX0hFQURFUiJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/app-router-headers.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/app-router-instance.js":
|
||
/*!*************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/app-router-instance.js ***!
|
||
\*************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n createMutableActionQueue: function() {\n return createMutableActionQueue;\n },\n dispatchNavigateAction: function() {\n return dispatchNavigateAction;\n },\n dispatchTraverseAction: function() {\n return dispatchTraverseAction;\n },\n getCurrentAppRouterState: function() {\n return getCurrentAppRouterState;\n },\n publicAppRouterInstance: function() {\n return publicAppRouterInstance;\n }\n});\nconst _routerreducertypes = __webpack_require__(/*! ./router-reducer/router-reducer-types */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst _routerreducer = __webpack_require__(/*! ./router-reducer/router-reducer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/router-reducer.js\");\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\nconst _isthenable = __webpack_require__(/*! ../../shared/lib/is-thenable */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/is-thenable.js\");\nconst _segmentcache = __webpack_require__(/*! ./segment-cache */ \"(app-pages-browser)/./node_modules/next/dist/client/components/segment-cache.js\");\nconst _useactionqueue = __webpack_require__(/*! ./use-action-queue */ \"(app-pages-browser)/./node_modules/next/dist/client/components/use-action-queue.js\");\nconst _addbasepath = __webpack_require__(/*! ../add-base-path */ \"(app-pages-browser)/./node_modules/next/dist/client/add-base-path.js\");\nconst _approuter = __webpack_require__(/*! ./app-router */ \"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js\");\nconst _prefetchreducer = __webpack_require__(/*! ./router-reducer/reducers/prefetch-reducer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/prefetch-reducer.js\");\nconst _links = __webpack_require__(/*! ./links */ \"(app-pages-browser)/./node_modules/next/dist/client/components/links.js\");\nfunction runRemainingActions(actionQueue, setState) {\n if (actionQueue.pending !== null) {\n actionQueue.pending = actionQueue.pending.next;\n if (actionQueue.pending !== null) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n runAction({\n actionQueue,\n action: actionQueue.pending,\n setState\n });\n } else {\n // No more actions are pending, check if a refresh is needed\n if (actionQueue.needsRefresh) {\n actionQueue.needsRefresh = false;\n actionQueue.dispatch({\n type: _routerreducertypes.ACTION_REFRESH,\n origin: window.location.origin\n }, setState);\n }\n }\n }\n}\nasync function runAction(param) {\n let { actionQueue, action, setState } = param;\n const prevState = actionQueue.state;\n actionQueue.pending = action;\n const payload = action.payload;\n const actionResult = actionQueue.action(prevState, payload);\n function handleResult(nextState) {\n // if we discarded this action, the state should also be discarded\n if (action.discarded) {\n return;\n }\n actionQueue.state = nextState;\n runRemainingActions(actionQueue, setState);\n action.resolve(nextState);\n }\n // if the action is a promise, set up a callback to resolve it\n if ((0, _isthenable.isThenable)(actionResult)) {\n actionResult.then(handleResult, (err)=>{\n runRemainingActions(actionQueue, setState);\n action.reject(err);\n });\n } else {\n handleResult(actionResult);\n }\n}\nfunction dispatchAction(actionQueue, payload, setState) {\n let resolvers = {\n resolve: setState,\n reject: ()=>{}\n };\n // most of the action types are async with the exception of restore\n // it's important that restore is handled quickly since it's fired on the popstate event\n // and we don't want to add any delay on a back/forward nav\n // this only creates a promise for the async actions\n if (payload.type !== _routerreducertypes.ACTION_RESTORE) {\n // Create the promise and assign the resolvers to the object.\n const deferredPromise = new Promise((resolve, reject)=>{\n resolvers = {\n resolve,\n reject\n };\n });\n (0, _react.startTransition)(()=>{\n // we immediately notify React of the pending promise -- the resolver is attached to the action node\n // and will be called when the associated action promise resolves\n setState(deferredPromise);\n });\n }\n const newAction = {\n payload,\n next: null,\n resolve: resolvers.resolve,\n reject: resolvers.reject\n };\n // Check if the queue is empty\n if (actionQueue.pending === null) {\n // The queue is empty, so add the action and start it immediately\n // Mark this action as the last in the queue\n actionQueue.last = newAction;\n runAction({\n actionQueue,\n action: newAction,\n setState\n });\n } else if (payload.type === _routerreducertypes.ACTION_NAVIGATE || payload.type === _routerreducertypes.ACTION_RESTORE) {\n // Navigations (including back/forward) take priority over any pending actions.\n // Mark the pending action as discarded (so the state is never applied) and start the navigation action immediately.\n actionQueue.pending.discarded = true;\n // The rest of the current queue should still execute after this navigation.\n // (Note that it can't contain any earlier navigations, because we always put those into `actionQueue.pending` by calling `runAction`)\n newAction.next = actionQueue.pending.next;\n // if the pending action was a server action, mark the queue as needing a refresh once events are processed\n if (actionQueue.pending.payload.type === _routerreducertypes.ACTION_SERVER_ACTION) {\n actionQueue.needsRefresh = true;\n }\n runAction({\n actionQueue,\n action: newAction,\n setState\n });\n } else {\n // The queue is not empty, so add the action to the end of the queue\n // It will be started by runRemainingActions after the previous action finishes\n if (actionQueue.last !== null) {\n actionQueue.last.next = newAction;\n }\n actionQueue.last = newAction;\n }\n}\nlet globalActionQueue = null;\nfunction createMutableActionQueue(initialState, instrumentationHooks) {\n const actionQueue = {\n state: initialState,\n dispatch: (payload, setState)=>dispatchAction(actionQueue, payload, setState),\n action: async (state, action)=>{\n const result = (0, _routerreducer.reducer)(state, action);\n return result;\n },\n pending: null,\n last: null,\n onRouterTransitionStart: instrumentationHooks !== null && typeof instrumentationHooks.onRouterTransitionStart === 'function' ? instrumentationHooks.onRouterTransitionStart : null\n };\n if (true) {\n // The action queue is lazily created on hydration, but after that point\n // it doesn't change. So we can store it in a global rather than pass\n // it around everywhere via props/context.\n if (globalActionQueue !== null) {\n throw Object.defineProperty(new Error('Internal Next.js Error: createMutableActionQueue was called more ' + 'than once'), \"__NEXT_ERROR_CODE\", {\n value: \"E624\",\n enumerable: false,\n configurable: true\n });\n }\n globalActionQueue = actionQueue;\n }\n return actionQueue;\n}\nfunction getCurrentAppRouterState() {\n return globalActionQueue !== null ? globalActionQueue.state : null;\n}\nfunction getAppRouterActionQueue() {\n if (globalActionQueue === null) {\n throw Object.defineProperty(new Error('Internal Next.js error: Router action dispatched before initialization.'), \"__NEXT_ERROR_CODE\", {\n value: \"E668\",\n enumerable: false,\n configurable: true\n });\n }\n return globalActionQueue;\n}\nfunction getProfilingHookForOnNavigationStart() {\n if (globalActionQueue !== null) {\n return globalActionQueue.onRouterTransitionStart;\n }\n return null;\n}\nfunction dispatchNavigateAction(href, navigateType, shouldScroll, linkInstanceRef) {\n // TODO: This stuff could just go into the reducer. Leaving as-is for now\n // since we're about to rewrite all the router reducer stuff anyway.\n const url = new URL((0, _addbasepath.addBasePath)(href), location.href);\n if (false) {}\n (0, _links.setLinkForCurrentNavigation)(linkInstanceRef);\n const onRouterTransitionStart = getProfilingHookForOnNavigationStart();\n if (onRouterTransitionStart !== null) {\n onRouterTransitionStart(href, navigateType);\n }\n (0, _useactionqueue.dispatchAppRouterAction)({\n type: _routerreducertypes.ACTION_NAVIGATE,\n url,\n isExternalUrl: (0, _approuter.isExternalURL)(url),\n locationSearch: location.search,\n shouldScroll,\n navigateType,\n allowAliasing: true\n });\n}\nfunction dispatchTraverseAction(href, tree) {\n const onRouterTransitionStart = getProfilingHookForOnNavigationStart();\n if (onRouterTransitionStart !== null) {\n onRouterTransitionStart(href, 'traverse');\n }\n (0, _useactionqueue.dispatchAppRouterAction)({\n type: _routerreducertypes.ACTION_RESTORE,\n url: new URL(href),\n tree\n });\n}\nconst publicAppRouterInstance = {\n back: ()=>window.history.back(),\n forward: ()=>window.history.forward(),\n prefetch: false ? // cache. So we don't need to dispatch an action.\n 0 : (href, options)=>{\n // Use the old prefetch implementation.\n const actionQueue = getAppRouterActionQueue();\n const url = (0, _approuter.createPrefetchURL)(href);\n if (url !== null) {\n var _options_kind;\n // The prefetch reducer doesn't actually update any state or\n // trigger a rerender. It just writes to a mutable cache. So we\n // shouldn't bother calling setState/dispatch; we can just re-run\n // the reducer directly using the current state.\n // TODO: Refactor this away from a \"reducer\" so it's\n // less confusing.\n (0, _prefetchreducer.prefetchReducer)(actionQueue.state, {\n type: _routerreducertypes.ACTION_PREFETCH,\n url,\n kind: (_options_kind = options == null ? void 0 : options.kind) != null ? _options_kind : _routerreducertypes.PrefetchKind.FULL\n });\n }\n },\n replace: (href, options)=>{\n (0, _react.startTransition)(()=>{\n var _options_scroll;\n dispatchNavigateAction(href, 'replace', (_options_scroll = options == null ? void 0 : options.scroll) != null ? _options_scroll : true, null);\n });\n },\n push: (href, options)=>{\n (0, _react.startTransition)(()=>{\n var _options_scroll;\n dispatchNavigateAction(href, 'push', (_options_scroll = options == null ? void 0 : options.scroll) != null ? _options_scroll : true, null);\n });\n },\n refresh: ()=>{\n (0, _react.startTransition)(()=>{\n (0, _useactionqueue.dispatchAppRouterAction)({\n type: _routerreducertypes.ACTION_REFRESH,\n origin: window.location.origin\n });\n });\n },\n hmrRefresh: ()=>{\n if (false) {} else {\n (0, _react.startTransition)(()=>{\n (0, _useactionqueue.dispatchAppRouterAction)({\n type: _routerreducertypes.ACTION_HMR_REFRESH,\n origin: window.location.origin\n });\n });\n }\n }\n};\n// Exists for debugging purposes. Don't use in application code.\nif ( true && window.next) {\n window.next.router = publicAppRouterInstance;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=app-router-instance.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvYXBwLXJvdXRlci1pbnN0YW5jZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUErTWdCQSx3QkFBd0I7ZUFBeEJBOztJQTBEQUMsc0JBQXNCO2VBQXRCQTs7SUErQkFDLHNCQUFzQjtlQUF0QkE7O0lBbkRBQyx3QkFBd0I7ZUFBeEJBOztJQXVFSEMsdUJBQXVCO2VBQXZCQTs7O2dEQWhUTjsyQ0FDaUI7bUNBQ1E7d0NBQ0w7MENBQzBCOzRDQUNiO3lDQUNaO3VDQUNxQjs2Q0FDakI7bUNBTStCO0FBa0MvRCxTQUFTQyxvQkFDUEMsV0FBaUMsRUFDakNDLFFBQThCO0lBRTlCLElBQUlELFlBQVlFLE9BQU8sS0FBSyxNQUFNO1FBQ2hDRixZQUFZRSxPQUFPLEdBQUdGLFlBQVlFLE9BQU8sQ0FBQ0MsSUFBSTtRQUM5QyxJQUFJSCxZQUFZRSxPQUFPLEtBQUssTUFBTTtZQUNoQyxtRUFBbUU7WUFDbkVFLFVBQVU7Z0JBQ1JKO2dCQUNBSyxRQUFRTCxZQUFZRSxPQUFPO2dCQUMzQkQ7WUFDRjtRQUNGLE9BQU87WUFDTCw0REFBNEQ7WUFDNUQsSUFBSUQsWUFBWU0sWUFBWSxFQUFFO2dCQUM1Qk4sWUFBWU0sWUFBWSxHQUFHO2dCQUMzQk4sWUFBWU8sUUFBUSxDQUNsQjtvQkFDRUMsTUFBTUMsb0JBQUFBLGNBQWM7b0JBQ3BCQyxRQUFRQyxPQUFPQyxRQUFRLENBQUNGLE1BQU07Z0JBQ2hDLEdBQ0FUO1lBRUo7UUFDRjtJQUNGO0FBQ0Y7QUFFQSxlQUFlRyxVQUFVLEtBUXhCO0lBUndCLE1BQ3ZCSixXQUFXLEVBQ1hLLE1BQU0sRUFDTkosUUFBUSxFQUtULEdBUndCO0lBU3ZCLE1BQU1ZLFlBQVliLFlBQVljLEtBQUs7SUFFbkNkLFlBQVlFLE9BQU8sR0FBR0c7SUFFdEIsTUFBTVUsVUFBVVYsT0FBT1UsT0FBTztJQUM5QixNQUFNQyxlQUFlaEIsWUFB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QUEsT0FBQUEsZUFBQUEsRUFBZ0I7Z0JBQzBCc0M7WUFBeEN6RSx1QkFBdUJpRCxNQUFNLFdBQVd3QixDQUFBQSxrQkFBQUEsV0FBQUEsT0FBQUEsS0FBQUEsSUFBQUEsUUFBU1csTUFBQUEsS0FBTSxPQUFmWCxrQkFBbUIsTUFBTTtRQUNuRTtJQUNGO0lBQ0FZLE1BQU0sQ0FBQ3BDLE1BQWN3QjtRQUNuQnRDLENBQUFBLEdBQUFBLE9BQUFBLGVBQUFBLEVBQWdCO2dCQUN1QnNDO1lBQXJDekUsdUJBQXVCaUQsTUFBTSxRQUFRd0IsQ0FBQUEsa0JBQUFBLFdBQUFBLE9BQUFBLEtBQUFBLElBQUFBLFFBQVNXLE1BQUFBLEtBQU0sT0FBZlgsa0JBQW1CLE1BQU07UUFDaEU7SUFDRjtJQUNBYSxTQUFTO1FBQ1BuRCxDQUFBQSxHQUFBQSxPQUFBQSxlQUFBQSxFQUFnQjtZQUNkMEIsQ0FBQUEsR0FBQUEsZ0JBQUFBLHVCQUFBQSxFQUF3QjtnQkFDdEJoRCxNQUFNQyxvQkFBQUEsY0FBYztnQkFDcEJDLFFBQVFDLE9BQU9DLFFBQVEsQ0FBQ0YsTUFBTTtZQUNoQztRQUNGO0lBQ0Y7SUFDQXdFLFlBQVk7UUFDVixJQUFJL0IsS0FBb0IsRUFBb0IsRUFJM0MsTUFBTTtZQUNMckIsQ0FBQUEsR0FBQUEsT0FBQUEsZUFBZSxFQUFDO2dCQUNkMEIsQ0FBQUEsR0FBQUEsZ0JBQUFBLHVCQUFBQSxFQUF3QjtvQkFDdEJoRCxNQUFNNEUsb0JBQUFBLGtCQUFrQjtvQkFDeEIxRSxRQUFRQyxPQUFPQyxRQUFRLENBQUNGLE1BQU07Z0JBQ2hDO1lBQ0Y7UUFDRjtJQUNGO0FBQ0Y7QUFFQSxnRUFBZ0U7QUFDaEUsSUFBSSxLQUE2QixJQUFJQyxPQUFPUixJQUFJLEVBQUU7SUFDaERRLE9BQU9SLElBQUksQ0FBQ2tGLE1BQU0sR0FBR3ZGO0FBQ3ZCIiwic291cmNlcyI6WyIvaG9tZS9OaWNob2xhaS9zcmMvY2xpZW50L2NvbXBvbmVudHMvYXBwLXJvdXRlci1pbnN0YW5jZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICB0eXBlIEFwcFJvdXRlclN0YXRlLFxuICB0eXBlIFJlZHVjZXJBY3Rpb25zLFxuICB0eXBlIFJlZHVjZXJTdGF0ZSxcbiAgQUNUSU9OX1JFRlJFU0gsXG4gIEFDVElPTl9TRVJWRVJfQUNUSU9OLFxuICBBQ1RJT05fTkFWSUdBVEUsXG4gIEFDVElPTl9SRVNUT1JFLFxuICB0eXBlIE5hdmlnYXRlQWN0aW9uLFxuICBBQ1RJT05fSE1SX1JFRlJFU0gsXG4gIFByZWZldGNoS2luZCxcbiAgQUNUSU9OX1BSRUZFVENILFxufSBmcm9tICcuL3JvdXRlci1yZWR1Y2VyL3JvdXRlci1yZWR1Y2VyLXR5cGVzJ1xuaW1wb3J0IHsgcmVkdWNlciB9IGZyb20gJy4vcm91dGVyLXJlZHVjZXIvcm91dGVyLXJlZHVjZXInXG5pbXBvcnQgeyBzdGFydFRyYW5zaXRpb24gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGlzVGhlbmFibGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvbGliL2lzLXRoZW5hYmxlJ1xuaW1wb3J0IHsgcHJlZmV0Y2ggYXMgcHJlZmV0Y2hXaXRoU2VnbWVudENhY2hlIH0gZnJvbSAnLi9zZWdtZW50LWNhY2hlJ1xuaW1wb3J0IHsgZGlzcGF0Y2hBcHBSb3V0ZXJBY3Rpb24gfSBmcm9tICcuL3VzZS1hY3Rpb24tcXVldWUnXG5pbXBvcnQgeyBhZGRCYXNlUGF0aCB9IGZyb20gJy4uL2FkZC1iYXNlLXBhdGgnXG5pbXBvcnQgeyBjcmVhdGVQcmVmZXRjaFVSTCwgaXNFeHRlcm5hbFVSTCB9IGZyb20gJy4vYXBwLXJvdXRlcidcbmltcG9ydCB7IHByZWZldGNoUmVkdWNlciB9IGZyb20gJy4vcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvcHJlZmV0Y2gtcmVkdWNlcidcbmltcG9ydCB0eXBlIHtcbiAgQXBwUm91dGVySW5zdGFuY2UsXG4gIE5hdmlnYXRlT3B0aW9ucyxcbiAgUHJlZmV0Y2hPcHRpb25zLFxufSBmcm9tICcuLi8uLi9zaGFyZWQvbGliL2FwcC1yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZSdcbmltcG9ydCB7IHNldExpbmtGb3JDdXJyZW50TmF2aWdhdGlvbiwgdHlwZSBMaW5rSW5zdGFuY2UgfSBmcm9tICcuL2xpbmtzJ1xuaW1wb3J0IHR5cGUgeyBGbGlnaHRSb3V0ZXJTdGF0ZSB9IGZyb20gJy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBDbGllbnRJbnN0cnVtZW50YXRpb25Ib29rcyB9IGZyb20gJy4uL2FwcC1pbmRleCdcbmltcG9ydCB0eXBlIHsgR2xvYmFsRXJyb3JDb21wb25lbnQgfSBmcm9tICcuL2J1aWx0aW4vZ2xvYmFsLWVycm9yJ1xuXG5leHBvcnQgdHlwZSBEaXNwYXRjaFN0YXRlUHJvbWlzZSA9IFJlYWN0LkRpc3BhdGNoPFJlZHVjZXJTdGF0ZT5cblxuZXhwb3J0IHR5cGUgQXBwUm91dGVyQWN0aW9uUXVldWUgPSB7XG4gIHN0YXRlOiBBcHBSb3V0ZXJTdGF0ZVxuICBkaXNwYXRjaDogKHBheWxvYWQ6IFJlZHVjZXJBY3Rpb25zLCBzZXRTdGF0ZTogRGlzcGF0Y2hTdGF0ZVByb21pc2UpID0+IHZvaWRcbiAgYWN0aW9uOiAoc3RhdGU6IEFwcFJvdXRlclN0YXRlLCBhY3Rpb246IFJlZHVjZXJBY3Rpb25zKSA9PiBSZWR1Y2VyU3RhdGVcblxuICBvblJvdXRlclRyYW5zaXRpb25TdGFydDpcbiAgICB8ICgodXJsOiBzdHJpbmcsIHR5cGU6ICdwdXNoJyB8ICdyZXBsYWNlJyB8ICd0cmF2ZXJzZScpID0+IHZvaWQpXG4gICAgfCBudWxsXG5cbiAgcGVuZGluZzogQWN0aW9uUXVldWVOb2RlIHwgbnVsbFxuICBuZWVkc1JlZnJlc2g/OiBib29sZWFuXG4gIGxhc3Q6IEFjdGlvblF1ZXVlTm9kZSB8IG51bGxcbn1cblxuZXhwb3J0IHR5cGUgR2xvYmFsRXJyb3JTdGF0ZSA9IFtcbiAgR2xvYmFsRXJyb3I6IEdsb2JhbEVycm9yQ29tcG9uZW50LFxuICBzdHlsZXM6IFJlYWN0LlJlYWN0Tm9kZSxcbl1cblxuZXhwb3J0IHR5cGUgQWN0aW9uUXVldWVOb2RlID0ge1xuICBwYXlsb2FkOiBSZWR1Y2VyQWN0aW9uc1xuICBuZXh0OiBBY3Rpb25RdWV1ZU5vZGUgfCBudWxsXG4gIHJlc29sdmU6ICh2YWx1ZTogUmVkdWNlclN0YXRlKSA9PiB2b2lkXG4gIHJlamVjdDogKGVycjogRXJyb3IpID0+IHZvaWRcbiAgZGlzY2FyZGVkPzogYm9vbGVhblxufVxuXG5mdW5jdGlvbiBydW5SZW1haW5pbmdBY3Rpb25zKFxuICBhY3Rpb25RdWV1ZTogQXBwUm91dGVyQWN0aW9uUXVldWUsXG4gIHNldFN0YXRlOiBEaXNwYXRjaFN0YXRlUHJvbWlzZVxuKSB7XG4gIGlmIChhY3Rpb25RdWV1ZS5wZW5kaW5nICE9PSBudWxsKSB7XG4gICAgYWN0aW9uUXVldWUucGVuZGluZyA9IGFjdGlvblF1ZXVlLnBlbmRpbmcubmV4dFxuICAgIGlmIChhY3Rpb25RdWV1ZS5wZW5kaW5nICE9PSBudWxsKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICBydW5BY3Rpb24oe1xuICAgICAgICBhY3Rpb25RdWV1ZSxcbiAgICAgICAgYWN0aW9uOiBhY3Rpb25RdWV1ZS5wZW5kaW5nLFxuICAgICAgICBzZXRTdGF0ZSxcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIG1vcmUgYWN0aW9ucyBhcmUgcGVuZGluZywgY2hlY2sgaWYgYSByZWZyZXNoIGlzIG5lZWRlZFxuICAgICAgaWYgKGFjdGlvblF1ZXVlLm5lZWRzUmVmcmVzaCkge1xuICAgICAgICBhY3Rpb25RdWV1ZS5uZWVkc1JlZnJlc2ggPSBmYWxzZVxuICAgICAgICBhY3Rpb25RdWV1ZS5kaXNwYXRjaChcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBBQ1RJT05fUkVGUkVTSCxcbiAgICAgICAgICAgIG9yaWdpbjogd2luZG93LmxvY2F0aW9uLm9yaWdpbixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNldFN0YXRlXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVuQWN0aW9uKHtcbiAgYWN0aW9uUXVldWUsXG4gIGFjdGlvbixcbiAgc2V0U3RhdGUsXG59OiB7XG4gIGFjdGlvblF1ZXVlOiBBcHBSb3V0ZXJBY3Rpb25RdWV1ZVxuICBhY3Rpb246IEFjdGlvblF1ZXVlTm9kZVxuICBzZXRTdGF0ZTogRGlzcGF0Y2hTdGF0ZVByb21pc2Vcbn0pIHtcbiAgY29uc3QgcHJldlN0YXRlID0gYWN0aW9uUXVldWUuc3RhdGVcblxuICBhY3Rpb25RdWV1ZS5wZW5kaW5nID0gYWN0aW9uXG5cbiAgY29uc3QgcGF5bG9hZCA9IGFjdGlvbi5wYXlsb2FkXG4gIGNvbnN0IGFjdGlvblJlc3VsdCA9IGFjdGlvblF1ZXVlLmFjdGlvbihwcmV2U3RhdGUsIHBheWxvYWQpXG5cbiAgZnVuY3Rpb24gaGFuZGxlUmVzdWx0KG5leHRTdGF0ZTogQXBwUm91dGVyU3RhdGUpIHtcbiAgICAvLyBpZiB3ZSBkaXNjYXJkZWQgdGhpcyBhY3Rpb24sIHRoZSBzdGF0ZSBzaG91bGQgYWxzbyBiZSBkaXNjYXJkZWRcbiAgICBpZiAoYWN0aW9uLmRpc2NhcmRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYWN0aW9uUXVldWUuc3RhdGUgPSBuZXh0U3RhdGVcblxuICAgIHJ1blJlbWFpbmluZ0FjdGlvbnMoYWN0aW9uUXVldWUsIHNldFN0YXRlKVxuICAgIGFjdGlvbi5yZXNvbHZlKG5leHRTdGF0ZSlcbiAgfVxuXG4gIC8vIGlmIHRoZSBhY3Rpb24gaXMgYSBwcm9taXNlLCBzZXQgdXAgYSBjYWxsYmFjayB0byByZXNvbHZlIGl0XG4gIGlmIChpc1RoZW5hYmxlKGFjdGlvblJlc3VsdCkpIHtcbiAgICBhY3Rpb25SZXN1bHQudGhlbihoYW5kbGVSZXN1bHQsIChlcnIpID0+IHtcbiAgICAgIHJ1blJlbWFpbmluZ0FjdGlvbnMoYWN0aW9uUXVldWUsIHNldFN0YXRlKVxuICAgICAgYWN0aW9uLnJlamVjdChlcnIpXG4gICAgfSlcbiAgfSBlbHNlIHtcbiAgICBoYW5kbGVSZXN1bHQoYWN0aW9uUmVzdWx0KVxuICB9XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoQWN0aW9uKFxuICBhY3Rpb25RdWV1ZTogQXBwUm91dGVyQWN0aW9uUXVldWUsXG4gIHBheWxvYWQ6IFJlZHVjZXJBY3Rpb25zLFxuICBzZXRTdGF0ZTogRGlzcGF0Y2hTdGF0ZVByb21pc2Vcbikge1xuICBsZXQgcmVzb2x2ZXJzOiB7XG4gICAgcmVzb2x2ZTogKHZhbHVlOiBSZWR1Y2VyU3RhdGUpID0+IHZvaWRcbiAgICByZWplY3Q6IChyZWFzb246IGFueSkgPT4gdm9pZFxuICB9ID0geyByZXNvbHZlOiBzZXRTdGF0ZSwgcmVqZWN0OiAoKSA9PiB7fSB9XG5cbiAgLy8gbW9zdCBvZiB0aGUgYWN0aW9uIHR5cGVzIGFyZSBhc3luYyB3aXRoIHRoZSBleGNlcHRpb24gb2YgcmVzdG9yZVxuICAvLyBpdCdzIGltcG9ydGFudCB0aGF0IHJlc3RvcmUgaXMgaGFuZGxlZCBxdWlja2x5IHNpbmNlIGl0J3MgZmlyZWQgb24gdGhlIHBvcHN0YXRlIGV2ZW50XG4gIC8vIGFuZCB3ZSBkb24ndCB3YW50IHRvIGFkZCBhbnkgZGVsYXkgb24gYSBiYWNrL2ZvcndhcmQgbmF2XG4gIC8vIHRoaXMgb25seSBjcmVhdGVzIGEgcHJvbWlzZSBmb3IgdGhlIGFzeW5jIGFjdGlvbnNcbiAgaWYgKHBheWxvYWQudHlwZSAhPT0gQUNUSU9OX1JFU1RPUkUpIHtcbiAgICAvLyBDcmVhdGUgdGhlIHByb21pc2UgYW5kIGFzc2lnbiB0aGUgcmVzb2x2ZXJzIHRvIHRoZSBvYmplY3QuXG4gICAgY29uc3QgZGVmZXJyZWRQcm9taXNlID0gbmV3IFByb21pc2U8QXBwUm91dGVyU3RhdGU+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHJlc29sdmVycyA9IHsgcmVzb2x2ZSwgcmVqZWN0IH1cbiAgICB9KVxuXG4gICAgc3RhcnRUcmFuc2l0aW9uKCgpID0+IHtcbiAgICAgIC8vIHdlIGltbWVkaWF0ZWx5IG5vdGlmeSBSZWFjdCBvZiB0aGUgcGVuZGluZyBwcm9taXNlIC0tIHRoZSByZXNvbHZlciBpcyBhdHRhY2hlZCB0byB0aGUgYWN0aW9uIG5vZGVcbiAgICAgIC8vIGFuZCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBhc3NvY2lhdGVkIGFjdGlvbiBwcm9taXNlIHJlc29sdmVzXG4gICAgICBzZXRTdGF0ZShkZWZlcnJlZFByb21pc2UpXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IG5ld0FjdGlvbjogQWN0aW9uUXVldWVOb2RlID0ge1xuICAgIHBheWxvYWQsXG4gICAgbmV4dDogbnVsbCxcbiAgICByZXNvbHZlOiByZXNvbHZlcnMucmVzb2x2ZSxcbiAgICByZWplY3Q6IHJlc29sdmVycy5yZWplY3QsXG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGUgcXVldWUgaXMgZW1wdHlcbiAgaWYgKGFjdGlvblF1ZXVlLnBlbmRpbmcgPT09IG51bGwpIHtcbiAgICAvLyBUaGUgcXVldWUgaXMgZW1wdHksIHNvIGFkZCB0aGUgYWN0aW9uIGFuZCBzdGFydCBpdCBpbW1lZGlhdGVseVxuICAgIC8vIE1hcmsgdGhpcyBhY3Rpb24gYXMgdGhlIGxhc3QgaW4gdGhlIHF1ZXVlXG4gICAgYWN0aW9uUXVldWUubGFzdCA9IG5ld0FjdGlvblxuXG4gICAgcnVuQWN0aW9uKHtcbiAgICAgIGFjdGlvblF1ZXVlLFxuICAgICAgYWN0aW9uOiBuZXdBY3Rpb24sXG4gICAgICBzZXRTdGF0ZSxcbiAgICB9KVxuICB9IGVsc2UgaWYgKFxuICAgIHBheWxvYWQudHlwZSA9PT0gQUNUSU9OX05BVklHQVRFIHx8XG4gICAgcGF5bG9hZC50eXBlID09PSBBQ1RJT05fUkVTVE9SRVxuICApIHtcbiAgICAvLyBOYXZpZ2F0aW9ucyAoaW5jbHVkaW5nIGJhY2svZm9yd2FyZCkgdGFrZSBwcmlvcml0eSBvdmVyIGFueSBwZW5kaW5nIGFjdGlvbnMuXG4gICAgLy8gTWFyayB0aGUgcGVuZGluZyBhY3Rpb24gYXMgZGlzY2FyZGVkIChzbyB0aGUgc3RhdGUgaXMgbmV2ZXIgYXBwbGllZCkgYW5kIHN0YXJ0IHRoZSBuYXZpZ2F0aW9uIGFjdGlvbiBpbW1lZGlhdGVseS5cbiAgICBhY3Rpb25RdWV1ZS5wZW5kaW5nLmRpc2NhcmRlZCA9IHRydWVcblxuICAgIC8vIFRoZSByZXN0IG9mIHRoZSBjdXJyZW50IHF1ZXVlIHNob3VsZCBzdGlsbCBleGVjdXRlIGFmdGVyIHRoaXMgbmF2aWdhdGlvbi5cbiAgICAvLyAoTm90ZSB0aGF0IGl0IGNhbid0IGNvbnRhaW4gYW55IGVhcmxpZXIgbmF2aWdhdGlvbnMsIGJlY2F1c2Ugd2UgYWx3YXlzIHB1dCB0aG9zZSBpbnRvIGBhY3Rpb25RdWV1ZS5wZW5kaW5nYCBieSBjYWxsaW5nIGBydW5BY3Rpb25gKVxuICAgIG5ld0FjdGlvbi5uZXh0ID0gYWN0aW9uUXVldWUucGVuZGluZy5uZXh0XG5cbiAgICAvLyBpZiB0aGUgcGVuZGluZyBhY3Rpb24gd2FzIGEgc2VydmVyIGFjdGlvbiwgbWFyayB0aGUgcXVldWUgYXMgbmVlZGluZyBhIHJlZnJlc2ggb25jZSBldmVudHMgYXJlIHByb2Nlc3NlZFxuICAgIGlmIChhY3Rpb25RdWV1ZS5wZW5kaW5nLnBheWxvYWQudHlwZSA9PT0gQUNUSU9OX1NFUlZFUl9BQ1RJT04pIHtcbiAgICAgIGFjdGlvblF1ZXVlLm5lZWRzUmVmcmVzaCA9IHRydWVcbiAgICB9XG5cbiAgICBydW5BY3Rpb24oe1xuICAgICAgYWN0aW9uUXVldWUsXG4gICAgICBhY3Rpb246IG5ld0FjdGlvbixcbiAgICAgIHNldFN0YXRlLFxuICAgIH0pXG4gIH0gZWxzZSB7XG4gICAgLy8gVGhlIHF1ZXVlIGlzIG5vdCBlbXB0eSwgc28gYWRkIHRoZSBhY3Rpb24gdG8gdGhlIGVuZCBvZiB0aGUgcXVldWVcbiAgICAvLyBJdCB3aWxsIGJlIHN0YXJ0ZWQgYnkgcnVuUmVtYWluaW5nQWN0aW9ucyBhZnRlciB0aGUgcHJldmlvdXMgYWN0aW9uIGZpbmlzaGVzXG4gICAgaWYgKGFjdGlvblF1ZXVlLmxhc3QgIT09IG51bGwpIHtcbiAgICAgIGFjdGlvblF1ZXVlLmxhc3QubmV4dCA9IG5ld0FjdGlvblxuICAgIH1cbiAgICBhY3Rpb25RdWV1ZS5sYXN0ID0gbmV3QWN0aW9uXG4gIH1cbn1cblxubGV0IGdsb2JhbEFjdGlvblF1ZXVlOiBBcHBSb3V0ZXJBY3Rpb25RdWV1ZSB8IG51bGwgPSBudWxsXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNdXRhYmxlQWN0aW9uUXVldWUoXG4gIGluaXRpYWxTdGF0ZTogQXBwUm91dGVyU3RhdGUsXG4gIGluc3RydW1lbnRhdGlvbkhvb2tzOiBDbGllbnRJbnN0cnVtZW50YXRpb25Ib29rcyB8IG51bGxcbik6IEFwcFJvdXRlckFjdGlvblF1ZXVlIHtcbiAgY29uc3QgYWN0aW9uUXVldWU6IEFwcFJvdXRlckFjdGlvblF1ZXVlID0ge1xuICAgIHN0YXRlOiBpbml0aWFsU3RhdGUsXG4gICAgZGlzcGF0Y2g6IChwYXlsb2FkOiBSZWR1Y2VyQWN0aW9ucywgc2V0U3RhdGU6IERpc3BhdGNoU3RhdGVQcm9taXNlKSA9PlxuICAgICAgZGlzcGF0Y2hBY3Rpb24oYWN0aW9uUXVldWUsIHBheWxvYWQsIHNldFN0YXRlKSxcbiAgICBhY3Rpb246IGFzeW5jIChzdGF0ZTogQXBwUm91dGVyU3RhdGUsIGFjdGlvbjogUmVkdWNlckFjdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlZHVjZXIoc3RhdGUsIGFjdGlvbilcbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9LFxuICAgIHBlbmRpbmc6IG51bGwsXG4gICAgbGFzdDogbnVsbCxcbiAgICBvblJvdXRlclRyYW5zaXRpb25TdGFydDpcbiAgICAgIGluc3RydW1lbnRhdGlvbkhvb2tzICE9PSBudWxsICYmXG4gICAgICB0eXBlb2YgaW5zdHJ1bWVudGF0aW9uSG9va3Mub25Sb3V0ZXJUcmFuc2l0aW9uU3RhcnQgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyAvLyBUaGlzIHByb2ZpbGluZyBob29rIHdpbGwgYmUgY2FsbGVkIGF0IHRoZSBzdGFydCBvZiBldmVyeSBuYXZpZ2F0aW9uLlxuICAgICAgICAgIGluc3RydW1lbnRhdGlvbkhvb2tzLm9uUm91dGVyVHJhbnNpdGlvblN0YXJ0XG4gICAgICAgIDogbnVsbCxcbiAgfVxuXG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIFRoZSBhY3Rpb24gcXVldWUgaXMgbGF6aWx5IGNyZWF0ZWQgb24gaHlkcmF0aW9uLCBidXQgYWZ0ZXIgdGhhdCBwb2ludFxuICAgIC8vIGl0IGRvZXNuJ3QgY2hhbmdlLiBTbyB3ZSBjYW4gc3RvcmUgaXQgaW4gYSBnbG9iYWwgcmF0aGVyIHRoYW4gcGFzc1xuICAgIC8vIGl0IGFyb3VuZCBldmVyeXdoZXJlIHZpYSBwcm9wcy9jb250ZXh0LlxuICAgIGlmIChnbG9iYWxBY3Rpb25RdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnSW50ZXJuYWwgTmV4dC5qcyBFcnJvcjogY3JlYXRlTXV0YWJsZUFjdGlvblF1ZXVlIHdhcyBjYWxsZWQgbW9yZSAnICtcbiAgICAgICAgICAndGhhbiBvbmNlJ1xuICAgICAgKVxuICAgIH1cbiAgICBnbG9iYWxBY3Rpb25RdWV1ZSA9IGFjdGlvblF1ZXVlXG4gIH1cblxuICByZXR1cm4gYWN0aW9uUXVldWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnJlbnRBcHBSb3V0ZXJTdGF0ZSgpOiBBcHBSb3V0ZXJTdGF0ZSB8IG51bGwge1xuICByZXR1cm4gZ2xvYmFsQWN0aW9uUXVldWUgIT09IG51bGwgPyBnbG9iYWxBY3Rpb25RdWV1ZS5zdGF0ZSA6IG51bGxcbn1cblxuZnVuY3Rpb24gZ2V0QXBwUm91dGVyQWN0aW9uUXVldWUoKTogQXBwUm91dGVyQWN0aW9uUXVldWUge1xuICBpZiAoZ2xvYmFsQWN0aW9uUXVldWUgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnSW50ZXJuYWwgTmV4dC5qcyBlcnJvcjogUm91dGVyIGFjdGlvbiBkaXNwYXRjaGVkIGJlZm9yZSBpbml0aWFsaXphdGlvbi4nXG4gICAgKVxuICB9XG4gIHJldHVybiBnbG9iYWxBY3Rpb25RdWV1ZVxufVxuXG5mdW5jdGlvbiBnZXRQcm9maWxpbmdIb29rRm9yT25OYXZpZ2F0aW9uU3RhcnQoKSB7XG4gIGlmIChnbG9iYWxBY3Rpb25RdWV1ZSAhPT0gbnVsbCkge1xuICAgIHJldHVybiBnbG9iYWxBY3Rpb25RdWV1ZS5vblJvdXRlclRyYW5zaXRpb25TdGFydFxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNwYXRjaE5hdmlnYXRlQWN0aW9uKFxuICBocmVmOiBzdHJpbmcsXG4gIG5hdmlnYXRlVHlwZTogTmF2aWdhdGVBY3Rpb25bJ25hdmlnYXRlVHlwZSddLFxuICBzaG91bGRTY3JvbGw6IGJvb2xlYW4sXG4gIGxpbmtJbnN0YW5jZVJlZjogTGlua0luc3RhbmNlIHwgbnVsbFxuKTogdm9pZCB7XG4gIC8vIFRPRE86IFRoaXMgc3R1ZmYgY291bGQganVzdCBnbyBpbnRvIHRoZSByZWR1Y2VyLiBMZWF2aW5nIGFzLWlzIGZvciBub3dcbiAgLy8gc2luY2Ugd2UncmUgYWJvdXQgdG8gcmV3cml0ZSBhbGwgdGhlIHJvdXRlciByZWR1Y2VyIHN0dWZmIGFueXdheS5cbiAgY29uc3QgdXJsID0gbmV3IFVSTChhZGRCYXNlUGF0aChocmVmKSwgbG9jYXRpb24uaHJlZilcbiAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9BUFBfTkFWX0ZBSUxfSEFORExJTkcpIHtcbiAgICB3aW5kb3cubmV4dC5fX3BlbmRpbmdVcmwgPSB1cmxcbiAgfVxuXG4gIHNldExpbmtGb3JDdXJyZW50TmF2aWdhdGlvbihsaW5rSW5zdGFuY2VSZWYpXG5cbiAgY29uc3Qgb25Sb3V0ZXJUcmFuc2l0aW9uU3RhcnQgPSBnZXRQcm9maWxpbmdIb29rRm9yT25OYXZpZ2F0aW9uU3RhcnQoKVxuICBpZiAob25Sb3V0ZXJUcmFuc2l0aW9uU3RhcnQgIT09IG51bGwpIHtcbiAgICBvblJvdXRlclRyYW5zaXRpb25TdGFydChocmVmLCBuYXZpZ2F0ZVR5cGUpXG4gIH1cblxuICBkaXNwYXRjaEFwcFJvdXRlckFjdGlvbih7XG4gICAgdHlwZTogQUNUSU9OX05BVklHQVRFLFxuICAgIHVybCxcbiAgICBpc0V4dGVybmFsVXJsOiBpc0V4dGVybmFsVVJMKHVybCksXG4gICAgbG9jYXRpb25TZWFyY2g6IGxvY2F0aW9uLnNlYXJjaCxcbiAgICBzaG91bGRTY3JvbGwsXG4gICAgbmF2aWdhdGVUeXBlLFxuICAgIGFsbG93QWxpYXNpbmc6IHRydWUsXG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNwYXRjaFRyYXZlcnNlQWN0aW9uKFxuICBocmVmOiBzdHJpbmcsXG4gIHRyZWU6IEZsaWdodFJvdXRlclN0YXRlIHwgdW5kZWZpbmVkXG4pIHtcbiAgY29uc3Qgb25Sb3V0ZXJUcmFuc2l0aW9uU3RhcnQgPSBnZXRQcm9maWxpbmdIb29rRm9yT25OYXZpZ2F0aW9uU3RhcnQoKVxuICBpZiAob25Sb3V0ZXJUcmFuc2l0aW9uU3RhcnQgIT09IG51bGwpIHtcbiAgICBvblJvdXRlclRyYW5zaXRpb25TdGFydChocmVmLCAndHJhdmVyc2UnKVxuICB9XG4gIGRpc3BhdGNoQXBwUm91dGVyQWN0aW9uKHtcbiAgICB0eXBlOiBBQ1RJT05fUkVTVE9SRSxcbiAgICB1cmw6IG5ldyBVUkwoaHJlZiksXG4gICAgdHJlZSxcbiAgfSlcbn1cblxuLyoqXG4gKiBUaGUgYXBwIHJvdXRlciB0aGF0IGlzIGV4cG9zZWQgdGhyb3VnaCBgdXNlUm91dGVyYC4gVGhlc2UgYXJlIHB1YmxpYyBBUElcbiAqIG1ldGhvZHMuIEludGVybmFsIE5leHQuanMgY29kZSBzaG91bGQgY2FsbCB0aGUgbG93ZXIgbGV2ZWwgbWV0aG9kcyBkaXJlY3RseVxuICogKGFsdGhvdWdoIHRoZXJlJ3MgbG90cyBvZiBleGlzdGluZyBjb2RlIHRoYXQgZG9lc24ndCBkbyB0aGF0KS5cbiAqL1xuZXhwb3J0IGNvbnN0IHB1YmxpY0FwcFJvdXRlckluc3RhbmNlOiBBcHBSb3V0ZXJJbnN0YW5jZSA9IHtcbiAgYmFjazogKCkgPT4gd2luZG93Lmhpc3RvcnkuYmFjaygpLFxuICBmb3J3YXJkOiAoKSA9PiB3aW5kb3cuaGlzdG9yeS5mb3J3YXJkKCksXG4gIHByZWZldGNoOiBwcm9jZXNzLmVudi5fX05FWFRfQ0xJRU5UX1NFR01FTlRfQ0FDSEVcbiAgICA/IC8vIFVubGlrZSB0aGUgb2xkIGltcGxlbWVudGF0aW9uLCB0aGUgU2VnbWVudCBDYWNoZSBkb2Vzbid0IHN0b3JlIGl0c1xuICAgICAgLy8gZGF0YSBpbiB0aGUgcm91dGVyIHJlZHVjZXIgc3RhdGU7IGl0IHdyaXRlcyBpbnRvIGEgZ2xvYmFsIG11dGFibGVcbiAgICAgIC8vIGNhY2hlLiBTbyB3ZSBkb24ndCBuZWVkIHRvIGRpc3BhdGNoIGFuIGFjdGlvbi5cbiAgICAgIChocmVmOiBzdHJpbmcsIG9wdGlvbnM/OiBQcmVmZXRjaE9wdGlvbnMpID0+IHtcbiAgICAgICAgY29uc3QgYWN0aW9uUXVldWUgPSBnZXRBcHBSb3V0ZXJBY3Rpb25RdWV1ZSgpXG4gICAgICAgIHByZWZldGNoV2l0aFNlZ21lbnRDYWNoZShcbiAgICAgICAgICBocmVmLFxuICAgICAgICAgIGFjdGlvblF1ZXVlLnN0YXRlLm5leHRVcmwsXG4gICAgICAgICAgYWN0aW9uUXVldWUuc3RhdGUudHJlZSxcbiAgICAgICAgICBvcHRpb25zPy5raW5kID09PSBQcmVmZXRjaEtpbmQuRlVMTCxcbiAgICAgICAgICBvcHRpb25zPy5vbkludmFsaWRhdGUgPz8gbnVsbFxuICAgICAgICApXG4gICAgICB9XG4gICAgOiAoaHJlZjogc3RyaW5nLCBvcHRpb25zPzogUHJlZmV0Y2hPcHRpb25zKSA9PiB7XG4gICAgICAgIC8vIFVzZSB0aGUgb2xkIHByZWZldGNoIGltcGxlbWVudGF0aW9uLlxuICAgICAgICBjb25zdCBhY3Rpb25RdWV1ZSA9IGdldEFwcFJvdXRlckFjdGlvblF1ZXVlKClcbiAgICAgICAgY29uc3QgdXJsID0gY3JlYXRlUHJlZmV0Y2hVUkwoaHJlZilcbiAgICAgICAgaWYgKHVybCAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFRoZSBwcmVmZXRjaCByZWR1Y2VyIGRvZXNuJ3QgYWN0dWFsbHkgdXBkYXRlIGFueSBzdGF0ZSBvclxuICAgICAgICAgIC8vIHRyaWdnZXIgYSByZXJlbmRlci4gSXQganVzdCB3cml0ZXMgdG8gYSBtdXRhYmxlIGNhY2hlLiBTbyB3ZVxuICAgICAgICAgIC8vIHNob3VsZG4ndCBib3RoZXIgY2FsbGluZyBzZXRTdGF0ZS9kaXNwYXRjaDsgd2UgY2FuIGp1c3QgcmUtcnVuXG4gICAgICAgICAgLy8gdGhlIHJlZHVjZXIgZGlyZWN0bHkgdXNpbmcgdGhlIGN1cnJlbnQgc3RhdGUuXG4gICAgICAgICAgLy8gVE9ETzogUmVmYWN0b3IgdGhpcyBhd2F5IGZyb20gYSBcInJlZHVjZXJcIiBzbyBpdCdzXG4gICAgICAgICAgLy8gbGVzcyBjb25mdXNpbmcuXG4gICAgICAgICAgcHJlZmV0Y2hSZWR1Y2VyKGFjdGlvblF1ZXVlLnN0YXRlLCB7XG4gICAgICAgICAgICB0eXBlOiBBQ1RJT05fUFJFRkVUQ0gsXG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICBraW5kOiBvcHRpb25zPy5raW5kID8/IFByZWZldGNoS2luZC5GVUxMLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0sXG4gIHJlcGxhY2U6IChocmVmOiBzdHJpbmcsIG9wdGlvbnM/OiBOYXZpZ2F0ZU9wdGlvbnMpID0+IHtcbiAgICBzdGFydFRyYW5zaXRpb24oKCkgPT4ge1xuICAgICAgZGlzcGF0Y2hOYXZpZ2F0ZUFjdGlvbihocmVmLCAncmVwbGFjZScsIG9wdGlvbnM/LnNjcm9sbCA/PyB0cnVlLCBudWxsKVxuICAgIH0pXG4gIH0sXG4gIHB1c2g6IChocmVmOiBzdHJpbmcsIG9wdGlvbnM/OiBOYXZpZ2F0ZU9wdGlvbnMpID0+IHtcbiAgICBzdGFydFRyYW5zaXRpb24oKCkgPT4ge1xuICAgICAgZGlzcGF0Y2hOYXZpZ2F0ZUFjdGlvbihocmVmLCAncHVzaCcsIG9wdGlvbnM/LnNjcm9sbCA/PyB0cnVlLCBudWxsKVxuICAgIH0pXG4gIH0sXG4gIHJlZnJlc2g6ICgpID0+IHtcbiAgICBzdGFydFRyYW5zaXRpb24oKCkgPT4ge1xuICAgICAgZGlzcGF0Y2hBcHBSb3V0ZXJBY3Rpb24oe1xuICAgICAgICB0eXBlOiBBQ1RJT05fUkVGUkVTSCxcbiAgICAgICAgb3JpZ2luOiB3aW5kb3cubG9jYXRpb24ub3JpZ2luLFxuICAgICAgfSlcbiAgICB9KVxuICB9LFxuICBobXJSZWZyZXNoOiAoKSA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdobXJSZWZyZXNoIGNhbiBvbmx5IGJlIHVzZWQgaW4gZGV2ZWxvcG1lbnQgbW9kZS4gUGxlYXNlIHVzZSByZWZyZXNoIGluc3RlYWQuJ1xuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydFRyYW5zaXRpb24oKCkgPT4ge1xuICAgICAgICBkaXNwYXRjaEFwcFJvdXRlckFjdGlvbih7XG4gICAgICAgICAgdHlwZTogQUNUSU9OX0hNUl9SRUZSRVNILFxuICAgICAgICAgIG9yaWdpbjogd2luZG93LmxvY2F0aW9uLm9yaWdpbixcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuICB9LFxufVxuXG4vLyBFeGlzdHMgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4gRG9uJ3QgdXNlIGluIGFwcGxpY2F0aW9uIGNvZGUuXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lm5leHQpIHtcbiAgd2luZG93Lm5leHQucm91dGVyID0gcHVibGljQXBwUm91dGVySW5zdGFuY2Vcbn1cbiJdLCJuYW1lcyI6WyJjcmVhdGVNdXRhYmxlQWN0aW9uUXVldWUiLCJkaXNwYXRjaE5hdmlnYXRlQWN0aW9uIiwiZGlzcGF0Y2hUcmF2ZXJzZUFjdGlvbiIsImdldEN1cnJlbnRBcHBSb3V0ZXJTdGF0ZSIsInB1YmxpY0FwcFJvdXRlckluc3RhbmNlIiwicnVuUmVtYWluaW5nQWN0aW9ucyIsImFjdGlvblF1ZXVlIiwic2V0U3RhdGUiLCJwZW5kaW5nIiwibmV4dCIsInJ1bkFjdGlvbiIsImFjdGlvbiIsIm5lZWRzUmVmcmVzaCIsImRpc3BhdGNoIiwidHlwZSIsIkFDVElPTl9SRUZSRVNIIiwib3JpZ2luIiwid2luZG93IiwibG9jYXRpb24iLCJwcmV2U3RhdGUiLCJzdGF0ZSIsInBheWxvYWQiLCJhY3Rpb25SZXN1bHQiLCJoYW5kbGVSZXN1bHQiLCJuZXh0U3RhdGUiLCJkaXNjYXJkZWQiLCJyZXNvbHZlIiwiaXNUaGVuYWJsZSIsInRoZW4iLCJlcnIiLCJyZWplY3QiLCJkaXNwYXRjaEFjdGlvbiIsInJlc29sdmVycyIsIkFDVElPTl9SRVNUT1JFIiwiZGVmZXJyZWRQcm9taXNlIiwiUHJvbWlzZSIsInN0YXJ0VHJhbnNpdGlvbiIsIm5ld0FjdGlvbiIsImxhc3QiLCJBQ1RJT05fTkFWSUdBVEUiLCJBQ1RJT05fU0VSVkVSX0FDVElPTiIsImdsb2JhbEFjdGlvblF1ZXVlIiwiaW5pdGlhbFN0YXRlIiwiaW5zdHJ1bWVudGF0aW9uSG9va3MiLCJyZXN1bHQiLCJyZWR1Y2VyIiwib25Sb3V0ZXJUcmFuc2l0aW9uU3RhcnQiLCJFcnJvciIsImdldEFwcFJvdXRlckFjdGlvblF1ZXVlIiwiZ2V0UHJvZmlsaW5nSG9va0Zvck9uTmF2aWdhdGlvblN0YXJ0IiwiaHJlZiIsIm5hdmlnYXRlVHlwZSIsInNob3VsZFNjcm9sbCIsImxpbmtJbnN0YW5jZVJlZiIsInVybCIsIlVSTCIsImFkZEJhc2VQYXRoIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9BUFBfTkFWX0ZBSUxfSEFORExJTkciLCJfX3BlbmRpbmdVcmwiLCJzZXRMaW5rRm9yQ3VycmVudE5hdmlnYXRpb24iLCJkaXNwYXRjaEFwcFJvdXRlckFjdGlvbiIsImlzRXh0ZXJuYWxVcmwiLCJpc0V4dGVybmFsVVJMIiwibG9jYXRpb25TZWFyY2giLCJzZWFyY2giLCJhbGxvd0FsaWFzaW5nIiwidHJlZSIsImJhY2siLCJoaXN0b3J5IiwiZm9yd2FyZCIsInByZWZldGNoIiwiX19ORVhUX0NMSUVOVF9TRUdNRU5UX0NBQ0hFIiwib3B0aW9ucyIsInByZWZldGNoV2l0aFNlZ21lbnRDYWNoZSIsIm5leHRVcmwiLCJraW5kIiwiUHJlZmV0Y2hLaW5kIiwiRlVMTCIsIm9uSW52YWxpZGF0ZSIsImNyZWF0ZVByZWZldGNoVVJMIiwicHJlZmV0Y2hSZWR1Y2VyIiwiQUNUSU9OX1BSRUZFVENIIiwicmVwbGFjZSIsInNjcm9sbCIsInB1c2giLCJyZWZyZXNoIiwiaG1yUmVmcmVzaCIsIk5PREVfRU5WIiwiQUNUSU9OX0hNUl9SRUZSRVNIIiwicm91dGVyIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/app-router-instance.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js":
|
||
/*!****************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/app-router.js ***!
|
||
\****************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n createEmptyCacheNode: function() {\n return createEmptyCacheNode;\n },\n createPrefetchURL: function() {\n return createPrefetchURL;\n },\n default: function() {\n return AppRouter;\n },\n isExternalURL: function() {\n return isExternalURL;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../../shared/lib/app-router-context.shared-runtime */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js\");\nconst _routerreducertypes = __webpack_require__(/*! ./router-reducer/router-reducer-types */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst _createhreffromurl = __webpack_require__(/*! ./router-reducer/create-href-from-url */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nconst _hooksclientcontextsharedruntime = __webpack_require__(/*! ../../shared/lib/hooks-client-context.shared-runtime */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js\");\nconst _useactionqueue = __webpack_require__(/*! ./use-action-queue */ \"(app-pages-browser)/./node_modules/next/dist/client/components/use-action-queue.js\");\nconst _errorboundary = __webpack_require__(/*! ./error-boundary */ \"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js\");\nconst _globalerror = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./builtin/global-error */ \"(app-pages-browser)/./node_modules/next/dist/client/components/builtin/global-error.js\"));\nconst _isbot = __webpack_require__(/*! ../../shared/lib/router/utils/is-bot */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/is-bot.js\");\nconst _addbasepath = __webpack_require__(/*! ../add-base-path */ \"(app-pages-browser)/./node_modules/next/dist/client/add-base-path.js\");\nconst _approuterannouncer = __webpack_require__(/*! ./app-router-announcer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/app-router-announcer.js\");\nconst _redirectboundary = __webpack_require__(/*! ./redirect-boundary */ \"(app-pages-browser)/./node_modules/next/dist/client/components/redirect-boundary.js\");\nconst _findheadincache = __webpack_require__(/*! ./router-reducer/reducers/find-head-in-cache */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/find-head-in-cache.js\");\nconst _unresolvedthenable = __webpack_require__(/*! ./unresolved-thenable */ \"(app-pages-browser)/./node_modules/next/dist/client/components/unresolved-thenable.js\");\nconst _removebasepath = __webpack_require__(/*! ../remove-base-path */ \"(app-pages-browser)/./node_modules/next/dist/client/remove-base-path.js\");\nconst _hasbasepath = __webpack_require__(/*! ../has-base-path */ \"(app-pages-browser)/./node_modules/next/dist/client/has-base-path.js\");\nconst _computechangedpath = __webpack_require__(/*! ./router-reducer/compute-changed-path */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/compute-changed-path.js\");\nconst _navfailurehandler = __webpack_require__(/*! ./nav-failure-handler */ \"(app-pages-browser)/./node_modules/next/dist/client/components/nav-failure-handler.js\");\nconst _approuterinstance = __webpack_require__(/*! ./app-router-instance */ \"(app-pages-browser)/./node_modules/next/dist/client/components/app-router-instance.js\");\nconst _redirect = __webpack_require__(/*! ./redirect */ \"(app-pages-browser)/./node_modules/next/dist/client/components/redirect.js\");\nconst _redirecterror = __webpack_require__(/*! ./redirect-error */ \"(app-pages-browser)/./node_modules/next/dist/client/components/redirect-error.js\");\nconst _links = __webpack_require__(/*! ./links */ \"(app-pages-browser)/./node_modules/next/dist/client/components/links.js\");\nconst _gracefuldegradeboundary = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./errors/graceful-degrade-boundary */ \"(app-pages-browser)/./node_modules/next/dist/client/components/errors/graceful-degrade-boundary.js\"));\nconst globalMutable = {};\nfunction isExternalURL(url) {\n return url.origin !== window.location.origin;\n}\nfunction createPrefetchURL(href) {\n // Don't prefetch for bots as they don't navigate.\n if ((0, _isbot.isBot)(window.navigator.userAgent)) {\n return null;\n }\n let url;\n try {\n url = new URL((0, _addbasepath.addBasePath)(href), window.location.href);\n } catch (_) {\n // TODO: Does this need to throw or can we just console.error instead? Does\n // anyone rely on this throwing? (Seems unlikely.)\n throw Object.defineProperty(new Error(\"Cannot prefetch '\" + href + \"' because it cannot be converted to a URL.\"), \"__NEXT_ERROR_CODE\", {\n value: \"E234\",\n enumerable: false,\n configurable: true\n });\n }\n // Don't prefetch during development (improves compilation performance)\n if (true) {\n return null;\n }\n // External urls can't be prefetched in the same way.\n if (isExternalURL(url)) {\n return null;\n }\n return url;\n}\nfunction HistoryUpdater(param) {\n let { appRouterState } = param;\n (0, _react.useInsertionEffect)(()=>{\n if (false) {}\n const { tree, pushRef, canonicalUrl } = appRouterState;\n const historyState = {\n ...pushRef.preserveCustomHistoryState ? window.history.state : {},\n // Identifier is shortened intentionally.\n // __NA is used to identify if the history entry can be handled by the app-router.\n // __N is used to identify if the history entry can be handled by the old router.\n __NA: true,\n __PRIVATE_NEXTJS_INTERNALS_TREE: tree\n };\n if (pushRef.pendingPush && // Skip pushing an additional history entry if the canonicalUrl is the same as the current url.\n // This mirrors the browser behavior for normal navigation.\n (0, _createhreffromurl.createHrefFromUrl)(new URL(window.location.href)) !== canonicalUrl) {\n // This intentionally mutates React state, pushRef is overwritten to ensure additional push/replace calls do not trigger an additional history entry.\n pushRef.pendingPush = false;\n window.history.pushState(historyState, '', canonicalUrl);\n } else {\n window.history.replaceState(historyState, '', canonicalUrl);\n }\n }, [\n appRouterState\n ]);\n (0, _react.useEffect)(()=>{\n // The Next-Url and the base tree may affect the result of a prefetch\n // task. Re-prefetch all visible links with the updated values. In most\n // cases, this will not result in any new network requests, only if\n // the prefetch result actually varies on one of these inputs.\n if (false) {}\n }, [\n appRouterState.nextUrl,\n appRouterState.tree\n ]);\n return null;\n}\n_c = HistoryUpdater;\nfunction createEmptyCacheNode() {\n return {\n lazyData: null,\n rsc: null,\n prefetchRsc: null,\n head: null,\n prefetchHead: null,\n parallelRoutes: new Map(),\n loading: null,\n navigatedAt: -1\n };\n}\nfunction copyNextJsInternalHistoryState(data) {\n if (data == null) data = {};\n const currentState = window.history.state;\n const __NA = currentState == null ? void 0 : currentState.__NA;\n if (__NA) {\n data.__NA = __NA;\n }\n const __PRIVATE_NEXTJS_INTERNALS_TREE = currentState == null ? void 0 : currentState.__PRIVATE_NEXTJS_INTERNALS_TREE;\n if (__PRIVATE_NEXTJS_INTERNALS_TREE) {\n data.__PRIVATE_NEXTJS_INTERNALS_TREE = __PRIVATE_NEXTJS_INTERNALS_TREE;\n }\n return data;\n}\nfunction Head(param) {\n let { headCacheNode } = param;\n // If this segment has a `prefetchHead`, it's the statically prefetched data.\n // We should use that on initial render instead of `head`. Then we'll switch\n // to `head` when the dynamic response streams in.\n const head = headCacheNode !== null ? headCacheNode.head : null;\n const prefetchHead = headCacheNode !== null ? headCacheNode.prefetchHead : null;\n // If no prefetch data is available, then we go straight to rendering `head`.\n const resolvedPrefetchRsc = prefetchHead !== null ? prefetchHead : head;\n // We use `useDeferredValue` to handle switching between the prefetched and\n // final values. The second argument is returned on initial render, then it\n // re-renders with the first argument.\n return (0, _react.useDeferredValue)(head, resolvedPrefetchRsc);\n}\n_c1 = Head;\n/**\n * The global router that wraps the application components.\n */ function Router(param) {\n let { actionQueue, assetPrefix, globalError, gracefullyDegrade } = param;\n const state = (0, _useactionqueue.useActionQueue)(actionQueue);\n const { canonicalUrl } = state;\n // Add memoized pathname/query for useSearchParams and usePathname.\n const { searchParams, pathname } = (0, _react.useMemo)(()=>{\n const url = new URL(canonicalUrl, false ? 0 : window.location.href);\n return {\n // This is turned into a readonly class in `useSearchParams`\n searchParams: url.searchParams,\n pathname: (0, _hasbasepath.hasBasePath)(url.pathname) ? (0, _removebasepath.removeBasePath)(url.pathname) : url.pathname\n };\n }, [\n canonicalUrl\n ]);\n if (true) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const { cache, prefetchCache, tree } = state;\n // This hook is in a conditional but that is ok because `process.env.NODE_ENV` never changes\n // eslint-disable-next-line react-hooks/rules-of-hooks\n (0, _react.useEffect)(()=>{\n // Add `window.nd` for debugging purposes.\n // This is not meant for use in applications as concurrent rendering will affect the cache/tree/router.\n // @ts-ignore this is for debugging\n window.nd = {\n router: _approuterinstance.publicAppRouterInstance,\n cache,\n prefetchCache,\n tree\n };\n }, [\n cache,\n prefetchCache,\n tree\n ]);\n }\n (0, _react.useEffect)(()=>{\n // If the app is restored from bfcache, it's possible that\n // pushRef.mpaNavigation is true, which would mean that any re-render of this component\n // would trigger the mpa navigation logic again from the lines below.\n // This will restore the router to the initial state in the event that the app is restored from bfcache.\n function handlePageShow(event) {\n var _window_history_state;\n if (!event.persisted || !((_window_history_state = window.history.state) == null ? void 0 : _window_history_state.__PRIVATE_NEXTJS_INTERNALS_TREE)) {\n return;\n }\n // Clear the pendingMpaPath value so that a subsequent MPA navigation to the same URL can be triggered.\n // This is necessary because if the browser restored from bfcache, the pendingMpaPath would still be set to the value\n // of the last MPA navigation.\n globalMutable.pendingMpaPath = undefined;\n (0, _useactionqueue.dispatchAppRouterAction)({\n type: _routerreducertypes.ACTION_RESTORE,\n url: new URL(window.location.href),\n tree: window.history.state.__PRIVATE_NEXTJS_INTERNALS_TREE\n });\n }\n window.addEventListener('pageshow', handlePageShow);\n return ()=>{\n window.removeEventListener('pageshow', handlePageShow);\n };\n }, []);\n (0, _react.useEffect)(()=>{\n // Ensure that any redirect errors that bubble up outside of the RedirectBoundary\n // are caught and handled by the router.\n function handleUnhandledRedirect(event) {\n const error = 'reason' in event ? event.reason : event.error;\n if ((0, _redirecterror.isRedirectError)(error)) {\n event.preventDefault();\n const url = (0, _redirect.getURLFromRedirectError)(error);\n const redirectType = (0, _redirect.getRedirectTypeFromError)(error);\n // TODO: This should access the router methods directly, rather than\n // go through the public interface.\n if (redirectType === _redirecterror.RedirectType.push) {\n _approuterinstance.publicAppRouterInstance.push(url, {});\n } else {\n _approuterinstance.publicAppRouterInstance.replace(url, {});\n }\n }\n }\n window.addEventListener('error', handleUnhandledRedirect);\n window.addEventListener('unhandledrejection', handleUnhandledRedirect);\n return ()=>{\n window.removeEventListener('error', handleUnhandledRedirect);\n window.removeEventListener('unhandledrejection', handleUnhandledRedirect);\n };\n }, []);\n // When mpaNavigation flag is set do a hard navigation to the new url.\n // Infinitely suspend because we don't actually want to rerender any child\n // components with the new URL and any entangled state updates shouldn't\n // commit either (eg: useTransition isPending should stay true until the page\n // unloads).\n //\n // This is a side effect in render. Don't try this at home, kids. It's\n // probably safe because we know this is a singleton component and it's never\n // in <Offscreen>. At least I hope so. (It will run twice in dev strict mode,\n // but that's... fine?)\n const { pushRef } = state;\n if (pushRef.mpaNavigation) {\n // if there's a re-render, we don't want to trigger another redirect if one is already in flight to the same URL\n if (globalMutable.pendingMpaPath !== canonicalUrl) {\n const location = window.location;\n if (pushRef.pendingPush) {\n location.assign(canonicalUrl);\n } else {\n location.replace(canonicalUrl);\n }\n globalMutable.pendingMpaPath = canonicalUrl;\n }\n // TODO-APP: Should we listen to navigateerror here to catch failed\n // navigations somehow? And should we call window.stop() if a SPA navigation\n // should interrupt an MPA one?\n // NOTE: This is intentionally using `throw` instead of `use` because we're\n // inside an externally mutable condition (pushRef.mpaNavigation), which\n // violates the rules of hooks.\n throw _unresolvedthenable.unresolvedThenable;\n }\n (0, _react.useEffect)(()=>{\n const originalPushState = window.history.pushState.bind(window.history);\n const originalReplaceState = window.history.replaceState.bind(window.history);\n // Ensure the canonical URL in the Next.js Router is updated when the URL is changed so that `usePathname` and `useSearchParams` hold the pushed values.\n const applyUrlFromHistoryPushReplace = (url)=>{\n var _window_history_state;\n const href = window.location.href;\n const tree = (_window_history_state = window.history.state) == null ? void 0 : _window_history_state.__PRIVATE_NEXTJS_INTERNALS_TREE;\n (0, _react.startTransition)(()=>{\n (0, _useactionqueue.dispatchAppRouterAction)({\n type: _routerreducertypes.ACTION_RESTORE,\n url: new URL(url != null ? url : href, href),\n tree\n });\n });\n };\n /**\n * Patch pushState to ensure external changes to the history are reflected in the Next.js Router.\n * Ensures Next.js internal history state is copied to the new history entry.\n * Ensures usePathname and useSearchParams hold the newly provided url.\n */ window.history.pushState = function pushState(data, _unused, url) {\n // Avoid a loop when Next.js internals trigger pushState/replaceState\n if ((data == null ? void 0 : data.__NA) || (data == null ? void 0 : data._N)) {\n return originalPushState(data, _unused, url);\n }\n data = copyNextJsInternalHistoryState(data);\n if (url) {\n applyUrlFromHistoryPushReplace(url);\n }\n return originalPushState(data, _unused, url);\n };\n /**\n * Patch replaceState to ensure external changes to the history are reflected in the Next.js Router.\n * Ensures Next.js internal history state is copied to the new history entry.\n * Ensures usePathname and useSearchParams hold the newly provided url.\n */ window.history.replaceState = function replaceState(data, _unused, url) {\n // Avoid a loop when Next.js internals trigger pushState/replaceState\n if ((data == null ? void 0 : data.__NA) || (data == null ? void 0 : data._N)) {\n return originalReplaceState(data, _unused, url);\n }\n data = copyNextJsInternalHistoryState(data);\n if (url) {\n applyUrlFromHistoryPushReplace(url);\n }\n return originalReplaceState(data, _unused, url);\n };\n /**\n * Handle popstate event, this is used to handle back/forward in the browser.\n * By default dispatches ACTION_RESTORE, however if the history entry was not pushed/replaced by app-router it will reload the page.\n * That case can happen when the old router injected the history entry.\n */ const onPopState = (event)=>{\n if (!event.state) {\n // TODO-APP: this case only happens when pushState/replaceState was called outside of Next.js. It should probably reload the page in this case.\n return;\n }\n // This case happens when the history entry was pushed by the `pages` router.\n if (!event.state.__NA) {\n window.location.reload();\n return;\n }\n // TODO-APP: Ideally the back button should not use startTransition as it should apply the updates synchronously\n // Without startTransition works if the cache is there for this path\n (0, _react.startTransition)(()=>{\n (0, _approuterinstance.dispatchTraverseAction)(window.location.href, event.state.__PRIVATE_NEXTJS_INTERNALS_TREE);\n });\n };\n // Register popstate event to call onPopstate.\n window.addEventListener('popstate', onPopState);\n return ()=>{\n window.history.pushState = originalPushState;\n window.history.replaceState = originalReplaceState;\n window.removeEventListener('popstate', onPopState);\n };\n }, []);\n const { cache, tree, nextUrl, focusAndScrollRef } = state;\n const matchingHead = (0, _react.useMemo)(()=>{\n return (0, _findheadincache.findHeadInCache)(cache, tree[1]);\n }, [\n cache,\n tree\n ]);\n // Add memoized pathParams for useParams.\n const pathParams = (0, _react.useMemo)(()=>{\n return (0, _computechangedpath.getSelectedParams)(tree);\n }, [\n tree\n ]);\n const layoutRouterContext = (0, _react.useMemo)(()=>{\n return {\n parentTree: tree,\n parentCacheNode: cache,\n parentSegmentPath: null,\n // Root node always has `url`\n // Provided in AppTreeContext to ensure it can be overwritten in layout-router\n url: canonicalUrl\n };\n }, [\n tree,\n cache,\n canonicalUrl\n ]);\n const globalLayoutRouterContext = (0, _react.useMemo)(()=>{\n return {\n tree,\n focusAndScrollRef,\n nextUrl\n };\n }, [\n tree,\n focusAndScrollRef,\n nextUrl\n ]);\n let head;\n if (matchingHead !== null) {\n // The head is wrapped in an extra component so we can use\n // `useDeferredValue` to swap between the prefetched and final versions of\n // the head. (This is what LayoutRouter does for segment data, too.)\n //\n // The `key` is used to remount the component whenever the head moves to\n // a different segment.\n const [headCacheNode, headKey] = matchingHead;\n head = /*#__PURE__*/ (0, _jsxruntime.jsx)(Head, {\n headCacheNode: headCacheNode\n }, headKey);\n } else {\n head = null;\n }\n let content = /*#__PURE__*/ (0, _jsxruntime.jsxs)(_redirectboundary.RedirectBoundary, {\n children: [\n head,\n cache.rsc,\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_approuterannouncer.AppRouterAnnouncer, {\n tree: tree\n })\n ]\n });\n if (true) {\n // In development, we apply few error boundaries and hot-reloader:\n // - DevRootHTTPAccessFallbackBoundary: avoid using navigation API like notFound() in root layout\n // - HotReloader:\n // - hot-reload the app when the code changes\n // - render dev overlay\n // - catch runtime errors and display global-error when necessary\n if (true) {\n const { DevRootHTTPAccessFallbackBoundary } = __webpack_require__(/*! ./dev-root-http-access-fallback-boundary */ \"(app-pages-browser)/./node_modules/next/dist/client/components/dev-root-http-access-fallback-boundary.js\");\n content = /*#__PURE__*/ (0, _jsxruntime.jsx)(DevRootHTTPAccessFallbackBoundary, {\n children: content\n });\n }\n const HotReloader = (__webpack_require__(/*! ../dev/hot-reloader/app/hot-reloader-app */ \"(app-pages-browser)/./node_modules/next/dist/client/dev/hot-reloader/app/hot-reloader-app.js\")[\"default\"]);\n content = /*#__PURE__*/ (0, _jsxruntime.jsx)(HotReloader, {\n assetPrefix: assetPrefix,\n globalError: globalError,\n children: content\n });\n } else {}\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(HistoryUpdater, {\n appRouterState: state\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(RuntimeStyles, {}),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_hooksclientcontextsharedruntime.PathParamsContext.Provider, {\n value: pathParams,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_hooksclientcontextsharedruntime.PathnameContext.Provider, {\n value: pathname,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_hooksclientcontextsharedruntime.SearchParamsContext.Provider, {\n value: searchParams,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_approutercontextsharedruntime.GlobalLayoutRouterContext.Provider, {\n value: globalLayoutRouterContext,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_approutercontextsharedruntime.AppRouterContext.Provider, {\n value: _approuterinstance.publicAppRouterInstance,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_approutercontextsharedruntime.LayoutRouterContext.Provider, {\n value: layoutRouterContext,\n children: content\n })\n })\n })\n })\n })\n })\n ]\n });\n}\n_c2 = Router;\nfunction AppRouter(param) {\n let { actionQueue, globalErrorState, assetPrefix, gracefullyDegrade } = param;\n (0, _navfailurehandler.useNavFailureHandler)();\n const router = /*#__PURE__*/ (0, _jsxruntime.jsx)(Router, {\n actionQueue: actionQueue,\n assetPrefix: assetPrefix,\n globalError: globalErrorState,\n gracefullyDegrade: gracefullyDegrade\n });\n if (gracefullyDegrade) {\n return router;\n } else {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_errorboundary.ErrorBoundary, {\n // At the very top level, use the default GlobalError component as the final fallback.\n // When the app router itself fails, which means the framework itself fails, we show the default error.\n errorComponent: _globalerror.default,\n children: router\n });\n }\n}\n_c3 = AppRouter;\nconst runtimeStyles = new Set();\nlet runtimeStyleChanged = new Set();\nglobalThis._N_E_STYLE_LOAD = function(href) {\n let len = runtimeStyles.size;\n runtimeStyles.add(href);\n if (runtimeStyles.size !== len) {\n runtimeStyleChanged.forEach((cb)=>cb());\n }\n // TODO figure out how to get a promise here\n // But maybe it's not necessary as react would block rendering until it's loaded\n return Promise.resolve();\n};\nfunction RuntimeStyles() {\n _s();\n const [, forceUpdate] = _react.default.useState(0);\n const renderedStylesSize = runtimeStyles.size;\n (0, _react.useEffect)(()=>{\n const changed = ()=>forceUpdate((c)=>c + 1);\n runtimeStyleChanged.add(changed);\n if (renderedStylesSize !== runtimeStyles.size) {\n changed();\n }\n return ()=>{\n runtimeStyleChanged.delete(changed);\n };\n }, [\n renderedStylesSize,\n forceUpdate\n ]);\n const dplId = false ? 0 : '';\n return [\n ...runtimeStyles\n ].map((href, i)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(\"link\", {\n rel: \"stylesheet\",\n href: \"\" + href + dplId,\n // @ts-ignore\n precedence: \"next\"\n }, i));\n}\n_s(RuntimeStyles, \"Eht7Kgdrrgt5B4LSklQ7qDPo8Aw=\");\n_c4 = RuntimeStyles;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=app-router.js.map\nvar _c, _c1, _c2, _c3, _c4;\n$RefreshReg$(_c, \"HistoryUpdater\");\n$RefreshReg$(_c1, \"Head\");\n$RefreshReg$(_c2, \"Router\");\n$RefreshReg$(_c3, \"AppRouter\");\n$RefreshReg$(_c4, \"RuntimeStyles\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvYXBwLXJvdXRlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztJQTZJZ0JBLG9CQUFvQjtlQUFwQkE7O0lBOUVBQyxpQkFBaUI7ZUFBakJBOztJQW9maEIsT0FtQ0M7ZUFuQ3VCQzs7SUEvZlJDLGFBQWE7ZUFBYkE7Ozs7Ozs2RUE1Q1Q7MkRBS0E7Z0RBRXdCOytDQUVHOzZEQUszQjs0Q0FDaUQ7MkNBQzFCO2tGQUNDO21DQUNUO3lDQUNNO2dEQUNPOzhDQUNGOzZDQUNEO2dEQUNHOzRDQUNKO3lDQUNIO2dEQUNNOytDQUVHOytDQU05QjtzQ0FDMkQ7MkNBQ3BCO21DQUNiOzhGQUNHO0FBRXBDLE1BQU1DLGdCQUVGLENBQUM7QUFFRSxTQUFTRCxjQUFjRSxHQUFRO0lBQ3BDLE9BQU9BLElBQUlDLE1BQU0sS0FBS0MsT0FBT0MsUUFBUSxDQUFDRixNQUFNO0FBQzlDO0FBU08sU0FBU0wsa0JBQWtCUSxJQUFZO0lBQzVDLGtEQUFrRDtJQUNsRCxJQUFJQyxDQUFBQSxHQUFBQSxPQUFBQSxLQUFBQSxFQUFNSCxPQUFPSSxTQUFTLENBQUNDLFNBQVMsR0FBRztRQUNyQyxPQUFPO0lBQ1Q7SUFFQSxJQUFJUDtJQUNKLElBQUk7UUFDRkEsTUFBTSxJQUFJUSxJQUFJQyxDQUFBQSxHQUFBQSxhQUFBQSxXQUFBQSxFQUFZTCxPQUFPRixPQUFPQyxRQUFRLENBQUNDLElBQUk7SUFDdkQsRUFBRSxPQUFPTSxHQUFHO1FBQ1YsMkVBQTJFO1FBQzNFLGtEQUFrRDtRQUNsRCxNQUFNLHFCQUVMLENBRkssSUFBSUMsTUFDUCxzQkFBbUJQLE9BQUssK0NBRHJCO21CQUFBO3dCQUFBOzBCQUFBO1FBRU47SUFDRjtJQUVBLHVFQUF1RTtJQUN2RSxJQUFJUSxJQUFvQixFQUFvQjtRQUMxQyxPQUFPO0lBQ1Q7SUFFQSxxREFBcUQ7SUFDckQsSUFBSWQsY0FBY0UsTUFB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LE1BQU8sS0FBRUEsT0FBT3lKO1lBQ2hCLGFBQWE7WUFDYk0sWUFBVztXQUpOSDtBQVVYOztNQTdCU2xDIiwic291cmNlcyI6WyIvaG9tZS9OaWNob2xhaS9zcmMvY2xpZW50L2NvbXBvbmVudHMvYXBwLXJvdXRlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCBSZWFjdCwge1xuICB1c2VFZmZlY3QsXG4gIHVzZU1lbW8sXG4gIHN0YXJ0VHJhbnNpdGlvbixcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0LFxuICB1c2VEZWZlcnJlZFZhbHVlLFxufSBmcm9tICdyZWFjdCdcbmltcG9ydCB7XG4gIEFwcFJvdXRlckNvbnRleHQsXG4gIExheW91dFJvdXRlckNvbnRleHQsXG4gIEdsb2JhbExheW91dFJvdXRlckNvbnRleHQsXG59IGZyb20gJy4uLy4uL3NoYXJlZC9saWIvYXBwLXJvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHR5cGUgeyBDYWNoZU5vZGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvbGliL2FwcC1yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZSdcbmltcG9ydCB7IEFDVElPTl9SRVNUT1JFIH0gZnJvbSAnLi9yb3V0ZXItcmVkdWNlci9yb3V0ZXItcmVkdWNlci10eXBlcydcbmltcG9ydCB0eXBlIHsgQXBwUm91dGVyU3RhdGUgfSBmcm9tICcuL3JvdXRlci1yZWR1Y2VyL3JvdXRlci1yZWR1Y2VyLXR5cGVzJ1xuaW1wb3J0IHsgY3JlYXRlSHJlZkZyb21VcmwgfSBmcm9tICcuL3JvdXRlci1yZWR1Y2VyL2NyZWF0ZS1ocmVmLWZyb20tdXJsJ1xuaW1wb3J0IHtcbiAgU2VhcmNoUGFyYW1zQ29udGV4dCxcbiAgUGF0aG5hbWVDb250ZXh0LFxuICBQYXRoUGFyYW1zQ29udGV4dCxcbn0gZnJvbSAnLi4vLi4vc2hhcmVkL2xpYi9ob29rcy1jbGllbnQtY29udGV4dC5zaGFyZWQtcnVudGltZSdcbmltcG9ydCB7IGRpc3BhdGNoQXBwUm91dGVyQWN0aW9uLCB1c2VBY3Rpb25RdWV1ZSB9IGZyb20gJy4vdXNlLWFjdGlvbi1xdWV1ZSdcbmltcG9ydCB7IEVycm9yQm91bmRhcnkgfSBmcm9tICcuL2Vycm9yLWJvdW5kYXJ5J1xuaW1wb3J0IERlZmF1bHRHbG9iYWxFcnJvciBmcm9tICcuL2J1aWx0aW4vZ2xvYmFsLWVycm9yJ1xuaW1wb3J0IHsgaXNCb3QgfSBmcm9tICcuLi8uLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9pcy1ib3QnXG5pbXBvcnQgeyBhZGRCYXNlUGF0aCB9IGZyb20gJy4uL2FkZC1iYXNlLXBhdGgnXG5pbXBvcnQgeyBBcHBSb3V0ZXJBbm5vdW5jZXIgfSBmcm9tICcuL2FwcC1yb3V0ZXItYW5ub3VuY2VyJ1xuaW1wb3J0IHsgUmVkaXJlY3RCb3VuZGFyeSB9IGZyb20gJy4vcmVkaXJlY3QtYm91bmRhcnknXG5pbXBvcnQgeyBmaW5kSGVhZEluQ2FjaGUgfSBmcm9tICcuL3JvdXRlci1yZWR1Y2VyL3JlZHVjZXJzL2ZpbmQtaGVhZC1pbi1jYWNoZSdcbmltcG9ydCB7IHVucmVzb2x2ZWRUaGVuYWJsZSB9IGZyb20gJy4vdW5yZXNvbHZlZC10aGVuYWJsZSdcbmltcG9ydCB7IHJlbW92ZUJhc2VQYXRoIH0gZnJvbSAnLi4vcmVtb3ZlLWJhc2UtcGF0aCdcbmltcG9ydCB7IGhhc0Jhc2VQYXRoIH0gZnJvbSAnLi4vaGFzLWJhc2UtcGF0aCdcbmltcG9ydCB7IGdldFNlbGVjdGVkUGFyYW1zIH0gZnJvbSAnLi9yb3V0ZXItcmVkdWNlci9jb21wdXRlLWNoYW5nZWQtcGF0aCdcbmltcG9ydCB0eXBlIHsgRmxpZ2h0Um91dGVyU3RhdGUgfSBmcm9tICcuLi8uLi9zZXJ2ZXIvYXBwLXJlbmRlci90eXBlcydcbmltcG9ydCB7IHVzZU5hdkZhaWx1cmVIYW5kbGVyIH0gZnJvbSAnLi9uYXYtZmFpbHVyZS1oYW5kbGVyJ1xuaW1wb3J0IHtcbiAgZGlzcGF0Y2hUcmF2ZXJzZUFjdGlvbixcbiAgcHVibGljQXBwUm91dGVySW5zdGFuY2UsXG4gIHR5cGUgQXBwUm91dGVyQWN0aW9uUXVldWUsXG4gIHR5cGUgR2xvYmFsRXJyb3JTdGF0ZSxcbn0gZnJvbSAnLi9hcHAtcm91dGVyLWluc3RhbmNlJ1xuaW1wb3J0IHsgZ2V0UmVkaXJlY3RUeXBlRnJvbUVycm9yLCBnZXRVUkxGcm9tUmVkaXJlY3RFcnJvciB9IGZyb20gJy4vcmVkaXJlY3QnXG5pbXBvcnQgeyBpc1JlZGlyZWN0RXJyb3IsIFJlZGlyZWN0VHlwZSB9IGZyb20gJy4vcmVkaXJlY3QtZXJyb3InXG5pbXBvcnQgeyBwaW5nVmlzaWJsZUxpbmtzIH0gZnJvbSAnLi9saW5rcydcbmltcG9ydCBHcmFjZWZ1bERlZ3JhZGVCb3VuZGFyeSBmcm9tICcuL2Vycm9ycy9ncmFjZWZ1bC1kZWdyYWRlLWJvdW5kYXJ5J1xuXG5jb25zdCBnbG9iYWxNdXRhYmxlOiB7XG4gIHBlbmRpbmdNcGFQYXRoPzogc3RyaW5nXG59ID0ge31cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRXh0ZXJuYWxVUkwodXJsOiBVUkwpIHtcbiAgcmV0dXJuIHVybC5vcmlnaW4gIT09IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW5cbn1cblxuLyoqXG4gKiBHaXZlbiBhIGxpbmsgaHJlZiwgY29uc3RydWN0cyB0aGUgVVJMIHRoYXQgc2hvdWxkIGJlIHByZWZldGNoZWQuIFJldHVybnMgbnVsbFxuICogaW4gY2FzZXMgd2hlcmUgcHJlZmV0Y2hpbmcgc2hvdWxkIGJlIGRpc2FibGVkLCBsaWtlIGV4dGVybmFsIFVSTHMsIG9yXG4gKiBkdXJpbmcgZGV2ZWxvcG1lbnQuXG4gKiBAcGFyYW0gaHJlZiBUaGUgaHJlZiBwYXNzZWQgdG8gPExpbms+LCByb3V0ZXIucHJlZmV0Y2goKSwgb3Igc2ltaWxhclxuICogQHJldHVybnMgQSBVUkwgb2JqZWN0IHRvIHByZWZldGNoLCBvciBudWxsIGlmIHByZWZldGNoaW5nIHNob3VsZCBiZSBkaXNhYmxlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJlZmV0Y2hVUkwoaHJlZjogc3RyaW5nKTogVVJMIHwgbnVsbCB7XG4gIC8vIERvbid0IHByZWZldGNoIGZvciBib3RzIGFzIHRoZXkgZG9uJ3QgbmF2aWdhdGUuXG4gIGlmIChpc0JvdCh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCkpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgbGV0IHVybDogVVJMXG4gIHRyeSB7XG4gICAgdXJsID0gbmV3IFVSTChhZGRCYXNlUGF0aChocmVmKSwgd2luZG93LmxvY2F0aW9uLmhyZWYpXG4gIH0gY2F0Y2ggKF8pIHtcbiAgICAvLyBUT0RPOiBEb2VzIHRoaXMgbmVlZCB0byB0aHJvdyBvciBjYW4gd2UganVzdCBjb25zb2xlLmVycm9yIGluc3RlYWQ/IERvZXNcbiAgICAvLyBhbnlvbmUgcmVseSBvbiB0aGlzIHRocm93aW5nPyAoU2VlbXMgdW5saWtlbHkuKVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBDYW5ub3QgcHJlZmV0Y2ggJyR7aHJlZn0nIGJlY2F1c2UgaXQgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFVSTC5gXG4gICAgKVxuICB9XG5cbiAgLy8gRG9uJ3QgcHJlZmV0Y2ggZHVyaW5nIGRldmVsb3BtZW50IChpbXByb3ZlcyBjb21waWxhdGlvbiBwZXJmb3JtYW5jZSlcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIEV4dGVybmFsIHVybHMgY2FuJ3QgYmUgcHJlZmV0Y2hlZCBpbiB0aGUgc2FtZSB3YXkuXG4gIGlmIChpc0V4dGVybmFsVVJMKHVybCkpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgcmV0dXJuIHVybFxufVxuXG5mdW5jdGlvbiBIaXN0b3J5VXBkYXRlcih7XG4gIGFwcFJvdXRlclN0YXRlLFxufToge1xuICBhcHBSb3V0ZXJTdGF0ZTogQXBwUm91dGVyU3RhdGVcbn0pIHtcbiAgdXNlSW5zZXJ0aW9uRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0FQUF9OQVZfRkFJTF9IQU5ETElORykge1xuICAgICAgLy8gY2xlYXIgcGVuZGluZyBVUkwgYXMgbmF2aWdhdGlvbiBpcyBubyBsb25nZXJcbiAgICAgIC8vIGluIGZsaWdodFxuICAgICAgd2luZG93Lm5leHQuX19wZW5kaW5nVXJsID0gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3QgeyB0cmVlLCBwdXNoUmVmLCBjYW5vbmljYWxVcmwgfSA9IGFwcFJvdXRlclN0YXRlXG4gICAgY29uc3QgaGlzdG9yeVN0YXRlID0ge1xuICAgICAgLi4uKHB1c2hSZWYucHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGUgPyB3aW5kb3cuaGlzdG9yeS5zdGF0ZSA6IHt9KSxcbiAgICAgIC8vIElkZW50aWZpZXIgaXMgc2hvcnRlbmVkIGludGVudGlvbmFsbHkuXG4gICAgICAvLyBfX05BIGlzIHVzZWQgdG8gaWRlbnRpZnkgaWYgdGhlIGhpc3RvcnkgZW50cnkgY2FuIGJlIGhhbmRsZWQgYnkgdGhlIGFwcC1yb3V0ZXIuXG4gICAgICAvLyBfX04gaXMgdXNlZCB0byBpZGVudGlmeSBpZiB0aGUgaGlzdG9yeSBlbnRyeSBjYW4gYmUgaGFuZGxlZCBieSB0aGUgb2xkIHJvdXRlci5cbiAgICAgIF9fTkE6IHRydWUsXG4gICAgICBfX1BSSVZBVEVfTkVYVEpTX0lOVEVSTkFMU19UUkVFOiB0cmVlLFxuICAgIH1cbiAgICBpZiAoXG4gICAgICBwdXNoUmVmLnBlbmRpbmdQdXNoICYmXG4gICAgICAvLyBTa2lwIHB1c2hpbmcgYW4gYWRkaXRpb25hbCBoaXN0b3J5IGVudHJ5IGlmIHRoZSBjYW5vbmljYWxVcmwgaXMgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnQgdXJsLlxuICAgICAgLy8gVGhpcyBtaXJyb3JzIHRoZSBicm93c2VyIGJlaGF2aW9yIGZvciBub3JtYWwgbmF2aWdhdGlvbi5cbiAgICAgIGNyZWF0ZUhyZWZGcm9tVXJsKG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpKSAhPT0gY2Fub25pY2FsVXJsXG4gICAgKSB7XG4gICAgICAvLyBUaGlzIGludGVudGlvbmFsbHkgbXV0YXRlcyBSZWFjdCBzdGF0ZSwgcHVzaFJlZiBpcyBvdmVyd3JpdHRlbiB0byBlbnN1cmUgYWRkaXRpb25hbCBwdXNoL3JlcGxhY2UgY2FsbHMgZG8gbm90IHRyaWdnZXIgYW4gYWRkaXRpb25hbCBoaXN0b3J5IGVudHJ5LlxuICAgICAgcHVzaFJlZi5wZW5kaW5nUHVzaCA9IGZhbHNlXG4gICAgICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUoaGlzdG9yeVN0YXRlLCAnJywgY2Fub25pY2FsVXJsKVxuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoaGlzdG9yeVN0YXRlLCAnJywgY2Fub25pY2FsVXJsKVxuICAgIH1cbiAgfSwgW2FwcFJvdXRlclN0YXRlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFRoZSBOZXh0LVVybCBhbmQgdGhlIGJhc2UgdHJlZSBtYXkgYWZmZWN0IHRoZSByZXN1bHQgb2YgYSBwcmVmZXRjaFxuICAgIC8vIHRhc2suIFJlLXByZWZldGNoIGFsbCB2aXNpYmxlIGxpbmtzIHdpdGggdGhlIHVwZGF0ZWQgdmFsdWVzLiBJbiBtb3N0XG4gICAgLy8gY2FzZXMsIHRoaXMgd2lsbCBub3QgcmVzdWx0IGluIGFueSBuZXcgbmV0d29yayByZXF1ZXN0cywgb25seSBpZlxuICAgIC8vIHRoZSBwcmVmZXRjaCByZXN1bHQgYWN0dWFsbHkgdmFyaWVzIG9uIG9uZSBvZiB0aGVzZSBpbnB1dHMuXG4gICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9DTElFTlRfU0VHTUVOVF9DQUNIRSkge1xuICAgICAgcGluZ1Zpc2libGVMaW5rcyhhcHBSb3V0ZXJTdGF0ZS5uZXh0VXJsLCBhcHBSb3V0ZXJTdGF0ZS50cmVlKVxuICAgIH1cbiAgfSwgW2FwcFJvdXRlclN0YXRlLm5leHRVcmwsIGFwcFJvdXRlclN0YXRlLnRyZWVdKVxuXG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbXB0eUNhY2hlTm9kZSgpOiBDYWNoZU5vZGUge1xuICByZXR1cm4ge1xuICAgIGxhenlEYXRhOiBudWxsLFxuICAgIHJzYzogbnVsbCxcbiAgICBwcmVmZXRjaFJzYzogbnVsbCxcbiAgICBoZWFkOiBudWxsLFxuICAgIHByZWZldGNoSGVhZDogbnVsbCxcbiAgICBwYXJhbGxlbFJvdXRlczogbmV3IE1hcCgpLFxuICAgIGxvYWRpbmc6IG51bGwsXG4gICAgbmF2aWdhdGVkQXQ6IC0xLFxuICB9XG59XG5cbmZ1bmN0aW9uIGNvcHlOZXh0SnNJbnRlcm5hbEhpc3RvcnlTdGF0ZShkYXRhOiBhbnkpIHtcbiAgaWYgKGRhdGEgPT0gbnVsbCkgZGF0YSA9IHt9XG4gIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHdpbmRvdy5oaXN0b3J5LnN0YXRlXG4gIGNvbnN0IF9fTkEgPSBjdXJyZW50U3RhdGU/Ll9fTkFcbiAgaWYgKF9fTkEpIHtcbiAgICBkYXRhLl9fTkEgPSBfX05BXG4gIH1cbiAgY29uc3QgX19QUklWQVRFX05FWFRKU19JTlRFUk5BTFNfVFJFRSA9XG4gICAgY3VycmVudFN0YXRlPy5fX1BSSVZBVEVfTkVYVEpTX0lOVEVSTkFMU19UUkVFXG4gIGlmIChfX1BSSVZBVEVfTkVYVEpTX0lOVEVSTkFMU19UUkVFKSB7XG4gICAgZGF0YS5fX1BSSVZBVEVfTkVYVEpTX0lOVEVSTkFMU19UUkVFID0gX19QUklWQVRFX05FWFRKU19JTlRFUk5BTFNfVFJFRVxuICB9XG5cbiAgcmV0dXJuIGRhdGFcbn1cblxuZnVuY3Rpb24gSGVhZCh7XG4gIGhlYWRDYWNoZU5vZGUsXG59OiB7XG4gIGhlYWRDYWNoZU5vZGU6IENhY2hlTm9kZSB8IG51bGxcbn0pOiBSZWFjdC5SZWFjdE5vZGUge1xuICAvLyBJZiB0aGlzIHNlZ21lbnQgaGFzIGEgYHByZWZldGNoSGVhZGAsIGl0J3MgdGhlIHN0YXRpY2FsbHkgcHJlZmV0Y2hlZCBkYXRhLlxuICAvLyBXZSBzaG91bGQgdXNlIHRoYXQgb24gaW5pdGlhbCByZW5kZXIgaW5zdGVhZCBvZiBgaGVhZGAuIFRoZW4gd2UnbGwgc3dpdGNoXG4gIC8vIHRvIGBoZWFkYCB3aGVuIHRoZSBkeW5hbWljIHJlc3BvbnNlIHN0cmVhbXMgaW4uXG4gIGNvbnN0IGhlYWQgPSBoZWFkQ2FjaGVOb2RlICE9PSBudWxsID8gaGVhZENhY2hlTm9kZS5oZWFkIDogbnVsbFxuICBjb25zdCBwcmVmZXRjaEhlYWQgPVxuICAgIGhlYWRDYWNoZU5vZGUgIT09IG51bGwgPyBoZWFkQ2FjaGVOb2RlLnByZWZldGNoSGVhZCA6IG51bGxcblxuICAvLyBJZiBubyBwcmVmZXRjaCBkYXRhIGlzIGF2YWlsYWJsZSwgdGhlbiB3ZSBnbyBzdHJhaWdodCB0byByZW5kZXJpbmcgYGhlYWRgLlxuICBjb25zdCByZXNvbHZlZFByZWZldGNoUnNjID0gcHJlZmV0Y2hIZWFkICE9PSBudWxsID8gcHJlZmV0Y2hIZWFkIDogaGVhZFxuXG4gIC8vIFdlIHVzZSBgdXNlRGVmZXJyZWRWYWx1ZWAgdG8gaGFuZGxlIHN3aXRjaGluZyBiZXR3ZWVuIHRoZSBwcmVmZXRjaGVkIGFuZFxuICAvLyBmaW5hbCB2YWx1ZXMuIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgcmV0dXJuZWQgb24gaW5pdGlhbCByZW5kZXIsIHRoZW4gaXRcbiAgLy8gcmUtcmVuZGVycyB3aXRoIHRoZSBmaXJzdCBhcmd1bWVudC5cbiAgcmV0dXJuIHVzZURlZmVycmVkVmFsdWUoaGVhZCwgcmVzb2x2ZWRQcmVmZXRjaFJzYylcbn1cblxuLyoqXG4gKiBUaGUgZ2xvYmFsIHJvdXRlciB0aGF0IHdyYXBzIHRoZSBhcHBsaWNhdGlvbiBjb21wb25lbnRzLlxuICovXG5mdW5jdGlvbiBSb3V0ZXIoe1xuICBhY3Rpb25RdWV1ZSxcbiAgYXNzZXRQcmVmaXgsXG4gIGdsb2JhbEVycm9yLFxuICBncmFjZWZ1bGx5RGVncmFkZSxcbn06IHtcbiAgYWN0aW9uUXVldWU6IEFwcFJvdXRlckFjdGlvblF1ZXVlXG4gIGFzc2V0UHJlZml4OiBzdHJpbmdcbiAgZ2xvYmFsRXJyb3I6IEdsb2JhbEVycm9yU3RhdGVcbiAgZ3JhY2VmdWxseURlZ3JhZGU6IGJvb2xlYW5cbn0pIHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VBY3Rpb25RdWV1ZShhY3Rpb25RdWV1ZSlcbiAgY29uc3QgeyBjYW5vbmljYWxVcmwgfSA9IHN0YXRlXG4gIC8vIEFkZCBtZW1vaXplZCBwYXRobmFtZS9xdWVyeSBmb3IgdXNlU2VhcmNoUGFyYW1zIGFuZCB1c2VQYXRobmFtZS5cbiAgY29uc3QgeyBzZWFyY2hQYXJhbXMsIHBhdGhuYW1lIH0gPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKFxuICAgICAgY2Fub25pY2FsVXJsLFxuICAgICAgdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgPyAnaHR0cDovL24nIDogd2luZG93LmxvY2F0aW9uLmhyZWZcbiAgICApXG5cbiAgICByZXR1cm4ge1xuICAgICAgLy8gVGhpcyBpcyB0dXJuZWQgaW50byBhIHJlYWRvbmx5IGNsYXNzIGluIGB1c2VTZWFyY2hQYXJhbXNgXG4gICAgICBzZWFyY2hQYXJhbXM6IHVybC5zZWFyY2hQYXJhbXMsXG4gICAgICBwYXRobmFtZTogaGFzQmFzZVBhdGgodXJsLnBhdGhuYW1lKVxuICAgICAgICA/IHJlbW92ZUJhc2VQYXRoKHVybC5wYXRobmFtZSlcbiAgICAgICAgOiB1cmwucGF0aG5hbWUsXG4gICAgfVxuICB9LCBbY2Fub25pY2FsVXJsXSlcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgIGNvbnN0IHsgY2FjaGUsIHByZWZldGNoQ2FjaGUsIHRyZWUgfSA9IHN0YXRlXG5cbiAgICAvLyBUaGlzIGhvb2sgaXMgaW4gYSBjb25kaXRpb25hbCBidXQgdGhhdCBpcyBvayBiZWNhdXNlIGBwcm9jZXNzLmVudi5OT0RFX0VOVmAgbmV2ZXIgY2hhbmdlc1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAvLyBBZGQgYHdpbmRvdy5uZGAgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy5cbiAgICAgIC8vIFRoaXMgaXMgbm90IG1lYW50IGZvciB1c2UgaW4gYXBwbGljYXRpb25zIGFzIGNvbmN1cnJlbnQgcmVuZGVyaW5nIHdpbGwgYWZmZWN0IHRoZSBjYWNoZS90cmVlL3JvdXRlci5cbiAgICAgIC8vIEB0cy1pZ25vcmUgdGhpcyBpcyBmb3IgZGVidWdnaW5nXG4gICAgICB3aW5kb3cubmQgPSB7XG4gICAgICAgIHJvdXRlcjogcHVibGljQXBwUm91dGVySW5zdGFuY2UsXG4gICAgICAgIGNhY2hlLFxuICAgICAgICBwcmVmZXRjaENhY2hlLFxuICAgICAgICB0cmVlLFxuICAgICAgfVxuICAgIH0sIFtjYWNoZSwgcHJlZmV0Y2hDYWNoZSwgdHJlZV0pXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIElmIHRoZSBhcHAgaXMgcmVzdG9yZWQgZnJvbSBiZmNhY2hlLCBpdCdzIHBvc3NpYmxlIHRoYXRcbiAgICAvLyBwdXNoUmVmLm1wYU5hdmlnYXRpb24gaXMgdHJ1ZSwgd2hpY2ggd291bGQgbWVhbiB0aGF0IGFueSByZS1yZW5kZXIgb2YgdGhpcyBjb21wb25lbnRcbiAgICAvLyB3b3VsZCB0cmlnZ2VyIHRoZSBtcGEgbmF2aWdhdGlvbiBsb2dpYyBhZ2FpbiBmcm9tIHRoZSBsaW5lcyBiZWxvdy5cbiAgICAvLyBUaGlzIHdpbGwgcmVzdG9yZSB0aGUgcm91dGVyIHRvIHRoZSBpbml0aWFsIHN0YXRlIGluIHRoZSBldmVudCB0aGF0IHRoZSBhcHAgaXMgcmVzdG9yZWQgZnJvbSBiZmNhY2hlLlxuICAgIGZ1bmN0aW9uIGhhbmRsZVBhZ2VTaG93KGV2ZW50OiBQYWdlVHJhbnNpdGlvbkV2ZW50KSB7XG4gICAgICBpZiAoXG4gICAgICAgICFldmVudC5wZXJzaXN0ZWQgfHxcbiAgICAgICAgIXdpbmRvdy5oaXN0b3J5LnN0YXRlPy5fX1BSSVZBVEVfTkVYVEpTX0lOVEVSTkFMU19UUkVFXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIENsZWFyIHRoZSBwZW5kaW5nTXBhUGF0aCB2YWx1ZSBzbyB0aGF0IGEgc3Vic2VxdWVudCBNUEEgbmF2aWdhdGlvbiB0byB0aGUgc2FtZSBVUkwgY2FuIGJlIHRyaWdnZXJlZC5cbiAgICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgaWYgdGhlIGJyb3dzZXIgcmVzdG9yZWQgZnJvbSBiZmNhY2hlLCB0aGUgcGVuZGluZ01wYVBhdGggd291bGQgc3RpbGwgYmUgc2V0IHRvIHRoZSB2YWx1ZVxuICAgICAgLy8gb2YgdGhlIGxhc3QgTVBBIG5hdmlnYXRpb24uXG4gICAgICBnbG9iYWxNdXRhYmxlLnBlbmRpbmdNcGFQYXRoID0gdW5kZWZpbmVkXG5cbiAgICAgIGRpc3BhdGNoQXBwUm91dGVyQWN0aW9uKHtcbiAgICAgICAgdHlwZTogQUNUSU9OX1JFU1RPUkUsXG4gICAgICAgIHVybDogbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZiksXG4gICAgICAgIHRyZWU6IHdpbmRvdy5oaXN0b3J5LnN0YXRlLl9fUFJJVkFURV9ORVhUSlNfSU5URVJOQUxTX1RSRUUsXG4gICAgICB9KVxuICAgIH1cblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwYWdlc2hvdycsIGhhbmRsZVBhZ2VTaG93KVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdwYWdlc2hvdycsIGhhbmRsZVBhZ2VTaG93KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBFbnN1cmUgdGhhdCBhbnkgcmVkaXJlY3QgZXJyb3JzIHRoYXQgYnViYmxlIHVwIG91dHNpZGUgb2YgdGhlIFJlZGlyZWN0Qm91bmRhcnlcbiAgICAvLyBhcmUgY2F1Z2h0IGFuZCBoYW5kbGVkIGJ5IHRoZSByb3V0ZXIuXG4gICAgZnVuY3Rpb24gaGFuZGxlVW5oYW5kbGVkUmVkaXJlY3QoXG4gICAgICBldmVudDogRXJyb3JFdmVudCB8IFByb21pc2VSZWplY3Rpb25FdmVudFxuICAgICkge1xuICAgICAgY29uc3QgZXJyb3IgPSAncmVhc29uJyBpbiBldmVudCA/IGV2ZW50LnJlYXNvbiA6IGV2ZW50LmVycm9yXG4gICAgICBpZiAoaXNSZWRpcmVjdEVycm9yKGVycm9yKSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIGNvbnN0IHVybCA9IGdldFVSTEZyb21SZWRpcmVjdEVycm9yKGVycm9yKVxuICAgICAgICBjb25zdCByZWRpcmVjdFR5cGUgPSBnZXRSZWRpcmVjdFR5cGVGcm9tRXJyb3IoZXJyb3IpXG4gICAgICAgIC8vIFRPRE86IFRoaXMgc2hvdWxkIGFjY2VzcyB0aGUgcm91dGVyIG1ldGhvZHMgZGlyZWN0bHksIHJhdGhlciB0aGFuXG4gICAgICAgIC8vIGdvIHRocm91Z2ggdGhlIHB1YmxpYyBpbnRlcmZhY2UuXG4gICAgICAgIGlmIChyZWRpcmVjdFR5cGUgPT09IFJlZGlyZWN0VHlwZS5wdXNoKSB7XG4gICAgICAgICAgcHVibGljQXBwUm91dGVySW5zdGFuY2UucHVzaCh1cmwsIHt9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHB1YmxpY0FwcFJvdXRlckluc3RhbmNlLnJlcGxhY2UodXJsLCB7fSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBoYW5kbGVVbmhhbmRsZWRSZWRpcmVjdClcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndW5oYW5kbGVkcmVqZWN0aW9uJywgaGFuZGxlVW5oYW5kbGVkUmVkaXJlY3QpXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgaGFuZGxlVW5oYW5kbGVkUmVkaXJlY3QpXG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndW5oYW5kbGVkcmVqZWN0aW9uJywgaGFuZGxlVW5oYW5kbGVkUmVkaXJlY3QpXG4gICAgfVxuICB9LCBbXSlcblxuICAvLyBXaGVuIG1wYU5hdmlnYXRpb24gZmxhZyBpcyBzZXQgZG8gYSBoYXJkIG5hdmlnYXRpb24gdG8gdGhlIG5ldyB1cmwuXG4gIC8vIEluZmluaXRlbHkgc3VzcGVuZCBiZWNhdXNlIHdlIGRvbid0IGFjdHVhbGx5IHdhbnQgdG8gcmVyZW5kZXIgYW55IGNoaWxkXG4gIC8vIGNvbXBvbmVudHMgd2l0aCB0aGUgbmV3IFVSTCBhbmQgYW55IGVudGFuZ2xlZCBzdGF0ZSB1cGRhdGVzIHNob3VsZG4ndFxuICAvLyBjb21taXQgZWl0aGVyIChlZzogdXNlVHJhbnNpdGlvbiBpc1BlbmRpbmcgc2hvdWxkIHN0YXkgdHJ1ZSB1bnRpbCB0aGUgcGFnZVxuICAvLyB1bmxvYWRzKS5cbiAgLy9cbiAgLy8gVGhpcyBpcyBhIHNpZGUgZWZmZWN0IGluIHJlbmRlci4gRG9uJ3QgdHJ5IHRoaXMgYXQgaG9tZSwga2lkcy4gSXQnc1xuICAvLyBwcm9iYWJseSBzYWZlIGJlY2F1c2Ugd2Uga25vdyB0aGlzIGlzIGEgc2luZ2xldG9uIGNvbXBvbmVudCBhbmQgaXQncyBuZXZlclxuICAvLyBpbiA8T2Zmc2NyZWVuPi4gQXQgbGVhc3QgSSBob3BlIHNvLiAoSXQgd2lsbCBydW4gdHdpY2UgaW4gZGV2IHN0cmljdCBtb2RlLFxuICAvLyBidXQgdGhhdCdzLi4uIGZpbmU/KVxuICBjb25zdCB7IHB1c2hSZWYgfSA9IHN0YXRlXG4gIGlmIChwdXNoUmVmLm1wYU5hdmlnYXRpb24pIHtcbiAgICAvLyBpZiB0aGVyZSdzIGEgcmUtcmVuZGVyLCB3ZSBkb24ndCB3YW50IHRvIHRyaWdnZXIgYW5vdGhlciByZWRpcmVjdCBpZiBvbmUgaXMgYWxyZWFkeSBpbiBmbGlnaHQgdG8gdGhlIHNhbWUgVVJMXG4gICAgaWYgKGdsb2JhbE11dGFibGUucGVuZGluZ01wYVBhdGggIT09IGNhbm9uaWNhbFVybCkge1xuICAgICAgY29uc3QgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb25cbiAgICAgIGlmIChwdXNoUmVmLnBlbmRpbmdQdXNoKSB7XG4gICAgICAgIGxvY2F0aW9uLmFzc2lnbihjYW5vbmljYWxVcmwpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2NhdGlvbi5yZXBsYWNlKGNhbm9uaWNhbFVybClcbiAgICAgIH1cblxuICAgICAgZ2xvYmFsTXV0YWJsZS5wZW5kaW5nTXBhUGF0aCA9IGNhbm9uaWNhbFVybFxuICAgIH1cbiAgICAvLyBUT0RPLUFQUDogU2hvdWxkIHdlIGxpc3RlbiB0byBuYXZpZ2F0ZWVycm9yIGhlcmUgdG8gY2F0Y2ggZmFpbGVkXG4gICAgLy8gbmF2aWdhdGlvbnMgc29tZWhvdz8gQW5kIHNob3VsZCB3ZSBjYWxsIHdpbmRvdy5zdG9wKCkgaWYgYSBTUEEgbmF2aWdhdGlvblxuICAgIC8vIHNob3VsZCBpbnRlcnJ1cHQgYW4gTVBBIG9uZT9cbiAgICAvLyBOT1RFOiBUaGlzIGlzIGludGVudGlvbmFsbHkgdXNpbmcgYHRocm93YCBpbnN0ZWFkIG9mIGB1c2VgIGJlY2F1c2Ugd2UncmVcbiAgICAvLyBpbnNpZGUgYW4gZXh0ZXJuYWxseSBtdXRhYmxlIGNvbmRpdGlvbiAocHVzaFJlZi5tcGFOYXZpZ2F0aW9uKSwgd2hpY2hcbiAgICAvLyB2aW9sYXRlcyB0aGUgcnVsZXMgb2YgaG9va3MuXG4gICAgdGhyb3cgdW5yZXNvbHZlZFRoZW5hYmxlXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsUHVzaFN0YXRlID0gd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlLmJpbmQod2luZG93Lmhpc3RvcnkpXG4gICAgY29uc3Qgb3JpZ2luYWxSZXBsYWNlU3RhdGUgPSB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUuYmluZChcbiAgICAgIHdpbmRvdy5oaXN0b3J5XG4gICAgKVxuXG4gICAgLy8gRW5zdXJlIHRoZSBjYW5vbmljYWwgVVJMIGluIHRoZSBOZXh0LmpzIFJvdXRlciBpcyB1cGRhdGVkIHdoZW4gdGhlIFVSTCBpcyBjaGFuZ2VkIHNvIHRoYXQgYHVzZVBhdGhuYW1lYCBhbmQgYHVzZVNlYXJjaFBhcmFtc2AgaG9sZCB0aGUgcHVzaGVkIHZhbHVlcy5cbiAgICBjb25zdCBhcHBseVVybEZyb21IaXN0b3J5UHVzaFJlcGxhY2UgPSAoXG4gICAgICB1cmw6IHN0cmluZyB8IFVSTCB8IG51bGwgfCB1bmRlZmluZWRcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IGhyZWYgPSB3aW5kb3cubG9jYXRpb24uaHJlZlxuICAgICAgY29uc3QgdHJlZTogRmxpZ2h0Um91dGVyU3RhdGUgfCB1bmRlZmluZWQgPVxuICAgICAgICB3aW5kb3cuaGlzdG9yeS5zdGF0ZT8uX19QUklWQVRFX05FWFRKU19JTlRFUk5BTFNfVFJFRVxuXG4gICAgICBzdGFydFRyYW5zaXRpb24oKCkgPT4ge1xuICAgICAgICBkaXNwYXRjaEFwcFJvdXRlckFjdGlvbih7XG4gICAgICAgICAgdHlwZTogQUNUSU9OX1JFU1RPUkUsXG4gICAgICAgICAgdXJsOiBuZXcgVVJMKHVybCA/PyBocmVmLCBocmVmKSxcbiAgICAgICAgICB0cmVlLFxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYXRjaCBwdXNoU3RhdGUgdG8gZW5zdXJlIGV4dGVybmFsIGNoYW5nZXMgdG8gdGhlIGhpc3RvcnkgYXJlIHJlZmxlY3RlZCBpbiB0aGUgTmV4dC5qcyBSb3V0ZXIuXG4gICAgICogRW5zdXJlcyBOZXh0LmpzIGludGVybmFsIGhpc3Rvcnkgc3RhdGUgaXMgY29waWVkIHRvIHRoZSBuZXcgaGlzdG9yeSBlbnRyeS5cbiAgICAgKiBFbnN1cmVzIHVzZVBhdGhuYW1lIGFuZCB1c2VTZWFyY2hQYXJhbXMgaG9sZCB0aGUgbmV3bHkgcHJvdmlkZWQgdXJsLlxuICAgICAqL1xuICAgIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSA9IGZ1bmN0aW9uIHB1c2hTdGF0ZShcbiAgICAgIGRhdGE6IGFueSxcbiAgICAgIF91bnVzZWQ6IHN0cmluZyxcbiAgICAgIHVybD86IHN0cmluZyB8IFVSTCB8IG51bGxcbiAgICApOiB2b2lkIHtcbiAgICAgIC8vIEF2b2lkIGEgbG9vcCB3aGVuIE5leHQuanMgaW50ZXJuYWxzIHRyaWdnZXIgcHVzaFN0YXRlL3JlcGxhY2VTdGF0ZVxuICAgICAgaWYgKGRhdGE/Ll9fTkEgfHwgZGF0YT8uX04pIHtcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsUHVzaFN0YXRlKGRhdGEsIF91bnVzZWQsIHVybClcbiAgICAgIH1cblxuICAgICAgZGF0YSA9IGNvcHlOZXh0SnNJbnRlcm5hbEhpc3RvcnlTdGF0ZShkYXRhKVxuXG4gICAgICBpZiAodXJsKSB7XG4gICAgICAgIGFwcGx5VXJsRnJvbUhpc3RvcnlQdXNoUmVwbGFjZSh1cmwpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvcmlnaW5hbFB1c2hTdGF0ZShkYXRhLCBfdW51c2VkLCB1cmwpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGF0Y2ggcmVwbGFjZVN0YXRlIHRvIGVuc3VyZSBleHRlcm5hbCBjaGFuZ2VzIHRvIHRoZSBoaXN0b3J5IGFyZSByZWZsZWN0ZWQgaW4gdGhlIE5leHQuanMgUm91dGVyLlxuICAgICAqIEVuc3VyZXMgTmV4dC5qcyBpbnRlcm5hbCBoaXN0b3J5IHN0YXRlIGlzIGNvcGllZCB0byB0aGUgbmV3IGhpc3RvcnkgZW50cnkuXG4gICAgICogRW5zdXJlcyB1c2VQYXRobmFtZSBhbmQgdXNlU2VhcmNoUGFyYW1zIGhvbGQgdGhlIG5ld2x5IHByb3ZpZGVkIHVybC5cbiAgICAgKi9cbiAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUgPSBmdW5jdGlvbiByZXBsYWNlU3RhdGUoXG4gICAgICBkYXRhOiBhbnksXG4gICAgICBfdW51c2VkOiBzdHJpbmcsXG4gICAgICB1cmw/OiBzdHJpbmcgfCBVUkwgfCBudWxsXG4gICAgKTogdm9pZCB7XG4gICAgICAvLyBBdm9pZCBhIGxvb3Agd2hlbiBOZXh0LmpzIGludGVybmFscyB0cmlnZ2VyIHB1c2hTdGF0ZS9yZXBsYWNlU3RhdGVcbiAgICAgIGlmIChkYXRhPy5fX05BIHx8IGRhdGE/Ll9OKSB7XG4gICAgICAgIHJldHVybiBvcmlnaW5hbFJlcGxhY2VTdGF0ZShkYXRhLCBfdW51c2VkLCB1cmwpXG4gICAgICB9XG4gICAgICBkYXRhID0gY29weU5leHRKc0ludGVybmFsSGlzdG9yeVN0YXRlKGRhdGEpXG5cbiAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgYXBwbHlVcmxGcm9tSGlzdG9yeVB1c2hSZXBsYWNlKHVybClcbiAgICAgIH1cbiAgICAgIHJldHVybiBvcmlnaW5hbFJlcGxhY2VTdGF0ZShkYXRhLCBfdW51c2VkLCB1cmwpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIHBvcHN0YXRlIGV2ZW50LCB0aGlzIGlzIHVzZWQgdG8gaGFuZGxlIGJhY2svZm9yd2FyZCBpbiB0aGUgYnJvd3Nlci5cbiAgICAgKiBCeSBkZWZhdWx0IGRpc3BhdGNoZXMgQUNUSU9OX1JFU1RPUkUsIGhvd2V2ZXIgaWYgdGhlIGhpc3RvcnkgZW50cnkgd2FzIG5vdCBwdXNoZWQvcmVwbGFjZWQgYnkgYXBwLXJvdXRlciBpdCB3aWxsIHJlbG9hZCB0aGUgcGFnZS5cbiAgICAgKiBUaGF0IGNhc2UgY2FuIGhhcHBlbiB3aGVuIHRoZSBvbGQgcm91dGVyIGluamVjdGVkIHRoZSBoaXN0b3J5IGVudHJ5LlxuICAgICAqL1xuICAgIGNvbnN0IG9uUG9wU3RhdGUgPSAoZXZlbnQ6IFBvcFN0YXRlRXZlbnQpID0+IHtcbiAgICAgIGlmICghZXZlbnQuc3RhdGUpIHtcbiAgICAgICAgLy8gVE9ETy1BUFA6IHRoaXMgY2FzZSBvbmx5IGhhcHBlbnMgd2hlbiBwdXNoU3RhdGUvcmVwbGFjZVN0YXRlIHdhcyBjYWxsZWQgb3V0c2lkZSBvZiBOZXh0LmpzLiBJdCBzaG91bGQgcHJvYmFibHkgcmVsb2FkIHRoZSBwYWdlIGluIHRoaXMgY2FzZS5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIFRoaXMgY2FzZSBoYXBwZW5zIHdoZW4gdGhlIGhpc3RvcnkgZW50cnkgd2FzIHB1c2hlZCBieSB0aGUgYHBhZ2VzYCByb3V0ZXIuXG4gICAgICBpZiAoIWV2ZW50LnN0YXRlLl9fTkEpIHtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBUT0RPLUFQUDogSWRlYWxseSB0aGUgYmFjayBidXR0b24gc2hvdWxkIG5vdCB1c2Ugc3RhcnRUcmFuc2l0aW9uIGFzIGl0IHNob3VsZCBhcHBseSB0aGUgdXBkYXRlcyBzeW5jaHJvbm91c2x5XG4gICAgICAvLyBXaXRob3V0IHN0YXJ0VHJhbnNpdGlvbiB3b3JrcyBpZiB0aGUgY2FjaGUgaXMgdGhlcmUgZm9yIHRoaXMgcGF0aFxuICAgICAgc3RhcnRUcmFuc2l0aW9uKCgpID0+IHtcbiAgICAgICAgZGlzcGF0Y2hUcmF2ZXJzZUFjdGlvbihcbiAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICAgICAgICBldmVudC5zdGF0ZS5fX1BSSVZBVEVfTkVYVEpTX0lOVEVSTkFMU19UUkVFXG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gUmVnaXN0ZXIgcG9wc3RhdGUgZXZlbnQgdG8gY2FsbCBvblBvcHN0YXRlLlxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb3BzdGF0ZScsIG9uUG9wU3RhdGUpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSA9IG9yaWdpbmFsUHVzaFN0YXRlXG4gICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUgPSBvcmlnaW5hbFJlcGxhY2VTdGF0ZVxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgb25Qb3BTdGF0ZSlcbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IHsgY2FjaGUsIHRyZWUsIG5leHRVcmwsIGZvY3VzQW5kU2Nyb2xsUmVmIH0gPSBzdGF0ZVxuXG4gIGNvbnN0IG1hdGNoaW5nSGVhZCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBmaW5kSGVhZEluQ2FjaGUoY2FjaGUsIHRyZWVbMV0pXG4gIH0sIFtjYWNoZSwgdHJlZV0pXG5cbiAgLy8gQWRkIG1lbW9pemVkIHBhdGhQYXJhbXMgZm9yIHVzZVBhcmFtcy5cbiAgY29uc3QgcGF0aFBhcmFtcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBnZXRTZWxlY3RlZFBhcmFtcyh0cmVlKVxuICB9LCBbdHJlZV0pXG5cbiAgY29uc3QgbGF5b3V0Um91dGVyQ29udGV4dCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJlbnRUcmVlOiB0cmVlLFxuICAgICAgcGFyZW50Q2FjaGVOb2RlOiBjYWNoZSxcbiAgICAgIHBhcmVudFNlZ21lbnRQYXRoOiBudWxsLFxuICAgICAgLy8gUm9vdCBub2RlIGFsd2F5cyBoYXMgYHVybGBcbiAgICAgIC8vIFByb3ZpZGVkIGluIEFwcFRyZWVDb250ZXh0IHRvIGVuc3VyZSBpdCBjYW4gYmUgb3ZlcndyaXR0ZW4gaW4gbGF5b3V0LXJvdXRlclxuICAgICAgdXJsOiBjYW5vbmljYWxVcmwsXG4gICAgfVxuICB9LCBbdHJlZSwgY2FjaGUsIGNhbm9uaWNhbFVybF0pXG5cbiAgY29uc3QgZ2xvYmFsTGF5b3V0Um91dGVyQ29udGV4dCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICB0cmVlLFxuICAgICAgZm9jdXNBbmRTY3JvbGxSZWYsXG4gICAgICBuZXh0VXJsLFxuICAgIH1cbiAgfSwgW3RyZWUsIGZvY3VzQW5kU2Nyb2xsUmVmLCBuZXh0VXJsXSlcblxuICBsZXQgaGVhZFxuICBpZiAobWF0Y2hpbmdIZWFkICE9PSBudWxsKSB7XG4gICAgLy8gVGhlIGhlYWQgaXMgd3JhcHBlZCBpbiBhbiBleHRyYSBjb21wb25lbnQgc28gd2UgY2FuIHVzZVxuICAgIC8vIGB1c2VEZWZlcnJlZFZhbHVlYCB0byBzd2FwIGJldHdlZW4gdGhlIHByZWZldGNoZWQgYW5kIGZpbmFsIHZlcnNpb25zIG9mXG4gICAgLy8gdGhlIGhlYWQuIChUaGlzIGlzIHdoYXQgTGF5b3V0Um91dGVyIGRvZXMgZm9yIHNlZ21lbnQgZGF0YSwgdG9vLilcbiAgICAvL1xuICAgIC8vIFRoZSBga2V5YCBpcyB1c2VkIHRvIHJlbW91bnQgdGhlIGNvbXBvbmVudCB3aGVuZXZlciB0aGUgaGVhZCBtb3ZlcyB0b1xuICAgIC8vIGEgZGlmZmVyZW50IHNlZ21lbnQuXG4gICAgY29uc3QgW2hlYWRDYWNoZU5vZGUsIGhlYWRLZXldID0gbWF0Y2hpbmdIZWFkXG4gICAgaGVhZCA9IDxIZWFkIGtleT17aGVhZEtleX0gaGVhZENhY2hlTm9kZT17aGVhZENhY2hlTm9kZX0gLz5cbiAgfSBlbHNlIHtcbiAgICBoZWFkID0gbnVsbFxuICB9XG5cbiAgbGV0IGNvbnRlbnQgPSAoXG4gICAgPFJlZGlyZWN0Qm91bmRhcnk+XG4gICAgICB7aGVhZH1cbiAgICAgIHtjYWNoZS5yc2N9XG4gICAgICA8QXBwUm91dGVyQW5ub3VuY2VyIHRyZWU9e3RyZWV9IC8+XG4gICAgPC9SZWRpcmVjdEJvdW5kYXJ5PlxuICApXG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBJbiBkZXZlbG9wbWVudCwgd2UgYXBwbHkgZmV3IGVycm9yIGJvdW5kYXJpZXMgYW5kIGhvdC1yZWxvYWRlcjpcbiAgICAvLyAtIERldlJvb3RIVFRQQWNjZXNzRmFsbGJhY2tCb3VuZGFyeTogYXZvaWQgdXNpbmcgbmF2aWdhdGlvbiBBUEkgbGlrZSBub3RGb3VuZCgpIGluIHJvb3QgbGF5b3V0XG4gICAgLy8gLSBIb3RSZWxvYWRlcjpcbiAgICAvLyAgLSBob3QtcmVsb2FkIHRoZSBhcHAgd2hlbiB0aGUgY29kZSBjaGFuZ2VzXG4gICAgLy8gIC0gcmVuZGVyIGRldiBvdmVybGF5XG4gICAgLy8gIC0gY2F0Y2ggcnVudGltZSBlcnJvcnMgYW5kIGRpc3BsYXkgZ2xvYmFsLWVycm9yIHdoZW4gbmVjZXNzYXJ5XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zdCB7IERldlJvb3RIVFRQQWNjZXNzRmFsbGJhY2tCb3VuZGFyeSB9ID1cbiAgICAgICAgcmVxdWlyZSgnLi9kZXYtcm9vdC1odHRwLWFjY2Vzcy1mYWxsYmFjay1ib3VuZGFyeScpIGFzIHR5cGVvZiBpbXBvcnQoJy4vZGV2LXJvb3QtaHR0cC1hY2Nlc3MtZmFsbGJhY2stYm91bmRhcnknKVxuICAgICAgY29udGVudCA9IChcbiAgICAgICAgPERldlJvb3RIVFRQQWNjZXNzRmFsbGJhY2tCb3VuZGFyeT5cbiAgICAgICAgICB7Y29udGVudH1cbiAgICAgICAgPC9EZXZSb290SFRUUEFjY2Vzc0ZhbGxiYWNrQm91bmRhcnk+XG4gICAgICApXG4gICAgfVxuICAgIGNvbnN0IEhvdFJlbG9hZGVyOiB0eXBlb2YgaW1wb3J0KCcuLi9kZXYvaG90LXJlbG9hZGVyL2FwcC9ob3QtcmVsb2FkZXItYXBwJykuZGVmYXVsdCA9XG4gICAgICAoXG4gICAgICAgIHJlcXVpcmUoJy4uL2Rldi9ob3QtcmVsb2FkZXIvYXBwL2hvdC1yZWxvYWRlci1hcHAnKSBhcyB0eXBlb2YgaW1wb3J0KCcuLi9kZXYvaG90LXJlbG9hZGVyL2FwcC9ob3QtcmVsb2FkZXItYXBwJylcbiAgICAgICkuZGVmYXVsdFxuXG4gICAgY29udGVudCA9IChcbiAgICAgIDxIb3RSZWxvYWRlciBhc3NldFByZWZpeD17YXNzZXRQcmVmaXh9IGdsb2JhbEVycm9yPXtnbG9iYWxFcnJvcn0+XG4gICAgICAgIHtjb250ZW50fVxuICAgICAgPC9Ib3RSZWxvYWRlcj5cbiAgICApXG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgZ3JhY2VmdWxseSBkZWdyYWRpbmcgaXMgYXBwbGllZCBpbiBwcm9kdWN0aW9uLFxuICAgIC8vIGxlYXZlIHRoZSBhcHAgYXMgaXQgaXMgcmF0aGVyIHRoYW4gY2F1Z2h0IGJ5IEdsb2JhbEVycm9yIGJvdW5kYXJ5LlxuICAgIGlmIChncmFjZWZ1bGx5RGVncmFkZSkge1xuICAgICAgY29udGVudCA9IDxHcmFjZWZ1bERlZ3JhZGVCb3VuZGFyeT57Y29udGVudH08L0dyYWNlZnVsRGVncmFkZUJvdW5kYXJ5PlxuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZW50ID0gKFxuICAgICAgICA8RXJyb3JCb3VuZGFyeVxuICAgICAgICAgIGVycm9yQ29tcG9uZW50PXtnbG9iYWxFcnJvclswXX1cbiAgICAgICAgICBlcnJvclN0eWxlcz17Z2xvYmFsRXJyb3JbMV19XG4gICAgICAgID5cbiAgICAgICAgICB7Y29udGVudH1cbiAgICAgICAgPC9FcnJvckJvdW5kYXJ5PlxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxIaXN0b3J5VXBkYXRlciBhcHBSb3V0ZXJTdGF0ZT17c3RhdGV9IC8+XG4gICAgICA8UnVudGltZVN0eWxlcyAvPlxuICAgICAgPFBhdGhQYXJhbXNDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtwYXRoUGFyYW1zfT5cbiAgICAgICAgPFBhdGhuYW1lQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17cGF0aG5hbWV9PlxuICAgICAgICAgIDxTZWFyY2hQYXJhbXNDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtzZWFyY2hQYXJhbXN9PlxuICAgICAgICAgICAgPEdsb2JhbExheW91dFJvdXRlckNvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgICAgICAgdmFsdWU9e2dsb2JhbExheW91dFJvdXRlckNvbnRleHR9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHsvKiBUT0RPOiBXZSBzaG91bGQgYmUgYWJsZSB0byByZW1vdmUgdGhpcyBjb250ZXh0LiB1c2VSb3V0ZXJcbiAgICAgICAgICAgICAgICAgIHNob3VsZCBpbXBvcnQgZnJvbSBhcHAtcm91dGVyLWluc3RhbmNlIGluc3RlYWQuIEl0J3Mgb25seVxuICAgICAgICAgICAgICAgICAgbmVjZXNzYXJ5IGJlY2F1c2UgdXNlUm91dGVyIGlzIHNoYXJlZCBiZXR3ZWVuIFBhZ2VzIGFuZFxuICAgICAgICAgICAgICAgICAgQXBwIFJvdXRlci4gV2Ugc2hvdWxkIGZvcmsgdGhhdCBtb2R1bGUsIHRoZW4gcmVtb3ZlIHRoaXNcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQgcHJvdmlkZXIuICovfVxuICAgICAgICAgICAgICA8QXBwUm91dGVyQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17cHVibGljQXBwUm91dGVySW5zdGFuY2V9PlxuICAgICAgICAgICAgICAgIDxMYXlvdXRSb3V0ZXJDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtsYXlvdXRSb3V0ZXJDb250ZXh0fT5cbiAgICAgICAgICAgICAgICAgIHtjb250ZW50fVxuICAgICAgICAgICAgICAgIDwvTGF5b3V0Um91dGVyQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICAgICAgICAgPC9BcHBSb3V0ZXJDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICAgICAgPC9HbG9iYWxMYXlvdXRSb3V0ZXJDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICAgIDwvU2VhcmNoUGFyYW1zQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICAgPC9QYXRobmFtZUNvbnRleHQuUHJvdmlkZXI+XG4gICAgICA8L1BhdGhQYXJhbXNDb250ZXh0LlByb3ZpZGVyPlxuICAgIDwvPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEFwcFJvdXRlcih7XG4gIGFjdGlvblF1ZXVlLFxuICBnbG9iYWxFcnJvclN0YXRlLFxuICBhc3NldFByZWZpeCxcbiAgZ3JhY2VmdWxseURlZ3JhZGUsXG59OiB7XG4gIGFjdGlvblF1ZXVlOiBBcHBSb3V0ZXJBY3Rpb25RdWV1ZVxuICBnbG9iYWxFcnJvclN0YXRlOiBHbG9iYWxFcnJvclN0YXRlXG4gIGFzc2V0UHJlZml4OiBzdHJpbmdcbiAgZ3JhY2VmdWxseURlZ3JhZGU6IGJvb2xlYW5cbn0pIHtcbiAgdXNlTmF2RmFpbHVyZUhhbmRsZXIoKVxuXG4gIGNvbnN0IHJvdXRlciA9IChcbiAgICA8Um91dGVyXG4gICAgICBhY3Rpb25RdWV1ZT17YWN0aW9uUXVldWV9XG4gICAgICBhc3NldFByZWZpeD17YXNzZXRQcmVmaXh9XG4gICAgICBnbG9iYWxFcnJvcj17Z2xvYmFsRXJyb3JTdGF0ZX1cbiAgICAgIGdyYWNlZnVsbHlEZWdyYWRlPXtncmFjZWZ1bGx5RGVncmFkZX1cbiAgICAvPlxuICApXG5cbiAgaWYgKGdyYWNlZnVsbHlEZWdyYWRlKSB7XG4gICAgcmV0dXJuIHJvdXRlclxuICB9IGVsc2Uge1xuICAgIHJldHVybiAoXG4gICAgICA8RXJyb3JCb3VuZGFyeVxuICAgICAgICAvLyBBdCB0aGUgdmVyeSB0b3AgbGV2ZWwsIHVzZSB0aGUgZGVmYXVsdCBHbG9iYWxFcnJvciBjb21wb25lbnQgYXMgdGhlIGZpbmFsIGZhbGxiYWNrLlxuICAgICAgICAvLyBXaGVuIHRoZSBhcHAgcm91dGVyIGl0c2VsZiBmYWlscywgd2hpY2ggbWVhbnMgdGhlIGZyYW1ld29yayBpdHNlbGYgZmFpbHMsIHdlIHNob3cgdGhlIGRlZmF1bHQgZXJyb3IuXG4gICAgICAgIGVycm9yQ29tcG9uZW50PXtEZWZhdWx0R2xvYmFsRXJyb3J9XG4gICAgICA+XG4gICAgICAgIHtyb3V0ZXJ9XG4gICAgICA8L0Vycm9yQm91bmRhcnk+XG4gICAgKVxuICB9XG59XG5cbmNvbnN0IHJ1bnRpbWVTdHlsZXMgPSBuZXcgU2V0PHN0cmluZz4oKVxubGV0IHJ1bnRpbWVTdHlsZUNoYW5nZWQgPSBuZXcgU2V0PCgpID0+IHZvaWQ+KClcblxuZ2xvYmFsVGhpcy5fTl9FX1NUWUxFX0xPQUQgPSBmdW5jdGlvbiAoaHJlZjogc3RyaW5nKSB7XG4gIGxldCBsZW4gPSBydW50aW1lU3R5bGVzLnNpemVcbiAgcnVudGltZVN0eWxlcy5hZGQoaHJlZilcbiAgaWYgKHJ1bnRpbWVTdHlsZXMuc2l6ZSAhPT0gbGVuKSB7XG4gICAgcnVudGltZVN0eWxlQ2hhbmdlZC5mb3JFYWNoKChjYikgPT4gY2IoKSlcbiAgfVxuICAvLyBUT0RPIGZpZ3VyZSBvdXQgaG93IHRvIGdldCBhIHByb21pc2UgaGVyZVxuICAvLyBCdXQgbWF5YmUgaXQncyBub3QgbmVjZXNzYXJ5IGFzIHJlYWN0IHdvdWxkIGJsb2NrIHJlbmRlcmluZyB1bnRpbCBpdCdzIGxvYWRlZFxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbn1cblxuZnVuY3Rpb24gUnVudGltZVN0eWxlcygpIHtcbiAgY29uc3QgWywgZm9yY2VVcGRhdGVdID0gUmVhY3QudXNlU3RhdGUoMClcbiAgY29uc3QgcmVuZGVyZWRTdHlsZXNTaXplID0gcnVudGltZVN0eWxlcy5zaXplXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY2hhbmdlZCA9ICgpID0+IGZvcmNlVXBkYXRlKChjKSA9PiBjICsgMSlcbiAgICBydW50aW1lU3R5bGVDaGFuZ2VkLmFkZChjaGFuZ2VkKVxuICAgIGlmIChyZW5kZXJlZFN0eWxlc1NpemUgIT09IHJ1bnRpbWVTdHlsZXMuc2l6ZSkge1xuICAgICAgY2hhbmdlZCgpXG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBydW50aW1lU3R5bGVDaGFuZ2VkLmRlbGV0ZShjaGFuZ2VkKVxuICAgIH1cbiAgfSwgW3JlbmRlcmVkU3R5bGVzU2l6ZSwgZm9yY2VVcGRhdGVdKVxuXG4gIGNvbnN0IGRwbElkID0gcHJvY2Vzcy5lbnYuTkVYVF9ERVBMT1lNRU5UX0lEXG4gICAgPyBgP2RwbD0ke3Byb2Nlc3MuZW52Lk5FWFRfREVQTE9ZTUVOVF9JRH1gXG4gICAgOiAnJ1xuICByZXR1cm4gWy4uLnJ1bnRpbWVTdHlsZXNdLm1hcCgoaHJlZiwgaSkgPT4gKFxuICAgIDxsaW5rXG4gICAgICBrZXk9e2l9XG4gICAgICByZWw9XCJzdHlsZXNoZWV0XCJcbiAgICAgIGhyZWY9e2Ake2hyZWZ9JHtkcGxJZH1gfVxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcHJlY2VkZW5jZT1cIm5leHRcIlxuICAgICAgLy8gVE9ETyBmaWd1cmUgb3V0IGNyb3NzT3JpZ2luIGFuZCBub25jZVxuICAgICAgLy8gY3Jvc3NPcmlnaW49e1RPRE99XG4gICAgICAvLyBub25jZT17VE9ET31cbiAgICAvPlxuICApKVxufVxuIl0sIm5hbWVzIjpbImNyZWF0ZUVtcHR5Q2FjaGVOb2RlIiwiY3JlYXRlUHJlZmV0Y2hVUkwiLCJBcHBSb3V0ZXIiLCJpc0V4dGVybmFsVVJMIiwiZ2xvYmFsTXV0YWJsZSIsInVybCIsIm9yaWdpbiIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsImlzQm90IiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiVVJMIiwiYWRkQmFzZVBhdGgiLCJfIiwiRXJyb3IiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJIaXN0b3J5VXBkYXRlciIsImFwcFJvdXRlclN0YXRlIiwidXNlSW5zZXJ0aW9uRWZmZWN0IiwiX19ORVhUX0FQUF9OQVZfRkFJTF9IQU5ETElORyIsIm5leHQiLCJfX3BlbmRpbmdVcmwiLCJ1bmRlZmluZWQiLCJ0cmVlIiwicHVzaFJlZiIsImNhbm9uaWNhbFVybCIsImhpc3RvcnlTdGF0ZSIsInByZXNlcnZlQ3VzdG9tSGlzdG9yeVN0YXRlIiwiaGlzdG9yeSIsInN0YXRlIiwiX19OQSIsIl9fUFJJVkFURV9ORVhUSlNfSU5URVJOQUxTX1RSRUUiLCJwZW5kaW5nUHVzaCIsImNyZWF0ZUhyZWZGcm9tVXJsIiwicHVzaFN0YXRlIiwicmVwbGFjZVN0YXRlIiwidXNlRWZmZWN0IiwiX19ORVhUX0NMSUVOVF9TRUdNRU5UX0NBQ0hFIiwicGluZ1Zpc2libGVMaW5rcyIsIm5leHRVcmwiLCJsYXp5RGF0YSIsInJzYyIsInByZWZldGNoUnNjIiwiaGVhZCIsInByZWZldGNoSGVhZCIsInBhcmFsbGVsUm91dGVzIiwiTWFwIiwibG9hZGluZyIsIm5hdmlnYXRlZEF0IiwiY29weU5leHRKc0ludGVybmFsSGlzdG9yeVN0YXRlIiwiZGF0YSIsImN1cnJlbnRTdGF0ZSIsIkhlYWQiLCJoZWFkQ2FjaGVOb2RlIiwicmVzb2x2ZWRQcmVmZXRjaFJzYyIsInVzZURlZmVycmVkVmFsdWUiLCJSb3V0ZXIiLCJhY3Rpb25RdWV1ZSIsImFzc2V0UHJlZml4IiwiZ2xvYmFsRXJyb3IiLCJncmFjZWZ1bGx5RGVncmFkZSIsInVzZUFjdGlvblF1ZXVlIiwic2VhcmNoUGFyYW1zIiwicGF0aG5hbWUiLCJ1c2VNZW1vIiwiaGFzQmFzZVBhdGgiLCJyZW1vdmVCYXNlUGF0aCIsImNhY2hlIiwicHJlZmV0Y2hDYWNoZSIsIm5kIiwicm91dGVyIiwicHVibGljQXBwUm91dGVySW5zdGFuY2UiLCJoYW5kbGVQYWdlU2hvdyIsImV2ZW50IiwicGVyc2lzdGVkIiwicGVuZGluZ01wYVBhdGgiLCJkaXNwYXRjaEFwcFJvdXRlckFjdGlvbiIsInR5cGUiLCJBQ1RJT05fUkVTVE9SRSIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiaGFuZGxlVW5oYW5kbGVkUmVkaXJlY3QiLCJlcnJvciIsInJlYXNvbiIsImlzUmVkaXJlY3RFcnJvciIsInByZXZlbnREZWZhdWx0IiwiZ2V0VVJMRnJvbVJlZGlyZWN0RXJyb3IiLCJyZWRpcmVjdFR5cGUiLCJnZXRSZWRpcmVjdFR5cGVGcm9tRXJyb3IiLCJSZWRpcmVjdFR5cGUiLCJwdXNoIiwicmVwbGFjZSIsIm1wYU5hdmlnYXRpb24iLCJhc3NpZ24iLCJ1bnJlc29sdmVkVGhlbmFibGUiLCJvcmlnaW5hbFB1c2hTdGF0ZSIsImJpbmQiLCJvcmlnaW5hbFJlcGxhY2VTdGF0ZSIsImFwcGx5VXJsRnJvbUhpc3RvcnlQdXNoUmVwbGFjZSIsInN0YXJ0VHJhbnNpdGlvbiIsIl91bnVzZWQiLCJfTiIsIm9uUG9wU3RhdGUiLCJyZWxvYWQiLCJkaXNwYXRjaFRyYXZlcnNlQWN0aW9uIiwiZm9jdXNBbmRTY3JvbGxSZWYiLCJtYXRjaGluZ0hlYWQiLCJmaW5kSGVhZEluQ2FjaGUiLCJwYXRoUGFyYW1zIiwiZ2V0U2VsZWN0ZWRQYXJhbXMiLCJsYXlvdXRSb3V0ZXJDb250ZXh0IiwicGFyZW50VHJlZSIsInBhcmVudENhY2hlTm9kZSIsInBhcmVudFNlZ21lbnRQYXRoIiwiZ2xvYmFsTGF5b3V0Um91dGVyQ29udGV4dCIsImhlYWRLZXkiLCJjb250ZW50IiwiUmVkaXJlY3RCb3VuZGFyeSIsIkFwcFJvdXRlckFubm91bmNlciIsIkRldlJvb3RIVFRQQWNjZXNzRmFsbGJhY2tCb3VuZGFyeSIsInJlcXVpcmUiLCJIb3RSZWxvYWRlciIsImRlZmF1bHQiLCJHcmFjZWZ1bERlZ3JhZGVCb3VuZGFyeSIsIkVycm9yQm91bmRhcnkiLCJlcnJvckNvbXBvbmVudCIsImVycm9yU3R5bGVzIiwiUnVudGltZVN0eWxlcyIsIlBhdGhQYXJhbXNDb250ZXh0IiwiUHJvdmlkZXIiLCJ2YWx1ZSIsIlBhdGhuYW1lQ29udGV4dCIsIlNlYXJjaFBhcmFtc0NvbnRleHQiLCJHbG9iYWxMYXlvdXRSb3V0ZXJDb250ZXh0IiwiQXBwUm91dGVyQ29udGV4dCIsIkxheW91dFJvdXRlckNvbnRleHQiLCJnbG9iYWxFcnJvclN0YXRlIiwidXNlTmF2RmFpbHVyZUhhbmRsZXIiLCJEZWZhdWx0R2xvYmFsRXJyb3IiLCJydW50aW1lU3R5bGVzIiwiU2V0IiwicnVudGltZVN0eWxlQ2hhbmdlZCIsImdsb2JhbFRoaXMiLCJfTl9FX1NUWUxFX0xPQUQiLCJsZW4iLCJzaXplIiwiYWRkIiwiZm9yRWFjaCIsImNiIiwiUHJvbWlzZSIsInJlc29sdmUiLCJmb3JjZVVwZGF0ZSIsIlJlYWN0IiwidXNlU3RhdGUiLCJyZW5kZXJlZFN0eWxlc1NpemUiLCJjaGFuZ2VkIiwiYyIsImRlbGV0ZSIsImRwbElkIiwiTkVYVF9ERVBMT1lNRU5UX0lEIiwibWFwIiwiaSIsImxpbmsiLCJyZWwiLCJwcmVjZWRlbmNlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/builtin/global-error.js":
|
||
/*!**************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/builtin/global-error.js ***!
|
||
\**************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return _default;\n }\n}));\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _handleisrerror = __webpack_require__(/*! ../handle-isr-error */ \"(app-pages-browser)/./node_modules/next/dist/client/components/handle-isr-error.js\");\nconst styles = {\n error: {\n // https://github.com/sindresorhus/modern-normalize/blob/main/modern-normalize.css#L38-L52\n fontFamily: 'system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"',\n height: '100vh',\n textAlign: 'center',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center'\n },\n text: {\n fontSize: '14px',\n fontWeight: 400,\n lineHeight: '28px',\n margin: '0 8px'\n }\n};\nfunction DefaultGlobalError(param) {\n let { error } = param;\n const digest = error == null ? void 0 : error.digest;\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"html\", {\n id: \"__next_error__\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"head\", {}),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"body\", {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_handleisrerror.HandleISRError, {\n error: error\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n style: styles.error,\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"h2\", {\n style: styles.text,\n children: [\n \"Application error: a \",\n digest ? 'server' : 'client',\n \"-side exception has occurred while loading \",\n window.location.hostname,\n \" (see the\",\n ' ',\n digest ? 'server logs' : 'browser console',\n \" for more information).\"\n ]\n }),\n digest ? /*#__PURE__*/ (0, _jsxruntime.jsx)(\"p\", {\n style: styles.text,\n children: \"Digest: \" + digest\n }) : null\n ]\n })\n })\n ]\n })\n ]\n });\n}\n_c = DefaultGlobalError;\nconst _default = DefaultGlobalError;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=global-error.js.map\nvar _c;\n$RefreshReg$(_c, \"DefaultGlobalError\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvYnVpbHRpbi9nbG9iYWwtZXJyb3IuanMiLCJtYXBwaW5ncyI6Ijs7OzsyQ0FvREE7OztlQUFBOzs7OzRDQWxEK0I7QUFFL0IsTUFBTUEsU0FBUztJQUNiQyxPQUFPO1FBQ0wsMEZBQTBGO1FBQzFGQyxZQUNFO1FBQ0ZDLFFBQVE7UUFDUkMsV0FBVztRQUNYQyxTQUFTO1FBQ1RDLGVBQWU7UUFDZkMsWUFBWTtRQUNaQyxnQkFBZ0I7SUFDbEI7SUFDQUMsTUFBTTtRQUNKQyxVQUFVO1FBQ1ZDLFlBQVk7UUFDWkMsWUFBWTtRQUNaQyxRQUFRO0lBQ1Y7QUFDRjtBQUtBLDRCQUE0QixLQUF5QjtJQUF6QixNQUFFWixLQUFLLEVBQWtCLEdBQXpCO0lBQzFCLE1BQU1jLFNBQTZCZCxTQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxNQUFPYyxNQUFNO0lBQ2hELHFCQUNFLHNCQUFDQyxRQUFBQTtRQUFLQyxJQUFHOzswQkFDUCxxQkFBQ0MsUUFBQUEsQ0FBQUE7MEJBQ0Qsc0JBQUNDLFFBQUFBOztrQ0FDQyxxQkFBQ0MsZ0JBQUFBLGNBQWM7d0JBQUNuQixPQUFPQTs7a0NBQ3ZCLHFCQUFDb0IsT0FBQUE7d0JBQUlDLE9BQU90QixPQUFPQyxLQUFLO2tDQUN0QixvQ0FBQ29CLE9BQUFBOzs4Q0FDQyxzQkFBQ0UsTUFBQUE7b0NBQUdELE9BQU90QixPQUFPUyxJQUFJOzt3Q0FBRTt3Q0FDQU0sU0FBUyxXQUFXO3dDQUFTO3dDQUN2QlMsT0FBT0MsUUFBUSxDQUFDQyxRQUFRO3dDQUFDO3dDQUFVO3dDQUM5RFgsU0FBUyxnQkFBZ0I7d0NBQWtCOzs7Z0NBRzdDQSxTQUFBQSxXQUFBQSxHQUFTLHFCQUFDWSxLQUFBQTtvQ0FBRUwsT0FBT3RCLE9BQU9TLElBQUk7OENBQUksYUFBVU07cUNBQWdCOzs7Ozs7OztBQU16RTtLQXJCU0Q7TUF5QlQsV0FBZUEiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9jbGllbnQvY29tcG9uZW50cy9idWlsdGluL2dsb2JhbC1lcnJvci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB7IEhhbmRsZUlTUkVycm9yIH0gZnJvbSAnLi4vaGFuZGxlLWlzci1lcnJvcidcblxuY29uc3Qgc3R5bGVzID0ge1xuICBlcnJvcjoge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvbW9kZXJuLW5vcm1hbGl6ZS9ibG9iL21haW4vbW9kZXJuLW5vcm1hbGl6ZS5jc3MjTDM4LUw1MlxuICAgIGZvbnRGYW1pbHk6XG4gICAgICAnc3lzdGVtLXVpLFwiU2Vnb2UgVUlcIixSb2JvdG8sSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWYsXCJBcHBsZSBDb2xvciBFbW9qaVwiLFwiU2Vnb2UgVUkgRW1vamlcIicsXG4gICAgaGVpZ2h0OiAnMTAwdmgnLFxuICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgfSxcbiAgdGV4dDoge1xuICAgIGZvbnRTaXplOiAnMTRweCcsXG4gICAgZm9udFdlaWdodDogNDAwLFxuICAgIGxpbmVIZWlnaHQ6ICcyOHB4JyxcbiAgICBtYXJnaW46ICcwIDhweCcsXG4gIH0sXG59IGFzIGNvbnN0XG5cbmV4cG9ydCB0eXBlIEdsb2JhbEVycm9yQ29tcG9uZW50ID0gUmVhY3QuQ29tcG9uZW50VHlwZTx7XG4gIGVycm9yOiBhbnlcbn0+XG5mdW5jdGlvbiBEZWZhdWx0R2xvYmFsRXJyb3IoeyBlcnJvciB9OiB7IGVycm9yOiBhbnkgfSkge1xuICBjb25zdCBkaWdlc3Q6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGVycm9yPy5kaWdlc3RcbiAgcmV0dXJuIChcbiAgICA8aHRtbCBpZD1cIl9fbmV4dF9lcnJvcl9fXCI+XG4gICAgICA8aGVhZD48L2hlYWQ+XG4gICAgICA8Ym9keT5cbiAgICAgICAgPEhhbmRsZUlTUkVycm9yIGVycm9yPXtlcnJvcn0gLz5cbiAgICAgICAgPGRpdiBzdHlsZT17c3R5bGVzLmVycm9yfT5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGgyIHN0eWxlPXtzdHlsZXMudGV4dH0+XG4gICAgICAgICAgICAgIEFwcGxpY2F0aW9uIGVycm9yOiBhIHtkaWdlc3QgPyAnc2VydmVyJyA6ICdjbGllbnQnfS1zaWRlIGV4Y2VwdGlvblxuICAgICAgICAgICAgICBoYXMgb2NjdXJyZWQgd2hpbGUgbG9hZGluZyB7d2luZG93LmxvY2F0aW9uLmhvc3RuYW1lfSAoc2VlIHRoZXsnICd9XG4gICAgICAgICAgICAgIHtkaWdlc3QgPyAnc2VydmVyIGxvZ3MnIDogJ2Jyb3dzZXIgY29uc29sZSd9IGZvciBtb3JlXG4gICAgICAgICAgICAgIGluZm9ybWF0aW9uKS5cbiAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgICB7ZGlnZXN0ID8gPHAgc3R5bGU9e3N0eWxlcy50ZXh0fT57YERpZ2VzdDogJHtkaWdlc3R9YH08L3A+IDogbnVsbH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2JvZHk+XG4gICAgPC9odG1sPlxuICApXG59XG5cbi8vIEV4cG9ydGVkIHNvIHRoYXQgdGhlIGltcG9ydCBzaWduYXR1cmUgaW4gdGhlIGxvYWRlcnMgY2FuIGJlIGlkZW50aWNhbCB0byB1c2VyXG4vLyBzdXBwbGllZCBjdXN0b20gZ2xvYmFsIGVycm9yIHNpZ25hdHVyZXMuXG5leHBvcnQgZGVmYXVsdCBEZWZhdWx0R2xvYmFsRXJyb3JcbiJdLCJuYW1lcyI6WyJzdHlsZXMiLCJlcnJvciIsImZvbnRGYW1pbHkiLCJoZWlnaHQiLCJ0ZXh0QWxpZ24iLCJkaXNwbGF5IiwiZmxleERpcmVjdGlvbiIsImFsaWduSXRlbXMiLCJqdXN0aWZ5Q29udGVudCIsInRleHQiLCJmb250U2l6ZSIsImZvbnRXZWlnaHQiLCJsaW5lSGVpZ2h0IiwibWFyZ2luIiwiRGVmYXVsdEdsb2JhbEVycm9yIiwiZGlnZXN0IiwiaHRtbCIsImlkIiwiaGVhZCIsImJvZHkiLCJIYW5kbGVJU1JFcnJvciIsImRpdiIsInN0eWxlIiwiaDIiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhvc3RuYW1lIiwicCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/builtin/global-error.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/dev-root-http-access-fallback-boundary.js":
|
||
/*!********************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/dev-root-http-access-fallback-boundary.js ***!
|
||
\********************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n DevRootHTTPAccessFallbackBoundary: function() {\n return DevRootHTTPAccessFallbackBoundary;\n },\n bailOnRootNotFound: function() {\n return bailOnRootNotFound;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _errorboundary = __webpack_require__(/*! ./http-access-fallback/error-boundary */ \"(app-pages-browser)/./node_modules/next/dist/client/components/http-access-fallback/error-boundary.js\");\nfunction bailOnRootNotFound() {\n throw Object.defineProperty(new Error('notFound() is not allowed to use in root layout'), \"__NEXT_ERROR_CODE\", {\n value: \"E192\",\n enumerable: false,\n configurable: true\n });\n}\nfunction NotAllowedRootHTTPFallbackError() {\n bailOnRootNotFound();\n return null;\n}\n_c = NotAllowedRootHTTPFallbackError;\nfunction DevRootHTTPAccessFallbackBoundary(param) {\n let { children } = param;\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_errorboundary.HTTPAccessFallbackBoundary, {\n notFound: /*#__PURE__*/ (0, _jsxruntime.jsx)(NotAllowedRootHTTPFallbackError, {}),\n children: children\n });\n}\n_c1 = DevRootHTTPAccessFallbackBoundary;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=dev-root-http-access-fallback-boundary.js.map\nvar _c, _c1;\n$RefreshReg$(_c, \"NotAllowedRootHTTPFallbackError\");\n$RefreshReg$(_c1, \"DevRootHTTPAccessFallbackBoundary\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvZGV2LXJvb3QtaHR0cC1hY2Nlc3MtZmFsbGJhY2stYm91bmRhcnkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBZWdCQSxpQ0FBaUM7ZUFBakNBOztJQVRBQyxrQkFBa0I7ZUFBbEJBOzs7Ozs0RUFKRTsyQ0FDeUI7QUFHcEMsU0FBU0E7SUFDZCxNQUFNLHFCQUE0RCxDQUE1RCxJQUFJQyxNQUFNLG9EQUFWO2VBQUE7b0JBQUE7c0JBQUE7SUFBMkQ7QUFDbkU7QUFFQTtJQUNFRDtJQUNBLE9BQU87QUFDVDtLQUhTRTtBQUtGLDJDQUEyQyxLQUlqRDtJQUppRCxNQUNoREMsUUFBUSxFQUdULEdBSmlEO0lBS2hELHFCQUNFLHFCQUFDQyxlQUFBQSwwQkFBMEI7UUFBQ0MsVUFBQUEsV0FBQUEsR0FBVSxxQkFBQ0gsaUNBQUFBLENBQUFBO2tCQUNwQ0M7O0FBR1A7TUFWZ0JKIiwic291cmNlcyI6WyIvaG9tZS9OaWNob2xhaS9zcmMvY2xpZW50L2NvbXBvbmVudHMvZGV2LXJvb3QtaHR0cC1hY2Nlc3MtZmFsbGJhY2stYm91bmRhcnkudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBIVFRQQWNjZXNzRmFsbGJhY2tCb3VuZGFyeSB9IGZyb20gJy4vaHR0cC1hY2Nlc3MtZmFsbGJhY2svZXJyb3ItYm91bmRhcnknXG5cbi8vIFRPRE86IGVycm9yIG9uIHVzaW5nIGZvcmJpZGRlbiBhbmQgdW5hdXRob3JpemVkIGluIHJvb3QgbGF5b3V0XG5leHBvcnQgZnVuY3Rpb24gYmFpbE9uUm9vdE5vdEZvdW5kKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ25vdEZvdW5kKCkgaXMgbm90IGFsbG93ZWQgdG8gdXNlIGluIHJvb3QgbGF5b3V0Jylcbn1cblxuZnVuY3Rpb24gTm90QWxsb3dlZFJvb3RIVFRQRmFsbGJhY2tFcnJvcigpIHtcbiAgYmFpbE9uUm9vdE5vdEZvdW5kKClcbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERldlJvb3RIVFRQQWNjZXNzRmFsbGJhY2tCb3VuZGFyeSh7XG4gIGNoaWxkcmVuLFxufToge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG59KSB7XG4gIHJldHVybiAoXG4gICAgPEhUVFBBY2Nlc3NGYWxsYmFja0JvdW5kYXJ5IG5vdEZvdW5kPXs8Tm90QWxsb3dlZFJvb3RIVFRQRmFsbGJhY2tFcnJvciAvPn0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9IVFRQQWNjZXNzRmFsbGJhY2tCb3VuZGFyeT5cbiAgKVxufVxuIl0sIm5hbWVzIjpbIkRldlJvb3RIVFRQQWNjZXNzRmFsbGJhY2tCb3VuZGFyeSIsImJhaWxPblJvb3ROb3RGb3VuZCIsIkVycm9yIiwiTm90QWxsb3dlZFJvb3RIVFRQRmFsbGJhY2tFcnJvciIsImNoaWxkcmVuIiwiSFRUUEFjY2Vzc0ZhbGxiYWNrQm91bmRhcnkiLCJub3RGb3VuZCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/dev-root-http-access-fallback-boundary.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js":
|
||
/*!********************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/error-boundary.js ***!
|
||
\********************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n ErrorBoundary: function() {\n return ErrorBoundary;\n },\n ErrorBoundaryHandler: function() {\n return ErrorBoundaryHandler;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _navigationuntracked = __webpack_require__(/*! ./navigation-untracked */ \"(app-pages-browser)/./node_modules/next/dist/client/components/navigation-untracked.js\");\nconst _isnextroutererror = __webpack_require__(/*! ./is-next-router-error */ \"(app-pages-browser)/./node_modules/next/dist/client/components/is-next-router-error.js\");\nconst _navfailurehandler = __webpack_require__(/*! ./nav-failure-handler */ \"(app-pages-browser)/./node_modules/next/dist/client/components/nav-failure-handler.js\");\nconst _handleisrerror = __webpack_require__(/*! ./handle-isr-error */ \"(app-pages-browser)/./node_modules/next/dist/client/components/handle-isr-error.js\");\nclass ErrorBoundaryHandler extends _react.default.Component {\n static getDerivedStateFromError(error) {\n if ((0, _isnextroutererror.isNextRouterError)(error)) {\n // Re-throw if an expected internal Next.js router error occurs\n // this means it should be handled by a different boundary (such as a NotFound boundary in a parent segment)\n throw error;\n }\n return {\n error\n };\n }\n static getDerivedStateFromProps(props, state) {\n const { error } = state;\n // if we encounter an error while\n // a navigation is pending we shouldn't render\n // the error boundary and instead should fallback\n // to a hard navigation to attempt recovering\n if (false) {}\n /**\n * Handles reset of the error boundary when a navigation happens.\n * Ensures the error boundary does not stay enabled when navigating to a new page.\n * Approach of setState in render is safe as it checks the previous pathname and then overrides\n * it as outlined in https://react.dev/reference/react/useState#storing-information-from-previous-renders\n */ if (props.pathname !== state.previousPathname && state.error) {\n return {\n error: null,\n previousPathname: props.pathname\n };\n }\n return {\n error: state.error,\n previousPathname: props.pathname\n };\n }\n // Explicit type is needed to avoid the generated `.d.ts` having a wide return type that could be specific to the `@types/react` version.\n render() {\n if (this.state.error) {\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_handleisrerror.HandleISRError, {\n error: this.state.error\n }),\n this.props.errorStyles,\n this.props.errorScripts,\n /*#__PURE__*/ (0, _jsxruntime.jsx)(this.props.errorComponent, {\n error: this.state.error,\n reset: this.reset\n })\n ]\n });\n }\n return this.props.children;\n }\n constructor(props){\n super(props), this.reset = ()=>{\n this.setState({\n error: null\n });\n };\n this.state = {\n error: null,\n previousPathname: this.props.pathname\n };\n }\n}\nfunction ErrorBoundary(param) {\n let { errorComponent, errorStyles, errorScripts, children } = param;\n // When we're rendering the missing params shell, this will return null. This\n // is because we won't be rendering any not found boundaries or error\n // boundaries for the missing params shell. When this runs on the client\n // (where these errors can occur), we will get the correct pathname.\n const pathname = (0, _navigationuntracked.useUntrackedPathname)();\n if (errorComponent) {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(ErrorBoundaryHandler, {\n pathname: pathname,\n errorComponent: errorComponent,\n errorStyles: errorStyles,\n errorScripts: errorScripts,\n children: children\n });\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, {\n children: children\n });\n}\n_c = ErrorBoundary;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=error-boundary.js.map\nvar _c;\n$RefreshReg$(_c, \"ErrorBoundary\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvZXJyb3ItYm91bmRhcnkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBMEhnQkEsYUFBYTtlQUFiQTs7SUExRkhDLG9CQUFvQjtlQUFwQkE7Ozs7OzRFQTlCbUI7aURBQ0s7K0NBQ0g7K0NBQ0M7NENBQ0o7QUEwQnhCLE1BQU1BLDZCQUE2QkMsT0FBQUEsT0FBSyxDQUFDQyxTQUFTO0lBU3ZELE9BQU9DLHlCQUF5QkMsS0FBWSxFQUFFO1FBQzVDLElBQUlDLENBQUFBLEdBQUFBLG1CQUFBQSxpQkFBQUEsRUFBa0JELFFBQVE7WUFDNUIsK0RBQStEO1lBQy9ELDRHQUE0RztZQUM1RyxNQUFNQTtRQUNSO1FBRUEsT0FBTztZQUFFQTtRQUFNO0lBQ2pCO0lBRUEsT0FBT0UseUJBQ0xDLEtBQWdDLEVBQ2hDQyxLQUFnQyxFQUNFO1FBQ2xDLE1BQU0sRUFBRUosS0FBSyxFQUFFLEdBQUdJO1FBRWxCLGlDQUFpQztRQUNqQyw4Q0FBOEM7UUFDOUMsaURBQWlEO1FBQ2pELDZDQUE2QztRQUM3QyxJQUFJQyxLQUF3QyxFQUFFLEVBUTdDO1FBRUQ7Ozs7O0tBS0MsR0FDRCxJQUFJRixNQUFNTyxRQUFRLEtBQUtOLE1BQU1LLGdCQUFnQixJQUFJTCxNQUFNSixLQUFLLEVBQUU7WUFDNUQsT0FBTztnQkFDTEEsT0FBTztnQkFDUFMsa0JBQWtCTixNQUFNTyxRQUFRO1lBQ2xDO1FBQ0Y7UUFDQSxPQUFPO1lBQ0xWLE9BQU9JLE1BQU1KLEtBQUs7WUFDbEJTLGtCQUFrQk4sTUFBTU8sUUFBUTtRQUNsQztJQUNGO0lBTUEseUlBQXlJO0lBQ3pJQyxTQUEwQjtRQUN4QixJQUFJLElBQUksQ0FBQ1AsS0FBSyxDQUFDSixLQUFLLEVBQUU7WUFDcEIscUJBQ0U7O2tDQUNFLHFCQUFDWSxnQkFBQUEsY0FBYzt3QkFBQ1osT0FBTyxJQUFJLENBQUNJLEtBQUssQ0FBQ0osS0FBSzs7b0JBQ3RDLElBQUksQ0FBQ0csS0FBSyxDQUFDVSxXQUFXO29CQUN0QixJQUFJLENBQUNWLEtBQUssQ0FBQ1csWUFBWTtrQ0FDeEIscUJBQUNDLElBQUksQ0FBQ1osS0FBSyxDQUFDYSxjQUFjO3dCQUN4QmhCLE9BQU8sSUFBSSxDQUFDSSxLQUFLLENBQUNKLEtBQUs7d0JBQ3ZCaUIsT0FBTyxJQUFJLENBQUNBLEtBQUs7Ozs7UUFJekI7UUFFQSxPQUFPLElBQUksQ0FBQ2QsS0FBSyxDQUFDZSxRQUFRO0lBQzVCO0lBMUVBQyxZQUFZaEIsS0FBZ0MsQ0FBRTtRQUM1QyxLQUFLLENBQUNBLFFBQUFBLElBQUFBLENBb0RSYyxLQUFBQSxHQUFRO1lBQ04sSUFBSSxDQUFDRyxRQUFRLENBQUM7Z0JBQUVwQixPQUFPO1lBQUs7UUFDOUI7UUFyREUsSUFBSSxDQUFDSSxLQUFLLEdBQUc7WUFBRUosT0FBTztZQUFNUyxrQkFBa0IsSUFBSSxDQUFDTixLQUFLLENBQUNPLFFBQVE7UUFBQztJQUNwRTtBQXdFRjtBQVdPLHVCQUF1QixLQU83QjtJQVA2QixNQUM1Qk0sY0FBYyxFQUNkSCxXQUFXLEVBQ1hDLFlBQVksRUFDWkksUUFBUSxFQUdULEdBUDZCO0lBUTVCLDZFQUE2RTtJQUM3RSxxRUFBcUU7SUFDckUsd0VBQXdFO0lBQ3hFLG9FQUFvRTtJQUNwRSxNQUFNUixXQUFXVyxDQUFBQSxHQUFBQSxxQkFBQUEsb0JBQUFBO0lBQ2pCLElBQUlMLGdCQUFnQjtRQUNsQixxQkFDRSxxQkFBQ3BCLHNCQUFBQTtZQUNDYyxVQUFVQTtZQUNWTSxnQkFBZ0JBO1lBQ2hCSCxhQUFhQTtZQUNiQyxjQUFjQTtzQkFFYkk7O0lBR1A7SUFFQSxxQkFBTztrQkFBR0E7O0FBQ1o7S0EzQmdCdkIiLCJzb3VyY2VzIjpbIi9ob21lL05pY2hvbGFpL3NyYy9jbGllbnQvY29tcG9uZW50cy9lcnJvci1ib3VuZGFyeS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCBSZWFjdCwgeyB0eXBlIEpTWCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlVW50cmFja2VkUGF0aG5hbWUgfSBmcm9tICcuL25hdmlnYXRpb24tdW50cmFja2VkJ1xuaW1wb3J0IHsgaXNOZXh0Um91dGVyRXJyb3IgfSBmcm9tICcuL2lzLW5leHQtcm91dGVyLWVycm9yJ1xuaW1wb3J0IHsgaGFuZGxlSGFyZE5hdkVycm9yIH0gZnJvbSAnLi9uYXYtZmFpbHVyZS1oYW5kbGVyJ1xuaW1wb3J0IHsgSGFuZGxlSVNSRXJyb3IgfSBmcm9tICcuL2hhbmRsZS1pc3ItZXJyb3InXG5cbmV4cG9ydCB0eXBlIEVycm9yQ29tcG9uZW50ID0gUmVhY3QuQ29tcG9uZW50VHlwZTx7XG4gIGVycm9yOiBFcnJvclxuICAvLyBnbG9iYWwtZXJyb3IsIHRoZXJlJ3Mgbm8gYHJlc2V0YCBmdW5jdGlvbjtcbiAgLy8gcmVndWxhciBlcnJvciBib3VuZGFyeSwgdGhlcmUncyBhIGByZXNldGAgZnVuY3Rpb24uXG4gIHJlc2V0PzogKCkgPT4gdm9pZFxufT5cblxuZXhwb3J0IGludGVyZmFjZSBFcnJvckJvdW5kYXJ5UHJvcHMge1xuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuICBlcnJvckNvbXBvbmVudDogRXJyb3JDb21wb25lbnQgfCB1bmRlZmluZWRcbiAgZXJyb3JTdHlsZXM/OiBSZWFjdC5SZWFjdE5vZGUgfCB1bmRlZmluZWRcbiAgZXJyb3JTY3JpcHRzPzogUmVhY3QuUmVhY3ROb2RlIHwgdW5kZWZpbmVkXG59XG5cbmludGVyZmFjZSBFcnJvckJvdW5kYXJ5SGFuZGxlclByb3BzIGV4dGVuZHMgRXJyb3JCb3VuZGFyeVByb3BzIHtcbiAgcGF0aG5hbWU6IHN0cmluZyB8IG51bGxcbiAgZXJyb3JDb21wb25lbnQ6IEVycm9yQ29tcG9uZW50XG59XG5cbmludGVyZmFjZSBFcnJvckJvdW5kYXJ5SGFuZGxlclN0YXRlIHtcbiAgZXJyb3I6IEVycm9yIHwgbnVsbFxuICBwcmV2aW91c1BhdGhuYW1lOiBzdHJpbmcgfCBudWxsXG59XG5cbmV4cG9ydCBjbGFzcyBFcnJvckJvdW5kYXJ5SGFuZGxlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgRXJyb3JCb3VuZGFyeUhhbmRsZXJQcm9wcyxcbiAgRXJyb3JCb3VuZGFyeUhhbmRsZXJTdGF0ZVxuPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBFcnJvckJvdW5kYXJ5SGFuZGxlclByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpXG4gICAgdGhpcy5zdGF0ZSA9IHsgZXJyb3I6IG51bGwsIHByZXZpb3VzUGF0aG5hbWU6IHRoaXMucHJvcHMucGF0aG5hbWUgfVxuICB9XG5cbiAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihlcnJvcjogRXJyb3IpIHtcbiAgICBpZiAoaXNOZXh0Um91dGVyRXJyb3IoZXJyb3IpKSB7XG4gICAgICAvLyBSZS10aHJvdyBpZiBhbiBleHBlY3RlZCBpbnRlcm5hbCBOZXh0LmpzIHJvdXRlciBlcnJvciBvY2N1cnNcbiAgICAgIC8vIHRoaXMgbWVhbnMgaXQgc2hvdWxkIGJlIGhhbmRsZWQgYnkgYSBkaWZmZXJlbnQgYm91bmRhcnkgKHN1Y2ggYXMgYSBOb3RGb3VuZCBib3VuZGFyeSBpbiBhIHBhcmVudCBzZWdtZW50KVxuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG5cbiAgICByZXR1cm4geyBlcnJvciB9XG4gIH1cblxuICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKFxuICAgIHByb3BzOiBFcnJvckJvdW5kYXJ5SGFuZGxlclByb3BzLFxuICAgIHN0YXRlOiBFcnJvckJvdW5kYXJ5SGFuZGxlclN0YXRlXG4gICk6IEVycm9yQm91bmRhcnlIYW5kbGVyU3RhdGUgfCBudWxsIHtcbiAgICBjb25zdCB7IGVycm9yIH0gPSBzdGF0ZVxuXG4gICAgLy8gaWYgd2UgZW5jb3VudGVyIGFuIGVycm9yIHdoaWxlXG4gICAgLy8gYSBuYXZpZ2F0aW9uIGlzIHBlbmRpbmcgd2Ugc2hvdWxkbid0IHJlbmRlclxuICAgIC8vIHRoZSBlcnJvciBib3VuZGFyeSBhbmQgaW5zdGVhZCBzaG91bGQgZmFsbGJhY2tcbiAgICAvLyB0byBhIGhhcmQgbmF2aWdhdGlvbiB0byBhdHRlbXB0IHJlY292ZXJpbmdcbiAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0FQUF9OQVZfRkFJTF9IQU5ETElORykge1xuICAgICAgaWYgKGVycm9yICYmIGhhbmRsZUhhcmROYXZFcnJvcihlcnJvcikpIHtcbiAgICAgICAgLy8gY2xlYXIgZXJyb3Igc28gd2UgZG9uJ3QgcmVuZGVyIGFueXRoaW5nXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgcHJldmlvdXNQYXRobmFtZTogcHJvcHMucGF0aG5hbWUsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIHJlc2V0IG9mIHRoZSBlcnJvciBib3VuZGFyeSB3aGVuIGEgbmF2aWdhdGlvbiBoYXBwZW5zLlxuICAgICAqIEVuc3VyZXMgdGhlIGVycm9yIGJvdW5kYXJ5IGRvZXMgbm90IHN0YXkgZW5hYmxlZCB3aGVuIG5hdmlnYXRpbmcgdG8gYSBuZXcgcGFnZS5cbiAgICAgKiBBcHByb2FjaCBvZiBzZXRTdGF0ZSBpbiByZW5kZXIgaXMgc2FmZSBhcyBpdCBjaGVja3MgdGhlIHByZXZpb3VzIHBhdGhuYW1lIGFuZCB0aGVuIG92ZXJyaWRlc1xuICAgICAqIGl0IGFzIG91dGxpbmVkIGluIGh0dHBzOi8vcmVhY3QuZGV2L3JlZmVyZW5jZS9yZWFjdC91c2VTdGF0ZSNzdG9yaW5nLWluZm9ybWF0aW9uLWZyb20tcHJldmlvdXMtcmVuZGVyc1xuICAgICAqL1xuICAgIGlmIChwcm9wcy5wYXRobmFtZSAhPT0gc3RhdGUucHJldmlvdXNQYXRobmFtZSAmJiBzdGF0ZS5lcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgIHByZXZpb3VzUGF0aG5hbWU6IHByb3BzLnBhdGhuYW1lLFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZXJyb3I6IHN0YXRlLmVycm9yLFxuICAgICAgcHJldmlvdXNQYXRobmFtZTogcHJvcHMucGF0aG5hbWUsXG4gICAgfVxuICB9XG5cbiAgcmVzZXQgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGVycm9yOiBudWxsIH0pXG4gIH1cblxuICAvLyBFeHBsaWNpdCB0eXBlIGlzIG5lZWRlZCB0byBhdm9pZCB0aGUgZ2VuZXJhdGVkIGAuZC50c2AgaGF2aW5nIGEgd2lkZSByZXR1cm4gdHlwZSB0aGF0IGNvdWxkIGJlIHNwZWNpZmljIHRvIHRoZSBgQHR5cGVzL3JlYWN0YCB2ZXJzaW9uLlxuICByZW5kZXIoKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5lcnJvcikge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICA8SGFuZGxlSVNSRXJyb3IgZXJyb3I9e3RoaXMuc3RhdGUuZXJyb3J9IC8+XG4gICAgICAgICAge3RoaXMucHJvcHMuZXJyb3JTdHlsZXN9XG4gICAgICAgICAge3RoaXMucHJvcHMuZXJyb3JTY3JpcHRzfVxuICAgICAgICAgIDx0aGlzLnByb3BzLmVycm9yQ29tcG9uZW50XG4gICAgICAgICAgICBlcnJvcj17dGhpcy5zdGF0ZS5lcnJvcn1cbiAgICAgICAgICAgIHJlc2V0PXt0aGlzLnJlc2V0fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvPlxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuXG4gIH1cbn1cblxuLyoqXG4gKiBIYW5kbGVzIGVycm9ycyB0aHJvdWdoIGBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3JgLlxuICogUmVuZGVycyB0aGUgcHJvdmlkZWQgZXJyb3IgY29tcG9uZW50IGFuZCBwcm92aWRlcyBhIHdheSB0byBgcmVzZXRgIHRoZSBlcnJvciBib3VuZGFyeSBzdGF0ZS5cbiAqL1xuXG4vKipcbiAqIFJlbmRlcnMgZXJyb3IgYm91bmRhcnkgd2l0aCB0aGUgcHJvdmlkZWQgXCJlcnJvckNvbXBvbmVudFwiIHByb3BlcnR5IGFzIHRoZSBmYWxsYmFjay5cbiAqIElmIG5vIFwiZXJyb3JDb21wb25lbnRcIiBwcm9wZXJ0eSBpcyBwcm92aWRlZCBpdCByZW5kZXJzIHRoZSBjaGlsZHJlbiB3aXRob3V0IGFuIGVycm9yIGJvdW5kYXJ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gRXJyb3JCb3VuZGFyeSh7XG4gIGVycm9yQ29tcG9uZW50LFxuICBlcnJvclN0eWxlcyxcbiAgZXJyb3JTY3JpcHRzLFxuICBjaGlsZHJlbixcbn06IEVycm9yQm91bmRhcnlQcm9wcyAmIHtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxufSk6IEpTWC5FbGVtZW50IHtcbiAgLy8gV2hlbiB3ZSdyZSByZW5kZXJpbmcgdGhlIG1pc3NpbmcgcGFyYW1zIHNoZWxsLCB0aGlzIHdpbGwgcmV0dXJuIG51bGwuIFRoaXNcbiAgLy8gaXMgYmVjYXVzZSB3ZSB3b24ndCBiZSByZW5kZXJpbmcgYW55IG5vdCBmb3VuZCBib3VuZGFyaWVzIG9yIGVycm9yXG4gIC8vIGJvdW5kYXJpZXMgZm9yIHRoZSBtaXNzaW5nIHBhcmFtcyBzaGVsbC4gV2hlbiB0aGlzIHJ1bnMgb24gdGhlIGNsaWVudFxuICAvLyAod2hlcmUgdGhlc2UgZXJyb3JzIGNhbiBvY2N1ciksIHdlIHdpbGwgZ2V0IHRoZSBjb3JyZWN0IHBhdGhuYW1lLlxuICBjb25zdCBwYXRobmFtZSA9IHVzZVVudHJhY2tlZFBhdGhuYW1lKClcbiAgaWYgKGVycm9yQ29tcG9uZW50KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxFcnJvckJvdW5kYXJ5SGFuZGxlclxuICAgICAgICBwYXRobmFtZT17cGF0aG5hbWV9XG4gICAgICAgIGVycm9yQ29tcG9uZW50PXtlcnJvckNvbXBvbmVudH1cbiAgICAgICAgZXJyb3JTdHlsZXM9e2Vycm9yU3R5bGVzfVxuICAgICAgICBlcnJvclNjcmlwdHM9e2Vycm9yU2NyaXB0c31cbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9FcnJvckJvdW5kYXJ5SGFuZGxlcj5cbiAgICApXG4gIH1cblxuICByZXR1cm4gPD57Y2hpbGRyZW59PC8+XG59XG4iXSwibmFtZXMiOlsiRXJyb3JCb3VuZGFyeSIsIkVycm9yQm91bmRhcnlIYW5kbGVyIiwiUmVhY3QiLCJDb21wb25lbnQiLCJnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IiLCJlcnJvciIsImlzTmV4dFJvdXRlckVycm9yIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwicHJvcHMiLCJzdGF0ZSIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfQVBQX05BVl9GQUlMX0hBTkRMSU5HIiwiaGFuZGxlSGFyZE5hdkVycm9yIiwicHJldmlvdXNQYXRobmFtZSIsInBhdGhuYW1lIiwicmVuZGVyIiwiSGFuZGxlSVNSRXJyb3IiLCJlcnJvclN0eWxlcyIsImVycm9yU2NyaXB0cyIsInRoaXMiLCJlcnJvckNvbXBvbmVudCIsInJlc2V0IiwiY2hpbGRyZW4iLCJjb25zdHJ1Y3RvciIsInNldFN0YXRlIiwidXNlVW50cmFja2VkUGF0aG5hbWUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/errors/graceful-degrade-boundary.js":
|
||
/*!**************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/errors/graceful-degrade-boundary.js ***!
|
||
\**************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n GracefulDegradeBoundary: function() {\n return GracefulDegradeBoundary;\n },\n default: function() {\n return _default;\n }\n});\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\nfunction getDomNodeAttributes(node) {\n const result = {};\n for(let i = 0; i < node.attributes.length; i++){\n const attr = node.attributes[i];\n result[attr.name] = attr.value;\n }\n return result;\n}\nclass GracefulDegradeBoundary extends _react.Component {\n static getDerivedStateFromError(_) {\n return {\n hasError: true\n };\n }\n componentDidMount() {\n const htmlNode = this.htmlRef.current;\n if (this.state.hasError && htmlNode) {\n // Reapply the cached HTML attributes to the root element\n Object.entries(this.htmlAttributes).forEach((param)=>{\n let [key, value] = param;\n htmlNode.setAttribute(key, value);\n });\n }\n }\n render() {\n const { hasError } = this.state;\n // Cache the root HTML content on the first render\n if ( true && !this.rootHtml) {\n this.rootHtml = document.documentElement.innerHTML;\n this.htmlAttributes = getDomNodeAttributes(document.documentElement);\n }\n if (hasError) {\n // Render the current HTML content without hydration\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"html\", {\n ref: this.htmlRef,\n suppressHydrationWarning: true,\n dangerouslySetInnerHTML: {\n __html: this.rootHtml\n }\n });\n }\n return this.props.children;\n }\n constructor(props){\n super(props);\n this.state = {\n hasError: false\n };\n this.rootHtml = '';\n this.htmlAttributes = {};\n this.htmlRef = /*#__PURE__*/ (0, _react.createRef)();\n }\n}\nconst _default = GracefulDegradeBoundary;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=graceful-degrade-boundary.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvZXJyb3JzL2dyYWNlZnVsLWRlZ3JhZGUtYm91bmRhcnkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBcUJhQSx1QkFBdUI7ZUFBdkJBOztJQXVEYixPQUFzQztlQUF0Qzs7OzttQ0ExRXFEO0FBVXJELFNBQVNDLHFCQUFxQkMsSUFBaUI7SUFDN0MsTUFBTUMsU0FBaUMsQ0FBQztJQUN4QyxJQUFLLElBQUlDLElBQUksR0FBR0EsSUFBSUYsS0FBS0csVUFBVSxDQUFDQyxNQUFNLEVBQUVGLElBQUs7UUFDL0MsTUFBTUcsT0FBT0wsS0FBS0csVUFBVSxDQUFDRCxFQUFFO1FBQy9CRCxNQUFNLENBQUNJLEtBQUtDLElBQUksQ0FBQyxHQUFHRCxLQUFLRSxLQUFLO0lBQ2hDO0lBQ0EsT0FBT047QUFDVDtBQUVPLE1BQU1ILGdDQUFnQ1UsT0FBQUEsU0FBUztJQWdCcEQsT0FBT0MseUJBQXlCQyxDQUFVLEVBQXNCO1FBQzlELE9BQU87WUFBRUMsVUFBVTtRQUFLO0lBQzFCO0lBRUFDLG9CQUFvQjtRQUNsQixNQUFNQyxXQUFXLElBQUksQ0FBQ0MsT0FBTyxDQUFDQyxPQUFPO1FBQ3JDLElBQUksSUFBSSxDQUFDQyxLQUFLLENBQUNMLFFBQVEsSUFBSUUsVUFBVTtZQUNuQyx5REFBeUQ7WUFDekRJLE9BQU9DLE9BQU8sQ0FBQyxJQUFJLENBQUNDLGNBQWMsRUFBRUMsT0FBTyxDQUFDO29CQUFDLENBQUNDLEtBQUtkLE1BQU07Z0JBQ3ZETSxTQUFTUyxZQUFZLENBQUNELEtBQUtkO1lBQzdCO1FBQ0Y7SUFDRjtJQUVBZ0IsU0FBUztRQUNQLE1BQU0sRUFBRVosUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDSyxLQUFLO1FBQy9CLGtEQUFrRDtRQUNsRCxJQUFJLEtBQTZCLElBQUksQ0FBQyxJQUFJLENBQUNTLFFBQVEsRUFBRTtZQUNuRCxJQUFJLENBQUNBLFFBQVEsR0FBR0MsU0FBU0MsZUFBZSxDQUFDQyxTQUFTO1lBQ2xELElBQUksQ0FBQ1QsY0FBYyxHQUFHcEIscUJBQXFCMkIsU0FBU0MsZUFBZTtRQUNyRTtRQUVBLElBQUloQixVQUFVO1lBQ1osb0RBQW9EO1lBQ3BELHFCQUNFLHFCQUFDa0IsUUFBQUE7Z0JBQ0NDLEtBQUssSUFBSSxDQUFDaEIsT0FBTztnQkFDakJpQix3QkFBd0I7Z0JBQ3hCQyx5QkFBeUI7b0JBQ3ZCQyxRQUFRLElBQUksQ0FBQ1IsUUFBUTtnQkFDdkI7O1FBR047UUFFQSxPQUFPLElBQUksQ0FBQ1MsS0FBSyxDQUFDQyxRQUFRO0lBQzVCO0lBNUNBQyxZQUFZRixLQUF5QixDQUFFO1FBQ3JDLEtBQUssQ0FBQ0E7UUFDTixJQUFJLENBQUNsQixLQUFLLEdBQUc7WUFBRUwsVUFBVTtRQUFNO1FBQy9CLElBQUksQ0FBQ2MsUUFBUSxHQUFHO1FBQ2hCLElBQUksQ0FBQ04sY0FBYyxHQUFHLENBQUM7UUFDdkIsSUFBSSxDQUFDTCxPQUFPLGlCQUFHdUIsQ0FBQUEsR0FBQUEsT0FBQUEsU0FBQUE7SUFDakI7QUF1Q0Y7TUFFQSxXQUFldkMiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9jbGllbnQvY29tcG9uZW50cy9lcnJvcnMvZ3JhY2VmdWwtZGVncmFkZS1ib3VuZGFyeS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB7IENvbXBvbmVudCwgY3JlYXRlUmVmLCB0eXBlIFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0J1xuXG5pbnRlcmZhY2UgRXJyb3JCb3VuZGFyeVByb3BzIHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZVxufVxuXG5pbnRlcmZhY2UgRXJyb3JCb3VuZGFyeVN0YXRlIHtcbiAgaGFzRXJyb3I6IGJvb2xlYW5cbn1cblxuZnVuY3Rpb24gZ2V0RG9tTm9kZUF0dHJpYnV0ZXMobm9kZTogSFRNTEVsZW1lbnQpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge31cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBhdHRyID0gbm9kZS5hdHRyaWJ1dGVzW2ldXG4gICAgcmVzdWx0W2F0dHIubmFtZV0gPSBhdHRyLnZhbHVlXG4gIH1cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5leHBvcnQgY2xhc3MgR3JhY2VmdWxEZWdyYWRlQm91bmRhcnkgZXh0ZW5kcyBDb21wb25lbnQ8XG4gIEVycm9yQm91bmRhcnlQcm9wcyxcbiAgRXJyb3JCb3VuZGFyeVN0YXRlXG4+IHtcbiAgcHJpdmF0ZSByb290SHRtbDogc3RyaW5nXG4gIHByaXZhdGUgaHRtbEF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAgcHJpdmF0ZSBodG1sUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTEh0bWxFbGVtZW50IHwgbnVsbD5cblxuICBjb25zdHJ1Y3Rvcihwcm9wczogRXJyb3JCb3VuZGFyeVByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpXG4gICAgdGhpcy5zdGF0ZSA9IHsgaGFzRXJyb3I6IGZhbHNlIH1cbiAgICB0aGlzLnJvb3RIdG1sID0gJydcbiAgICB0aGlzLmh0bWxBdHRyaWJ1dGVzID0ge31cbiAgICB0aGlzLmh0bWxSZWYgPSBjcmVhdGVSZWY8SFRNTEh0bWxFbGVtZW50PigpXG4gIH1cblxuICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKF86IHVua25vd24pOiBFcnJvckJvdW5kYXJ5U3RhdGUge1xuICAgIHJldHVybiB7IGhhc0Vycm9yOiB0cnVlIH1cbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IGh0bWxOb2RlID0gdGhpcy5odG1sUmVmLmN1cnJlbnRcbiAgICBpZiAodGhpcy5zdGF0ZS5oYXNFcnJvciAmJiBodG1sTm9kZSkge1xuICAgICAgLy8gUmVhcHBseSB0aGUgY2FjaGVkIEhUTUwgYXR0cmlidXRlcyB0byB0aGUgcm9vdCBlbGVtZW50XG4gICAgICBPYmplY3QuZW50cmllcyh0aGlzLmh0bWxBdHRyaWJ1dGVzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgaHRtbE5vZGUuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGhhc0Vycm9yIH0gPSB0aGlzLnN0YXRlXG4gICAgLy8gQ2FjaGUgdGhlIHJvb3QgSFRNTCBjb250ZW50IG9uIHRoZSBmaXJzdCByZW5kZXJcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgIXRoaXMucm9vdEh0bWwpIHtcbiAgICAgIHRoaXMucm9vdEh0bWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuaW5uZXJIVE1MXG4gICAgICB0aGlzLmh0bWxBdHRyaWJ1dGVzID0gZ2V0RG9tTm9kZUF0dHJpYnV0ZXMoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxuICAgIH1cblxuICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgLy8gUmVuZGVyIHRoZSBjdXJyZW50IEhUTUwgY29udGVudCB3aXRob3V0IGh5ZHJhdGlvblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGh0bWxcbiAgICAgICAgICByZWY9e3RoaXMuaHRtbFJlZn1cbiAgICAgICAgICBzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmdcbiAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17e1xuICAgICAgICAgICAgX19odG1sOiB0aGlzLnJvb3RIdG1sLFxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW5cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBHcmFjZWZ1bERlZ3JhZGVCb3VuZGFyeVxuIl0sIm5hbWVzIjpbIkdyYWNlZnVsRGVncmFkZUJvdW5kYXJ5IiwiZ2V0RG9tTm9kZUF0dHJpYnV0ZXMiLCJub2RlIiwicmVzdWx0IiwiaSIsImF0dHJpYnV0ZXMiLCJsZW5ndGgiLCJhdHRyIiwibmFtZSIsInZhbHVlIiwiQ29tcG9uZW50IiwiZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIiwiXyIsImhhc0Vycm9yIiwiY29tcG9uZW50RGlkTW91bnQiLCJodG1sTm9kZSIsImh0bWxSZWYiLCJjdXJyZW50Iiwic3RhdGUiLCJPYmplY3QiLCJlbnRyaWVzIiwiaHRtbEF0dHJpYnV0ZXMiLCJmb3JFYWNoIiwia2V5Iiwic2V0QXR0cmlidXRlIiwicmVuZGVyIiwid2luZG93Iiwicm9vdEh0bWwiLCJkb2N1bWVudCIsImRvY3VtZW50RWxlbWVudCIsImlubmVySFRNTCIsImh0bWwiLCJyZWYiLCJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmciLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsIl9faHRtbCIsInByb3BzIiwiY2hpbGRyZW4iLCJjb25zdHJ1Y3RvciIsImNyZWF0ZVJlZiJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/errors/graceful-degrade-boundary.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/forbidden.js":
|
||
/*!***************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/forbidden.js ***!
|
||
\***************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"forbidden\", ({\n enumerable: true,\n get: function() {\n return forbidden;\n }\n}));\nconst _httpaccessfallback = __webpack_require__(/*! ./http-access-fallback/http-access-fallback */ \"(app-pages-browser)/./node_modules/next/dist/client/components/http-access-fallback/http-access-fallback.js\");\n// TODO: Add `forbidden` docs\n/**\n * @experimental\n * This function allows you to render the [forbidden.js file](https://nextjs.org/docs/app/api-reference/file-conventions/forbidden)\n * within a route segment as well as inject a tag.\n *\n * `forbidden()` can be used in\n * [Server Components](https://nextjs.org/docs/app/building-your-application/rendering/server-components),\n * [Route Handlers](https://nextjs.org/docs/app/building-your-application/routing/route-handlers), and\n * [Server Actions](https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations).\n *\n * Read more: [Next.js Docs: `forbidden`](https://nextjs.org/docs/app/api-reference/functions/forbidden)\n */ const DIGEST = \"\" + _httpaccessfallback.HTTP_ERROR_FALLBACK_ERROR_CODE + \";403\";\nfunction forbidden() {\n if (true) {\n throw Object.defineProperty(new Error(\"`forbidden()` is experimental and only allowed to be enabled when `experimental.authInterrupts` is enabled.\"), \"__NEXT_ERROR_CODE\", {\n value: \"E488\",\n enumerable: false,\n configurable: true\n });\n }\n // eslint-disable-next-line no-throw-literal\n const error = Object.defineProperty(new Error(DIGEST), \"__NEXT_ERROR_CODE\", {\n value: \"E394\",\n enumerable: false,\n configurable: true\n });\n error.digest = DIGEST;\n throw error;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=forbidden.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvZm9yYmlkZGVuLmpzIiwibWFwcGluZ3MiOiI7Ozs7NkNBcUJnQkE7OztlQUFBQTs7O2dEQWxCVDtBQUVQLDZCQUE2QjtBQUM3Qjs7Ozs7Ozs7Ozs7Q0FXQyxHQUVELE1BQU1DLFNBQVUsS0FBRUMsb0JBQUFBLDhCQUE4QixHQUFDO0FBRTFDLFNBQVNGO0lBQ2QsSUFBSSxJQUFnRCxFQUFFO1FBQ3BELE1BQU0scUJBRUwsQ0FGSyxJQUFJTSxNQUNQLGdIQURHO21CQUFBO3dCQUFBOzBCQUFBO1FBRU47SUFDRjtJQUVBLDRDQUE0QztJQUM1QyxNQUFNQyxRQUFRLHFCQUFpQixDQUFqQixJQUFJRCxNQUFNTCxTQUFWO2VBQUE7b0JBQUE7c0JBQUE7SUFBZ0I7SUFDNUJNLE1BQWtDQyxNQUFNLEdBQUdQO0lBQzdDLE1BQU1NO0FBQ1IiLCJzb3VyY2VzIjpbIi9ob21lL05pY2hvbGFpL3NyYy9jbGllbnQvY29tcG9uZW50cy9mb3JiaWRkZW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSFRUUF9FUlJPUl9GQUxMQkFDS19FUlJPUl9DT0RFLFxuICB0eXBlIEhUVFBBY2Nlc3NGYWxsYmFja0Vycm9yLFxufSBmcm9tICcuL2h0dHAtYWNjZXNzLWZhbGxiYWNrL2h0dHAtYWNjZXNzLWZhbGxiYWNrJ1xuXG4vLyBUT0RPOiBBZGQgYGZvcmJpZGRlbmAgZG9jc1xuLyoqXG4gKiBAZXhwZXJpbWVudGFsXG4gKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gcmVuZGVyIHRoZSBbZm9yYmlkZGVuLmpzIGZpbGVdKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9hcGktcmVmZXJlbmNlL2ZpbGUtY29udmVudGlvbnMvZm9yYmlkZGVuKVxuICogd2l0aGluIGEgcm91dGUgc2VnbWVudCBhcyB3ZWxsIGFzIGluamVjdCBhIHRhZy5cbiAqXG4gKiBgZm9yYmlkZGVuKClgIGNhbiBiZSB1c2VkIGluXG4gKiBbU2VydmVyIENvbXBvbmVudHNdKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9idWlsZGluZy15b3VyLWFwcGxpY2F0aW9uL3JlbmRlcmluZy9zZXJ2ZXItY29tcG9uZW50cyksXG4gKiBbUm91dGUgSGFuZGxlcnNdKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9idWlsZGluZy15b3VyLWFwcGxpY2F0aW9uL3JvdXRpbmcvcm91dGUtaGFuZGxlcnMpLCBhbmRcbiAqIFtTZXJ2ZXIgQWN0aW9uc10oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vZGF0YS1mZXRjaGluZy9zZXJ2ZXItYWN0aW9ucy1hbmQtbXV0YXRpb25zKS5cbiAqXG4gKiBSZWFkIG1vcmU6IFtOZXh0LmpzIERvY3M6IGBmb3JiaWRkZW5gXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYXBpLXJlZmVyZW5jZS9mdW5jdGlvbnMvZm9yYmlkZGVuKVxuICovXG5cbmNvbnN0IERJR0VTVCA9IGAke0hUVFBfRVJST1JfRkFMTEJBQ0tfRVJST1JfQ09ERX07NDAzYFxuXG5leHBvcnQgZnVuY3Rpb24gZm9yYmlkZGVuKCk6IG5ldmVyIHtcbiAgaWYgKCFwcm9jZXNzLmVudi5fX05FWFRfRVhQRVJJTUVOVEFMX0FVVEhfSU5URVJSVVBUUykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBcXGBmb3JiaWRkZW4oKVxcYCBpcyBleHBlcmltZW50YWwgYW5kIG9ubHkgYWxsb3dlZCB0byBiZSBlbmFibGVkIHdoZW4gXFxgZXhwZXJpbWVudGFsLmF1dGhJbnRlcnJ1cHRzXFxgIGlzIGVuYWJsZWQuYFxuICAgIClcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKERJR0VTVCkgYXMgSFRUUEFjY2Vzc0ZhbGxiYWNrRXJyb3JcbiAgOyhlcnJvciBhcyBIVFRQQWNjZXNzRmFsbGJhY2tFcnJvcikuZGlnZXN0ID0gRElHRVNUXG4gIHRocm93IGVycm9yXG59XG4iXSwibmFtZXMiOlsiZm9yYmlkZGVuIiwiRElHRVNUIiwiSFRUUF9FUlJPUl9GQUxMQkFDS19FUlJPUl9DT0RFIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9FWFBFUklNRU5UQUxfQVVUSF9JTlRFUlJVUFRTIiwiRXJyb3IiLCJlcnJvciIsImRpZ2VzdCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/forbidden.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/handle-isr-error.js":
|
||
/*!**********************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/handle-isr-error.js ***!
|
||
\**********************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"HandleISRError\", ({\n enumerable: true,\n get: function() {\n return HandleISRError;\n }\n}));\nconst workAsyncStorage = false ? 0 : undefined;\nfunction HandleISRError(param) {\n let { error } = param;\n if (workAsyncStorage) {\n const store = workAsyncStorage.getStore();\n if ((store == null ? void 0 : store.isRevalidate) || (store == null ? void 0 : store.isStaticGeneration)) {\n console.error(error);\n throw error;\n }\n }\n return null;\n}\n_c = HandleISRError;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=handle-isr-error.js.map\nvar _c;\n$RefreshReg$(_c, \"HandleISRError\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvaGFuZGxlLWlzci1lcnJvci5qcyIsIm1hcHBpbmdzIjoiOzs7O2tEQVVnQkE7OztlQUFBQTs7O0FBVmhCLE1BQU1DLG1CQUNKLE1BQTZCLEdBRXZCRSxDQUNnQixHQUNsQkM7QUFLQyx3QkFBd0IsS0FBeUI7SUFBekIsTUFBRUMsS0FBSyxFQUFrQixHQUF6QjtJQUM3QixJQUFJSixrQkFBa0I7UUFDcEIsTUFBTUssUUFBUUwsaUJBQWlCTSxRQUFRO1FBQ3ZDLElBQUlELENBQUFBLFNBQUFBLE9BQUFBLEtBQUFBLElBQUFBLE1BQU9FLFlBQUFBLE1BQWdCRixTQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxNQUFPRyxrQkFBQUEsR0FBb0I7WUFDcERDLFFBQVFMLEtBQUssQ0FBQ0E7WUFDZCxNQUFNQTtRQUNSO0lBQ0Y7SUFFQSxPQUFPO0FBQ1Q7S0FWZ0JMIiwic291cmNlcyI6WyIvaG9tZS9OaWNob2xhaS9zcmMvY2xpZW50L2NvbXBvbmVudHMvaGFuZGxlLWlzci1lcnJvci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3Qgd29ya0FzeW5jU3RvcmFnZSA9XG4gIHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnXG4gICAgPyAoXG4gICAgICAgIHJlcXVpcmUoJy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL3dvcmstYXN5bmMtc3RvcmFnZS5leHRlcm5hbCcpIGFzIHR5cGVvZiBpbXBvcnQoJy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL3dvcmstYXN5bmMtc3RvcmFnZS5leHRlcm5hbCcpXG4gICAgICApLndvcmtBc3luY1N0b3JhZ2VcbiAgICA6IHVuZGVmaW5lZFxuXG4vLyBpZiB3ZSBhcmUgcmV2YWxpZGF0aW5nIHdlIHdhbnQgdG8gcmUtdGhyb3cgdGhlIGVycm9yIHNvIHRoZVxuLy8gZnVuY3Rpb24gY3Jhc2hlcyBzbyB3ZSBjYW4gbWFpbnRhaW4gb3VyIHByZXZpb3VzIGNhY2hlXG4vLyBpbnN0ZWFkIG9mIGNhY2hpbmcgdGhlIGVycm9yIHBhZ2VcbmV4cG9ydCBmdW5jdGlvbiBIYW5kbGVJU1JFcnJvcih7IGVycm9yIH06IHsgZXJyb3I6IGFueSB9KSB7XG4gIGlmICh3b3JrQXN5bmNTdG9yYWdlKSB7XG4gICAgY29uc3Qgc3RvcmUgPSB3b3JrQXN5bmNTdG9yYWdlLmdldFN0b3JlKClcbiAgICBpZiAoc3RvcmU/LmlzUmV2YWxpZGF0ZSB8fCBzdG9yZT8uaXNTdGF0aWNHZW5lcmF0aW9uKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuIl0sIm5hbWVzIjpbIkhhbmRsZUlTUkVycm9yIiwid29ya0FzeW5jU3RvcmFnZSIsIndpbmRvdyIsInJlcXVpcmUiLCJ1bmRlZmluZWQiLCJlcnJvciIsInN0b3JlIiwiZ2V0U3RvcmUiLCJpc1JldmFsaWRhdGUiLCJpc1N0YXRpY0dlbmVyYXRpb24iLCJjb25zb2xlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/handle-isr-error.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/http-access-fallback/error-boundary.js":
|
||
/*!*****************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/http-access-fallback/error-boundary.js ***!
|
||
\*****************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"HTTPAccessFallbackBoundary\", ({\n enumerable: true,\n get: function() {\n return HTTPAccessFallbackBoundary;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _navigationuntracked = __webpack_require__(/*! ../navigation-untracked */ \"(app-pages-browser)/./node_modules/next/dist/client/components/navigation-untracked.js\");\nconst _httpaccessfallback = __webpack_require__(/*! ./http-access-fallback */ \"(app-pages-browser)/./node_modules/next/dist/client/components/http-access-fallback/http-access-fallback.js\");\nconst _warnonce = __webpack_require__(/*! ../../../shared/lib/utils/warn-once */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/utils/warn-once.js\");\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../../../shared/lib/app-router-context.shared-runtime */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js\");\nclass HTTPAccessFallbackErrorBoundary extends _react.default.Component {\n componentDidCatch() {\n if ( true && this.props.missingSlots && this.props.missingSlots.size > 0 && // A missing children slot is the typical not-found case, so no need to warn\n !this.props.missingSlots.has('children')) {\n let warningMessage = 'No default component was found for a parallel route rendered on this page. Falling back to nearest NotFound boundary.\\n' + 'Learn more: https://nextjs.org/docs/app/building-your-application/routing/parallel-routes#defaultjs\\n\\n';\n const formattedSlots = Array.from(this.props.missingSlots).sort((a, b)=>a.localeCompare(b)).map((slot)=>\"@\" + slot).join(', ');\n warningMessage += 'Missing slots: ' + formattedSlots;\n (0, _warnonce.warnOnce)(warningMessage);\n }\n }\n static getDerivedStateFromError(error) {\n if ((0, _httpaccessfallback.isHTTPAccessFallbackError)(error)) {\n const httpStatus = (0, _httpaccessfallback.getAccessFallbackHTTPStatus)(error);\n return {\n triggeredStatus: httpStatus\n };\n }\n // Re-throw if error is not for 404\n throw error;\n }\n static getDerivedStateFromProps(props, state) {\n /**\n * Handles reset of the error boundary when a navigation happens.\n * Ensures the error boundary does not stay enabled when navigating to a new page.\n * Approach of setState in render is safe as it checks the previous pathname and then overrides\n * it as outlined in https://react.dev/reference/react/useState#storing-information-from-previous-renders\n */ if (props.pathname !== state.previousPathname && state.triggeredStatus) {\n return {\n triggeredStatus: undefined,\n previousPathname: props.pathname\n };\n }\n return {\n triggeredStatus: state.triggeredStatus,\n previousPathname: props.pathname\n };\n }\n render() {\n const { notFound, forbidden, unauthorized, children } = this.props;\n const { triggeredStatus } = this.state;\n const errorComponents = {\n [_httpaccessfallback.HTTPAccessErrorStatus.NOT_FOUND]: notFound,\n [_httpaccessfallback.HTTPAccessErrorStatus.FORBIDDEN]: forbidden,\n [_httpaccessfallback.HTTPAccessErrorStatus.UNAUTHORIZED]: unauthorized\n };\n if (triggeredStatus) {\n const isNotFound = triggeredStatus === _httpaccessfallback.HTTPAccessErrorStatus.NOT_FOUND && notFound;\n const isForbidden = triggeredStatus === _httpaccessfallback.HTTPAccessErrorStatus.FORBIDDEN && forbidden;\n const isUnauthorized = triggeredStatus === _httpaccessfallback.HTTPAccessErrorStatus.UNAUTHORIZED && unauthorized;\n // If there's no matched boundary in this layer, keep throwing the error by rendering the children\n if (!(isNotFound || isForbidden || isUnauthorized)) {\n return children;\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"meta\", {\n name: \"robots\",\n content: \"noindex\"\n }),\n true && /*#__PURE__*/ (0, _jsxruntime.jsx)(\"meta\", {\n name: \"boundary-next-error\",\n content: (0, _httpaccessfallback.getAccessFallbackErrorTypeByStatus)(triggeredStatus)\n }),\n errorComponents[triggeredStatus]\n ]\n });\n }\n return children;\n }\n constructor(props){\n super(props);\n this.state = {\n triggeredStatus: undefined,\n previousPathname: props.pathname\n };\n }\n}\nfunction HTTPAccessFallbackBoundary(param) {\n let { notFound, forbidden, unauthorized, children } = param;\n // When we're rendering the missing params shell, this will return null. This\n // is because we won't be rendering any not found boundaries or error\n // boundaries for the missing params shell. When this runs on the client\n // (where these error can occur), we will get the correct pathname.\n const pathname = (0, _navigationuntracked.useUntrackedPathname)();\n const missingSlots = (0, _react.useContext)(_approutercontextsharedruntime.MissingSlotContext);\n const hasErrorFallback = !!(notFound || forbidden || unauthorized);\n if (hasErrorFallback) {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(HTTPAccessFallbackErrorBoundary, {\n pathname: pathname,\n notFound: notFound,\n forbidden: forbidden,\n unauthorized: unauthorized,\n missingSlots: missingSlots,\n children: children\n });\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, {\n children: children\n });\n}\n_c = HTTPAccessFallbackBoundary;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=error-boundary.js.map\nvar _c;\n$RefreshReg$(_c, \"HTTPAccessFallbackBoundary\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvaHR0cC1hY2Nlc3MtZmFsbGJhY2svZXJyb3ItYm91bmRhcnkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs4REF1SmdCQTs7O2VBQUFBOzs7Ozs2RUExSWtCO2lEQUNHO2dEQU05QjtzQ0FDa0I7MkRBQ1U7QUFxQm5DLE1BQU1DLHdDQUF3Q0MsT0FBQUEsT0FBSyxDQUFDQyxTQUFTO0lBWTNEQyxvQkFBMEI7UUFDeEIsSUFDRUMsS0FBb0IsSUFDcEIsSUFBSSxDQUFDRyxLQUFLLENBQUNDLFlBQVksSUFDdkIsSUFBSSxDQUFDRCxLQUFLLENBQUNDLFlBQVksQ0FBQ0MsSUFBSSxHQUFHLEtBQy9CLDRFQUE0RTtRQUM1RSxDQUFDLElBQUksQ0FBQ0YsS0FBSyxDQUFDQyxZQUFZLENBQUNFLEdBQUcsQ0FBQyxhQUM3QjtZQUNBLElBQUlDLGlCQUNGLDRIQUNBO1lBRUYsTUFBTUMsaUJBQWlCQyxNQUFNQyxJQUFJLENBQUMsSUFBSSxDQUFDUCxLQUFLLENBQUNDLFlBQVksRUFDdERPLElBQUksQ0FBQyxDQUFDQyxHQUFHQyxJQUFNRCxFQUFFRSxhQUFhLENBQUNELElBQy9CRSxHQUFHLENBQUMsQ0FBQ0MsT0FBVSxNQUFHQSxNQUNsQkMsSUFBSSxDQUFDO1lBRVJWLGtCQUFrQixvQkFBb0JDO1lBRXRDVSxDQUFBQSxHQUFBQSxVQUFBQSxRQUFBQSxFQUFTWDtRQUNYO0lBQ0Y7SUFFQSxPQUFPWSx5QkFBeUJDLEtBQVUsRUFBRTtRQUMxQyxJQUFJQyxDQUFBQSxHQUFBQSxvQkFBQUEseUJBQUFBLEVBQTBCRCxRQUFRO1lBQ3BDLE1BQU1FLGFBQWFDLENBQUFBLEdBQUFBLG9CQUFBQSwyQkFBQUEsRUFBNEJIO1lBQy9DLE9BQU87Z0JBQ0xJLGlCQUFpQkY7WUFDbkI7UUFDRjtRQUNBLG1DQUFtQztRQUNuQyxNQUFNRjtJQUNSO0lBRUEsT0FBT0sseUJBQ0x0QixLQUEyQyxFQUMzQ3VCLEtBQThCLEVBQ0U7UUFDaEM7Ozs7O0tBS0MsR0FDRCxJQUFJdkIsTUFBTXdCLFFBQVEsS0FBS0QsTUFBTUUsZ0JBQWdCLElBQUlGLE1BQU1GLGVBQWUsRUFBRTtZQUN0RSxPQUFPO2dCQUNMQSxpQkFBaUJLO2dCQUNqQkQsa0JBQWtCekIsTUFBTXdCLFFBQVE7WUFDbEM7UUFDRjtRQUNBLE9BQU87WUFDTEgsaUJBQWlCRSxNQUFNRixlQUFlO1lBQ3RDSSxrQkFBa0J6QixNQUFNd0IsUUFBUTtRQUNsQztJQUNGO0lBRUFHLFNBQVM7UUFDUCxNQUFNLEVBQUVDLFFBQVEsRUFBRUMsU0FBUyxFQUFFQyxZQUFZLEVBQUVDLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQy9CLEtBQUs7UUFDbEUsTUFBTSxFQUFFcUIsZUFBZSxFQUFFLEdBQUcsSUFBSSxDQUFDRSxLQUFLO1FBQ3RDLE1BQU1TLGtCQUFrQjtZQUN0QixDQUFDQyxvQkFBQUEscUJBQXFCLENBQUNDLFNBQVMsQ0FBQyxFQUFFTjtZQUNuQyxDQUFDSyxvQkFBQUEscUJBQXFCLENBQUNFLFNBQVMsQ0FBQyxFQUFFTjtZQUNuQyxDQUFDSSxvQkFBQUEscUJBQXFCLENBQUNHLFlBQVksQ0FBQyxFQUFFTjtRQUN4QztRQUVBLElBQUlULGlCQUFpQjtZQUNuQixNQUFNZ0IsYUFDSmhCLG9CQUFvQlksb0JBQUFBLHFCQUFxQixDQUFDQyxTQUFTLElBQUlOO1lBQ3pELE1BQU1VLGNBQ0pqQixvQkFBb0JZLG9CQUFBQSxxQkFBcUIsQ0FBQ0UsU0FBUyxJQUFJTjtZQUN6RCxNQUFNVSxpQkFDSmxCLG9CQUFvQlksb0JBQUFBLHFCQUFxQixDQUFDRyxZQUFZLElBQUlOO1lBRTVELGtHQUFrRztZQUNsRyxJQUFJLENBQUVPLENBQUFBLGNBQWNDLGVBQWVDLGNBQUFBLENBQWEsRUFBSTtnQkFDbEQsT0FBT1I7WUFDVDtZQUVBLHFCQUNFOztrQ0FDRSxxQkFBQ1MsUUFBQUE7d0JBQUtDLE1BQUs7d0JBQVNDLFNBQVE7O29CQTdCVHJCLEtBOEJvQixJQUFiLGNBQ3hCLHFCQUFDbUIsUUFBQUE7d0JBQ0NDLE1BQUs7d0JBQ0xDLFNBQVNDLENBQUFBLEdBQUFBLG9CQUFBQSxrQ0FBQUEsRUFBbUN0Qjs7b0JBRy9DVyxlQUFlLENBQUNYLGdCQUFnQjs7O1FBR3ZDO1FBRUEsT0FBT1U7SUFDVDtJQXJHQWEsWUFBWTVDLEtBQTJDLENBQUU7UUFDdkQsS0FBSyxDQUFDQTtRQUNOLElBQUksQ0FBQ3VCLEtBQUssR0FBRztZQUNYRixpQkFBaUJLO1lBQ2pCRCxrQkFBa0J6QixNQUFNd0IsUUFBUTtRQUNsQztJQUNGO0FBZ0dGO0FBRU8sb0NBQW9DLEtBS1Q7SUFMUyxNQUN6Q0ksUUFBUSxFQUNSQyxTQUFTLEVBQ1RDLFlBQVksRUFDWkMsUUFBUSxFQUN3QixHQUxTO0lBTXpDLDZFQUE2RTtJQUM3RSxxRUFBcUU7SUFDckUsd0VBQXdFO0lBQ3hFLG1FQUFtRTtJQUNuRSxNQUFNUCxXQUFXcUIsQ0FBQUEsR0FBQUEscUJBQUFBLG9CQUFBQTtJQUNqQixNQUFNNUMsZUFBZTZDLENBQUFBLEdBQUFBLE9BQUFBLFVBQUFBLEVBQVdDLCtCQUFBQSxrQkFBa0I7SUFDbEQsTUFBTUMsbUJBQW1CLENBQUMsQ0FBRXBCLENBQUFBLFlBQVlDLGFBQWFDLFlBQUFBLENBQVc7SUFFaEUsSUFBSWtCLGtCQUFrQjtRQUNwQixPQUNFLFdBREYsR0FDRSxxQkFBQ3ZELGlDQUFBQTtZQUNDK0IsVUFBVUE7WUFDVkksVUFBVUE7WUFDVkMsV0FBV0E7WUFDWEMsY0FBY0E7WUFDZDdCLGNBQWNBO3NCQUViOEI7O0lBR1A7SUFFQSxxQkFBTztrQkFBR0E7O0FBQ1o7S0E3QmdCdkMiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9jbGllbnQvY29tcG9uZW50cy9odHRwLWFjY2Vzcy1mYWxsYmFjay9lcnJvci1ib3VuZGFyeS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXG5cbi8qKlxuICogSFRUUEFjY2Vzc0ZhbGxiYWNrQm91bmRhcnkgaXMgYSBib3VuZGFyeSB0aGF0IGNhdGNoZXMgZXJyb3JzIGFuZCByZW5kZXJzIGFcbiAqIGZhbGxiYWNrIGNvbXBvbmVudCBmb3IgSFRUUCBlcnJvcnMuXG4gKlxuICogSXQgcmVjZWl2ZXMgdGhlIHN0YXR1cyBjb2RlLCBhbmQgZGV0ZXJtaW5lIGlmIGl0IHNob3VsZCByZW5kZXIgZmFsbGJhY2tzIGZvciBmZXcgSFRUUCA0eHggZXJyb3JzLlxuICpcbiAqIGUuZy4gNDA0XG4gKiA0MDQgcmVwcmVzZW50cyBub3QgZm91bmQsIGFuZCB0aGUgZmFsbGJhY2sgY29tcG9uZW50IHBhaXIgY29udGFpbnMgdGhlIGNvbXBvbmVudCBhbmQgaXRzIHN0eWxlcy5cbiAqXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVVudHJhY2tlZFBhdGhuYW1lIH0gZnJvbSAnLi4vbmF2aWdhdGlvbi11bnRyYWNrZWQnXG5pbXBvcnQge1xuICBIVFRQQWNjZXNzRXJyb3JTdGF0dXMsXG4gIGdldEFjY2Vzc0ZhbGxiYWNrSFRUUFN0YXR1cyxcbiAgZ2V0QWNjZXNzRmFsbGJhY2tFcnJvclR5cGVCeVN0YXR1cyxcbiAgaXNIVFRQQWNjZXNzRmFsbGJhY2tFcnJvcixcbn0gZnJvbSAnLi9odHRwLWFjY2Vzcy1mYWxsYmFjaydcbmltcG9ydCB7IHdhcm5PbmNlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2xpYi91dGlscy93YXJuLW9uY2UnXG5pbXBvcnQgeyBNaXNzaW5nU2xvdENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvbGliL2FwcC1yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZSdcblxuaW50ZXJmYWNlIEhUVFBBY2Nlc3NGYWxsYmFja0JvdW5kYXJ5UHJvcHMge1xuICBub3RGb3VuZD86IFJlYWN0LlJlYWN0Tm9kZVxuICBmb3JiaWRkZW4/OiBSZWFjdC5SZWFjdE5vZGVcbiAgdW5hdXRob3JpemVkPzogUmVhY3QuUmVhY3ROb2RlXG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGVcbiAgbWlzc2luZ1Nsb3RzPzogU2V0PHN0cmluZz5cbn1cblxuaW50ZXJmYWNlIEhUVFBBY2Nlc3NGYWxsYmFja0Vycm9yQm91bmRhcnlQcm9wc1xuICBleHRlbmRzIEhUVFBBY2Nlc3NGYWxsYmFja0JvdW5kYXJ5UHJvcHMge1xuICBwYXRobmFtZTogc3RyaW5nIHwgbnVsbFxuICBtaXNzaW5nU2xvdHM/OiBTZXQ8c3RyaW5nPlxufVxuXG5pbnRlcmZhY2UgSFRUUEFjY2Vzc0JvdW5kYXJ5U3RhdGUge1xuICB0cmlnZ2VyZWRTdGF0dXM6IG51bWJlciB8IHVuZGVmaW5lZFxuICBwcmV2aW91c1BhdGhuYW1lOiBzdHJpbmcgfCBudWxsXG59XG5cbmNsYXNzIEhUVFBBY2Nlc3NGYWxsYmFja0Vycm9yQm91bmRhcnkgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8XG4gIEhUVFBBY2Nlc3NGYWxsYmFja0Vycm9yQm91bmRhcnlQcm9wcyxcbiAgSFRUUEFjY2Vzc0JvdW5kYXJ5U3RhdGVcbj4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSFRUUEFjY2Vzc0ZhbGxiYWNrRXJyb3JCb3VuZGFyeVByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHRyaWdnZXJlZFN0YXR1czogdW5kZWZpbmVkLFxuICAgICAgcHJldmlvdXNQYXRobmFtZTogcHJvcHMucGF0aG5hbWUsXG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50RGlkQ2F0Y2goKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcgJiZcbiAgICAgIHRoaXMucHJvcHMubWlzc2luZ1Nsb3RzICYmXG4gICAgICB0aGlzLnByb3BzLm1pc3NpbmdTbG90cy5zaXplID4gMCAmJlxuICAgICAgLy8gQSBtaXNzaW5nIGNoaWxkcmVuIHNsb3QgaXMgdGhlIHR5cGljYWwgbm90LWZvdW5kIGNhc2UsIHNvIG5vIG5lZWQgdG8gd2FyblxuICAgICAgIXRoaXMucHJvcHMubWlzc2luZ1Nsb3RzLmhhcygnY2hpbGRyZW4nKVxuICAgICkge1xuICAgICAgbGV0IHdhcm5pbmdNZXNzYWdlID1cbiAgICAgICAgJ05vIGRlZmF1bHQgY29tcG9uZW50IHdhcyBmb3VuZCBmb3IgYSBwYXJhbGxlbCByb3V0ZSByZW5kZXJlZCBvbiB0aGlzIHBhZ2UuIEZhbGxpbmcgYmFjayB0byBuZWFyZXN0IE5vdEZvdW5kIGJvdW5kYXJ5LlxcbicgK1xuICAgICAgICAnTGVhcm4gbW9yZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vcm91dGluZy9wYXJhbGxlbC1yb3V0ZXMjZGVmYXVsdGpzXFxuXFxuJ1xuXG4gICAgICBjb25zdCBmb3JtYXR0ZWRTbG90cyA9IEFycmF5LmZyb20odGhpcy5wcm9wcy5taXNzaW5nU2xvdHMpXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpXG4gICAgICAgIC5tYXAoKHNsb3QpID0+IGBAJHtzbG90fWApXG4gICAgICAgIC5qb2luKCcsICcpXG5cbiAgICAgIHdhcm5pbmdNZXNzYWdlICs9ICdNaXNzaW5nIHNsb3RzOiAnICsgZm9ybWF0dGVkU2xvdHNcblxuICAgICAgd2Fybk9uY2Uod2FybmluZ01lc3NhZ2UpXG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihlcnJvcjogYW55KSB7XG4gICAgaWYgKGlzSFRUUEFjY2Vzc0ZhbGxiYWNrRXJyb3IoZXJyb3IpKSB7XG4gICAgICBjb25zdCBodHRwU3RhdHVzID0gZ2V0QWNjZXNzRmFsbGJhY2tIVFRQU3RhdHVzKGVycm9yKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHJpZ2dlcmVkU3RhdHVzOiBodHRwU3RhdHVzLFxuICAgICAgfVxuICAgIH1cbiAgICAvLyBSZS10aHJvdyBpZiBlcnJvciBpcyBub3QgZm9yIDQwNFxuICAgIHRocm93IGVycm9yXG4gIH1cblxuICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKFxuICAgIHByb3BzOiBIVFRQQWNjZXNzRmFsbGJhY2tFcnJvckJvdW5kYXJ5UHJvcHMsXG4gICAgc3RhdGU6IEhUVFBBY2Nlc3NCb3VuZGFyeVN0YXRlXG4gICk6IEhUVFBBY2Nlc3NCb3VuZGFyeVN0YXRlIHwgbnVsbCB7XG4gICAgLyoqXG4gICAgICogSGFuZGxlcyByZXNldCBvZiB0aGUgZXJyb3IgYm91bmRhcnkgd2hlbiBhIG5hdmlnYXRpb24gaGFwcGVucy5cbiAgICAgKiBFbnN1cmVzIHRoZSBlcnJvciBib3VuZGFyeSBkb2VzIG5vdCBzdGF5IGVuYWJsZWQgd2hlbiBuYXZpZ2F0aW5nIHRvIGEgbmV3IHBhZ2UuXG4gICAgICogQXBwcm9hY2ggb2Ygc2V0U3RhdGUgaW4gcmVuZGVyIGlzIHNhZmUgYXMgaXQgY2hlY2tzIHRoZSBwcmV2aW91cyBwYXRobmFtZSBhbmQgdGhlbiBvdmVycmlkZXNcbiAgICAgKiBpdCBhcyBvdXRsaW5lZCBpbiBodHRwczovL3JlYWN0LmRldi9yZWZlcmVuY2UvcmVhY3QvdXNlU3RhdGUjc3RvcmluZy1pbmZvcm1hdGlvbi1mcm9tLXByZXZpb3VzLXJlbmRlcnNcbiAgICAgKi9cbiAgICBpZiAocHJvcHMucGF0aG5hbWUgIT09IHN0YXRlLnByZXZpb3VzUGF0aG5hbWUgJiYgc3RhdGUudHJpZ2dlcmVkU3RhdHVzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0cmlnZ2VyZWRTdGF0dXM6IHVuZGVmaW5lZCxcbiAgICAgICAgcHJldmlvdXNQYXRobmFtZTogcHJvcHMucGF0aG5hbWUsXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB0cmlnZ2VyZWRTdGF0dXM6IHN0YXRlLnRyaWdnZXJlZFN0YXR1cyxcbiAgICAgIHByZXZpb3VzUGF0aG5hbWU6IHByb3BzLnBhdGhuYW1lLFxuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IG5vdEZvdW5kLCBmb3JiaWRkZW4sIHVuYXV0aG9yaXplZCwgY2hpbGRyZW4gfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCB7IHRyaWdnZXJlZFN0YXR1cyB9ID0gdGhpcy5zdGF0ZVxuICAgIGNvbnN0IGVycm9yQ29tcG9uZW50cyA9IHtcbiAgICAgIFtIVFRQQWNjZXNzRXJyb3JTdGF0dXMuTk9UX0ZPVU5EXTogbm90Rm91bmQsXG4gICAgICBbSFRUUEFjY2Vzc0Vycm9yU3RhdHVzLkZPUkJJRERFTl06IGZvcmJpZGRlbixcbiAgICAgIFtIVFRQQWNjZXNzRXJyb3JTdGF0dXMuVU5BVVRIT1JJWkVEXTogdW5hdXRob3JpemVkLFxuICAgIH1cblxuICAgIGlmICh0cmlnZ2VyZWRTdGF0dXMpIHtcbiAgICAgIGNvbnN0IGlzTm90Rm91bmQgPVxuICAgICAgICB0cmlnZ2VyZWRTdGF0dXMgPT09IEhUVFBBY2Nlc3NFcnJvclN0YXR1cy5OT1RfRk9VTkQgJiYgbm90Rm91bmRcbiAgICAgIGNvbnN0IGlzRm9yYmlkZGVuID1cbiAgICAgICAgdHJpZ2dlcmVkU3RhdHVzID09PSBIVFRQQWNjZXNzRXJyb3JTdGF0dXMuRk9SQklEREVOICYmIGZvcmJpZGRlblxuICAgICAgY29uc3QgaXNVbmF1dGhvcml6ZWQgPVxuICAgICAgICB0cmlnZ2VyZWRTdGF0dXMgPT09IEhUVFBBY2Nlc3NFcnJvclN0YXR1cy5VTkFVVEhPUklaRUQgJiYgdW5hdXRob3JpemVkXG5cbiAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gbWF0Y2hlZCBib3VuZGFyeSBpbiB0aGlzIGxheWVyLCBrZWVwIHRocm93aW5nIHRoZSBlcnJvciBieSByZW5kZXJpbmcgdGhlIGNoaWxkcmVuXG4gICAgICBpZiAoIShpc05vdEZvdW5kIHx8IGlzRm9yYmlkZGVuIHx8IGlzVW5hdXRob3JpemVkKSkge1xuICAgICAgICByZXR1cm4gY2hpbGRyZW5cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICA8bWV0YSBuYW1lPVwicm9ib3RzXCIgY29udGVudD1cIm5vaW5kZXhcIiAvPlxuICAgICAgICAgIHtwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50JyAmJiAoXG4gICAgICAgICAgICA8bWV0YVxuICAgICAgICAgICAgICBuYW1lPVwiYm91bmRhcnktbmV4dC1lcnJvclwiXG4gICAgICAgICAgICAgIGNvbnRlbnQ9e2dldEFjY2Vzc0ZhbGxiYWNrRXJyb3JUeXBlQnlTdGF0dXModHJpZ2dlcmVkU3RhdHVzKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7ZXJyb3JDb21wb25lbnRzW3RyaWdnZXJlZFN0YXR1c119XG4gICAgICAgIDwvPlxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiBjaGlsZHJlblxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBIVFRQQWNjZXNzRmFsbGJhY2tCb3VuZGFyeSh7XG4gIG5vdEZvdW5kLFxuICBmb3JiaWRkZW4sXG4gIHVuYXV0aG9yaXplZCxcbiAgY2hpbGRyZW4sXG59OiBIVFRQQWNjZXNzRmFsbGJhY2tCb3VuZGFyeVByb3BzKSB7XG4gIC8vIFdoZW4gd2UncmUgcmVuZGVyaW5nIHRoZSBtaXNzaW5nIHBhcmFtcyBzaGVsbCwgdGhpcyB3aWxsIHJldHVybiBudWxsLiBUaGlzXG4gIC8vIGlzIGJlY2F1c2Ugd2Ugd29uJ3QgYmUgcmVuZGVyaW5nIGFueSBub3QgZm91bmQgYm91bmRhcmllcyBvciBlcnJvclxuICAvLyBib3VuZGFyaWVzIGZvciB0aGUgbWlzc2luZyBwYXJhbXMgc2hlbGwuIFdoZW4gdGhpcyBydW5zIG9uIHRoZSBjbGllbnRcbiAgLy8gKHdoZXJlIHRoZXNlIGVycm9yIGNhbiBvY2N1ciksIHdlIHdpbGwgZ2V0IHRoZSBjb3JyZWN0IHBhdGhuYW1lLlxuICBjb25zdCBwYXRobmFtZSA9IHVzZVVudHJhY2tlZFBhdGhuYW1lKClcbiAgY29uc3QgbWlzc2luZ1Nsb3RzID0gdXNlQ29udGV4dChNaXNzaW5nU2xvdENvbnRleHQpXG4gIGNvbnN0IGhhc0Vycm9yRmFsbGJhY2sgPSAhIShub3RGb3VuZCB8fCBmb3JiaWRkZW4gfHwgdW5hdXRob3JpemVkKVxuXG4gIGlmIChoYXNFcnJvckZhbGxiYWNrKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxIVFRQQWNjZXNzRmFsbGJhY2tFcnJvckJvdW5kYXJ5XG4gICAgICAgIHBhdGhuYW1lPXtwYXRobmFtZX1cbiAgICAgICAgbm90Rm91bmQ9e25vdEZvdW5kfVxuICAgICAgICBmb3JiaWRkZW49e2ZvcmJpZGRlbn1cbiAgICAgICAgdW5hdXRob3JpemVkPXt1bmF1dGhvcml6ZWR9XG4gICAgICAgIG1pc3NpbmdTbG90cz17bWlzc2luZ1Nsb3RzfVxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L0hUVFBBY2Nlc3NGYWxsYmFja0Vycm9yQm91bmRhcnk+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIDw+e2NoaWxkcmVufTwvPlxufVxuIl0sIm5hbWVzIjpbIkhUVFBBY2Nlc3NGYWxsYmFja0JvdW5kYXJ5IiwiSFRUUEFjY2Vzc0ZhbGxiYWNrRXJyb3JCb3VuZGFyeSIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29tcG9uZW50RGlkQ2F0Y2giLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJwcm9wcyIsIm1pc3NpbmdTbG90cyIsInNpemUiLCJoYXMiLCJ3YXJuaW5nTWVzc2FnZSIsImZvcm1hdHRlZFNsb3RzIiwiQXJyYXkiLCJmcm9tIiwic29ydCIsImEiLCJiIiwibG9jYWxlQ29tcGFyZSIsIm1hcCIsInNsb3QiLCJqb2luIiwid2Fybk9uY2UiLCJnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IiLCJlcnJvciIsImlzSFRUUEFjY2Vzc0ZhbGxiYWNrRXJyb3IiLCJodHRwU3RhdHVzIiwiZ2V0QWNjZXNzRmFsbGJhY2tIVFRQU3RhdHVzIiwidHJpZ2dlcmVkU3RhdHVzIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwic3RhdGUiLCJwYXRobmFtZSIsInByZXZpb3VzUGF0aG5hbWUiLCJ1bmRlZmluZWQiLCJyZW5kZXIiLCJub3RGb3VuZCIsImZvcmJpZGRlbiIsInVuYXV0aG9yaXplZCIsImNoaWxkcmVuIiwiZXJyb3JDb21wb25lbnRzIiwiSFRUUEFjY2Vzc0Vycm9yU3RhdHVzIiwiTk9UX0ZPVU5EIiwiRk9SQklEREVOIiwiVU5BVVRIT1JJWkVEIiwiaXNOb3RGb3VuZCIsImlzRm9yYmlkZGVuIiwiaXNVbmF1dGhvcml6ZWQiLCJtZXRhIiwibmFtZSIsImNvbnRlbnQiLCJnZXRBY2Nlc3NGYWxsYmFja0Vycm9yVHlwZUJ5U3RhdHVzIiwiY29uc3RydWN0b3IiLCJ1c2VVbnRyYWNrZWRQYXRobmFtZSIsInVzZUNvbnRleHQiLCJNaXNzaW5nU2xvdENvbnRleHQiLCJoYXNFcnJvckZhbGxiYWNrIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/http-access-fallback/error-boundary.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/http-access-fallback/http-access-fallback.js":
|
||
/*!***********************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/http-access-fallback/http-access-fallback.js ***!
|
||
\***********************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n HTTPAccessErrorStatus: function() {\n return HTTPAccessErrorStatus;\n },\n HTTP_ERROR_FALLBACK_ERROR_CODE: function() {\n return HTTP_ERROR_FALLBACK_ERROR_CODE;\n },\n getAccessFallbackErrorTypeByStatus: function() {\n return getAccessFallbackErrorTypeByStatus;\n },\n getAccessFallbackHTTPStatus: function() {\n return getAccessFallbackHTTPStatus;\n },\n isHTTPAccessFallbackError: function() {\n return isHTTPAccessFallbackError;\n }\n});\nconst HTTPAccessErrorStatus = {\n NOT_FOUND: 404,\n FORBIDDEN: 403,\n UNAUTHORIZED: 401\n};\nconst ALLOWED_CODES = new Set(Object.values(HTTPAccessErrorStatus));\nconst HTTP_ERROR_FALLBACK_ERROR_CODE = 'NEXT_HTTP_ERROR_FALLBACK';\nfunction isHTTPAccessFallbackError(error) {\n if (typeof error !== 'object' || error === null || !('digest' in error) || typeof error.digest !== 'string') {\n return false;\n }\n const [prefix, httpStatus] = error.digest.split(';');\n return prefix === HTTP_ERROR_FALLBACK_ERROR_CODE && ALLOWED_CODES.has(Number(httpStatus));\n}\nfunction getAccessFallbackHTTPStatus(error) {\n const httpStatus = error.digest.split(';')[1];\n return Number(httpStatus);\n}\nfunction getAccessFallbackErrorTypeByStatus(status) {\n switch(status){\n case 401:\n return 'unauthorized';\n case 403:\n return 'forbidden';\n case 404:\n return 'not-found';\n default:\n return;\n }\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=http-access-fallback.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvaHR0cC1hY2Nlc3MtZmFsbGJhY2svaHR0cC1hY2Nlc3MtZmFsbGJhY2suanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBQWFBLHFCQUFxQjtlQUFyQkE7O0lBUUFDLDhCQUE4QjtlQUE5QkE7O0lBdUNHQyxrQ0FBa0M7ZUFBbENBOztJQVBBQywyQkFBMkI7ZUFBM0JBOztJQW5CQUMseUJBQXlCO2VBQXpCQTs7O0FBckJULE1BQU1KLHdCQUF3QjtJQUNuQ0ssV0FBVztJQUNYQyxXQUFXO0lBQ1hDLGNBQWM7QUFDaEI7QUFFQSxNQUFNQyxnQkFBZ0IsSUFBSUMsSUFBSUMsT0FBT0MsTUFBTSxDQUFDWDtBQUVyQyxNQUFNQyxpQ0FBaUM7QUFhdkMsU0FBU0csMEJBQ2RRLEtBQWM7SUFFZCxJQUNFLE9BQU9BLFVBQVUsWUFDakJBLFVBQVUsUUFDVixDQUFFLGFBQVlBLEtBQUFBLENBQUksSUFDbEIsT0FBT0EsTUFBTUMsTUFBTSxLQUFLLFVBQ3hCO1FBQ0EsT0FBTztJQUNUO0lBQ0EsTUFBTSxDQUFDQyxRQUFRQyxXQUFXLEdBQUdILE1BQU1DLE1BQU0sQ0FBQ0csS0FBSyxDQUFDO0lBRWhELE9BQ0VGLFdBQVdiLGtDQUNYTyxjQUFjUyxHQUFHLENBQUNDLE9BQU9IO0FBRTdCO0FBRU8sU0FBU1osNEJBQ2RTLEtBQThCO0lBRTlCLE1BQU1HLGFBQWFILE1BQU1DLE1BQU0sQ0FBQ0csS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO0lBQzdDLE9BQU9FLE9BQU9IO0FBQ2hCO0FBRU8sU0FBU2IsbUNBQ2RpQixNQUFjO0lBRWQsT0FBUUE7UUFDTixLQUFLO1lBQ0gsT0FBTztRQUNULEtBQUs7WUFDSCxPQUFPO1FBQ1QsS0FBSztZQUNILE9BQU87UUFDVDtZQUNFO0lBQ0o7QUFDRiIsInNvdXJjZXMiOlsiL2hvbWUvc3JjL2NsaWVudC9jb21wb25lbnRzL2h0dHAtYWNjZXNzLWZhbGxiYWNrL2h0dHAtYWNjZXNzLWZhbGxiYWNrLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBIVFRQQWNjZXNzRXJyb3JTdGF0dXMgPSB7XG4gIE5PVF9GT1VORDogNDA0LFxuICBGT1JCSURERU46IDQwMyxcbiAgVU5BVVRIT1JJWkVEOiA0MDEsXG59XG5cbmNvbnN0IEFMTE9XRURfQ09ERVMgPSBuZXcgU2V0KE9iamVjdC52YWx1ZXMoSFRUUEFjY2Vzc0Vycm9yU3RhdHVzKSlcblxuZXhwb3J0IGNvbnN0IEhUVFBfRVJST1JfRkFMTEJBQ0tfRVJST1JfQ09ERSA9ICdORVhUX0hUVFBfRVJST1JfRkFMTEJBQ0snXG5cbmV4cG9ydCB0eXBlIEhUVFBBY2Nlc3NGYWxsYmFja0Vycm9yID0gRXJyb3IgJiB7XG4gIGRpZ2VzdDogYCR7dHlwZW9mIEhUVFBfRVJST1JfRkFMTEJBQ0tfRVJST1JfQ09ERX07JHtzdHJpbmd9YFxufVxuXG4vKipcbiAqIENoZWNrcyBhbiBlcnJvciB0byBkZXRlcm1pbmUgaWYgaXQncyBhbiBlcnJvciBnZW5lcmF0ZWQgYnlcbiAqIHRoZSBIVFRQIG5hdmlnYXRpb24gQVBJcyBgbm90Rm91bmQoKWAsIGBmb3JiaWRkZW4oKWAgb3IgYHVuYXV0aG9yaXplZCgpYC5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgdGhlIGVycm9yIHRoYXQgbWF5IHJlZmVyZW5jZSBhIEhUVFAgYWNjZXNzIGVycm9yXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBlcnJvciBpcyBhIEhUVFAgYWNjZXNzIGVycm9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0hUVFBBY2Nlc3NGYWxsYmFja0Vycm9yKFxuICBlcnJvcjogdW5rbm93blxuKTogZXJyb3IgaXMgSFRUUEFjY2Vzc0ZhbGxiYWNrRXJyb3Ige1xuICBpZiAoXG4gICAgdHlwZW9mIGVycm9yICE9PSAnb2JqZWN0JyB8fFxuICAgIGVycm9yID09PSBudWxsIHx8XG4gICAgISgnZGlnZXN0JyBpbiBlcnJvcikgfHxcbiAgICB0eXBlb2YgZXJyb3IuZGlnZXN0ICE9PSAnc3RyaW5nJ1xuICApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBjb25zdCBbcHJlZml4LCBodHRwU3RhdHVzXSA9IGVycm9yLmRpZ2VzdC5zcGxpdCgnOycpXG5cbiAgcmV0dXJuIChcbiAgICBwcmVmaXggPT09IEhUVFBfRVJST1JfRkFMTEJBQ0tfRVJST1JfQ09ERSAmJlxuICAgIEFMTE9XRURfQ09ERVMuaGFzKE51bWJlcihodHRwU3RhdHVzKSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWNjZXNzRmFsbGJhY2tIVFRQU3RhdHVzKFxuICBlcnJvcjogSFRUUEFjY2Vzc0ZhbGxiYWNrRXJyb3Jcbik6IG51bWJlciB7XG4gIGNvbnN0IGh0dHBTdGF0dXMgPSBlcnJvci5kaWdlc3Quc3BsaXQoJzsnKVsxXVxuICByZXR1cm4gTnVtYmVyKGh0dHBTdGF0dXMpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY2Nlc3NGYWxsYmFja0Vycm9yVHlwZUJ5U3RhdHVzKFxuICBzdGF0dXM6IG51bWJlclxuKTogJ25vdC1mb3VuZCcgfCAnZm9yYmlkZGVuJyB8ICd1bmF1dGhvcml6ZWQnIHwgdW5kZWZpbmVkIHtcbiAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICBjYXNlIDQwMTpcbiAgICAgIHJldHVybiAndW5hdXRob3JpemVkJ1xuICAgIGNhc2UgNDAzOlxuICAgICAgcmV0dXJuICdmb3JiaWRkZW4nXG4gICAgY2FzZSA0MDQ6XG4gICAgICByZXR1cm4gJ25vdC1mb3VuZCdcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJIVFRQQWNjZXNzRXJyb3JTdGF0dXMiLCJIVFRQX0VSUk9SX0ZBTExCQUNLX0VSUk9SX0NPREUiLCJnZXRBY2Nlc3NGYWxsYmFja0Vycm9yVHlwZUJ5U3RhdHVzIiwiZ2V0QWNjZXNzRmFsbGJhY2tIVFRQU3RhdHVzIiwiaXNIVFRQQWNjZXNzRmFsbGJhY2tFcnJvciIsIk5PVF9GT1VORCIsIkZPUkJJRERFTiIsIlVOQVVUSE9SSVpFRCIsIkFMTE9XRURfQ09ERVMiLCJTZXQiLCJPYmplY3QiLCJ2YWx1ZXMiLCJlcnJvciIsImRpZ2VzdCIsInByZWZpeCIsImh0dHBTdGF0dXMiLCJzcGxpdCIsImhhcyIsIk51bWJlciIsInN0YXR1cyJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/http-access-fallback/http-access-fallback.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/is-next-router-error.js":
|
||
/*!**************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/is-next-router-error.js ***!
|
||
\**************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isNextRouterError\", ({\n enumerable: true,\n get: function() {\n return isNextRouterError;\n }\n}));\nconst _httpaccessfallback = __webpack_require__(/*! ./http-access-fallback/http-access-fallback */ \"(app-pages-browser)/./node_modules/next/dist/client/components/http-access-fallback/http-access-fallback.js\");\nconst _redirecterror = __webpack_require__(/*! ./redirect-error */ \"(app-pages-browser)/./node_modules/next/dist/client/components/redirect-error.js\");\nfunction isNextRouterError(error) {\n return (0, _redirecterror.isRedirectError)(error) || (0, _httpaccessfallback.isHTTPAccessFallbackError)(error);\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=is-next-router-error.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvaXMtbmV4dC1yb3V0ZXItZXJyb3IuanMiLCJtYXBwaW5ncyI6Ijs7OztxREFXZ0JBOzs7ZUFBQUE7OztnREFSVDsyQ0FDNkM7QUFPN0MsU0FBU0Esa0JBQ2RDLEtBQWM7SUFFZCxPQUFPQyxDQUFBQSxHQUFBQSxlQUFBQSxlQUFBQSxFQUFnQkQsVUFBVUUsQ0FBQUEsR0FBQUEsb0JBQUFBLHlCQUFBQSxFQUEwQkY7QUFDN0QiLCJzb3VyY2VzIjpbIi9ob21lL05pY2hvbGFpL3NyYy9jbGllbnQvY29tcG9uZW50cy9pcy1uZXh0LXJvdXRlci1lcnJvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBpc0hUVFBBY2Nlc3NGYWxsYmFja0Vycm9yLFxuICB0eXBlIEhUVFBBY2Nlc3NGYWxsYmFja0Vycm9yLFxufSBmcm9tICcuL2h0dHAtYWNjZXNzLWZhbGxiYWNrL2h0dHAtYWNjZXNzLWZhbGxiYWNrJ1xuaW1wb3J0IHsgaXNSZWRpcmVjdEVycm9yLCB0eXBlIFJlZGlyZWN0RXJyb3IgfSBmcm9tICcuL3JlZGlyZWN0LWVycm9yJ1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZXJyb3IgaXMgYSBuYXZpZ2F0aW9uIHNpZ25hbCBlcnJvci4gVGhlc2UgZXJyb3JzIGFyZVxuICogdGhyb3duIGJ5IHVzZXIgY29kZSB0byBwZXJmb3JtIG5hdmlnYXRpb24gb3BlcmF0aW9ucyBhbmQgaW50ZXJydXB0IHRoZSBSZWFjdFxuICogcmVuZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOZXh0Um91dGVyRXJyb3IoXG4gIGVycm9yOiB1bmtub3duXG4pOiBlcnJvciBpcyBSZWRpcmVjdEVycm9yIHwgSFRUUEFjY2Vzc0ZhbGxiYWNrRXJyb3Ige1xuICByZXR1cm4gaXNSZWRpcmVjdEVycm9yKGVycm9yKSB8fCBpc0hUVFBBY2Nlc3NGYWxsYmFja0Vycm9yKGVycm9yKVxufVxuIl0sIm5hbWVzIjpbImlzTmV4dFJvdXRlckVycm9yIiwiZXJyb3IiLCJpc1JlZGlyZWN0RXJyb3IiLCJpc0hUVFBBY2Nlc3NGYWxsYmFja0Vycm9yIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/is-next-router-error.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/links.js":
|
||
/*!***********************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/links.js ***!
|
||
\***********************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n IDLE_LINK_STATUS: function() {\n return IDLE_LINK_STATUS;\n },\n PENDING_LINK_STATUS: function() {\n return PENDING_LINK_STATUS;\n },\n mountFormInstance: function() {\n return mountFormInstance;\n },\n mountLinkInstance: function() {\n return mountLinkInstance;\n },\n onLinkVisibilityChanged: function() {\n return onLinkVisibilityChanged;\n },\n onNavigationIntent: function() {\n return onNavigationIntent;\n },\n pingVisibleLinks: function() {\n return pingVisibleLinks;\n },\n setLinkForCurrentNavigation: function() {\n return setLinkForCurrentNavigation;\n },\n unmountLinkForCurrentNavigation: function() {\n return unmountLinkForCurrentNavigation;\n },\n unmountPrefetchableInstance: function() {\n return unmountPrefetchableInstance;\n }\n});\nconst _approuterinstance = __webpack_require__(/*! ./app-router-instance */ \"(app-pages-browser)/./node_modules/next/dist/client/components/app-router-instance.js\");\nconst _approuter = __webpack_require__(/*! ./app-router */ \"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js\");\nconst _routerreducertypes = __webpack_require__(/*! ./router-reducer/router-reducer-types */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst _segmentcache = __webpack_require__(/*! ./segment-cache */ \"(app-pages-browser)/./node_modules/next/dist/client/components/segment-cache.js\");\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n// Tracks the most recently navigated link instance. When null, indicates\n// the current navigation was not initiated by a link click.\nlet linkForMostRecentNavigation = null;\nconst PENDING_LINK_STATUS = {\n pending: true\n};\nconst IDLE_LINK_STATUS = {\n pending: false\n};\nfunction setLinkForCurrentNavigation(link) {\n (0, _react.startTransition)(()=>{\n linkForMostRecentNavigation == null ? void 0 : linkForMostRecentNavigation.setOptimisticLinkStatus(IDLE_LINK_STATUS);\n link == null ? void 0 : link.setOptimisticLinkStatus(PENDING_LINK_STATUS);\n linkForMostRecentNavigation = link;\n });\n}\nfunction unmountLinkForCurrentNavigation(link) {\n if (linkForMostRecentNavigation === link) {\n linkForMostRecentNavigation = null;\n }\n}\n// Use a WeakMap to associate a Link instance with its DOM element. This is\n// used by the IntersectionObserver to track the link's visibility.\nconst prefetchable = typeof WeakMap === 'function' ? new WeakMap() : new Map();\n// A Set of the currently visible links. We re-prefetch visible links after a\n// cache invalidation, or when the current URL changes. It's a separate data\n// structure from the WeakMap above because only the visible links need to\n// be enumerated.\nconst prefetchableAndVisible = new Set();\n// A single IntersectionObserver instance shared by all <Link> components.\nconst observer = typeof IntersectionObserver === 'function' ? new IntersectionObserver(handleIntersect, {\n rootMargin: '200px'\n}) : null;\nfunction observeVisibility(element, instance) {\n const existingInstance = prefetchable.get(element);\n if (existingInstance !== undefined) {\n // This shouldn't happen because each <Link> component should have its own\n // anchor tag instance, but it's defensive coding to avoid a memory leak in\n // case there's a logical error somewhere else.\n unmountPrefetchableInstance(element);\n }\n // Only track prefetchable links that have a valid prefetch URL\n prefetchable.set(element, instance);\n if (observer !== null) {\n observer.observe(element);\n }\n}\nfunction coercePrefetchableUrl(href) {\n try {\n return (0, _approuter.createPrefetchURL)(href);\n } catch (e) {\n // createPrefetchURL sometimes throws an error if an invalid URL is\n // provided, though I'm not sure if it's actually necessary.\n // TODO: Consider removing the throw from the inner function, or change it\n // to reportError. Or maybe the error isn't even necessary for automatic\n // prefetches, just navigations.\n const reportErrorFn = typeof reportError === 'function' ? reportError : console.error;\n reportErrorFn(\"Cannot prefetch '\" + href + \"' because it cannot be converted to a URL.\");\n return null;\n }\n}\nfunction mountLinkInstance(element, href, router, kind, prefetchEnabled, setOptimisticLinkStatus) {\n if (prefetchEnabled) {\n const prefetchURL = coercePrefetchableUrl(href);\n if (prefetchURL !== null) {\n const instance = {\n router,\n kind,\n isVisible: false,\n prefetchTask: null,\n prefetchHref: prefetchURL.href,\n setOptimisticLinkStatus\n };\n // We only observe the link's visibility if it's prefetchable. For\n // example, this excludes links to external URLs.\n observeVisibility(element, instance);\n return instance;\n }\n }\n // If the link is not prefetchable, we still create an instance so we can\n // track its optimistic state (i.e. useLinkStatus).\n const instance = {\n router,\n kind,\n isVisible: false,\n prefetchTask: null,\n prefetchHref: null,\n setOptimisticLinkStatus\n };\n return instance;\n}\nfunction mountFormInstance(element, href, router, kind) {\n const prefetchURL = coercePrefetchableUrl(href);\n if (prefetchURL === null) {\n // This href is not prefetchable, so we don't track it.\n // TODO: We currently observe/unobserve a form every time its href changes.\n // For Links, this isn't a big deal because the href doesn't usually change,\n // but for forms it's extremely common. We should optimize this.\n return;\n }\n const instance = {\n router,\n kind,\n isVisible: false,\n prefetchTask: null,\n prefetchHref: prefetchURL.href,\n setOptimisticLinkStatus: null\n };\n observeVisibility(element, instance);\n}\nfunction unmountPrefetchableInstance(element) {\n const instance = prefetchable.get(element);\n if (instance !== undefined) {\n prefetchable.delete(element);\n prefetchableAndVisible.delete(instance);\n const prefetchTask = instance.prefetchTask;\n if (prefetchTask !== null) {\n (0, _segmentcache.cancelPrefetchTask)(prefetchTask);\n }\n }\n if (observer !== null) {\n observer.unobserve(element);\n }\n}\nfunction handleIntersect(entries) {\n for (const entry of entries){\n // Some extremely old browsers or polyfills don't reliably support\n // isIntersecting so we check intersectionRatio instead. (Do we care? Not\n // really. But whatever this is fine.)\n const isVisible = entry.intersectionRatio > 0;\n onLinkVisibilityChanged(entry.target, isVisible);\n }\n}\nfunction onLinkVisibilityChanged(element, isVisible) {\n if (true) {\n // Prefetching on viewport is disabled in development for performance\n // reasons, because it requires compiling the target page.\n // TODO: Investigate re-enabling this.\n return;\n }\n const instance = prefetchable.get(element);\n if (instance === undefined) {\n return;\n }\n instance.isVisible = isVisible;\n if (isVisible) {\n prefetchableAndVisible.add(instance);\n } else {\n prefetchableAndVisible.delete(instance);\n }\n rescheduleLinkPrefetch(instance, _segmentcache.PrefetchPriority.Default);\n}\nfunction onNavigationIntent(element, unstable_upgradeToDynamicPrefetch) {\n const instance = prefetchable.get(element);\n if (instance === undefined) {\n return;\n }\n // Prefetch the link on hover/touchstart.\n if (instance !== undefined) {\n if (false) {}\n rescheduleLinkPrefetch(instance, _segmentcache.PrefetchPriority.Intent);\n }\n}\nfunction rescheduleLinkPrefetch(instance, priority) {\n const existingPrefetchTask = instance.prefetchTask;\n if (!instance.isVisible) {\n // Cancel any in-progress prefetch task. (If it already finished then this\n // is a no-op.)\n if (existingPrefetchTask !== null) {\n (0, _segmentcache.cancelPrefetchTask)(existingPrefetchTask);\n }\n // We don't need to reset the prefetchTask to null upon cancellation; an\n // old task object can be rescheduled with reschedulePrefetchTask. This is a\n // micro-optimization but also makes the code simpler (don't need to\n // worry about whether an old task object is stale).\n return;\n }\n if (true) {\n // The old prefetch implementation does not have different priority levels.\n // Just schedule a new prefetch task.\n prefetchWithOldCacheImplementation(instance);\n return;\n }\n const appRouterState = (0, _approuterinstance.getCurrentAppRouterState)();\n if (appRouterState !== null) {\n const treeAtTimeOfPrefetch = appRouterState.tree;\n if (existingPrefetchTask === null) {\n // Initiate a prefetch task.\n const nextUrl = appRouterState.nextUrl;\n const cacheKey = (0, _segmentcache.createCacheKey)(instance.prefetchHref, nextUrl);\n instance.prefetchTask = (0, _segmentcache.schedulePrefetchTask)(cacheKey, treeAtTimeOfPrefetch, instance.kind === _routerreducertypes.PrefetchKind.FULL, priority, null);\n } else {\n // We already have an old task object that we can reschedule. This is\n // effectively the same as canceling the old task and creating a new one.\n (0, _segmentcache.reschedulePrefetchTask)(existingPrefetchTask, treeAtTimeOfPrefetch, instance.kind === _routerreducertypes.PrefetchKind.FULL, priority);\n }\n }\n}\nfunction pingVisibleLinks(nextUrl, tree) {\n // For each currently visible link, cancel the existing prefetch task (if it\n // exists) and schedule a new one. This is effectively the same as if all the\n // visible links left and then re-entered the viewport.\n //\n // This is called when the Next-Url or the base tree changes, since those\n // may affect the result of a prefetch task. It's also called after a\n // cache invalidation.\n for (const instance of prefetchableAndVisible){\n const task = instance.prefetchTask;\n if (task !== null && !(0, _segmentcache.isPrefetchTaskDirty)(task, nextUrl, tree)) {\n continue;\n }\n // Something changed. Cancel the existing prefetch task and schedule a\n // new one.\n if (task !== null) {\n (0, _segmentcache.cancelPrefetchTask)(task);\n }\n const cacheKey = (0, _segmentcache.createCacheKey)(instance.prefetchHref, nextUrl);\n instance.prefetchTask = (0, _segmentcache.schedulePrefetchTask)(cacheKey, tree, instance.kind === _routerreducertypes.PrefetchKind.FULL, _segmentcache.PrefetchPriority.Default, null);\n }\n}\nfunction prefetchWithOldCacheImplementation(instance) {\n // This is the path used when the Segment Cache is not enabled.\n if (false) {}\n const doPrefetch = async ()=>{\n // note that `appRouter.prefetch()` is currently sync,\n // so we have to wrap this call in an async function to be able to catch() errors below.\n return instance.router.prefetch(instance.prefetchHref, {\n kind: instance.kind\n });\n };\n // Prefetch the page if asked (only in the client)\n // We need to handle a prefetch error here since we may be\n // loading with priority which can reject but we don't\n // want to force navigation since this is only a prefetch\n doPrefetch().catch((err)=>{\n if (true) {\n // rethrow to show invalid URL errors\n throw err;\n }\n });\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=links.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvbGlua3MuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBK0RhQSxnQkFBZ0I7ZUFBaEJBOztJQUhBQyxtQkFBbUI7ZUFBbkJBOztJQW9IR0MsaUJBQWlCO2VBQWpCQTs7SUF0Q0FDLGlCQUFpQjtlQUFqQkE7O0lBd0ZBQyx1QkFBdUI7ZUFBdkJBOztJQXNCQUMsa0JBQWtCO2VBQWxCQTs7SUEwRUFDLGdCQUFnQjtlQUFoQkE7O0lBN1BBQywyQkFBMkI7ZUFBM0JBOztJQVNBQywrQkFBK0I7ZUFBL0JBOztJQTJIQUMsMkJBQTJCO2VBQTNCQTs7OytDQXZNeUI7dUNBQ1A7Z0RBQ0w7MENBQ087bUNBU0o7QUF5Q2hDLHlFQUF5RTtBQUN6RSw0REFBNEQ7QUFDNUQsSUFBSUMsOEJBQW1EO0FBR2hELE1BQU1ULHNCQUFzQjtJQUFFVSxTQUFTO0FBQUs7QUFHNUMsTUFBTVgsbUJBQW1CO0lBQUVXLFNBQVM7QUFBTTtBQU0xQyxTQUFTSiw0QkFBNEJLLElBQXlCO0lBQ25FQyxDQUFBQSxHQUFBQSxPQUFBQSxlQUFBQSxFQUFnQjtRQUNkSCwrQkFBQUEsT0FBQUEsS0FBQUEsSUFBQUEsNEJBQTZCSSx1QkFBdUIsQ0FBQ2Q7UUFDckRZLFFBQUFBLE9BQUFBLEtBQUFBLElBQUFBLEtBQU1FLHVCQUF1QixDQUFDYjtRQUM5QlMsOEJBQThCRTtJQUNoQztBQUNGO0FBR08sU0FBU0osZ0NBQWdDSSxJQUFrQjtJQUNoRSxJQUFJRixnQ0FBZ0NFLE1BQU07UUFDeENGLDhCQUE4QjtJQUNoQztBQUNGO0FBRUEsMkVBQTJFO0FBQzNFLG1FQUFtRTtBQUNuRSxNQUFNSyxlQUdKLE9BQU9DLFlBQVksYUFBYSxJQUFJQSxZQUFZLElBQUlDO0FBRXRELDZFQUE2RTtBQUM3RSw0RUFBNEU7QUFDNUUsMEVBQTBFO0FBQzFFLGlCQUFpQjtBQUNqQixNQUFNQyx5QkFBb0QsSUFBSUM7QUFFOUQsMEVBQTBFO0FBQzFFLE1BQU1DLFdBQ0osT0FBT0MseUJBQXlCLGFBQzVCLElBQUlBLHFCQUFxQkMsaUJBQWlCO0lBQ3hDQyxZQUFZO0FBQ2QsS0FDQTtBQUVOLFNBQVNDLGtCQUFrQkMsT0FBZ0IsRUFBRUMsUUFBOEI7SUFDekUsTUFBTUMsbUJBQW1CWixhQUFhYSxHQUFHLENBQUNIO0lBQzFDLElBQUlFLHFCQUFxQkUsV0FBVztRQUNsQywwRUFBMEU7UUFDMUUsMkVBQTJFO1FBQzNFLCtDQUErQztRQUMvQ3BCLDRCQUE0QmdCO0lBQzlCO0lBQ0EsK0RBQStEO0lBQy9EVixhQUFhZSxHQUFHLENBQUNMLFNBQVNDO0lBQzFCLElBQUlOLGFBQWEsTUFBTTtRQUNyQkEsU0FBU1csT0FBTyxDQUFDTjtJQUNuQjtBQUNGO0FBRUEsU0FBU08sc0JBQXNCQyxJQUFZO0lBQ3pDLElBQUk7UUFDRixPQUFPQyxDQUFBQSxHQUFBQSxXQUFBQSxpQkFBQUEsRUFBa0JEO0lBQzNCLEVBQUUsVUFBTTtRQUNOLG1FQUFtRTtRQUNuRSw0REFBNEQ7UUFDNUQsMEVBQTBFO1FBQzFFLHdFQUF3RTtRQUN4RSxnQ0FBZ0M7UUFDaEMsTUFBTUUsZ0JBQ0osT0FBT0MsZ0JBQWdCLGFBQWFBLGNBQWNDLFFBQVFDLEtBQUs7UUFDakVILGNBQ0csc0JBQW1CRixPQUFLO1FBRTNCLE9BQU87SUFDVDtBQUNGO0FBRU8sU0FBUzlCLGtCQUNkc0IsT0FBb0IsRUFDcEJRLElBQVksRUFDWk0sTUFBeUIsRUFDekJDLElBQTJDLEVBQzNDQyxlQUF3QixFQUN4QjNCLHVCQUErRDtJQUUvRCxJQUFJMkIsaUJBQWlCO1FBQ25CLE1BQU1DLGNBQWNWLHNCQUFzQkM7UUFDMUMsSUFBSVMsZ0JBQWdCLE1BQU07WUFDeEIsTUFBTWhCLFdBQXFDO2dCQUN6Q2E7Z0JBQ0FDO2dCQUNBRyxXQUFXO2dCQUNYQyxjQUFjO2dCQUNkQyxjQUFjSCxZQUFZVCxJQUFJO2dCQUM5Qm5CO1lBQ0Y7WUFDQSxrRUFBa0U7WUFDbEUsaURBQWlEO1lBQ2pEVSxrQkFBa0JDLFNBQVNDO1lBQzNCLE9BQU9BO1FBQ1Q7SUFDRjtJQUNBLHlFQUF5RTtJQUN6RSxtREFBbUQ7SUFDbkQsTUFBTUEsV0FBd0M7UUFDNUNhO1FBQ0FDO1FBQ0FHLFdBQVc7UUFDWEMsY0FBYztRQUNkQyxjQUFjO1FBQ2QvQjtJQUNGO0lBQ0EsT0FBT1k7QUFDVDtBQUVPLFNBQVN4QixrQkFDZHVCLE9BQXdCLEVBQ3hCUSxJQUFZLEVBQ1pNLE1BQXlCLEVBQ3pCQyxJQUEyQztJQUUzQyxNQUFNRSxjQUFjVixzQkFBc0JDO0lBQzFDLElBQUlTLGdCQUFnQixNQUFNO1FBQ3hCLHVEQUF1RDtRQUN2RCwyRUFBMkU7UUFDM0UsNEVBQTRFO1FBQzVFLGdFQUFnRTtRQUNoRTtJQUNGO0lBQ0EsTUFBTWhCLFdBQXlCO1FBQzdCYTtRQUNBQztRQUNBRyxXQUFXO1FBQ1hDLGNBQWM7UUFDZEMsY0FBY0gsWUFBWVQsSUFBSTtRQUM5Qm5CLHlCQUF5QjtJQUMzQjtJQUNBVSxrQkFBa0JDLFNBQVNDO0FBQzdCO0FBRU8sU0FBU2pCLDRCQUE0QmdCLE9BQWdCO0lBQzFELE1BQU1DLFdBQVdYLGFBQWFhLEdBQUcsQ0FBQ0g7SUFDbEMsSUFBSUMsYUFBYUcsV0FBVztRQUMxQmQsYUFBYStCLE1BQU0sQ0FBQ3JCO1FBQ3BCUCx1QkFBdUI0QixNQUFNLENBQUNwQjtRQUM5QixNQUFNa0IsZUFBZWxCLFNBQVNrQixZQUFZO1FBQzFDLElBQUlBLGlCQUFpQixNQUFNO1lBQ3pCRyxDQUFBQSxHQUFBQSxjQUFBQSxrQkFBQUEsRUFBbUJIO1FBQ3JCO0lBQ0Y7SUFDQSxJQUFJeEIsYUFBYSxNQUFNO1FBQ3JCQSxTQUFTNEIsU0FBUyxDQUFDdkI7SUFDckI7QUFDRjtBQUVBLFNBQVNILGdCQUFnQjJCLE9BQXlDO0lBQ2hFLEtBQUssTUFBTUMsU0FBU0QsUUFBUztRQUMzQixrRUFBa0U7UUFDbEUseUVBQXlFO1FBQ3pFLHNDQUFzQztRQUN0QyxNQUFNTixZQUFZTyxNQUFNQyxpQkFBaUIsR0FBRztRQUM1Qy9DLHdCQUF3QjhDLE1BQU1FLE1BQU0sRUFBdUJUO0lBQzdEO0FBQ0Y7QUFFTyxTQUFTdkMsd0JBQXdCcUIsT0FBZ0IsRUFBRWtCLFNBQWtCO0lBQzFFLElBQUlVLElBQW9CLEVBQW1CO1FBQ3pDLHFFQUFxRTtRQUNyRSwwREFBMEQ7UUFDMUQsc0NBQXNDO1FBQ3RDO0lBQ0Y7SUFFQSxNQUFNM0IsV0FBV1gsYUFBYWEsR0FBRyxDQUFDSDtJQUNsQyxJQUFJQyxhQUFhRyxXQUFXO1FBQzFCO0lBQ0Y7SUFFQUgsU0FBU2lCLFNBQVMsR0FBR0E7SUFDckIsSUFBSUEsV0FBVztRQUNiekIsdUJBQXVCc0MsR0FBRyxDQUFDOUI7SUFDN0IsT0FBTztRQUNMUix1QkFBdUI0QixNQUFNLENBQUNwQjtJQUNoQztJQUNBK0IsdUJBQXVCL0IsVUFBVWdDLGNBQUFBLGdCQUFnQixDQUFDQyxPQUFPO0FBQzNEO0FBRU8sU0FBU3RELG1CQUNkb0IsT0FBd0MsRUFDeENtQyxpQ0FBMEM7SUFFMUMsTUFBTWxDLFdBQVdYLGFBQWFhLEdBQUcsQ0FBQ0g7SUFDbEMsSUFBSUMsYUFBYUcsV0FBVztRQUMxQjtJQUNGO0lBQ0EseUNBQXlDO0lBQ3pDLElBQUlILGFBQWFHLFdBQVc7UUFDMUIsSUFDRXdCLEtBQ2lDTyxFQUNqQyxFQUdEO1FBQ0RILHVCQUF1Qi9CLFVBQVVnQyxjQUFBQSxnQkFBZ0IsQ0FBQ00sTUFBTTtJQUMxRDtBQUNGO0FBRUEsU0FBU1AsdUJBQ1AvQixRQUE4QixFQUM5QnVDLFFBQTREO0lBRTVELE1BQU1DLHVCQUF1QnhDLFNBQVNrQixZQUFZO0lBRWxELElBQUksQ0FBQ2xCLFNBQVNpQixTQUFTLEVBQUU7UUFDdkIsMEVBQTBFO1FBQzFFLGVBQWU7UUFDZixJQUFJdUIseUJBQXlCLE1BQU07WUFDakNuQixDQUFBQSxHQUFBQSxjQUFBQSxrQkFBQUEsRUFBbUJtQjtRQUNyQjtRQUNBLHdFQUF3RTtRQUN4RSw0RUFBNEU7UUFDNUUsb0VBQW9FO1FBQ3BFLG9EQUFvRDtRQUNwRDtJQUNGO0lBRUEsSUFBSSxJQUF3QyxFQUFFO1FBQzVDLDJFQUEyRTtRQUMzRSxxQ0FBcUM7UUFDckNFLG1DQUFtQzFDO1FBQ25DO0lBQ0Y7SUFFQSxNQUFNMkMsaUJBQWlCQyxDQUFBQSxHQUFBQSxtQkFBQUEsd0JBQUFBO0lBQ3ZCLElBQUlELG1CQUFtQixNQUFNO1FBQzNCLE1BQU1FLHVCQUF1QkYsZUFBZUcsSUFBSTtRQUNoRCxJQUFJTix5QkFBeUIsTUFBTTtZQUNqQyw0QkFBNEI7WUFDNUIsTUFBTU8sVUFBVUosZUFBZUksT0FBTztZQUN0QyxNQUFNQyxXQUFXQyxDQUFBQSxHQUFBQSxjQUFBQSxjQUFBQSxFQUFlakQsU0FBU21CLFlBQVksRUFBRTRCO1lBQ3ZEL0MsU0FBU2tCLFlBQVksR0FBR2dDLENBQUFBLEdBQUFBLGNBQUFBLG9CQUFBQSxFQUN0QkYsVUFDQUgsc0JBQ0E3QyxTQUFTYyxJQUFJLEtBQUtzQixvQkFBQUEsWUFBWSxDQUFDQyxJQUFJLEVBQ25DRSxVQUNBO1FBRUosT0FBTztZQUNMLHFFQUFxRTtZQUNyRSx5RUFBeUU7WUFDekVZLENBQUFBLEdBQUFBLGNBQUFBLHNCQUFBQSxFQUNFWCxzQkFDQUssc0JBQ0E3QyxTQUFTYyxJQUFJLEtBQUtzQixvQkFBQUEsWUFBWSxDQUFDQyxJQUFJLEVBQ25DRTtRQUVKO0lBQ0Y7QUFDRjtBQUVPLFNBQVMzRCxpQkFDZG1FLE9BQXNCLEVBQ3RCRCxJQUF1QjtJQUV2Qiw0RUFBNEU7SUFDNUUsNkVBQTZFO0lBQzdFLHVEQUF1RDtJQUN2RCxFQUFFO0lBQ0YseUVBQXlFO0lBQ3pFLHFFQUFxRTtJQUNyRSxzQkFBc0I7SUFDdEIsS0FBSyxNQUFNOUMsWUFBWVIsdUJBQXdCO1FBQzdDLE1BQU00RCxPQUFPcEQsU0FBU2tCLFlBQVk7UUFDbEMsSUFBSWtDLFNBQVMsUUFBUSxDQUFDQyxDQUFBQSxHQUFBQSxjQUFBQSxtQkFBQUEsRUFBb0JELE1BQU1MLFNBQVNELE9BQU87WUFHOUQ7UUFDRjtRQUNBLHNFQUFzRTtRQUN0RSxXQUFXO1FBQ1gsSUFBSU0sU0FBUyxNQUFNO1lBQ2pCL0IsQ0FBQUEsR0FBQUEsY0FBQUEsa0JBQUFBLEVBQW1CK0I7UUFDckI7UUFDQSxNQUFNSixXQUFXQyxDQUFBQSxHQUFBQSxjQUFBQSxjQUFBQSxFQUFlakQsU0FBU21CLFlBQVksRUFBRTRCO1FBQ3ZEL0MsU0FBU2tCLFlBQVksR0FBR2dDLENBQUFBLEdBQUFBLGNBQUFBLG9CQUFBQSxFQUN0QkYsVUFDQUYsTUFDQTlDLFNBQVNjLElBQUksS0FBS3NCLG9CQUFBQSxZQUFZLENBQUNDLElBQUksRUFDbkNMLGNBQUFBLGdCQUFnQixDQUFDQyxPQUFPLEVBQ3hCO0lBRUo7QUFDRjtBQUVBLFNBQVNTLG1DQUFtQzFDLFFBQThCO0lBQ3hFLCtEQUErRDtJQUMvRCxJQUFJLEtBQTZCLEVBQUUsRUFFbEM7SUFFRCxNQUFNdUQsYUFBYTtRQUNqQixzREFBc0Q7UUFDdEQsd0ZBQXdGO1FBQ3hGLE9BQU92RCxTQUFTYSxNQUFNLENBQUMyQyxRQUFRLENBQUN4RCxTQUFTbUIsWUFBWSxFQUFFO1lBQ3JETCxNQUFNZCxTQUFTYyxJQUFJO1FBQ3JCO0lBQ0Y7SUFFQSxrREFBa0Q7SUFDbEQsMERBQTBEO0lBQzFELHNEQUFzRDtJQUN0RCx5REFBeUQ7SUFDekR5QyxhQUFhRSxLQUFLLENBQUMsQ0FBQ0M7UUFDbEIsSUE1UkosSUE0UjRCLEVBQW1CO1lBQ3pDLHFDQUFxQztZQUNyQyxNQUFNQTtRQUNSO0lBQ0Y7QUFDRiIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvc3JjL2NsaWVudC9jb21wb25lbnRzL2xpbmtzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmxpZ2h0Um91dGVyU3RhdGUgfSBmcm9tICcuLi8uLi9zZXJ2ZXIvYXBwLXJlbmRlci90eXBlcydcbmltcG9ydCB0eXBlIHsgQXBwUm91dGVySW5zdGFuY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvbGliL2FwcC1yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZSdcbmltcG9ydCB7IGdldEN1cnJlbnRBcHBSb3V0ZXJTdGF0ZSB9IGZyb20gJy4vYXBwLXJvdXRlci1pbnN0YW5jZSdcbmltcG9ydCB7IGNyZWF0ZVByZWZldGNoVVJMIH0gZnJvbSAnLi9hcHAtcm91dGVyJ1xuaW1wb3J0IHsgUHJlZmV0Y2hLaW5kIH0gZnJvbSAnLi9yb3V0ZXItcmVkdWNlci9yb3V0ZXItcmVkdWNlci10eXBlcydcbmltcG9ydCB7IGlzUHJlZmV0Y2hUYXNrRGlydHkgfSBmcm9tICcuL3NlZ21lbnQtY2FjaGUnXG5pbXBvcnQgeyBjcmVhdGVDYWNoZUtleSB9IGZyb20gJy4vc2VnbWVudC1jYWNoZSdcbmltcG9ydCB7XG4gIHR5cGUgUHJlZmV0Y2hUYXNrLFxuICBQcmVmZXRjaFByaW9yaXR5LFxuICBzY2hlZHVsZVByZWZldGNoVGFzayBhcyBzY2hlZHVsZVNlZ21lbnRQcmVmZXRjaFRhc2ssXG4gIGNhbmNlbFByZWZldGNoVGFzayxcbiAgcmVzY2hlZHVsZVByZWZldGNoVGFzayxcbn0gZnJvbSAnLi9zZWdtZW50LWNhY2hlJ1xuaW1wb3J0IHsgc3RhcnRUcmFuc2l0aW9uIH0gZnJvbSAncmVhY3QnXG5cbnR5cGUgTGlua0VsZW1lbnQgPSBIVE1MQW5jaG9yRWxlbWVudCB8IFNWR0FFbGVtZW50XG5cbnR5cGUgRWxlbWVudCA9IExpbmtFbGVtZW50IHwgSFRNTEZvcm1FbGVtZW50XG5cbi8vIFByb3BlcnRpZXMgdGhhdCBhcmUgc2hhcmVkIGJldHdlZW4gTGluayBhbmQgRm9ybSBpbnN0YW5jZXMuIFdlIHVzZSB0aGUgc2FtZVxuLy8gc2hhcGUgZm9yIGJvdGggdG8gcHJldmVudCBhIHBvbHltb3JwaGljIGRlLW9wdCBpbiB0aGUgVk0uXG50eXBlIExpbmtPckZvcm1JbnN0YW5jZVNoYXJlZCA9IHtcbiAgcm91dGVyOiBBcHBSb3V0ZXJJbnN0YW5jZVxuICBraW5kOiBQcmVmZXRjaEtpbmQuQVVUTyB8IFByZWZldGNoS2luZC5GVUxMXG5cbiAgaXNWaXNpYmxlOiBib29sZWFuXG5cbiAgLy8gVGhlIG1vc3QgcmVjZW50bHkgaW5pdGlhdGVkIHByZWZldGNoIHRhc2suIEl0IG1heSBvciBtYXkgbm90IGhhdmVcbiAgLy8gYWxyZWFkeSBjb21wbGV0ZWQuIFRoZSBzYW1lIHByZWZldGNoIHRhc2sgb2JqZWN0IGNhbiBiZSByZXVzZWQgYWNyb3NzXG4gIC8vIG11bHRpcGxlIHByZWZldGNoZXMgb2YgdGhlIHNhbWUgbGluay5cbiAgcHJlZmV0Y2hUYXNrOiBQcmVmZXRjaFRhc2sgfCBudWxsXG59XG5cbmV4cG9ydCB0eXBlIEZvcm1JbnN0YW5jZSA9IExpbmtPckZvcm1JbnN0YW5jZVNoYXJlZCAmIHtcbiAgcHJlZmV0Y2hIcmVmOiBzdHJpbmdcbiAgc2V0T3B0aW1pc3RpY0xpbmtTdGF0dXM6IG51bGxcbn1cblxudHlwZSBQcmVmZXRjaGFibGVMaW5rSW5zdGFuY2UgPSBMaW5rT3JGb3JtSW5zdGFuY2VTaGFyZWQgJiB7XG4gIHByZWZldGNoSHJlZjogc3RyaW5nXG4gIHNldE9wdGltaXN0aWNMaW5rU3RhdHVzOiAoc3RhdHVzOiB7IHBlbmRpbmc6IGJvb2xlYW4gfSkgPT4gdm9pZFxufVxuXG50eXBlIE5vblByZWZldGNoYWJsZUxpbmtJbnN0YW5jZSA9IExpbmtPckZvcm1JbnN0YW5jZVNoYXJlZCAmIHtcbiAgcHJlZmV0Y2hIcmVmOiBudWxsXG4gIHNldE9wdGltaXN0aWNMaW5rU3RhdHVzOiAoc3RhdHVzOiB7IHBlbmRpbmc6IGJvb2xlYW4gfSkgPT4gdm9pZFxufVxuXG50eXBlIFByZWZldGNoYWJsZUluc3RhbmNlID0gUHJlZmV0Y2hhYmxlTGlua0luc3RhbmNlIHwgRm9ybUluc3RhbmNlXG5cbmV4cG9ydCB0eXBlIExpbmtJbnN0YW5jZSA9XG4gIHwgUHJlZmV0Y2hhYmxlTGlua0luc3RhbmNlXG4gIHwgTm9uUHJlZmV0Y2hhYmxlTGlua0luc3RhbmNlXG5cbi8vIFRyYWNrcyB0aGUgbW9zdCByZWNlbnRseSBuYXZpZ2F0ZWQgbGluayBpbnN0YW5jZS4gV2hlbiBudWxsLCBpbmRpY2F0ZXNcbi8vIHRoZSBjdXJyZW50IG5hdmlnYXRpb24gd2FzIG5vdCBpbml0aWF0ZWQgYnkgYSBsaW5rIGNsaWNrLlxubGV0IGxpbmtGb3JNb3N0UmVjZW50TmF2aWdhdGlvbjogTGlua0luc3RhbmNlIHwgbnVsbCA9IG51bGxcblxuLy8gU3RhdHVzIG9iamVjdCBpbmRpY2F0aW5nIGxpbmsgaXMgcGVuZGluZ1xuZXhwb3J0IGNvbnN0IFBFTkRJTkdfTElOS19TVEFUVVMgPSB7IHBlbmRpbmc6IHRydWUgfVxuXG4vLyBTdGF0dXMgb2JqZWN0IGluZGljYXRpbmcgbGluayBpcyBpZGxlXG5leHBvcnQgY29uc3QgSURMRV9MSU5LX1NUQVRVUyA9IHsgcGVuZGluZzogZmFsc2UgfVxuXG4vLyBVcGRhdGVzIHRoZSBsb2FkaW5nIHN0YXRlIHdoZW4gbmF2aWdhdGluZyBiZXR3ZWVuIGxpbmtzXG4vLyAtIFJlc2V0cyB0aGUgcHJldmlvdXMgbGluaydzIGxvYWRpbmcgc3RhdGVcbi8vIC0gU2V0cyB0aGUgbmV3IGxpbmsncyBsb2FkaW5nIHN0YXRlXG4vLyAtIFVwZGF0ZXMgdHJhY2tpbmcgb2YgY3VycmVudCBuYXZpZ2F0aW9uXG5leHBvcnQgZnVuY3Rpb24gc2V0TGlua0ZvckN1cnJlbnROYXZpZ2F0aW9uKGxpbms6IExpbmtJbnN0YW5jZSB8IG51bGwpIHtcbiAgc3RhcnRUcmFuc2l0aW9uKCgpID0+IHtcbiAgICBsaW5rRm9yTW9zdFJlY2VudE5hdmlnYXRpb24/LnNldE9wdGltaXN0aWNMaW5rU3RhdHVzKElETEVfTElOS19TVEFUVVMpXG4gICAgbGluaz8uc2V0T3B0aW1pc3RpY0xpbmtTdGF0dXMoUEVORElOR19MSU5LX1NUQVRVUylcbiAgICBsaW5rRm9yTW9zdFJlY2VudE5hdmlnYXRpb24gPSBsaW5rXG4gIH0pXG59XG5cbi8vIFVubW91bnRzIHRoZSBjdXJyZW50IGxpbmsgaW5zdGFuY2UgZnJvbSBuYXZpZ2F0aW9uIHRyYWNraW5nXG5leHBvcnQgZnVuY3Rpb24gdW5tb3VudExpbmtGb3JDdXJyZW50TmF2aWdhdGlvbihsaW5rOiBMaW5rSW5zdGFuY2UpIHtcbiAgaWYgKGxpbmtGb3JNb3N0UmVjZW50TmF2aWdhdGlvbiA9PT0gbGluaykge1xuICAgIGxpbmtGb3JNb3N0UmVjZW50TmF2aWdhdGlvbiA9IG51bGxcbiAgfVxufVxuXG4vLyBVc2UgYSBXZWFrTWFwIHRvIGFzc29jaWF0ZSBhIExpbmsgaW5zdGFuY2Ugd2l0aCBpdHMgRE9NIGVsZW1lbnQuIFRoaXMgaXNcbi8vIHVzZWQgYnkgdGhlIEludGVyc2VjdGlvbk9ic2VydmVyIHRvIHRyYWNrIHRoZSBsaW5rJ3MgdmlzaWJpbGl0eS5cbmNvbnN0IHByZWZldGNoYWJsZTpcbiAgfCBXZWFrTWFwPEVsZW1lbnQsIFByZWZldGNoYWJsZUluc3RhbmNlPlxuICB8IE1hcDxFbGVtZW50LCBQcmVmZXRjaGFibGVJbnN0YW5jZT4gPVxuICB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IG5ldyBXZWFrTWFwKCkgOiBuZXcgTWFwKClcblxuLy8gQSBTZXQgb2YgdGhlIGN1cnJlbnRseSB2aXNpYmxlIGxpbmtzLiBXZSByZS1wcmVmZXRjaCB2aXNpYmxlIGxpbmtzIGFmdGVyIGFcbi8vIGNhY2hlIGludmFsaWRhdGlvbiwgb3Igd2hlbiB0aGUgY3VycmVudCBVUkwgY2hhbmdlcy4gSXQncyBhIHNlcGFyYXRlIGRhdGFcbi8vIHN0cnVjdHVyZSBmcm9tIHRoZSBXZWFrTWFwIGFib3ZlIGJlY2F1c2Ugb25seSB0aGUgdmlzaWJsZSBsaW5rcyBuZWVkIHRvXG4vLyBiZSBlbnVtZXJhdGVkLlxuY29uc3QgcHJlZmV0Y2hhYmxlQW5kVmlzaWJsZTogU2V0PFByZWZldGNoYWJsZUluc3RhbmNlPiA9IG5ldyBTZXQoKVxuXG4vLyBBIHNpbmdsZSBJbnRlcnNlY3Rpb25PYnNlcnZlciBpbnN0YW5jZSBzaGFyZWQgYnkgYWxsIDxMaW5rPiBjb21wb25lbnRzLlxuY29uc3Qgb2JzZXJ2ZXI6IEludGVyc2VjdGlvbk9ic2VydmVyIHwgbnVsbCA9XG4gIHR5cGVvZiBJbnRlcnNlY3Rpb25PYnNlcnZlciA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGhhbmRsZUludGVyc2VjdCwge1xuICAgICAgICByb290TWFyZ2luOiAnMjAwcHgnLFxuICAgICAgfSlcbiAgICA6IG51bGxcblxuZnVuY3Rpb24gb2JzZXJ2ZVZpc2liaWxpdHkoZWxlbWVudDogRWxlbWVudCwgaW5zdGFuY2U6IFByZWZldGNoYWJsZUluc3RhbmNlKSB7XG4gIGNvbnN0IGV4aXN0aW5nSW5zdGFuY2UgPSBwcmVmZXRjaGFibGUuZ2V0KGVsZW1lbnQpXG4gIGlmIChleGlzdGluZ0luc3RhbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBUaGlzIHNob3VsZG4ndCBoYXBwZW4gYmVjYXVzZSBlYWNoIDxMaW5rPiBjb21wb25lbnQgc2hvdWxkIGhhdmUgaXRzIG93blxuICAgIC8vIGFuY2hvciB0YWcgaW5zdGFuY2UsIGJ1dCBpdCdzIGRlZmVuc2l2ZSBjb2RpbmcgdG8gYXZvaWQgYSBtZW1vcnkgbGVhayBpblxuICAgIC8vIGNhc2UgdGhlcmUncyBhIGxvZ2ljYWwgZXJyb3Igc29tZXdoZXJlIGVsc2UuXG4gICAgdW5tb3VudFByZWZldGNoYWJsZUluc3RhbmNlKGVsZW1lbnQpXG4gIH1cbiAgLy8gT25seSB0cmFjayBwcmVmZXRjaGFibGUgbGlua3MgdGhhdCBoYXZlIGEgdmFsaWQgcHJlZmV0Y2ggVVJMXG4gIHByZWZldGNoYWJsZS5zZXQoZWxlbWVudCwgaW5zdGFuY2UpXG4gIGlmIChvYnNlcnZlciAhPT0gbnVsbCkge1xuICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudClcbiAgfVxufVxuXG5mdW5jdGlvbiBjb2VyY2VQcmVmZXRjaGFibGVVcmwoaHJlZjogc3RyaW5nKTogVVJMIHwgbnVsbCB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGNyZWF0ZVByZWZldGNoVVJMKGhyZWYpXG4gIH0gY2F0Y2gge1xuICAgIC8vIGNyZWF0ZVByZWZldGNoVVJMIHNvbWV0aW1lcyB0aHJvd3MgYW4gZXJyb3IgaWYgYW4gaW52YWxpZCBVUkwgaXNcbiAgICAvLyBwcm92aWRlZCwgdGhvdWdoIEknbSBub3Qgc3VyZSBpZiBpdCdzIGFjdHVhbGx5IG5lY2Vzc2FyeS5cbiAgICAvLyBUT0RPOiBDb25zaWRlciByZW1vdmluZyB0aGUgdGhyb3cgZnJvbSB0aGUgaW5uZXIgZnVuY3Rpb24sIG9yIGNoYW5nZSBpdFxuICAgIC8vIHRvIHJlcG9ydEVycm9yLiBPciBtYXliZSB0aGUgZXJyb3IgaXNuJ3QgZXZlbiBuZWNlc3NhcnkgZm9yIGF1dG9tYXRpY1xuICAgIC8vIHByZWZldGNoZXMsIGp1c3QgbmF2aWdhdGlvbnMuXG4gICAgY29uc3QgcmVwb3J0RXJyb3JGbiA9XG4gICAgICB0eXBlb2YgcmVwb3J0RXJyb3IgPT09ICdmdW5jdGlvbicgPyByZXBvcnRFcnJvciA6IGNvbnNvbGUuZXJyb3JcbiAgICByZXBvcnRFcnJvckZuKFxuICAgICAgYENhbm5vdCBwcmVmZXRjaCAnJHtocmVmfScgYmVjYXVzZSBpdCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgVVJMLmBcbiAgICApXG4gICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbW91bnRMaW5rSW5zdGFuY2UoXG4gIGVsZW1lbnQ6IExpbmtFbGVtZW50LFxuICBocmVmOiBzdHJpbmcsXG4gIHJvdXRlcjogQXBwUm91dGVySW5zdGFuY2UsXG4gIGtpbmQ6IFByZWZldGNoS2luZC5BVVRPIHwgUHJlZmV0Y2hLaW5kLkZVTEwsXG4gIHByZWZldGNoRW5hYmxlZDogYm9vbGVhbixcbiAgc2V0T3B0aW1pc3RpY0xpbmtTdGF0dXM6IChzdGF0dXM6IHsgcGVuZGluZzogYm9vbGVhbiB9KSA9PiB2b2lkXG4pOiBMaW5rSW5zdGFuY2Uge1xuICBpZiAocHJlZmV0Y2hFbmFibGVkKSB7XG4gICAgY29uc3QgcHJlZmV0Y2hVUkwgPSBjb2VyY2VQcmVmZXRjaGFibGVVcmwoaHJlZilcbiAgICBpZiAocHJlZmV0Y2hVUkwgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGluc3RhbmNlOiBQcmVmZXRjaGFibGVMaW5rSW5zdGFuY2UgPSB7XG4gICAgICAgIHJvdXRlcixcbiAgICAgICAga2luZCxcbiAgICAgICAgaXNWaXNpYmxlOiBmYWxzZSxcbiAgICAgICAgcHJlZmV0Y2hUYXNrOiBudWxsLFxuICAgICAgICBwcmVmZXRjaEhyZWY6IHByZWZldGNoVVJMLmhyZWYsXG4gICAgICAgIHNldE9wdGltaXN0aWNMaW5rU3RhdHVzLFxuICAgICAgfVxuICAgICAgLy8gV2Ugb25seSBvYnNlcnZlIHRoZSBsaW5rJ3MgdmlzaWJpbGl0eSBpZiBpdCdzIHByZWZldGNoYWJsZS4gRm9yXG4gICAgICAvLyBleGFtcGxlLCB0aGlzIGV4Y2x1ZGVzIGxpbmtzIHRvIGV4dGVybmFsIFVSTHMuXG4gICAgICBvYnNlcnZlVmlzaWJpbGl0eShlbGVtZW50LCBpbnN0YW5jZSlcbiAgICAgIHJldHVybiBpbnN0YW5jZVxuICAgIH1cbiAgfVxuICAvLyBJZiB0aGUgbGluayBpcyBub3QgcHJlZmV0Y2hhYmxlLCB3ZSBzdGlsbCBjcmVhdGUgYW4gaW5zdGFuY2Ugc28gd2UgY2FuXG4gIC8vIHRyYWNrIGl0cyBvcHRpbWlzdGljIHN0YXRlIChpLmUuIHVzZUxpbmtTdGF0dXMpLlxuICBjb25zdCBpbnN0YW5jZTogTm9uUHJlZmV0Y2hhYmxlTGlua0luc3RhbmNlID0ge1xuICAgIHJvdXRlcixcbiAgICBraW5kLFxuICAgIGlzVmlzaWJsZTogZmFsc2UsXG4gICAgcHJlZmV0Y2hUYXNrOiBudWxsLFxuICAgIHByZWZldGNoSHJlZjogbnVsbCxcbiAgICBzZXRPcHRpbWlzdGljTGlua1N0YXR1cyxcbiAgfVxuICByZXR1cm4gaW5zdGFuY2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vdW50Rm9ybUluc3RhbmNlKFxuICBlbGVtZW50OiBIVE1MRm9ybUVsZW1lbnQsXG4gIGhyZWY6IHN0cmluZyxcbiAgcm91dGVyOiBBcHBSb3V0ZXJJbnN0YW5jZSxcbiAga2luZDogUHJlZmV0Y2hLaW5kLkFVVE8gfCBQcmVmZXRjaEtpbmQuRlVMTFxuKTogdm9pZCB7XG4gIGNvbnN0IHByZWZldGNoVVJMID0gY29lcmNlUHJlZmV0Y2hhYmxlVXJsKGhyZWYpXG4gIGlmIChwcmVmZXRjaFVSTCA9PT0gbnVsbCkge1xuICAgIC8vIFRoaXMgaHJlZiBpcyBub3QgcHJlZmV0Y2hhYmxlLCBzbyB3ZSBkb24ndCB0cmFjayBpdC5cbiAgICAvLyBUT0RPOiBXZSBjdXJyZW50bHkgb2JzZXJ2ZS91bm9ic2VydmUgYSBmb3JtIGV2ZXJ5IHRpbWUgaXRzIGhyZWYgY2hhbmdlcy5cbiAgICAvLyBGb3IgTGlua3MsIHRoaXMgaXNuJ3QgYSBiaWcgZGVhbCBiZWNhdXNlIHRoZSBocmVmIGRvZXNuJ3QgdXN1YWxseSBjaGFuZ2UsXG4gICAgLy8gYnV0IGZvciBmb3JtcyBpdCdzIGV4dHJlbWVseSBjb21tb24uIFdlIHNob3VsZCBvcHRpbWl6ZSB0aGlzLlxuICAgIHJldHVyblxuICB9XG4gIGNvbnN0IGluc3RhbmNlOiBGb3JtSW5zdGFuY2UgPSB7XG4gICAgcm91dGVyLFxuICAgIGtpbmQsXG4gICAgaXNWaXNpYmxlOiBmYWxzZSxcbiAgICBwcmVmZXRjaFRhc2s6IG51bGwsXG4gICAgcHJlZmV0Y2hIcmVmOiBwcmVmZXRjaFVSTC5ocmVmLFxuICAgIHNldE9wdGltaXN0aWNMaW5rU3RhdHVzOiBudWxsLFxuICB9XG4gIG9ic2VydmVWaXNpYmlsaXR5KGVsZW1lbnQsIGluc3RhbmNlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5tb3VudFByZWZldGNoYWJsZUluc3RhbmNlKGVsZW1lbnQ6IEVsZW1lbnQpIHtcbiAgY29uc3QgaW5zdGFuY2UgPSBwcmVmZXRjaGFibGUuZ2V0KGVsZW1lbnQpXG4gIGlmIChpbnN0YW5jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcHJlZmV0Y2hhYmxlLmRlbGV0ZShlbGVtZW50KVxuICAgIHByZWZldGNoYWJsZUFuZFZpc2libGUuZGVsZXRlKGluc3RhbmNlKVxuICAgIGNvbnN0IHByZWZldGNoVGFzayA9IGluc3RhbmNlLnByZWZldGNoVGFza1xuICAgIGlmIChwcmVmZXRjaFRhc2sgIT09IG51bGwpIHtcbiAgICAgIGNhbmNlbFByZWZldGNoVGFzayhwcmVmZXRjaFRhc2spXG4gICAgfVxuICB9XG4gIGlmIChvYnNlcnZlciAhPT0gbnVsbCkge1xuICAgIG9ic2VydmVyLnVub2JzZXJ2ZShlbGVtZW50KVxuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUludGVyc2VjdChlbnRyaWVzOiBBcnJheTxJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Pikge1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAvLyBTb21lIGV4dHJlbWVseSBvbGQgYnJvd3NlcnMgb3IgcG9seWZpbGxzIGRvbid0IHJlbGlhYmx5IHN1cHBvcnRcbiAgICAvLyBpc0ludGVyc2VjdGluZyBzbyB3ZSBjaGVjayBpbnRlcnNlY3Rpb25SYXRpbyBpbnN0ZWFkLiAoRG8gd2UgY2FyZT8gTm90XG4gICAgLy8gcmVhbGx5LiBCdXQgd2hhdGV2ZXIgdGhpcyBpcyBmaW5lLilcbiAgICBjb25zdCBpc1Zpc2libGUgPSBlbnRyeS5pbnRlcnNlY3Rpb25SYXRpbyA+IDBcbiAgICBvbkxpbmtWaXNpYmlsaXR5Q2hhbmdlZChlbnRyeS50YXJnZXQgYXMgSFRNTEFuY2hvckVsZW1lbnQsIGlzVmlzaWJsZSlcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb25MaW5rVmlzaWJpbGl0eUNoYW5nZWQoZWxlbWVudDogRWxlbWVudCwgaXNWaXNpYmxlOiBib29sZWFuKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gUHJlZmV0Y2hpbmcgb24gdmlld3BvcnQgaXMgZGlzYWJsZWQgaW4gZGV2ZWxvcG1lbnQgZm9yIHBlcmZvcm1hbmNlXG4gICAgLy8gcmVhc29ucywgYmVjYXVzZSBpdCByZXF1aXJlcyBjb21waWxpbmcgdGhlIHRhcmdldCBwYWdlLlxuICAgIC8vIFRPRE86IEludmVzdGlnYXRlIHJlLWVuYWJsaW5nIHRoaXMuXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBpbnN0YW5jZSA9IHByZWZldGNoYWJsZS5nZXQoZWxlbWVudClcbiAgaWYgKGluc3RhbmNlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGluc3RhbmNlLmlzVmlzaWJsZSA9IGlzVmlzaWJsZVxuICBpZiAoaXNWaXNpYmxlKSB7XG4gICAgcHJlZmV0Y2hhYmxlQW5kVmlzaWJsZS5hZGQoaW5zdGFuY2UpXG4gIH0gZWxzZSB7XG4gICAgcHJlZmV0Y2hhYmxlQW5kVmlzaWJsZS5kZWxldGUoaW5zdGFuY2UpXG4gIH1cbiAgcmVzY2hlZHVsZUxpbmtQcmVmZXRjaChpbnN0YW5jZSwgUHJlZmV0Y2hQcmlvcml0eS5EZWZhdWx0KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb25OYXZpZ2F0aW9uSW50ZW50KFxuICBlbGVtZW50OiBIVE1MQW5jaG9yRWxlbWVudCB8IFNWR0FFbGVtZW50LFxuICB1bnN0YWJsZV91cGdyYWRlVG9EeW5hbWljUHJlZmV0Y2g6IGJvb2xlYW5cbikge1xuICBjb25zdCBpbnN0YW5jZSA9IHByZWZldGNoYWJsZS5nZXQoZWxlbWVudClcbiAgaWYgKGluc3RhbmNlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm5cbiAgfVxuICAvLyBQcmVmZXRjaCB0aGUgbGluayBvbiBob3Zlci90b3VjaHN0YXJ0LlxuICBpZiAoaW5zdGFuY2UgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChcbiAgICAgIHByb2Nlc3MuZW52Ll9fTkVYVF9EWU5BTUlDX09OX0hPVkVSICYmXG4gICAgICB1bnN0YWJsZV91cGdyYWRlVG9EeW5hbWljUHJlZmV0Y2hcbiAgICApIHtcbiAgICAgIC8vIFN3aXRjaCB0byBhIGZ1bGwsIGR5bmFtaWMgcHJlZmV0Y2hcbiAgICAgIGluc3RhbmNlLmtpbmQgPSBQcmVmZXRjaEtpbmQuRlVMTFxuICAgIH1cbiAgICByZXNjaGVkdWxlTGlua1ByZWZldGNoKGluc3RhbmNlLCBQcmVmZXRjaFByaW9yaXR5LkludGVudClcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNjaGVkdWxlTGlua1ByZWZldGNoKFxuICBpbnN0YW5jZTogUHJlZmV0Y2hhYmxlSW5zdGFuY2UsXG4gIHByaW9yaXR5OiBQcmVmZXRjaFByaW9yaXR5LkRlZmF1bHQgfCBQcmVmZXRjaFByaW9yaXR5LkludGVudFxuKSB7XG4gIGNvbnN0IGV4aXN0aW5nUHJlZmV0Y2hUYXNrID0gaW5zdGFuY2UucHJlZmV0Y2hUYXNrXG5cbiAgaWYgKCFpbnN0YW5jZS5pc1Zpc2libGUpIHtcbiAgICAvLyBDYW5jZWwgYW55IGluLXByb2dyZXNzIHByZWZldGNoIHRhc2suIChJZiBpdCBhbHJlYWR5IGZpbmlzaGVkIHRoZW4gdGhpc1xuICAgIC8vIGlzIGEgbm8tb3AuKVxuICAgIGlmIChleGlzdGluZ1ByZWZldGNoVGFzayAhPT0gbnVsbCkge1xuICAgICAgY2FuY2VsUHJlZmV0Y2hUYXNrKGV4aXN0aW5nUHJlZmV0Y2hUYXNrKVxuICAgIH1cbiAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHJlc2V0IHRoZSBwcmVmZXRjaFRhc2sgdG8gbnVsbCB1cG9uIGNhbmNlbGxhdGlvbjsgYW5cbiAgICAvLyBvbGQgdGFzayBvYmplY3QgY2FuIGJlIHJlc2NoZWR1bGVkIHdpdGggcmVzY2hlZHVsZVByZWZldGNoVGFzay4gVGhpcyBpcyBhXG4gICAgLy8gbWljcm8tb3B0aW1pemF0aW9uIGJ1dCBhbHNvIG1ha2VzIHRoZSBjb2RlIHNpbXBsZXIgKGRvbid0IG5lZWQgdG9cbiAgICAvLyB3b3JyeSBhYm91dCB3aGV0aGVyIGFuIG9sZCB0YXNrIG9iamVjdCBpcyBzdGFsZSkuXG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoIXByb2Nlc3MuZW52Ll9fTkVYVF9DTElFTlRfU0VHTUVOVF9DQUNIRSkge1xuICAgIC8vIFRoZSBvbGQgcHJlZmV0Y2ggaW1wbGVtZW50YXRpb24gZG9lcyBub3QgaGF2ZSBkaWZmZXJlbnQgcHJpb3JpdHkgbGV2ZWxzLlxuICAgIC8vIEp1c3Qgc2NoZWR1bGUgYSBuZXcgcHJlZmV0Y2ggdGFzay5cbiAgICBwcmVmZXRjaFdpdGhPbGRDYWNoZUltcGxlbWVudGF0aW9uKGluc3RhbmNlKVxuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgYXBwUm91dGVyU3RhdGUgPSBnZXRDdXJyZW50QXBwUm91dGVyU3RhdGUoKVxuICBpZiAoYXBwUm91dGVyU3RhdGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB0cmVlQXRUaW1lT2ZQcmVmZXRjaCA9IGFwcFJvdXRlclN0YXRlLnRyZWVcbiAgICBpZiAoZXhpc3RpbmdQcmVmZXRjaFRhc2sgPT09IG51bGwpIHtcbiAgICAgIC8vIEluaXRpYXRlIGEgcHJlZmV0Y2ggdGFzay5cbiAgICAgIGNvbnN0IG5leHRVcmwgPSBhcHBSb3V0ZXJTdGF0ZS5uZXh0VXJsXG4gICAgICBjb25zdCBjYWNoZUtleSA9IGNyZWF0ZUNhY2hlS2V5KGluc3RhbmNlLnByZWZldGNoSHJlZiwgbmV4dFVybClcbiAgICAgIGluc3RhbmNlLnByZWZldGNoVGFzayA9IHNjaGVkdWxlU2VnbWVudFByZWZldGNoVGFzayhcbiAgICAgICAgY2FjaGVLZXksXG4gICAgICAgIHRyZWVBdFRpbWVPZlByZWZldGNoLFxuICAgICAgICBpbnN0YW5jZS5raW5kID09PSBQcmVmZXRjaEtpbmQuRlVMTCxcbiAgICAgICAgcHJpb3JpdHksXG4gICAgICAgIG51bGxcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gV2UgYWxyZWFkeSBoYXZlIGFuIG9sZCB0YXNrIG9iamVjdCB0aGF0IHdlIGNhbiByZXNjaGVkdWxlLiBUaGlzIGlzXG4gICAgICAvLyBlZmZlY3RpdmVseSB0aGUgc2FtZSBhcyBjYW5jZWxpbmcgdGhlIG9sZCB0YXNrIGFuZCBjcmVhdGluZyBhIG5ldyBvbmUuXG4gICAgICByZXNjaGVkdWxlUHJlZmV0Y2hUYXNrKFxuICAgICAgICBleGlzdGluZ1ByZWZldGNoVGFzayxcbiAgICAgICAgdHJlZUF0VGltZU9mUHJlZmV0Y2gsXG4gICAgICAgIGluc3RhbmNlLmtpbmQgPT09IFByZWZldGNoS2luZC5GVUxMLFxuICAgICAgICBwcmlvcml0eVxuICAgICAgKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGluZ1Zpc2libGVMaW5rcyhcbiAgbmV4dFVybDogc3RyaW5nIHwgbnVsbCxcbiAgdHJlZTogRmxpZ2h0Um91dGVyU3RhdGVcbikge1xuICAvLyBGb3IgZWFjaCBjdXJyZW50bHkgdmlzaWJsZSBsaW5rLCBjYW5jZWwgdGhlIGV4aXN0aW5nIHByZWZldGNoIHRhc2sgKGlmIGl0XG4gIC8vIGV4aXN0cykgYW5kIHNjaGVkdWxlIGEgbmV3IG9uZS4gVGhpcyBpcyBlZmZlY3RpdmVseSB0aGUgc2FtZSBhcyBpZiBhbGwgdGhlXG4gIC8vIHZpc2libGUgbGlua3MgbGVmdCBhbmQgdGhlbiByZS1lbnRlcmVkIHRoZSB2aWV3cG9ydC5cbiAgLy9cbiAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgTmV4dC1Vcmwgb3IgdGhlIGJhc2UgdHJlZSBjaGFuZ2VzLCBzaW5jZSB0aG9zZVxuICAvLyBtYXkgYWZmZWN0IHRoZSByZXN1bHQgb2YgYSBwcmVmZXRjaCB0YXNrLiBJdCdzIGFsc28gY2FsbGVkIGFmdGVyIGFcbiAgLy8gY2FjaGUgaW52YWxpZGF0aW9uLlxuICBmb3IgKGNvbnN0IGluc3RhbmNlIG9mIHByZWZldGNoYWJsZUFuZFZpc2libGUpIHtcbiAgICBjb25zdCB0YXNrID0gaW5zdGFuY2UucHJlZmV0Y2hUYXNrXG4gICAgaWYgKHRhc2sgIT09IG51bGwgJiYgIWlzUHJlZmV0Y2hUYXNrRGlydHkodGFzaywgbmV4dFVybCwgdHJlZSkpIHtcbiAgICAgIC8vIFRoZSBjYWNoZSBoYXMgbm90IGJlZW4gaW52YWxpZGF0ZWQsIGFuZCBub25lIG9mIHRoZSBpbnB1dHMgaGF2ZVxuICAgICAgLy8gY2hhbmdlZC4gQmFpbCBvdXQuXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICAvLyBTb21ldGhpbmcgY2hhbmdlZC4gQ2FuY2VsIHRoZSBleGlzdGluZyBwcmVmZXRjaCB0YXNrIGFuZCBzY2hlZHVsZSBhXG4gICAgLy8gbmV3IG9uZS5cbiAgICBpZiAodGFzayAhPT0gbnVsbCkge1xuICAgICAgY2FuY2VsUHJlZmV0Y2hUYXNrKHRhc2spXG4gICAgfVxuICAgIGNvbnN0IGNhY2hlS2V5ID0gY3JlYXRlQ2FjaGVLZXkoaW5zdGFuY2UucHJlZmV0Y2hIcmVmLCBuZXh0VXJsKVxuICAgIGluc3RhbmNlLnByZWZldGNoVGFzayA9IHNjaGVkdWxlU2VnbWVudFByZWZldGNoVGFzayhcbiAgICAgIGNhY2hlS2V5LFxuICAgICAgdHJlZSxcbiAgICAgIGluc3RhbmNlLmtpbmQgPT09IFByZWZldGNoS2luZC5GVUxMLFxuICAgICAgUHJlZmV0Y2hQcmlvcml0eS5EZWZhdWx0LFxuICAgICAgbnVsbFxuICAgIClcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmVmZXRjaFdpdGhPbGRDYWNoZUltcGxlbWVudGF0aW9uKGluc3RhbmNlOiBQcmVmZXRjaGFibGVJbnN0YW5jZSkge1xuICAvLyBUaGlzIGlzIHRoZSBwYXRoIHVzZWQgd2hlbiB0aGUgU2VnbWVudCBDYWNoZSBpcyBub3QgZW5hYmxlZC5cbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBkb1ByZWZldGNoID0gYXN5bmMgKCkgPT4ge1xuICAgIC8vIG5vdGUgdGhhdCBgYXBwUm91dGVyLnByZWZldGNoKClgIGlzIGN1cnJlbnRseSBzeW5jLFxuICAgIC8vIHNvIHdlIGhhdmUgdG8gd3JhcCB0aGlzIGNhbGwgaW4gYW4gYXN5bmMgZnVuY3Rpb24gdG8gYmUgYWJsZSB0byBjYXRjaCgpIGVycm9ycyBiZWxvdy5cbiAgICByZXR1cm4gaW5zdGFuY2Uucm91dGVyLnByZWZldGNoKGluc3RhbmNlLnByZWZldGNoSHJlZiwge1xuICAgICAga2luZDogaW5zdGFuY2Uua2luZCxcbiAgICB9KVxuICB9XG5cbiAgLy8gUHJlZmV0Y2ggdGhlIHBhZ2UgaWYgYXNrZWQgKG9ubHkgaW4gdGhlIGNsaWVudClcbiAgLy8gV2UgbmVlZCB0byBoYW5kbGUgYSBwcmVmZXRjaCBlcnJvciBoZXJlIHNpbmNlIHdlIG1heSBiZVxuICAvLyBsb2FkaW5nIHdpdGggcHJpb3JpdHkgd2hpY2ggY2FuIHJlamVjdCBidXQgd2UgZG9uJ3RcbiAgLy8gd2FudCB0byBmb3JjZSBuYXZpZ2F0aW9uIHNpbmNlIHRoaXMgaXMgb25seSBhIHByZWZldGNoXG4gIGRvUHJlZmV0Y2goKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIC8vIHJldGhyb3cgdG8gc2hvdyBpbnZhbGlkIFVSTCBlcnJvcnNcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgfSlcbn1cbiJdLCJuYW1lcyI6WyJJRExFX0xJTktfU1RBVFVTIiwiUEVORElOR19MSU5LX1NUQVRVUyIsIm1vdW50Rm9ybUluc3RhbmNlIiwibW91bnRMaW5rSW5zdGFuY2UiLCJvbkxpbmtWaXNpYmlsaXR5Q2hhbmdlZCIsIm9uTmF2aWdhdGlvbkludGVudCIsInBpbmdWaXNpYmxlTGlua3MiLCJzZXRMaW5rRm9yQ3VycmVudE5hdmlnYXRpb24iLCJ1bm1vdW50TGlua0ZvckN1cnJlbnROYXZpZ2F0aW9uIiwidW5tb3VudFByZWZldGNoYWJsZUluc3RhbmNlIiwibGlua0Zvck1vc3RSZWNlbnROYXZpZ2F0aW9uIiwicGVuZGluZyIsImxpbmsiLCJzdGFydFRyYW5zaXRpb24iLCJzZXRPcHRpbWlzdGljTGlua1N0YXR1cyIsInByZWZldGNoYWJsZSIsIldlYWtNYXAiLCJNYXAiLCJwcmVmZXRjaGFibGVBbmRWaXNpYmxlIiwiU2V0Iiwib2JzZXJ2ZXIiLCJJbnRlcnNlY3Rpb25PYnNlcnZlciIsImhhbmRsZUludGVyc2VjdCIsInJvb3RNYXJnaW4iLCJvYnNlcnZlVmlzaWJpbGl0eSIsImVsZW1lbnQiLCJpbnN0YW5jZSIsImV4aXN0aW5nSW5zdGFuY2UiLCJnZXQiLCJ1bmRlZmluZWQiLCJzZXQiLCJvYnNlcnZlIiwiY29lcmNlUHJlZmV0Y2hhYmxlVXJsIiwiaHJlZiIsImNyZWF0ZVByZWZldGNoVVJMIiwicmVwb3J0RXJyb3JGbiIsInJlcG9ydEVycm9yIiwiY29uc29sZSIsImVycm9yIiwicm91dGVyIiwia2luZCIsInByZWZldGNoRW5hYmxlZCIsInByZWZldGNoVVJMIiwiaXNWaXNpYmxlIiwicHJlZmV0Y2hUYXNrIiwicHJlZmV0Y2hIcmVmIiwiZGVsZXRlIiwiY2FuY2VsUHJlZmV0Y2hUYXNrIiwidW5vYnNlcnZlIiwiZW50cmllcyIsImVudHJ5IiwiaW50ZXJzZWN0aW9uUmF0aW8iLCJ0YXJnZXQiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJhZGQiLCJyZXNjaGVkdWxlTGlua1ByZWZldGNoIiwiUHJlZmV0Y2hQcmlvcml0eSIsIkRlZmF1bHQiLCJ1bnN0YWJsZV91cGdyYWRlVG9EeW5hbWljUHJlZmV0Y2giLCJfX05FWFRfRFlOQU1JQ19PTl9IT1ZFUiIsIlByZWZldGNoS2luZCIsIkZVTEwiLCJJbnRlbnQiLCJwcmlvcml0eSIsImV4aXN0aW5nUHJlZmV0Y2hUYXNrIiwiX19ORVhUX0NMSUVOVF9TRUdNRU5UX0NBQ0hFIiwicHJlZmV0Y2hXaXRoT2xkQ2FjaGVJbXBsZW1lbnRhdGlvbiIsImFwcFJvdXRlclN0YXRlIiwiZ2V0Q3VycmVudEFwcFJvdXRlclN0YXRlIiwidHJlZUF0VGltZU9mUHJlZmV0Y2giLCJ0cmVlIiwibmV4dFVybCIsImNhY2hlS2V5IiwiY3JlYXRlQ2FjaGVLZXkiLCJzY2hlZHVsZVNlZ21lbnRQcmVmZXRjaFRhc2siLCJyZXNjaGVkdWxlUHJlZmV0Y2hUYXNrIiwidGFzayIsImlzUHJlZmV0Y2hUYXNrRGlydHkiLCJ3aW5kb3ciLCJkb1ByZWZldGNoIiwicHJlZmV0Y2giLCJjYXRjaCIsImVyciJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/links.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/match-segments.js":
|
||
/*!********************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/match-segments.js ***!
|
||
\********************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"matchSegment\", ({\n enumerable: true,\n get: function() {\n return matchSegment;\n }\n}));\nconst matchSegment = (existingSegment, segment)=>{\n // segment is either Array or string\n if (typeof existingSegment === 'string') {\n if (typeof segment === 'string') {\n // Common case: segment is just a string\n return existingSegment === segment;\n }\n return false;\n }\n if (typeof segment === 'string') {\n return false;\n }\n return existingSegment[0] === segment[0] && existingSegment[1] === segment[1];\n};\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=match-segments.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvbWF0Y2gtc2VnbWVudHMuanMiLCJtYXBwaW5ncyI6Ijs7OztnREFFYUE7OztlQUFBQTs7O0FBQU4sTUFBTUEsZUFBZSxDQUMxQkMsaUJBQ0FDO0lBRUEsb0NBQW9DO0lBQ3BDLElBQUksT0FBT0Qsb0JBQW9CLFVBQVU7UUFDdkMsSUFBSSxPQUFPQyxZQUFZLFVBQVU7WUFDL0Isd0NBQXdDO1lBQ3hDLE9BQU9ELG9CQUFvQkM7UUFDN0I7UUFDQSxPQUFPO0lBQ1Q7SUFFQSxJQUFJLE9BQU9BLFlBQVksVUFBVTtRQUMvQixPQUFPO0lBQ1Q7SUFDQSxPQUFPRCxlQUFlLENBQUMsRUFBRSxLQUFLQyxPQUFPLENBQUMsRUFBRSxJQUFJRCxlQUFlLENBQUMsRUFBRSxLQUFLQyxPQUFPLENBQUMsRUFBRTtBQUMvRSIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvc3JjL2NsaWVudC9jb21wb25lbnRzL21hdGNoLXNlZ21lbnRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU2VnbWVudCB9IGZyb20gJy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgbWF0Y2hTZWdtZW50ID0gKFxuICBleGlzdGluZ1NlZ21lbnQ6IFNlZ21lbnQsXG4gIHNlZ21lbnQ6IFNlZ21lbnRcbik6IGJvb2xlYW4gPT4ge1xuICAvLyBzZWdtZW50IGlzIGVpdGhlciBBcnJheSBvciBzdHJpbmdcbiAgaWYgKHR5cGVvZiBleGlzdGluZ1NlZ21lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHR5cGVvZiBzZWdtZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gQ29tbW9uIGNhc2U6IHNlZ21lbnQgaXMganVzdCBhIHN0cmluZ1xuICAgICAgcmV0dXJuIGV4aXN0aW5nU2VnbWVudCA9PT0gc2VnbWVudFxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc2VnbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICByZXR1cm4gZXhpc3RpbmdTZWdtZW50WzBdID09PSBzZWdtZW50WzBdICYmIGV4aXN0aW5nU2VnbWVudFsxXSA9PT0gc2VnbWVudFsxXVxufVxuIl0sIm5hbWVzIjpbIm1hdGNoU2VnbWVudCIsImV4aXN0aW5nU2VnbWVudCIsInNlZ21lbnQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/match-segments.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/nav-failure-handler.js":
|
||
/*!*************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/nav-failure-handler.js ***!
|
||
\*************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n handleHardNavError: function() {\n return handleHardNavError;\n },\n useNavFailureHandler: function() {\n return useNavFailureHandler;\n }\n});\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\nconst _createhreffromurl = __webpack_require__(/*! ./router-reducer/create-href-from-url */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nfunction handleHardNavError(error) {\n if (error && \"object\" !== 'undefined' && window.next.__pendingUrl && (0, _createhreffromurl.createHrefFromUrl)(new URL(window.location.href)) !== (0, _createhreffromurl.createHrefFromUrl)(window.next.__pendingUrl)) {\n console.error(\"Error occurred during navigation, falling back to hard navigation\", error);\n window.location.href = window.next.__pendingUrl.toString();\n return true;\n }\n return false;\n}\nfunction useNavFailureHandler() {\n if (false) {}\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=nav-failure-handler.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvbmF2LWZhaWx1cmUtaGFuZGxlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFHZ0JBLGtCQUFrQjtlQUFsQkE7O0lBa0JBQyxvQkFBb0I7ZUFBcEJBOzs7bUNBckJVOytDQUNRO0FBRTNCLFNBQVNELG1CQUFtQkUsS0FBYztJQUMvQyxJQUNFQSxTQUNBLE9BQU9DLE1BQVcsZUFDbEJBLE9BQU9DLElBQUksQ0FBQ0MsWUFBWSxJQUN4QkMsQ0FBQUEsR0FBQUEsbUJBQUFBLGlCQUFBQSxFQUFrQixJQUFJQyxJQUFJSixPQUFPSyxRQUFRLENBQUNDLElBQUksT0FDNUNILENBQUFBLEdBQUFBLG1CQUFBQSxpQkFBQUEsRUFBa0JILE9BQU9DLElBQUksQ0FBQ0MsWUFBWSxHQUM1QztRQUNBSyxRQUFRUixLQUFLLENBQ1YscUVBQ0RBO1FBRUZDLE9BQU9LLFFBQVEsQ0FBQ0MsSUFBSSxHQUFHTixPQUFPQyxJQUFJLENBQUNDLFlBQVksQ0FBQ00sUUFBUTtRQUN4RCxPQUFPO0lBQ1Q7SUFDQSxPQUFPO0FBQ1Q7QUFFTyxTQUFTVjtJQUNkLElBQUlXLEtBQXdDLEVBQUUsRUF1QjdDO0FBQ0giLCJzb3VyY2VzIjpbIi9ob21lL05pY2hvbGFpL3NyYy9jbGllbnQvY29tcG9uZW50cy9uYXYtZmFpbHVyZS1oYW5kbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgY3JlYXRlSHJlZkZyb21VcmwgfSBmcm9tICcuL3JvdXRlci1yZWR1Y2VyL2NyZWF0ZS1ocmVmLWZyb20tdXJsJ1xuXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlSGFyZE5hdkVycm9yKGVycm9yOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGlmIChcbiAgICBlcnJvciAmJlxuICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgd2luZG93Lm5leHQuX19wZW5kaW5nVXJsICYmXG4gICAgY3JlYXRlSHJlZkZyb21VcmwobmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZikpICE9PVxuICAgICAgY3JlYXRlSHJlZkZyb21Vcmwod2luZG93Lm5leHQuX19wZW5kaW5nVXJsKVxuICApIHtcbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgYEVycm9yIG9jY3VycmVkIGR1cmluZyBuYXZpZ2F0aW9uLCBmYWxsaW5nIGJhY2sgdG8gaGFyZCBuYXZpZ2F0aW9uYCxcbiAgICAgIGVycm9yXG4gICAgKVxuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gd2luZG93Lm5leHQuX19wZW5kaW5nVXJsLnRvU3RyaW5nKClcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlTmF2RmFpbHVyZUhhbmRsZXIoKSB7XG4gIGlmIChwcm9jZXNzLmVudi5fX05FWFRfQVBQX05BVl9GQUlMX0hBTkRMSU5HKSB7XG4gICAgLy8gdGhpcyBpZiBpcyBvbmx5IGZvciBEQ0Ugb2YgdGhlIGZlYXR1cmUgZmxhZyBub3QgY29uZGl0aW9uYWxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgdW5jYXVnaHRFeGNlcHRpb25IYW5kbGVyID0gKFxuICAgICAgICBldnQ6IEVycm9yRXZlbnQgfCBQcm9taXNlUmVqZWN0aW9uRXZlbnRcbiAgICAgICkgPT4ge1xuICAgICAgICBjb25zdCBlcnJvciA9ICdyZWFzb24nIGluIGV2dCA/IGV2dC5yZWFzb24gOiBldnQuZXJyb3JcbiAgICAgICAgLy8gaWYgd2UgaGF2ZSBhbiB1bmhhbmRsZWQgZXhjZXB0aW9uL3JlamVjdGlvbiBkdXJpbmdcbiAgICAgICAgLy8gYSBuYXZpZ2F0aW9uIHdlIGZhbGwgYmFjayB0byBhIGhhcmQgbmF2aWdhdGlvbiB0b1xuICAgICAgICAvLyBhdHRlbXB0IHJlY292ZXJpbmcgdG8gYSBnb29kIHN0YXRlXG4gICAgICAgIGhhbmRsZUhhcmROYXZFcnJvcihlcnJvcilcbiAgICAgIH1cbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1bmhhbmRsZWRyZWplY3Rpb24nLCB1bmNhdWdodEV4Y2VwdGlvbkhhbmRsZXIpXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCB1bmNhdWdodEV4Y2VwdGlvbkhhbmRsZXIpXG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCB1bmNhdWdodEV4Y2VwdGlvbkhhbmRsZXIpXG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgICAgICd1bmhhbmRsZWRyZWplY3Rpb24nLFxuICAgICAgICAgIHVuY2F1Z2h0RXhjZXB0aW9uSGFuZGxlclxuICAgICAgICApXG4gICAgICB9XG4gICAgfSwgW10pXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJoYW5kbGVIYXJkTmF2RXJyb3IiLCJ1c2VOYXZGYWlsdXJlSGFuZGxlciIsImVycm9yIiwid2luZG93IiwibmV4dCIsIl9fcGVuZGluZ1VybCIsImNyZWF0ZUhyZWZGcm9tVXJsIiwiVVJMIiwibG9jYXRpb24iLCJocmVmIiwiY29uc29sZSIsInRvU3RyaW5nIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9BUFBfTkFWX0ZBSUxfSEFORExJTkciLCJ1c2VFZmZlY3QiLCJ1bmNhdWdodEV4Y2VwdGlvbkhhbmRsZXIiLCJldnQiLCJyZWFzb24iLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/nav-failure-handler.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/navigation-untracked.js":
|
||
/*!**************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/navigation-untracked.js ***!
|
||
\**************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"useUntrackedPathname\", ({\n enumerable: true,\n get: function() {\n return useUntrackedPathname;\n }\n}));\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\nconst _hooksclientcontextsharedruntime = __webpack_require__(/*! ../../shared/lib/hooks-client-context.shared-runtime */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js\");\n/**\n * This checks to see if the current render has any unknown route parameters.\n * It's used to trigger a different render path in the error boundary.\n *\n * @returns true if there are any unknown route parameters, false otherwise\n */ function hasFallbackRouteParams() {\n if (false) {}\n return false;\n}\nfunction useUntrackedPathname() {\n // If there are any unknown route parameters we would typically throw\n // an error, but this internal method allows us to return a null value instead\n // for components that do not propagate the pathname to the static shell (like\n // the error boundary).\n if (hasFallbackRouteParams()) {\n return null;\n }\n // This shouldn't cause any issues related to conditional rendering because\n // the environment will be consistent for the render.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return (0, _react.useContext)(_hooksclientcontextsharedruntime.PathnameContext);\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=navigation-untracked.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvbmF2aWdhdGlvbi11bnRyYWNrZWQuanMiLCJtYXBwaW5ncyI6Ijs7Ozt3REFzQ2dCQTs7O2VBQUFBOzs7bUNBdENXOzZEQUNLO0FBRWhDOzs7OztDQUtDLEdBQ0QsU0FBU0M7SUFDUCxJQUFJLEtBQTZCLEVBQUUsRUFZbEM7SUFFRCxPQUFPO0FBQ1Q7QUFhTyxTQUFTRDtJQUNkLHFFQUFxRTtJQUNyRSw4RUFBOEU7SUFDOUUsOEVBQThFO0lBQzlFLHVCQUF1QjtJQUN2QixJQUFJQywwQkFBMEI7UUFDNUIsT0FBTztJQUNUO0lBRUEsMkVBQTJFO0lBQzNFLHFEQUFxRDtJQUNyRCxzREFBc0Q7SUFDdEQsT0FBT1EsQ0FBQUEsR0FBQUEsT0FBQUEsVUFBQUEsRUFBV0MsaUNBQUFBLGVBQWU7QUFDbkMiLCJzb3VyY2VzIjpbIi9ob21lL05pY2hvbGFpL3NyYy9jbGllbnQvY29tcG9uZW50cy9uYXZpZ2F0aW9uLXVudHJhY2tlZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBQYXRobmFtZUNvbnRleHQgfSBmcm9tICcuLi8uLi9zaGFyZWQvbGliL2hvb2tzLWNsaWVudC1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuXG4vKipcbiAqIFRoaXMgY2hlY2tzIHRvIHNlZSBpZiB0aGUgY3VycmVudCByZW5kZXIgaGFzIGFueSB1bmtub3duIHJvdXRlIHBhcmFtZXRlcnMuXG4gKiBJdCdzIHVzZWQgdG8gdHJpZ2dlciBhIGRpZmZlcmVudCByZW5kZXIgcGF0aCBpbiB0aGUgZXJyb3IgYm91bmRhcnkuXG4gKlxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGVyZSBhcmUgYW55IHVua25vd24gcm91dGUgcGFyYW1ldGVycywgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmZ1bmN0aW9uIGhhc0ZhbGxiYWNrUm91dGVQYXJhbXMoKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgIC8vIEFzeW5jTG9jYWxTdG9yYWdlIHNob3VsZCBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIGNsaWVudCBidW5kbGUuXG4gICAgY29uc3QgeyB3b3JrQXN5bmNTdG9yYWdlIH0gPVxuICAgICAgcmVxdWlyZSgnLi4vLi4vc2VydmVyL2FwcC1yZW5kZXIvd29yay1hc3luYy1zdG9yYWdlLmV4dGVybmFsJykgYXMgdHlwZW9mIGltcG9ydCgnLi4vLi4vc2VydmVyL2FwcC1yZW5kZXIvd29yay1hc3luYy1zdG9yYWdlLmV4dGVybmFsJylcblxuICAgIGNvbnN0IHdvcmtTdG9yZSA9IHdvcmtBc3luY1N0b3JhZ2UuZ2V0U3RvcmUoKVxuICAgIGlmICghd29ya1N0b3JlKSByZXR1cm4gZmFsc2VcblxuICAgIGNvbnN0IHsgZmFsbGJhY2tSb3V0ZVBhcmFtcyB9ID0gd29ya1N0b3JlXG4gICAgaWYgKCFmYWxsYmFja1JvdXRlUGFyYW1zIHx8IGZhbGxiYWNrUm91dGVQYXJhbXMuc2l6ZSA9PT0gMCkgcmV0dXJuIGZhbHNlXG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuICogVGhpcyByZXR1cm5zIGEgYG51bGxgIHZhbHVlIGlmIHRoZXJlIGFyZSBhbnkgdW5rbm93biByb3V0ZSBwYXJhbWV0ZXJzLCBhbmRcbiAqIG90aGVyd2lzZSByZXR1cm5zIHRoZSBwYXRobmFtZSBmcm9tIHRoZSBjb250ZXh0LiBUaGlzIGlzIGFuIGFsdGVybmF0aXZlIHRvXG4gKiBgdXNlUGF0aG5hbWVgIHRoYXQgaXMgdXNlZCBpbiB0aGUgZXJyb3IgYm91bmRhcnkgdG8gYXZvaWQgcmVuZGVyaW5nIHRoZVxuICogZXJyb3IgYm91bmRhcnkgd2hlbiB0aGVyZSBhcmUgdW5rbm93biByb3V0ZSBwYXJhbWV0ZXJzLiBUaGlzIGRvZXNuJ3QgdGhyb3dcbiAqIHdoZW4gYWNjZXNzZWQgd2l0aCB1bmtub3duIHJvdXRlIHBhcmFtZXRlcnMuXG4gKlxuICogQHJldHVybnNcbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVVudHJhY2tlZFBhdGhuYW1lKCk6IHN0cmluZyB8IG51bGwge1xuICAvLyBJZiB0aGVyZSBhcmUgYW55IHVua25vd24gcm91dGUgcGFyYW1ldGVycyB3ZSB3b3VsZCB0eXBpY2FsbHkgdGhyb3dcbiAgLy8gYW4gZXJyb3IsIGJ1dCB0aGlzIGludGVybmFsIG1ldGhvZCBhbGxvd3MgdXMgdG8gcmV0dXJuIGEgbnVsbCB2YWx1ZSBpbnN0ZWFkXG4gIC8vIGZvciBjb21wb25lbnRzIHRoYXQgZG8gbm90IHByb3BhZ2F0ZSB0aGUgcGF0aG5hbWUgdG8gdGhlIHN0YXRpYyBzaGVsbCAobGlrZVxuICAvLyB0aGUgZXJyb3IgYm91bmRhcnkpLlxuICBpZiAoaGFzRmFsbGJhY2tSb3V0ZVBhcmFtcygpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIFRoaXMgc2hvdWxkbid0IGNhdXNlIGFueSBpc3N1ZXMgcmVsYXRlZCB0byBjb25kaXRpb25hbCByZW5kZXJpbmcgYmVjYXVzZVxuICAvLyB0aGUgZW52aXJvbm1lbnQgd2lsbCBiZSBjb25zaXN0ZW50IGZvciB0aGUgcmVuZGVyLlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgcmV0dXJuIHVzZUNvbnRleHQoUGF0aG5hbWVDb250ZXh0KVxufVxuIl0sIm5hbWVzIjpbInVzZVVudHJhY2tlZFBhdGhuYW1lIiwiaGFzRmFsbGJhY2tSb3V0ZVBhcmFtcyIsIndpbmRvdyIsIndvcmtBc3luY1N0b3JhZ2UiLCJyZXF1aXJlIiwid29ya1N0b3JlIiwiZ2V0U3RvcmUiLCJmYWxsYmFja1JvdXRlUGFyYW1zIiwic2l6ZSIsInVzZUNvbnRleHQiLCJQYXRobmFtZUNvbnRleHQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/navigation-untracked.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/navigation.js":
|
||
/*!****************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/navigation.js ***!
|
||
\****************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nvar _s = $RefreshSig$(), _s1 = $RefreshSig$(), _s2 = $RefreshSig$(), _s3 = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n ReadonlyURLSearchParams: function() {\n return _navigationreactserver.ReadonlyURLSearchParams;\n },\n RedirectType: function() {\n return _navigationreactserver.RedirectType;\n },\n ServerInsertedHTMLContext: function() {\n return _serverinsertedhtmlsharedruntime.ServerInsertedHTMLContext;\n },\n forbidden: function() {\n return _navigationreactserver.forbidden;\n },\n notFound: function() {\n return _navigationreactserver.notFound;\n },\n permanentRedirect: function() {\n return _navigationreactserver.permanentRedirect;\n },\n redirect: function() {\n return _navigationreactserver.redirect;\n },\n unauthorized: function() {\n return _navigationreactserver.unauthorized;\n },\n unstable_rethrow: function() {\n return _navigationreactserver.unstable_rethrow;\n },\n useParams: function() {\n return useParams;\n },\n usePathname: function() {\n return usePathname;\n },\n useRouter: function() {\n return useRouter;\n },\n useSearchParams: function() {\n return useSearchParams;\n },\n useSelectedLayoutSegment: function() {\n return useSelectedLayoutSegment;\n },\n useSelectedLayoutSegments: function() {\n return useSelectedLayoutSegments;\n },\n useServerInsertedHTML: function() {\n return _serverinsertedhtmlsharedruntime.useServerInsertedHTML;\n }\n});\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../../shared/lib/app-router-context.shared-runtime */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js\");\nconst _hooksclientcontextsharedruntime = __webpack_require__(/*! ../../shared/lib/hooks-client-context.shared-runtime */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js\");\nconst _getsegmentvalue = __webpack_require__(/*! ./router-reducer/reducers/get-segment-value */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/get-segment-value.js\");\nconst _segment = __webpack_require__(/*! ../../shared/lib/segment */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/segment.js\");\nconst _navigationreactserver = __webpack_require__(/*! ./navigation.react-server */ \"(app-pages-browser)/./node_modules/next/dist/client/components/navigation.react-server.js\");\nconst _serverinsertedhtmlsharedruntime = __webpack_require__(/*! ../../shared/lib/server-inserted-html.shared-runtime */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.js\");\nconst useDynamicRouteParams = false ? 0 : undefined;\nfunction useSearchParams() {\n const searchParams = (0, _react.useContext)(_hooksclientcontextsharedruntime.SearchParamsContext);\n // In the case where this is `null`, the compat types added in\n // `next-env.d.ts` will add a new overload that changes the return type to\n // include `null`.\n const readonlySearchParams = (0, _react.useMemo)(()=>{\n if (!searchParams) {\n // When the router is not ready in pages, we won't have the search params\n // available.\n return null;\n }\n return new _navigationreactserver.ReadonlyURLSearchParams(searchParams);\n }, [\n searchParams\n ]);\n if (false) {}\n return readonlySearchParams;\n}\nfunction usePathname() {\n _s();\n useDynamicRouteParams == null ? void 0 : useDynamicRouteParams('usePathname()');\n // In the case where this is `null`, the compat types added in `next-env.d.ts`\n // will add a new overload that changes the return type to include `null`.\n return (0, _react.useContext)(_hooksclientcontextsharedruntime.PathnameContext);\n}\n_s(usePathname, \"rJhb7jJF4Q92igNmh5lAnMUEkkY=\", false, function() {\n return [\n useDynamicRouteParams\n ];\n});\nfunction useRouter() {\n const router = (0, _react.useContext)(_approutercontextsharedruntime.AppRouterContext);\n if (router === null) {\n throw Object.defineProperty(new Error('invariant expected app router to be mounted'), \"__NEXT_ERROR_CODE\", {\n value: \"E238\",\n enumerable: false,\n configurable: true\n });\n }\n return router;\n}\nfunction useParams() {\n _s1();\n useDynamicRouteParams == null ? void 0 : useDynamicRouteParams('useParams()');\n return (0, _react.useContext)(_hooksclientcontextsharedruntime.PathParamsContext);\n}\n_s1(useParams, \"rJhb7jJF4Q92igNmh5lAnMUEkkY=\", false, function() {\n return [\n useDynamicRouteParams\n ];\n});\n/** Get the canonical parameters from the current level to the leaf node. */ // Client components API\nfunction getSelectedLayoutSegmentPath(tree, parallelRouteKey, first, segmentPath) {\n if (first === void 0) first = true;\n if (segmentPath === void 0) segmentPath = [];\n let node;\n if (first) {\n // Use the provided parallel route key on the first parallel route\n node = tree[1][parallelRouteKey];\n } else {\n // After first parallel route prefer children, if there's no children pick the first parallel route.\n const parallelRoutes = tree[1];\n var _parallelRoutes_children;\n node = (_parallelRoutes_children = parallelRoutes.children) != null ? _parallelRoutes_children : Object.values(parallelRoutes)[0];\n }\n if (!node) return segmentPath;\n const segment = node[0];\n let segmentValue = (0, _getsegmentvalue.getSegmentValue)(segment);\n if (!segmentValue || segmentValue.startsWith(_segment.PAGE_SEGMENT_KEY)) {\n return segmentPath;\n }\n segmentPath.push(segmentValue);\n return getSelectedLayoutSegmentPath(node, parallelRouteKey, false, segmentPath);\n}\nfunction useSelectedLayoutSegments(parallelRouteKey) {\n _s2();\n if (parallelRouteKey === void 0) parallelRouteKey = 'children';\n useDynamicRouteParams == null ? void 0 : useDynamicRouteParams('useSelectedLayoutSegments()');\n const context = (0, _react.useContext)(_approutercontextsharedruntime.LayoutRouterContext);\n // @ts-expect-error This only happens in `pages`. Type is overwritten in navigation.d.ts\n if (!context) return null;\n return getSelectedLayoutSegmentPath(context.parentTree, parallelRouteKey);\n}\n_s2(useSelectedLayoutSegments, \"rJhb7jJF4Q92igNmh5lAnMUEkkY=\", false, function() {\n return [\n useDynamicRouteParams\n ];\n});\nfunction useSelectedLayoutSegment(parallelRouteKey) {\n _s3();\n if (parallelRouteKey === void 0) parallelRouteKey = 'children';\n useDynamicRouteParams == null ? void 0 : useDynamicRouteParams('useSelectedLayoutSegment()');\n const selectedLayoutSegments = useSelectedLayoutSegments(parallelRouteKey);\n if (!selectedLayoutSegments || selectedLayoutSegments.length === 0) {\n return null;\n }\n const selectedLayoutSegment = parallelRouteKey === 'children' ? selectedLayoutSegments[0] : selectedLayoutSegments[selectedLayoutSegments.length - 1];\n // if the default slot is showing, we return null since it's not technically \"selected\" (it's a fallback)\n // and returning an internal value like `__DEFAULT__` would be confusing.\n return selectedLayoutSegment === _segment.DEFAULT_SEGMENT_KEY ? null : selectedLayoutSegment;\n}\n_s3(useSelectedLayoutSegment, \"GQkIYFIXjatgPrznv5JwL5TXjn8=\", false, function() {\n return [\n useDynamicRouteParams,\n useSelectedLayoutSegments\n ];\n});\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=navigation.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvbmF2aWdhdGlvbi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztJQTBSRUEsdUJBQXVCO2VBQXZCQSx1QkFBQUEsdUJBQXVCOztJQUR2QkMsWUFBWTtlQUFaQSx1QkFBQUEsWUFBWTs7SUFwTFpDLHlCQUF5QjtlQUF6QkEsaUNBQUFBLHlCQUF5Qjs7SUFnTHpCQyxTQUFTO2VBQVRBLHVCQUFBQSxTQUFTOztJQURUQyxRQUFRO2VBQVJBLHVCQUFBQSxRQUFROztJQUlSQyxpQkFBaUI7ZUFBakJBLHVCQUFBQSxpQkFBaUI7O0lBRGpCQyxRQUFRO2VBQVJBLHVCQUFBQSxRQUFROztJQURSQyxZQUFZO2VBQVpBLHVCQUFBQSxZQUFZOztJQUtaQyxnQkFBZ0I7ZUFBaEJBLHVCQUFBQSxnQkFBZ0I7O0lBcElGQyxTQUFTO2VBQVRBOztJQTVEQUMsV0FBVztlQUFYQTs7SUFpQ0FDLFNBQVM7ZUFBVEE7O0lBOUVBQyxlQUFlO2VBQWZBOztJQTZNQUMsd0JBQXdCO2VBQXhCQTs7SUEvQkFDLHlCQUF5QjtlQUF6QkE7O0lBdEhkQyxxQkFBcUI7ZUFBckJBLGlDQUFBQSxxQkFBcUI7OzttQ0FuR2E7MkRBSzdCOzZEQUtBOzZDQUN5QjtxQ0FDc0I7bURBQ2Q7NkRBdUZqQztBQXJGUCxNQUFNQyx3QkFDSixNQUE2QixHQUV2QkUsQ0FDcUIsR0FDdkJDO0FBdUJDLFNBQVNQO0lBQ2QsTUFBTVEsZUFBZUMsQ0FBQUEsR0FBQUEsT0FBQUEsVUFBQUEsRUFBV0MsaUNBQUFBLG1CQUFtQjtJQUVuRCw4REFBOEQ7SUFDOUQsMEVBQTBFO0lBQzFFLGtCQUFrQjtJQUNsQixNQUFNQyx1QkFBdUJDLENBQUFBLEdBQUFBLE9BQUFBLE9BQUFBLEVBQVE7UUFDbkMsSUFBSSxDQUFDSixjQUFjO1lBQ2pCLHlFQUF5RTtZQUN6RSxhQUFhO1lBQ2IsT0FBTztRQUNUO1FBRUEsT0FB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LE9BQ0FEO0FBQ047SUFyQmdCdkM7O1FBR2RHO1FBRStCRiIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvc3JjL2NsaWVudC9jb21wb25lbnRzL25hdmlnYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBGbGlnaHRSb3V0ZXJTdGF0ZSB9IGZyb20gJy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBQYXJhbXMgfSBmcm9tICcuLi8uLi9zZXJ2ZXIvcmVxdWVzdC9wYXJhbXMnXG5cbmltcG9ydCB7IHVzZUNvbnRleHQsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7XG4gIEFwcFJvdXRlckNvbnRleHQsXG4gIExheW91dFJvdXRlckNvbnRleHQsXG4gIHR5cGUgQXBwUm91dGVySW5zdGFuY2UsXG59IGZyb20gJy4uLy4uL3NoYXJlZC9saWIvYXBwLXJvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHtcbiAgU2VhcmNoUGFyYW1zQ29udGV4dCxcbiAgUGF0aG5hbWVDb250ZXh0LFxuICBQYXRoUGFyYW1zQ29udGV4dCxcbn0gZnJvbSAnLi4vLi4vc2hhcmVkL2xpYi9ob29rcy1jbGllbnQtY29udGV4dC5zaGFyZWQtcnVudGltZSdcbmltcG9ydCB7IGdldFNlZ21lbnRWYWx1ZSB9IGZyb20gJy4vcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvZ2V0LXNlZ21lbnQtdmFsdWUnXG5pbXBvcnQgeyBQQUdFX1NFR01FTlRfS0VZLCBERUZBVUxUX1NFR01FTlRfS0VZIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2xpYi9zZWdtZW50J1xuaW1wb3J0IHsgUmVhZG9ubHlVUkxTZWFyY2hQYXJhbXMgfSBmcm9tICcuL25hdmlnYXRpb24ucmVhY3Qtc2VydmVyJ1xuXG5jb25zdCB1c2VEeW5hbWljUm91dGVQYXJhbXMgPVxuICB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJ1xuICAgID8gKFxuICAgICAgICByZXF1aXJlKCcuLi8uLi9zZXJ2ZXIvYXBwLXJlbmRlci9keW5hbWljLXJlbmRlcmluZycpIGFzIHR5cGVvZiBpbXBvcnQoJy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL2R5bmFtaWMtcmVuZGVyaW5nJylcbiAgICAgICkudXNlRHluYW1pY1JvdXRlUGFyYW1zXG4gICAgOiB1bmRlZmluZWRcblxuLyoqXG4gKiBBIFtDbGllbnQgQ29tcG9uZW50XShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9yZW5kZXJpbmcvY2xpZW50LWNvbXBvbmVudHMpIGhvb2tcbiAqIHRoYXQgbGV0cyB5b3UgKnJlYWQqIHRoZSBjdXJyZW50IFVSTCdzIHNlYXJjaCBwYXJhbWV0ZXJzLlxuICpcbiAqIExlYXJuIG1vcmUgYWJvdXQgW2BVUkxTZWFyY2hQYXJhbXNgIG9uIE1ETl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL1VSTFNlYXJjaFBhcmFtcylcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIFwidXNlIGNsaWVudFwiXG4gKiBpbXBvcnQgeyB1c2VTZWFyY2hQYXJhbXMgfSBmcm9tICduZXh0L25hdmlnYXRpb24nXG4gKlxuICogZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUGFnZSgpIHtcbiAqICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gdXNlU2VhcmNoUGFyYW1zKClcbiAqICAgc2VhcmNoUGFyYW1zLmdldCgnZm9vJykgLy8gcmV0dXJucyAnYmFyJyB3aGVuID9mb289YmFyXG4gKiAgIC8vIC4uLlxuICogfVxuICogYGBgXG4gKlxuICogUmVhZCBtb3JlOiBbTmV4dC5qcyBEb2NzOiBgdXNlU2VhcmNoUGFyYW1zYF0oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2FwaS1yZWZlcmVuY2UvZnVuY3Rpb25zL3VzZS1zZWFyY2gtcGFyYW1zKVxuICovXG4vLyBDbGllbnQgY29tcG9uZW50cyBBUElcbmV4cG9ydCBmdW5jdGlvbiB1c2VTZWFyY2hQYXJhbXMoKTogUmVhZG9ubHlVUkxTZWFyY2hQYXJhbXMge1xuICBjb25zdCBzZWFyY2hQYXJhbXMgPSB1c2VDb250ZXh0KFNlYXJjaFBhcmFtc0NvbnRleHQpXG5cbiAgLy8gSW4gdGhlIGNhc2Ugd2hlcmUgdGhpcyBpcyBgbnVsbGAsIHRoZSBjb21wYXQgdHlwZXMgYWRkZWQgaW5cbiAgLy8gYG5leHQtZW52LmQudHNgIHdpbGwgYWRkIGEgbmV3IG92ZXJsb2FkIHRoYXQgY2hhbmdlcyB0aGUgcmV0dXJuIHR5cGUgdG9cbiAgLy8gaW5jbHVkZSBgbnVsbGAuXG4gIGNvbnN0IHJlYWRvbmx5U2VhcmNoUGFyYW1zID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFzZWFyY2hQYXJhbXMpIHtcbiAgICAgIC8vIFdoZW4gdGhlIHJvdXRlciBpcyBub3QgcmVhZHkgaW4gcGFnZXMsIHdlIHdvbid0IGhhdmUgdGhlIHNlYXJjaCBwYXJhbXNcbiAgICAgIC8vIGF2YWlsYWJsZS5cbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBSZWFkb25seVVSTFNlYXJjaFBhcmFtcyhzZWFyY2hQYXJhbXMpXG4gIH0sIFtzZWFyY2hQYXJhbXNdKSBhcyBSZWFkb25seVVSTFNlYXJjaFBhcmFtc1xuXG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgIC8vIEFzeW5jTG9jYWxTdG9yYWdlIHNob3VsZCBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIGNsaWVudCBidW5kbGUuXG4gICAgY29uc3QgeyBiYWlsb3V0VG9DbGllbnRSZW5kZXJpbmcgfSA9XG4gICAgICByZXF1aXJlKCcuL2JhaWxvdXQtdG8tY2xpZW50LXJlbmRlcmluZycpIGFzIHR5cGVvZiBpbXBvcnQoJy4vYmFpbG91dC10by1jbGllbnQtcmVuZGVyaW5nJylcbiAgICAvLyBUT0RPLUFQUDogaGFuZGxlIGR5bmFtaWMgPSAnZm9yY2Utc3RhdGljJyBoZXJlIGFuZCBvbiB0aGUgY2xpZW50XG4gICAgYmFpbG91dFRvQ2xpZW50UmVuZGVyaW5nKCd1c2VTZWFyY2hQYXJhbXMoKScpXG4gIH1cblxuICByZXR1cm4gcmVhZG9ubHlTZWFyY2hQYXJhbXNcbn1cblxuLyoqXG4gKiBBIFtDbGllbnQgQ29tcG9uZW50XShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9yZW5kZXJpbmcvY2xpZW50LWNvbXBvbmVudHMpIGhvb2tcbiAqIHRoYXQgbGV0cyB5b3UgcmVhZCB0aGUgY3VycmVudCBVUkwncyBwYXRobmFtZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIFwidXNlIGNsaWVudFwiXG4gKiBpbXBvcnQgeyB1c2VQYXRobmFtZSB9IGZyb20gJ25leHQvbmF2aWdhdGlvbidcbiAqXG4gKiBleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBQYWdlKCkge1xuICogIGNvbnN0IHBhdGhuYW1lID0gdXNlUGF0aG5hbWUoKSAvLyByZXR1cm5zIFwiL2Rhc2hib2FyZFwiIG9uIC9kYXNoYm9hcmQ/Zm9vPWJhclxuICogIC8vIC4uLlxuICogfVxuICogYGBgXG4gKlxuICogUmVhZCBtb3JlOiBbTmV4dC5qcyBEb2NzOiBgdXNlUGF0aG5hbWVgXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYXBpLXJlZmVyZW5jZS9mdW5jdGlvbnMvdXNlLXBhdGhuYW1lKVxuICovXG4vLyBDbGllbnQgY29tcG9uZW50cyBBUElcbmV4cG9ydCBmdW5jdGlvbiB1c2VQYXRobmFtZSgpOiBzdHJpbmcge1xuICB1c2VEeW5hbWljUm91dGVQYXJhbXM/LigndXNlUGF0aG5hbWUoKScpXG5cbiAgLy8gSW4gdGhlIGNhc2Ugd2hlcmUgdGhpcyBpcyBgbnVsbGAsIHRoZSBjb21wYXQgdHlwZXMgYWRkZWQgaW4gYG5leHQtZW52LmQudHNgXG4gIC8vIHdpbGwgYWRkIGEgbmV3IG92ZXJsb2FkIHRoYXQgY2hhbmdlcyB0aGUgcmV0dXJuIHR5cGUgdG8gaW5jbHVkZSBgbnVsbGAuXG4gIHJldHVybiB1c2VDb250ZXh0KFBhdGhuYW1lQ29udGV4dCkgYXMgc3RyaW5nXG59XG5cbi8vIENsaWVudCBjb21wb25lbnRzIEFQSVxuZXhwb3J0IHtcbiAgU2VydmVySW5zZXJ0ZWRIVE1MQ29udGV4dCxcbiAgdXNlU2VydmVySW5zZXJ0ZWRIVE1MLFxufSBmcm9tICcuLi8uLi9zaGFyZWQvbGliL3NlcnZlci1pbnNlcnRlZC1odG1sLnNoYXJlZC1ydW50aW1lJ1xuXG4vKipcbiAqXG4gKiBUaGlzIGhvb2sgYWxsb3dzIHlvdSB0byBwcm9ncmFtbWF0aWNhbGx5IGNoYW5nZSByb3V0ZXMgaW5zaWRlIFtDbGllbnQgQ29tcG9uZW50XShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9yZW5kZXJpbmcvY2xpZW50LWNvbXBvbmVudHMpLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogXCJ1c2UgY2xpZW50XCJcbiAqIGltcG9ydCB7IHVzZVJvdXRlciB9IGZyb20gJ25leHQvbmF2aWdhdGlvbidcbiAqXG4gKiBleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBQYWdlKCkge1xuICogIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpXG4gKiAgLy8gLi4uXG4gKiAgcm91dGVyLnB1c2goJy9kYXNoYm9hcmQnKSAvLyBOYXZpZ2F0ZSB0byAvZGFzaGJvYXJkXG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBSZWFkIG1vcmU6IFtOZXh0LmpzIERvY3M6IGB1c2VSb3V0ZXJgXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYXBpLXJlZmVyZW5jZS9mdW5jdGlvbnMvdXNlLXJvdXRlcilcbiAqL1xuLy8gQ2xpZW50IGNvbXBvbmVudHMgQVBJXG5leHBvcnQgZnVuY3Rpb24gdXNlUm91dGVyKCk6IEFwcFJvdXRlckluc3RhbmNlIHtcbiAgY29uc3Qgcm91dGVyID0gdXNlQ29udGV4dChBcHBSb3V0ZXJDb250ZXh0KVxuICBpZiAocm91dGVyID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhcmlhbnQgZXhwZWN0ZWQgYXBwIHJvdXRlciB0byBiZSBtb3VudGVkJylcbiAgfVxuXG4gIHJldHVybiByb3V0ZXJcbn1cblxuLyoqXG4gKiBBIFtDbGllbnQgQ29tcG9uZW50XShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9yZW5kZXJpbmcvY2xpZW50LWNvbXBvbmVudHMpIGhvb2tcbiAqIHRoYXQgbGV0cyB5b3UgcmVhZCBhIHJvdXRlJ3MgZHluYW1pYyBwYXJhbXMgZmlsbGVkIGluIGJ5IHRoZSBjdXJyZW50IFVSTC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIFwidXNlIGNsaWVudFwiXG4gKiBpbXBvcnQgeyB1c2VQYXJhbXMgfSBmcm9tICduZXh0L25hdmlnYXRpb24nXG4gKlxuICogZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUGFnZSgpIHtcbiAqICAgLy8gb24gL2Rhc2hib2FyZC9bdGVhbV0gd2hlcmUgcGF0aG5hbWUgaXMgL2Rhc2hib2FyZC9uZXh0anNcbiAqICAgY29uc3QgeyB0ZWFtIH0gPSB1c2VQYXJhbXMoKSAvLyB0ZWFtID09PSBcIm5leHRqc1wiXG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBSZWFkIG1vcmU6IFtOZXh0LmpzIERvY3M6IGB1c2VQYXJhbXNgXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYXBpLXJlZmVyZW5jZS9mdW5jdGlvbnMvdXNlLXBhcmFtcylcbiAqL1xuLy8gQ2xpZW50IGNvbXBvbmVudHMgQVBJXG5leHBvcnQgZnVuY3Rpb24gdXNlUGFyYW1zPFQgZXh0ZW5kcyBQYXJhbXMgPSBQYXJhbXM+KCk6IFQge1xuICB1c2VEeW5hbWljUm91dGVQYXJhbXM/LigndXNlUGFyYW1zKCknKVxuXG4gIHJldHVybiB1c2VDb250ZXh0KFBhdGhQYXJhbXNDb250ZXh0KSBhcyBUXG59XG5cbi8qKiBHZXQgdGhlIGNhbm9uaWNhbCBwYXJhbWV0ZXJzIGZyb20gdGhlIGN1cnJlbnQgbGV2ZWwgdG8gdGhlIGxlYWYgbm9kZS4gKi9cbi8vIENsaWVudCBjb21wb25lbnRzIEFQSVxuZnVuY3Rpb24gZ2V0U2VsZWN0ZWRMYXlvdXRTZWdtZW50UGF0aChcbiAgdHJlZTogRmxpZ2h0Um91dGVyU3RhdGUsXG4gIHBhcmFsbGVsUm91dGVLZXk6IHN0cmluZyxcbiAgZmlyc3QgPSB0cnVlLFxuICBzZWdtZW50UGF0aDogc3RyaW5nW10gPSBbXVxuKTogc3RyaW5nW10ge1xuICBsZXQgbm9kZTogRmxpZ2h0Um91dGVyU3RhdGVcbiAgaWYgKGZpcnN0KSB7XG4gICAgLy8gVXNlIHRoZSBwcm92aWRlZCBwYXJhbGxlbCByb3V0ZSBrZXkgb24gdGhlIGZpcnN0IHBhcmFsbGVsIHJvdXRlXG4gICAgbm9kZSA9IHRyZWVbMV1bcGFyYWxsZWxSb3V0ZUtleV1cbiAgfSBlbHNlIHtcbiAgICAvLyBBZnRlciBmaXJzdCBwYXJhbGxlbCByb3V0ZSBwcmVmZXIgY2hpbGRyZW4sIGlmIHRoZXJlJ3Mgbm8gY2hpbGRyZW4gcGljayB0aGUgZmlyc3QgcGFyYWxsZWwgcm91dGUuXG4gICAgY29uc3QgcGFyYWxsZWxSb3V0ZXMgPSB0cmVlWzFdXG4gICAgbm9kZSA9IHBhcmFsbGVsUm91dGVzLmNoaWxkcmVuID8/IE9iamVjdC52YWx1ZXMocGFyYWxsZWxSb3V0ZXMpWzBdXG4gIH1cblxuICBpZiAoIW5vZGUpIHJldHVybiBzZWdtZW50UGF0aFxuICBjb25zdCBzZWdtZW50ID0gbm9kZVswXVxuXG4gIGxldCBzZWdtZW50VmFsdWUgPSBnZXRTZWdtZW50VmFsdWUoc2VnbWVudClcblxuICBpZiAoIXNlZ21lbnRWYWx1ZSB8fCBzZWdtZW50VmFsdWUuc3RhcnRzV2l0aChQQUdFX1NFR01FTlRfS0VZKSkge1xuICAgIHJldHVybiBzZWdtZW50UGF0aFxuICB9XG5cbiAgc2VnbWVudFBhdGgucHVzaChzZWdtZW50VmFsdWUpXG5cbiAgcmV0dXJuIGdldFNlbGVjdGVkTGF5b3V0U2VnbWVudFBhdGgoXG4gICAgbm9kZSxcbiAgICBwYXJhbGxlbFJvdXRlS2V5LFxuICAgIGZhbHNlLFxuICAgIHNlZ21lbnRQYXRoXG4gIClcbn1cblxuLyoqXG4gKiBBIFtDbGllbnQgQ29tcG9uZW50XShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9yZW5kZXJpbmcvY2xpZW50LWNvbXBvbmVudHMpIGhvb2tcbiAqIHRoYXQgbGV0cyB5b3UgcmVhZCB0aGUgYWN0aXZlIHJvdXRlIHNlZ21lbnRzICoqYmVsb3cqKiB0aGUgTGF5b3V0IGl0IGlzIGNhbGxlZCBmcm9tLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogJ3VzZSBjbGllbnQnXG4gKlxuICogaW1wb3J0IHsgdXNlU2VsZWN0ZWRMYXlvdXRTZWdtZW50cyB9IGZyb20gJ25leHQvbmF2aWdhdGlvbidcbiAqXG4gKiBleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBFeGFtcGxlQ2xpZW50Q29tcG9uZW50KCkge1xuICogICBjb25zdCBzZWdtZW50cyA9IHVzZVNlbGVjdGVkTGF5b3V0U2VnbWVudHMoKVxuICpcbiAqICAgcmV0dXJuIChcbiAqICAgICA8dWw+XG4gKiAgICAgICB7c2VnbWVudHMubWFwKChzZWdtZW50LCBpbmRleCkgPT4gKFxuICogICAgICAgICA8bGkga2V5PXtpbmRleH0+e3NlZ21lbnR9PC9saT5cbiAqICAgICAgICkpfVxuICogICAgIDwvdWw+XG4gKiAgIClcbiAqIH1cbiAqIGBgYFxuICpcbiAqIFJlYWQgbW9yZTogW05leHQuanMgRG9jczogYHVzZVNlbGVjdGVkTGF5b3V0U2VnbWVudHNgXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYXBpLXJlZmVyZW5jZS9mdW5jdGlvbnMvdXNlLXNlbGVjdGVkLWxheW91dC1zZWdtZW50cylcbiAqL1xuLy8gQ2xpZW50IGNvbXBvbmVudHMgQVBJXG5leHBvcnQgZnVuY3Rpb24gdXNlU2VsZWN0ZWRMYXlvdXRTZWdtZW50cyhcbiAgcGFyYWxsZWxSb3V0ZUtleTogc3RyaW5nID0gJ2NoaWxkcmVuJ1xuKTogc3RyaW5nW10ge1xuICB1c2VEeW5hbWljUm91dGVQYXJhbXM/LigndXNlU2VsZWN0ZWRMYXlvdXRTZWdtZW50cygpJylcblxuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChMYXlvdXRSb3V0ZXJDb250ZXh0KVxuICAvLyBAdHMtZXhwZWN0LWVycm9yIFRoaXMgb25seSBoYXBwZW5zIGluIGBwYWdlc2AuIFR5cGUgaXMgb3ZlcndyaXR0ZW4gaW4gbmF2aWdhdGlvbi5kLnRzXG4gIGlmICghY29udGV4dCkgcmV0dXJuIG51bGxcblxuICByZXR1cm4gZ2V0U2VsZWN0ZWRMYXlvdXRTZWdtZW50UGF0aChjb250ZXh0LnBhcmVudFRyZWUsIHBhcmFsbGVsUm91dGVLZXkpXG59XG5cbi8qKlxuICogQSBbQ2xpZW50IENvbXBvbmVudF0oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vcmVuZGVyaW5nL2NsaWVudC1jb21wb25lbnRzKSBob29rXG4gKiB0aGF0IGxldHMgeW91IHJlYWQgdGhlIGFjdGl2ZSByb3V0ZSBzZWdtZW50ICoqb25lIGxldmVsIGJlbG93KiogdGhlIExheW91dCBpdCBpcyBjYWxsZWQgZnJvbS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqICd1c2UgY2xpZW50J1xuICogaW1wb3J0IHsgdXNlU2VsZWN0ZWRMYXlvdXRTZWdtZW50IH0gZnJvbSAnbmV4dC9uYXZpZ2F0aW9uJ1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEV4YW1wbGVDbGllbnRDb21wb25lbnQoKSB7XG4gKiAgIGNvbnN0IHNlZ21lbnQgPSB1c2VTZWxlY3RlZExheW91dFNlZ21lbnQoKVxuICpcbiAqICAgcmV0dXJuIDxwPkFjdGl2ZSBzZWdtZW50OiB7c2VnbWVudH08L3A+XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBSZWFkIG1vcmU6IFtOZXh0LmpzIERvY3M6IGB1c2VTZWxlY3RlZExheW91dFNlZ21lbnRgXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYXBpLXJlZmVyZW5jZS9mdW5jdGlvbnMvdXNlLXNlbGVjdGVkLWxheW91dC1zZWdtZW50KVxuICovXG4vLyBDbGllbnQgY29tcG9uZW50cyBBUElcbmV4cG9ydCBmdW5jdGlvbiB1c2VTZWxlY3RlZExheW91dFNlZ21lbnQoXG4gIHBhcmFsbGVsUm91dGVLZXk6IHN0cmluZyA9ICdjaGlsZHJlbidcbik6IHN0cmluZyB8IG51bGwge1xuICB1c2VEeW5hbWljUm91dGVQYXJhbXM/LigndXNlU2VsZWN0ZWRMYXlvdXRTZWdtZW50KCknKVxuXG4gIGNvbnN0IHNlbGVjdGVkTGF5b3V0U2VnbWVudHMgPSB1c2VTZWxlY3RlZExheW91dFNlZ21lbnRzKHBhcmFsbGVsUm91dGVLZXkpXG5cbiAgaWYgKCFzZWxlY3RlZExheW91dFNlZ21lbnRzIHx8IHNlbGVjdGVkTGF5b3V0U2VnbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGNvbnN0IHNlbGVjdGVkTGF5b3V0U2VnbWVudCA9XG4gICAgcGFyYWxsZWxSb3V0ZUtleSA9PT0gJ2NoaWxkcmVuJ1xuICAgICAgPyBzZWxlY3RlZExheW91dFNlZ21lbnRzWzBdXG4gICAgICA6IHNlbGVjdGVkTGF5b3V0U2VnbWVudHNbc2VsZWN0ZWRMYXlvdXRTZWdtZW50cy5sZW5ndGggLSAxXVxuXG4gIC8vIGlmIHRoZSBkZWZhdWx0IHNsb3QgaXMgc2hvd2luZywgd2UgcmV0dXJuIG51bGwgc2luY2UgaXQncyBub3QgdGVjaG5pY2FsbHkgXCJzZWxlY3RlZFwiIChpdCdzIGEgZmFsbGJhY2spXG4gIC8vIGFuZCByZXR1cm5pbmcgYW4gaW50ZXJuYWwgdmFsdWUgbGlrZSBgX19ERUZBVUxUX19gIHdvdWxkIGJlIGNvbmZ1c2luZy5cbiAgcmV0dXJuIHNlbGVjdGVkTGF5b3V0U2VnbWVudCA9PT0gREVGQVVMVF9TRUdNRU5UX0tFWVxuICAgID8gbnVsbFxuICAgIDogc2VsZWN0ZWRMYXlvdXRTZWdtZW50XG59XG5cbi8vIFNoYXJlZCBjb21wb25lbnRzIEFQSXNcbmV4cG9ydCB7XG4gIG5vdEZvdW5kLFxuICBmb3JiaWRkZW4sXG4gIHVuYXV0aG9yaXplZCxcbiAgcmVkaXJlY3QsXG4gIHBlcm1hbmVudFJlZGlyZWN0LFxuICBSZWRpcmVjdFR5cGUsXG4gIFJlYWRvbmx5VVJMU2VhcmNoUGFyYW1zLFxuICB1bnN0YWJsZV9yZXRocm93LFxufSBmcm9tICcuL25hdmlnYXRpb24ucmVhY3Qtc2VydmVyJ1xuIl0sIm5hbWVzIjpbIlJlYWRvbmx5VVJMU2VhcmNoUGFyYW1zIiwiUmVkaXJlY3RUeXBlIiwiU2VydmVySW5zZXJ0ZWRIVE1MQ29udGV4dCIsImZvcmJpZGRlbiIsIm5vdEZvdW5kIiwicGVybWFuZW50UmVkaXJlY3QiLCJyZWRpcmVjdCIsInVuYXV0aG9yaXplZCIsInVuc3RhYmxlX3JldGhyb3ciLCJ1c2VQYXJhbXMiLCJ1c2VQYXRobmFtZSIsInVzZVJvdXRlciIsInVzZVNlYXJjaFBhcmFtcyIsInVzZVNlbGVjdGVkTGF5b3V0U2VnbWVudCIsInVzZVNlbGVjdGVkTGF5b3V0U2VnbWVudHMiLCJ1c2VTZXJ2ZXJJbnNlcnRlZEhUTUwiLCJ1c2VEeW5hbWljUm91dGVQYXJhbXMiLCJ3aW5kb3ciLCJyZXF1aXJlIiwidW5kZWZpbmVkIiwic2VhcmNoUGFyYW1zIiwidXNlQ29udGV4dCIsIlNlYXJjaFBhcmFtc0NvbnRleHQiLCJyZWFkb25seVNlYXJjaFBhcmFtcyIsInVzZU1lbW8iLCJiYWlsb3V0VG9DbGllbnRSZW5kZXJpbmciLCJQYXRobmFtZUNvbnRleHQiLCJyb3V0ZXIiLCJBcHBSb3V0ZXJDb250ZXh0IiwiRXJyb3IiLCJQYXRoUGFyYW1zQ29udGV4dCIsImdldFNlbGVjdGVkTGF5b3V0U2VnbWVudFBhdGgiLCJ0cmVlIiwicGFyYWxsZWxSb3V0ZUtleSIsImZpcnN0Iiwic2VnbWVudFBhdGgiLCJub2RlIiwicGFyYWxsZWxSb3V0ZXMiLCJjaGlsZHJlbiIsIk9iamVjdCIsInZhbHVlcyIsInNlZ21lbnQiLCJzZWdtZW50VmFsdWUiLCJnZXRTZWdtZW50VmFsdWUiLCJzdGFydHNXaXRoIiwiUEFHRV9TRUdNRU5UX0tFWSIsInB1c2giLCJjb250ZXh0IiwiTGF5b3V0Um91dGVyQ29udGV4dCIsInBhcmVudFRyZWUiLCJzZWxlY3RlZExheW91dFNlZ21lbnRzIiwibGVuZ3RoIiwic2VsZWN0ZWRMYXlvdXRTZWdtZW50IiwiREVGQVVMVF9TRUdNRU5UX0tFWSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/navigation.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/navigation.react-server.js":
|
||
/*!*****************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/navigation.react-server.js ***!
|
||
\*****************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/** @internal */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n ReadonlyURLSearchParams: function() {\n return ReadonlyURLSearchParams;\n },\n RedirectType: function() {\n return _redirecterror.RedirectType;\n },\n forbidden: function() {\n return _forbidden.forbidden;\n },\n notFound: function() {\n return _notfound.notFound;\n },\n permanentRedirect: function() {\n return _redirect.permanentRedirect;\n },\n redirect: function() {\n return _redirect.redirect;\n },\n unauthorized: function() {\n return _unauthorized.unauthorized;\n },\n unstable_rethrow: function() {\n return _unstablerethrow.unstable_rethrow;\n }\n});\nconst _redirect = __webpack_require__(/*! ./redirect */ \"(app-pages-browser)/./node_modules/next/dist/client/components/redirect.js\");\nconst _redirecterror = __webpack_require__(/*! ./redirect-error */ \"(app-pages-browser)/./node_modules/next/dist/client/components/redirect-error.js\");\nconst _notfound = __webpack_require__(/*! ./not-found */ \"(app-pages-browser)/./node_modules/next/dist/client/components/not-found.js\");\nconst _forbidden = __webpack_require__(/*! ./forbidden */ \"(app-pages-browser)/./node_modules/next/dist/client/components/forbidden.js\");\nconst _unauthorized = __webpack_require__(/*! ./unauthorized */ \"(app-pages-browser)/./node_modules/next/dist/client/components/unauthorized.js\");\nconst _unstablerethrow = __webpack_require__(/*! ./unstable-rethrow */ \"(app-pages-browser)/./node_modules/next/dist/client/components/unstable-rethrow.js\");\nclass ReadonlyURLSearchParamsError extends Error {\n constructor(){\n super('Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams');\n }\n}\nclass ReadonlyURLSearchParams extends URLSearchParams {\n /** @deprecated Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams */ append() {\n throw new ReadonlyURLSearchParamsError();\n }\n /** @deprecated Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams */ delete() {\n throw new ReadonlyURLSearchParamsError();\n }\n /** @deprecated Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams */ set() {\n throw new ReadonlyURLSearchParamsError();\n }\n /** @deprecated Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams */ sort() {\n throw new ReadonlyURLSearchParamsError();\n }\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=navigation.react-server.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvbmF2aWdhdGlvbi5yZWFjdC1zZXJ2ZXIuanMiLCJtYXBwaW5ncyI6IkFBQUEsY0FBYzs7Ozs7Ozs7Ozs7O0lBa0NMQSx1QkFBdUI7ZUFBdkJBOztJQUxBQyxZQUFZO2VBQVpBLGVBQUFBLFlBQVk7O0lBRVpDLFNBQVM7ZUFBVEEsV0FBQUEsU0FBUzs7SUFEVEMsUUFBUTtlQUFSQSxVQUFBQSxRQUFROztJQUZFQyxpQkFBaUI7ZUFBakJBLFVBQUFBLGlCQUFpQjs7SUFBM0JDLFFBQVE7ZUFBUkEsVUFBQUEsUUFBUTs7SUFJUkMsWUFBWTtlQUFaQSxjQUFBQSxZQUFZOztJQUNaQyxnQkFBZ0I7ZUFBaEJBLGlCQUFBQSxnQkFBZ0I7OztzQ0FMbUI7MkNBQ2Y7c0NBQ0o7dUNBQ0M7MENBQ0c7NkNBQ0k7QUFoQ2pDLE1BQU1DLHFDQUFxQ0M7SUFDekNDLGFBQWM7UUFDWixLQUFLLENBQ0g7SUFFSjtBQUNGO0FBRUEsTUFBTVYsZ0NBQWdDVztJQUNwQyx3S0FBd0ssR0FDeEtDLFNBQVM7UUFDUCxNQUFNLElBQUlKO0lBQ1o7SUFDQSx3S0FBd0ssR0FDeEtLLFNBQVM7UUFDUCxNQUFNLElBQUlMO0lBQ1o7SUFDQSx3S0FBd0ssR0FDeEtNLE1BQU07UUFDSixNQUFNLElBQUlOO0lBQ1o7SUFDQSx3S0FBd0ssR0FDeEtPLE9BQU87UUFDTCxNQUFNLElBQUlQO0lBQ1o7QUFDRiIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvc3JjL2NsaWVudC9jb21wb25lbnRzL25hdmlnYXRpb24ucmVhY3Qtc2VydmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBAaW50ZXJuYWwgKi9cbmNsYXNzIFJlYWRvbmx5VVJMU2VhcmNoUGFyYW1zRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFxuICAgICAgJ01ldGhvZCB1bmF2YWlsYWJsZSBvbiBgUmVhZG9ubHlVUkxTZWFyY2hQYXJhbXNgLiBSZWFkIG1vcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9hcGktcmVmZXJlbmNlL2Z1bmN0aW9ucy91c2Utc2VhcmNoLXBhcmFtcyN1cGRhdGluZy1zZWFyY2hwYXJhbXMnXG4gICAgKVxuICB9XG59XG5cbmNsYXNzIFJlYWRvbmx5VVJMU2VhcmNoUGFyYW1zIGV4dGVuZHMgVVJMU2VhcmNoUGFyYW1zIHtcbiAgLyoqIEBkZXByZWNhdGVkIE1ldGhvZCB1bmF2YWlsYWJsZSBvbiBgUmVhZG9ubHlVUkxTZWFyY2hQYXJhbXNgLiBSZWFkIG1vcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9hcGktcmVmZXJlbmNlL2Z1bmN0aW9ucy91c2Utc2VhcmNoLXBhcmFtcyN1cGRhdGluZy1zZWFyY2hwYXJhbXMgKi9cbiAgYXBwZW5kKCkge1xuICAgIHRocm93IG5ldyBSZWFkb25seVVSTFNlYXJjaFBhcmFtc0Vycm9yKClcbiAgfVxuICAvKiogQGRlcHJlY2F0ZWQgTWV0aG9kIHVuYXZhaWxhYmxlIG9uIGBSZWFkb25seVVSTFNlYXJjaFBhcmFtc2AuIFJlYWQgbW9yZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2FwaS1yZWZlcmVuY2UvZnVuY3Rpb25zL3VzZS1zZWFyY2gtcGFyYW1zI3VwZGF0aW5nLXNlYXJjaHBhcmFtcyAqL1xuICBkZWxldGUoKSB7XG4gICAgdGhyb3cgbmV3IFJlYWRvbmx5VVJMU2VhcmNoUGFyYW1zRXJyb3IoKVxuICB9XG4gIC8qKiBAZGVwcmVjYXRlZCBNZXRob2QgdW5hdmFpbGFibGUgb24gYFJlYWRvbmx5VVJMU2VhcmNoUGFyYW1zYC4gUmVhZCBtb3JlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYXBpLXJlZmVyZW5jZS9mdW5jdGlvbnMvdXNlLXNlYXJjaC1wYXJhbXMjdXBkYXRpbmctc2VhcmNocGFyYW1zICovXG4gIHNldCgpIHtcbiAgICB0aHJvdyBuZXcgUmVhZG9ubHlVUkxTZWFyY2hQYXJhbXNFcnJvcigpXG4gIH1cbiAgLyoqIEBkZXByZWNhdGVkIE1ldGhvZCB1bmF2YWlsYWJsZSBvbiBgUmVhZG9ubHlVUkxTZWFyY2hQYXJhbXNgLiBSZWFkIG1vcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9hcGktcmVmZXJlbmNlL2Z1bmN0aW9ucy91c2Utc2VhcmNoLXBhcmFtcyN1cGRhdGluZy1zZWFyY2hwYXJhbXMgKi9cbiAgc29ydCgpIHtcbiAgICB0aHJvdyBuZXcgUmVhZG9ubHlVUkxTZWFyY2hQYXJhbXNFcnJvcigpXG4gIH1cbn1cblxuZXhwb3J0IHsgcmVkaXJlY3QsIHBlcm1hbmVudFJlZGlyZWN0IH0gZnJvbSAnLi9yZWRpcmVjdCdcbmV4cG9ydCB7IFJlZGlyZWN0VHlwZSB9IGZyb20gJy4vcmVkaXJlY3QtZXJyb3InXG5leHBvcnQgeyBub3RGb3VuZCB9IGZyb20gJy4vbm90LWZvdW5kJ1xuZXhwb3J0IHsgZm9yYmlkZGVuIH0gZnJvbSAnLi9mb3JiaWRkZW4nXG5leHBvcnQgeyB1bmF1dGhvcml6ZWQgfSBmcm9tICcuL3VuYXV0aG9yaXplZCdcbmV4cG9ydCB7IHVuc3RhYmxlX3JldGhyb3cgfSBmcm9tICcuL3Vuc3RhYmxlLXJldGhyb3cnXG5leHBvcnQgeyBSZWFkb25seVVSTFNlYXJjaFBhcmFtcyB9XG4iXSwibmFtZXMiOlsiUmVhZG9ubHlVUkxTZWFyY2hQYXJhbXMiLCJSZWRpcmVjdFR5cGUiLCJmb3JiaWRkZW4iLCJub3RGb3VuZCIsInBlcm1hbmVudFJlZGlyZWN0IiwicmVkaXJlY3QiLCJ1bmF1dGhvcml6ZWQiLCJ1bnN0YWJsZV9yZXRocm93IiwiUmVhZG9ubHlVUkxTZWFyY2hQYXJhbXNFcnJvciIsIkVycm9yIiwiY29uc3RydWN0b3IiLCJVUkxTZWFyY2hQYXJhbXMiLCJhcHBlbmQiLCJkZWxldGUiLCJzZXQiLCJzb3J0Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/navigation.react-server.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/not-found.js":
|
||
/*!***************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/not-found.js ***!
|
||
\***************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"notFound\", ({\n enumerable: true,\n get: function() {\n return notFound;\n }\n}));\nconst _httpaccessfallback = __webpack_require__(/*! ./http-access-fallback/http-access-fallback */ \"(app-pages-browser)/./node_modules/next/dist/client/components/http-access-fallback/http-access-fallback.js\");\n/**\n * This function allows you to render the [not-found.js file](https://nextjs.org/docs/app/api-reference/file-conventions/not-found)\n * within a route segment as well as inject a tag.\n *\n * `notFound()` can be used in\n * [Server Components](https://nextjs.org/docs/app/building-your-application/rendering/server-components),\n * [Route Handlers](https://nextjs.org/docs/app/building-your-application/routing/route-handlers), and\n * [Server Actions](https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations).\n *\n * - In a Server Component, this will insert a `<meta name=\"robots\" content=\"noindex\" />` meta tag and set the status code to 404.\n * - In a Route Handler or Server Action, it will serve a 404 to the caller.\n *\n * Read more: [Next.js Docs: `notFound`](https://nextjs.org/docs/app/api-reference/functions/not-found)\n */ const DIGEST = \"\" + _httpaccessfallback.HTTP_ERROR_FALLBACK_ERROR_CODE + \";404\";\nfunction notFound() {\n // eslint-disable-next-line no-throw-literal\n const error = Object.defineProperty(new Error(DIGEST), \"__NEXT_ERROR_CODE\", {\n value: \"E394\",\n enumerable: false,\n configurable: true\n });\n error.digest = DIGEST;\n throw error;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=not-found.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvbm90LWZvdW5kLmpzIiwibWFwcGluZ3MiOiI7Ozs7NENBc0JnQkE7OztlQUFBQTs7O2dEQW5CVDtBQUVQOzs7Ozs7Ozs7Ozs7O0NBYUMsR0FFRCxNQUFNQyxTQUFVLEtBQUVDLG9CQUFBQSw4QkFBOEIsR0FBQztBQUUxQyxTQUFTRjtJQUNkLDRDQUE0QztJQUM1QyxNQUFNRyxRQUFRLHFCQUFpQixDQUFqQixJQUFJQyxNQUFNSCxTQUFWO2VBQUE7b0JBQUE7c0JBQUE7SUFBZ0I7SUFDNUJFLE1BQWtDRSxNQUFNLEdBQUdKO0lBRTdDLE1BQU1FO0FBQ1IiLCJzb3VyY2VzIjpbIi9ob21lL05pY2hvbGFpL3NyYy9jbGllbnQvY29tcG9uZW50cy9ub3QtZm91bmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSFRUUF9FUlJPUl9GQUxMQkFDS19FUlJPUl9DT0RFLFxuICB0eXBlIEhUVFBBY2Nlc3NGYWxsYmFja0Vycm9yLFxufSBmcm9tICcuL2h0dHAtYWNjZXNzLWZhbGxiYWNrL2h0dHAtYWNjZXNzLWZhbGxiYWNrJ1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byByZW5kZXIgdGhlIFtub3QtZm91bmQuanMgZmlsZV0oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2FwaS1yZWZlcmVuY2UvZmlsZS1jb252ZW50aW9ucy9ub3QtZm91bmQpXG4gKiB3aXRoaW4gYSByb3V0ZSBzZWdtZW50IGFzIHdlbGwgYXMgaW5qZWN0IGEgdGFnLlxuICpcbiAqIGBub3RGb3VuZCgpYCBjYW4gYmUgdXNlZCBpblxuICogW1NlcnZlciBDb21wb25lbnRzXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9yZW5kZXJpbmcvc2VydmVyLWNvbXBvbmVudHMpLFxuICogW1JvdXRlIEhhbmRsZXJzXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9yb3V0aW5nL3JvdXRlLWhhbmRsZXJzKSwgYW5kXG4gKiBbU2VydmVyIEFjdGlvbnNdKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9idWlsZGluZy15b3VyLWFwcGxpY2F0aW9uL2RhdGEtZmV0Y2hpbmcvc2VydmVyLWFjdGlvbnMtYW5kLW11dGF0aW9ucykuXG4gKlxuICogLSBJbiBhIFNlcnZlciBDb21wb25lbnQsIHRoaXMgd2lsbCBpbnNlcnQgYSBgPG1ldGEgbmFtZT1cInJvYm90c1wiIGNvbnRlbnQ9XCJub2luZGV4XCIgLz5gIG1ldGEgdGFnIGFuZCBzZXQgdGhlIHN0YXR1cyBjb2RlIHRvIDQwNC5cbiAqIC0gSW4gYSBSb3V0ZSBIYW5kbGVyIG9yIFNlcnZlciBBY3Rpb24sIGl0IHdpbGwgc2VydmUgYSA0MDQgdG8gdGhlIGNhbGxlci5cbiAqXG4gKiBSZWFkIG1vcmU6IFtOZXh0LmpzIERvY3M6IGBub3RGb3VuZGBdKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9hcGktcmVmZXJlbmNlL2Z1bmN0aW9ucy9ub3QtZm91bmQpXG4gKi9cblxuY29uc3QgRElHRVNUID0gYCR7SFRUUF9FUlJPUl9GQUxMQkFDS19FUlJPUl9DT0RFfTs0MDRgXG5cbmV4cG9ydCBmdW5jdGlvbiBub3RGb3VuZCgpOiBuZXZlciB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKERJR0VTVCkgYXMgSFRUUEFjY2Vzc0ZhbGxiYWNrRXJyb3JcbiAgOyhlcnJvciBhcyBIVFRQQWNjZXNzRmFsbGJhY2tFcnJvcikuZGlnZXN0ID0gRElHRVNUXG5cbiAgdGhyb3cgZXJyb3Jcbn1cbiJdLCJuYW1lcyI6WyJub3RGb3VuZCIsIkRJR0VTVCIsIkhUVFBfRVJST1JfRkFMTEJBQ0tfRVJST1JfQ09ERSIsImVycm9yIiwiRXJyb3IiLCJkaWdlc3QiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/not-found.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/promise-queue.js":
|
||
/*!*******************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/promise-queue.js ***!
|
||
\*******************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/*\n This is a simple promise queue that allows you to limit the number of concurrent promises\n that are running at any given time. It's used to limit the number of concurrent\n prefetch requests that are being made to the server but could be used for other\n things as well.\n*/ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"PromiseQueue\", ({\n enumerable: true,\n get: function() {\n return PromiseQueue;\n }\n}));\nconst _class_private_field_loose_base = __webpack_require__(/*! @swc/helpers/_/_class_private_field_loose_base */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_class_private_field_loose_base.js\");\nconst _class_private_field_loose_key = __webpack_require__(/*! @swc/helpers/_/_class_private_field_loose_key */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_class_private_field_loose_key.js\");\nvar _maxConcurrency = /*#__PURE__*/ _class_private_field_loose_key._(\"_maxConcurrency\"), _runningCount = /*#__PURE__*/ _class_private_field_loose_key._(\"_runningCount\"), _queue = /*#__PURE__*/ _class_private_field_loose_key._(\"_queue\"), _processNext = /*#__PURE__*/ _class_private_field_loose_key._(\"_processNext\");\nclass PromiseQueue {\n enqueue(promiseFn) {\n let taskResolve;\n let taskReject;\n const taskPromise = new Promise((resolve, reject)=>{\n taskResolve = resolve;\n taskReject = reject;\n });\n const task = async ()=>{\n try {\n _class_private_field_loose_base._(this, _runningCount)[_runningCount]++;\n const result = await promiseFn();\n taskResolve(result);\n } catch (error) {\n taskReject(error);\n } finally{\n _class_private_field_loose_base._(this, _runningCount)[_runningCount]--;\n _class_private_field_loose_base._(this, _processNext)[_processNext]();\n }\n };\n const enqueueResult = {\n promiseFn: taskPromise,\n task\n };\n // wonder if we should take a LIFO approach here\n _class_private_field_loose_base._(this, _queue)[_queue].push(enqueueResult);\n _class_private_field_loose_base._(this, _processNext)[_processNext]();\n return taskPromise;\n }\n bump(promiseFn) {\n const index = _class_private_field_loose_base._(this, _queue)[_queue].findIndex((item)=>item.promiseFn === promiseFn);\n if (index > -1) {\n const bumpedItem = _class_private_field_loose_base._(this, _queue)[_queue].splice(index, 1)[0];\n _class_private_field_loose_base._(this, _queue)[_queue].unshift(bumpedItem);\n _class_private_field_loose_base._(this, _processNext)[_processNext](true);\n }\n }\n constructor(maxConcurrency = 5){\n Object.defineProperty(this, _processNext, {\n value: processNext\n });\n Object.defineProperty(this, _maxConcurrency, {\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, _runningCount, {\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, _queue, {\n writable: true,\n value: void 0\n });\n _class_private_field_loose_base._(this, _maxConcurrency)[_maxConcurrency] = maxConcurrency;\n _class_private_field_loose_base._(this, _runningCount)[_runningCount] = 0;\n _class_private_field_loose_base._(this, _queue)[_queue] = [];\n }\n}\nfunction processNext(forced) {\n if (forced === void 0) forced = false;\n if ((_class_private_field_loose_base._(this, _runningCount)[_runningCount] < _class_private_field_loose_base._(this, _maxConcurrency)[_maxConcurrency] || forced) && _class_private_field_loose_base._(this, _queue)[_queue].length > 0) {\n var _class_private_field_loose_base__queue_shift;\n (_class_private_field_loose_base__queue_shift = _class_private_field_loose_base._(this, _queue)[_queue].shift()) == null ? void 0 : _class_private_field_loose_base__queue_shift.task();\n }\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=promise-queue.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcHJvbWlzZS1xdWV1ZS5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7Ozs7QUFLQTs7OztnREFDYUE7OztlQUFBQTs7Ozs7SUFDWCxxRkFDQSxpRkFDQSxtRUFtREE7QUF0REssTUFBTUE7SUFjWEMsUUFBV0MsU0FBMkIsRUFBYztRQUNsRCxJQUFJQztRQUNKLElBQUlDO1FBRUosTUFBTUMsY0FBYyxJQUFJQyxRQUFRLENBQUNDLFNBQVNDO1lBQ3hDTCxjQUFjSTtZQUNkSCxhQUFhSTtRQUNmO1FBRUEsTUFBTUMsT0FBTztZQUNYLElBQUk7Z0JBQ0Ysc0NBQUksRUFBQztnQkFDTCxNQUFNQyxTQUFTLE1BQU1SO2dCQUNyQkMsWUFBWU87WUFDZCxFQUFFLE9BQU9DLE9BQU87Z0JBQ2RQLFdBQVdPO1lBQ2IsU0FBVTtnQkFDUixzQ0FBSSxFQUFDO2dCQUNMLHNDQUFJLEVBQUM7WUFDUDtRQUNGO1FBRUEsTUFBTUMsZ0JBQWdCO1lBQUVWLFdBQVdHO1lBQWFJO1FBQUs7UUFDckQsZ0RBQWdEO1FBQ2hELHNDQUFJLEVBQUMsZ0JBQU9JLElBQUksQ0FBQ0Q7UUFDakIsc0NBQUksRUFBQztRQUVMLE9BQU9QO0lBQ1Q7SUFFQVMsS0FBS1osU0FBdUIsRUFBRTtRQUM1QixNQUFNYSxRQUFRLHNDQUFJLEVBQUMsZ0JBQU9DLFNBQVMsQ0FBQyxDQUFDQyxPQUFTQSxLQUFLZixTQUFTLEtBQUtBO1FBRWpFLElBQUlhLFFBQVEsQ0FBQyxHQUFHO1lBQ2QsTUFBTUcsYUFBYSxzQ0FBSSxFQUFDLGdCQUFPQyxNQUFNLENBQUNKLE9BQU8sRUFBRSxDQUFDLEVBQUU7WUFDbEQsc0NBQUksRUFBQyxnQkFBT0ssT0FBTyxDQUFDRjtZQUNwQixzQ0FBSSxFQUFDLDRCQUFhO1FBQ3BCO0lBQ0Y7SUE1Q0FHLFlBQVlDLGlCQUFpQixDQUFDLENBQUU7UUE4Q2hDO21CQUFBOztRQXJEQTs7bUJBQUE7O1FBQ0E7O21CQUFBOztRQUNBOzttQkFBQTs7UUFNRSxzQ0FBSSxFQUFDLG9DQUFrQkE7UUFDdkIsc0NBQUksRUFBQyxnQ0FBZ0I7UUFDckIsc0NBQUksRUFBQyxrQkFBUyxFQUFFO0lBQ2xCO0FBa0RGO0FBUkUscUJBQWFDLE1BQWM7SUFBZEEsSUFBQUEsV0FBQUEsS0FBQUEsR0FBQUEsU0FBUztJQUNwQixJQUNHLHVDQUFJLEVBQUMsZ0NBQWdCLHNDQUFJLEVBQUMscUNBQW1CQSxNQUFBQSxDQUFLLElBQ25ELHNDQUFJLEVBQUMsZ0JBQU9DLE1BQU0sR0FBRyxHQUNyQjtZQUNBO1NBQUEscUZBQUksRUFBQyxnQkFBT0MsS0FBSyx1QkFBakIsNkNBQXFCaEIsSUFBSTtJQUMzQjtBQUNGIiwic291cmNlcyI6WyIvaG9tZS9OaWNob2xhaS9zcmMvY2xpZW50L2NvbXBvbmVudHMvcHJvbWlzZS1xdWV1ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICAgIFRoaXMgaXMgYSBzaW1wbGUgcHJvbWlzZSBxdWV1ZSB0aGF0IGFsbG93cyB5b3UgdG8gbGltaXQgdGhlIG51bWJlciBvZiBjb25jdXJyZW50IHByb21pc2VzXG4gICAgdGhhdCBhcmUgcnVubmluZyBhdCBhbnkgZ2l2ZW4gdGltZS4gSXQncyB1c2VkIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgY29uY3VycmVudFxuICAgIHByZWZldGNoIHJlcXVlc3RzIHRoYXQgYXJlIGJlaW5nIG1hZGUgdG8gdGhlIHNlcnZlciBidXQgY291bGQgYmUgdXNlZCBmb3Igb3RoZXJcbiAgICB0aGluZ3MgYXMgd2VsbC5cbiovXG5leHBvcnQgY2xhc3MgUHJvbWlzZVF1ZXVlIHtcbiAgI21heENvbmN1cnJlbmN5OiBudW1iZXJcbiAgI3J1bm5pbmdDb3VudDogbnVtYmVyXG4gICNxdWV1ZTogQXJyYXk8e1xuICAgIHByb21pc2VGbjogUHJvbWlzZTxhbnk+XG4gICAgdGFzazogKCkgPT4gdm9pZFxuICB9PlxuXG4gIGNvbnN0cnVjdG9yKG1heENvbmN1cnJlbmN5ID0gNSkge1xuICAgIHRoaXMuI21heENvbmN1cnJlbmN5ID0gbWF4Q29uY3VycmVuY3lcbiAgICB0aGlzLiNydW5uaW5nQ291bnQgPSAwXG4gICAgdGhpcy4jcXVldWUgPSBbXVxuICB9XG5cbiAgZW5xdWV1ZTxUPihwcm9taXNlRm46ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICBsZXQgdGFza1Jlc29sdmU6ICh2YWx1ZTogVCB8IFByb21pc2VMaWtlPFQ+KSA9PiB2b2lkXG4gICAgbGV0IHRhc2tSZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWRcblxuICAgIGNvbnN0IHRhc2tQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGFza1Jlc29sdmUgPSByZXNvbHZlXG4gICAgICB0YXNrUmVqZWN0ID0gcmVqZWN0XG4gICAgfSkgYXMgUHJvbWlzZTxUPlxuXG4gICAgY29uc3QgdGFzayA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuI3J1bm5pbmdDb3VudCsrXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb21pc2VGbigpXG4gICAgICAgIHRhc2tSZXNvbHZlKHJlc3VsdClcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRhc2tSZWplY3QoZXJyb3IpXG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLiNydW5uaW5nQ291bnQtLVxuICAgICAgICB0aGlzLiNwcm9jZXNzTmV4dCgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZW5xdWV1ZVJlc3VsdCA9IHsgcHJvbWlzZUZuOiB0YXNrUHJvbWlzZSwgdGFzayB9XG4gICAgLy8gd29uZGVyIGlmIHdlIHNob3VsZCB0YWtlIGEgTElGTyBhcHByb2FjaCBoZXJlXG4gICAgdGhpcy4jcXVldWUucHVzaChlbnF1ZXVlUmVzdWx0KVxuICAgIHRoaXMuI3Byb2Nlc3NOZXh0KClcblxuICAgIHJldHVybiB0YXNrUHJvbWlzZVxuICB9XG5cbiAgYnVtcChwcm9taXNlRm46IFByb21pc2U8YW55Pikge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy4jcXVldWUuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLnByb21pc2VGbiA9PT0gcHJvbWlzZUZuKVxuXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIGNvbnN0IGJ1bXBlZEl0ZW0gPSB0aGlzLiNxdWV1ZS5zcGxpY2UoaW5kZXgsIDEpWzBdXG4gICAgICB0aGlzLiNxdWV1ZS51bnNoaWZ0KGJ1bXBlZEl0ZW0pXG4gICAgICB0aGlzLiNwcm9jZXNzTmV4dCh0cnVlKVxuICAgIH1cbiAgfVxuXG4gICNwcm9jZXNzTmV4dChmb3JjZWQgPSBmYWxzZSkge1xuICAgIGlmIChcbiAgICAgICh0aGlzLiNydW5uaW5nQ291bnQgPCB0aGlzLiNtYXhDb25jdXJyZW5jeSB8fCBmb3JjZWQpICYmXG4gICAgICB0aGlzLiNxdWV1ZS5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICB0aGlzLiNxdWV1ZS5zaGlmdCgpPy50YXNrKClcbiAgICB9XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJQcm9taXNlUXVldWUiLCJlbnF1ZXVlIiwicHJvbWlzZUZuIiwidGFza1Jlc29sdmUiLCJ0YXNrUmVqZWN0IiwidGFza1Byb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInRhc2siLCJyZXN1bHQiLCJlcnJvciIsImVucXVldWVSZXN1bHQiLCJwdXNoIiwiYnVtcCIsImluZGV4IiwiZmluZEluZGV4IiwiaXRlbSIsImJ1bXBlZEl0ZW0iLCJzcGxpY2UiLCJ1bnNoaWZ0IiwiY29uc3RydWN0b3IiLCJtYXhDb25jdXJyZW5jeSIsImZvcmNlZCIsImxlbmd0aCIsInNoaWZ0Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/promise-queue.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/redirect-boundary.js":
|
||
/*!***********************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/redirect-boundary.js ***!
|
||
\***********************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n RedirectBoundary: function() {\n return RedirectBoundary;\n },\n RedirectErrorBoundary: function() {\n return RedirectErrorBoundary;\n }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _navigation = __webpack_require__(/*! ./navigation */ \"(app-pages-browser)/./node_modules/next/dist/client/components/navigation.js\");\nconst _redirect = __webpack_require__(/*! ./redirect */ \"(app-pages-browser)/./node_modules/next/dist/client/components/redirect.js\");\nconst _redirecterror = __webpack_require__(/*! ./redirect-error */ \"(app-pages-browser)/./node_modules/next/dist/client/components/redirect-error.js\");\nfunction HandleRedirect(param) {\n let { redirect, reset, redirectType } = param;\n const router = (0, _navigation.useRouter)();\n (0, _react.useEffect)(()=>{\n _react.default.startTransition(()=>{\n if (redirectType === _redirecterror.RedirectType.push) {\n router.push(redirect, {});\n } else {\n router.replace(redirect, {});\n }\n reset();\n });\n }, [\n redirect,\n redirectType,\n reset,\n router\n ]);\n return null;\n}\n_c = HandleRedirect;\nclass RedirectErrorBoundary extends _react.default.Component {\n static getDerivedStateFromError(error) {\n if ((0, _redirecterror.isRedirectError)(error)) {\n const url = (0, _redirect.getURLFromRedirectError)(error);\n const redirectType = (0, _redirect.getRedirectTypeFromError)(error);\n return {\n redirect: url,\n redirectType\n };\n }\n // Re-throw if error is not for redirect\n throw error;\n }\n // Explicit type is needed to avoid the generated `.d.ts` having a wide return type that could be specific to the `@types/react` version.\n render() {\n const { redirect, redirectType } = this.state;\n if (redirect !== null && redirectType !== null) {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(HandleRedirect, {\n redirect: redirect,\n redirectType: redirectType,\n reset: ()=>this.setState({\n redirect: null\n })\n });\n }\n return this.props.children;\n }\n constructor(props){\n super(props);\n this.state = {\n redirect: null,\n redirectType: null\n };\n }\n}\nfunction RedirectBoundary(param) {\n let { children } = param;\n const router = (0, _navigation.useRouter)();\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(RedirectErrorBoundary, {\n router: router,\n children: children\n });\n}\n_c1 = RedirectBoundary;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=redirect-boundary.js.map\nvar _c, _c1;\n$RefreshReg$(_c, \"HandleRedirect\");\n$RefreshReg$(_c1, \"RedirectBoundary\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVkaXJlY3QtYm91bmRhcnkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBeUVnQkEsZ0JBQWdCO2VBQWhCQTs7SUFwQ0hDLHFCQUFxQjtlQUFyQkE7Ozs7OzZFQXBDb0I7d0NBRVA7c0NBQ3dDOzJDQUNwQjtBQU85Qyx3QkFBd0IsS0FRdkI7SUFSdUIsTUFDdEJFLFFBQVEsRUFDUkMsS0FBSyxFQUNMQyxZQUFZLEVBS2IsR0FSdUI7SUFTdEIsTUFBTUMsU0FBU0MsQ0FBQUEsR0FBQUEsWUFBQUEsU0FBQUE7SUFFZkMsQ0FBQUEsR0FBQUEsT0FBQUEsU0FBQUEsRUFBVTtRQUNSQyxPQUFBQSxPQUFLLENBQUNDLGVBQWUsQ0FBQztZQUNwQixJQUFJTCxpQkFBaUJNLGVBQUFBLFlBQVksQ0FBQ0MsSUFBSSxFQUFFO2dCQUN0Q04sT0FBT00sSUFBSSxDQUFDVCxVQUFVLENBQUM7WUFDekIsT0FBTztnQkFDTEcsT0FBT08sT0FBTyxDQUFDVixVQUFVLENBQUM7WUFDNUI7WUFDQUM7UUFDRjtJQUNGLEdBQUc7UUFBQ0Q7UUFBVUU7UUFBY0Q7UUFBT0U7S0FBTztJQUUxQyxPQUFPO0FBQ1Q7S0F2QlNKO0FBeUJGLE1BQU1ELDhCQUE4QlEsT0FBQUEsT0FBSyxDQUFDSyxTQUFTO0lBU3hELE9BQU9DLHlCQUF5QkMsS0FBVSxFQUFFO1FBQzFDLElBQUlDLENBQUFBLEdBQUFBLGVBQUFBLGVBQWUsRUFBQ0QsUUFBUTtZQUMxQixNQUFNRSxNQUFNQyxDQUFBQSxHQUFBQSxVQUFBQSx1QkFBQUEsRUFBd0JIO1lBQ3BDLE1BQU1YLGVBQWVlLENBQUFBLEdBQUFBLFVBQUFBLHdCQUFBQSxFQUF5Qko7WUFDOUMsT0FBTztnQkFBRWIsVUFBVWU7Z0JBQUtiO1lBQWE7UUFDdkM7UUFDQSx3Q0FBd0M7UUFDeEMsTUFBTVc7SUFDUjtJQUVBLHlJQUF5STtJQUN6SUssU0FBMEI7UUFDeEIsTUFBTSxFQUFFbEIsUUFBUSxFQUFFRSxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUNpQixLQUFLO1FBQzdDLElBQUluQixhQUFhLFFBQVFFLGlCQUFpQixNQUFNO1lBQzlDLHFCQUNFLHFCQUFDSCxnQkFBQUE7Z0JBQ0NDLFVBQVVBO2dCQUNWRSxjQUFjQTtnQkFDZEQsT0FBTyxJQUFNLElBQUksQ0FBQ21CLFFBQVEsQ0FBQzt3QkFBRXBCLFVBQVU7b0JBQUs7O1FBR2xEO1FBRUEsT0FBTyxJQUFJLENBQUNxQixLQUFLLENBQUNDLFFBQVE7SUFDNUI7SUE3QkFDLFlBQVlGLEtBQTRCLENBQUU7UUFDeEMsS0FBSyxDQUFDQTtRQUNOLElBQUksQ0FBQ0YsS0FBSyxHQUFHO1lBQUVuQixVQUFVO1lBQU1FLGNBQWM7UUFBSztJQUNwRDtBQTJCRjtBQUVPLDBCQUEwQixLQUEyQztJQUEzQyxNQUFFb0IsUUFBUSxFQUFpQyxHQUEzQztJQUMvQixNQUFNbkIsU0FBU0MsQ0FBQUEsR0FBQUEsWUFBQUEsU0FBQUE7SUFDZixxQkFDRSxxQkFBQ04sdUJBQUFBO1FBQXNCSyxRQUFRQTtrQkFBU21COztBQUU1QztNQUxnQnpCIiwic291cmNlcyI6WyIvaG9tZS9OaWNob2xhaS9zcmMvY2xpZW50L2NvbXBvbmVudHMvcmVkaXJlY3QtYm91bmRhcnkudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50J1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBBcHBSb3V0ZXJJbnN0YW5jZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9saWIvYXBwLXJvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHsgdXNlUm91dGVyIH0gZnJvbSAnLi9uYXZpZ2F0aW9uJ1xuaW1wb3J0IHsgZ2V0UmVkaXJlY3RUeXBlRnJvbUVycm9yLCBnZXRVUkxGcm9tUmVkaXJlY3RFcnJvciB9IGZyb20gJy4vcmVkaXJlY3QnXG5pbXBvcnQgeyBSZWRpcmVjdFR5cGUsIGlzUmVkaXJlY3RFcnJvciB9IGZyb20gJy4vcmVkaXJlY3QtZXJyb3InXG5cbmludGVyZmFjZSBSZWRpcmVjdEJvdW5kYXJ5UHJvcHMge1xuICByb3V0ZXI6IEFwcFJvdXRlckluc3RhbmNlXG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGVcbn1cblxuZnVuY3Rpb24gSGFuZGxlUmVkaXJlY3Qoe1xuICByZWRpcmVjdCxcbiAgcmVzZXQsXG4gIHJlZGlyZWN0VHlwZSxcbn06IHtcbiAgcmVkaXJlY3Q6IHN0cmluZ1xuICByZWRpcmVjdFR5cGU6IFJlZGlyZWN0VHlwZVxuICByZXNldDogKCkgPT4gdm9pZFxufSkge1xuICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgUmVhY3Quc3RhcnRUcmFuc2l0aW9uKCgpID0+IHtcbiAgICAgIGlmIChyZWRpcmVjdFR5cGUgPT09IFJlZGlyZWN0VHlwZS5wdXNoKSB7XG4gICAgICAgIHJvdXRlci5wdXNoKHJlZGlyZWN0LCB7fSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJvdXRlci5yZXBsYWNlKHJlZGlyZWN0LCB7fSlcbiAgICAgIH1cbiAgICAgIHJlc2V0KClcbiAgICB9KVxuICB9LCBbcmVkaXJlY3QsIHJlZGlyZWN0VHlwZSwgcmVzZXQsIHJvdXRlcl0pXG5cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGNsYXNzIFJlZGlyZWN0RXJyb3JCb3VuZGFyeSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgUmVkaXJlY3RCb3VuZGFyeVByb3BzLFxuICB7IHJlZGlyZWN0OiBzdHJpbmcgfCBudWxsOyByZWRpcmVjdFR5cGU6IFJlZGlyZWN0VHlwZSB8IG51bGwgfVxuPiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBSZWRpcmVjdEJvdW5kYXJ5UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcylcbiAgICB0aGlzLnN0YXRlID0geyByZWRpcmVjdDogbnVsbCwgcmVkaXJlY3RUeXBlOiBudWxsIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoZXJyb3I6IGFueSkge1xuICAgIGlmIChpc1JlZGlyZWN0RXJyb3IoZXJyb3IpKSB7XG4gICAgICBjb25zdCB1cmwgPSBnZXRVUkxGcm9tUmVkaXJlY3RFcnJvcihlcnJvcilcbiAgICAgIGNvbnN0IHJlZGlyZWN0VHlwZSA9IGdldFJlZGlyZWN0VHlwZUZyb21FcnJvcihlcnJvcilcbiAgICAgIHJldHVybiB7IHJlZGlyZWN0OiB1cmwsIHJlZGlyZWN0VHlwZSB9XG4gICAgfVxuICAgIC8vIFJlLXRocm93IGlmIGVycm9yIGlzIG5vdCBmb3IgcmVkaXJlY3RcbiAgICB0aHJvdyBlcnJvclxuICB9XG5cbiAgLy8gRXhwbGljaXQgdHlwZSBpcyBuZWVkZWQgdG8gYXZvaWQgdGhlIGdlbmVyYXRlZCBgLmQudHNgIGhhdmluZyBhIHdpZGUgcmV0dXJuIHR5cGUgdGhhdCBjb3VsZCBiZSBzcGVjaWZpYyB0byB0aGUgYEB0eXBlcy9yZWFjdGAgdmVyc2lvbi5cbiAgcmVuZGVyKCk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gICAgY29uc3QgeyByZWRpcmVjdCwgcmVkaXJlY3RUeXBlIH0gPSB0aGlzLnN0YXRlXG4gICAgaWYgKHJlZGlyZWN0ICE9PSBudWxsICYmIHJlZGlyZWN0VHlwZSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEhhbmRsZVJlZGlyZWN0XG4gICAgICAgICAgcmVkaXJlY3Q9e3JlZGlyZWN0fVxuICAgICAgICAgIHJlZGlyZWN0VHlwZT17cmVkaXJlY3RUeXBlfVxuICAgICAgICAgIHJlc2V0PXsoKSA9PiB0aGlzLnNldFN0YXRlKHsgcmVkaXJlY3Q6IG51bGwgfSl9XG4gICAgICAgIC8+XG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW5cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVkaXJlY3RCb3VuZGFyeSh7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZSB9KSB7XG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpXG4gIHJldHVybiAoXG4gICAgPFJlZGlyZWN0RXJyb3JCb3VuZGFyeSByb3V0ZXI9e3JvdXRlcn0+e2NoaWxkcmVufTwvUmVkaXJlY3RFcnJvckJvdW5kYXJ5PlxuICApXG59XG4iXSwibmFtZXMiOlsiUmVkaXJlY3RCb3VuZGFyeSIsIlJlZGlyZWN0RXJyb3JCb3VuZGFyeSIsIkhhbmRsZVJlZGlyZWN0IiwicmVkaXJlY3QiLCJyZXNldCIsInJlZGlyZWN0VHlwZSIsInJvdXRlciIsInVzZVJvdXRlciIsInVzZUVmZmVjdCIsIlJlYWN0Iiwic3RhcnRUcmFuc2l0aW9uIiwiUmVkaXJlY3RUeXBlIiwicHVzaCIsInJlcGxhY2UiLCJDb21wb25lbnQiLCJnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IiLCJlcnJvciIsImlzUmVkaXJlY3RFcnJvciIsInVybCIsImdldFVSTEZyb21SZWRpcmVjdEVycm9yIiwiZ2V0UmVkaXJlY3RUeXBlRnJvbUVycm9yIiwicmVuZGVyIiwic3RhdGUiLCJzZXRTdGF0ZSIsInByb3BzIiwiY2hpbGRyZW4iLCJjb25zdHJ1Y3RvciJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/redirect-boundary.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/redirect-error.js":
|
||
/*!********************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/redirect-error.js ***!
|
||
\********************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n REDIRECT_ERROR_CODE: function() {\n return REDIRECT_ERROR_CODE;\n },\n RedirectType: function() {\n return RedirectType;\n },\n isRedirectError: function() {\n return isRedirectError;\n }\n});\nconst _redirectstatuscode = __webpack_require__(/*! ./redirect-status-code */ \"(app-pages-browser)/./node_modules/next/dist/client/components/redirect-status-code.js\");\nconst REDIRECT_ERROR_CODE = 'NEXT_REDIRECT';\nvar RedirectType = /*#__PURE__*/ function(RedirectType) {\n RedirectType[\"push\"] = \"push\";\n RedirectType[\"replace\"] = \"replace\";\n return RedirectType;\n}({});\nfunction isRedirectError(error) {\n if (typeof error !== 'object' || error === null || !('digest' in error) || typeof error.digest !== 'string') {\n return false;\n }\n const digest = error.digest.split(';');\n const [errorCode, type] = digest;\n const destination = digest.slice(2, -2).join(';');\n const status = digest.at(-2);\n const statusCode = Number(status);\n return errorCode === REDIRECT_ERROR_CODE && (type === 'replace' || type === 'push') && typeof destination === 'string' && !isNaN(statusCode) && statusCode in _redirectstatuscode.RedirectStatusCode;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=redirect-error.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVkaXJlY3QtZXJyb3IuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBRWFBLG1CQUFtQjtlQUFuQkE7O0lBRURDLFlBQVk7ZUFBWkE7O0lBZ0JJQyxlQUFlO2VBQWZBOzs7Z0RBcEJtQjtBQUU1QixNQUFNRixzQkFBc0I7QUFFNUIsSUFBS0MsZUFBQUEsV0FBQUEsR0FBQUEsU0FBQUEsWUFBQUE7OztXQUFBQTs7QUFnQkwsU0FBU0MsZ0JBQWdCQyxLQUFjO0lBQzVDLElBQ0UsT0FBT0EsVUFBVSxZQUNqQkEsVUFBVSxRQUNWLENBQUUsYUFBWUEsS0FBQUEsQ0FBSSxJQUNsQixPQUFPQSxNQUFNQyxNQUFNLEtBQUssVUFDeEI7UUFDQSxPQUFPO0lBQ1Q7SUFFQSxNQUFNQSxTQUFTRCxNQUFNQyxNQUFNLENBQUNDLEtBQUssQ0FBQztJQUNsQyxNQUFNLENBQUNDLFdBQVdDLEtBQUssR0FBR0g7SUFDMUIsTUFBTUksY0FBY0osT0FBT0ssS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHQyxJQUFJLENBQUM7SUFDN0MsTUFBTUMsU0FBU1AsT0FBT1EsRUFBRSxDQUFDLENBQUM7SUFFMUIsTUFBTUMsYUFBYUMsT0FBT0g7SUFFMUIsT0FDRUwsY0FBY04sdUJBQ2JPLENBQUFBLFNBQVMsYUFBYUEsU0FBUyxPQUFLLElBQ3JDLE9BQU9DLGdCQUFnQixZQUN2QixDQUFDTyxNQUFNRixlQUNQQSxjQUFjRyxvQkFBQUEsa0JBQWtCO0FBRXBDIiwic291cmNlcyI6WyIvaG9tZS9OaWNob2xhaS9zcmMvY2xpZW50L2NvbXBvbmVudHMvcmVkaXJlY3QtZXJyb3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVkaXJlY3RTdGF0dXNDb2RlIH0gZnJvbSAnLi9yZWRpcmVjdC1zdGF0dXMtY29kZSdcblxuZXhwb3J0IGNvbnN0IFJFRElSRUNUX0VSUk9SX0NPREUgPSAnTkVYVF9SRURJUkVDVCdcblxuZXhwb3J0IGVudW0gUmVkaXJlY3RUeXBlIHtcbiAgcHVzaCA9ICdwdXNoJyxcbiAgcmVwbGFjZSA9ICdyZXBsYWNlJyxcbn1cblxuZXhwb3J0IHR5cGUgUmVkaXJlY3RFcnJvciA9IEVycm9yICYge1xuICBkaWdlc3Q6IGAke3R5cGVvZiBSRURJUkVDVF9FUlJPUl9DT0RFfTske1JlZGlyZWN0VHlwZX07JHtzdHJpbmd9OyR7UmVkaXJlY3RTdGF0dXNDb2RlfTtgXG59XG5cbi8qKlxuICogQ2hlY2tzIGFuIGVycm9yIHRvIGRldGVybWluZSBpZiBpdCdzIGFuIGVycm9yIGdlbmVyYXRlZCBieSB0aGVcbiAqIGByZWRpcmVjdCh1cmwpYCBoZWxwZXIuXG4gKlxuICogQHBhcmFtIGVycm9yIHRoZSBlcnJvciB0aGF0IG1heSByZWZlcmVuY2UgYSByZWRpcmVjdCBlcnJvclxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgZXJyb3IgaXMgYSByZWRpcmVjdCBlcnJvclxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZWRpcmVjdEVycm9yKGVycm9yOiB1bmtub3duKTogZXJyb3IgaXMgUmVkaXJlY3RFcnJvciB7XG4gIGlmIChcbiAgICB0eXBlb2YgZXJyb3IgIT09ICdvYmplY3QnIHx8XG4gICAgZXJyb3IgPT09IG51bGwgfHxcbiAgICAhKCdkaWdlc3QnIGluIGVycm9yKSB8fFxuICAgIHR5cGVvZiBlcnJvci5kaWdlc3QgIT09ICdzdHJpbmcnXG4gICkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgY29uc3QgZGlnZXN0ID0gZXJyb3IuZGlnZXN0LnNwbGl0KCc7JylcbiAgY29uc3QgW2Vycm9yQ29kZSwgdHlwZV0gPSBkaWdlc3RcbiAgY29uc3QgZGVzdGluYXRpb24gPSBkaWdlc3Quc2xpY2UoMiwgLTIpLmpvaW4oJzsnKVxuICBjb25zdCBzdGF0dXMgPSBkaWdlc3QuYXQoLTIpXG5cbiAgY29uc3Qgc3RhdHVzQ29kZSA9IE51bWJlcihzdGF0dXMpXG5cbiAgcmV0dXJuIChcbiAgICBlcnJvckNvZGUgPT09IFJFRElSRUNUX0VSUk9SX0NPREUgJiZcbiAgICAodHlwZSA9PT0gJ3JlcGxhY2UnIHx8IHR5cGUgPT09ICdwdXNoJykgJiZcbiAgICB0eXBlb2YgZGVzdGluYXRpb24gPT09ICdzdHJpbmcnICYmXG4gICAgIWlzTmFOKHN0YXR1c0NvZGUpICYmXG4gICAgc3RhdHVzQ29kZSBpbiBSZWRpcmVjdFN0YXR1c0NvZGVcbiAgKVxufVxuIl0sIm5hbWVzIjpbIlJFRElSRUNUX0VSUk9SX0NPREUiLCJSZWRpcmVjdFR5cGUiLCJpc1JlZGlyZWN0RXJyb3IiLCJlcnJvciIsImRpZ2VzdCIsInNwbGl0IiwiZXJyb3JDb2RlIiwidHlwZSIsImRlc3RpbmF0aW9uIiwic2xpY2UiLCJqb2luIiwic3RhdHVzIiwiYXQiLCJzdGF0dXNDb2RlIiwiTnVtYmVyIiwiaXNOYU4iLCJSZWRpcmVjdFN0YXR1c0NvZGUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/redirect-error.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/redirect-status-code.js":
|
||
/*!**************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/redirect-status-code.js ***!
|
||
\**************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"RedirectStatusCode\", ({\n enumerable: true,\n get: function() {\n return RedirectStatusCode;\n }\n}));\nvar RedirectStatusCode = /*#__PURE__*/ function(RedirectStatusCode) {\n RedirectStatusCode[RedirectStatusCode[\"SeeOther\"] = 303] = \"SeeOther\";\n RedirectStatusCode[RedirectStatusCode[\"TemporaryRedirect\"] = 307] = \"TemporaryRedirect\";\n RedirectStatusCode[RedirectStatusCode[\"PermanentRedirect\"] = 308] = \"PermanentRedirect\";\n return RedirectStatusCode;\n}({});\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=redirect-status-code.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVkaXJlY3Qtc3RhdHVzLWNvZGUuanMiLCJtYXBwaW5ncyI6Ijs7OztzREFBWUE7OztlQUFBQTs7O0FBQUwsSUFBS0EscUJBQUFBLFdBQUFBLEdBQUFBLFNBQUFBLGtCQUFBQTs7OztXQUFBQSIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvc3JjL2NsaWVudC9jb21wb25lbnRzL3JlZGlyZWN0LXN0YXR1cy1jb2RlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIFJlZGlyZWN0U3RhdHVzQ29kZSB7XG4gIFNlZU90aGVyID0gMzAzLFxuICBUZW1wb3JhcnlSZWRpcmVjdCA9IDMwNyxcbiAgUGVybWFuZW50UmVkaXJlY3QgPSAzMDgsXG59XG4iXSwibmFtZXMiOlsiUmVkaXJlY3RTdGF0dXNDb2RlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/redirect-status-code.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/redirect.js":
|
||
/*!**************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/redirect.js ***!
|
||
\**************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n getRedirectError: function() {\n return getRedirectError;\n },\n getRedirectStatusCodeFromError: function() {\n return getRedirectStatusCodeFromError;\n },\n getRedirectTypeFromError: function() {\n return getRedirectTypeFromError;\n },\n getURLFromRedirectError: function() {\n return getURLFromRedirectError;\n },\n permanentRedirect: function() {\n return permanentRedirect;\n },\n redirect: function() {\n return redirect;\n }\n});\nconst _redirectstatuscode = __webpack_require__(/*! ./redirect-status-code */ \"(app-pages-browser)/./node_modules/next/dist/client/components/redirect-status-code.js\");\nconst _redirecterror = __webpack_require__(/*! ./redirect-error */ \"(app-pages-browser)/./node_modules/next/dist/client/components/redirect-error.js\");\nconst actionAsyncStorage = false ? 0 : undefined;\nfunction getRedirectError(url, type, statusCode) {\n if (statusCode === void 0) statusCode = _redirectstatuscode.RedirectStatusCode.TemporaryRedirect;\n const error = Object.defineProperty(new Error(_redirecterror.REDIRECT_ERROR_CODE), \"__NEXT_ERROR_CODE\", {\n value: \"E394\",\n enumerable: false,\n configurable: true\n });\n error.digest = _redirecterror.REDIRECT_ERROR_CODE + \";\" + type + \";\" + url + \";\" + statusCode + \";\";\n return error;\n}\nfunction redirect(/** The URL to redirect to */ url, type) {\n var _actionAsyncStorage_getStore;\n type != null ? type : type = (actionAsyncStorage == null ? void 0 : (_actionAsyncStorage_getStore = actionAsyncStorage.getStore()) == null ? void 0 : _actionAsyncStorage_getStore.isAction) ? _redirecterror.RedirectType.push : _redirecterror.RedirectType.replace;\n throw getRedirectError(url, type, _redirectstatuscode.RedirectStatusCode.TemporaryRedirect);\n}\nfunction permanentRedirect(/** The URL to redirect to */ url, type) {\n if (type === void 0) type = _redirecterror.RedirectType.replace;\n throw getRedirectError(url, type, _redirectstatuscode.RedirectStatusCode.PermanentRedirect);\n}\nfunction getURLFromRedirectError(error) {\n if (!(0, _redirecterror.isRedirectError)(error)) return null;\n // Slices off the beginning of the digest that contains the code and the\n // separating ';'.\n return error.digest.split(';').slice(2, -2).join(';');\n}\nfunction getRedirectTypeFromError(error) {\n if (!(0, _redirecterror.isRedirectError)(error)) {\n throw Object.defineProperty(new Error('Not a redirect error'), \"__NEXT_ERROR_CODE\", {\n value: \"E260\",\n enumerable: false,\n configurable: true\n });\n }\n return error.digest.split(';', 2)[1];\n}\nfunction getRedirectStatusCodeFromError(error) {\n if (!(0, _redirecterror.isRedirectError)(error)) {\n throw Object.defineProperty(new Error('Not a redirect error'), \"__NEXT_ERROR_CODE\", {\n value: \"E260\",\n enumerable: false,\n configurable: true\n });\n }\n return Number(error.digest.split(';').at(-2));\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=redirect.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVkaXJlY3QuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBZWdCQSxnQkFBZ0I7ZUFBaEJBOztJQTZFQUMsOEJBQThCO2VBQTlCQTs7SUFSQUMsd0JBQXdCO2VBQXhCQTs7SUFSQUMsdUJBQXVCO2VBQXZCQTs7SUFoQkFDLGlCQUFpQjtlQUFqQkE7O0lBdkJBQyxRQUFRO2VBQVJBOzs7Z0RBckNtQjsyQ0FNNUI7QUFFUCxNQUFNQyxxQkFDSixNQUE2QixHQUV2QkUsQ0FDa0IsR0FDcEJDO0FBRUMsU0FBU1QsaUJBQ2RVLEdBQVcsRUFDWEMsSUFBa0IsRUFDbEJDLFVBQXFFO0lBQXJFQSxJQUFBQSxlQUFBQSxLQUFBQSxHQUFBQSxhQUFpQ0Msb0JBQUFBLGtCQUFrQixDQUFDQyxpQkFBaUI7SUFFckUsTUFBTUMsUUFBUSxxQkFBOEIsQ0FBOUIsSUFBSUMsTUFBTUMsZUFBQUEsbUJBQW1CLEdBQTdCO2VBQUE7b0JBQUE7c0JBQUE7SUFBNkI7SUFDM0NGLE1BQU1HLE1BQU0sR0FBTUQsZUFBQUEsbUJBQW1CLEdBQUMsTUFBR04sT0FBSyxNQUFHRCxNQUFJLE1BQUdFLGFBQVc7SUFDbkUsT0FBT0c7QUFDVDtBQWNPLFNBQVNWLFNBQ2QsMkJBQTJCLEdBQzNCSyxHQUFXLEVBQ1hDLElBQW1CO1FBRVZMO0lBQVRLLFFBQUFBLE9BQUFBLE9BQUFBLE9BQVNMLENBQUFBLHNCQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxDQUFBQSwrQkFBQUEsbUJBQW9CYSxRQUFRLHVCQUE1QmIsNkJBQWdDYyxRQUFBQSxJQUNyQ0MsZUFBQUEsWUFBWSxDQUFDQyxJQUFJLEdBQ2pCRCxlQUFBQSxZQUFZLENBQUNFLE9BQU87SUFFeEIsTUFBTXZCLGlCQUFpQlUsS0FBS0MsTUFBTUUsb0JBQUFBLGtCQUFrQixDQUFDQyxpQkFBaUI7QUFDeEU7QUFhTyxTQUFTVixrQkFDZCwyQkFBMkIsR0FDM0JNLEdBQVcsRUFDWEMsSUFBeUM7SUFBekNBLElBQUFBLFNBQUFBLEtBQUFBLEdBQUFBLE9BQXFCVSxlQUFBQSxZQUFZLENBQUNFLE9BQU87SUFFekMsTUFBTXZCLGlCQUFpQlUsS0FBS0MsTUFBTUUsb0JBQUFBLGtCQUFrQixDQUFDVyxpQkFBaUI7QUFDeEU7QUFVTyxTQUFTckIsd0JBQXdCWSxLQUFjO0lBQ3BELElBQUksQ0FBQ1UsQ0FBQUEsR0FBQUEsZUFBQUEsZUFBQUEsRUFBZ0JWLFFBQVEsT0FBTztJQUVwQyx3RUFBd0U7SUFDeEUsa0JBQWtCO0lBQ2xCLE9BQU9BLE1BQU1HLE1BQU0sQ0FBQ1EsS0FBSyxDQUFDLEtBQUtDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBR0MsSUFBSSxDQUFDO0FBQ25EO0FBRU8sU0FBUzFCLHlCQUF5QmEsS0FBb0I7SUFDM0QsSUFBSSxDQUFDVSxDQUFBQSxHQUFBQSxlQUFBQSxlQUFBQSxFQUFnQlYsUUFBUTtRQUMzQixNQUFNLHFCQUFpQyxDQUFqQyxJQUFJQyxNQUFNLHlCQUFWO21CQUFBO3dCQUFBOzBCQUFBO1FBQWdDO0lBQ3hDO0lBRUEsT0FBT0QsTUFBTUcsTUFBTSxDQUFDUSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRTtBQUN0QztBQUVPLFNBQVN6QiwrQkFBK0JjLEtBQW9CO0lBQ2pFLElBQUksQ0FBQ1UsQ0FBQUEsR0FBQUEsZUFBQUEsZUFBQUEsRUFBZ0JWLFFBQVE7UUFDM0IsTUFBTSxxQkFBaUMsQ0FBakMsSUFBSUMsTUFBTSx5QkFBVjttQkFBQTt3QkFBQTswQkFBQTtRQUFnQztJQUN4QztJQUVBLE9BQU9hLE9BQU9kLE1BQU1HLE1BQU0sQ0FBQ1EsS0FBSyxDQUFDLEtBQUtJLEVBQUUsQ0FBQyxDQUFDO0FBQzVDIiwic291cmNlcyI6WyIvaG9tZS9OaWNob2xhaS9zcmMvY2xpZW50L2NvbXBvbmVudHMvcmVkaXJlY3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVkaXJlY3RTdGF0dXNDb2RlIH0gZnJvbSAnLi9yZWRpcmVjdC1zdGF0dXMtY29kZSdcbmltcG9ydCB7XG4gIFJlZGlyZWN0VHlwZSxcbiAgdHlwZSBSZWRpcmVjdEVycm9yLFxuICBpc1JlZGlyZWN0RXJyb3IsXG4gIFJFRElSRUNUX0VSUk9SX0NPREUsXG59IGZyb20gJy4vcmVkaXJlY3QtZXJyb3InXG5cbmNvbnN0IGFjdGlvbkFzeW5jU3RvcmFnZSA9XG4gIHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnXG4gICAgPyAoXG4gICAgICAgIHJlcXVpcmUoJy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL2FjdGlvbi1hc3luYy1zdG9yYWdlLmV4dGVybmFsJykgYXMgdHlwZW9mIGltcG9ydCgnLi4vLi4vc2VydmVyL2FwcC1yZW5kZXIvYWN0aW9uLWFzeW5jLXN0b3JhZ2UuZXh0ZXJuYWwnKVxuICAgICAgKS5hY3Rpb25Bc3luY1N0b3JhZ2VcbiAgICA6IHVuZGVmaW5lZFxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVkaXJlY3RFcnJvcihcbiAgdXJsOiBzdHJpbmcsXG4gIHR5cGU6IFJlZGlyZWN0VHlwZSxcbiAgc3RhdHVzQ29kZTogUmVkaXJlY3RTdGF0dXNDb2RlID0gUmVkaXJlY3RTdGF0dXNDb2RlLlRlbXBvcmFyeVJlZGlyZWN0XG4pOiBSZWRpcmVjdEVycm9yIHtcbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoUkVESVJFQ1RfRVJST1JfQ09ERSkgYXMgUmVkaXJlY3RFcnJvclxuICBlcnJvci5kaWdlc3QgPSBgJHtSRURJUkVDVF9FUlJPUl9DT0RFfTske3R5cGV9OyR7dXJsfTske3N0YXR1c0NvZGV9O2BcbiAgcmV0dXJuIGVycm9yXG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIHJlZGlyZWN0IHRoZSB1c2VyIHRvIGFub3RoZXIgVVJMLiBJdCBjYW4gYmUgdXNlZCBpblxuICogW1NlcnZlciBDb21wb25lbnRzXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9yZW5kZXJpbmcvc2VydmVyLWNvbXBvbmVudHMpLFxuICogW1JvdXRlIEhhbmRsZXJzXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9yb3V0aW5nL3JvdXRlLWhhbmRsZXJzKSwgYW5kXG4gKiBbU2VydmVyIEFjdGlvbnNdKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9idWlsZGluZy15b3VyLWFwcGxpY2F0aW9uL2RhdGEtZmV0Y2hpbmcvc2VydmVyLWFjdGlvbnMtYW5kLW11dGF0aW9ucykuXG4gKlxuICogLSBJbiBhIFNlcnZlciBDb21wb25lbnQsIHRoaXMgd2lsbCBpbnNlcnQgYSBtZXRhIHRhZyB0byByZWRpcmVjdCB0aGUgdXNlciB0byB0aGUgdGFyZ2V0IHBhZ2UuXG4gKiAtIEluIGEgUm91dGUgSGFuZGxlciBvciBTZXJ2ZXIgQWN0aW9uLCBpdCB3aWxsIHNlcnZlIGEgMzA3LzMwMyB0byB0aGUgY2FsbGVyLlxuICogLSBJbiBhIFNlcnZlciBBY3Rpb24sIHR5cGUgZGVmYXVsdHMgdG8gJ3B1c2gnIGFuZCAncmVwbGFjZScgZWxzZXdoZXJlLlxuICpcbiAqIFJlYWQgbW9yZTogW05leHQuanMgRG9jczogYHJlZGlyZWN0YF0oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2FwaS1yZWZlcmVuY2UvZnVuY3Rpb25zL3JlZGlyZWN0KVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVkaXJlY3QoXG4gIC8qKiBUaGUgVVJMIHRvIHJlZGlyZWN0IHRvICovXG4gIHVybDogc3RyaW5nLFxuICB0eXBlPzogUmVkaXJlY3RUeXBlXG4pOiBuZXZlciB7XG4gIHR5cGUgPz89IGFjdGlvbkFzeW5jU3RvcmFnZT8uZ2V0U3RvcmUoKT8uaXNBY3Rpb25cbiAgICA/IFJlZGlyZWN0VHlwZS5wdXNoXG4gICAgOiBSZWRpcmVjdFR5cGUucmVwbGFjZVxuXG4gIHRocm93IGdldFJlZGlyZWN0RXJyb3IodXJsLCB0eXBlLCBSZWRpcmVjdFN0YXR1c0NvZGUuVGVtcG9yYXJ5UmVkaXJlY3QpXG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIHJlZGlyZWN0IHRoZSB1c2VyIHRvIGFub3RoZXIgVVJMLiBJdCBjYW4gYmUgdXNlZCBpblxuICogW1NlcnZlciBDb21wb25lbnRzXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9yZW5kZXJpbmcvc2VydmVyLWNvbXBvbmVudHMpLFxuICogW1JvdXRlIEhhbmRsZXJzXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9yb3V0aW5nL3JvdXRlLWhhbmRsZXJzKSwgYW5kXG4gKiBbU2VydmVyIEFjdGlvbnNdKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9idWlsZGluZy15b3VyLWFwcGxpY2F0aW9uL2RhdGEtZmV0Y2hpbmcvc2VydmVyLWFjdGlvbnMtYW5kLW11dGF0aW9ucykuXG4gKlxuICogLSBJbiBhIFNlcnZlciBDb21wb25lbnQsIHRoaXMgd2lsbCBpbnNlcnQgYSBtZXRhIHRhZyB0byByZWRpcmVjdCB0aGUgdXNlciB0byB0aGUgdGFyZ2V0IHBhZ2UuXG4gKiAtIEluIGEgUm91dGUgSGFuZGxlciBvciBTZXJ2ZXIgQWN0aW9uLCBpdCB3aWxsIHNlcnZlIGEgMzA4LzMwMyB0byB0aGUgY2FsbGVyLlxuICpcbiAqIFJlYWQgbW9yZTogW05leHQuanMgRG9jczogYHJlZGlyZWN0YF0oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2FwaS1yZWZlcmVuY2UvZnVuY3Rpb25zL3JlZGlyZWN0KVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGVybWFuZW50UmVkaXJlY3QoXG4gIC8qKiBUaGUgVVJMIHRvIHJlZGlyZWN0IHRvICovXG4gIHVybDogc3RyaW5nLFxuICB0eXBlOiBSZWRpcmVjdFR5cGUgPSBSZWRpcmVjdFR5cGUucmVwbGFjZVxuKTogbmV2ZXIge1xuICB0aHJvdyBnZXRSZWRpcmVjdEVycm9yKHVybCwgdHlwZSwgUmVkaXJlY3RTdGF0dXNDb2RlLlBlcm1hbmVudFJlZGlyZWN0KVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGVuY29kZWQgVVJMIGZyb20gdGhlIGVycm9yIGlmIGl0J3MgYSBSZWRpcmVjdEVycm9yLCBudWxsXG4gKiBvdGhlcndpc2UuIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IHZhbGlkYXRlIHRoZSBVUkwgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIGVycm9yIHRoZSBlcnJvciB0aGF0IG1heSBiZSBhIHJlZGlyZWN0IGVycm9yXG4gKiBAcmV0dXJuIHRoZSB1cmwgaWYgdGhlIGVycm9yIHdhcyBhIHJlZGlyZWN0IGVycm9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRVUkxGcm9tUmVkaXJlY3RFcnJvcihlcnJvcjogUmVkaXJlY3RFcnJvcik6IHN0cmluZ1xuZXhwb3J0IGZ1bmN0aW9uIGdldFVSTEZyb21SZWRpcmVjdEVycm9yKGVycm9yOiB1bmtub3duKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmICghaXNSZWRpcmVjdEVycm9yKGVycm9yKSkgcmV0dXJuIG51bGxcblxuICAvLyBTbGljZXMgb2ZmIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRpZ2VzdCB0aGF0IGNvbnRhaW5zIHRoZSBjb2RlIGFuZCB0aGVcbiAgLy8gc2VwYXJhdGluZyAnOycuXG4gIHJldHVybiBlcnJvci5kaWdlc3Quc3BsaXQoJzsnKS5zbGljZSgyLCAtMikuam9pbignOycpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZWRpcmVjdFR5cGVGcm9tRXJyb3IoZXJyb3I6IFJlZGlyZWN0RXJyb3IpOiBSZWRpcmVjdFR5cGUge1xuICBpZiAoIWlzUmVkaXJlY3RFcnJvcihlcnJvcikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBhIHJlZGlyZWN0IGVycm9yJylcbiAgfVxuXG4gIHJldHVybiBlcnJvci5kaWdlc3Quc3BsaXQoJzsnLCAyKVsxXSBhcyBSZWRpcmVjdFR5cGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlZGlyZWN0U3RhdHVzQ29kZUZyb21FcnJvcihlcnJvcjogUmVkaXJlY3RFcnJvcik6IG51bWJlciB7XG4gIGlmICghaXNSZWRpcmVjdEVycm9yKGVycm9yKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm90IGEgcmVkaXJlY3QgZXJyb3InKVxuICB9XG5cbiAgcmV0dXJuIE51bWJlcihlcnJvci5kaWdlc3Quc3BsaXQoJzsnKS5hdCgtMikpXG59XG4iXSwibmFtZXMiOlsiZ2V0UmVkaXJlY3RFcnJvciIsImdldFJlZGlyZWN0U3RhdHVzQ29kZUZyb21FcnJvciIsImdldFJlZGlyZWN0VHlwZUZyb21FcnJvciIsImdldFVSTEZyb21SZWRpcmVjdEVycm9yIiwicGVybWFuZW50UmVkaXJlY3QiLCJyZWRpcmVjdCIsImFjdGlvbkFzeW5jU3RvcmFnZSIsIndpbmRvdyIsInJlcXVpcmUiLCJ1bmRlZmluZWQiLCJ1cmwiLCJ0eXBlIiwic3RhdHVzQ29kZSIsIlJlZGlyZWN0U3RhdHVzQ29kZSIsIlRlbXBvcmFyeVJlZGlyZWN0IiwiZXJyb3IiLCJFcnJvciIsIlJFRElSRUNUX0VSUk9SX0NPREUiLCJkaWdlc3QiLCJnZXRTdG9yZSIsImlzQWN0aW9uIiwiUmVkaXJlY3RUeXBlIiwicHVzaCIsInJlcGxhY2UiLCJQZXJtYW5lbnRSZWRpcmVjdCIsImlzUmVkaXJlY3RFcnJvciIsInNwbGl0Iiwic2xpY2UiLCJqb2luIiwiTnVtYmVyIiwiYXQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/redirect.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/aliased-prefetch-navigations.js":
|
||
/*!*************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/router-reducer/aliased-prefetch-navigations.js ***!
|
||
\*************************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n addSearchParamsToPageSegments: function() {\n return addSearchParamsToPageSegments;\n },\n handleAliasedPrefetchEntry: function() {\n return handleAliasedPrefetchEntry;\n }\n});\nconst _segment = __webpack_require__(/*! ../../../shared/lib/segment */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/segment.js\");\nconst _approuter = __webpack_require__(/*! ../app-router */ \"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js\");\nconst _applyrouterstatepatchtotree = __webpack_require__(/*! ./apply-router-state-patch-to-tree */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/apply-router-state-patch-to-tree.js\");\nconst _createhreffromurl = __webpack_require__(/*! ./create-href-from-url */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nconst _createroutercachekey = __webpack_require__(/*! ./create-router-cache-key */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\");\nconst _fillcachewithnewsubtreedata = __webpack_require__(/*! ./fill-cache-with-new-subtree-data */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fill-cache-with-new-subtree-data.js\");\nconst _handlemutable = __webpack_require__(/*! ./handle-mutable */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/handle-mutable.js\");\nfunction handleAliasedPrefetchEntry(navigatedAt, state, flightData, url, mutable) {\n let currentTree = state.tree;\n let currentCache = state.cache;\n const href = (0, _createhreffromurl.createHrefFromUrl)(url);\n let applied;\n if (typeof flightData === 'string') {\n return false;\n }\n for (const normalizedFlightData of flightData){\n // If the segment doesn't have a loading component, we don't need to do anything.\n if (!hasLoadingComponentInSeedData(normalizedFlightData.seedData)) {\n continue;\n }\n let treePatch = normalizedFlightData.tree;\n // Segments are keyed by searchParams (e.g. __PAGE__?{\"foo\":\"bar\"}). We might return a less specific, param-less entry,\n // so we ensure that the final tree contains the correct searchParams (reflected in the URL) are provided in the updated FlightRouterState tree.\n // We only do this on the first read, as otherwise we'd be overwriting the searchParams that may have already been set\n treePatch = addSearchParamsToPageSegments(treePatch, Object.fromEntries(url.searchParams));\n const { seedData, isRootRender, pathToSegment } = normalizedFlightData;\n // TODO-APP: remove ''\n const flightSegmentPathWithLeadingEmpty = [\n '',\n ...pathToSegment\n ];\n // Segments are keyed by searchParams (e.g. __PAGE__?{\"foo\":\"bar\"}). We might return a less specific, param-less entry,\n // so we ensure that the final tree contains the correct searchParams (reflected in the URL) are provided in the updated FlightRouterState tree.\n // We only do this on the first read, as otherwise we'd be overwriting the searchParams that may have already been set\n treePatch = addSearchParamsToPageSegments(treePatch, Object.fromEntries(url.searchParams));\n let newTree = (0, _applyrouterstatepatchtotree.applyRouterStatePatchToTree)(flightSegmentPathWithLeadingEmpty, currentTree, treePatch, href);\n const newCache = (0, _approuter.createEmptyCacheNode)();\n // The prefetch cache entry was aliased -- this signals that we only fill in the cache with the\n // loading state and not the actual parallel route seed data.\n if (isRootRender && seedData) {\n // Fill in the cache with the new loading / rsc data\n const rsc = seedData[1];\n const loading = seedData[3];\n newCache.loading = loading;\n newCache.rsc = rsc;\n // Construct a new tree and apply the aliased loading state for each parallel route\n fillNewTreeWithOnlyLoadingSegments(navigatedAt, newCache, currentCache, treePatch, seedData);\n } else {\n // Copy rsc for the root node of the cache.\n newCache.rsc = currentCache.rsc;\n newCache.prefetchRsc = currentCache.prefetchRsc;\n newCache.loading = currentCache.loading;\n newCache.parallelRoutes = new Map(currentCache.parallelRoutes);\n // copy the loading state only into the leaf node (the part that changed)\n (0, _fillcachewithnewsubtreedata.fillCacheWithNewSubTreeDataButOnlyLoading)(navigatedAt, newCache, currentCache, normalizedFlightData);\n }\n // If we don't have an updated tree, there's no reason to update the cache, as the tree\n // dictates what cache nodes to render.\n if (newTree) {\n currentTree = newTree;\n currentCache = newCache;\n applied = true;\n }\n }\n if (!applied) {\n return false;\n }\n mutable.patchedTree = currentTree;\n mutable.cache = currentCache;\n mutable.canonicalUrl = href;\n mutable.hashFragment = url.hash;\n return (0, _handlemutable.handleMutable)(state, mutable);\n}\nfunction hasLoadingComponentInSeedData(seedData) {\n if (!seedData) return false;\n const parallelRoutes = seedData[2];\n const loading = seedData[3];\n if (loading) {\n return true;\n }\n for(const key in parallelRoutes){\n if (hasLoadingComponentInSeedData(parallelRoutes[key])) {\n return true;\n }\n }\n return false;\n}\nfunction fillNewTreeWithOnlyLoadingSegments(navigatedAt, newCache, existingCache, routerState, cacheNodeSeedData) {\n const isLastSegment = Object.keys(routerState[1]).length === 0;\n if (isLastSegment) {\n return;\n }\n for(const key in routerState[1]){\n const parallelRouteState = routerState[1][key];\n const segmentForParallelRoute = parallelRouteState[0];\n const cacheKey = (0, _createroutercachekey.createRouterCacheKey)(segmentForParallelRoute);\n const parallelSeedData = cacheNodeSeedData !== null && cacheNodeSeedData[2][key] !== undefined ? cacheNodeSeedData[2][key] : null;\n let newCacheNode;\n if (parallelSeedData !== null) {\n // New data was sent from the server.\n const rsc = parallelSeedData[1];\n const loading = parallelSeedData[3];\n newCacheNode = {\n lazyData: null,\n // copy the layout but null the page segment as that's not meant to be used\n rsc: segmentForParallelRoute.includes(_segment.PAGE_SEGMENT_KEY) ? null : rsc,\n prefetchRsc: null,\n head: null,\n prefetchHead: null,\n parallelRoutes: new Map(),\n loading,\n navigatedAt\n };\n } else {\n // No data available for this node. This will trigger a lazy fetch\n // during render.\n newCacheNode = {\n lazyData: null,\n rsc: null,\n prefetchRsc: null,\n head: null,\n prefetchHead: null,\n parallelRoutes: new Map(),\n loading: null,\n navigatedAt: -1\n };\n }\n const existingParallelRoutes = newCache.parallelRoutes.get(key);\n if (existingParallelRoutes) {\n existingParallelRoutes.set(cacheKey, newCacheNode);\n } else {\n newCache.parallelRoutes.set(key, new Map([\n [\n cacheKey,\n newCacheNode\n ]\n ]));\n }\n fillNewTreeWithOnlyLoadingSegments(navigatedAt, newCacheNode, existingCache, parallelRouteState, parallelSeedData);\n }\n}\nfunction addSearchParamsToPageSegments(flightRouterState, searchParams) {\n const [segment, parallelRoutes, ...rest] = flightRouterState;\n // If it's a page segment, modify the segment by adding search params\n if (segment.includes(_segment.PAGE_SEGMENT_KEY)) {\n const newSegment = (0, _segment.addSearchParamsIfPageSegment)(segment, searchParams);\n return [\n newSegment,\n parallelRoutes,\n ...rest\n ];\n }\n // Otherwise, recurse through the parallel routes and return a new tree\n const updatedParallelRoutes = {};\n for (const [key, parallelRoute] of Object.entries(parallelRoutes)){\n updatedParallelRoutes[key] = addSearchParamsToPageSegments(parallelRoute, searchParams);\n }\n return [\n segment,\n updatedParallelRoutes,\n ...rest\n ];\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=aliased-prefetch-navigations.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvYWxpYXNlZC1wcmVmZXRjaC1uYXZpZ2F0aW9ucy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFtT2dCQSw2QkFBNkI7ZUFBN0JBOztJQTFNQUMsMEJBQTBCO2VBQTFCQTs7O3FDQWpCVDt1Q0FFOEI7eURBQ087K0NBQ1Y7a0RBQ0c7eURBQ3FCOzJDQUM1QjtBQVV2QixTQUFTQSwyQkFDZEMsV0FBbUIsRUFDbkJDLEtBQTJCLEVBQzNCQyxVQUEyQyxFQUMzQ0MsR0FBUSxFQUNSQyxPQUFnQjtJQUVoQixJQUFJQyxjQUFjSixNQUFNSyxJQUFJO0lBQzVCLElBQUlDLGVBQWVOLE1BQU1PLEtBQUs7SUFDOUIsTUFBTUMsT0FBT0MsQ0FBQUEsR0FBQUEsbUJBQUFBLGlCQUFBQSxFQUFrQlA7SUFDL0IsSUFBSVE7SUFFSixJQUFJLE9BQU9ULGVBQWUsVUFBVTtRQUNsQyxPQUFPO0lBQ1Q7SUFFQSxLQUFLLE1BQU1VLHdCQUF3QlYsV0FBWTtRQUM3QyxpRkFBaUY7UUFDakYsSUFBSSxDQUFDVyw4QkFBOEJELHFCQUFxQkUsUUFBUSxHQUFHO1lBQ2pFO1FBQ0Y7UUFFQSxJQUFJQyxZQUFZSCxxQkFBcUJOLElBQUk7UUFDekMsdUhBQXVIO1FBQ3ZILGdKQUFnSjtRQUNoSixzSEFBc0g7UUFDdEhTLFlBQVlqQiw4QkFDVmlCLFdBQ0FDLE9BQU9DLFdBQVcsQ0FBQ2QsSUFBSWUsWUFBWTtRQUdyQyxNQUFNLEVBQUVKLFFBQVEsRUFBRUssWUFBWSxFQUFFQyxhQUFhLEVBQUUsR0FBR1I7UUFDbEQsc0JBQXNCO1FBQ3RCLE1BQU1TLG9DQUFvQztZQUFDO2VBQU9EO1NBQWM7UUFFaEUsdUhBQXVIO1FBQ3ZILGdKQUFnSjtRQUNoSixzSEFBc0g7UUFDdEhMLFlBQVlqQiw4QkFDVmlCLFdBQ0FDLE9BQU9DLFdBQVcsQ0FBQ2QsSUFBSWUs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QUFpQjtRQUNqRW1DLHFCQUFxQixDQUFDM0IsSUFBSSxHQUFHeEMsOEJBQzNCb0UsZUFDQWhEO0lBRUo7SUFFQSxPQUFPO1FBQUMyQztRQUFTSTtXQUEwQkg7S0FBSztBQUNsRCIsInNvdXJjZXMiOlsiL2hvbWUvc3JjL2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2FsaWFzZWQtcHJlZmV0Y2gtbmF2aWdhdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBDYWNoZU5vZGVTZWVkRGF0YSxcbiAgRmxpZ2h0Um91dGVyU3RhdGUsXG59IGZyb20gJy4uLy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBDYWNoZU5vZGUgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvbGliL2FwcC1yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZSdcbmltcG9ydCB7XG4gIGFkZFNlYXJjaFBhcmFtc0lmUGFnZVNlZ21lbnQsXG4gIFBBR0VfU0VHTUVOVF9LRVksXG59IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9saWIvc2VnbWVudCdcbmltcG9ydCB0eXBlIHsgTm9ybWFsaXplZEZsaWdodERhdGEgfSBmcm9tICcuLi8uLi9mbGlnaHQtZGF0YS1oZWxwZXJzJ1xuaW1wb3J0IHsgY3JlYXRlRW1wdHlDYWNoZU5vZGUgfSBmcm9tICcuLi9hcHAtcm91dGVyJ1xuaW1wb3J0IHsgYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9UcmVlIH0gZnJvbSAnLi9hcHBseS1yb3V0ZXItc3RhdGUtcGF0Y2gtdG8tdHJlZSdcbmltcG9ydCB7IGNyZWF0ZUhyZWZGcm9tVXJsIH0gZnJvbSAnLi9jcmVhdGUtaHJlZi1mcm9tLXVybCdcbmltcG9ydCB7IGNyZWF0ZVJvdXRlckNhY2hlS2V5IH0gZnJvbSAnLi9jcmVhdGUtcm91dGVyLWNhY2hlLWtleSdcbmltcG9ydCB7IGZpbGxDYWNoZVdpdGhOZXdTdWJUcmVlRGF0YUJ1dE9ubHlMb2FkaW5nIH0gZnJvbSAnLi9maWxsLWNhY2hlLXdpdGgtbmV3LXN1YnRyZWUtZGF0YSdcbmltcG9ydCB7IGhhbmRsZU11dGFibGUgfSBmcm9tICcuL2hhbmRsZS1tdXRhYmxlJ1xuaW1wb3J0IHR5cGUgeyBNdXRhYmxlLCBSZWFkb25seVJlZHVjZXJTdGF0ZSB9IGZyb20gJy4vcm91dGVyLXJlZHVjZXItdHlwZXMnXG5cbi8qKlxuICogVGhpcyBpcyBhIHN0b3AtZ2FwIHVudGlsIHBlci1zZWdtZW50IGNhY2hpbmcgaXMgaW1wbGVtZW50ZWQuIEl0IGxldmVyYWdlcyB0aGUgYGFsaWFzZWRgIGZsYWcgdGhhdCBpcyBhZGRlZFxuICogdG8gcHJlZmV0Y2ggZW50cmllcyB3aGVuIGl0J3MgZGV0ZXJtaW5lZCB0aGF0IHRoZSBsb2FkaW5nIHN0YXRlIGZyb20gdGhhdCBlbnRyeSBzaG91bGQgYmUgdXNlZCBmb3IgdGhpcyBuYXZpZ2F0aW9uLlxuICogVGhpcyBmdW5jdGlvbiB0YWtlcyB0aGUgYWxpYXNlZCBlbnRyeSBhbmQgb25seSBhcHBsaWVzIHRoZSBsb2FkaW5nIHN0YXRlIHRvIHRoZSB1cGRhdGVkIGNhY2hlIG5vZGUuXG4gKiBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgb25jZSBwZXItc2VnbWVudCBmZXRjaGluZyBpcyBpbXBsZW1lbnRlZCBhcyBpZGVhbGx5IHRoZSBwcmVmZXRjaCBjYWNoZSB3aWxsIGNvbnRhaW4gYVxuICogbW9yZSBncmFudWxhciBzZWdtZW50IG1hcCBhbmQgc28gdGhlIHJvdXRlciB3aWxsIGJlIGFibGUgdG8gc2ltcGx5IHJlLXVzZSB0aGUgbG9hZGluZyBzZWdtZW50IGZvciB0aGUgbmV3IG5hdmlnYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVBbGlhc2VkUHJlZmV0Y2hFbnRyeShcbiAgbmF2aWdhdGVkQXQ6IG51bWJlcixcbiAgc3RhdGU6IFJlYWRvbmx5UmVkdWNlclN0YXRlLFxuICBmbGlnaHREYXRhOiBzdHJpbmcgfCBOb3JtYWxpemVkRmxpZ2h0RGF0YVtdLFxuICB1cmw6IFVSTCxcbiAgbXV0YWJsZTogTXV0YWJsZVxuKSB7XG4gIGxldCBjdXJyZW50VHJlZSA9IHN0YXRlLnRyZWVcbiAgbGV0IGN1cnJlbnRDYWNoZSA9IHN0YXRlLmNhY2hlXG4gIGNvbnN0IGhyZWYgPSBjcmVhdGVIcmVmRnJvbVVybCh1cmwpXG4gIGxldCBhcHBsaWVkXG5cbiAgaWYgKHR5cGVvZiBmbGlnaHREYXRhID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZm9yIChjb25zdCBub3JtYWxpemVkRmxpZ2h0RGF0YSBvZiBmbGlnaHREYXRhKSB7XG4gICAgLy8gSWYgdGhlIHNlZ21lbnQgZG9lc24ndCBoYXZlIGEgbG9hZGluZyBjb21wb25lbnQsIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuXG4gICAgaWYgKCFoYXNMb2FkaW5nQ29tcG9uZW50SW5TZWVkRGF0YShub3JtYWxpemVkRmxpZ2h0RGF0YS5zZWVkRGF0YSkpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgbGV0IHRyZWVQYXRjaCA9IG5vcm1hbGl6ZWRGbGlnaHREYXRhLnRyZWVcbiAgICAvLyBTZWdtZW50cyBhcmUga2V5ZWQgYnkgc2VhcmNoUGFyYW1zIChlLmcuIF9fUEFHRV9fP3tcImZvb1wiOlwiYmFyXCJ9KS4gV2UgbWlnaHQgcmV0dXJuIGEgbGVzcyBzcGVjaWZpYywgcGFyYW0tbGVzcyBlbnRyeSxcbiAgICAvLyBzbyB3ZSBlbnN1cmUgdGhhdCB0aGUgZmluYWwgdHJlZSBjb250YWlucyB0aGUgY29ycmVjdCBzZWFyY2hQYXJhbXMgKHJlZmxlY3RlZCBpbiB0aGUgVVJMKSBhcmUgcHJvdmlkZWQgaW4gdGhlIHVwZGF0ZWQgRmxpZ2h0Um91dGVyU3RhdGUgdHJlZS5cbiAgICAvLyBXZSBvbmx5IGRvIHRoaXMgb24gdGhlIGZpcnN0IHJlYWQsIGFzIG90aGVyd2lzZSB3ZSdkIGJlIG92ZXJ3cml0aW5nIHRoZSBzZWFyY2hQYXJhbXMgdGhhdCBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gc2V0XG4gICAgdHJlZVBhdGNoID0gYWRkU2VhcmNoUGFyYW1zVG9QYWdlU2VnbWVudHMoXG4gICAgICB0cmVlUGF0Y2gsXG4gICAgICBPYmplY3QuZnJvbUVudHJpZXModXJsLnNlYXJjaFBhcmFtcylcbiAgICApXG5cbiAgICBjb25zdCB7IHNlZWREYXRhLCBpc1Jvb3RSZW5kZXIsIHBhdGhUb1NlZ21lbnQgfSA9IG5vcm1hbGl6ZWRGbGlnaHREYXRhXG4gICAgLy8gVE9ETy1BUFA6IHJlbW92ZSAnJ1xuICAgIGNvbnN0IGZsaWdodFNlZ21lbnRQYXRoV2l0aExlYWRpbmdFbXB0eSA9IFsnJywgLi4ucGF0aFRvU2VnbWVudF1cblxuICAgIC8vIFNlZ21lbnRzIGFyZSBrZXllZCBieSBzZWFyY2hQYXJhbXMgKGUuZy4gX19QQUdFX18/e1wiZm9vXCI6XCJiYXJcIn0pLiBXZSBtaWdodCByZXR1cm4gYSBsZXNzIHNwZWNpZmljLCBwYXJhbS1sZXNzIGVudHJ5LFxuICAgIC8vIHNvIHdlIGVuc3VyZSB0aGF0IHRoZSBmaW5hbCB0cmVlIGNvbnRhaW5zIHRoZSBjb3JyZWN0IHNlYXJjaFBhcmFtcyAocmVmbGVjdGVkIGluIHRoZSBVUkwpIGFyZSBwcm92aWRlZCBpbiB0aGUgdXBkYXRlZCBGbGlnaHRSb3V0ZXJTdGF0ZSB0cmVlLlxuICAgIC8vIFdlIG9ubHkgZG8gdGhpcyBvbiB0aGUgZmlyc3QgcmVhZCwgYXMgb3RoZXJ3aXNlIHdlJ2QgYmUgb3ZlcndyaXRpbmcgdGhlIHNlYXJjaFBhcmFtcyB0aGF0IG1heSBoYXZlIGFscmVhZHkgYmVlbiBzZXRcbiAgICB0cmVlUGF0Y2ggPSBhZGRTZWFyY2hQYXJhbXNUb1BhZ2VTZWdtZW50cyhcbiAgICAgIHRyZWVQYXRjaCxcbiAgICAgIE9iamVjdC5mcm9tRW50cmllcyh1cmwuc2VhcmNoUGFyYW1zKVxuICAgIClcblxuICAgIGxldCBuZXdUcmVlID0gYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9UcmVlKFxuICAgICAgZmxpZ2h0U2VnbWVudFBhdGhXaXRoTGVhZGluZ0VtcHR5LFxuICAgICAgY3VycmVudFRyZWUsXG4gICAgICB0cmVlUGF0Y2gsXG4gICAgICBocmVmXG4gICAgKVxuXG4gICAgY29uc3QgbmV3Q2FjaGUgPSBjcmVhdGVFbXB0eUNhY2hlTm9kZSgpXG5cbiAgICAvLyBUaGUgcHJlZmV0Y2ggY2FjaGUgZW50cnkgd2FzIGFsaWFzZWQgLS0gdGhpcyBzaWduYWxzIHRoYXQgd2Ugb25seSBmaWxsIGluIHRoZSBjYWNoZSB3aXRoIHRoZVxuICAgIC8vIGxvYWRpbmcgc3RhdGUgYW5kIG5vdCB0aGUgYWN0dWFsIHBhcmFsbGVsIHJvdXRlIHNlZWQgZGF0YS5cbiAgICBpZiAoaXNSb290UmVuZGVyICYmIHNlZWREYXRhKSB7XG4gICAgICAvLyBGaWxsIGluIHRoZSBjYWNoZSB3aXRoIHRoZSBuZXcgbG9hZGluZyAvIHJzYyBkYXRhXG4gICAgICBjb25zdCByc2MgPSBzZWVkRGF0YVsxXVxuICAgICAgY29uc3QgbG9hZGluZyA9IHNlZWREYXRhWzNdXG4gICAgICBuZXdDYWNoZS5sb2FkaW5nID0gbG9hZGluZ1xuICAgICAgbmV3Q2FjaGUucnNjID0gcnNjXG5cbiAgICAgIC8vIENvbnN0cnVjdCBhIG5ldyB0cmVlIGFuZCBhcHBseSB0aGUgYWxpYXNlZCBsb2FkaW5nIHN0YXRlIGZvciBlYWNoIHBhcmFsbGVsIHJvdXRlXG4gICAgICBmaWxsTmV3VHJlZVdpdGhPbmx5TG9hZGluZ1NlZ21lbnRzKFxuICAgICAgICBuYXZpZ2F0ZWRBdCxcbiAgICAgICAgbmV3Q2FjaGUsXG4gICAgICAgIGN1cnJlbnRDYWNoZSxcbiAgICAgICAgdHJlZVBhdGNoLFxuICAgICAgICBzZWVkRGF0YVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDb3B5IHJzYyBmb3IgdGhlIHJvb3Qgbm9kZSBvZiB0aGUgY2FjaGUuXG4gICAgICBuZXdDYWNoZS5yc2MgPSBjdXJyZW50Q2FjaGUucnNjXG4gICAgICBuZXdDYWNoZS5wcmVmZXRjaFJzYyA9IGN1cnJlbnRDYWNoZS5wcmVmZXRjaFJzY1xuICAgICAgbmV3Q2FjaGUubG9hZGluZyA9IGN1cnJlbnRDYWNoZS5sb2FkaW5nXG4gICAgICBuZXdDYWNoZS5wYXJhbGxlbFJvdXRlcyA9IG5ldyBNYXAoY3VycmVudENhY2hlLnBhcmFsbGVsUm91dGVzKVxuXG4gICAgICAvLyBjb3B5IHRoZSBsb2FkaW5nIHN0YXRlIG9ubHkgaW50byB0aGUgbGVhZiBub2RlICh0aGUgcGFydCB0aGF0IGNoYW5nZWQpXG4gICAgICBmaWxsQ2FjaGVXaXRoTmV3U3ViVHJlZURhdGFCdXRPbmx5TG9hZGluZyhcbiAgICAgICAgbmF2aWdhdGVkQXQsXG4gICAgICAgIG5ld0NhY2hlLFxuICAgICAgICBjdXJyZW50Q2FjaGUsXG4gICAgICAgIG5vcm1hbGl6ZWRGbGlnaHREYXRhXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbiB1cGRhdGVkIHRyZWUsIHRoZXJlJ3Mgbm8gcmVhc29uIHRvIHVwZGF0ZSB0aGUgY2FjaGUsIGFzIHRoZSB0cmVlXG4gICAgLy8gZGljdGF0ZXMgd2hhdCBjYWNoZSBub2RlcyB0byByZW5kZXIuXG4gICAgaWYgKG5ld1RyZWUpIHtcbiAgICAgIGN1cnJlbnRUcmVlID0gbmV3VHJlZVxuICAgICAgY3VycmVudENhY2hlID0gbmV3Q2FjaGVcbiAgICAgIGFwcGxpZWQgPSB0cnVlXG4gICAgfVxuICB9XG5cbiAgaWYgKCFhcHBsaWVkKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBtdXRhYmxlLnBhdGNoZWRUcmVlID0gY3VycmVudFRyZWVcbiAgbXV0YWJsZS5jYWNoZSA9IGN1cnJlbnRDYWNoZVxuICBtdXRhYmxlLmNhbm9uaWNhbFVybCA9IGhyZWZcbiAgbXV0YWJsZS5oYXNoRnJhZ21lbnQgPSB1cmwuaGFzaFxuXG4gIHJldHVybiBoYW5kbGVNdXRhYmxlKHN0YXRlLCBtdXRhYmxlKVxufVxuXG5mdW5jdGlvbiBoYXNMb2FkaW5nQ29tcG9uZW50SW5TZWVkRGF0YShzZWVkRGF0YTogQ2FjaGVOb2RlU2VlZERhdGEgfCBudWxsKSB7XG4gIGlmICghc2VlZERhdGEpIHJldHVybiBmYWxzZVxuXG4gIGNvbnN0IHBhcmFsbGVsUm91dGVzID0gc2VlZERhdGFbMl1cbiAgY29uc3QgbG9hZGluZyA9IHNlZWREYXRhWzNdXG5cbiAgaWYgKGxvYWRpbmcpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgZm9yIChjb25zdCBrZXkgaW4gcGFyYWxsZWxSb3V0ZXMpIHtcbiAgICBpZiAoaGFzTG9hZGluZ0NvbXBvbmVudEluU2VlZERhdGEocGFyYWxsZWxSb3V0ZXNba2V5XSkpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGZpbGxOZXdUcmVlV2l0aE9ubHlMb2FkaW5nU2VnbWVudHMoXG4gIG5hdmlnYXRlZEF0OiBudW1iZXIsXG4gIG5ld0NhY2hlOiBDYWNoZU5vZGUsXG4gIGV4aXN0aW5nQ2FjaGU6IENhY2hlTm9kZSxcbiAgcm91dGVyU3RhdGU6IEZsaWdodFJvdXRlclN0YXRlLFxuICBjYWNoZU5vZGVTZWVkRGF0YTogQ2FjaGVOb2RlU2VlZERhdGEgfCBudWxsXG4pIHtcbiAgY29uc3QgaXNMYXN0U2VnbWVudCA9IE9iamVjdC5rZXlzKHJvdXRlclN0YXRlWzFdKS5sZW5ndGggPT09IDBcbiAgaWYgKGlzTGFzdFNlZ21lbnQpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGZvciAoY29uc3Qga2V5IGluIHJvdXRlclN0YXRlWzFdKSB7XG4gICAgY29uc3QgcGFyYWxsZWxSb3V0ZVN0YXRlID0gcm91dGVyU3RhdGVbMV1ba2V5XVxuICAgIGNvbnN0IHNlZ21lbnRGb3JQYXJhbGxlbFJvdXRlID0gcGFyYWxsZWxSb3V0ZVN0YXRlWzBdXG4gICAgY29uc3QgY2FjaGVLZXkgPSBjcmVhdGVSb3V0ZXJDYWNoZUtleShzZWdtZW50Rm9yUGFyYWxsZWxSb3V0ZSlcblxuICAgIGNvbnN0IHBhcmFsbGVsU2VlZERhdGEgPVxuICAgICAgY2FjaGVOb2RlU2VlZERhdGEgIT09IG51bGwgJiYgY2FjaGVOb2RlU2VlZERhdGFbMl1ba2V5XSAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gY2FjaGVOb2RlU2VlZERhdGFbMl1ba2V5XVxuICAgICAgICA6IG51bGxcblxuICAgIGxldCBuZXdDYWNoZU5vZGU6IENhY2hlTm9kZVxuICAgIGlmIChwYXJhbGxlbFNlZWREYXRhICE9PSBudWxsKSB7XG4gICAgICAvLyBOZXcgZGF0YSB3YXMgc2VudCBmcm9tIHRoZSBzZXJ2ZXIuXG4gICAgICBjb25zdCByc2MgPSBwYXJhbGxlbFNlZWREYXRhWzFdXG4gICAgICBjb25zdCBsb2FkaW5nID0gcGFyYWxsZWxTZWVkRGF0YVszXVxuICAgICAgbmV3Q2FjaGVOb2RlID0ge1xuICAgICAgICBsYXp5RGF0YTogbnVsbCxcbiAgICAgICAgLy8gY29weSB0aGUgbGF5b3V0IGJ1dCBudWxsIHRoZSBwYWdlIHNlZ21lbnQgYXMgdGhhdCdzIG5vdCBtZWFudCB0byBiZSB1c2VkXG4gICAgICAgIHJzYzogc2VnbWVudEZvclBhcmFsbGVsUm91dGUuaW5jbHVkZXMoUEFHRV9TRUdNRU5UX0tFWSkgPyBudWxsIDogcnNjLFxuICAgICAgICBwcmVmZXRjaFJzYzogbnVsbCxcbiAgICAgICAgaGVhZDogbnVsbCxcbiAgICAgICAgcHJlZmV0Y2hIZWFkOiBudWxsLFxuICAgICAgICBwYXJhbGxlbFJvdXRlczogbmV3IE1hcCgpLFxuICAgICAgICBsb2FkaW5nLFxuICAgICAgICBuYXZpZ2F0ZWRBdCxcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gZGF0YSBhdmFpbGFibGUgZm9yIHRoaXMgbm9kZS4gVGhpcyB3aWxsIHRyaWdnZXIgYSBsYXp5IGZldGNoXG4gICAgICAvLyBkdXJpbmcgcmVuZGVyLlxuICAgICAgbmV3Q2FjaGVOb2RlID0ge1xuICAgICAgICBsYXp5RGF0YTogbnVsbCxcbiAgICAgICAgcnNjOiBudWxsLFxuICAgICAgICBwcmVmZXRjaFJzYzogbnVsbCxcbiAgICAgICAgaGVhZDogbnVsbCxcbiAgICAgICAgcHJlZmV0Y2hIZWFkOiBudWxsLFxuICAgICAgICBwYXJhbGxlbFJvdXRlczogbmV3IE1hcCgpLFxuICAgICAgICBsb2FkaW5nOiBudWxsLFxuICAgICAgICBuYXZpZ2F0ZWRBdDogLTEsXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZXhpc3RpbmdQYXJhbGxlbFJvdXRlcyA9IG5ld0NhY2hlLnBhcmFsbGVsUm91dGVzLmdldChrZXkpXG4gICAgaWYgKGV4aXN0aW5nUGFyYWxsZWxSb3V0ZXMpIHtcbiAgICAgIGV4aXN0aW5nUGFyYWxsZWxSb3V0ZXMuc2V0KGNhY2hlS2V5LCBuZXdDYWNoZU5vZGUpXG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0NhY2hlLnBhcmFsbGVsUm91dGVzLnNldChrZXksIG5ldyBNYXAoW1tjYWNoZUtleSwgbmV3Q2FjaGVOb2RlXV0pKVxuICAgIH1cblxuICAgIGZpbGxOZXdUcmVlV2l0aE9ubHlMb2FkaW5nU2VnbWVudHMoXG4gICAgICBuYXZpZ2F0ZWRBdCxcbiAgICAgIG5ld0NhY2hlTm9kZSxcbiAgICAgIGV4aXN0aW5nQ2FjaGUsXG4gICAgICBwYXJhbGxlbFJvdXRlU3RhdGUsXG4gICAgICBwYXJhbGxlbFNlZWREYXRhXG4gICAgKVxuICB9XG59XG5cbi8qKlxuICogQWRkIHNlYXJjaCBwYXJhbXMgdG8gdGhlIHBhZ2Ugc2VnbWVudHMgaW4gdGhlIGZsaWdodCByb3V0ZXIgc3RhdGVcbiAqIFBhZ2Ugc2VnbWVudHMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIHNlYXJjaCBwYXJhbXMgaGF2ZSBhIHBhZ2Ugc2VnbWVudCBrZXlcbiAqIGZvbGxvd2VkIGJ5IGEgcXVlcnkgc3RyaW5nLiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWRkIHRob3NlIHBhcmFtcyB0byB0aGUgcGFnZSBzZWdtZW50LlxuICogVGhpcyBpcyB1c2VmdWwgaWYgd2UgcmV0dXJuIGFuIGFsaWFzZWQgcHJlZmV0Y2ggZW50cnkgKGllLCB3b24ndCBoYXZlIHNlYXJjaCBwYXJhbXMpXG4gKiBidXQgdGhlIGNhbm9uaWNhbCByb3V0ZXIgVVJMIGhhcyBzZWFyY2ggcGFyYW1zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkU2VhcmNoUGFyYW1zVG9QYWdlU2VnbWVudHMoXG4gIGZsaWdodFJvdXRlclN0YXRlOiBGbGlnaHRSb3V0ZXJTdGF0ZSxcbiAgc2VhcmNoUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZD5cbik6IEZsaWdodFJvdXRlclN0YXRlIHtcbiAgY29uc3QgW3NlZ21lbnQsIHBhcmFsbGVsUm91dGVzLCAuLi5yZXN0XSA9IGZsaWdodFJvdXRlclN0YXRlXG5cbiAgLy8gSWYgaXQncyBhIHBhZ2Ugc2VnbWVudCwgbW9kaWZ5IHRoZSBzZWdtZW50IGJ5IGFkZGluZyBzZWFyY2ggcGFyYW1zXG4gIGlmIChzZWdtZW50LmluY2x1ZGVzKFBBR0VfU0VHTUVOVF9LRVkpKSB7XG4gICAgY29uc3QgbmV3U2VnbWVudCA9IGFkZFNlYXJjaFBhcmFtc0lmUGFnZVNlZ21lbnQoc2VnbWVudCwgc2VhcmNoUGFyYW1zKVxuICAgIHJldHVybiBbbmV3U2VnbWVudCwgcGFyYWxsZWxSb3V0ZXMsIC4uLnJlc3RdXG4gIH1cblxuICAvLyBPdGhlcndpc2UsIHJlY3Vyc2UgdGhyb3VnaCB0aGUgcGFyYWxsZWwgcm91dGVzIGFuZCByZXR1cm4gYSBuZXcgdHJlZVxuICBjb25zdCB1cGRhdGVkUGFyYWxsZWxSb3V0ZXM6IHsgW2tleTogc3RyaW5nXTogRmxpZ2h0Um91dGVyU3RhdGUgfSA9IHt9XG5cbiAgZm9yIChjb25zdCBba2V5LCBwYXJhbGxlbFJvdXRlXSBvZiBPYmplY3QuZW50cmllcyhwYXJhbGxlbFJvdXRlcykpIHtcbiAgICB1cGRhdGVkUGFyYWxsZWxSb3V0ZXNba2V5XSA9IGFkZFNlYXJjaFBhcmFtc1RvUGFnZVNlZ21lbnRzKFxuICAgICAgcGFyYWxsZWxSb3V0ZSxcbiAgICAgIHNlYXJjaFBhcmFtc1xuICAgIClcbiAgfVxuXG4gIHJldHVybiBbc2VnbWVudCwgdXBkYXRlZFBhcmFsbGVsUm91dGVzLCAuLi5yZXN0XVxufVxuIl0sIm5hbWVzIjpbImFkZFNlYXJjaFBhcmFtc1RvUGFnZVNlZ21lbnRzIiwiaGFuZGxlQWxpYXNlZFByZWZldGNoRW50cnkiLCJuYXZpZ2F0ZWRBdCIsInN0YXRlIiwiZmxpZ2h0RGF0YSIsInVybCIsIm11dGFibGUiLCJjdXJyZW50VHJlZSIsInRyZWUiLCJjdXJyZW50Q2FjaGUiLCJjYWNoZSIsImhyZWYiLCJjcmVhdGVIcmVmRnJvbVVybCIsImFwcGxpZWQiLCJub3JtYWxpemVkRmxpZ2h0RGF0YSIsImhhc0xvYWRpbmdDb21wb25lbnRJblNlZWREYXRhIiwic2VlZERhdGEiLCJ0cmVlUGF0Y2giLCJPYmplY3QiLCJmcm9tRW50cmllcyIsInNlYXJjaFBhcmFtcyIsImlzUm9vdFJlbmRlciIsInBhdGhUb1NlZ21lbnQiLCJmbGlnaHRTZWdtZW50UGF0aFdpdGhMZWFkaW5nRW1wdHkiLCJuZXdUcmVlIiwiYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9UcmVlIiwibmV3Q2FjaGUiLCJjcmVhdGVFbXB0eUNhY2hlTm9kZSIsInJzYyIsImxvYWRpbmciLCJmaWxsTmV3VHJlZVdpdGhPbmx5TG9hZGluZ1NlZ21lbnRzIiwicHJlZmV0Y2hSc2MiLCJwYXJhbGxlbFJvdXRlcyIsIk1hcCIsImZpbGxDYWNoZVdpdGhOZXdTdWJUcmVlRGF0YUJ1dE9ubHlMb2FkaW5nIiwicGF0Y2hlZFRyZWUiLCJjYW5vbmljYWxVcmwiLCJoYXNoRnJhZ21lbnQiLCJoYXNoIiwiaGFuZGxlTXV0YWJsZSIsImtleSIsImV4aXN0aW5nQ2FjaGUiLCJyb3V0ZXJTdGF0ZSIsImNhY2hlTm9kZVNlZWREYXRhIiwiaXNMYXN0U2VnbWVudCIsImtleXMiLCJsZW5ndGgiLCJwYXJhbGxlbFJvdXRlU3RhdGUiLCJzZWdtZW50Rm9yUGFyYWxsZWxSb3V0ZSIsImNhY2hlS2V5IiwiY3JlYXRlUm91dGVyQ2FjaGVLZXkiLCJwYXJhbGxlbFNlZWREYXRhIiwidW5kZWZpbmVkIiwibmV3Q2FjaGVOb2RlIiwibGF6eURhdGEiLCJpbmNsdWRlcyIsIlBBR0VfU0VHTUVOVF9LRVkiLCJoZWFkIiwicHJlZmV0Y2hIZWFkIiwiZXhpc3RpbmdQYXJhbGxlbFJvdXRlcyIsImdldCIsInNldCIsImZsaWdodFJvdXRlclN0YXRlIiwic2VnbWVudCIsInJlc3QiLCJuZXdTZWdtZW50IiwiYWRkU2VhcmNoUGFyYW1zSWZQYWdlU2VnbWVudCIsInVwZGF0ZWRQYXJhbGxlbFJvdXRlcyIsInBhcmFsbGVsUm91dGUiLCJlbnRyaWVzIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/aliased-prefetch-navigations.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/apply-flight-data.js":
|
||
/*!**************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/router-reducer/apply-flight-data.js ***!
|
||
\**************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"applyFlightData\", ({\n enumerable: true,\n get: function() {\n return applyFlightData;\n }\n}));\nconst _filllazyitemstillleafwithhead = __webpack_require__(/*! ./fill-lazy-items-till-leaf-with-head */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fill-lazy-items-till-leaf-with-head.js\");\nconst _fillcachewithnewsubtreedata = __webpack_require__(/*! ./fill-cache-with-new-subtree-data */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fill-cache-with-new-subtree-data.js\");\nfunction applyFlightData(navigatedAt, existingCache, cache, flightData, prefetchEntry) {\n // The one before last item is the router state tree patch\n const { tree: treePatch, seedData, head, isRootRender } = flightData;\n // Handles case where prefetch only returns the router tree patch without rendered components.\n if (seedData === null) {\n return false;\n }\n if (isRootRender) {\n const rsc = seedData[1];\n const loading = seedData[3];\n cache.loading = loading;\n cache.rsc = rsc;\n // This is a PPR-only field. When PPR is enabled, we shouldn't hit\n // this path during a navigation, but until PPR is fully implemented\n // yet it's possible the existing node does have a non-null\n // `prefetchRsc`. As an incremental step, we'll just de-opt to the\n // old behavior — no PPR value.\n cache.prefetchRsc = null;\n (0, _filllazyitemstillleafwithhead.fillLazyItemsTillLeafWithHead)(navigatedAt, cache, existingCache, treePatch, seedData, head, prefetchEntry);\n } else {\n // Copy rsc for the root node of the cache.\n cache.rsc = existingCache.rsc;\n // This is a PPR-only field. Unlike the previous branch, since we're\n // just cloning the existing cache node, we might as well keep the\n // PPR value, if it exists.\n cache.prefetchRsc = existingCache.prefetchRsc;\n cache.parallelRoutes = new Map(existingCache.parallelRoutes);\n cache.loading = existingCache.loading;\n // Create a copy of the existing cache with the rsc applied.\n (0, _fillcachewithnewsubtreedata.fillCacheWithNewSubTreeData)(navigatedAt, cache, existingCache, flightData, prefetchEntry);\n }\n return true;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=apply-flight-data.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvYXBwbHktZmxpZ2h0LWRhdGEuanMiLCJtYXBwaW5ncyI6Ijs7OzttREFNZ0JBOzs7ZUFBQUE7OzsyREFMOEI7eURBQ0Y7QUFJckMsU0FBU0EsZ0JBQ2RDLFdBQW1CLEVBQ25CQyxhQUF3QixFQUN4QkMsS0FBZ0IsRUFDaEJDLFVBQWdDLEVBQ2hDQyxhQUFrQztJQUVsQywwREFBMEQ7SUFDMUQsTUFBTSxFQUFFQyxNQUFNQyxTQUFTLEVBQUVDLFFBQVEsRUFBRUMsSUFBSSxFQUFFQyxZQUFZLEVBQUUsR0FBR047SUFFMUQsOEZBQThGO0lBQzlGLElBQUlJLGFBQWEsTUFBTTtRQUNyQixPQUFPO0lBQ1Q7SUFFQSxJQUFJRSxjQUFjO1FBQ2hCLE1BQU1DLE1BQU1ILFFBQVEsQ0FBQyxFQUFFO1FBQ3ZCLE1BQU1JLFVBQVVKLFFBQVEsQ0FBQyxFQUFFO1FBQzNCTCxNQUFNUyxPQUFPLEdBQUdBO1FBQ2hCVCxNQUFNUSxHQUFHLEdBQUdBO1FBQ1osa0VBQWtFO1FBQ2xFLG9FQUFvRTtRQUNwRSwyREFBMkQ7UUFDM0Qsa0VBQWtFO1FBQ2xFLCtCQUErQjtRQUMvQlIsTUFBTVUsV0FBVyxHQUFHO1FBQ3BCQyxDQUFBQSxHQUFBQSwrQkFBQUEsNkJBQUFBLEVBQ0ViLGFBQ0FFLE9BQ0FELGVBQ0FLLFdBQ0FDLFVBQ0FDLE1BQ0FKO0lBRUosT0FBTztRQUNMLDJDQUEyQztRQUMzQ0YsTUFBTVEsR0FBRyxHQUFHVCxjQUFjUyxHQUFHO1FBQzdCLG9FQUFvRTtRQUNwRSxrRUFBa0U7UUFDbEUsMkJBQTJCO1FBQzNCUixNQUFNVSxXQUFXLEdBQUdYLGNBQWNXLFdBQVc7UUFDN0NWLE1BQU1ZLGNBQWMsR0FBRyxJQUFJQyxJQUFJZCxjQUFjYSxjQUFjO1FBQzNEWixNQUFNUyxPQUFPLEdBQUdWLGNBQWNVLE9BQU87UUFDckMsNERBQTREO1FBQzVESyxDQUFBQSxHQUFBQSw2QkFBQUEsMkJBQUFBLEVBQ0VoQixhQUNBRSxPQUNBRCxlQUNBRSxZQUNBQztJQUVKO0lBRUEsT0FBTztBQUNUIiwic291cmNlcyI6WyIvaG9tZS9zcmMvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvYXBwbHktZmxpZ2h0LWRhdGEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDYWNoZU5vZGUgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvbGliL2FwcC1yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZSdcbmltcG9ydCB7IGZpbGxMYXp5SXRlbXNUaWxsTGVhZldpdGhIZWFkIH0gZnJvbSAnLi9maWxsLWxhenktaXRlbXMtdGlsbC1sZWFmLXdpdGgtaGVhZCdcbmltcG9ydCB7IGZpbGxDYWNoZVdpdGhOZXdTdWJUcmVlRGF0YSB9IGZyb20gJy4vZmlsbC1jYWNoZS13aXRoLW5ldy1zdWJ0cmVlLWRhdGEnXG5pbXBvcnQgdHlwZSB7IFByZWZldGNoQ2FjaGVFbnRyeSB9IGZyb20gJy4vcm91dGVyLXJlZHVjZXItdHlwZXMnXG5pbXBvcnQgdHlwZSB7IE5vcm1hbGl6ZWRGbGlnaHREYXRhIH0gZnJvbSAnLi4vLi4vZmxpZ2h0LWRhdGEtaGVscGVycydcblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5RmxpZ2h0RGF0YShcbiAgbmF2aWdhdGVkQXQ6IG51bWJlcixcbiAgZXhpc3RpbmdDYWNoZTogQ2FjaGVOb2RlLFxuICBjYWNoZTogQ2FjaGVOb2RlLFxuICBmbGlnaHREYXRhOiBOb3JtYWxpemVkRmxpZ2h0RGF0YSxcbiAgcHJlZmV0Y2hFbnRyeT86IFByZWZldGNoQ2FjaGVFbnRyeVxuKTogYm9vbGVhbiB7XG4gIC8vIFRoZSBvbmUgYmVmb3JlIGxhc3QgaXRlbSBpcyB0aGUgcm91dGVyIHN0YXRlIHRyZWUgcGF0Y2hcbiAgY29uc3QgeyB0cmVlOiB0cmVlUGF0Y2gsIHNlZWREYXRhLCBoZWFkLCBpc1Jvb3RSZW5kZXIgfSA9IGZsaWdodERhdGFcblxuICAvLyBIYW5kbGVzIGNhc2Ugd2hlcmUgcHJlZmV0Y2ggb25seSByZXR1cm5zIHRoZSByb3V0ZXIgdHJlZSBwYXRjaCB3aXRob3V0IHJlbmRlcmVkIGNvbXBvbmVudHMuXG4gIGlmIChzZWVkRGF0YSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKGlzUm9vdFJlbmRlcikge1xuICAgIGNvbnN0IHJzYyA9IHNlZWREYXRhWzFdXG4gICAgY29uc3QgbG9hZGluZyA9IHNlZWREYXRhWzNdXG4gICAgY2FjaGUubG9hZGluZyA9IGxvYWRpbmdcbiAgICBjYWNoZS5yc2MgPSByc2NcbiAgICAvLyBUaGlzIGlzIGEgUFBSLW9ubHkgZmllbGQuIFdoZW4gUFBSIGlzIGVuYWJsZWQsIHdlIHNob3VsZG4ndCBoaXRcbiAgICAvLyB0aGlzIHBhdGggZHVyaW5nIGEgbmF2aWdhdGlvbiwgYnV0IHVudGlsIFBQUiBpcyBmdWxseSBpbXBsZW1lbnRlZFxuICAgIC8vIHlldCBpdCdzIHBvc3NpYmxlIHRoZSBleGlzdGluZyBub2RlIGRvZXMgaGF2ZSBhIG5vbi1udWxsXG4gICAgLy8gYHByZWZldGNoUnNjYC4gQXMgYW4gaW5jcmVtZW50YWwgc3RlcCwgd2UnbGwganVzdCBkZS1vcHQgdG8gdGhlXG4gICAgLy8gb2xkIGJlaGF2aW9yIOKAlCBubyBQUFIgdmFsdWUuXG4gICAgY2FjaGUucHJlZmV0Y2hSc2MgPSBudWxsXG4gICAgZmlsbExhenlJdGVtc1RpbGxMZWFmV2l0aEhlYWQoXG4gICAgICBuYXZpZ2F0ZWRBdCxcbiAgICAgIGNhY2hlLFxuICAgICAgZXhpc3RpbmdDYWNoZSxcbiAgICAgIHRyZWVQYXRjaCxcbiAgICAgIHNlZWREYXRhLFxuICAgICAgaGVhZCxcbiAgICAgIHByZWZldGNoRW50cnlcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgLy8gQ29weSByc2MgZm9yIHRoZSByb290IG5vZGUgb2YgdGhlIGNhY2hlLlxuICAgIGNhY2hlLnJzYyA9IGV4aXN0aW5nQ2FjaGUucnNjXG4gICAgLy8gVGhpcyBpcyBhIFBQUi1vbmx5IGZpZWxkLiBVbmxpa2UgdGhlIHByZXZpb3VzIGJyYW5jaCwgc2luY2Ugd2UncmVcbiAgICAvLyBqdXN0IGNsb25pbmcgdGhlIGV4aXN0aW5nIGNhY2hlIG5vZGUsIHdlIG1pZ2h0IGFzIHdlbGwga2VlcCB0aGVcbiAgICAvLyBQUFIgdmFsdWUsIGlmIGl0IGV4aXN0cy5cbiAgICBjYWNoZS5wcmVmZXRjaFJzYyA9IGV4aXN0aW5nQ2FjaGUucHJlZmV0Y2hSc2NcbiAgICBjYWNoZS5wYXJhbGxlbFJvdXRlcyA9IG5ldyBNYXAoZXhpc3RpbmdDYWNoZS5wYXJhbGxlbFJvdXRlcylcbiAgICBjYWNoZS5sb2FkaW5nID0gZXhpc3RpbmdDYWNoZS5sb2FkaW5nXG4gICAgLy8gQ3JlYXRlIGEgY29weSBvZiB0aGUgZXhpc3RpbmcgY2FjaGUgd2l0aCB0aGUgcnNjIGFwcGxpZWQuXG4gICAgZmlsbENhY2hlV2l0aE5ld1N1YlRyZWVEYXRhKFxuICAgICAgbmF2aWdhdGVkQXQsXG4gICAgICBjYWNoZSxcbiAgICAgIGV4aXN0aW5nQ2FjaGUsXG4gICAgICBmbGlnaHREYXRhLFxuICAgICAgcHJlZmV0Y2hFbnRyeVxuICAgIClcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG4iXSwibmFtZXMiOlsiYXBwbHlGbGlnaHREYXRhIiwibmF2aWdhdGVkQXQiLCJleGlzdGluZ0NhY2hlIiwiY2FjaGUiLCJmbGlnaHREYXRhIiwicHJlZmV0Y2hFbnRyeSIsInRyZWUiLCJ0cmVlUGF0Y2giLCJzZWVkRGF0YSIsImhlYWQiLCJpc1Jvb3RSZW5kZXIiLCJyc2MiLCJsb2FkaW5nIiwicHJlZmV0Y2hSc2MiLCJmaWxsTGF6eUl0ZW1zVGlsbExlYWZXaXRoSGVhZCIsInBhcmFsbGVsUm91dGVzIiwiTWFwIiwiZmlsbENhY2hlV2l0aE5ld1N1YlRyZWVEYXRhIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/apply-flight-data.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/apply-router-state-patch-to-tree.js":
|
||
/*!*****************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/router-reducer/apply-router-state-patch-to-tree.js ***!
|
||
\*****************************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"applyRouterStatePatchToTree\", ({\n enumerable: true,\n get: function() {\n return applyRouterStatePatchToTree;\n }\n}));\nconst _segment = __webpack_require__(/*! ../../../shared/lib/segment */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/segment.js\");\nconst _flightdatahelpers = __webpack_require__(/*! ../../flight-data-helpers */ \"(app-pages-browser)/./node_modules/next/dist/client/flight-data-helpers.js\");\nconst _matchsegments = __webpack_require__(/*! ../match-segments */ \"(app-pages-browser)/./node_modules/next/dist/client/components/match-segments.js\");\nconst _refetchinactiveparallelsegments = __webpack_require__(/*! ./refetch-inactive-parallel-segments */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/refetch-inactive-parallel-segments.js\");\n/**\n * Deep merge of the two router states. Parallel route keys are preserved if the patch doesn't have them.\n */ function applyPatch(initialTree, patchTree) {\n const [initialSegment, initialParallelRoutes] = initialTree;\n const [patchSegment, patchParallelRoutes] = patchTree;\n // if the applied patch segment is __DEFAULT__ then it can be ignored in favor of the initial tree\n // this is because the __DEFAULT__ segment is used as a placeholder on navigation\n if (patchSegment === _segment.DEFAULT_SEGMENT_KEY && initialSegment !== _segment.DEFAULT_SEGMENT_KEY) {\n return initialTree;\n }\n if ((0, _matchsegments.matchSegment)(initialSegment, patchSegment)) {\n const newParallelRoutes = {};\n for(const key in initialParallelRoutes){\n const isInPatchTreeParallelRoutes = typeof patchParallelRoutes[key] !== 'undefined';\n if (isInPatchTreeParallelRoutes) {\n newParallelRoutes[key] = applyPatch(initialParallelRoutes[key], patchParallelRoutes[key]);\n } else {\n newParallelRoutes[key] = initialParallelRoutes[key];\n }\n }\n for(const key in patchParallelRoutes){\n if (newParallelRoutes[key]) {\n continue;\n }\n newParallelRoutes[key] = patchParallelRoutes[key];\n }\n const tree = [\n initialSegment,\n newParallelRoutes\n ];\n // Copy over the existing tree\n if (initialTree[2]) {\n tree[2] = initialTree[2];\n }\n if (initialTree[3]) {\n tree[3] = initialTree[3];\n }\n if (initialTree[4]) {\n tree[4] = initialTree[4];\n }\n return tree;\n }\n return patchTree;\n}\nfunction applyRouterStatePatchToTree(flightSegmentPath, flightRouterState, treePatch, path) {\n const [segment, parallelRoutes, url, refetch, isRootLayout] = flightRouterState;\n // Root refresh\n if (flightSegmentPath.length === 1) {\n const tree = applyPatch(flightRouterState, treePatch);\n (0, _refetchinactiveparallelsegments.addRefreshMarkerToActiveParallelSegments)(tree, path);\n return tree;\n }\n const [currentSegment, parallelRouteKey] = flightSegmentPath;\n // Tree path returned from the server should always match up with the current tree in the browser\n if (!(0, _matchsegments.matchSegment)(currentSegment, segment)) {\n return null;\n }\n const lastSegment = flightSegmentPath.length === 2;\n let parallelRoutePatch;\n if (lastSegment) {\n parallelRoutePatch = applyPatch(parallelRoutes[parallelRouteKey], treePatch);\n } else {\n parallelRoutePatch = applyRouterStatePatchToTree((0, _flightdatahelpers.getNextFlightSegmentPath)(flightSegmentPath), parallelRoutes[parallelRouteKey], treePatch, path);\n if (parallelRoutePatch === null) {\n return null;\n }\n }\n const tree = [\n flightSegmentPath[0],\n {\n ...parallelRoutes,\n [parallelRouteKey]: parallelRoutePatch\n },\n url,\n refetch\n ];\n // Current segment is the root layout\n if (isRootLayout) {\n tree[4] = true;\n }\n (0, _refetchinactiveparallelsegments.addRefreshMarkerToActiveParallelSegments)(tree, path);\n return tree;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=apply-router-state-patch-to-tree.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvYXBwbHktcm91dGVyLXN0YXRlLXBhdGNoLXRvLXRyZWUuanMiLCJtYXBwaW5ncyI6Ijs7OzsrREE2RWdCQTs7O2VBQUFBOzs7cUNBekVvQjsrQ0FDSzsyQ0FDWjs2REFDNEI7QUFFekQ7O0NBRUMsR0FDRCxTQUFTQyxXQUNQQyxXQUE4QixFQUM5QkMsU0FBNEI7SUFFNUIsTUFBTSxDQUFDQyxnQkFBZ0JDLHNCQUFzQixHQUFHSDtJQUNoRCxNQUFNLENBQUNJLGNBQWNDLG9CQUFvQixHQUFHSjtJQUU1QyxrR0FBa0c7SUFDbEcsaUZBQWlGO0lBQ2pGLElBQ0VHLGlCQUFpQkUsU0FBQUEsbUJBQW1CLElBQ3BDSixtQkFBbUJJLFNBQUFBLG1CQUFtQixFQUN0QztRQUNBLE9BQU9OO0lBQ1Q7SUFFQSxJQUFJTyxDQUFBQSxHQUFBQSxlQUFBQSxZQUFBQSxFQUFhTCxnQkFBZ0JFLGVBQWU7UUFDOUMsTUFBTUksb0JBQTBDLENBQUM7UUFDakQsSUFBSyxNQUFNQyxPQUFPTixzQkFBdUI7WUFDdkMsTUFBTU8sOEJBQ0osT0FBT0wsbUJBQW1CLENBQUNJLElBQUksS0FBSztZQUN0QyxJQUFJQyw2QkFBNkI7Z0JBQy9CRixpQkFBaUIsQ0FBQ0MsSUFBSSxHQUFHVixXQUN2QkkscUJBQXFCLENBQUNNLElBQUksRUFDMUJKLG1CQUFtQixDQUFDSSxJQUFJO1lBRTVCLE9BQU87Z0JBQ0xELGlCQUFpQixDQUFDQyxJQUFJLEdBQUdOLHFCQUFxQixDQUFDTSxJQUFJO1lBQ3JEO1FBQ0Y7UUFFQSxJQUFLLE1BQU1BLE9BQU9KLG9CQUFxQjtZQUNyQyxJQUFJRyxpQkFBaUIsQ0FBQ0MsSUFBSSxFQUFFO2dCQUMxQjtZQUNGO1lBRUFELGlCQUFpQixDQUFDQyxJQUFJLEdBQUdKLG1CQUFtQixDQUFDSSxJQUFJO1FBQ25EO1FBRUEsTUFBTUUsT0FBMEI7WUFBQ1Q7WUFBZ0JNO1NBQWtCO1FBRW5FLDhCQUE4QjtRQUM5QixJQUFJUixXQUFXLENBQUMsRUFBRSxFQUFFO1lBQ2xCVyxJQUFJLENBQUMsRUFBRSxHQUFHWCxXQUFXLENBQUMsRUFBRTtRQUMxQjtRQUVBLElBQUlBLFdBQVcsQ0FBQyxFQUFFLEVBQUU7WUFDbEJXLElBQUksQ0FBQyxFQUFFLEdBQUdYLFdBQVcsQ0FBQyxFQUFFO1FBQzFCO1FBRUEsSUFBSUEsV0FBVyxDQUFDLEVBQUUsRUFBRTtZQUNsQlcsSUFBSSxDQUFDLEVBQUUsR0FBR1gsV0FBVyxDQUFDLEVBQUU7UUFDMUI7UUFFQSxPQUFPVztJQUNUO0lBRUEsT0FBT1Y7QUFDVDtBQU9PLFNBQVNILDRCQUNkYyxpQkFBb0MsRUFDcENDLGlCQUFvQyxFQUNwQ0MsU0FBNEIsRUFDNUJDLElBQVk7SUFFWixNQUFNLENBQUNDLFNBQVNDLGdCQUFnQkMsS0FBS0MsU0FBU0MsYUFBYSxHQUN6RFA7SUFFRixlQUFlO0lBQ2YsSUFBSUQsa0JBQWtCUyxNQUFNLEtBQUssR0FBRztRQUNsQyxNQUFNVixPQUEwQlosV0FBV2MsbUJBQW1CQztRQUU5RFEsQ0FBQUEsR0FBQUEsaUNBQUFBLHdDQUFBQSxFQUF5Q1gsTUFBTUk7UUFFL0MsT0FBT0o7SUFDVDtJQUVBLE1BQU0sQ0FBQ1ksZ0JBQWdCQyxpQkFBaUIsR0FBR1o7SUFFM0MsaUdBQWlHO0lBQ2pHLElBQUksQ0FBQ0wsQ0FBQUEsR0FBQUEsZUFBQUEsWUFBQUEsRUFBYWdCLGdCQUFnQlAsVUFBVTtRQUMxQyxPQUFPO0lBQ1Q7SUFFQSxNQUFNUyxjQUFjYixrQkFBa0JTLE1BQU0sS0FBSztJQUVqRCxJQUFJSztJQUNKLElBQUlELGFBQWE7UUFDZkMscUJBQXFCM0IsV0FBV2tCLGNBQWMsQ0FBQ08saUJBQWlCLEVBQUVWO0lBQ3BFLE9BQU87UUFDTFkscUJBQXFCNUIsNEJBQ25CNkIsQ0FBQUEsR0FBQUEsbUJBQUFBLHdCQUFBQSxFQUF5QmYsb0JBQ3pCSyxjQUFjLENBQUNPLGlCQUFpQixFQUNoQ1YsV0FDQUM7UUFHRixJQUFJVyx1QkFBdUIsTUFBTTtZQUMvQixPQUFPO1FBQ1Q7SUFDRjtJQUVBLE1BQU1mLE9BQTBCO1FBQzlCQyxpQkFBaUIsQ0FBQyxFQUFFO1FBQ3BCO1lBQ0UsR0FBR0ssY0FBYztZQUNqQixDQUFDTyxpQkFBaUIsRUFBRUU7UUFDdEI7UUFDQVI7UUFDQUM7S0FDRDtJQUVELHFDQUFxQztJQUNyQyxJQUFJQyxjQUFjO1FBQ2hCVCxJQUFJLENBQUMsRUFBRSxHQUFHO0lBQ1o7SUFFQVcsQ0FBQUEsR0FBQUEsaUNBQUFBLHdDQUFBQSxFQUF5Q1gsTUFBTUk7SUFFL0MsT0FBT0o7QUFDVCIsInNvdXJjZXMiOlsiL2hvbWUvc3JjL2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2FwcGx5LXJvdXRlci1zdGF0ZS1wYXRjaC10by10cmVlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgRmxpZ2h0Um91dGVyU3RhdGUsXG4gIEZsaWdodFNlZ21lbnRQYXRoLFxufSBmcm9tICcuLi8uLi8uLi9zZXJ2ZXIvYXBwLXJlbmRlci90eXBlcydcbmltcG9ydCB7IERFRkFVTFRfU0VHTUVOVF9LRVkgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvbGliL3NlZ21lbnQnXG5pbXBvcnQgeyBnZXROZXh0RmxpZ2h0U2VnbWVudFBhdGggfSBmcm9tICcuLi8uLi9mbGlnaHQtZGF0YS1oZWxwZXJzJ1xuaW1wb3J0IHsgbWF0Y2hTZWdtZW50IH0gZnJvbSAnLi4vbWF0Y2gtc2VnbWVudHMnXG5pbXBvcnQgeyBhZGRSZWZyZXNoTWFya2VyVG9BY3RpdmVQYXJhbGxlbFNlZ21lbnRzIH0gZnJvbSAnLi9yZWZldGNoLWluYWN0aXZlLXBhcmFsbGVsLXNlZ21lbnRzJ1xuXG4vKipcbiAqIERlZXAgbWVyZ2Ugb2YgdGhlIHR3byByb3V0ZXIgc3RhdGVzLiBQYXJhbGxlbCByb3V0ZSBrZXlzIGFyZSBwcmVzZXJ2ZWQgaWYgdGhlIHBhdGNoIGRvZXNuJ3QgaGF2ZSB0aGVtLlxuICovXG5mdW5jdGlvbiBhcHBseVBhdGNoKFxuICBpbml0aWFsVHJlZTogRmxpZ2h0Um91dGVyU3RhdGUsXG4gIHBhdGNoVHJlZTogRmxpZ2h0Um91dGVyU3RhdGVcbik6IEZsaWdodFJvdXRlclN0YXRlIHtcbiAgY29uc3QgW2luaXRpYWxTZWdtZW50LCBpbml0aWFsUGFyYWxsZWxSb3V0ZXNdID0gaW5pdGlhbFRyZWVcbiAgY29uc3QgW3BhdGNoU2VnbWVudCwgcGF0Y2hQYXJhbGxlbFJvdXRlc10gPSBwYXRjaFRyZWVcblxuICAvLyBpZiB0aGUgYXBwbGllZCBwYXRjaCBzZWdtZW50IGlzIF9fREVGQVVMVF9fIHRoZW4gaXQgY2FuIGJlIGlnbm9yZWQgaW4gZmF2b3Igb2YgdGhlIGluaXRpYWwgdHJlZVxuICAvLyB0aGlzIGlzIGJlY2F1c2UgdGhlIF9fREVGQVVMVF9fIHNlZ21lbnQgaXMgdXNlZCBhcyBhIHBsYWNlaG9sZGVyIG9uIG5hdmlnYXRpb25cbiAgaWYgKFxuICAgIHBhdGNoU2VnbWVudCA9PT0gREVGQVVMVF9TRUdNRU5UX0tFWSAmJlxuICAgIGluaXRpYWxTZWdtZW50ICE9PSBERUZBVUxUX1NFR01FTlRfS0VZXG4gICkge1xuICAgIHJldHVybiBpbml0aWFsVHJlZVxuICB9XG5cbiAgaWYgKG1hdGNoU2VnbWVudChpbml0aWFsU2VnbWVudCwgcGF0Y2hTZWdtZW50KSkge1xuICAgIGNvbnN0IG5ld1BhcmFsbGVsUm91dGVzOiBGbGlnaHRSb3V0ZXJTdGF0ZVsxXSA9IHt9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gaW5pdGlhbFBhcmFsbGVsUm91dGVzKSB7XG4gICAgICBjb25zdCBpc0luUGF0Y2hUcmVlUGFyYWxsZWxSb3V0ZXMgPVxuICAgICAgICB0eXBlb2YgcGF0Y2hQYXJhbGxlbFJvdXRlc1trZXldICE9PSAndW5kZWZpbmVkJ1xuICAgICAgaWYgKGlzSW5QYXRjaFRyZWVQYXJhbGxlbFJvdXRlcykge1xuICAgICAgICBuZXdQYXJhbGxlbFJvdXRlc1trZXldID0gYXBwbHlQYXRjaChcbiAgICAgICAgICBpbml0aWFsUGFyYWxsZWxSb3V0ZXNba2V5XSxcbiAgICAgICAgICBwYXRjaFBhcmFsbGVsUm91dGVzW2tleV1cbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3UGFyYWxsZWxSb3V0ZXNba2V5XSA9IGluaXRpYWxQYXJhbGxlbFJvdXRlc1trZXldXG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gcGF0Y2hQYXJhbGxlbFJvdXRlcykge1xuICAgICAgaWYgKG5ld1BhcmFsbGVsUm91dGVzW2tleV0pIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgbmV3UGFyYWxsZWxSb3V0ZXNba2V5XSA9IHBhdGNoUGFyYWxsZWxSb3V0ZXNba2V5XVxuICAgIH1cblxuICAgIGNvbnN0IHRyZWU6IEZsaWdodFJvdXRlclN0YXRlID0gW2luaXRpYWxTZWdtZW50LCBuZXdQYXJhbGxlbFJvdXRlc11cblxuICAgIC8vIENvcHkgb3ZlciB0aGUgZXhpc3RpbmcgdHJlZVxuICAgIGlmIChpbml0aWFsVHJlZVsyXSkge1xuICAgICAgdHJlZVsyXSA9IGluaXRpYWxUcmVlWzJdXG4gICAgfVxuXG4gICAgaWYgKGluaXRpYWxUcmVlWzNdKSB7XG4gICAgICB0cmVlWzNdID0gaW5pdGlhbFRyZWVbM11cbiAgICB9XG5cbiAgICBpZiAoaW5pdGlhbFRyZWVbNF0pIHtcbiAgICAgIHRyZWVbNF0gPSBpbml0aWFsVHJlZVs0XVxuICAgIH1cblxuICAgIHJldHVybiB0cmVlXG4gIH1cblxuICByZXR1cm4gcGF0Y2hUcmVlXG59XG5cbi8qKlxuICogQXBwbHkgdGhlIHJvdXRlciBzdGF0ZSBmcm9tIHRoZSBGbGlnaHQgcmVzcG9uc2UsIGJ1dCBza2lwIHBhdGNoaW5nIGRlZmF1bHQgc2VnbWVudHMuXG4gKiBVc2VmdWwgZm9yIHBhdGNoaW5nIHRoZSByb3V0ZXIgY2FjaGUgd2hlbiBuYXZpZ2F0aW5nLCB3aGVyZSB3ZSBwZXJzaXN0IHRoZSBleGlzdGluZyBkZWZhdWx0IHNlZ21lbnQgaWYgdGhlcmUgaXNuJ3QgYSBuZXcgb25lLlxuICogQ3JlYXRlcyBhIG5ldyByb3V0ZXIgc3RhdGUgdHJlZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5Um91dGVyU3RhdGVQYXRjaFRvVHJlZShcbiAgZmxpZ2h0U2VnbWVudFBhdGg6IEZsaWdodFNlZ21lbnRQYXRoLFxuICBmbGlnaHRSb3V0ZXJTdGF0ZTogRmxpZ2h0Um91dGVyU3RhdGUsXG4gIHRyZWVQYXRjaDogRmxpZ2h0Um91dGVyU3RhdGUsXG4gIHBhdGg6IHN0cmluZ1xuKTogRmxpZ2h0Um91dGVyU3RhdGUgfCBudWxsIHtcbiAgY29uc3QgW3NlZ21lbnQsIHBhcmFsbGVsUm91dGVzLCB1cmwsIHJlZmV0Y2gsIGlzUm9vdExheW91dF0gPVxuICAgIGZsaWdodFJvdXRlclN0YXRlXG5cbiAgLy8gUm9vdCByZWZyZXNoXG4gIGlmIChmbGlnaHRTZWdtZW50UGF0aC5sZW5ndGggPT09IDEpIHtcbiAgICBjb25zdCB0cmVlOiBGbGlnaHRSb3V0ZXJTdGF0ZSA9IGFwcGx5UGF0Y2goZmxpZ2h0Um91dGVyU3RhdGUsIHRyZWVQYXRjaClcblxuICAgIGFkZFJlZnJlc2hNYXJrZXJUb0FjdGl2ZVBhcmFsbGVsU2VnbWVudHModHJlZSwgcGF0aClcblxuICAgIHJldHVybiB0cmVlXG4gIH1cblxuICBjb25zdCBbY3VycmVudFNlZ21lbnQsIHBhcmFsbGVsUm91dGVLZXldID0gZmxpZ2h0U2VnbWVudFBhdGhcblxuICAvLyBUcmVlIHBhdGggcmV0dXJuZWQgZnJvbSB0aGUgc2VydmVyIHNob3VsZCBhbHdheXMgbWF0Y2ggdXAgd2l0aCB0aGUgY3VycmVudCB0cmVlIGluIHRoZSBicm93c2VyXG4gIGlmICghbWF0Y2hTZWdtZW50KGN1cnJlbnRTZWdtZW50LCBzZWdtZW50KSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBjb25zdCBsYXN0U2VnbWVudCA9IGZsaWdodFNlZ21lbnRQYXRoLmxlbmd0aCA9PT0gMlxuXG4gIGxldCBwYXJhbGxlbFJvdXRlUGF0Y2hcbiAgaWYgKGxhc3RTZWdtZW50KSB7XG4gICAgcGFyYWxsZWxSb3V0ZVBhdGNoID0gYXBwbHlQYXRjaChwYXJhbGxlbFJvdXRlc1twYXJhbGxlbFJvdXRlS2V5XSwgdHJlZVBhdGNoKVxuICB9IGVsc2Uge1xuICAgIHBhcmFsbGVsUm91dGVQYXRjaCA9IGFwcGx5Um91dGVyU3RhdGVQYXRjaFRvVHJlZShcbiAgICAgIGdldE5leHRGbGlnaHRTZWdtZW50UGF0aChmbGlnaHRTZWdtZW50UGF0aCksXG4gICAgICBwYXJhbGxlbFJvdXRlc1twYXJhbGxlbFJvdXRlS2V5XSxcbiAgICAgIHRyZWVQYXRjaCxcbiAgICAgIHBhdGhcbiAgICApXG5cbiAgICBpZiAocGFyYWxsZWxSb3V0ZVBhdGNoID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHRyZWU6IEZsaWdodFJvdXRlclN0YXRlID0gW1xuICAgIGZsaWdodFNlZ21lbnRQYXRoWzBdLFxuICAgIHtcbiAgICAgIC4uLnBhcmFsbGVsUm91dGVzLFxuICAgICAgW3BhcmFsbGVsUm91dGVLZXldOiBwYXJhbGxlbFJvdXRlUGF0Y2gsXG4gICAgfSxcbiAgICB1cmwsXG4gICAgcmVmZXRjaCxcbiAgXVxuXG4gIC8vIEN1cnJlbnQgc2VnbWVudCBpcyB0aGUgcm9vdCBsYXlvdXRcbiAgaWYgKGlzUm9vdExheW91dCkge1xuICAgIHRyZWVbNF0gPSB0cnVlXG4gIH1cblxuICBhZGRSZWZyZXNoTWFya2VyVG9BY3RpdmVQYXJhbGxlbFNlZ21lbnRzKHRyZWUsIHBhdGgpXG5cbiAgcmV0dXJuIHRyZWVcbn1cbiJdLCJuYW1lcyI6WyJhcHBseVJvdXRlclN0YXRlUGF0Y2hUb1RyZWUiLCJhcHBseVBhdGNoIiwiaW5pdGlhbFRyZWUiLCJwYXRjaFRyZWUiLCJpbml0aWFsU2VnbWVudCIsImluaXRpYWxQYXJhbGxlbFJvdXRlcyIsInBhdGNoU2VnbWVudCIsInBhdGNoUGFyYWxsZWxSb3V0ZXMiLCJERUZBVUxUX1NFR01FTlRfS0VZIiwibWF0Y2hTZWdtZW50IiwibmV3UGFyYWxsZWxSb3V0ZXMiLCJrZXkiLCJpc0luUGF0Y2hUcmVlUGFyYWxsZWxSb3V0ZXMiLCJ0cmVlIiwiZmxpZ2h0U2VnbWVudFBhdGgiLCJmbGlnaHRSb3V0ZXJTdGF0ZSIsInRyZWVQYXRjaCIsInBhdGgiLCJzZWdtZW50IiwicGFyYWxsZWxSb3V0ZXMiLCJ1cmwiLCJyZWZldGNoIiwiaXNSb290TGF5b3V0IiwibGVuZ3RoIiwiYWRkUmVmcmVzaE1hcmtlclRvQWN0aXZlUGFyYWxsZWxTZWdtZW50cyIsImN1cnJlbnRTZWdtZW50IiwicGFyYWxsZWxSb3V0ZUtleSIsImxhc3RTZWdtZW50IiwicGFyYWxsZWxSb3V0ZVBhdGNoIiwiZ2V0TmV4dEZsaWdodFNlZ21lbnRQYXRoIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/apply-router-state-patch-to-tree.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/clear-cache-node-data-for-segment-path.js":
|
||
/*!***********************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/router-reducer/clear-cache-node-data-for-segment-path.js ***!
|
||
\***********************************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"clearCacheNodeDataForSegmentPath\", ({\n enumerable: true,\n get: function() {\n return clearCacheNodeDataForSegmentPath;\n }\n}));\nconst _flightdatahelpers = __webpack_require__(/*! ../../flight-data-helpers */ \"(app-pages-browser)/./node_modules/next/dist/client/flight-data-helpers.js\");\nconst _createroutercachekey = __webpack_require__(/*! ./create-router-cache-key */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\");\nfunction clearCacheNodeDataForSegmentPath(newCache, existingCache, flightSegmentPath) {\n const isLastEntry = flightSegmentPath.length <= 2;\n const [parallelRouteKey, segment] = flightSegmentPath;\n const cacheKey = (0, _createroutercachekey.createRouterCacheKey)(segment);\n const existingChildSegmentMap = existingCache.parallelRoutes.get(parallelRouteKey);\n let childSegmentMap = newCache.parallelRoutes.get(parallelRouteKey);\n if (!childSegmentMap || childSegmentMap === existingChildSegmentMap) {\n childSegmentMap = new Map(existingChildSegmentMap);\n newCache.parallelRoutes.set(parallelRouteKey, childSegmentMap);\n }\n const existingChildCacheNode = existingChildSegmentMap == null ? void 0 : existingChildSegmentMap.get(cacheKey);\n let childCacheNode = childSegmentMap.get(cacheKey);\n // In case of last segment start off the fetch at this level and don't copy further down.\n if (isLastEntry) {\n if (!childCacheNode || !childCacheNode.lazyData || childCacheNode === existingChildCacheNode) {\n childSegmentMap.set(cacheKey, {\n lazyData: null,\n rsc: null,\n prefetchRsc: null,\n head: null,\n prefetchHead: null,\n parallelRoutes: new Map(),\n loading: null,\n navigatedAt: -1\n });\n }\n return;\n }\n if (!childCacheNode || !existingChildCacheNode) {\n // Start fetch in the place where the existing cache doesn't have the data yet.\n if (!childCacheNode) {\n childSegmentMap.set(cacheKey, {\n lazyData: null,\n rsc: null,\n prefetchRsc: null,\n head: null,\n prefetchHead: null,\n parallelRoutes: new Map(),\n loading: null,\n navigatedAt: -1\n });\n }\n return;\n }\n if (childCacheNode === existingChildCacheNode) {\n childCacheNode = {\n lazyData: childCacheNode.lazyData,\n rsc: childCacheNode.rsc,\n prefetchRsc: childCacheNode.prefetchRsc,\n head: childCacheNode.head,\n prefetchHead: childCacheNode.prefetchHead,\n parallelRoutes: new Map(childCacheNode.parallelRoutes),\n loading: childCacheNode.loading\n };\n childSegmentMap.set(cacheKey, childCacheNode);\n }\n return clearCacheNodeDataForSegmentPath(childCacheNode, existingChildCacheNode, (0, _flightdatahelpers.getNextFlightSegmentPath)(flightSegmentPath));\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=clear-cache-node-data-for-segment-path.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvY2xlYXItY2FjaGUtbm9kZS1kYXRhLWZvci1zZWdtZW50LXBhdGguanMiLCJtYXBwaW5ncyI6Ijs7OztvRUFRZ0JBOzs7ZUFBQUE7OzsrQ0FOeUI7a0RBQ0o7QUFLOUIsU0FBU0EsaUNBQ2RDLFFBQW1CLEVBQ25CQyxhQUF3QixFQUN4QkMsaUJBQW9DO0lBRXBDLE1BQU1DLGNBQWNELGtCQUFrQkUsTUFBTSxJQUFJO0lBRWhELE1BQU0sQ0FBQ0Msa0JBQWtCQyxRQUFRLEdBQUdKO0lBQ3BDLE1BQU1LLFdBQVdDLENBQUFBLEdBQUFBLHNCQUFBQSxvQkFBQUEsRUFBcUJGO0lBRXRDLE1BQU1HLDBCQUNKUixjQUFjUyxjQUFjLENBQUNDLEdBQUcsQ0FBQ047SUFFbkMsSUFBSU8sa0JBQWtCWixTQUFTVSxjQUFjLENBQUNDLEdBQUcsQ0FBQ047SUFFbEQsSUFBSSxDQUFDTyxtQkFBbUJBLG9CQUFvQkgseUJBQXlCO1FBQ25FRyxrQkFBa0IsSUFBSUMsSUFBSUo7UUFDMUJULFNBQVNVLGNBQWMsQ0FBQ0ksR0FBRyxDQUFDVCxrQkFBa0JPO0lBQ2hEO0lBRUEsTUFBTUcseUJBQXlCTiwyQkFBQUEsT0FBQUEsS0FBQUEsSUFBQUEsd0JBQXlCRSxHQUFHLENBQUNKO0lBQzVELElBQUlTLGlCQUFpQkosZ0JBQWdCRCxHQUFHLENBQUNKO0lBRXpDLHlGQUF5RjtJQUN6RixJQUFJSixhQUFhO1FBQ2YsSUFDRSxDQUFDYSxrQkFDRCxDQUFDQSxlQUFlQyxRQUFRLElBQ3hCRCxtQkFBbUJELHdCQUNuQjtZQUNBSCxnQkFBZ0JFLEdBQUcsQ0FBQ1AsVUFBVTtnQkFDNUJVLFVBQVU7Z0JBQ1ZDLEtBQUs7Z0JBQ0xDLGFBQWE7Z0JBQ2JDLE1BQU07Z0JBQ05DLGNBQWM7Z0JBQ2RYLGdCQUFnQixJQUFJRztnQkFDcEJTLFNBQVM7Z0JBQ1RDLGFBQWEsQ0FBQztZQUNoQjtRQUNGO1FBQ0E7SUFDRjtJQUVBLElBQUksQ0FBQ1Asa0JBQWtCLENBQUNELHdCQUF3QjtRQUM5QywrRUFBK0U7UUFDL0UsSUFBSSxDQUFDQyxnQkFBZ0I7WUFDbkJKLGdCQUFnQkUsR0FBRyxDQUFDUCxVQUFVO2dCQUM1QlUsVUFBVTtnQkFDVkMsS0FBSztnQkFDTEMsYUFBYTtnQkFDYkMsTUFBTTtnQkFDTkMsY0FBYztnQkFDZFgsZ0JBQWdCLElBQUlHO2dCQUNwQlMsU0FBUztnQkFDVEMsYUFBYSxDQUFDO1lBQ2hCO1FBQ0Y7UUFDQTtJQUNGO0lBRUEsSUFBSVAsbUJBQW1CRCx3QkFBd0I7UUFDN0NDLGlCQUFpQjtZQUNmQyxVQUFVRCxlQUFlQyxRQUFRO1lBQ2pDQyxLQUFLRixlQUFlRSxHQUFHO1lBQ3ZCQyxhQUFhSCxlQUFlRyxXQUFXO1lBQ3ZDQyxNQUFNSixlQUFlSSxJQUFJO1lBQ3pCQyxjQUFjTCxlQUFlSyxZQUFZO1lBQ3pDWCxnQkFBZ0IsSUFBSUcsSUFBSUcsZUFBZU4sY0FBYztZQUNyRFksU0FBU04sZUFBZU0sT0FBTztRQUNqQztRQUNBVixnQkFBZ0JFLEdBQUcsQ0FBQ1AsVUFBVVM7SUFDaEM7SUFFQSxPQUFPakIsaUNBQ0xpQixnQkFDQUQsd0JBQ0FTLENBQUFBLEdBQUFBLG1CQUFBQSx3QkFBQUEsRUFBeUJ0QjtBQUU3QiIsInNvdXJjZXMiOlsiL2hvbWUvc3JjL2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2NsZWFyLWNhY2hlLW5vZGUtZGF0YS1mb3Itc2VnbWVudC1wYXRoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmxpZ2h0U2VnbWVudFBhdGggfSBmcm9tICcuLi8uLi8uLi9zZXJ2ZXIvYXBwLXJlbmRlci90eXBlcydcbmltcG9ydCB0eXBlIHsgQ2FjaGVOb2RlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2xpYi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUnXG5pbXBvcnQgeyBnZXROZXh0RmxpZ2h0U2VnbWVudFBhdGggfSBmcm9tICcuLi8uLi9mbGlnaHQtZGF0YS1oZWxwZXJzJ1xuaW1wb3J0IHsgY3JlYXRlUm91dGVyQ2FjaGVLZXkgfSBmcm9tICcuL2NyZWF0ZS1yb3V0ZXItY2FjaGUta2V5J1xuXG4vKipcbiAqIFRoaXMgd2lsbCBjbGVhciB0aGUgQ2FjaGVOb2RlIGRhdGEgZm9yIGEgcGFydGljdWxhciBzZWdtZW50IHBhdGguIFRoaXMgd2lsbCBjYXVzZSBhIGxhenktZmV0Y2ggaW4gbGF5b3V0IHJvdXRlciB0byBmaWxsIGluIG5ldyBkYXRhLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJDYWNoZU5vZGVEYXRhRm9yU2VnbWVudFBhdGgoXG4gIG5ld0NhY2hlOiBDYWNoZU5vZGUsXG4gIGV4aXN0aW5nQ2FjaGU6IENhY2hlTm9kZSxcbiAgZmxpZ2h0U2VnbWVudFBhdGg6IEZsaWdodFNlZ21lbnRQYXRoXG4pOiB2b2lkIHtcbiAgY29uc3QgaXNMYXN0RW50cnkgPSBmbGlnaHRTZWdtZW50UGF0aC5sZW5ndGggPD0gMlxuXG4gIGNvbnN0IFtwYXJhbGxlbFJvdXRlS2V5LCBzZWdtZW50XSA9IGZsaWdodFNlZ21lbnRQYXRoXG4gIGNvbnN0IGNhY2hlS2V5ID0gY3JlYXRlUm91dGVyQ2FjaGVLZXkoc2VnbWVudClcblxuICBjb25zdCBleGlzdGluZ0NoaWxkU2VnbWVudE1hcCA9XG4gICAgZXhpc3RpbmdDYWNoZS5wYXJhbGxlbFJvdXRlcy5nZXQocGFyYWxsZWxSb3V0ZUtleSlcblxuICBsZXQgY2hpbGRTZWdtZW50TWFwID0gbmV3Q2FjaGUucGFyYWxsZWxSb3V0ZXMuZ2V0KHBhcmFsbGVsUm91dGVLZXkpXG5cbiAgaWYgKCFjaGlsZFNlZ21lbnRNYXAgfHwgY2hpbGRTZWdtZW50TWFwID09PSBleGlzdGluZ0NoaWxkU2VnbWVudE1hcCkge1xuICAgIGNoaWxkU2VnbWVudE1hcCA9IG5ldyBNYXAoZXhpc3RpbmdDaGlsZFNlZ21lbnRNYXApXG4gICAgbmV3Q2FjaGUucGFyYWxsZWxSb3V0ZXMuc2V0KHBhcmFsbGVsUm91dGVLZXksIGNoaWxkU2VnbWVudE1hcClcbiAgfVxuXG4gIGNvbnN0IGV4aXN0aW5nQ2hpbGRDYWNoZU5vZGUgPSBleGlzdGluZ0NoaWxkU2VnbWVudE1hcD8uZ2V0KGNhY2hlS2V5KVxuICBsZXQgY2hpbGRDYWNoZU5vZGUgPSBjaGlsZFNlZ21lbnRNYXAuZ2V0KGNhY2hlS2V5KVxuXG4gIC8vIEluIGNhc2Ugb2YgbGFzdCBzZWdtZW50IHN0YXJ0IG9mZiB0aGUgZmV0Y2ggYXQgdGhpcyBsZXZlbCBhbmQgZG9uJ3QgY29weSBmdXJ0aGVyIGRvd24uXG4gIGlmIChpc0xhc3RFbnRyeSkge1xuICAgIGlmIChcbiAgICAgICFjaGlsZENhY2hlTm9kZSB8fFxuICAgICAgIWNoaWxkQ2FjaGVOb2RlLmxhenlEYXRhIHx8XG4gICAgICBjaGlsZENhY2hlTm9kZSA9PT0gZXhpc3RpbmdDaGlsZENhY2hlTm9kZVxuICAgICkge1xuICAgICAgY2hpbGRTZWdtZW50TWFwLnNldChjYWNoZUtleSwge1xuICAgICAgICBsYXp5RGF0YTogbnVsbCxcbiAgICAgICAgcnNjOiBudWxsLFxuICAgICAgICBwcmVmZXRjaFJzYzogbnVsbCxcbiAgICAgICAgaGVhZDogbnVsbCxcbiAgICAgICAgcHJlZmV0Y2hIZWFkOiBudWxsLFxuICAgICAgICBwYXJhbGxlbFJvdXRlczogbmV3IE1hcCgpLFxuICAgICAgICBsb2FkaW5nOiBudWxsLFxuICAgICAgICBuYXZpZ2F0ZWRBdDogLTEsXG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmICghY2hpbGRDYWNoZU5vZGUgfHwgIWV4aXN0aW5nQ2hpbGRDYWNoZU5vZGUpIHtcbiAgICAvLyBTdGFydCBmZXRjaCBpbiB0aGUgcGxhY2Ugd2hlcmUgdGhlIGV4aXN0aW5nIGNhY2hlIGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSB5ZXQuXG4gICAgaWYgKCFjaGlsZENhY2hlTm9kZSkge1xuICAgICAgY2hpbGRTZWdtZW50TWFwLnNldChjYWNoZUtleSwge1xuICAgICAgICBsYXp5RGF0YTogbnVsbCxcbiAgICAgICAgcnNjOiBudWxsLFxuICAgICAgICBwcmVmZXRjaFJzYzogbnVsbCxcbiAgICAgICAgaGVhZDogbnVsbCxcbiAgICAgICAgcHJlZmV0Y2hIZWFkOiBudWxsLFxuICAgICAgICBwYXJhbGxlbFJvdXRlczogbmV3IE1hcCgpLFxuICAgICAgICBsb2FkaW5nOiBudWxsLFxuICAgICAgICBuYXZpZ2F0ZWRBdDogLTEsXG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChjaGlsZENhY2hlTm9kZSA9PT0gZXhpc3RpbmdDaGlsZENhY2hlTm9kZSkge1xuICAgIGNoaWxkQ2FjaGVOb2RlID0ge1xuICAgICAgbGF6eURhdGE6IGNoaWxkQ2FjaGVOb2RlLmxhenlEYXRhLFxuICAgICAgcnNjOiBjaGlsZENhY2hlTm9kZS5yc2MsXG4gICAgICBwcmVmZXRjaFJzYzogY2hpbGRDYWNoZU5vZGUucHJlZmV0Y2hSc2MsXG4gICAgICBoZWFkOiBjaGlsZENhY2hlTm9kZS5oZWFkLFxuICAgICAgcHJlZmV0Y2hIZWFkOiBjaGlsZENhY2hlTm9kZS5wcmVmZXRjaEhlYWQsXG4gICAgICBwYXJhbGxlbFJvdXRlczogbmV3IE1hcChjaGlsZENhY2hlTm9kZS5wYXJhbGxlbFJvdXRlcyksXG4gICAgICBsb2FkaW5nOiBjaGlsZENhY2hlTm9kZS5sb2FkaW5nLFxuICAgIH0gYXMgQ2FjaGVOb2RlXG4gICAgY2hpbGRTZWdtZW50TWFwLnNldChjYWNoZUtleSwgY2hpbGRDYWNoZU5vZGUpXG4gIH1cblxuICByZXR1cm4gY2xlYXJDYWNoZU5vZGVEYXRhRm9yU2VnbWVudFBhdGgoXG4gICAgY2hpbGRDYWNoZU5vZGUsXG4gICAgZXhpc3RpbmdDaGlsZENhY2hlTm9kZSxcbiAgICBnZXROZXh0RmxpZ2h0U2VnbWVudFBhdGgoZmxpZ2h0U2VnbWVudFBhdGgpXG4gIClcbn1cbiJdLCJuYW1lcyI6WyJjbGVhckNhY2hlTm9kZURhdGFGb3JTZWdtZW50UGF0aCIsIm5ld0NhY2hlIiwiZXhpc3RpbmdDYWNoZSIsImZsaWdodFNlZ21lbnRQYXRoIiwiaXNMYXN0RW50cnkiLCJsZW5ndGgiLCJwYXJhbGxlbFJvdXRlS2V5Iiwic2VnbWVudCIsImNhY2hlS2V5IiwiY3JlYXRlUm91dGVyQ2FjaGVLZXkiLCJleGlzdGluZ0NoaWxkU2VnbWVudE1hcCIsInBhcmFsbGVsUm91dGVzIiwiZ2V0IiwiY2hpbGRTZWdtZW50TWFwIiwiTWFwIiwic2V0IiwiZXhpc3RpbmdDaGlsZENhY2hlTm9kZSIsImNoaWxkQ2FjaGVOb2RlIiwibGF6eURhdGEiLCJyc2MiLCJwcmVmZXRjaFJzYyIsImhlYWQiLCJwcmVmZXRjaEhlYWQiLCJsb2FkaW5nIiwibmF2aWdhdGVkQXQiLCJnZXROZXh0RmxpZ2h0U2VnbWVudFBhdGgiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/clear-cache-node-data-for-segment-path.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/compute-changed-path.js":
|
||
/*!*****************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/router-reducer/compute-changed-path.js ***!
|
||
\*****************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n computeChangedPath: function() {\n return computeChangedPath;\n },\n extractPathFromFlightRouterState: function() {\n return extractPathFromFlightRouterState;\n },\n getSelectedParams: function() {\n return getSelectedParams;\n }\n});\nconst _interceptionroutes = __webpack_require__(/*! ../../../shared/lib/router/utils/interception-routes */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/interception-routes.js\");\nconst _segment = __webpack_require__(/*! ../../../shared/lib/segment */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/segment.js\");\nconst _matchsegments = __webpack_require__(/*! ../match-segments */ \"(app-pages-browser)/./node_modules/next/dist/client/components/match-segments.js\");\nconst removeLeadingSlash = (segment)=>{\n return segment[0] === '/' ? segment.slice(1) : segment;\n};\nconst segmentToPathname = (segment)=>{\n if (typeof segment === 'string') {\n // 'children' is not a valid path -- it's technically a parallel route that corresponds with the current segment's page\n // if we don't skip it, then the computed pathname might be something like `/children` which doesn't make sense.\n if (segment === 'children') return '';\n return segment;\n }\n return segment[1];\n};\nfunction normalizeSegments(segments) {\n return segments.reduce((acc, segment)=>{\n segment = removeLeadingSlash(segment);\n if (segment === '' || (0, _segment.isGroupSegment)(segment)) {\n return acc;\n }\n return acc + \"/\" + segment;\n }, '') || '/';\n}\nfunction extractPathFromFlightRouterState(flightRouterState) {\n const segment = Array.isArray(flightRouterState[0]) ? flightRouterState[0][1] : flightRouterState[0];\n if (segment === _segment.DEFAULT_SEGMENT_KEY || _interceptionroutes.INTERCEPTION_ROUTE_MARKERS.some((m)=>segment.startsWith(m))) return undefined;\n if (segment.startsWith(_segment.PAGE_SEGMENT_KEY)) return '';\n const segments = [\n segmentToPathname(segment)\n ];\n var _flightRouterState_;\n const parallelRoutes = (_flightRouterState_ = flightRouterState[1]) != null ? _flightRouterState_ : {};\n const childrenPath = parallelRoutes.children ? extractPathFromFlightRouterState(parallelRoutes.children) : undefined;\n if (childrenPath !== undefined) {\n segments.push(childrenPath);\n } else {\n for (const [key, value] of Object.entries(parallelRoutes)){\n if (key === 'children') continue;\n const childPath = extractPathFromFlightRouterState(value);\n if (childPath !== undefined) {\n segments.push(childPath);\n }\n }\n }\n return normalizeSegments(segments);\n}\nfunction computeChangedPathImpl(treeA, treeB) {\n const [segmentA, parallelRoutesA] = treeA;\n const [segmentB, parallelRoutesB] = treeB;\n const normalizedSegmentA = segmentToPathname(segmentA);\n const normalizedSegmentB = segmentToPathname(segmentB);\n if (_interceptionroutes.INTERCEPTION_ROUTE_MARKERS.some((m)=>normalizedSegmentA.startsWith(m) || normalizedSegmentB.startsWith(m))) {\n return '';\n }\n if (!(0, _matchsegments.matchSegment)(segmentA, segmentB)) {\n var _extractPathFromFlightRouterState;\n // once we find where the tree changed, we compute the rest of the path by traversing the tree\n return (_extractPathFromFlightRouterState = extractPathFromFlightRouterState(treeB)) != null ? _extractPathFromFlightRouterState : '';\n }\n for(const parallelRouterKey in parallelRoutesA){\n if (parallelRoutesB[parallelRouterKey]) {\n const changedPath = computeChangedPathImpl(parallelRoutesA[parallelRouterKey], parallelRoutesB[parallelRouterKey]);\n if (changedPath !== null) {\n return segmentToPathname(segmentB) + \"/\" + changedPath;\n }\n }\n }\n return null;\n}\nfunction computeChangedPath(treeA, treeB) {\n const changedPath = computeChangedPathImpl(treeA, treeB);\n if (changedPath == null || changedPath === '/') {\n return changedPath;\n }\n // lightweight normalization to remove route groups\n return normalizeSegments(changedPath.split('/'));\n}\nfunction getSelectedParams(currentTree, params) {\n if (params === void 0) params = {};\n const parallelRoutes = currentTree[1];\n for (const parallelRoute of Object.values(parallelRoutes)){\n const segment = parallelRoute[0];\n const isDynamicParameter = Array.isArray(segment);\n const segmentValue = isDynamicParameter ? segment[1] : segment;\n if (!segmentValue || segmentValue.startsWith(_segment.PAGE_SEGMENT_KEY)) continue;\n // Ensure catchAll and optional catchall are turned into an array\n const isCatchAll = isDynamicParameter && (segment[2] === 'c' || segment[2] === 'oc');\n if (isCatchAll) {\n params[segment[0]] = segment[1].split('/');\n } else if (isDynamicParameter) {\n params[segment[0]] = segment[1];\n }\n params = getSelectedParams(parallelRoute, params);\n }\n return params;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=compute-changed-path.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvY29tcHV0ZS1jaGFuZ2VkLXBhdGguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBd0hnQkEsa0JBQWtCO2VBQWxCQTs7SUE5RUFDLGdDQUFnQztlQUFoQ0E7O0lBK0ZBQyxpQkFBaUI7ZUFBakJBOzs7Z0RBckkyQjtxQ0FNcEM7MkNBQ3NCO0FBRTdCLE1BQU1DLHFCQUFxQixDQUFDQztJQUMxQixPQUFPQSxPQUFPLENBQUMsRUFBRSxLQUFLLE1BQU1BLFFBQVFDLEtBQUssQ0FBQyxLQUFLRDtBQUNqRDtBQUVBLE1BQU1FLG9CQUFvQixDQUFDRjtJQUN6QixJQUFJLE9BQU9BLFlBQVksVUFBVTtRQUMvQix1SEFBdUg7UUFDdkgsZ0hBQWdIO1FBQ2hILElBQUlBLFlBQVksWUFBWSxPQUFPO1FBRW5DLE9BQU9BO0lBQ1Q7SUFFQSxPQUFPQSxPQUFPLENBQUMsRUFBRTtBQUNuQjtBQUVBLFNBQVNHLGtCQUFrQkMsUUFBa0I7SUFDM0MsT0FDRUEsU0FBU0MsTUFBTSxDQUFDLENBQUNDLEtBQUtOO1FBQ3BCQSxVQUFVRCxtQkFBbUJDO1FBQzdCLElBQUlBLFlBQVksTUFBTU8sQ0FBQUEsR0FBQUEsU0FBQUEsY0FBQUEsRUFBZVAsVUFBVTtZQUM3QyxPQUFPTTtRQUNUO1FBRUEsT0FBVUEsTUFBSSxNQUFHTjtJQUNuQixHQUFHLE9BQU87QUFFZDtBQUVPLFNBQVNILGlDQUNkVyxpQkFBb0M7SUFFcEMsTUFBTVIsVUFBVVMsTUFBTUMsT0FBTyxDQUFDRixpQkFBaUIsQ0FBQyxFQUFFLElBQzlDQSxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUN2QkEsaUJBQWlCLENBQUMsRUFBRTtJQUV4QixJQUNFUixZQUFZVyxTQUFBQSxtQkFBbUIsSUFDL0JDLG9CQUFBQSwwQkFBMEIsQ0FBQ0MsSUFBSSxDQUFDLENBQUNDLElBQU1k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QyxFQUFFLEtBQUssS0FBRztRQUVqRSxJQUFJOEMsWUFBWTtZQUNkTCxNQUFNLENBQUN6QyxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUdBLE9BQU8sQ0FBQyxFQUFFLENBQUN1QyxLQUFLLENBQUM7UUFDeEMsT0FBTyxJQUFJSyxvQkFBb0I7WUFDN0JILE1BQU0sQ0FBQ3pDLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBR0EsT0FBTyxDQUFDLEVBQUU7UUFDakM7UUFFQXlDLFNBQVMzQyxrQkFBa0I0QyxlQUFlRDtJQUM1QztJQUVBLE9BQU9BO0FBQ1QiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9jb21wdXRlLWNoYW5nZWQtcGF0aC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIEZsaWdodFJvdXRlclN0YXRlLFxuICBTZWdtZW50LFxufSBmcm9tICcuLi8uLi8uLi9zZXJ2ZXIvYXBwLXJlbmRlci90eXBlcydcbmltcG9ydCB7IElOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaW50ZXJjZXB0aW9uLXJvdXRlcydcbmltcG9ydCB0eXBlIHsgUGFyYW1zIH0gZnJvbSAnLi4vLi4vLi4vc2VydmVyL3JlcXVlc3QvcGFyYW1zJ1xuaW1wb3J0IHtcbiAgaXNHcm91cFNlZ21lbnQsXG4gIERFRkFVTFRfU0VHTUVOVF9LRVksXG4gIFBBR0VfU0VHTUVOVF9LRVksXG59IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9saWIvc2VnbWVudCdcbmltcG9ydCB7IG1hdGNoU2VnbWVudCB9IGZyb20gJy4uL21hdGNoLXNlZ21lbnRzJ1xuXG5jb25zdCByZW1vdmVMZWFkaW5nU2xhc2ggPSAoc2VnbWVudDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIHNlZ21lbnRbMF0gPT09ICcvJyA/IHNlZ21lbnQuc2xpY2UoMSkgOiBzZWdtZW50XG59XG5cbmNvbnN0IHNlZ21lbnRUb1BhdGhuYW1lID0gKHNlZ21lbnQ6IFNlZ21lbnQpOiBzdHJpbmcgPT4ge1xuICBpZiAodHlwZW9mIHNlZ21lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gJ2NoaWxkcmVuJyBpcyBub3QgYSB2YWxpZCBwYXRoIC0tIGl0J3MgdGVjaG5pY2FsbHkgYSBwYXJhbGxlbCByb3V0ZSB0aGF0IGNvcnJlc3BvbmRzIHdpdGggdGhlIGN1cnJlbnQgc2VnbWVudCdzIHBhZ2VcbiAgICAvLyBpZiB3ZSBkb24ndCBza2lwIGl0LCB0aGVuIHRoZSBjb21wdXRlZCBwYXRobmFtZSBtaWdodCBiZSBzb21ldGhpbmcgbGlrZSBgL2NoaWxkcmVuYCB3aGljaCBkb2Vzbid0IG1ha2Ugc2Vuc2UuXG4gICAgaWYgKHNlZ21lbnQgPT09ICdjaGlsZHJlbicpIHJldHVybiAnJ1xuXG4gICAgcmV0dXJuIHNlZ21lbnRcbiAgfVxuXG4gIHJldHVybiBzZWdtZW50WzFdXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNlZ21lbnRzKHNlZ21lbnRzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIHJldHVybiAoXG4gICAgc2VnbWVudHMucmVkdWNlKChhY2MsIHNlZ21lbnQpID0+IHtcbiAgICAgIHNlZ21lbnQgPSByZW1vdmVMZWFkaW5nU2xhc2goc2VnbWVudClcbiAgICAgIGlmIChzZWdtZW50ID09PSAnJyB8fCBpc0dyb3VwU2VnbWVudChzZWdtZW50KSkge1xuICAgICAgICByZXR1cm4gYWNjXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBgJHthY2N9LyR7c2VnbWVudH1gXG4gICAgfSwgJycpIHx8ICcvJ1xuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0UGF0aEZyb21GbGlnaHRSb3V0ZXJTdGF0ZShcbiAgZmxpZ2h0Um91dGVyU3RhdGU6IEZsaWdodFJvdXRlclN0YXRlXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBzZWdtZW50ID0gQXJyYXkuaXNBcnJheShmbGlnaHRSb3V0ZXJTdGF0ZVswXSlcbiAgICA/IGZsaWdodFJvdXRlclN0YXRlWzBdWzFdXG4gICAgOiBmbGlnaHRSb3V0ZXJTdGF0ZVswXVxuXG4gIGlmIChcbiAgICBzZWdtZW50ID09PSBERUZBVUxUX1NFR01FTlRfS0VZIHx8XG4gICAgSU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlMuc29tZSgobSkgPT4gc2VnbWVudC5zdGFydHNXaXRoKG0pKVxuICApXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuXG4gIGlmIChzZWdtZW50LnN0YXJ0c1dpdGgoUEFHRV9TRUdNRU5UX0tFWSkpIHJldHVybiAnJ1xuXG4gIGNvbnN0IHNlZ21lbnRzID0gW3NlZ21lbnRUb1BhdGhuYW1lKHNlZ21lbnQpXVxuICBjb25zdCBwYXJhbGxlbFJvdXRlcyA9IGZsaWdodFJvdXRlclN0YXRlWzFdID8/IHt9XG5cbiAgY29uc3QgY2hpbGRyZW5QYXRoID0gcGFyYWxsZWxSb3V0ZXMuY2hpbGRyZW5cbiAgICA/IGV4dHJhY3RQYXRoRnJvbUZsaWdodFJvdXRlclN0YXRlKHBhcmFsbGVsUm91dGVzLmNoaWxkcmVuKVxuICAgIDogdW5kZWZpbmVkXG5cbiAgaWYgKGNoaWxkcmVuUGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgc2VnbWVudHMucHVzaChjaGlsZHJlblBhdGgpXG4gIH0gZWxzZSB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFyYWxsZWxSb3V0ZXMpKSB7XG4gICAgICBpZiAoa2V5ID09PSAnY2hpbGRyZW4nKSBjb250aW51ZVxuXG4gICAgICBjb25zdCBjaGlsZFBhdGggPSBleHRyYWN0UGF0aEZyb21GbGlnaHRSb3V0ZXJTdGF0ZSh2YWx1ZSlcblxuICAgICAgaWYgKGNoaWxkUGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNlZ21lbnRzLnB1c2goY2hpbGRQYXRoKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBub3JtYWxpemVTZWdtZW50cyhzZWdtZW50cylcbn1cblxuZnVuY3Rpb24gY29tcHV0ZUNoYW5nZWRQYXRoSW1wbChcbiAgdHJlZUE6IEZsaWdodFJvdXRlclN0YXRlLFxuICB0cmVlQjogRmxpZ2h0Um91dGVyU3RhdGVcbik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBbc2VnbWVudEEsIHBhcmFsbGVsUm91dGVzQV0gPSB0cmVlQVxuICBjb25zdCBbc2VnbWVudEIsIHBhcmFsbGVsUm91dGVzQl0gPSB0cmVlQlxuXG4gIGNvbnN0IG5vcm1hbGl6ZWRTZWdtZW50QSA9IHNlZ21lbnRUb1BhdGhuYW1lKHNlZ21lbnRBKVxuICBjb25zdCBub3JtYWxpemVkU2VnbWVudEIgPSBzZWdtZW50VG9QYXRobmFtZShzZWdtZW50QilcblxuICBpZiAoXG4gICAgSU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlMuc29tZShcbiAgICAgIChtKSA9PlxuICAgICAgICBub3JtYWxpemVkU2VnbWVudEEuc3RhcnRzV2l0aChtKSB8fCBub3JtYWxpemVkU2VnbWVudEIuc3RhcnRzV2l0aChtKVxuICAgIClcbiAgKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoIW1hdGNoU2VnbWVudChzZWdtZW50QSwgc2VnbWVudEIpKSB7XG4gICAgLy8gb25jZSB3ZSBmaW5kIHdoZXJlIHRoZSB0cmVlIGNoYW5nZWQsIHdlIGNvbXB1dGUgdGhlIHJlc3Qgb2YgdGhlIHBhdGggYnkgdHJhdmVyc2luZyB0aGUgdHJlZVxuICAgIHJldHVybiBleHRyYWN0UGF0aEZyb21GbGlnaHRSb3V0ZXJTdGF0ZSh0cmVlQikgPz8gJydcbiAgfVxuXG4gIGZvciAoY29uc3QgcGFyYWxsZWxSb3V0ZXJLZXkgaW4gcGFyYWxsZWxSb3V0ZXNBKSB7XG4gICAgaWYgKHBhcmFsbGVsUm91dGVzQltwYXJhbGxlbFJvdXRlcktleV0pIHtcbiAgICAgIGNvbnN0IGNoYW5nZWRQYXRoID0gY29tcHV0ZUNoYW5nZWRQYXRoSW1wbChcbiAgICAgICAgcGFyYWxsZWxSb3V0ZXNBW3BhcmFsbGVsUm91dGVyS2V5XSxcbiAgICAgICAgcGFyYWxsZWxSb3V0ZXNCW3BhcmFsbGVsUm91dGVyS2V5XVxuICAgICAgKVxuICAgICAgaWYgKGNoYW5nZWRQYXRoICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBgJHtzZWdtZW50VG9QYXRobmFtZShzZWdtZW50Qil9LyR7Y2hhbmdlZFBhdGh9YFxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlQ2hhbmdlZFBhdGgoXG4gIHRyZWVBOiBGbGlnaHRSb3V0ZXJTdGF0ZSxcbiAgdHJlZUI6IEZsaWdodFJvdXRlclN0YXRlXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgY2hhbmdlZFBhdGggPSBjb21wdXRlQ2hhbmdlZFBhdGhJbXBsKHRyZWVBLCB0cmVlQilcblxuICBpZiAoY2hhbmdlZFBhdGggPT0gbnVsbCB8fCBjaGFuZ2VkUGF0aCA9PT0gJy8nKSB7XG4gICAgcmV0dXJuIGNoYW5nZWRQYXRoXG4gIH1cblxuICAvLyBsaWdodHdlaWdodCBub3JtYWxpemF0aW9uIHRvIHJlbW92ZSByb3V0ZSBncm91cHNcbiAgcmV0dXJuIG5vcm1hbGl6ZVNlZ21lbnRzKGNoYW5nZWRQYXRoLnNwbGl0KCcvJykpXG59XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgZXh0cmFjdHMgZHluYW1pYyBwYXJhbWV0ZXJzIGZyb20gRmxpZ2h0Um91dGVyU3RhdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3RlZFBhcmFtcyhcbiAgY3VycmVudFRyZWU6IEZsaWdodFJvdXRlclN0YXRlLFxuICBwYXJhbXM6IFBhcmFtcyA9IHt9XG4pOiBQYXJhbXMge1xuICBjb25zdCBwYXJhbGxlbFJvdXRlcyA9IGN1cnJlbnRUcmVlWzFdXG5cbiAgZm9yIChjb25zdCBwYXJhbGxlbFJvdXRlIG9mIE9iamVjdC52YWx1ZXMocGFyYWxsZWxSb3V0ZXMpKSB7XG4gICAgY29uc3Qgc2VnbWVudCA9IHBhcmFsbGVsUm91dGVbMF1cbiAgICBjb25zdCBpc0R5bmFtaWNQYXJhbWV0ZXIgPSBBcnJheS5pc0FycmF5KHNlZ21lbnQpXG4gICAgY29uc3Qgc2VnbWVudFZhbHVlID0gaXNEeW5hbWljUGFyYW1ldGVyID8gc2VnbWVudFsxXSA6IHNlZ21lbnRcbiAgICBpZiAoIXNlZ21lbnRWYWx1ZSB8fCBzZWdtZW50VmFsdWUuc3RhcnRzV2l0aChQQUdFX1NFR01FTlRfS0VZKSkgY29udGludWVcblxuICAgIC8vIEVuc3VyZSBjYXRjaEFsbCBhbmQgb3B0aW9uYWwgY2F0Y2hhbGwgYXJlIHR1cm5lZCBpbnRvIGFuIGFycmF5XG4gICAgY29uc3QgaXNDYXRjaEFsbCA9XG4gICAgICBpc0R5bmFtaWNQYXJhbWV0ZXIgJiYgKHNlZ21lbnRbMl0gPT09ICdjJyB8fCBzZWdtZW50WzJdID09PSAnb2MnKVxuXG4gICAgaWYgKGlzQ2F0Y2hBbGwpIHtcbiAgICAgIHBhcmFtc1tzZWdtZW50WzBdXSA9IHNlZ21lbnRbMV0uc3BsaXQoJy8nKVxuICAgIH0gZWxzZSBpZiAoaXNEeW5hbWljUGFyYW1ldGVyKSB7XG4gICAgICBwYXJhbXNbc2VnbWVudFswXV0gPSBzZWdtZW50WzFdXG4gICAgfVxuXG4gICAgcGFyYW1zID0gZ2V0U2VsZWN0ZWRQYXJhbXMocGFyYWxsZWxSb3V0ZSwgcGFyYW1zKVxuICB9XG5cbiAgcmV0dXJuIHBhcmFtc1xufVxuIl0sIm5hbWVzIjpbImNvbXB1dGVDaGFuZ2VkUGF0aCIsImV4dHJhY3RQYXRoRnJvbUZsaWdodFJvdXRlclN0YXRlIiwiZ2V0U2VsZWN0ZWRQYXJhbXMiLCJyZW1vdmVMZWFkaW5nU2xhc2giLCJzZWdtZW50Iiwic2xpY2UiLCJzZWdtZW50VG9QYXRobmFtZSIsIm5vcm1hbGl6ZVNlZ21lbnRzIiwic2VnbWVudHMiLCJyZWR1Y2UiLCJhY2MiLCJpc0dyb3VwU2VnbWVudCIsImZsaWdodFJvdXRlclN0YXRlIiwiQXJyYXkiLCJpc0FycmF5IiwiREVGQVVMVF9TRUdNRU5UX0tFWSIsIklOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTIiwic29tZSIsIm0iLCJzdGFydHNXaXRoIiwidW5kZWZpbmVkIiwiUEFHRV9TRUdNRU5UX0tFWSIsInBhcmFsbGVsUm91dGVzIiwiY2hpbGRyZW5QYXRoIiwiY2hpbGRyZW4iLCJwdXNoIiwia2V5IiwidmFsdWUiLCJPYmplY3QiLCJlbnRyaWVzIiwiY2hpbGRQYXRoIiwiY29tcHV0ZUNoYW5nZWRQYXRoSW1wbCIsInRyZWVBIiwidHJlZUIiLCJzZWdtZW50QSIsInBhcmFsbGVsUm91dGVzQSIsInNlZ21lbnRCIiwicGFyYWxsZWxSb3V0ZXNCIiwibm9ybWFsaXplZFNlZ21lbnRBIiwibm9ybWFsaXplZFNlZ21lbnRCIiwibWF0Y2hTZWdtZW50IiwicGFyYWxsZWxSb3V0ZXJLZXkiLCJjaGFuZ2VkUGF0aCIsInNwbGl0IiwiY3VycmVudFRyZWUiLCJwYXJhbXMiLCJwYXJhbGxlbFJvdXRlIiwidmFsdWVzIiwiaXNEeW5hbWljUGFyYW1ldGVyIiwic2VnbWVudFZhbHVlIiwiaXNDYXRjaEFsbCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/compute-changed-path.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js":
|
||
/*!*****************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js ***!
|
||
\*****************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"createHrefFromUrl\", ({\n enumerable: true,\n get: function() {\n return createHrefFromUrl;\n }\n}));\nfunction createHrefFromUrl(url, includeHash) {\n if (includeHash === void 0) includeHash = true;\n return url.pathname + url.search + (includeHash ? url.hash : '');\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=create-href-from-url.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvY3JlYXRlLWhyZWYtZnJvbS11cmwuanMiLCJtYXBwaW5ncyI6Ijs7OztxREFBZ0JBOzs7ZUFBQUE7OztBQUFULFNBQVNBLGtCQUNkQyxHQUE4QyxFQUM5Q0MsV0FBMkI7SUFBM0JBLElBQUFBLGdCQUFBQSxLQUFBQSxHQUFBQSxjQUF1QjtJQUV2QixPQUFPRCxJQUFJRSxRQUFRLEdBQUdGLElBQUlHLE1BQU0sR0FBSUYsQ0FBQUEsY0FBY0QsSUFBSUksSUFBSSxHQUFHLEdBQUM7QUFDaEUiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9jcmVhdGUtaHJlZi1mcm9tLXVybC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gY3JlYXRlSHJlZkZyb21VcmwoXG4gIHVybDogUGljazxVUkwsICdwYXRobmFtZScgfCAnc2VhcmNoJyB8ICdoYXNoJz4sXG4gIGluY2x1ZGVIYXNoOiBib29sZWFuID0gdHJ1ZVxuKTogc3RyaW5nIHtcbiAgcmV0dXJuIHVybC5wYXRobmFtZSArIHVybC5zZWFyY2ggKyAoaW5jbHVkZUhhc2ggPyB1cmwuaGFzaCA6ICcnKVxufVxuIl0sIm5hbWVzIjpbImNyZWF0ZUhyZWZGcm9tVXJsIiwidXJsIiwiaW5jbHVkZUhhc2giLCJwYXRobmFtZSIsInNlYXJjaCIsImhhc2giXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-initial-router-state.js":
|
||
/*!************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/router-reducer/create-initial-router-state.js ***!
|
||
\************************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"createInitialRouterState\", ({\n enumerable: true,\n get: function() {\n return createInitialRouterState;\n }\n}));\nconst _createhreffromurl = __webpack_require__(/*! ./create-href-from-url */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nconst _filllazyitemstillleafwithhead = __webpack_require__(/*! ./fill-lazy-items-till-leaf-with-head */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fill-lazy-items-till-leaf-with-head.js\");\nconst _computechangedpath = __webpack_require__(/*! ./compute-changed-path */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/compute-changed-path.js\");\nconst _prefetchcacheutils = __webpack_require__(/*! ./prefetch-cache-utils */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/prefetch-cache-utils.js\");\nconst _routerreducertypes = __webpack_require__(/*! ./router-reducer-types */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst _refetchinactiveparallelsegments = __webpack_require__(/*! ./refetch-inactive-parallel-segments */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/refetch-inactive-parallel-segments.js\");\nconst _flightdatahelpers = __webpack_require__(/*! ../../flight-data-helpers */ \"(app-pages-browser)/./node_modules/next/dist/client/flight-data-helpers.js\");\nfunction createInitialRouterState(param) {\n let { navigatedAt, initialFlightData, initialCanonicalUrlParts, initialParallelRoutes, location, couldBeIntercepted, postponed, prerendered } = param;\n // When initialized on the server, the canonical URL is provided as an array of parts.\n // This is to ensure that when the RSC payload streamed to the client, crawlers don't interpret it\n // as a URL that should be crawled.\n const initialCanonicalUrl = initialCanonicalUrlParts.join('/');\n const normalizedFlightData = (0, _flightdatahelpers.getFlightDataPartsFromPath)(initialFlightData[0]);\n const { tree: initialTree, seedData: initialSeedData, head: initialHead } = normalizedFlightData;\n // For the SSR render, seed data should always be available (we only send back a `null` response\n // in the case of a `loading` segment, pre-PPR.)\n const rsc = initialSeedData == null ? void 0 : initialSeedData[1];\n var _initialSeedData_;\n const loading = (_initialSeedData_ = initialSeedData == null ? void 0 : initialSeedData[3]) != null ? _initialSeedData_ : null;\n const cache = {\n lazyData: null,\n rsc,\n prefetchRsc: null,\n head: null,\n prefetchHead: null,\n // The cache gets seeded during the first render. `initialParallelRoutes` ensures the cache from the first render is there during the second render.\n parallelRoutes: initialParallelRoutes,\n loading,\n navigatedAt\n };\n const canonicalUrl = // This is safe to do as canonicalUrl can't be rendered, it's only used to control the history updates in the useEffect further down in this file.\n location ? (0, _createhreffromurl.createHrefFromUrl)(location) : initialCanonicalUrl;\n (0, _refetchinactiveparallelsegments.addRefreshMarkerToActiveParallelSegments)(initialTree, canonicalUrl);\n const prefetchCache = new Map();\n // When the cache hasn't been seeded yet we fill the cache with the head.\n if (initialParallelRoutes === null || initialParallelRoutes.size === 0) {\n (0, _filllazyitemstillleafwithhead.fillLazyItemsTillLeafWithHead)(navigatedAt, cache, undefined, initialTree, initialSeedData, initialHead, undefined);\n }\n var _ref;\n const initialState = {\n tree: initialTree,\n cache,\n prefetchCache,\n pushRef: {\n pendingPush: false,\n mpaNavigation: false,\n // First render needs to preserve the previous window.history.state\n // to avoid it being overwritten on navigation back/forward with MPA Navigation.\n preserveCustomHistoryState: true\n },\n focusAndScrollRef: {\n apply: false,\n onlyHashChange: false,\n hashFragment: null,\n segmentPaths: []\n },\n canonicalUrl,\n nextUrl: (_ref = (0, _computechangedpath.extractPathFromFlightRouterState)(initialTree) || (location == null ? void 0 : location.pathname)) != null ? _ref : null\n };\n if (false) {}\n return initialState;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=create-initial-router-state.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvY3JlYXRlLWluaXRpYWwtcm91dGVyLXN0YXRlLmpzIiwibWFwcGluZ3MiOiI7Ozs7NERBeUJnQkE7OztlQUFBQTs7OytDQXRCa0I7MkRBQ1k7Z0RBQ0c7Z0RBSTFDO2dEQUMrQzs2REFDRzsrQ0FDZDtBQWFwQyxTQUFTQSx5QkFBeUIsS0FTVjtJQVRVLE1BQ3ZDQyxXQUFXLEVBQ1hDLGlCQUFpQixFQUNqQkMsd0JBQXdCLEVBQ3hCQyxxQkFBcUIsRUFDckJDLFFBQVEsRUFDUkMsa0JBQWtCLEVBQ2xCQyxTQUFTLEVBQ1RDLFdBQVcsRUFDa0IsR0FUVTtJQVV2QyxzRkFBc0Y7SUFDdEYsa0dBQWtHO0lBQ2xHLG1DQUFtQztJQUNuQyxNQUFNQyxzQkFBc0JOLHlCQUF5Qk8sSUFBSSxDQUFDO0lBQzFELE1BQU1DLHVCQUF1QkMsQ0FBQUEsR0FBQUEsbUJBQUFBLDBCQUFBQSxFQUEyQlYsaUJBQWlCLENBQUMsRUFBRTtJQUM1RSxNQUFNLEVBQ0pXLE1BQU1DLFdBQVcsRUFDakJDLFVBQVVDLGVBQWUsRUFDekJDLE1BQU1DLFdBQVcsRUFDbEIsR0FBR1A7SUFDSixnR0FBZ0c7SUFDaEcsZ0RBQWdEO0lBQ2hELE1BQU1RLE1BQU1ILG1CQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxlQUFpQixDQUFDLEVBQUU7UUFDaEJBO0lBQWhCLE1BQU1JLFVBQVVKLENBQUFBLG9CQUFBQSxtQkFBQUEsT0FBQUEsS0FBQUEsSUFBQUEsZUFBaUIsQ0FBQyxPQUFFLE9BQXBCQSxvQkFBd0I7SUFFeEMsTUFBTUssUUFBbUI7UUFDdkJDLFVBQVU7UUFDVkg7UUFDQUksYUFBYTtRQUNiTixNQUFNO1FBQ05PLGNBQWM7UUFDZCxvSkFBb0o7UUFDcEpDLGdCQUFnQnJCO1FBQ2hCZ0I7UUFDQW5CO0lBQ0Y7SUFFQSxNQUFNeUIsZUFDSiw2RUFBNkUscUVBQ3FFO0lBQ2xKckIsV0FFSXNCLENBQUFBLEdBQUFBLG1CQUFBQSxpQkFBaUIsRUFBQ3RCLFlBQ2xCSTtJQUVObUIsQ0FBQUEsR0FBQUEsaUNBQUFBLHdDQUFBQSxFQUF5Q2QsYUFBYVk7SUFFdEQsTUFBTUcsZ0JBQWdCLElBQUlDO0lBRTFCLHlFQUF5RTtJQUN6RSxJQUFJMUIsMEJBQTBCLFFBQVFBLHNCQUFzQjJCLElBQUksS0FBSyxHQUFHO1FBQ3RFQyxDQUFBQSxHQUFBQSwrQkFBQUEsNkJBQUFBLEVBQ0UvQixhQUNBb0IsT0FDQVksV0FDQW5CLGFBQ0FFLGlCQUNBRSxhQUNBZTtJQUVKO1FBc0JLQztJQXBCTCxNQUFNQyxlQUFlO1FBQ25CdEIsTUFBTUM7UUFDTk87UUFDQVE7UUFDQU8sU0FBUztZQUNQQyxhQUFhO1lBQ2JDLGVBQWU7WUFDZixtRUFBbUU7WUFDbkUsZ0ZBQWdGO1lBQ2hGQyw0QkFBNEI7UUFDOUI7UUFDQUMsbUJBQW1CO1lBQ2pCQyxPQUFPO1lBQ1BDLGdCQUFnQjtZQUNoQkMsY0FBYztZQUNkQyxjQUFjLEVBQUU7UUFDbEI7UUFDQWxCO1FBQ0FtQixTQUVFLENBQUNYLE9BQUFBLENBQUFBLEdBQUFBLG9CQUFBQSxnQ0FBZ0MsRUFBQ3BCLGlCQUFnQlQsWUFBQUEsT0FBQUEsS0FBQUEsSUFBQUEsU0FBVXlDLFFBQUFBLENBQVEsWUFBbkVaLE9BQ0Q7SUFDSjtJQUVBLElBQUlhLEtBQWtEMUMsRUFBRSxFQXVDdkQ7SUFFRCxPQUFPOEI7QUFDVCIsInNvdXJjZXMiOlsiL2hvbWUvc3JjL2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2NyZWF0ZS1pbml0aWFsLXJvdXRlci1zdGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENhY2hlTm9kZSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9saWIvYXBwLXJvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHR5cGUgeyBGbGlnaHREYXRhUGF0aCB9IGZyb20gJy4uLy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL3R5cGVzJ1xuXG5pbXBvcnQgeyBjcmVhdGVIcmVmRnJvbVVybCB9IGZyb20gJy4vY3JlYXRlLWhyZWYtZnJvbS11cmwnXG5pbXBvcnQgeyBmaWxsTGF6eUl0ZW1zVGlsbExlYWZXaXRoSGVhZCB9IGZyb20gJy4vZmlsbC1sYXp5LWl0ZW1zLXRpbGwtbGVhZi13aXRoLWhlYWQnXG5pbXBvcnQgeyBleHRyYWN0UGF0aEZyb21GbGlnaHRSb3V0ZXJTdGF0ZSB9IGZyb20gJy4vY29tcHV0ZS1jaGFuZ2VkLXBhdGgnXG5pbXBvcnQge1xuICBjcmVhdGVTZWVkZWRQcmVmZXRjaENhY2hlRW50cnksXG4gIFNUQVRJQ19TVEFMRVRJTUVfTVMsXG59IGZyb20gJy4vcHJlZmV0Y2gtY2FjaGUtdXRpbHMnXG5pbXBvcnQgeyBQcmVmZXRjaEtpbmQsIHR5cGUgUHJlZmV0Y2hDYWNoZUVudHJ5IH0gZnJvbSAnLi9yb3V0ZXItcmVkdWNlci10eXBlcydcbmltcG9ydCB7IGFkZFJlZnJlc2hNYXJrZXJUb0FjdGl2ZVBhcmFsbGVsU2VnbWVudHMgfSBmcm9tICcuL3JlZmV0Y2gtaW5hY3RpdmUtcGFyYWxsZWwtc2VnbWVudHMnXG5pbXBvcnQgeyBnZXRGbGlnaHREYXRhUGFydHNGcm9tUGF0aCB9IGZyb20gJy4uLy4uL2ZsaWdodC1kYXRhLWhlbHBlcnMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5pdGlhbFJvdXRlclN0YXRlUGFyYW1ldGVycyB7XG4gIG5hdmlnYXRlZEF0OiBudW1iZXJcbiAgaW5pdGlhbENhbm9uaWNhbFVybFBhcnRzOiBzdHJpbmdbXVxuICBpbml0aWFsUGFyYWxsZWxSb3V0ZXM6IENhY2hlTm9kZVsncGFyYWxsZWxSb3V0ZXMnXVxuICBpbml0aWFsRmxpZ2h0RGF0YTogRmxpZ2h0RGF0YVBhdGhbXVxuICBsb2NhdGlvbjogTG9jYXRpb24gfCBudWxsXG4gIGNvdWxkQmVJbnRlcmNlcHRlZDogYm9vbGVhblxuICBwb3N0cG9uZWQ6IGJvb2xlYW5cbiAgcHJlcmVuZGVyZWQ6IGJvb2xlYW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUluaXRpYWxSb3V0ZXJTdGF0ZSh7XG4gIG5hdmlnYXRlZEF0LFxuICBpbml0aWFsRmxpZ2h0RGF0YSxcbiAgaW5pdGlhbENhbm9uaWNhbFVybFBhcnRzLFxuICBpbml0aWFsUGFyYWxsZWxSb3V0ZXMsXG4gIGxvY2F0aW9uLFxuICBjb3VsZEJlSW50ZXJjZXB0ZWQsXG4gIHBvc3Rwb25lZCxcbiAgcHJlcmVuZGVyZWQsXG59OiBJbml0aWFsUm91dGVyU3RhdGVQYXJhbWV0ZXJzKSB7XG4gIC8vIFdoZW4gaW5pdGlhbGl6ZWQgb24gdGhlIHNlcnZlciwgdGhlIGNhbm9uaWNhbCBVUkwgaXMgcHJvdmlkZWQgYXMgYW4gYXJyYXkgb2YgcGFydHMuXG4gIC8vIFRoaXMgaXMgdG8gZW5zdXJlIHRoYXQgd2hlbiB0aGUgUlNDIHBheWxvYWQgc3RyZWFtZWQgdG8gdGhlIGNsaWVudCwgY3Jhd2xlcnMgZG9uJ3QgaW50ZXJwcmV0IGl0XG4gIC8vIGFzIGEgVVJMIHRoYXQgc2hvdWxkIGJlIGNyYXdsZWQuXG4gIGNvbnN0IGluaXRpYWxDYW5vbmljYWxVcmwgPSBpbml0aWFsQ2Fub25pY2FsVXJsUGFydHMuam9pbignLycpXG4gIGNvbnN0IG5vcm1hbGl6ZWRGbGlnaHREYXRhID0gZ2V0RmxpZ2h0RGF0YVBhcnRzRnJvbVBhdGgoaW5pdGlhbEZsaWdodERhdGFbMF0pXG4gIGNvbnN0IHtcbiAgICB0cmVlOiBpbml0aWFsVHJlZSxcbiAgICBzZWVkRGF0YTogaW5pdGlhbFNlZWREYXRhLFxuICAgIGhlYWQ6IGluaXRpYWxIZWFkLFxuICB9ID0gbm9ybWFsaXplZEZsaWdodERhdGFcbiAgLy8gRm9yIHRoZSBTU1IgcmVuZGVyLCBzZWVkIGRhdGEgc2hvdWxkIGFsd2F5cyBiZSBhdmFpbGFibGUgKHdlIG9ubHkgc2VuZCBiYWNrIGEgYG51bGxgIHJlc3BvbnNlXG4gIC8vIGluIHRoZSBjYXNlIG9mIGEgYGxvYWRpbmdgIHNlZ21lbnQsIHByZS1QUFIuKVxuICBjb25zdCByc2MgPSBpbml0aWFsU2VlZERhdGE/LlsxXVxuICBjb25zdCBsb2FkaW5nID0gaW5pdGlhbFNlZWREYXRhPy5bM10gPz8gbnVsbFxuXG4gIGNvbnN0IGNhY2hlOiBDYWNoZU5vZGUgPSB7XG4gICAgbGF6eURhdGE6IG51bGwsXG4gICAgcnNjLFxuICAgIHByZWZldGNoUnNjOiBudWxsLFxuICAgIGhlYWQ6IG51bGwsXG4gICAgcHJlZmV0Y2hIZWFkOiBudWxsLFxuICAgIC8vIFRoZSBjYWNoZSBnZXRzIHNlZWRlZCBkdXJpbmcgdGhlIGZpcnN0IHJlbmRlci4gYGluaXRpYWxQYXJhbGxlbFJvdXRlc2AgZW5zdXJlcyB0aGUgY2FjaGUgZnJvbSB0aGUgZmlyc3QgcmVuZGVyIGlzIHRoZXJlIGR1cmluZyB0aGUgc2Vjb25kIHJlbmRlci5cbiAgICBwYXJhbGxlbFJvdXRlczogaW5pdGlhbFBhcmFsbGVsUm91dGVzLFxuICAgIGxvYWRpbmcsXG4gICAgbmF2aWdhdGVkQXQsXG4gIH1cblxuICBjb25zdCBjYW5vbmljYWxVcmwgPVxuICAgIC8vIGxvY2F0aW9uLmhyZWYgaXMgcmVhZCBhcyB0aGUgaW5pdGlhbCB2YWx1ZSBmb3IgY2Fub25pY2FsVXJsIGluIHRoZSBicm93c2VyXG4gICAgLy8gVGhpcyBpcyBzYWZlIHRvIGRvIGFzIGNhbm9uaWNhbFVybCBjYW4ndCBiZSByZW5kZXJlZCwgaXQncyBvbmx5IHVzZWQgdG8gY29udHJvbCB0aGUgaGlzdG9yeSB1cGRhdGVzIGluIHRoZSB1c2VFZmZlY3QgZnVydGhlciBkb3duIGluIHRoaXMgZmlsZS5cbiAgICBsb2NhdGlvblxuICAgICAgPyAvLyB3aW5kb3cubG9jYXRpb24gZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSB0eXBlIGFzIFVSTCBidXQgaGFzIGFsbCB0aGUgZmllbGRzIGNyZWF0ZUhyZWZGcm9tVXJsIG5lZWRzLlxuICAgICAgICBjcmVhdGVIcmVmRnJvbVVybChsb2NhdGlvbilcbiAgICAgIDogaW5pdGlhbENhbm9uaWNhbFVybFxuXG4gIGFkZFJlZnJlc2hNYXJrZXJUb0FjdGl2ZVBhcmFsbGVsU2VnbWVudHMoaW5pdGlhbFRyZWUsIGNhbm9uaWNhbFVybClcblxuICBjb25zdCBwcmVmZXRjaENhY2hlID0gbmV3IE1hcDxzdHJpbmcsIFByZWZldGNoQ2FjaGVFbnRyeT4oKVxuXG4gIC8vIFdoZW4gdGhlIGNhY2hlIGhhc24ndCBiZWVuIHNlZWRlZCB5ZXQgd2UgZmlsbCB0aGUgY2FjaGUgd2l0aCB0aGUgaGVhZC5cbiAgaWYgKGluaXRpYWxQYXJhbGxlbFJvdXRlcyA9PT0gbnVsbCB8fCBpbml0aWFsUGFyYWxsZWxSb3V0ZXMuc2l6ZSA9PT0gMCkge1xuICAgIGZpbGxMYXp5SXRlbXNUaWxsTGVhZldpdGhIZWFkKFxuICAgICAgbmF2aWdhdGVkQXQsXG4gICAgICBjYWNoZSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGluaXRpYWxUcmVlLFxuICAgICAgaW5pdGlhbFNlZWREYXRhLFxuICAgICAgaW5pdGlhbEhlYWQsXG4gICAgICB1bmRlZmluZWRcbiAgICApXG4gIH1cblxuICBjb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gICAgdHJlZTogaW5pdGlhbFRyZWUsXG4gICAgY2FjaGUsXG4gICAgcHJlZmV0Y2hDYWNoZSxcbiAgICBwdXNoUmVmOiB7XG4gICAgICBwZW5kaW5nUHVzaDogZmFsc2UsXG4gICAgICBtcGFOYXZpZ2F0aW9uOiBmYWxzZSxcbiAgICAgIC8vIEZpcnN0IHJlbmRlciBuZWVkcyB0byBwcmVzZXJ2ZSB0aGUgcHJldmlvdXMgd2luZG93Lmhpc3Rvcnkuc3RhdGVcbiAgICAgIC8vIHRvIGF2b2lkIGl0IGJlaW5nIG92ZXJ3cml0dGVuIG9uIG5hdmlnYXRpb24gYmFjay9mb3J3YXJkIHdpdGggTVBBIE5hdmlnYXRpb24uXG4gICAgICBwcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZTogdHJ1ZSxcbiAgICB9LFxuICAgIGZvY3VzQW5kU2Nyb2xsUmVmOiB7XG4gICAgICBhcHBseTogZmFsc2UsXG4gICAgICBvbmx5SGFzaENoYW5nZTogZmFsc2UsXG4gICAgICBoYXNoRnJhZ21lbnQ6IG51bGwsXG4gICAgICBzZWdtZW50UGF0aHM6IFtdLFxuICAgIH0sXG4gICAgY2Fub25pY2FsVXJsLFxuICAgIG5leHRVcmw6XG4gICAgICAvLyB0aGUgfHwgb3BlcmF0b3IgaXMgaW50ZW50aW9uYWwsIHRoZSBwYXRobmFtZSBjYW4gYmUgYW4gZW1wdHkgc3RyaW5nXG4gICAgICAoZXh0cmFjdFBhdGhGcm9tRmxpZ2h0Um91dGVyU3RhdGUoaW5pdGlhbFRyZWUpIHx8IGxvY2F0aW9uPy5wYXRobmFtZSkgPz9cbiAgICAgIG51bGwsXG4gIH1cblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdkZXZlbG9wbWVudCcgJiYgbG9jYXRpb24pIHtcbiAgICAvLyBTZWVkIHRoZSBwcmVmZXRjaCBjYWNoZSB3aXRoIHRoaXMgcGFnZSdzIGRhdGEuXG4gICAgLy8gVGhpcyBpcyB0byBwcmV2ZW50IG5lZWRsZXNzbHkgcmUtcHJlZmV0Y2hpbmcgYSBwYWdlIHRoYXQgaXMgYWxyZWFkeSByZXVzYWJsZSxcbiAgICAvLyBhbmQgd2lsbCBhdm9pZCB0cmlnZ2VyaW5nIGEgbG9hZGluZyBzdGF0ZS9kYXRhIGZldGNoIHN0YWxsIHdoZW4gbmF2aWdhdGluZyBiYWNrIHRvIHRoZSBwYWdlLlxuICAgIC8vIFdlIGRvbid0IGN1cnJlbnRseSBkbyB0aGlzIGluIGRldmVsb3BtZW50IGJlY2F1c2UgbGlua3MgYXJlbid0IHByZWZldGNoZWQgaW4gZGV2ZWxvcG1lbnRcbiAgICAvLyBzbyBoYXZpbmcgYSBtaXNtYXRjaCBiZXR3ZWVuIHByZWZldGNoL25vIHByZWZldGNoIHByb3ZpZGVzIGluY29uc2lzdGVudCBiZWhhdmlvciBiYXNlZCBvbiB3aGljaCBwYWdlXG4gICAgLy8gd2FzIGxvYWRlZCBmaXJzdC5cbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKFxuICAgICAgYCR7bG9jYXRpb24ucGF0aG5hbWV9JHtsb2NhdGlvbi5zZWFyY2h9YCxcbiAgICAgIGxvY2F0aW9uLm9yaWdpblxuICAgIClcblxuICAgIGNyZWF0ZVNlZWRlZFByZWZldGNoQ2FjaGVFbnRyeSh7XG4gICAgICB1cmwsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGZsaWdodERhdGE6IFtub3JtYWxpemVkRmxpZ2h0RGF0YV0sXG4gICAgICAgIGNhbm9uaWNhbFVybDogdW5kZWZpbmVkLFxuICAgICAgICBjb3VsZEJlSW50ZXJjZXB0ZWQ6ICEhY291bGRCZUludGVyY2VwdGVkLFxuICAgICAgICBwcmVyZW5kZXJlZCxcbiAgICAgICAgcG9zdHBvbmVkLFxuICAgICAgICAvLyBUT0RPOiBUaGUgaW5pdGlhbCBSU0MgcGF5bG9hZCBpbmNsdWRlcyBib3RoIHN0YXRpYyBhbmQgZHluYW1pYyBkYXRhXG4gICAgICAgIC8vIGluIHRoZSBzYW1lIHJlc3BvbnNlLCBldmVuIGlmIFBQUiBpcyBlbmFibGVkLiBTbyBpZiB0aGVyZSdzIGFueVxuICAgICAgICAvLyBkeW5hbWljIGRhdGEgYXQgYWxsLCB3ZSBjYW4ndCBzZXQgYSBzdGFsZSB0aW1lLiBJbiB0aGUgZnV0dXJlIHdlIG1heVxuICAgICAgICAvLyBhZGQgYSB3YXkgdG8gc3BsaXQgYSBzaW5nbGUgRmxpZ2h0IHN0cmVhbSBpbnRvIHN0YXRpYyBhbmQgZHluYW1pY1xuICAgICAgICAvLyBwYXJ0cy4gQnV0IGluIHRoZSBtZWFudGltZSB3ZSBzaG91bGQgYXQgbGVhc3QgbWFrZSB0aGlzIHdvcmsgZm9yXG4gICAgICAgIC8vIGZ1bGx5IHN0YXRpYyBwYWdlcy5cbiAgICAgICAgc3RhbGVUaW1lOlxuICAgICAgICAgIC8vIEluIHRoZSBvbGQgcm91dGVyLCB0aGVyZSB3YXMgb25seSBhIHNpbmdsZSBjb25maWd1cmFibGUgc3RhbGVUaW1lIChleHBlcmltZW50YWwuc3RhbGVUaW1lcylcbiAgICAgICAgICAvLyBBcyBhbiBhYnVuZGFuY2Ugb2YgY2F1dGlvbiwgdGhpcyB3aWxsIG9ubHkgc2V0IHRoZSBpbml0aWFsIHN0YWxlVGltZSB0byB0aGUgY29uZmlndXJlZCB2YWx1ZVxuICAgICAgICAgIC8vIGlmIHdlJ3JlIG5vdCBsZXZlcmFnaW5nIHRoZSBzZWdtZW50IGNhY2hlLCB3aGljaCBoYXMgaXRzIG93biBwcmVmZXRjaGluZyBzZW1hbnRpY3MuXG4gICAgICAgICAgcHJlcmVuZGVyZWQgJiYgIXByb2Nlc3MuZW52Ll9fTkVYVF9DTElFTlRfU0VHTUVOVF9DQUNIRVxuICAgICAgICAgICAgPyBTVEFUSUNfU1RBTEVUSU1FX01TXG4gICAgICAgICAgICA6IC0xLFxuICAgICAgfSxcbiAgICAgIHRyZWU6IGluaXRpYWxTdGF0ZS50cmVlLFxuICAgICAgcHJlZmV0Y2hDYWNoZTogaW5pdGlhbFN0YXRlLnByZWZldGNoQ2FjaGUsXG4gICAgICBuZXh0VXJsOiBpbml0aWFsU3RhdGUubmV4dFVybCxcbiAgICAgIGtpbmQ6IHByZXJlbmRlcmVkID8gUHJlZmV0Y2hLaW5kLkZVTEwgOiBQcmVmZXRjaEtpbmQuQVVUTyxcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIGluaXRpYWxTdGF0ZVxufVxuIl0sIm5hbWVzIjpbImNyZWF0ZUluaXRpYWxSb3V0ZXJTdGF0ZSIsIm5hdmlnYXRlZEF0IiwiaW5pdGlhbEZsaWdodERhdGEiLCJpbml0aWFsQ2Fub25pY2FsVXJsUGFydHMiLCJpbml0aWFsUGFyYWxsZWxSb3V0ZXMiLCJsb2NhdGlvbiIsImNvdWxkQmVJbnRlcmNlcHRlZCIsInBvc3Rwb25lZCIsInByZXJlbmRlcmVkIiwiaW5pdGlhbENhbm9uaWNhbFVybCIsImpvaW4iLCJub3JtYWxpemVkRmxpZ2h0RGF0YSIsImdldEZsaWdodERhdGFQYXJ0c0Zyb21QYXRoIiwidHJlZSIsImluaXRpYWxUcmVlIiwic2VlZERhdGEiLCJpbml0aWFsU2VlZERhdGEiLCJoZWFkIiwiaW5pdGlhbEhlYWQiLCJyc2MiLCJsb2FkaW5nIiwiY2FjaGUiLCJsYXp5RGF0YSIsInByZWZldGNoUnNjIiwicHJlZmV0Y2hIZWFkIiwicGFyYWxsZWxSb3V0ZXMiLCJjYW5vbmljYWxVcmwiLCJjcmVhdGVIcmVmRnJvbVVybCIsImFkZFJlZnJlc2hNYXJrZXJUb0FjdGl2ZVBhcmFsbGVsU2VnbWVudHMiLCJwcmVmZXRjaENhY2hlIiwiTWFwIiwic2l6ZSIsImZpbGxMYXp5SXRlbXNUaWxsTGVhZldpdGhIZWFkIiwidW5kZWZpbmVkIiwiZXh0cmFjdFBhdGhGcm9tRmxpZ2h0Um91dGVyU3RhdGUiLCJpbml0aWFsU3RhdGUiLCJwdXNoUmVmIiwicGVuZGluZ1B1c2giLCJtcGFOYXZpZ2F0aW9uIiwicHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGUiLCJmb2N1c0FuZFNjcm9sbFJlZiIsImFwcGx5Iiwib25seUhhc2hDaGFuZ2UiLCJoYXNoRnJhZ21lbnQiLCJzZWdtZW50UGF0aHMiLCJuZXh0VXJsIiwicGF0aG5hbWUiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJ1cmwiLCJVUkwiLCJzZWFyY2giLCJvcmlnaW4iLCJjcmVhdGVTZWVkZWRQcmVmZXRjaENhY2hlRW50cnkiLCJkYXRhIiwiZmxpZ2h0RGF0YSIsInN0YWxlVGltZSIsIl9fTkVYVF9DTElFTlRfU0VHTUVOVF9DQUNIRSIsIlNUQVRJQ19TVEFMRVRJTUVfTVMiLCJraW5kIiwiUHJlZmV0Y2hLaW5kIiwiRlVMTCIsIkFVVE8iXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-initial-router-state.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js":
|
||
/*!********************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js ***!
|
||
\********************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"createRouterCacheKey\", ({\n enumerable: true,\n get: function() {\n return createRouterCacheKey;\n }\n}));\nconst _segment = __webpack_require__(/*! ../../../shared/lib/segment */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/segment.js\");\nfunction createRouterCacheKey(segment, withoutSearchParameters) {\n if (withoutSearchParameters === void 0) withoutSearchParameters = false;\n // if the segment is an array, it means it's a dynamic segment\n // for example, ['lang', 'en', 'd']. We need to convert it to a string to store it as a cache node key.\n if (Array.isArray(segment)) {\n return segment[0] + \"|\" + segment[1] + \"|\" + segment[2];\n }\n // Page segments might have search parameters, ie __PAGE__?foo=bar\n // When `withoutSearchParameters` is true, we only want to return the page segment\n if (withoutSearchParameters && segment.startsWith(_segment.PAGE_SEGMENT_KEY)) {\n return _segment.PAGE_SEGMENT_KEY;\n }\n return segment;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=create-router-cache-key.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvY3JlYXRlLXJvdXRlci1jYWNoZS1rZXkuanMiLCJtYXBwaW5ncyI6Ijs7Ozt3REFHZ0JBOzs7ZUFBQUE7OztxQ0FGaUI7QUFFMUIsU0FBU0EscUJBQ2RDLE9BQWdCLEVBQ2hCQyx1QkFBd0M7SUFBeENBLElBQUFBLDRCQUFBQSxLQUFBQSxHQUFBQSwwQkFBbUM7SUFFbkMsOERBQThEO0lBQzlELHVHQUF1RztJQUN2RyxJQUFJQyxNQUFNQyxPQUFPLENBQUNILFVBQVU7UUFDMUIsT0FBVUEsT0FBTyxDQUFDLEVBQUUsR0FBQyxNQUFHQSxPQUFPLENBQUMsRUFBRSxHQUFDLE1BQUdBLE9BQU8sQ0FBQyxFQUFFO0lBQ2xEO0lBRUEsa0VBQWtFO0lBQ2xFLGtGQUFrRjtJQUNsRixJQUFJQywyQkFBMkJELFFBQVFJLFVBQVUsQ0FBQ0MsU0FBQUEsZ0JBQWdCLEdBQUc7UUFDbkUsT0FBT0EsU0FBQUEsZ0JBQWdCO0lBQ3pCO0lBRUEsT0FBT0w7QUFDVCIsInNvdXJjZXMiOlsiL2hvbWUvc3JjL2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2NyZWF0ZS1yb3V0ZXItY2FjaGUta2V5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU2VnbWVudCB9IGZyb20gJy4uLy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL3R5cGVzJ1xuaW1wb3J0IHsgUEFHRV9TRUdNRU5UX0tFWSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9saWIvc2VnbWVudCdcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJvdXRlckNhY2hlS2V5KFxuICBzZWdtZW50OiBTZWdtZW50LFxuICB3aXRob3V0U2VhcmNoUGFyYW1ldGVyczogYm9vbGVhbiA9IGZhbHNlXG4pIHtcbiAgLy8gaWYgdGhlIHNlZ21lbnQgaXMgYW4gYXJyYXksIGl0IG1lYW5zIGl0J3MgYSBkeW5hbWljIHNlZ21lbnRcbiAgLy8gZm9yIGV4YW1wbGUsIFsnbGFuZycsICdlbicsICdkJ10uIFdlIG5lZWQgdG8gY29udmVydCBpdCB0byBhIHN0cmluZyB0byBzdG9yZSBpdCBhcyBhIGNhY2hlIG5vZGUga2V5LlxuICBpZiAoQXJyYXkuaXNBcnJheShzZWdtZW50KSkge1xuICAgIHJldHVybiBgJHtzZWdtZW50WzBdfXwke3NlZ21lbnRbMV19fCR7c2VnbWVudFsyXX1gXG4gIH1cblxuICAvLyBQYWdlIHNlZ21lbnRzIG1pZ2h0IGhhdmUgc2VhcmNoIHBhcmFtZXRlcnMsIGllIF9fUEFHRV9fP2Zvbz1iYXJcbiAgLy8gV2hlbiBgd2l0aG91dFNlYXJjaFBhcmFtZXRlcnNgIGlzIHRydWUsIHdlIG9ubHkgd2FudCB0byByZXR1cm4gdGhlIHBhZ2Ugc2VnbWVudFxuICBpZiAod2l0aG91dFNlYXJjaFBhcmFtZXRlcnMgJiYgc2VnbWVudC5zdGFydHNXaXRoKFBBR0VfU0VHTUVOVF9LRVkpKSB7XG4gICAgcmV0dXJuIFBBR0VfU0VHTUVOVF9LRVlcbiAgfVxuXG4gIHJldHVybiBzZWdtZW50XG59XG4iXSwibmFtZXMiOlsiY3JlYXRlUm91dGVyQ2FjaGVLZXkiLCJzZWdtZW50Iiwid2l0aG91dFNlYXJjaFBhcmFtZXRlcnMiLCJBcnJheSIsImlzQXJyYXkiLCJzdGFydHNXaXRoIiwiUEFHRV9TRUdNRU5UX0tFWSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fetch-server-response.js":
|
||
/*!******************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/router-reducer/fetch-server-response.js ***!
|
||
\******************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n createFetch: function() {\n return createFetch;\n },\n createFromNextReadableStream: function() {\n return createFromNextReadableStream;\n },\n fetchServerResponse: function() {\n return fetchServerResponse;\n },\n urlToUrlWithoutFlightMarker: function() {\n return urlToUrlWithoutFlightMarker;\n }\n});\nconst _client = __webpack_require__(/*! react-server-dom-webpack/client */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react-server-dom-webpack/client.browser.js\");\nconst _approuterheaders = __webpack_require__(/*! ../app-router-headers */ \"(app-pages-browser)/./node_modules/next/dist/client/components/app-router-headers.js\");\nconst _appcallserver = __webpack_require__(/*! ../../app-call-server */ \"(app-pages-browser)/./node_modules/next/dist/client/app-call-server.js\");\nconst _appfindsourcemapurl = __webpack_require__(/*! ../../app-find-source-map-url */ \"(app-pages-browser)/./node_modules/next/dist/client/app-find-source-map-url.js\");\nconst _routerreducertypes = __webpack_require__(/*! ./router-reducer-types */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst _flightdatahelpers = __webpack_require__(/*! ../../flight-data-helpers */ \"(app-pages-browser)/./node_modules/next/dist/client/flight-data-helpers.js\");\nconst _appbuildid = __webpack_require__(/*! ../../app-build-id */ \"(app-pages-browser)/./node_modules/next/dist/client/app-build-id.js\");\nconst _setcachebustingsearchparam = __webpack_require__(/*! ./set-cache-busting-search-param */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/set-cache-busting-search-param.js\");\nconst createFromReadableStream = _client.createFromReadableStream;\nfunction urlToUrlWithoutFlightMarker(url) {\n const urlWithoutFlightParameters = new URL(url, location.origin);\n urlWithoutFlightParameters.searchParams.delete(_approuterheaders.NEXT_RSC_UNION_QUERY);\n if (false) {}\n return urlWithoutFlightParameters;\n}\nfunction doMpaNavigation(url) {\n return {\n flightData: urlToUrlWithoutFlightMarker(url).toString(),\n canonicalUrl: undefined,\n couldBeIntercepted: false,\n prerendered: false,\n postponed: false,\n staleTime: -1\n };\n}\nlet abortController = new AbortController();\nif (true) {\n // Abort any in-flight requests when the page is unloaded, e.g. due to\n // reloading the page or performing hard navigations. This allows us to ignore\n // what would otherwise be a thrown TypeError when the browser cancels the\n // requests.\n window.addEventListener('pagehide', ()=>{\n abortController.abort();\n });\n // Use a fresh AbortController instance on pageshow, e.g. when navigating back\n // and the JavaScript execution context is restored by the browser.\n window.addEventListener('pageshow', ()=>{\n abortController = new AbortController();\n });\n}\nasync function fetchServerResponse(url, options) {\n const { flightRouterState, nextUrl, prefetchKind } = options;\n const headers = {\n // Enable flight response\n [_approuterheaders.RSC_HEADER]: '1',\n // Provide the current router state\n [_approuterheaders.NEXT_ROUTER_STATE_TREE_HEADER]: (0, _flightdatahelpers.prepareFlightRouterStateForRequest)(flightRouterState, options.isHmrRefresh)\n };\n /**\n * Three cases:\n * - `prefetchKind` is `undefined`, it means it's a normal navigation, so we want to prefetch the page data fully\n * - `prefetchKind` is `full` - we want to prefetch the whole page so same as above\n * - `prefetchKind` is `auto` - if the page is dynamic, prefetch the page data partially, if static prefetch the page data fully\n */ if (prefetchKind === _routerreducertypes.PrefetchKind.AUTO) {\n headers[_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER] = '1';\n }\n if ( true && options.isHmrRefresh) {\n headers[_approuterheaders.NEXT_HMR_REFRESH_HEADER] = '1';\n }\n if (nextUrl) {\n headers[_approuterheaders.NEXT_URL] = nextUrl;\n }\n try {\n var _res_headers_get;\n // When creating a \"temporary\" prefetch (the \"on-demand\" prefetch that gets created on navigation, if one doesn't exist)\n // we send the request with a \"high\" priority as it's in response to a user interaction that could be blocking a transition.\n // Otherwise, all other prefetches are sent with a \"low\" priority.\n // We use \"auto\" for in all other cases to match the existing default, as this function is shared outside of prefetching.\n const fetchPriority = prefetchKind ? prefetchKind === _routerreducertypes.PrefetchKind.TEMPORARY ? 'high' : 'low' : 'auto';\n if (false) {}\n const res = await createFetch(url, headers, fetchPriority, abortController.signal);\n const responseUrl = urlToUrlWithoutFlightMarker(res.url);\n const canonicalUrl = res.redirected ? responseUrl : undefined;\n const contentType = res.headers.get('content-type') || '';\n const interception = !!((_res_headers_get = res.headers.get('vary')) == null ? void 0 : _res_headers_get.includes(_approuterheaders.NEXT_URL));\n const postponed = !!res.headers.get(_approuterheaders.NEXT_DID_POSTPONE_HEADER);\n const staleTimeHeaderSeconds = res.headers.get(_approuterheaders.NEXT_ROUTER_STALE_TIME_HEADER);\n const staleTime = staleTimeHeaderSeconds !== null ? parseInt(staleTimeHeaderSeconds, 10) * 1000 : -1;\n let isFlightResponse = contentType.startsWith(_approuterheaders.RSC_CONTENT_TYPE_HEADER);\n if (false) {}\n // If fetch returns something different than flight response handle it like a mpa navigation\n // If the fetch was not 200, we also handle it like a mpa navigation\n if (!isFlightResponse || !res.ok || !res.body) {\n // in case the original URL came with a hash, preserve it before redirecting to the new URL\n if (url.hash) {\n responseUrl.hash = url.hash;\n }\n return doMpaNavigation(responseUrl.toString());\n }\n // We may navigate to a page that requires a different Webpack runtime.\n // In prod, every page will have the same Webpack runtime.\n // In dev, the Webpack runtime is minimal for each page.\n // We need to ensure the Webpack runtime is updated before executing client-side JS of the new page.\n if (true) {\n await (__webpack_require__(/*! ../../dev/hot-reloader/app/hot-reloader-app */ \"(app-pages-browser)/./node_modules/next/dist/client/dev/hot-reloader/app/hot-reloader-app.js\").waitForWebpackRuntimeHotUpdate)();\n }\n // Handle the `fetch` readable stream that can be unwrapped by `React.use`.\n const flightStream = postponed ? createUnclosingPrefetchStream(res.body) : res.body;\n const response = await createFromNextReadableStream(flightStream);\n if ((0, _appbuildid.getAppBuildId)() !== response.b) {\n return doMpaNavigation(res.url);\n }\n return {\n flightData: (0, _flightdatahelpers.normalizeFlightData)(response.f),\n canonicalUrl: canonicalUrl,\n couldBeIntercepted: interception,\n prerendered: response.S,\n postponed,\n staleTime\n };\n } catch (err) {\n if (!abortController.signal.aborted) {\n console.error(\"Failed to fetch RSC payload for \" + url + \". Falling back to browser navigation.\", err);\n }\n // If fetch fails handle it like a mpa navigation\n // TODO-APP: Add a test for the case where a CORS request fails, e.g. external url redirect coming from the response.\n // See https://github.com/vercel/next.js/issues/43605#issuecomment-1451617521 for a reproduction.\n return {\n flightData: url.toString(),\n canonicalUrl: undefined,\n couldBeIntercepted: false,\n prerendered: false,\n postponed: false,\n staleTime: -1\n };\n }\n}\nasync function createFetch(url, headers, fetchPriority, signal) {\n // TODO: In output: \"export\" mode, the headers do nothing. Omit them (and the\n // cache busting search param) from the request so they're\n // maximally cacheable.\n if (false) {}\n if (false) {}\n const fetchOptions = {\n // Backwards compat for older browsers. `same-origin` is the default in modern browsers.\n credentials: 'same-origin',\n headers,\n priority: fetchPriority || undefined,\n signal\n };\n // `fetchUrl` is slightly different from `url` because we add a cache-busting\n // search param to it. This should not leak outside of this function, so we\n // track them separately.\n let fetchUrl = new URL(url);\n (0, _setcachebustingsearchparam.setCacheBustingSearchParam)(fetchUrl, headers);\n let browserResponse = await fetch(fetchUrl, fetchOptions);\n // If the server responds with a redirect (e.g. 307), and the redirected\n // location does not contain the cache busting search param set in the\n // original request, the response is likely invalid — when following the\n // redirect, the browser forwards the request headers, but since the cache\n // busting search param is missing, the server will reject the request due to\n // a mismatch.\n //\n // Ideally, we would be able to intercept the redirect response and perform it\n // manually, instead of letting the browser automatically follow it, but this\n // is not allowed by the fetch API.\n //\n // So instead, we must \"replay\" the redirect by fetching the new location\n // again, but this time we'll append the cache busting search param to prevent\n // a mismatch.\n //\n // TODO: We can optimize Next.js's built-in middleware APIs by returning a\n // custom status code, to prevent the browser from automatically following it.\n //\n // This does not affect Server Action-based redirects; those are encoded\n // differently, as part of the Flight body. It only affects redirects that\n // occur in a middleware or a third-party proxy.\n let redirected = browserResponse.redirected;\n if (false) {}\n // Remove the cache busting search param from the response URL, to prevent it\n // from leaking outside of this function.\n const responseUrl = new URL(browserResponse.url, fetchUrl);\n responseUrl.searchParams.delete(_approuterheaders.NEXT_RSC_UNION_QUERY);\n const rscResponse = {\n url: responseUrl.href,\n // This is true if any redirects occurred, either automatically by the\n // browser, or manually by us. So it's different from\n // `browserResponse.redirected`, which only tells us whether the browser\n // followed a redirect, and only for the last response in the chain.\n redirected,\n // These can be copied from the last browser response we received. We\n // intentionally only expose the subset of fields that are actually used\n // elsewhere in the codebase.\n ok: browserResponse.ok,\n headers: browserResponse.headers,\n body: browserResponse.body,\n status: browserResponse.status\n };\n return rscResponse;\n}\nfunction createFromNextReadableStream(flightStream) {\n return createFromReadableStream(flightStream, {\n callServer: _appcallserver.callServer,\n findSourceMapURL: _appfindsourcemapurl.findSourceMapURL\n });\n}\nfunction createUnclosingPrefetchStream(originalFlightStream) {\n // When PPR is enabled, prefetch streams may contain references that never\n // resolve, because that's how we encode dynamic data access. In the decoded\n // object returned by the Flight client, these are reified into hanging\n // promises that suspend during render, which is effectively what we want.\n // The UI resolves when it switches to the dynamic data stream\n // (via useDeferredValue(dynamic, static)).\n //\n // However, the Flight implementation currently errors if the server closes\n // the response before all the references are resolved. As a cheat to work\n // around this, we wrap the original stream in a new stream that never closes,\n // and therefore doesn't error.\n const reader = originalFlightStream.getReader();\n return new ReadableStream({\n async pull (controller) {\n while(true){\n const { done, value } = await reader.read();\n if (!done) {\n // Pass to the target stream and keep consuming the Flight response\n // from the server.\n controller.enqueue(value);\n continue;\n }\n // The server stream has closed. Exit, but intentionally do not close\n // the target stream.\n return;\n }\n }\n });\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=fetch-server-response.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvZmV0Y2gtc2VydmVyLXJlc3BvbnNlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQXlSc0JBLFdBQVc7ZUFBWEE7O0lBcUhOQyw0QkFBNEI7ZUFBNUJBOztJQTNSTUMsbUJBQW1CO2VBQW5CQTs7SUFsRE5DLDJCQUEyQjtlQUEzQkE7OztvQ0E3RDREOzhDQWtCckU7MkNBQ29CO2lEQUNNO2dEQUNKOytDQUt0Qjt3Q0FDdUI7d0RBQ2E7QUFFM0MsTUFBTUMsMkJBQ0pDLFFBQUFBLHdCQUErQjtBQThCMUIsU0FBU0YsNEJBQTRCRyxHQUFXO0lBQ3JELE1BQU1DLDZCQUE2QixJQUFJQyxJQUFJRixLQUFLRyxTQUFTQyxNQUFNO0lBQy9ESCwyQkFBMkJJLFlBQVksQ0FBQ0MsTUFBTSxDQUFDQyxrQkFBQUEsb0JBQW9CO0lBQ25FLElBQUlDLEtBQW9CLEVBQW1CLEVBVTFDO0lBQ0QsT0FBT1A7QUFDVDtBQUVBLFNBQVNlLGdCQUFnQmhCLEdBQVc7SUFDbEMsT0FBTztRQUNMaUIsWUFBWXBCLDRCQUE0QkcsS0FBS2tCLFFBQVE7UUFDckRDLGNBQWNDO1FBQ2RDLG9CQUFvQjtRQUNwQkMsYUFBYTtRQUNiQyxXQUFXO1FBQ1hDLFdBQVcsQ0FBQztJQUNkO0FBQ0Y7QUFFQSxJQUFJQyxrQkFBa0IsSUFBSUM7QUFFMUIsSUFBSSxJQUE2QixFQUFFO0lBQ2pDLHNFQUFzRTtJQUN0RSw4RUFBOEU7SUFDOUUsMEVBQTBFO0lBQzFFLFlBQVk7SUFDWkMsT0FBT0MsZ0JBQWdCLENBQUMsWUFBWTtRQUNsQ0gsZ0JBQWdCSTtJQUNsQjtJQUVBLDhFQUE4RTtJQUM5RSxtRUFBbUU7SUFDbkVGLE9BQU9DLGdCQUFnQixDQUFDLFlBQVk7UUFDbENILGtCQUFrQixJQUFJQztJQUN4QjtBQUNGO0FBTU8sZUFBZTlCLG9CQUNwQkksR0FBUSxFQUNSOEIsT0FBbUM7SUFFbkMsTUFBTSxFQUFFQyxpQkFBaUIsRUFBRUMsT0FBTyxFQUFFQyxZQUFZLEVBQUUsR0FBR0g7SUFFckQsTUFBTUksVUFBMEI7UUFDOUIseUJBQXlCO1FBQ3pCLENBQUNDLGtCQUFBQSxVQUFVLENBQUMsRUFBRTtRQUNkLG1DQUFtQztRQUNuQyxDQUFDQyxrQkFBQUEsNkJBQTZCLENBQUMsRUFBRUMsQ0FBQUEsR0FBQUEsbUJBQUFBLGtDQUFBQSxFQUMvQk4sbUJBQ0FELFFBQVFRLFlBQVk7SUFFeEI7SUFFQTs7Ozs7R0FLQyxHQUNELElBQUlMLGlCQUFpQk0sb0JBQUFBLFlBQVksQ0FBQ0MsSUFBSSxFQUFFO1FBQ3RDTixPQUFPLENBQUNPLGtCQUFBQSwyQkFBMkIsQ0FBQyxHQUFHO0lBQ3pDO0lBRUEsSUFBSWpDLEtBQW9CLElBQXNCc0IsUUFBUVEsWUFBWSxFQUFFO1FBQ2xFSixPQUFPLENBQUNRLGtCQUFBQSx1QkFBdUIsQ0FBQyxHQUFHO0lBQ3JDO0lBRUEsSUFBSVYsU0FBUztRQUNYRSxPQUFPLENBQUNTLGtCQUFBQSxRQUFRLENBQUMsR0FBR1g7SUFDdEI7SUFFQSxJQUFJO1lBb0NxQlk7UUFuQ3ZCLHdIQUF3SDtRQUN4SCw0SEFBNEg7UUFDNUgsa0VBQWtFO1FBQ2xFLHlIQUF5SDtRQUN6SCxNQUFNQyxnQkFBZ0JaLGVBQ2xCQSxpQkFBaUJNLG9CQUFBQSxZQUFZLENBQUNPLFNBQVMsR0FDckMsU0FDQSxRQUNGO1FBRUosSUFBSXRDLEtBQW9CLEVBQW1CLEVBWTFDO1FBRUQsTUFBTW9DLE1BQU0sTUFBTWxELFlBQ2hCTSxLQUNBa0MsU0FDQVcsZUFDQXBCLGdCQUFnQnNCLE1BQU07UUFHeEIsTUFBTUMsY0FBY25ELDRCQUE0QitDLElBQUk1QyxHQUFHO1FBQ3ZELE1BQU1tQixlQUFleUIsSUFBSUssVUFBVSxHQUFHRCxjQUFjNUI7UUFFcEQsTUFBTThCLGNBQWNOLElBQUlWLE9BQU8sQ0FBQ2lCLEdBQUcsQ0FBQyxtQkFBbUI7UUFDdkQsTUFBTUMsZUFBZSxDQUFDLEdBQUNSLG1CQUFBQSxJQUFJVixPQUFPLENBQUNpQixHQUFHLENBQUMsNEJBQWhCUCxpQkFBeUJTLFFBQVEsQ0FBQ1Ysa0JBQUFBLFNBQVE7UUFDakUsTUFBTXBCLFlBQVksQ0FBQyxDQUFDcUIsSUFBSVYsT0FBTyxDQUFDaUIsR0FBRyxDQUFDRyxrQkFBQUEsd0JBQXdCO1FBQzVELE1BQU1DLHlCQUF5QlgsSUFBSVYsT0FBTyxDQUFDaUIsR0FBRyxDQUM1Q0ssa0JBQUFBLDZCQUE2QjtRQUUvQixNQUFNaEMsWUFDSitCLDJCQUEyQixPQUN2QkUsU0FBU0Ysd0JBQXdCLE1BQU0sT0FDdkMsQ0FBQztRQUNQLElBQUlHLG1CQUFtQlIsWUFBWVMsVUFBVSxDQUFDQyxrQkFBQUEsdUJBQXVCO1FBRXJFLElBQUlwRCxLQUFvQixFQUFtQixFQU0xQztRQUVELDRGQUE0RjtRQUM1RixvRUFBb0U7UUFDcEUsSUFBSSxDQUFDa0Qsb0JBQW9CLENBQUNkLElBQUlpQixFQUFFLElBQUksQ0FBQ2pCLElBQUlrQixJQUFJLEVBQUU7WUFDN0MsMkZBQTJGO1lBQzNGLElBQUk5RCxJQUFJK0QsSUFBSSxFQUFFO2dCQUNaZixZQUFZZSxJQUFJLEdBQUcvRCxJQUFJK0QsSUFBSTtZQUM3QjtZQUVBLE9BQU8vQyxnQkFBZ0JnQyxZQUFZOUIsUUFBUTtRQUM3QztRQUVBLHVFQUF1RTtRQUN2RSwwREFBMEQ7UUFDMUQsd0RBQXdEO1FBQ3hELG9HQUFvRztRQUNwRyxJQUFJVixJQUErRCxFQUFFO1lBQ25FLE1BQ0V5RCx1TUFDOEI7UUFDbEM7UUFFQSwyRUFBMkU7UUFDM0UsTUFBTUUsZUFBZTVDLFlBQ2pCNkMsOEJBQThCeEIsSUFBSWtCLElBQUksSUFDdENsQixJQUFJa0IsSUFBSTtRQUNaLE1BQU1PLFdBQVcsTUFBTzFFLDZCQUN0QndFO1FBR0YsSUFBSUcsQ0FBQUEsR0FBQUEsWUFBQUEsYUFBQUEsUUFBb0JELFNBQVNFLENBQUMsRUFBRTtZQUNsQyxPQUFPdkQsZ0JBQWdCNEIsSUFBSTVDLEdBQUc7UUFDaEM7UUFFQSxPQUFPO1lBQ0xpQixZQUFZdUQsQ0FBQUEsR0FBQUEsbUJBQUFBLG1CQUFBQSxFQUFvQkgsU0FBU0ksQ0FBQztZQUMxQ3RELGNBQWNBO1lBQ2RFLG9CQUFvQitCO1lBQ3BCOUIsYUFBYStDLFNBQVNLLENBQUM7WUFDdkJuRDtZQUNBQztRQUNGO0lBQ0YsRUFBRSxPQUFPbUQsS0FBSztRQUNaLElBQUksQ0FBQ2xELGdCQUFnQnNCLE1BQU0sQ0FBQzZCLE9BQU8sRUFBRTtZQUNuQ0MsUUFBUUMsS0FBSyxDQUNWLHFDQUFrQzlFLE1BQUkseUNBQ3ZDMkU7UUFFSjtRQUVBLGlEQUFpRDtRQUNqRCxxSEFBcUg7UUFDckgsaUdBQWlHO1FBQ2pHLE9BQU87WUFDTDFELFlBQVlqQixJQUFJa0IsUUFBUTtZQUN4QkMsY0FBY0M7WUFDZEMsb0JBQW9CO1lBQ3BCQyxhQUFhO1lBQ2JDLFdBQVc7WUFDWEMsV0FBVyxDQUFDO1FBQ2Q7SUFDRjtBQUNGO0FBZ0JPLGVBQWU5QixZQUNwQk0sR0FBUSxFQUNSa0MsT0FBdUIsRUFDdkJXLGFBQTZDLEVBQzdDRSxNQUFvQjtJQUVwQiw2RUFBNkU7SUFDN0UsMERBQTBEO0lBQzFELHVCQUF1QjtJQUV2QixJQUFJdkMsS0FBc0QsRUFBRSxFQUUzRDtJQUVELElBQUlBLEtBQThCLEVBQUUsRUFFbkM7SUFFRCxNQUFNeUUsZUFBNEI7UUFDaEMsd0ZBQXdGO1FBQ3hGQyxhQUFhO1FBQ2JoRDtRQUNBaUQsVUFBVXRDLGlCQUFpQnpCO1FBQzNCMkI7SUFDRjtJQUNBLDZFQUE2RTtJQUM3RSwyRUFBMkU7SUFDM0UseUJBQXlCO0lBQ3pCLElBQUlxQyxXQUFXLElBQUlsRixJQUFJRjtJQUN2QnFGLENBQUFBLEdBQUFBLDRCQUFBQSwwQkFBMEIsRUFBQ0QsVUFBVWxEO0lBQ3JDLElBQUlvRCxrQkFBa0IsTUFBTUMsTUFBTUgsVUFBVUg7SUFFNUMsd0VBQXdFO0lBQ3hFLHNFQUFzRTtJQUN0RSx3RUFBd0U7SUFDeEUsMEVBQTBFO0lBQzFFLDZFQUE2RTtJQUM3RSxjQUFjO0lBQ2QsRUFBRTtJQUNGLDhFQUE4RTtJQUM5RSw2RUFBNkU7SUFDN0UsbUNBQW1DO0lBQ25DLEVBQUU7SUFDRix5RUFBeUU7SUFDekUsOEVBQThFO0lBQzlFLGNBQWM7SUFDZCxFQUFFO0lBQ0YsMEVBQTBFO0lBQzFFLDhFQUE4RTtJQUM5RSxFQUFFO0lBQ0Ysd0VBQXdFO0lBQ3hFLDBFQUEwRTtJQUMxRSxnREFBZ0Q7SUFFaEQsSUFBSWhDLGFBQWFxQyxnQkFBZ0JyQyxVQUFVO0lBQzNDLElBQUl6QyxLQUFzRCxFQUFFLEVBa0MzRDtJQUVELDZFQUE2RTtJQUM3RSx5Q0FBeUM7SUFDekMsTUFBTXdDLGNBQWMsSUFBSTlDLElBQUlvRixnQkFBZ0J0RixHQUFHLEVBQUVvRjtJQUNqRHBDLFlBQVkzQyxZQUFZLENBQUNDLE1BQU0sQ0FBQ0Msa0JBQUFBLG9CQUFvQjtJQUVwRCxNQUFNb0YsY0FBMkI7UUFDL0IzRixLQUFLZ0QsWUFBWTRDLElBQUk7UUFFckIsc0VBQXNFO1FBQ3RFLHFEQUFxRDtRQUNyRCx3RUFBd0U7UUFDeEUsb0VBQW9FO1FBQ3BFM0M7UUFFQSxxRUFBcUU7UUFDckUsd0VBQXdFO1FBQ3hFLDZCQUE2QjtRQUM3QlksSUFBSXlCLGdCQUFnQnpCLEVBQUU7UUFDdEIzQixTQUFTb0QsZ0JBQWdCcEQsT0FBTztRQUNoQzRCLE1BQU13QixnQkFBZ0J4QixJQUFJO1FBQzFCK0IsUUFBUVAsZ0JBQWdCTyxNQUFNO0lBQ2hDO0lBRUEsT0FBT0Y7QUFDVDtBQUVPLFNBQVNoRyw2QkFDZHdFLFlBQXdDO0lBRXhDLE9BQU9yRSx5QkFBeUJxRSxjQUFjO1FBQzVDMkIsWUFBQUEsZUFBQUEsVUFBVTtRQUNWQyxrQkFBQUEscUJBQUFBLGdCQUFnQjtJQUNsQjtBQUNGO0FBRUEsU0FBUzNCLDhCQUNQNEIsb0JBQWdEO0lBRWhELDBFQUEwRTtJQUMxRSw0RUFBNEU7SUFDNUUsdUVBQXVFO0lBQ3ZFLDBFQUEwRTtJQUMxRSw4REFBOEQ7SUFDOUQsMkNBQTJDO0lBQzNDLEVBQUU7SUFDRiwyRUFBMkU7SUFDM0UsMEVBQTBFO0lBQzFFLDhFQUE4RTtJQUM5RSwrQkFBK0I7SUFDL0IsTUFBTUMsU0FBU0QscUJBQXFCRSxTQUFTO0lBQzdDLE9BQU8sSUFBSUMsZUFBZTtRQUN4QixNQUFNQyxNQUFLQyxVQUFVO1lBQ25CLE1BQU8sS0FBTTtnQkFDWCxNQUFNLEVBQUVDLElBQUksRUFBRUMsS0FBSyxFQUFFLEdBQUcsTUFBTU4sT0FBT08sSUFBSTtnQkFDekMsSUFBSSxDQUFDRixNQUFNO29CQUNULG1FQUFtRTtvQkFDbkUsbUJBQW1CO29CQUNuQkQsV0FBV0ksT0FBTyxDQUFDRjtvQkFDbkI7Z0JBQ0Y7Z0JBQ0EscUVBQXFFO2dCQUNyRSxxQkFBcUI7Z0JBQ3JCO1lBQ0Y7UUFDRjtJQUNGO0FBQ0YiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9mZXRjaC1zZXJ2ZXItcmVzcG9uc2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXG5cbi8vIFRPRE86IEV4cGxpY2l0bHkgaW1wb3J0IGZyb20gY2xpZW50LmJyb3dzZXJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcbmltcG9ydCB7IGNyZWF0ZUZyb21SZWFkYWJsZVN0cmVhbSBhcyBjcmVhdGVGcm9tUmVhZGFibGVTdHJlYW1Ccm93c2VyIH0gZnJvbSAncmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrL2NsaWVudCdcblxuaW1wb3J0IHR5cGUge1xuICBGbGlnaHRSb3V0ZXJTdGF0ZSxcbiAgTmF2aWdhdGlvbkZsaWdodFJlc3BvbnNlLFxufSBmcm9tICcuLi8uLi8uLi9zZXJ2ZXIvYXBwLXJlbmRlci90eXBlcydcblxuaW1wb3J0IHR5cGUgeyBORVhUX1JPVVRFUl9TRUdNRU5UX1BSRUZFVENIX0hFQURFUiB9IGZyb20gJy4uL2FwcC1yb3V0ZXItaGVhZGVycydcbmltcG9ydCB7XG4gIE5FWFRfUk9VVEVSX1BSRUZFVENIX0hFQURFUixcbiAgTkVYVF9ST1VURVJfU1RBVEVfVFJFRV9IRUFERVIsXG4gIE5FWFRfUlNDX1VOSU9OX1FVRVJZLFxuICBORVhUX1VSTCxcbiAgUlNDX0hFQURFUixcbiAgUlNDX0NPTlRFTlRfVFlQRV9IRUFERVIsXG4gIE5FWFRfSE1SX1JFRlJFU0hfSEVBREVSLFxuICBORVhUX0RJRF9QT1NUUE9ORV9IRUFERVIsXG4gIE5FWFRfUk9VVEVSX1NUQUxFX1RJTUVfSEVBREVSLFxufSBmcm9tICcuLi9hcHAtcm91dGVyLWhlYWRlcnMnXG5pbXBvcnQgeyBjYWxsU2VydmVyIH0gZnJvbSAnLi4vLi4vYXBwLWNhbGwtc2VydmVyJ1xuaW1wb3J0IHsgZmluZFNvdXJjZU1hcFVSTCB9IGZyb20gJy4uLy4uL2FwcC1maW5kLXNvdXJjZS1tYXAtdXJsJ1xuaW1wb3J0IHsgUHJlZmV0Y2hLaW5kIH0gZnJvbSAnLi9yb3V0ZXItcmVkdWNlci10eXBlcydcbmltcG9ydCB7XG4gIG5vcm1hbGl6ZUZsaWdodERhdGEsXG4gIHByZXBhcmVGbGlnaHRSb3V0ZXJTdGF0ZUZvclJlcXVlc3QsXG4gIHR5cGUgTm9ybWFsaXplZEZsaWdodERhdGEsXG59IGZyb20gJy4uLy4uL2ZsaWdodC1kYXRhLWhlbHBlcnMnXG5pbXBvcnQgeyBnZXRBcHBCdWlsZElkIH0gZnJvbSAnLi4vLi4vYXBwLWJ1aWxkLWlkJ1xuaW1wb3J0IHsgc2V0Q2FjaGVCdXN0aW5nU2VhcmNoUGFyYW0gfSBmcm9tICcuL3NldC1jYWNoZS1idXN0aW5nLXNlYXJjaC1wYXJhbSdcblxuY29uc3QgY3JlYXRlRnJvbVJlYWRhYmxlU3RyZWFtID1cbiAgY3JlYXRlRnJvbVJlYWRhYmxlU3RyZWFtQnJvd3NlciBhcyAodHlwZW9mIGltcG9ydCgncmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrL2NsaWVudC5icm93c2VyJykpWydjcmVhdGVGcm9tUmVhZGFibGVTdHJlYW0nXVxuXG5leHBvcnQgaW50ZXJmYWNlIEZldGNoU2VydmVyUmVzcG9uc2VPcHRpb25zIHtcbiAgcmVhZG9ubHkgZmxpZ2h0Um91dGVyU3RhdGU6IEZsaWdodFJvdXRlclN0YXRlXG4gIHJlYWRvbmx5IG5leHRVcmw6IHN0cmluZyB8IG51bGxcbiAgcmVhZG9ubHkgcHJlZmV0Y2hLaW5kPzogUHJlZmV0Y2hLaW5kXG4gIHJlYWRvbmx5IGlzSG1yUmVmcmVzaD86IGJvb2xlYW5cbn1cblxuZXhwb3J0IHR5cGUgRmV0Y2hTZXJ2ZXJSZXNwb25zZVJlc3VsdCA9IHtcbiAgZmxpZ2h0RGF0YTogTm9ybWFsaXplZEZsaWdodERhdGFbXSB8IHN0cmluZ1xuICBjYW5vbmljYWxVcmw6IFVSTCB8IHVuZGVmaW5lZFxuICBjb3VsZEJlSW50ZXJjZXB0ZWQ6IGJvb2xlYW5cbiAgcHJlcmVuZGVyZWQ6IGJvb2xlYW5cbiAgcG9zdHBvbmVkOiBib29sZWFuXG4gIHN0YWxlVGltZTogbnVtYmVyXG59XG5cbmV4cG9ydCB0eXBlIFJlcXVlc3RIZWFkZXJzID0ge1xuICBbUlNDX0hFQURFUl0/OiAnMSdcbiAgW05FWFRfUk9VVEVSX1NUQVRFX1RSRUVfSEVBREVSXT86IHN0cmluZ1xuICBbTkVYVF9VUkxdPzogc3RyaW5nXG4gIFtORVhUX1JPVVRFUl9QUkVGRVRDSF9IRUFERVJdPzogJzEnXG4gIFtORVhUX1JPVVRFUl9TRUdNRU5UX1BSRUZFVENIX0hFQURFUl0/OiBzdHJpbmdcbiAgJ3gtZGVwbG95bWVudC1pZCc/OiBzdHJpbmdcbiAgW05FWFRfSE1SX1JFRlJFU0hfSEVBREVSXT86ICcxJ1xuICAvLyBBIGhlYWRlciB0aGF0IGlzIG9ubHkgYWRkZWQgaW4gdGVzdCBtb2RlIHRvIGFzc2VydCBvbiBmZXRjaCBwcmlvcml0eVxuICAnTmV4dC1UZXN0LUZldGNoLVByaW9yaXR5Jz86IFJlcXVlc3RJbml0Wydwcmlvcml0eSddXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cmxUb1VybFdpdGhvdXRGbGlnaHRNYXJrZXIodXJsOiBzdHJpbmcpOiBVUkwge1xuICBjb25zdCB1cmxXaXRob3V0RmxpZ2h0UGFyYW1ldGVycyA9IG5ldyBVUkwodXJsLCBsb2NhdGlvbi5vcmlnaW4pXG4gIHVybFdpdGhvdXRGbGlnaHRQYXJhbWV0ZXJzLnNlYXJjaFBhcmFtcy5kZWxldGUoTkVYVF9SU0NfVU5JT05fUVVFUlkpXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKFxuICAgICAgcHJvY2Vzcy5lbnYuX19ORVhUX0NPTkZJR19PVVRQVVQgPT09ICdleHBvcnQnICYmXG4gICAgICB1cmxXaXRob3V0RmxpZ2h0UGFyYW1ldGVycy5wYXRobmFtZS5lbmRzV2l0aCgnLnR4dCcpXG4gICAgKSB7XG4gICAgICBjb25zdCB7IHBhdGhuYW1lIH0gPSB1cmxXaXRob3V0RmxpZ2h0UGFyYW1ldGVyc1xuICAgICAgY29uc3QgbGVuZ3RoID0gcGF0aG5hbWUuZW5kc1dpdGgoJy9pbmRleC50eHQnKSA/IDEwIDogNFxuICAgICAgLy8gU2xpY2Ugb2ZmIGAvaW5kZXgudHh0YCBvciBgLnR4dGAgZnJvbSB0aGUgZW5kIG9mIHRoZSBwYXRobmFtZVxuICAgICAgdXJsV2l0aG91dEZsaWdodFBhcmFtZXRlcnMucGF0aG5hbWUgPSBwYXRobmFtZS5zbGljZSgwLCAtbGVuZ3RoKVxuICAgIH1cbiAgfVxuICByZXR1cm4gdXJsV2l0aG91dEZsaWdodFBhcmFtZXRlcnNcbn1cblxuZnVuY3Rpb24gZG9NcGFOYXZpZ2F0aW9uKHVybDogc3RyaW5nKTogRmV0Y2hTZXJ2ZXJSZXNwb25zZVJlc3VsdCB7XG4gIHJldHVybiB7XG4gICAgZmxpZ2h0RGF0YTogdXJsVG9VcmxXaXRob3V0RmxpZ2h0TWFya2VyKHVybCkudG9TdHJpbmcoKSxcbiAgICBjYW5vbmljYWxVcmw6IHVuZGVmaW5lZCxcbiAgICBjb3VsZEJlSW50ZXJjZXB0ZWQ6IGZhbHNlLFxuICAgIHByZXJlbmRlcmVkOiBmYWxzZSxcbiAgICBwb3N0cG9uZWQ6IGZhbHNlLFxuICAgIHN0YWxlVGltZTogLTEsXG4gIH1cbn1cblxubGV0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgLy8gQWJvcnQgYW55IGluLWZsaWdodCByZXF1ZXN0cyB3aGVuIHRoZSBwYWdlIGlzIHVubG9hZGVkLCBlLmcuIGR1ZSB0b1xuICAvLyByZWxvYWRpbmcgdGhlIHBhZ2Ugb3IgcGVyZm9ybWluZyBoYXJkIG5hdmlnYXRpb25zLiBUaGlzIGFsbG93cyB1cyB0byBpZ25vcmVcbiAgLy8gd2hhdCB3b3VsZCBvdGhlcndpc2UgYmUgYSB0aHJvd24gVHlwZUVycm9yIHdoZW4gdGhlIGJyb3dzZXIgY2FuY2VscyB0aGVcbiAgLy8gcmVxdWVzdHMuXG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwYWdlaGlkZScsICgpID0+IHtcbiAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKVxuICB9KVxuXG4gIC8vIFVzZSBhIGZyZXNoIEFib3J0Q29udHJvbGxlciBpbnN0YW5jZSBvbiBwYWdlc2hvdywgZS5nLiB3aGVuIG5hdmlnYXRpbmcgYmFja1xuICAvLyBhbmQgdGhlIEphdmFTY3JpcHQgZXhlY3V0aW9uIGNvbnRleHQgaXMgcmVzdG9yZWQgYnkgdGhlIGJyb3dzZXIuXG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwYWdlc2hvdycsICgpID0+IHtcbiAgICBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgfSlcbn1cblxuLyoqXG4gKiBGZXRjaCB0aGUgZmxpZ2h0IGRhdGEgZm9yIHRoZSBwcm92aWRlZCB1cmwuIFRha2VzIGluIHRoZSBjdXJyZW50IHJvdXRlciBzdGF0ZVxuICogdG8gZGVjaWRlIHdoYXQgdG8gcmVuZGVyIHNlcnZlci1zaWRlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hTZXJ2ZXJSZXNwb25zZShcbiAgdXJsOiBVUkwsXG4gIG9wdGlvbnM6IEZldGNoU2VydmVyUmVzcG9uc2VPcHRpb25zXG4pOiBQcm9taXNlPEZldGNoU2VydmVyUmVzcG9uc2VSZXN1bHQ+IHtcbiAgY29uc3QgeyBmbGlnaHRSb3V0ZXJTdGF0ZSwgbmV4dFVybCwgcHJlZmV0Y2hLaW5kIH0gPSBvcHRpb25zXG5cbiAgY29uc3QgaGVhZGVyczogUmVxdWVzdEhlYWRlcnMgPSB7XG4gICAgLy8gRW5hYmxlIGZsaWdodCByZXNwb25zZVxuICAgIFtSU0NfSEVBREVSXTogJzEnLFxuICAgIC8vIFByb3ZpZGUgdGhlIGN1cnJlbnQgcm91dGVyIHN0YXRlXG4gICAgW05FWFRfUk9VVEVSX1NUQVRFX1RSRUVfSEVBREVSXTogcHJlcGFyZUZsaWdodFJvdXRlclN0YXRlRm9yUmVxdWVzdChcbiAgICAgIGZsaWdodFJvdXRlclN0YXRlLFxuICAgICAgb3B0aW9ucy5pc0htclJlZnJlc2hcbiAgICApLFxuICB9XG5cbiAgLyoqXG4gICAqIFRocmVlIGNhc2VzOlxuICAgKiAtIGBwcmVmZXRjaEtpbmRgIGlzIGB1bmRlZmluZWRgLCBpdCBtZWFucyBpdCdzIGEgbm9ybWFsIG5hdmlnYXRpb24sIHNvIHdlIHdhbnQgdG8gcHJlZmV0Y2ggdGhlIHBhZ2UgZGF0YSBmdWxseVxuICAgKiAtIGBwcmVmZXRjaEtpbmRgIGlzIGBmdWxsYCAtIHdlIHdhbnQgdG8gcHJlZmV0Y2ggdGhlIHdob2xlIHBhZ2Ugc28gc2FtZSBhcyBhYm92ZVxuICAgKiAtIGBwcmVmZXRjaEtpbmRgIGlzIGBhdXRvYCAtIGlmIHRoZSBwYWdlIGlzIGR5bmFtaWMsIHByZWZldGNoIHRoZSBwYWdlIGRhdGEgcGFydGlhbGx5LCBpZiBzdGF0aWMgcHJlZmV0Y2ggdGhlIHBhZ2UgZGF0YSBmdWxseVxuICAgKi9cbiAgaWYgKHByZWZldGNoS2luZCA9PT0gUHJlZmV0Y2hLaW5kLkFVVE8pIHtcbiAgICBoZWFkZXJzW05FWFRfUk9VVEVSX1BSRUZFVENIX0hFQURFUl0gPSAnMSdcbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50JyAmJiBvcHRpb25zLmlzSG1yUmVmcmVzaCkge1xuICAgIGhlYWRlcnNbTkVYVF9ITVJfUkVGUkVTSF9IRUFERVJdID0gJzEnXG4gIH1cblxuICBpZiAobmV4dFVybCkge1xuICAgIGhlYWRlcnNbTkVYVF9VUkxdID0gbmV4dFVybFxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBXaGVuIGNyZWF0aW5nIGEgXCJ0ZW1wb3JhcnlcIiBwcmVmZXRjaCAodGhlIFwib24tZGVtYW5kXCIgcHJlZmV0Y2ggdGhhdCBnZXRzIGNyZWF0ZWQgb24gbmF2aWdhdGlvbiwgaWYgb25lIGRvZXNuJ3QgZXhpc3QpXG4gICAgLy8gd2Ugc2VuZCB0aGUgcmVxdWVzdCB3aXRoIGEgXCJoaWdoXCIgcHJpb3JpdHkgYXMgaXQncyBpbiByZXNwb25zZSB0byBhIHVzZXIgaW50ZXJhY3Rpb24gdGhhdCBjb3VsZCBiZSBibG9ja2luZyBhIHRyYW5zaXRpb24uXG4gICAgLy8gT3RoZXJ3aXNlLCBhbGwgb3RoZXIgcHJlZmV0Y2hlcyBhcmUgc2VudCB3aXRoIGEgXCJsb3dcIiBwcmlvcml0eS5cbiAgICAvLyBXZSB1c2UgXCJhdXRvXCIgZm9yIGluIGFsbCBvdGhlciBjYXNlcyB0byBtYXRjaCB0aGUgZXhpc3RpbmcgZGVmYXVsdCwgYXMgdGhpcyBmdW5jdGlvbiBpcyBzaGFyZWQgb3V0c2lkZSBvZiBwcmVmZXRjaGluZy5cbiAgICBjb25zdCBmZXRjaFByaW9yaXR5ID0gcHJlZmV0Y2hLaW5kXG4gICAgICA/IHByZWZldGNoS2luZCA9PT0gUHJlZmV0Y2hLaW5kLlRFTVBPUkFSWVxuICAgICAgICA/ICdoaWdoJ1xuICAgICAgICA6ICdsb3cnXG4gICAgICA6ICdhdXRvJ1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfQ09ORklHX09VVFBVVCA9PT0gJ2V4cG9ydCcpIHtcbiAgICAgICAgLy8gSW4gXCJvdXRwdXQ6IGV4cG9ydFwiIG1vZGUsIHdlIGNhbid0IHJlbHkgb24gaGVhZGVycyB0byBkaXN0aW5ndWlzaFxuICAgICAgICAvLyBiZXR3ZWVuIEhUTUwgYW5kIFJTQyByZXF1ZXN0cy4gSW5zdGVhZCwgd2UgYXBwZW5kIGFuIGV4dHJhIHByZWZpeFxuICAgICAgICAvLyB0byB0aGUgcmVxdWVzdC5cbiAgICAgICAgdXJsID0gbmV3IFVSTCh1cmwpXG4gICAgICAgIGlmICh1cmwucGF0aG5hbWUuZW5kc1dpdGgoJy8nKSkge1xuICAgICAgICAgIHVybC5wYXRobmFtZSArPSAnaW5kZXgudHh0J1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVybC5wYXRobmFtZSArPSAnLnR4dCdcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNyZWF0ZUZldGNoKFxuICAgICAgdXJsLFxuICAgICAgaGVhZGVycyxcbiAgICAgIGZldGNoUHJpb3JpdHksXG4gICAgICBhYm9ydENvbnRyb2xsZXIuc2lnbmFsXG4gICAgKVxuXG4gICAgY29uc3QgcmVzcG9uc2VVcmwgPSB1cmxUb1VybFdpdGhvdXRGbGlnaHRNYXJrZXIocmVzLnVybClcbiAgICBjb25zdCBjYW5vbmljYWxVcmwgPSByZXMucmVkaXJlY3RlZCA/IHJlc3BvbnNlVXJsIDogdW5kZWZpbmVkXG5cbiAgICBjb25zdCBjb250ZW50VHlwZSA9IHJlcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykgfHwgJydcbiAgICBjb25zdCBpbnRlcmNlcHRpb24gPSAhIXJlcy5oZWFkZXJzLmdldCgndmFyeScpPy5pbmNsdWRlcyhORVhUX1VSTClcbiAgICBjb25zdCBwb3N0cG9uZWQgPSAhIXJlcy5oZWFkZXJzLmdldChORVhUX0RJRF9QT1NUUE9ORV9IRUFERVIpXG4gICAgY29uc3Qgc3RhbGVUaW1lSGVhZGVyU2Vjb25kcyA9IHJlcy5oZWFkZXJzLmdldChcbiAgICAgIE5FWFRfUk9VVEVSX1NUQUxFX1RJTUVfSEVBREVSXG4gICAgKVxuICAgIGNvbnN0IHN0YWxlVGltZSA9XG4gICAgICBzdGFsZVRpbWVIZWFkZXJTZWNvbmRzICE9PSBudWxsXG4gICAgICAgID8gcGFyc2VJbnQoc3RhbGVUaW1lSGVhZGVyU2Vjb25kcywgMTApICogMTAwMFxuICAgICAgICA6IC0xXG4gICAgbGV0IGlzRmxpZ2h0UmVzcG9uc2UgPSBjb250ZW50VHlwZS5zdGFydHNXaXRoKFJTQ19DT05URU5UX1RZUEVfSEVBREVSKVxuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfQ09ORklHX09VVFBVVCA9PT0gJ2V4cG9ydCcpIHtcbiAgICAgICAgaWYgKCFpc0ZsaWdodFJlc3BvbnNlKSB7XG4gICAgICAgICAgaXNGbGlnaHRSZXNwb25zZSA9IGNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoJ3RleHQvcGxhaW4nKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgZmV0Y2ggcmV0dXJucyBzb21ldGhpbmcgZGlmZmVyZW50IHRoYW4gZmxpZ2h0IHJlc3BvbnNlIGhhbmRsZSBpdCBsaWtlIGEgbXBhIG5hdmlnYXRpb25cbiAgICAvLyBJZiB0aGUgZmV0Y2ggd2FzIG5vdCAyMDAsIHdlIGFsc28gaGFuZGxlIGl0IGxpa2UgYSBtcGEgbmF2aWdhdGlvblxuICAgIGlmICghaXNGbGlnaHRSZXNwb25zZSB8fCAhcmVzLm9rIHx8ICFyZXMuYm9keSkge1xuICAgICAgLy8gaW4gY2FzZSB0aGUgb3JpZ2luYWwgVVJMIGNhbWUgd2l0aCBhIGhhc2gsIHByZXNlcnZlIGl0IGJlZm9yZSByZWRpcmVjdGluZyB0byB0aGUgbmV3IFVSTFxuICAgICAgaWYgKHVybC5oYXNoKSB7XG4gICAgICAgIHJlc3BvbnNlVXJsLmhhc2ggPSB1cmwuaGFzaFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZG9NcGFOYXZpZ2F0aW9uKHJlc3BvbnNlVXJsLnRvU3RyaW5nKCkpXG4gICAgfVxuXG4gICAgLy8gV2UgbWF5IG5hdmlnYXRlIHRvIGEgcGFnZSB0aGF0IHJlcXVpcmVzIGEgZGlmZmVyZW50IFdlYnBhY2sgcnVudGltZS5cbiAgICAvLyBJbiBwcm9kLCBldmVyeSBwYWdlIHdpbGwgaGF2ZSB0aGUgc2FtZSBXZWJwYWNrIHJ1bnRpbWUuXG4gICAgLy8gSW4gZGV2LCB0aGUgV2VicGFjayBydW50aW1lIGlzIG1pbmltYWwgZm9yIGVhY2ggcGFnZS5cbiAgICAvLyBXZSBuZWVkIHRvIGVuc3VyZSB0aGUgV2VicGFjayBydW50aW1lIGlzIHVwZGF0ZWQgYmVmb3JlIGV4ZWN1dGluZyBjbGllbnQtc2lkZSBKUyBvZiB0aGUgbmV3IHBhZ2UuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgIXByb2Nlc3MuZW52LlRVUkJPUEFDSykge1xuICAgICAgYXdhaXQgKFxuICAgICAgICByZXF1aXJlKCcuLi8uLi9kZXYvaG90LXJlbG9hZGVyL2FwcC9ob3QtcmVsb2FkZXItYXBwJykgYXMgdHlwZW9mIGltcG9ydCgnLi4vLi4vZGV2L2hvdC1yZWxvYWRlci9hcHAvaG90LXJlbG9hZGVyLWFwcCcpXG4gICAgICApLndhaXRGb3JXZWJwYWNrUnVudGltZUhvdFVwZGF0ZSgpXG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHRoZSBgZmV0Y2hgIHJlYWRhYmxlIHN0cmVhbSB0aGF0IGNhbiBiZSB1bndyYXBwZWQgYnkgYFJlYWN0LnVzZWAuXG4gICAgY29uc3QgZmxpZ2h0U3RyZWFtID0gcG9zdHBvbmVkXG4gICAgICA/IGNyZWF0ZVVuY2xvc2luZ1ByZWZldGNoU3RyZWFtKHJlcy5ib2R5KVxuICAgICAgOiByZXMuYm9keVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgKGNyZWF0ZUZyb21OZXh0UmVhZGFibGVTdHJlYW0oXG4gICAgICBmbGlnaHRTdHJlYW1cbiAgICApIGFzIFByb21pc2U8TmF2aWdhdGlvbkZsaWdodFJlc3BvbnNlPilcblxuICAgIGlmIChnZXRBcHBCdWlsZElkKCkgIT09IHJlc3BvbnNlLmIpIHtcbiAgICAgIHJldHVybiBkb01wYU5hdmlnYXRpb24ocmVzLnVybClcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZmxpZ2h0RGF0YTogbm9ybWFsaXplRmxpZ2h0RGF0YShyZXNwb25zZS5mKSxcbiAgICAgIGNhbm9uaWNhbFVybDogY2Fub25pY2FsVXJsLFxuICAgICAgY291bGRCZUludGVyY2VwdGVkOiBpbnRlcmNlcHRpb24sXG4gICAgICBwcmVyZW5kZXJlZDogcmVzcG9uc2UuUyxcbiAgICAgIHBvc3Rwb25lZCxcbiAgICAgIHN0YWxlVGltZSxcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICghYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgRmFpbGVkIHRvIGZldGNoIFJTQyBwYXlsb2FkIGZvciAke3VybH0uIEZhbGxpbmcgYmFjayB0byBicm93c2VyIG5hdmlnYXRpb24uYCxcbiAgICAgICAgZXJyXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gSWYgZmV0Y2ggZmFpbHMgaGFuZGxlIGl0IGxpa2UgYSBtcGEgbmF2aWdhdGlvblxuICAgIC8vIFRPRE8tQVBQOiBBZGQgYSB0ZXN0IGZvciB0aGUgY2FzZSB3aGVyZSBhIENPUlMgcmVxdWVzdCBmYWlscywgZS5nLiBleHRlcm5hbCB1cmwgcmVkaXJlY3QgY29taW5nIGZyb20gdGhlIHJlc3BvbnNlLlxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL25leHQuanMvaXNzdWVzLzQzNjA1I2lzc3VlY29tbWVudC0xNDUxNjE3NTIxIGZvciBhIHJlcHJvZHVjdGlvbi5cbiAgICByZXR1cm4ge1xuICAgICAgZmxpZ2h0RGF0YTogdXJsLnRvU3RyaW5nKCksXG4gICAgICBjYW5vbmljYWxVcmw6IHVuZGVmaW5lZCxcbiAgICAgIGNvdWxkQmVJbnRlcmNlcHRlZDogZmFsc2UsXG4gICAgICBwcmVyZW5kZXJlZDogZmFsc2UsXG4gICAgICBwb3N0cG9uZWQ6IGZhbHNlLFxuICAgICAgc3RhbGVUaW1lOiAtMSxcbiAgICB9XG4gIH1cbn1cblxuLy8gVGhpcyBpcyBhIHN1YnNldCBvZiB0aGUgc3RhbmRhcmQgUmVzcG9uc2UgdHlwZS4gV2UgdXNlIGEgY3VzdG9tIHR5cGUgZm9yXG4vLyB0aGlzIHNvIHdlIGNhbiBsaW1pdCB3aGljaCBkZXRhaWxzIGFib3V0IHRoZSByZXNwb25zZSBsZWFrIGludG8gdGhlIHJlc3Qgb2Zcbi8vIHRoZSBjb2RlYmFzZS4gRm9yIGV4YW1wbGUsIHRoZXJlJ3Mgc29tZSBjdXN0b20gbG9naWMgZm9yIG1hbnVhbGx5IGZvbGxvd2luZ1xuLy8gcmVkaXJlY3RzLCBzbyBcInJlZGlyZWN0ZWRcIiBpbiB0aGlzIHR5cGUgY291bGQgYmUgYSBjb21wb3NpdGUgb2YgbXVsdGlwbGVcbi8vIGJyb3dzZXIgZmV0Y2ggY2FsbHM7IGhvd2V2ZXIsIHRoaXMgZmFjdCBzaG91bGQgbm90IGxlYWsgdG8gdGhlIGNhbGxlci5cbmV4cG9ydCB0eXBlIFJTQ1Jlc3BvbnNlID0ge1xuICBvazogYm9vbGVhblxuICByZWRpcmVjdGVkOiBib29sZWFuXG4gIGhlYWRlcnM6IEhlYWRlcnNcbiAgYm9keTogUmVhZGFibGVTdHJlYW08VWludDhBcnJheT4gfCBudWxsXG4gIHN0YXR1czogbnVtYmVyXG4gIHVybDogc3RyaW5nXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVGZXRjaChcbiAgdXJsOiBVUkwsXG4gIGhlYWRlcnM6IFJlcXVlc3RIZWFkZXJzLFxuICBmZXRjaFByaW9yaXR5OiAnYXV0bycgfCAnaGlnaCcgfCAnbG93JyB8IG51bGwsXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsXG4pOiBQcm9taXNlPFJTQ1Jlc3BvbnNlPiB7XG4gIC8vIFRPRE86IEluIG91dHB1dDogXCJleHBvcnRcIiBtb2RlLCB0aGUgaGVhZGVycyBkbyBub3RoaW5nLiBPbWl0IHRoZW0gKGFuZCB0aGVcbiAgLy8gY2FjaGUgYnVzdGluZyBzZWFyY2ggcGFyYW0pIGZyb20gdGhlIHJlcXVlc3Qgc28gdGhleSdyZVxuICAvLyBtYXhpbWFsbHkgY2FjaGVhYmxlLlxuXG4gIGlmIChwcm9jZXNzLmVudi5fX05FWFRfVEVTVF9NT0RFICYmIGZldGNoUHJpb3JpdHkgIT09IG51bGwpIHtcbiAgICBoZWFkZXJzWydOZXh0LVRlc3QtRmV0Y2gtUHJpb3JpdHknXSA9IGZldGNoUHJpb3JpdHlcbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5ORVhUX0RFUExPWU1FTlRfSUQpIHtcbiAgICBoZWFkZXJzWyd4LWRlcGxveW1lbnQtaWQnXSA9IHByb2Nlc3MuZW52Lk5FWFRfREVQTE9ZTUVOVF9JRFxuICB9XG5cbiAgY29uc3QgZmV0Y2hPcHRpb25zOiBSZXF1ZXN0SW5pdCA9IHtcbiAgICAvLyBCYWNrd2FyZHMgY29tcGF0IGZvciBvbGRlciBicm93c2Vycy4gYHNhbWUtb3JpZ2luYCBpcyB0aGUgZGVmYXVsdCBpbiBtb2Rlcm4gYnJvd3NlcnMuXG4gICAgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicsXG4gICAgaGVhZGVycyxcbiAgICBwcmlvcml0eTogZmV0Y2hQcmlvcml0eSB8fCB1bmRlZmluZWQsXG4gICAgc2lnbmFsLFxuICB9XG4gIC8vIGBmZXRjaFVybGAgaXMgc2xpZ2h0bHkgZGlmZmVyZW50IGZyb20gYHVybGAgYmVjYXVzZSB3ZSBhZGQgYSBjYWNoZS1idXN0aW5nXG4gIC8vIHNlYXJjaCBwYXJhbSB0byBpdC4gVGhpcyBzaG91bGQgbm90IGxlYWsgb3V0c2lkZSBvZiB0aGlzIGZ1bmN0aW9uLCBzbyB3ZVxuICAvLyB0cmFjayB0aGVtIHNlcGFyYXRlbHkuXG4gIGxldCBmZXRjaFVybCA9IG5ldyBVUkwodXJsKVxuICBzZXRDYWNoZUJ1c3RpbmdTZWFyY2hQYXJhbShmZXRjaFVybCwgaGVhZGVycylcbiAgbGV0IGJyb3dzZXJSZXNwb25zZSA9IGF3YWl0IGZldGNoKGZldGNoVXJsLCBmZXRjaE9wdGlvbnMpXG5cbiAgLy8gSWYgdGhlIHNlcnZlciByZXNwb25kcyB3aXRoIGEgcmVkaXJlY3QgKGUuZy4gMzA3KSwgYW5kIHRoZSByZWRpcmVjdGVkXG4gIC8vIGxvY2F0aW9uIGRvZXMgbm90IGNvbnRhaW4gdGhlIGNhY2hlIGJ1c3Rpbmcgc2VhcmNoIHBhcmFtIHNldCBpbiB0aGVcbiAgLy8gb3JpZ2luYWwgcmVxdWVzdCwgdGhlIHJlc3BvbnNlIGlzIGxpa2VseSBpbnZhbGlkIOKAlCB3aGVuIGZvbGxvd2luZyB0aGVcbiAgLy8gcmVkaXJlY3QsIHRoZSBicm93c2VyIGZvcndhcmRzIHRoZSByZXF1ZXN0IGhlYWRlcnMsIGJ1dCBzaW5jZSB0aGUgY2FjaGVcbiAgLy8gYnVzdGluZyBzZWFyY2ggcGFyYW0gaXMgbWlzc2luZywgdGhlIHNlcnZlciB3aWxsIHJlamVjdCB0aGUgcmVxdWVzdCBkdWUgdG9cbiAgLy8gYSBtaXNtYXRjaC5cbiAgLy9cbiAgLy8gSWRlYWxseSwgd2Ugd291bGQgYmUgYWJsZSB0byBpbnRlcmNlcHQgdGhlIHJlZGlyZWN0IHJlc3BvbnNlIGFuZCBwZXJmb3JtIGl0XG4gIC8vIG1hbnVhbGx5LCBpbnN0ZWFkIG9mIGxldHRpbmcgdGhlIGJyb3dzZXIgYXV0b21hdGljYWxseSBmb2xsb3cgaXQsIGJ1dCB0aGlzXG4gIC8vIGlzIG5vdCBhbGxvd2VkIGJ5IHRoZSBmZXRjaCBBUEkuXG4gIC8vXG4gIC8vIFNvIGluc3RlYWQsIHdlIG11c3QgXCJyZXBsYXlcIiB0aGUgcmVkaXJlY3QgYnkgZmV0Y2hpbmcgdGhlIG5ldyBsb2NhdGlvblxuICAvLyBhZ2FpbiwgYnV0IHRoaXMgdGltZSB3ZSdsbCBhcHBlbmQgdGhlIGNhY2hlIGJ1c3Rpbmcgc2VhcmNoIHBhcmFtIHRvIHByZXZlbnRcbiAgLy8gYSBtaXNtYXRjaC5cbiAgLy9cbiAgLy8gVE9ETzogV2UgY2FuIG9wdGltaXplIE5leHQuanMncyBidWlsdC1pbiBtaWRkbGV3YXJlIEFQSXMgYnkgcmV0dXJuaW5nIGFcbiAgLy8gY3VzdG9tIHN0YXR1cyBjb2RlLCB0byBwcmV2ZW50IHRoZSBicm93c2VyIGZyb20gYXV0b21hdGljYWxseSBmb2xsb3dpbmcgaXQuXG4gIC8vXG4gIC8vIFRoaXMgZG9lcyBub3QgYWZmZWN0IFNlcnZlciBBY3Rpb24tYmFzZWQgcmVkaXJlY3RzOyB0aG9zZSBhcmUgZW5jb2RlZFxuICAvLyBkaWZmZXJlbnRseSwgYXMgcGFydCBvZiB0aGUgRmxpZ2h0IGJvZHkuIEl0IG9ubHkgYWZmZWN0cyByZWRpcmVjdHMgdGhhdFxuICAvLyBvY2N1ciBpbiBhIG1pZGRsZXdhcmUgb3IgYSB0aGlyZC1wYXJ0eSBwcm94eS5cblxuICBsZXQgcmVkaXJlY3RlZCA9IGJyb3dzZXJSZXNwb25zZS5yZWRpcmVjdGVkXG4gIGlmIChwcm9jZXNzLmVudi5fX05FWFRfQ0xJRU5UX1ZBTElEQVRFX1JTQ19SRVFVRVNUX0hFQURFUlMpIHtcbiAgICAvLyBUaGlzIGlzIHRvIHByZXZlbnQgYSByZWRpcmVjdCBsb29wLiBTYW1lIGxpbWl0IHVzZWQgYnkgQ2hyb21lLlxuICAgIGNvbnN0IE1BWF9SRURJUkVDVFMgPSAyMFxuICAgIGZvciAobGV0IG4gPSAwOyBuIDwgTUFYX1JFRElSRUNUUzsgbisrKSB7XG4gICAgICBpZiAoIWJyb3dzZXJSZXNwb25zZS5yZWRpcmVjdGVkKSB7XG4gICAgICAgIC8vIFRoZSBzZXJ2ZXIgZGlkIG5vdCBwZXJmb3JtIGEgcmVkaXJlY3QuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjb25zdCByZXNwb25zZVVybCA9IG5ldyBVUkwoYnJvd3NlclJlc3BvbnNlLnVybCwgZmV0Y2hVcmwpXG4gICAgICBpZiAocmVzcG9uc2VVcmwub3JpZ2luICE9PSBmZXRjaFVybC5vcmlnaW4pIHtcbiAgICAgICAgLy8gVGhlIHNlcnZlciByZWRpcmVjdGVkIHRvIGFuIGV4dGVybmFsIFVSTC4gVGhlIHJlc3Qgb2YgdGhlIGxvZ2ljIGJlbG93XG4gICAgICAgIC8vIGlzIG5vdCByZWxldmFudCwgYmVjYXVzZSBpdCBvbmx5IGFwcGxpZXMgdG8gaW50ZXJuYWwgcmVkaXJlY3RzLlxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICByZXNwb25zZVVybC5zZWFyY2hQYXJhbXMuZ2V0KE5FWFRfUlNDX1VOSU9OX1FVRVJZKSA9PT1cbiAgICAgICAgZmV0Y2hVcmwuc2VhcmNoUGFyYW1zLmdldChORVhUX1JTQ19VTklPTl9RVUVSWSlcbiAgICAgICkge1xuICAgICAgICAvLyBUaGUgcmVkaXJlY3RlZCBVUkwgYWxyZWFkeSBpbmNsdWRlcyB0aGUgY2FjaGUgYnVzdGluZyBzZWFyY2ggcGFyYW0uXG4gICAgICAgIC8vIFRoaXMgd2FzIHByb2JhYmx5IGludGVudGlvbmFsLiBSZWdhcmRsZXNzLCB0aGVyZSdzIG5vIHJlYXNvbiB0b1xuICAgICAgICAvLyBpc3N1ZSBhbm90aGVyIHJlcXVlc3QgdG8gdGhpcyBVUkwgYmVjYXVzZSBpdCBhbHJlYWR5IGhhcyB0aGUgcGFyYW1cbiAgICAgICAgLy8gdmFsdWUgdGhhdCB3ZSB3b3VsZCBoYXZlIGFkZGVkIGJlbG93LlxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgLy8gVGhlIFJTQyByZXF1ZXN0IHdhcyByZWRpcmVjdGVkLiBBc3N1bWUgdGhlIHJlc3BvbnNlIGlzIGludmFsaWQuXG4gICAgICAvL1xuICAgICAgLy8gQXBwZW5kIHRoZSBjYWNoZSBidXN0aW5nIHNlYXJjaCBwYXJhbSB0byB0aGUgcmVkaXJlY3RlZCBVUkwgYW5kXG4gICAgICAvLyBmZXRjaCBhZ2Fpbi5cbiAgICAgIGZldGNoVXJsID0gbmV3IFVSTChyZXNwb25zZVVybClcbiAgICAgIHNldENhY2hlQnVzdGluZ1NlYXJjaFBhcmFtKGZldGNoVXJsLCBoZWFkZXJzKVxuICAgICAgYnJvd3NlclJlc3BvbnNlID0gYXdhaXQgZmV0Y2goZmV0Y2hVcmwsIGZldGNoT3B0aW9ucylcbiAgICAgIC8vIFdlIGp1c3QgcGVyZm9ybWVkIGEgbWFudWFsIHJlZGlyZWN0LCBzbyB0aGlzIGlzIG5vdyB0cnVlLlxuICAgICAgcmVkaXJlY3RlZCA9IHRydWVcbiAgICB9XG4gIH1cblxuICAvLyBSZW1vdmUgdGhlIGNhY2hlIGJ1c3Rpbmcgc2VhcmNoIHBhcmFtIGZyb20gdGhlIHJlc3BvbnNlIFVSTCwgdG8gcHJldmVudCBpdFxuICAvLyBmcm9tIGxlYWtpbmcgb3V0c2lkZSBvZiB0aGlzIGZ1bmN0aW9uLlxuICBjb25zdCByZXNwb25zZVVybCA9IG5ldyBVUkwoYnJvd3NlclJlc3BvbnNlLnVybCwgZmV0Y2hVcmwpXG4gIHJlc3BvbnNlVXJsLnNlYXJjaFBhcmFtcy5kZWxldGUoTkVYVF9SU0NfVU5JT05fUVVFUlkpXG5cbiAgY29uc3QgcnNjUmVzcG9uc2U6IFJTQ1Jlc3BvbnNlID0ge1xuICAgIHVybDogcmVzcG9uc2VVcmwuaHJlZixcblxuICAgIC8vIFRoaXMgaXMgdHJ1ZSBpZiBhbnkgcmVkaXJlY3RzIG9jY3VycmVkLCBlaXRoZXIgYXV0b21hdGljYWxseSBieSB0aGVcbiAgICAvLyBicm93c2VyLCBvciBtYW51YWxseSBieSB1cy4gU28gaXQncyBkaWZmZXJlbnQgZnJvbVxuICAgIC8vIGBicm93c2VyUmVzcG9uc2UucmVkaXJlY3RlZGAsIHdoaWNoIG9ubHkgdGVsbHMgdXMgd2hldGhlciB0aGUgYnJvd3NlclxuICAgIC8vIGZvbGxvd2VkIGEgcmVkaXJlY3QsIGFuZCBvbmx5IGZvciB0aGUgbGFzdCByZXNwb25zZSBpbiB0aGUgY2hhaW4uXG4gICAgcmVkaXJlY3RlZCxcblxuICAgIC8vIFRoZXNlIGNhbiBiZSBjb3BpZWQgZnJvbSB0aGUgbGFzdCBicm93c2VyIHJlc3BvbnNlIHdlIHJlY2VpdmVkLiBXZVxuICAgIC8vIGludGVudGlvbmFsbHkgb25seSBleHBvc2UgdGhlIHN1YnNldCBvZiBmaWVsZHMgdGhhdCBhcmUgYWN0dWFsbHkgdXNlZFxuICAgIC8vIGVsc2V3aGVyZSBpbiB0aGUgY29kZWJhc2UuXG4gICAgb2s6IGJyb3dzZXJSZXNwb25zZS5vayxcbiAgICBoZWFkZXJzOiBicm93c2VyUmVzcG9uc2UuaGVhZGVycyxcbiAgICBib2R5OiBicm93c2VyUmVzcG9uc2UuYm9keSxcbiAgICBzdGF0dXM6IGJyb3dzZXJSZXNwb25zZS5zdGF0dXMsXG4gIH1cblxuICByZXR1cm4gcnNjUmVzcG9uc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZyb21OZXh0UmVhZGFibGVTdHJlYW0oXG4gIGZsaWdodFN0cmVhbTogUmVhZGFibGVTdHJlYW08VWludDhBcnJheT5cbik6IFByb21pc2U8dW5rbm93bj4ge1xuICByZXR1cm4gY3JlYXRlRnJvbVJlYWRhYmxlU3RyZWFtKGZsaWdodFN0cmVhbSwge1xuICAgIGNhbGxTZXJ2ZXIsXG4gICAgZmluZFNvdXJjZU1hcFVSTCxcbiAgfSlcbn1cblxuZnVuY3Rpb24gY3JlYXRlVW5jbG9zaW5nUHJlZmV0Y2hTdHJlYW0oXG4gIG9yaWdpbmFsRmxpZ2h0U3RyZWFtOiBSZWFkYWJsZVN0cmVhbTxVaW50OEFycmF5PlxuKTogUmVhZGFibGVTdHJlYW08VWludDhBcnJheT4ge1xuICAvLyBXaGVuIFBQUiBpcyBlbmFibGVkLCBwcmVmZXRjaCBzdHJlYW1zIG1heSBjb250YWluIHJlZmVyZW5jZXMgdGhhdCBuZXZlclxuICAvLyByZXNvbHZlLCBiZWNhdXNlIHRoYXQncyBob3cgd2UgZW5jb2RlIGR5bmFtaWMgZGF0YSBhY2Nlc3MuIEluIHRoZSBkZWNvZGVkXG4gIC8vIG9iamVjdCByZXR1cm5lZCBieSB0aGUgRmxpZ2h0IGNsaWVudCwgdGhlc2UgYXJlIHJlaWZpZWQgaW50byBoYW5naW5nXG4gIC8vIHByb21pc2VzIHRoYXQgc3VzcGVuZCBkdXJpbmcgcmVuZGVyLCB3aGljaCBpcyBlZmZlY3RpdmVseSB3aGF0IHdlIHdhbnQuXG4gIC8vIFRoZSBVSSByZXNvbHZlcyB3aGVuIGl0IHN3aXRjaGVzIHRvIHRoZSBkeW5hbWljIGRhdGEgc3RyZWFtXG4gIC8vICh2aWEgdXNlRGVmZXJyZWRWYWx1ZShkeW5hbWljLCBzdGF0aWMpKS5cbiAgLy9cbiAgLy8gSG93ZXZlciwgdGhlIEZsaWdodCBpbXBsZW1lbnRhdGlvbiBjdXJyZW50bHkgZXJyb3JzIGlmIHRoZSBzZXJ2ZXIgY2xvc2VzXG4gIC8vIHRoZSByZXNwb25zZSBiZWZvcmUgYWxsIHRoZSByZWZlcmVuY2VzIGFyZSByZXNvbHZlZC4gQXMgYSBjaGVhdCB0byB3b3JrXG4gIC8vIGFyb3VuZCB0aGlzLCB3ZSB3cmFwIHRoZSBvcmlnaW5hbCBzdHJlYW0gaW4gYSBuZXcgc3RyZWFtIHRoYXQgbmV2ZXIgY2xvc2VzLFxuICAvLyBhbmQgdGhlcmVmb3JlIGRvZXNuJ3QgZXJyb3IuXG4gIGNvbnN0IHJlYWRlciA9IG9yaWdpbmFsRmxpZ2h0U3RyZWFtLmdldFJlYWRlcigpXG4gIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICAgIGFzeW5jIHB1bGwoY29udHJvbGxlcikge1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKVxuICAgICAgICBpZiAoIWRvbmUpIHtcbiAgICAgICAgICAvLyBQYXNzIHRvIHRoZSB0YXJnZXQgc3RyZWFtIGFuZCBrZWVwIGNvbnN1bWluZyB0aGUgRmxpZ2h0IHJlc3BvbnNlXG4gICAgICAgICAgLy8gZnJvbSB0aGUgc2VydmVyLlxuICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZSh2YWx1ZSlcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIC8vIFRoZSBzZXJ2ZXIgc3RyZWFtIGhhcyBjbG9zZWQuIEV4aXQsIGJ1dCBpbnRlbnRpb25hbGx5IGRvIG5vdCBjbG9zZVxuICAgICAgICAvLyB0aGUgdGFyZ2V0IHN0cmVhbS5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfSxcbiAgfSlcbn1cbiJdLCJuYW1lcyI6WyJjcmVhdGVGZXRjaCIsImNyZWF0ZUZyb21OZXh0UmVhZGFibGVTdHJlYW0iLCJmZXRjaFNlcnZlclJlc3BvbnNlIiwidXJsVG9VcmxXaXRob3V0RmxpZ2h0TWFya2VyIiwiY3JlYXRlRnJvbVJlYWRhYmxlU3RyZWFtIiwiY3JlYXRlRnJvbVJlYWRhYmxlU3RyZWFtQnJvd3NlciIsInVybCIsInVybFdpdGhvdXRGbGlnaHRQYXJhbWV0ZXJzIiwiVVJMIiwibG9jYXRpb24iLCJvcmlnaW4iLCJzZWFyY2hQYXJhbXMiLCJkZWxldGUiLCJORVhUX1JTQ19VTklPTl9RVUVSWSIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsIl9fTkVYVF9DT05GSUdfT1VUUFVUIiwicGF0aG5hbWUiLCJlbmRzV2l0aCIsImxlbmd0aCIsInNsaWNlIiwiZG9NcGFOYXZpZ2F0aW9uIiwiZmxpZ2h0RGF0YSIsInRvU3RyaW5nIiwiY2Fub25pY2FsVXJsIiwidW5kZWZpbmVkIiwiY291bGRCZUludGVyY2VwdGVkIiwicHJlcmVuZGVyZWQiLCJwb3N0cG9uZWQiLCJzdGFsZVRpbWUiLCJhYm9ydENvbnRyb2xsZXIiLCJBYm9ydENvbnRyb2xsZXIiLCJ3aW5kb3ciLCJhZGRFdmVudExpc3RlbmVyIiwiYWJvcnQiLCJvcHRpb25zIiwiZmxpZ2h0Um91dGVyU3RhdGUiLCJuZXh0VXJsIiwicHJlZmV0Y2hLaW5kIiwiaGVhZGVycyIsIlJTQ19IRUFERVIiLCJORVhUX1JPVVRFUl9TVEFURV9UUkVFX0hFQURFUiIsInByZXBhcmVGbGlnaHRSb3V0ZXJTdGF0ZUZvclJlcXVlc3QiLCJpc0htclJlZnJlc2giLCJQcmVmZXRjaEtpbmQiLCJBVVRPIiwiTkVYVF9ST1VURVJfUFJFRkVUQ0hfSEVBREVSIiwiTkVYVF9ITVJfUkVGUkVTSF9IRUFERVIiLCJORVhUX1VSTCIsInJlcyIsImZldGNoUHJpb3JpdHkiLCJURU1QT1JBUlkiLCJzaWduYWwiLCJyZXNwb25zZVVybCIsInJlZGlyZWN0ZWQiLCJjb250ZW50VHlwZSIsImdldCIsImludGVyY2VwdGlvbiIsImluY2x1ZGVzIiwiTkVYVF9ESURfUE9TVFBPTkVfSEVBREVSIiwic3RhbGVUaW1lSGVhZGVyU2Vjb25kcyIsIk5FWFRfUk9VVEVSX1NUQUxFX1RJTUVfSEVBREVSIiwicGFyc2VJbnQiLCJpc0ZsaWdodFJlc3BvbnNlIiwic3RhcnRzV2l0aCIsIlJTQ19DT05URU5UX1RZUEVfSEVBREVSIiwib2siLCJib2R5IiwiaGFzaCIsIlRVUkJPUEFDSyIsInJlcXVpcmUiLCJ3YWl0Rm9yV2VicGFja1J1bnRpbWVIb3RVcGRhdGUiLCJmbGlnaHRTdHJlYW0iLCJjcmVhdGVVbmNsb3NpbmdQcmVmZXRjaFN0cmVhbSIsInJlc3BvbnNlIiwiZ2V0QXBwQnVpbGRJZCIsImIiLCJub3JtYWxpemVGbGlnaHREYXRhIiwiZiIsIlMiLCJlcnIiLCJhYm9ydGVkIiwiY29uc29sZSIsImVycm9yIiwiX19ORVhUX1RFU1RfTU9ERSIsIk5FWFRfREVQTE9ZTUVOVF9JRCIsImZldGNoT3B0aW9ucyIsImNyZWRlbnRpYWxzIiwicHJpb3JpdHkiLCJmZXRjaFVybCIsInNldENhY2hlQnVzdGluZ1NlYXJjaFBhcmFtIiwiYnJvd3NlclJlc3BvbnNlIiwiZmV0Y2giLCJfX05FWFRfQ0xJRU5UX1ZBTElEQVRFX1JTQ19SRVFVRVNUX0hFQURFUlMiLCJNQVhfUkVESVJFQ1RTIiwibiIsInJzY1Jlc3BvbnNlIiwiaHJlZiIsInN0YXR1cyIsImNhbGxTZXJ2ZXIiLCJmaW5kU291cmNlTWFwVVJMIiwib3JpZ2luYWxGbGlnaHRTdHJlYW0iLCJyZWFkZXIiLCJnZXRSZWFkZXIiLCJSZWFkYWJsZVN0cmVhbSIsInB1bGwiLCJjb250cm9sbGVyIiwiZG9uZSIsInZhbHVlIiwicmVhZCIsImVucXVldWUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fetch-server-response.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fill-cache-with-new-subtree-data.js":
|
||
/*!*****************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/router-reducer/fill-cache-with-new-subtree-data.js ***!
|
||
\*****************************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n fillCacheWithNewSubTreeData: function() {\n return fillCacheWithNewSubTreeData;\n },\n fillCacheWithNewSubTreeDataButOnlyLoading: function() {\n return fillCacheWithNewSubTreeDataButOnlyLoading;\n }\n});\nconst _invalidatecachebyrouterstate = __webpack_require__(/*! ./invalidate-cache-by-router-state */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/invalidate-cache-by-router-state.js\");\nconst _filllazyitemstillleafwithhead = __webpack_require__(/*! ./fill-lazy-items-till-leaf-with-head */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fill-lazy-items-till-leaf-with-head.js\");\nconst _createroutercachekey = __webpack_require__(/*! ./create-router-cache-key */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\");\nconst _segment = __webpack_require__(/*! ../../../shared/lib/segment */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/segment.js\");\n/**\n * Common logic for filling cache with new sub tree data.\n */ function fillCacheHelper(navigatedAt, newCache, existingCache, flightData, prefetchEntry, fillLazyItems) {\n const { segmentPath, seedData: cacheNodeSeedData, tree: treePatch, head } = flightData;\n let newCacheNode = newCache;\n let existingCacheNode = existingCache;\n for(let i = 0; i < segmentPath.length; i += 2){\n const parallelRouteKey = segmentPath[i];\n const segment = segmentPath[i + 1];\n // segmentPath is a repeating tuple of parallelRouteKey and segment\n // we know we've hit the last entry we've reached our final pair\n const isLastEntry = i === segmentPath.length - 2;\n const cacheKey = (0, _createroutercachekey.createRouterCacheKey)(segment);\n const existingChildSegmentMap = existingCacheNode.parallelRoutes.get(parallelRouteKey);\n if (!existingChildSegmentMap) {\n continue;\n }\n let childSegmentMap = newCacheNode.parallelRoutes.get(parallelRouteKey);\n if (!childSegmentMap || childSegmentMap === existingChildSegmentMap) {\n childSegmentMap = new Map(existingChildSegmentMap);\n newCacheNode.parallelRoutes.set(parallelRouteKey, childSegmentMap);\n }\n const existingChildCacheNode = existingChildSegmentMap.get(cacheKey);\n let childCacheNode = childSegmentMap.get(cacheKey);\n if (isLastEntry) {\n if (cacheNodeSeedData && (!childCacheNode || !childCacheNode.lazyData || childCacheNode === existingChildCacheNode)) {\n const incomingSegment = cacheNodeSeedData[0];\n const rsc = cacheNodeSeedData[1];\n const loading = cacheNodeSeedData[3];\n childCacheNode = {\n lazyData: null,\n // When `fillLazyItems` is false, we only want to fill the RSC data for the layout,\n // not the page segment.\n rsc: fillLazyItems || incomingSegment !== _segment.PAGE_SEGMENT_KEY ? rsc : null,\n prefetchRsc: null,\n head: null,\n prefetchHead: null,\n loading,\n parallelRoutes: fillLazyItems && existingChildCacheNode ? new Map(existingChildCacheNode.parallelRoutes) : new Map(),\n navigatedAt\n };\n if (existingChildCacheNode && fillLazyItems) {\n (0, _invalidatecachebyrouterstate.invalidateCacheByRouterState)(childCacheNode, existingChildCacheNode, treePatch);\n }\n if (fillLazyItems) {\n (0, _filllazyitemstillleafwithhead.fillLazyItemsTillLeafWithHead)(navigatedAt, childCacheNode, existingChildCacheNode, treePatch, cacheNodeSeedData, head, prefetchEntry);\n }\n childSegmentMap.set(cacheKey, childCacheNode);\n }\n continue;\n }\n if (!childCacheNode || !existingChildCacheNode) {\n continue;\n }\n if (childCacheNode === existingChildCacheNode) {\n childCacheNode = {\n lazyData: childCacheNode.lazyData,\n rsc: childCacheNode.rsc,\n prefetchRsc: childCacheNode.prefetchRsc,\n head: childCacheNode.head,\n prefetchHead: childCacheNode.prefetchHead,\n parallelRoutes: new Map(childCacheNode.parallelRoutes),\n loading: childCacheNode.loading\n };\n childSegmentMap.set(cacheKey, childCacheNode);\n }\n // Move deeper into the cache nodes\n newCacheNode = childCacheNode;\n existingCacheNode = existingChildCacheNode;\n }\n}\nfunction fillCacheWithNewSubTreeData(navigatedAt, newCache, existingCache, flightData, prefetchEntry) {\n fillCacheHelper(navigatedAt, newCache, existingCache, flightData, prefetchEntry, true);\n}\nfunction fillCacheWithNewSubTreeDataButOnlyLoading(navigatedAt, newCache, existingCache, flightData, prefetchEntry) {\n fillCacheHelper(navigatedAt, newCache, existingCache, flightData, prefetchEntry, false);\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=fill-cache-with-new-subtree-data.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvZmlsbC1jYWNoZS13aXRoLW5ldy1zdWJ0cmVlLWRhdGEuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBd0lnQkEsMkJBQTJCO2VBQTNCQTs7SUFpQkFDLHlDQUF5QztlQUF6Q0E7OzswREF2SjZCOzJEQUNDO2tEQUNUO3FDQUVKO0FBR2pDOztDQUVDLEdBQ0QsU0FBU0MsZ0JBQ1BDLFdBQW1CLEVBQ25CQyxRQUFtQixFQUNuQkMsYUFBd0IsRUFDeEJDLFVBQWdDLEVBQ2hDQyxhQUE2QyxFQUM3Q0MsYUFBc0I7SUFFdEIsTUFBTSxFQUNKQyxXQUFXLEVBQ1hDLFVBQVVDLGlCQUFpQixFQUMzQkMsTUFBTUMsU0FBUyxFQUNmQyxJQUFJLEVBQ0wsR0FBR1I7SUFDSixJQUFJUyxlQUFlWDtJQUNuQixJQUFJWSxvQkFBb0JYO0lBRXhCLElBQUssSUFBSVksSUFBSSxHQUFHQSxJQUFJUixZQUFZUyxNQUFNLEVBQUVELEtBQUssRUFBRztRQUM5QyxNQUFNRSxtQkFBMkJWLFdBQVcsQ0FBQ1EsRUFBRTtRQUMvQyxNQUFNRyxVQUFtQlgsV0FBVyxDQUFDUSxJQUFJLEVBQUU7UUFFM0MsbUVBQW1FO1FBQ25FLGdFQUFnRTtRQUNoRSxNQUFNSSxjQUFjSixNQUFNUixZQUFZUyxNQUFNLEdBQUc7UUFDL0MsTUFBTUksV0FBV0MsQ0FBQUEsR0FBQUEsc0JBQUFBLG9CQUFBQSxFQUFxQkg7UUFFdEMsTUFBTUksMEJBQ0pSLGtCQUFrQlMsY0FBYyxDQUFDQyxHQUFHLENBQUNQO1FBRXZDLElBQUksQ0FBQ0sseUJBQXlCO1lBRzVCO1FBQ0Y7UUFFQSxJQUFJRyxrQkFBa0JaLGFBQWFVLGNBQWMsQ0FBQ0MsR0FBRyxDQUFDUDtRQUN0RCxJQUFJLENBQUNRLG1CQUFtQkEsb0JBQW9CSCx5QkFBeUI7WUFDbkVHLGtCQUFrQixJQUFJQyxJQUFJSjtZQUMxQlQsYUFBYVUsY0FBYyxDQUFDSSxHQUFHLENBQUNWLGtCQUFrQlE7UUFDcEQ7UUFFQSxNQUFNRyx5QkFBeUJOLHdCQUF3QkUsR0FBRyxDQUFDSjtRQUMzRCxJQUFJUyxpQkFBaUJKLGdCQUFnQkQsR0FBRyxDQUFDSjtRQUV6QyxJQUFJRCxhQUFhO1lBQ2YsSUFDRVYscUJBQ0MsRUFBQ29CLGtCQUNBLENBQUNBLGVBQWVDLFFBQVEsSUFDeEJELG1CQUFtQkQsc0JBQUFBLENBQXFCLEVBQzFDO2dCQUNBLE1BQU1HLGtCQUFrQnRCLGlCQUFpQixDQUFDLEVBQUU7Z0JBQzVDLE1BQU11QixNQUFNdkIsaUJBQWlCLENBQUMsRUFBRTtnQkFDaEMsTUFBTXdCLFVBQVV4QixpQkFBaUIsQ0FBQyxFQUFFO2dCQUVwQ29CLGlCQUFpQjtvQkFDZkMsVUFBVTtvQkFDVixtRkFBbUY7b0JBQ25GLHdCQUF3QjtvQkFDeEJFLEtBQ0UxQixpQkFBaUJ5QixvQkFBb0JHLFNBQUFBLGdCQUFnQixHQUFHRixNQUFNO29CQUNoRUcsYUFBYTtvQkFDYnZCLE1BQU07b0JBQ053QixjQUFjO29CQUNkSDtvQkFDQVYsZ0JBQ0VqQixpQkFBaUJzQix5QkFDYixJQUFJRixJQUFJRSx1QkFBdUJMLGNBQWMsSUFDN0MsSUFBSUc7b0JBQ1Z6QjtnQkFDRjtnQkFFQSxJQUFJMkIsMEJBQTBCdEIsZUFBZTtvQkFDM0MrQixDQUFBQSxHQUFBQSw4QkFBQUEsNEJBQUFBLEVBQ0VSLGdCQUNBRCx3QkFDQWpCO2dCQUVKO2dCQUNBLElBQUlMLGVBQWU7b0JBQ2pCZ0MsQ0FBQUEsR0FBQUEsK0JBQUFBLDZCQUFBQSxFQUNFckMsYUFDQTRCLGdCQUNBRCx3QkFDQWpCLFdBQ0FGLG1CQUNBRyxNQUNBUDtnQkFFSjtnQkFFQW9CLGdCQUFnQkUsR0FBRyxDQUFDUCxVQUFVUztZQUNoQztZQUNBO1FBQ0Y7UUFFQSxJQUFJLENBQUNBLGtCQUFrQixDQUFDRCx3QkFBd0I7WUFHOUM7UUFDRjtRQUVBLElBQUlDLG1CQUFtQkQsd0JBQXdCO1lBQzdDQyxpQkFBaUI7Z0JBQ2ZDLFVBQVVELGVBQWVDLFFBQVE7Z0JBQ2pDRSxLQUFLSCxlQUFlRyxHQUFHO2dCQUN2QkcsYUFBYU4sZUFBZU0sV0FBVztnQkFDdkN2QixNQUFNaUIsZUFBZWpCLElBQUk7Z0JBQ3pCd0IsY0FBY1AsZUFBZU8sWUFBWTtnQkFDekNiLGdCQUFnQixJQUFJRyxJQUFJRyxlQUFlTixjQUFjO2dCQUNyRFUsU0FBU0osZUFBZUksT0FBTztZQUNqQztZQUNBUixnQkFBZ0JFLEdBQUcsQ0FBQ1AsVUFBVVM7UUFDaEM7UUFFQSxtQ0FBbUM7UUFDbkNoQixlQUFlZ0I7UUFDZmYsb0JBQW9CYztJQUN0QjtBQUNGO0FBS08sU0FBUzlCLDRCQUNkRyxXQUFtQixFQUNuQkMsUUFBbUIsRUFDbkJDLGFBQXdCLEVBQ3hCQyxVQUFnQyxFQUNoQ0MsYUFBa0M7SUFFbENMLGdCQUNFQyxhQUNBQyxVQUNBQyxlQUNBQyxZQUNBQyxlQUNBO0FBRUo7QUFFTyxTQUFTTiwwQ0FDZEUsV0FBbUIsRUFDbkJDLFFBQW1CLEVBQ25CQyxhQUF3QixFQUN4QkMsVUFBZ0MsRUFDaENDLGFBQWtDO0lBRWxDTCxnQkFDRUMsYUFDQUMsVUFDQUMsZUFDQUMsWUFDQUMsZUFDQTtBQUVKIiwic291cmNlcyI6WyIvaG9tZS9zcmMvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvZmlsbC1jYWNoZS13aXRoLW5ldy1zdWJ0cmVlLWRhdGEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDYWNoZU5vZGUgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvbGliL2FwcC1yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZSdcbmltcG9ydCB0eXBlIHsgU2VnbWVudCB9IGZyb20gJy4uLy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL3R5cGVzJ1xuaW1wb3J0IHsgaW52YWxpZGF0ZUNhY2hlQnlSb3V0ZXJTdGF0ZSB9IGZyb20gJy4vaW52YWxpZGF0ZS1jYWNoZS1ieS1yb3V0ZXItc3RhdGUnXG5pbXBvcnQgeyBmaWxsTGF6eUl0ZW1zVGlsbExlYWZXaXRoSGVhZCB9IGZyb20gJy4vZmlsbC1sYXp5LWl0ZW1zLXRpbGwtbGVhZi13aXRoLWhlYWQnXG5pbXBvcnQgeyBjcmVhdGVSb3V0ZXJDYWNoZUtleSB9IGZyb20gJy4vY3JlYXRlLXJvdXRlci1jYWNoZS1rZXknXG5pbXBvcnQgdHlwZSB7IFByZWZldGNoQ2FjaGVFbnRyeSB9IGZyb20gJy4vcm91dGVyLXJlZHVjZXItdHlwZXMnXG5pbXBvcnQgeyBQQUdFX1NFR01FTlRfS0VZIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2xpYi9zZWdtZW50J1xuaW1wb3J0IHR5cGUgeyBOb3JtYWxpemVkRmxpZ2h0RGF0YSB9IGZyb20gJy4uLy4uL2ZsaWdodC1kYXRhLWhlbHBlcnMnXG5cbi8qKlxuICogQ29tbW9uIGxvZ2ljIGZvciBmaWxsaW5nIGNhY2hlIHdpdGggbmV3IHN1YiB0cmVlIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGZpbGxDYWNoZUhlbHBlcihcbiAgbmF2aWdhdGVkQXQ6IG51bWJlcixcbiAgbmV3Q2FjaGU6IENhY2hlTm9kZSxcbiAgZXhpc3RpbmdDYWNoZTogQ2FjaGVOb2RlLFxuICBmbGlnaHREYXRhOiBOb3JtYWxpemVkRmxpZ2h0RGF0YSxcbiAgcHJlZmV0Y2hFbnRyeTogUHJlZmV0Y2hDYWNoZUVudHJ5IHwgdW5kZWZpbmVkLFxuICBmaWxsTGF6eUl0ZW1zOiBib29sZWFuXG4pOiB2b2lkIHtcbiAgY29uc3Qge1xuICAgIHNlZ21lbnRQYXRoLFxuICAgIHNlZWREYXRhOiBjYWNoZU5vZGVTZWVkRGF0YSxcbiAgICB0cmVlOiB0cmVlUGF0Y2gsXG4gICAgaGVhZCxcbiAgfSA9IGZsaWdodERhdGFcbiAgbGV0IG5ld0NhY2hlTm9kZSA9IG5ld0NhY2hlXG4gIGxldCBleGlzdGluZ0NhY2hlTm9kZSA9IGV4aXN0aW5nQ2FjaGVcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHNlZ21lbnRQYXRoLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgY29uc3QgcGFyYWxsZWxSb3V0ZUtleTogc3RyaW5nID0gc2VnbWVudFBhdGhbaV1cbiAgICBjb25zdCBzZWdtZW50OiBTZWdtZW50ID0gc2VnbWVudFBhdGhbaSArIDFdXG5cbiAgICAvLyBzZWdtZW50UGF0aCBpcyBhIHJlcGVhdGluZyB0dXBsZSBvZiBwYXJhbGxlbFJvdXRlS2V5IGFuZCBzZWdtZW50XG4gICAgLy8gd2Uga25vdyB3ZSd2ZSBoaXQgdGhlIGxhc3QgZW50cnkgd2UndmUgcmVhY2hlZCBvdXIgZmluYWwgcGFpclxuICAgIGNvbnN0IGlzTGFzdEVudHJ5ID0gaSA9PT0gc2VnbWVudFBhdGgubGVuZ3RoIC0gMlxuICAgIGNvbnN0IGNhY2hlS2V5ID0gY3JlYXRlUm91dGVyQ2FjaGVLZXkoc2VnbWVudClcblxuICAgIGNvbnN0IGV4aXN0aW5nQ2hpbGRTZWdtZW50TWFwID1cbiAgICAgIGV4aXN0aW5nQ2FjaGVOb2RlLnBhcmFsbGVsUm91dGVzLmdldChwYXJhbGxlbFJvdXRlS2V5KVxuXG4gICAgaWYgKCFleGlzdGluZ0NoaWxkU2VnbWVudE1hcCkge1xuICAgICAgLy8gQmFpbG91dCBiZWNhdXNlIHRoZSBleGlzdGluZyBjYWNoZSBkb2VzIG5vdCBoYXZlIHRoZSBwYXRoIHRvIHRoZSBsZWFmIG5vZGVcbiAgICAgIC8vIFdpbGwgdHJpZ2dlciBsYXp5IGZldGNoIGluIGxheW91dC1yb3V0ZXIgYmVjYXVzZSBvZiBtaXNzaW5nIHNlZ21lbnRcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgbGV0IGNoaWxkU2VnbWVudE1hcCA9IG5ld0NhY2hlTm9kZS5wYXJhbGxlbFJvdXRlcy5nZXQocGFyYWxsZWxSb3V0ZUtleSlcbiAgICBpZiAoIWNoaWxkU2VnbWVudE1hcCB8fCBjaGlsZFNlZ21lbnRNYXAgPT09IGV4aXN0aW5nQ2hpbGRTZWdtZW50TWFwKSB7XG4gICAgICBjaGlsZFNlZ21lbnRNYXAgPSBuZXcgTWFwKGV4aXN0aW5nQ2hpbGRTZWdtZW50TWFwKVxuICAgICAgbmV3Q2FjaGVOb2RlLnBhcmFsbGVsUm91dGVzLnNldChwYXJhbGxlbFJvdXRlS2V5LCBjaGlsZFNlZ21lbnRNYXApXG4gICAgfVxuXG4gICAgY29uc3QgZXhpc3RpbmdDaGlsZENhY2hlTm9kZSA9IGV4aXN0aW5nQ2hpbGRTZWdtZW50TWFwLmdldChjYWNoZUtleSlcbiAgICBsZXQgY2hpbGRDYWNoZU5vZGUgPSBjaGlsZFNlZ21lbnRNYXAuZ2V0KGNhY2hlS2V5KVxuXG4gICAgaWYgKGlzTGFzdEVudHJ5KSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNhY2hlTm9kZVNlZWREYXRhICYmXG4gICAgICAgICghY2hpbGRDYWNoZU5vZGUgfHxcbiAgICAgICAgICAhY2hpbGRDYWNoZU5vZGUubGF6eURhdGEgfHxcbiAgICAgICAgICBjaGlsZENhY2hlTm9kZSA9PT0gZXhpc3RpbmdDaGlsZENhY2hlTm9kZSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCBpbmNvbWluZ1NlZ21lbnQgPSBjYWNoZU5vZGVTZWVkRGF0YVswXVxuICAgICAgICBjb25zdCByc2MgPSBjYWNoZU5vZGVTZWVkRGF0YVsxXVxuICAgICAgICBjb25zdCBsb2FkaW5nID0gY2FjaGVOb2RlU2VlZERhdGFbM11cblxuICAgICAgICBjaGlsZENhY2hlTm9kZSA9IHtcbiAgICAgICAgICBsYXp5RGF0YTogbnVsbCxcbiAgICAgICAgICAvLyBXaGVuIGBmaWxsTGF6eUl0ZW1zYCBpcyBmYWxzZSwgd2Ugb25seSB3YW50IHRvIGZpbGwgdGhlIFJTQyBkYXRhIGZvciB0aGUgbGF5b3V0LFxuICAgICAgICAgIC8vIG5vdCB0aGUgcGFnZSBzZWdtZW50LlxuICAgICAgICAgIHJzYzpcbiAgICAgICAgICAgIGZpbGxMYXp5SXRlbXMgfHwgaW5jb21pbmdTZWdtZW50ICE9PSBQQUdFX1NFR01FTlRfS0VZID8gcnNjIDogbnVsbCxcbiAgICAgICAgICBwcmVmZXRjaFJzYzogbnVsbCxcbiAgICAgICAgICBoZWFkOiBudWxsLFxuICAgICAgICAgIHByZWZldGNoSGVhZDogbnVsbCxcbiAgICAgICAgICBsb2FkaW5nLFxuICAgICAgICAgIHBhcmFsbGVsUm91dGVzOlxuICAgICAgICAgICAgZmlsbExhenlJdGVtcyAmJiBleGlzdGluZ0NoaWxkQ2FjaGVOb2RlXG4gICAgICAgICAgICAgID8gbmV3IE1hcChleGlzdGluZ0NoaWxkQ2FjaGVOb2RlLnBhcmFsbGVsUm91dGVzKVxuICAgICAgICAgICAgICA6IG5ldyBNYXAoKSxcbiAgICAgICAgICBuYXZpZ2F0ZWRBdCxcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChleGlzdGluZ0NoaWxkQ2FjaGVOb2RlICYmIGZpbGxMYXp5SXRlbXMpIHtcbiAgICAgICAgICBpbnZhbGlkYXRlQ2FjaGVCeVJvdXRlclN0YXRlKFxuICAgICAgICAgICAgY2hpbGRDYWNoZU5vZGUsXG4gICAgICAgICAgICBleGlzdGluZ0NoaWxkQ2FjaGVOb2RlLFxuICAgICAgICAgICAgdHJlZVBhdGNoXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIGlmIChmaWxsTGF6eUl0ZW1zKSB7XG4gICAgICAgICAgZmlsbExhenlJdGVtc1RpbGxMZWFmV2l0aEhlYWQoXG4gICAgICAgICAgICBuYXZpZ2F0ZWRBdCxcbiAgICAgICAgICAgIGNoaWxkQ2FjaGVOb2RlLFxuICAgICAgICAgICAgZXhpc3RpbmdDaGlsZENhY2hlTm9kZSxcbiAgICAgICAgICAgIHRyZWVQYXRjaCxcbiAgICAgICAgICAgIGNhY2hlTm9kZVNlZWREYXRhLFxuICAgICAgICAgICAgaGVhZCxcbiAgICAgICAgICAgIHByZWZldGNoRW50cnlcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZFNlZ21lbnRNYXAuc2V0KGNhY2hlS2V5LCBjaGlsZENhY2hlTm9kZSlcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgaWYgKCFjaGlsZENhY2hlTm9kZSB8fCAhZXhpc3RpbmdDaGlsZENhY2hlTm9kZSkge1xuICAgICAgLy8gQmFpbG91dCBiZWNhdXNlIHRoZSBleGlzdGluZyBjYWNoZSBkb2VzIG5vdCBoYXZlIHRoZSBwYXRoIHRvIHRoZSBsZWFmIG5vZGVcbiAgICAgIC8vIFdpbGwgdHJpZ2dlciBsYXp5IGZldGNoIGluIGxheW91dC1yb3V0ZXIgYmVjYXVzZSBvZiBtaXNzaW5nIHNlZ21lbnRcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgaWYgKGNoaWxkQ2FjaGVOb2RlID09PSBleGlzdGluZ0NoaWxkQ2FjaGVOb2RlKSB7XG4gICAgICBjaGlsZENhY2hlTm9kZSA9IHtcbiAgICAgICAgbGF6eURhdGE6IGNoaWxkQ2FjaGVOb2RlLmxhenlEYXRhLFxuICAgICAgICByc2M6IGNoaWxkQ2FjaGVOb2RlLnJzYyxcbiAgICAgICAgcHJlZmV0Y2hSc2M6IGNoaWxkQ2FjaGVOb2RlLnByZWZldGNoUnNjLFxuICAgICAgICBoZWFkOiBjaGlsZENhY2hlTm9kZS5oZWFkLFxuICAgICAgICBwcmVmZXRjaEhlYWQ6IGNoaWxkQ2FjaGVOb2RlLnByZWZldGNoSGVhZCxcbiAgICAgICAgcGFyYWxsZWxSb3V0ZXM6IG5ldyBNYXAoY2hpbGRDYWNoZU5vZGUucGFyYWxsZWxSb3V0ZXMpLFxuICAgICAgICBsb2FkaW5nOiBjaGlsZENhY2hlTm9kZS5sb2FkaW5nLFxuICAgICAgfSBhcyBDYWNoZU5vZGVcbiAgICAgIGNoaWxkU2VnbWVudE1hcC5zZXQoY2FjaGVLZXksIGNoaWxkQ2FjaGVOb2RlKVxuICAgIH1cblxuICAgIC8vIE1vdmUgZGVlcGVyIGludG8gdGhlIGNhY2hlIG5vZGVzXG4gICAgbmV3Q2FjaGVOb2RlID0gY2hpbGRDYWNoZU5vZGVcbiAgICBleGlzdGluZ0NhY2hlTm9kZSA9IGV4aXN0aW5nQ2hpbGRDYWNoZU5vZGVcbiAgfVxufVxuXG4vKipcbiAqIEZpbGwgY2FjaGUgd2l0aCByc2MgYmFzZWQgb24gZmxpZ2h0RGF0YVBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbGxDYWNoZVdpdGhOZXdTdWJUcmVlRGF0YShcbiAgbmF2aWdhdGVkQXQ6IG51bWJlcixcbiAgbmV3Q2FjaGU6IENhY2hlTm9kZSxcbiAgZXhpc3RpbmdDYWNoZTogQ2FjaGVOb2RlLFxuICBmbGlnaHREYXRhOiBOb3JtYWxpemVkRmxpZ2h0RGF0YSxcbiAgcHJlZmV0Y2hFbnRyeT86IFByZWZldGNoQ2FjaGVFbnRyeVxuKTogdm9pZCB7XG4gIGZpbGxDYWNoZUhlbHBlcihcbiAgICBuYXZpZ2F0ZWRBdCxcbiAgICBuZXdDYWNoZSxcbiAgICBleGlzdGluZ0NhY2hlLFxuICAgIGZsaWdodERhdGEsXG4gICAgcHJlZmV0Y2hFbnRyeSxcbiAgICB0cnVlXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbGxDYWNoZVdpdGhOZXdTdWJUcmVlRGF0YUJ1dE9ubHlMb2FkaW5nKFxuICBuYXZpZ2F0ZWRBdDogbnVtYmVyLFxuICBuZXdDYWNoZTogQ2FjaGVOb2RlLFxuICBleGlzdGluZ0NhY2hlOiBDYWNoZU5vZGUsXG4gIGZsaWdodERhdGE6IE5vcm1hbGl6ZWRGbGlnaHREYXRhLFxuICBwcmVmZXRjaEVudHJ5PzogUHJlZmV0Y2hDYWNoZUVudHJ5XG4pOiB2b2lkIHtcbiAgZmlsbENhY2hlSGVscGVyKFxuICAgIG5hdmlnYXRlZEF0LFxuICAgIG5ld0NhY2hlLFxuICAgIGV4aXN0aW5nQ2FjaGUsXG4gICAgZmxpZ2h0RGF0YSxcbiAgICBwcmVmZXRjaEVudHJ5LFxuICAgIGZhbHNlXG4gIClcbn1cbiJdLCJuYW1lcyI6WyJmaWxsQ2FjaGVXaXRoTmV3U3ViVHJlZURhdGEiLCJmaWxsQ2FjaGVXaXRoTmV3U3ViVHJlZURhdGFCdXRPbmx5TG9hZGluZyIsImZpbGxDYWNoZUhlbHBlciIsIm5hdmlnYXRlZEF0IiwibmV3Q2FjaGUiLCJleGlzdGluZ0NhY2hlIiwiZmxpZ2h0RGF0YSIsInByZWZldGNoRW50cnkiLCJmaWxsTGF6eUl0ZW1zIiwic2VnbWVudFBhdGgiLCJzZWVkRGF0YSIsImNhY2hlTm9kZVNlZWREYXRhIiwidHJlZSIsInRyZWVQYXRjaCIsImhlYWQiLCJuZXdDYWNoZU5vZGUiLCJleGlzdGluZ0NhY2hlTm9kZSIsImkiLCJsZW5ndGgiLCJwYXJhbGxlbFJvdXRlS2V5Iiwic2VnbWVudCIsImlzTGFzdEVudHJ5IiwiY2FjaGVLZXkiLCJjcmVhdGVSb3V0ZXJDYWNoZUtleSIsImV4aXN0aW5nQ2hpbGRTZWdtZW50TWFwIiwicGFyYWxsZWxSb3V0ZXMiLCJnZXQiLCJjaGlsZFNlZ21lbnRNYXAiLCJNYXAiLCJzZXQiLCJleGlzdGluZ0NoaWxkQ2FjaGVOb2RlIiwiY2hpbGRDYWNoZU5vZGUiLCJsYXp5RGF0YSIsImluY29taW5nU2VnbWVudCIsInJzYyIsImxvYWRpbmciLCJQQUdFX1NFR01FTlRfS0VZIiwicHJlZmV0Y2hSc2MiLCJwcmVmZXRjaEhlYWQiLCJpbnZhbGlkYXRlQ2FjaGVCeVJvdXRlclN0YXRlIiwiZmlsbExhenlJdGVtc1RpbGxMZWFmV2l0aEhlYWQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fill-cache-with-new-subtree-data.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fill-lazy-items-till-leaf-with-head.js":
|
||
/*!********************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/router-reducer/fill-lazy-items-till-leaf-with-head.js ***!
|
||
\********************************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"fillLazyItemsTillLeafWithHead\", ({\n enumerable: true,\n get: function() {\n return fillLazyItemsTillLeafWithHead;\n }\n}));\nconst _createroutercachekey = __webpack_require__(/*! ./create-router-cache-key */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\");\nconst _routerreducertypes = __webpack_require__(/*! ./router-reducer-types */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nfunction fillLazyItemsTillLeafWithHead(navigatedAt, newCache, existingCache, routerState, cacheNodeSeedData, head, prefetchEntry) {\n const isLastSegment = Object.keys(routerState[1]).length === 0;\n if (isLastSegment) {\n newCache.head = head;\n return;\n }\n // Remove segment that we got data for so that it is filled in during rendering of rsc.\n for(const key in routerState[1]){\n const parallelRouteState = routerState[1][key];\n const segmentForParallelRoute = parallelRouteState[0];\n const cacheKey = (0, _createroutercachekey.createRouterCacheKey)(segmentForParallelRoute);\n // TODO: We should traverse the cacheNodeSeedData tree instead of the router\n // state tree. Ideally, they would always be the same shape, but because of\n // the loading.js pattern, cacheNodeSeedData sometimes only represents a\n // partial tree. That's why this node is sometimes null. Once PPR lands,\n // loading.js will no longer have special behavior and we can traverse the\n // data tree instead.\n //\n // We should also consider merging the router state tree and the data tree\n // in the response format, so that we don't have to send the keys twice.\n // Then the client can convert them into separate representations.\n const parallelSeedData = cacheNodeSeedData !== null && cacheNodeSeedData[2][key] !== undefined ? cacheNodeSeedData[2][key] : null;\n if (existingCache) {\n const existingParallelRoutesCacheNode = existingCache.parallelRoutes.get(key);\n if (existingParallelRoutesCacheNode) {\n const hasReusablePrefetch = (prefetchEntry == null ? void 0 : prefetchEntry.kind) === 'auto' && prefetchEntry.status === _routerreducertypes.PrefetchCacheEntryStatus.reusable;\n let parallelRouteCacheNode = new Map(existingParallelRoutesCacheNode);\n const existingCacheNode = parallelRouteCacheNode.get(cacheKey);\n let newCacheNode;\n if (parallelSeedData !== null) {\n // New data was sent from the server.\n const seedNode = parallelSeedData[1];\n const loading = parallelSeedData[3];\n newCacheNode = {\n lazyData: null,\n rsc: seedNode,\n // This is a PPR-only field. When PPR is enabled, we shouldn't hit\n // this path during a navigation, but until PPR is fully implemented\n // yet it's possible the existing node does have a non-null\n // `prefetchRsc`. As an incremental step, we'll just de-opt to the\n // old behavior — no PPR value.\n prefetchRsc: null,\n head: null,\n prefetchHead: null,\n loading,\n parallelRoutes: new Map(existingCacheNode == null ? void 0 : existingCacheNode.parallelRoutes),\n navigatedAt\n };\n } else if (hasReusablePrefetch && existingCacheNode) {\n // No new data was sent from the server, but the existing cache node\n // was prefetched, so we should reuse that.\n newCacheNode = {\n lazyData: existingCacheNode.lazyData,\n rsc: existingCacheNode.rsc,\n // This is a PPR-only field. Unlike the previous branch, since we're\n // just cloning the existing cache node, we might as well keep the\n // PPR value, if it exists.\n prefetchRsc: existingCacheNode.prefetchRsc,\n head: existingCacheNode.head,\n prefetchHead: existingCacheNode.prefetchHead,\n parallelRoutes: new Map(existingCacheNode.parallelRoutes),\n loading: existingCacheNode.loading\n };\n } else {\n // No data available for this node. This will trigger a lazy fetch\n // during render.\n newCacheNode = {\n lazyData: null,\n rsc: null,\n prefetchRsc: null,\n head: null,\n prefetchHead: null,\n parallelRoutes: new Map(existingCacheNode == null ? void 0 : existingCacheNode.parallelRoutes),\n loading: null,\n navigatedAt\n };\n }\n // Overrides the cache key with the new cache node.\n parallelRouteCacheNode.set(cacheKey, newCacheNode);\n // Traverse deeper to apply the head / fill lazy items till the head.\n fillLazyItemsTillLeafWithHead(navigatedAt, newCacheNode, existingCacheNode, parallelRouteState, parallelSeedData ? parallelSeedData : null, head, prefetchEntry);\n newCache.parallelRoutes.set(key, parallelRouteCacheNode);\n continue;\n }\n }\n let newCacheNode;\n if (parallelSeedData !== null) {\n // New data was sent from the server.\n const seedNode = parallelSeedData[1];\n const loading = parallelSeedData[3];\n newCacheNode = {\n lazyData: null,\n rsc: seedNode,\n prefetchRsc: null,\n head: null,\n prefetchHead: null,\n parallelRoutes: new Map(),\n loading,\n navigatedAt\n };\n } else {\n // No data available for this node. This will trigger a lazy fetch\n // during render.\n newCacheNode = {\n lazyData: null,\n rsc: null,\n prefetchRsc: null,\n head: null,\n prefetchHead: null,\n parallelRoutes: new Map(),\n loading: null,\n navigatedAt\n };\n }\n const existingParallelRoutes = newCache.parallelRoutes.get(key);\n if (existingParallelRoutes) {\n existingParallelRoutes.set(cacheKey, newCacheNode);\n } else {\n newCache.parallelRoutes.set(key, new Map([\n [\n cacheKey,\n newCacheNode\n ]\n ]));\n }\n fillLazyItemsTillLeafWithHead(navigatedAt, newCacheNode, undefined, parallelRouteState, parallelSeedData, head, prefetchEntry);\n }\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=fill-lazy-items-till-leaf-with-head.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvZmlsbC1sYXp5LWl0ZW1zLXRpbGwtbGVhZi13aXRoLWhlYWQuanMiLCJtYXBwaW5ncyI6Ijs7OztpRUFXZ0JBOzs7ZUFBQUE7OztrREFOcUI7Z0RBSTlCO0FBRUEsU0FBU0EsOEJBQ2RDLFdBQW1CLEVBQ25CQyxRQUFtQixFQUNuQkMsYUFBb0MsRUFDcENDLFdBQThCLEVBQzlCQyxpQkFBMkMsRUFDM0NDLElBQXFCLEVBQ3JCQyxhQUE2QztJQUU3QyxNQUFNQyxnQkFBZ0JDLE9BQU9DLElBQUksQ0FBQ04sV0FBVyxDQUFDLEVBQUUsRUFBRU8sTUFBTSxLQUFLO0lBQzdELElBQUlILGVBQWU7UUFDakJOLFNBQVNJLElBQUksR0FBR0E7UUFDaEI7SUFDRjtJQUNBLHVGQUF1RjtJQUN2RixJQUFLLE1BQU1NLE9BQU9SLFdBQVcsQ0FBQyxFQUFFLENBQUU7UUFDaEMsTUFBTVMscUJBQXFCVCxXQUFXLENBQUMsRUFBRSxDQUFDUSxJQUFJO1FBQzlDLE1BQU1FLDBCQUEwQkQsa0JBQWtCLENBQUMsRUFBRTtRQUNyRCxNQUFNRSxXQUFXQyxDQUFBQSxHQUFBQSxzQkFBQUEsb0JBQUFBLEVBQXFCRjtRQUV0Qyw0RUFBNEU7UUFDNUUsMkVBQTJFO1FBQzNFLHdFQUF3RTtRQUN4RSx3RUFBd0U7UUFDeEUsMEVBQTBFO1FBQzFFLHFCQUFxQjtRQUNyQixFQUFFO1FBQ0YsMEVBQTBFO1FBQzFFLHdFQUF3RTtRQUN4RSxrRUFBa0U7UUFDbEUsTUFBTUcsbUJBQ0paLHNCQUFzQixRQUFRQSxpQkFBaUIsQ0FBQyxFQUFFLENBQUNPLElBQUksS0FBS00sWUFDeERiLGlCQUFpQixDQUFDLEVBQUUsQ0FBQ08sSUFBSSxHQUN6QjtRQUNOLElBQUlULGVBQWU7WUFDakIsTUFBTWdCLGtDQUNKaEIsY0FBY2lCLGNBQWMsQ0FBQ0MsR0FBRyxDQUFDVDtZ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QUN2QyxPQUFPO1lBQ0w1QixTQUFTa0IsY0FBYyxDQUFDaUIsR0FBRyxDQUFDekIsS0FBSyxJQUFJZ0IsSUFBSTtnQkFBQztvQkFBQ2I7b0JBQVVlO2lCQUFhO2FBQUM7UUFDckU7UUFFQTlCLDhCQUNFQyxhQUNBNkIsY0FDQVosV0FDQUwsb0JBQ0FJLGtCQUNBWCxNQUNBQztJQUVKO0FBQ0YiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9maWxsLWxhenktaXRlbXMtdGlsbC1sZWFmLXdpdGgtaGVhZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENhY2hlTm9kZSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9saWIvYXBwLXJvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHR5cGUge1xuICBGbGlnaHRSb3V0ZXJTdGF0ZSxcbiAgQ2FjaGVOb2RlU2VlZERhdGEsXG59IGZyb20gJy4uLy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL3R5cGVzJ1xuaW1wb3J0IHsgY3JlYXRlUm91dGVyQ2FjaGVLZXkgfSBmcm9tICcuL2NyZWF0ZS1yb3V0ZXItY2FjaGUta2V5J1xuaW1wb3J0IHtcbiAgUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzLFxuICB0eXBlIFByZWZldGNoQ2FjaGVFbnRyeSxcbn0gZnJvbSAnLi9yb3V0ZXItcmVkdWNlci10eXBlcydcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbGxMYXp5SXRlbXNUaWxsTGVhZldpdGhIZWFkKFxuICBuYXZpZ2F0ZWRBdDogbnVtYmVyLFxuICBuZXdDYWNoZTogQ2FjaGVOb2RlLFxuICBleGlzdGluZ0NhY2hlOiBDYWNoZU5vZGUgfCB1bmRlZmluZWQsXG4gIHJvdXRlclN0YXRlOiBGbGlnaHRSb3V0ZXJTdGF0ZSxcbiAgY2FjaGVOb2RlU2VlZERhdGE6IENhY2hlTm9kZVNlZWREYXRhIHwgbnVsbCxcbiAgaGVhZDogUmVhY3QuUmVhY3ROb2RlLFxuICBwcmVmZXRjaEVudHJ5OiBQcmVmZXRjaENhY2hlRW50cnkgfCB1bmRlZmluZWRcbik6IHZvaWQge1xuICBjb25zdCBpc0xhc3RTZWdtZW50ID0gT2JqZWN0LmtleXMocm91dGVyU3RhdGVbMV0pLmxlbmd0aCA9PT0gMFxuICBpZiAoaXNMYXN0U2VnbWVudCkge1xuICAgIG5ld0NhY2hlLmhlYWQgPSBoZWFkXG4gICAgcmV0dXJuXG4gIH1cbiAgLy8gUmVtb3ZlIHNlZ21lbnQgdGhhdCB3ZSBnb3QgZGF0YSBmb3Igc28gdGhhdCBpdCBpcyBmaWxsZWQgaW4gZHVyaW5nIHJlbmRlcmluZyBvZiByc2MuXG4gIGZvciAoY29uc3Qga2V5IGluIHJvdXRlclN0YXRlWzFdKSB7XG4gICAgY29uc3QgcGFyYWxsZWxSb3V0ZVN0YXRlID0gcm91dGVyU3RhdGVbMV1ba2V5XVxuICAgIGNvbnN0IHNlZ21lbnRGb3JQYXJhbGxlbFJvdXRlID0gcGFyYWxsZWxSb3V0ZVN0YXRlWzBdXG4gICAgY29uc3QgY2FjaGVLZXkgPSBjcmVhdGVSb3V0ZXJDYWNoZUtleShzZWdtZW50Rm9yUGFyYWxsZWxSb3V0ZSlcblxuICAgIC8vIFRPRE86IFdlIHNob3VsZCB0cmF2ZXJzZSB0aGUgY2FjaGVOb2RlU2VlZERhdGEgdHJlZSBpbnN0ZWFkIG9mIHRoZSByb3V0ZXJcbiAgICAvLyBzdGF0ZSB0cmVlLiBJZGVhbGx5LCB0aGV5IHdvdWxkIGFsd2F5cyBiZSB0aGUgc2FtZSBzaGFwZSwgYnV0IGJlY2F1c2Ugb2ZcbiAgICAvLyB0aGUgbG9hZGluZy5qcyBwYXR0ZXJuLCBjYWNoZU5vZGVTZWVkRGF0YSBzb21ldGltZXMgb25seSByZXByZXNlbnRzIGFcbiAgICAvLyBwYXJ0aWFsIHRyZWUuIFRoYXQncyB3aHkgdGhpcyBub2RlIGlzIHNvbWV0aW1lcyBudWxsLiBPbmNlIFBQUiBsYW5kcyxcbiAgICAvLyBsb2FkaW5nLmpzIHdpbGwgbm8gbG9uZ2VyIGhhdmUgc3BlY2lhbCBiZWhhdmlvciBhbmQgd2UgY2FuIHRyYXZlcnNlIHRoZVxuICAgIC8vIGRhdGEgdHJlZSBpbnN0ZWFkLlxuICAgIC8vXG4gICAgLy8gV2Ugc2hvdWxkIGFsc28gY29uc2lkZXIgbWVyZ2luZyB0aGUgcm91dGVyIHN0YXRlIHRyZWUgYW5kIHRoZSBkYXRhIHRyZWVcbiAgICAvLyBpbiB0aGUgcmVzcG9uc2UgZm9ybWF0LCBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gc2VuZCB0aGUga2V5cyB0d2ljZS5cbiAgICAvLyBUaGVuIHRoZSBjbGllbnQgY2FuIGNvbnZlcnQgdGhlbSBpbnRvIHNlcGFyYXRlIHJlcHJlc2VudGF0aW9ucy5cbiAgICBjb25zdCBwYXJhbGxlbFNlZWREYXRhID1cbiAgICAgIGNhY2hlTm9kZVNlZWREYXRhICE9PSBudWxsICYmIGNhY2hlTm9kZVNlZWREYXRhWzJdW2tleV0gIT09IHVuZGVmaW5lZFxuICAgICAgICA/IGNhY2hlTm9kZVNlZWREYXRhWzJdW2tleV1cbiAgICAgICAgOiBudWxsXG4gICAgaWYgKGV4aXN0aW5nQ2FjaGUpIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nUGFyYWxsZWxSb3V0ZXNDYWNoZU5vZGUgPVxuICAgICAgICBleGlzdGluZ0NhY2hlLnBhcmFsbGVsUm91dGVzLmdldChrZXkpXG4gICAgICBpZiAoZXhpc3RpbmdQYXJhbGxlbFJvdXRlc0NhY2hlTm9kZSkge1xuICAgICAgICBjb25zdCBoYXNSZXVzYWJsZVByZWZldGNoID1cbiAgICAgICAgICBwcmVmZXRjaEVudHJ5Py5raW5kID09PSAnYXV0bycgJiZcbiAgICAgICAgICBwcmVmZXRjaEVudHJ5LnN0YXR1cyA9PT0gUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzLnJldXNhYmxlXG5cbiAgICAgICAgbGV0IHBhcmFsbGVsUm91dGVDYWNoZU5vZGUgPSBuZXcgTWFwKGV4aXN0aW5nUGFyYWxsZWxSb3V0ZXNDYWNoZU5vZGUpXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nQ2FjaGVOb2RlID0gcGFyYWxsZWxSb3V0ZUNhY2hlTm9kZS5nZXQoY2FjaGVLZXkpXG4gICAgICAgIGxldCBuZXdDYWNoZU5vZGU6IENhY2hlTm9kZVxuICAgICAgICBpZiAocGFyYWxsZWxTZWVkRGF0YSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIE5ldyBkYXRhIHdhcyBzZW50IGZyb20gdGhlIHNlcnZlci5cbiAgICAgICAgICBjb25zdCBzZWVkTm9kZSA9IHBhcmFsbGVsU2VlZERhdGFbMV1cbiAgICAgICAgICBjb25zdCBsb2FkaW5nID0gcGFyYWxsZWxTZWVkRGF0YVszXVxuICAgICAgICAgIG5ld0NhY2hlTm9kZSA9IHtcbiAgICAgICAgICAgIGxhenlEYXRhOiBudWxsLFxuICAgICAgICAgICAgcnNjOiBzZWVkTm9kZSxcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBQUFItb25seSBmaWVsZC4gV2hlbiBQUFIgaXMgZW5hYmxlZCwgd2Ugc2hvdWxkbid0IGhpdFxuICAgICAgICAgICAgLy8gdGhpcyBwYXRoIGR1cmluZyBhIG5hdmlnYXRpb24sIGJ1dCB1bnRpbCBQUFIgaXMgZnVsbHkgaW1wbGVtZW50ZWRcbiAgICAgICAgICAgIC8vIHlldCBpdCdzIHBvc3NpYmxlIHRoZSBleGlzdGluZyBub2RlIGRvZXMgaGF2ZSBhIG5vbi1udWxsXG4gICAgICAgICAgICAvLyBgcHJlZmV0Y2hSc2NgLiBBcyBhbiBpbmNyZW1lbnRhbCBzdGVwLCB3ZSdsbCBqdXN0IGRlLW9wdCB0byB0aGVcbiAgICAgICAgICAgIC8vIG9sZCBiZWhhdmlvciDigJQgbm8gUFBSIHZhbHVlLlxuICAgICAgICAgICAgcHJlZmV0Y2hSc2M6IG51bGwsXG4gICAgICAgICAgICBoZWFkOiBudWxsLFxuICAgICAgICAgICAgcHJlZmV0Y2hIZWFkOiBudWxsLFxuICAgICAgICAgICAgbG9hZGluZyxcbiAgICAgICAgICAgIHBhcmFsbGVsUm91dGVzOiBuZXcgTWFwKGV4aXN0aW5nQ2FjaGVOb2RlPy5wYXJhbGxlbFJvdXRlcyksXG4gICAgICAgICAgICBuYXZpZ2F0ZWRBdCxcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoaGFzUmV1c2FibGVQcmVmZXRjaCAmJiBleGlzdGluZ0NhY2hlTm9kZSkge1xuICAgICAgICAgIC8vIE5vIG5ldyBkYXRhIHdhcyBzZW50IGZyb20gdGhlIHNlcnZlciwgYnV0IHRoZSBleGlzdGluZyBjYWNoZSBub2RlXG4gICAgICAgICAgLy8gd2FzIHByZWZldGNoZWQsIHNvIHdlIHNob3VsZCByZXVzZSB0aGF0LlxuICAgICAgICAgIG5ld0NhY2hlTm9kZSA9IHtcbiAgICAgICAgICAgIGxhenlEYXRhOiBleGlzdGluZ0NhY2hlTm9kZS5sYXp5RGF0YSxcbiAgICAgICAgICAgIHJzYzogZXhpc3RpbmdDYWNoZU5vZGUucnNjLFxuICAgICAgICAgICAgLy8gVGhpcyBpcyBhIFBQUi1vbmx5IGZpZWxkLiBVbmxpa2UgdGhlIHByZXZpb3VzIGJyYW5jaCwgc2luY2Ugd2UncmVcbiAgICAgICAgICAgIC8vIGp1c3QgY2xvbmluZyB0aGUgZXhpc3RpbmcgY2FjaGUgbm9kZSwgd2UgbWlnaHQgYXMgd2VsbCBrZWVwIHRoZVxuICAgICAgICAgICAgLy8gUFBSIHZhbHVlLCBpZiBpdCBleGlzdHMuXG4gICAgICAgICAgICBwcmVmZXRjaFJzYzogZXhpc3RpbmdDYWNoZU5vZGUucHJlZmV0Y2hSc2MsXG4gICAgICAgICAgICBoZWFkOiBleGlzdGluZ0NhY2hlTm9kZS5oZWFkLFxuICAgICAgICAgICAgcHJlZmV0Y2hIZWFkOiBleGlzdGluZ0NhY2hlTm9kZS5wcmVmZXRjaEhlYWQsXG4gICAgICAgICAgICBwYXJhbGxlbFJvdXRlczogbmV3IE1hcChleGlzdGluZ0NhY2hlTm9kZS5wYXJhbGxlbFJvdXRlcyksXG4gICAgICAgICAgICBsb2FkaW5nOiBleGlzdGluZ0NhY2hlTm9kZS5sb2FkaW5nLFxuICAgICAgICAgIH0gYXMgQ2FjaGVOb2RlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTm8gZGF0YSBhdmFpbGFibGUgZm9yIHRoaXMgbm9kZS4gVGhpcyB3aWxsIHRyaWdnZXIgYSBsYXp5IGZldGNoXG4gICAgICAgICAgLy8gZHVyaW5nIHJlbmRlci5cbiAgICAgICAgICBuZXdDYWNoZU5vZGUgPSB7XG4gICAgICAgICAgICBsYXp5RGF0YTogbnVsbCxcbiAgICAgICAgICAgIHJzYzogbnVsbCxcbiAgICAgICAgICAgIHByZWZldGNoUnNjOiBudWxsLFxuICAgICAgICAgICAgaGVhZDogbnVsbCxcbiAgICAgICAgICAgIHByZWZldGNoSGVhZDogbnVsbCxcbiAgICAgICAgICAgIHBhcmFsbGVsUm91dGVzOiBuZXcgTWFwKGV4aXN0aW5nQ2FjaGVOb2RlPy5wYXJhbGxlbFJvdXRlcyksXG4gICAgICAgICAgICBsb2FkaW5nOiBudWxsLFxuICAgICAgICAgICAgbmF2aWdhdGVkQXQsXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3ZlcnJpZGVzIHRoZSBjYWNoZSBrZXkgd2l0aCB0aGUgbmV3IGNhY2hlIG5vZGUuXG4gICAgICAgIHBhcmFsbGVsUm91dGVDYWNoZU5vZGUuc2V0KGNhY2hlS2V5LCBuZXdDYWNoZU5vZGUpXG4gICAgICAgIC8vIFRyYXZlcnNlIGRlZXBlciB0byBhcHBseSB0aGUgaGVhZCAvIGZpbGwgbGF6eSBpdGVtcyB0aWxsIHRoZSBoZWFkLlxuICAgICAgICBmaWxsTGF6eUl0ZW1zVGlsbExlYWZXaXRoSGVhZChcbiAgICAgICAgICBuYXZpZ2F0ZWRBdCxcbiAgICAgICAgICBuZXdDYWNoZU5vZGUsXG4gICAgICAgICAgZXhpc3RpbmdDYWNoZU5vZGUsXG4gICAgICAgICAgcGFyYWxsZWxSb3V0ZVN0YXRlLFxuICAgICAgICAgIHBhcmFsbGVsU2VlZERhdGEgPyBwYXJhbGxlbFNlZWREYXRhIDogbnVsbCxcbiAgICAgICAgICBoZWFkLFxuICAgICAgICAgIHByZWZldGNoRW50cnlcbiAgICAgICAgKVxuXG4gICAgICAgIG5ld0NhY2hlLnBhcmFsbGVsUm91dGVzLnNldChrZXksIHBhcmFsbGVsUm91dGVDYWNoZU5vZGUpXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IG5ld0NhY2hlTm9kZTogQ2FjaGVOb2RlXG4gICAgaWYgKHBhcmFsbGVsU2VlZERhdGEgIT09IG51bGwpIHtcbiAgICAgIC8vIE5ldyBkYXRhIHdhcyBzZW50IGZyb20gdGhlIHNlcnZlci5cbiAgICAgIGNvbnN0IHNlZWROb2RlID0gcGFyYWxsZWxTZWVkRGF0YVsxXVxuICAgICAgY29uc3QgbG9hZGluZyA9IHBhcmFsbGVsU2VlZERhdGFbM11cbiAgICAgIG5ld0NhY2hlTm9kZSA9IHtcbiAgICAgICAgbGF6eURhdGE6IG51bGwsXG4gICAgICAgIHJzYzogc2VlZE5vZGUsXG4gICAgICAgIHByZWZldGNoUnNjOiBudWxsLFxuICAgICAgICBoZWFkOiBudWxsLFxuICAgICAgICBwcmVmZXRjaEhlYWQ6IG51bGwsXG4gICAgICAgIHBhcmFsbGVsUm91dGVzOiBuZXcgTWFwKCksXG4gICAgICAgIGxvYWRpbmcsXG4gICAgICAgIG5hdmlnYXRlZEF0LFxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBkYXRhIGF2YWlsYWJsZSBmb3IgdGhpcyBub2RlLiBUaGlzIHdpbGwgdHJpZ2dlciBhIGxhenkgZmV0Y2hcbiAgICAgIC8vIGR1cmluZyByZW5kZXIuXG4gICAgICBuZXdDYWNoZU5vZGUgPSB7XG4gICAgICAgIGxhenlEYXRhOiBudWxsLFxuICAgICAgICByc2M6IG51bGwsXG4gICAgICAgIHByZWZldGNoUnNjOiBudWxsLFxuICAgICAgICBoZWFkOiBudWxsLFxuICAgICAgICBwcmVmZXRjaEhlYWQ6IG51bGwsXG4gICAgICAgIHBhcmFsbGVsUm91dGVzOiBuZXcgTWFwKCksXG4gICAgICAgIGxvYWRpbmc6IG51bGwsXG4gICAgICAgIG5hdmlnYXRlZEF0LFxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGV4aXN0aW5nUGFyYWxsZWxSb3V0ZXMgPSBuZXdDYWNoZS5wYXJhbGxlbFJvdXRlcy5nZXQoa2V5KVxuICAgIGlmIChleGlzdGluZ1BhcmFsbGVsUm91dGVzKSB7XG4gICAgICBleGlzdGluZ1BhcmFsbGVsUm91dGVzLnNldChjYWNoZUtleSwgbmV3Q2FjaGVOb2RlKVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdDYWNoZS5wYXJhbGxlbFJvdXRlcy5zZXQoa2V5LCBuZXcgTWFwKFtbY2FjaGVLZXksIG5ld0NhY2hlTm9kZV1dKSlcbiAgICB9XG5cbiAgICBmaWxsTGF6eUl0ZW1zVGlsbExlYWZXaXRoSGVhZChcbiAgICAgIG5hdmlnYXRlZEF0LFxuICAgICAgbmV3Q2FjaGVOb2RlLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgcGFyYWxsZWxSb3V0ZVN0YXRlLFxuICAgICAgcGFyYWxsZWxTZWVkRGF0YSxcbiAgICAgIGhlYWQsXG4gICAgICBwcmVmZXRjaEVudHJ5XG4gICAgKVxuICB9XG59XG4iXSwibmFtZXMiOlsiZmlsbExhenlJdGVtc1RpbGxMZWFmV2l0aEhlYWQiLCJuYXZpZ2F0ZWRBdCIsIm5ld0NhY2hlIiwiZXhpc3RpbmdDYWNoZSIsInJvdXRlclN0YXRlIiwiY2FjaGVOb2RlU2VlZERhdGEiLCJoZWFkIiwicHJlZmV0Y2hFbnRyeSIsImlzTGFzdFNlZ21lbnQiLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwia2V5IiwicGFyYWxsZWxSb3V0ZVN0YXRlIiwic2VnbWVudEZvclBhcmFsbGVsUm91dGUiLCJjYWNoZUtleSIsImNyZWF0ZVJvdXRlckNhY2hlS2V5IiwicGFyYWxsZWxTZWVkRGF0YSIsInVuZGVmaW5lZCIsImV4aXN0aW5nUGFyYWxsZWxSb3V0ZXNDYWNoZU5vZGUiLCJwYXJhbGxlbFJvdXRlcyIsImdldCIsImhhc1JldXNhYmxlUHJlZmV0Y2giLCJraW5kIiwic3RhdHVzIiwiUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzIiwicmV1c2FibGUiLCJwYXJhbGxlbFJvdXRlQ2FjaGVOb2RlIiwiTWFwIiwiZXhpc3RpbmdDYWNoZU5vZGUiLCJuZXdDYWNoZU5vZGUiLCJzZWVkTm9kZSIsImxvYWRpbmciLCJsYXp5RGF0YSIsInJzYyIsInByZWZldGNoUnNjIiwicHJlZmV0Y2hIZWFkIiwic2V0IiwiZXhpc3RpbmdQYXJhbGxlbFJvdXRlcyJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fill-lazy-items-till-leaf-with-head.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/handle-mutable.js":
|
||
/*!***********************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/router-reducer/handle-mutable.js ***!
|
||
\***********************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"handleMutable\", ({\n enumerable: true,\n get: function() {\n return handleMutable;\n }\n}));\nconst _computechangedpath = __webpack_require__(/*! ./compute-changed-path */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/compute-changed-path.js\");\nfunction isNotUndefined(value) {\n return typeof value !== 'undefined';\n}\nfunction handleMutable(state, mutable) {\n var _mutable_shouldScroll;\n // shouldScroll is true by default, can override to false.\n const shouldScroll = (_mutable_shouldScroll = mutable.shouldScroll) != null ? _mutable_shouldScroll : true;\n let nextUrl = state.nextUrl;\n if (isNotUndefined(mutable.patchedTree)) {\n // If we received a patched tree, we need to compute the changed path.\n const changedPath = (0, _computechangedpath.computeChangedPath)(state.tree, mutable.patchedTree);\n if (changedPath) {\n // If the tree changed, we need to update the nextUrl\n nextUrl = changedPath;\n } else if (!nextUrl) {\n // if the tree ends up being the same (ie, no changed path), and we don't have a nextUrl, then we should use the canonicalUrl\n nextUrl = state.canonicalUrl;\n }\n // otherwise this will be a no-op and continue to use the existing nextUrl\n }\n var _mutable_scrollableSegments;\n return {\n // Set href.\n canonicalUrl: isNotUndefined(mutable.canonicalUrl) ? mutable.canonicalUrl === state.canonicalUrl ? state.canonicalUrl : mutable.canonicalUrl : state.canonicalUrl,\n pushRef: {\n pendingPush: isNotUndefined(mutable.pendingPush) ? mutable.pendingPush : state.pushRef.pendingPush,\n mpaNavigation: isNotUndefined(mutable.mpaNavigation) ? mutable.mpaNavigation : state.pushRef.mpaNavigation,\n preserveCustomHistoryState: isNotUndefined(mutable.preserveCustomHistoryState) ? mutable.preserveCustomHistoryState : state.pushRef.preserveCustomHistoryState\n },\n // All navigation requires scroll and focus management to trigger.\n focusAndScrollRef: {\n apply: shouldScroll ? isNotUndefined(mutable == null ? void 0 : mutable.scrollableSegments) ? true : state.focusAndScrollRef.apply : false,\n onlyHashChange: mutable.onlyHashChange || false,\n hashFragment: shouldScroll ? mutable.hashFragment && mutable.hashFragment !== '' ? decodeURIComponent(mutable.hashFragment.slice(1)) : state.focusAndScrollRef.hashFragment : null,\n segmentPaths: shouldScroll ? (_mutable_scrollableSegments = mutable == null ? void 0 : mutable.scrollableSegments) != null ? _mutable_scrollableSegments : state.focusAndScrollRef.segmentPaths : []\n },\n // Apply cache.\n cache: mutable.cache ? mutable.cache : state.cache,\n prefetchCache: mutable.prefetchCache ? mutable.prefetchCache : state.prefetchCache,\n // Apply patched router state.\n tree: isNotUndefined(mutable.patchedTree) ? mutable.patchedTree : state.tree,\n nextUrl\n };\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=handle-mutable.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvaGFuZGxlLW11dGFibGUuanMiLCJtYXBwaW5ncyI6Ijs7OztpREFXZ0JBOzs7ZUFBQUE7OztnREFYbUI7QUFPbkMsU0FBU0MsZUFBa0JDLEtBQVE7SUFDakMsT0FBTyxPQUFPQSxVQUFVO0FBQzFCO0FBRU8sU0FBU0YsY0FDZEcsS0FBMkIsRUFDM0JDLE9BQWdCO1FBR0tBO0lBRHJCLDBEQUEwRDtJQUMxRCxNQUFNQyxlQUFlRCxDQUFBQSx3QkFBQUEsUUFBUUMsWUFBQUEsS0FBWSxPQUFwQkQsd0JBQXdCO0lBRTdDLElBQUlFLFVBQVVILE1BQU1HLE9BQU87SUFFM0IsSUFBSUwsZUFBZUcsUUFBUUcsV0FBVyxHQUFHO1FBQ3ZDLHNFQUFzRTtRQUN0RSxNQUFNQyxjQUFjQyxDQUFBQSxHQUFBQSxvQkFBQUEsa0JBQUFBLEVBQW1CTixNQUFNTyxJQUFJLEVBQUVOLFFBQVFHLFdBQVc7UUFDdEUsSUFBSUMsYUFBYTtZQUNmLHFEQUFxRDtZQUNyREYsVUFBVUU7UUFDWixPQUFPLElBQUksQ0FBQ0YsU0FBUztZQUNuQiw2SEFBNkg7WUFDN0hBLFVBQVVILE1BQU1RLFlBQVk7UUFDOUI7SUFDQSwwRUFBMEU7SUFDNUU7UUF5Q1FQO0lBdkNSLE9BQU87UUFDTCxZQUFZO1FBQ1pPLGNBQWNWLGVBQWVHLFFBQVFPLFlBQVksSUFDN0NQLFFBQVFPLFlBQVksS0FBS1IsTUFBTVEsWUFBWSxHQUN6Q1IsTUFBTVEsWUFBWSxHQUNsQlAsUUFBUU8sWUFBWSxHQUN0QlIsTUFBTVEsWUFBWTtRQUN0QkMsU0FBUztZQUNQQyxhQUFhWixlQUFlRyxRQUFRUyxXQUFXLElBQzNDVCxRQUFRUyxXQUFXLEdBQ25CVixNQUFNUyxPQUFPLENBQUNDLFdBQVc7WUFDN0JDLGVBQWViLGVBQWVHLFFBQVFVLGFBQWEsSUFDL0NWLFFBQVFVLGFBQWEsR0FDckJYLE1BQU1TLE9BQU8sQ0FBQ0UsYUFBYTtZQUMvQkMsNEJBQTRCZCxlQUMxQkcsUUFBUVcsMEJBQTBCLElBRWhDWCxRQUFRVywwQkFBMEIsR0FDbENaLE1BQU1TLE9BQU8sQ0FBQ0csMEJBQTBCO1FBQzlDO1FBQ0Esa0VBQWtFO1FBQ2xFQyxtQkFBbUI7WUFDakJDLE9BQU9aLGVBQ0hKLGVBQWVHLFdBQUFBLE9BQUFBLEtBQUFBLElBQUFBLFFBQVNjLGtCQUFrQixJQUN4QyxPQUNBZixNQUFNYSxpQkFBaUIsQ0FBQ0MsS0FBSyxHQUUvQjtZQUNKRSxnQkFBZ0JmLFFBQVFlLGNBQWMsSUFBSTtZQUMxQ0MsY0FBY2YsZUFFVixRQUNRZSxZQUFZLElBQUloQixRQUFRZ0IsSUFESSxRQUNRLEtBQUssS0FFL0NDLG1CQUFtQmpCLFFBQVFnQixZQUFZLENBQUNFLEtBQUssQ0FBQyxNQUM5Q25CLE1BQU1hLGlCQUFpQixDQUFDSSxZQUFZLEdBRXRDO1lBQ0pHLGNBQWNsQixlQUNWRCxDQUFBQSw4QkFBQUEsV0FBQUEsT0FBQUEsS0FBQUEsSUFBQUEsUUFBU2Msa0JBQUFBLEtBQWtCLE9BQTNCZCw4QkFBK0JELE1BQU1hLGlCQUFpQixDQUFDTyxZQUFZLEdBRW5FLEVBQUU7UUFDUjtRQUNBLGVBQWU7UUFDZkMsT0FBT3BCLFFBQVFvQixLQUFLLEdBQUdwQixRQUFRb0IsS0FBSyxHQUFHckIsTUFBTXFCLEtBQUs7UUFDbERDLGVBQWVyQixRQUFRcUIsYUFBYSxHQUNoQ3JCLFFBQVFxQixhQUFhLEdBQ3JCdEIsTUFBTXNCLGFBQWE7UUFDdkIsOEJBQThCO1FBQzlCZixNQUFNVCxlQUFlRyxRQUFRRyxXQUFXLElBQ3BDSCxRQUFRRyxXQUFXLEdBQ25CSixNQUFNTyxJQUFJO1FBQ2RKO0lBQ0Y7QUFDRiIsInNvdXJjZXMiOlsiL2hvbWUvc3JjL2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2hhbmRsZS1tdXRhYmxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXB1dGVDaGFuZ2VkUGF0aCB9IGZyb20gJy4vY29tcHV0ZS1jaGFuZ2VkLXBhdGgnXG5pbXBvcnQgdHlwZSB7XG4gIE11dGFibGUsXG4gIFJlYWRvbmx5UmVkdWNlclN0YXRlLFxuICBSZWR1Y2VyU3RhdGUsXG59IGZyb20gJy4vcm91dGVyLXJlZHVjZXItdHlwZXMnXG5cbmZ1bmN0aW9uIGlzTm90VW5kZWZpbmVkPFQ+KHZhbHVlOiBUKTogdmFsdWUgaXMgRXhjbHVkZTxULCB1bmRlZmluZWQ+IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZU11dGFibGUoXG4gIHN0YXRlOiBSZWFkb25seVJlZHVjZXJTdGF0ZSxcbiAgbXV0YWJsZTogTXV0YWJsZVxuKTogUmVkdWNlclN0YXRlIHtcbiAgLy8gc2hvdWxkU2Nyb2xsIGlzIHRydWUgYnkgZGVmYXVsdCwgY2FuIG92ZXJyaWRlIHRvIGZhbHNlLlxuICBjb25zdCBzaG91bGRTY3JvbGwgPSBtdXRhYmxlLnNob3VsZFNjcm9sbCA/PyB0cnVlXG5cbiAgbGV0IG5leHRVcmwgPSBzdGF0ZS5uZXh0VXJsXG5cbiAgaWYgKGlzTm90VW5kZWZpbmVkKG11dGFibGUucGF0Y2hlZFRyZWUpKSB7XG4gICAgLy8gSWYgd2UgcmVjZWl2ZWQgYSBwYXRjaGVkIHRyZWUsIHdlIG5lZWQgdG8gY29tcHV0ZSB0aGUgY2hhbmdlZCBwYXRoLlxuICAgIGNvbnN0IGNoYW5nZWRQYXRoID0gY29tcHV0ZUNoYW5nZWRQYXRoKHN0YXRlLnRyZWUsIG11dGFibGUucGF0Y2hlZFRyZWUpXG4gICAgaWYgKGNoYW5nZWRQYXRoKSB7XG4gICAgICAvLyBJZiB0aGUgdHJlZSBjaGFuZ2VkLCB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgbmV4dFVybFxuICAgICAgbmV4dFVybCA9IGNoYW5nZWRQYXRoXG4gICAgfSBlbHNlIGlmICghbmV4dFVybCkge1xuICAgICAgLy8gaWYgdGhlIHRyZWUgZW5kcyB1cCBiZWluZyB0aGUgc2FtZSAoaWUsIG5vIGNoYW5nZWQgcGF0aCksIGFuZCB3ZSBkb24ndCBoYXZlIGEgbmV4dFVybCwgdGhlbiB3ZSBzaG91bGQgdXNlIHRoZSBjYW5vbmljYWxVcmxcbiAgICAgIG5leHRVcmwgPSBzdGF0ZS5jYW5vbmljYWxVcmxcbiAgICB9XG4gICAgLy8gb3RoZXJ3aXNlIHRoaXMgd2lsbCBiZSBhIG5vLW9wIGFuZCBjb250aW51ZSB0byB1c2UgdGhlIGV4aXN0aW5nIG5leHRVcmxcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLy8gU2V0IGhyZWYuXG4gICAgY2Fub25pY2FsVXJsOiBpc05vdFVuZGVmaW5lZChtdXRhYmxlLmNhbm9uaWNhbFVybClcbiAgICAgID8gbXV0YWJsZS5jYW5vbmljYWxVcmwgPT09IHN0YXRlLmNhbm9uaWNhbFVybFxuICAgICAgICA/IHN0YXRlLmNhbm9uaWNhbFVybFxuICAgICAgICA6IG11dGFibGUuY2Fub25pY2FsVXJsXG4gICAgICA6IHN0YXRlLmNhbm9uaWNhbFVybCxcbiAgICBwdXNoUmVmOiB7XG4gICAgICBwZW5kaW5nUHVzaDogaXNOb3RVbmRlZmluZWQobXV0YWJsZS5wZW5kaW5nUHVzaClcbiAgICAgICAgPyBtdXRhYmxlLnBlbmRpbmdQdXNoXG4gICAgICAgIDogc3RhdGUucHVzaFJlZi5wZW5kaW5nUHVzaCxcbiAgICAgIG1wYU5hdmlnYXRpb246IGlzTm90VW5kZWZpbmVkKG11dGFibGUubXBhTmF2aWdhdGlvbilcbiAgICAgICAgPyBtdXRhYmxlLm1wYU5hdmlnYXRpb25cbiAgICAgICAgOiBzdGF0ZS5wdXNoUmVmLm1wYU5hdmlnYXRpb24sXG4gICAgICBwcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZTogaXNOb3RVbmRlZmluZWQoXG4gICAgICAgIG11dGFibGUucHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGVcbiAgICAgIClcbiAgICAgICAgPyBtdXRhYmxlLnByZXNlcnZlQ3VzdG9tSGlzdG9yeVN0YXRlXG4gICAgICAgIDogc3RhdGUucHVzaFJlZi5wcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZSxcbiAgICB9LFxuICAgIC8vIEFsbCBuYXZpZ2F0aW9uIHJlcXVpcmVzIHNjcm9sbCBhbmQgZm9jdXMgbWFuYWdlbWVudCB0byB0cmlnZ2VyLlxuICAgIGZvY3VzQW5kU2Nyb2xsUmVmOiB7XG4gICAgICBhcHBseTogc2hvdWxkU2Nyb2xsXG4gICAgICAgID8gaXNOb3RVbmRlZmluZWQobXV0YWJsZT8uc2Nyb2xsYWJsZVNlZ21lbnRzKVxuICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgIDogc3RhdGUuZm9jdXNBbmRTY3JvbGxSZWYuYXBwbHlcbiAgICAgICAgOiAvLyBJZiBzaG91bGRTY3JvbGwgaXMgZmFsc2UgdGhlbiB3ZSBzaG91bGQgbm90IGFwcGx5IHNjcm9sbCBhbmQgZm9jdXMgbWFuYWdlbWVudC5cbiAgICAgICAgICBmYWxzZSxcbiAgICAgIG9ubHlIYXNoQ2hhbmdlOiBtdXRhYmxlLm9ubHlIYXNoQ2hhbmdlIHx8IGZhbHNlLFxuICAgICAgaGFzaEZyYWdtZW50OiBzaG91bGRTY3JvbGxcbiAgICAgICAgPyAvLyBFbXB0eSBoYXNoIHNob3VsZCB0cmlnZ2VyIGRlZmF1bHQgYmVoYXZpb3Igb2Ygc2Nyb2xsaW5nIGxheW91dCBpbnRvIHZpZXcuXG4gICAgICAgICAgLy8gI3RvcCBpcyBoYW5kbGVkIGluIGxheW91dC1yb3V0ZXIuXG4gICAgICAgICAgbXV0YWJsZS5oYXNoRnJhZ21lbnQgJiYgbXV0YWJsZS5oYXNoRnJhZ21lbnQgIT09ICcnXG4gICAgICAgICAgPyAvLyBSZW1vdmUgbGVhZGluZyAjIGFuZCBkZWNvZGUgaGFzaCB0byBtYWtlIG5vbi1sYXRpbiBoYXNoZXMgd29yay5cbiAgICAgICAgICAgIGRlY29kZVVSSUNvbXBvbmVudChtdXRhYmxlLmhhc2hGcmFnbWVudC5zbGljZSgxKSlcbiAgICAgICAgICA6IHN0YXRlLmZvY3VzQW5kU2Nyb2xsUmVmLmhhc2hGcmFnbWVudFxuICAgICAgICA6IC8vIElmIHNob3VsZFNjcm9sbCBpcyBmYWxzZSB0aGVuIHdlIHNob3VsZCBub3QgYXBwbHkgc2Nyb2xsIGFuZCBmb2N1cyBtYW5hZ2VtZW50LlxuICAgICAgICAgIG51bGwsXG4gICAgICBzZWdtZW50UGF0aHM6IHNob3VsZFNjcm9sbFxuICAgICAgICA/IG11dGFibGU/LnNjcm9sbGFibGVTZWdtZW50cyA/PyBzdGF0ZS5mb2N1c0FuZFNjcm9sbFJlZi5zZWdtZW50UGF0aHNcbiAgICAgICAgOiAvLyBJZiBzaG91bGRTY3JvbGwgaXMgZmFsc2UgdGhlbiB3ZSBzaG91bGQgbm90IGFwcGx5IHNjcm9sbCBhbmQgZm9jdXMgbWFuYWdlbWVudC5cbiAgICAgICAgICBbXSxcbiAgICB9LFxuICAgIC8vIEFwcGx5IGNhY2hlLlxuICAgIGNhY2hlOiBtdXRhYmxlLmNhY2hlID8gbXV0YWJsZS5jYWNoZSA6IHN0YXRlLmNhY2hlLFxuICAgIHByZWZldGNoQ2FjaGU6IG11dGFibGUucHJlZmV0Y2hDYWNoZVxuICAgICAgPyBtdXRhYmxlLnByZWZldGNoQ2FjaGVcbiAgICAgIDogc3RhdGUucHJlZmV0Y2hDYWNoZSxcbiAgICAvLyBBcHBseSBwYXRjaGVkIHJvdXRlciBzdGF0ZS5cbiAgICB0cmVlOiBpc05vdFVuZGVmaW5lZChtdXRhYmxlLnBhdGNoZWRUcmVlKVxuICAgICAgPyBtdXRhYmxlLnBhdGNoZWRUcmVlXG4gICAgICA6IHN0YXRlLnRyZWUsXG4gICAgbmV4dFVybCxcbiAgfVxufVxuIl0sIm5hbWVzIjpbImhhbmRsZU11dGFibGUiLCJpc05vdFVuZGVmaW5lZCIsInZhbHVlIiwic3RhdGUiLCJtdXRhYmxlIiwic2hvdWxkU2Nyb2xsIiwibmV4dFVybCIsInBhdGNoZWRUcmVlIiwiY2hhbmdlZFBhdGgiLCJjb21wdXRlQ2hhbmdlZFBhdGgiLCJ0cmVlIiwiY2Fub25pY2FsVXJsIiwicHVzaFJlZiIsInBlbmRpbmdQdXNoIiwibXBhTmF2aWdhdGlvbiIsInByZXNlcnZlQ3VzdG9tSGlzdG9yeVN0YXRlIiwiZm9jdXNBbmRTY3JvbGxSZWYiLCJhcHBseSIsInNjcm9sbGFibGVTZWdtZW50cyIsIm9ubHlIYXNoQ2hhbmdlIiwiaGFzaEZyYWdtZW50IiwiZGVjb2RlVVJJQ29tcG9uZW50Iiwic2xpY2UiLCJzZWdtZW50UGF0aHMiLCJjYWNoZSIsInByZWZldGNoQ2FjaGUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/handle-mutable.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/handle-segment-mismatch.js":
|
||
/*!********************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/router-reducer/handle-segment-mismatch.js ***!
|
||
\********************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"handleSegmentMismatch\", ({\n enumerable: true,\n get: function() {\n return handleSegmentMismatch;\n }\n}));\nconst _navigatereducer = __webpack_require__(/*! ./reducers/navigate-reducer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js\");\nfunction handleSegmentMismatch(state, action, treePatch) {\n if (true) {\n console.warn('Performing hard navigation because your application experienced an unrecoverable error. If this keeps occurring, please file a Next.js issue.\\n\\n' + 'Reason: Segment mismatch\\n' + (\"Last Action: \" + action.type + \"\\n\\n\") + (\"Current Tree: \" + JSON.stringify(state.tree) + \"\\n\\n\") + (\"Tree Patch Payload: \" + JSON.stringify(treePatch)));\n }\n return (0, _navigatereducer.handleExternalUrl)(state, {}, state.canonicalUrl, true);\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=handle-segment-mismatch.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvaGFuZGxlLXNlZ21lbnQtbWlzbWF0Y2guanMiLCJtYXBwaW5ncyI6Ijs7Ozt5REFXZ0JBOzs7ZUFBQUE7Ozs2Q0FWa0I7QUFVM0IsU0FBU0Esc0JBQ2RDLEtBQTJCLEVBQzNCQyxNQUFzQixFQUN0QkMsU0FBNEI7SUFFNUIsSUFBSUMsSUFBb0IsRUFBb0I7UUFDMUNHLFFBQVFDLElBQUksQ0FDVixzSkFDRSwrQkFDQSxDQUFDLGtCQUFlTixPQUFPTyxJQUFJLEdBQUMsT0FBSSxJQUNoQyxtQkFBaUJDLEtBQUtDLFNBQVMsQ0FBQ1YsTUFBTVcsSUFBSSxJQUFFLE9BQUksSUFDaEQseUJBQXVCRixLQUFLQyxTQUFTLENBQUNSLFVBQUFBLENBQVc7SUFFdkQ7SUFFQSxPQUFPVSxDQUFBQSxHQUFBQSxpQkFBQUEsaUJBQUFBLEVBQWtCWixPQUFPLENBQUMsR0FBR0EsTUFBTWEsWUFBWSxFQUFFO0FBQzFEIiwic291cmNlcyI6WyIvaG9tZS9zcmMvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvaGFuZGxlLXNlZ21lbnQtbWlzbWF0Y2gudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBGbGlnaHRSb3V0ZXJTdGF0ZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL3R5cGVzJ1xuaW1wb3J0IHsgaGFuZGxlRXh0ZXJuYWxVcmwgfSBmcm9tICcuL3JlZHVjZXJzL25hdmlnYXRlLXJlZHVjZXInXG5pbXBvcnQgdHlwZSB7XG4gIFJlYWRvbmx5UmVkdWNlclN0YXRlLFxuICBSZWR1Y2VyQWN0aW9ucyxcbn0gZnJvbSAnLi9yb3V0ZXItcmVkdWNlci10eXBlcydcblxuLyoqXG4gKiBIYW5kbGVzIHRoZSBjYXNlIHdoZXJlIHRoZSBjbGllbnQgcm91dGVyIGF0dGVtcHRlZCB0byBwYXRjaCB0aGUgdHJlZSBidXQsIGR1ZSB0byBhIG1pc21hdGNoLCB0aGUgcGF0Y2ggZmFpbGVkLlxuICogVGhpcyB3aWxsIHBlcmZvcm0gYW4gTVBBIG5hdmlnYXRpb24gdG8gcmV0dXJuIHRoZSByb3V0ZXIgdG8gYSB2YWxpZCBzdGF0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZVNlZ21lbnRNaXNtYXRjaChcbiAgc3RhdGU6IFJlYWRvbmx5UmVkdWNlclN0YXRlLFxuICBhY3Rpb246IFJlZHVjZXJBY3Rpb25zLFxuICB0cmVlUGF0Y2g6IEZsaWdodFJvdXRlclN0YXRlXG4pIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgJ1BlcmZvcm1pbmcgaGFyZCBuYXZpZ2F0aW9uIGJlY2F1c2UgeW91ciBhcHBsaWNhdGlvbiBleHBlcmllbmNlZCBhbiB1bnJlY292ZXJhYmxlIGVycm9yLiBJZiB0aGlzIGtlZXBzIG9jY3VycmluZywgcGxlYXNlIGZpbGUgYSBOZXh0LmpzIGlzc3VlLlxcblxcbicgK1xuICAgICAgICAnUmVhc29uOiBTZWdtZW50IG1pc21hdGNoXFxuJyArXG4gICAgICAgIGBMYXN0IEFjdGlvbjogJHthY3Rpb24udHlwZX1cXG5cXG5gICtcbiAgICAgICAgYEN1cnJlbnQgVHJlZTogJHtKU09OLnN0cmluZ2lmeShzdGF0ZS50cmVlKX1cXG5cXG5gICtcbiAgICAgICAgYFRyZWUgUGF0Y2ggUGF5bG9hZDogJHtKU09OLnN0cmluZ2lmeSh0cmVlUGF0Y2gpfWBcbiAgICApXG4gIH1cblxuICByZXR1cm4gaGFuZGxlRXh0ZXJuYWxVcmwoc3RhdGUsIHt9LCBzdGF0ZS5jYW5vbmljYWxVcmwsIHRydWUpXG59XG4iXSwibmFtZXMiOlsiaGFuZGxlU2VnbWVudE1pc21hdGNoIiwic3RhdGUiLCJhY3Rpb24iLCJ0cmVlUGF0Y2giLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJjb25zb2xlIiwid2FybiIsInR5cGUiLCJKU09OIiwic3RyaW5naWZ5IiwidHJlZSIsImhhbmRsZUV4dGVybmFsVXJsIiwiY2Fub25pY2FsVXJsIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/handle-segment-mismatch.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/invalidate-cache-below-flight-segmentpath.js":
|
||
/*!**************************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/router-reducer/invalidate-cache-below-flight-segmentpath.js ***!
|
||
\**************************************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"invalidateCacheBelowFlightSegmentPath\", ({\n enumerable: true,\n get: function() {\n return invalidateCacheBelowFlightSegmentPath;\n }\n}));\nconst _createroutercachekey = __webpack_require__(/*! ./create-router-cache-key */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\");\nconst _flightdatahelpers = __webpack_require__(/*! ../../flight-data-helpers */ \"(app-pages-browser)/./node_modules/next/dist/client/flight-data-helpers.js\");\nfunction invalidateCacheBelowFlightSegmentPath(newCache, existingCache, flightSegmentPath) {\n const isLastEntry = flightSegmentPath.length <= 2;\n const [parallelRouteKey, segment] = flightSegmentPath;\n const cacheKey = (0, _createroutercachekey.createRouterCacheKey)(segment);\n const existingChildSegmentMap = existingCache.parallelRoutes.get(parallelRouteKey);\n if (!existingChildSegmentMap) {\n // Bailout because the existing cache does not have the path to the leaf node\n // Will trigger lazy fetch in layout-router because of missing segment\n return;\n }\n let childSegmentMap = newCache.parallelRoutes.get(parallelRouteKey);\n if (!childSegmentMap || childSegmentMap === existingChildSegmentMap) {\n childSegmentMap = new Map(existingChildSegmentMap);\n newCache.parallelRoutes.set(parallelRouteKey, childSegmentMap);\n }\n // In case of last entry don't copy further down.\n if (isLastEntry) {\n childSegmentMap.delete(cacheKey);\n return;\n }\n const existingChildCacheNode = existingChildSegmentMap.get(cacheKey);\n let childCacheNode = childSegmentMap.get(cacheKey);\n if (!childCacheNode || !existingChildCacheNode) {\n // Bailout because the existing cache does not have the path to the leaf node\n // Will trigger lazy fetch in layout-router because of missing segment\n return;\n }\n if (childCacheNode === existingChildCacheNode) {\n childCacheNode = {\n lazyData: childCacheNode.lazyData,\n rsc: childCacheNode.rsc,\n prefetchRsc: childCacheNode.prefetchRsc,\n head: childCacheNode.head,\n prefetchHead: childCacheNode.prefetchHead,\n parallelRoutes: new Map(childCacheNode.parallelRoutes)\n };\n childSegmentMap.set(cacheKey, childCacheNode);\n }\n invalidateCacheBelowFlightSegmentPath(childCacheNode, existingChildCacheNode, (0, _flightdatahelpers.getNextFlightSegmentPath)(flightSegmentPath));\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=invalidate-cache-below-flight-segmentpath.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvaW52YWxpZGF0ZS1jYWNoZS1iZWxvdy1mbGlnaHQtc2VnbWVudHBhdGguanMiLCJtYXBwaW5ncyI6Ijs7Ozt5RUFRZ0JBOzs7ZUFBQUE7OztrREFOcUI7K0NBQ0k7QUFLbEMsU0FBU0Esc0NBQ2RDLFFBQW1CLEVBQ25CQyxhQUF3QixFQUN4QkMsaUJBQW9DO0lBRXBDLE1BQU1DLGNBQWNELGtCQUFrQkUsTUFBTSxJQUFJO0lBQ2hELE1BQU0sQ0FBQ0Msa0JBQWtCQyxRQUFRLEdBQUdKO0lBRXBDLE1BQU1LLFdBQVdDLENBQUFBLEdBQUFBLHNCQUFBQSxvQkFBQUEsRUFBcUJGO0lBRXRDLE1BQU1HLDBCQUNKUixjQUFjUyxjQUFjLENBQUNDLEdBQUcsQ0FBQ047SUFFbkMsSUFBSSxDQUFDSSx5QkFBeUI7UUFDNUIsNkVBQTZFO1FBQzdFLHNFQUFzRTtRQUN0RTtJQUNGO0lBRUEsSUFBSUcsa0JBQWtCWixTQUFTVSxjQUFjLENBQUNDLEdBQUcsQ0FBQ047SUFDbEQsSUFBSSxDQUFDTyxtQkFBbUJBLG9CQUFvQkgseUJBQXlCO1FBQ25FRyxrQkFBa0IsSUFBSUMsSUFBSUo7UUFDMUJULFNBQVNVLGNBQWMsQ0FBQ0ksR0FBRyxDQUFDVCxrQkFBa0JPO0lBQ2hEO0lBRUEsaURBQWlEO0lBQ2pELElBQUlULGFBQWE7UUFDZlMsZ0JBQWdCRyxNQUFNLENBQUNSO1FBQ3ZCO0lBQ0Y7SUFFQSxNQUFNUyx5QkFBeUJQLHdCQUF3QkUsR0FBRyxDQUFDSjtJQUMzRCxJQUFJVSxpQkFBaUJMLGdCQUFnQkQsR0FBRyxDQUFDSjtJQUV6QyxJQUFJLENBQUNVLGtCQUFrQixDQUFDRCx3QkFBd0I7UUFDOUMsNkVBQTZFO1FBQzdFLHNFQUFzRTtRQUN0RTtJQUNGO0lBRUEsSUFBSUMsbUJBQW1CRCx3QkFBd0I7UUFDN0NDLGlCQUFpQjtZQUNmQyxVQUFVRCxlQUFlQyxRQUFRO1lBQ2pDQyxLQUFLRixlQUFlRSxHQUFHO1lBQ3ZCQyxhQUFhSCxlQUFlRyxXQUFXO1lBQ3ZDQyxNQUFNSixlQUFlSSxJQUFJO1lBQ3pCQyxjQUFjTCxlQUFlSyxZQUFZO1lBQ3pDWixnQkFBZ0IsSUFBSUcsSUFBSUksZUFBZVAsY0FBYztRQUN2RDtRQUNBRSxnQkFBZ0JFLEdBQUcsQ0FBQ1AsVUFBVVU7SUFDaEM7SUFFQWxCLHNDQUNFa0IsZ0JBQ0FELHdCQUNBTyxDQUFBQSxHQUFBQSxtQkFBQUEsd0JBQUFBLEVBQXlCckI7QUFFN0IiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9pbnZhbGlkYXRlLWNhY2hlLWJlbG93LWZsaWdodC1zZWdtZW50cGF0aC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENhY2hlTm9kZSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9saWIvYXBwLXJvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHR5cGUgeyBGbGlnaHRTZWdtZW50UGF0aCB9IGZyb20gJy4uLy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL3R5cGVzJ1xuaW1wb3J0IHsgY3JlYXRlUm91dGVyQ2FjaGVLZXkgfSBmcm9tICcuL2NyZWF0ZS1yb3V0ZXItY2FjaGUta2V5J1xuaW1wb3J0IHsgZ2V0TmV4dEZsaWdodFNlZ21lbnRQYXRoIH0gZnJvbSAnLi4vLi4vZmxpZ2h0LWRhdGEtaGVscGVycydcblxuLyoqXG4gKiBGaWxsIGNhY2hlIHVwIHRvIHRoZSBlbmQgb2YgdGhlIGZsaWdodFNlZ21lbnRQYXRoLCBpbnZhbGlkYXRpbmcgYW55dGhpbmcgYmVsb3cgaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZhbGlkYXRlQ2FjaGVCZWxvd0ZsaWdodFNlZ21lbnRQYXRoKFxuICBuZXdDYWNoZTogQ2FjaGVOb2RlLFxuICBleGlzdGluZ0NhY2hlOiBDYWNoZU5vZGUsXG4gIGZsaWdodFNlZ21lbnRQYXRoOiBGbGlnaHRTZWdtZW50UGF0aFxuKTogdm9pZCB7XG4gIGNvbnN0IGlzTGFzdEVudHJ5ID0gZmxpZ2h0U2VnbWVudFBhdGgubGVuZ3RoIDw9IDJcbiAgY29uc3QgW3BhcmFsbGVsUm91dGVLZXksIHNlZ21lbnRdID0gZmxpZ2h0U2VnbWVudFBhdGhcblxuICBjb25zdCBjYWNoZUtleSA9IGNyZWF0ZVJvdXRlckNhY2hlS2V5KHNlZ21lbnQpXG5cbiAgY29uc3QgZXhpc3RpbmdDaGlsZFNlZ21lbnRNYXAgPVxuICAgIGV4aXN0aW5nQ2FjaGUucGFyYWxsZWxSb3V0ZXMuZ2V0KHBhcmFsbGVsUm91dGVLZXkpXG5cbiAgaWYgKCFleGlzdGluZ0NoaWxkU2VnbWVudE1hcCkge1xuICAgIC8vIEJhaWxvdXQgYmVjYXVzZSB0aGUgZXhpc3RpbmcgY2FjaGUgZG9lcyBub3QgaGF2ZSB0aGUgcGF0aCB0byB0aGUgbGVhZiBub2RlXG4gICAgLy8gV2lsbCB0cmlnZ2VyIGxhenkgZmV0Y2ggaW4gbGF5b3V0LXJvdXRlciBiZWNhdXNlIG9mIG1pc3Npbmcgc2VnbWVudFxuICAgIHJldHVyblxuICB9XG5cbiAgbGV0IGNoaWxkU2VnbWVudE1hcCA9IG5ld0NhY2hlLnBhcmFsbGVsUm91dGVzLmdldChwYXJhbGxlbFJvdXRlS2V5KVxuICBpZiAoIWNoaWxkU2VnbWVudE1hcCB8fCBjaGlsZFNlZ21lbnRNYXAgPT09IGV4aXN0aW5nQ2hpbGRTZWdtZW50TWFwKSB7XG4gICAgY2hpbGRTZWdtZW50TWFwID0gbmV3IE1hcChleGlzdGluZ0NoaWxkU2VnbWVudE1hcClcbiAgICBuZXdDYWNoZS5wYXJhbGxlbFJvdXRlcy5zZXQocGFyYWxsZWxSb3V0ZUtleSwgY2hpbGRTZWdtZW50TWFwKVxuICB9XG5cbiAgLy8gSW4gY2FzZSBvZiBsYXN0IGVudHJ5IGRvbid0IGNvcHkgZnVydGhlciBkb3duLlxuICBpZiAoaXNMYXN0RW50cnkpIHtcbiAgICBjaGlsZFNlZ21lbnRNYXAuZGVsZXRlKGNhY2hlS2V5KVxuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgZXhpc3RpbmdDaGlsZENhY2hlTm9kZSA9IGV4aXN0aW5nQ2hpbGRTZWdtZW50TWFwLmdldChjYWNoZUtleSlcbiAgbGV0IGNoaWxkQ2FjaGVOb2RlID0gY2hpbGRTZWdtZW50TWFwLmdldChjYWNoZUtleSlcblxuICBpZiAoIWNoaWxkQ2FjaGVOb2RlIHx8ICFleGlzdGluZ0NoaWxkQ2FjaGVOb2RlKSB7XG4gICAgLy8gQmFpbG91dCBiZWNhdXNlIHRoZSBleGlzdGluZyBjYWNoZSBkb2VzIG5vdCBoYXZlIHRoZSBwYXRoIHRvIHRoZSBsZWFmIG5vZGVcbiAgICAvLyBXaWxsIHRyaWdnZXIgbGF6eSBmZXRjaCBpbiBsYXlvdXQtcm91dGVyIGJlY2F1c2Ugb2YgbWlzc2luZyBzZWdtZW50XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoY2hpbGRDYWNoZU5vZGUgPT09IGV4aXN0aW5nQ2hpbGRDYWNoZU5vZGUpIHtcbiAgICBjaGlsZENhY2hlTm9kZSA9IHtcbiAgICAgIGxhenlEYXRhOiBjaGlsZENhY2hlTm9kZS5sYXp5RGF0YSxcbiAgICAgIHJzYzogY2hpbGRDYWNoZU5vZGUucnNjLFxuICAgICAgcHJlZmV0Y2hSc2M6IGNoaWxkQ2FjaGVOb2RlLnByZWZldGNoUnNjLFxuICAgICAgaGVhZDogY2hpbGRDYWNoZU5vZGUuaGVhZCxcbiAgICAgIHByZWZldGNoSGVhZDogY2hpbGRDYWNoZU5vZGUucHJlZmV0Y2hIZWFkLFxuICAgICAgcGFyYWxsZWxSb3V0ZXM6IG5ldyBNYXAoY2hpbGRDYWNoZU5vZGUucGFyYWxsZWxSb3V0ZXMpLFxuICAgIH0gYXMgQ2FjaGVOb2RlXG4gICAgY2hpbGRTZWdtZW50TWFwLnNldChjYWNoZUtleSwgY2hpbGRDYWNoZU5vZGUpXG4gIH1cblxuICBpbnZhbGlkYXRlQ2FjaGVCZWxvd0ZsaWdodFNlZ21lbnRQYXRoKFxuICAgIGNoaWxkQ2FjaGVOb2RlLFxuICAgIGV4aXN0aW5nQ2hpbGRDYWNoZU5vZGUsXG4gICAgZ2V0TmV4dEZsaWdodFNlZ21lbnRQYXRoKGZsaWdodFNlZ21lbnRQYXRoKVxuICApXG59XG4iXSwibmFtZXMiOlsiaW52YWxpZGF0ZUNhY2hlQmVsb3dGbGlnaHRTZWdtZW50UGF0aCIsIm5ld0NhY2hlIiwiZXhpc3RpbmdDYWNoZSIsImZsaWdodFNlZ21lbnRQYXRoIiwiaXNMYXN0RW50cnkiLCJsZW5ndGgiLCJwYXJhbGxlbFJvdXRlS2V5Iiwic2VnbWVudCIsImNhY2hlS2V5IiwiY3JlYXRlUm91dGVyQ2FjaGVLZXkiLCJleGlzdGluZ0NoaWxkU2VnbWVudE1hcCIsInBhcmFsbGVsUm91dGVzIiwiZ2V0IiwiY2hpbGRTZWdtZW50TWFwIiwiTWFwIiwic2V0IiwiZGVsZXRlIiwiZXhpc3RpbmdDaGlsZENhY2hlTm9kZSIsImNoaWxkQ2FjaGVOb2RlIiwibGF6eURhdGEiLCJyc2MiLCJwcmVmZXRjaFJzYyIsImhlYWQiLCJwcmVmZXRjaEhlYWQiLCJnZXROZXh0RmxpZ2h0U2VnbWVudFBhdGgiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/invalidate-cache-below-flight-segmentpath.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/invalidate-cache-by-router-state.js":
|
||
/*!*****************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/router-reducer/invalidate-cache-by-router-state.js ***!
|
||
\*****************************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"invalidateCacheByRouterState\", ({\n enumerable: true,\n get: function() {\n return invalidateCacheByRouterState;\n }\n}));\nconst _createroutercachekey = __webpack_require__(/*! ./create-router-cache-key */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\");\nfunction invalidateCacheByRouterState(newCache, existingCache, routerState) {\n // Remove segment that we got data for so that it is filled in during rendering of rsc.\n for(const key in routerState[1]){\n const segmentForParallelRoute = routerState[1][key][0];\n const cacheKey = (0, _createroutercachekey.createRouterCacheKey)(segmentForParallelRoute);\n const existingParallelRoutesCacheNode = existingCache.parallelRoutes.get(key);\n if (existingParallelRoutesCacheNode) {\n let parallelRouteCacheNode = new Map(existingParallelRoutesCacheNode);\n parallelRouteCacheNode.delete(cacheKey);\n newCache.parallelRoutes.set(key, parallelRouteCacheNode);\n }\n }\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=invalidate-cache-by-router-state.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvaW52YWxpZGF0ZS1jYWNoZS1ieS1yb3V0ZXItc3RhdGUuanMiLCJtYXBwaW5ncyI6Ijs7OztnRUFPZ0JBOzs7ZUFBQUE7OztrREFMcUI7QUFLOUIsU0FBU0EsNkJBQ2RDLFFBQW1CLEVBQ25CQyxhQUF3QixFQUN4QkMsV0FBOEI7SUFFOUIsdUZBQXVGO0lBQ3ZGLElBQUssTUFBTUMsT0FBT0QsV0FBVyxDQUFDLEVBQUUsQ0FBRTtRQUNoQyxNQUFNRSwwQkFBMEJGLFdBQVcsQ0FBQyxFQUFFLENBQUNDLElBQUksQ0FBQyxFQUFFO1FBQ3RELE1BQU1FLFdBQVdDLENBQUFBLEdBQUFBLHNCQUFBQSxvQkFBQUEsRUFBcUJGO1FBQ3RDLE1BQU1HLGtDQUNKTixjQUFjTyxjQUFjLENBQUNDLEdBQUcsQ0FBQ047UUFDbkMsSUFBSUksaUNBQWlDO1lBQ25DLElBQUlHLHlCQUF5QixJQUFJQyxJQUFJSjtZQUNyQ0csdUJBQXVCRSxNQUFNLENBQUNQO1lBQzlCTCxTQUFTUSxjQUFjLENBQUNLLEdBQUcsQ0FBQ1YsS0FBS087UUFDbkM7SUFDRjtBQUNGIiwic291cmNlcyI6WyIvaG9tZS9zcmMvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvaW52YWxpZGF0ZS1jYWNoZS1ieS1yb3V0ZXItc3RhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDYWNoZU5vZGUgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvbGliL2FwcC1yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZSdcbmltcG9ydCB0eXBlIHsgRmxpZ2h0Um91dGVyU3RhdGUgfSBmcm9tICcuLi8uLi8uLi9zZXJ2ZXIvYXBwLXJlbmRlci90eXBlcydcbmltcG9ydCB7IGNyZWF0ZVJvdXRlckNhY2hlS2V5IH0gZnJvbSAnLi9jcmVhdGUtcm91dGVyLWNhY2hlLWtleSdcblxuLyoqXG4gKiBJbnZhbGlkYXRlIGNhY2hlIG9uZSBsZXZlbCBkb3duIGZyb20gdGhlIHJvdXRlciBzdGF0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludmFsaWRhdGVDYWNoZUJ5Um91dGVyU3RhdGUoXG4gIG5ld0NhY2hlOiBDYWNoZU5vZGUsXG4gIGV4aXN0aW5nQ2FjaGU6IENhY2hlTm9kZSxcbiAgcm91dGVyU3RhdGU6IEZsaWdodFJvdXRlclN0YXRlXG4pOiB2b2lkIHtcbiAgLy8gUmVtb3ZlIHNlZ21lbnQgdGhhdCB3ZSBnb3QgZGF0YSBmb3Igc28gdGhhdCBpdCBpcyBmaWxsZWQgaW4gZHVyaW5nIHJlbmRlcmluZyBvZiByc2MuXG4gIGZvciAoY29uc3Qga2V5IGluIHJvdXRlclN0YXRlWzFdKSB7XG4gICAgY29uc3Qgc2VnbWVudEZvclBhcmFsbGVsUm91dGUgPSByb3V0ZXJTdGF0ZVsxXVtrZXldWzBdXG4gICAgY29uc3QgY2FjaGVLZXkgPSBjcmVhdGVSb3V0ZXJDYWNoZUtleShzZWdtZW50Rm9yUGFyYWxsZWxSb3V0ZSlcbiAgICBjb25zdCBleGlzdGluZ1BhcmFsbGVsUm91dGVzQ2FjaGVOb2RlID1cbiAgICAgIGV4aXN0aW5nQ2FjaGUucGFyYWxsZWxSb3V0ZXMuZ2V0KGtleSlcbiAgICBpZiAoZXhpc3RpbmdQYXJhbGxlbFJvdXRlc0NhY2hlTm9kZSkge1xuICAgICAgbGV0IHBhcmFsbGVsUm91dGVDYWNoZU5vZGUgPSBuZXcgTWFwKGV4aXN0aW5nUGFyYWxsZWxSb3V0ZXNDYWNoZU5vZGUpXG4gICAgICBwYXJhbGxlbFJvdXRlQ2FjaGVOb2RlLmRlbGV0ZShjYWNoZUtleSlcbiAgICAgIG5ld0NhY2hlLnBhcmFsbGVsUm91dGVzLnNldChrZXksIHBhcmFsbGVsUm91dGVDYWNoZU5vZGUpXG4gICAgfVxuICB9XG59XG4iXSwibmFtZXMiOlsiaW52YWxpZGF0ZUNhY2hlQnlSb3V0ZXJTdGF0ZSIsIm5ld0NhY2hlIiwiZXhpc3RpbmdDYWNoZSIsInJvdXRlclN0YXRlIiwia2V5Iiwic2VnbWVudEZvclBhcmFsbGVsUm91dGUiLCJjYWNoZUtleSIsImNyZWF0ZVJvdXRlckNhY2hlS2V5IiwiZXhpc3RpbmdQYXJhbGxlbFJvdXRlc0NhY2hlTm9kZSIsInBhcmFsbGVsUm91dGVzIiwiZ2V0IiwicGFyYWxsZWxSb3V0ZUNhY2hlTm9kZSIsIk1hcCIsImRlbGV0ZSIsInNldCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/invalidate-cache-by-router-state.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js":
|
||
/*!*****************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js ***!
|
||
\*****************************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isNavigatingToNewRootLayout\", ({\n enumerable: true,\n get: function() {\n return isNavigatingToNewRootLayout;\n }\n}));\nfunction isNavigatingToNewRootLayout(currentTree, nextTree) {\n // Compare segments\n const currentTreeSegment = currentTree[0];\n const nextTreeSegment = nextTree[0];\n // If any segment is different before we find the root layout, the root layout has changed.\n // E.g. /same/(group1)/layout.js -> /same/(group2)/layout.js\n // First segment is 'same' for both, keep looking. (group1) changed to (group2) before the root layout was found, it must have changed.\n if (Array.isArray(currentTreeSegment) && Array.isArray(nextTreeSegment)) {\n // Compare dynamic param name and type but ignore the value, different values would not affect the current root layout\n // /[name] - /slug1 and /slug2, both values (slug1 & slug2) still has the same layout /[name]/layout.js\n if (currentTreeSegment[0] !== nextTreeSegment[0] || currentTreeSegment[2] !== nextTreeSegment[2]) {\n return true;\n }\n } else if (currentTreeSegment !== nextTreeSegment) {\n return true;\n }\n // Current tree root layout found\n if (currentTree[4]) {\n // If the next tree doesn't have the root layout flag, it must have changed.\n return !nextTree[4];\n }\n // Current tree didn't have its root layout here, must have changed.\n if (nextTree[4]) {\n return true;\n }\n // We can't assume it's `parallelRoutes.children` here in case the root layout is `app/@something/layout.js`\n // But it's not possible to be more than one parallelRoutes before the root layout is found\n // TODO-APP: change to traverse all parallel routes\n const currentTreeChild = Object.values(currentTree[1])[0];\n const nextTreeChild = Object.values(nextTree[1])[0];\n if (!currentTreeChild || !nextTreeChild) return true;\n return isNavigatingToNewRootLayout(currentTreeChild, nextTreeChild);\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=is-navigating-to-new-root-layout.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvaXMtbmF2aWdhdGluZy10by1uZXctcm9vdC1sYXlvdXQuanMiLCJtYXBwaW5ncyI6Ijs7OzsrREFFZ0JBOzs7ZUFBQUE7OztBQUFULFNBQVNBLDRCQUNkQyxXQUE4QixFQUM5QkMsUUFBMkI7SUFFM0IsbUJBQW1CO0lBQ25CLE1BQU1DLHFCQUFxQkYsV0FBVyxDQUFDLEVBQUU7SUFDekMsTUFBTUcsa0JBQWtCRixRQUFRLENBQUMsRUFBRTtJQUVuQywyRkFBMkY7SUFDM0YsNERBQTREO0lBQzVELHVJQUF1STtJQUN2SSxJQUFJRyxNQUFNQyxPQUFPLENBQUNILHVCQUF1QkUsTUFBTUMsT0FBTyxDQUFDRixrQkFBa0I7UUFDdkUsc0hBQXNIO1FBQ3RILHVHQUF1RztRQUN2RyxJQUNFRCxrQkFBa0IsQ0FBQyxFQUFFLEtBQUtDLGVBQWUsQ0FBQyxFQUFFLElBQzVDRCxrQkFBa0IsQ0FBQyxFQUFFLEtBQUtDLGVBQWUsQ0FBQyxFQUFFLEVBQzVDO1lBQ0EsT0FBTztRQUNUO0lBQ0YsT0FBTyxJQUFJRCx1QkFBdUJDLGlCQUFpQjtRQUNqRCxPQUFPO0lBQ1Q7SUFFQSxpQ0FBaUM7SUFDakMsSUFBSUgsV0FBVyxDQUFDLEVBQUUsRUFBRTtRQUNsQiw0RUFBNEU7UUFDNUUsT0FBTyxDQUFDQyxRQUFRLENBQUMsRUFBRTtJQUNyQjtJQUNBLG9FQUFvRTtJQUNwRSxJQUFJQSxRQUFRLENBQUMsRUFBRSxFQUFFO1FBQ2YsT0FBTztJQUNUO0lBQ0EsNEdBQTRHO0lBQzVHLDJGQUEyRjtJQUMzRixtREFBbUQ7SUFDbkQsTUFBTUssbUJBQW1CQyxPQUFPQyxNQUFNLENBQUNSLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQ3pELE1BQU1TLGdCQUFnQkYsT0FBT0MsTUFBTSxDQUFDUCxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtJQUNuRCxJQUFJLENBQUNLLG9CQUFvQixDQUFDRyxlQUFlLE9BQU87SUFDaEQsT0FBT1YsNEJBQTRCTyxrQkFBa0JHO0FBQ3ZEIiwic291cmNlcyI6WyIvaG9tZS9zcmMvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvaXMtbmF2aWdhdGluZy10by1uZXctcm9vdC1sYXlvdXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBGbGlnaHRSb3V0ZXJTdGF0ZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL3R5cGVzJ1xuXG5leHBvcnQgZnVuY3Rpb24gaXNOYXZpZ2F0aW5nVG9OZXdSb290TGF5b3V0KFxuICBjdXJyZW50VHJlZTogRmxpZ2h0Um91dGVyU3RhdGUsXG4gIG5leHRUcmVlOiBGbGlnaHRSb3V0ZXJTdGF0ZVxuKTogYm9vbGVhbiB7XG4gIC8vIENvbXBhcmUgc2VnbWVudHNcbiAgY29uc3QgY3VycmVudFRyZWVTZWdtZW50ID0gY3VycmVudFRyZWVbMF1cbiAgY29uc3QgbmV4dFRyZWVTZWdtZW50ID0gbmV4dFRyZWVbMF1cblxuICAvLyBJZiBhbnkgc2VnbWVudCBpcyBkaWZmZXJlbnQgYmVmb3JlIHdlIGZpbmQgdGhlIHJvb3QgbGF5b3V0LCB0aGUgcm9vdCBsYXlvdXQgaGFzIGNoYW5nZWQuXG4gIC8vIEUuZy4gL3NhbWUvKGdyb3VwMSkvbGF5b3V0LmpzIC0+IC9zYW1lLyhncm91cDIpL2xheW91dC5qc1xuICAvLyBGaXJzdCBzZWdtZW50IGlzICdzYW1lJyBmb3IgYm90aCwga2VlcCBsb29raW5nLiAoZ3JvdXAxKSBjaGFuZ2VkIHRvIChncm91cDIpIGJlZm9yZSB0aGUgcm9vdCBsYXlvdXQgd2FzIGZvdW5kLCBpdCBtdXN0IGhhdmUgY2hhbmdlZC5cbiAgaWYgKEFycmF5LmlzQXJyYXkoY3VycmVudFRyZWVTZWdtZW50KSAmJiBBcnJheS5pc0FycmF5KG5leHRUcmVlU2VnbWVudCkpIHtcbiAgICAvLyBDb21wYXJlIGR5bmFtaWMgcGFyYW0gbmFtZSBhbmQgdHlwZSBidXQgaWdub3JlIHRoZSB2YWx1ZSwgZGlmZmVyZW50IHZhbHVlcyB3b3VsZCBub3QgYWZmZWN0IHRoZSBjdXJyZW50IHJvb3QgbGF5b3V0XG4gICAgLy8gL1tuYW1lXSAtIC9zbHVnMSBhbmQgL3NsdWcyLCBib3RoIHZhbHVlcyAoc2x1ZzEgJiBzbHVnMikgc3RpbGwgaGFzIHRoZSBzYW1lIGxheW91dCAvW25hbWVdL2xheW91dC5qc1xuICAgIGlmIChcbiAgICAgIGN1cnJlbnRUcmVlU2VnbWVudFswXSAhPT0gbmV4dFRyZWVTZWdtZW50WzBdIHx8XG4gICAgICBjdXJyZW50VHJlZVNlZ21lbnRbMl0gIT09IG5leHRUcmVlU2VnbWVudFsyXVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH0gZWxzZSBpZiAoY3VycmVudFRyZWVTZWdtZW50ICE9PSBuZXh0VHJlZVNlZ21lbnQpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gQ3VycmVudCB0cmVlIHJvb3QgbGF5b3V0IGZvdW5kXG4gIGlmIChjdXJyZW50VHJlZVs0XSkge1xuICAgIC8vIElmIHRoZSBuZXh0IHRyZWUgZG9lc24ndCBoYXZlIHRoZSByb290IGxheW91dCBmbGFnLCBpdCBtdXN0IGhhdmUgY2hhbmdlZC5cbiAgICByZXR1cm4gIW5leHRUcmVlWzRdXG4gIH1cbiAgLy8gQ3VycmVudCB0cmVlIGRpZG4ndCBoYXZlIGl0cyByb290IGxheW91dCBoZXJlLCBtdXN0IGhhdmUgY2hhbmdlZC5cbiAgaWYgKG5leHRUcmVlWzRdKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICAvLyBXZSBjYW4ndCBhc3N1bWUgaXQncyBgcGFyYWxsZWxSb3V0ZXMuY2hpbGRyZW5gIGhlcmUgaW4gY2FzZSB0aGUgcm9vdCBsYXlvdXQgaXMgYGFwcC9Ac29tZXRoaW5nL2xheW91dC5qc2BcbiAgLy8gQnV0IGl0J3Mgbm90IHBvc3NpYmxlIHRvIGJlIG1vcmUgdGhhbiBvbmUgcGFyYWxsZWxSb3V0ZXMgYmVmb3JlIHRoZSByb290IGxheW91dCBpcyBmb3VuZFxuICAvLyBUT0RPLUFQUDogY2hhbmdlIHRvIHRyYXZlcnNlIGFsbCBwYXJhbGxlbCByb3V0ZXNcbiAgY29uc3QgY3VycmVudFRyZWVDaGlsZCA9IE9iamVjdC52YWx1ZXMoY3VycmVudFRyZWVbMV0pWzBdXG4gIGNvbnN0IG5leHRUcmVlQ2hpbGQgPSBPYmplY3QudmFsdWVzKG5leHRUcmVlWzFdKVswXVxuICBpZiAoIWN1cnJlbnRUcmVlQ2hpbGQgfHwgIW5leHRUcmVlQ2hpbGQpIHJldHVybiB0cnVlXG4gIHJldHVybiBpc05hdmlnYXRpbmdUb05ld1Jvb3RMYXlvdXQoY3VycmVudFRyZWVDaGlsZCwgbmV4dFRyZWVDaGlsZClcbn1cbiJdLCJuYW1lcyI6WyJpc05hdmlnYXRpbmdUb05ld1Jvb3RMYXlvdXQiLCJjdXJyZW50VHJlZSIsIm5leHRUcmVlIiwiY3VycmVudFRyZWVTZWdtZW50IiwibmV4dFRyZWVTZWdtZW50IiwiQXJyYXkiLCJpc0FycmF5IiwiY3VycmVudFRyZWVDaGlsZCIsIk9iamVjdCIsInZhbHVlcyIsIm5leHRUcmVlQ2hpbGQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/ppr-navigations.js":
|
||
/*!************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/router-reducer/ppr-navigations.js ***!
|
||
\************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n abortTask: function() {\n return abortTask;\n },\n listenForDynamicRequest: function() {\n return listenForDynamicRequest;\n },\n startPPRNavigation: function() {\n return startPPRNavigation;\n },\n updateCacheNodeOnPopstateRestoration: function() {\n return updateCacheNodeOnPopstateRestoration;\n }\n});\nconst _segment = __webpack_require__(/*! ../../../shared/lib/segment */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/segment.js\");\nconst _matchsegments = __webpack_require__(/*! ../match-segments */ \"(app-pages-browser)/./node_modules/next/dist/client/components/match-segments.js\");\nconst _createroutercachekey = __webpack_require__(/*! ./create-router-cache-key */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\");\nconst _isnavigatingtonewrootlayout = __webpack_require__(/*! ./is-navigating-to-new-root-layout */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js\");\nconst _prefetchcacheutils = __webpack_require__(/*! ./prefetch-cache-utils */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/prefetch-cache-utils.js\");\nconst MPA_NAVIGATION_TASK = {\n route: null,\n node: null,\n dynamicRequestTree: null,\n children: null\n};\nfunction startPPRNavigation(navigatedAt, oldCacheNode, oldRouterState, newRouterState, prefetchData, prefetchHead, isPrefetchHeadPartial, isSamePageNavigation, scrollableSegmentsResult) {\n const segmentPath = [];\n return updateCacheNodeOnNavigation(navigatedAt, oldCacheNode, oldRouterState, newRouterState, false, prefetchData, prefetchHead, isPrefetchHeadPartial, isSamePageNavigation, segmentPath, scrollableSegmentsResult);\n}\nfunction updateCacheNodeOnNavigation(navigatedAt, oldCacheNode, oldRouterState, newRouterState, didFindRootLayout, prefetchData, prefetchHead, isPrefetchHeadPartial, isSamePageNavigation, segmentPath, scrollableSegmentsResult) {\n // Diff the old and new trees to reuse the shared layouts.\n const oldRouterStateChildren = oldRouterState[1];\n const newRouterStateChildren = newRouterState[1];\n const prefetchDataChildren = prefetchData !== null ? prefetchData[2] : null;\n if (!didFindRootLayout) {\n // We're currently traversing the part of the tree that was also part of\n // the previous route. If we discover a root layout, then we don't need to\n // trigger an MPA navigation. See beginRenderingNewRouteTree for context.\n const isRootLayout = newRouterState[4] === true;\n if (isRootLayout) {\n // Found a matching root layout.\n didFindRootLayout = true;\n }\n }\n const oldParallelRoutes = oldCacheNode.parallelRoutes;\n // Clone the current set of segment children, even if they aren't active in\n // the new tree.\n // TODO: We currently retain all the inactive segments indefinitely, until\n // there's an explicit refresh, or a parent layout is lazily refreshed. We\n // rely on this for popstate navigations, which update the Router State Tree\n // but do not eagerly perform a data fetch, because they expect the segment\n // data to already be in the Cache Node tree. For highly static sites that\n // are mostly read-only, this may happen only rarely, causing memory to\n // leak. We should figure out a better model for the lifetime of inactive\n // segments, so we can maintain instant back/forward navigations without\n // leaking memory indefinitely.\n const prefetchParallelRoutes = new Map(oldParallelRoutes);\n // As we diff the trees, we may sometimes modify (copy-on-write, not mutate)\n // the Route Tree that was returned by the server — for example, in the case\n // of default parallel routes, we preserve the currently active segment. To\n // avoid mutating the original tree, we clone the router state children along\n // the return path.\n let patchedRouterStateChildren = {};\n let taskChildren = null;\n // Most navigations require a request to fetch additional data from the\n // server, either because the data was not already prefetched, or because the\n // target route contains dynamic data that cannot be prefetched.\n //\n // However, if the target route is fully static, and it's already completely\n // loaded into the segment cache, then we can skip the server request.\n //\n // This starts off as `false`, and is set to `true` if any of the child\n // routes requires a dynamic request.\n let needsDynamicRequest = false;\n // As we traverse the children, we'll construct a FlightRouterState that can\n // be sent to the server to request the dynamic data. If it turns out that\n // nothing in the subtree is dynamic (i.e. needsDynamicRequest is false at the\n // end), then this will be discarded.\n // TODO: We can probably optimize the format of this data structure to only\n // include paths that are dynamic. Instead of reusing the\n // FlightRouterState type.\n let dynamicRequestTreeChildren = {};\n for(let parallelRouteKey in newRouterStateChildren){\n const newRouterStateChild = newRouterStateChildren[parallelRouteKey];\n const oldRouterStateChild = oldRouterStateChildren[parallelRouteKey];\n const oldSegmentMapChild = oldParallelRoutes.get(parallelRouteKey);\n const prefetchDataChild = prefetchDataChildren !== null ? prefetchDataChildren[parallelRouteKey] : null;\n const newSegmentChild = newRouterStateChild[0];\n const newSegmentPathChild = segmentPath.concat([\n parallelRouteKey,\n newSegmentChild\n ]);\n const newSegmentKeyChild = (0, _createroutercachekey.createRouterCacheKey)(newSegmentChild);\n const oldSegmentChild = oldRouterStateChild !== undefined ? oldRouterStateChild[0] : undefined;\n const oldCacheNodeChild = oldSegmentMapChild !== undefined ? oldSegmentMapChild.get(newSegmentKeyChild) : undefined;\n let taskChild;\n if (newSegmentChild === _segment.DEFAULT_SEGMENT_KEY) {\n // This is another kind of leaf segment — a default route.\n //\n // Default routes have special behavior. When there's no matching segment\n // for a parallel route, Next.js preserves the currently active segment\n // during a client navigation — but not for initial render. The server\n // leaves it to the client to account for this. So we need to handle\n // it here.\n if (oldRouterStateChild !== undefined) {\n // Reuse the existing Router State for this segment. We spawn a \"task\"\n // just to keep track of the updated router state; unlike most, it's\n // already fulfilled and won't be affected by the dynamic response.\n taskChild = spawnReusedTask(oldRouterStateChild);\n } else {\n // There's no currently active segment. Switch to the \"create\" path.\n taskChild = beginRenderingNewRouteTree(navigatedAt, oldRouterStateChild, newRouterStateChild, oldCacheNodeChild, didFindRootLayout, prefetchDataChild !== undefined ? prefetchDataChild : null, prefetchHead, isPrefetchHeadPartial, newSegmentPathChild, scrollableSegmentsResult);\n }\n } else if (isSamePageNavigation && // Check if this is a page segment.\n // TODO: We're not consistent about how we do this check. Some places\n // check if the segment starts with PAGE_SEGMENT_KEY, but most seem to\n // check if there any any children, which is why I'm doing it here. We\n // should probably encode an empty children set as `null` though. Either\n // way, we should update all the checks to be consistent.\n Object.keys(newRouterStateChild[1]).length === 0) {\n // We special case navigations to the exact same URL as the current\n // location. It's a common UI pattern for apps to refresh when you click a\n // link to the current page. So when this happens, we refresh the dynamic\n // data in the page segments.\n //\n // Note that this does not apply if the any part of the hash or search\n // query has changed. This might feel a bit weird but it makes more sense\n // when you consider that the way to trigger this behavior is to click\n // the same link multiple times.\n //\n // TODO: We should probably refresh the *entire* route when this case\n // occurs, not just the page segments. Essentially treating it the same as\n // a refresh() triggered by an action, which is the more explicit way of\n // modeling the UI pattern described above.\n //\n // Also note that this only refreshes the dynamic data, not static/\n // cached data. If the page segment is fully static and prefetched, the\n // request is skipped. (This is also how refresh() works.)\n taskChild = beginRenderingNewRouteTree(navigatedAt, oldRouterStateChild, newRouterStateChild, oldCacheNodeChild, didFindRootLayout, prefetchDataChild !== undefined ? prefetchDataChild : null, prefetchHead, isPrefetchHeadPartial, newSegmentPathChild, scrollableSegmentsResult);\n } else if (oldRouterStateChild !== undefined && oldSegmentChild !== undefined && (0, _matchsegments.matchSegment)(newSegmentChild, oldSegmentChild)) {\n if (oldCacheNodeChild !== undefined && oldRouterStateChild !== undefined) {\n // This segment exists in both the old and new trees. Recursively update\n // the children.\n taskChild = updateCacheNodeOnNavigation(navigatedAt, oldCacheNodeChild, oldRouterStateChild, newRouterStateChild, didFindRootLayout, prefetchDataChild, prefetchHead, isPrefetchHeadPartial, isSamePageNavigation, newSegmentPathChild, scrollableSegmentsResult);\n } else {\n // There's no existing Cache Node for this segment. Switch to the\n // \"create\" path.\n taskChild = beginRenderingNewRouteTree(navigatedAt, oldRouterStateChild, newRouterStateChild, oldCacheNodeChild, didFindRootLayout, prefetchDataChild !== undefined ? prefetchDataChild : null, prefetchHead, isPrefetchHeadPartial, newSegmentPathChild, scrollableSegmentsResult);\n }\n } else {\n // This is a new tree. Switch to the \"create\" path.\n taskChild = beginRenderingNewRouteTree(navigatedAt, oldRouterStateChild, newRouterStateChild, oldCacheNodeChild, didFindRootLayout, prefetchDataChild !== undefined ? prefetchDataChild : null, prefetchHead, isPrefetchHeadPartial, newSegmentPathChild, scrollableSegmentsResult);\n }\n if (taskChild !== null) {\n // Recursively propagate up the child tasks.\n if (taskChild.route === null) {\n // One of the child tasks discovered a change to the root layout.\n // Immediately unwind from this recursive traversal.\n return MPA_NAVIGATION_TASK;\n }\n if (taskChildren === null) {\n taskChildren = new Map();\n }\n taskChildren.set(parallelRouteKey, taskChild);\n const newCacheNodeChild = taskChild.node;\n if (newCacheNodeChild !== null) {\n const newSegmentMapChild = new Map(oldSegmentMapChild);\n newSegmentMapChild.set(newSegmentKeyChild, newCacheNodeChild);\n prefetchParallelRoutes.set(parallelRouteKey, newSegmentMapChild);\n }\n // The child tree's route state may be different from the prefetched\n // route sent by the server. We need to clone it as we traverse back up\n // the tree.\n const taskChildRoute = taskChild.route;\n patchedRouterStateChildren[parallelRouteKey] = taskChildRoute;\n const dynamicRequestTreeChild = taskChild.dynamicRequestTree;\n if (dynamicRequestTreeChild !== null) {\n // Something in the child tree is dynamic.\n needsDynamicRequest = true;\n dynamicRequestTreeChildren[parallelRouteKey] = dynamicRequestTreeChild;\n } else {\n dynamicRequestTreeChildren[parallelRouteKey] = taskChildRoute;\n }\n } else {\n // The child didn't change. We can use the prefetched router state.\n patchedRouterStateChildren[parallelRouteKey] = newRouterStateChild;\n dynamicRequestTreeChildren[parallelRouteKey] = newRouterStateChild;\n }\n }\n if (taskChildren === null) {\n // No new tasks were spawned.\n return null;\n }\n const newCacheNode = {\n lazyData: null,\n rsc: oldCacheNode.rsc,\n // We intentionally aren't updating the prefetchRsc field, since this node\n // is already part of the current tree, because it would be weird for\n // prefetch data to be newer than the final data. It probably won't ever be\n // observable anyway, but it could happen if the segment is unmounted then\n // mounted again, because LayoutRouter will momentarily switch to rendering\n // prefetchRsc, via useDeferredValue.\n prefetchRsc: oldCacheNode.prefetchRsc,\n head: oldCacheNode.head,\n prefetchHead: oldCacheNode.prefetchHead,\n loading: oldCacheNode.loading,\n // Everything is cloned except for the children, which we computed above.\n parallelRoutes: prefetchParallelRoutes,\n navigatedAt\n };\n return {\n // Return a cloned copy of the router state with updated children.\n route: patchRouterStateWithNewChildren(newRouterState, patchedRouterStateChildren),\n node: newCacheNode,\n dynamicRequestTree: needsDynamicRequest ? patchRouterStateWithNewChildren(newRouterState, dynamicRequestTreeChildren) : null,\n children: taskChildren\n };\n}\nfunction beginRenderingNewRouteTree(navigatedAt, oldRouterState, newRouterState, existingCacheNode, didFindRootLayout, prefetchData, possiblyPartialPrefetchHead, isPrefetchHeadPartial, segmentPath, scrollableSegmentsResult) {\n if (!didFindRootLayout) {\n // The route tree changed before we reached a layout. (The highest-level\n // layout in a route tree is referred to as the \"root\" layout.) This could\n // mean that we're navigating between two different root layouts. When this\n // happens, we perform a full-page (MPA-style) navigation.\n //\n // However, the algorithm for deciding where to start rendering a route\n // (i.e. the one performed in order to reach this function) is stricter\n // than the one used to detect a change in the root layout. So just because\n // we're re-rendering a segment outside of the root layout does not mean we\n // should trigger a full-page navigation.\n //\n // Specifically, we handle dynamic parameters differently: two segments are\n // considered the same even if their parameter values are different.\n //\n // Refer to isNavigatingToNewRootLayout for details.\n //\n // Note that we only have to perform this extra traversal if we didn't\n // already discover a root layout in the part of the tree that is unchanged.\n // In the common case, this branch is skipped completely.\n if (oldRouterState === undefined || (0, _isnavigatingtonewrootlayout.isNavigatingToNewRootLayout)(oldRouterState, newRouterState)) {\n // The root layout changed. Perform a full-page navigation.\n return MPA_NAVIGATION_TASK;\n }\n }\n return createCacheNodeOnNavigation(navigatedAt, newRouterState, existingCacheNode, prefetchData, possiblyPartialPrefetchHead, isPrefetchHeadPartial, segmentPath, scrollableSegmentsResult);\n}\nfunction createCacheNodeOnNavigation(navigatedAt, routerState, existingCacheNode, prefetchData, possiblyPartialPrefetchHead, isPrefetchHeadPartial, segmentPath, scrollableSegmentsResult) {\n // Same traversal as updateCacheNodeNavigation, but we switch to this path\n // once we reach the part of the tree that was not in the previous route. We\n // don't need to diff against the old tree, we just need to create a new one.\n // The head is assigned to every leaf segment delivered by the server. Based\n // on corresponding logic in fill-lazy-items-till-leaf-with-head.ts\n const routerStateChildren = routerState[1];\n const isLeafSegment = Object.keys(routerStateChildren).length === 0;\n // Even we're rendering inside the \"new\" part of the target tree, we may have\n // a locally cached segment that we can reuse. This may come from either 1)\n // the CacheNode tree, which lives in React state and is populated by previous\n // navigations; or 2) the prefetch cache, which is a separate cache that is\n // populated by prefetches.\n let rsc;\n let loading;\n let head;\n let cacheNodeNavigatedAt;\n if (existingCacheNode !== undefined && // DYNAMIC_STALETIME_MS defaults to 0, but it can be increased using\n // the experimental.staleTimes.dynamic config. When set, we'll avoid\n // refetching dynamic data if it was fetched within the given threshold.\n existingCacheNode.navigatedAt + _prefetchcacheutils.DYNAMIC_STALETIME_MS > navigatedAt) {\n // We have an existing CacheNode for this segment, and it's not stale. We\n // should reuse it rather than request a new one.\n rsc = existingCacheNode.rsc;\n loading = existingCacheNode.loading;\n head = existingCacheNode.head;\n // Don't update the navigatedAt timestamp, since we're reusing stale data.\n cacheNodeNavigatedAt = existingCacheNode.navigatedAt;\n } else if (prefetchData !== null) {\n // There's no existing CacheNode for this segment, but we do have prefetch\n // data. If the prefetch data is fully static (i.e. does not contain any\n // dynamic holes), we don't need to request it from the server.\n rsc = prefetchData[1];\n loading = prefetchData[3];\n head = isLeafSegment ? possiblyPartialPrefetchHead : null;\n // Even though we're accessing the data from the prefetch cache, this is\n // conceptually a new segment, not a reused one. So we should update the\n // navigatedAt timestamp.\n cacheNodeNavigatedAt = navigatedAt;\n const isPrefetchRscPartial = prefetchData[4];\n if (isPrefetchRscPartial || // Check if the head is partial (only relevant if this is a leaf segment)\n isPrefetchHeadPartial && isLeafSegment) {\n // We only have partial data from this segment. Like missing segments, we\n // must request the full data from the server.\n return spawnPendingTask(navigatedAt, routerState, prefetchData, possiblyPartialPrefetchHead, isPrefetchHeadPartial, segmentPath, scrollableSegmentsResult);\n } else {\n // The prefetch data is fully static, so we can omit it from the\n // navigation request.\n }\n } else {\n // There's no prefetch for this segment. Everything from this point will be\n // requested from the server, even if there are static children below it.\n // Create a terminal task node that will later be fulfilled by\n // server response.\n return spawnPendingTask(navigatedAt, routerState, null, possiblyPartialPrefetchHead, isPrefetchHeadPartial, segmentPath, scrollableSegmentsResult);\n }\n // We already have a full segment we can render, so we don't need to request a\n // new one from the server. Keep traversing down the tree until we reach\n // something that requires a dynamic request.\n const prefetchDataChildren = prefetchData !== null ? prefetchData[2] : null;\n const taskChildren = new Map();\n const existingCacheNodeChildren = existingCacheNode !== undefined ? existingCacheNode.parallelRoutes : null;\n const cacheNodeChildren = new Map(existingCacheNodeChildren);\n let dynamicRequestTreeChildren = {};\n let needsDynamicRequest = false;\n if (isLeafSegment) {\n // The segment path of every leaf segment (i.e. page) is collected into\n // a result array. This is used by the LayoutRouter to scroll to ensure that\n // new pages are visible after a navigation.\n // TODO: We should use a string to represent the segment path instead of\n // an array. We already use a string representation for the path when\n // accessing the Segment Cache, so we can use the same one.\n scrollableSegmentsResult.push(segmentPath);\n } else {\n for(let parallelRouteKey in routerStateChildren){\n const routerStateChild = routerStateChildren[parallelRouteKey];\n const prefetchDataChild = prefetchDataChildren !== null ? prefetchDataChildren[parallelRouteKey] : null;\n const existingSegmentMapChild = existingCacheNodeChildren !== null ? existingCacheNodeChildren.get(parallelRouteKey) : undefined;\n const segmentChild = routerStateChild[0];\n const segmentPathChild = segmentPath.concat([\n parallelRouteKey,\n segmentChild\n ]);\n const segmentKeyChild = (0, _createroutercachekey.createRouterCacheKey)(segmentChild);\n const existingCacheNodeChild = existingSegmentMapChild !== undefined ? existingSegmentMapChild.get(segmentKeyChild) : undefined;\n const taskChild = createCacheNodeOnNavigation(navigatedAt, routerStateChild, existingCacheNodeChild, prefetchDataChild, possiblyPartialPrefetchHead, isPrefetchHeadPartial, segmentPathChild, scrollableSegmentsResult);\n taskChildren.set(parallelRouteKey, taskChild);\n const dynamicRequestTreeChild = taskChild.dynamicRequestTree;\n if (dynamicRequestTreeChild !== null) {\n // Something in the child tree is dynamic.\n needsDynamicRequest = true;\n dynamicRequestTreeChildren[parallelRouteKey] = dynamicRequestTreeChild;\n } else {\n dynamicRequestTreeChildren[parallelRouteKey] = routerStateChild;\n }\n const newCacheNodeChild = taskChild.node;\n if (newCacheNodeChild !== null) {\n const newSegmentMapChild = new Map();\n newSegmentMapChild.set(segmentKeyChild, newCacheNodeChild);\n cacheNodeChildren.set(parallelRouteKey, newSegmentMapChild);\n }\n }\n }\n return {\n // Since we're inside a new route tree, unlike the\n // `updateCacheNodeOnNavigation` path, the router state on the children\n // tasks is always the same as the router state we pass in. So we don't need\n // to clone/modify it.\n route: routerState,\n node: {\n lazyData: null,\n // Since this segment is already full, we don't need to use the\n // `prefetchRsc` field.\n rsc,\n prefetchRsc: null,\n head,\n prefetchHead: null,\n loading,\n parallelRoutes: cacheNodeChildren,\n navigatedAt: cacheNodeNavigatedAt\n },\n dynamicRequestTree: needsDynamicRequest ? patchRouterStateWithNewChildren(routerState, dynamicRequestTreeChildren) : null,\n children: taskChildren\n };\n}\nfunction patchRouterStateWithNewChildren(baseRouterState, newChildren) {\n const clone = [\n baseRouterState[0],\n newChildren\n ];\n // Based on equivalent logic in apply-router-state-patch-to-tree, but should\n // confirm whether we need to copy all of these fields. Not sure the server\n // ever sends, e.g. the refetch marker.\n if (2 in baseRouterState) {\n clone[2] = baseRouterState[2];\n }\n if (3 in baseRouterState) {\n clone[3] = baseRouterState[3];\n }\n if (4 in baseRouterState) {\n clone[4] = baseRouterState[4];\n }\n return clone;\n}\nfunction spawnPendingTask(navigatedAt, routerState, prefetchData, prefetchHead, isPrefetchHeadPartial, segmentPath, scrollableSegmentsResult) {\n // Create a task that will later be fulfilled by data from the server.\n // Clone the prefetched route tree and the `refetch` marker to it. We'll send\n // this to the server so it knows where to start rendering.\n const dynamicRequestTree = patchRouterStateWithNewChildren(routerState, routerState[1]);\n dynamicRequestTree[3] = 'refetch';\n const newTask = {\n route: routerState,\n // Corresponds to the part of the route that will be rendered on the server.\n node: createPendingCacheNode(navigatedAt, routerState, prefetchData, prefetchHead, isPrefetchHeadPartial, segmentPath, scrollableSegmentsResult),\n // Because this is non-null, and it gets propagated up through the parent\n // tasks, the root task will know that it needs to perform a server request.\n dynamicRequestTree,\n children: null\n };\n return newTask;\n}\nfunction spawnReusedTask(reusedRouterState) {\n // Create a task that reuses an existing segment, e.g. when reusing\n // the current active segment in place of a default route.\n return {\n route: reusedRouterState,\n node: null,\n dynamicRequestTree: null,\n children: null\n };\n}\nfunction listenForDynamicRequest(task, responsePromise) {\n responsePromise.then((param)=>{\n let { flightData } = param;\n if (typeof flightData === 'string') {\n // Happens when navigating to page in `pages` from `app`. We shouldn't\n // get here because should have already handled this during\n // the prefetch.\n return;\n }\n for (const normalizedFlightData of flightData){\n const { segmentPath, tree: serverRouterState, seedData: dynamicData, head: dynamicHead } = normalizedFlightData;\n if (!dynamicData) {\n continue;\n }\n writeDynamicDataIntoPendingTask(task, segmentPath, serverRouterState, dynamicData, dynamicHead);\n }\n // Now that we've exhausted all the data we received from the server, if\n // there are any remaining pending tasks in the tree, abort them now.\n // If there's any missing data, it will trigger a lazy fetch.\n abortTask(task, null);\n }, (error)=>{\n // This will trigger an error during render\n abortTask(task, error);\n });\n}\nfunction writeDynamicDataIntoPendingTask(rootTask, segmentPath, serverRouterState, dynamicData, dynamicHead) {\n // The data sent by the server represents only a subtree of the app. We need\n // to find the part of the task tree that matches the server response, and\n // fulfill it using the dynamic data.\n //\n // segmentPath represents the parent path of subtree. It's a repeating pattern\n // of parallel route key and segment:\n //\n // [string, Segment, string, Segment, string, Segment, ...]\n //\n // Iterate through the path and finish any tasks that match this payload.\n let task = rootTask;\n for(let i = 0; i < segmentPath.length; i += 2){\n const parallelRouteKey = segmentPath[i];\n const segment = segmentPath[i + 1];\n const taskChildren = task.children;\n if (taskChildren !== null) {\n const taskChild = taskChildren.get(parallelRouteKey);\n if (taskChild !== undefined) {\n const taskSegment = taskChild.route[0];\n if ((0, _matchsegments.matchSegment)(segment, taskSegment)) {\n // Found a match for this task. Keep traversing down the task tree.\n task = taskChild;\n continue;\n }\n }\n }\n // We didn't find a child task that matches the server data. Exit. We won't\n // abort the task, though, because a different FlightDataPath may be able to\n // fulfill it (see loop in listenForDynamicRequest). We only abort tasks\n // once we've run out of data.\n return;\n }\n finishTaskUsingDynamicDataPayload(task, serverRouterState, dynamicData, dynamicHead);\n}\nfunction finishTaskUsingDynamicDataPayload(task, serverRouterState, dynamicData, dynamicHead) {\n if (task.dynamicRequestTree === null) {\n // Everything in this subtree is already complete. Bail out.\n return;\n }\n // dynamicData may represent a larger subtree than the task. Before we can\n // finish the task, we need to line them up.\n const taskChildren = task.children;\n const taskNode = task.node;\n if (taskChildren === null) {\n // We've reached the leaf node of the pending task. The server data tree\n // lines up the pending Cache Node tree. We can now switch to the\n // normal algorithm.\n if (taskNode !== null) {\n finishPendingCacheNode(taskNode, task.route, serverRouterState, dynamicData, dynamicHead);\n // Set this to null to indicate that this task is now complete.\n task.dynamicRequestTree = null;\n }\n return;\n }\n // The server returned more data than we need to finish the task. Skip over\n // the extra segments until we reach the leaf task node.\n const serverChildren = serverRouterState[1];\n const dynamicDataChildren = dynamicData[2];\n for(const parallelRouteKey in serverRouterState){\n const serverRouterStateChild = serverChildren[parallelRouteKey];\n const dynamicDataChild = dynamicDataChildren[parallelRouteKey];\n const taskChild = taskChildren.get(parallelRouteKey);\n if (taskChild !== undefined) {\n const taskSegment = taskChild.route[0];\n if ((0, _matchsegments.matchSegment)(serverRouterStateChild[0], taskSegment) && dynamicDataChild !== null && dynamicDataChild !== undefined) {\n // Found a match for this task. Keep traversing down the task tree.\n return finishTaskUsingDynamicDataPayload(taskChild, serverRouterStateChild, dynamicDataChild, dynamicHead);\n }\n }\n // We didn't find a child task that matches the server data. We won't abort\n // the task, though, because a different FlightDataPath may be able to\n // fulfill it (see loop in listenForDynamicRequest). We only abort tasks\n // once we've run out of data.\n }\n}\nfunction createPendingCacheNode(navigatedAt, routerState, prefetchData, prefetchHead, isPrefetchHeadPartial, segmentPath, scrollableSegmentsResult) {\n const routerStateChildren = routerState[1];\n const prefetchDataChildren = prefetchData !== null ? prefetchData[2] : null;\n const parallelRoutes = new Map();\n for(let parallelRouteKey in routerStateChildren){\n const routerStateChild = routerStateChildren[parallelRouteKey];\n const prefetchDataChild = prefetchDataChildren !== null ? prefetchDataChildren[parallelRouteKey] : null;\n const segmentChild = routerStateChild[0];\n const segmentPathChild = segmentPath.concat([\n parallelRouteKey,\n segmentChild\n ]);\n const segmentKeyChild = (0, _createroutercachekey.createRouterCacheKey)(segmentChild);\n const newCacheNodeChild = createPendingCacheNode(navigatedAt, routerStateChild, prefetchDataChild === undefined ? null : prefetchDataChild, prefetchHead, isPrefetchHeadPartial, segmentPathChild, scrollableSegmentsResult);\n const newSegmentMapChild = new Map();\n newSegmentMapChild.set(segmentKeyChild, newCacheNodeChild);\n parallelRoutes.set(parallelRouteKey, newSegmentMapChild);\n }\n // The head is assigned to every leaf segment delivered by the server. Based\n // on corresponding logic in fill-lazy-items-till-leaf-with-head.ts\n const isLeafSegment = parallelRoutes.size === 0;\n if (isLeafSegment) {\n // The segment path of every leaf segment (i.e. page) is collected into\n // a result array. This is used by the LayoutRouter to scroll to ensure that\n // new pages are visible after a navigation.\n // TODO: We should use a string to represent the segment path instead of\n // an array. We already use a string representation for the path when\n // accessing the Segment Cache, so we can use the same one.\n scrollableSegmentsResult.push(segmentPath);\n }\n const maybePrefetchRsc = prefetchData !== null ? prefetchData[1] : null;\n const maybePrefetchLoading = prefetchData !== null ? prefetchData[3] : null;\n return {\n lazyData: null,\n parallelRoutes: parallelRoutes,\n prefetchRsc: maybePrefetchRsc !== undefined ? maybePrefetchRsc : null,\n prefetchHead: isLeafSegment ? prefetchHead : [\n null,\n null\n ],\n // TODO: Technically, a loading boundary could contain dynamic data. We must\n // have separate `loading` and `prefetchLoading` fields to handle this, like\n // we do for the segment data and head.\n loading: maybePrefetchLoading !== undefined ? maybePrefetchLoading : null,\n // Create a deferred promise. This will be fulfilled once the dynamic\n // response is received from the server.\n rsc: createDeferredRsc(),\n head: isLeafSegment ? createDeferredRsc() : null,\n navigatedAt\n };\n}\nfunction finishPendingCacheNode(cacheNode, taskState, serverState, dynamicData, dynamicHead) {\n // Writes a dynamic response into an existing Cache Node tree. This does _not_\n // create a new tree, it updates the existing tree in-place. So it must follow\n // the Suspense rules of cache safety — it can resolve pending promises, but\n // it cannot overwrite existing data. It can add segments to the tree (because\n // a missing segment will cause the layout router to suspend).\n // but it cannot delete them.\n //\n // We must resolve every promise in the tree, or else it will suspend\n // indefinitely. If we did not receive data for a segment, we will resolve its\n // data promise to `null` to trigger a lazy fetch during render.\n const taskStateChildren = taskState[1];\n const serverStateChildren = serverState[1];\n const dataChildren = dynamicData[2];\n // The router state that we traverse the tree with (taskState) is the same one\n // that we used to construct the pending Cache Node tree. That way we're sure\n // to resolve all the pending promises.\n const parallelRoutes = cacheNode.parallelRoutes;\n for(let parallelRouteKey in taskStateChildren){\n const taskStateChild = taskStateChildren[parallelRouteKey];\n const serverStateChild = serverStateChildren[parallelRouteKey];\n const dataChild = dataChildren[parallelRouteKey];\n const segmentMapChild = parallelRoutes.get(parallelRouteKey);\n const taskSegmentChild = taskStateChild[0];\n const taskSegmentKeyChild = (0, _createroutercachekey.createRouterCacheKey)(taskSegmentChild);\n const cacheNodeChild = segmentMapChild !== undefined ? segmentMapChild.get(taskSegmentKeyChild) : undefined;\n if (cacheNodeChild !== undefined) {\n if (serverStateChild !== undefined && (0, _matchsegments.matchSegment)(taskSegmentChild, serverStateChild[0])) {\n if (dataChild !== undefined && dataChild !== null) {\n // This is the happy path. Recursively update all the children.\n finishPendingCacheNode(cacheNodeChild, taskStateChild, serverStateChild, dataChild, dynamicHead);\n } else {\n // The server never returned data for this segment. Trigger a lazy\n // fetch during render. This shouldn't happen because the Route Tree\n // and the Seed Data tree sent by the server should always be the same\n // shape when part of the same server response.\n abortPendingCacheNode(taskStateChild, cacheNodeChild, null);\n }\n } else {\n // The server never returned data for this segment. Trigger a lazy\n // fetch during render.\n abortPendingCacheNode(taskStateChild, cacheNodeChild, null);\n }\n } else {\n // The server response matches what was expected to receive, but there's\n // no matching Cache Node in the task tree. This is a bug in the\n // implementation because we should have created a node for every\n // segment in the tree that's associated with this task.\n }\n }\n // Use the dynamic data from the server to fulfill the deferred RSC promise\n // on the Cache Node.\n const rsc = cacheNode.rsc;\n const dynamicSegmentData = dynamicData[1];\n if (rsc === null) {\n // This is a lazy cache node. We can overwrite it. This is only safe\n // because we know that the LayoutRouter suspends if `rsc` is `null`.\n cacheNode.rsc = dynamicSegmentData;\n } else if (isDeferredRsc(rsc)) {\n // This is a deferred RSC promise. We can fulfill it with the data we just\n // received from the server. If it was already resolved by a different\n // navigation, then this does nothing because we can't overwrite data.\n rsc.resolve(dynamicSegmentData);\n } else {\n // This is not a deferred RSC promise, nor is it empty, so it must have\n // been populated by a different navigation. We must not overwrite it.\n }\n // Check if this is a leaf segment. If so, it will have a `head` property with\n // a pending promise that needs to be resolved with the dynamic head from\n // the server.\n const head = cacheNode.head;\n if (isDeferredRsc(head)) {\n head.resolve(dynamicHead);\n }\n}\nfunction abortTask(task, error) {\n const cacheNode = task.node;\n if (cacheNode === null) {\n // This indicates the task is already complete.\n return;\n }\n const taskChildren = task.children;\n if (taskChildren === null) {\n // Reached the leaf task node. This is the root of a pending cache\n // node tree.\n abortPendingCacheNode(task.route, cacheNode, error);\n } else {\n // This is an intermediate task node. Keep traversing until we reach a\n // task node with no children. That will be the root of the cache node tree\n // that needs to be resolved.\n for (const taskChild of taskChildren.values()){\n abortTask(taskChild, error);\n }\n }\n // Set this to null to indicate that this task is now complete.\n task.dynamicRequestTree = null;\n}\nfunction abortPendingCacheNode(routerState, cacheNode, error) {\n // For every pending segment in the tree, resolve its `rsc` promise to `null`\n // to trigger a lazy fetch during render.\n //\n // Or, if an error object is provided, it will error instead.\n const routerStateChildren = routerState[1];\n const parallelRoutes = cacheNode.parallelRoutes;\n for(let parallelRouteKey in routerStateChildren){\n const routerStateChild = routerStateChildren[parallelRouteKey];\n const segmentMapChild = parallelRoutes.get(parallelRouteKey);\n if (segmentMapChild === undefined) {\n continue;\n }\n const segmentChild = routerStateChild[0];\n const segmentKeyChild = (0, _createroutercachekey.createRouterCacheKey)(segmentChild);\n const cacheNodeChild = segmentMapChild.get(segmentKeyChild);\n if (cacheNodeChild !== undefined) {\n abortPendingCacheNode(routerStateChild, cacheNodeChild, error);\n } else {\n // This shouldn't happen because we're traversing the same tree that was\n // used to construct the cache nodes in the first place.\n }\n }\n const rsc = cacheNode.rsc;\n if (isDeferredRsc(rsc)) {\n if (error === null) {\n // This will trigger a lazy fetch during render.\n rsc.resolve(null);\n } else {\n // This will trigger an error during rendering.\n rsc.reject(error);\n }\n }\n // Check if this is a leaf segment. If so, it will have a `head` property with\n // a pending promise that needs to be resolved. If an error was provided, we\n // will not resolve it with an error, since this is rendered at the root of\n // the app. We want the segment to error, not the entire app.\n const head = cacheNode.head;\n if (isDeferredRsc(head)) {\n head.resolve(null);\n }\n}\nfunction updateCacheNodeOnPopstateRestoration(oldCacheNode, routerState) {\n // A popstate navigation reads data from the local cache. It does not issue\n // new network requests (unless the cache entries have been evicted). So, we\n // update the cache to drop the prefetch data for any segment whose dynamic\n // data was already received. This prevents an unnecessary flash back to PPR\n // state during a back/forward navigation.\n //\n // This function clones the entire cache node tree and sets the `prefetchRsc`\n // field to `null` to prevent it from being rendered. We can't mutate the node\n // in place because this is a concurrent data structure.\n const routerStateChildren = routerState[1];\n const oldParallelRoutes = oldCacheNode.parallelRoutes;\n const newParallelRoutes = new Map(oldParallelRoutes);\n for(let parallelRouteKey in routerStateChildren){\n const routerStateChild = routerStateChildren[parallelRouteKey];\n const segmentChild = routerStateChild[0];\n const segmentKeyChild = (0, _createroutercachekey.createRouterCacheKey)(segmentChild);\n const oldSegmentMapChild = oldParallelRoutes.get(parallelRouteKey);\n if (oldSegmentMapChild !== undefined) {\n const oldCacheNodeChild = oldSegmentMapChild.get(segmentKeyChild);\n if (oldCacheNodeChild !== undefined) {\n const newCacheNodeChild = updateCacheNodeOnPopstateRestoration(oldCacheNodeChild, routerStateChild);\n const newSegmentMapChild = new Map(oldSegmentMapChild);\n newSegmentMapChild.set(segmentKeyChild, newCacheNodeChild);\n newParallelRoutes.set(parallelRouteKey, newSegmentMapChild);\n }\n }\n }\n // Only show prefetched data if the dynamic data is still pending.\n //\n // Tehnically, what we're actually checking is whether the dynamic network\n // response was received. But since it's a streaming response, this does not\n // mean that all the dynamic data has fully streamed in. It just means that\n // _some_ of the dynamic data was received. But as a heuristic, we assume that\n // the rest dynamic data will stream in quickly, so it's still better to skip\n // the prefetch state.\n const rsc = oldCacheNode.rsc;\n const shouldUsePrefetch = isDeferredRsc(rsc) && rsc.status === 'pending';\n return {\n lazyData: null,\n rsc,\n head: oldCacheNode.head,\n prefetchHead: shouldUsePrefetch ? oldCacheNode.prefetchHead : [\n null,\n null\n ],\n prefetchRsc: shouldUsePrefetch ? oldCacheNode.prefetchRsc : null,\n loading: oldCacheNode.loading,\n // These are the cloned children we computed above\n parallelRoutes: newParallelRoutes,\n navigatedAt: oldCacheNode.navigatedAt\n };\n}\nconst DEFERRED = Symbol();\n// This type exists to distinguish a DeferredRsc from a Flight promise. It's a\n// compromise to avoid adding an extra field on every Cache Node, which would be\n// awkward because the pre-PPR parts of codebase would need to account for it,\n// too. We can remove it once type Cache Node type is more settled.\nfunction isDeferredRsc(value) {\n return value && value.tag === DEFERRED;\n}\nfunction createDeferredRsc() {\n let resolve;\n let reject;\n const pendingRsc = new Promise((res, rej)=>{\n resolve = res;\n reject = rej;\n });\n pendingRsc.status = 'pending';\n pendingRsc.resolve = (value)=>{\n if (pendingRsc.status === 'pending') {\n const fulfilledRsc = pendingRsc;\n fulfilledRsc.status = 'fulfilled';\n fulfilledRsc.value = value;\n resolve(value);\n }\n };\n pendingRsc.reject = (error)=>{\n if (pendingRsc.status === 'pending') {\n const rejectedRsc = pendingRsc;\n rejectedRsc.status = 'rejected';\n rejectedRsc.reason = error;\n reject(error);\n }\n };\n pendingRsc.tag = DEFERRED;\n return pendingRsc;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=ppr-navigations.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcHByLW5hdmlnYXRpb25zLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQTBrQ2dCQSxTQUFTO2VBQVRBOztJQTFWQUMsdUJBQXVCO2VBQXZCQTs7SUF2cEJBQyxrQkFBa0I7ZUFBbEJBOztJQTZqQ0FDLG9DQUFvQztlQUFwQ0E7OztxQ0F6b0NvQjsyQ0FDUDtrREFDUTt5REFFTztnREFDUDtBQWlDckMsTUFBTUMsc0JBQXlDO0lBQzdDQyxPQUFPO0lBQ1BDLE1BQU07SUFDTkMsb0JBQW9CO0lBQ3BCQyxVQUFVO0FBQ1o7QUFpQ08sU0FBU04sbUJBQ2RPLFdBQW1CLEVBQ25CQyxZQUF1QixFQUN2QkMsY0FBaUMsRUFDakNDLGNBQWlDLEVBQ2pDQyxZQUFzQyxFQUN0Q0MsWUFBNkIsRUFDN0JDLHFCQUE4QixFQUM5QkMsb0JBQTZCLEVBQzdCQyx3QkFBa0Q7SUFFbEQsTUFBTUMsY0FBd0MsRUFBRTtJQUNoRCxPQUFPQyw0QkFDTFYsYUFDQUMsY0FDQUMsZ0JBQ0FDLGdCQUNBLE9BQ0FDLGNBQ0FDLGNBQ0FDLHVCQUNBQyxzQkFDQUUsYUFDQUQ7QUFFSjtBQUVBLFNBQVNFLDRCQUNQVixXQUFtQixFQUNuQkMsWUFBdUIsRUFDdkJDLGNBQWlDLEVBQ2pDQyxjQUFpQyxFQUNqQ1EsaUJBQTBCLEVBQzFCUCxZQUFzQyxFQUN0Q0MsWUFBNkIsRUFDN0JDLHFCQUE4QixFQUM5QkMsb0JBQTZCLEVBQzdCRSxXQUE4QixFQUM5QkQsd0JBQWtEO0lBRWxELDBEQUEwRDtJQUMxRCxNQUFNSSx5QkFBeUJWLGNBQWMsQ0FBQyxFQUFFO0lBQ2hELE1BQU1XLHlCQUF5QlYsY0FBYyxDQUFDLEVBQUU7SUFDaEQsTUFBTVcsdUJBQXVCVixpQkFBaUIsT0FBT0EsWUFBWSxDQUFDLEVBQUUsR0FBRztJQUV2RSxJQUFJLENBQUNPLG1CQUFtQjtR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STtRQUV2QmxELGNBQWM4SCxvQkFBb0JsSSxhQUFhSSxZQUFZLEdBQUc7WUFBQztZQUFNO1NBQUs7UUFDMUVpRCxhQUFhNkUsb0JBQW9CbEksYUFBYXFELFdBQVcsR0FBRztRQUM1REUsU0FBU3ZELGFBQWF1RCxPQUFPO1FBRTdCLGtEQUFrRDtRQUNsRHZDLGdCQUFnQmlIO1FBRWhCbEksYUFBYUMsYUFBYUQsV0FBVztJQUN2QztBQUNGO0FBRUEsTUFBTXFJLFdBQVdDO0FBOEJqQiw4RUFBOEU7QUFDOUUsZ0ZBQWdGO0FBQ2hGLDhFQUE4RTtBQUM5RSxtRUFBbUU7QUFDbkUsU0FBU1IsY0FBY1MsS0FBVTtJQUMvQixPQUFPQSxTQUFTQSxNQUFNQyxHQUFHLEtBQUtIO0FBQ2hDO0FBRUEsU0FBU3ZCO0lBQ1AsSUFBSWlCO0lBQ0osSUFBSUU7SUFDSixNQUFNUSxhQUFhLElBQUlDLFFBQXlCLENBQUNDLEtBQUtDO1FBQ3BEYixVQUFVWTtRQUNWVixTQUFTVztJQUNYO0lBQ0FILFdBQVdMLE1BQU0sR0FBRztJQUNwQkssV0FBV1YsT0FBTyxHQUFHLENBQUNRO1FBQ3BCLElBQUlFLFdBQVdMLE1BQU0sS0FBSyxXQUFXO1lBQ25DLE1BQU1TLGVBQXFDSjtZQUMzQ0ksYUFBYVQsTUFBTSxHQUFHO1lBQ3RCUyxhQUFhTixLQUFLLEdBQUdBO1lBQ3JCUixRQUFRUTtRQUNWO0lBQ0Y7SUFDQUUsV0FBV1IsTUFBTSxHQUFHLENBQUNsQztRQUNuQixJQUFJMEMsV0FBV0wsTUFBTSxLQUFLLFdBQVc7WUFDbkMsTUFBTVUsY0FBbUNMO1lBQ3pDSyxZQUFZVixNQUFNLEdBQUc7WUFDckJVLFlBQVlDLE1BQU0sR0FBR2hEO1lBQ3JCa0MsT0FBT2xDO1FBQ1Q7SUFDRjtJQUNBMEMsV0FBV0QsR0FBRyxHQUFHSDtJQUNqQixPQUFPSTtBQUNUIiwic291cmNlcyI6WyIvaG9tZS9zcmMvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcHByLW5hdmlnYXRpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgQ2FjaGVOb2RlU2VlZERhdGEsXG4gIEZsaWdodFJvdXRlclN0YXRlLFxuICBGbGlnaHRTZWdtZW50UGF0aCxcbiAgU2VnbWVudCxcbn0gZnJvbSAnLi4vLi4vLi4vc2VydmVyL2FwcC1yZW5kZXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7XG4gIENhY2hlTm9kZSxcbiAgQ2hpbGRTZWdtZW50TWFwLFxuICBIZWFkRGF0YSxcbiAgTG9hZGluZ01vZHVsZURhdGEsXG4gIFJlYWR5Q2FjaGVOb2RlLFxufSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvbGliL2FwcC1yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZSdcbmltcG9ydCB7IERFRkFVTFRfU0VHTUVOVF9LRVkgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvbGliL3NlZ21lbnQnXG5pbXBvcnQgeyBtYXRjaFNlZ21lbnQgfSBmcm9tICcuLi9tYXRjaC1zZWdtZW50cydcbmltcG9ydCB7IGNyZWF0ZVJvdXRlckNhY2hlS2V5IH0gZnJvbSAnLi9jcmVhdGUtcm91dGVyLWNhY2hlLWtleSdcbmltcG9ydCB0eXBlIHsgRmV0Y2hTZXJ2ZXJSZXNwb25zZVJlc3VsdCB9IGZyb20gJy4vZmV0Y2gtc2VydmVyLXJlc3BvbnNlJ1xuaW1wb3J0IHsgaXNOYXZpZ2F0aW5nVG9OZXdSb290TGF5b3V0IH0gZnJvbSAnLi9pcy1uYXZpZ2F0aW5nLXRvLW5ldy1yb290LWxheW91dCdcbmltcG9ydCB7IERZTkFNSUNfU1RBTEVUSU1FX01TIH0gZnJvbSAnLi9wcmVmZXRjaC1jYWNoZS11dGlscydcblxuLy8gVGhpcyBpcyB5ZXQgYW5vdGhlciB0cmVlIHR5cGUgdGhhdCBpcyB1c2VkIHRvIHRyYWNrIHBlbmRpbmcgcHJvbWlzZXMgdGhhdFxuLy8gbmVlZCB0byBiZSBmdWxmaWxsZWQgb25jZSB0aGUgZHluYW1pYyBkYXRhIGlzIHJlY2VpdmVkLiBUaGUgdGVybWluYWwgbm9kZXMgb2Zcbi8vIHRoaXMgdHJlZSByZXByZXNlbnQgdGhlIG5ldyBDYWNoZSBOb2RlIHRyZWVzIHRoYXQgd2VyZSBjcmVhdGVkIGR1cmluZyB0aGlzXG4vLyByZXF1ZXN0LiBXZSBjYW4ndCB1c2UgdGhlIENhY2hlIE5vZGUgdHJlZSBvciBSb3V0ZSBTdGF0ZSB0cmVlIGRpcmVjdGx5XG4vLyBiZWNhdXNlIHRob3NlIGluY2x1ZGUgcmV1c2VkIG5vZGVzLCB0b28uIFRoaXMgdHJlZSBpcyBkaXNjYXJkZWQgYXMgc29vbiBhc1xuLy8gdGhlIG5hdmlnYXRpb24gcmVzcG9uc2UgaXMgcmVjZWl2ZWQuXG50eXBlIFNQQU5hdmlnYXRpb25UYXNrID0ge1xuICAvLyBUaGUgcm91dGVyIHN0YXRlIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHRyZWUgdGhhdCB0aGlzIFRhc2sgcmVwcmVzZW50cy5cbiAgcm91dGU6IEZsaWdodFJvdXRlclN0YXRlXG4gIC8vIFRoZSBDYWNoZU5vZGUgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgdHJlZSB0aGF0IHRoaXMgVGFzayByZXByZXNlbnRzLiBJZlxuICAvLyBgY2hpbGRyZW5gIGlzIG51bGwgKGkuZS4gaWYgdGhpcyBpcyBhIHRlcm1pbmFsIHRhc2sgbm9kZSksIHRoZW4gYG5vZGVgXG4gIC8vIHJlcHJlc2VudHMgYSBicmFuZCBuZXcgQ2FjaGUgTm9kZSB0cmVlLCB3aGljaCB3YXkgb3IgbWF5IG5vdCBuZWVkIHRvIGJlXG4gIC8vIGZpbGxlZCB3aXRoIGR5bmFtaWMgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIuXG4gIG5vZGU6IENhY2hlTm9kZSB8IG51bGxcbiAgLy8gVGhlIHRyZWUgc2VudCB0byB0aGUgc2VydmVyIGR1cmluZyB0aGUgZHluYW1pYyByZXF1ZXN0LiBUaGlzIGlzIHRoZVxuICAvLyBzYW1lIGFzIGByb3V0ZWAsIGV4Y2VwdCB3aXRoIHRoZSBgcmVmZXRjaGAgbWFya2VyIHNldCBvbiBkeW5hbWljIHNlZ21lbnRzLlxuICAvLyBJZiBhbGwgdGhlIHNlZ21lbnRzIGFyZSBzdGF0aWMsIHRoZW4gdGhpcyB3aWxsIGJlIG51bGwsIGFuZCBubyBzZXJ2ZXJcbiAgLy8gcmVxdWVzdCBpcyByZXF1aXJlZC5cbiAgZHluYW1pY1JlcXVlc3RUcmVlOiBGbGlnaHRSb3V0ZXJTdGF0ZSB8IG51bGxcbiAgY2hpbGRyZW46IE1hcDxzdHJpbmcsIFNQQU5hdmlnYXRpb25UYXNrPiB8IG51bGxcbn1cblxuLy8gQSBzcGVjaWFsIHR5cGUgdXNlZCB0byBiYWlsIG91dCBhbmQgdHJpZ2dlciBhIGZ1bGwtcGFnZSBuYXZpZ2F0aW9uLlxudHlwZSBNUEFOYXZpZ2F0aW9uVGFzayA9IHtcbiAgLy8gTVBBIHRhc2tzIGFyZSBkaXN0aW5ndWlzZWQgZnJvbSBTUEEgdGFza3MgYnkgaGF2aW5nIGEgbnVsbCBgcm91dGVgLlxuICByb3V0ZTogbnVsbFxuICBub2RlOiBudWxsXG4gIGR5bmFtaWNSZXF1ZXN0VHJlZTogbnVsbFxuICBjaGlsZHJlbjogbnVsbFxufVxuXG5jb25zdCBNUEFfTkFWSUdBVElPTl9UQVNLOiBNUEFOYXZpZ2F0aW9uVGFzayA9IHtcbiAgcm91dGU6IG51bGwsXG4gIG5vZGU6IG51bGwsXG4gIGR5bmFtaWNSZXF1ZXN0VHJlZTogbnVsbCxcbiAgY2hpbGRyZW46IG51bGwsXG59XG5cbmV4cG9ydCB0eXBlIFRhc2sgPSBTUEFOYXZpZ2F0aW9uVGFzayB8IE1QQU5hdmlnYXRpb25UYXNrXG5cbi8vIENyZWF0ZXMgYSBuZXcgQ2FjaGUgTm9kZSB0cmVlIChpLmUuIGNvcHktb24td3JpdGUpIHRoYXQgcmVwcmVzZW50cyB0aGVcbi8vIG9wdGltaXN0aWMgcmVzdWx0IG9mIGEgbmF2aWdhdGlvbiwgdXNpbmcgYm90aCB0aGUgY3VycmVudCBDYWNoZSBOb2RlIHRyZWUgYW5kXG4vLyBkYXRhIHRoYXQgd2FzIHByZWZldGNoZWQgcHJpb3IgdG8gbmF2aWdhdGlvbi5cbi8vXG4vLyBBdCB0aGUgbW9tZW50IHdlIGNhbGwgdGhpcyBmdW5jdGlvbiwgd2UgaGF2ZW4ndCB5ZXQgcmVjZWl2ZWQgdGhlIG5hdmlnYXRpb25cbi8vIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci4gSXQgY291bGQgc2VuZCBiYWNrIHNvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudFxuLy8gZnJvbSB0aGUgdHJlZSB0aGF0IHdhcyBwcmVmZXRjaGVkIOKAlCBkdWUgdG8gcmV3cml0ZXMsIGRlZmF1bHQgcm91dGVzLCBwYXJhbGxlbFxuLy8gcm91dGVzLCBldGMuXG4vL1xuLy8gQnV0IGluIG1vc3QgY2FzZXMsIGl0IHdpbGwgcmV0dXJuIHRoZSBzYW1lIHRyZWUgdGhhdCB3ZSBwcmVmZXRjaGVkLCBqdXN0IHdpdGhcbi8vIHRoZSBkeW5hbWljIGhvbGVzIGZpbGxlZCBpbi4gU28gd2Ugb3B0aW1pc3RpY2FsbHkgYXNzdW1lIHRoaXMgd2lsbCBoYXBwZW4sXG4vLyBhbmQgYWNjZXB0IHRoYXQgdGhlIHJlYWwgcmVzdWx0IGNvdWxkIGJlIGFyYml0cmFyaWx5IGRpZmZlcmVudC5cbi8vXG4vLyBXZSdsbCByZXVzZSBhbnl0aGluZyB0aGF0IHdhcyBhbHJlYWR5IGluIHRoZSBwcmV2aW91cyB0cmVlLCBzaW5jZSB0aGF0J3Mgd2hhdFxuLy8gdGhlIHNlcnZlciBkb2VzLlxuLy9cbi8vIE5ldyBzZWdtZW50cyAob25lcyB0aGF0IGRvbid0IGFwcGVhciBpbiB0aGUgb2xkIHRyZWUpIGFyZSBhc3NpZ25lZCBhblxuLy8gdW5yZXNvbHZlZCBwcm9taXNlLiBUaGUgZGF0YSBmb3IgdGhlc2UgcHJvbWlzZXMgd2lsbCBiZSBmdWxmaWxsZWQgbGF0ZXIsIHdoZW5cbi8vIHRoZSBuYXZpZ2F0aW9uIHJlc3BvbnNlIGlzIHJlY2VpdmVkLlxuLy9cbi8vIFRoZSB0cmVlIGNhbiBiZSByZW5kZXJlZCBpbW1lZGlhdGVseSBhZnRlciBpdCBpcyBjcmVhdGVkICh0aGF0J3Mgd2h5IHRoaXMgaXNcbi8vIGEgc3luY2hyb25vdXMgZnVuY3Rpb24pLiBBbnkgbmV3IHRyZWVzIHRoYXQgZG8gbm90IGhhdmUgcHJlZmV0Y2ggZGF0YSB3aWxsXG4vLyBzdXNwZW5kIGR1cmluZyByZW5kZXJpbmcsIHVudGlsIHRoZSBkeW5hbWljIGRhdGEgc3RyZWFtcyBpbi5cbi8vXG4vLyBSZXR1cm5zIGEgVGFzayBvYmplY3QsIHdoaWNoIGNvbnRhaW5zIGJvdGggdGhlIHVwZGF0ZWQgQ2FjaGUgTm9kZSBhbmQgYSBwYXRoXG4vLyB0byB0aGUgcGVuZGluZyBzdWJ0cmVlcyB0aGF0IG5lZWQgdG8gYmUgcmVzb2x2ZWQgYnkgdGhlIG5hdmlnYXRpb24gcmVzcG9uc2UuXG4vL1xuLy8gQSByZXR1cm4gdmFsdWUgb2YgYG51bGxgIG1lYW5zIHRoZXJlIHdlcmUgbm8gY2hhbmdlcywgYW5kIHRoZSBwcmV2aW91cyB0cmVlXG4vLyBjYW4gYmUgcmV1c2VkIHdpdGhvdXQgaW5pdGlhdGluZyBhIHNlcnZlciByZXF1ZXN0LlxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0UFBSTmF2aWdhdGlvbihcbiAgbmF2aWdhdGVkQXQ6IG51bWJlcixcbiAgb2xkQ2FjaGVOb2RlOiBDYWNoZU5vZGUsXG4gIG9sZFJvdXRlclN0YXRlOiBGbGlnaHRSb3V0ZXJTdGF0ZSxcbiAgbmV3Um91dGVyU3RhdGU6IEZsaWdodFJvdXRlclN0YXRlLFxuICBwcmVmZXRjaERhdGE6IENhY2hlTm9kZVNlZWREYXRhIHwgbnVsbCxcbiAgcHJlZmV0Y2hIZWFkOiBIZWFkRGF0YSB8IG51bGwsXG4gIGlzUHJlZmV0Y2hIZWFkUGFydGlhbDogYm9vbGVhbixcbiAgaXNTYW1lUGFnZU5hdmlnYXRpb246IGJvb2xlYW4sXG4gIHNjcm9sbGFibGVTZWdtZW50c1Jlc3VsdDogQXJyYXk8RmxpZ2h0U2VnbWVudFBhdGg+XG4pOiBUYXNrIHwgbnVsbCB7XG4gIGNvbnN0IHNlZ21lbnRQYXRoOiBBcnJheTxGbGlnaHRTZWdtZW50UGF0aD4gPSBbXVxuICByZXR1cm4gdXBkYXRlQ2FjaGVOb2RlT25OYXZpZ2F0aW9uKFxuICAgIG5hdmlnYXRlZEF0LFxuICAgIG9sZENhY2hlTm9kZSxcbiAgICBvbGRSb3V0ZXJTdGF0ZSxcbiAgICBuZXdSb3V0ZXJTdGF0ZSxcbiAgICBmYWxzZSxcbiAgICBwcmVmZXRjaERhdGEsXG4gICAgcHJlZmV0Y2hIZWFkLFxuICAgIGlzUHJlZmV0Y2hIZWFkUGFydGlhbCxcbiAgICBpc1NhbWVQYWdlTmF2aWdhdGlvbixcbiAgICBzZWdtZW50UGF0aCxcbiAgICBzY3JvbGxhYmxlU2VnbWVudHNSZXN1bHRcbiAgKVxufVxuXG5mdW5jdGlvbiB1cGRhdGVDYWNoZU5vZGVPbk5hdmlnYXRpb24oXG4gIG5hdmlnYXRlZEF0OiBudW1iZXIsXG4gIG9sZENhY2hlTm9kZTogQ2FjaGVOb2RlLFxuICBvbGRSb3V0ZXJTdGF0ZTogRmxpZ2h0Um91dGVyU3RhdGUsXG4gIG5ld1JvdXRlclN0YXRlOiBGbGlnaHRSb3V0ZXJTdGF0ZSxcbiAgZGlkRmluZFJvb3RMYXlvdXQ6IGJvb2xlYW4sXG4gIHByZWZldGNoRGF0YTogQ2FjaGVOb2RlU2VlZERhdGEgfCBudWxsLFxuICBwcmVmZXRjaEhlYWQ6IEhlYWREYXRhIHwgbnVsbCxcbiAgaXNQcmVmZXRjaEhlYWRQYXJ0aWFsOiBib29sZWFuLFxuICBpc1NhbWVQYWdlTmF2aWdhdGlvbjogYm9vbGVhbixcbiAgc2VnbWVudFBhdGg6IEZsaWdodFNlZ21lbnRQYXRoLFxuICBzY3JvbGxhYmxlU2VnbWVudHNSZXN1bHQ6IEFycmF5PEZsaWdodFNlZ21lbnRQYXRoPlxuKTogVGFzayB8IG51bGwge1xuICAvLyBEaWZmIHRoZSBvbGQgYW5kIG5ldyB0cmVlcyB0byByZXVzZSB0aGUgc2hhcmVkIGxheW91dHMuXG4gIGNvbnN0IG9sZFJvdXRlclN0YXRlQ2hpbGRyZW4gPSBvbGRSb3V0ZXJTdGF0ZVsxXVxuICBjb25zdCBuZXdSb3V0ZXJTdGF0ZUNoaWxkcmVuID0gbmV3Um91dGVyU3RhdGVbMV1cbiAgY29uc3QgcHJlZmV0Y2hEYXRhQ2hpbGRyZW4gPSBwcmVmZXRjaERhdGEgIT09IG51bGwgPyBwcmVmZXRjaERhdGFbMl0gOiBudWxsXG5cbiAgaWYgKCFkaWRGaW5kUm9vdExheW91dCkge1xuICAgIC8vIFdlJ3JlIGN1cnJlbnRseSB0cmF2ZXJzaW5nIHRoZSBwYXJ0IG9mIHRoZSB0cmVlIHRoYXQgd2FzIGFsc28gcGFydCBvZlxuICAgIC8vIHRoZSBwcmV2aW91cyByb3V0ZS4gSWYgd2UgZGlzY292ZXIgYSByb290IGxheW91dCwgdGhlbiB3ZSBkb24ndCBuZWVkIHRvXG4gICAgLy8gdHJpZ2dlciBhbiBNUEEgbmF2aWdhdGlvbi4gU2VlIGJlZ2luUmVuZGVyaW5nTmV3Um91dGVUcmVlIGZvciBjb250ZXh0LlxuICAgIGNvbnN0IGlzUm9vdExheW91dCA9IG5ld1JvdXRlclN0YXRlWzRdID09PSB0cnVlXG4gICAgaWYgKGlzUm9vdExheW91dCkge1xuICAgICAgLy8gRm91bmQgYSBtYXRjaGluZyByb290IGxheW91dC5cbiAgICAgIGRpZEZpbmRSb290TGF5b3V0ID0gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG9sZFBhcmFsbGVsUm91dGVzID0gb2xkQ2FjaGVOb2RlLnBhcmFsbGVsUm91dGVzXG5cbiAgLy8gQ2xvbmUgdGhlIGN1cnJlbnQgc2V0IG9mIHNlZ21lbnQgY2hpbGRyZW4sIGV2ZW4gaWYgdGhleSBhcmVuJ3QgYWN0aXZlIGluXG4gIC8vIHRoZSBuZXcgdHJlZS5cbiAgLy8gVE9ETzogV2UgY3VycmVudGx5IHJldGFpbiBhbGwgdGhlIGluYWN0aXZlIHNlZ21lbnRzIGluZGVmaW5pdGVseSwgdW50aWxcbiAgLy8gdGhlcmUncyBhbiBleHBsaWNpdCByZWZyZXNoLCBvciBhIHBhcmVudCBsYXlvdXQgaXMgbGF6aWx5IHJlZnJlc2hlZC4gV2VcbiAgLy8gcmVseSBvbiB0aGlzIGZvciBwb3BzdGF0ZSBuYXZpZ2F0aW9ucywgd2hpY2ggdXBkYXRlIHRoZSBSb3V0ZXIgU3RhdGUgVHJlZVxuICAvLyBidXQgZG8gbm90IGVhZ2VybHkgcGVyZm9ybSBhIGRhdGEgZmV0Y2gsIGJlY2F1c2UgdGhleSBleHBlY3QgdGhlIHNlZ21lbnRcbiAgLy8gZGF0YSB0byBhbHJlYWR5IGJlIGluIHRoZSBDYWNoZSBOb2RlIHRyZWUuIEZvciBoaWdobHkgc3RhdGljIHNpdGVzIHRoYXRcbiAgLy8gYXJlIG1vc3RseSByZWFkLW9ubHksIHRoaXMgbWF5IGhhcHBlbiBvbmx5IHJhcmVseSwgY2F1c2luZyBtZW1vcnkgdG9cbiAgLy8gbGVhay4gV2Ugc2hvdWxkIGZpZ3VyZSBvdXQgYSBiZXR0ZXIgbW9kZWwgZm9yIHRoZSBsaWZldGltZSBvZiBpbmFjdGl2ZVxuICAvLyBzZWdtZW50cywgc28gd2UgY2FuIG1haW50YWluIGluc3RhbnQgYmFjay9mb3J3YXJkIG5hdmlnYXRpb25zIHdpdGhvdXRcbiAgLy8gbGVha2luZyBtZW1vcnkgaW5kZWZpbml0ZWx5LlxuICBjb25zdCBwcmVmZXRjaFBhcmFsbGVsUm91dGVzID0gbmV3IE1hcChvbGRQYXJhbGxlbFJvdXRlcylcblxuICAvLyBBcyB3ZSBkaWZmIHRoZSB0cmVlcywgd2UgbWF5IHNvbWV0aW1lcyBtb2RpZnkgKGNvcHktb24td3JpdGUsIG5vdCBtdXRhdGUpXG4gIC8vIHRoZSBSb3V0ZSBUcmVlIHRoYXQgd2FzIHJldHVybmVkIGJ5IHRoZSBzZXJ2ZXIg4oCUIGZvciBleGFtcGxlLCBpbiB0aGUgY2FzZVxuICAvLyBvZiBkZWZhdWx0IHBhcmFsbGVsIHJvdXRlcywgd2UgcHJlc2VydmUgdGhlIGN1cnJlbnRseSBhY3RpdmUgc2VnbWVudC4gVG9cbiAgLy8gYXZvaWQgbXV0YXRpbmcgdGhlIG9yaWdpbmFsIHRyZWUsIHdlIGNsb25lIHRoZSByb3V0ZXIgc3RhdGUgY2hpbGRyZW4gYWxvbmdcbiAgLy8gdGhlIHJldHVybiBwYXRoLlxuICBsZXQgcGF0Y2hlZFJvdXRlclN0YXRlQ2hpbGRyZW46IHtcbiAgICBbcGFyYWxsZWxSb3V0ZUtleTogc3RyaW5nXTogRmxpZ2h0Um91dGVyU3RhdGVcbiAgfSA9IHt9XG4gIGxldCB0YXNrQ2hpbGRyZW4gPSBudWxsXG5cbiAgLy8gTW9zdCBuYXZpZ2F0aW9ucyByZXF1aXJlIGEgcmVxdWVzdCB0byBmZXRjaCBhZGRpdGlvbmFsIGRhdGEgZnJvbSB0aGVcbiAgLy8gc2VydmVyLCBlaXRoZXIgYmVjYXVzZSB0aGUgZGF0YSB3YXMgbm90IGFscmVhZHkgcHJlZmV0Y2hlZCwgb3IgYmVjYXVzZSB0aGVcbiAgLy8gdGFyZ2V0IHJvdXRlIGNvbnRhaW5zIGR5bmFtaWMgZGF0YSB0aGF0IGNhbm5vdCBiZSBwcmVmZXRjaGVkLlxuICAvL1xuICAvLyBIb3dldmVyLCBpZiB0aGUgdGFyZ2V0IHJvdXRlIGlzIGZ1bGx5IHN0YXRpYywgYW5kIGl0J3MgYWxyZWFkeSBjb21wbGV0ZWx5XG4gIC8vIGxvYWRlZCBpbnRvIHRoZSBzZWdtZW50IGNhY2hlLCB0aGVuIHdlIGNhbiBza2lwIHRoZSBzZXJ2ZXIgcmVxdWVzdC5cbiAgLy9cbiAgLy8gVGhpcyBzdGFydHMgb2ZmIGFzIGBmYWxzZWAsIGFuZCBpcyBzZXQgdG8gYHRydWVgIGlmIGFueSBvZiB0aGUgY2hpbGRcbiAgLy8gcm91dGVzIHJlcXVpcmVzIGEgZHluYW1pYyByZXF1ZXN0LlxuICBsZXQgbmVlZHNEeW5hbWljUmVxdWVzdCA9IGZhbHNlXG4gIC8vIEFzIHdlIHRyYXZlcnNlIHRoZSBjaGlsZHJlbiwgd2UnbGwgY29uc3RydWN0IGEgRmxpZ2h0Um91dGVyU3RhdGUgdGhhdCBjYW5cbiAgLy8gYmUgc2VudCB0byB0aGUgc2VydmVyIHRvIHJlcXVlc3QgdGhlIGR5bmFtaWMgZGF0YS4gSWYgaXQgdHVybnMgb3V0IHRoYXRcbiAgLy8gbm90aGluZyBpbiB0aGUgc3VidHJlZSBpcyBkeW5hbWljIChpLmUuIG5lZWRzRHluYW1pY1JlcXVlc3QgaXMgZmFsc2UgYXQgdGhlXG4gIC8vIGVuZCksIHRoZW4gdGhpcyB3aWxsIGJlIGRpc2NhcmRlZC5cbiAgLy8gVE9ETzogV2UgY2FuIHByb2JhYmx5IG9wdGltaXplIHRoZSBmb3JtYXQgb2YgdGhpcyBkYXRhIHN0cnVjdHVyZSB0byBvbmx5XG4gIC8vIGluY2x1ZGUgcGF0aHMgdGhhdCBhcmUgZHluYW1pYy4gSW5zdGVhZCBvZiByZXVzaW5nIHRoZVxuICAvLyBGbGlnaHRSb3V0ZXJTdGF0ZSB0eXBlLlxuICBsZXQgZHluYW1pY1JlcXVlc3RUcmVlQ2hpbGRyZW46IHtcbiAgICBbcGFyYWxsZWxSb3V0ZUtleTogc3RyaW5nXTogRmxpZ2h0Um91dGVyU3RhdGVcbiAgfSA9IHt9XG5cbiAgZm9yIChsZXQgcGFyYWxsZWxSb3V0ZUtleSBpbiBuZXdSb3V0ZXJTdGF0ZUNoaWxkcmVuKSB7XG4gICAgY29uc3QgbmV3Um91dGVyU3RhdGVDaGlsZDogRmxpZ2h0Um91dGVyU3RhdGUgPVxuICAgICAgbmV3Um91dGVyU3RhdGVDaGlsZHJlbltwYXJhbGxlbFJvdXRlS2V5XVxuICAgIGNvbnN0IG9sZFJvdXRlclN0YXRlQ2hpbGQ6IEZsaWdodFJvdXRlclN0YXRlIHwgdm9pZCA9XG4gICAgICBvbGRSb3V0ZXJTdGF0ZUNoaWxkcmVuW3BhcmFsbGVsUm91dGVLZXldXG4gICAgY29uc3Qgb2xkU2VnbWVudE1hcENoaWxkID0gb2xkUGFyYWxsZWxSb3V0ZXMuZ2V0KHBhcmFsbGVsUm91dGVLZXkpXG4gICAgY29uc3QgcHJlZmV0Y2hEYXRhQ2hpbGQ6IENhY2hlTm9kZVNlZWREYXRhIHwgdm9pZCB8IG51bGwgPVxuICAgICAgcHJlZmV0Y2hEYXRhQ2hpbGRyZW4gIT09IG51bGxcbiAgICAgICAgPyBwcmVmZXRjaERhdGFDaGlsZHJlbltwYXJhbGxlbFJvdXRlS2V5XVxuICAgICAgICA6IG51bGxcblxuICAgIGNvbnN0IG5ld1NlZ21lbnRDaGlsZCA9IG5ld1JvdXRlclN0YXRlQ2hpbGRbMF1cbiAgICBjb25zdCBuZXdTZWdtZW50UGF0aENoaWxkID0gc2VnbWVudFBhdGguY29uY2F0KFtcbiAgICAgIHBhcmFsbGVsUm91dGVLZXksXG4gICAgICBuZXdTZWdtZW50Q2hpbGQsXG4gICAgXSlcbiAgICBjb25zdCBuZXdTZWdtZW50S2V5Q2hpbGQgPSBjcmVhdGVSb3V0ZXJDYWNoZUtleShuZXdTZWdtZW50Q2hpbGQpXG5cbiAgICBjb25zdCBvbGRTZWdtZW50Q2hpbGQgPVxuICAgICAgb2xkUm91dGVyU3RhdGVDaGlsZCAhPT0gdW5kZWZpbmVkID8gb2xkUm91dGVyU3RhdGVDaGlsZFswXSA6IHVuZGVmaW5lZFxuXG4gICAgY29uc3Qgb2xkQ2FjaGVOb2RlQ2hpbGQgPVxuICAgICAgb2xkU2VnbWVudE1hcENoaWxkICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBvbGRTZWdtZW50TWFwQ2hpbGQuZ2V0KG5ld1NlZ21lbnRLZXlDaGlsZClcbiAgICAgICAgOiB1bmRlZmluZWRcblxuICAgIGxldCB0YXNrQ2hpbGQ6IFRhc2sgfCBudWxsXG4gICAgaWYgKG5ld1NlZ21lbnRDaGlsZCA9PT0gREVGQVVMVF9TRUdNRU5UX0tFWSkge1xuICAgICAgLy8gVGhpcyBpcyBhbm90aGVyIGtpbmQgb2YgbGVhZiBzZWdtZW50IOKAlCBhIGRlZmF1bHQgcm91dGUuXG4gICAgICAvL1xuICAgICAgLy8gRGVmYXVsdCByb3V0ZXMgaGF2ZSBzcGVjaWFsIGJlaGF2aW9yLiBXaGVuIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgc2VnbWVudFxuICAgICAgLy8gZm9yIGEgcGFyYWxsZWwgcm91dGUsIE5leHQuanMgcHJlc2VydmVzIHRoZSBjdXJyZW50bHkgYWN0aXZlIHNlZ21lbnRcbiAgICAgIC8vIGR1cmluZyBhIGNsaWVudCBuYXZpZ2F0aW9uIOKAlCBidXQgbm90IGZvciBpbml0aWFsIHJlbmRlci4gVGhlIHNlcnZlclxuICAgICAgLy8gbGVhdmVzIGl0IHRvIHRoZSBjbGllbnQgdG8gYWNjb3VudCBmb3IgdGhpcy4gU28gd2UgbmVlZCB0byBoYW5kbGVcbiAgICAgIC8vIGl0IGhlcmUuXG4gICAgICBpZiAob2xkUm91dGVyU3RhdGVDaGlsZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFJldXNlIHRoZSBleGlzdGluZyBSb3V0ZXIgU3RhdGUgZm9yIHRoaXMgc2VnbWVudC4gV2Ugc3Bhd24gYSBcInRhc2tcIlxuICAgICAgICAvLyBqdXN0IHRvIGtlZXAgdHJhY2sgb2YgdGhlIHVwZGF0ZWQgcm91dGVyIHN0YXRlOyB1bmxpa2UgbW9zdCwgaXQnc1xuICAgICAgICAvLyBhbHJlYWR5IGZ1bGZpbGxlZCBhbmQgd29uJ3QgYmUgYWZmZWN0ZWQgYnkgdGhlIGR5bmFtaWMgcmVzcG9uc2UuXG4gICAgICAgIHRhc2tDaGlsZCA9IHNwYXduUmV1c2VkVGFzayhvbGRSb3V0ZXJTdGF0ZUNoaWxkKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhlcmUncyBubyBjdXJyZW50bHkgYWN0aXZlIHNlZ21lbnQuIFN3aXRjaCB0byB0aGUgXCJjcmVhdGVcIiBwYXRoLlxuICAgICAgICB0YXNrQ2hpbGQgPSBiZWdpblJlbmRlcmluZ05ld1JvdXRlVHJlZShcbiAgICAgICAgICBuYXZpZ2F0ZWRBdCxcbiAgICAgICAgICBvbGRSb3V0ZXJTdGF0ZUNoaWxkLFxuICAgICAgICAgIG5ld1JvdXRlclN0YXRlQ2hpbGQsXG4gICAgICAgICAgb2xkQ2FjaGVOb2RlQ2hpbGQsXG4gICAgICAgICAgZGlkRmluZFJvb3RMYXlvdXQsXG4gICAgICAgICAgcHJlZmV0Y2hEYXRhQ2hpbGQgIT09IHVuZGVmaW5lZCA/IHByZWZldGNoRGF0YUNoaWxkIDogbnVsbCxcbiAgICAgICAgICBwcmVmZXRjaEhlYWQsXG4gICAgICAgICAgaXNQcmVmZXRjaEhlYWRQYXJ0aWFsLFxuICAgICAgICAgIG5ld1NlZ21lbnRQYXRoQ2hpbGQsXG4gICAgICAgICAgc2Nyb2xsYWJsZVNlZ21lbnRzUmVzdWx0XG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgaXNTYW1lUGFnZU5hdmlnYXRpb24gJiZcbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBwYWdlIHNlZ21lbnQuXG4gICAgICAvLyBUT0RPOiBXZSdyZSBub3QgY29uc2lzdGVudCBhYm91dCBob3cgd2UgZG8gdGhpcyBjaGVjay4gU29tZSBwbGFjZXNcbiAgICAgIC8vIGNoZWNrIGlmIHRoZSBzZWdtZW50IHN0YXJ0cyB3aXRoIFBBR0VfU0VHTUVOVF9LRVksIGJ1dCBtb3N0IHNlZW0gdG9cbiAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGFueSBhbnkgY2hpbGRyZW4sIHdoaWNoIGlzIHdoeSBJJ20gZG9pbmcgaXQgaGVyZS4gV2VcbiAgICAgIC8vIHNob3VsZCBwcm9iYWJseSBlbmNvZGUgYW4gZW1wdHkgY2hpbGRyZW4gc2V0IGFzIGBudWxsYCB0aG91Z2guIEVpdGhlclxuICAgICAgLy8gd2F5LCB3ZSBzaG91bGQgdXBkYXRlIGFsbCB0aGUgY2hlY2tzIHRvIGJlIGNvbnNpc3RlbnQuXG4gICAgICBPYmplY3Qua2V5cyhuZXdSb3V0ZXJTdGF0ZUNoaWxkWzFdKS5sZW5ndGggPT09IDBcbiAgICApIHtcbiAgICAgIC8vIFdlIHNwZWNpYWwgY2FzZSBuYXZpZ2F0aW9ucyB0byB0aGUgZXhhY3Qgc2FtZSBVUkwgYXMgdGhlIGN1cnJlbnRcbiAgICAgIC8vIGxvY2F0aW9uLiBJdCdzIGEgY29tbW9uIFVJIHBhdHRlcm4gZm9yIGFwcHMgdG8gcmVmcmVzaCB3aGVuIHlvdSBjbGljayBhXG4gICAgICAvLyBsaW5rIHRvIHRoZSBjdXJyZW50IHBhZ2UuIFNvIHdoZW4gdGhpcyBoYXBwZW5zLCB3ZSByZWZyZXNoIHRoZSBkeW5hbWljXG4gICAgICAvLyBkYXRhIGluIHRoZSBwYWdlIHNlZ21lbnRzLlxuICAgICAgLy9cbiAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGFwcGx5IGlmIHRoZSBhbnkgcGFydCBvZiB0aGUgaGFzaCBvciBzZWFyY2hcbiAgICAgIC8vIHF1ZXJ5IGhhcyBjaGFuZ2VkLiBUaGlzIG1pZ2h0IGZlZWwgYSBiaXQgd2VpcmQgYnV0IGl0IG1ha2VzIG1vcmUgc2Vuc2VcbiAgICAgIC8vIHdoZW4geW91IGNvbnNpZGVyIHRoYXQgdGhlIHdheSB0byB0cmlnZ2VyIHRoaXMgYmVoYXZpb3IgaXMgdG8gY2xpY2tcbiAgICAgIC8vIHRoZSBzYW1lIGxpbmsgbXVsdGlwbGUgdGltZXMuXG4gICAgICAvL1xuICAgICAgLy8gVE9ETzogV2Ugc2hvdWxkIHByb2JhYmx5IHJlZnJlc2ggdGhlICplbnRpcmUqIHJvdXRlIHdoZW4gdGhpcyBjYXNlXG4gICAgICAvLyBvY2N1cnMsIG5vdCBqdXN0IHRoZSBwYWdlIHNlZ21lbnRzLiBFc3NlbnRpYWxseSB0cmVhdGluZyBpdCB0aGUgc2FtZSBhc1xuICAgICAgLy8gYSByZWZyZXNoKCkgdHJpZ2dlcmVkIGJ5IGFuIGFjdGlvbiwgd2hpY2ggaXMgdGhlIG1vcmUgZXhwbGljaXQgd2F5IG9mXG4gICAgICAvLyBtb2RlbGluZyB0aGUgVUkgcGF0dGVybiBkZXNjcmliZWQgYWJvdmUuXG4gICAgICAvL1xuICAgICAgLy8gQWxzbyBub3RlIHRoYXQgdGhpcyBvbmx5IHJlZnJlc2hlcyB0aGUgZHluYW1pYyBkYXRhLCBub3Qgc3RhdGljL1xuICAgICAgLy8gY2FjaGVkIGRhdGEuIElmIHRoZSBwYWdlIHNlZ21lbnQgaXMgZnVsbHkgc3RhdGljIGFuZCBwcmVmZXRjaGVkLCB0aGVcbiAgICAgIC8vIHJlcXVlc3QgaXMgc2tpcHBlZC4gKFRoaXMgaXMgYWxzbyBob3cgcmVmcmVzaCgpIHdvcmtzLilcbiAgICAgIHRhc2tDaGlsZCA9IGJlZ2luUmVuZGVyaW5nTmV3Um91dGVUcmVlKFxuICAgICAgICBuYXZpZ2F0ZWRBdCxcbiAgICAgICAgb2xkUm91dGVyU3RhdGVDaGlsZCxcbiAgICAgICAgbmV3Um91dGVyU3RhdGVDaGlsZCxcbiAgICAgICAgb2xkQ2FjaGVOb2RlQ2hpbGQsXG4gICAgICAgIGRpZEZpbmRSb290TGF5b3V0LFxuICAgICAgICBwcmVmZXRjaERhdGFDaGlsZCAhPT0gdW5kZWZpbmVkID8gcHJlZmV0Y2hEYXRhQ2hpbGQgOiBudWxsLFxuICAgICAgICBwcmVmZXRjaEhlYWQsXG4gICAgICAgIGlzUHJlZmV0Y2hIZWFkUGFydGlhbCxcbiAgICAgICAgbmV3U2VnbWVudFBhdGhDaGlsZCxcbiAgICAgICAgc2Nyb2xsYWJsZVNlZ21lbnRzUmVzdWx0XG4gICAgICApXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIG9sZFJvdXRlclN0YXRlQ2hpbGQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgb2xkU2VnbWVudENoaWxkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIG1hdGNoU2VnbWVudChuZXdTZWdtZW50Q2hpbGQsIG9sZFNlZ21lbnRDaGlsZClcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgb2xkQ2FjaGVOb2RlQ2hpbGQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICBvbGRSb3V0ZXJTdGF0ZUNoaWxkICE9PSB1bmRlZmluZWRcbiAgICAgICkge1xuICAgICAgICAvLyBUaGlzIHNlZ21lbnQgZXhpc3RzIGluIGJvdGggdGhlIG9sZCBhbmQgbmV3IHRyZWVzLiBSZWN1cnNpdmVseSB1cGRhdGVcbiAgICAgICAgLy8gdGhlIGNoaWxkcmVuLlxuICAgICAgICB0YXNrQ2hpbGQgPSB1cGRhdGVDYWNoZU5vZGVPbk5hdmlnYXRpb24oXG4gICAgICAgICAgbmF2aWdhdGVkQXQsXG4gICAgICAgICAgb2xkQ2FjaGVOb2RlQ2hpbGQsXG4gICAgICAgICAgb2xkUm91dGVyU3RhdGVDaGlsZCxcbiAgICAgICAgICBuZXdSb3V0ZXJTdGF0ZUNoaWxkLFxuICAgICAgICAgIGRpZEZpbmRSb290TGF5b3V0LFxuICAgICAgICAgIHByZWZldGNoRGF0YUNoaWxkLFxuICAgICAgICAgIHByZWZldGNoSGVhZCxcbiAgICAgICAgICBpc1ByZWZldGNoSGVhZFBhcnRpYWwsXG4gICAgICAgICAgaXNTYW1lUGFnZU5hdmlnYXRpb24sXG4gICAgICAgICAgbmV3U2VnbWVudFBhdGhDaGlsZCxcbiAgICAgICAgICBzY3JvbGxhYmxlU2VnbWVudHNSZXN1bHRcbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhlcmUncyBubyBleGlzdGluZyBDYWNoZSBOb2RlIGZvciB0aGlzIHNlZ21lbnQuIFN3aXRjaCB0byB0aGVcbiAgICAgICAgLy8gXCJjcmVhdGVcIiBwYXRoLlxuICAgICAgICB0YXNrQ2hpbGQgPSBiZWdpblJlbmRlcmluZ05ld1JvdXRlVHJlZShcbiAgICAgICAgICBuYXZpZ2F0ZWRBdCxcbiAgICAgICAgICBvbGRSb3V0ZXJTdGF0ZUNoaWxkLFxuICAgICAgICAgIG5ld1JvdXRlclN0YXRlQ2hpbGQsXG4gICAgICAgICAgb2xkQ2FjaGVOb2RlQ2hpbGQsXG4gICAgICAgICAgZGlkRmluZFJvb3RMYXlvdXQsXG4gICAgICAgICAgcHJlZmV0Y2hEYXRhQ2hpbGQgIT09IHVuZGVmaW5lZCA/IHByZWZldGNoRGF0YUNoaWxkIDogbnVsbCxcbiAgICAgICAgICBwcmVmZXRjaEhlYWQsXG4gICAgICAgICAgaXNQcmVmZXRjaEhlYWRQYXJ0aWFsLFxuICAgICAgICAgIG5ld1NlZ21lbnRQYXRoQ2hpbGQsXG4gICAgICAgICAgc2Nyb2xsYWJsZVNlZ21lbnRzUmVzdWx0XG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBpcyBhIG5ldyB0cmVlLiBTd2l0Y2ggdG8gdGhlIFwiY3JlYXRlXCIgcGF0aC5cbiAgICAgIHRhc2tDaGlsZCA9IGJlZ2luUmVuZGVyaW5nTmV3Um91dGVUcmVlKFxuICAgICAgICBuYXZpZ2F0ZWRBdCxcbiAgICAgICAgb2xkUm91dGVyU3RhdGVDaGlsZCxcbiAgICAgICAgbmV3Um91dGVyU3RhdGVDaGlsZCxcbiAgICAgICAgb2xkQ2FjaGVOb2RlQ2hpbGQsXG4gICAgICAgIGRpZEZpbmRSb290TGF5b3V0LFxuICAgICAgICBwcmVmZXRjaERhdGFDaGlsZCAhPT0gdW5kZWZpbmVkID8gcHJlZmV0Y2hEYXRhQ2hpbGQgOiBudWxsLFxuICAgICAgICBwcmVmZXRjaEhlYWQsXG4gICAgICAgIGlzUHJlZmV0Y2hIZWFkUGFydGlhbCxcbiAgICAgICAgbmV3U2VnbWVudFBhdGhDaGlsZCxcbiAgICAgICAgc2Nyb2xsYWJsZVNlZ21lbnRzUmVzdWx0XG4gICAgICApXG4gICAgfVxuXG4gICAgaWYgKHRhc2tDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgLy8gUmVjdXJzaXZlbHkgcHJvcGFnYXRlIHVwIHRoZSBjaGlsZCB0YXNrcy5cblxuICAgICAgaWYgKHRhc2tDaGlsZC5yb3V0ZSA9PT0gbnVsbCkge1xuICAgICAgICAvLyBPbmUgb2YgdGhlIGNoaWxkIHRhc2tzIGRpc2NvdmVyZWQgYSBjaGFuZ2UgdG8gdGhlIHJvb3QgbGF5b3V0LlxuICAgICAgICAvLyBJbW1lZGlhdGVseSB1bndpbmQgZnJvbSB0aGlzIHJlY3Vyc2l2ZSB0cmF2ZXJzYWwuXG4gICAgICAgIHJldHVybiBNUEFfTkFWSUdBVElPTl9UQVNLXG4gICAgICB9XG5cbiAgICAgIGlmICh0YXNrQ2hpbGRyZW4gPT09IG51bGwpIHtcbiAgICAgICAgdGFza0NoaWxkcmVuID0gbmV3IE1hcCgpXG4gICAgICB9XG4gICAgICB0YXNrQ2hpbGRyZW4uc2V0KHBhcmFsbGVsUm91dGVLZXksIHRhc2tDaGlsZClcbiAgICAgIGNvbnN0IG5ld0NhY2hlTm9kZUNoaWxkID0gdGFza0NoaWxkLm5vZGVcbiAgICAgIGlmIChuZXdDYWNoZU5vZGVDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBuZXdTZWdtZW50TWFwQ2hpbGQ6IENoaWxkU2VnbWVudE1hcCA9IG5ldyBNYXAob2xkU2VnbWVudE1hcENoaWxkKVxuICAgICAgICBuZXdTZWdtZW50TWFwQ2hpbGQuc2V0KG5ld1NlZ21lbnRLZXlDaGlsZCwgbmV3Q2FjaGVOb2RlQ2hpbGQpXG4gICAgICAgIHByZWZldGNoUGFyYWxsZWxSb3V0ZXMuc2V0KHBhcmFsbGVsUm91dGVLZXksIG5ld1NlZ21lbnRNYXBDaGlsZClcbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGNoaWxkIHRyZWUncyByb3V0ZSBzdGF0ZSBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhlIHByZWZldGNoZWRcbiAgICAgIC8vIHJvdXRlIHNlbnQgYnkgdGhlIHNlcnZlci4gV2UgbmVlZCB0byBjbG9uZSBpdCBhcyB3ZSB0cmF2ZXJzZSBiYWNrIHVwXG4gICAgICAvLyB0aGUgdHJlZS5cbiAgICAgIGNvbnN0IHRhc2tDaGlsZFJvdXRlID0gdGFza0NoaWxkLnJvdXRlXG4gICAgICBwYXRjaGVkUm91dGVyU3RhdGVDaGlsZHJlbltwYXJhbGxlbFJvdXRlS2V5XSA9IHRhc2tDaGlsZFJvdXRlXG5cbiAgICAgIGNvbnN0IGR5bmFtaWNSZXF1ZXN0VHJlZUNoaWxkID0gdGFza0NoaWxkLmR5bmFtaWNSZXF1ZXN0VHJlZVxuICAgICAgaWYgKGR5bmFtaWNSZXF1ZXN0VHJlZUNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFNvbWV0aGluZyBpbiB0aGUgY2hpbGQgdHJlZSBpcyBkeW5hbWljLlxuICAgICAgICBuZWVkc0R5bmFtaWNSZXF1ZXN0ID0gdHJ1ZVxuICAgICAgICBkeW5hbWljUmVxdWVzdFRyZWVDaGlsZHJlbltwYXJhbGxlbFJvdXRlS2V5XSA9IGR5bmFtaWNSZXF1ZXN0VHJlZUNoaWxkXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkeW5hbWljUmVxdWVzdFRyZWVDaGlsZHJlbltwYXJhbGxlbFJvdXRlS2V5XSA9IHRhc2tDaGlsZFJvdXRlXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBjaGlsZCBkaWRuJ3QgY2hhbmdlLiBXZSBjYW4gdXNlIHRoZSBwcmVmZXRjaGVkIHJvdXRlciBzdGF0ZS5cbiAgICAgIHBhdGNoZWRSb3V0ZXJTdGF0ZUNoaWxkcmVuW3BhcmFsbGVsUm91dGVLZXldID0gbmV3Um91dGVyU3RhdGVDaGlsZFxuICAgICAgZHluYW1pY1JlcXVlc3RUcmVlQ2hpbGRyZW5bcGFyYWxsZWxSb3V0ZUtleV0gPSBuZXdSb3V0ZXJTdGF0ZUNoaWxkXG4gICAgfVxuICB9XG5cbiAgaWYgKHRhc2tDaGlsZHJlbiA9PT0gbnVsbCkge1xuICAgIC8vIE5vIG5ldyB0YXNrcyB3ZXJlIHNwYXduZWQuXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGNvbnN0IG5ld0NhY2hlTm9kZTogUmVhZHlDYWNoZU5vZGUgPSB7XG4gICAgbGF6eURhdGE6IG51bGwsXG4gICAgcnNjOiBvbGRDYWNoZU5vZGUucnNjLFxuICAgIC8vIFdlIGludGVudGlvbmFsbHkgYXJlbid0IHVwZGF0aW5nIHRoZSBwcmVmZXRjaFJzYyBmaWVsZCwgc2luY2UgdGhpcyBub2RlXG4gICAgLy8gaXMgYWxyZWFkeSBwYXJ0IG9mIHRoZSBjdXJyZW50IHRyZWUsIGJlY2F1c2UgaXQgd291bGQgYmUgd2VpcmQgZm9yXG4gICAgLy8gcHJlZmV0Y2ggZGF0YSB0byBiZSBuZXdlciB0aGFuIHRoZSBmaW5hbCBkYXRhLiBJdCBwcm9iYWJseSB3b24ndCBldmVyIGJlXG4gICAgLy8gb2JzZXJ2YWJsZSBhbnl3YXksIGJ1dCBpdCBjb3VsZCBoYXBwZW4gaWYgdGhlIHNlZ21lbnQgaXMgdW5tb3VudGVkIHRoZW5cbiAgICAvLyBtb3VudGVkIGFnYWluLCBiZWNhdXNlIExheW91dFJvdXRlciB3aWxsIG1vbWVudGFyaWx5IHN3aXRjaCB0byByZW5kZXJpbmdcbiAgICAvLyBwcmVmZXRjaFJzYywgdmlhIHVzZURlZmVycmVkVmFsdWUuXG4gICAgcHJlZmV0Y2hSc2M6IG9sZENhY2hlTm9kZS5wcmVmZXRjaFJzYyxcbiAgICBoZWFkOiBvbGRDYWNoZU5vZGUuaGVhZCxcbiAgICBwcmVmZXRjaEhlYWQ6IG9sZENhY2hlTm9kZS5wcmVmZXRjaEhlYWQsXG4gICAgbG9hZGluZzogb2xkQ2FjaGVOb2RlLmxvYWRpbmcsXG5cbiAgICAvLyBFdmVyeXRoaW5nIGlzIGNsb25lZCBleGNlcHQgZm9yIHRoZSBjaGlsZHJlbiwgd2hpY2ggd2UgY29tcHV0ZWQgYWJvdmUuXG4gICAgcGFyYWxsZWxSb3V0ZXM6IHByZWZldGNoUGFyYWxsZWxSb3V0ZXMsXG5cbiAgICBuYXZpZ2F0ZWRBdCxcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLy8gUmV0dXJuIGEgY2xvbmVkIGNvcHkgb2YgdGhlIHJvdXRlciBzdGF0ZSB3aXRoIHVwZGF0ZWQgY2hpbGRyZW4uXG4gICAgcm91dGU6IHBhdGNoUm91dGVyU3RhdGVXaXRoTmV3Q2hpbGRyZW4oXG4gICAgICBuZXdSb3V0ZXJTdGF0ZSxcbiAgICAgIHBhdGNoZWRSb3V0ZXJTdGF0ZUNoaWxkcmVuXG4gICAgKSxcbiAgICBub2RlOiBuZXdDYWNoZU5vZGUsXG4gICAgZHluYW1pY1JlcXVlc3RUcmVlOiBuZWVkc0R5bmFtaWNSZXF1ZXN0XG4gICAgICA/IHBhdGNoUm91dGVyU3RhdGVXaXRoTmV3Q2hpbGRyZW4oXG4gICAgICAgICAgbmV3Um91dGVyU3RhdGUsXG4gICAgICAgICAgZHluYW1pY1JlcXVlc3RUcmVlQ2hpbGRyZW5cbiAgICAgICAgKVxuICAgICAgOiBudWxsLFxuICAgIGNoaWxkcmVuOiB0YXNrQ2hpbGRyZW4sXG4gIH1cbn1cblxuZnVuY3Rpb24gYmVnaW5SZW5kZXJpbmdOZXdSb3V0ZVRyZWUoXG4gIG5hdmlnYXRlZEF0OiBudW1iZXIsXG4gIG9sZFJvdXRlclN0YXRlOiBGbGlnaHRSb3V0ZXJTdGF0ZSB8IHZvaWQsXG4gIG5ld1JvdXRlclN0YXRlOiBGbGlnaHRSb3V0ZXJTdGF0ZSxcbiAgZXhpc3RpbmdDYWNoZU5vZGU6IENhY2hlTm9kZSB8IHZvaWQsXG4gIGRpZEZpbmRSb290TGF5b3V0OiBib29sZWFuLFxuICBwcmVmZXRjaERhdGE6IENhY2hlTm9kZVNlZWREYXRhIHwgbnVsbCxcbiAgcG9zc2libHlQYXJ0aWFsUHJlZmV0Y2hIZWFkOiBIZWFkRGF0YSB8IG51bGwsXG4gIGlzUHJlZmV0Y2hIZWFkUGFydGlhbDogYm9vbGVhbixcbiAgc2VnbWVudFBhdGg6IEZsaWdodFNlZ21lbnRQYXRoLFxuICBzY3JvbGxhYmxlU2VnbWVudHNSZXN1bHQ6IEFycmF5PEZsaWdodFNlZ21lbnRQYXRoPlxuKTogVGFzayB7XG4gIGlmICghZGlkRmluZFJvb3RMYXlvdXQpIHtcbiAgICAvLyBUaGUgcm91dGUgdHJlZSBjaGFuZ2VkIGJlZm9yZSB3ZSByZWFjaGVkIGEgbGF5b3V0LiAoVGhlIGhpZ2hlc3QtbGV2ZWxcbiAgICAvLyBsYXlvdXQgaW4gYSByb3V0ZSB0cmVlIGlzIHJlZmVycmVkIHRvIGFzIHRoZSBcInJvb3RcIiBsYXlvdXQuKSBUaGlzIGNvdWxkXG4gICAgLy8gbWVhbiB0aGF0IHdlJ3JlIG5hdmlnYXRpbmcgYmV0d2VlbiB0d28gZGlmZmVyZW50IHJvb3QgbGF5b3V0cy4gV2hlbiB0aGlzXG4gICAgLy8gaGFwcGVucywgd2UgcGVyZm9ybSBhIGZ1bGwtcGFnZSAoTVBBLXN0eWxlKSBuYXZpZ2F0aW9uLlxuICAgIC8vXG4gICAgLy8gSG93ZXZlciwgdGhlIGFsZ29yaXRobSBmb3IgZGVjaWRpbmcgd2hlcmUgdG8gc3RhcnQgcmVuZGVyaW5nIGEgcm91dGVcbiAgICAvLyAoaS5lLiB0aGUgb25lIHBlcmZvcm1lZCBpbiBvcmRlciB0byByZWFjaCB0aGlzIGZ1bmN0aW9uKSBpcyBzdHJpY3RlclxuICAgIC8vIHRoYW4gdGhlIG9uZSB1c2VkIHRvIGRldGVjdCBhIGNoYW5nZSBpbiB0aGUgcm9vdCBsYXlvdXQuIFNvIGp1c3QgYmVjYXVzZVxuICAgIC8vIHdlJ3JlIHJlLXJlbmRlcmluZyBhIHNlZ21lbnQgb3V0c2lkZSBvZiB0aGUgcm9vdCBsYXlvdXQgZG9lcyBub3QgbWVhbiB3ZVxuICAgIC8vIHNob3VsZCB0cmlnZ2VyIGEgZnVsbC1wYWdlIG5hdmlnYXRpb24uXG4gICAgLy9cbiAgICAvLyBTcGVjaWZpY2FsbHksIHdlIGhhbmRsZSBkeW5hbWljIHBhcmFtZXRlcnMgZGlmZmVyZW50bHk6IHR3byBzZWdtZW50cyBhcmVcbiAgICAvLyBjb25zaWRlcmVkIHRoZSBzYW1lIGV2ZW4gaWYgdGhlaXIgcGFyYW1ldGVyIHZhbHVlcyBhcmUgZGlmZmVyZW50LlxuICAgIC8vXG4gICAgLy8gUmVmZXIgdG8gaXNOYXZpZ2F0aW5nVG9OZXdSb290TGF5b3V0IGZvciBkZXRhaWxzLlxuICAgIC8vXG4gICAgLy8gTm90ZSB0aGF0IHdlIG9ubHkgaGF2ZSB0byBwZXJmb3JtIHRoaXMgZXh0cmEgdHJhdmVyc2FsIGlmIHdlIGRpZG4ndFxuICAgIC8vIGFscmVhZHkgZGlzY292ZXIgYSByb290IGxheW91dCBpbiB0aGUgcGFydCBvZiB0aGUgdHJlZSB0aGF0IGlzIHVuY2hhbmdlZC5cbiAgICAvLyBJbiB0aGUgY29tbW9uIGNhc2UsIHRoaXMgYnJhbmNoIGlzIHNraXBwZWQgY29tcGxldGVseS5cbiAgICBpZiAoXG4gICAgICBvbGRSb3V0ZXJTdGF0ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICBpc05hdmlnYXRpbmdUb05ld1Jvb3RMYXlvdXQob2xkUm91dGVyU3RhdGUsIG5ld1JvdXRlclN0YXRlKVxuICAgICkge1xuICAgICAgLy8gVGhlIHJvb3QgbGF5b3V0IGNoYW5nZWQuIFBlcmZvcm0gYSBmdWxsLXBhZ2UgbmF2aWdhdGlvbi5cbiAgICAgIHJldHVybiBNUEFfTkFWSUdBVElPTl9UQVNLXG4gICAgfVxuICB9XG4gIHJldHVybiBjcmVhdGVDYWNoZU5vZGVPbk5hdmlnYXRpb24oXG4gICAgbmF2aWdhdGVkQXQsXG4gICAgbmV3Um91dGVyU3RhdGUsXG4gICAgZXhpc3RpbmdDYWNoZU5vZGUsXG4gICAgcHJlZmV0Y2hEYXRhLFxuICAgIHBvc3NpYmx5UGFydGlhbFByZWZldGNoSGVhZCxcbiAgICBpc1ByZWZldGNoSGVhZFBhcnRpYWwsXG4gICAgc2VnbWVudFBhdGgsXG4gICAgc2Nyb2xsYWJsZVNlZ21lbnRzUmVzdWx0XG4gIClcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ2FjaGVOb2RlT25OYXZpZ2F0aW9uKFxuICBuYXZpZ2F0ZWRBdDogbnVtYmVyLFxuICByb3V0ZXJTdGF0ZTogRmxpZ2h0Um91dGVyU3RhdGUsXG4gIGV4aXN0aW5nQ2FjaGVOb2RlOiBDYWNoZU5vZGUgfCB2b2lkLFxuICBwcmVmZXRjaERhdGE6IENhY2hlTm9kZVNlZWREYXRhIHwgbnVsbCxcbiAgcG9zc2libHlQYXJ0aWFsUHJlZmV0Y2hIZWFkOiBIZWFkRGF0YSB8IG51bGwsXG4gIGlzUHJlZmV0Y2hIZWFkUGFydGlhbDogYm9vbGVhbixcbiAgc2VnbWVudFBhdGg6IEZsaWdodFNlZ21lbnRQYXRoLFxuICBzY3JvbGxhYmxlU2VnbWVudHNSZXN1bHQ6IEFycmF5PEZsaWdodFNlZ21lbnRQYXRoPlxuKTogU1BBTmF2aWdhdGlvblRhc2sge1xuICAvLyBTYW1lIHRyYXZlcnNhbCBhcyB1cGRhdGVDYWNoZU5vZGVOYXZpZ2F0aW9uLCBidXQgd2Ugc3dpdGNoIHRvIHRoaXMgcGF0aFxuICAvLyBvbmNlIHdlIHJlYWNoIHRoZSBwYXJ0IG9mIHRoZSB0cmVlIHRoYXQgd2FzIG5vdCBpbiB0aGUgcHJldmlvdXMgcm91dGUuIFdlXG4gIC8vIGRvbid0IG5lZWQgdG8gZGlmZiBhZ2FpbnN0IHRoZSBvbGQgdHJlZSwgd2UganVzdCBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBvbmUuXG5cbiAgLy8gVGhlIGhlYWQgaXMgYXNzaWduZWQgdG8gZXZlcnkgbGVhZiBzZWdtZW50IGRlbGl2ZXJlZCBieSB0aGUgc2VydmVyLiBCYXNlZFxuICAvLyBvbiBjb3JyZXNwb25kaW5nIGxvZ2ljIGluIGZpbGwtbGF6eS1pdGVtcy10aWxsLWxlYWYtd2l0aC1oZWFkLnRzXG4gIGNvbnN0IHJvdXRlclN0YXRlQ2hpbGRyZW4gPSByb3V0ZXJTdGF0ZVsxXVxuICBjb25zdCBpc0xlYWZTZWdtZW50ID0gT2JqZWN0LmtleXMocm91dGVyU3RhdGVDaGlsZHJlbikubGVuZ3RoID09PSAwXG5cbiAgLy8gRXZlbiB3ZSdyZSByZW5kZXJpbmcgaW5zaWRlIHRoZSBcIm5ld1wiIHBhcnQgb2YgdGhlIHRhcmdldCB0cmVlLCB3ZSBtYXkgaGF2ZVxuICAvLyBhIGxvY2FsbHkgY2FjaGVkIHNlZ21lbnQgdGhhdCB3ZSBjYW4gcmV1c2UuIFRoaXMgbWF5IGNvbWUgZnJvbSBlaXRoZXIgMSlcbiAgLy8gdGhlIENhY2hlTm9kZSB0cmVlLCB3aGljaCBsaXZlcyBpbiBSZWFjdCBzdGF0ZSBhbmQgaXMgcG9wdWxhdGVkIGJ5IHByZXZpb3VzXG4gIC8vIG5hdmlnYXRpb25zOyBvciAyKSB0aGUgcHJlZmV0Y2ggY2FjaGUsIHdoaWNoIGlzIGEgc2VwYXJhdGUgY2FjaGUgdGhhdCBpc1xuICAvLyBwb3B1bGF0ZWQgYnkgcHJlZmV0Y2hlcy5cbiAgbGV0IHJzYzogUmVhY3QuUmVhY3ROb2RlXG4gIGxldCBsb2FkaW5nOiBMb2FkaW5nTW9kdWxlRGF0YSB8IFByb21pc2U8TG9hZGluZ01vZHVsZURhdGE+XG4gIGxldCBoZWFkOiBIZWFkRGF0YSB8IG51bGxcbiAgbGV0IGNhY2hlTm9kZU5hdmlnYXRlZEF0OiBudW1iZXJcbiAgaWYgKFxuICAgIGV4aXN0aW5nQ2FjaGVOb2RlICE9PSB1bmRlZmluZWQgJiZcbiAgICAvLyBEWU5BTUlDX1NUQUxFVElNRV9NUyBkZWZhdWx0cyB0byAwLCBidXQgaXQgY2FuIGJlIGluY3JlYXNlZCB1c2luZ1xuICAgIC8vIHRoZSBleHBlcmltZW50YWwuc3RhbGVUaW1lcy5keW5hbWljIGNvbmZpZy4gV2hlbiBzZXQsIHdlJ2xsIGF2b2lkXG4gICAgLy8gcmVmZXRjaGluZyBkeW5hbWljIGRhdGEgaWYgaXQgd2FzIGZldGNoZWQgd2l0aGluIHRoZSBnaXZlbiB0aHJlc2hvbGQuXG4gICAgZXhpc3RpbmdDYWNoZU5vZGUubmF2aWdhdGVkQXQgKyBEWU5BTUlDX1NUQUxFVElNRV9NUyA+IG5hdmlnYXRlZEF0XG4gICkge1xuICAgIC8vIFdlIGhhdmUgYW4gZXhpc3RpbmcgQ2FjaGVOb2RlIGZvciB0aGlzIHNlZ21lbnQsIGFuZCBpdCdzIG5vdCBzdGFsZS4gV2VcbiAgICAvLyBzaG91bGQgcmV1c2UgaXQgcmF0aGVyIHRoYW4gcmVxdWVzdCBhIG5ldyBvbmUuXG4gICAgcnNjID0gZXhpc3RpbmdDYWNoZU5vZGUucnNjXG4gICAgbG9hZGluZyA9IGV4aXN0aW5nQ2FjaGVOb2RlLmxvYWRpbmdcbiAgICBoZWFkID0gZXhpc3RpbmdDYWNoZU5vZGUuaGVhZFxuXG4gICAgLy8gRG9uJ3QgdXBkYXRlIHRoZSBuYXZpZ2F0ZWRBdCB0aW1lc3RhbXAsIHNpbmNlIHdlJ3JlIHJldXNpbmcgc3RhbGUgZGF0YS5cbiAgICBjYWNoZU5vZGVOYXZpZ2F0ZWRBdCA9IGV4aXN0aW5nQ2FjaGVOb2RlLm5hdmlnYXRlZEF0XG4gIH0gZWxzZSBpZiAocHJlZmV0Y2hEYXRhICE9PSBudWxsKSB7XG4gICAgLy8gVGhlcmUncyBubyBleGlzdGluZyBDYWNoZU5vZGUgZm9yIHRoaXMgc2VnbWVudCwgYnV0IHdlIGRvIGhhdmUgcHJlZmV0Y2hcbiAgICAvLyBkYXRhLiBJZiB0aGUgcHJlZmV0Y2ggZGF0YSBpcyBmdWxseSBzdGF0aWMgKGkuZS4gZG9lcyBub3QgY29udGFpbiBhbnlcbiAgICAvLyBkeW5hbWljIGhvbGVzKSwgd2UgZG9uJ3QgbmVlZCB0byByZXF1ZXN0IGl0IGZyb20gdGhlIHNlcnZlci5cbiAgICByc2MgPSBwcmVmZXRjaERhdGFbMV1cbiAgICBsb2FkaW5nID0gcHJlZmV0Y2hEYXRhWzNdXG4gICAgaGVhZCA9IGlzTGVhZlNlZ21lbnQgPyBwb3NzaWJseVBhcnRpYWxQcmVmZXRjaEhlYWQgOiBudWxsXG4gICAgLy8gRXZlbiB0aG91Z2ggd2UncmUgYWNjZXNzaW5nIHRoZSBkYXRhIGZyb20gdGhlIHByZWZldGNoIGNhY2hlLCB0aGlzIGlzXG4gICAgLy8gY29uY2VwdHVhbGx5IGEgbmV3IHNlZ21lbnQsIG5vdCBhIHJldXNlZCBvbmUuIFNvIHdlIHNob3VsZCB1cGRhdGUgdGhlXG4gICAgLy8gbmF2aWdhdGVkQXQgdGltZXN0YW1wLlxuICAgIGNhY2hlTm9kZU5hdmlnYXRlZEF0ID0gbmF2aWdhdGVkQXRcbiAgICBjb25zdCBpc1ByZWZldGNoUnNjUGFydGlhbCA9IHByZWZldGNoRGF0YVs0XVxuICAgIGlmIChcbiAgICAgIC8vIENoZWNrIGlmIHRoZSBzZWdtZW50IGRhdGEgaXMgcGFydGlhbFxuICAgICAgaXNQcmVmZXRjaFJzY1BhcnRpYWwgfHxcbiAgICAgIC8vIENoZWNrIGlmIHRoZSBoZWFkIGlzIHBhcnRpYWwgKG9ubHkgcmVsZXZhbnQgaWYgdGhpcyBpcyBhIGxlYWYgc2VnbWVudClcbiAgICAgIChpc1ByZWZldGNoSGVhZFBhcnRpYWwgJiYgaXNMZWFmU2VnbWVudClcbiAgICApIHtcbiAgICAgIC8vIFdlIG9ubHkgaGF2ZSBwYXJ0aWFsIGRhdGEgZnJvbSB0aGlzIHNlZ21lbnQuIExpa2UgbWlzc2luZyBzZWdtZW50cywgd2VcbiAgICAgIC8vIG11c3QgcmVxdWVzdCB0aGUgZnVsbCBkYXRhIGZyb20gdGhlIHNlcnZlci5cbiAgICAgIHJldHVybiBzcGF3blBlbmRpbmdUYXNrKFxuICAgICAgICBuYXZpZ2F0ZWRBdCxcbiAgICAgICAgcm91dGVyU3RhdGUsXG4gICAgICAgIHByZWZldGNoRGF0YSxcbiAgICAgICAgcG9zc2libHlQYXJ0aWFsUHJlZmV0Y2hIZWFkLFxuICAgICAgICBpc1ByZWZldGNoSGVhZFBhcnRpYWwsXG4gICAgICAgIHNlZ21lbnRQYXRoLFxuICAgICAgICBzY3JvbGxhYmxlU2VnbWVudHNSZXN1bHRcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlIHByZWZldGNoIGRhdGEgaXMgZnVsbHkgc3RhdGljLCBzbyB3ZSBjYW4gb21pdCBpdCBmcm9tIHRoZVxuICAgICAgLy8gbmF2aWdhdGlvbiByZXF1ZXN0LlxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBUaGVyZSdzIG5vIHByZWZldGNoIGZvciB0aGlzIHNlZ21lbnQuIEV2ZXJ5dGhpbmcgZnJvbSB0aGlzIHBvaW50IHdpbGwgYmVcbiAgICAvLyByZXF1ZXN0ZWQgZnJvbSB0aGUgc2VydmVyLCBldmVuIGlmIHRoZXJlIGFyZSBzdGF0aWMgY2hpbGRyZW4gYmVsb3cgaXQuXG4gICAgLy8gQ3JlYXRlIGEgdGVybWluYWwgdGFzayBub2RlIHRoYXQgd2lsbCBsYXRlciBiZSBmdWxmaWxsZWQgYnlcbiAgICAvLyBzZXJ2ZXIgcmVzcG9uc2UuXG4gICAgcmV0dXJuIHNwYXduUGVuZGluZ1Rhc2soXG4gICAgICBuYXZpZ2F0ZWRBdCxcbiAgICAgIHJvdXRlclN0YXRlLFxuICAgICAgbnVsbCxcbiAgICAgIHBvc3NpYmx5UGFydGlhbFByZWZldGNoSGVhZCxcbiAgICAgIGlzUHJlZmV0Y2hIZWFkUGFydGlhbCxcbiAgICAgIHNlZ21lbnRQYXRoLFxuICAgICAgc2Nyb2xsYWJsZVNlZ21lbnRzUmVzdWx0XG4gICAgKVxuICB9XG5cbiAgLy8gV2UgYWxyZWFkeSBoYXZlIGEgZnVsbCBzZWdtZW50IHdlIGNhbiByZW5kZXIsIHNvIHdlIGRvbid0IG5lZWQgdG8gcmVxdWVzdCBhXG4gIC8vIG5ldyBvbmUgZnJvbSB0aGUgc2VydmVyLiBLZWVwIHRyYXZlcnNpbmcgZG93biB0aGUgdHJlZSB1bnRpbCB3ZSByZWFjaFxuICAvLyBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBhIGR5bmFtaWMgcmVxdWVzdC5cbiAgY29uc3QgcHJlZmV0Y2hEYXRhQ2hpbGRyZW4gPSBwcmVmZXRjaERhdGEgIT09IG51bGwgPyBwcmVmZXRjaERhdGFbMl0gOiBudWxsXG4gIGNvbnN0IHRhc2tDaGlsZHJlbiA9IG5ldyBNYXAoKVxuICBjb25zdCBleGlzdGluZ0NhY2hlTm9kZUNoaWxkcmVuID1cbiAgICBleGlzdGluZ0NhY2hlTm9kZSAhPT0gdW5kZWZpbmVkID8gZXhpc3RpbmdDYWNoZU5vZGUucGFyYWxsZWxSb3V0ZXMgOiBudWxsXG4gIGNvbnN0IGNhY2hlTm9kZUNoaWxkcmVuID0gbmV3IE1hcChleGlzdGluZ0NhY2hlTm9kZUNoaWxkcmVuKVxuICBsZXQgZHluYW1pY1JlcXVlc3RUcmVlQ2hpbGRyZW46IHtcbiAgICBbcGFyYWxsZWxSb3V0ZUtleTogc3RyaW5nXTogRmxpZ2h0Um91dGVyU3RhdGVcbiAgfSA9IHt9XG4gIGxldCBuZWVkc0R5bmFtaWNSZXF1ZXN0ID0gZmFsc2VcbiAgaWYgKGlzTGVhZlNlZ21lbnQpIHtcbiAgICAvLyBUaGUgc2VnbWVudCBwYXRoIG9mIGV2ZXJ5IGxlYWYgc2VnbWVudCAoaS5lLiBwYWdlKSBpcyBjb2xsZWN0ZWQgaW50b1xuICAgIC8vIGEgcmVzdWx0IGFycmF5LiBUaGlzIGlzIHVzZWQgYnkgdGhlIExheW91dFJvdXRlciB0byBzY3JvbGwgdG8gZW5zdXJlIHRoYXRcbiAgICAvLyBuZXcgcGFnZXMgYXJlIHZpc2libGUgYWZ0ZXIgYSBuYXZpZ2F0aW9uLlxuICAgIC8vIFRPRE86IFdlIHNob3VsZCB1c2UgYSBzdHJpbmcgdG8gcmVwcmVzZW50IHRoZSBzZWdtZW50IHBhdGggaW5zdGVhZCBvZlxuICAgIC8vIGFuIGFycmF5LiBXZSBhbHJlYWR5IHVzZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IgdGhlIHBhdGggd2hlblxuICAgIC8vIGFjY2Vzc2luZyB0aGUgU2VnbWVudCBDYWNoZSwgc28gd2UgY2FuIHVzZSB0aGUgc2FtZSBvbmUuXG4gICAgc2Nyb2xsYWJsZVNlZ21lbnRzUmVzdWx0LnB1c2goc2VnbWVudFBhdGgpXG4gIH0gZWxzZSB7XG4gICAgZm9yIChsZXQgcGFyYWxsZWxSb3V0ZUtleSBpbiByb3V0ZXJTdGF0ZUNoaWxkcmVuKSB7XG4gICAgICBjb25zdCByb3V0ZXJTdGF0ZUNoaWxkOiBGbGlnaHRSb3V0ZXJTdGF0ZSA9XG4gICAgICAgIHJvdXRlclN0YXRlQ2hpbGRyZW5bcGFyYWxsZWxSb3V0ZUtleV1cbiAgICAgIGNvbnN0IHByZWZldGNoRGF0YUNoaWxkOiBDYWNoZU5vZGVTZWVkRGF0YSB8IHZvaWQgfCBudWxsID1cbiAgICAgICAgcHJlZmV0Y2hEYXRhQ2hpbGRyZW4gIT09IG51bGxcbiAgICAgICAgICA/IHByZWZldGNoRGF0YUNoaWxkcmVuW3BhcmFsbGVsUm91dGVLZXldXG4gICAgICAgICAgOiBudWxsXG4gICAgICBjb25zdCBleGlzdGluZ1NlZ21lbnRNYXBDaGlsZCA9XG4gICAgICAgIGV4aXN0aW5nQ2FjaGVOb2RlQ2hpbGRyZW4gIT09IG51bGxcbiAgICAgICAgICA/IGV4aXN0aW5nQ2FjaGVOb2RlQ2hpbGRyZW4uZ2V0KHBhcmFsbGVsUm91dGVLZXkpXG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIGNvbnN0IHNlZ21lbnRDaGlsZCA9IHJvdXRlclN0YXRlQ2hpbGRbMF1cbiAgICAgIGNvbnN0IHNlZ21lbnRQYXRoQ2hpbGQgPSBzZWdtZW50UGF0aC5jb25jYXQoW1xuICAgICAgICBwYXJhbGxlbFJvdXRlS2V5LFxuICAgICAgICBzZWdtZW50Q2hpbGQsXG4gICAgICBdKVxuICAgICAgY29uc3Qgc2VnbWVudEtleUNoaWxkID0gY3JlYXRlUm91dGVyQ2FjaGVLZXkoc2VnbWVudENoaWxkKVxuXG4gICAgICBjb25zdCBleGlzdGluZ0NhY2hlTm9kZUNoaWxkID1cbiAgICAgICAgZXhpc3RpbmdTZWdtZW50TWFwQ2hpbGQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gZXhpc3RpbmdTZWdtZW50TWFwQ2hpbGQuZ2V0KHNlZ21lbnRLZXlDaGlsZClcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICBjb25zdCB0YXNrQ2hpbGQgPSBjcmVhdGVDYWNoZU5vZGVPbk5hdmlnYXRpb24oXG4gICAgICAgIG5hdmlnYXRlZEF0LFxuICAgICAgICByb3V0ZXJTdGF0ZUNoaWxkLFxuICAgICAgICBleGlzdGluZ0NhY2hlTm9kZUNoaWxkLFxuICAgICAgICBwcmVmZXRjaERhdGFDaGlsZCxcbiAgICAgICAgcG9zc2libHlQYXJ0aWFsUHJlZmV0Y2hIZWFkLFxuICAgICAgICBpc1ByZWZldGNoSGVhZFBhcnRpYWwsXG4gICAgICAgIHNlZ21lbnRQYXRoQ2hpbGQsXG4gICAgICAgIHNjcm9sbGFibGVTZWdtZW50c1Jlc3VsdFxuICAgICAgKVxuICAgICAgdGFza0NoaWxkcmVuLnNldChwYXJhbGxlbFJvdXRlS2V5LCB0YXNrQ2hpbGQpXG4gICAgICBjb25zdCBkeW5hbWljUmVxdWVzdFRyZWVDaGlsZCA9IHRhc2tDaGlsZC5keW5hbWljUmVxdWVzdFRyZWVcbiAgICAgIGlmIChkeW5hbWljUmVxdWVzdFRyZWVDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAvLyBTb21ldGhpbmcgaW4gdGhlIGNoaWxkIHRyZWUgaXMgZHluYW1pYy5cbiAgICAgICAgbmVlZHNEeW5hbWljUmVxdWVzdCA9IHRydWVcbiAgICAgICAgZHluYW1pY1JlcXVlc3RUcmVlQ2hpbGRyZW5bcGFyYWxsZWxSb3V0ZUtleV0gPSBkeW5hbWljUmVxdWVzdFRyZWVDaGlsZFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZHluYW1pY1JlcXVlc3RUcmVlQ2hpbGRyZW5bcGFyYWxsZWxSb3V0ZUtleV0gPSByb3V0ZXJTdGF0ZUNoaWxkXG4gICAgICB9XG4gICAgICBjb25zdCBuZXdDYWNoZU5vZGVDaGlsZCA9IHRhc2tDaGlsZC5ub2RlXG4gICAgICBpZiAobmV3Q2FjaGVOb2RlQ2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgbmV3U2VnbWVudE1hcENoaWxkOiBDaGlsZFNlZ21lbnRNYXAgPSBuZXcgTWFwKClcbiAgICAgICAgbmV3U2VnbWVudE1hcENoaWxkLnNldChzZWdtZW50S2V5Q2hpbGQsIG5ld0NhY2hlTm9kZUNoaWxkKVxuICAgICAgICBjYWNoZU5vZGVDaGlsZHJlbi5zZXQocGFyYWxsZWxSb3V0ZUtleSwgbmV3U2VnbWVudE1hcENoaWxkKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLy8gU2luY2Ugd2UncmUgaW5zaWRlIGEgbmV3IHJvdXRlIHRyZWUsIHVubGlrZSB0aGVcbiAgICAvLyBgdXBkYXRlQ2FjaGVOb2RlT25OYXZpZ2F0aW9uYCBwYXRoLCB0aGUgcm91dGVyIHN0YXRlIG9uIHRoZSBjaGlsZHJlblxuICAgIC8vIHRhc2tzIGlzIGFsd2F5cyB0aGUgc2FtZSBhcyB0aGUgcm91dGVyIHN0YXRlIHdlIHBhc3MgaW4uIFNvIHdlIGRvbid0IG5lZWRcbiAgICAvLyB0byBjbG9uZS9tb2RpZnkgaXQuXG4gICAgcm91dGU6IHJvdXRlclN0YXRlLFxuICAgIG5vZGU6IHtcbiAgICAgIGxhenlEYXRhOiBudWxsLFxuICAgICAgLy8gU2luY2UgdGhpcyBzZWdtZW50IGlzIGFscmVhZHkgZnVsbCwgd2UgZG9uJ3QgbmVlZCB0byB1c2UgdGhlXG4gICAgICAvLyBgcHJlZmV0Y2hSc2NgIGZpZWxkLlxuICAgICAgcnNjLFxuICAgICAgcHJlZmV0Y2hSc2M6IG51bGwsXG4gICAgICBoZWFkLFxuICAgICAgcHJlZmV0Y2hIZWFkOiBudWxsLFxuICAgICAgbG9hZGluZyxcbiAgICAgIHBhcmFsbGVsUm91dGVzOiBjYWNoZU5vZGVDaGlsZHJlbixcbiAgICAgIG5hdmlnYXRlZEF0OiBjYWNoZU5vZGVOYXZpZ2F0ZWRBdCxcbiAgICB9LFxuICAgIGR5bmFtaWNSZXF1ZXN0VHJlZTogbmVlZHNEeW5hbWljUmVxdWVzdFxuICAgICAgPyBwYXRjaFJvdXRlclN0YXRlV2l0aE5ld0NoaWxkcmVuKHJvdXRlclN0YXRlLCBkeW5hbWljUmVxdWVzdFRyZWVDaGlsZHJlbilcbiAgICAgIDogbnVsbCxcbiAgICBjaGlsZHJlbjogdGFza0NoaWxkcmVuLFxuICB9XG59XG5cbmZ1bmN0aW9uIHBhdGNoUm91dGVyU3RhdGVXaXRoTmV3Q2hpbGRyZW4oXG4gIGJhc2VSb3V0ZXJTdGF0ZTogRmxpZ2h0Um91dGVyU3RhdGUsXG4gIG5ld0NoaWxkcmVuOiB7IFtwYXJhbGxlbFJvdXRlS2V5OiBzdHJpbmddOiBGbGlnaHRSb3V0ZXJTdGF0ZSB9XG4pOiBGbGlnaHRSb3V0ZXJTdGF0ZSB7XG4gIGNvbnN0IGNsb25lOiBGbGlnaHRSb3V0ZXJTdGF0ZSA9IFtiYXNlUm91dGVyU3RhdGVbMF0sIG5ld0NoaWxkcmVuXVxuICAvLyBCYXNlZCBvbiBlcXVpdmFsZW50IGxvZ2ljIGluIGFwcGx5LXJvdXRlci1zdGF0ZS1wYXRjaC10by10cmVlLCBidXQgc2hvdWxkXG4gIC8vIGNvbmZpcm0gd2hldGhlciB3ZSBuZWVkIHRvIGNvcHkgYWxsIG9mIHRoZXNlIGZpZWxkcy4gTm90IHN1cmUgdGhlIHNlcnZlclxuICAvLyBldmVyIHNlbmRzLCBlLmcuIHRoZSByZWZldGNoIG1hcmtlci5cbiAgaWYgKDIgaW4gYmFzZVJvdXRlclN0YXRlKSB7XG4gICAgY2xvbmVbMl0gPSBiYXNlUm91dGVyU3RhdGVbMl1cbiAgfVxuICBpZiAoMyBpbiBiYXNlUm91dGVyU3RhdGUpIHtcbiAgICBjbG9uZVszXSA9IGJhc2VSb3V0ZXJTdGF0ZVszXVxuICB9XG4gIGlmICg0IGluIGJhc2VSb3V0ZXJTdGF0ZSkge1xuICAgIGNsb25lWzRdID0gYmFzZVJvdXRlclN0YXRlWzRdXG4gIH1cbiAgcmV0dXJuIGNsb25lXG59XG5cbmZ1bmN0aW9uIHNwYXduUGVuZGluZ1Rhc2soXG4gIG5hdmlnYXRlZEF0OiBudW1iZXIsXG4gIHJvdXRlclN0YXRlOiBGbGlnaHRSb3V0ZXJTdGF0ZSxcbiAgcHJlZmV0Y2hEYXRhOiBDYWNoZU5vZGVTZWVkRGF0YSB8IG51bGwsXG4gIHByZWZldGNoSGVhZDogSGVhZERhdGEgfCBudWxsLFxuICBpc1ByZWZldGNoSGVhZFBhcnRpYWw6IGJvb2xlYW4sXG4gIHNlZ21lbnRQYXRoOiBGbGlnaHRTZWdtZW50UGF0aCxcbiAgc2Nyb2xsYWJsZVNlZ21lbnRzUmVzdWx0OiBBcnJheTxGbGlnaHRTZWdtZW50UGF0aD5cbik6IFNQQU5hdmlnYXRpb25UYXNrIHtcbiAgLy8gQ3JlYXRlIGEgdGFzayB0aGF0IHdpbGwgbGF0ZXIgYmUgZnVsZmlsbGVkIGJ5IGRhdGEgZnJvbSB0aGUgc2VydmVyLlxuXG4gIC8vIENsb25lIHRoZSBwcmVmZXRjaGVkIHJvdXRlIHRyZWUgYW5kIHRoZSBgcmVmZXRjaGAgbWFya2VyIHRvIGl0LiBXZSdsbCBzZW5kXG4gIC8vIHRoaXMgdG8gdGhlIHNlcnZlciBzbyBpdCBrbm93cyB3aGVyZSB0byBzdGFydCByZW5kZXJpbmcuXG4gIGNvbnN0IGR5bmFtaWNSZXF1ZXN0VHJlZSA9IHBhdGNoUm91dGVyU3RhdGVXaXRoTmV3Q2hpbGRyZW4oXG4gICAgcm91dGVyU3RhdGUsXG4gICAgcm91dGVyU3RhdGVbMV1cbiAgKVxuICBkeW5hbWljUmVxdWVzdFRyZWVbM10gPSAncmVmZXRjaCdcblxuICBjb25zdCBuZXdUYXNrOiBUYXNrID0ge1xuICAgIHJvdXRlOiByb3V0ZXJTdGF0ZSxcblxuICAgIC8vIENvcnJlc3BvbmRzIHRvIHRoZSBwYXJ0IG9mIHRoZSByb3V0ZSB0aGF0IHdpbGwgYmUgcmVuZGVyZWQgb24gdGhlIHNlcnZlci5cbiAgICBub2RlOiBjcmVhdGVQZW5kaW5nQ2FjaGVOb2RlKFxuICAgICAgbmF2aWdhdGVkQXQsXG4gICAgICByb3V0ZXJTdGF0ZSxcbiAgICAgIHByZWZldGNoRGF0YSxcbiAgICAgIHByZWZldGNoSGVhZCxcbiAgICAgIGlzUHJlZmV0Y2hIZWFkUGFydGlhbCxcbiAgICAgIHNlZ21lbnRQYXRoLFxuICAgICAgc2Nyb2xsYWJsZVNlZ21lbnRzUmVzdWx0XG4gICAgKSxcbiAgICAvLyBCZWNhdXNlIHRoaXMgaXMgbm9uLW51bGwsIGFuZCBpdCBnZXRzIHByb3BhZ2F0ZWQgdXAgdGhyb3VnaCB0aGUgcGFyZW50XG4gICAgLy8gdGFza3MsIHRoZSByb290IHRhc2sgd2lsbCBrbm93IHRoYXQgaXQgbmVlZHMgdG8gcGVyZm9ybSBhIHNlcnZlciByZXF1ZXN0LlxuICAgIGR5bmFtaWNSZXF1ZXN0VHJlZSxcbiAgICBjaGlsZHJlbjogbnVsbCxcbiAgfVxuICByZXR1cm4gbmV3VGFza1xufVxuXG5mdW5jdGlvbiBzcGF3blJldXNlZFRhc2socmV1c2VkUm91dGVyU3RhdGU6IEZsaWdodFJvdXRlclN0YXRlKTogVGFzayB7XG4gIC8vIENyZWF0ZSBhIHRhc2sgdGhhdCByZXVzZXMgYW4gZXhpc3Rpbmcgc2VnbWVudCwgZS5nLiB3aGVuIHJldXNpbmdcbiAgLy8gdGhlIGN1cnJlbnQgYWN0aXZlIHNlZ21lbnQgaW4gcGxhY2Ugb2YgYSBkZWZhdWx0IHJvdXRlLlxuICByZXR1cm4ge1xuICAgIHJvdXRlOiByZXVzZWRSb3V0ZXJTdGF0ZSxcbiAgICBub2RlOiBudWxsLFxuICAgIGR5bmFtaWNSZXF1ZXN0VHJlZTogbnVsbCxcbiAgICBjaGlsZHJlbjogbnVsbCxcbiAgfVxufVxuXG4vLyBXcml0ZXMgYSBkeW5hbWljIHNlcnZlciByZXNwb25zZSBpbnRvIHRoZSB0cmVlIGNyZWF0ZWQgYnlcbi8vIHVwZGF0ZUNhY2hlTm9kZU9uTmF2aWdhdGlvbi4gQWxsIHBlbmRpbmcgcHJvbWlzZXMgdGhhdCB3ZXJlIHNwYXduZWQgYnkgdGhlXG4vLyBuYXZpZ2F0aW9uIHdpbGwgYmUgcmVzb2x2ZWQsIGVpdGhlciB3aXRoIGR5bmFtaWMgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIsIG9yXG4vLyBgbnVsbGAgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZGF0YSBpcyBtaXNzaW5nLlxuLy9cbi8vIEEgYG51bGxgIHZhbHVlIHdpbGwgdHJpZ2dlciBhIGxhenkgZmV0Y2ggZHVyaW5nIHJlbmRlciwgd2hpY2ggd2lsbCB0aGVuIHBhdGNoXG4vLyB1cCB0aGUgdHJlZSB1c2luZyB0aGUgc2FtZSBtZWNoYW5pc20gYXMgdGhlIG5vbi1QUFIgaW1wbGVtZW50YXRpb25cbi8vIChzZXJ2ZXJQYXRjaFJlZHVjZXIpLlxuLy9cbi8vIFVzdWFsbHksIHRoZSBzZXJ2ZXIgd2lsbCByZXNwb25kIHdpdGggZXhhY3RseSB0aGUgc3Vic2V0IG9mIGRhdGEgdGhhdCB3ZSdyZVxuLy8gd2FpdGluZyBmb3Ig4oCUIGV2ZXJ5dGhpbmcgYmVsb3cgdGhlIG5lYXJlc3Qgc2hhcmVkIGxheW91dC4gQnV0IHRlY2huaWNhbGx5LFxuLy8gdGhlIHNlcnZlciBjYW4gcmV0dXJuIGFueXRoaW5nIGl0IHdhbnRzLlxuLy9cbi8vIFRoaXMgZG9lcyBfbm90XyBjcmVhdGUgYSBuZXcgdHJlZTsgaXQgbW9kaWZpZXMgdGhlIGV4aXN0aW5nIG9uZSBpbiBwbGFjZS5cbi8vIFdoaWNoIG1lYW5zIGl0IG11c3QgZm9sbG93IHRoZSBTdXNwZW5zZSBydWxlcyBvZiBjYWNoZSBzYWZldHkuXG5leHBvcnQgZnVuY3Rpb24gbGlzdGVuRm9yRHluYW1pY1JlcXVlc3QoXG4gIHRhc2s6IFNQQU5hdmlnYXRpb25UYXNrLFxuICByZXNwb25zZVByb21pc2U6IFByb21pc2U8RmV0Y2hTZXJ2ZXJSZXNwb25zZVJlc3VsdD5cbikge1xuICByZXNwb25zZVByb21pc2UudGhlbihcbiAgICAoeyBmbGlnaHREYXRhIH06IEZldGNoU2VydmVyUmVzcG9uc2VSZXN1bHQpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZmxpZ2h0RGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gSGFwcGVucyB3aGVuIG5hdmlnYXRpbmcgdG8gcGFnZSBpbiBgcGFnZXNgIGZyb20gYGFwcGAuIFdlIHNob3VsZG4ndFxuICAgICAgICAvLyBnZXQgaGVyZSBiZWNhdXNlIHNob3VsZCBoYXZlIGFscmVhZHkgaGFuZGxlZCB0aGlzIGR1cmluZ1xuICAgICAgICAvLyB0aGUgcHJlZmV0Y2guXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBub3JtYWxpemVkRmxpZ2h0RGF0YSBvZiBmbGlnaHREYXRhKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBzZWdtZW50UGF0aCxcbiAgICAgICAgICB0cmVlOiBzZXJ2ZXJSb3V0ZXJTdGF0ZSxcbiAgICAgICAgICBzZWVkRGF0YTogZHluYW1pY0RhdGEsXG4gICAgICAgICAgaGVhZDogZHluYW1pY0hlYWQsXG4gICAgICAgIH0gPSBub3JtYWxpemVkRmxpZ2h0RGF0YVxuXG4gICAgICAgIGlmICghZHluYW1pY0RhdGEpIHtcbiAgICAgICAgICAvLyBUaGlzIHNob3VsZG4ndCBoYXBwZW4uIFBQUiBzaG91bGQgYWx3YXlzIHNlbmQgYmFjayBhIHJlc3BvbnNlLlxuICAgICAgICAgIC8vIEhvd2V2ZXIsIGBGbGlnaHREYXRhUGF0aGAgaXMgYSBzaGFyZWQgdHlwZSBhbmQgdGhlIHByZS1QUFIgaGFuZGxpbmcgb2ZcbiAgICAgICAgICAvLyB0aGlzIG1pZ2h0IHJldHVybiBudWxsLlxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICB3cml0ZUR5bmFtaWNEYXRhSW50b1BlbmRpbmdUYXNrKFxuICAgICAgICAgIHRhc2ssXG4gICAgICAgICAgc2VnbWVudFBhdGgsXG4gICAgICAgICAgc2VydmVyUm91dGVyU3RhdGUsXG4gICAgICAgICAgZHluYW1pY0RhdGEsXG4gICAgICAgICAgZHluYW1pY0hlYWRcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICAvLyBOb3cgdGhhdCB3ZSd2ZSBleGhhdXN0ZWQgYWxsIHRoZSBkYXRhIHdlIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlciwgaWZcbiAgICAgIC8vIHRoZXJlIGFyZSBhbnkgcmVtYWluaW5nIHBlbmRpbmcgdGFza3MgaW4gdGhlIHRyZWUsIGFib3J0IHRoZW0gbm93LlxuICAgICAgLy8gSWYgdGhlcmUncyBhbnkgbWlzc2luZyBkYXRhLCBpdCB3aWxsIHRyaWdnZXIgYSBsYXp5IGZldGNoLlxuICAgICAgYWJvcnRUYXNrKHRhc2ssIG51bGwpXG4gICAgfSxcbiAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgLy8gVGhpcyB3aWxsIHRyaWdnZXIgYW4gZXJyb3IgZHVyaW5nIHJlbmRlclxuICAgICAgYWJvcnRUYXNrKHRhc2ssIGVycm9yKVxuICAgIH1cbiAgKVxufVxuXG5mdW5jdGlvbiB3cml0ZUR5bmFtaWNEYXRhSW50b1BlbmRpbmdUYXNrKFxuICByb290VGFzazogU1BBTmF2aWdhdGlvblRhc2ssXG4gIHNlZ21lbnRQYXRoOiBGbGlnaHRTZWdtZW50UGF0aCxcbiAgc2VydmVyUm91dGVyU3RhdGU6IEZsaWdodFJvdXRlclN0YXRlLFxuICBkeW5hbWljRGF0YTogQ2FjaGVOb2RlU2VlZERhdGEsXG4gIGR5bmFtaWNIZWFkOiBIZWFkRGF0YVxuKSB7XG4gIC8vIFRoZSBkYXRhIHNlbnQgYnkgdGhlIHNlcnZlciByZXByZXNlbnRzIG9ubHkgYSBzdWJ0cmVlIG9mIHRoZSBhcHAuIFdlIG5lZWRcbiAgLy8gdG8gZmluZCB0aGUgcGFydCBvZiB0aGUgdGFzayB0cmVlIHRoYXQgbWF0Y2hlcyB0aGUgc2VydmVyIHJlc3BvbnNlLCBhbmRcbiAgLy8gZnVsZmlsbCBpdCB1c2luZyB0aGUgZHluYW1pYyBkYXRhLlxuICAvL1xuICAvLyBzZWdtZW50UGF0aCByZXByZXNlbnRzIHRoZSBwYXJlbnQgcGF0aCBvZiBzdWJ0cmVlLiBJdCdzIGEgcmVwZWF0aW5nIHBhdHRlcm5cbiAgLy8gb2YgcGFyYWxsZWwgcm91dGUga2V5IGFuZCBzZWdtZW50OlxuICAvL1xuICAvLyAgIFtzdHJpbmcsIFNlZ21lbnQsIHN0cmluZywgU2VnbWVudCwgc3RyaW5nLCBTZWdtZW50LCAuLi5dXG4gIC8vXG4gIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgcGF0aCBhbmQgZmluaXNoIGFueSB0YXNrcyB0aGF0IG1hdGNoIHRoaXMgcGF5bG9hZC5cbiAgbGV0IHRhc2sgPSByb290VGFza1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNlZ21lbnRQYXRoLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgY29uc3QgcGFyYWxsZWxSb3V0ZUtleTogc3RyaW5nID0gc2VnbWVudFBhdGhbaV1cbiAgICBjb25zdCBzZWdtZW50OiBTZWdtZW50ID0gc2VnbWVudFBhdGhbaSArIDFdXG4gICAgY29uc3QgdGFza0NoaWxkcmVuID0gdGFzay5jaGlsZHJlblxuICAgIGlmICh0YXNrQ2hpbGRyZW4gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHRhc2tDaGlsZCA9IHRhc2tDaGlsZHJlbi5nZXQocGFyYWxsZWxSb3V0ZUtleSlcbiAgICAgIGlmICh0YXNrQ2hpbGQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCB0YXNrU2VnbWVudCA9IHRhc2tDaGlsZC5yb3V0ZVswXVxuICAgICAgICBpZiAobWF0Y2hTZWdtZW50KHNlZ21lbnQsIHRhc2tTZWdtZW50KSkge1xuICAgICAgICAgIC8vIEZvdW5kIGEgbWF0Y2ggZm9yIHRoaXMgdGFzay4gS2VlcCB0cmF2ZXJzaW5nIGRvd24gdGhlIHRhc2sgdHJlZS5cbiAgICAgICAgICB0YXNrID0gdGFza0NoaWxkXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBXZSBkaWRuJ3QgZmluZCBhIGNoaWxkIHRhc2sgdGhhdCBtYXRjaGVzIHRoZSBzZXJ2ZXIgZGF0YS4gRXhpdC4gV2Ugd29uJ3RcbiAgICAvLyBhYm9ydCB0aGUgdGFzaywgdGhvdWdoLCBiZWNhdXNlIGEgZGlmZmVyZW50IEZsaWdodERhdGFQYXRoIG1heSBiZSBhYmxlIHRvXG4gICAgLy8gZnVsZmlsbCBpdCAoc2VlIGxvb3AgaW4gbGlzdGVuRm9yRHluYW1pY1JlcXVlc3QpLiBXZSBvbmx5IGFib3J0IHRhc2tzXG4gICAgLy8gb25jZSB3ZSd2ZSBydW4gb3V0IG9mIGRhdGEuXG4gICAgcmV0dXJuXG4gIH1cblxuICBmaW5pc2hUYXNrVXNpbmdEeW5hbWljRGF0YVBheWxvYWQoXG4gICAgdGFzayxcbiAgICBzZXJ2ZXJSb3V0ZXJTdGF0ZSxcbiAgICBkeW5hbWljRGF0YSxcbiAgICBkeW5hbWljSGVhZFxuICApXG59XG5cbmZ1bmN0aW9uIGZpbmlzaFRhc2tVc2luZ0R5bmFtaWNEYXRhUGF5bG9hZChcbiAgdGFzazogU1BBTmF2aWdhdGlvblRhc2ssXG4gIHNlcnZlclJvdXRlclN0YXRlOiBGbGlnaHRSb3V0ZXJTdGF0ZSxcbiAgZHluYW1pY0RhdGE6IENhY2hlTm9kZVNlZWREYXRhLFxuICBkeW5hbWljSGVhZDogSGVhZERhdGFcbikge1xuICBpZiAodGFzay5keW5hbWljUmVxdWVzdFRyZWUgPT09IG51bGwpIHtcbiAgICAvLyBFdmVyeXRoaW5nIGluIHRoaXMgc3VidHJlZSBpcyBhbHJlYWR5IGNvbXBsZXRlLiBCYWlsIG91dC5cbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIGR5bmFtaWNEYXRhIG1heSByZXByZXNlbnQgYSBsYXJnZXIgc3VidHJlZSB0aGFuIHRoZSB0YXNrLiBCZWZvcmUgd2UgY2FuXG4gIC8vIGZpbmlzaCB0aGUgdGFzaywgd2UgbmVlZCB0byBsaW5lIHRoZW0gdXAuXG4gIGNvbnN0IHRhc2tDaGlsZHJlbiA9IHRhc2suY2hpbGRyZW5cbiAgY29uc3QgdGFza05vZGUgPSB0YXNrLm5vZGVcbiAgaWYgKHRhc2tDaGlsZHJlbiA9PT0gbnVsbCkge1xuICAgIC8vIFdlJ3ZlIHJlYWNoZWQgdGhlIGxlYWYgbm9kZSBvZiB0aGUgcGVuZGluZyB0YXNrLiBUaGUgc2VydmVyIGRhdGEgdHJlZVxuICAgIC8vIGxpbmVzIHVwIHRoZSBwZW5kaW5nIENhY2hlIE5vZGUgdHJlZS4gV2UgY2FuIG5vdyBzd2l0Y2ggdG8gdGhlXG4gICAgLy8gbm9ybWFsIGFsZ29yaXRobS5cbiAgICBpZiAodGFza05vZGUgIT09IG51bGwpIHtcbiAgICAgIGZpbmlzaFBlbmRpbmdDYWNoZU5vZGUoXG4gICAgICAgIHRhc2tOb2RlLFxuICAgICAgICB0YXNrLnJvdXRlLFxuICAgICAgICBzZXJ2ZXJSb3V0ZXJTdGF0ZSxcbiAgICAgICAgZHluYW1pY0RhdGEsXG4gICAgICAgIGR5bmFtaWNIZWFkXG4gICAgICApXG4gICAgICAvLyBTZXQgdGhpcyB0byBudWxsIHRvIGluZGljYXRlIHRoYXQgdGhpcyB0YXNrIGlzIG5vdyBjb21wbGV0ZS5cbiAgICAgIHRhc2suZHluYW1pY1JlcXVlc3RUcmVlID0gbnVsbFxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICAvLyBUaGUgc2VydmVyIHJldHVybmVkIG1vcmUgZGF0YSB0aGFuIHdlIG5lZWQgdG8gZmluaXNoIHRoZSB0YXNrLiBTa2lwIG92ZXJcbiAgLy8gdGhlIGV4dHJhIHNlZ21lbnRzIHVudGlsIHdlIHJlYWNoIHRoZSBsZWFmIHRhc2sgbm9kZS5cbiAgY29uc3Qgc2VydmVyQ2hpbGRyZW4gPSBzZXJ2ZXJSb3V0ZXJTdGF0ZVsxXVxuICBjb25zdCBkeW5hbWljRGF0YUNoaWxkcmVuID0gZHluYW1pY0RhdGFbMl1cblxuICBmb3IgKGNvbnN0IHBhcmFsbGVsUm91dGVLZXkgaW4gc2VydmVyUm91dGVyU3RhdGUpIHtcbiAgICBjb25zdCBzZXJ2ZXJSb3V0ZXJTdGF0ZUNoaWxkOiBGbGlnaHRSb3V0ZXJTdGF0ZSA9XG4gICAgICBzZXJ2ZXJDaGlsZHJlbltwYXJhbGxlbFJvdXRlS2V5XVxuICAgIGNvbnN0IGR5bmFtaWNEYXRhQ2hpbGQ6IENhY2hlTm9kZVNlZWREYXRhIHwgbnVsbCB8IHZvaWQgPVxuICAgICAgZHluYW1pY0RhdGFDaGlsZHJlbltwYXJhbGxlbFJvdXRlS2V5XVxuXG4gICAgY29uc3QgdGFza0NoaWxkID0gdGFza0NoaWxkcmVuLmdldChwYXJhbGxlbFJvdXRlS2V5KVxuICAgIGlmICh0YXNrQ2hpbGQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgdGFza1NlZ21lbnQgPSB0YXNrQ2hpbGQucm91dGVbMF1cbiAgICAgIGlmIChcbiAgICAgICAgbWF0Y2hTZWdtZW50KHNlcnZlclJvdXRlclN0YXRlQ2hpbGRbMF0sIHRhc2tTZWdtZW50KSAmJlxuICAgICAgICBkeW5hbWljRGF0YUNoaWxkICE9PSBudWxsICYmXG4gICAgICAgIGR5bmFtaWNEYXRhQ2hpbGQgIT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIC8vIEZvdW5kIGEgbWF0Y2ggZm9yIHRoaXMgdGFzay4gS2VlcCB0cmF2ZXJzaW5nIGRvd24gdGhlIHRhc2sgdHJlZS5cbiAgICAgICAgcmV0dXJuIGZpbmlzaFRhc2tVc2luZ0R5bmFtaWNEYXRhUGF5bG9hZChcbiAgICAgICAgICB0YXNrQ2hpbGQsXG4gICAgICAgICAgc2VydmVyUm91dGVyU3RhdGVDaGlsZCxcbiAgICAgICAgICBkeW5hbWljRGF0YUNoaWxkLFxuICAgICAgICAgIGR5bmFtaWNIZWFkXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gV2UgZGlkbid0IGZpbmQgYSBjaGlsZCB0YXNrIHRoYXQgbWF0Y2hlcyB0aGUgc2VydmVyIGRhdGEuIFdlIHdvbid0IGFib3J0XG4gICAgLy8gdGhlIHRhc2ssIHRob3VnaCwgYmVjYXVzZSBhIGRpZmZlcmVudCBGbGlnaHREYXRhUGF0aCBtYXkgYmUgYWJsZSB0b1xuICAgIC8vIGZ1bGZpbGwgaXQgKHNlZSBsb29wIGluIGxpc3RlbkZvckR5bmFtaWNSZXF1ZXN0KS4gV2Ugb25seSBhYm9ydCB0YXNrc1xuICAgIC8vIG9uY2Ugd2UndmUgcnVuIG91dCBvZiBkYXRhLlxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVBlbmRpbmdDYWNoZU5vZGUoXG4gIG5hdmlnYXRlZEF0OiBudW1iZXIsXG4gIHJvdXRlclN0YXRlOiBGbGlnaHRSb3V0ZXJTdGF0ZSxcbiAgcHJlZmV0Y2hEYXRhOiBDYWNoZU5vZGVTZWVkRGF0YSB8IG51bGwsXG4gIHByZWZldGNoSGVhZDogSGVhZERhdGEgfCBudWxsLFxuICBpc1ByZWZldGNoSGVhZFBhcnRpYWw6IGJvb2xlYW4sXG4gIHNlZ21lbnRQYXRoOiBGbGlnaHRTZWdtZW50UGF0aCxcbiAgc2Nyb2xsYWJsZVNlZ21lbnRzUmVzdWx0OiBBcnJheTxGbGlnaHRTZWdtZW50UGF0aD5cbik6IFJlYWR5Q2FjaGVOb2RlIHtcbiAgY29uc3Qgcm91dGVyU3RhdGVDaGlsZHJlbiA9IHJvdXRlclN0YXRlWzFdXG4gIGNvbnN0IHByZWZldGNoRGF0YUNoaWxkcmVuID0gcHJlZmV0Y2hEYXRhICE9PSBudWxsID8gcHJlZmV0Y2hEYXRhWzJdIDogbnVsbFxuXG4gIGNvbnN0IHBhcmFsbGVsUm91dGVzID0gbmV3IE1hcCgpXG4gIGZvciAobGV0IHBhcmFsbGVsUm91dGVLZXkgaW4gcm91dGVyU3RhdGVDaGlsZHJlbikge1xuICAgIGNvbnN0IHJvdXRlclN0YXRlQ2hpbGQ6IEZsaWdodFJvdXRlclN0YXRlID1cbiAgICAgIHJvdXRlclN0YXRlQ2hpbGRyZW5bcGFyYWxsZWxSb3V0ZUtleV1cbiAgICBjb25zdCBwcmVmZXRjaERhdGFDaGlsZDogQ2FjaGVOb2RlU2VlZERhdGEgfCBudWxsIHwgdm9pZCA9XG4gICAgICBwcmVmZXRjaERhdGFDaGlsZHJlbiAhPT0gbnVsbFxuICAgICAgICA/IHByZWZldGNoRGF0YUNoaWxkcmVuW3BhcmFsbGVsUm91dGVLZXldXG4gICAgICAgIDogbnVsbFxuXG4gICAgY29uc3Qgc2VnbWVudENoaWxkID0gcm91dGVyU3RhdGVDaGlsZFswXVxuICAgIGNvbnN0IHNlZ21lbnRQYXRoQ2hpbGQgPSBzZWdtZW50UGF0aC5jb25jYXQoW1xuICAgICAgcGFyYWxsZWxSb3V0ZUtleSxcbiAgICAgIHNlZ21lbnRDaGlsZCxcbiAgICBdKVxuICAgIGNvbnN0IHNlZ21lbnRLZXlDaGlsZCA9IGNyZWF0ZVJvdXRlckNhY2hlS2V5KHNlZ21lbnRDaGlsZClcblxuICAgIGNvbnN0IG5ld0NhY2hlTm9kZUNoaWxkID0gY3JlYXRlUGVuZGluZ0NhY2hlTm9kZShcbiAgICAgIG5hdmlnYXRlZEF0LFxuICAgICAgcm91dGVyU3RhdGVDaGlsZCxcbiAgICAgIHByZWZldGNoRGF0YUNoaWxkID09PSB1bmRlZmluZWQgPyBudWxsIDogcHJlZmV0Y2hEYXRhQ2hpbGQsXG4gICAgICBwcmVmZXRjaEhlYWQsXG4gICAgICBpc1ByZWZldGNoSGVhZFBhcnRpYWwsXG4gICAgICBzZWdtZW50UGF0aENoaWxkLFxuICAgICAgc2Nyb2xsYWJsZVNlZ21lbnRzUmVzdWx0XG4gICAgKVxuXG4gICAgY29uc3QgbmV3U2VnbWVudE1hcENoaWxkOiBDaGlsZFNlZ21lbnRNYXAgPSBuZXcgTWFwKClcbiAgICBuZXdTZWdtZW50TWFwQ2hpbGQuc2V0KHNlZ21lbnRLZXlDaGlsZCwgbmV3Q2FjaGVOb2RlQ2hpbGQpXG4gICAgcGFyYWxsZWxSb3V0ZXMuc2V0KHBhcmFsbGVsUm91dGVLZXksIG5ld1NlZ21lbnRNYXBDaGlsZClcbiAgfVxuXG4gIC8vIFRoZSBoZWFkIGlzIGFzc2lnbmVkIHRvIGV2ZXJ5IGxlYWYgc2VnbWVudCBkZWxpdmVyZWQgYnkgdGhlIHNlcnZlci4gQmFzZWRcbiAgLy8gb24gY29ycmVzcG9uZGluZyBsb2dpYyBpbiBmaWxsLWxhenktaXRlbXMtdGlsbC1sZWFmLXdpdGgtaGVhZC50c1xuICBjb25zdCBpc0xlYWZTZWdtZW50ID0gcGFyYWxsZWxSb3V0ZXMuc2l6ZSA9PT0gMFxuXG4gIGlmIChpc0xlYWZTZWdtZW50KSB7XG4gICAgLy8gVGhlIHNlZ21lbnQgcGF0aCBvZiBldmVyeSBsZWFmIHNlZ21lbnQgKGkuZS4gcGFnZSkgaXMgY29sbGVjdGVkIGludG9cbiAgICAvLyBhIHJlc3VsdCBhcnJheS4gVGhpcyBpcyB1c2VkIGJ5IHRoZSBMYXlvdXRSb3V0ZXIgdG8gc2Nyb2xsIHRvIGVuc3VyZSB0aGF0XG4gICAgLy8gbmV3IHBhZ2VzIGFyZSB2aXNpYmxlIGFmdGVyIGEgbmF2aWdhdGlvbi5cbiAgICAvLyBUT0RPOiBXZSBzaG91bGQgdXNlIGEgc3RyaW5nIHRvIHJlcHJlc2VudCB0aGUgc2VnbWVudCBwYXRoIGluc3RlYWQgb2ZcbiAgICAvLyBhbiBhcnJheS4gV2UgYWxyZWFkeSB1c2UgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBwYXRoIHdoZW5cbiAgICAvLyBhY2Nlc3NpbmcgdGhlIFNlZ21lbnQgQ2FjaGUsIHNvIHdlIGNhbiB1c2UgdGhlIHNhbWUgb25lLlxuICAgIHNjcm9sbGFibGVTZWdtZW50c1Jlc3VsdC5wdXNoKHNlZ21lbnRQYXRoKVxuICB9XG5cbiAgY29uc3QgbWF5YmVQcmVmZXRjaFJzYyA9IHByZWZldGNoRGF0YSAhPT0gbnVsbCA/IHByZWZldGNoRGF0YVsxXSA6IG51bGxcbiAgY29uc3QgbWF5YmVQcmVmZXRjaExvYWRpbmcgPSBwcmVmZXRjaERhdGEgIT09IG51bGwgPyBwcmVmZXRjaERhdGFbM10gOiBudWxsXG4gIHJldHVybiB7XG4gICAgbGF6eURhdGE6IG51bGwsXG4gICAgcGFyYWxsZWxSb3V0ZXM6IHBhcmFsbGVsUm91dGVzLFxuXG4gICAgcHJlZmV0Y2hSc2M6IG1heWJlUHJlZmV0Y2hSc2MgIT09IHVuZGVmaW5lZCA/IG1heWJlUHJlZmV0Y2hSc2MgOiBudWxsLFxuICAgIHByZWZldGNoSGVhZDogaXNMZWFmU2VnbWVudCA/IHByZWZldGNoSGVhZCA6IFtudWxsLCBudWxsXSxcblxuICAgIC8vIFRPRE86IFRlY2huaWNhbGx5LCBhIGxvYWRpbmcgYm91bmRhcnkgY291bGQgY29udGFpbiBkeW5hbWljIGRhdGEuIFdlIG11c3RcbiAgICAvLyBoYXZlIHNlcGFyYXRlIGBsb2FkaW5nYCBhbmQgYHByZWZldGNoTG9hZGluZ2AgZmllbGRzIHRvIGhhbmRsZSB0aGlzLCBsaWtlXG4gICAgLy8gd2UgZG8gZm9yIHRoZSBzZWdtZW50IGRhdGEgYW5kIGhlYWQuXG4gICAgbG9hZGluZzogbWF5YmVQcmVmZXRjaExvYWRpbmcgIT09IHVuZGVmaW5lZCA/IG1heWJlUHJlZmV0Y2hMb2FkaW5nIDogbnVsbCxcblxuICAgIC8vIENyZWF0ZSBhIGRlZmVycmVkIHByb21pc2UuIFRoaXMgd2lsbCBiZSBmdWxmaWxsZWQgb25jZSB0aGUgZHluYW1pY1xuICAgIC8vIHJlc3BvbnNlIGlzIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlci5cbiAgICByc2M6IGNyZWF0ZURlZmVycmVkUnNjKCkgYXMgUmVhY3QuUmVhY3ROb2RlLFxuICAgIGhlYWQ6IGlzTGVhZlNlZ21lbnQgPyAoY3JlYXRlRGVmZXJyZWRSc2MoKSBhcyBSZWFjdC5SZWFjdE5vZGUpIDogbnVsbCxcblxuICAgIG5hdmlnYXRlZEF0LFxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmlzaFBlbmRpbmdDYWNoZU5vZGUoXG4gIGNhY2hlTm9kZTogQ2FjaGVOb2RlLFxuICB0YXNrU3RhdGU6IEZsaWdodFJvdXRlclN0YXRlLFxuICBzZXJ2ZXJTdGF0ZTogRmxpZ2h0Um91dGVyU3RhdGUsXG4gIGR5bmFtaWNEYXRhOiBDYWNoZU5vZGVTZWVkRGF0YSxcbiAgZHluYW1pY0hlYWQ6IEhlYWREYXRhXG4pOiB2b2lkIHtcbiAgLy8gV3JpdGVzIGEgZHluYW1pYyByZXNwb25zZSBpbnRvIGFuIGV4aXN0aW5nIENhY2hlIE5vZGUgdHJlZS4gVGhpcyBkb2VzIF9ub3RfXG4gIC8vIGNyZWF0ZSBhIG5ldyB0cmVlLCBpdCB1cGRhdGVzIHRoZSBleGlzdGluZyB0cmVlIGluLXBsYWNlLiBTbyBpdCBtdXN0IGZvbGxvd1xuICAvLyB0aGUgU3VzcGVuc2UgcnVsZXMgb2YgY2FjaGUgc2FmZXR5IOKAlCBpdCBjYW4gcmVzb2x2ZSBwZW5kaW5nIHByb21pc2VzLCBidXRcbiAgLy8gaXQgY2Fubm90IG92ZXJ3cml0ZSBleGlzdGluZyBkYXRhLiBJdCBjYW4gYWRkIHNlZ21lbnRzIHRvIHRoZSB0cmVlIChiZWNhdXNlXG4gIC8vIGEgbWlzc2luZyBzZWdtZW50IHdpbGwgY2F1c2UgdGhlIGxheW91dCByb3V0ZXIgdG8gc3VzcGVuZCkuXG4gIC8vIGJ1dCBpdCBjYW5ub3QgZGVsZXRlIHRoZW0uXG4gIC8vXG4gIC8vIFdlIG11c3QgcmVzb2x2ZSBldmVyeSBwcm9taXNlIGluIHRoZSB0cmVlLCBvciBlbHNlIGl0IHdpbGwgc3VzcGVuZFxuICAvLyBpbmRlZmluaXRlbHkuIElmIHdlIGRpZCBub3QgcmVjZWl2ZSBkYXRhIGZvciBhIHNlZ21lbnQsIHdlIHdpbGwgcmVzb2x2ZSBpdHNcbiAgLy8gZGF0YSBwcm9taXNlIHRvIGBudWxsYCB0byB0cmlnZ2VyIGEgbGF6eSBmZXRjaCBkdXJpbmcgcmVuZGVyLlxuICBjb25zdCB0YXNrU3RhdGVDaGlsZHJlbiA9IHRhc2tTdGF0ZVsxXVxuICBjb25zdCBzZXJ2ZXJTdGF0ZUNoaWxkcmVuID0gc2VydmVyU3RhdGVbMV1cbiAgY29uc3QgZGF0YUNoaWxkcmVuID0gZHluYW1pY0RhdGFbMl1cblxuICAvLyBUaGUgcm91dGVyIHN0YXRlIHRoYXQgd2UgdHJhdmVyc2UgdGhlIHRyZWUgd2l0aCAodGFza1N0YXRlKSBpcyB0aGUgc2FtZSBvbmVcbiAgLy8gdGhhdCB3ZSB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgcGVuZGluZyBDYWNoZSBOb2RlIHRyZWUuIFRoYXQgd2F5IHdlJ3JlIHN1cmVcbiAgLy8gdG8gcmVzb2x2ZSBhbGwgdGhlIHBlbmRpbmcgcHJvbWlzZXMuXG4gIGNvbnN0IHBhcmFsbGVsUm91dGVzID0gY2FjaGVOb2RlLnBhcmFsbGVsUm91dGVzXG4gIGZvciAobGV0IHBhcmFsbGVsUm91dGVLZXkgaW4gdGFza1N0YXRlQ2hpbGRyZW4pIHtcbiAgICBjb25zdCB0YXNrU3RhdGVDaGlsZDogRmxpZ2h0Um91dGVyU3RhdGUgPVxuICAgICAgdGFza1N0YXRlQ2hpbGRyZW5bcGFyYWxsZWxSb3V0ZUtleV1cbiAgICBjb25zdCBzZXJ2ZXJTdGF0ZUNoaWxkOiBGbGlnaHRSb3V0ZXJTdGF0ZSB8IHZvaWQgPVxuICAgICAgc2VydmVyU3RhdGVDaGlsZHJlbltwYXJhbGxlbFJvdXRlS2V5XVxuICAgIGNvbnN0IGRhdGFDaGlsZDogQ2FjaGVOb2RlU2VlZERhdGEgfCBudWxsIHwgdm9pZCA9XG4gICAgICBkYXRhQ2hpbGRyZW5bcGFyYWxsZWxSb3V0ZUtleV1cblxuICAgIGNvbnN0IHNlZ21lbnRNYXBDaGlsZCA9IHBhcmFsbGVsUm91dGVzLmdldChwYXJhbGxlbFJvdXRlS2V5KVxuICAgIGNvbnN0IHRhc2tTZWdtZW50Q2hpbGQgPSB0YXNrU3RhdGVDaGlsZFswXVxuICAgIGNvbnN0IHRhc2tTZWdtZW50S2V5Q2hpbGQgPSBjcmVhdGVSb3V0ZXJDYWNoZUtleSh0YXNrU2VnbWVudENoaWxkKVxuXG4gICAgY29uc3QgY2FjaGVOb2RlQ2hpbGQgPVxuICAgICAgc2VnbWVudE1hcENoaWxkICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBzZWdtZW50TWFwQ2hpbGQuZ2V0KHRhc2tTZWdtZW50S2V5Q2hpbGQpXG4gICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICBpZiAoY2FjaGVOb2RlQ2hpbGQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKFxuICAgICAgICBzZXJ2ZXJTdGF0ZUNoaWxkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgbWF0Y2hTZWdtZW50KHRhc2tTZWdtZW50Q2hpbGQsIHNlcnZlclN0YXRlQ2hpbGRbMF0pXG4gICAgICApIHtcbiAgICAgICAgaWYgKGRhdGFDaGlsZCAhPT0gdW5kZWZpbmVkICYmIGRhdGFDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGhhcHB5IHBhdGguIFJlY3Vyc2l2ZWx5IHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuLlxuICAgICAgICAgIGZpbmlzaFBlbmRpbmdDYWNoZU5vZGUoXG4gICAgICAgICAgICBjYWNoZU5vZGVDaGlsZCxcbiAgICAgICAgICAgIHRhc2tTdGF0ZUNoaWxkLFxuICAgICAgICAgICAgc2VydmVyU3RhdGVDaGlsZCxcbiAgICAgICAgICAgIGRhdGFDaGlsZCxcbiAgICAgICAgICAgIGR5bmFtaWNIZWFkXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFRoZSBzZXJ2ZXIgbmV2ZXIgcmV0dXJuZWQgZGF0YSBmb3IgdGhpcyBzZWdtZW50LiBUcmlnZ2VyIGEgbGF6eVxuICAgICAgICAgIC8vIGZldGNoIGR1cmluZyByZW5kZXIuIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBiZWNhdXNlIHRoZSBSb3V0ZSBUcmVlXG4gICAgICAgICAgLy8gYW5kIHRoZSBTZWVkIERhdGEgdHJlZSBzZW50IGJ5IHRoZSBzZXJ2ZXIgc2hvdWxkIGFsd2F5cyBiZSB0aGUgc2FtZVxuICAgICAgICAgIC8vIHNoYXBlIHdoZW4gcGFydCBvZiB0aGUgc2FtZSBzZXJ2ZXIgcmVzcG9uc2UuXG4gICAgICAgICAgYWJvcnRQZW5kaW5nQ2FjaGVOb2RlKHRhc2tTdGF0ZUNoaWxkLCBjYWNoZU5vZGVDaGlsZCwgbnVsbClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhlIHNlcnZlciBuZXZlciByZXR1cm5lZCBkYXRhIGZvciB0aGlzIHNlZ21lbnQuIFRyaWdnZXIgYSBsYXp5XG4gICAgICAgIC8vIGZldGNoIGR1cmluZyByZW5kZXIuXG4gICAgICAgIGFib3J0UGVuZGluZ0NhY2hlTm9kZSh0YXNrU3RhdGVDaGlsZCwgY2FjaGVOb2RlQ2hpbGQsIG51bGwpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBzZXJ2ZXIgcmVzcG9uc2UgbWF0Y2hlcyB3aGF0IHdhcyBleHBlY3RlZCB0byByZWNlaXZlLCBidXQgdGhlcmUnc1xuICAgICAgLy8gbm8gbWF0Y2hpbmcgQ2FjaGUgTm9kZSBpbiB0aGUgdGFzayB0cmVlLiBUaGlzIGlzIGEgYnVnIGluIHRoZVxuICAgICAgLy8gaW1wbGVtZW50YXRpb24gYmVjYXVzZSB3ZSBzaG91bGQgaGF2ZSBjcmVhdGVkIGEgbm9kZSBmb3IgZXZlcnlcbiAgICAgIC8vIHNlZ21lbnQgaW4gdGhlIHRyZWUgdGhhdCdzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRhc2suXG4gICAgfVxuICB9XG5cbiAgLy8gVXNlIHRoZSBkeW5hbWljIGRhdGEgZnJvbSB0aGUgc2VydmVyIHRvIGZ1bGZpbGwgdGhlIGRlZmVycmVkIFJTQyBwcm9taXNlXG4gIC8vIG9uIHRoZSBDYWNoZSBOb2RlLlxuICBjb25zdCByc2MgPSBjYWNoZU5vZGUucnNjXG4gIGNvbnN0IGR5bmFtaWNTZWdtZW50RGF0YSA9IGR5bmFtaWNEYXRhWzFdXG4gIGlmIChyc2MgPT09IG51bGwpIHtcbiAgICAvLyBUaGlzIGlzIGEgbGF6eSBjYWNoZSBub2RlLiBXZSBjYW4gb3ZlcndyaXRlIGl0LiBUaGlzIGlzIG9ubHkgc2FmZVxuICAgIC8vIGJlY2F1c2Ugd2Uga25vdyB0aGF0IHRoZSBMYXlvdXRSb3V0ZXIgc3VzcGVuZHMgaWYgYHJzY2AgaXMgYG51bGxgLlxuICAgIGNhY2hlTm9kZS5yc2MgPSBkeW5hbWljU2VnbWVudERhdGFcbiAgfSBlbHNlIGlmIChpc0RlZmVycmVkUnNjKHJzYykpIHtcbiAgICAvLyBUaGlzIGlzIGEgZGVmZXJyZWQgUlNDIHByb21pc2UuIFdlIGNhbiBmdWxmaWxsIGl0IHdpdGggdGhlIGRhdGEgd2UganVzdFxuICAgIC8vIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlci4gSWYgaXQgd2FzIGFscmVhZHkgcmVzb2x2ZWQgYnkgYSBkaWZmZXJlbnRcbiAgICAvLyBuYXZpZ2F0aW9uLCB0aGVuIHRoaXMgZG9lcyBub3RoaW5nIGJlY2F1c2Ugd2UgY2FuJ3Qgb3ZlcndyaXRlIGRhdGEuXG4gICAgcnNjLnJlc29sdmUoZHluYW1pY1NlZ21lbnREYXRhKVxuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgaXMgbm90IGEgZGVmZXJyZWQgUlNDIHByb21pc2UsIG5vciBpcyBpdCBlbXB0eSwgc28gaXQgbXVzdCBoYXZlXG4gICAgLy8gYmVlbiBwb3B1bGF0ZWQgYnkgYSBkaWZmZXJlbnQgbmF2aWdhdGlvbi4gV2UgbXVzdCBub3Qgb3ZlcndyaXRlIGl0LlxuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIGxlYWYgc2VnbWVudC4gSWYgc28sIGl0IHdpbGwgaGF2ZSBhIGBoZWFkYCBwcm9wZXJ0eSB3aXRoXG4gIC8vIGEgcGVuZGluZyBwcm9taXNlIHRoYXQgbmVlZHMgdG8gYmUgcmVzb2x2ZWQgd2l0aCB0aGUgZHluYW1pYyBoZWFkIGZyb21cbiAgLy8gdGhlIHNlcnZlci5cbiAgY29uc3QgaGVhZCA9IGNhY2hlTm9kZS5oZWFkXG4gIGlmIChpc0RlZmVycmVkUnNjKGhlYWQpKSB7XG4gICAgaGVhZC5yZXNvbHZlKGR5bmFtaWNIZWFkKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhYm9ydFRhc2sodGFzazogU1BBTmF2aWdhdGlvblRhc2ssIGVycm9yOiBhbnkpOiB2b2lkIHtcbiAgY29uc3QgY2FjaGVOb2RlID0gdGFzay5ub2RlXG4gIGlmIChjYWNoZU5vZGUgPT09IG51bGwpIHtcbiAgICAvLyBUaGlzIGluZGljYXRlcyB0aGUgdGFzayBpcyBhbHJlYWR5IGNvbXBsZXRlLlxuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgdGFza0NoaWxkcmVuID0gdGFzay5jaGlsZHJlblxuICBpZiAodGFza0NoaWxkcmVuID09PSBudWxsKSB7XG4gICAgLy8gUmVhY2hlZCB0aGUgbGVhZiB0YXNrIG5vZGUuIFRoaXMgaXMgdGhlIHJvb3Qgb2YgYSBwZW5kaW5nIGNhY2hlXG4gICAgLy8gbm9kZSB0cmVlLlxuICAgIGFib3J0UGVuZGluZ0NhY2hlTm9kZSh0YXNrLnJvdXRlLCBjYWNoZU5vZGUsIGVycm9yKVxuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgaXMgYW4gaW50ZXJtZWRpYXRlIHRhc2sgbm9kZS4gS2VlcCB0cmF2ZXJzaW5nIHVudGlsIHdlIHJlYWNoIGFcbiAgICAvLyB0YXNrIG5vZGUgd2l0aCBubyBjaGlsZHJlbi4gVGhhdCB3aWxsIGJlIHRoZSByb290IG9mIHRoZSBjYWNoZSBub2RlIHRyZWVcbiAgICAvLyB0aGF0IG5lZWRzIHRvIGJlIHJlc29sdmVkLlxuICAgIGZvciAoY29uc3QgdGFza0NoaWxkIG9mIHRhc2tDaGlsZHJlbi52YWx1ZXMoKSkge1xuICAgICAgYWJvcnRUYXNrKHRhc2tDaGlsZCwgZXJyb3IpXG4gICAgfVxuICB9XG5cbiAgLy8gU2V0IHRoaXMgdG8gbnVsbCB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgdGFzayBpcyBub3cgY29tcGxldGUuXG4gIHRhc2suZHluYW1pY1JlcXVlc3RUcmVlID0gbnVsbFxufVxuXG5mdW5jdGlvbiBhYm9ydFBlbmRpbmdDYWNoZU5vZGUoXG4gIHJvdXRlclN0YXRlOiBGbGlnaHRSb3V0ZXJTdGF0ZSxcbiAgY2FjaGVOb2RlOiBDYWNoZU5vZGUsXG4gIGVycm9yOiBhbnlcbik6IHZvaWQge1xuICAvLyBGb3IgZXZlcnkgcGVuZGluZyBzZWdtZW50IGluIHRoZSB0cmVlLCByZXNvbHZlIGl0cyBgcnNjYCBwcm9taXNlIHRvIGBudWxsYFxuICAvLyB0byB0cmlnZ2VyIGEgbGF6eSBmZXRjaCBkdXJpbmcgcmVuZGVyLlxuICAvL1xuICAvLyBPciwgaWYgYW4gZXJyb3Igb2JqZWN0IGlzIHByb3ZpZGVkLCBpdCB3aWxsIGVycm9yIGluc3RlYWQuXG4gIGNvbnN0IHJvdXRlclN0YXRlQ2hpbGRyZW4gPSByb3V0ZXJTdGF0ZVsxXVxuICBjb25zdCBwYXJhbGxlbFJvdXRlcyA9IGNhY2hlTm9kZS5wYXJhbGxlbFJvdXRlc1xuICBmb3IgKGxldCBwYXJhbGxlbFJvdXRlS2V5IGluIHJvdXRlclN0YXRlQ2hpbGRyZW4pIHtcbiAgICBjb25zdCByb3V0ZXJTdGF0ZUNoaWxkOiBGbGlnaHRSb3V0ZXJTdGF0ZSA9XG4gICAgICByb3V0ZXJTdGF0ZUNoaWxkcmVuW3BhcmFsbGVsUm91dGVLZXldXG4gICAgY29uc3Qgc2VnbWVudE1hcENoaWxkID0gcGFyYWxsZWxSb3V0ZXMuZ2V0KHBhcmFsbGVsUm91dGVLZXkpXG4gICAgaWYgKHNlZ21lbnRNYXBDaGlsZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBUaGlzIHNob3VsZG4ndCBoYXBwZW4gYmVjYXVzZSB3ZSdyZSB0cmF2ZXJzaW5nIHRoZSBzYW1lIHRyZWUgdGhhdCB3YXNcbiAgICAgIC8vIHVzZWQgdG8gY29uc3RydWN0IHRoZSBjYWNoZSBub2RlcyBpbiB0aGUgZmlyc3QgcGxhY2UuXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCBzZWdtZW50Q2hpbGQgPSByb3V0ZXJTdGF0ZUNoaWxkWzBdXG4gICAgY29uc3Qgc2VnbWVudEtleUNoaWxkID0gY3JlYXRlUm91dGVyQ2FjaGVLZXkoc2VnbWVudENoaWxkKVxuICAgIGNvbnN0IGNhY2hlTm9kZUNoaWxkID0gc2VnbWVudE1hcENoaWxkLmdldChzZWdtZW50S2V5Q2hpbGQpXG4gICAgaWYgKGNhY2hlTm9kZUNoaWxkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGFib3J0UGVuZGluZ0NhY2hlTm9kZShyb3V0ZXJTdGF0ZUNoaWxkLCBjYWNoZU5vZGVDaGlsZCwgZXJyb3IpXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBiZWNhdXNlIHdlJ3JlIHRyYXZlcnNpbmcgdGhlIHNhbWUgdHJlZSB0aGF0IHdhc1xuICAgICAgLy8gdXNlZCB0byBjb25zdHJ1Y3QgdGhlIGNhY2hlIG5vZGVzIGluIHRoZSBmaXJzdCBwbGFjZS5cbiAgICB9XG4gIH1cbiAgY29uc3QgcnNjID0gY2FjaGVOb2RlLnJzY1xuICBpZiAoaXNEZWZlcnJlZFJzYyhyc2MpKSB7XG4gICAgaWYgKGVycm9yID09PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIHdpbGwgdHJpZ2dlciBhIGxhenkgZmV0Y2ggZHVyaW5nIHJlbmRlci5cbiAgICAgIHJzYy5yZXNvbHZlKG51bGwpXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgd2lsbCB0cmlnZ2VyIGFuIGVycm9yIGR1cmluZyByZW5kZXJpbmcuXG4gICAgICByc2MucmVqZWN0KGVycm9yKVxuICAgIH1cbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBsZWFmIHNlZ21lbnQuIElmIHNvLCBpdCB3aWxsIGhhdmUgYSBgaGVhZGAgcHJvcGVydHkgd2l0aFxuICAvLyBhIHBlbmRpbmcgcHJvbWlzZSB0aGF0IG5lZWRzIHRvIGJlIHJlc29sdmVkLiBJZiBhbiBlcnJvciB3YXMgcHJvdmlkZWQsIHdlXG4gIC8vIHdpbGwgbm90IHJlc29sdmUgaXQgd2l0aCBhbiBlcnJvciwgc2luY2UgdGhpcyBpcyByZW5kZXJlZCBhdCB0aGUgcm9vdCBvZlxuICAvLyB0aGUgYXBwLiBXZSB3YW50IHRoZSBzZWdtZW50IHRvIGVycm9yLCBub3QgdGhlIGVudGlyZSBhcHAuXG4gIGNvbnN0IGhlYWQgPSBjYWNoZU5vZGUuaGVhZFxuICBpZiAoaXNEZWZlcnJlZFJzYyhoZWFkKSkge1xuICAgIGhlYWQucmVzb2x2ZShudWxsKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVDYWNoZU5vZGVPblBvcHN0YXRlUmVzdG9yYXRpb24oXG4gIG9sZENhY2hlTm9kZTogQ2FjaGVOb2RlLFxuICByb3V0ZXJTdGF0ZTogRmxpZ2h0Um91dGVyU3RhdGVcbik6IFJlYWR5Q2FjaGVOb2RlIHtcbiAgLy8gQSBwb3BzdGF0ZSBuYXZpZ2F0aW9uIHJlYWRzIGRhdGEgZnJvbSB0aGUgbG9jYWwgY2FjaGUuIEl0IGRvZXMgbm90IGlzc3VlXG4gIC8vIG5ldyBuZXR3b3JrIHJlcXVlc3RzICh1bmxlc3MgdGhlIGNhY2hlIGVudHJpZXMgaGF2ZSBiZWVuIGV2aWN0ZWQpLiBTbywgd2VcbiAgLy8gdXBkYXRlIHRoZSBjYWNoZSB0byBkcm9wIHRoZSBwcmVmZXRjaCBkYXRhIGZvciBhbnkgc2VnbWVudCB3aG9zZSBkeW5hbWljXG4gIC8vIGRhdGEgd2FzIGFscmVhZHkgcmVjZWl2ZWQuIFRoaXMgcHJldmVudHMgYW4gdW5uZWNlc3NhcnkgZmxhc2ggYmFjayB0byBQUFJcbiAgLy8gc3RhdGUgZHVyaW5nIGEgYmFjay9mb3J3YXJkIG5hdmlnYXRpb24uXG4gIC8vXG4gIC8vIFRoaXMgZnVuY3Rpb24gY2xvbmVzIHRoZSBlbnRpcmUgY2FjaGUgbm9kZSB0cmVlIGFuZCBzZXRzIHRoZSBgcHJlZmV0Y2hSc2NgXG4gIC8vIGZpZWxkIHRvIGBudWxsYCB0byBwcmV2ZW50IGl0IGZyb20gYmVpbmcgcmVuZGVyZWQuIFdlIGNhbid0IG11dGF0ZSB0aGUgbm9kZVxuICAvLyBpbiBwbGFjZSBiZWNhdXNlIHRoaXMgaXMgYSBjb25jdXJyZW50IGRhdGEgc3RydWN0dXJlLlxuXG4gIGNvbnN0IHJvdXRlclN0YXRlQ2hpbGRyZW4gPSByb3V0ZXJTdGF0ZVsxXVxuICBjb25zdCBvbGRQYXJhbGxlbFJvdXRlcyA9IG9sZENhY2hlTm9kZS5wYXJhbGxlbFJvdXRlc1xuICBjb25zdCBuZXdQYXJhbGxlbFJvdXRlcyA9IG5ldyBNYXAob2xkUGFyYWxsZWxSb3V0ZXMpXG4gIGZvciAobGV0IHBhcmFsbGVsUm91dGVLZXkgaW4gcm91dGVyU3RhdGVDaGlsZHJlbikge1xuICAgIGNvbnN0IHJvdXRlclN0YXRlQ2hpbGQ6IEZsaWdodFJvdXRlclN0YXRlID1cbiAgICAgIHJvdXRlclN0YXRlQ2hpbGRyZW5bcGFyYWxsZWxSb3V0ZUtleV1cbiAgICBjb25zdCBzZWdtZW50Q2hpbGQgPSByb3V0ZXJTdGF0ZUNoaWxkWzBdXG4gICAgY29uc3Qgc2VnbWVudEtleUNoaWxkID0gY3JlYXRlUm91dGVyQ2FjaGVLZXkoc2VnbWVudENoaWxkKVxuICAgIGNvbnN0IG9sZFNlZ21lbnRNYXBDaGlsZCA9IG9sZFBhcmFsbGVsUm91dGVzLmdldChwYXJhbGxlbFJvdXRlS2V5KVxuICAgIGlmIChvbGRTZWdtZW50TWFwQ2hpbGQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgb2xkQ2FjaGVOb2RlQ2hpbGQgPSBvbGRTZWdtZW50TWFwQ2hpbGQuZ2V0KHNlZ21lbnRLZXlDaGlsZClcbiAgICAgIGlmIChvbGRDYWNoZU5vZGVDaGlsZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IG5ld0NhY2hlTm9kZUNoaWxkID0gdXBkYXRlQ2FjaGVOb2RlT25Qb3BzdGF0ZVJlc3RvcmF0aW9uKFxuICAgICAgICAgIG9sZENhY2hlTm9kZUNoaWxkLFxuICAgICAgICAgIHJvdXRlclN0YXRlQ2hpbGRcbiAgICAgICAgKVxuICAgICAgICBjb25zdCBuZXdTZWdtZW50TWFwQ2hpbGQgPSBuZXcgTWFwKG9sZFNlZ21lbnRNYXBDaGlsZClcbiAgICAgICAgbmV3U2VnbWVudE1hcENoaWxkLnNldChzZWdtZW50S2V5Q2hpbGQsIG5ld0NhY2hlTm9kZUNoaWxkKVxuICAgICAgICBuZXdQYXJhbGxlbFJvdXRlcy5zZXQocGFyYWxsZWxSb3V0ZUtleSwgbmV3U2VnbWVudE1hcENoaWxkKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIE9ubHkgc2hvdyBwcmVmZXRjaGVkIGRhdGEgaWYgdGhlIGR5bmFtaWMgZGF0YSBpcyBzdGlsbCBwZW5kaW5nLlxuICAvL1xuICAvLyBUZWhuaWNhbGx5LCB3aGF0IHdlJ3JlIGFjdHVhbGx5IGNoZWNraW5nIGlzIHdoZXRoZXIgdGhlIGR5bmFtaWMgbmV0d29ya1xuICAvLyByZXNwb25zZSB3YXMgcmVjZWl2ZWQuIEJ1dCBzaW5jZSBpdCdzIGEgc3RyZWFtaW5nIHJlc3BvbnNlLCB0aGlzIGRvZXMgbm90XG4gIC8vIG1lYW4gdGhhdCBhbGwgdGhlIGR5bmFtaWMgZGF0YSBoYXMgZnVsbHkgc3RyZWFtZWQgaW4uIEl0IGp1c3QgbWVhbnMgdGhhdFxuICAvLyBfc29tZV8gb2YgdGhlIGR5bmFtaWMgZGF0YSB3YXMgcmVjZWl2ZWQuIEJ1dCBhcyBhIGhldXJpc3RpYywgd2UgYXNzdW1lIHRoYXRcbiAgLy8gdGhlIHJlc3QgZHluYW1pYyBkYXRhIHdpbGwgc3RyZWFtIGluIHF1aWNrbHksIHNvIGl0J3Mgc3RpbGwgYmV0dGVyIHRvIHNraXBcbiAgLy8gdGhlIHByZWZldGNoIHN0YXRlLlxuICBjb25zdCByc2MgPSBvbGRDYWNoZU5vZGUucnNjXG4gIGNvbnN0IHNob3VsZFVzZVByZWZldGNoID0gaXNEZWZlcnJlZFJzYyhyc2MpICYmIHJzYy5zdGF0dXMgPT09ICdwZW5kaW5nJ1xuXG4gIHJldHVybiB7XG4gICAgbGF6eURhdGE6IG51bGwsXG4gICAgcnNjLFxuICAgIGhlYWQ6IG9sZENhY2hlTm9kZS5oZWFkLFxuXG4gICAgcHJlZmV0Y2hIZWFkOiBzaG91bGRVc2VQcmVmZXRjaCA/IG9sZENhY2hlTm9kZS5wcmVmZXRjaEhlYWQgOiBbbnVsbCwgbnVsbF0sXG4gICAgcHJlZmV0Y2hSc2M6IHNob3VsZFVzZVByZWZldGNoID8gb2xkQ2FjaGVOb2RlLnByZWZldGNoUnNjIDogbnVsbCxcbiAgICBsb2FkaW5nOiBvbGRDYWNoZU5vZGUubG9hZGluZyxcblxuICAgIC8vIFRoZXNlIGFyZSB0aGUgY2xvbmVkIGNoaWxkcmVuIHdlIGNvbXB1dGVkIGFib3ZlXG4gICAgcGFyYWxsZWxSb3V0ZXM6IG5ld1BhcmFsbGVsUm91dGVzLFxuXG4gICAgbmF2aWdhdGVkQXQ6IG9sZENhY2hlTm9kZS5uYXZpZ2F0ZWRBdCxcbiAgfVxufVxuXG5jb25zdCBERUZFUlJFRCA9IFN5bWJvbCgpXG5cbnR5cGUgUGVuZGluZ0RlZmVycmVkUnNjID0gUHJvbWlzZTxSZWFjdC5SZWFjdE5vZGU+ICYge1xuICBzdGF0dXM6ICdwZW5kaW5nJ1xuICByZXNvbHZlOiAodmFsdWU6IFJlYWN0LlJlYWN0Tm9kZSkgPT4gdm9pZFxuICByZWplY3Q6IChlcnJvcjogYW55KSA9PiB2b2lkXG4gIHRhZzogU3ltYm9sXG59XG5cbnR5cGUgRnVsZmlsbGVkRGVmZXJyZWRSc2MgPSBQcm9taXNlPFJlYWN0LlJlYWN0Tm9kZT4gJiB7XG4gIHN0YXR1czogJ2Z1bGZpbGxlZCdcbiAgdmFsdWU6IFJlYWN0LlJlYWN0Tm9kZVxuICByZXNvbHZlOiAodmFsdWU6IFJlYWN0LlJlYWN0Tm9kZSkgPT4gdm9pZFxuICByZWplY3Q6IChlcnJvcjogYW55KSA9PiB2b2lkXG4gIHRhZzogU3ltYm9sXG59XG5cbnR5cGUgUmVqZWN0ZWREZWZlcnJlZFJzYyA9IFByb21pc2U8UmVhY3QuUmVhY3ROb2RlPiAmIHtcbiAgc3RhdHVzOiAncmVqZWN0ZWQnXG4gIHJlYXNvbjogYW55XG4gIHJlc29sdmU6ICh2YWx1ZTogUmVhY3QuUmVhY3ROb2RlKSA9PiB2b2lkXG4gIHJlamVjdDogKGVycm9yOiBhbnkpID0+IHZvaWRcbiAgdGFnOiBTeW1ib2xcbn1cblxudHlwZSBEZWZlcnJlZFJzYyA9XG4gIHwgUGVuZGluZ0RlZmVycmVkUnNjXG4gIHwgRnVsZmlsbGVkRGVmZXJyZWRSc2NcbiAgfCBSZWplY3RlZERlZmVycmVkUnNjXG5cbi8vIFRoaXMgdHlwZSBleGlzdHMgdG8gZGlzdGluZ3Vpc2ggYSBEZWZlcnJlZFJzYyBmcm9tIGEgRmxpZ2h0IHByb21pc2UuIEl0J3MgYVxuLy8gY29tcHJvbWlzZSB0byBhdm9pZCBhZGRpbmcgYW4gZXh0cmEgZmllbGQgb24gZXZlcnkgQ2FjaGUgTm9kZSwgd2hpY2ggd291bGQgYmVcbi8vIGF3a3dhcmQgYmVjYXVzZSB0aGUgcHJlLVBQUiBwYXJ0cyBvZiBjb2RlYmFzZSB3b3VsZCBuZWVkIHRvIGFjY291bnQgZm9yIGl0LFxuLy8gdG9vLiBXZSBjYW4gcmVtb3ZlIGl0IG9uY2UgdHlwZSBDYWNoZSBOb2RlIHR5cGUgaXMgbW9yZSBzZXR0bGVkLlxuZnVuY3Rpb24gaXNEZWZlcnJlZFJzYyh2YWx1ZTogYW55KTogdmFsdWUgaXMgRGVmZXJyZWRSc2Mge1xuICByZXR1cm4gdmFsdWUgJiYgdmFsdWUudGFnID09PSBERUZFUlJFRFxufVxuXG5mdW5jdGlvbiBjcmVhdGVEZWZlcnJlZFJzYygpOiBQZW5kaW5nRGVmZXJyZWRSc2Mge1xuICBsZXQgcmVzb2x2ZTogYW55XG4gIGxldCByZWplY3Q6IGFueVxuICBjb25zdCBwZW5kaW5nUnNjID0gbmV3IFByb21pc2U8UmVhY3QuUmVhY3ROb2RlPigocmVzLCByZWopID0+IHtcbiAgICByZXNvbHZlID0gcmVzXG4gICAgcmVqZWN0ID0gcmVqXG4gIH0pIGFzIFBlbmRpbmdEZWZlcnJlZFJzY1xuICBwZW5kaW5nUnNjLnN0YXR1cyA9ICdwZW5kaW5nJ1xuICBwZW5kaW5nUnNjLnJlc29sdmUgPSAodmFsdWU6IFJlYWN0LlJlYWN0Tm9kZSkgPT4ge1xuICAgIGlmIChwZW5kaW5nUnNjLnN0YXR1cyA9PT0gJ3BlbmRpbmcnKSB7XG4gICAgICBjb25zdCBmdWxmaWxsZWRSc2M6IEZ1bGZpbGxlZERlZmVycmVkUnNjID0gcGVuZGluZ1JzYyBhcyBhbnlcbiAgICAgIGZ1bGZpbGxlZFJzYy5zdGF0dXMgPSAnZnVsZmlsbGVkJ1xuICAgICAgZnVsZmlsbGVkUnNjLnZhbHVlID0gdmFsdWVcbiAgICAgIHJlc29sdmUodmFsdWUpXG4gICAgfVxuICB9XG4gIHBlbmRpbmdSc2MucmVqZWN0ID0gKGVycm9yOiBhbnkpID0+IHtcbiAgICBpZiAocGVuZGluZ1JzYy5zdGF0dXMgPT09ICdwZW5kaW5nJykge1xuICAgICAgY29uc3QgcmVqZWN0ZWRSc2M6IFJlamVjdGVkRGVmZXJyZWRSc2MgPSBwZW5kaW5nUnNjIGFzIGFueVxuICAgICAgcmVqZWN0ZWRSc2Muc3RhdHVzID0gJ3JlamVjdGVkJ1xuICAgICAgcmVqZWN0ZWRSc2MucmVhc29uID0gZXJyb3JcbiAgICAgIHJlamVjdChlcnJvcilcbiAgICB9XG4gIH1cbiAgcGVuZGluZ1JzYy50YWcgPSBERUZFUlJFRFxuICByZXR1cm4gcGVuZGluZ1JzY1xufVxuIl0sIm5hbWVzIjpbImFib3J0VGFzayIsImxpc3RlbkZvckR5bmFtaWNSZXF1ZXN0Iiwic3RhcnRQUFJOYXZpZ2F0aW9uIiwidXBkYXRlQ2FjaGVOb2RlT25Qb3BzdGF0ZVJlc3RvcmF0aW9uIiwiTVBBX05BVklHQVRJT05fVEFTSyIsInJvdXRlIiwibm9kZSIsImR5bmFtaWNSZXF1ZXN0VHJlZSIsImNoaWxkcmVuIiwibmF2aWdhdGVkQXQiLCJvbGRDYWNoZU5vZGUiLCJvbGRSb3V0ZXJTdGF0ZSIsIm5ld1JvdXRlclN0YXRlIiwicHJlZmV0Y2hEYXRhIiwicHJlZmV0Y2hIZWFkIiwiaXNQcmVmZXRjaEhlYWRQYXJ0aWFsIiwiaXNTYW1lUGFnZU5hdmlnYXRpb24iLCJzY3JvbGxhYmxlU2VnbWVudHNSZXN1bHQiLCJzZWdtZW50UGF0aCIsInVwZGF0ZUNhY2hlTm9kZU9uTmF2aWdhdGlvbiIsImRpZEZpbmRSb290TGF5b3V0Iiwib2xkUm91dGVyU3RhdGVDaGlsZHJlbiIsIm5ld1JvdXRlclN0YXRlQ2hpbGRyZW4iLCJwcmVmZXRjaERhdGFDaGlsZHJlbiIsImlzUm9vdExheW91dCIsIm9sZFBhcmFsbGVsUm91dGVzIiwicGFyYWxsZWxSb3V0ZXMiLCJwcmVmZXRjaFBhcmFsbGVsUm91dGVzIiwiTWFwIiwicGF0Y2hlZFJvdXRlclN0YXRlQ2hpbGRyZW4iLCJ0YXNrQ2hpbGRyZW4iLCJuZWVkc0R5bmFtaWNSZXF1ZXN0IiwiZHluYW1pY1JlcXVlc3RUcmVlQ2hpbGRyZW4iLCJwYXJhbGxlbFJvdXRlS2V5IiwibmV3Um91dGVyU3RhdGVDaGlsZCIsIm9sZFJvdXRlclN0YXRlQ2hpbGQiLCJvbGRTZWdtZW50TWFwQ2hpbGQiLCJnZXQiLCJwcmVmZXRjaERhdGFDaGlsZCIsIm5ld1NlZ21lbnRDaGlsZCIsIm5ld1NlZ21lbnRQYXRoQ2hpbGQiLCJjb25jYXQiLCJuZXdTZWdtZW50S2V5Q2hpbGQiLCJjcmVhdGVSb3V0ZXJDYWNoZUtleSIsIm9sZFNlZ21lbnRDaGlsZCIsInVuZGVmaW5lZCIsIm9sZENhY2hlTm9kZUNoaWxkIiwidGFza0NoaWxkIiwiREVGQVVMVF9TRUdNRU5UX0tFWSIsInNwYXduUmV1c2VkVGFzayIsImJlZ2luUmVuZGVyaW5nTmV3Um91dGVUcmVlIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsIm1hdGNoU2VnbWVudCIsInNldCIsIm5ld0NhY2hlTm9kZUNoaWxkIiwibmV3U2VnbWVudE1hcENoaWxkIiwidGFza0NoaWxkUm91dGUiLCJkeW5hbWljUmVxdWVzdFRyZWVDaGlsZCIsIm5ld0NhY2hlTm9kZSIsImxhenlEYXRhIiwicnNjIiwicHJlZmV0Y2hSc2MiLCJoZWFkIiwibG9hZGluZyIsInBhdGNoUm91dGVyU3RhdGVXaXRoTmV3Q2hpbGRyZW4iLCJleGlzdGluZ0NhY2hlTm9kZSIsInBvc3NpYmx5UGFydGlhbFByZWZldGNoSGVhZCIsImlzTmF2aWdhdGluZ1RvTmV3Um9vdExheW91dCIsImNyZWF0ZUNhY2hlTm9kZU9uTmF2aWdhdGlvbiIsInJvdXRlclN0YXRlIiwicm91dGVyU3RhdGVDaGlsZHJlbiIsImlzTGVhZlNlZ21lbnQiLCJjYWNoZU5vZGVOYXZpZ2F0ZWRBdCIsIkRZTkFNSUNfU1RBTEVUSU1FX01TIiwiaXNQcmVmZXRjaFJzY1BhcnRpYWwiLCJzcGF3blBlbmRpbmdUYXNrIiwiZXhpc3RpbmdDYWNoZU5vZGVDaGlsZHJlbiIsImNhY2hlTm9kZUNoaWxkcmVuIiwicHVzaCIsInJvdXRlclN0YXRlQ2hpbGQiLCJleGlzdGluZ1NlZ21lbnRNYXBDaGlsZCIsInNlZ21lbnRDaGlsZCIsInNlZ21lbnRQYXRoQ2hpbGQiLCJzZWdtZW50S2V5Q2hpbGQiLCJleGlzdGluZ0NhY2hlTm9kZUNoaWxkIiwiYmFzZVJvdXRlclN0YXRlIiwibmV3Q2hpbGRyZW4iLCJjbG9uZSIsIm5ld1Rhc2siLCJjcmVhdGVQZW5kaW5nQ2FjaGVOb2RlIiwicmV1c2VkUm91dGVyU3RhdGUiLCJ0YXNrIiwicmVzcG9uc2VQcm9taXNlIiwidGhlbiIsImZsaWdodERhdGEiLCJub3JtYWxpemVkRmxpZ2h0RGF0YSIsInRyZWUiLCJzZXJ2ZXJSb3V0ZXJTdGF0ZSIsInNlZWREYXRhIiwiZHluYW1pY0RhdGEiLCJkeW5hbWljSGVhZCIsIndyaXRlRHluYW1pY0RhdGFJbnRvUGVuZGluZ1Rhc2siLCJlcnJvciIsInJvb3RUYXNrIiwiaSIsInNlZ21lbnQiLCJ0YXNrU2VnbWVudCIsImZpbmlzaFRhc2tVc2luZ0R5bmFtaWNEYXRhUGF5bG9hZCIsInRhc2tOb2RlIiwiZmluaXNoUGVuZGluZ0NhY2hlTm9kZSIsInNlcnZlckNoaWxkcmVuIiwiZHluYW1pY0RhdGFDaGlsZHJlbiIsInNlcnZlclJvdXRlclN0YXRlQ2hpbGQiLCJkeW5hbWljRGF0YUNoaWxkIiwic2l6ZSIsIm1heWJlUHJlZmV0Y2hSc2MiLCJtYXliZVByZWZldGNoTG9hZGluZyIsImNyZWF0ZURlZmVycmVkUnNjIiwiY2FjaGVOb2RlIiwidGFza1N0YXRlIiwic2VydmVyU3RhdGUiLCJ0YXNrU3RhdGVDaGlsZHJlbiIsInNlcnZlclN0YXRlQ2hpbGRyZW4iLCJkYXRhQ2hpbGRyZW4iLCJ0YXNrU3RhdGVDaGlsZCIsInNlcnZlclN0YXRlQ2hpbGQiLCJkYXRhQ2hpbGQiLCJzZWdtZW50TWFwQ2hpbGQiLCJ0YXNrU2VnbWVudENoaWxkIiwidGFza1NlZ21lbnRLZXlDaGlsZCIsImNhY2hlTm9kZUNoaWxkIiwiYWJvcnRQZW5kaW5nQ2FjaGVOb2RlIiwiZHluYW1pY1NlZ21lbnREYXRhIiwiaXNEZWZlcnJlZFJzYyIsInJlc29sdmUiLCJ2YWx1ZXMiLCJyZWplY3QiLCJuZXdQYXJhbGxlbFJvdXRlcyIsInNob3VsZFVzZVByZWZldGNoIiwic3RhdHVzIiwiREVGRVJSRUQiLCJTeW1ib2wiLCJ2YWx1ZSIsInRhZyIsInBlbmRpbmdSc2MiLCJQcm9taXNlIiwicmVzIiwicmVqIiwiZnVsZmlsbGVkUnNjIiwicmVqZWN0ZWRSc2MiLCJyZWFzb24iXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/ppr-navigations.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/prefetch-cache-utils.js":
|
||
/*!*****************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/router-reducer/prefetch-cache-utils.js ***!
|
||
\*****************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n DYNAMIC_STALETIME_MS: function() {\n return DYNAMIC_STALETIME_MS;\n },\n STATIC_STALETIME_MS: function() {\n return STATIC_STALETIME_MS;\n },\n createSeededPrefetchCacheEntry: function() {\n return createSeededPrefetchCacheEntry;\n },\n getOrCreatePrefetchCacheEntry: function() {\n return getOrCreatePrefetchCacheEntry;\n },\n prunePrefetchCache: function() {\n return prunePrefetchCache;\n }\n});\nconst _fetchserverresponse = __webpack_require__(/*! ./fetch-server-response */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fetch-server-response.js\");\nconst _routerreducertypes = __webpack_require__(/*! ./router-reducer-types */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst _prefetchreducer = __webpack_require__(/*! ./reducers/prefetch-reducer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/prefetch-reducer.js\");\nconst INTERCEPTION_CACHE_KEY_MARKER = '%';\n/**\n * Creates a cache key for the router prefetch cache\n *\n * @param url - The URL being navigated to\n * @param nextUrl - an internal URL, primarily used for handling rewrites. Defaults to '/'.\n * @return The generated prefetch cache key.\n */ function createPrefetchCacheKeyImpl(url, includeSearchParams, prefix) {\n // Initially we only use the pathname as the cache key. We don't want to include\n // search params so that multiple URLs with the same search parameter can re-use\n // loading states.\n let pathnameFromUrl = url.pathname;\n // RSC responses can differ based on search params, specifically in the case where we aren't\n // returning a partial response (ie with `PrefetchKind.AUTO`).\n // In the auto case, since loading.js & layout.js won't have access to search params,\n // we can safely re-use that cache entry. But for full prefetches, we should not\n // re-use the cache entry as the response may differ.\n if (includeSearchParams) {\n // if we have a full prefetch, we can include the search param in the key,\n // as we'll be getting back a full response. The server might have read the search\n // params when generating the full response.\n pathnameFromUrl += url.search;\n }\n if (prefix) {\n return \"\" + prefix + INTERCEPTION_CACHE_KEY_MARKER + pathnameFromUrl;\n }\n return pathnameFromUrl;\n}\nfunction createPrefetchCacheKey(url, kind, nextUrl) {\n return createPrefetchCacheKeyImpl(url, kind === _routerreducertypes.PrefetchKind.FULL, nextUrl);\n}\nfunction getExistingCacheEntry(url, kind, nextUrl, prefetchCache, allowAliasing) {\n if (kind === void 0) kind = _routerreducertypes.PrefetchKind.TEMPORARY;\n // We first check if there's a more specific interception route prefetch entry\n // This is because when we detect a prefetch that corresponds with an interception route, we prefix it with nextUrl (see `createPrefetchCacheKey`)\n // to avoid conflicts with other pages that may have the same URL but render different things depending on the `Next-URL` header.\n for (const maybeNextUrl of [\n nextUrl,\n null\n ]){\n const cacheKeyWithParams = createPrefetchCacheKeyImpl(url, true, maybeNextUrl);\n const cacheKeyWithoutParams = createPrefetchCacheKeyImpl(url, false, maybeNextUrl);\n // First, we check if we have a cache entry that exactly matches the URL\n const cacheKeyToUse = url.search ? cacheKeyWithParams : cacheKeyWithoutParams;\n const existingEntry = prefetchCache.get(cacheKeyToUse);\n if (existingEntry && allowAliasing) {\n // We know we're returning an aliased entry when the pathname matches but the search params don't,\n const isAliased = existingEntry.url.pathname === url.pathname && existingEntry.url.search !== url.search;\n if (isAliased) {\n return {\n ...existingEntry,\n aliased: true\n };\n }\n return existingEntry;\n }\n // If the request contains search params, and we're not doing a full prefetch, we can return the\n // param-less entry if it exists.\n // This is technically covered by the check at the bottom of this function, which iterates over cache entries,\n // but lets us arrive there quicker in the param-full case.\n const entryWithoutParams = prefetchCache.get(cacheKeyWithoutParams);\n if (false) {}\n }\n // If we've gotten to this point, we didn't find a specific cache entry that matched\n // the request URL.\n // We attempt a partial match by checking if there's a cache entry with the same pathname.\n // Regardless of what we find, since it doesn't correspond with the requested URL, we'll mark it \"aliased\".\n // This will signal to the router that it should only apply the loading state on the prefetched data.\n if (false) {}\n return undefined;\n}\nfunction getOrCreatePrefetchCacheEntry(param) {\n let { url, nextUrl, tree, prefetchCache, kind, allowAliasing = true } = param;\n const existingCacheEntry = getExistingCacheEntry(url, kind, nextUrl, prefetchCache, allowAliasing);\n if (existingCacheEntry) {\n // Grab the latest status of the cache entry and update it\n existingCacheEntry.status = getPrefetchEntryCacheStatus(existingCacheEntry);\n // when `kind` is provided, an explicit prefetch was requested.\n // if the requested prefetch is \"full\" and the current cache entry wasn't, we want to re-prefetch with the new intent\n const switchedToFullPrefetch = existingCacheEntry.kind !== _routerreducertypes.PrefetchKind.FULL && kind === _routerreducertypes.PrefetchKind.FULL;\n if (switchedToFullPrefetch) {\n // If we switched to a full prefetch, validate that the existing cache entry contained partial data.\n // It's possible that the cache entry was seeded with full data but has a cache type of \"auto\" (ie when cache entries\n // are seeded but without a prefetch intent)\n existingCacheEntry.data.then((prefetchResponse)=>{\n const isFullPrefetch = Array.isArray(prefetchResponse.flightData) && prefetchResponse.flightData.some((flightData)=>{\n // If we started rendering from the root and we returned RSC data (seedData), we already had a full prefetch.\n return flightData.isRootRender && flightData.seedData !== null;\n });\n if (!isFullPrefetch) {\n return createLazyPrefetchEntry({\n tree,\n url,\n nextUrl,\n prefetchCache,\n // If we didn't get an explicit prefetch kind, we want to set a temporary kind\n // rather than assuming the same intent as the previous entry, to be consistent with how we\n // lazily create prefetch entries when intent is left unspecified.\n kind: kind != null ? kind : _routerreducertypes.PrefetchKind.TEMPORARY\n });\n }\n });\n }\n // If the existing cache entry was marked as temporary, it means it was lazily created when attempting to get an entry,\n // where we didn't have the prefetch intent. Now that we have the intent (in `kind`), we want to update the entry to the more accurate kind.\n if (kind && existingCacheEntry.kind === _routerreducertypes.PrefetchKind.TEMPORARY) {\n existingCacheEntry.kind = kind;\n }\n // We've determined that the existing entry we found is still valid, so we return it.\n return existingCacheEntry;\n }\n // If we didn't return an entry, create a new one.\n return createLazyPrefetchEntry({\n tree,\n url,\n nextUrl,\n prefetchCache,\n kind: kind || _routerreducertypes.PrefetchKind.TEMPORARY\n });\n}\n/*\n * Used to take an existing cache entry and prefix it with the nextUrl, if it exists.\n * This ensures that we don't have conflicting cache entries for the same URL (as is the case with route interception).\n */ function prefixExistingPrefetchCacheEntry(param) {\n let { url, nextUrl, prefetchCache, existingCacheKey } = param;\n const existingCacheEntry = prefetchCache.get(existingCacheKey);\n if (!existingCacheEntry) {\n // no-op -- there wasn't an entry to move\n return;\n }\n const newCacheKey = createPrefetchCacheKey(url, existingCacheEntry.kind, nextUrl);\n prefetchCache.set(newCacheKey, {\n ...existingCacheEntry,\n key: newCacheKey\n });\n prefetchCache.delete(existingCacheKey);\n return newCacheKey;\n}\nfunction createSeededPrefetchCacheEntry(param) {\n let { nextUrl, tree, prefetchCache, url, data, kind } = param;\n // The initial cache entry technically includes full data, but it isn't explicitly prefetched -- we just seed the\n // prefetch cache so that we can skip an extra prefetch request later, since we already have the data.\n // if the prefetch corresponds with an interception route, we use the nextUrl to prefix the cache key\n const prefetchCacheKey = data.couldBeIntercepted ? createPrefetchCacheKey(url, kind, nextUrl) : createPrefetchCacheKey(url, kind);\n const prefetchEntry = {\n treeAtTimeOfPrefetch: tree,\n data: Promise.resolve(data),\n kind,\n prefetchTime: Date.now(),\n lastUsedTime: Date.now(),\n staleTime: data.staleTime,\n key: prefetchCacheKey,\n status: _routerreducertypes.PrefetchCacheEntryStatus.fresh,\n url\n };\n prefetchCache.set(prefetchCacheKey, prefetchEntry);\n return prefetchEntry;\n}\n/**\n * Creates a prefetch entry entry and enqueues a fetch request to retrieve the data.\n */ function createLazyPrefetchEntry(param) {\n let { url, kind, tree, nextUrl, prefetchCache } = param;\n const prefetchCacheKey = createPrefetchCacheKey(url, kind);\n // initiates the fetch request for the prefetch and attaches a listener\n // to the promise to update the prefetch cache entry when the promise resolves (if necessary)\n const data = _prefetchreducer.prefetchQueue.enqueue(()=>(0, _fetchserverresponse.fetchServerResponse)(url, {\n flightRouterState: tree,\n nextUrl,\n prefetchKind: kind\n }).then((prefetchResponse)=>{\n // TODO: `fetchServerResponse` should be more tighly coupled to these prefetch cache operations\n // to avoid drift between this cache key prefixing logic\n // (which is currently directly influenced by the server response)\n let newCacheKey;\n if (prefetchResponse.couldBeIntercepted) {\n // Determine if we need to prefix the cache key with the nextUrl\n newCacheKey = prefixExistingPrefetchCacheEntry({\n url,\n existingCacheKey: prefetchCacheKey,\n nextUrl,\n prefetchCache\n });\n }\n // If the prefetch was a cache hit, we want to update the existing cache entry to reflect that it was a full prefetch.\n // This is because we know that a static response will contain the full RSC payload, and can be updated to respect the `static`\n // staleTime.\n if (prefetchResponse.prerendered) {\n const existingCacheEntry = prefetchCache.get(newCacheKey != null ? newCacheKey : prefetchCacheKey);\n if (existingCacheEntry) {\n existingCacheEntry.kind = _routerreducertypes.PrefetchKind.FULL;\n if (prefetchResponse.staleTime !== -1) {\n // This is the stale time that was collected by the server during\n // static generation. Use this in place of the default stale time.\n existingCacheEntry.staleTime = prefetchResponse.staleTime;\n }\n }\n }\n return prefetchResponse;\n }));\n const prefetchEntry = {\n treeAtTimeOfPrefetch: tree,\n data,\n kind,\n prefetchTime: Date.now(),\n lastUsedTime: null,\n staleTime: -1,\n key: prefetchCacheKey,\n status: _routerreducertypes.PrefetchCacheEntryStatus.fresh,\n url\n };\n prefetchCache.set(prefetchCacheKey, prefetchEntry);\n return prefetchEntry;\n}\nfunction prunePrefetchCache(prefetchCache) {\n for (const [href, prefetchCacheEntry] of prefetchCache){\n if (getPrefetchEntryCacheStatus(prefetchCacheEntry) === _routerreducertypes.PrefetchCacheEntryStatus.expired) {\n prefetchCache.delete(href);\n }\n }\n}\nconst DYNAMIC_STALETIME_MS = Number(\"0\") * 1000;\nconst STATIC_STALETIME_MS = Number(\"300\") * 1000;\nfunction getPrefetchEntryCacheStatus(param) {\n let { kind, prefetchTime, lastUsedTime, staleTime } = param;\n if (staleTime !== -1) {\n // `staleTime` is the value sent by the server during static generation.\n // When this is available, it takes precedence over any of the heuristics\n // that follow.\n //\n // TODO: When PPR is enabled, the server will *always* return a stale time\n // when prefetching. We should never use a prefetch entry that hasn't yet\n // received data from the server. So the only two cases should be 1) we use\n // the server-generated stale time 2) the unresolved entry is discarded.\n return Date.now() < prefetchTime + staleTime ? _routerreducertypes.PrefetchCacheEntryStatus.fresh : _routerreducertypes.PrefetchCacheEntryStatus.stale;\n }\n // We will re-use the cache entry data for up to the `dynamic` staletime window.\n if (Date.now() < (lastUsedTime != null ? lastUsedTime : prefetchTime) + DYNAMIC_STALETIME_MS) {\n return lastUsedTime ? _routerreducertypes.PrefetchCacheEntryStatus.reusable : _routerreducertypes.PrefetchCacheEntryStatus.fresh;\n }\n // For \"auto\" prefetching, we'll re-use only the loading boundary for up to `static` staletime window.\n // A stale entry will only re-use the `loading` boundary, not the full data.\n // This will trigger a \"lazy fetch\" for the full data.\n if (kind === _routerreducertypes.PrefetchKind.AUTO) {\n if (Date.now() < prefetchTime + STATIC_STALETIME_MS) {\n return _routerreducertypes.PrefetchCacheEntryStatus.stale;\n }\n }\n // for \"full\" prefetching, we'll re-use the cache entry data for up to `static` staletime window.\n if (kind === _routerreducertypes.PrefetchKind.FULL) {\n if (Date.now() < prefetchTime + STATIC_STALETIME_MS) {\n return _routerreducertypes.PrefetchCacheEntryStatus.reusable;\n }\n }\n return _routerreducertypes.PrefetchCacheEntryStatus.expired;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=prefetch-cache-utils.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcHJlZmV0Y2gtY2FjaGUtdXRpbHMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBNFlhQSxvQkFBb0I7ZUFBcEJBOztJQUdBQyxtQkFBbUI7ZUFBbkJBOztJQW5JR0MsOEJBQThCO2VBQTlCQTs7SUE5R0FDLDZCQUE2QjtlQUE3QkE7O0lBK05BQyxrQkFBa0I7ZUFBbEJBOzs7aURBMVhUO2dEQU1BOzZDQUN1QjtBQUU5QixNQUFNQyxnQ0FBZ0M7QUFVdEM7Ozs7OztDQU1DLEdBQ0QsU0FBU0MsMkJBQ1BDLEdBQVEsRUFDUkMsbUJBQTRCLEVBQzVCQyxNQUFzQjtJQUV0QixnRkFBZ0Y7SUFDaEYsZ0ZBQWdGO0lBQ2hGLGtCQUFrQjtJQUNsQixJQUFJQyxrQkFBa0JILElBQUlJLFFBQVE7SUFFbEMsNEZBQTRGO0lBQzVGLDhEQUE4RDtJQUM5RCxxRkFBcUY7SUFDckYsZ0ZBQWdGO0lBQ2hGLHFEQUFxRDtJQUNyRCxJQUFJSCxxQkFBcUI7UUFDdkIsMEVBQTBFO1FBQzFFLGtGQUFrRjtRQUNsRiw0Q0FBNEM7UUFDNUNFLG1CQUFtQkgsSUFBSUssTUFBTTtJQUMvQjtJQUVBLElBQUlILFFBQVE7UUFDVixPQUFRLEtBQUVBLFNBQVNKLGdDQUFnQ0s7SUFDckQ7SUFFQSxPQUFPQTtBQUNUO0FBRUEsU0FBU0csdUJBQ1BOLEdBQVEsRUFDUk8sSUFBOEIsRUFDOUJDLE9BQXVCO0lBRXZCLE9BQU9ULDJCQUEyQkMsS0FBS08sU0FBU0Usb0JBQUFBLFlBQVksQ0FBQ0MsSUFBSSxFQUFFRjtBQUNyRTtBQUVBLFNBQVNHLHNCQUNQWCxHQUFRLEVBQ1JPLElBQTJDLEVBQzNDQyxPQUFzQixFQUN0QkksYUFBOEMsRUFDOUNDLGFBQXNCO0lBSHRCTixJQUFBQSxTQUFBQSxLQUFBQSxHQUFBQSxPQUFxQkUsb0JBQUFBLFlBQVksQ0FBQ0ss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QUE0RTtJQUM1RSxzREFBc0Q7SUFDdEQsSUFBSTFELFNBQVNFLG9CQUFBQSxZQUFZLENBQUN1RSxJQUFJLEVBQUU7UUFDOUIsSUFBSXBCLEtBQUtDLEdBQUcsS0FBS0YsZUFBZWpFLHFCQUFxQjtZQUNuRCxPQUFPc0Usb0JBQUFBLHdCQUF3QixDQUFDYyxLQUFLO1FBQ3ZDO0lBQ0Y7SUFFQSxpR0FBaUc7SUFDakcsSUFBSXZFLFNBQVNFLG9CQUFBQSxZQUFZLENBQUNDLElBQUksRUFBRTtRQUM5QixJQUFJa0QsS0FBS0MsR0FBRyxLQUFLRixlQUFlakUscUJBQXFCO1lBQ25ELE9BQU9zRSxvQkFBQUEsd0JBQXdCLENBQUNlLFFBQVE7UUFDMUM7SUFDRjtJQUVBLE9BQU9mLG9CQUFBQSx3QkFBd0IsQ0FBQ1UsT0FBTztBQUN6QyIsInNvdXJjZXMiOlsiL2hvbWUvc3JjL2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3ByZWZldGNoLWNhY2hlLXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGZldGNoU2VydmVyUmVzcG9uc2UsXG4gIHR5cGUgRmV0Y2hTZXJ2ZXJSZXNwb25zZVJlc3VsdCxcbn0gZnJvbSAnLi9mZXRjaC1zZXJ2ZXItcmVzcG9uc2UnXG5pbXBvcnQge1xuICBQcmVmZXRjaENhY2hlRW50cnlTdGF0dXMsXG4gIHR5cGUgUHJlZmV0Y2hDYWNoZUVudHJ5LFxuICBQcmVmZXRjaEtpbmQsXG4gIHR5cGUgUmVhZG9ubHlSZWR1Y2VyU3RhdGUsXG59IGZyb20gJy4vcm91dGVyLXJlZHVjZXItdHlwZXMnXG5pbXBvcnQgeyBwcmVmZXRjaFF1ZXVlIH0gZnJvbSAnLi9yZWR1Y2Vycy9wcmVmZXRjaC1yZWR1Y2VyJ1xuXG5jb25zdCBJTlRFUkNFUFRJT05fQ0FDSEVfS0VZX01BUktFUiA9ICclJ1xuXG5leHBvcnQgdHlwZSBBbGlhc2VkUHJlZmV0Y2hDYWNoZUVudHJ5ID0gUHJlZmV0Y2hDYWNoZUVudHJ5ICYge1xuICAvKiogVGhpcyBpcyBhIHNwZWNpYWwgcHJvcGVydHkgdGhhdCBpbmRpY2F0ZXMgYSBwcmVmZXRjaCBlbnRyeSBhc3NvY2lhdGVkIHdpdGggYSBkaWZmZXJlbnQgVVJMXG4gICAqIHdhcyByZXR1cm5lZCByYXRoZXIgdGhhbiB0aGUgcmVxdWVzdGVkIFVSTC4gVGhpcyBzaWduYWxzIHRvIHRoZSByb3V0ZXIgdGhhdCBpdCBzaG91bGQgb25seVxuICAgKiBhcHBseSB0aGUgcGFydCB0aGF0IGRvZXNuJ3QgZGVwZW5kIG9uIHNlYXJjaFBhcmFtcyAoc3BlY2lmaWNhbGx5IHRoZSBsb2FkaW5nIHN0YXRlKS5cbiAgICovXG4gIGFsaWFzZWQ/OiBib29sZWFuXG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNhY2hlIGtleSBmb3IgdGhlIHJvdXRlciBwcmVmZXRjaCBjYWNoZVxuICpcbiAqIEBwYXJhbSB1cmwgLSBUaGUgVVJMIGJlaW5nIG5hdmlnYXRlZCB0b1xuICogQHBhcmFtIG5leHRVcmwgLSBhbiBpbnRlcm5hbCBVUkwsIHByaW1hcmlseSB1c2VkIGZvciBoYW5kbGluZyByZXdyaXRlcy4gRGVmYXVsdHMgdG8gJy8nLlxuICogQHJldHVybiBUaGUgZ2VuZXJhdGVkIHByZWZldGNoIGNhY2hlIGtleS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUHJlZmV0Y2hDYWNoZUtleUltcGwoXG4gIHVybDogVVJMLFxuICBpbmNsdWRlU2VhcmNoUGFyYW1zOiBib29sZWFuLFxuICBwcmVmaXg/OiBzdHJpbmcgfCBudWxsXG4pIHtcbiAgLy8gSW5pdGlhbGx5IHdlIG9ubHkgdXNlIHRoZSBwYXRobmFtZSBhcyB0aGUgY2FjaGUga2V5LiBXZSBkb24ndCB3YW50IHRvIGluY2x1ZGVcbiAgLy8gc2VhcmNoIHBhcmFtcyBzbyB0aGF0IG11bHRpcGxlIFVSTHMgd2l0aCB0aGUgc2FtZSBzZWFyY2ggcGFyYW1ldGVyIGNhbiByZS11c2VcbiAgLy8gbG9hZGluZyBzdGF0ZXMuXG4gIGxldCBwYXRobmFtZUZyb21VcmwgPSB1cmwucGF0aG5hbWVcblxuICAvLyBSU0MgcmVzcG9uc2VzIGNhbiBkaWZmZXIgYmFzZWQgb24gc2VhcmNoIHBhcmFtcywgc3BlY2lmaWNhbGx5IGluIHRoZSBjYXNlIHdoZXJlIHdlIGFyZW4ndFxuICAvLyByZXR1cm5pbmcgYSBwYXJ0aWFsIHJlc3BvbnNlIChpZSB3aXRoIGBQcmVmZXRjaEtpbmQuQVVUT2ApLlxuICAvLyBJbiB0aGUgYXV0byBjYXNlLCBzaW5jZSBsb2FkaW5nLmpzICYgbGF5b3V0LmpzIHdvbid0IGhhdmUgYWNjZXNzIHRvIHNlYXJjaCBwYXJhbXMsXG4gIC8vIHdlIGNhbiBzYWZlbHkgcmUtdXNlIHRoYXQgY2FjaGUgZW50cnkuIEJ1dCBmb3IgZnVsbCBwcmVmZXRjaGVzLCB3ZSBzaG91bGQgbm90XG4gIC8vIHJlLXVzZSB0aGUgY2FjaGUgZW50cnkgYXMgdGhlIHJlc3BvbnNlIG1heSBkaWZmZXIuXG4gIGlmIChpbmNsdWRlU2VhcmNoUGFyYW1zKSB7XG4gICAgLy8gaWYgd2UgaGF2ZSBhIGZ1bGwgcHJlZmV0Y2gsIHdlIGNhbiBpbmNsdWRlIHRoZSBzZWFyY2ggcGFyYW0gaW4gdGhlIGtleSxcbiAgICAvLyBhcyB3ZSdsbCBiZSBnZXR0aW5nIGJhY2sgYSBmdWxsIHJlc3BvbnNlLiBUaGUgc2VydmVyIG1pZ2h0IGhhdmUgcmVhZCB0aGUgc2VhcmNoXG4gICAgLy8gcGFyYW1zIHdoZW4gZ2VuZXJhdGluZyB0aGUgZnVsbCByZXNwb25zZS5cbiAgICBwYXRobmFtZUZyb21VcmwgKz0gdXJsLnNlYXJjaFxuICB9XG5cbiAgaWYgKHByZWZpeCkge1xuICAgIHJldHVybiBgJHtwcmVmaXh9JHtJTlRFUkNFUFRJT05fQ0FDSEVfS0VZX01BUktFUn0ke3BhdGhuYW1lRnJvbVVybH1gXG4gIH1cblxuICByZXR1cm4gcGF0aG5hbWVGcm9tVXJsXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVByZWZldGNoQ2FjaGVLZXkoXG4gIHVybDogVVJMLFxuICBraW5kOiBQcmVmZXRjaEtpbmQgfCB1bmRlZmluZWQsXG4gIG5leHRVcmw/OiBzdHJpbmcgfCBudWxsXG4pIHtcbiAgcmV0dXJuIGNyZWF0ZVByZWZldGNoQ2FjaGVLZXlJbXBsKHVybCwga2luZCA9PT0gUHJlZmV0Y2hLaW5kLkZVTEwsIG5leHRVcmwpXG59XG5cbmZ1bmN0aW9uIGdldEV4aXN0aW5nQ2FjaGVFbnRyeShcbiAgdXJsOiBVUkwsXG4gIGtpbmQ6IFByZWZldGNoS2luZCA9IFByZWZldGNoS2luZC5URU1QT1JBUlksXG4gIG5leHRVcmw6IHN0cmluZyB8IG51bGwsXG4gIHByZWZldGNoQ2FjaGU6IE1hcDxzdHJpbmcsIFByZWZldGNoQ2FjaGVFbnRyeT4sXG4gIGFsbG93QWxpYXNpbmc6IGJvb2xlYW5cbik6IEFsaWFzZWRQcmVmZXRjaENhY2hlRW50cnkgfCB1bmRlZmluZWQge1xuICAvLyBXZSBmaXJzdCBjaGVjayBpZiB0aGVyZSdzIGEgbW9yZSBzcGVjaWZpYyBpbnRlcmNlcHRpb24gcm91dGUgcHJlZmV0Y2ggZW50cnlcbiAgLy8gVGhpcyBpcyBiZWNhdXNlIHdoZW4gd2UgZGV0ZWN0IGEgcHJlZmV0Y2ggdGhhdCBjb3JyZXNwb25kcyB3aXRoIGFuIGludGVyY2VwdGlvbiByb3V0ZSwgd2UgcHJlZml4IGl0IHdpdGggbmV4dFVybCAoc2VlIGBjcmVhdGVQcmVmZXRjaENhY2hlS2V5YClcbiAgLy8gdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggb3RoZXIgcGFnZXMgdGhhdCBtYXkgaGF2ZSB0aGUgc2FtZSBVUkwgYnV0IHJlbmRlciBkaWZmZXJlbnQgdGhpbmdzIGRlcGVuZGluZyBvbiB0aGUgYE5leHQtVVJMYCBoZWFkZXIuXG4gIGZvciAoY29uc3QgbWF5YmVOZXh0VXJsIG9mIFtuZXh0VXJsLCBudWxsXSkge1xuICAgIGNvbnN0IGNhY2hlS2V5V2l0aFBhcmFtcyA9IGNyZWF0ZVByZWZldGNoQ2FjaGVLZXlJbXBsKFxuICAgICAgdXJsLFxuICAgICAgdHJ1ZSxcbiAgICAgIG1heWJlTmV4dFVybFxuICAgIClcbiAgICBjb25zdCBjYWNoZUtleVdpdGhvdXRQYXJhbXMgPSBjcmVhdGVQcmVmZXRjaENhY2hlS2V5SW1wbChcbiAgICAgIHVybCxcbiAgICAgIGZhbHNlLFxuICAgICAgbWF5YmVOZXh0VXJsXG4gICAgKVxuXG4gICAgLy8gRmlyc3QsIHdlIGNoZWNrIGlmIHdlIGhhdmUgYSBjYWNoZSBlbnRyeSB0aGF0IGV4YWN0bHkgbWF0Y2hlcyB0aGUgVVJMXG4gICAgY29uc3QgY2FjaGVLZXlUb1VzZSA9IHVybC5zZWFyY2hcbiAgICAgID8gY2FjaGVLZXlXaXRoUGFyYW1zXG4gICAgICA6IGNhY2hlS2V5V2l0aG91dFBhcmFtc1xuXG4gICAgY29uc3QgZXhpc3RpbmdFbnRyeSA9IHByZWZldGNoQ2FjaGUuZ2V0KGNhY2hlS2V5VG9Vc2UpXG4gICAgaWYgKGV4aXN0aW5nRW50cnkgJiYgYWxsb3dBbGlhc2luZykge1xuICAgICAgLy8gV2Uga25vdyB3ZSdyZSByZXR1cm5pbmcgYW4gYWxpYXNlZCBlbnRyeSB3aGVuIHRoZSBwYXRobmFtZSBtYXRjaGVzIGJ1dCB0aGUgc2VhcmNoIHBhcmFtcyBkb24ndCxcbiAgICAgIGNvbnN0IGlzQWxpYXNlZCA9XG4gICAgICAgIGV4aXN0aW5nRW50cnkudXJsLnBhdGhuYW1lID09PSB1cmwucGF0aG5hbWUgJiZcbiAgICAgICAgZXhpc3RpbmdFbnRyeS51cmwuc2VhcmNoICE9PSB1cmwuc2VhcmNoXG5cbiAgICAgIGlmIChpc0FsaWFzZWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5leGlzdGluZ0VudHJ5LFxuICAgICAgICAgIGFsaWFzZWQ6IHRydWUsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGV4aXN0aW5nRW50cnlcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgcmVxdWVzdCBjb250YWlucyBzZWFyY2ggcGFyYW1zLCBhbmQgd2UncmUgbm90IGRvaW5nIGEgZnVsbCBwcmVmZXRjaCwgd2UgY2FuIHJldHVybiB0aGVcbiAgICAvLyBwYXJhbS1sZXNzIGVudHJ5IGlmIGl0IGV4aXN0cy5cbiAgICAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGNvdmVyZWQgYnkgdGhlIGNoZWNrIGF0IHRoZSBib3R0b20gb2YgdGhpcyBmdW5jdGlvbiwgd2hpY2ggaXRlcmF0ZXMgb3ZlciBjYWNoZSBlbnRyaWVzLFxuICAgIC8vIGJ1dCBsZXRzIHVzIGFycml2ZSB0aGVyZSBxdWlja2VyIGluIHRoZSBwYXJhbS1mdWxsIGNhc2UuXG4gICAgY29uc3QgZW50cnlXaXRob3V0UGFyYW1zID0gcHJlZmV0Y2hDYWNoZS5nZXQoY2FjaGVLZXlXaXRob3V0UGFyYW1zKVxuICAgIGlmIChcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAnZGV2ZWxvcG1lbnQnICYmXG4gICAgICBhbGxvd0FsaWFzaW5nICYmXG4gICAgICB1cmwuc2VhcmNoICYmXG4gICAgICBraW5kICE9PSBQcmVmZXRjaEtpbmQuRlVMTCAmJlxuICAgICAgZW50cnlXaXRob3V0UGFyYW1zICYmXG4gICAgICAvLyBXZSBzaG91bGRuJ3QgcmV0dXJuIHRoZSBhbGlhc2VkIGVudHJ5IGlmIGl0IHdhcyByZWxvY2F0ZWQgdG8gYSBuZXcgY2FjaGUga2V5LlxuICAgICAgLy8gU2luY2UgaXQncyByZXdyaXR0ZW4sIGl0IGNvdWxkIHJlc3BvbmQgd2l0aCBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IGxvYWRpbmcgc3RhdGUuXG4gICAgICAhZW50cnlXaXRob3V0UGFyYW1zLmtleS5pbmNsdWRlcyhJTlRFUkNFUFRJT05fQ0FDSEVfS0VZX01BUktFUilcbiAgICApIHtcbiAgICAgIHJldHVybiB7IC4uLmVudHJ5V2l0aG91dFBhcmFtcywgYWxpYXNlZDogdHJ1ZSB9XG4gICAgfVxuICB9XG5cbiAgLy8gSWYgd2UndmUgZ290dGVuIHRvIHRoaXMgcG9pbnQsIHdlIGRpZG4ndCBmaW5kIGEgc3BlY2lmaWMgY2FjaGUgZW50cnkgdGhhdCBtYXRjaGVkXG4gIC8vIHRoZSByZXF1ZXN0IFVSTC5cbiAgLy8gV2UgYXR0ZW1wdCBhIHBhcnRpYWwgbWF0Y2ggYnkgY2hlY2tpbmcgaWYgdGhlcmUncyBhIGNhY2hlIGVudHJ5IHdpdGggdGhlIHNhbWUgcGF0aG5hbWUuXG4gIC8vIFJlZ2FyZGxlc3Mgb2Ygd2hhdCB3ZSBmaW5kLCBzaW5jZSBpdCBkb2Vzbid0IGNvcnJlc3BvbmQgd2l0aCB0aGUgcmVxdWVzdGVkIFVSTCwgd2UnbGwgbWFyayBpdCBcImFsaWFzZWRcIi5cbiAgLy8gVGhpcyB3aWxsIHNpZ25hbCB0byB0aGUgcm91dGVyIHRoYXQgaXQgc2hvdWxkIG9ubHkgYXBwbHkgdGhlIGxvYWRpbmcgc3RhdGUgb24gdGhlIHByZWZldGNoZWQgZGF0YS5cbiAgaWYgKFxuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAnZGV2ZWxvcG1lbnQnICYmXG4gICAga2luZCAhPT0gUHJlZmV0Y2hLaW5kLkZVTEwgJiZcbiAgICBhbGxvd0FsaWFzaW5nXG4gICkge1xuICAgIGZvciAoY29uc3QgY2FjaGVFbnRyeSBvZiBwcmVmZXRjaENhY2hlLnZhbHVlcygpKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNhY2hlRW50cnkudXJsLnBhdGhuYW1lID09PSB1cmwucGF0aG5hbWUgJiZcbiAgICAgICAgLy8gV2Ugc2hvdWxkbid0IHJldHVybiB0aGUgYWxpYXNlZCBlbnRyeSBpZiBpdCB3YXMgcmVsb2NhdGVkIHRvIGEgbmV3IGNhY2hlIGtleS5cbiAgICAgICAgLy8gU2luY2UgaXQncyByZXdyaXR0ZW4sIGl0IGNvdWxkIHJlc3BvbmQgd2l0aCBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IGxvYWRpbmcgc3RhdGUuXG4gICAgICAgICFjYWNoZUVudHJ5LmtleS5pbmNsdWRlcyhJTlRFUkNFUFRJT05fQ0FDSEVfS0VZX01BUktFUilcbiAgICAgICkge1xuICAgICAgICByZXR1cm4geyAuLi5jYWNoZUVudHJ5LCBhbGlhc2VkOiB0cnVlIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8qKlxuICogUmV0dXJucyBhIHByZWZldGNoIGNhY2hlIGVudHJ5IGlmIG9uZSBleGlzdHMuIE90aGVyd2lzZSBjcmVhdGVzIGEgbmV3IG9uZSBhbmQgZW5xdWV1ZXMgYSBmZXRjaCByZXF1ZXN0XG4gKiB0byByZXRyaWV2ZSB0aGUgcHJlZmV0Y2ggZGF0YSBmcm9tIHRoZSBzZXJ2ZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRPckNyZWF0ZVByZWZldGNoQ2FjaGVFbnRyeSh7XG4gIHVybCxcbiAgbmV4dFVybCxcbiAgdHJlZSxcbiAgcHJlZmV0Y2hDYWNoZSxcbiAga2luZCxcbiAgYWxsb3dBbGlhc2luZyA9IHRydWUsXG59OiBQaWNrPFJlYWRvbmx5UmVkdWNlclN0YXRlLCAnbmV4dFVybCcgfCAncHJlZmV0Y2hDYWNoZScgfCAndHJlZSc+ICYge1xuICB1cmw6IFVSTFxuICBraW5kPzogUHJlZmV0Y2hLaW5kXG4gIGFsbG93QWxpYXNpbmc6IGJvb2xlYW5cbn0pOiBBbGlhc2VkUHJlZmV0Y2hDYWNoZUVudHJ5IHtcbiAgY29uc3QgZXhpc3RpbmdDYWNoZUVudHJ5ID0gZ2V0RXhpc3RpbmdDYWNoZUVudHJ5KFxuICAgIHVybCxcbiAgICBraW5kLFxuICAgIG5leHRVcmwsXG4gICAgcHJlZmV0Y2hDYWNoZSxcbiAgICBhbGxvd0FsaWFzaW5nXG4gIClcblxuICBpZiAoZXhpc3RpbmdDYWNoZUVudHJ5KSB7XG4gICAgLy8gR3JhYiB0aGUgbGF0ZXN0IHN0YXR1cyBvZiB0aGUgY2FjaGUgZW50cnkgYW5kIHVwZGF0ZSBpdFxuICAgIGV4aXN0aW5nQ2FjaGVFbnRyeS5zdGF0dXMgPSBnZXRQcmVmZXRjaEVudHJ5Q2FjaGVTdGF0dXMoZXhpc3RpbmdDYWNoZUVudHJ5KVxuXG4gICAgLy8gd2hlbiBga2luZGAgaXMgcHJvdmlkZWQsIGFuIGV4cGxpY2l0IHByZWZldGNoIHdhcyByZXF1ZXN0ZWQuXG4gICAgLy8gaWYgdGhlIHJlcXVlc3RlZCBwcmVmZXRjaCBpcyBcImZ1bGxcIiBhbmQgdGhlIGN1cnJlbnQgY2FjaGUgZW50cnkgd2Fzbid0LCB3ZSB3YW50IHRvIHJlLXByZWZldGNoIHdpdGggdGhlIG5ldyBpbnRlbnRcbiAgICBjb25zdCBzd2l0Y2hlZFRvRnVsbFByZWZldGNoID1cbiAgICAgIGV4aXN0aW5nQ2FjaGVFbnRyeS5raW5kICE9PSBQcmVmZXRjaEtpbmQuRlVMTCAmJlxuICAgICAga2luZCA9PT0gUHJlZmV0Y2hLaW5kLkZVTExcblxuICAgIGlmIChzd2l0Y2hlZFRvRnVsbFByZWZldGNoKSB7XG4gICAgICAvLyBJZiB3ZSBzd2l0Y2hlZCB0byBhIGZ1bGwgcHJlZmV0Y2gsIHZhbGlkYXRlIHRoYXQgdGhlIGV4aXN0aW5nIGNhY2hlIGVudHJ5IGNvbnRhaW5lZCBwYXJ0aWFsIGRhdGEuXG4gICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGNhY2hlIGVudHJ5IHdhcyBzZWVkZWQgd2l0aCBmdWxsIGRhdGEgYnV0IGhhcyBhIGNhY2hlIHR5cGUgb2YgXCJhdXRvXCIgKGllIHdoZW4gY2FjaGUgZW50cmllc1xuICAgICAgLy8gYXJlIHNlZWRlZCBidXQgd2l0aG91dCBhIHByZWZldGNoIGludGVudClcbiAgICAgIGV4aXN0aW5nQ2FjaGVFbnRyeS5kYXRhLnRoZW4oKHByZWZldGNoUmVzcG9uc2UpID0+IHtcbiAgICAgICAgY29uc3QgaXNGdWxsUHJlZmV0Y2ggPVxuICAgICAgICAgIEFycmF5LmlzQXJyYXkocHJlZmV0Y2hSZXNwb25zZS5mbGlnaHREYXRhKSAmJlxuICAgICAgICAgIHByZWZldGNoUmVzcG9uc2UuZmxpZ2h0RGF0YS5zb21lKChmbGlnaHREYXRhKSA9PiB7XG4gICAgICAgICAgICAvLyBJZiB3ZSBzdGFydGVkIHJlbmRlcmluZyBmcm9tIHRoZSByb290IGFuZCB3ZSByZXR1cm5lZCBSU0MgZGF0YSAoc2VlZERhdGEpLCB3ZSBhbHJlYWR5IGhhZCBhIGZ1bGwgcHJlZmV0Y2guXG4gICAgICAgICAgICByZXR1cm4gZmxpZ2h0RGF0YS5pc1Jvb3RSZW5kZXIgJiYgZmxpZ2h0RGF0YS5zZWVkRGF0YSAhPT0gbnVsbFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgaWYgKCFpc0Z1bGxQcmVmZXRjaCkge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5UHJlZmV0Y2hFbnRyeSh7XG4gICAgICAgICAgICB0cmVlLFxuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgbmV4dFVybCxcbiAgICAgICAgICAgIHByZWZldGNoQ2FjaGUsXG4gICAgICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgZ2V0IGFuIGV4cGxpY2l0IHByZWZldGNoIGtpbmQsIHdlIHdhbnQgdG8gc2V0IGEgdGVtcG9yYXJ5IGtpbmRcbiAgICAgICAgICAgIC8vIHJhdGhlciB0aGFuIGFzc3VtaW5nIHRoZSBzYW1lIGludGVudCBhcyB0aGUgcHJldmlvdXMgZW50cnksIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBob3cgd2VcbiAgICAgICAgICAgIC8vIGxhemlseSBjcmVhdGUgcHJlZmV0Y2ggZW50cmllcyB3aGVuIGludGVudCBpcyBsZWZ0IHVuc3BlY2lmaWVkLlxuICAgICAgICAgICAga2luZDoga2luZCA/PyBQcmVmZXRjaEtpbmQuVEVNUE9SQVJZLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGV4aXN0aW5nIGNhY2hlIGVudHJ5IHdhcyBtYXJrZWQgYXMgdGVtcG9yYXJ5LCBpdCBtZWFucyBpdCB3YXMgbGF6aWx5IGNyZWF0ZWQgd2hlbiBhdHRlbXB0aW5nIHRvIGdldCBhbiBlbnRyeSxcbiAgICAvLyB3aGVyZSB3ZSBkaWRuJ3QgaGF2ZSB0aGUgcHJlZmV0Y2ggaW50ZW50LiBOb3cgdGhhdCB3ZSBoYXZlIHRoZSBpbnRlbnQgKGluIGBraW5kYCksIHdlIHdhbnQgdG8gdXBkYXRlIHRoZSBlbnRyeSB0byB0aGUgbW9yZSBhY2N1cmF0ZSBraW5kLlxuICAgIGlmIChraW5kICYmIGV4aXN0aW5nQ2FjaGVFbnRyeS5raW5kID09PSBQcmVmZXRjaEtpbmQuVEVNUE9SQVJZKSB7XG4gICAgICBleGlzdGluZ0NhY2hlRW50cnkua2luZCA9IGtpbmRcbiAgICB9XG5cbiAgICAvLyBXZSd2ZSBkZXRlcm1pbmVkIHRoYXQgdGhlIGV4aXN0aW5nIGVudHJ5IHdlIGZvdW5kIGlzIHN0aWxsIHZhbGlkLCBzbyB3ZSByZXR1cm4gaXQuXG4gICAgcmV0dXJuIGV4aXN0aW5nQ2FjaGVFbnRyeVxuICB9XG5cbiAgLy8gSWYgd2UgZGlkbid0IHJldHVybiBhbiBlbnRyeSwgY3JlYXRlIGEgbmV3IG9uZS5cbiAgcmV0dXJuIGNyZWF0ZUxhenlQcmVmZXRjaEVudHJ5KHtcbiAgICB0cmVlLFxuICAgIHVybCxcbiAgICBuZXh0VXJsLFxuICAgIHByZWZldGNoQ2FjaGUsXG4gICAga2luZDoga2luZCB8fCBQcmVmZXRjaEtpbmQuVEVNUE9SQVJZLFxuICB9KVxufVxuXG4vKlxuICogVXNlZCB0byB0YWtlIGFuIGV4aXN0aW5nIGNhY2hlIGVudHJ5IGFuZCBwcmVmaXggaXQgd2l0aCB0aGUgbmV4dFVybCwgaWYgaXQgZXhpc3RzLlxuICogVGhpcyBlbnN1cmVzIHRoYXQgd2UgZG9uJ3QgaGF2ZSBjb25mbGljdGluZyBjYWNoZSBlbnRyaWVzIGZvciB0aGUgc2FtZSBVUkwgKGFzIGlzIHRoZSBjYXNlIHdpdGggcm91dGUgaW50ZXJjZXB0aW9uKS5cbiAqL1xuZnVuY3Rpb24gcHJlZml4RXhpc3RpbmdQcmVmZXRjaENhY2hlRW50cnkoe1xuICB1cmwsXG4gIG5leHRVcmwsXG4gIHByZWZldGNoQ2FjaGUsXG4gIGV4aXN0aW5nQ2FjaGVLZXksXG59OiBQaWNrPFJlYWRvbmx5UmVkdWNlclN0YXRlLCAnbmV4dFVybCcgfCAncHJlZmV0Y2hDYWNoZSc+ICYge1xuICB1cmw6IFVSTFxuICBleGlzdGluZ0NhY2hlS2V5OiBzdHJpbmdcbn0pIHtcbiAgY29uc3QgZXhpc3RpbmdDYWNoZUVudHJ5ID0gcHJlZmV0Y2hDYWNoZS5nZXQoZXhpc3RpbmdDYWNoZUtleSlcbiAgaWYgKCFleGlzdGluZ0NhY2hlRW50cnkpIHtcbiAgICAvLyBuby1vcCAtLSB0aGVyZSB3YXNuJ3QgYW4gZW50cnkgdG8gbW92ZVxuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgbmV3Q2FjaGVLZXkgPSBjcmVhdGVQcmVmZXRjaENhY2hlS2V5KFxuICAgIHVybCxcbiAgICBleGlzdGluZ0NhY2hlRW50cnkua2luZCxcbiAgICBuZXh0VXJsXG4gIClcbiAgcHJlZmV0Y2hDYWNoZS5zZXQobmV3Q2FjaGVLZXksIHsgLi4uZXhpc3RpbmdDYWNoZUVudHJ5LCBrZXk6IG5ld0NhY2hlS2V5IH0pXG4gIHByZWZldGNoQ2FjaGUuZGVsZXRlKGV4aXN0aW5nQ2FjaGVLZXkpXG5cbiAgcmV0dXJuIG5ld0NhY2hlS2V5XG59XG5cbi8qKlxuICogVXNlIHRvIHNlZWQgdGhlIHByZWZldGNoIGNhY2hlIHdpdGggZGF0YSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gZmV0Y2hlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNlZWRlZFByZWZldGNoQ2FjaGVFbnRyeSh7XG4gIG5leHRVcmwsXG4gIHRyZWUsXG4gIHByZWZldGNoQ2FjaGUsXG4gIHVybCxcbiAgZGF0YSxcbiAga2luZCxcbn06IFBpY2s8UmVhZG9ubHlSZWR1Y2VyU3RhdGUsICduZXh0VXJsJyB8ICd0cmVlJyB8ICdwcmVmZXRjaENhY2hlJz4gJiB7XG4gIHVybDogVVJMXG4gIGRhdGE6IEZldGNoU2VydmVyUmVzcG9uc2VSZXN1bHRcbiAga2luZDogUHJlZmV0Y2hLaW5kXG59KSB7XG4gIC8vIFRoZSBpbml0aWFsIGNhY2hlIGVudHJ5IHRlY2huaWNhbGx5IGluY2x1ZGVzIGZ1bGwgZGF0YSwgYnV0IGl0IGlzbid0IGV4cGxpY2l0bHkgcHJlZmV0Y2hlZCAtLSB3ZSBqdXN0IHNlZWQgdGhlXG4gIC8vIHByZWZldGNoIGNhY2hlIHNvIHRoYXQgd2UgY2FuIHNraXAgYW4gZXh0cmEgcHJlZmV0Y2ggcmVxdWVzdCBsYXRlciwgc2luY2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSBkYXRhLlxuICAvLyBpZiB0aGUgcHJlZmV0Y2ggY29ycmVzcG9uZHMgd2l0aCBhbiBpbnRlcmNlcHRpb24gcm91dGUsIHdlIHVzZSB0aGUgbmV4dFVybCB0byBwcmVmaXggdGhlIGNhY2hlIGtleVxuICBjb25zdCBwcmVmZXRjaENhY2hlS2V5ID0gZGF0YS5jb3VsZEJlSW50ZXJjZXB0ZWRcbiAgICA/IGNyZWF0ZVByZWZldGNoQ2FjaGVLZXkodXJsLCBraW5kLCBuZXh0VXJsKVxuICAgIDogY3JlYXRlUHJlZmV0Y2hDYWNoZUtleSh1cmwsIGtpbmQpXG5cbiAgY29uc3QgcHJlZmV0Y2hFbnRyeSA9IHtcbiAgICB0cmVlQXRUaW1lT2ZQcmVmZXRjaDogdHJlZSxcbiAgICBkYXRhOiBQcm9taXNlLnJlc29sdmUoZGF0YSksXG4gICAga2luZCxcbiAgICBwcmVmZXRjaFRpbWU6IERhdGUubm93KCksXG4gICAgbGFzdFVzZWRUaW1lOiBEYXRlLm5vdygpLFxuICAgIHN0YWxlVGltZTogZGF0YS5zdGFsZVRpbWUsXG4gICAga2V5OiBwcmVmZXRjaENhY2hlS2V5LFxuICAgIHN0YXR1czogUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzLmZyZXNoLFxuICAgIHVybCxcbiAgfSBzYXRpc2ZpZXMgUHJlZmV0Y2hDYWNoZUVudHJ5XG5cbiAgcHJlZmV0Y2hDYWNoZS5zZXQocHJlZmV0Y2hDYWNoZUtleSwgcHJlZmV0Y2hFbnRyeSlcblxuICByZXR1cm4gcHJlZmV0Y2hFbnRyeVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBwcmVmZXRjaCBlbnRyeSBlbnRyeSBhbmQgZW5xdWV1ZXMgYSBmZXRjaCByZXF1ZXN0IHRvIHJldHJpZXZlIHRoZSBkYXRhLlxuICovXG5mdW5jdGlvbiBjcmVhdGVMYXp5UHJlZmV0Y2hFbnRyeSh7XG4gIHVybCxcbiAga2luZCxcbiAgdHJlZSxcbiAgbmV4dFVybCxcbiAgcHJlZmV0Y2hDYWNoZSxcbn06IFBpY2s8UmVhZG9ubHlSZWR1Y2VyU3RhdGUsICduZXh0VXJsJyB8ICd0cmVlJyB8ICdwcmVmZXRjaENhY2hlJz4gJiB7XG4gIHVybDogVVJMXG4gIGtpbmQ6IFByZWZldGNoS2luZFxufSk6IFByZWZldGNoQ2FjaGVFbnRyeSB7XG4gIGNvbnN0IHByZWZldGNoQ2FjaGVLZXkgPSBjcmVhdGVQcmVmZXRjaENhY2hlS2V5KHVybCwga2luZClcblxuICAvLyBpbml0aWF0ZXMgdGhlIGZldGNoIHJlcXVlc3QgZm9yIHRoZSBwcmVmZXRjaCBhbmQgYXR0YWNoZXMgYSBsaXN0ZW5lclxuICAvLyB0byB0aGUgcHJvbWlzZSB0byB1cGRhdGUgdGhlIHByZWZldGNoIGNhY2hlIGVudHJ5IHdoZW4gdGhlIHByb21pc2UgcmVzb2x2ZXMgKGlmIG5lY2Vzc2FyeSlcbiAgY29uc3QgZGF0YSA9IHByZWZldGNoUXVldWUuZW5xdWV1ZSgoKSA9PlxuICAgIGZldGNoU2VydmVyUmVzcG9uc2UodXJsLCB7XG4gICAgICBmbGlnaHRSb3V0ZXJTdGF0ZTogdHJlZSxcbiAgICAgIG5leHRVcmwsXG4gICAgICBwcmVmZXRjaEtpbmQ6IGtpbmQsXG4gICAgfSkudGhlbigocHJlZmV0Y2hSZXNwb25zZSkgPT4ge1xuICAgICAgLy8gVE9ETzogYGZldGNoU2VydmVyUmVzcG9uc2VgIHNob3VsZCBiZSBtb3JlIHRpZ2hseSBjb3VwbGVkIHRvIHRoZXNlIHByZWZldGNoIGNhY2hlIG9wZXJhdGlvbnNcbiAgICAgIC8vIHRvIGF2b2lkIGRyaWZ0IGJldHdlZW4gdGhpcyBjYWNoZSBrZXkgcHJlZml4aW5nIGxvZ2ljXG4gICAgICAvLyAod2hpY2ggaXMgY3VycmVudGx5IGRpcmVjdGx5IGluZmx1ZW5jZWQgYnkgdGhlIHNlcnZlciByZXNwb25zZSlcbiAgICAgIGxldCBuZXdDYWNoZUtleVxuXG4gICAgICBpZiAocHJlZmV0Y2hSZXNwb25zZS5jb3VsZEJlSW50ZXJjZXB0ZWQpIHtcbiAgICAgICAgLy8gRGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gcHJlZml4IHRoZSBjYWNoZSBrZXkgd2l0aCB0aGUgbmV4dFVybFxuICAgICAgICBuZXdDYWNoZUtleSA9IHByZWZpeEV4aXN0aW5nUHJlZmV0Y2hDYWNoZUVudHJ5KHtcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgZXhpc3RpbmdDYWNoZUtleTogcHJlZmV0Y2hDYWNoZUtleSxcbiAgICAgICAgICBuZXh0VXJsLFxuICAgICAgICAgIHByZWZldGNoQ2FjaGUsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSBwcmVmZXRjaCB3YXMgYSBjYWNoZSBoaXQsIHdlIHdhbnQgdG8gdXBkYXRlIHRoZSBleGlzdGluZyBjYWNoZSBlbnRyeSB0byByZWZsZWN0IHRoYXQgaXQgd2FzIGEgZnVsbCBwcmVmZXRjaC5cbiAgICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB3ZSBrbm93IHRoYXQgYSBzdGF0aWMgcmVzcG9uc2Ugd2lsbCBjb250YWluIHRoZSBmdWxsIFJTQyBwYXlsb2FkLCBhbmQgY2FuIGJlIHVwZGF0ZWQgdG8gcmVzcGVjdCB0aGUgYHN0YXRpY2BcbiAgICAgIC8vIHN0YWxlVGltZS5cbiAgICAgIGlmIChwcmVmZXRjaFJlc3BvbnNlLnByZXJlbmRlcmVkKSB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nQ2FjaGVFbnRyeSA9IHByZWZldGNoQ2FjaGUuZ2V0KFxuICAgICAgICAgIC8vIGlmIHdlIHByZWZpeGVkIHRoZSBjYWNoZSBrZXkgZHVlIHRvIHJvdXRlIGludGVyY2VwdGlvbiwgd2Ugd2FudCB0byB1c2UgdGhlIG5ldyBrZXkuIE90aGVyd2lzZSB3ZSB1c2UgdGhlIG9yaWdpbmFsIGtleVxuICAgICAgICAgIG5ld0NhY2hlS2V5ID8/IHByZWZldGNoQ2FjaGVLZXlcbiAgICAgICAgKVxuICAgICAgICBpZiAoZXhpc3RpbmdDYWNoZUVudHJ5KSB7XG4gICAgICAgICAgZXhpc3RpbmdDYWNoZUVudHJ5LmtpbmQgPSBQcmVmZXRjaEtpbmQuRlVMTFxuICAgICAgICAgIGlmIChwcmVmZXRjaFJlc3BvbnNlLnN0YWxlVGltZSAhPT0gLTEpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHN0YWxlIHRpbWUgdGhhdCB3YXMgY29sbGVjdGVkIGJ5IHRoZSBzZXJ2ZXIgZHVyaW5nXG4gICAgICAgICAgICAvLyBzdGF0aWMgZ2VuZXJhdGlvbi4gVXNlIHRoaXMgaW4gcGxhY2Ugb2YgdGhlIGRlZmF1bHQgc3RhbGUgdGltZS5cbiAgICAgICAgICAgIGV4aXN0aW5nQ2FjaGVFbnRyeS5zdGFsZVRpbWUgPSBwcmVmZXRjaFJlc3BvbnNlLnN0YWxlVGltZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJlZmV0Y2hSZXNwb25zZVxuICAgIH0pXG4gIClcblxuICBjb25zdCBwcmVmZXRjaEVudHJ5ID0ge1xuICAgIHRyZWVBdFRpbWVPZlByZWZldGNoOiB0cmVlLFxuICAgIGRhdGEsXG4gICAga2luZCxcbiAgICBwcmVmZXRjaFRpbWU6IERhdGUubm93KCksXG4gICAgbGFzdFVzZWRUaW1lOiBudWxsLFxuICAgIHN0YWxlVGltZTogLTEsXG4gICAga2V5OiBwcmVmZXRjaENhY2hlS2V5LFxuICAgIHN0YXR1czogUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzLmZyZXNoLFxuICAgIHVybCxcbiAgfVxuXG4gIHByZWZldGNoQ2FjaGUuc2V0KHByZWZldGNoQ2FjaGVLZXksIHByZWZldGNoRW50cnkpXG5cbiAgcmV0dXJuIHByZWZldGNoRW50cnlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBydW5lUHJlZmV0Y2hDYWNoZShcbiAgcHJlZmV0Y2hDYWNoZTogUmVhZG9ubHlSZWR1Y2VyU3RhdGVbJ3ByZWZldGNoQ2FjaGUnXVxuKSB7XG4gIGZvciAoY29uc3QgW2hyZWYsIHByZWZldGNoQ2FjaGVFbnRyeV0gb2YgcHJlZmV0Y2hDYWNoZSkge1xuICAgIGlmIChcbiAgICAgIGdldFByZWZldGNoRW50cnlDYWNoZVN0YXR1cyhwcmVmZXRjaENhY2hlRW50cnkpID09PVxuICAgICAgUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzLmV4cGlyZWRcbiAgICApIHtcbiAgICAgIHByZWZldGNoQ2FjaGUuZGVsZXRlKGhyZWYpXG4gICAgfVxuICB9XG59XG5cbi8vIFRoZXNlIHZhbHVlcyBhcmUgc2V0IGJ5IGBkZWZpbmUtZW52LXBsdWdpbmAgKGJhc2VkIG9uIGBuZXh0Q29uZmlnLmV4cGVyaW1lbnRhbC5zdGFsZVRpbWVzYClcbi8vIGFuZCBkZWZhdWx0IHRvIDUgbWludXRlcyAoc3RhdGljKSAvIDAgc2Vjb25kcyAoZHluYW1pYylcbmV4cG9ydCBjb25zdCBEWU5BTUlDX1NUQUxFVElNRV9NUyA9XG4gIE51bWJlcihwcm9jZXNzLmVudi5fX05FWFRfQ0xJRU5UX1JPVVRFUl9EWU5BTUlDX1NUQUxFVElNRSkgKiAxMDAwXG5cbmV4cG9ydCBjb25zdCBTVEFUSUNfU1RBTEVUSU1FX01TID1cbiAgTnVtYmVyKHByb2Nlc3MuZW52Ll9fTkVYVF9DTElFTlRfUk9VVEVSX1NUQVRJQ19TVEFMRVRJTUUpICogMTAwMFxuXG5mdW5jdGlvbiBnZXRQcmVmZXRjaEVudHJ5Q2FjaGVTdGF0dXMoe1xuICBraW5kLFxuICBwcmVmZXRjaFRpbWUsXG4gIGxhc3RVc2VkVGltZSxcbiAgc3RhbGVUaW1lLFxufTogUHJlZmV0Y2hDYWNoZUVudHJ5KTogUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzIHtcbiAgaWYgKHN0YWxlVGltZSAhPT0gLTEpIHtcbiAgICAvLyBgc3RhbGVUaW1lYCBpcyB0aGUgdmFsdWUgc2VudCBieSB0aGUgc2VydmVyIGR1cmluZyBzdGF0aWMgZ2VuZXJhdGlvbi5cbiAgICAvLyBXaGVuIHRoaXMgaXMgYXZhaWxhYmxlLCBpdCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgYW55IG9mIHRoZSBoZXVyaXN0aWNzXG4gICAgLy8gdGhhdCBmb2xsb3cuXG4gICAgLy9cbiAgICAvLyBUT0RPOiBXaGVuIFBQUiBpcyBlbmFibGVkLCB0aGUgc2VydmVyIHdpbGwgKmFsd2F5cyogcmV0dXJuIGEgc3RhbGUgdGltZVxuICAgIC8vIHdoZW4gcHJlZmV0Y2hpbmcuIFdlIHNob3VsZCBuZXZlciB1c2UgYSBwcmVmZXRjaCBlbnRyeSB0aGF0IGhhc24ndCB5ZXRcbiAgICAvLyByZWNlaXZlZCBkYXRhIGZyb20gdGhlIHNlcnZlci4gU28gdGhlIG9ubHkgdHdvIGNhc2VzIHNob3VsZCBiZSAxKSB3ZSB1c2VcbiAgICAvLyB0aGUgc2VydmVyLWdlbmVyYXRlZCBzdGFsZSB0aW1lIDIpIHRoZSB1bnJlc29sdmVkIGVudHJ5IGlzIGRpc2NhcmRlZC5cbiAgICByZXR1cm4gRGF0ZS5ub3coKSA8IHByZWZldGNoVGltZSArIHN0YWxlVGltZVxuICAgICAgPyBQcmVmZXRjaENhY2hlRW50cnlTdGF0dXMuZnJlc2hcbiAgICAgIDogUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzLnN0YWxlXG4gIH1cblxuICAvLyBXZSB3aWxsIHJlLXVzZSB0aGUgY2FjaGUgZW50cnkgZGF0YSBmb3IgdXAgdG8gdGhlIGBkeW5hbWljYCBzdGFsZXRpbWUgd2luZG93LlxuICBpZiAoRGF0ZS5ub3coKSA8IChsYXN0VXNlZFRpbWUgPz8gcHJlZmV0Y2hUaW1lKSArIERZTkFNSUNfU1RBTEVUSU1FX01TKSB7XG4gICAgcmV0dXJuIGxhc3RVc2VkVGltZVxuICAgICAgPyBQcmVmZXRjaENhY2hlRW50cnlTdGF0dXMucmV1c2FibGVcbiAgICAgIDogUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzLmZyZXNoXG4gIH1cblxuICAvLyBGb3IgXCJhdXRvXCIgcHJlZmV0Y2hpbmcsIHdlJ2xsIHJlLXVzZSBvbmx5IHRoZSBsb2FkaW5nIGJvdW5kYXJ5IGZvciB1cCB0byBgc3RhdGljYCBzdGFsZXRpbWUgd2luZG93LlxuICAvLyBBIHN0YWxlIGVudHJ5IHdpbGwgb25seSByZS11c2UgdGhlIGBsb2FkaW5nYCBib3VuZGFyeSwgbm90IHRoZSBmdWxsIGRhdGEuXG4gIC8vIFRoaXMgd2lsbCB0cmlnZ2VyIGEgXCJsYXp5IGZldGNoXCIgZm9yIHRoZSBmdWxsIGRhdGEuXG4gIGlmIChraW5kID09PSBQcmVmZXRjaEtpbmQuQVVUTykge1xuICAgIGlmIChEYXRlLm5vdygpIDwgcHJlZmV0Y2hUaW1lICsgU1RBVElDX1NUQUxFVElNRV9NUykge1xuICAgICAgcmV0dXJuIFByZWZldGNoQ2FjaGVFbnRyeVN0YXR1cy5zdGFsZVxuICAgIH1cbiAgfVxuXG4gIC8vIGZvciBcImZ1bGxcIiBwcmVmZXRjaGluZywgd2UnbGwgcmUtdXNlIHRoZSBjYWNoZSBlbnRyeSBkYXRhIGZvciB1cCB0byBgc3RhdGljYCBzdGFsZXRpbWUgd2luZG93LlxuICBpZiAoa2luZCA9PT0gUHJlZmV0Y2hLaW5kLkZVTEwpIHtcbiAgICBpZiAoRGF0ZS5ub3coKSA8IHByZWZldGNoVGltZSArIFNUQVRJQ19TVEFMRVRJTUVfTVMpIHtcbiAgICAgIHJldHVybiBQcmVmZXRjaENhY2hlRW50cnlTdGF0dXMucmV1c2FibGVcbiAgICB9XG4gIH1cblxuICByZXR1cm4gUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzLmV4cGlyZWRcbn1cbiJdLCJuYW1lcyI6WyJEWU5BTUlDX1NUQUxFVElNRV9NUyIsIlNUQVRJQ19TVEFMRVRJTUVfTVMiLCJjcmVhdGVTZWVkZWRQcmVmZXRjaENhY2hlRW50cnkiLCJnZXRPckNyZWF0ZVByZWZldGNoQ2FjaGVFbnRyeSIsInBydW5lUHJlZmV0Y2hDYWNoZSIsIklOVEVSQ0VQVElPTl9DQUNIRV9LRVlfTUFSS0VSIiwiY3JlYXRlUHJlZmV0Y2hDYWNoZUtleUltcGwiLCJ1cmwiLCJpbmNsdWRlU2VhcmNoUGFyYW1zIiwicHJlZml4IiwicGF0aG5hbWVGcm9tVXJsIiwicGF0aG5hbWUiLCJzZWFyY2giLCJjcmVhdGVQcmVmZXRjaENhY2hlS2V5Iiwia2luZCIsIm5leHRVcmwiLCJQcmVmZXRjaEtpbmQiLCJGVUxMIiwiZ2V0RXhpc3RpbmdDYWNoZUVudHJ5IiwicHJlZmV0Y2hDYWNoZSIsImFsbG93QWxpYXNpbmciLCJURU1QT1JBUlkiLCJtYXliZU5leHRVcmwiLCJjYWNoZUtleVdpdGhQYXJhbXMiLCJjYWNoZUtleVdpdGhvdXRQYXJhbXMiLCJjYWNoZUtleVRvVXNlIiwiZXhpc3RpbmdFbnRyeSIsImdldCIsImlzQWxpYXNlZCIsImFsaWFzZWQiLCJlbnRyeVdpdGhvdXRQYXJhbXMiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJrZXkiLCJpbmNsdWRlcyIsImNhY2hlRW50cnkiLCJ2YWx1ZXMiLCJ1bmRlZmluZWQiLCJ0cmVlIiwiZXhpc3RpbmdDYWNoZUVudHJ5Iiwic3RhdHVzIiwiZ2V0UHJlZmV0Y2hFbnRyeUNhY2hlU3RhdHVzIiwic3dpdGNoZWRUb0Z1bGxQcmVmZXRjaCIsImRhdGEiLCJ0aGVuIiwicHJlZmV0Y2hSZXNwb25zZSIsImlzRnVsbFByZWZldGNoIiwiQXJyYXkiLCJpc0FycmF5IiwiZmxpZ2h0RGF0YSIsInNvbWUiLCJpc1Jvb3RSZW5kZXIiLCJzZWVkRGF0YSIsImNyZWF0ZUxhenlQcmVmZXRjaEVudHJ5IiwicHJlZml4RXhpc3RpbmdQcmVmZXRjaENhY2hlRW50cnkiLCJleGlzdGluZ0NhY2hlS2V5IiwibmV3Q2FjaGVLZXkiLCJzZXQiLCJkZWxldGUiLCJwcmVmZXRjaENhY2hlS2V5IiwiY291bGRCZUludGVyY2VwdGVkIiwicHJlZmV0Y2hFbnRyeSIsInRyZWVBdFRpbWVPZlByZWZldGNoIiwiUHJvbWlzZSIsInJlc29sdmUiLCJwcmVmZXRjaFRpbWUiLCJEYXRlIiwibm93IiwibGFzdFVzZWRUaW1lIiwic3RhbGVUaW1lIiwiUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzIiwiZnJlc2giLCJwcmVmZXRjaFF1ZXVlIiwiZW5xdWV1ZSIsImZldGNoU2VydmVyUmVzcG9uc2UiLCJmbGlnaHRSb3V0ZXJTdGF0ZSIsInByZWZldGNoS2luZCIsInByZXJlbmRlcmVkIiwiaHJlZiIsInByZWZldGNoQ2FjaGVFbnRyeSIsImV4cGlyZWQiLCJOdW1iZXIiLCJfX05FWFRfQ0xJRU5UX1JPVVRFUl9EWU5BTUlDX1NUQUxFVElNRSIsIl9fTkVYVF9DTElFTlRfUk9VVEVSX1NUQVRJQ19TVEFMRVRJTUUiLCJzdGFsZSIsInJldXNhYmxlIiwiQVVUTyJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/prefetch-cache-utils.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/find-head-in-cache.js":
|
||
/*!************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/router-reducer/reducers/find-head-in-cache.js ***!
|
||
\************************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"findHeadInCache\", ({\n enumerable: true,\n get: function() {\n return findHeadInCache;\n }\n}));\nconst _segment = __webpack_require__(/*! ../../../../shared/lib/segment */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/segment.js\");\nconst _createroutercachekey = __webpack_require__(/*! ../create-router-cache-key */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\");\nfunction findHeadInCache(cache, parallelRoutes) {\n return findHeadInCacheImpl(cache, parallelRoutes, '');\n}\nfunction findHeadInCacheImpl(cache, parallelRoutes, keyPrefix) {\n const isLastItem = Object.keys(parallelRoutes).length === 0;\n if (isLastItem) {\n // Returns the entire Cache Node of the segment whose head we will render.\n return [\n cache,\n keyPrefix\n ];\n }\n // First try the 'children' parallel route if it exists\n // when starting from the \"root\", this corresponds with the main page component\n const parallelRoutesKeys = Object.keys(parallelRoutes).filter((key)=>key !== 'children');\n // if we are at the root, we need to check the children slot first\n if ('children' in parallelRoutes) {\n parallelRoutesKeys.unshift('children');\n }\n for (const key of parallelRoutesKeys){\n const [segment, childParallelRoutes] = parallelRoutes[key];\n // If the parallel is not matched and using the default segment,\n // skip searching the head from it.\n if (segment === _segment.DEFAULT_SEGMENT_KEY) {\n continue;\n }\n const childSegmentMap = cache.parallelRoutes.get(key);\n if (!childSegmentMap) {\n continue;\n }\n const cacheKey = (0, _createroutercachekey.createRouterCacheKey)(segment);\n const cacheNode = childSegmentMap.get(cacheKey);\n if (!cacheNode) {\n continue;\n }\n const item = findHeadInCacheImpl(cacheNode, childParallelRoutes, keyPrefix + '/' + cacheKey);\n if (item) {\n return item;\n }\n }\n return null;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=find-head-in-cache.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvZmluZC1oZWFkLWluLWNhY2hlLmpzIiwibWFwcGluZ3MiOiI7Ozs7bURBS2dCQTs7O2VBQUFBOzs7cUNBSG9CO2tEQUNDO0FBRTlCLFNBQVNBLGdCQUNkQyxLQUFnQixFQUNoQkMsY0FBb0M7SUFFcEMsT0FBT0Msb0JBQW9CRixPQUFPQyxnQkFBZ0I7QUFDcEQ7QUFFQSxTQUFTQyxvQkFDUEYsS0FBZ0IsRUFDaEJDLGNBQW9DLEVBQ3BDRSxTQUFpQjtJQUVqQixNQUFNQyxhQUFhQyxPQUFPQyxJQUFJLENBQUNMLGdCQUFnQk0sTUFBTSxLQUFLO0lBQzFELElBQUlILFlBQVk7UUFDZCwwRUFBMEU7UUFDMUUsT0FBTztZQUFDSjtZQUFPRztTQUFVO0lBQzNCO0lBRUEsdURBQXVEO0lBQ3ZELCtFQUErRTtJQUMvRSxNQUFNSyxxQkFBcUJILE9BQU9DLElBQUksQ0FBQ0wsZ0JBQWdCUSxNQUFNLENBQzNELENBQUNDLE1BQVFBLFFBQVE7SUFHbkIsa0VBQWtFO0lBQ2xFLElBQUksY0FBY1QsZ0JBQWdCO1FBQ2hDTyxtQkFBbUJHLE9BQU8sQ0FBQztJQUM3QjtJQUVBLEtBQUssTUFBTUQsT0FBT0YsbUJBQW9CO1FBQ3BDLE1BQU0sQ0FBQ0ksU0FBU0Msb0JBQW9CLEdBQUdaLGNBQWMsQ0FBQ1MsSUFBSTtRQUMxRCxnRUFBZ0U7UUFDaEUsbUNBQW1DO1FBQ25DLElBQUlFLFlBQVlFLFNBQUFBLG1CQUFtQixFQUFFO1lBQ25DO1FBQ0Y7UUFDQSxNQUFNQyxrQkFBa0JmLE1BQU1DLGNBQWMsQ0FBQ2UsR0FBRyxDQUFDTjtRQUNqRCxJQUFJLENBQUNLLGlCQUFpQjtZQUNwQjtRQUNGO1FBRUEsTUFBTUUsV0FBV0MsQ0FBQUEsR0FBQUEsc0JBQUFBLG9CQUFBQSxFQUFxQk47UUFFdEMsTUFBTU8sWUFBWUosZ0JBQWdCQyxHQUFHLENBQUNDO1FBQ3RDLElBQUksQ0FBQ0UsV0FBVztZQUNkO1FBQ0Y7UUFFQSxNQUFNQyxPQUFPbEIsb0JBQ1hpQixXQUNBTixxQkFDQVYsWUFBWSxNQUFNYztRQUVwQixJQUFJRyxNQUFNO1lBQ1IsT0FBT0E7UUFDVDtJQUNGO0lBRUEsT0FBTztBQUNUIiwic291cmNlcyI6WyIvc3JjL2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3JlZHVjZXJzL2ZpbmQtaGVhZC1pbi1jYWNoZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEZsaWdodFJvdXRlclN0YXRlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmVyL2FwcC1yZW5kZXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhY2hlTm9kZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9saWIvYXBwLXJvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHsgREVGQVVMVF9TRUdNRU5UX0tFWSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9saWIvc2VnbWVudCdcbmltcG9ydCB7IGNyZWF0ZVJvdXRlckNhY2hlS2V5IH0gZnJvbSAnLi4vY3JlYXRlLXJvdXRlci1jYWNoZS1rZXknXG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kSGVhZEluQ2FjaGUoXG4gIGNhY2hlOiBDYWNoZU5vZGUsXG4gIHBhcmFsbGVsUm91dGVzOiBGbGlnaHRSb3V0ZXJTdGF0ZVsxXVxuKTogW0NhY2hlTm9kZSwgc3RyaW5nXSB8IG51bGwge1xuICByZXR1cm4gZmluZEhlYWRJbkNhY2hlSW1wbChjYWNoZSwgcGFyYWxsZWxSb3V0ZXMsICcnKVxufVxuXG5mdW5jdGlvbiBmaW5kSGVhZEluQ2FjaGVJbXBsKFxuICBjYWNoZTogQ2FjaGVOb2RlLFxuICBwYXJhbGxlbFJvdXRlczogRmxpZ2h0Um91dGVyU3RhdGVbMV0sXG4gIGtleVByZWZpeDogc3RyaW5nXG4pOiBbQ2FjaGVOb2RlLCBzdHJpbmddIHwgbnVsbCB7XG4gIGNvbnN0IGlzTGFzdEl0ZW0gPSBPYmplY3Qua2V5cyhwYXJhbGxlbFJvdXRlcykubGVuZ3RoID09PSAwXG4gIGlmIChpc0xhc3RJdGVtKSB7XG4gICAgLy8gUmV0dXJucyB0aGUgZW50aXJlIENhY2hlIE5vZGUgb2YgdGhlIHNlZ21lbnQgd2hvc2UgaGVhZCB3ZSB3aWxsIHJlbmRlci5cbiAgICByZXR1cm4gW2NhY2hlLCBrZXlQcmVmaXhdXG4gIH1cblxuICAvLyBGaXJzdCB0cnkgdGhlICdjaGlsZHJlbicgcGFyYWxsZWwgcm91dGUgaWYgaXQgZXhpc3RzXG4gIC8vIHdoZW4gc3RhcnRpbmcgZnJvbSB0aGUgXCJyb290XCIsIHRoaXMgY29ycmVzcG9uZHMgd2l0aCB0aGUgbWFpbiBwYWdlIGNvbXBvbmVudFxuICBjb25zdCBwYXJhbGxlbFJvdXRlc0tleXMgPSBPYmplY3Qua2V5cyhwYXJhbGxlbFJvdXRlcykuZmlsdGVyKFxuICAgIChrZXkpID0+IGtleSAhPT0gJ2NoaWxkcmVuJ1xuICApXG5cbiAgLy8gaWYgd2UgYXJlIGF0IHRoZSByb290LCB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBjaGlsZHJlbiBzbG90IGZpcnN0XG4gIGlmICgnY2hpbGRyZW4nIGluIHBhcmFsbGVsUm91dGVzKSB7XG4gICAgcGFyYWxsZWxSb3V0ZXNLZXlzLnVuc2hpZnQoJ2NoaWxkcmVuJylcbiAgfVxuXG4gIGZvciAoY29uc3Qga2V5IG9mIHBhcmFsbGVsUm91dGVzS2V5cykge1xuICAgIGNvbnN0IFtzZWdtZW50LCBjaGlsZFBhcmFsbGVsUm91dGVzXSA9IHBhcmFsbGVsUm91dGVzW2tleV1cbiAgICAvLyBJZiB0aGUgcGFyYWxsZWwgaXMgbm90IG1hdGNoZWQgYW5kIHVzaW5nIHRoZSBkZWZhdWx0IHNlZ21lbnQsXG4gICAgLy8gc2tpcCBzZWFyY2hpbmcgdGhlIGhlYWQgZnJvbSBpdC5cbiAgICBpZiAoc2VnbWVudCA9PT0gREVGQVVMVF9TRUdNRU5UX0tFWSkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgY2hpbGRTZWdtZW50TWFwID0gY2FjaGUucGFyYWxsZWxSb3V0ZXMuZ2V0KGtleSlcbiAgICBpZiAoIWNoaWxkU2VnbWVudE1hcCkge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBjb25zdCBjYWNoZUtleSA9IGNyZWF0ZVJvdXRlckNhY2hlS2V5KHNlZ21lbnQpXG5cbiAgICBjb25zdCBjYWNoZU5vZGUgPSBjaGlsZFNlZ21lbnRNYXAuZ2V0KGNhY2hlS2V5KVxuICAgIGlmICghY2FjaGVOb2RlKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGNvbnN0IGl0ZW0gPSBmaW5kSGVhZEluQ2FjaGVJbXBsKFxuICAgICAgY2FjaGVOb2RlLFxuICAgICAgY2hpbGRQYXJhbGxlbFJvdXRlcyxcbiAgICAgIGtleVByZWZpeCArICcvJyArIGNhY2hlS2V5XG4gICAgKVxuICAgIGlmIChpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG4iXSwibmFtZXMiOlsiZmluZEhlYWRJbkNhY2hlIiwiY2FjaGUiLCJwYXJhbGxlbFJvdXRlcyIsImZpbmRIZWFkSW5DYWNoZUltcGwiLCJrZXlQcmVmaXgiLCJpc0xhc3RJdGVtIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsInBhcmFsbGVsUm91dGVzS2V5cyIsImZpbHRlciIsImtleSIsInVuc2hpZnQiLCJzZWdtZW50IiwiY2hpbGRQYXJhbGxlbFJvdXRlcyIsIkRFRkFVTFRfU0VHTUVOVF9LRVkiLCJjaGlsZFNlZ21lbnRNYXAiLCJnZXQiLCJjYWNoZUtleSIsImNyZWF0ZVJvdXRlckNhY2hlS2V5IiwiY2FjaGVOb2RlIiwiaXRlbSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/find-head-in-cache.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/get-segment-value.js":
|
||
/*!***********************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/router-reducer/reducers/get-segment-value.js ***!
|
||
\***********************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getSegmentValue\", ({\n enumerable: true,\n get: function() {\n return getSegmentValue;\n }\n}));\nfunction getSegmentValue(segment) {\n return Array.isArray(segment) ? segment[1] : segment;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=get-segment-value.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvZ2V0LXNlZ21lbnQtdmFsdWUuanMiLCJtYXBwaW5ncyI6Ijs7OzttREFFZ0JBOzs7ZUFBQUE7OztBQUFULFNBQVNBLGdCQUFnQkMsT0FBZ0I7SUFDOUMsT0FBT0MsTUFBTUMsT0FBTyxDQUFDRixXQUFXQSxPQUFPLENBQUMsRUFBRSxHQUFHQTtBQUMvQyIsInNvdXJjZXMiOlsiL3NyYy9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9yZWR1Y2Vycy9nZXQtc2VnbWVudC12YWx1ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNlZ21lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2ZXIvYXBwLXJlbmRlci90eXBlcydcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlZ21lbnRWYWx1ZShzZWdtZW50OiBTZWdtZW50KSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHNlZ21lbnQpID8gc2VnbWVudFsxXSA6IHNlZ21lbnRcbn1cbiJdLCJuYW1lcyI6WyJnZXRTZWdtZW50VmFsdWUiLCJzZWdtZW50IiwiQXJyYXkiLCJpc0FycmF5Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/get-segment-value.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/has-interception-route-in-current-tree.js":
|
||
/*!********************************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/router-reducer/reducers/has-interception-route-in-current-tree.js ***!
|
||
\********************************************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"hasInterceptionRouteInCurrentTree\", ({\n enumerable: true,\n get: function() {\n return hasInterceptionRouteInCurrentTree;\n }\n}));\nconst _interceptionroutes = __webpack_require__(/*! ../../../../shared/lib/router/utils/interception-routes */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/interception-routes.js\");\nfunction hasInterceptionRouteInCurrentTree(param) {\n let [segment, parallelRoutes] = param;\n // If we have a dynamic segment, it's marked as an interception route by the presence of the `i` suffix.\n if (Array.isArray(segment) && (segment[2] === 'di' || segment[2] === 'ci')) {\n return true;\n }\n // If segment is not an array, apply the existing string-based check\n if (typeof segment === 'string' && (0, _interceptionroutes.isInterceptionRouteAppPath)(segment)) {\n return true;\n }\n // Iterate through parallelRoutes if they exist\n if (parallelRoutes) {\n for(const key in parallelRoutes){\n if (hasInterceptionRouteInCurrentTree(parallelRoutes[key])) {\n return true;\n }\n }\n }\n return false;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=has-interception-route-in-current-tree.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvaGFzLWludGVyY2VwdGlvbi1yb3V0ZS1pbi1jdXJyZW50LXRyZWUuanMiLCJtYXBwaW5ncyI6Ijs7OztxRUFHZ0JBOzs7ZUFBQUE7OztnREFGMkI7QUFFcEMsU0FBU0Esa0NBQWtDLEtBRzlCO0lBSDhCLEtBQ2hEQyxTQUNBQyxlQUNrQixHQUg4QjtJQUloRCx3R0FBd0c7SUFDeEcsSUFBSUMsTUFBTUMsT0FBTyxDQUFDSCxZQUFhQSxDQUFBQSxPQUFPLENBQUMsRUFBRSxLQUFLLFFBQVFBLE9BQU8sQ0FBQyxFQUFFLEtBQUssS0FBRyxFQUFJO1FBQzFFLE9BQU87SUFDVDtJQUVBLG9FQUFvRTtJQUNwRSxJQUFJLE9BQU9BLFlBQVksWUFBWUksQ0FBQUEsR0FBQUEsb0JBQUFBLDBCQUFBQSxFQUEyQkosVUFBVTtRQUN0RSxPQUFPO0lBQ1Q7SUFFQSwrQ0FBK0M7SUFDL0MsSUFBSUMsZ0JBQWdCO1FBQ2xCLElBQUssTUFBTUksT0FBT0osZUFBZ0I7WUFDaEMsSUFBSUYsa0NBQWtDRSxjQUFjLENBQUNJLElBQUksR0FBRztnQkFDMUQsT0FBTztZQUNUO1FBQ0Y7SUFDRjtJQUVBLE9BQU87QUFDVCIsInNvdXJjZXMiOlsiL3NyYy9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9yZWR1Y2Vycy9oYXMtaW50ZXJjZXB0aW9uLXJvdXRlLWluLWN1cnJlbnQtdHJlZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEZsaWdodFJvdXRlclN0YXRlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmVyL2FwcC1yZW5kZXIvdHlwZXMnXG5pbXBvcnQgeyBpc0ludGVyY2VwdGlvblJvdXRlQXBwUGF0aCB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2ludGVyY2VwdGlvbi1yb3V0ZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNJbnRlcmNlcHRpb25Sb3V0ZUluQ3VycmVudFRyZWUoW1xuICBzZWdtZW50LFxuICBwYXJhbGxlbFJvdXRlcyxcbl06IEZsaWdodFJvdXRlclN0YXRlKTogYm9vbGVhbiB7XG4gIC8vIElmIHdlIGhhdmUgYSBkeW5hbWljIHNlZ21lbnQsIGl0J3MgbWFya2VkIGFzIGFuIGludGVyY2VwdGlvbiByb3V0ZSBieSB0aGUgcHJlc2VuY2Ugb2YgdGhlIGBpYCBzdWZmaXguXG4gIGlmIChBcnJheS5pc0FycmF5KHNlZ21lbnQpICYmIChzZWdtZW50WzJdID09PSAnZGknIHx8IHNlZ21lbnRbMl0gPT09ICdjaScpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIElmIHNlZ21lbnQgaXMgbm90IGFuIGFycmF5LCBhcHBseSB0aGUgZXhpc3Rpbmcgc3RyaW5nLWJhc2VkIGNoZWNrXG4gIGlmICh0eXBlb2Ygc2VnbWVudCA9PT0gJ3N0cmluZycgJiYgaXNJbnRlcmNlcHRpb25Sb3V0ZUFwcFBhdGgoc2VnbWVudCkpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gSXRlcmF0ZSB0aHJvdWdoIHBhcmFsbGVsUm91dGVzIGlmIHRoZXkgZXhpc3RcbiAgaWYgKHBhcmFsbGVsUm91dGVzKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gcGFyYWxsZWxSb3V0ZXMpIHtcbiAgICAgIGlmIChoYXNJbnRlcmNlcHRpb25Sb3V0ZUluQ3VycmVudFRyZWUocGFyYWxsZWxSb3V0ZXNba2V5XSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cbiJdLCJuYW1lcyI6WyJoYXNJbnRlcmNlcHRpb25Sb3V0ZUluQ3VycmVudFRyZWUiLCJzZWdtZW50IiwicGFyYWxsZWxSb3V0ZXMiLCJBcnJheSIsImlzQXJyYXkiLCJpc0ludGVyY2VwdGlvblJvdXRlQXBwUGF0aCIsImtleSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/has-interception-route-in-current-tree.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/hmr-refresh-reducer.js":
|
||
/*!*************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/router-reducer/reducers/hmr-refresh-reducer.js ***!
|
||
\*************************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"hmrRefreshReducer\", ({\n enumerable: true,\n get: function() {\n return hmrRefreshReducer;\n }\n}));\nconst _fetchserverresponse = __webpack_require__(/*! ../fetch-server-response */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fetch-server-response.js\");\nconst _createhreffromurl = __webpack_require__(/*! ../create-href-from-url */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nconst _applyrouterstatepatchtotree = __webpack_require__(/*! ../apply-router-state-patch-to-tree */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/apply-router-state-patch-to-tree.js\");\nconst _isnavigatingtonewrootlayout = __webpack_require__(/*! ../is-navigating-to-new-root-layout */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js\");\nconst _navigatereducer = __webpack_require__(/*! ./navigate-reducer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js\");\nconst _handlemutable = __webpack_require__(/*! ../handle-mutable */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/handle-mutable.js\");\nconst _applyflightdata = __webpack_require__(/*! ../apply-flight-data */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/apply-flight-data.js\");\nconst _approuter = __webpack_require__(/*! ../../app-router */ \"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js\");\nconst _handlesegmentmismatch = __webpack_require__(/*! ../handle-segment-mismatch */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/handle-segment-mismatch.js\");\nconst _hasinterceptionrouteincurrenttree = __webpack_require__(/*! ./has-interception-route-in-current-tree */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/has-interception-route-in-current-tree.js\");\n// A version of refresh reducer that keeps the cache around instead of wiping all of it.\nfunction hmrRefreshReducerImpl(state, action) {\n const { origin } = action;\n const mutable = {};\n const href = state.canonicalUrl;\n mutable.preserveCustomHistoryState = false;\n const cache = (0, _approuter.createEmptyCacheNode)();\n // If the current tree was intercepted, the nextUrl should be included in the request.\n // This is to ensure that the refresh request doesn't get intercepted, accidentally triggering the interception route.\n const includeNextUrl = (0, _hasinterceptionrouteincurrenttree.hasInterceptionRouteInCurrentTree)(state.tree);\n // TODO-APP: verify that `href` is not an external url.\n // Fetch data from the root of the tree.\n const navigatedAt = Date.now();\n cache.lazyData = (0, _fetchserverresponse.fetchServerResponse)(new URL(href, origin), {\n flightRouterState: [\n state.tree[0],\n state.tree[1],\n state.tree[2],\n 'refetch'\n ],\n nextUrl: includeNextUrl ? state.nextUrl : null,\n isHmrRefresh: true\n });\n return cache.lazyData.then((param)=>{\n let { flightData, canonicalUrl: canonicalUrlOverride } = param;\n // Handle case when navigating to page in `pages` from `app`\n if (typeof flightData === 'string') {\n return (0, _navigatereducer.handleExternalUrl)(state, mutable, flightData, state.pushRef.pendingPush);\n }\n // Remove cache.lazyData as it has been resolved at this point.\n cache.lazyData = null;\n let currentTree = state.tree;\n let currentCache = state.cache;\n for (const normalizedFlightData of flightData){\n const { tree: treePatch, isRootRender } = normalizedFlightData;\n if (!isRootRender) {\n // TODO-APP: handle this case better\n console.log('REFRESH FAILED');\n return state;\n }\n const newTree = (0, _applyrouterstatepatchtotree.applyRouterStatePatchToTree)([\n ''\n ], currentTree, treePatch, state.canonicalUrl);\n if (newTree === null) {\n return (0, _handlesegmentmismatch.handleSegmentMismatch)(state, action, treePatch);\n }\n if ((0, _isnavigatingtonewrootlayout.isNavigatingToNewRootLayout)(currentTree, newTree)) {\n return (0, _navigatereducer.handleExternalUrl)(state, mutable, href, state.pushRef.pendingPush);\n }\n const canonicalUrlOverrideHref = canonicalUrlOverride ? (0, _createhreffromurl.createHrefFromUrl)(canonicalUrlOverride) : undefined;\n if (canonicalUrlOverride) {\n mutable.canonicalUrl = canonicalUrlOverrideHref;\n }\n const applied = (0, _applyflightdata.applyFlightData)(navigatedAt, currentCache, cache, normalizedFlightData);\n if (applied) {\n mutable.cache = cache;\n currentCache = cache;\n }\n mutable.patchedTree = newTree;\n mutable.canonicalUrl = href;\n currentTree = newTree;\n }\n return (0, _handlemutable.handleMutable)(state, mutable);\n }, ()=>state);\n}\nfunction hmrRefreshReducerNoop(state, _action) {\n return state;\n}\nconst hmrRefreshReducer = false ? 0 : hmrRefreshReducerImpl;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=hmr-refresh-reducer.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvaG1yLXJlZnJlc2gtcmVkdWNlci5qcyIsIm1hcHBpbmdzIjoiOzs7O3FEQStIYUE7OztlQUFBQTs7O2lEQS9IdUI7K0NBQ0Y7eURBQ1U7eURBQ0E7NkNBT1Y7MkNBQ0o7NkNBQ0U7dUNBRUs7bURBQ0M7K0RBQ1k7QUFFbEQsd0ZBQXdGO0FBQ3hGLFNBQVNDLHNCQUNQQyxLQUEyQixFQUMzQkMsTUFBd0I7SUFFeEIsTUFBTSxFQUFFQyxNQUFNLEVBQUUsR0FBR0Q7SUFDbkIsTUFBTUUsVUFBbUIsQ0FBQztJQUMxQixNQUFNQyxPQUFPSixNQUFNSyxZQUFZO0lBRS9CRixRQUFRRywwQkFBMEIsR0FBRztJQUVyQyxNQUFNQyxRQUFtQkMsQ0FBQUEsR0FBQUEsV0FBQUEsb0JBQUFBO0lBQ3pCLHNGQUFzRjtJQUN0RixzSEFBc0g7SUFDdEgsTUFBTUMsaUJBQWlCQyxDQUFBQSxHQUFBQSxtQ0FBQUEsaUNBQWlDLEVBQUNWLE1BQU1XLElBQUk7SUFFbkUsdURBQXVEO0lBQ3ZELHdDQUF3QztJQUN4QyxNQUFNQyxjQUFjQyxLQUFLQyxHQUFHO0lBQzVCUCxNQUFNUSxRQUFRLEdBQUdDLENBQUFBLEdBQUFBLHFCQUFBQSxtQkFBQUEsRUFBb0IsSUFBSUMsSUFBSWIsTUFBTUYsU0FBUztRQUMxRGdCLG1CQUFtQjtZQUFDbEIsTUFBTVcsSUFBSSxDQUFDLEVBQUU7WUFBRVgsTUFBTVcsSUFBSSxDQUFDLEVBQUU7WUFBRVgsTUFBTVcsSUFBSSxDQUFDLEVBQUU7WUFBRTtTQUFVO1FBQzNFUSxTQUFTVixpQkFBaUJULE1BQU1tQixPQUFPLEdBQUc7UUFDMUNDLGNBQWM7SUFDaEI7SUFFQSxPQUFPYixNQUFNUSxRQUFRLENBQUNNLElBQUksQ0FDeEI7WUFBQyxFQUFFQyxVQUFVLEVBQUVqQixjQUFja0Isb0JBQW9CLEVBQUU7UUFDakQsNERBQTREO1FBQzVELElBQUksT0FBT0QsZUFBZSxVQUFVO1lBQ2xDLE9BQU9FLENBQUFBLEdBQUFBLGlCQUFBQSxpQkFBQUEsRUFDTHhCLE9BQ0FHLFNBQ0FtQixZQUNBdEIsTUFBTXlCLE9BQU8sQ0FBQ0MsV0FBVztRQUU3QjtRQUVBLCtEQUErRDtRQUMvRG5CLE1BQU1RLFFBQVEsR0FBRztRQUVqQixJQUFJWSxjQUFjM0IsTUFBTVcsSUFBSTtRQUM1QixJQUFJaUIsZUFBZTVCLE1BQU1PLEtBQUs7UUFFOUIsS0FBSyxNQUFNc0Isd0JBQXdCUCxXQUFZO1lBQzdDLE1BQU0sRUFBRVgsTUFBTW1CLFNBQVMsRUFBRUMsWUFBWSxFQUFFLEdBQUdGO1lBQzFDLElBQUksQ0FBQ0UsY0FBYztnQkFDakIsb0NBQW9DO2dCQUNwQ0MsUUFBUUMsR0FBRyxDQUFDO2dCQUNaLE9BQU9qQztZQUNUO1lBRUEsTUFBTWtDLFVBQVVDLENBQUFBLEdBQUFBLDZCQUFBQSwyQkFBQUEsRUFDZDtnQkFDQzthQUFHLEVBQ0pSLGFBQ0FHLFdBQ0E5QixNQUFNSyxZQUFZO1lBR3BCLElBQUk2QixZQUFZLE1BQU07Z0JBQ3BCLE9BQU9FLENBQUFBLEdBQUFBLHVCQUFBQSxxQkFBQUEsRUFBc0JwQyxPQUFPQyxRQUFRNkI7WUFDOUM7WUFFQSxJQUFJTyxDQUFBQSxHQUFBQSw2QkFBQUEsMkJBQUFBLEVBQTRCVixhQUFhTyxVQUFVO2dCQUNyRCxPQUFPVixDQUFBQSxHQUFBQSxpQkFBQUEsaUJBQUFBLEVBQ0x4QixPQUNBRyxTQUNBQyxNQUNBSixNQUFNeUIsT0FBTyxDQUFDQyxXQUFXO1lBRTdCO1lBRUEsTUFBTVksMkJBQTJCZix1QkFDN0JnQixDQUFBQSxHQUFBQSxtQkFBQUEsaUJBQUFBLEVBQWtCaEIsd0JBQ2xCaUI7WUFFSixJQUFJakIsc0JBQXNCO2dCQUN4QnBCLFFBQVFFLFlBQVksR0FBR2lDO1lBQ3pCO1lBQ0EsTUFBTUcsVUFBVUMsQ0FBQUEsR0FBQUEsaUJBQUFBLGVBQUFBLEVBQ2Q5QixhQUNBZ0IsY0FDQXJCLE9BQ0FzQjtZQUdGLElBQUlZLFNBQVM7Z0JBQ1h0QyxRQUFRSSxLQUFLLEdBQUdBO2dCQUNoQnFCLGVBQWVyQjtZQUNqQjtZQUVBSixRQUFRd0MsV0FBVyxHQUFHVDtZQUN0Qi9CLFFBQVFFLFlBQVksR0FBR0Q7WUFFdkJ1QixjQUFjTztRQUNoQjtRQUNBLE9BQU9VLENBQUFBLEdBQUFBLGVBQUFBLGFBQUFBLEVBQWM1QyxPQUFPRztJQUM5QixHQUNBLElBQU1IO0FBRVY7QUFFQSxTQUFTNkMsc0JBQ1A3QyxLQUEyQixFQUMzQjhDLE9BQXlCO0lBRXpCLE9BQU85QztBQUNUO0FBRU8sTUFBTUYsb0JBQ1hpRCxNQUFvQixHQUNoQkYsQ0FBcUJBLEdBQ3JCOUMiLCJzb3VyY2VzIjpbIi9zcmMvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvaG1yLXJlZnJlc2gtcmVkdWNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmZXRjaFNlcnZlclJlc3BvbnNlIH0gZnJvbSAnLi4vZmV0Y2gtc2VydmVyLXJlc3BvbnNlJ1xuaW1wb3J0IHsgY3JlYXRlSHJlZkZyb21VcmwgfSBmcm9tICcuLi9jcmVhdGUtaHJlZi1mcm9tLXVybCdcbmltcG9ydCB7IGFwcGx5Um91dGVyU3RhdGVQYXRjaFRvVHJlZSB9IGZyb20gJy4uL2FwcGx5LXJvdXRlci1zdGF0ZS1wYXRjaC10by10cmVlJ1xuaW1wb3J0IHsgaXNOYXZpZ2F0aW5nVG9OZXdSb290TGF5b3V0IH0gZnJvbSAnLi4vaXMtbmF2aWdhdGluZy10by1uZXctcm9vdC1sYXlvdXQnXG5pbXBvcnQgdHlwZSB7XG4gIFJlYWRvbmx5UmVkdWNlclN0YXRlLFxuICBSZWR1Y2VyU3RhdGUsXG4gIEhtclJlZnJlc2hBY3Rpb24sXG4gIE11dGFibGUsXG59IGZyb20gJy4uL3JvdXRlci1yZWR1Y2VyLXR5cGVzJ1xuaW1wb3J0IHsgaGFuZGxlRXh0ZXJuYWxVcmwgfSBmcm9tICcuL25hdmlnYXRlLXJlZHVjZXInXG5pbXBvcnQgeyBoYW5kbGVNdXRhYmxlIH0gZnJvbSAnLi4vaGFuZGxlLW11dGFibGUnXG5pbXBvcnQgeyBhcHBseUZsaWdodERhdGEgfSBmcm9tICcuLi9hcHBseS1mbGlnaHQtZGF0YSdcbmltcG9ydCB0eXBlIHsgQ2FjaGVOb2RlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2xpYi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUnXG5pbXBvcnQgeyBjcmVhdGVFbXB0eUNhY2hlTm9kZSB9IGZyb20gJy4uLy4uL2FwcC1yb3V0ZXInXG5pbXBvcnQgeyBoYW5kbGVTZWdtZW50TWlzbWF0Y2ggfSBmcm9tICcuLi9oYW5kbGUtc2VnbWVudC1taXNtYXRjaCdcbmltcG9ydCB7IGhhc0ludGVyY2VwdGlvblJvdXRlSW5DdXJyZW50VHJlZSB9IGZyb20gJy4vaGFzLWludGVyY2VwdGlvbi1yb3V0ZS1pbi1jdXJyZW50LXRyZWUnXG5cbi8vIEEgdmVyc2lvbiBvZiByZWZyZXNoIHJlZHVjZXIgdGhhdCBrZWVwcyB0aGUgY2FjaGUgYXJvdW5kIGluc3RlYWQgb2Ygd2lwaW5nIGFsbCBvZiBpdC5cbmZ1bmN0aW9uIGhtclJlZnJlc2hSZWR1Y2VySW1wbChcbiAgc3RhdGU6IFJlYWRvbmx5UmVkdWNlclN0YXRlLFxuICBhY3Rpb246IEhtclJlZnJlc2hBY3Rpb25cbik6IFJlZHVjZXJTdGF0ZSB7XG4gIGNvbnN0IHsgb3JpZ2luIH0gPSBhY3Rpb25cbiAgY29uc3QgbXV0YWJsZTogTXV0YWJsZSA9IHt9XG4gIGNvbnN0IGhyZWYgPSBzdGF0ZS5jYW5vbmljYWxVcmxcblxuICBtdXRhYmxlLnByZXNlcnZlQ3VzdG9tSGlzdG9yeVN0YXRlID0gZmFsc2VcblxuICBjb25zdCBjYWNoZTogQ2FjaGVOb2RlID0gY3JlYXRlRW1wdHlDYWNoZU5vZGUoKVxuICAvLyBJZiB0aGUgY3VycmVudCB0cmVlIHdhcyBpbnRlcmNlcHRlZCwgdGhlIG5leHRVcmwgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSByZXF1ZXN0LlxuICAvLyBUaGlzIGlzIHRvIGVuc3VyZSB0aGF0IHRoZSByZWZyZXNoIHJlcXVlc3QgZG9lc24ndCBnZXQgaW50ZXJjZXB0ZWQsIGFjY2lkZW50YWxseSB0cmlnZ2VyaW5nIHRoZSBpbnRlcmNlcHRpb24gcm91dGUuXG4gIGNvbnN0IGluY2x1ZGVOZXh0VXJsID0gaGFzSW50ZXJjZXB0aW9uUm91dGVJbkN1cnJlbnRUcmVlKHN0YXRlLnRyZWUpXG5cbiAgLy8gVE9ETy1BUFA6IHZlcmlmeSB0aGF0IGBocmVmYCBpcyBub3QgYW4gZXh0ZXJuYWwgdXJsLlxuICAvLyBGZXRjaCBkYXRhIGZyb20gdGhlIHJvb3Qgb2YgdGhlIHRyZWUuXG4gIGNvbnN0IG5hdmlnYXRlZEF0ID0gRGF0ZS5ub3coKVxuICBjYWNoZS5sYXp5RGF0YSA9IGZldGNoU2VydmVyUmVzcG9uc2UobmV3IFVSTChocmVmLCBvcmlnaW4pLCB7XG4gICAgZmxpZ2h0Um91dGVyU3RhdGU6IFtzdGF0ZS50cmVlWzBdLCBzdGF0ZS50cmVlWzFdLCBzdGF0ZS50cmVlWzJdLCAncmVmZXRjaCddLFxuICAgIG5leHRVcmw6IGluY2x1ZGVOZXh0VXJsID8gc3RhdGUubmV4dFVybCA6IG51bGwsXG4gICAgaXNIbXJSZWZyZXNoOiB0cnVlLFxuICB9KVxuXG4gIHJldHVybiBjYWNoZS5sYXp5RGF0YS50aGVuKFxuICAgICh7IGZsaWdodERhdGEsIGNhbm9uaWNhbFVybDogY2Fub25pY2FsVXJsT3ZlcnJpZGUgfSkgPT4ge1xuICAgICAgLy8gSGFuZGxlIGNhc2Ugd2hlbiBuYXZpZ2F0aW5nIHRvIHBhZ2UgaW4gYHBhZ2VzYCBmcm9tIGBhcHBgXG4gICAgICBpZiAodHlwZW9mIGZsaWdodERhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVFeHRlcm5hbFVybChcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBtdXRhYmxlLFxuICAgICAgICAgIGZsaWdodERhdGEsXG4gICAgICAgICAgc3RhdGUucHVzaFJlZi5wZW5kaW5nUHVzaFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIFJlbW92ZSBjYWNoZS5sYXp5RGF0YSBhcyBpdCBoYXMgYmVlbiByZXNvbHZlZCBhdCB0aGlzIHBvaW50LlxuICAgICAgY2FjaGUubGF6eURhdGEgPSBudWxsXG5cbiAgICAgIGxldCBjdXJyZW50VHJlZSA9IHN0YXRlLnRyZWVcbiAgICAgIGxldCBjdXJyZW50Q2FjaGUgPSBzdGF0ZS5jYWNoZVxuXG4gICAgICBmb3IgKGNvbnN0IG5vcm1hbGl6ZWRGbGlnaHREYXRhIG9mIGZsaWdodERhdGEpIHtcbiAgICAgICAgY29uc3QgeyB0cmVlOiB0cmVlUGF0Y2gsIGlzUm9vdFJlbmRlciB9ID0gbm9ybWFsaXplZEZsaWdodERhdGFcbiAgICAgICAgaWYgKCFpc1Jvb3RSZW5kZXIpIHtcbiAgICAgICAgICAvLyBUT0RPLUFQUDogaGFuZGxlIHRoaXMgY2FzZSBiZXR0ZXJcbiAgICAgICAgICBjb25zb2xlLmxvZygnUkVGUkVTSCBGQUlMRUQnKVxuICAgICAgICAgIHJldHVybiBzdGF0ZVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV3VHJlZSA9IGFwcGx5Um91dGVyU3RhdGVQYXRjaFRvVHJlZShcbiAgICAgICAgICAvLyBUT0RPLUFQUDogcmVtb3ZlICcnXG4gICAgICAgICAgWycnXSxcbiAgICAgICAgICBjdXJyZW50VHJlZSxcbiAgICAgICAgICB0cmVlUGF0Y2gsXG4gICAgICAgICAgc3RhdGUuY2Fub25pY2FsVXJsXG4gICAgICAgIClcblxuICAgICAgICBpZiAobmV3VHJlZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBoYW5kbGVTZWdtZW50TWlzbWF0Y2goc3RhdGUsIGFjdGlvbiwgdHJlZVBhdGNoKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTmF2aWdhdGluZ1RvTmV3Um9vdExheW91dChjdXJyZW50VHJlZSwgbmV3VHJlZSkpIHtcbiAgICAgICAgICByZXR1cm4gaGFuZGxlRXh0ZXJuYWxVcmwoXG4gICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgIG11dGFibGUsXG4gICAgICAgICAgICBocmVmLFxuICAgICAgICAgICAgc3RhdGUucHVzaFJlZi5wZW5kaW5nUHVzaFxuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNhbm9uaWNhbFVybE92ZXJyaWRlSHJlZiA9IGNhbm9uaWNhbFVybE92ZXJyaWRlXG4gICAgICAgICAgPyBjcmVhdGVIcmVmRnJvbVVybChjYW5vbmljYWxVcmxPdmVycmlkZSlcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICAgIGlmIChjYW5vbmljYWxVcmxPdmVycmlkZSkge1xuICAgICAgICAgIG11dGFibGUuY2Fub25pY2FsVXJsID0gY2Fub25pY2FsVXJsT3ZlcnJpZGVIcmVmXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXBwbGllZCA9IGFwcGx5RmxpZ2h0RGF0YShcbiAgICAgICAgICBuYXZpZ2F0ZWRBdCxcbiAgICAgICAgICBjdXJyZW50Q2FjaGUsXG4gICAgICAgICAgY2FjaGUsXG4gICAgICAgICAgbm9ybWFsaXplZEZsaWdodERhdGFcbiAgICAgICAgKVxuXG4gICAgICAgIGlmIChhcHBsaWVkKSB7XG4gICAgICAgICAgbXV0YWJsZS5jYWNoZSA9IGNhY2hlXG4gICAgICAgICAgY3VycmVudENhY2hlID0gY2FjaGVcbiAgICAgICAgfVxuXG4gICAgICAgIG11dGFibGUucGF0Y2hlZFRyZWUgPSBuZXdUcmVlXG4gICAgICAgIG11dGFibGUuY2Fub25pY2FsVXJsID0gaHJlZlxuXG4gICAgICAgIGN1cnJlbnRUcmVlID0gbmV3VHJlZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGhhbmRsZU11dGFibGUoc3RhdGUsIG11dGFibGUpXG4gICAgfSxcbiAgICAoKSA9PiBzdGF0ZVxuICApXG59XG5cbmZ1bmN0aW9uIGhtclJlZnJlc2hSZWR1Y2VyTm9vcChcbiAgc3RhdGU6IFJlYWRvbmx5UmVkdWNlclN0YXRlLFxuICBfYWN0aW9uOiBIbXJSZWZyZXNoQWN0aW9uXG4pOiBSZWR1Y2VyU3RhdGUge1xuICByZXR1cm4gc3RhdGVcbn1cblxuZXhwb3J0IGNvbnN0IGhtclJlZnJlc2hSZWR1Y2VyID1cbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJ1xuICAgID8gaG1yUmVmcmVzaFJlZHVjZXJOb29wXG4gICAgOiBobXJSZWZyZXNoUmVkdWNlckltcGxcbiJdLCJuYW1lcyI6WyJobXJSZWZyZXNoUmVkdWNlciIsImhtclJlZnJlc2hSZWR1Y2VySW1wbCIsInN0YXRlIiwiYWN0aW9uIiwib3JpZ2luIiwibXV0YWJsZSIsImhyZWYiLCJjYW5vbmljYWxVcmwiLCJwcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZSIsImNhY2hlIiwiY3JlYXRlRW1wdHlDYWNoZU5vZGUiLCJpbmNsdWRlTmV4dFVybCIsImhhc0ludGVyY2VwdGlvblJvdXRlSW5DdXJyZW50VHJlZSIsInRyZWUiLCJuYXZpZ2F0ZWRBdCIsIkRhdGUiLCJub3ciLCJsYXp5RGF0YSIsImZldGNoU2VydmVyUmVzcG9uc2UiLCJVUkwiLCJmbGlnaHRSb3V0ZXJTdGF0ZSIsIm5leHRVcmwiLCJpc0htclJlZnJlc2giLCJ0aGVuIiwiZmxpZ2h0RGF0YSIsImNhbm9uaWNhbFVybE92ZXJyaWRlIiwiaGFuZGxlRXh0ZXJuYWxVcmwiLCJwdXNoUmVmIiwicGVuZGluZ1B1c2giLCJjdXJyZW50VHJlZSIsImN1cnJlbnRDYWNoZSIsIm5vcm1hbGl6ZWRGbGlnaHREYXRhIiwidHJlZVBhdGNoIiwiaXNSb290UmVuZGVyIiwiY29uc29sZSIsImxvZyIsIm5ld1RyZWUiLCJhcHBseVJvdXRlclN0YXRlUGF0Y2hUb1RyZWUiLCJoYW5kbGVTZWdtZW50TWlzbWF0Y2giLCJpc05hdmlnYXRpbmdUb05ld1Jvb3RMYXlvdXQiLCJjYW5vbmljYWxVcmxPdmVycmlkZUhyZWYiLCJjcmVhdGVIcmVmRnJvbVVybCIsInVuZGVmaW5lZCIsImFwcGxpZWQiLCJhcHBseUZsaWdodERhdGEiLCJwYXRjaGVkVHJlZSIsImhhbmRsZU11dGFibGUiLCJobXJSZWZyZXNoUmVkdWNlck5vb3AiLCJfYWN0aW9uIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/hmr-refresh-reducer.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js":
|
||
/*!**********************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js ***!
|
||
\**********************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n handleExternalUrl: function() {\n return handleExternalUrl;\n },\n navigateReducer: function() {\n return navigateReducer;\n }\n});\nconst _fetchserverresponse = __webpack_require__(/*! ../fetch-server-response */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fetch-server-response.js\");\nconst _createhreffromurl = __webpack_require__(/*! ../create-href-from-url */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nconst _invalidatecachebelowflightsegmentpath = __webpack_require__(/*! ../invalidate-cache-below-flight-segmentpath */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/invalidate-cache-below-flight-segmentpath.js\");\nconst _applyrouterstatepatchtotree = __webpack_require__(/*! ../apply-router-state-patch-to-tree */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/apply-router-state-patch-to-tree.js\");\nconst _shouldhardnavigate = __webpack_require__(/*! ../should-hard-navigate */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/should-hard-navigate.js\");\nconst _isnavigatingtonewrootlayout = __webpack_require__(/*! ../is-navigating-to-new-root-layout */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js\");\nconst _routerreducertypes = __webpack_require__(/*! ../router-reducer-types */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst _handlemutable = __webpack_require__(/*! ../handle-mutable */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/handle-mutable.js\");\nconst _applyflightdata = __webpack_require__(/*! ../apply-flight-data */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/apply-flight-data.js\");\nconst _prefetchreducer = __webpack_require__(/*! ./prefetch-reducer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/prefetch-reducer.js\");\nconst _approuter = __webpack_require__(/*! ../../app-router */ \"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js\");\nconst _segment = __webpack_require__(/*! ../../../../shared/lib/segment */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/segment.js\");\nconst _pprnavigations = __webpack_require__(/*! ../ppr-navigations */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/ppr-navigations.js\");\nconst _prefetchcacheutils = __webpack_require__(/*! ../prefetch-cache-utils */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/prefetch-cache-utils.js\");\nconst _clearcachenodedataforsegmentpath = __webpack_require__(/*! ../clear-cache-node-data-for-segment-path */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/clear-cache-node-data-for-segment-path.js\");\nconst _aliasedprefetchnavigations = __webpack_require__(/*! ../aliased-prefetch-navigations */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/aliased-prefetch-navigations.js\");\nconst _segmentcache = __webpack_require__(/*! ../../segment-cache */ \"(app-pages-browser)/./node_modules/next/dist/client/components/segment-cache.js\");\nfunction handleExternalUrl(state, mutable, url, pendingPush) {\n mutable.mpaNavigation = true;\n mutable.canonicalUrl = url;\n mutable.pendingPush = pendingPush;\n mutable.scrollableSegments = undefined;\n return (0, _handlemutable.handleMutable)(state, mutable);\n}\nfunction generateSegmentsFromPatch(flightRouterPatch) {\n const segments = [];\n const [segment, parallelRoutes] = flightRouterPatch;\n if (Object.keys(parallelRoutes).length === 0) {\n return [\n [\n segment\n ]\n ];\n }\n for (const [parallelRouteKey, parallelRoute] of Object.entries(parallelRoutes)){\n for (const childSegment of generateSegmentsFromPatch(parallelRoute)){\n // If the segment is empty, it means we are at the root of the tree\n if (segment === '') {\n segments.push([\n parallelRouteKey,\n ...childSegment\n ]);\n } else {\n segments.push([\n segment,\n parallelRouteKey,\n ...childSegment\n ]);\n }\n }\n }\n return segments;\n}\nfunction triggerLazyFetchForLeafSegments(newCache, currentCache, flightSegmentPath, treePatch) {\n let appliedPatch = false;\n newCache.rsc = currentCache.rsc;\n newCache.prefetchRsc = currentCache.prefetchRsc;\n newCache.loading = currentCache.loading;\n newCache.parallelRoutes = new Map(currentCache.parallelRoutes);\n const segmentPathsToFill = generateSegmentsFromPatch(treePatch).map((segment)=>[\n ...flightSegmentPath,\n ...segment\n ]);\n for (const segmentPaths of segmentPathsToFill){\n (0, _clearcachenodedataforsegmentpath.clearCacheNodeDataForSegmentPath)(newCache, currentCache, segmentPaths);\n appliedPatch = true;\n }\n return appliedPatch;\n}\nfunction handleNavigationResult(url, state, mutable, pendingPush, result) {\n switch(result.tag){\n case _segmentcache.NavigationResultTag.MPA:\n {\n // Perform an MPA navigation.\n const newUrl = result.data;\n return handleExternalUrl(state, mutable, newUrl, pendingPush);\n }\n case _segmentcache.NavigationResultTag.NoOp:\n {\n // The server responded with no change to the current page. However, if\n // the URL changed, we still need to update that.\n const newCanonicalUrl = result.data.canonicalUrl;\n mutable.canonicalUrl = newCanonicalUrl;\n // Check if the only thing that changed was the hash fragment.\n const oldUrl = new URL(state.canonicalUrl, url);\n const onlyHashChange = // navigations are always same-origin.\n url.pathname === oldUrl.pathname && url.search === oldUrl.search && url.hash !== oldUrl.hash;\n if (onlyHashChange) {\n // The only updated part of the URL is the hash.\n mutable.onlyHashChange = true;\n mutable.shouldScroll = result.data.shouldScroll;\n mutable.hashFragment = url.hash;\n // Setting this to an empty array triggers a scroll for all new and\n // updated segments. See `ScrollAndFocusHandler` for more details.\n mutable.scrollableSegments = [];\n }\n return (0, _handlemutable.handleMutable)(state, mutable);\n }\n case _segmentcache.NavigationResultTag.Success:\n {\n // Received a new result.\n mutable.cache = result.data.cacheNode;\n mutable.patchedTree = result.data.flightRouterState;\n mutable.canonicalUrl = result.data.canonicalUrl;\n mutable.scrollableSegments = result.data.scrollableSegments;\n mutable.shouldScroll = result.data.shouldScroll;\n mutable.hashFragment = result.data.hash;\n return (0, _handlemutable.handleMutable)(state, mutable);\n }\n case _segmentcache.NavigationResultTag.Async:\n {\n return result.data.then((asyncResult)=>handleNavigationResult(url, state, mutable, pendingPush, asyncResult), // TODO: This matches the current behavior but we need to do something\n // better here if the network fails.\n ()=>{\n return state;\n });\n }\n default:\n {\n result;\n return state;\n }\n }\n}\nfunction navigateReducer(state, action) {\n const { url, isExternalUrl, navigateType, shouldScroll, allowAliasing } = action;\n const mutable = {};\n const { hash } = url;\n const href = (0, _createhreffromurl.createHrefFromUrl)(url);\n const pendingPush = navigateType === 'push';\n // we want to prune the prefetch cache on every navigation to avoid it growing too large\n (0, _prefetchcacheutils.prunePrefetchCache)(state.prefetchCache);\n mutable.preserveCustomHistoryState = false;\n mutable.pendingPush = pendingPush;\n if (isExternalUrl) {\n return handleExternalUrl(state, mutable, url.toString(), pendingPush);\n }\n // Handles case where `<meta http-equiv=\"refresh\">` tag is present,\n // which will trigger an MPA navigation.\n if (document.getElementById('__next-page-redirect')) {\n return handleExternalUrl(state, mutable, href, pendingPush);\n }\n if (false) {}\n const prefetchValues = (0, _prefetchcacheutils.getOrCreatePrefetchCacheEntry)({\n url,\n nextUrl: state.nextUrl,\n tree: state.tree,\n prefetchCache: state.prefetchCache,\n allowAliasing\n });\n const { treeAtTimeOfPrefetch, data } = prefetchValues;\n _prefetchreducer.prefetchQueue.bump(data);\n return data.then((param)=>{\n let { flightData, canonicalUrl: canonicalUrlOverride, postponed } = param;\n const navigatedAt = Date.now();\n let isFirstRead = false;\n // we only want to mark this once\n if (!prefetchValues.lastUsedTime) {\n // important: we should only mark the cache node as dirty after we unsuspend from the call above\n prefetchValues.lastUsedTime = navigatedAt;\n isFirstRead = true;\n }\n if (prefetchValues.aliased) {\n // When alias is enabled, search param may not be included in the canonicalUrl.\n // But we want to set url to canonicalUrl so that we use redirected path for fetching dynamic data.\n const urlWithCanonicalPathname = new URL(url.href);\n if (canonicalUrlOverride) {\n urlWithCanonicalPathname.pathname = canonicalUrlOverride.pathname;\n }\n const result = (0, _aliasedprefetchnavigations.handleAliasedPrefetchEntry)(navigatedAt, state, flightData, urlWithCanonicalPathname, mutable);\n // We didn't return new router state because we didn't apply the aliased entry for some reason.\n // We'll re-invoke the navigation handler but ensure that we don't attempt to use the aliased entry. This\n // will create an on-demand prefetch entry.\n if (result === false) {\n return navigateReducer(state, {\n ...action,\n allowAliasing: false\n });\n }\n return result;\n }\n // Handle case when navigating to page in `pages` from `app`\n if (typeof flightData === 'string') {\n return handleExternalUrl(state, mutable, flightData, pendingPush);\n }\n const updatedCanonicalUrl = canonicalUrlOverride ? (0, _createhreffromurl.createHrefFromUrl)(canonicalUrlOverride) : href;\n const onlyHashChange = !!hash && state.canonicalUrl.split('#', 1)[0] === updatedCanonicalUrl.split('#', 1)[0];\n // If only the hash has changed, the server hasn't sent us any new data. We can just update\n // the mutable properties responsible for URL and scroll handling and return early.\n if (onlyHashChange) {\n mutable.onlyHashChange = true;\n mutable.canonicalUrl = updatedCanonicalUrl;\n mutable.shouldScroll = shouldScroll;\n mutable.hashFragment = hash;\n mutable.scrollableSegments = [];\n return (0, _handlemutable.handleMutable)(state, mutable);\n }\n let currentTree = state.tree;\n let currentCache = state.cache;\n let scrollableSegments = [];\n for (const normalizedFlightData of flightData){\n const { pathToSegment: flightSegmentPath, seedData, head, isHeadPartial, isRootRender } = normalizedFlightData;\n let treePatch = normalizedFlightData.tree;\n // TODO-APP: remove ''\n const flightSegmentPathWithLeadingEmpty = [\n '',\n ...flightSegmentPath\n ];\n // Create new tree based on the flightSegmentPath and router state patch\n let newTree = (0, _applyrouterstatepatchtotree.applyRouterStatePatchToTree)(flightSegmentPathWithLeadingEmpty, currentTree, treePatch, href);\n // If the tree patch can't be applied to the current tree then we use the tree at time of prefetch\n // TODO-APP: This should instead fill in the missing pieces in `currentTree` with the data from `treeAtTimeOfPrefetch`, then apply the patch.\n if (newTree === null) {\n newTree = (0, _applyrouterstatepatchtotree.applyRouterStatePatchToTree)(flightSegmentPathWithLeadingEmpty, treeAtTimeOfPrefetch, treePatch, href);\n }\n if (newTree !== null) {\n if (// will send back a static response that's rendered from\n // the root. If for some reason it doesn't, we fall back to the\n // non-PPR implementation.\n // TODO: We should get rid of the else branch and do all navigations\n // via startPPRNavigation. The current structure is just\n // an incremental step.\n seedData && isRootRender && postponed) {\n const task = (0, _pprnavigations.startPPRNavigation)(navigatedAt, currentCache, currentTree, treePatch, seedData, head, isHeadPartial, false, scrollableSegments);\n if (task !== null) {\n if (task.route === null) {\n // Detected a change to the root layout. Perform an full-\n // page navigation.\n return handleExternalUrl(state, mutable, href, pendingPush);\n }\n // Use the tree computed by startPPRNavigation instead\n // of the one computed by applyRouterStatePatchToTree.\n // TODO: We should remove applyRouterStatePatchToTree\n // from the PPR path entirely.\n const patchedRouterState = task.route;\n newTree = patchedRouterState;\n const newCache = task.node;\n if (newCache !== null) {\n // We've created a new Cache Node tree that contains a prefetched\n // version of the next page. This can be rendered instantly.\n mutable.cache = newCache;\n }\n const dynamicRequestTree = task.dynamicRequestTree;\n if (dynamicRequestTree !== null) {\n // The prefetched tree has dynamic holes in it. We initiate a\n // dynamic request to fill them in.\n //\n // Do not block on the result. We'll immediately render the Cache\n // Node tree and suspend on the dynamic parts. When the request\n // comes in, we'll fill in missing data and ping React to\n // re-render. Unlike the lazy fetching model in the non-PPR\n // implementation, this is modeled as a single React update +\n // streaming, rather than multiple top-level updates. (However,\n // even in the new model, we'll still need to sometimes update the\n // root multiple times per navigation, like if the server sends us\n // a different response than we expected. For now, we revert back\n // to the lazy fetching mechanism in that case.)\n const dynamicRequest = (0, _fetchserverresponse.fetchServerResponse)(new URL(updatedCanonicalUrl, url.origin), {\n flightRouterState: dynamicRequestTree,\n nextUrl: state.nextUrl\n });\n (0, _pprnavigations.listenForDynamicRequest)(task, dynamicRequest);\n // We store the dynamic request on the `lazyData` property of the CacheNode\n // because we're not going to await the dynamic request here. Since we're not blocking\n // on the dynamic request, `layout-router` will\n // task.node.lazyData = dynamicRequest\n } else {\n // The prefetched tree does not contain dynamic holes — it's\n // fully static. We can skip the dynamic request.\n }\n } else {\n // Nothing changed, so reuse the old cache.\n // TODO: What if the head changed but not any of the segment data?\n // Is that possible? If so, we should clone the whole tree and\n // update the head.\n newTree = treePatch;\n }\n } else {\n // The static response does not include any dynamic holes, so\n // there's no need to do a second request.\n // TODO: As an incremental step this just reverts back to the\n // non-PPR implementation. We can simplify this branch further,\n // given that PPR prefetches are always static and return the whole\n // tree. Or in the meantime we could factor it out into a\n // separate function.\n if ((0, _isnavigatingtonewrootlayout.isNavigatingToNewRootLayout)(currentTree, newTree)) {\n return handleExternalUrl(state, mutable, href, pendingPush);\n }\n const cache = (0, _approuter.createEmptyCacheNode)();\n let applied = false;\n if (prefetchValues.status === _routerreducertypes.PrefetchCacheEntryStatus.stale && !isFirstRead) {\n // When we have a stale prefetch entry, we only want to re-use the loading state of the route we're navigating to, to support instant loading navigations\n // this will trigger a lazy fetch for the actual page data by nulling the `rsc` and `prefetchRsc` values for page data,\n // while copying over the `loading` for the segment that contains the page data.\n // We only do this on subsequent reads, as otherwise there'd be no loading data to re-use.\n // We skip this branch if only the hash fragment has changed, as we don't want to trigger a lazy fetch in that case\n applied = triggerLazyFetchForLeafSegments(cache, currentCache, flightSegmentPath, treePatch);\n // since we re-used the stale cache's loading state & refreshed the data,\n // update the `lastUsedTime` so that it can continue to be re-used for the next 30s\n prefetchValues.lastUsedTime = navigatedAt;\n } else {\n applied = (0, _applyflightdata.applyFlightData)(navigatedAt, currentCache, cache, normalizedFlightData, prefetchValues);\n }\n const hardNavigate = (0, _shouldhardnavigate.shouldHardNavigate)(flightSegmentPathWithLeadingEmpty, currentTree);\n if (hardNavigate) {\n // Copy rsc for the root node of the cache.\n cache.rsc = currentCache.rsc;\n cache.prefetchRsc = currentCache.prefetchRsc;\n (0, _invalidatecachebelowflightsegmentpath.invalidateCacheBelowFlightSegmentPath)(cache, currentCache, flightSegmentPath);\n // Ensure the existing cache value is used when the cache was not invalidated.\n mutable.cache = cache;\n } else if (applied) {\n mutable.cache = cache;\n // If we applied the cache, we update the \"current cache\" value so any other\n // segments in the FlightDataPath will be able to reference the updated cache.\n currentCache = cache;\n }\n for (const subSegment of generateSegmentsFromPatch(treePatch)){\n const scrollableSegmentPath = [\n ...flightSegmentPath,\n ...subSegment\n ];\n // Filter out the __DEFAULT__ paths as they shouldn't be scrolled to in this case.\n if (scrollableSegmentPath[scrollableSegmentPath.length - 1] !== _segment.DEFAULT_SEGMENT_KEY) {\n scrollableSegments.push(scrollableSegmentPath);\n }\n }\n }\n currentTree = newTree;\n }\n }\n mutable.patchedTree = currentTree;\n mutable.canonicalUrl = updatedCanonicalUrl;\n mutable.scrollableSegments = scrollableSegments;\n mutable.hashFragment = hash;\n mutable.shouldScroll = shouldScroll;\n return (0, _handlemutable.handleMutable)(state, mutable);\n }, ()=>state);\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=navigate-reducer.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvbmF2aWdhdGUtcmVkdWNlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFvQ2dCQSxpQkFBaUI7ZUFBakJBOztJQXNJQUMsZUFBZTtlQUFmQTs7O2lEQXJLb0I7K0NBQ0Y7bUVBQ29CO3lEQUNWO2dEQUNUO3lEQUNTO2dEQU9yQzsyQ0FDdUI7NkNBQ0U7NkNBQ0Y7dUNBQ087cUNBQ0Q7NENBQ3dCO2dEQUlyRDs4REFDMEM7d0RBQ047MENBS3BDO0FBRUEsU0FBU0Qsa0JBQ2RFLEtBQTJCLEVBQzNCQyxPQUFnQixFQUNoQkMsR0FBVyxFQUNYQyxXQUFvQjtJQUVwQkYsUUFBUUcsYUFBYSxHQUFHO0lBQ3hCSCxRQUFRSSxZQUFZLEdBQUdIO0lBQ3ZCRCxRQUFRRSxXQUFXLEdBQUdBO0lBQ3RCRixRQUFRSyxrQkFBa0IsR0FBR0M7SUFFN0IsT0FBT0MsQ0FBQUEsR0FBQUEsZUFBQUEsYUFBQUEsRUFBY1IsT0FBT0M7QUFDOUI7QUFFQSxTQUFTUSwwQkFDUEMsaUJBQW9DO0lBRXBDLE1BQU1DLFdBQWdDLEVBQUU7SUFDeEMsTUFBTSxDQUFDQyxTQUFTQyxlQUFlLEdBQUdIO0lBRWxDLElBQUlJLE9BQU9DLElBQUksQ0FBQ0YsZ0JBQWdCRyxNQUFNLEtBQUssR0FBRztRQUM1QyxPQUFPO1lBQUM7Z0JBQUNKO2FBQVE7U0FBQztJQUNwQjtJQUVBLEtBQUssTUFBTSxDQUFDSyxrQkFBa0JDLGNBQWMsSUFBSUosT0FBT0ssT0FBTyxDQUM1RE4sZ0JBQ0M7UUFDRCxLQUFLLE1BQU1PLGdCQUFnQlgsMEJBQTBCUyxlQUFnQjtZQUNuRSxtRUFBbUU7WUFDbkUsSUFBSU4sWUFBWSxJQUFJO2dCQUNsQkQsU0FBU1UsSUFBSSxDQUFDO29CQUFDSjt1QkFBcUJHO2lCQUFhO1lBQ25ELE9BQU87Z0JBQ0xULFNBQVNVLElB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QkFFQSxNQUFNNkMsZUFBZUMsQ0FBQUEsR0FBQUEsb0JBQUFBLGtCQUFBQSxFQUNuQixzQkFBc0IsYUFFdEI1QjtvQkFHRixJQUFJMkIsY0FBYzt3QkFDaEIsMkNBQTJDO3dCQUMzQ3RFLE1BQU0xQixHQUFHLEdBQUdKLGFBQWFJLEdBQUc7d0JBQzVCMEIsTUFBTXpCLFdBQVcsR0FBR0wsYUFBYUssV0FBVzt3QkFFNUNpRyxDQUFBQSxHQUFBQSx1Q0FBQUEscUNBQUFBLEVBQ0V4RSxPQUNBOUIsY0FDQUM7d0JBRUYsOEVBQThFO3dCQUM5RXhCLFFBQVFxRCxLQUFLLEdBQUdBO29CQUNsQixPQUFPLElBQUlpRSxTQUFTO3dCQUNsQnRILFFBQVFxRCxLQUFLLEdBQUdBO3dCQUNoQiw0RUFBNEU7d0JBQzVFLDhFQUE4RTt3QkFDOUU5QixlQUFlOEI7b0JBQ2pCO29CQUVBLEtBQUssTUFBTXlFLGNBQWN0SCwwQkFBMEJpQixXQUFZO3dCQUM3RCxNQUFNc0csd0JBQXdCOytCQUN6QnZHOytCQUNBc0c7eUJBQ0o7d0JBQ0Qsa0ZBQWtGO3dCQUNsRixJQUNFQyxxQkFBcUIsQ0FBQ0Esc0JBQXNCaEgsTUFBTSxHQUFHLEVBQUUsS0FDdkRpSCxTQUFBQSxtQkFBbUIsRUFDbkI7NEJBQ0EzSCxtQkFBbUJlLElBQUksQ0FBQzJHO3dCQUMxQjtvQkFDRjtnQkFDRjtnQkFFQS9CLGNBQWNRO1lBQ2hCO1FBQ0Y7UUFFQXhHLFFBQVF1RCxXQUFXLEdBQUd5QztRQUN0QmhHLFFBQVFJLFlBQVksR0FBRzBGO1FBQ3ZCOUYsUUFBUUssa0JBQWtCLEdBQUdBO1FBQzdCTCxRQUFRbUQsWUFBWSxHQUFHRjtRQUN2QmpELFFBQVFrRCxZQUFZLEdBQUdBO1FBRXZCLE9BQU8zQyxDQUFBQSxHQUFBQSxlQUFBQSxhQUFBQSxFQUFjUixPQUFPQztJQUM5QixHQUNBLElBQU1EO0FBRVYiLCJzb3VyY2VzIjpbIi9zcmMvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvbmF2aWdhdGUtcmVkdWNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENhY2hlTm9kZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9saWIvYXBwLXJvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHR5cGUge1xuICBGbGlnaHRSb3V0ZXJTdGF0ZSxcbiAgRmxpZ2h0U2VnbWVudFBhdGgsXG59IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL3R5cGVzJ1xuaW1wb3J0IHsgZmV0Y2hTZXJ2ZXJSZXNwb25zZSB9IGZyb20gJy4uL2ZldGNoLXNlcnZlci1yZXNwb25zZSdcbmltcG9ydCB7IGNyZWF0ZUhyZWZGcm9tVXJsIH0gZnJvbSAnLi4vY3JlYXRlLWhyZWYtZnJvbS11cmwnXG5pbXBvcnQgeyBpbnZhbGlkYXRlQ2FjaGVCZWxvd0ZsaWdodFNlZ21lbnRQYXRoIH0gZnJvbSAnLi4vaW52YWxpZGF0ZS1jYWNoZS1iZWxvdy1mbGlnaHQtc2VnbWVudHBhdGgnXG5pbXBvcnQgeyBhcHBseVJvdXRlclN0YXRlUGF0Y2hUb1RyZWUgfSBmcm9tICcuLi9hcHBseS1yb3V0ZXItc3RhdGUtcGF0Y2gtdG8tdHJlZSdcbmltcG9ydCB7IHNob3VsZEhhcmROYXZpZ2F0ZSB9IGZyb20gJy4uL3Nob3VsZC1oYXJkLW5hdmlnYXRlJ1xuaW1wb3J0IHsgaXNOYXZpZ2F0aW5nVG9OZXdSb290TGF5b3V0IH0gZnJvbSAnLi4vaXMtbmF2aWdhdGluZy10by1uZXctcm9vdC1sYXlvdXQnXG5pbXBvcnQge1xuICBQcmVmZXRjaENhY2hlRW50cnlTdGF0dXMsXG4gIHR5cGUgTXV0YWJsZSxcbiAgdHlwZSBOYXZpZ2F0ZUFjdGlvbixcbiAgdHlwZSBSZWFkb25seVJlZHVjZXJTdGF0ZSxcbiAgdHlwZSBSZWR1Y2VyU3RhdGUsXG59IGZyb20gJy4uL3JvdXRlci1yZWR1Y2VyLXR5cGVzJ1xuaW1wb3J0IHsgaGFuZGxlTXV0YWJsZSB9IGZyb20gJy4uL2hhbmRsZS1tdXRhYmxlJ1xuaW1wb3J0IHsgYXBwbHlGbGlnaHREYXRhIH0gZnJvbSAnLi4vYXBwbHktZmxpZ2h0LWRhdGEnXG5pbXBvcnQgeyBwcmVmZXRjaFF1ZXVlIH0gZnJvbSAnLi9wcmVmZXRjaC1yZWR1Y2VyJ1xuaW1wb3J0IHsgY3JlYXRlRW1wdHlDYWNoZU5vZGUgfSBmcm9tICcuLi8uLi9hcHAtcm91dGVyJ1xuaW1wb3J0IHsgREVGQVVMVF9TRUdNRU5UX0tFWSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9saWIvc2VnbWVudCdcbmltcG9ydCB7IGxpc3RlbkZvckR5bmFtaWNSZXF1ZXN0LCBzdGFydFBQUk5hdmlnYXRpb24gfSBmcm9tICcuLi9wcHItbmF2aWdhdGlvbnMnXG5pbXBvcnQge1xuICBnZXRPckNyZWF0ZVByZWZldGNoQ2FjaGVFbnRyeSxcbiAgcHJ1bmVQcmVmZXRjaENhY2hlLFxufSBmcm9tICcuLi9wcmVmZXRjaC1jYWNoZS11dGlscydcbmltcG9ydCB7IGNsZWFyQ2FjaGVOb2RlRGF0YUZvclNlZ21lbnRQYXRoIH0gZnJvbSAnLi4vY2xlYXItY2FjaGUtbm9kZS1kYXRhLWZvci1zZWdtZW50LXBhdGgnXG5pbXBvcnQgeyBoYW5kbGVBbGlhc2VkUHJlZmV0Y2hFbnRyeSB9IGZyb20gJy4uL2FsaWFzZWQtcHJlZmV0Y2gtbmF2aWdhdGlvbnMnXG5pbXBvcnQge1xuICBuYXZpZ2F0ZSBhcyBuYXZpZ2F0ZVVzaW5nU2VnbWVudENhY2hlLFxuICBOYXZpZ2F0aW9uUmVzdWx0VGFnLFxuICB0eXBlIE5hdmlnYXRpb25SZXN1bHQsXG59IGZyb20gJy4uLy4uL3NlZ21lbnQtY2FjaGUnXG5cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVFeHRlcm5hbFVybChcbiAgc3RhdGU6IFJlYWRvbmx5UmVkdWNlclN0YXRlLFxuICBtdXRhYmxlOiBNdXRhYmxlLFxuICB1cmw6IHN0cmluZyxcbiAgcGVuZGluZ1B1c2g6IGJvb2xlYW5cbikge1xuICBtdXRhYmxlLm1wYU5hdmlnYXRpb24gPSB0cnVlXG4gIG11dGFibGUuY2Fub25pY2FsVXJsID0gdXJsXG4gIG11dGFibGUucGVuZGluZ1B1c2ggPSBwZW5kaW5nUHVzaFxuICBtdXRhYmxlLnNjcm9sbGFibGVTZWdtZW50cyA9IHVuZGVmaW5lZFxuXG4gIHJldHVybiBoYW5kbGVNdXRhYmxlKHN0YXRlLCBtdXRhYmxlKVxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVNlZ21lbnRzRnJvbVBhdGNoKFxuICBmbGlnaHRSb3V0ZXJQYXRjaDogRmxpZ2h0Um91dGVyU3RhdGVcbik6IEZsaWdodFNlZ21lbnRQYXRoW10ge1xuICBjb25zdCBzZWdtZW50czogRmxpZ2h0U2VnbWVudFBhdGhbXSA9IFtdXG4gIGNvbnN0IFtzZWdtZW50LCBwYXJhbGxlbFJvdXRlc10gPSBmbGlnaHRSb3V0ZXJQYXRjaFxuXG4gIGlmIChPYmplY3Qua2V5cyhwYXJhbGxlbFJvdXRlcykubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtbc2VnbWVudF1dXG4gIH1cblxuICBmb3IgKGNvbnN0IFtwYXJhbGxlbFJvdXRlS2V5LCBwYXJhbGxlbFJvdXRlXSBvZiBPYmplY3QuZW50cmllcyhcbiAgICBwYXJhbGxlbFJvdXRlc1xuICApKSB7XG4gICAgZm9yIChjb25zdCBjaGlsZFNlZ21lbnQgb2YgZ2VuZXJhdGVTZWdtZW50c0Zyb21QYXRjaChwYXJhbGxlbFJvdXRlKSkge1xuICAgICAgLy8gSWYgdGhlIHNlZ21lbnQgaXMgZW1wdHksIGl0IG1lYW5zIHdlIGFyZSBhdCB0aGUgcm9vdCBvZiB0aGUgdHJlZVxuICAgICAgaWYgKHNlZ21lbnQgPT09ICcnKSB7XG4gICAgICAgIHNlZ21lbnRzLnB1c2goW3BhcmFsbGVsUm91dGVLZXksIC4uLmNoaWxkU2VnbWVudF0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWdtZW50cy5wdXNoKFtzZWdtZW50LCBwYXJhbGxlbFJvdXRlS2V5LCAuLi5jaGlsZFNlZ21lbnRdKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzZWdtZW50c1xufVxuXG5mdW5jdGlvbiB0cmlnZ2VyTGF6eUZldGNoRm9yTGVhZlNlZ21lbnRzKFxuICBuZXdDYWNoZTogQ2FjaGVOb2RlLFxuICBjdXJyZW50Q2FjaGU6IENhY2hlTm9kZSxcbiAgZmxpZ2h0U2VnbWVudFBhdGg6IEZsaWdodFNlZ21lbnRQYXRoLFxuICB0cmVlUGF0Y2g6IEZsaWdodFJvdXRlclN0YXRlXG4pIHtcbiAgbGV0IGFwcGxpZWRQYXRjaCA9IGZhbHNlXG5cbiAgbmV3Q2FjaGUucnNjID0gY3VycmVudENhY2hlLnJzY1xuICBuZXdDYWNoZS5wcmVmZXRjaFJzYyA9IGN1cnJlbnRDYWNoZS5wcmVmZXRjaFJzY1xuICBuZXdDYWNoZS5sb2FkaW5nID0gY3VycmVudENhY2hlLmxvYWRpbmdcbiAgbmV3Q2FjaGUucGFyYWxsZWxSb3V0ZXMgPSBuZXcgTWFwKGN1cnJlbnRDYWNoZS5wYXJhbGxlbFJvdXRlcylcblxuICBjb25zdCBzZWdtZW50UGF0aHNUb0ZpbGwgPSBnZW5lcmF0ZVNlZ21lbnRzRnJvbVBhdGNoKHRyZWVQYXRjaCkubWFwKFxuICAgIChzZWdtZW50KSA9PiBbLi4uZmxpZ2h0U2VnbWVudFBhdGgsIC4uLnNlZ21lbnRdXG4gIClcblxuICBmb3IgKGNvbnN0IHNlZ21lbnRQYXRocyBvZiBzZWdtZW50UGF0aHNUb0ZpbGwpIHtcbiAgICBjbGVhckNhY2hlTm9kZURhdGFGb3JTZWdtZW50UGF0aChuZXdDYWNoZSwgY3VycmVudENhY2hlLCBzZWdtZW50UGF0aHMpXG5cbiAgICBhcHBsaWVkUGF0Y2ggPSB0cnVlXG4gIH1cblxuICByZXR1cm4gYXBwbGllZFBhdGNoXG59XG5cbmZ1bmN0aW9uIGhhbmRsZU5hdmlnYXRpb25SZXN1bHQoXG4gIHVybDogVVJMLFxuICBzdGF0ZTogUmVhZG9ubHlSZWR1Y2VyU3RhdGUsXG4gIG11dGFibGU6IE11dGFibGUsXG4gIHBlbmRpbmdQdXNoOiBib29sZWFuLFxuICByZXN1bHQ6IE5hdmlnYXRpb25SZXN1bHRcbik6IFJlZHVjZXJTdGF0ZSB7XG4gIHN3aXRjaCAocmVzdWx0LnRhZykge1xuICAgIGNhc2UgTmF2aWdhdGlvblJlc3VsdFRhZy5NUEE6IHtcbiAgICAgIC8vIFBlcmZvcm0gYW4gTVBBIG5hdmlnYXRpb24uXG4gICAgICBjb25zdCBuZXdVcmwgPSByZXN1bHQuZGF0YVxuICAgICAgcmV0dXJuIGhhbmRsZUV4dGVybmFsVXJsKHN0YXRlLCBtdXRhYmxlLCBuZXdVcmwsIHBlbmRpbmdQdXNoKVxuICAgIH1cbiAgICBjYXNlIE5hdmlnYXRpb25SZXN1bHRUYWcuTm9PcDoge1xuICAgICAgLy8gVGhlIHNlcnZlciByZXNwb25kZWQgd2l0aCBubyBjaGFuZ2UgdG8gdGhlIGN1cnJlbnQgcGFnZS4gSG93ZXZlciwgaWZcbiAgICAgIC8vIHRoZSBVUkwgY2hhbmdlZCwgd2Ugc3RpbGwgbmVlZCB0byB1cGRhdGUgdGhhdC5cbiAgICAgIGNvbnN0IG5ld0Nhbm9uaWNhbFVybCA9IHJlc3VsdC5kYXRhLmNhbm9uaWNhbFVybFxuICAgICAgbXV0YWJsZS5jYW5vbmljYWxVcmwgPSBuZXdDYW5vbmljYWxVcmxcblxuICAgICAgLy8gQ2hlY2sgaWYgdGhlIG9ubHkgdGhpbmcgdGhhdCBjaGFuZ2VkIHdhcyB0aGUgaGFzaCBmcmFnbWVudC5cbiAgICAgIGNvbnN0IG9sZFVybCA9IG5ldyBVUkwoc3RhdGUuY2Fub25pY2FsVXJsLCB1cmwpXG4gICAgICBjb25zdCBvbmx5SGFzaENoYW5nZSA9XG4gICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gY29tcGFyZSB0aGUgb3JpZ2lucywgYmVjYXVzZSBjbGllbnQtZHJpdmVuXG4gICAgICAgIC8vIG5hdmlnYXRpb25zIGFyZSBhbHdheXMgc2FtZS1vcmlnaW4uXG4gICAgICAgIHVybC5wYXRobmFtZSA9PT0gb2xkVXJsLnBhdGhuYW1lICYmXG4gICAgICAgIHVybC5zZWFyY2ggPT09IG9sZFVybC5zZWFyY2ggJiZcbiAgICAgICAgdXJsLmhhc2ggIT09IG9sZFVybC5oYXNoXG4gICAgICBpZiAob25seUhhc2hDaGFuZ2UpIHtcbiAgICAgICAgLy8gVGhlIG9ubHkgdXBkYXRlZCBwYXJ0IG9mIHRoZSBVUkwgaXMgdGhlIGhhc2guXG4gICAgICAgIG11dGFibGUub25seUhhc2hDaGFuZ2UgPSB0cnVlXG4gICAgICAgIG11dGFibGUuc2hvdWxkU2Nyb2xsID0gcmVzdWx0LmRhdGEuc2hvdWxkU2Nyb2xsXG4gICAgICAgIG11dGFibGUuaGFzaEZyYWdtZW50ID0gdXJsLmhhc2hcbiAgICAgICAgLy8gU2V0dGluZyB0aGlzIHRvIGFuIGVtcHR5IGFycmF5IHRyaWdnZXJzIGEgc2Nyb2xsIGZvciBhbGwgbmV3IGFuZFxuICAgICAgICAvLyB1cGRhdGVkIHNlZ21lbnRzLiBTZWUgYFNjcm9sbEFuZEZvY3VzSGFuZGxlcmAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgICAgbXV0YWJsZS5zY3JvbGxhYmxlU2VnbWVudHMgPSBbXVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gaGFuZGxlTXV0YWJsZShzdGF0ZSwgbXV0YWJsZSlcbiAgICB9XG4gICAgY2FzZSBOYXZpZ2F0aW9uUmVzdWx0VGFnLlN1Y2Nlc3M6IHtcbiAgICAgIC8vIFJlY2VpdmVkIGEgbmV3IHJlc3VsdC5cbiAgICAgIG11dGFibGUuY2FjaGUgPSByZXN1bHQuZGF0YS5jYWNoZU5vZGVcbiAgICAgIG11dGFibGUucGF0Y2hlZFRyZWUgPSByZXN1bHQuZGF0YS5mbGlnaHRSb3V0ZXJTdGF0ZVxuICAgICAgbXV0YWJsZS5jYW5vbmljYWxVcmwgPSByZXN1bHQuZGF0YS5jYW5vbmljYWxVcmxcbiAgICAgIG11dGFibGUuc2Nyb2xsYWJsZVNlZ21lbnRzID0gcmVzdWx0LmRhdGEuc2Nyb2xsYWJsZVNlZ21lbnRzXG4gICAgICBtdXRhYmxlLnNob3VsZFNjcm9sbCA9IHJlc3VsdC5kYXRhLnNob3VsZFNjcm9sbFxuICAgICAgbXV0YWJsZS5oYXNoRnJhZ21lbnQgPSByZXN1bHQuZGF0YS5oYXNoXG4gICAgICByZXR1cm4gaGFuZGxlTXV0YWJsZShzdGF0ZSwgbXV0YWJsZSlcbiAgICB9XG4gICAgY2FzZSBOYXZpZ2F0aW9uUmVzdWx0VGFnLkFzeW5jOiB7XG4gICAgICByZXR1cm4gcmVzdWx0LmRhdGEudGhlbihcbiAgICAgICAgKGFzeW5jUmVzdWx0KSA9PlxuICAgICAgICAgIGhhbmRsZU5hdmlnYXRpb25SZXN1bHQodXJsLCBzdGF0ZSwgbXV0YWJsZSwgcGVuZGluZ1B1c2gsIGFzeW5jUmVzdWx0KSxcbiAgICAgICAgLy8gSWYgdGhlIG5hdmlnYXRpb24gZmFpbGVkLCByZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGUuXG4gICAgICAgIC8vIFRPRE86IFRoaXMgbWF0Y2hlcyB0aGUgY3VycmVudCBiZWhhdmlvciBidXQgd2UgbmVlZCB0byBkbyBzb21ldGhpbmdcbiAgICAgICAgLy8gYmV0dGVyIGhlcmUgaWYgdGhlIG5ldHdvcmsgZmFpbHMuXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICByZXR1cm4gc3RhdGVcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXN1bHQgc2F0aXNmaWVzIG5ldmVyXG4gICAgICByZXR1cm4gc3RhdGVcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hdmlnYXRlUmVkdWNlcihcbiAgc3RhdGU6IFJlYWRvbmx5UmVkdWNlclN0YXRlLFxuICBhY3Rpb246IE5hdmlnYXRlQWN0aW9uXG4pOiBSZWR1Y2VyU3RhdGUge1xuICBjb25zdCB7IHVybCwgaXNFeHRlcm5hbFVybCwgbmF2aWdhdGVUeXBlLCBzaG91bGRTY3JvbGwsIGFsbG93QWxpYXNpbmcgfSA9XG4gICAgYWN0aW9uXG4gIGNvbnN0IG11dGFibGU6IE11dGFibGUgPSB7fVxuICBjb25zdCB7IGhhc2ggfSA9IHVybFxuICBjb25zdCBocmVmID0gY3JlYXRlSHJlZkZyb21VcmwodXJsKVxuICBjb25zdCBwZW5kaW5nUHVzaCA9IG5hdmlnYXRlVHlwZSA9PT0gJ3B1c2gnXG4gIC8vIHdlIHdhbnQgdG8gcHJ1bmUgdGhlIHByZWZldGNoIGNhY2hlIG9uIGV2ZXJ5IG5hdmlnYXRpb24gdG8gYXZvaWQgaXQgZ3Jvd2luZyB0b28gbGFyZ2VcbiAgcHJ1bmVQcmVmZXRjaENhY2hlKHN0YXRlLnByZWZldGNoQ2FjaGUpXG5cbiAgbXV0YWJsZS5wcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZSA9IGZhbHNlXG4gIG11dGFibGUucGVuZGluZ1B1c2ggPSBwZW5kaW5nUHVzaFxuXG4gIGlmIChpc0V4dGVybmFsVXJsKSB7XG4gICAgcmV0dXJuIGhhbmRsZUV4dGVybmFsVXJsKHN0YXRlLCBtdXRhYmxlLCB1cmwudG9TdHJpbmcoKSwgcGVuZGluZ1B1c2gpXG4gIH1cblxuICAvLyBIYW5kbGVzIGNhc2Ugd2hlcmUgYDxtZXRhIGh0dHAtZXF1aXY9XCJyZWZyZXNoXCI+YCB0YWcgaXMgcHJlc2VudCxcbiAgLy8gd2hpY2ggd2lsbCB0cmlnZ2VyIGFuIE1QQSBuYXZpZ2F0aW9uLlxuICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ19fbmV4dC1wYWdlLXJlZGlyZWN0JykpIHtcbiAgICByZXR1cm4gaGFuZGxlRXh0ZXJuYWxVcmwoc3RhdGUsIG11dGFibGUsIGhyZWYsIHBlbmRpbmdQdXNoKVxuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9DTElFTlRfU0VHTUVOVF9DQUNIRSkge1xuICAgIC8vIChWZXJ5IEVhcmx5IEV4cGVyaW1lbnRhbCBGZWF0dXJlKSBTZWdtZW50IENhY2hlXG4gICAgLy9cbiAgICAvLyBCeXBhc3MgdGhlIG5vcm1hbCBwcmVmZXRjaCBjYWNoZSBhbmQgdXNlIHRoZSBuZXcgcGVyLXNlZ21lbnQgY2FjaGVcbiAgICAvLyBpbXBsZW1lbnRhdGlvbiBpbnN0ZWFkLiBUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGlmIFBQUiBpcyBlbmFibGVkLCB0b28uXG4gICAgLy9cbiAgICAvLyBUZW1wb3JhcnkgZ2x1ZSBjb2RlIGJldHdlZW4gdGhlIHJvdXRlciByZWR1Y2VyIGFuZCB0aGUgbmV3IG5hdmlnYXRpb25cbiAgICAvLyBpbXBsZW1lbnRhdGlvbi4gRXZlbnR1YWxseSB3ZSdsbCByZXdyaXRlIHRoZSByb3V0ZXIgcmVkdWNlciB0byBhXG4gICAgLy8gc3RhdGUgbWFjaGluZS5cbiAgICBjb25zdCByZXN1bHQgPSBuYXZpZ2F0ZVVzaW5nU2VnbWVudENhY2hlKFxuICAgICAgdXJsLFxuICAgICAgc3RhdGUuY2FjaGUsXG4gICAgICBzdGF0ZS50cmVlLFxuICAgICAgc3RhdGUubmV4dFVybCxcbiAgICAgIHNob3VsZFNjcm9sbFxuICAgIClcbiAgICByZXR1cm4gaGFuZGxlTmF2aWdhdGlvblJlc3VsdCh1cmwsIHN0YXRlLCBtdXRhYmxlLCBwZW5kaW5nUHVzaCwgcmVzdWx0KVxuICB9XG5cbiAgY29uc3QgcHJlZmV0Y2hWYWx1ZXMgPSBnZXRPckNyZWF0ZVByZWZldGNoQ2FjaGVFbnRyeSh7XG4gICAgdXJsLFxuICAgIG5leHRVcmw6IHN0YXRlLm5leHRVcmwsXG4gICAgdHJlZTogc3RhdGUudHJlZSxcbiAgICBwcmVmZXRjaENhY2hlOiBzdGF0ZS5wcmVmZXRjaENhY2hlLFxuICAgIGFsbG93QWxpYXNpbmcsXG4gIH0pXG4gIGNvbnN0IHsgdHJlZUF0VGltZU9mUHJlZmV0Y2gsIGRhdGEgfSA9IHByZWZldGNoVmFsdWVzXG5cbiAgcHJlZmV0Y2hRdWV1ZS5idW1wKGRhdGEpXG5cbiAgcmV0dXJuIGRhdGEudGhlbihcbiAgICAoeyBmbGlnaHREYXRhLCBjYW5vbmljYWxVcmw6IGNhbm9uaWNhbFVybE92ZXJyaWRlLCBwb3N0cG9uZWQgfSkgPT4ge1xuICAgICAgY29uc3QgbmF2aWdhdGVkQXQgPSBEYXRlLm5vdygpXG5cbiAgICAgIGxldCBpc0ZpcnN0UmVhZCA9IGZhbHNlXG4gICAgICAvLyB3ZSBvbmx5IHdhbnQgdG8gbWFyayB0aGlzIG9uY2VcbiAgICAgIGlmICghcHJlZmV0Y2hWYWx1ZXMubGFzdFVzZWRUaW1lKSB7XG4gICAgICAgIC8vIGltcG9ydGFudDogd2Ugc2hvdWxkIG9ubHkgbWFyayB0aGUgY2FjaGUgbm9kZSBhcyBkaXJ0eSBhZnRlciB3ZSB1bnN1c3BlbmQgZnJvbSB0aGUgY2FsbCBhYm92ZVxuICAgICAgICBwcmVmZXRjaFZhbHVlcy5sYXN0VXNlZFRpbWUgPSBuYXZpZ2F0ZWRBdFxuICAgICAgICBpc0ZpcnN0UmVhZCA9IHRydWVcbiAgICAgIH1cblxuICAgICAgaWYgKHByZWZldGNoVmFsdWVzLmFsaWFzZWQpIHtcbiAgICAgICAgLy8gV2hlbiBhbGlhcyBpcyBlbmFibGVkLCBzZWFyY2ggcGFyYW0gbWF5IG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgY2Fub25pY2FsVXJsLlxuICAgICAgICAvLyBCdXQgd2Ugd2FudCB0byBzZXQgdXJsIHRvIGNhbm9uaWNhbFVybCBzbyB0aGF0IHdlIHVzZSByZWRpcmVjdGVkIHBhdGggZm9yIGZldGNoaW5nIGR5bmFtaWMgZGF0YS5cbiAgICAgICAgY29uc3QgdXJsV2l0aENhbm9uaWNhbFBhdGhuYW1lID0gbmV3IFVSTCh1cmwuaHJlZilcbiAgICAgICAgaWYgKGNhbm9uaWNhbFVybE92ZXJyaWRlKSB7XG4gICAgICAgICAgdXJsV2l0aENhbm9uaWNhbFBhdGhuYW1lLnBhdGhuYW1lID0gY2Fub25pY2FsVXJsT3ZlcnJpZGUucGF0aG5hbWVcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGhhbmRsZUFsaWFzZWRQcmVmZXRjaEVudHJ5KFxuICAgICAgICAgIG5hdmlnYXRlZEF0LFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGZsaWdodERhdGEsXG4gICAgICAgICAgdXJsV2l0aENhbm9uaWNhbFBhdGhuYW1lLFxuICAgICAgICAgIG11dGFibGVcbiAgICAgICAgKVxuXG4gICAgICAgIC8vIFdlIGRpZG4ndCByZXR1cm4gbmV3IHJvdXRlciBzdGF0ZSBiZWNhdXNlIHdlIGRpZG4ndCBhcHBseSB0aGUgYWxpYXNlZCBlbnRyeSBmb3Igc29tZSByZWFzb24uXG4gICAgICAgIC8vIFdlJ2xsIHJlLWludm9rZSB0aGUgbmF2aWdhdGlvbiBoYW5kbGVyIGJ1dCBlbnN1cmUgdGhhdCB3ZSBkb24ndCBhdHRlbXB0IHRvIHVzZSB0aGUgYWxpYXNlZCBlbnRyeS4gVGhpc1xuICAgICAgICAvLyB3aWxsIGNyZWF0ZSBhbiBvbi1kZW1hbmQgcHJlZmV0Y2ggZW50cnkuXG4gICAgICAgIGlmIChyZXN1bHQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgcmV0dXJuIG5hdmlnYXRlUmVkdWNlcihzdGF0ZSwgeyAuLi5hY3Rpb24sIGFsbG93QWxpYXNpbmc6IGZhbHNlIH0pXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSBjYXNlIHdoZW4gbmF2aWdhdGluZyB0byBwYWdlIGluIGBwYWdlc2AgZnJvbSBgYXBwYFxuICAgICAgaWYgKHR5cGVvZiBmbGlnaHREYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gaGFuZGxlRXh0ZXJuYWxVcmwoc3RhdGUsIG11dGFibGUsIGZsaWdodERhdGEsIHBlbmRpbmdQdXNoKVxuICAgICAgfVxuXG4gICAgICBjb25zdCB1cGRhdGVkQ2Fub25pY2FsVXJsID0gY2Fub25pY2FsVXJsT3ZlcnJpZGVcbiAgICAgICAgPyBjcmVhdGVIcmVmRnJvbVVybChjYW5vbmljYWxVcmxPdmVycmlkZSlcbiAgICAgICAgOiBocmVmXG5cbiAgICAgIGNvbnN0IG9ubHlIYXNoQ2hhbmdlID1cbiAgICAgICAgISFoYXNoICYmXG4gICAgICAgIHN0YXRlLmNhbm9uaWNhbFVybC5zcGxpdCgnIycsIDEpWzBdID09PVxuICAgICAgICAgIHVwZGF0ZWRDYW5vbmljYWxVcmwuc3BsaXQoJyMnLCAxKVswXVxuXG4gICAgICAvLyBJZiBvbmx5IHRoZSBoYXNoIGhhcyBjaGFuZ2VkLCB0aGUgc2VydmVyIGhhc24ndCBzZW50IHVzIGFueSBuZXcgZGF0YS4gV2UgY2FuIGp1c3QgdXBkYXRlXG4gICAgICAvLyB0aGUgbXV0YWJsZSBwcm9wZXJ0aWVzIHJlc3BvbnNpYmxlIGZvciBVUkwgYW5kIHNjcm9sbCBoYW5kbGluZyBhbmQgcmV0dXJuIGVhcmx5LlxuICAgICAgaWYgKG9ubHlIYXNoQ2hhbmdlKSB7XG4gICAgICAgIG11dGFibGUub25seUhhc2hDaGFuZ2UgPSB0cnVlXG4gICAgICAgIG11dGFibGUuY2Fub25pY2FsVXJsID0gdXBkYXRlZENhbm9uaWNhbFVybFxuICAgICAgICBtdXRhYmxlLnNob3VsZFNjcm9sbCA9IHNob3VsZFNjcm9sbFxuICAgICAgICBtdXRhYmxlLmhhc2hGcmFnbWVudCA9IGhhc2hcbiAgICAgICAgbXV0YWJsZS5zY3JvbGxhYmxlU2VnbWVudHMgPSBbXVxuICAgICAgICByZXR1cm4gaGFuZGxlTXV0YWJsZShzdGF0ZSwgbXV0YWJsZSlcbiAgICAgIH1cblxuICAgICAgbGV0IGN1cnJlbnRUcmVlID0gc3RhdGUudHJlZVxuICAgICAgbGV0IGN1cnJlbnRDYWNoZSA9IHN0YXRlLmNhY2hlXG4gICAgICBsZXQgc2Nyb2xsYWJsZVNlZ21lbnRzOiBGbGlnaHRTZWdtZW50UGF0aFtdID0gW11cbiAgICAgIGZvciAoY29uc3Qgbm9ybWFsaXplZEZsaWdodERhdGEgb2YgZmxpZ2h0RGF0YSkge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgcGF0aFRvU2VnbWVudDogZmxpZ2h0U2VnbWVudFBhdGgsXG4gICAgICAgICAgc2VlZERhdGEsXG4gICAgICAgICAgaGVhZCxcbiAgICAgICAgICBpc0hlYWRQYXJ0aWFsLFxuICAgICAgICAgIGlzUm9vdFJlbmRlcixcbiAgICAgICAgfSA9IG5vcm1hbGl6ZWRGbGlnaHREYXRhXG4gICAgICAgIGxldCB0cmVlUGF0Y2ggPSBub3JtYWxpemVkRmxpZ2h0RGF0YS50cmVlXG5cbiAgICAgICAgLy8gVE9ETy1BUFA6IHJlbW92ZSAnJ1xuICAgICAgICBjb25zdCBmbGlnaHRTZWdtZW50UGF0aFdpdGhMZWFkaW5nRW1wdHkgPSBbJycsIC4uLmZsaWdodFNlZ21lbnRQYXRoXVxuXG4gICAgICAgIC8vIENyZWF0ZSBuZXcgdHJlZSBiYXNlZCBvbiB0aGUgZmxpZ2h0U2VnbWVudFBhdGggYW5kIHJvdXRlciBzdGF0ZSBwYXRjaFxuICAgICAgICBsZXQgbmV3VHJlZSA9IGFwcGx5Um91dGVyU3RhdGVQYXRjaFRvVHJlZShcbiAgICAgICAgICAvLyBUT0RPLUFQUDogcmVtb3ZlICcnXG4gICAgICAgICAgZmxpZ2h0U2VnbWVudFBhdGhXaXRoTGVhZGluZ0VtcHR5LFxuICAgICAgICAgIGN1cnJlbnRUcmVlLFxuICAgICAgICAgIHRyZWVQYXRjaCxcbiAgICAgICAgICBocmVmXG4gICAgICAgIClcblxuICAgICAgICAvLyBJZiB0aGUgdHJlZSBwYXRjaCBjYW4ndCBiZSBhcHBsaWVkIHRvIHRoZSBjdXJyZW50IHRyZWUgdGhlbiB3ZSB1c2UgdGhlIHRyZWUgYXQgdGltZSBvZiBwcmVmZXRjaFxuICAgICAgICAvLyBUT0RPLUFQUDogVGhpcyBzaG91bGQgaW5zdGVhZCBmaWxsIGluIHRoZSBtaXNzaW5nIHBpZWNlcyBpbiBgY3VycmVudFRyZWVgIHdpdGggdGhlIGRhdGEgZnJvbSBgdHJlZUF0VGltZU9mUHJlZmV0Y2hgLCB0aGVuIGFwcGx5IHRoZSBwYXRjaC5cbiAgICAgICAgaWYgKG5ld1RyZWUgPT09IG51bGwpIHtcbiAgICAgICAgICBuZXdUcmVlID0gYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9UcmVlKFxuICAgICAgICAgICAgLy8gVE9ETy1BUFA6IHJlbW92ZSAnJ1xuICAgICAgICAgICAgZmxpZ2h0U2VnbWVudFBhdGhXaXRoTGVhZGluZ0VtcHR5LFxuICAgICAgICAgICAgdHJlZUF0VGltZU9mUHJlZmV0Y2gsXG4gICAgICAgICAgICB0cmVlUGF0Y2gsXG4gICAgICAgICAgICBocmVmXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5ld1RyZWUgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAvLyBUaGlzIGlzIGp1c3QgYSBwYXJhbm9pZCBjaGVjay4gV2hlbiBhIHJvdXRlIGlzIFBQUmVkLCB0aGUgc2VydmVyXG4gICAgICAgICAgICAvLyB3aWxsIHNlbmQgYmFjayBhIHN0YXRpYyByZXNwb25zZSB0aGF0J3MgcmVuZGVyZWQgZnJvbVxuICAgICAgICAgICAgLy8gdGhlIHJvb3QuIElmIGZvciBzb21lIHJlYXNvbiBpdCBkb2Vzbid0LCB3ZSBmYWxsIGJhY2sgdG8gdGhlXG4gICAgICAgICAgICAvLyBub24tUFBSIGltcGxlbWVudGF0aW9uLlxuICAgICAgICAgICAgLy8gVE9ETzogV2Ugc2hvdWxkIGdldCByaWQgb2YgdGhlIGVsc2UgYnJhbmNoIGFuZCBkbyBhbGwgbmF2aWdhdGlvbnNcbiAgICAgICAgICAgIC8vIHZpYSBzdGFydFBQUk5hdmlnYXRpb24uIFRoZSBjdXJyZW50IHN0cnVjdHVyZSBpcyBqdXN0XG4gICAgICAgICAgICAvLyBhbiBpbmNyZW1lbnRhbCBzdGVwLlxuICAgICAgICAgICAgc2VlZERhdGEgJiZcbiAgICAgICAgICAgIGlzUm9vdFJlbmRlciAmJlxuICAgICAgICAgICAgcG9zdHBvbmVkXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCB0YXNrID0gc3RhcnRQUFJOYXZpZ2F0aW9uKFxuICAgICAgICAgICAgICBuYXZpZ2F0ZWRBdCxcbiAgICAgICAgICAgICAgY3VycmVudENhY2hlLFxuICAgICAgICAgICAgICBjdXJyZW50VHJlZSxcbiAgICAgICAgICAgICAgdHJlZVBhdGNoLFxuICAgICAgICAgICAgICBzZWVkRGF0YSxcbiAgICAgICAgICAgICAgaGVhZCxcbiAgICAgICAgICAgICAgaXNIZWFkUGFydGlhbCxcbiAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgIHNjcm9sbGFibGVTZWdtZW50c1xuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBpZiAodGFzayAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBpZiAodGFzay5yb3V0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIERldGVjdGVkIGEgY2hhbmdlIHRvIHRoZSByb290IGxheW91dC4gUGVyZm9ybSBhbiBmdWxsLVxuICAgICAgICAgICAgICAgIC8vIHBhZ2UgbmF2aWdhdGlvbi5cbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlRXh0ZXJuYWxVcmwoc3RhdGUsIG11dGFibGUsIGhyZWYsIHBlbmRpbmdQdXNoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIFVzZSB0aGUgdHJlZSBjb21wdXRlZCBieSBzdGFydFBQUk5hdmlnYXRpb24gaW5zdGVhZFxuICAgICAgICAgICAgICAvLyBvZiB0aGUgb25lIGNvbXB1dGVkIGJ5IGFwcGx5Um91dGVyU3RhdGVQYXRjaFRvVHJlZS5cbiAgICAgICAgICAgICAgLy8gVE9ETzogV2Ugc2hvdWxkIHJlbW92ZSBhcHBseVJvdXRlclN0YXRlUGF0Y2hUb1RyZWVcbiAgICAgICAgICAgICAgLy8gZnJvbSB0aGUgUFBSIHBhdGggZW50aXJlbHkuXG4gICAgICAgICAgICAgIGNvbnN0IHBhdGNoZWRSb3V0ZXJTdGF0ZTogRmxpZ2h0Um91dGVyU3RhdGUgPSB0YXNrLnJvdXRlXG4gICAgICAgICAgICAgIG5ld1RyZWUgPSBwYXRjaGVkUm91dGVyU3RhdGVcblxuICAgICAgICAgICAgICBjb25zdCBuZXdDYWNoZSA9IHRhc2subm9kZVxuICAgICAgICAgICAgICBpZiAobmV3Q2FjaGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBXZSd2ZSBjcmVhdGVkIGEgbmV3IENhY2hlIE5vZGUgdHJlZSB0aGF0IGNvbnRhaW5zIGEgcHJlZmV0Y2hlZFxuICAgICAgICAgICAgICAgIC8vIHZlcnNpb24gb2YgdGhlIG5leHQgcGFnZS4gVGhpcyBjYW4gYmUgcmVuZGVyZWQgaW5zdGFudGx5LlxuICAgICAgICAgICAgICAgIG11dGFibGUuY2FjaGUgPSBuZXdDYWNoZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGR5bmFtaWNSZXF1ZXN0VHJlZSA9IHRhc2suZHluYW1pY1JlcXVlc3RUcmVlXG4gICAgICAgICAgICAgIGlmIChkeW5hbWljUmVxdWVzdFRyZWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgcHJlZmV0Y2hlZCB0cmVlIGhhcyBkeW5hbWljIGhvbGVzIGluIGl0LiBXZSBpbml0aWF0ZSBhXG4gICAgICAgICAgICAgICAgLy8gZHluYW1pYyByZXF1ZXN0IHRvIGZpbGwgdGhlbSBpbi5cbiAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgIC8vIERvIG5vdCBibG9jayBvbiB0aGUgcmVzdWx0LiBXZSdsbCBpbW1lZGlhdGVseSByZW5kZXIgdGhlIENhY2hlXG4gICAgICAgICAgICAgICAgLy8gTm9kZSB0cmVlIGFuZCBzdXNwZW5kIG9uIHRoZSBkeW5hbWljIHBhcnRzLiBXaGVuIHRoZSByZXF1ZXN0XG4gICAgICAgICAgICAgICAgLy8gY29tZXMgaW4sIHdlJ2xsIGZpbGwgaW4gbWlzc2luZyBkYXRhIGFuZCBwaW5nIFJlYWN0IHRvXG4gICAgICAgICAgICAgICAgLy8gcmUtcmVuZGVyLiBVbmxpa2UgdGhlIGxhenkgZmV0Y2hpbmcgbW9kZWwgaW4gdGhlIG5vbi1QUFJcbiAgICAgICAgICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiwgdGhpcyBpcyBtb2RlbGVkIGFzIGEgc2luZ2xlIFJlYWN0IHVwZGF0ZSArXG4gICAgICAgICAgICAgICAgLy8gc3RyZWFtaW5nLCByYXRoZXIgdGhhbiBtdWx0aXBsZSB0b3AtbGV2ZWwgdXBkYXRlcy4gKEhvd2V2ZXIsXG4gICAgICAgICAgICAgICAgLy8gZXZlbiBpbiB0aGUgbmV3IG1vZGVsLCB3ZSdsbCBzdGlsbCBuZWVkIHRvIHNvbWV0aW1lcyB1cGRhdGUgdGhlXG4gICAgICAgICAgICAgICAgLy8gcm9vdCBtdWx0aXBsZSB0aW1lcyBwZXIgbmF2aWdhdGlvbiwgbGlrZSBpZiB0aGUgc2VydmVyIHNlbmRzIHVzXG4gICAgICAgICAgICAgICAgLy8gYSBkaWZmZXJlbnQgcmVzcG9uc2UgdGhhbiB3ZSBleHBlY3RlZC4gRm9yIG5vdywgd2UgcmV2ZXJ0IGJhY2tcbiAgICAgICAgICAgICAgICAvLyB0byB0aGUgbGF6eSBmZXRjaGluZyBtZWNoYW5pc20gaW4gdGhhdCBjYXNlLilcbiAgICAgICAgICAgICAgICBjb25zdCBkeW5hbWljUmVxdWVzdCA9IGZldGNoU2VydmVyUmVzcG9uc2UoXG4gICAgICAgICAgICAgICAgICBuZXcgVVJMKHVwZGF0ZWRDYW5vbmljYWxVcmwsIHVybC5vcmlnaW4pLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBmbGlnaHRSb3V0ZXJTdGF0ZTogZHluYW1pY1JlcXVlc3RUcmVlLFxuICAgICAgICAgICAgICAgICAgICBuZXh0VXJsOiBzdGF0ZS5uZXh0VXJsLFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICAgIGxpc3RlbkZvckR5bmFtaWNSZXF1ZXN0KHRhc2ssIGR5bmFtaWNSZXF1ZXN0KVxuICAgICAgICAgICAgICAgIC8vIFdlIHN0b3JlIHRoZSBkeW5hbWljIHJlcXVlc3Qgb24gdGhlIGBsYXp5RGF0YWAgcHJvcGVydHkgb2YgdGhlIENhY2hlTm9kZVxuICAgICAgICAgICAgICAgIC8vIGJlY2F1c2Ugd2UncmUgbm90IGdvaW5nIHRvIGF3YWl0IHRoZSBkeW5hbWljIHJlcXVlc3QgaGVyZS4gU2luY2Ugd2UncmUgbm90IGJsb2NraW5nXG4gICAgICAgICAgICAgICAgLy8gb24gdGhlIGR5bmFtaWMgcmVxdWVzdCwgYGxheW91dC1yb3V0ZXJgIHdpbGxcbiAgICAgICAgICAgICAgICAvLyB0YXNrLm5vZGUubGF6eURhdGEgPSBkeW5hbWljUmVxdWVzdFxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBwcmVmZXRjaGVkIHRyZWUgZG9lcyBub3QgY29udGFpbiBkeW5hbWljIGhvbGVzIOKAlCBpdCdzXG4gICAgICAgICAgICAgICAgLy8gZnVsbHkgc3RhdGljLiBXZSBjYW4gc2tpcCB0aGUgZHluYW1pYyByZXF1ZXN0LlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBOb3RoaW5nIGNoYW5nZWQsIHNvIHJldXNlIHRoZSBvbGQgY2FjaGUuXG4gICAgICAgICAgICAgIC8vIFRPRE86IFdoYXQgaWYgdGhlIGhlYWQgY2hhbmdlZCBidXQgbm90IGFueSBvZiB0aGUgc2VnbWVudCBkYXRhP1xuICAgICAgICAgICAgICAvLyBJcyB0aGF0IHBvc3NpYmxlPyBJZiBzbywgd2Ugc2hvdWxkIGNsb25lIHRoZSB3aG9sZSB0cmVlIGFuZFxuICAgICAgICAgICAgICAvLyB1cGRhdGUgdGhlIGhlYWQuXG4gICAgICAgICAgICAgIG5ld1RyZWUgPSB0cmVlUGF0Y2hcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVGhlIHN0YXRpYyByZXNwb25zZSBkb2VzIG5vdCBpbmNsdWRlIGFueSBkeW5hbWljIGhvbGVzLCBzb1xuICAgICAgICAgICAgLy8gdGhlcmUncyBubyBuZWVkIHRvIGRvIGEgc2Vjb25kIHJlcXVlc3QuXG4gICAgICAgICAgICAvLyBUT0RPOiBBcyBhbiBpbmNyZW1lbnRhbCBzdGVwIHRoaXMganVzdCByZXZlcnRzIGJhY2sgdG8gdGhlXG4gICAgICAgICAgICAvLyBub24tUFBSIGltcGxlbWVudGF0aW9uLiBXZSBjYW4gc2ltcGxpZnkgdGhpcyBicmFuY2ggZnVydGhlcixcbiAgICAgICAgICAgIC8vIGdpdmVuIHRoYXQgUFBSIHByZWZldGNoZXMgYXJlIGFsd2F5cyBzdGF0aWMgYW5kIHJldHVybiB0aGUgd2hvbGVcbiAgICAgICAgICAgIC8vIHRyZWUuIE9yIGluIHRoZSBtZWFudGltZSB3ZSBjb3VsZCBmYWN0b3IgaXQgb3V0IGludG8gYVxuICAgICAgICAgICAgLy8gc2VwYXJhdGUgZnVuY3Rpb24uXG5cbiAgICAgICAgICAgIGlmIChpc05hdmlnYXRpbmdUb05ld1Jvb3RMYXlvdXQoY3VycmVudFRyZWUsIG5ld1RyZWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGVFeHRlcm5hbFVybChzdGF0ZSwgbXV0YWJsZSwgaHJlZiwgcGVuZGluZ1B1c2gpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNhY2hlOiBDYWNoZU5vZGUgPSBjcmVhdGVFbXB0eUNhY2hlTm9kZSgpXG4gICAgICAgICAgICBsZXQgYXBwbGllZCA9IGZhbHNlXG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgcHJlZmV0Y2hWYWx1ZXMuc3RhdHVzID09PSBQcmVmZXRjaENhY2hlRW50cnlTdGF0dXMuc3RhbGUgJiZcbiAgICAgICAgICAgICAgIWlzRmlyc3RSZWFkXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgLy8gV2hlbiB3ZSBoYXZlIGEgc3RhbGUgcHJlZmV0Y2ggZW50cnksIHdlIG9ubHkgd2FudCB0byByZS11c2UgdGhlIGxvYWRpbmcgc3RhdGUgb2YgdGhlIHJvdXRlIHdlJ3JlIG5hdmlnYXRpbmcgdG8sIHRvIHN1cHBvcnQgaW5zdGFudCBsb2FkaW5nIG5hdmlnYXRpb25zXG4gICAgICAgICAgICAgIC8vIHRoaXMgd2lsbCB0cmlnZ2VyIGEgbGF6eSBmZXRjaCBmb3IgdGhlIGFjdHVhbCBwYWdlIGRhdGEgYnkgbnVsbGluZyB0aGUgYHJzY2AgYW5kIGBwcmVmZXRjaFJzY2AgdmFsdWVzIGZvciBwYWdlIGRhdGEsXG4gICAgICAgICAgICAgIC8vIHdoaWxlIGNvcHlpbmcgb3ZlciB0aGUgYGxvYWRpbmdgIGZvciB0aGUgc2VnbWVudCB0aGF0IGNvbnRhaW5zIHRoZSBwYWdlIGRhdGEuXG4gICAgICAgICAgICAgIC8vIFdlIG9ubHkgZG8gdGhpcyBvbiBzdWJzZXF1ZW50IHJlYWRzLCBhcyBvdGhlcndpc2UgdGhlcmUnZCBiZSBubyBsb2FkaW5nIGRhdGEgdG8gcmUtdXNlLlxuXG4gICAgICAgICAgICAgIC8vIFdlIHNraXAgdGhpcyBicmFuY2ggaWYgb25seSB0aGUgaGFzaCBmcmFnbWVudCBoYXMgY2hhbmdlZCwgYXMgd2UgZG9uJ3Qgd2FudCB0byB0cmlnZ2VyIGEgbGF6eSBmZXRjaCBpbiB0aGF0IGNhc2VcbiAgICAgICAgICAgICAgYXBwbGllZCA9IHRyaWdnZXJMYXp5RmV0Y2hGb3JMZWFmU2VnbWVudHMoXG4gICAgICAgICAgICAgICAgY2FjaGUsXG4gICAgICAgICAgICAgICAgY3VycmVudENhY2hlLFxuICAgICAgICAgICAgICAgIGZsaWdodFNlZ21lbnRQYXRoLFxuICAgICAgICAgICAgICAgIHRyZWVQYXRjaFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC8vIHNpbmNlIHdlIHJlLXVzZWQgdGhlIHN0YWxlIGNhY2hlJ3MgbG9hZGluZyBzdGF0ZSAmIHJlZnJlc2hlZCB0aGUgZGF0YSxcbiAgICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBgbGFzdFVzZWRUaW1lYCBzbyB0aGF0IGl0IGNhbiBjb250aW51ZSB0byBiZSByZS11c2VkIGZvciB0aGUgbmV4dCAzMHNcbiAgICAgICAgICAgICAgcHJlZmV0Y2hWYWx1ZXMubGFzdFVzZWRUaW1lID0gbmF2aWdhdGVkQXRcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGFwcGxpZWQgPSBhcHBseUZsaWdodERhdGEoXG4gICAgICAgICAgICAgICAgbmF2aWdhdGVkQXQsXG4gICAgICAgICAgICAgICAgY3VycmVudENhY2hlLFxuICAgICAgICAgICAgICAgIGNhY2hlLFxuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRGbGlnaHREYXRhLFxuICAgICAgICAgICAgICAgIHByZWZldGNoVmFsdWVzXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgaGFyZE5hdmlnYXRlID0gc2hvdWxkSGFyZE5hdmlnYXRlKFxuICAgICAgICAgICAgICAvLyBUT0RPLUFQUDogcmVtb3ZlICcnXG4gICAgICAgICAgICAgIGZsaWdodFNlZ21lbnRQYXRoV2l0aExlYWRpbmdFbXB0eSxcbiAgICAgICAgICAgICAgY3VycmVudFRyZWVcbiAgICAgICAgICAgIClcblxuICAgICAgICAgICAgaWYgKGhhcmROYXZpZ2F0ZSkge1xuICAgICAgICAgICAgICAvLyBDb3B5IHJzYyBmb3IgdGhlIHJvb3Qgbm9kZSBvZiB0aGUgY2FjaGUuXG4gICAgICAgICAgICAgIGNhY2hlLnJzYyA9IGN1cnJlbnRDYWNoZS5yc2NcbiAgICAgICAgICAgICAgY2FjaGUucHJlZmV0Y2hSc2MgPSBjdXJyZW50Q2FjaGUucHJlZmV0Y2hSc2NcblxuICAgICAgICAgICAgICBpbnZhbGlkYXRlQ2FjaGVCZWxvd0ZsaWdodFNlZ21lbnRQYXRoKFxuICAgICAgICAgICAgICAgIGNhY2hlLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRDYWNoZSxcbiAgICAgICAgICAgICAgICBmbGlnaHRTZWdtZW50UGF0aFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGUgZXhpc3RpbmcgY2FjaGUgdmFsdWUgaXMgdXNlZCB3aGVuIHRoZSBjYWNoZSB3YXMgbm90IGludmFsaWRhdGVkLlxuICAgICAgICAgICAgICBtdXRhYmxlLmNhY2hlID0gY2FjaGVcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYXBwbGllZCkge1xuICAgICAgICAgICAgICBtdXRhYmxlLmNhY2hlID0gY2FjaGVcbiAgICAgICAgICAgICAgLy8gSWYgd2UgYXBwbGllZCB0aGUgY2FjaGUsIHdlIHVwZGF0ZSB0aGUgXCJjdXJyZW50IGNhY2hlXCIgdmFsdWUgc28gYW55IG90aGVyXG4gICAgICAgICAgICAgIC8vIHNlZ21lbnRzIGluIHRoZSBGbGlnaHREYXRhUGF0aCB3aWxsIGJlIGFibGUgdG8gcmVmZXJlbmNlIHRoZSB1cGRhdGVkIGNhY2hlLlxuICAgICAgICAgICAgICBjdXJyZW50Q2FjaGUgPSBjYWNoZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHN1YlNlZ21lbnQgb2YgZ2VuZXJhdGVTZWdtZW50c0Zyb21QYXRjaCh0cmVlUGF0Y2gpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGFibGVTZWdtZW50UGF0aCA9IFtcbiAgICAgICAgICAgICAgICAuLi5mbGlnaHRTZWdtZW50UGF0aCxcbiAgICAgICAgICAgICAgICAuLi5zdWJTZWdtZW50LFxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgdGhlIF9fREVGQVVMVF9fIHBhdGhzIGFzIHRoZXkgc2hvdWxkbid0IGJlIHNjcm9sbGVkIHRvIGluIHRoaXMgY2FzZS5cbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHNjcm9sbGFibGVTZWdtZW50UGF0aFtzY3JvbGxhYmxlU2VnbWVudFBhdGgubGVuZ3RoIC0gMV0gIT09XG4gICAgICAgICAgICAgICAgREVGQVVMVF9TRUdNRU5UX0tFWVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBzY3JvbGxhYmxlU2VnbWVudHMucHVzaChzY3JvbGxhYmxlU2VnbWVudFBhdGgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjdXJyZW50VHJlZSA9IG5ld1RyZWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBtdXRhYmxlLnBhdGNoZWRUcmVlID0gY3VycmVudFRyZWVcbiAgICAgIG11dGFibGUuY2Fub25pY2FsVXJsID0gdXBkYXRlZENhbm9uaWNhbFVybFxuICAgICAgbXV0YWJsZS5zY3JvbGxhYmxlU2VnbWVudHMgPSBzY3JvbGxhYmxlU2VnbWVudHNcbiAgICAgIG11dGFibGUuaGFzaEZyYWdtZW50ID0gaGFzaFxuICAgICAgbXV0YWJsZS5zaG91bGRTY3JvbGwgPSBzaG91bGRTY3JvbGxcblxuICAgICAgcmV0dXJuIGhhbmRsZU11dGFibGUoc3RhdGUsIG11dGFibGUpXG4gICAgfSxcbiAgICAoKSA9PiBzdGF0ZVxuICApXG59XG4iXSwibmFtZXMiOlsiaGFuZGxlRXh0ZXJuYWxVcmwiLCJuYXZpZ2F0ZVJlZHVjZXIiLCJzdGF0ZSIsIm11dGFibGUiLCJ1cmwiLCJwZW5kaW5nUHVzaCIsIm1wYU5hdmlnYXRpb24iLCJjYW5vbmljYWxVcmwiLCJzY3JvbGxhYmxlU2VnbWVudHMiLCJ1bmRlZmluZWQiLCJoYW5kbGVNdXRhYmxlIiwiZ2VuZXJhdGVTZWdtZW50c0Zyb21QYXRjaCIsImZsaWdodFJvdXRlclBhdGNoIiwic2VnbWVudHMiLCJzZWdtZW50IiwicGFyYWxsZWxSb3V0ZXMiLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwicGFyYWxsZWxSb3V0ZUtleSIsInBhcmFsbGVsUm91dGUiLCJlbnRyaWVzIiwiY2hpbGRTZWdtZW50IiwicHVzaCIsInRyaWdnZXJMYXp5RmV0Y2hGb3JMZWFmU2VnbWVudHMiLCJuZXdDYWNoZSIsImN1cnJlbnRDYWNoZSIsImZsaWdodFNlZ21lbnRQYXRoIiwidHJlZVBhdGNoIiwiYXBwbGllZFBhdGNoIiwicnNjIiwicHJlZmV0Y2hSc2MiLCJsb2FkaW5nIiwiTWFwIiwic2VnbWVudFBhdGhzVG9GaWxsIiwibWFwIiwic2VnbWVudFBhdGhzIiwiY2xlYXJDYWNoZU5vZGVEYXRhRm9yU2VnbWVudFBhdGgiLCJoYW5kbGVOYXZpZ2F0aW9uUmVzdWx0IiwicmVzdWx0IiwidGFnIiwiTmF2aWdhdGlvblJlc3VsdFRhZyIsIk1QQSIsIm5ld1VybCIsImRhdGEiLCJOb09wIiwibmV3Q2Fub25pY2FsVXJsIiwib2xkVXJsIiwiVVJMIiwib25seUhhc2hDaGFuZ2UiLCJwYXRobmFtZSIsInNlYXJjaCIsImhhc2giLCJzaG91bGRTY3JvbGwiLCJoYXNoRnJhZ21lbnQiLCJTdWNjZXNzIiwiY2FjaGUiLCJjYWNoZU5vZGUiLCJwYXRjaGVkVHJlZSIsImZsaWdodFJvdXRlclN0YXRlIiwiQXN5bmMiLCJ0aGVuIiwiYXN5bmNSZXN1bHQiLCJhY3Rpb24iLCJpc0V4dGVybmFsVXJsIiwibmF2aWdhdGVUeXBlIiwiYWxsb3dBbGlhc2luZyIsImhyZWYiLCJjcmVhdGVIcmVmRnJvbVVybCIsInBydW5lUHJlZmV0Y2hDYWNoZSIsInByZWZldGNoQ2FjaGUiLCJwcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZSIsInRvU3RyaW5nIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfQ0xJRU5UX1NFR01FTlRfQ0FDSEUiLCJuYXZpZ2F0ZVVzaW5nU2VnbWVudENhY2hlIiwidHJlZSIsIm5leHRVcmwiLCJwcmVmZXRjaFZhbHVlcyIsImdldE9yQ3JlYXRlUHJlZmV0Y2hDYWNoZUVudHJ5IiwidHJlZUF0VGltZU9mUHJlZmV0Y2giLCJwcmVmZXRjaFF1ZXVlIiwiYnVtcCIsImZsaWdodERhdGEiLCJjYW5vbmljYWxVcmxPdmVycmlkZSIsInBvc3Rwb25lZCIsIm5hdmlnYXRlZEF0IiwiRGF0ZSIsIm5vdyIsImlzRmlyc3RSZWFkIiwibGFzdFVzZWRUaW1lIiwiYWxpYXNlZCIsInVybFdpdGhDYW5vbmljYWxQYXRobmFtZSIsImhhbmRsZUFsaWFzZWRQcmVmZXRjaEVudHJ5IiwidXBkYXRlZENhbm9uaWNhbFVybCIsInNwbGl0IiwiY3VycmVudFRyZWUiLCJub3JtYWxpemVkRmxpZ2h0RGF0YSIsInBhdGhUb1NlZ21lbnQiLCJzZWVkRGF0YSIsImhlYWQiLCJpc0hlYWRQYXJ0aWFsIiwiaXNSb290UmVuZGVyIiwiZmxpZ2h0U2VnbWVudFBhdGhXaXRoTGVhZGluZ0VtcHR5IiwibmV3VHJlZSIsImFwcGx5Um91dGVyU3RhdGVQYXRjaFRvVHJlZSIsInRhc2siLCJzdGFydFBQUk5hdmlnYXRpb24iLCJyb3V0ZSIsInBhdGNoZWRSb3V0ZXJTdGF0ZSIsIm5vZGUiLCJkeW5hbWljUmVxdWVzdFRyZWUiLCJkeW5hbWljUmVxdWVzdCIsImZldGNoU2VydmVyUmVzcG9uc2UiLCJvcmlnaW4iLCJsaXN0ZW5Gb3JEeW5hbWljUmVxdWVzdCIsImlzTmF2aWdhdGluZ1RvTmV3Um9vdExheW91dCIsImNyZWF0ZUVtcHR5Q2FjaGVOb2RlIiwiYXBwbGllZCIsInN0YXR1cyIsIlByZWZldGNoQ2FjaGVFbnRyeVN0YXR1cyIsInN0YWxlIiwiYXBwbHlGbGlnaHREYXRhIiwiaGFyZE5hdmlnYXRlIiwic2hvdWxkSGFyZE5hdmlnYXRlIiwiaW52YWxpZGF0ZUNhY2hlQmVsb3dGbGlnaHRTZWdtZW50UGF0aCIsInN1YlNlZ21lbnQiLCJzY3JvbGxhYmxlU2VnbWVudFBhdGgiLCJERUZBVUxUX1NFR01FTlRfS0VZIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/prefetch-reducer.js":
|
||
/*!**********************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/router-reducer/reducers/prefetch-reducer.js ***!
|
||
\**********************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n prefetchQueue: function() {\n return prefetchQueue;\n },\n prefetchReducer: function() {\n return prefetchReducer;\n }\n});\nconst _promisequeue = __webpack_require__(/*! ../../promise-queue */ \"(app-pages-browser)/./node_modules/next/dist/client/components/promise-queue.js\");\nconst _prefetchcacheutils = __webpack_require__(/*! ../prefetch-cache-utils */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/prefetch-cache-utils.js\");\nconst prefetchQueue = new _promisequeue.PromiseQueue(5);\nconst prefetchReducer = false ? 0 : prefetchReducerImpl;\nfunction identityReducerWhenSegmentCacheIsEnabled(state) {\n // Unlike the old implementation, the Segment Cache doesn't store its data in\n // the router reducer state.\n //\n // This shouldn't be reachable because we wrap the prefetch API in a check,\n // too, which prevents the action from being dispatched. But it's here for\n // clarity + code elimination.\n return state;\n}\nfunction prefetchReducerImpl(state, action) {\n // let's prune the prefetch cache before we do anything else\n (0, _prefetchcacheutils.prunePrefetchCache)(state.prefetchCache);\n const { url } = action;\n (0, _prefetchcacheutils.getOrCreatePrefetchCacheEntry)({\n url,\n nextUrl: state.nextUrl,\n prefetchCache: state.prefetchCache,\n kind: action.kind,\n tree: state.tree,\n allowAliasing: true\n });\n return state;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=prefetch-reducer.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvcHJlZmV0Y2gtcmVkdWNlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFVYUEsYUFBYTtlQUFiQTs7SUFFQUMsZUFBZTtlQUFmQTs7OzBDQVBnQjtnREFJdEI7QUFDQSxNQUFNRCxnQkFBZ0IsSUFBSUUsY0FBQUEsWUFBWSxDQUFDO0FBRXZDLE1BQU1ELGtCQUFrQkUsTUFBdUMsR0FDbEVHLENBQXdDQSxHQUN4Q0M7QUFFSixTQUFTRCx5Q0FBNENFLEtBQVE7SUFDM0QsNkVBQTZFO0lBQzdFLDRCQUE0QjtJQUM1QixFQUFFO0lBQ0YsMkVBQTJFO0lBQzNFLDBFQUEwRTtJQUMxRSw4QkFBOEI7SUFDOUIsT0FBT0E7QUFDVDtBQUVBLFNBQVNELG9CQUNQQyxLQUEyQixFQUMzQkMsTUFBc0I7SUFFdEIsNERBQTREO0lBQzVEQyxDQUFBQSxHQUFBQSxvQkFBQUEsa0JBQUFBLEVBQW1CRixNQUFNRyxhQUFhO0lBRXRDLE1BQU0sRUFBRUMsR0FBRyxFQUFFLEdBQUdIO0lBRWhCSSxDQUFBQSxHQUFBQSxvQkFBQUEsNkJBQUFBLEVBQThCO1FBQzVCRDtRQUNBRSxTQUFTTixNQUFNTSxPQUFPO1FBQ3RCSCxlQUFlSCxNQUFNRyxhQUFhO1FBQ2xDSSxNQUFNTixPQUFPTSxJQUFJO1FBQ2pCQyxNQUFNUixNQUFNUSxJQUFJO1FBQ2hCQyxlQUFlO0lBQ2pCO0lBRUEsT0FBT1Q7QUFDVCIsInNvdXJjZXMiOlsiL3NyYy9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9yZWR1Y2Vycy9wcmVmZXRjaC1yZWR1Y2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgUHJlZmV0Y2hBY3Rpb24sXG4gIFJlZHVjZXJTdGF0ZSxcbiAgUmVhZG9ubHlSZWR1Y2VyU3RhdGUsXG59IGZyb20gJy4uL3JvdXRlci1yZWR1Y2VyLXR5cGVzJ1xuaW1wb3J0IHsgUHJvbWlzZVF1ZXVlIH0gZnJvbSAnLi4vLi4vcHJvbWlzZS1xdWV1ZSdcbmltcG9ydCB7XG4gIGdldE9yQ3JlYXRlUHJlZmV0Y2hDYWNoZUVudHJ5LFxuICBwcnVuZVByZWZldGNoQ2FjaGUsXG59IGZyb20gJy4uL3ByZWZldGNoLWNhY2hlLXV0aWxzJ1xuZXhwb3J0IGNvbnN0IHByZWZldGNoUXVldWUgPSBuZXcgUHJvbWlzZVF1ZXVlKDUpXG5cbmV4cG9ydCBjb25zdCBwcmVmZXRjaFJlZHVjZXIgPSBwcm9jZXNzLmVudi5fX05FWFRfQ0xJRU5UX1NFR01FTlRfQ0FDSEVcbiAgPyBpZGVudGl0eVJlZHVjZXJXaGVuU2VnbWVudENhY2hlSXNFbmFibGVkXG4gIDogcHJlZmV0Y2hSZWR1Y2VySW1wbFxuXG5mdW5jdGlvbiBpZGVudGl0eVJlZHVjZXJXaGVuU2VnbWVudENhY2hlSXNFbmFibGVkPFQ+KHN0YXRlOiBUKTogVCB7XG4gIC8vIFVubGlrZSB0aGUgb2xkIGltcGxlbWVudGF0aW9uLCB0aGUgU2VnbWVudCBDYWNoZSBkb2Vzbid0IHN0b3JlIGl0cyBkYXRhIGluXG4gIC8vIHRoZSByb3V0ZXIgcmVkdWNlciBzdGF0ZS5cbiAgLy9cbiAgLy8gVGhpcyBzaG91bGRuJ3QgYmUgcmVhY2hhYmxlIGJlY2F1c2Ugd2Ugd3JhcCB0aGUgcHJlZmV0Y2ggQVBJIGluIGEgY2hlY2ssXG4gIC8vIHRvbywgd2hpY2ggcHJldmVudHMgdGhlIGFjdGlvbiBmcm9tIGJlaW5nIGRpc3BhdGNoZWQuIEJ1dCBpdCdzIGhlcmUgZm9yXG4gIC8vIGNsYXJpdHkgKyBjb2RlIGVsaW1pbmF0aW9uLlxuICByZXR1cm4gc3RhdGVcbn1cblxuZnVuY3Rpb24gcHJlZmV0Y2hSZWR1Y2VySW1wbChcbiAgc3RhdGU6IFJlYWRvbmx5UmVkdWNlclN0YXRlLFxuICBhY3Rpb246IFByZWZldGNoQWN0aW9uXG4pOiBSZWR1Y2VyU3RhdGUge1xuICAvLyBsZXQncyBwcnVuZSB0aGUgcHJlZmV0Y2ggY2FjaGUgYmVmb3JlIHdlIGRvIGFueXRoaW5nIGVsc2VcbiAgcHJ1bmVQcmVmZXRjaENhY2hlKHN0YXRlLnByZWZldGNoQ2FjaGUpXG5cbiAgY29uc3QgeyB1cmwgfSA9IGFjdGlvblxuXG4gIGdldE9yQ3JlYXRlUHJlZmV0Y2hDYWNoZUVudHJ5KHtcbiAgICB1cmwsXG4gICAgbmV4dFVybDogc3RhdGUubmV4dFVybCxcbiAgICBwcmVmZXRjaENhY2hlOiBzdGF0ZS5wcmVmZXRjaENhY2hlLFxuICAgIGtpbmQ6IGFjdGlvbi5raW5kLFxuICAgIHRyZWU6IHN0YXRlLnRyZWUsXG4gICAgYWxsb3dBbGlhc2luZzogdHJ1ZSxcbiAgfSlcblxuICByZXR1cm4gc3RhdGVcbn1cbiJdLCJuYW1lcyI6WyJwcmVmZXRjaFF1ZXVlIiwicHJlZmV0Y2hSZWR1Y2VyIiwiUHJvbWlzZVF1ZXVlIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9DTElFTlRfU0VHTUVOVF9DQUNIRSIsImlkZW50aXR5UmVkdWNlcldoZW5TZWdtZW50Q2FjaGVJc0VuYWJsZWQiLCJwcmVmZXRjaFJlZHVjZXJJbXBsIiwic3RhdGUiLCJhY3Rpb24iLCJwcnVuZVByZWZldGNoQ2FjaGUiLCJwcmVmZXRjaENhY2hlIiwidXJsIiwiZ2V0T3JDcmVhdGVQcmVmZXRjaENhY2hlRW50cnkiLCJuZXh0VXJsIiwia2luZCIsInRyZWUiLCJhbGxvd0FsaWFzaW5nIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/prefetch-reducer.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/refresh-reducer.js":
|
||
/*!*********************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/router-reducer/reducers/refresh-reducer.js ***!
|
||
\*********************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"refreshReducer\", ({\n enumerable: true,\n get: function() {\n return refreshReducer;\n }\n}));\nconst _fetchserverresponse = __webpack_require__(/*! ../fetch-server-response */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fetch-server-response.js\");\nconst _createhreffromurl = __webpack_require__(/*! ../create-href-from-url */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nconst _applyrouterstatepatchtotree = __webpack_require__(/*! ../apply-router-state-patch-to-tree */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/apply-router-state-patch-to-tree.js\");\nconst _isnavigatingtonewrootlayout = __webpack_require__(/*! ../is-navigating-to-new-root-layout */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js\");\nconst _navigatereducer = __webpack_require__(/*! ./navigate-reducer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js\");\nconst _handlemutable = __webpack_require__(/*! ../handle-mutable */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/handle-mutable.js\");\nconst _filllazyitemstillleafwithhead = __webpack_require__(/*! ../fill-lazy-items-till-leaf-with-head */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fill-lazy-items-till-leaf-with-head.js\");\nconst _approuter = __webpack_require__(/*! ../../app-router */ \"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js\");\nconst _handlesegmentmismatch = __webpack_require__(/*! ../handle-segment-mismatch */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/handle-segment-mismatch.js\");\nconst _hasinterceptionrouteincurrenttree = __webpack_require__(/*! ./has-interception-route-in-current-tree */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/has-interception-route-in-current-tree.js\");\nconst _refetchinactiveparallelsegments = __webpack_require__(/*! ../refetch-inactive-parallel-segments */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/refetch-inactive-parallel-segments.js\");\nconst _segmentcache = __webpack_require__(/*! ../../segment-cache */ \"(app-pages-browser)/./node_modules/next/dist/client/components/segment-cache.js\");\nfunction refreshReducer(state, action) {\n const { origin } = action;\n const mutable = {};\n const href = state.canonicalUrl;\n let currentTree = state.tree;\n mutable.preserveCustomHistoryState = false;\n const cache = (0, _approuter.createEmptyCacheNode)();\n // If the current tree was intercepted, the nextUrl should be included in the request.\n // This is to ensure that the refresh request doesn't get intercepted, accidentally triggering the interception route.\n const includeNextUrl = (0, _hasinterceptionrouteincurrenttree.hasInterceptionRouteInCurrentTree)(state.tree);\n // TODO-APP: verify that `href` is not an external url.\n // Fetch data from the root of the tree.\n cache.lazyData = (0, _fetchserverresponse.fetchServerResponse)(new URL(href, origin), {\n flightRouterState: [\n currentTree[0],\n currentTree[1],\n currentTree[2],\n 'refetch'\n ],\n nextUrl: includeNextUrl ? state.nextUrl : null\n });\n const navigatedAt = Date.now();\n return cache.lazyData.then(async (param)=>{\n let { flightData, canonicalUrl: canonicalUrlOverride } = param;\n // Handle case when navigating to page in `pages` from `app`\n if (typeof flightData === 'string') {\n return (0, _navigatereducer.handleExternalUrl)(state, mutable, flightData, state.pushRef.pendingPush);\n }\n // Remove cache.lazyData as it has been resolved at this point.\n cache.lazyData = null;\n for (const normalizedFlightData of flightData){\n const { tree: treePatch, seedData: cacheNodeSeedData, head, isRootRender } = normalizedFlightData;\n if (!isRootRender) {\n // TODO-APP: handle this case better\n console.log('REFRESH FAILED');\n return state;\n }\n const newTree = (0, _applyrouterstatepatchtotree.applyRouterStatePatchToTree)([\n ''\n ], currentTree, treePatch, state.canonicalUrl);\n if (newTree === null) {\n return (0, _handlesegmentmismatch.handleSegmentMismatch)(state, action, treePatch);\n }\n if ((0, _isnavigatingtonewrootlayout.isNavigatingToNewRootLayout)(currentTree, newTree)) {\n return (0, _navigatereducer.handleExternalUrl)(state, mutable, href, state.pushRef.pendingPush);\n }\n const canonicalUrlOverrideHref = canonicalUrlOverride ? (0, _createhreffromurl.createHrefFromUrl)(canonicalUrlOverride) : undefined;\n if (canonicalUrlOverride) {\n mutable.canonicalUrl = canonicalUrlOverrideHref;\n }\n // Handles case where prefetch only returns the router tree patch without rendered components.\n if (cacheNodeSeedData !== null) {\n const rsc = cacheNodeSeedData[1];\n const loading = cacheNodeSeedData[3];\n cache.rsc = rsc;\n cache.prefetchRsc = null;\n cache.loading = loading;\n (0, _filllazyitemstillleafwithhead.fillLazyItemsTillLeafWithHead)(navigatedAt, cache, undefined, treePatch, cacheNodeSeedData, head, undefined);\n if (false) {} else {\n mutable.prefetchCache = new Map();\n }\n }\n await (0, _refetchinactiveparallelsegments.refreshInactiveParallelSegments)({\n navigatedAt,\n state,\n updatedTree: newTree,\n updatedCache: cache,\n includeNextUrl,\n canonicalUrl: mutable.canonicalUrl || state.canonicalUrl\n });\n mutable.cache = cache;\n mutable.patchedTree = newTree;\n currentTree = newTree;\n }\n return (0, _handlemutable.handleMutable)(state, mutable);\n }, ()=>state);\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=refresh-reducer.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvcmVmcmVzaC1yZWR1Y2VyLmpzIiwibWFwcGluZ3MiOiI7Ozs7a0RBb0JnQkE7OztlQUFBQTs7O2lEQXBCb0I7K0NBQ0Y7eURBQ1U7eURBQ0E7NkNBT1Y7MkNBQ0o7MkRBRWdCO3VDQUNUO21EQUNDOytEQUNZOzZEQUNGOzBDQUNWO0FBRS9CLFNBQVNBLGVBQ2RDLEtBQTJCLEVBQzNCQyxNQUFxQjtJQUVyQixNQUFNLEVBQUVDLE1BQU0sRUFBRSxHQUFHRDtJQUNuQixNQUFNRSxVQUFtQixDQUFDO0lBQzFCLE1BQU1DLE9BQU9KLE1BQU1LLFlBQVk7SUFFL0IsSUFBSUMsY0FBY04sTUFBTU8sSUFBSTtJQUU1QkosUUFBUUssMEJBQTBCLEdBQUc7SUFFckMsTUFBTUMsUUFBbUJDLENBQUFBLEdBQUFBLFdBQUFBLG9CQUFBQTtJQUV6QixzRkFBc0Y7SUFDdEYsc0hBQXNIO0lBQ3RILE1BQU1DLGlCQUFpQkMsQ0FBQUEsR0FBQUEsbUNBQUFBLGlDQUFpQyxFQUFDWixNQUFNTyxJQUFJO0lBRW5FLHVEQUF1RDtJQUN2RCx3Q0FBd0M7SUFDeENFLE1BQU1JLFFBQVEsR0FBR0MsQ0FBQUEsR0FBQUEscUJBQUFBLG1CQUFBQSxFQUFvQixJQUFJQyxJQUFJWCxNQUFNRixTQUFTO1FBQzFEYyxtQkFBbUI7WUFDakJWLFdBQVcsQ0FBQyxFQUFFO1lBQ2RBLFdBQVcsQ0FBQyxFQUFFO1lBQ2RBLFdBQVcsQ0FBQyxFQUFFO1lBQ2Q7U0FDRDtRQUNEVyxTQUFTTixpQkFBaUJYLE1BQU1pQixPQUFPLEdBQUc7SUFDNUM7SUFFQSxNQUFNQyxjQUFjQyxLQUFLQyxHQUFHO0lBQzVCLE9BQU9YLE1BQU1JLFFBQVEsQ0FBQ1EsSUFBSSxDQUN4QjtZQUFPLEVBQUVDLFVBQVUsRUFBRWpCLGNBQWNrQixvQkFBb0IsRUFBRTtRQUN2RCw0REFBNEQ7UUFDNUQsSUFBSSxPQUFPRCxlQUFlLFVBQVU7WUFDbEMsT0FBT0UsQ0FBQUEsR0FBQUEsaUJBQUFBLGlCQUFBQSxFQUNMeEIsT0FDQUcsU0FDQW1CLFlBQ0F0QixNQUFNeUIsT0FBTyxDQUFDQyxXQUFXO1FBRTdCO1FBRUEsK0RBQStEO1FBQy9EakIsTUFBTUksUUFBUSxHQUFHO1FBRWpCLEtBQUssTUFBTWMsd0JBQXdCTCxXQUFZO1lBQzdDLE1BQU0sRUFDSmYsTUFBTXFCLFNBQVMsRUFDZkMsVUFBVUMsaUJBQWlCLEVBQzNCQyxJQUFJLEVBQ0pDLFlBQVksRUFDYixHQUFHTDtZQUVKLElBQUksQ0FBQ0ssY0FBYztnQkFDakIsb0NBQW9DO2dCQUNwQ0MsUUFBUUMsR0FBRyxDQUFDO2dCQUNaLE9BQU9sQztZQUNUO1lBRUEsTUFBTW1DLFVBQVVDLENBQUFBLEdBQUFBLDZCQUFBQSwyQkFBQUEsRUFDZDtnQkFDQzthQUFHLEVBQ0o5QixhQUNBc0IsV0FDQTVCLE1BQU1LLFlBQVk7WUFHcEIsSUFBSThCLFlBQVksTUFBTTtnQkFDcEIsT0FBT0UsQ0FBQUEsR0FBQUEsdUJBQUFBLHFCQUFBQSxFQUFzQnJDLE9BQU9DLFFBQVEyQjtZQUM5QztZQUVBLElBQUlVLENBQUFBLEdBQUFBLDZCQUFBQSwyQkFBQUEsRUFBNEJoQyxhQUFhNkIsVUFBVTtnQkFDckQsT0FBT1gsQ0FBQUEsR0FBQUEsaUJBQUFBLGlCQUFBQSxFQUNMeEIsT0FDQUcsU0FDQUMsTUFDQUosTUFBTXlCLE9BQU8sQ0FBQ0MsV0FBVztZQUU3QjtZQUVBLE1BQU1hLDJCQUEyQmhCLHVCQUM3QmlCLENBQUFBLEdBQUFBLG1CQUFBQSxpQkFBQUEsRUFBa0JqQix3QkFDbEJrQjtZQUVKLElBQUlsQixzQkFBc0I7Z0JBQ3hCcEIsUUFBUUUsWUFBWSxHQUFHa0M7WUFDekI7WUFFQSw4RkFBOEY7WUFDOUYsSUFBSVQsc0JBQXNCLE1BQU07Z0JBQzlCLE1BQU1ZLE1BQU1aLGlCQUFpQixDQUFDLEVBQUU7Z0JBQ2hDLE1BQU1hLFVBQVViLGlCQUFpQixDQUFDLEVBQUU7Z0JBQ3BDckIsTUFBTWlDLEdBQUcsR0FBR0E7Z0JBQ1pqQyxNQUFNbUMsV0FBVyxHQUFHO2dCQUNwQm5DLE1BQU1rQyxPQUFPLEdBQUdBO2dCQUNoQkUsQ0FBQUEsR0FBQUEsK0JBQUFBLDZCQUFBQSxFQUNFM0IsYUFDQVQsT0FDQSxXQUVBbUIsV0FDQUUsbUJBQ0FDLE1BQ0FVO2dCQUVGLElBQUlLLEtBQXVDLEVBQUUsRUFFNUMsTUFBTTtvQkFDTDNDLFFBQVErQyxhQUFhLEdBQUcsSUFBSUM7Z0JBQzlCO1lBQ0Y7WUFFQSxNQUFNQyxDQUFBQSxHQUFBQSxpQ0FBQUEsK0JBQUFBLEVBQWdDO2dCQUNwQ2xDO2dCQUNBbEI7Z0JBQ0FxRCxhQUFhbEI7Z0JBQ2JtQixjQUFjN0M7Z0JBQ2RFO2dCQUNBTixjQUFjRixRQUFRRSxZQUFZLElBQUlMLE1BQU1LLFlBQVk7WUFDMUQ7WUFFQUYsUUFBUU0sS0FBSyxHQUFHQTtZQUNoQk4sUUFBUW9ELFdBQVcsR0FBR3BCO1lBRXRCN0IsY0FBYzZCO1FBQ2hCO1FBRUEsT0FBT3FCLENBQUFBLEdBQUFBLGVBQUFBLGFBQUFBLEVBQWN4RCxPQUFPRztJQUM5QixHQUNBLElBQU1IO0FBRVYiLCJzb3VyY2VzIjpbIi9zcmMvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvcmVmcmVzaC1yZWR1Y2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZldGNoU2VydmVyUmVzcG9uc2UgfSBmcm9tICcuLi9mZXRjaC1zZXJ2ZXItcmVzcG9uc2UnXG5pbXBvcnQgeyBjcmVhdGVIcmVmRnJvbVVybCB9IGZyb20gJy4uL2NyZWF0ZS1ocmVmLWZyb20tdXJsJ1xuaW1wb3J0IHsgYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9UcmVlIH0gZnJvbSAnLi4vYXBwbHktcm91dGVyLXN0YXRlLXBhdGNoLXRvLXRyZWUnXG5pbXBvcnQgeyBpc05hdmlnYXRpbmdUb05ld1Jvb3RMYXlvdXQgfSBmcm9tICcuLi9pcy1uYXZpZ2F0aW5nLXRvLW5ldy1yb290LWxheW91dCdcbmltcG9ydCB0eXBlIHtcbiAgTXV0YWJsZSxcbiAgUmVhZG9ubHlSZWR1Y2VyU3RhdGUsXG4gIFJlZHVjZXJTdGF0ZSxcbiAgUmVmcmVzaEFjdGlvbixcbn0gZnJvbSAnLi4vcm91dGVyLXJlZHVjZXItdHlwZXMnXG5pbXBvcnQgeyBoYW5kbGVFeHRlcm5hbFVybCB9IGZyb20gJy4vbmF2aWdhdGUtcmVkdWNlcidcbmltcG9ydCB7IGhhbmRsZU11dGFibGUgfSBmcm9tICcuLi9oYW5kbGUtbXV0YWJsZSdcbmltcG9ydCB0eXBlIHsgQ2FjaGVOb2RlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2xpYi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUnXG5pbXBvcnQgeyBmaWxsTGF6eUl0ZW1zVGlsbExlYWZXaXRoSGVhZCB9IGZyb20gJy4uL2ZpbGwtbGF6eS1pdGVtcy10aWxsLWxlYWYtd2l0aC1oZWFkJ1xuaW1wb3J0IHsgY3JlYXRlRW1wdHlDYWNoZU5vZGUgfSBmcm9tICcuLi8uLi9hcHAtcm91dGVyJ1xuaW1wb3J0IHsgaGFuZGxlU2VnbWVudE1pc21hdGNoIH0gZnJvbSAnLi4vaGFuZGxlLXNlZ21lbnQtbWlzbWF0Y2gnXG5pbXBvcnQgeyBoYXNJbnRlcmNlcHRpb25Sb3V0ZUluQ3VycmVudFRyZWUgfSBmcm9tICcuL2hhcy1pbnRlcmNlcHRpb24tcm91dGUtaW4tY3VycmVudC10cmVlJ1xuaW1wb3J0IHsgcmVmcmVzaEluYWN0aXZlUGFyYWxsZWxTZWdtZW50cyB9IGZyb20gJy4uL3JlZmV0Y2gtaW5hY3RpdmUtcGFyYWxsZWwtc2VnbWVudHMnXG5pbXBvcnQgeyByZXZhbGlkYXRlRW50aXJlQ2FjaGUgfSBmcm9tICcuLi8uLi9zZWdtZW50LWNhY2hlJ1xuXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaFJlZHVjZXIoXG4gIHN0YXRlOiBSZWFkb25seVJlZHVjZXJTdGF0ZSxcbiAgYWN0aW9uOiBSZWZyZXNoQWN0aW9uXG4pOiBSZWR1Y2VyU3RhdGUge1xuICBjb25zdCB7IG9yaWdpbiB9ID0gYWN0aW9uXG4gIGNvbnN0IG11dGFibGU6IE11dGFibGUgPSB7fVxuICBjb25zdCBocmVmID0gc3RhdGUuY2Fub25pY2FsVXJsXG5cbiAgbGV0IGN1cnJlbnRUcmVlID0gc3RhdGUudHJlZVxuXG4gIG11dGFibGUucHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGUgPSBmYWxzZVxuXG4gIGNvbnN0IGNhY2hlOiBDYWNoZU5vZGUgPSBjcmVhdGVFbXB0eUNhY2hlTm9kZSgpXG5cbiAgLy8gSWYgdGhlIGN1cnJlbnQgdHJlZSB3YXMgaW50ZXJjZXB0ZWQsIHRoZSBuZXh0VXJsIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgcmVxdWVzdC5cbiAgLy8gVGhpcyBpcyB0byBlbnN1cmUgdGhhdCB0aGUgcmVmcmVzaCByZXF1ZXN0IGRvZXNuJ3QgZ2V0IGludGVyY2VwdGVkLCBhY2NpZGVudGFsbHkgdHJpZ2dlcmluZyB0aGUgaW50ZXJjZXB0aW9uIHJvdXRlLlxuICBjb25zdCBpbmNsdWRlTmV4dFVybCA9IGhhc0ludGVyY2VwdGlvblJvdXRlSW5DdXJyZW50VHJlZShzdGF0ZS50cmVlKVxuXG4gIC8vIFRPRE8tQVBQOiB2ZXJpZnkgdGhhdCBgaHJlZmAgaXMgbm90IGFuIGV4dGVybmFsIHVybC5cbiAgLy8gRmV0Y2ggZGF0YSBmcm9tIHRoZSByb290IG9mIHRoZSB0cmVlLlxuICBjYWNoZS5sYXp5RGF0YSA9IGZldGNoU2VydmVyUmVzcG9uc2UobmV3IFVSTChocmVmLCBvcmlnaW4pLCB7XG4gICAgZmxpZ2h0Um91dGVyU3RhdGU6IFtcbiAgICAgIGN1cnJlbnRUcmVlWzBdLFxuICAgICAgY3VycmVudFRyZWVbMV0sXG4gICAgICBjdXJyZW50VHJlZVsyXSxcbiAgICAgICdyZWZldGNoJyxcbiAgICBdLFxuICAgIG5leHRVcmw6IGluY2x1ZGVOZXh0VXJsID8gc3RhdGUubmV4dFVybCA6IG51bGwsXG4gIH0pXG5cbiAgY29uc3QgbmF2aWdhdGVkQXQgPSBEYXRlLm5vdygpXG4gIHJldHVybiBjYWNoZS5sYXp5RGF0YS50aGVuKFxuICAgIGFzeW5jICh7IGZsaWdodERhdGEsIGNhbm9uaWNhbFVybDogY2Fub25pY2FsVXJsT3ZlcnJpZGUgfSkgPT4ge1xuICAgICAgLy8gSGFuZGxlIGNhc2Ugd2hlbiBuYXZpZ2F0aW5nIHRvIHBhZ2UgaW4gYHBhZ2VzYCBmcm9tIGBhcHBgXG4gICAgICBpZiAodHlwZW9mIGZsaWdodERhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVFeHRlcm5hbFVybChcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBtdXRhYmxlLFxuICAgICAgICAgIGZsaWdodERhdGEsXG4gICAgICAgICAgc3RhdGUucHVzaFJlZi5wZW5kaW5nUHVzaFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIFJlbW92ZSBjYWNoZS5sYXp5RGF0YSBhcyBpdCBoYXMgYmVlbiByZXNvbHZlZCBhdCB0aGlzIHBvaW50LlxuICAgICAgY2FjaGUubGF6eURhdGEgPSBudWxsXG5cbiAgICAgIGZvciAoY29uc3Qgbm9ybWFsaXplZEZsaWdodERhdGEgb2YgZmxpZ2h0RGF0YSkge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgdHJlZTogdHJlZVBhdGNoLFxuICAgICAgICAgIHNlZWREYXRhOiBjYWNoZU5vZGVTZWVkRGF0YSxcbiAgICAgICAgICBoZWFkLFxuICAgICAgICAgIGlzUm9vdFJlbmRlcixcbiAgICAgICAgfSA9IG5vcm1hbGl6ZWRGbGlnaHREYXRhXG5cbiAgICAgICAgaWYgKCFpc1Jvb3RSZW5kZXIpIHtcbiAgICAgICAgICAvLyBUT0RPLUFQUDogaGFuZGxlIHRoaXMgY2FzZSBiZXR0ZXJcbiAgICAgICAgICBjb25zb2xlLmxvZygnUkVGUkVTSCBGQUlMRUQnKVxuICAgICAgICAgIHJldHVybiBzdGF0ZVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV3VHJlZSA9IGFwcGx5Um91dGVyU3RhdGVQYXRjaFRvVHJlZShcbiAgICAgICAgICAvLyBUT0RPLUFQUDogcmVtb3ZlICcnXG4gICAgICAgICAgWycnXSxcbiAgICAgICAgICBjdXJyZW50VHJlZSxcbiAgICAgICAgICB0cmVlUGF0Y2gsXG4gICAgICAgICAgc3RhdGUuY2Fub25pY2FsVXJsXG4gICAgICAgIClcblxuICAgICAgICBpZiAobmV3VHJlZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBoYW5kbGVTZWdtZW50TWlzbWF0Y2goc3RhdGUsIGFjdGlvbiwgdHJlZVBhdGNoKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTmF2aWdhdGluZ1RvTmV3Um9vdExheW91dChjdXJyZW50VHJlZSwgbmV3VHJlZSkpIHtcbiAgICAgICAgICByZXR1cm4gaGFuZGxlRXh0ZXJuYWxVcmwoXG4gICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgIG11dGFibGUsXG4gICAgICAgICAgICBocmVmLFxuICAgICAgICAgICAgc3RhdGUucHVzaFJlZi5wZW5kaW5nUHVzaFxuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNhbm9uaWNhbFVybE92ZXJyaWRlSHJlZiA9IGNhbm9uaWNhbFVybE92ZXJyaWRlXG4gICAgICAgICAgPyBjcmVhdGVIcmVmRnJvbVVybChjYW5vbmljYWxVcmxPdmVycmlkZSlcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICAgIGlmIChjYW5vbmljYWxVcmxPdmVycmlkZSkge1xuICAgICAgICAgIG11dGFibGUuY2Fub25pY2FsVXJsID0gY2Fub25pY2FsVXJsT3ZlcnJpZGVIcmVmXG4gICAgICAgIH1cblxuICAgICAgICAvLyBIYW5kbGVzIGNhc2Ugd2hlcmUgcHJlZmV0Y2ggb25seSByZXR1cm5zIHRoZSByb3V0ZXIgdHJlZSBwYXRjaCB3aXRob3V0IHJlbmRlcmVkIGNvbXBvbmVudHMuXG4gICAgICAgIGlmIChjYWNoZU5vZGVTZWVkRGF0YSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IHJzYyA9IGNhY2hlTm9kZVNlZWREYXRhWzFdXG4gICAgICAgICAgY29uc3QgbG9hZGluZyA9IGNhY2hlTm9kZVNlZWREYXRhWzNdXG4gICAgICAgICAgY2FjaGUucnNjID0gcnNjXG4gICAgICAgICAgY2FjaGUucHJlZmV0Y2hSc2MgPSBudWxsXG4gICAgICAgICAgY2FjaGUubG9hZGluZyA9IGxvYWRpbmdcbiAgICAgICAgICBmaWxsTGF6eUl0ZW1zVGlsbExlYWZXaXRoSGVhZChcbiAgICAgICAgICAgIG5hdmlnYXRlZEF0LFxuICAgICAgICAgICAgY2FjaGUsXG4gICAgICAgICAgICAvLyBFeGlzdGluZyBjYWNoZSBpcyBub3QgcGFzc2VkIGluIGFzIGByb3V0ZXIucmVmcmVzaCgpYCBoYXMgdG8gaW52YWxpZGF0ZSB0aGUgZW50aXJlIGNhY2hlLlxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgdHJlZVBhdGNoLFxuICAgICAgICAgICAgY2FjaGVOb2RlU2VlZERhdGEsXG4gICAgICAgICAgICBoZWFkLFxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICAgKVxuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfQ0xJRU5UX1NFR01FTlRfQ0FDSEUpIHtcbiAgICAgICAgICAgIHJldmFsaWRhdGVFbnRpcmVDYWNoZShzdGF0ZS5uZXh0VXJsLCBuZXdUcmVlKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtdXRhYmxlLnByZWZldGNoQ2FjaGUgPSBuZXcgTWFwKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCByZWZyZXNoSW5hY3RpdmVQYXJhbGxlbFNlZ21lbnRzKHtcbiAgICAgICAgICBuYXZpZ2F0ZWRBdCxcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICB1cGRhdGVkVHJlZTogbmV3VHJlZSxcbiAgICAgICAgICB1cGRhdGVkQ2FjaGU6IGNhY2hlLFxuICAgICAgICAgIGluY2x1ZGVOZXh0VXJsLFxuICAgICAgICAgIGNhbm9uaWNhbFVybDogbXV0YWJsZS5jYW5vbmljYWxVcmwgfHwgc3RhdGUuY2Fub25pY2FsVXJsLFxuICAgICAgICB9KVxuXG4gICAgICAgIG11dGFibGUuY2FjaGUgPSBjYWNoZVxuICAgICAgICBtdXRhYmxlLnBhdGNoZWRUcmVlID0gbmV3VHJlZVxuXG4gICAgICAgIGN1cnJlbnRUcmVlID0gbmV3VHJlZVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gaGFuZGxlTXV0YWJsZShzdGF0ZSwgbXV0YWJsZSlcbiAgICB9LFxuICAgICgpID0+IHN0YXRlXG4gIClcbn1cbiJdLCJuYW1lcyI6WyJyZWZyZXNoUmVkdWNlciIsInN0YXRlIiwiYWN0aW9uIiwib3JpZ2luIiwibXV0YWJsZSIsImhyZWYiLCJjYW5vbmljYWxVcmwiLCJjdXJyZW50VHJlZSIsInRyZWUiLCJwcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZSIsImNhY2hlIiwiY3JlYXRlRW1wdHlDYWNoZU5vZGUiLCJpbmNsdWRlTmV4dFVybCIsImhhc0ludGVyY2VwdGlvblJvdXRlSW5DdXJyZW50VHJlZSIsImxhenlEYXRhIiwiZmV0Y2hTZXJ2ZXJSZXNwb25zZSIsIlVSTCIsImZsaWdodFJvdXRlclN0YXRlIiwibmV4dFVybCIsIm5hdmlnYXRlZEF0IiwiRGF0ZSIsIm5vdyIsInRoZW4iLCJmbGlnaHREYXRhIiwiY2Fub25pY2FsVXJsT3ZlcnJpZGUiLCJoYW5kbGVFeHRlcm5hbFVybCIsInB1c2hSZWYiLCJwZW5kaW5nUHVzaCIsIm5vcm1hbGl6ZWRGbGlnaHREYXRhIiwidHJlZVBhdGNoIiwic2VlZERhdGEiLCJjYWNoZU5vZGVTZWVkRGF0YSIsImhlYWQiLCJpc1Jvb3RSZW5kZXIiLCJjb25zb2xlIiwibG9nIiwibmV3VHJlZSIsImFwcGx5Um91dGVyU3RhdGVQYXRjaFRvVHJlZSIsImhhbmRsZVNlZ21lbnRNaXNtYXRjaCIsImlzTmF2aWdhdGluZ1RvTmV3Um9vdExheW91dCIsImNhbm9uaWNhbFVybE92ZXJyaWRlSHJlZiIsImNyZWF0ZUhyZWZGcm9tVXJsIiwidW5kZWZpbmVkIiwicnNjIiwibG9hZGluZyIsInByZWZldGNoUnNjIiwiZmlsbExhenlJdGVtc1RpbGxMZWFmV2l0aEhlYWQiLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX0NMSUVOVF9TRUdNRU5UX0NBQ0hFIiwicmV2YWxpZGF0ZUVudGlyZUNhY2hlIiwicHJlZmV0Y2hDYWNoZSIsIk1hcCIsInJlZnJlc2hJbmFjdGl2ZVBhcmFsbGVsU2VnbWVudHMiLCJ1cGRhdGVkVHJlZSIsInVwZGF0ZWRDYWNoZSIsInBhdGNoZWRUcmVlIiwiaGFuZGxlTXV0YWJsZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/refresh-reducer.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/restore-reducer.js":
|
||
/*!*********************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/router-reducer/reducers/restore-reducer.js ***!
|
||
\*********************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"restoreReducer\", ({\n enumerable: true,\n get: function() {\n return restoreReducer;\n }\n}));\nconst _createhreffromurl = __webpack_require__(/*! ../create-href-from-url */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nconst _computechangedpath = __webpack_require__(/*! ../compute-changed-path */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/compute-changed-path.js\");\nconst _pprnavigations = __webpack_require__(/*! ../ppr-navigations */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/ppr-navigations.js\");\nfunction restoreReducer(state, action) {\n const { url, tree } = action;\n const href = (0, _createhreffromurl.createHrefFromUrl)(url);\n // This action is used to restore the router state from the history state.\n // However, it's possible that the history state no longer contains the `FlightRouterState`.\n // We will copy over the internal state on pushState/replaceState events, but if a history entry\n // occurred before hydration, or if the user navigated to a hash using a regular anchor link,\n // the history state will not contain the `FlightRouterState`.\n // In this case, we'll continue to use the existing tree so the router doesn't get into an invalid state.\n const treeToRestore = tree || state.tree;\n const oldCache = state.cache;\n const newCache = false ? // prevents an unnecessary flash back to PPR state during a\n // back/forward navigation.\n 0 : oldCache;\n var _extractPathFromFlightRouterState;\n return {\n // Set canonical url\n canonicalUrl: href,\n pushRef: {\n pendingPush: false,\n mpaNavigation: false,\n // Ensures that the custom history state that was set is preserved when applying this update.\n preserveCustomHistoryState: true\n },\n focusAndScrollRef: state.focusAndScrollRef,\n cache: newCache,\n prefetchCache: state.prefetchCache,\n // Restore provided tree\n tree: treeToRestore,\n nextUrl: (_extractPathFromFlightRouterState = (0, _computechangedpath.extractPathFromFlightRouterState)(treeToRestore)) != null ? _extractPathFromFlightRouterState : url.pathname\n };\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=restore-reducer.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvcmVzdG9yZS1yZWR1Y2VyLmpzIiwibWFwcGluZ3MiOiI7Ozs7a0RBU2dCQTs7O2VBQUFBOzs7K0NBVGtCO2dEQU1lOzRDQUNJO0FBRTlDLFNBQVNBLGVBQ2RDLEtBQTJCLEVBQzNCQyxNQUFxQjtJQUVyQixNQUFNLEVBQUVDLEdBQUcsRUFBRUMsSUFBSSxFQUFFLEdBQUdGO0lBQ3RCLE1BQU1HLE9BQU9DLENBQUFBLEdBQUFBLG1CQUFBQSxpQkFBQUEsRUFBa0JIO0lBQy9CLDBFQUEwRTtJQUMxRSw0RkFBNEY7SUFDNUYsZ0dBQWdHO0lBQ2hHLDZGQUE2RjtJQUM3Riw4REFBOEQ7SUFDOUQseUdBQXlHO0lBQ3pHLE1BQU1JLGdCQUFnQkgsUUFBUUgsTUFBTUcsSUFBSTtJQUV4QyxNQUFNSSxXQUFXUCxNQUFNUSxLQUFLO0lBQzVCLE1BQU1DLFdBQVdDLE1BQXNCLEdBRW5DLDJEQUMyRDtJQUMzRCwyQkFBMkI7SUFDM0JHLENBQTZEUCxHQUM3REM7UUFnQk9PO0lBZFgsT0FBTztRQUNMLG9CQUFvQjtRQUNwQkMsY0FBY1g7UUFDZFksU0FBUztZQUNQQyxhQUFhO1lBQ2JDLGVBQWU7WUFDZiw2RkFBNkY7WUFDN0ZDLDRCQUE0QjtRQUM5QjtRQUNBQyxtQkFBbUJwQixNQUFNb0IsaUJBQWlCO1FBQzFDWixPQUFPQztRQUNQWSxlQUFlckIsTUFBTXFCLGFBQWE7UUFDbEMsd0JBQXdCO1FBQ3hCbEIsTUFBTUc7UUFDTmdCLFNBQVNSLENBQUFBLG9DQUFBQSxDQUFBQSxHQUFBQSxvQkFBQUEsZ0NBQUFBLEVBQWlDUixjQUFBQSxLQUFBQSxPQUFqQ1Esb0NBQW1EWixJQUFJcUIsUUFBUTtJQUMxRTtBQUNGIiwic291cmNlcyI6WyIvc3JjL2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3JlZHVjZXJzL3Jlc3RvcmUtcmVkdWNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVIcmVmRnJvbVVybCB9IGZyb20gJy4uL2NyZWF0ZS1ocmVmLWZyb20tdXJsJ1xuaW1wb3J0IHR5cGUge1xuICBSZWFkb25seVJlZHVjZXJTdGF0ZSxcbiAgUmVkdWNlclN0YXRlLFxuICBSZXN0b3JlQWN0aW9uLFxufSBmcm9tICcuLi9yb3V0ZXItcmVkdWNlci10eXBlcydcbmltcG9ydCB7IGV4dHJhY3RQYXRoRnJvbUZsaWdodFJvdXRlclN0YXRlIH0gZnJvbSAnLi4vY29tcHV0ZS1jaGFuZ2VkLXBhdGgnXG5pbXBvcnQgeyB1cGRhdGVDYWNoZU5vZGVPblBvcHN0YXRlUmVzdG9yYXRpb24gfSBmcm9tICcuLi9wcHItbmF2aWdhdGlvbnMnXG5cbmV4cG9ydCBmdW5jdGlvbiByZXN0b3JlUmVkdWNlcihcbiAgc3RhdGU6IFJlYWRvbmx5UmVkdWNlclN0YXRlLFxuICBhY3Rpb246IFJlc3RvcmVBY3Rpb25cbik6IFJlZHVjZXJTdGF0ZSB7XG4gIGNvbnN0IHsgdXJsLCB0cmVlIH0gPSBhY3Rpb25cbiAgY29uc3QgaHJlZiA9IGNyZWF0ZUhyZWZGcm9tVXJsKHVybClcbiAgLy8gVGhpcyBhY3Rpb24gaXMgdXNlZCB0byByZXN0b3JlIHRoZSByb3V0ZXIgc3RhdGUgZnJvbSB0aGUgaGlzdG9yeSBzdGF0ZS5cbiAgLy8gSG93ZXZlciwgaXQncyBwb3NzaWJsZSB0aGF0IHRoZSBoaXN0b3J5IHN0YXRlIG5vIGxvbmdlciBjb250YWlucyB0aGUgYEZsaWdodFJvdXRlclN0YXRlYC5cbiAgLy8gV2Ugd2lsbCBjb3B5IG92ZXIgdGhlIGludGVybmFsIHN0YXRlIG9uIHB1c2hTdGF0ZS9yZXBsYWNlU3RhdGUgZXZlbnRzLCBidXQgaWYgYSBoaXN0b3J5IGVudHJ5XG4gIC8vIG9jY3VycmVkIGJlZm9yZSBoeWRyYXRpb24sIG9yIGlmIHRoZSB1c2VyIG5hdmlnYXRlZCB0byBhIGhhc2ggdXNpbmcgYSByZWd1bGFyIGFuY2hvciBsaW5rLFxuICAvLyB0aGUgaGlzdG9yeSBzdGF0ZSB3aWxsIG5vdCBjb250YWluIHRoZSBgRmxpZ2h0Um91dGVyU3RhdGVgLlxuICAvLyBJbiB0aGlzIGNhc2UsIHdlJ2xsIGNvbnRpbnVlIHRvIHVzZSB0aGUgZXhpc3RpbmcgdHJlZSBzbyB0aGUgcm91dGVyIGRvZXNuJ3QgZ2V0IGludG8gYW4gaW52YWxpZCBzdGF0ZS5cbiAgY29uc3QgdHJlZVRvUmVzdG9yZSA9IHRyZWUgfHwgc3RhdGUudHJlZVxuXG4gIGNvbnN0IG9sZENhY2hlID0gc3RhdGUuY2FjaGVcbiAgY29uc3QgbmV3Q2FjaGUgPSBwcm9jZXNzLmVudi5fX05FWFRfUFBSXG4gICAgPyAvLyBXaGVuIFBQUiBpcyBlbmFibGVkLCB3ZSB1cGRhdGUgdGhlIGNhY2hlIHRvIGRyb3AgdGhlIHByZWZldGNoXG4gICAgICAvLyBkYXRhIGZvciBhbnkgc2VnbWVudCB3aG9zZSBkeW5hbWljIGRhdGEgd2FzIGFscmVhZHkgcmVjZWl2ZWQuIFRoaXNcbiAgICAgIC8vIHByZXZlbnRzIGFuIHVubmVjZXNzYXJ5IGZsYXNoIGJhY2sgdG8gUFBSIHN0YXRlIGR1cmluZyBhXG4gICAgICAvLyBiYWNrL2ZvcndhcmQgbmF2aWdhdGlvbi5cbiAgICAgIHVwZGF0ZUNhY2hlTm9kZU9uUG9wc3RhdGVSZXN0b3JhdGlvbihvbGRDYWNoZSwgdHJlZVRvUmVzdG9yZSlcbiAgICA6IG9sZENhY2hlXG5cbiAgcmV0dXJuIHtcbiAgICAvLyBTZXQgY2Fub25pY2FsIHVybFxuICAgIGNhbm9uaWNhbFVybDogaHJlZixcbiAgICBwdXNoUmVmOiB7XG4gICAgICBwZW5kaW5nUHVzaDogZmFsc2UsXG4gICAgICBtcGFOYXZpZ2F0aW9uOiBmYWxzZSxcbiAgICAgIC8vIEVuc3VyZXMgdGhhdCB0aGUgY3VzdG9tIGhpc3Rvcnkgc3RhdGUgdGhhdCB3YXMgc2V0IGlzIHByZXNlcnZlZCB3aGVuIGFwcGx5aW5nIHRoaXMgdXBkYXRlLlxuICAgICAgcHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGU6IHRydWUsXG4gICAgfSxcbiAgICBmb2N1c0FuZFNjcm9sbFJlZjogc3RhdGUuZm9jdXNBbmRTY3JvbGxSZWYsXG4gICAgY2FjaGU6IG5ld0NhY2hlLFxuICAgIHByZWZldGNoQ2FjaGU6IHN0YXRlLnByZWZldGNoQ2FjaGUsXG4gICAgLy8gUmVzdG9yZSBwcm92aWRlZCB0cmVlXG4gICAgdHJlZTogdHJlZVRvUmVzdG9yZSxcbiAgICBuZXh0VXJsOiBleHRyYWN0UGF0aEZyb21GbGlnaHRSb3V0ZXJTdGF0ZSh0cmVlVG9SZXN0b3JlKSA/PyB1cmwucGF0aG5hbWUsXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJyZXN0b3JlUmVkdWNlciIsInN0YXRlIiwiYWN0aW9uIiwidXJsIiwidHJlZSIsImhyZWYiLCJjcmVhdGVIcmVmRnJvbVVybCIsInRyZWVUb1Jlc3RvcmUiLCJvbGRDYWNoZSIsImNhY2hlIiwibmV3Q2FjaGUiLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX1BQUiIsInVwZGF0ZUNhY2hlTm9kZU9uUG9wc3RhdGVSZXN0b3JhdGlvbiIsImV4dHJhY3RQYXRoRnJvbUZsaWdodFJvdXRlclN0YXRlIiwiY2Fub25pY2FsVXJsIiwicHVzaFJlZiIsInBlbmRpbmdQdXNoIiwibXBhTmF2aWdhdGlvbiIsInByZXNlcnZlQ3VzdG9tSGlzdG9yeVN0YXRlIiwiZm9jdXNBbmRTY3JvbGxSZWYiLCJwcmVmZXRjaENhY2hlIiwibmV4dFVybCIsInBhdGhuYW1lIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/restore-reducer.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/server-action-reducer.js":
|
||
/*!***************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/router-reducer/reducers/server-action-reducer.js ***!
|
||
\***************************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"serverActionReducer\", ({\n enumerable: true,\n get: function() {\n return serverActionReducer;\n }\n}));\nconst _appcallserver = __webpack_require__(/*! ../../../app-call-server */ \"(app-pages-browser)/./node_modules/next/dist/client/app-call-server.js\");\nconst _appfindsourcemapurl = __webpack_require__(/*! ../../../app-find-source-map-url */ \"(app-pages-browser)/./node_modules/next/dist/client/app-find-source-map-url.js\");\nconst _approuterheaders = __webpack_require__(/*! ../../app-router-headers */ \"(app-pages-browser)/./node_modules/next/dist/client/components/app-router-headers.js\");\nconst _client = __webpack_require__(/*! react-server-dom-webpack/client */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react-server-dom-webpack/client.browser.js\");\nconst _routerreducertypes = __webpack_require__(/*! ../router-reducer-types */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst _assignlocation = __webpack_require__(/*! ../../../assign-location */ \"(app-pages-browser)/./node_modules/next/dist/client/assign-location.js\");\nconst _createhreffromurl = __webpack_require__(/*! ../create-href-from-url */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nconst _navigatereducer = __webpack_require__(/*! ./navigate-reducer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js\");\nconst _applyrouterstatepatchtotree = __webpack_require__(/*! ../apply-router-state-patch-to-tree */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/apply-router-state-patch-to-tree.js\");\nconst _isnavigatingtonewrootlayout = __webpack_require__(/*! ../is-navigating-to-new-root-layout */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js\");\nconst _handlemutable = __webpack_require__(/*! ../handle-mutable */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/handle-mutable.js\");\nconst _filllazyitemstillleafwithhead = __webpack_require__(/*! ../fill-lazy-items-till-leaf-with-head */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fill-lazy-items-till-leaf-with-head.js\");\nconst _approuter = __webpack_require__(/*! ../../app-router */ \"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js\");\nconst _hasinterceptionrouteincurrenttree = __webpack_require__(/*! ./has-interception-route-in-current-tree */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/has-interception-route-in-current-tree.js\");\nconst _handlesegmentmismatch = __webpack_require__(/*! ../handle-segment-mismatch */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/handle-segment-mismatch.js\");\nconst _refetchinactiveparallelsegments = __webpack_require__(/*! ../refetch-inactive-parallel-segments */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/refetch-inactive-parallel-segments.js\");\nconst _flightdatahelpers = __webpack_require__(/*! ../../../flight-data-helpers */ \"(app-pages-browser)/./node_modules/next/dist/client/flight-data-helpers.js\");\nconst _redirect = __webpack_require__(/*! ../../redirect */ \"(app-pages-browser)/./node_modules/next/dist/client/components/redirect.js\");\nconst _redirecterror = __webpack_require__(/*! ../../redirect-error */ \"(app-pages-browser)/./node_modules/next/dist/client/components/redirect-error.js\");\nconst _prefetchcacheutils = __webpack_require__(/*! ../prefetch-cache-utils */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/prefetch-cache-utils.js\");\nconst _removebasepath = __webpack_require__(/*! ../../../remove-base-path */ \"(app-pages-browser)/./node_modules/next/dist/client/remove-base-path.js\");\nconst _hasbasepath = __webpack_require__(/*! ../../../has-base-path */ \"(app-pages-browser)/./node_modules/next/dist/client/has-base-path.js\");\nconst _serverreferenceinfo = __webpack_require__(/*! ../../../../shared/lib/server-reference-info */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/server-reference-info.js\");\nconst _segmentcache = __webpack_require__(/*! ../../segment-cache */ \"(app-pages-browser)/./node_modules/next/dist/client/components/segment-cache.js\");\nconst createFromFetch = _client.createFromFetch;\nasync function fetchServerAction(state, nextUrl, param) {\n let { actionId, actionArgs } = param;\n const temporaryReferences = (0, _client.createTemporaryReferenceSet)();\n const info = (0, _serverreferenceinfo.extractInfoFromServerReferenceId)(actionId);\n // TODO: Currently, we're only omitting unused args for the experimental \"use\n // cache\" functions. Once the server reference info byte feature is stable, we\n // should apply this to server actions as well.\n const usedArgs = info.type === 'use-cache' ? (0, _serverreferenceinfo.omitUnusedArgs)(actionArgs, info) : actionArgs;\n const body = await (0, _client.encodeReply)(usedArgs, {\n temporaryReferences\n });\n const res = await fetch(state.canonicalUrl, {\n method: 'POST',\n headers: {\n Accept: _approuterheaders.RSC_CONTENT_TYPE_HEADER,\n [_approuterheaders.ACTION_HEADER]: actionId,\n [_approuterheaders.NEXT_ROUTER_STATE_TREE_HEADER]: (0, _flightdatahelpers.prepareFlightRouterStateForRequest)(state.tree),\n ... false ? 0 : {},\n ...nextUrl ? {\n [_approuterheaders.NEXT_URL]: nextUrl\n } : {}\n },\n body\n });\n // Handle server actions that the server didn't recognize.\n const unrecognizedActionHeader = res.headers.get(_approuterheaders.NEXT_ACTION_NOT_FOUND_HEADER);\n if (unrecognizedActionHeader === '1') {\n throw Object.defineProperty(new Error('Server Action \"' + actionId + '\" was not found on the server. \\nRead more: https://nextjs.org/docs/messages/failed-to-find-server-action'), \"__NEXT_ERROR_CODE\", {\n value: \"E715\",\n enumerable: false,\n configurable: true\n });\n }\n const redirectHeader = res.headers.get('x-action-redirect');\n const [location, _redirectType] = (redirectHeader == null ? void 0 : redirectHeader.split(';')) || [];\n let redirectType;\n switch(_redirectType){\n case 'push':\n redirectType = _redirecterror.RedirectType.push;\n break;\n case 'replace':\n redirectType = _redirecterror.RedirectType.replace;\n break;\n default:\n redirectType = undefined;\n }\n const isPrerender = !!res.headers.get(_approuterheaders.NEXT_IS_PRERENDER_HEADER);\n let revalidatedParts;\n try {\n const revalidatedHeader = JSON.parse(res.headers.get('x-action-revalidated') || '[[],0,0]');\n revalidatedParts = {\n paths: revalidatedHeader[0] || [],\n tag: !!revalidatedHeader[1],\n cookie: revalidatedHeader[2]\n };\n } catch (e) {\n revalidatedParts = NO_REVALIDATED_PARTS;\n }\n const redirectLocation = location ? (0, _assignlocation.assignLocation)(location, new URL(state.canonicalUrl, window.location.href)) : undefined;\n const contentType = res.headers.get('content-type');\n const isRscResponse = !!(contentType && contentType.startsWith(_approuterheaders.RSC_CONTENT_TYPE_HEADER));\n // Handle invalid server action responses.\n // A valid response must have `content-type: text/x-component`, unless it's an external redirect.\n // (external redirects have an 'x-action-redirect' header, but the body is an empty 'text/plain')\n if (!isRscResponse && !redirectLocation) {\n // The server can respond with a text/plain error message, but we'll fallback to something generic\n // if there isn't one.\n const message = res.status >= 400 && contentType === 'text/plain' ? await res.text() : 'An unexpected response was received from the server.';\n throw Object.defineProperty(new Error(message), \"__NEXT_ERROR_CODE\", {\n value: \"E394\",\n enumerable: false,\n configurable: true\n });\n }\n let actionResult;\n let actionFlightData;\n if (isRscResponse) {\n const response = await createFromFetch(Promise.resolve(res), {\n callServer: _appcallserver.callServer,\n findSourceMapURL: _appfindsourcemapurl.findSourceMapURL,\n temporaryReferences\n });\n // An internal redirect can send an RSC response, but does not have a useful `actionResult`.\n actionResult = redirectLocation ? undefined : response.a;\n actionFlightData = (0, _flightdatahelpers.normalizeFlightData)(response.f);\n } else {\n // An external redirect doesn't contain RSC data.\n actionResult = undefined;\n actionFlightData = undefined;\n }\n return {\n actionResult,\n actionFlightData,\n redirectLocation,\n redirectType,\n revalidatedParts,\n isPrerender\n };\n}\nconst NO_REVALIDATED_PARTS = {\n paths: [],\n tag: false,\n cookie: false\n};\nfunction serverActionReducer(state, action) {\n const { resolve, reject } = action;\n const mutable = {};\n let currentTree = state.tree;\n mutable.preserveCustomHistoryState = false;\n // only pass along the `nextUrl` param (used for interception routes) if the current route was intercepted.\n // If the route has been intercepted, the action should be as well.\n // Otherwise the server action might be intercepted with the wrong action id\n // (ie, one that corresponds with the intercepted route)\n const nextUrl = state.nextUrl && (0, _hasinterceptionrouteincurrenttree.hasInterceptionRouteInCurrentTree)(state.tree) ? state.nextUrl : null;\n const navigatedAt = Date.now();\n return fetchServerAction(state, nextUrl, action).then(async (param)=>{\n let { actionResult, actionFlightData: flightData, redirectLocation, redirectType, isPrerender, revalidatedParts } = param;\n let redirectHref;\n // honor the redirect type instead of defaulting to push in case of server actions.\n if (redirectLocation) {\n if (redirectType === _redirecterror.RedirectType.replace) {\n state.pushRef.pendingPush = false;\n mutable.pendingPush = false;\n } else {\n state.pushRef.pendingPush = true;\n mutable.pendingPush = true;\n }\n redirectHref = (0, _createhreffromurl.createHrefFromUrl)(redirectLocation, false);\n mutable.canonicalUrl = redirectHref;\n }\n if (!flightData) {\n resolve(actionResult);\n // If there is a redirect but no flight data we need to do a mpaNavigation.\n if (redirectLocation) {\n return (0, _navigatereducer.handleExternalUrl)(state, mutable, redirectLocation.href, state.pushRef.pendingPush);\n }\n return state;\n }\n if (typeof flightData === 'string') {\n // Handle case when navigating to page in `pages` from `app`\n resolve(actionResult);\n return (0, _navigatereducer.handleExternalUrl)(state, mutable, flightData, state.pushRef.pendingPush);\n }\n const actionRevalidated = revalidatedParts.paths.length > 0 || revalidatedParts.tag || revalidatedParts.cookie;\n for (const normalizedFlightData of flightData){\n const { tree: treePatch, seedData: cacheNodeSeedData, head, isRootRender } = normalizedFlightData;\n if (!isRootRender) {\n // TODO-APP: handle this case better\n console.log('SERVER ACTION APPLY FAILED');\n resolve(actionResult);\n return state;\n }\n // Given the path can only have two items the items are only the router state and rsc for the root.\n const newTree = (0, _applyrouterstatepatchtotree.applyRouterStatePatchToTree)([\n ''\n ], currentTree, treePatch, redirectHref ? redirectHref : state.canonicalUrl);\n if (newTree === null) {\n resolve(actionResult);\n return (0, _handlesegmentmismatch.handleSegmentMismatch)(state, action, treePatch);\n }\n if ((0, _isnavigatingtonewrootlayout.isNavigatingToNewRootLayout)(currentTree, newTree)) {\n resolve(actionResult);\n return (0, _navigatereducer.handleExternalUrl)(state, mutable, redirectHref || state.canonicalUrl, state.pushRef.pendingPush);\n }\n // The server sent back RSC data for the server action, so we need to apply it to the cache.\n if (cacheNodeSeedData !== null) {\n const rsc = cacheNodeSeedData[1];\n const cache = (0, _approuter.createEmptyCacheNode)();\n cache.rsc = rsc;\n cache.prefetchRsc = null;\n cache.loading = cacheNodeSeedData[3];\n (0, _filllazyitemstillleafwithhead.fillLazyItemsTillLeafWithHead)(navigatedAt, cache, undefined, treePatch, cacheNodeSeedData, head, undefined);\n mutable.cache = cache;\n if (false) {} else {\n mutable.prefetchCache = new Map();\n }\n if (actionRevalidated) {\n await (0, _refetchinactiveparallelsegments.refreshInactiveParallelSegments)({\n navigatedAt,\n state,\n updatedTree: newTree,\n updatedCache: cache,\n includeNextUrl: Boolean(nextUrl),\n canonicalUrl: mutable.canonicalUrl || state.canonicalUrl\n });\n }\n }\n mutable.patchedTree = newTree;\n currentTree = newTree;\n }\n if (redirectLocation && redirectHref) {\n if ( true && !actionRevalidated) {\n // Because the RedirectBoundary will trigger a navigation, we need to seed the prefetch cache\n // with the FlightData that we got from the server action for the target page, so that it's\n // available when the page is navigated to and doesn't need to be re-fetched.\n // We only do this if the server action didn't revalidate any data, as in that case the\n // client cache will be cleared and the data will be re-fetched anyway.\n // NOTE: We don't do this in the Segment Cache implementation.\n // Dynamic data should never be placed into the cache, unless it's\n // \"converted\" to static data using <Link prefetch={true}>. What we\n // do instead is re-prefetch links and forms whenever the cache is\n // invalidated.\n (0, _prefetchcacheutils.createSeededPrefetchCacheEntry)({\n url: redirectLocation,\n data: {\n flightData,\n canonicalUrl: undefined,\n couldBeIntercepted: false,\n prerendered: false,\n postponed: false,\n // TODO: We should be able to set this if the server action\n // returned a fully static response.\n staleTime: -1\n },\n tree: state.tree,\n prefetchCache: state.prefetchCache,\n nextUrl: state.nextUrl,\n kind: isPrerender ? _routerreducertypes.PrefetchKind.FULL : _routerreducertypes.PrefetchKind.AUTO\n });\n mutable.prefetchCache = state.prefetchCache;\n }\n // If the action triggered a redirect, the action promise will be rejected with\n // a redirect so that it's handled by RedirectBoundary as we won't have a valid\n // action result to resolve the promise with. This will effectively reset the state of\n // the component that called the action as the error boundary will remount the tree.\n // The status code doesn't matter here as the action handler will have already sent\n // a response with the correct status code.\n reject((0, _redirect.getRedirectError)((0, _hasbasepath.hasBasePath)(redirectHref) ? (0, _removebasepath.removeBasePath)(redirectHref) : redirectHref, redirectType || _redirecterror.RedirectType.push));\n } else {\n resolve(actionResult);\n }\n return (0, _handlemutable.handleMutable)(state, mutable);\n }, (e)=>{\n // When the server action is rejected we don't update the state and instead call the reject handler of the promise.\n reject(e);\n return state;\n });\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=server-action-reducer.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvc2VydmVyLWFjdGlvbi1yZWR1Y2VyLmpzIiwibWFwcGluZ3MiOiI7Ozs7dURBbU5nQkE7OztlQUFBQTs7OzJDQS9NVztpREFDTTs4Q0FRMUI7b0NBUUE7Z0RBUUE7NENBQ3dCOytDQUNHOzZDQUNBO3lEQUNVO3lEQUNBOzJDQUVkOzJEQUNnQjt1Q0FDVDsrREFDYTttREFDWjs2REFDVTsrQ0FLekM7c0NBQzBCOzJDQUNKO2dEQUNrQjs0Q0FDaEI7eUNBQ0g7aURBSXJCOzBDQUMrQjtBQUV0QyxNQUFNQyxrQkFDSkMsUUFBQUEsZUFBc0I7QUFleEIsZUFBZUMsa0JBQ2JDLEtBQTJCLEVBQzNCQyxPQUF3QyxFQUN4QyxLQUE0QztJQUE1QyxNQUFFQyxRQUFRLEVBQUVDLFVBQVUsRUFBc0IsR0FBNUM7SUFFQSxNQUFNQyxzQkFBc0JDLENBQUFBLEdBQUFBLFFBQUFBLDJCQUFBQTtJQUM1QixNQUFNQyxPQUFPQyxDQUFBQSxHQUFBQSxxQkFBQUEsZ0NBQWdDLEVBQUNMO0lBRTlDLDZFQUE2RTtJQUM3RSw4RUFBOEU7SUFDOUUsK0NBQStDO0lBQy9DLE1BQU1NLFdBQ0pGLEtBQUtHLElBQUksS0FBSyxjQUFjQyxDQUFBQSxHQUFBQSxxQkFBQUEsY0FBQUEsRUFBZVAsWUFBWUcsUUFBUUg7SUFFakUsTUFBTVEsT0FBTyxNQUFNQyxDQUFBQSxHQUFBQSxRQUFBQSxXQUFBQSxFQUFZSixVQUFVO1FBQUVKO0lBQW9CO0lBRS9ELE1BQU1TLE1BQU0sTUFBTUMsTUFBTWQsTUFBTWUsWUFBWSxFQUFFO1FBQzFDQyxRQUFRO1FBQ1JDLFNBQVM7WUFDUEMsUUFBUUMsa0JBQUFBLHVCQUF1QjtZQUMvQixDQUFDQyxrQkFBQUEsYUFBYSxDQUFDLEVBQUVsQjtZQUNqQixDQUFDbUIsa0JBQUFBLDZCQUE2QixDQUFDLEVBQUVDLENB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L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3JlZHVjZXJzL3NlcnZlci1hY3Rpb24tcmVkdWNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIEFjdGlvbkZsaWdodFJlc3BvbnNlLFxuICBBY3Rpb25SZXN1bHQsXG59IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL3R5cGVzJ1xuaW1wb3J0IHsgY2FsbFNlcnZlciB9IGZyb20gJy4uLy4uLy4uL2FwcC1jYWxsLXNlcnZlcidcbmltcG9ydCB7IGZpbmRTb3VyY2VNYXBVUkwgfSBmcm9tICcuLi8uLi8uLi9hcHAtZmluZC1zb3VyY2UtbWFwLXVybCdcbmltcG9ydCB7XG4gIEFDVElPTl9IRUFERVIsXG4gIE5FWFRfQUNUSU9OX05PVF9GT1VORF9IRUFERVIsXG4gIE5FWFRfSVNfUFJFUkVOREVSX0hFQURFUixcbiAgTkVYVF9ST1VURVJfU1RBVEVfVFJFRV9IRUFERVIsXG4gIE5FWFRfVVJMLFxuICBSU0NfQ09OVEVOVF9UWVBFX0hFQURFUixcbn0gZnJvbSAnLi4vLi4vYXBwLXJvdXRlci1oZWFkZXJzJ1xuXG4vLyBUT0RPOiBFeHBsaWNpdGx5IGltcG9ydCBmcm9tIGNsaWVudC5icm93c2VyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzXG5pbXBvcnQge1xuICBjcmVhdGVGcm9tRmV0Y2ggYXMgY3JlYXRlRnJvbUZldGNoQnJvd3NlcixcbiAgY3JlYXRlVGVtcG9yYXJ5UmVmZXJlbmNlU2V0LFxuICBlbmNvZGVSZXBseSxcbn0gZnJvbSAncmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrL2NsaWVudCdcblxuaW1wb3J0IHtcbiAgUHJlZmV0Y2hLaW5kLFxuICB0eXBlIFJlYWRvbmx5UmVkdWNlclN0YXRlLFxuICB0eXBlIFJlZHVjZXJTdGF0ZSxcbiAgdHlwZSBTZXJ2ZXJBY3Rpb25BY3Rpb24sXG4gIHR5cGUgU2VydmVyQWN0aW9uTXV0YWJsZSxcbn0gZnJvbSAnLi4vcm91dGVyLXJlZHVjZXItdHlwZXMnXG5pbXBvcnQgeyBhc3NpZ25Mb2NhdGlvbiB9IGZyb20gJy4uLy4uLy4uL2Fzc2lnbi1sb2NhdGlvbidcbmltcG9ydCB7IGNyZWF0ZUhyZWZGcm9tVXJsIH0gZnJvbSAnLi4vY3JlYXRlLWhyZWYtZnJvbS11cmwnXG5pbXBvcnQgeyBoYW5kbGVFeHRlcm5hbFVybCB9IGZyb20gJy4vbmF2aWdhdGUtcmVkdWNlcidcbmltcG9ydCB7IGFwcGx5Um91dGVyU3RhdGVQYXRjaFRvVHJlZSB9IGZyb20gJy4uL2FwcGx5LXJvdXRlci1zdGF0ZS1wYXRjaC10by10cmVlJ1xuaW1wb3J0IHsgaXNOYXZpZ2F0aW5nVG9OZXdSb290TGF5b3V0IH0gZnJvbSAnLi4vaXMtbmF2aWdhdGluZy10by1uZXctcm9vdC1sYXlvdXQnXG5pbXBvcnQgdHlwZSB7IENhY2hlTm9kZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9saWIvYXBwLXJvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHsgaGFuZGxlTXV0YWJsZSB9IGZyb20gJy4uL2hhbmRsZS1tdXRhYmxlJ1xuaW1wb3J0IHsgZmlsbExhenlJdGVtc1RpbGxMZWFmV2l0aEhlYWQgfSBmcm9tICcuLi9maWxsLWxhenktaXRlbXMtdGlsbC1sZWFmLXdpdGgtaGVhZCdcbmltcG9ydCB7IGNyZWF0ZUVtcHR5Q2FjaGVOb2RlIH0gZnJvbSAnLi4vLi4vYXBwLXJvdXRlcidcbmltcG9ydCB7IGhhc0ludGVyY2VwdGlvblJvdXRlSW5DdXJyZW50VHJlZSB9IGZyb20gJy4vaGFzLWludGVyY2VwdGlvbi1yb3V0ZS1pbi1jdXJyZW50LXRyZWUnXG5pbXBvcnQgeyBoYW5kbGVTZWdtZW50TWlzbWF0Y2ggfSBmcm9tICcuLi9oYW5kbGUtc2VnbWVudC1taXNtYXRjaCdcbmltcG9ydCB7IHJlZnJlc2hJbmFjdGl2ZVBhcmFsbGVsU2VnbWVudHMgfSBmcm9tICcuLi9yZWZldGNoLWluYWN0aXZlLXBhcmFsbGVsLXNlZ21lbnRzJ1xuaW1wb3J0IHtcbiAgbm9ybWFsaXplRmxpZ2h0RGF0YSxcbiAgcHJlcGFyZUZsaWdodFJvdXRlclN0YXRlRm9yUmVxdWVzdCxcbiAgdHlwZSBOb3JtYWxpemVkRmxpZ2h0RGF0YSxcbn0gZnJvbSAnLi4vLi4vLi4vZmxpZ2h0LWRhdGEtaGVscGVycydcbmltcG9ydCB7IGdldFJlZGlyZWN0RXJyb3IgfSBmcm9tICcuLi8uLi9yZWRpcmVjdCdcbmltcG9ydCB7IFJlZGlyZWN0VHlwZSB9IGZyb20gJy4uLy4uL3JlZGlyZWN0LWVycm9yJ1xuaW1wb3J0IHsgY3JlYXRlU2VlZGVkUHJlZmV0Y2hDYWNoZUVudHJ5IH0gZnJvbSAnLi4vcHJlZmV0Y2gtY2FjaGUtdXRpbHMnXG5pbXBvcnQgeyByZW1vdmVCYXNlUGF0aCB9IGZyb20gJy4uLy4uLy4uL3JlbW92ZS1iYXNlLXBhdGgnXG5pbXBvcnQgeyBoYXNCYXNlUGF0aCB9IGZyb20gJy4uLy4uLy4uL2hhcy1iYXNlLXBhdGgnXG5pbXBvcnQge1xuICBleHRyYWN0SW5mb0Zyb21TZXJ2ZXJSZWZlcmVuY2VJZCxcbiAgb21pdFVudXNlZEFyZ3MsXG59IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9saWIvc2VydmVyLXJlZmVyZW5jZS1pbmZvJ1xuaW1wb3J0IHsgcmV2YWxpZGF0ZUVudGlyZUNhY2hlIH0gZnJvbSAnLi4vLi4vc2VnbWVudC1jYWNoZSdcblxuY29uc3QgY3JlYXRlRnJvbUZldGNoID1cbiAgY3JlYXRlRnJvbUZldGNoQnJvd3NlciBhcyAodHlwZW9mIGltcG9ydCgncmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrL2NsaWVudC5icm93c2VyJykpWydjcmVhdGVGcm9tRmV0Y2gnXVxuXG50eXBlIEZldGNoU2VydmVyQWN0aW9uUmVzdWx0ID0ge1xuICByZWRpcmVjdExvY2F0aW9uOiBVUkwgfCB1bmRlZmluZWRcbiAgcmVkaXJlY3RUeXBlOiBSZWRpcmVjdFR5cGUgfCB1bmRlZmluZWRcbiAgYWN0aW9uUmVzdWx0OiBBY3Rpb25SZXN1bHQgfCB1bmRlZmluZWRcbiAgYWN0aW9uRmxpZ2h0RGF0YTogTm9ybWFsaXplZEZsaWdodERhdGFbXSB8IHN0cmluZyB8IHVuZGVmaW5lZFxuICBpc1ByZXJlbmRlcjogYm9vbGVhblxuICByZXZhbGlkYXRlZFBhcnRzOiB7XG4gICAgdGFnOiBib29sZWFuXG4gICAgY29va2llOiBib29sZWFuXG4gICAgcGF0aHM6IHN0cmluZ1tdXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hTZXJ2ZXJBY3Rpb24oXG4gIHN0YXRlOiBSZWFkb25seVJlZHVjZXJTdGF0ZSxcbiAgbmV4dFVybDogUmVhZG9ubHlSZWR1Y2VyU3RhdGVbJ25leHRVcmwnXSxcbiAgeyBhY3Rpb25JZCwgYWN0aW9uQXJncyB9OiBTZXJ2ZXJBY3Rpb25BY3Rpb25cbik6IFByb21pc2U8RmV0Y2hTZXJ2ZXJBY3Rpb25SZXN1bHQ+IHtcbiAgY29uc3QgdGVtcG9yYXJ5UmVmZXJlbmNlcyA9IGNyZWF0ZVRlbXBvcmFyeVJlZmVyZW5jZVNldCgpXG4gIGNvbnN0IGluZm8gPSBleHRyYWN0SW5mb0Zyb21TZXJ2ZXJSZWZlcmVuY2VJZChhY3Rpb25JZClcblxuICAvLyBUT0RPOiBDdXJyZW50bHksIHdlJ3JlIG9ubHkgb21pdHRpbmcgdW51c2VkIGFyZ3MgZm9yIHRoZSBleHBlcmltZW50YWwgXCJ1c2VcbiAgLy8gY2FjaGVcIiBmdW5jdGlvbnMuIE9uY2UgdGhlIHNlcnZlciByZWZlcmVuY2UgaW5mbyBieXRlIGZlYXR1cmUgaXMgc3RhYmxlLCB3ZVxuICAvLyBzaG91bGQgYXBwbHkgdGhpcyB0byBzZXJ2ZXIgYWN0aW9ucyBhcyB3ZWxsLlxuICBjb25zdCB1c2VkQXJncyA9XG4gICAgaW5mby50eXBlID09PSAndXNlLWNhY2hlJyA/IG9taXRVbnVzZWRBcmdzKGFjdGlvbkFyZ3MsIGluZm8pIDogYWN0aW9uQXJnc1xuXG4gIGNvbnN0IGJvZHkgPSBhd2FpdCBlbmNvZGVSZXBseSh1c2VkQXJncywgeyB0ZW1wb3JhcnlSZWZlcmVuY2VzIH0pXG5cbiAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goc3RhdGUuY2Fub25pY2FsVXJsLCB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgaGVhZGVyczoge1xuICAgICAgQWNjZXB0OiBSU0NfQ09OVEVOVF9UWVBFX0hFQURFUixcbiAgICAgIFtBQ1RJT05fSEVBREVSXTogYWN0aW9uSWQsXG4gICAgICBbTkVYVF9ST1VURVJfU1RBVEVfVFJFRV9IRUFERVJdOiBwcmVwYXJlRmxpZ2h0Um91dGVyU3RhdGVGb3JSZXF1ZXN0KFxuICAgICAgICBzdGF0ZS50cmVlXG4gICAgICApLFxuICAgICAgLi4uKHByb2Nlc3MuZW52Lk5FWFRfREVQTE9ZTUVOVF9JRFxuICAgICAgICA/IHtcbiAgICAgICAgICAgICd4LWRlcGxveW1lbnQtaWQnOiBwcm9jZXNzLmVudi5ORVhUX0RFUExPWU1FTlRfSUQsXG4gICAgICAgICAgfVxuICAgICAgICA6IHt9KSxcbiAgICAgIC4uLihuZXh0VXJsXG4gICAgICAgID8ge1xuICAgICAgICAgICAgW05FWFRfVVJMXTogbmV4dFVybCxcbiAgICAgICAgICB9XG4gICAgICAgIDoge30pLFxuICAgIH0sXG4gICAgYm9keSxcbiAgfSlcblxuICAvLyBIYW5kbGUgc2VydmVyIGFjdGlvbnMgdGhhdCB0aGUgc2VydmVyIGRpZG4ndCByZWNvZ25pemUuXG4gIGNvbnN0IHVucmVjb2duaXplZEFjdGlvbkhlYWRlciA9IHJlcy5oZWFkZXJzLmdldChORVhUX0FDVElPTl9OT1RfRk9VTkRfSEVBREVSKVxuICBpZiAodW5yZWNvZ25pemVkQWN0aW9uSGVhZGVyID09PSAnMScpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgU2VydmVyIEFjdGlvbiBcIiR7YWN0aW9uSWR9XCIgd2FzIG5vdCBmb3VuZCBvbiB0aGUgc2VydmVyLiBcXG5SZWFkIG1vcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL2ZhaWxlZC10by1maW5kLXNlcnZlci1hY3Rpb25gXG4gICAgKVxuICB9XG5cbiAgY29uc3QgcmVkaXJlY3RIZWFkZXIgPSByZXMuaGVhZGVycy5nZXQoJ3gtYWN0aW9uLXJlZGlyZWN0JylcbiAgY29uc3QgW2xvY2F0aW9uLCBfcmVkaXJlY3RUeXBlXSA9IHJlZGlyZWN0SGVhZGVyPy5zcGxpdCgnOycpIHx8IFtdXG4gIGxldCByZWRpcmVjdFR5cGU6IFJlZGlyZWN0VHlwZSB8IHVuZGVmaW5lZFxuICBzd2l0Y2ggKF9yZWRpcmVjdFR5cGUpIHtcbiAgICBjYXNlICdwdXNoJzpcbiAgICAgIHJlZGlyZWN0VHlwZSA9IFJlZGlyZWN0VHlwZS5wdXNoXG4gICAgICBicmVha1xuICAgIGNhc2UgJ3JlcGxhY2UnOlxuICAgICAgcmVkaXJlY3RUeXBlID0gUmVkaXJlY3RUeXBlLnJlcGxhY2VcbiAgICAgIGJyZWFrXG4gICAgZGVmYXVsdDpcbiAgICAgIHJlZGlyZWN0VHlwZSA9IHVuZGVmaW5lZFxuICB9XG5cbiAgY29uc3QgaXNQcmVyZW5kZXIgPSAhIXJlcy5oZWFkZXJzLmdldChORVhUX0lTX1BSRVJFTkRFUl9IRUFERVIpXG4gIGxldCByZXZhbGlkYXRlZFBhcnRzOiBGZXRjaFNlcnZlckFjdGlvblJlc3VsdFsncmV2YWxpZGF0ZWRQYXJ0cyddXG4gIHRyeSB7XG4gICAgY29uc3QgcmV2YWxpZGF0ZWRIZWFkZXIgPSBKU09OLnBhcnNlKFxuICAgICAgcmVzLmhlYWRlcnMuZ2V0KCd4LWFjdGlvbi1yZXZhbGlkYXRlZCcpIHx8ICdbW10sMCwwXSdcbiAgICApXG4gICAgcmV2YWxpZGF0ZWRQYXJ0cyA9IHtcbiAgICAgIHBhdGhzOiByZXZhbGlkYXRlZEhlYWRlclswXSB8fCBbXSxcbiAgICAgIHRhZzogISFyZXZhbGlkYXRlZEhlYWRlclsxXSxcbiAgICAgIGNvb2tpZTogcmV2YWxpZGF0ZWRIZWFkZXJbMl0sXG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV2YWxpZGF0ZWRQYXJ0cyA9IE5PX1JFVkFMSURBVEVEX1BBUlRTXG4gIH1cblxuICBjb25zdCByZWRpcmVjdExvY2F0aW9uID0gbG9jYXRpb25cbiAgICA/IGFzc2lnbkxvY2F0aW9uKFxuICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgbmV3IFVSTChzdGF0ZS5jYW5vbmljYWxVcmwsIHdpbmRvdy5sb2NhdGlvbi5ocmVmKVxuICAgICAgKVxuICAgIDogdW5kZWZpbmVkXG5cbiAgY29uc3QgY29udGVudFR5cGUgPSByZXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpXG4gIGNvbnN0IGlzUnNjUmVzcG9uc2UgPSAhIShcbiAgICBjb250ZW50VHlwZSAmJiBjb250ZW50VHlwZS5zdGFydHNXaXRoKFJTQ19DT05URU5UX1RZUEVfSEVBREVSKVxuICApXG5cbiAgLy8gSGFuZGxlIGludmFsaWQgc2VydmVyIGFjdGlvbiByZXNwb25zZXMuXG4gIC8vIEEgdmFsaWQgcmVzcG9uc2UgbXVzdCBoYXZlIGBjb250ZW50LXR5cGU6IHRleHQveC1jb21wb25lbnRgLCB1bmxlc3MgaXQncyBhbiBleHRlcm5hbCByZWRpcmVjdC5cbiAgLy8gKGV4dGVybmFsIHJlZGlyZWN0cyBoYXZlIGFuICd4LWFjdGlvbi1yZWRpcmVjdCcgaGVhZGVyLCBidXQgdGhlIGJvZHkgaXMgYW4gZW1wdHkgJ3RleHQvcGxhaW4nKVxuICBpZiAoIWlzUnNjUmVzcG9uc2UgJiYgIXJlZGlyZWN0TG9jYXRpb24pIHtcbiAgICAvLyBUaGUgc2VydmVyIGNhbiByZXNwb25kIHdpdGggYSB0ZXh0L3BsYWluIGVycm9yIG1lc3NhZ2UsIGJ1dCB3ZSdsbCBmYWxsYmFjayB0byBzb21ldGhpbmcgZ2VuZXJpY1xuICAgIC8vIGlmIHRoZXJlIGlzbid0IG9uZS5cbiAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgIHJlcy5zdGF0dXMgPj0gNDAwICYmIGNvbnRlbnRUeXBlID09PSAndGV4dC9wbGFpbidcbiAgICAgICAgPyBhd2FpdCByZXMudGV4dCgpXG4gICAgICAgIDogJ0FuIHVuZXhwZWN0ZWQgcmVzcG9uc2Ugd2FzIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlci4nXG5cbiAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSlcbiAgfVxuXG4gIGxldCBhY3Rpb25SZXN1bHQ6IEZldGNoU2VydmVyQWN0aW9uUmVzdWx0WydhY3Rpb25SZXN1bHQnXVxuICBsZXQgYWN0aW9uRmxpZ2h0RGF0YTogRmV0Y2hTZXJ2ZXJBY3Rpb25SZXN1bHRbJ2FjdGlvbkZsaWdodERhdGEnXVxuICBpZiAoaXNSc2NSZXNwb25zZSkge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBBY3Rpb25GbGlnaHRSZXNwb25zZSA9IGF3YWl0IGNyZWF0ZUZyb21GZXRjaChcbiAgICAgIFByb21pc2UucmVzb2x2ZShyZXMpLFxuICAgICAgeyBjYWxsU2VydmVyLCBmaW5kU291cmNlTWFwVVJMLCB0ZW1wb3JhcnlSZWZlcmVuY2VzIH1cbiAgICApXG4gICAgLy8gQW4gaW50ZXJuYWwgcmVkaXJlY3QgY2FuIHNlbmQgYW4gUlNDIHJlc3BvbnNlLCBidXQgZG9lcyBub3QgaGF2ZSBhIHVzZWZ1bCBgYWN0aW9uUmVzdWx0YC5cbiAgICBhY3Rpb25SZXN1bHQgPSByZWRpcmVjdExvY2F0aW9uID8gdW5kZWZpbmVkIDogcmVzcG9uc2UuYVxuICAgIGFjdGlvbkZsaWdodERhdGEgPSBub3JtYWxpemVGbGlnaHREYXRhKHJlc3BvbnNlLmYpXG4gIH0gZWxzZSB7XG4gICAgLy8gQW4gZXh0ZXJuYWwgcmVkaXJlY3QgZG9lc24ndCBjb250YWluIFJTQyBkYXRhLlxuICAgIGFjdGlvblJlc3VsdCA9IHVuZGVmaW5lZFxuICAgIGFjdGlvbkZsaWdodERhdGEgPSB1bmRlZmluZWRcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYWN0aW9uUmVzdWx0LFxuICAgIGFjdGlvbkZsaWdodERhdGEsXG4gICAgcmVkaXJlY3RMb2NhdGlvbixcbiAgICByZWRpcmVjdFR5cGUsXG4gICAgcmV2YWxpZGF0ZWRQYXJ0cyxcbiAgICBpc1ByZXJlbmRlcixcbiAgfVxufVxuXG5jb25zdCBOT19SRVZBTElEQVRFRF9QQVJUUyA9IHtcbiAgcGF0aHM6IFtdLFxuICB0YWc6IGZhbHNlLFxuICBjb29raWU6IGZhbHNlLFxufVxuXG4vKlxuICogVGhpcyByZWR1Y2VyIGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIHRoZSBzZXJ2ZXIgYWN0aW9uIGFuZCBwcm9jZXNzaW5nIGFueSBzaWRlLWVmZmVjdHMgZnJvbSB0aGUgc2VydmVyIGFjdGlvbi5cbiAqIEl0IGRvZXMgbm90IG11dGF0ZSB0aGUgc3RhdGUgYnkgaXRzZWxmIGJ1dCByYXRoZXIgZGVsZWdhdGVzIHRvIG90aGVyIHJlZHVjZXJzIHRvIGRvIHRoZSBhY3R1YWwgbXV0YXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJ2ZXJBY3Rpb25SZWR1Y2VyKFxuICBzdGF0ZTogUmVhZG9ubHlSZWR1Y2VyU3RhdGUsXG4gIGFjdGlvbjogU2VydmVyQWN0aW9uQWN0aW9uXG4pOiBSZWR1Y2VyU3RhdGUge1xuICBjb25zdCB7IHJlc29sdmUsIHJlamVjdCB9ID0gYWN0aW9uXG4gIGNvbnN0IG11dGFibGU6IFNlcnZlckFjdGlvbk11dGFibGUgPSB7fVxuXG4gIGxldCBjdXJyZW50VHJlZSA9IHN0YXRlLnRyZWVcblxuICBtdXRhYmxlLnByZXNlcnZlQ3VzdG9tSGlzdG9yeVN0YXRlID0gZmFsc2VcblxuICAvLyBvbmx5IHBhc3MgYWxvbmcgdGhlIGBuZXh0VXJsYCBwYXJhbSAodXNlZCBmb3IgaW50ZXJjZXB0aW9uIHJvdXRlcykgaWYgdGhlIGN1cnJlbnQgcm91dGUgd2FzIGludGVyY2VwdGVkLlxuICAvLyBJZiB0aGUgcm91dGUgaGFzIGJlZW4gaW50ZXJjZXB0ZWQsIHRoZSBhY3Rpb24gc2hvdWxkIGJlIGFzIHdlbGwuXG4gIC8vIE90aGVyd2lzZSB0aGUgc2VydmVyIGFjdGlvbiBtaWdodCBiZSBpbnRlcmNlcHRlZCB3aXRoIHRoZSB3cm9uZyBhY3Rpb24gaWRcbiAgLy8gKGllLCBvbmUgdGhhdCBjb3JyZXNwb25kcyB3aXRoIHRoZSBpbnRlcmNlcHRlZCByb3V0ZSlcbiAgY29uc3QgbmV4dFVybCA9XG4gICAgc3RhdGUubmV4dFVybCAmJiBoYXNJbnRlcmNlcHRpb25Sb3V0ZUluQ3VycmVudFRyZWUoc3RhdGUudHJlZSlcbiAgICAgID8gc3RhdGUubmV4dFVybFxuICAgICAgOiBudWxsXG5cbiAgY29uc3QgbmF2aWdhdGVkQXQgPSBEYXRlLm5vdygpXG5cbiAgcmV0dXJuIGZldGNoU2VydmVyQWN0aW9uKHN0YXRlLCBuZXh0VXJsLCBhY3Rpb24pLnRoZW4oXG4gICAgYXN5bmMgKHtcbiAgICAgIGFjdGlvblJlc3VsdCxcbiAgICAgIGFjdGlvbkZsaWdodERhdGE6IGZsaWdodERhdGEsXG4gICAgICByZWRpcmVjdExvY2F0aW9uLFxuICAgICAgcmVkaXJlY3RUeXBlLFxuICAgICAgaXNQcmVyZW5kZXIsXG4gICAgICByZXZhbGlkYXRlZFBhcnRzLFxuICAgIH0pID0+IHtcbiAgICAgIGxldCByZWRpcmVjdEhyZWY6IHN0cmluZyB8IHVuZGVmaW5lZFxuXG4gICAgICAvLyBob25vciB0aGUgcmVkaXJlY3QgdHlwZSBpbnN0ZWFkIG9mIGRlZmF1bHRpbmcgdG8gcHVzaCBpbiBjYXNlIG9mIHNlcnZlciBhY3Rpb25zLlxuICAgICAgaWYgKHJlZGlyZWN0TG9jYXRpb24pIHtcbiAgICAgICAgaWYgKHJlZGlyZWN0VHlwZSA9PT0gUmVkaXJlY3RUeXBlLnJlcGxhY2UpIHtcbiAgICAgICAgICBzdGF0ZS5wdXNoUmVmLnBlbmRpbmdQdXNoID0gZmFsc2VcbiAgICAgICAgICBtdXRhYmxlLnBlbmRpbmdQdXNoID0gZmFsc2VcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZS5wdXNoUmVmLnBlbmRpbmdQdXNoID0gdHJ1ZVxuICAgICAgICAgIG11dGFibGUucGVuZGluZ1B1c2ggPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICByZWRpcmVjdEhyZWYgPSBjcmVhdGVIcmVmRnJvbVVybChyZWRpcmVjdExvY2F0aW9uLCBmYWxzZSlcbiAgICAgICAgbXV0YWJsZS5jYW5vbmljYWxVcmwgPSByZWRpcmVjdEhyZWZcbiAgICAgIH1cblxuICAgICAgaWYgKCFmbGlnaHREYXRhKSB7XG4gICAgICAgIHJlc29sdmUoYWN0aW9uUmVzdWx0KVxuXG4gICAgICAgIC8vIElmIHRoZXJlIGlzIGEgcmVkaXJlY3QgYnV0IG5vIGZsaWdodCBkYXRhIHdlIG5lZWQgdG8gZG8gYSBtcGFOYXZpZ2F0aW9uLlxuICAgICAgICBpZiAocmVkaXJlY3RMb2NhdGlvbikge1xuICAgICAgICAgIHJldHVybiBoYW5kbGVFeHRlcm5hbFVybChcbiAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgbXV0YWJsZSxcbiAgICAgICAgICAgIHJlZGlyZWN0TG9jYXRpb24uaHJlZixcbiAgICAgICAgICAgIHN0YXRlLnB1c2hSZWYucGVuZGluZ1B1c2hcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YXRlXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZmxpZ2h0RGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gSGFuZGxlIGNhc2Ugd2hlbiBuYXZpZ2F0aW5nIHRvIHBhZ2UgaW4gYHBhZ2VzYCBmcm9tIGBhcHBgXG4gICAgICAgIHJlc29sdmUoYWN0aW9uUmVzdWx0KVxuXG4gICAgICAgIHJldHVybiBoYW5kbGVFeHRlcm5hbFVybChcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBtdXRhYmxlLFxuICAgICAgICAgIGZsaWdodERhdGEsXG4gICAgICAgICAgc3RhdGUucHVzaFJlZi5wZW5kaW5nUHVzaFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFjdGlvblJldmFsaWRhdGVkID1cbiAgICAgICAgcmV2YWxpZGF0ZWRQYXJ0cy5wYXRocy5sZW5ndGggPiAwIHx8XG4gICAgICAgIHJldmFsaWRhdGVkUGFydHMudGFnIHx8XG4gICAgICAgIHJldmFsaWRhdGVkUGFydHMuY29va2llXG5cbiAgICAgIGZvciAoY29uc3Qgbm9ybWFsaXplZEZsaWdodERhdGEgb2YgZmxpZ2h0RGF0YSkge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgdHJlZTogdHJlZVBhdGNoLFxuICAgICAgICAgIHNlZWREYXRhOiBjYWNoZU5vZGVTZWVkRGF0YSxcbiAgICAgICAgICBoZWFkLFxuICAgICAgICAgIGlzUm9vdFJlbmRlcixcbiAgICAgICAgfSA9IG5vcm1hbGl6ZWRGbGlnaHREYXRhXG5cbiAgICAgICAgaWYgKCFpc1Jvb3RSZW5kZXIpIHtcbiAgICAgICAgICAvLyBUT0RPLUFQUDogaGFuZGxlIHRoaXMgY2FzZSBiZXR0ZXJcbiAgICAgICAgICBjb25zb2xlLmxvZygnU0VSVkVSIEFDVElPTiBBUFBMWSBGQUlMRUQnKVxuICAgICAgICAgIHJlc29sdmUoYWN0aW9uUmVzdWx0KVxuXG4gICAgICAgICAgcmV0dXJuIHN0YXRlXG4gICAgICAgIH1cblxuICAgICAgICAvLyBHaXZlbiB0aGUgcGF0aCBjYW4gb25seSBoYXZlIHR3byBpdGVtcyB0aGUgaXRlbXMgYXJlIG9ubHkgdGhlIHJvdXRlciBzdGF0ZSBhbmQgcnNjIGZvciB0aGUgcm9vdC5cbiAgICAgICAgY29uc3QgbmV3VHJlZSA9IGFwcGx5Um91dGVyU3RhdGVQYXRjaFRvVHJlZShcbiAgICAgICAgICAvLyBUT0RPLUFQUDogcmVtb3ZlICcnXG4gICAgICAgICAgWycnXSxcbiAgICAgICAgICBjdXJyZW50VHJlZSxcbiAgICAgICAgICB0cmVlUGF0Y2gsXG4gICAgICAgICAgcmVkaXJlY3RIcmVmID8gcmVkaXJlY3RIcmVmIDogc3RhdGUuY2Fub25pY2FsVXJsXG4gICAgICAgIClcblxuICAgICAgICBpZiAobmV3VHJlZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHJlc29sdmUoYWN0aW9uUmVzdWx0KVxuXG4gICAgICAgICAgcmV0dXJuIGhhbmRsZVNlZ21lbnRNaXNtYXRjaChzdGF0ZSwgYWN0aW9uLCB0cmVlUGF0Y2gpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNOYXZpZ2F0aW5nVG9OZXdSb290TGF5b3V0KGN1cnJlbnRUcmVlLCBuZXdUcmVlKSkge1xuICAgICAgICAgIHJlc29sdmUoYWN0aW9uUmVzdWx0KVxuXG4gICAgICAgICAgcmV0dXJuIGhhbmRsZUV4dGVybmFsVXJsKFxuICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICBtdXRhYmxlLFxuICAgICAgICAgICAgcmVkaXJlY3RIcmVmIHx8IHN0YXRlLmNhbm9uaWNhbFVybCxcbiAgICAgICAgICAgIHN0YXRlLnB1c2hSZWYucGVuZGluZ1B1c2hcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgc2VydmVyIHNlbnQgYmFjayBSU0MgZGF0YSBmb3IgdGhlIHNlcnZlciBhY3Rpb24sIHNvIHdlIG5lZWQgdG8gYXBwbHkgaXQgdG8gdGhlIGNhY2hlLlxuICAgICAgICBpZiAoY2FjaGVOb2RlU2VlZERhdGEgIT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCByc2MgPSBjYWNoZU5vZGVTZWVkRGF0YVsxXVxuICAgICAgICAgIGNvbnN0IGNhY2hlOiBDYWNoZU5vZGUgPSBjcmVhdGVFbXB0eUNhY2hlTm9kZSgpXG4gICAgICAgICAgY2FjaGUucnNjID0gcnNjXG4gICAgICAgICAgY2FjaGUucHJlZmV0Y2hSc2MgPSBudWxsXG4gICAgICAgICAgY2FjaGUubG9hZGluZyA9IGNhY2hlTm9kZVNlZWREYXRhWzNdXG4gICAgICAgICAgZmlsbExhenlJdGVtc1RpbGxMZWFmV2l0aEhlYWQoXG4gICAgICAgICAgICBuYXZpZ2F0ZWRBdCxcbiAgICAgICAgICAgIGNhY2hlLFxuICAgICAgICAgICAgLy8gRXhpc3RpbmcgY2FjaGUgaXMgbm90IHBhc3NlZCBpbiBhcyBzZXJ2ZXIgYWN0aW9ucyBoYXZlIHRvIGludmFsaWRhdGUgdGhlIGVudGlyZSBjYWNoZS5cbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHRyZWVQYXRjaCxcbiAgICAgICAgICAgIGNhY2hlTm9kZVNlZWREYXRhLFxuICAgICAgICAgICAgaGVhZCxcbiAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICAgIClcblxuICAgICAgICAgIG11dGFibGUuY2FjaGUgPSBjYWNoZVxuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfQ0xJRU5UX1NFR01FTlRfQ0FDSEUpIHtcbiAgICAgICAgICAgIHJldmFsaWRhdGVFbnRpcmVDYWNoZShzdGF0ZS5uZXh0VXJsLCBuZXdUcmVlKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtdXRhYmxlLnByZWZldGNoQ2FjaGUgPSBuZXcgTWFwKClcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGFjdGlvblJldmFsaWRhdGVkKSB7XG4gICAgICAgICAgICBhd2FpdCByZWZyZXNoSW5hY3RpdmVQYXJhbGxlbFNlZ21lbnRzKHtcbiAgICAgICAgICAgICAgbmF2aWdhdGVkQXQsXG4gICAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgICB1cGRhdGVkVHJlZTogbmV3VHJlZSxcbiAgICAgICAgICAgICAgdXBkYXRlZENhY2hlOiBjYWNoZSxcbiAgICAgICAgICAgICAgaW5jbHVkZU5leHRVcmw6IEJvb2xlYW4obmV4dFVybCksXG4gICAgICAgICAgICAgIGNhbm9uaWNhbFVybDogbXV0YWJsZS5jYW5vbmljYWxVcmwgfHwgc3RhdGUuY2Fub25pY2FsVXJsLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBtdXRhYmxlLnBhdGNoZWRUcmVlID0gbmV3VHJlZVxuICAgICAgICBjdXJyZW50VHJlZSA9IG5ld1RyZWVcbiAgICAgIH1cblxuICAgICAgaWYgKHJlZGlyZWN0TG9jYXRpb24gJiYgcmVkaXJlY3RIcmVmKSB7XG4gICAgICAgIGlmICghcHJvY2Vzcy5lbnYuX19ORVhUX0NMSUVOVF9TRUdNRU5UX0NBQ0hFICYmICFhY3Rpb25SZXZhbGlkYXRlZCkge1xuICAgICAgICAgIC8vIEJlY2F1c2UgdGhlIFJlZGlyZWN0Qm91bmRhcnkgd2lsbCB0cmlnZ2VyIGEgbmF2aWdhdGlvbiwgd2UgbmVlZCB0byBzZWVkIHRoZSBwcmVmZXRjaCBjYWNoZVxuICAgICAgICAgIC8vIHdpdGggdGhlIEZsaWdodERhdGEgdGhhdCB3ZSBnb3QgZnJvbSB0aGUgc2VydmVyIGFjdGlvbiBmb3IgdGhlIHRhcmdldCBwYWdlLCBzbyB0aGF0IGl0J3NcbiAgICAgICAgICAvLyBhdmFpbGFibGUgd2hlbiB0aGUgcGFnZSBpcyBuYXZpZ2F0ZWQgdG8gYW5kIGRvZXNuJ3QgbmVlZCB0byBiZSByZS1mZXRjaGVkLlxuICAgICAgICAgIC8vIFdlIG9ubHkgZG8gdGhpcyBpZiB0aGUgc2VydmVyIGFjdGlvbiBkaWRuJ3QgcmV2YWxpZGF0ZSBhbnkgZGF0YSwgYXMgaW4gdGhhdCBjYXNlIHRoZVxuICAgICAgICAgIC8vIGNsaWVudCBjYWNoZSB3aWxsIGJlIGNsZWFyZWQgYW5kIHRoZSBkYXRhIHdpbGwgYmUgcmUtZmV0Y2hlZCBhbnl3YXkuXG4gICAgICAgICAgLy8gTk9URTogV2UgZG9uJ3QgZG8gdGhpcyBpbiB0aGUgU2VnbWVudCBDYWNoZSBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICAvLyBEeW5hbWljIGRhdGEgc2hvdWxkIG5ldmVyIGJlIHBsYWNlZCBpbnRvIHRoZSBjYWNoZSwgdW5sZXNzIGl0J3NcbiAgICAgICAgICAvLyBcImNvbnZlcnRlZFwiIHRvIHN0YXRpYyBkYXRhIHVzaW5nIDxMaW5rIHByZWZldGNoPXt0cnVlfT4uIFdoYXQgd2VcbiAgICAgICAgICAvLyBkbyBpbnN0ZWFkIGlzIHJlLXByZWZldGNoIGxpbmtzIGFuZCBmb3JtcyB3aGVuZXZlciB0aGUgY2FjaGUgaXNcbiAgICAgICAgICAvLyBpbnZhbGlkYXRlZC5cbiAgICAgICAgICBjcmVhdGVTZWVkZWRQcmVmZXRjaENhY2hlRW50cnkoe1xuICAgICAgICAgICAgdXJsOiByZWRpcmVjdExvY2F0aW9uLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICBmbGlnaHREYXRhLFxuICAgICAgICAgICAgICBjYW5vbmljYWxVcmw6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgY291bGRCZUludGVyY2VwdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgcHJlcmVuZGVyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICBwb3N0cG9uZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAvLyBUT0RPOiBXZSBzaG91bGQgYmUgYWJsZSB0byBzZXQgdGhpcyBpZiB0aGUgc2VydmVyIGFjdGlvblxuICAgICAgICAgICAgICAvLyByZXR1cm5lZCBhIGZ1bGx5IHN0YXRpYyByZXNwb25zZS5cbiAgICAgICAgICAgICAgc3RhbGVUaW1lOiAtMSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0cmVlOiBzdGF0ZS50cmVlLFxuICAgICAgICAgICAgcHJlZmV0Y2hDYWNoZTogc3RhdGUucHJlZmV0Y2hDYWNoZSxcbiAgICAgICAgICAgIG5leHRVcmw6IHN0YXRlLm5leHRVcmwsXG4gICAgICAgICAgICBraW5kOiBpc1ByZXJlbmRlciA/IFByZWZldGNoS2luZC5GVUxMIDogUHJlZmV0Y2hLaW5kLkFVVE8sXG4gICAgICAgICAgfSlcbiAgICAgICAgICBtdXRhYmxlLnByZWZldGNoQ2FjaGUgPSBzdGF0ZS5wcmVmZXRjaENhY2hlXG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGUgYWN0aW9uIHRyaWdnZXJlZCBhIHJlZGlyZWN0LCB0aGUgYWN0aW9uIHByb21pc2Ugd2lsbCBiZSByZWplY3RlZCB3aXRoXG4gICAgICAgIC8vIGEgcmVkaXJlY3Qgc28gdGhhdCBpdCdzIGhhbmRsZWQgYnkgUmVkaXJlY3RCb3VuZGFyeSBhcyB3ZSB3b24ndCBoYXZlIGEgdmFsaWRcbiAgICAgICAgLy8gYWN0aW9uIHJlc3VsdCB0byByZXNvbHZlIHRoZSBwcm9taXNlIHdpdGguIFRoaXMgd2lsbCBlZmZlY3RpdmVseSByZXNldCB0aGUgc3RhdGUgb2ZcbiAgICAgICAgLy8gdGhlIGNvbXBvbmVudCB0aGF0IGNhbGxlZCB0aGUgYWN0aW9uIGFzIHRoZSBlcnJvciBib3VuZGFyeSB3aWxsIHJlbW91bnQgdGhlIHRyZWUuXG4gICAgICAgIC8vIFRoZSBzdGF0dXMgY29kZSBkb2Vzbid0IG1hdHRlciBoZXJlIGFzIHRoZSBhY3Rpb24gaGFuZGxlciB3aWxsIGhhdmUgYWxyZWFkeSBzZW50XG4gICAgICAgIC8vIGEgcmVzcG9uc2Ugd2l0aCB0aGUgY29ycmVjdCBzdGF0dXMgY29kZS5cbiAgICAgICAgcmVqZWN0KFxuICAgICAgICAgIGdldFJlZGlyZWN0RXJyb3IoXG4gICAgICAgICAgICBoYXNCYXNlUGF0aChyZWRpcmVjdEhyZWYpXG4gICAgICAgICAgICAgID8gcmVtb3ZlQmFzZVBhdGgocmVkaXJlY3RIcmVmKVxuICAgICAgICAgICAgICA6IHJlZGlyZWN0SHJlZixcbiAgICAgICAgICAgIHJlZGlyZWN0VHlwZSB8fCBSZWRpcmVjdFR5cGUucHVzaFxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZShhY3Rpb25SZXN1bHQpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBoYW5kbGVNdXRhYmxlKHN0YXRlLCBtdXRhYmxlKVxuICAgIH0sXG4gICAgKGU6IGFueSkgPT4ge1xuICAgICAgLy8gV2hlbiB0aGUgc2VydmVyIGFjdGlvbiBpcyByZWplY3RlZCB3ZSBkb24ndCB1cGRhdGUgdGhlIHN0YXRlIGFuZCBpbnN0ZWFkIGNhbGwgdGhlIHJlamVjdCBoYW5kbGVyIG9mIHRoZSBwcm9taXNlLlxuICAgICAgcmVqZWN0KGUpXG5cbiAgICAgIHJldHVybiBzdGF0ZVxuICAgIH1cbiAgKVxufVxuIl0sIm5hbWVzIjpbInNlcnZlckFjdGlvblJlZHVjZXIiLCJjcmVhdGVGcm9tRmV0Y2giLCJjcmVhdGVGcm9tRmV0Y2hCcm93c2VyIiwiZmV0Y2hTZXJ2ZXJBY3Rpb24iLCJzdGF0ZSIsIm5leHRVcmwiLCJhY3Rpb25JZCIsImFjdGlvbkFyZ3MiLCJ0ZW1wb3JhcnlSZWZlcmVuY2VzIiwiY3JlYXRlVGVtcG9yYXJ5UmVmZXJlbmNlU2V0IiwiaW5mbyIsImV4dHJhY3RJbmZvRnJvbVNlcnZlclJlZmVyZW5jZUlkIiwidXNlZEFyZ3MiLCJ0eXBlIiwib21pdFVudXNlZEFyZ3MiLCJib2R5IiwiZW5jb2RlUmVwbHkiLCJyZXMiLCJmZXRjaCIsImNhbm9uaWNhbFVybCIsIm1ldGhvZCIsImhlYWRlcnMiLCJBY2NlcHQiLCJSU0NfQ09OVEVOVF9UWVBFX0hFQURFUiIsIkFDVElPTl9IRUFERVIiLCJORVhUX1JPVVRFUl9TVEFURV9UUkVFX0hFQURFUiIsInByZXBhcmVGbGlnaHRSb3V0ZXJTdGF0ZUZvclJlcXVlc3QiLCJ0cmVlIiwicHJvY2VzcyIsImVudiIsIk5FWFRfREVQTE9ZTUVOVF9JRCIsIk5FWFRfVVJMIiwidW5yZWNvZ25pemVkQWN0aW9uSGVhZGVyIiwiZ2V0IiwiTkVYVF9BQ1RJT05fTk9UX0ZPVU5EX0hFQURFUiIsIkVycm9yIiwicmVkaXJlY3RIZWFkZXIiLCJsb2NhdGlvbiIsIl9yZWRpcmVjdFR5cGUiLCJzcGxpdCIsInJlZGlyZWN0VHlwZSIsIlJlZGlyZWN0VHlwZSIsInB1c2giLCJyZXBsYWNlIiwidW5kZWZpbmVkIiwiaXNQcmVyZW5kZXIiLCJORVhUX0lTX1BSRVJFTkRFUl9IRUFERVIiLCJyZXZhbGlkYXRlZFBhcnRzIiwicmV2YWxpZGF0ZWRIZWFkZXIiLCJKU09OIiwicGFyc2UiLCJwYXRocyIsInRhZyIsImNvb2tpZSIsImUiLCJOT19SRVZBTElEQVRFRF9QQVJUUyIsInJlZGlyZWN0TG9jYXRpb24iLCJhc3NpZ25Mb2NhdGlvbiIsIlVSTCIsIndpbmRvdyIsImhyZWYiLCJjb250ZW50VHlwZSIsImlzUnNjUmVzcG9uc2UiLCJzdGFydHNXaXRoIiwibWVzc2FnZSIsInN0YXR1cyIsInRleHQiLCJhY3Rpb25SZXN1bHQiLCJhY3Rpb25GbGlnaHREYXRhIiwicmVzcG9uc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsImNhbGxTZXJ2ZXIiLCJmaW5kU291cmNlTWFwVVJMIiwiYSIsIm5vcm1hbGl6ZUZsaWdodERhdGEiLCJmIiwiYWN0aW9uIiwicmVqZWN0IiwibXV0YWJsZSIsImN1cnJlbnRUcmVlIiwicHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGUiLCJoYXNJbnRlcmNlcHRpb25Sb3V0ZUluQ3VycmVudFRyZWUiLCJuYXZpZ2F0ZWRBdCIsIkRhdGUiLCJub3ciLCJ0aGVuIiwiZmxpZ2h0RGF0YSIsInJlZGlyZWN0SHJlZiIsInB1c2hSZWYiLCJwZW5kaW5nUHVzaCIsImNyZWF0ZUhyZWZGcm9tVXJsIiwiaGFuZGxlRXh0ZXJuYWxVcmwiLCJhY3Rpb25SZXZhbGlkYXRlZCIsImxlbmd0aCIsIm5vcm1hbGl6ZWRGbGlnaHREYXRhIiwidHJlZVBhdGNoIiwic2VlZERhdGEiLCJjYWNoZU5vZGVTZWVkRGF0YSIsImhlYWQiLCJpc1Jvb3RSZW5kZXIiLCJjb25zb2xlIiwibG9nIiwibmV3VHJlZSIsImFwcGx5Um91dGVyU3RhdGVQYXRjaFRvVHJlZSIsImhhbmRsZVNlZ21lbnRNaXNtYXRjaCIsImlzTmF2aWdhdGluZ1RvTmV3Um9vdExheW91dCIsInJzYyIsImNhY2hlIiwiY3JlYXRlRW1wdHlDYWNoZU5vZGUiLCJwcmVmZXRjaFJzYyIsImxvYWRpbmciLCJmaWxsTGF6eUl0ZW1zVGlsbExlYWZXaXRoSGVhZCIsIl9fTkVYVF9DTElFTlRfU0VHTUVOVF9DQUNIRSIsInJldmFsaWRhdGVFbnRpcmVDYWNoZSIsInByZWZldGNoQ2FjaGUiLCJNYXAiLCJyZWZyZXNoSW5hY3RpdmVQYXJhbGxlbFNlZ21lbnRzIiwidXBkYXRlZFRyZWUiLCJ1cGRhdGVkQ2FjaGUiLCJpbmNsdWRlTmV4dFVybCIsIkJvb2xlYW4iLCJwYXRjaGVkVHJlZSIsImNyZWF0ZVNlZWRlZFByZWZldGNoQ2FjaGVFbnRyeSIsInVybCIsImRhdGEiLCJjb3VsZEJlSW50ZXJjZXB0ZWQiLCJwcmVyZW5kZXJlZCIsInBvc3Rwb25lZCIsInN0YWxlVGltZSIsImtpbmQiLCJQcmVmZXRjaEtpbmQiLCJGVUxMIiwiQVVUTyIsImdldFJlZGlyZWN0RXJyb3IiLCJoYXNCYXNlUGF0aCIsInJlbW92ZUJhc2VQYXRoIiwiaGFuZGxlTXV0YWJsZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/server-action-reducer.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/server-patch-reducer.js":
|
||
/*!**************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/router-reducer/reducers/server-patch-reducer.js ***!
|
||
\**************************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"serverPatchReducer\", ({\n enumerable: true,\n get: function() {\n return serverPatchReducer;\n }\n}));\nconst _createhreffromurl = __webpack_require__(/*! ../create-href-from-url */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nconst _applyrouterstatepatchtotree = __webpack_require__(/*! ../apply-router-state-patch-to-tree */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/apply-router-state-patch-to-tree.js\");\nconst _isnavigatingtonewrootlayout = __webpack_require__(/*! ../is-navigating-to-new-root-layout */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js\");\nconst _navigatereducer = __webpack_require__(/*! ./navigate-reducer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js\");\nconst _applyflightdata = __webpack_require__(/*! ../apply-flight-data */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/apply-flight-data.js\");\nconst _handlemutable = __webpack_require__(/*! ../handle-mutable */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/handle-mutable.js\");\nconst _approuter = __webpack_require__(/*! ../../app-router */ \"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js\");\nfunction serverPatchReducer(state, action) {\n const { serverResponse: { flightData, canonicalUrl: canonicalUrlOverride }, navigatedAt } = action;\n const mutable = {};\n mutable.preserveCustomHistoryState = false;\n // Handle case when navigating to page in `pages` from `app`\n if (typeof flightData === 'string') {\n return (0, _navigatereducer.handleExternalUrl)(state, mutable, flightData, state.pushRef.pendingPush);\n }\n let currentTree = state.tree;\n let currentCache = state.cache;\n for (const normalizedFlightData of flightData){\n const { segmentPath: flightSegmentPath, tree: treePatch } = normalizedFlightData;\n const newTree = (0, _applyrouterstatepatchtotree.applyRouterStatePatchToTree)([\n '',\n ...flightSegmentPath\n ], currentTree, treePatch, state.canonicalUrl);\n // `applyRouterStatePatchToTree` returns `null` when it determined that the server response is not applicable to the current tree.\n // In other words, the server responded with a tree that doesn't match what the client is currently rendering.\n // This can happen if the server patch action took longer to resolve than a subsequent navigation which would have changed the tree.\n // Previously this case triggered an MPA navigation but it should be safe to simply discard the server response rather than forcing\n // the entire page to reload.\n if (newTree === null) {\n return state;\n }\n if ((0, _isnavigatingtonewrootlayout.isNavigatingToNewRootLayout)(currentTree, newTree)) {\n return (0, _navigatereducer.handleExternalUrl)(state, mutable, state.canonicalUrl, state.pushRef.pendingPush);\n }\n const canonicalUrlOverrideHref = canonicalUrlOverride ? (0, _createhreffromurl.createHrefFromUrl)(canonicalUrlOverride) : undefined;\n if (canonicalUrlOverrideHref) {\n mutable.canonicalUrl = canonicalUrlOverrideHref;\n }\n const cache = (0, _approuter.createEmptyCacheNode)();\n (0, _applyflightdata.applyFlightData)(navigatedAt, currentCache, cache, normalizedFlightData);\n mutable.patchedTree = newTree;\n mutable.cache = cache;\n currentCache = cache;\n currentTree = newTree;\n }\n return (0, _handlemutable.handleMutable)(state, mutable);\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=server-patch-reducer.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvc2VydmVyLXBhdGNoLXJlZHVjZXIuanMiLCJtYXBwaW5ncyI6Ijs7OztzREFlZ0JBOzs7ZUFBQUE7OzsrQ0Fma0I7eURBQ1U7eURBQ0E7NkNBT1Y7NkNBQ0Y7MkNBQ0Y7dUNBRU87QUFFOUIsU0FBU0EsbUJBQ2RDLEtBQTJCLEVBQzNCQyxNQUF5QjtJQUV6QixNQUFNLEVBQ0pDLGdCQUFnQixFQUFFQyxVQUFVLEVBQUVDLGNBQWNDLG9CQUFvQixFQUFFLEVBQ2xFQyxXQUFXLEVBQ1osR0FBR0w7SUFFSixNQUFNTSxVQUFtQixDQUFDO0lBRTFCQSxRQUFRQywwQkFBMEIsR0FBRztJQUVyQyw0REFBNEQ7SUFDNUQsSUFBSSxPQUFPTCxlQUFlLFVBQVU7UUFDbEMsT0FBT00sQ0FBQUEsR0FBQUEsaUJBQUFBLGlCQUFBQSxFQUNMVCxPQUNBTyxTQUNBSixZQUNBSCxNQUFNVSxPQUFPLENBQUNDLFdBQVc7SUFFN0I7SUFFQSxJQUFJQyxjQUFjWixNQUFNYSxJQUFJO0lBQzVCLElBQUlDLGVBQWVkLE1BQU1lLEtBQUs7SUFFOUIsS0FBSyxNQUFNQyx3QkFBd0JiLFdBQVk7UUFDN0MsTUFBTSxFQUFFYyxhQUFhQyxpQkFBaUIsRUFBRUwsTUFBTU0sU0FBUyxFQUFFLEdBQ3ZESDtRQUVGLE1BQU1JLFVBQVVDLENBQUFBLEdBQUFBLDZCQUFBQSwyQkFBQUEsRUFDZDtZQUNDO2VBQU9IO1NBQWtCLEVBQzFCTixhQUNBTyxXQUNBbkIsTUFBTUksWUFBWTtRQUdwQixrSUFBa0k7UUFDbEksOEdBQThHO1FBQzlHLG9JQUFvSTtRQUNwSSxtSUFBbUk7UUFDbkksNkJBQTZCO1FBQzdCLElBQUlnQixZQUFZLE1BQU07WUFDcEIsT0FBT3BCO1FBQ1Q7UUFFQSxJQUFJc0IsQ0FBQUEsR0FBQUEsNkJBQUFBLDJCQUFBQSxFQUE0QlYsYUFBYVEsVUFBVTtZQUNyRCxPQUFPWCxDQUFBQSxHQUFBQSxpQkFBQUEsaUJBQUFBLEVBQ0xULE9BQ0FPLFNBQ0FQLE1BQU1JLFlBQVksRUFDbEJKLE1BQU1VLE9BQU8sQ0FBQ0MsV0FBVztRQUU3QjtRQUVBLE1BQU1ZLDJCQUEyQmxCLHVCQUM3Qm1CLENBQUFBLEdBQUFBLG1CQUFBQSxpQkFBQUEsRUFBa0JuQix3QkFDbEJvQjtRQUVKLElBQUlGLDBCQUEwQjtZQUM1QmhCLFFBQVFILFlBQVksR0FBR21CO1FBQ3pCO1FBRUEsTUFBTVIsUUFBbUJXLENBQUFBLEdBQUFBLFdBQUFBLG9CQUFBQTtRQUN6QkMsQ0FBQUEsR0FBQUEsaUJBQUFBLGVBQUFBLEVBQWdCckIsYUFBYVEsY0FBY0MsT0FBT0M7UUFFbERULFFBQVFxQixXQUFXLEdBQUdSO1FBQ3RCYixRQUFRUSxLQUFLLEdBQUdBO1FBRWhCRCxlQUFlQztRQUNmSCxjQUFjUTtJQUNoQjtJQUVBLE9BQU9TLENBQUFBLEdBQUFBLGVBQUFBLGFBQUFBLEVBQWM3QixPQUFPTztBQUM5QiIsInNvdXJjZXMiOlsiL3NyYy9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9yZWR1Y2Vycy9zZXJ2ZXItcGF0Y2gtcmVkdWNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVIcmVmRnJvbVVybCB9IGZyb20gJy4uL2NyZWF0ZS1ocmVmLWZyb20tdXJsJ1xuaW1wb3J0IHsgYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9UcmVlIH0gZnJvbSAnLi4vYXBwbHktcm91dGVyLXN0YXRlLXBhdGNoLXRvLXRyZWUnXG5pbXBvcnQgeyBpc05hdmlnYXRpbmdUb05ld1Jvb3RMYXlvdXQgfSBmcm9tICcuLi9pcy1uYXZpZ2F0aW5nLXRvLW5ldy1yb290LWxheW91dCdcbmltcG9ydCB0eXBlIHtcbiAgU2VydmVyUGF0Y2hBY3Rpb24sXG4gIFJlZHVjZXJTdGF0ZSxcbiAgUmVhZG9ubHlSZWR1Y2VyU3RhdGUsXG4gIE11dGFibGUsXG59IGZyb20gJy4uL3JvdXRlci1yZWR1Y2VyLXR5cGVzJ1xuaW1wb3J0IHsgaGFuZGxlRXh0ZXJuYWxVcmwgfSBmcm9tICcuL25hdmlnYXRlLXJlZHVjZXInXG5pbXBvcnQgeyBhcHBseUZsaWdodERhdGEgfSBmcm9tICcuLi9hcHBseS1mbGlnaHQtZGF0YSdcbmltcG9ydCB7IGhhbmRsZU11dGFibGUgfSBmcm9tICcuLi9oYW5kbGUtbXV0YWJsZSdcbmltcG9ydCB0eXBlIHsgQ2FjaGVOb2RlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2xpYi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUnXG5pbXBvcnQgeyBjcmVhdGVFbXB0eUNhY2hlTm9kZSB9IGZyb20gJy4uLy4uL2FwcC1yb3V0ZXInXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJ2ZXJQYXRjaFJlZHVjZXIoXG4gIHN0YXRlOiBSZWFkb25seVJlZHVjZXJTdGF0ZSxcbiAgYWN0aW9uOiBTZXJ2ZXJQYXRjaEFjdGlvblxuKTogUmVkdWNlclN0YXRlIHtcbiAgY29uc3Qge1xuICAgIHNlcnZlclJlc3BvbnNlOiB7IGZsaWdodERhdGEsIGNhbm9uaWNhbFVybDogY2Fub25pY2FsVXJsT3ZlcnJpZGUgfSxcbiAgICBuYXZpZ2F0ZWRBdCxcbiAgfSA9IGFjdGlvblxuXG4gIGNvbnN0IG11dGFibGU6IE11dGFibGUgPSB7fVxuXG4gIG11dGFibGUucHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGUgPSBmYWxzZVxuXG4gIC8vIEhhbmRsZSBjYXNlIHdoZW4gbmF2aWdhdGluZyB0byBwYWdlIGluIGBwYWdlc2AgZnJvbSBgYXBwYFxuICBpZiAodHlwZW9mIGZsaWdodERhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGhhbmRsZUV4dGVybmFsVXJsKFxuICAgICAgc3RhdGUsXG4gICAgICBtdXRhYmxlLFxuICAgICAgZmxpZ2h0RGF0YSxcbiAgICAgIHN0YXRlLnB1c2hSZWYucGVuZGluZ1B1c2hcbiAgICApXG4gIH1cblxuICBsZXQgY3VycmVudFRyZWUgPSBzdGF0ZS50cmVlXG4gIGxldCBjdXJyZW50Q2FjaGUgPSBzdGF0ZS5jYWNoZVxuXG4gIGZvciAoY29uc3Qgbm9ybWFsaXplZEZsaWdodERhdGEgb2YgZmxpZ2h0RGF0YSkge1xuICAgIGNvbnN0IHsgc2VnbWVudFBhdGg6IGZsaWdodFNlZ21lbnRQYXRoLCB0cmVlOiB0cmVlUGF0Y2ggfSA9XG4gICAgICBub3JtYWxpemVkRmxpZ2h0RGF0YVxuXG4gICAgY29uc3QgbmV3VHJlZSA9IGFwcGx5Um91dGVyU3RhdGVQYXRjaFRvVHJlZShcbiAgICAgIC8vIFRPRE8tQVBQOiByZW1vdmUgJydcbiAgICAgIFsnJywgLi4uZmxpZ2h0U2VnbWVudFBhdGhdLFxuICAgICAgY3VycmVudFRyZWUsXG4gICAgICB0cmVlUGF0Y2gsXG4gICAgICBzdGF0ZS5jYW5vbmljYWxVcmxcbiAgICApXG5cbiAgICAvLyBgYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9UcmVlYCByZXR1cm5zIGBudWxsYCB3aGVuIGl0IGRldGVybWluZWQgdGhhdCB0aGUgc2VydmVyIHJlc3BvbnNlIGlzIG5vdCBhcHBsaWNhYmxlIHRvIHRoZSBjdXJyZW50IHRyZWUuXG4gICAgLy8gSW4gb3RoZXIgd29yZHMsIHRoZSBzZXJ2ZXIgcmVzcG9uZGVkIHdpdGggYSB0cmVlIHRoYXQgZG9lc24ndCBtYXRjaCB3aGF0IHRoZSBjbGllbnQgaXMgY3VycmVudGx5IHJlbmRlcmluZy5cbiAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlIHNlcnZlciBwYXRjaCBhY3Rpb24gdG9vayBsb25nZXIgdG8gcmVzb2x2ZSB0aGFuIGEgc3Vic2VxdWVudCBuYXZpZ2F0aW9uIHdoaWNoIHdvdWxkIGhhdmUgY2hhbmdlZCB0aGUgdHJlZS5cbiAgICAvLyBQcmV2aW91c2x5IHRoaXMgY2FzZSB0cmlnZ2VyZWQgYW4gTVBBIG5hdmlnYXRpb24gYnV0IGl0IHNob3VsZCBiZSBzYWZlIHRvIHNpbXBseSBkaXNjYXJkIHRoZSBzZXJ2ZXIgcmVzcG9uc2UgcmF0aGVyIHRoYW4gZm9yY2luZ1xuICAgIC8vIHRoZSBlbnRpcmUgcGFnZSB0byByZWxvYWQuXG4gICAgaWYgKG5ld1RyZWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBzdGF0ZVxuICAgIH1cblxuICAgIGlmIChpc05hdmlnYXRpbmdUb05ld1Jvb3RMYXlvdXQoY3VycmVudFRyZWUsIG5ld1RyZWUpKSB7XG4gICAgICByZXR1cm4gaGFuZGxlRXh0ZXJuYWxVcmwoXG4gICAgICAgIHN0YXRlLFxuICAgICAgICBtdXRhYmxlLFxuICAgICAgICBzdGF0ZS5jYW5vbmljYWxVcmwsXG4gICAgICAgIHN0YXRlLnB1c2hSZWYucGVuZGluZ1B1c2hcbiAgICAgIClcbiAgICB9XG5cbiAgICBjb25zdCBjYW5vbmljYWxVcmxPdmVycmlkZUhyZWYgPSBjYW5vbmljYWxVcmxPdmVycmlkZVxuICAgICAgPyBjcmVhdGVIcmVmRnJvbVVybChjYW5vbmljYWxVcmxPdmVycmlkZSlcbiAgICAgIDogdW5kZWZpbmVkXG5cbiAgICBpZiAoY2Fub25pY2FsVXJsT3ZlcnJpZGVIcmVmKSB7XG4gICAgICBtdXRhYmxlLmNhbm9uaWNhbFVybCA9IGNhbm9uaWNhbFVybE92ZXJyaWRlSHJlZlxuICAgIH1cblxuICAgIGNvbnN0IGNhY2hlOiBDYWNoZU5vZGUgPSBjcmVhdGVFbXB0eUNhY2hlTm9kZSgpXG4gICAgYXBwbHlGbGlnaHREYXRhKG5hdmlnYXRlZEF0LCBjdXJyZW50Q2FjaGUsIGNhY2hlLCBub3JtYWxpemVkRmxpZ2h0RGF0YSlcblxuICAgIG11dGFibGUucGF0Y2hlZFRyZWUgPSBuZXdUcmVlXG4gICAgbXV0YWJsZS5jYWNoZSA9IGNhY2hlXG5cbiAgICBjdXJyZW50Q2FjaGUgPSBjYWNoZVxuICAgIGN1cnJlbnRUcmVlID0gbmV3VHJlZVxuICB9XG5cbiAgcmV0dXJuIGhhbmRsZU11dGFibGUoc3RhdGUsIG11dGFibGUpXG59XG4iXSwibmFtZXMiOlsic2VydmVyUGF0Y2hSZWR1Y2VyIiwic3RhdGUiLCJhY3Rpb24iLCJzZXJ2ZXJSZXNwb25zZSIsImZsaWdodERhdGEiLCJjYW5vbmljYWxVcmwiLCJjYW5vbmljYWxVcmxPdmVycmlkZSIsIm5hdmlnYXRlZEF0IiwibXV0YWJsZSIsInByZXNlcnZlQ3VzdG9tSGlzdG9yeVN0YXRlIiwiaGFuZGxlRXh0ZXJuYWxVcmwiLCJwdXNoUmVmIiwicGVuZGluZ1B1c2giLCJjdXJyZW50VHJlZSIsInRyZWUiLCJjdXJyZW50Q2FjaGUiLCJjYWNoZSIsIm5vcm1hbGl6ZWRGbGlnaHREYXRhIiwic2VnbWVudFBhdGgiLCJmbGlnaHRTZWdtZW50UGF0aCIsInRyZWVQYXRjaCIsIm5ld1RyZWUiLCJhcHBseVJvdXRlclN0YXRlUGF0Y2hUb1RyZWUiLCJpc05hdmlnYXRpbmdUb05ld1Jvb3RMYXlvdXQiLCJjYW5vbmljYWxVcmxPdmVycmlkZUhyZWYiLCJjcmVhdGVIcmVmRnJvbVVybCIsInVuZGVmaW5lZCIsImNyZWF0ZUVtcHR5Q2FjaGVOb2RlIiwiYXBwbHlGbGlnaHREYXRhIiwicGF0Y2hlZFRyZWUiLCJoYW5kbGVNdXRhYmxlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/server-patch-reducer.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/refetch-inactive-parallel-segments.js":
|
||
/*!*******************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/router-reducer/refetch-inactive-parallel-segments.js ***!
|
||
\*******************************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n addRefreshMarkerToActiveParallelSegments: function() {\n return addRefreshMarkerToActiveParallelSegments;\n },\n refreshInactiveParallelSegments: function() {\n return refreshInactiveParallelSegments;\n }\n});\nconst _applyflightdata = __webpack_require__(/*! ./apply-flight-data */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/apply-flight-data.js\");\nconst _fetchserverresponse = __webpack_require__(/*! ./fetch-server-response */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fetch-server-response.js\");\nconst _segment = __webpack_require__(/*! ../../../shared/lib/segment */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/segment.js\");\nasync function refreshInactiveParallelSegments(options) {\n const fetchedSegments = new Set();\n await refreshInactiveParallelSegmentsImpl({\n ...options,\n rootTree: options.updatedTree,\n fetchedSegments\n });\n}\nasync function refreshInactiveParallelSegmentsImpl(param) {\n let { navigatedAt, state, updatedTree, updatedCache, includeNextUrl, fetchedSegments, rootTree = updatedTree, canonicalUrl } = param;\n const [, parallelRoutes, refetchPath, refetchMarker] = updatedTree;\n const fetchPromises = [];\n if (refetchPath && refetchPath !== canonicalUrl && refetchMarker === 'refresh' && // it's possible for the tree to contain multiple segments that contain data at the same URL\n // we keep track of them so we can dedupe the requests\n !fetchedSegments.has(refetchPath)) {\n fetchedSegments.add(refetchPath) // Mark this URL as fetched\n ;\n // Eagerly kick off the fetch for the refetch path & the parallel routes. This should be fine to do as they each operate\n // independently on their own cache nodes, and `applyFlightData` will copy anything it doesn't care about from the existing cache.\n const fetchPromise = (0, _fetchserverresponse.fetchServerResponse)(new URL(refetchPath, location.origin), {\n // refetch from the root of the updated tree, otherwise it will be scoped to the current segment\n // and might not contain the data we need to patch in interception route data (such as dynamic params from a previous segment)\n flightRouterState: [\n rootTree[0],\n rootTree[1],\n rootTree[2],\n 'refetch'\n ],\n nextUrl: includeNextUrl ? state.nextUrl : null\n }).then((param)=>{\n let { flightData } = param;\n if (typeof flightData !== 'string') {\n for (const flightDataPath of flightData){\n // we only pass the new cache as this function is called after clearing the router cache\n // and filling in the new page data from the server. Meaning the existing cache is actually the cache that's\n // just been created & has been written to, but hasn't been \"committed\" yet.\n (0, _applyflightdata.applyFlightData)(navigatedAt, updatedCache, updatedCache, flightDataPath);\n }\n } else {\n // When flightData is a string, it suggests that the server response should have triggered an MPA navigation\n // I'm not 100% sure of this decision, but it seems unlikely that we'd want to introduce a redirect side effect\n // when refreshing on-screen data, so handling this has been ommitted.\n }\n });\n fetchPromises.push(fetchPromise);\n }\n for(const key in parallelRoutes){\n const parallelFetchPromise = refreshInactiveParallelSegmentsImpl({\n navigatedAt,\n state,\n updatedTree: parallelRoutes[key],\n updatedCache,\n includeNextUrl,\n fetchedSegments,\n rootTree,\n canonicalUrl\n });\n fetchPromises.push(parallelFetchPromise);\n }\n await Promise.all(fetchPromises);\n}\nfunction addRefreshMarkerToActiveParallelSegments(tree, path) {\n const [segment, parallelRoutes, , refetchMarker] = tree;\n // a page segment might also contain concatenated search params, so we do a partial match on the key\n if (segment.includes(_segment.PAGE_SEGMENT_KEY) && refetchMarker !== 'refresh') {\n tree[2] = path;\n tree[3] = 'refresh';\n }\n for(const key in parallelRoutes){\n addRefreshMarkerToActiveParallelSegments(parallelRoutes[key], path);\n }\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=refetch-inactive-parallel-segments.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcmVmZXRjaC1pbmFjdGl2ZS1wYXJhbGxlbC1zZWdtZW50cy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUF5SGdCQSx3Q0FBd0M7ZUFBeENBOztJQTlGTUMsK0JBQStCO2VBQS9CQTs7OzZDQXhCVTtpREFDSTtxQ0FDSDtBQXNCMUIsZUFBZUEsZ0NBQ3BCQyxPQUF3QztJQUV4QyxNQUFNQyxrQkFBa0IsSUFBSUM7SUFDNUIsTUFBTUMsb0NBQW9DO1FBQ3hDLEdBQUdILE9BQU87UUFDVkksVUFBVUosUUFBUUssV0FBVztRQUM3Qko7SUFDRjtBQUNGO0FBRUEsZUFBZUUsb0NBQW9DLEtBWWxEO0lBWmtELE1BQ2pERyxXQUFXLEVBQ1hDLEtBQUssRUFDTEYsV0FBVyxFQUNYRyxZQUFZLEVBQ1pDLGNBQWMsRUFDZFIsZUFBZSxFQUNmRyxXQUFXQyxXQUFXLEVBQ3RCSyxZQUFZLEVBSWIsR0Faa0Q7SUFhakQsTUFBTSxHQUFHQyxnQkFBZ0JDLGFBQWFDLGNBQWMsR0FBR1I7SUFDdkQsTUFBTVMsZ0JBQWdCLEVBQUU7SUFFeEIsSUFDRUYsZUFDQUEsZ0JBQWdCRixnQkFDaEJHLGtCQUFrQixhQUNsQiw0RkFBNEY7SUFDNUYsc0RBQXNEO0lBQ3RELENBQUNaLGdCQUFnQmMsR0FBRyxDQUFDSCxjQUNyQjtRQUNBWCxnQkFBZ0JlLEdBQUcsQ0FBQ0osYUFBYSwyQkFBMkI7O1FBRTVELHdIQUF3SDtRQUN4SCxrSUFBa0k7UUFDbEksTUFBTUssZUFBZUMsQ0FBQUEsR0FBQUEscUJBQUFBLG1CQUFBQSxFQUNuQixJQUFJQyxJQUFJUCxhQUFhUSxTQUFTQyxNQUFNLEdBQ3BDO1lBQ0UsZ0dBQWdHO1lBQ2hHLDhIQUE4SDtZQUM5SEMsbUJBQW1CO2dCQUFDbEIsUUFBUSxDQUFDLEVBQUU7Z0JBQUVBLFFBQVEsQ0FBQyxFQUFFO2dCQUFFQSxRQUFRLENBQUMsRUFBRTtnQkFBRTthQUFVO1lBQ3JFbUIsU0FBU2QsaUJBQWlCRixNQUFNZ0IsT0FBTyxHQUFHO1FBQzVDLEdBQ0FDLElBQUksQ0FBQztnQkFBQyxFQUFFQyxVQUFVLEVBQUU7WUFDcEIsSUFBSSxPQUFPQSxlQUFlLFVBQVU7Z0JBQ2xDLEtBQUssTUFBTUMsa0JBQWtCRCxXQUFZO29CQUN2Qyx3RkFBd0Y7b0JBQ3hGLDRHQUE0RztvQkFDNUcsNEVBQTRFO29CQUM1RUUsQ0FBQUEsR0FBQUEsaUJBQUFBLGVBQUFBLEVBQ0VyQixhQUNBRSxjQUNBQSxjQUNBa0I7Z0JBRUo7WUFDRixPQUFPO1lBQ0wsNEdBQTRHO1lBQzVHLCtHQUErRztZQUMvRyxzRUFBc0U7WUFDeEU7UUFDRjtRQUVBWixjQUFjYyxJQUFJLENBQUNYO0lBQ3JCO0lBRUEsSUFBSyxNQUFNWSxPQUFPbEIsZUFBZ0I7UUFDaEMsTUFBTW1CLHVCQUF1QjNCLG9DQUFvQztZQUMvREc7WUFDQUM7WUFDQUYsYUFBYU0sY0FBYyxDQUFDa0IsSUFBSTtZQUNoQ3JCO1lBQ0FDO1lBQ0FSO1lBQ0FHO1lBQ0FNO1FBQ0Y7UUFFQUksY0FBY2MsSUFBSSxDQUFDRTtJQUNyQjtJQUVBLE1BQU1DLFFBQVFDLEdBQUcsQ0FBQ2xCO0FBQ3BCO0FBUU8sU0FBU2hCLHlDQUNkbUMsSUFBdUIsRUFDdkJDLElBQVk7SUFFWixNQUFNLENBQUNDLFNBQVN4QixrQkFBa0JFLGNBQWMsR0FBR29CO0lBQ25ELG9HQUFvRztJQUNwRyxJQUFJRSxRQUFRQyxRQUFRLENBQUNDLFNBQUFBLGdCQUFnQixLQUFLeEIsa0JBQWtCLFdBQVc7UUFDckVvQixJQUFJLENBQUMsRUFBRSxHQUFHQztRQUNWRCxJQUFJLENBQUMsRUFBRSxHQUFHO0lBQ1o7SUFFQSxJQUFLLE1BQU1KLE9BQU9sQixlQUFnQjtRQUNoQ2IseUNBQXlDYSxjQUFjLENBQUNrQixJQUFJLEVBQUVLO0lBQ2hFO0FBQ0YiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9yZWZldGNoLWluYWN0aXZlLXBhcmFsbGVsLXNlZ21lbnRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmxpZ2h0Um91dGVyU3RhdGUgfSBmcm9tICcuLi8uLi8uLi9zZXJ2ZXIvYXBwLXJlbmRlci90eXBlcydcbmltcG9ydCB0eXBlIHsgQ2FjaGVOb2RlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2xpYi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUnXG5pbXBvcnQgdHlwZSB7IEFwcFJvdXRlclN0YXRlIH0gZnJvbSAnLi9yb3V0ZXItcmVkdWNlci10eXBlcydcbmltcG9ydCB7IGFwcGx5RmxpZ2h0RGF0YSB9IGZyb20gJy4vYXBwbHktZmxpZ2h0LWRhdGEnXG5pbXBvcnQgeyBmZXRjaFNlcnZlclJlc3BvbnNlIH0gZnJvbSAnLi9mZXRjaC1zZXJ2ZXItcmVzcG9uc2UnXG5pbXBvcnQgeyBQQUdFX1NFR01FTlRfS0VZIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2xpYi9zZWdtZW50J1xuXG5pbnRlcmZhY2UgUmVmcmVzaEluYWN0aXZlUGFyYWxsZWxTZWdtZW50cyB7XG4gIG5hdmlnYXRlZEF0OiBudW1iZXJcbiAgc3RhdGU6IEFwcFJvdXRlclN0YXRlXG4gIHVwZGF0ZWRUcmVlOiBGbGlnaHRSb3V0ZXJTdGF0ZVxuICB1cGRhdGVkQ2FjaGU6IENhY2hlTm9kZVxuICBpbmNsdWRlTmV4dFVybDogYm9vbGVhblxuICBjYW5vbmljYWxVcmw6IHN0cmluZ1xufVxuXG4vKipcbiAqIFJlZnJlc2hlcyBpbmFjdGl2ZSBzZWdtZW50cyB0aGF0IGFyZSBzdGlsbCBpbiB0aGUgY3VycmVudCBGbGlnaHRSb3V0ZXJTdGF0ZS5cbiAqIEEgc2VnbWVudCBpcyBjb25zaWRlcmVkIFwiaW5hY3RpdmVcIiB3aGVuIHRoZSBzZXJ2ZXIgcmVzcG9uc2UgaW5kaWNhdGVzIGl0IGRpZG4ndCBtYXRjaCB0byBhIHBhZ2UgY29tcG9uZW50LlxuICogVGhpcyBoYXBwZW5zIGR1cmluZyBhIHNvZnQtbmF2aWdhdGlvbiwgd2hlcmUgdGhlIHNlcnZlciB3aWxsIHdhbnQgdG8gcGF0Y2ggaW4gdGhlIHNlZ21lbnRcbiAqIHdpdGggdGhlIFwiZGVmYXVsdFwiIGNvbXBvbmVudCwgYnV0IHdlIGV4cGxpY2l0bHkgaWdub3JlIHRoZSBzZXJ2ZXIgaW4gdGhpcyBjYXNlXG4gKiBhbmQga2VlcCB0aGUgZXhpc3Rpbmcgc3RhdGUgZm9yIHRoYXQgc2VnbWVudC4gTmV3IGRhdGEgZm9yIGluYWN0aXZlIHNlZ21lbnRzIGFyZSBpbmhlcmVudGx5XG4gKiBub3QgcGFydCBvZiB0aGUgc2VydmVyIHJlc3BvbnNlIHdoZW4gd2UgcGF0Y2ggdGhlIHRyZWUsIGJlY2F1c2UgdGhleSB3ZXJlIGFzc29jaWF0ZWQgd2l0aCBhIHJlc3BvbnNlXG4gKiBmcm9tIGFuIGVhcmxpZXIgbmF2aWdhdGlvbi9yZXF1ZXN0LiBGb3IgZWFjaCBzZWdtZW50LCBvbmNlIGl0IGJlY29tZXMgXCJhY3RpdmVcIiwgd2UgZW5jb2RlIHRoZSBVUkwgdGhhdCBwcm92aWRlZFxuICogdGhlIGRhdGEgZm9yIGl0LiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyBwYXJhbGxlbCByb3V0ZXMgbG9va2luZyBmb3IgdGhlc2UgbWFya2VycyBzbyB0aGF0IGl0IGNhbiByZS1mZXRjaFxuICogYW5kIHBhdGNoIHRoZSBuZXcgZGF0YSBpbnRvIHRoZSB0cmVlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVmcmVzaEluYWN0aXZlUGFyYWxsZWxTZWdtZW50cyhcbiAgb3B0aW9uczogUmVmcmVzaEluYWN0aXZlUGFyYWxsZWxTZWdtZW50c1xuKSB7XG4gIGNvbnN0IGZldGNoZWRTZWdtZW50cyA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gIGF3YWl0IHJlZnJlc2hJbmFjdGl2ZVBhcmFsbGVsU2VnbWVudHNJbXBsKHtcbiAgICAuLi5vcHRpb25zLFxuICAgIHJvb3RUcmVlOiBvcHRpb25zLnVwZGF0ZWRUcmVlLFxuICAgIGZldGNoZWRTZWdtZW50cyxcbiAgfSlcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVmcmVzaEluYWN0aXZlUGFyYWxsZWxTZWdtZW50c0ltcGwoe1xuICBuYXZpZ2F0ZWRBdCxcbiAgc3RhdGUsXG4gIHVwZGF0ZWRUcmVlLFxuICB1cGRhdGVkQ2FjaGUsXG4gIGluY2x1ZGVOZXh0VXJsLFxuICBmZXRjaGVkU2VnbWVudHMsXG4gIHJvb3RUcmVlID0gdXBkYXRlZFRyZWUsXG4gIGNhbm9uaWNhbFVybCxcbn06IFJlZnJlc2hJbmFjdGl2ZVBhcmFsbGVsU2VnbWVudHMgJiB7XG4gIGZldGNoZWRTZWdtZW50czogU2V0PHN0cmluZz5cbiAgcm9vdFRyZWU6IEZsaWdodFJvdXRlclN0YXRlXG59KSB7XG4gIGNvbnN0IFssIHBhcmFsbGVsUm91dGVzLCByZWZldGNoUGF0aCwgcmVmZXRjaE1hcmtlcl0gPSB1cGRhdGVkVHJlZVxuICBjb25zdCBmZXRjaFByb21pc2VzID0gW11cblxuICBpZiAoXG4gICAgcmVmZXRjaFBhdGggJiZcbiAgICByZWZldGNoUGF0aCAhPT0gY2Fub25pY2FsVXJsICYmXG4gICAgcmVmZXRjaE1hcmtlciA9PT0gJ3JlZnJlc2gnICYmXG4gICAgLy8gaXQncyBwb3NzaWJsZSBmb3IgdGhlIHRyZWUgdG8gY29udGFpbiBtdWx0aXBsZSBzZWdtZW50cyB0aGF0IGNvbnRhaW4gZGF0YSBhdCB0aGUgc2FtZSBVUkxcbiAgICAvLyB3ZSBrZWVwIHRyYWNrIG9mIHRoZW0gc28gd2UgY2FuIGRlZHVwZSB0aGUgcmVxdWVzdHNcbiAgICAhZmV0Y2hlZFNlZ21lbnRzLmhhcyhyZWZldGNoUGF0aClcbiAgKSB7XG4gICAgZmV0Y2hlZFNlZ21lbnRzLmFkZChyZWZldGNoUGF0aCkgLy8gTWFyayB0aGlzIFVSTCBhcyBmZXRjaGVkXG5cbiAgICAvLyBFYWdlcmx5IGtpY2sgb2ZmIHRoZSBmZXRjaCBmb3IgdGhlIHJlZmV0Y2ggcGF0aCAmIHRoZSBwYXJhbGxlbCByb3V0ZXMuIFRoaXMgc2hvdWxkIGJlIGZpbmUgdG8gZG8gYXMgdGhleSBlYWNoIG9wZXJhdGVcbiAgICAvLyBpbmRlcGVuZGVudGx5IG9uIHRoZWlyIG93biBjYWNoZSBub2RlcywgYW5kIGBhcHBseUZsaWdodERhdGFgIHdpbGwgY29weSBhbnl0aGluZyBpdCBkb2Vzbid0IGNhcmUgYWJvdXQgZnJvbSB0aGUgZXhpc3RpbmcgY2FjaGUuXG4gICAgY29uc3QgZmV0Y2hQcm9taXNlID0gZmV0Y2hTZXJ2ZXJSZXNwb25zZShcbiAgICAgIG5ldyBVUkwocmVmZXRjaFBhdGgsIGxvY2F0aW9uLm9yaWdpbiksXG4gICAgICB7XG4gICAgICAgIC8vIHJlZmV0Y2ggZnJvbSB0aGUgcm9vdCBvZiB0aGUgdXBkYXRlZCB0cmVlLCBvdGhlcndpc2UgaXQgd2lsbCBiZSBzY29wZWQgdG8gdGhlIGN1cnJlbnQgc2VnbWVudFxuICAgICAgICAvLyBhbmQgbWlnaHQgbm90IGNvbnRhaW4gdGhlIGRhdGEgd2UgbmVlZCB0byBwYXRjaCBpbiBpbnRlcmNlcHRpb24gcm91dGUgZGF0YSAoc3VjaCBhcyBkeW5hbWljIHBhcmFtcyBmcm9tIGEgcHJldmlvdXMgc2VnbWVudClcbiAgICAgICAgZmxpZ2h0Um91dGVyU3RhdGU6IFtyb290VHJlZVswXSwgcm9vdFRyZWVbMV0sIHJvb3RUcmVlWzJdLCAncmVmZXRjaCddLFxuICAgICAgICBuZXh0VXJsOiBpbmNsdWRlTmV4dFVybCA/IHN0YXRlLm5leHRVcmwgOiBudWxsLFxuICAgICAgfVxuICAgICkudGhlbigoeyBmbGlnaHREYXRhIH0pID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZmxpZ2h0RGF0YSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgZm9yIChjb25zdCBmbGlnaHREYXRhUGF0aCBvZiBmbGlnaHREYXRhKSB7XG4gICAgICAgICAgLy8gd2Ugb25seSBwYXNzIHRoZSBuZXcgY2FjaGUgYXMgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgY2xlYXJpbmcgdGhlIHJvdXRlciBjYWNoZVxuICAgICAgICAgIC8vIGFuZCBmaWxsaW5nIGluIHRoZSBuZXcgcGFnZSBkYXRhIGZyb20gdGhlIHNlcnZlci4gTWVhbmluZyB0aGUgZXhpc3RpbmcgY2FjaGUgaXMgYWN0dWFsbHkgdGhlIGNhY2hlIHRoYXQnc1xuICAgICAgICAgIC8vIGp1c3QgYmVlbiBjcmVhdGVkICYgaGFzIGJlZW4gd3JpdHRlbiB0bywgYnV0IGhhc24ndCBiZWVuIFwiY29tbWl0dGVkXCIgeWV0LlxuICAgICAgICAgIGFwcGx5RmxpZ2h0RGF0YShcbiAgICAgICAgICAgIG5hdmlnYXRlZEF0LFxuICAgICAgICAgICAgdXBkYXRlZENhY2hlLFxuICAgICAgICAgICAgdXBkYXRlZENhY2hlLFxuICAgICAgICAgICAgZmxpZ2h0RGF0YVBhdGhcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFdoZW4gZmxpZ2h0RGF0YSBpcyBhIHN0cmluZywgaXQgc3VnZ2VzdHMgdGhhdCB0aGUgc2VydmVyIHJlc3BvbnNlIHNob3VsZCBoYXZlIHRyaWdnZXJlZCBhbiBNUEEgbmF2aWdhdGlvblxuICAgICAgICAvLyBJJ20gbm90IDEwMCUgc3VyZSBvZiB0aGlzIGRlY2lzaW9uLCBidXQgaXQgc2VlbXMgdW5saWtlbHkgdGhhdCB3ZSdkIHdhbnQgdG8gaW50cm9kdWNlIGEgcmVkaXJlY3Qgc2lkZSBlZmZlY3RcbiAgICAgICAgLy8gd2hlbiByZWZyZXNoaW5nIG9uLXNjcmVlbiBkYXRhLCBzbyBoYW5kbGluZyB0aGlzIGhhcyBiZWVuIG9tbWl0dGVkLlxuICAgICAgfVxuICAgIH0pXG5cbiAgICBmZXRjaFByb21pc2VzLnB1c2goZmV0Y2hQcm9taXNlKVxuICB9XG5cbiAgZm9yIChjb25zdCBrZXkgaW4gcGFyYWxsZWxSb3V0ZXMpIHtcbiAgICBjb25zdCBwYXJhbGxlbEZldGNoUHJvbWlzZSA9IHJlZnJlc2hJbmFjdGl2ZVBhcmFsbGVsU2VnbWVudHNJbXBsKHtcbiAgICAgIG5hdmlnYXRlZEF0LFxuICAgICAgc3RhdGUsXG4gICAgICB1cGRhdGVkVHJlZTogcGFyYWxsZWxSb3V0ZXNba2V5XSxcbiAgICAgIHVwZGF0ZWRDYWNoZSxcbiAgICAgIGluY2x1ZGVOZXh0VXJsLFxuICAgICAgZmV0Y2hlZFNlZ21lbnRzLFxuICAgICAgcm9vdFRyZWUsXG4gICAgICBjYW5vbmljYWxVcmwsXG4gICAgfSlcblxuICAgIGZldGNoUHJvbWlzZXMucHVzaChwYXJhbGxlbEZldGNoUHJvbWlzZSlcbiAgfVxuXG4gIGF3YWl0IFByb21pc2UuYWxsKGZldGNoUHJvbWlzZXMpXG59XG5cbi8qKlxuICogV2Fsa3MgdGhlIGN1cnJlbnQgcGFyYWxsZWwgc2VnbWVudHMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIFwiYWN0aXZlXCIuXG4gKiBBbiBhY3RpdmUgcGFyYWxsZWwgcm91dGUgd2lsbCBoYXZlIGEgYF9fUEFHRV9fYCBzZWdtZW50IGluIHRoZSBGbGlnaHRSb3V0ZXJTdGF0ZS5cbiAqIEFzIG9wcG9zZWQgdG8gYSBgX19ERUZBVUxUX19gIHNlZ21lbnQsIHdoaWNoIG1lYW5zIHRoZXJlIHdhcyBubyBtYXRjaCBmb3IgdGhhdCBwYXJhbGxlbCByb3V0ZS5cbiAqIFdlIGFkZCBhIHNwZWNpYWwgbWFya2VyIGhlcmUgc28gdGhhdCB3ZSBrbm93IGhvdyB0byByZWZyZXNoIGl0cyBkYXRhIHdoZW4gdGhlIHJvdXRlciBpcyByZXZhbGlkYXRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFJlZnJlc2hNYXJrZXJUb0FjdGl2ZVBhcmFsbGVsU2VnbWVudHMoXG4gIHRyZWU6IEZsaWdodFJvdXRlclN0YXRlLFxuICBwYXRoOiBzdHJpbmdcbikge1xuICBjb25zdCBbc2VnbWVudCwgcGFyYWxsZWxSb3V0ZXMsICwgcmVmZXRjaE1hcmtlcl0gPSB0cmVlXG4gIC8vIGEgcGFnZSBzZWdtZW50IG1pZ2h0IGFsc28gY29udGFpbiBjb25jYXRlbmF0ZWQgc2VhcmNoIHBhcmFtcywgc28gd2UgZG8gYSBwYXJ0aWFsIG1hdGNoIG9uIHRoZSBrZXlcbiAgaWYgKHNlZ21lbnQuaW5jbHVkZXMoUEFHRV9TRUdNRU5UX0tFWSkgJiYgcmVmZXRjaE1hcmtlciAhPT0gJ3JlZnJlc2gnKSB7XG4gICAgdHJlZVsyXSA9IHBhdGhcbiAgICB0cmVlWzNdID0gJ3JlZnJlc2gnXG4gIH1cblxuICBmb3IgKGNvbnN0IGtleSBpbiBwYXJhbGxlbFJvdXRlcykge1xuICAgIGFkZFJlZnJlc2hNYXJrZXJUb0FjdGl2ZVBhcmFsbGVsU2VnbWVudHMocGFyYWxsZWxSb3V0ZXNba2V5XSwgcGF0aClcbiAgfVxufVxuIl0sIm5hbWVzIjpbImFkZFJlZnJlc2hNYXJrZXJUb0FjdGl2ZVBhcmFsbGVsU2VnbWVudHMiLCJyZWZyZXNoSW5hY3RpdmVQYXJhbGxlbFNlZ21lbnRzIiwib3B0aW9ucyIsImZldGNoZWRTZWdtZW50cyIsIlNldCIsInJlZnJlc2hJbmFjdGl2ZVBhcmFsbGVsU2VnbWVudHNJbXBsIiwicm9vdFRyZWUiLCJ1cGRhdGVkVHJlZSIsIm5hdmlnYXRlZEF0Iiwic3RhdGUiLCJ1cGRhdGVkQ2FjaGUiLCJpbmNsdWRlTmV4dFVybCIsImNhbm9uaWNhbFVybCIsInBhcmFsbGVsUm91dGVzIiwicmVmZXRjaFBhdGgiLCJyZWZldGNoTWFya2VyIiwiZmV0Y2hQcm9taXNlcyIsImhhcyIsImFkZCIsImZldGNoUHJvbWlzZSIsImZldGNoU2VydmVyUmVzcG9uc2UiLCJVUkwiLCJsb2NhdGlvbiIsIm9yaWdpbiIsImZsaWdodFJvdXRlclN0YXRlIiwibmV4dFVybCIsInRoZW4iLCJmbGlnaHREYXRhIiwiZmxpZ2h0RGF0YVBhdGgiLCJhcHBseUZsaWdodERhdGEiLCJwdXNoIiwia2V5IiwicGFyYWxsZWxGZXRjaFByb21pc2UiLCJQcm9taXNlIiwiYWxsIiwidHJlZSIsInBhdGgiLCJzZWdtZW50IiwiaW5jbHVkZXMiLCJQQUdFX1NFR01FTlRfS0VZIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/refetch-inactive-parallel-segments.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js":
|
||
/*!*****************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js ***!
|
||
\*****************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n ACTION_HMR_REFRESH: function() {\n return ACTION_HMR_REFRESH;\n },\n ACTION_NAVIGATE: function() {\n return ACTION_NAVIGATE;\n },\n ACTION_PREFETCH: function() {\n return ACTION_PREFETCH;\n },\n ACTION_REFRESH: function() {\n return ACTION_REFRESH;\n },\n ACTION_RESTORE: function() {\n return ACTION_RESTORE;\n },\n ACTION_SERVER_ACTION: function() {\n return ACTION_SERVER_ACTION;\n },\n ACTION_SERVER_PATCH: function() {\n return ACTION_SERVER_PATCH;\n },\n PrefetchCacheEntryStatus: function() {\n return PrefetchCacheEntryStatus;\n },\n PrefetchKind: function() {\n return PrefetchKind;\n }\n});\nconst ACTION_REFRESH = 'refresh';\nconst ACTION_NAVIGATE = 'navigate';\nconst ACTION_RESTORE = 'restore';\nconst ACTION_SERVER_PATCH = 'server-patch';\nconst ACTION_PREFETCH = 'prefetch';\nconst ACTION_HMR_REFRESH = 'hmr-refresh';\nconst ACTION_SERVER_ACTION = 'server-action';\nvar PrefetchKind = /*#__PURE__*/ function(PrefetchKind) {\n PrefetchKind[\"AUTO\"] = \"auto\";\n PrefetchKind[\"FULL\"] = \"full\";\n PrefetchKind[\"TEMPORARY\"] = \"temporary\";\n return PrefetchKind;\n}({});\nvar PrefetchCacheEntryStatus = /*#__PURE__*/ function(PrefetchCacheEntryStatus) {\n PrefetchCacheEntryStatus[\"fresh\"] = \"fresh\";\n PrefetchCacheEntryStatus[\"reusable\"] = \"reusable\";\n PrefetchCacheEntryStatus[\"expired\"] = \"expired\";\n PrefetchCacheEntryStatus[\"stale\"] = \"stale\";\n return PrefetchCacheEntryStatus;\n}({});\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=router-reducer-types.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcm91dGVyLXJlZHVjZXItdHlwZXMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBWWFBLGtCQUFrQjtlQUFsQkE7O0lBSkFDLGVBQWU7ZUFBZkE7O0lBR0FDLGVBQWU7ZUFBZkE7O0lBSkFDLGNBQWM7ZUFBZEE7O0lBRUFDLGNBQWM7ZUFBZEE7O0lBSUFDLG9CQUFvQjtlQUFwQkE7O0lBSEFDLG1CQUFtQjtlQUFuQkE7O0lBeU1EQyx3QkFBd0I7ZUFBeEJBOztJQWhFQUMsWUFBWTtlQUFaQTs7O0FBNUlMLE1BQU1MLGlCQUFpQjtBQUN2QixNQUFNRixrQkFBa0I7QUFDeEIsTUFBTUcsaUJBQWlCO0FBQ3ZCLE1BQU1FLHNCQUFzQjtBQUM1QixNQUFNSixrQkFBa0I7QUFDeEIsTUFBTUYscUJBQXFCO0FBQzNCLE1BQU1LLHVCQUF1QjtBQXNJN0IsSUFBS0csZUFBQUEsV0FBQUEsR0FBQUEsU0FBQUEsWUFBQUE7Ozs7V0FBQUE7O0FBZ0VMLElBQUtELDJCQUFBQSxXQUFBQSxHQUFBQSxTQUFBQSx3QkFBQUE7Ozs7O1dBQUFBIiwic291cmNlcyI6WyIvaG9tZS9zcmMvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcm91dGVyLXJlZHVjZXItdHlwZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDYWNoZU5vZGUgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvbGliL2FwcC1yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZSdcbmltcG9ydCB0eXBlIHtcbiAgRmxpZ2h0Um91dGVyU3RhdGUsXG4gIEZsaWdodFNlZ21lbnRQYXRoLFxufSBmcm9tICcuLi8uLi8uLi9zZXJ2ZXIvYXBwLXJlbmRlci90eXBlcydcbmltcG9ydCB0eXBlIHsgRmV0Y2hTZXJ2ZXJSZXNwb25zZVJlc3VsdCB9IGZyb20gJy4vZmV0Y2gtc2VydmVyLXJlc3BvbnNlJ1xuXG5leHBvcnQgY29uc3QgQUNUSU9OX1JFRlJFU0ggPSAncmVmcmVzaCdcbmV4cG9ydCBjb25zdCBBQ1RJT05fTkFWSUdBVEUgPSAnbmF2aWdhdGUnXG5leHBvcnQgY29uc3QgQUNUSU9OX1JFU1RPUkUgPSAncmVzdG9yZSdcbmV4cG9ydCBjb25zdCBBQ1RJT05fU0VSVkVSX1BBVENIID0gJ3NlcnZlci1wYXRjaCdcbmV4cG9ydCBjb25zdCBBQ1RJT05fUFJFRkVUQ0ggPSAncHJlZmV0Y2gnXG5leHBvcnQgY29uc3QgQUNUSU9OX0hNUl9SRUZSRVNIID0gJ2htci1yZWZyZXNoJ1xuZXhwb3J0IGNvbnN0IEFDVElPTl9TRVJWRVJfQUNUSU9OID0gJ3NlcnZlci1hY3Rpb24nXG5cbmV4cG9ydCB0eXBlIFJvdXRlckNoYW5nZUJ5U2VydmVyUmVzcG9uc2UgPSAoe1xuICBuYXZpZ2F0ZWRBdCxcbiAgcHJldmlvdXNUcmVlLFxuICBzZXJ2ZXJSZXNwb25zZSxcbn06IHtcbiAgbmF2aWdhdGVkQXQ6IG51bWJlclxuICBwcmV2aW91c1RyZWU6IEZsaWdodFJvdXRlclN0YXRlXG4gIHNlcnZlclJlc3BvbnNlOiBGZXRjaFNlcnZlclJlc3BvbnNlUmVzdWx0XG59KSA9PiB2b2lkXG5cbmV4cG9ydCBpbnRlcmZhY2UgTXV0YWJsZSB7XG4gIG1wYU5hdmlnYXRpb24/OiBib29sZWFuXG4gIHBhdGNoZWRUcmVlPzogRmxpZ2h0Um91dGVyU3RhdGVcbiAgY2Fub25pY2FsVXJsPzogc3RyaW5nXG4gIHNjcm9sbGFibGVTZWdtZW50cz86IEZsaWdodFNlZ21lbnRQYXRoW11cbiAgcGVuZGluZ1B1c2g/OiBib29sZWFuXG4gIGNhY2hlPzogQ2FjaGVOb2RlXG4gIHByZWZldGNoQ2FjaGU/OiBBcHBSb3V0ZXJTdGF0ZVsncHJlZmV0Y2hDYWNoZSddXG4gIGhhc2hGcmFnbWVudD86IHN0cmluZ1xuICBzaG91bGRTY3JvbGw/OiBib29sZWFuXG4gIHByZXNlcnZlQ3VzdG9tSGlzdG9yeVN0YXRlPzogYm9vbGVhblxuICBvbmx5SGFzaENoYW5nZT86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXJ2ZXJBY3Rpb25NdXRhYmxlIGV4dGVuZHMgTXV0YWJsZSB7XG4gIGluRmxpZ2h0U2VydmVyQWN0aW9uPzogUHJvbWlzZTxhbnk+IHwgbnVsbFxufVxuXG4vKipcbiAqIFJlZnJlc2ggdHJpZ2dlcnMgYSByZWZyZXNoIG9mIHRoZSBmdWxsIHBhZ2UgZGF0YS5cbiAqIC0gZmV0Y2hlcyB0aGUgRmxpZ2h0IGRhdGEgYW5kIGZpbGxzIHJzYyBhdCB0aGUgcm9vdCBvZiB0aGUgY2FjaGUuXG4gKiAtIFRoZSByb3V0ZXIgc3RhdGUgaXMgdXBkYXRlZCBhdCB0aGUgcm9vdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWZyZXNoQWN0aW9uIHtcbiAgdHlwZTogdHlwZW9mIEFDVElPTl9SRUZSRVNIXG4gIG9yaWdpbjogTG9jYXRpb25bJ29yaWdpbiddXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSG1yUmVmcmVzaEFjdGlvbiB7XG4gIHR5cGU6IHR5cGVvZiBBQ1RJT05fSE1SX1JFRlJFU0hcbiAgb3JpZ2luOiBMb2NhdGlvblsnb3JpZ2luJ11cbn1cblxuZXhwb3J0IHR5cGUgU2VydmVyQWN0aW9uRGlzcGF0Y2hlciA9IChcbiAgYXJnczogT21pdDxcbiAgICBTZXJ2ZXJBY3Rpb25BY3Rpb24sXG4gICAgJ3R5cGUnIHwgJ211dGFibGUnIHwgJ25hdmlnYXRlJyB8ICdjaGFuZ2VCeVNlcnZlclJlc3BvbnNlJyB8ICdjYWNoZSdcbiAgPlxuKSA9PiB2b2lkXG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmVyQWN0aW9uQWN0aW9uIHtcbiAgdHlwZTogdHlwZW9mIEFDVElPTl9TRVJWRVJfQUNUSU9OXG4gIGFjdGlvbklkOiBzdHJpbmdcbiAgYWN0aW9uQXJnczogYW55W11cbiAgcmVzb2x2ZTogKHZhbHVlOiBhbnkpID0+IHZvaWRcbiAgcmVqZWN0OiAocmVhc29uPzogYW55KSA9PiB2b2lkXG59XG5cbi8qKlxuICogTmF2aWdhdGUgdHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIHRvIHRoZSBwcm92aWRlZCB1cmwuIEl0IHN1cHBvcnRzIHR3byB0eXBlczogYHB1c2hgIGFuZCBgcmVwbGFjZWAuXG4gKlxuICogYG5hdmlnYXRlVHlwZWA6XG4gKiAtIGBwdXNoYCAtIHB1c2hlcyBhIG5ldyBoaXN0b3J5IGVudHJ5IGluIHRoZSBicm93c2VyIGhpc3RvcnlcbiAqIC0gYHJlcGxhY2VgIC0gcmVwbGFjZXMgdGhlIGN1cnJlbnQgaGlzdG9yeSBlbnRyeSBpbiB0aGUgYnJvd3NlciBoaXN0b3J5XG4gKlxuICogTmF2aWdhdGUgaGFzIG11bHRpcGxlIGNhY2hlIGhldXJpc3RpY3M6XG4gKiAtIHBhZ2Ugd2FzIHByZWZldGNoZWRcbiAqICAtIEFwcGx5IHJvdXRlciBzdGF0ZSB0cmVlIGZyb20gcHJlZmV0Y2hcbiAqICAtIEFwcGx5IEZsaWdodCBkYXRhIGZyb20gcHJlZmV0Y2ggdG8gdGhlIGNhY2hlXG4gKiAgLSBJZiBGbGlnaHQgZGF0YSBpcyBhIHN0cmluZywgaXQncyBhIHJlZGlyZWN0IGFuZCB0aGUgc3RhdGUgaXMgdXBkYXRlZCB0byB0cmlnZ2VyIGEgcmVkaXJlY3RcbiAqICAtIENoZWNrIGlmIGhhcmQgbmF2aWdhdGlvbiBpcyBuZWVkZWRcbiAqICAgIC0gSGFyZCBuYXZpZ2F0aW9uIGhhcHBlbnMgd2hlbiBhIGR5bmFtaWMgcGFyYW1ldGVyIGJlbG93IHRoZSBjb21tb24gbGF5b3V0IGNoYW5nZWRcbiAqICAgIC0gV2hlbiBoYXJkIG5hdmlnYXRpb24gaXMgbmVlZGVkIHRoZSBjYWNoZSBpcyBpbnZhbGlkYXRlZCBiZWxvdyB0aGUgZmxpZ2h0U2VnbWVudFBhdGhcbiAqICAgIC0gVGhlIG1pc3NpbmcgY2FjaGUgbm9kZXMgb2YgdGhlIHBhZ2Ugd2lsbCBiZSBmZXRjaGVkIGluIGxheW91dC1yb3V0ZXIgYW5kIHRyaWdnZXIgdGhlIFNFUlZFUl9QQVRDSCBhY3Rpb25cbiAqICAtIElmIGhhcmQgbmF2aWdhdGlvbiBpcyBub3QgbmVlZGVkXG4gKiAgICAtIFRoZSBjYWNoZSBpcyByZXVzZWRcbiAqICAgIC0gSWYgYW55IGNhY2hlIG5vZGVzIGFyZSBtaXNzaW5nIHRoZXknbGwgYmUgZmV0Y2hlZCBpbiBsYXlvdXQtcm91dGVyIGFuZCB0cmlnZ2VyIHRoZSBTRVJWRVJfUEFUQ0ggYWN0aW9uXG4gKiAtIHBhZ2Ugd2FzIG5vdCBwcmVmZXRjaGVkXG4gKiAgLSBUaGUgbmF2aWdhdGUgd2FzIGNhbGxlZCBmcm9tIGBuZXh0L3JvdXRlcmAgKGByb3V0ZXIucHVzaCgpYCAvIGByb3V0ZXIucmVwbGFjZSgpYCkgLyBgbmV4dC9saW5rYCB3aXRob3V0IHByZWZldGNoZWQgZGF0YSBhdmFpbGFibGUgKGUuZy4gdGhlIHByZWZldGNoIGRpZG4ndCBjb21lIGJhY2sgZnJvbSB0aGUgc2VydmVyIGJlZm9yZSBjbGlja2luZyB0aGUgbGluaylcbiAqICAgIC0gRmxpZ2h0IGRhdGEgaXMgZmV0Y2hlZCBpbiB0aGUgcmVkdWNlciAoc3VzcGVuZHMgdGhlIHJlZHVjZXIpXG4gKiAgICAtIFJvdXRlciBzdGF0ZSB0cmVlIGlzIGNyZWF0ZWQgYmFzZWQgb24gRmxpZ2h0IGRhdGFcbiAqICAgIC0gQ2FjaGUgaXMgZmlsbGVkIGJhc2VkIG9uIHRoZSBGbGlnaHQgZGF0YVxuICpcbiAqIEFib3ZlIHN0ZXBzIGV4cGxhaW4gMyBjYXNlczpcbiAqIC0gYHNvZnRgIC0gUmV1c2VzIHRoZSBleGlzdGluZyBjYWNoZSBhbmQgZmV0Y2hlcyBtaXNzaW5nIG5vZGVzIGluIGxheW91dC1yb3V0ZXIuXG4gKiAtIGBoYXJkYCAtIENyZWF0ZXMgYSBuZXcgY2FjaGUgd2hlcmUgY2FjaGUgbm9kZXMgYXJlIHJlbW92ZWQgYmVsb3cgdGhlIGNvbW1vbiBsYXlvdXQgYW5kIGZldGNoZXMgbWlzc2luZyBub2RlcyBpbiBsYXlvdXQtcm91dGVyLlxuICogLSBgb3B0aW1pc3RpY2AgKGV4cGxpY2l0IG5vIHByZWZldGNoKSAtIENyZWF0ZXMgYSBuZXcgY2FjaGUgYW5kIGtpY2tzIG9mZiB0aGUgZGF0YSBmZXRjaCBpbiB0aGUgcmVkdWNlci4gVGhlIGRhdGEgZmV0Y2ggaXMgYXdhaXRlZCBpbiB0aGUgbGF5b3V0LXJvdXRlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOYXZpZ2F0ZUFjdGlvbiB7XG4gIHR5cGU6IHR5cGVvZiBBQ1RJT05fTkFWSUdBVEVcbiAgdXJsOiBVUkxcbiAgaXNFeHRlcm5hbFVybDogYm9vbGVhblxuICBsb2NhdGlvblNlYXJjaDogTG9jYXRpb25bJ3NlYXJjaCddXG4gIG5hdmlnYXRlVHlwZTogJ3B1c2gnIHwgJ3JlcGxhY2UnXG4gIHNob3VsZFNjcm9sbDogYm9vbGVhblxuICBhbGxvd0FsaWFzaW5nOiBib29sZWFuXG59XG5cbi8qKlxuICogUmVzdG9yZSBhcHBsaWVzIHRoZSBwcm92aWRlZCByb3V0ZXIgc3RhdGUuXG4gKiAtIFVzZWQgZm9yIGBwb3BzdGF0ZWAgKGJhY2svZm9yd2FyZCBuYXZpZ2F0aW9uKSB3aGVyZSBhIGtub3duIHJvdXRlciBzdGF0ZSBoYXMgdG8gYmUgYXBwbGllZC5cbiAqIC0gQWxzbyB1c2VkIHdoZW4gc3luY2luZyB0aGUgcm91dGVyIHN0YXRlIHdpdGggYHB1c2hTdGF0ZWAvYHJlcGxhY2VTdGF0ZWAgY2FsbHMuXG4gKiAtIFJvdXRlciBzdGF0ZSBpcyBhcHBsaWVkIGFzLWlzIGZyb20gdGhlIGhpc3Rvcnkgc3RhdGUsIGlmIGF2YWlsYWJsZS5cbiAqIC0gSWYgdGhlIGhpc3Rvcnkgc3RhdGUgZG9lcyBub3QgY29udGFpbiB0aGUgcm91dGVyIHN0YXRlLCB0aGUgZXhpc3Rpbmcgcm91dGVyIHN0YXRlIGlzIHVzZWQuXG4gKiAtIElmIGFueSBjYWNoZSBub2RlIGlzIG1pc3NpbmcgaXQgd2lsbCBiZSBmZXRjaGVkIGluIGxheW91dC1yb3V0ZXIgZHVyaW5nIHJlbmRlcmluZyBhbmQgdGhlIHNlcnZlci1wYXRjaCBjYXNlLlxuICogLSBJZiBleGlzdGluZyBjYWNoZSBub2RlcyBtYXRjaCB0aGVzZSBhcmUgdXNlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXN0b3JlQWN0aW9uIHtcbiAgdHlwZTogdHlwZW9mIEFDVElPTl9SRVNUT1JFXG4gIHVybDogVVJMXG4gIHRyZWU6IEZsaWdodFJvdXRlclN0YXRlIHwgdW5kZWZpbmVkXG59XG5cbi8qKlxuICogU2VydmVyLXBhdGNoIGFwcGxpZXMgdGhlIHByb3ZpZGVkIEZsaWdodCBkYXRhIHRvIHRoZSBjYWNoZSBhbmQgcm91dGVyIHRyZWUuXG4gKiAtIE9ubHkgdHJpZ2dlcmVkIGluIGxheW91dC1yb3V0ZXIuXG4gKiAtIENyZWF0ZXMgYSBuZXcgY2FjaGUgYW5kIHJvdXRlciBzdGF0ZSB3aXRoIHRoZSBGbGlnaHQgZGF0YSBhcHBsaWVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZlclBhdGNoQWN0aW9uIHtcbiAgdHlwZTogdHlwZW9mIEFDVElPTl9TRVJWRVJfUEFUQ0hcbiAgbmF2aWdhdGVkQXQ6IG51bWJlclxuICBzZXJ2ZXJSZXNwb25zZTogRmV0Y2hTZXJ2ZXJSZXNwb25zZVJlc3VsdFxuICBwcmV2aW91c1RyZWU6IEZsaWdodFJvdXRlclN0YXRlXG59XG5cbi8qKlxuICogUHJlZmV0Y2hLaW5kIGRlZmluZXMgdGhlIHR5cGUgb2YgcHJlZmV0Y2hpbmcgdGhhdCBzaG91bGQgYmUgZG9uZS5cbiAqIC0gYGF1dG9gIC0gaWYgdGhlIHBhZ2UgaXMgZHluYW1pYywgcHJlZmV0Y2ggdGhlIHBhZ2UgZGF0YSBwYXJ0aWFsbHksIGlmIHN0YXRpYyBwcmVmZXRjaCB0aGUgcGFnZSBkYXRhIGZ1bGx5LlxuICogLSBgZnVsbGAgLSBwcmVmZXRjaCB0aGUgcGFnZSBkYXRhIGZ1bGx5LlxuICogLSBgdGVtcG9yYXJ5YCAtIGEgdGVtcG9yYXJ5IHByZWZldGNoIGVudHJ5IGlzIGFkZGVkIHRvIHRoZSBjYWNoZSwgdGhpcyBpcyB1c2VkIHdoZW4gcHJlZmV0Y2g9e2ZhbHNlfSBpcyB1c2VkIGluIG5leHQvbGluayBvciB3aGVuIHlvdSBwdXNoIGEgcm91dGUgcHJvZ3JhbW1hdGljYWxseS5cbiAqL1xuXG5leHBvcnQgZW51bSBQcmVmZXRjaEtpbmQge1xuICBBVVRPID0gJ2F1dG8nLFxuICBGVUxMID0gJ2Z1bGwnLFxuICBURU1QT1JBUlkgPSAndGVtcG9yYXJ5Jyxcbn1cblxuLyoqXG4gKiBQcmVmZXRjaCBhZGRzIHRoZSBwcm92aWRlZCBGbGlnaHREYXRhIHRvIHRoZSBwcmVmZXRjaCBjYWNoZVxuICogLSBDcmVhdGVzIHRoZSByb3V0ZXIgc3RhdGUgdHJlZSBiYXNlZCBvbiB0aGUgcGF0Y2ggaW4gRmxpZ2h0RGF0YVxuICogLSBBZGRzIHRoZSBGbGlnaHREYXRhIHRvIHRoZSBwcmVmZXRjaCBjYWNoZVxuICogLSBJbiBBQ1RJT05fTkFWSUdBVEUgdGhlIHByZWZldGNoIGNhY2hlIGlzIGNoZWNrZWQgYW5kIHRoZSByb3V0ZXIgc3RhdGUgdHJlZSBhbmQgRmxpZ2h0RGF0YSBhcmUgYXBwbGllZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmVmZXRjaEFjdGlvbiB7XG4gIHR5cGU6IHR5cGVvZiBBQ1RJT05fUFJFRkVUQ0hcbiAgdXJsOiBVUkxcbiAga2luZDogUHJlZmV0Y2hLaW5kXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHVzaFJlZiB7XG4gIC8qKlxuICAgKiBJZiB0aGUgYXBwLXJvdXRlciBzaG91bGQgcHVzaCBhIG5ldyBoaXN0b3J5IGVudHJ5IGluIGFwcC1yb3V0ZXIncyB1c2VFZmZlY3QoKVxuICAgKi9cbiAgcGVuZGluZ1B1c2g6IGJvb2xlYW5cbiAgLyoqXG4gICAqIE11bHRpLXBhZ2UgbmF2aWdhdGlvbiB0aHJvdWdoIGxvY2F0aW9uLmhyZWYuXG4gICAqL1xuICBtcGFOYXZpZ2F0aW9uOiBib29sZWFuXG4gIC8qKlxuICAgKiBTa2lwIGFwcGx5aW5nIHRoZSByb3V0ZXIgc3RhdGUgdG8gdGhlIGJyb3dzZXIgaGlzdG9yeSBzdGF0ZS5cbiAgICovXG4gIHByZXNlcnZlQ3VzdG9tSGlzdG9yeVN0YXRlOiBib29sZWFuXG59XG5cbmV4cG9ydCB0eXBlIEZvY3VzQW5kU2Nyb2xsUmVmID0ge1xuICAvKipcbiAgICogSWYgZm9jdXMgYW5kIHNjcm9sbCBzaG91bGQgYmUgc2V0IGluIHRoZSBsYXlvdXQtcm91dGVyJ3MgdXNlRWZmZWN0KClcbiAgICovXG4gIGFwcGx5OiBib29sZWFuXG4gIC8qKlxuICAgKiBUaGUgaGFzaCBmcmFnbWVudCB0aGF0IHNob3VsZCBiZSBzY3JvbGxlZCB0by5cbiAgICovXG4gIGhhc2hGcmFnbWVudDogc3RyaW5nIHwgbnVsbFxuICAvKipcbiAgICogVGhlIHBhdGhzIG9mIHRoZSBzZWdtZW50cyB0aGF0IHNob3VsZCBiZSBmb2N1c2VkLlxuICAgKi9cbiAgc2VnbWVudFBhdGhzOiBGbGlnaHRTZWdtZW50UGF0aFtdXG4gIC8qKlxuICAgKiBJZiBvbmx5IHRoZSBVUkxzIGhhc2ggZnJhZ21lbnQgY2hhbmdlZFxuICAgKi9cbiAgb25seUhhc2hDaGFuZ2U6IGJvb2xlYW5cbn1cblxuZXhwb3J0IHR5cGUgUHJlZmV0Y2hDYWNoZUVudHJ5ID0ge1xuICB0cmVlQXRUaW1lT2ZQcmVmZXRjaDogRmxpZ2h0Um91dGVyU3RhdGVcbiAgZGF0YTogUHJvbWlzZTxGZXRjaFNlcnZlclJlc3BvbnNlUmVzdWx0PlxuICBraW5kOiBQcmVmZXRjaEtpbmRcbiAgcHJlZmV0Y2hUaW1lOiBudW1iZXJcbiAgc3RhbGVUaW1lOiBudW1iZXJcbiAgbGFzdFVzZWRUaW1lOiBudW1iZXIgfCBudWxsXG4gIGtleTogc3RyaW5nXG4gIHN0YXR1czogUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzXG4gIHVybDogVVJMXG59XG5cbmV4cG9ydCBlbnVtIFByZWZldGNoQ2FjaGVFbnRyeVN0YXR1cyB7XG4gIGZyZXNoID0gJ2ZyZXNoJyxcbiAgcmV1c2FibGUgPSAncmV1c2FibGUnLFxuICBleHBpcmVkID0gJ2V4cGlyZWQnLFxuICBzdGFsZSA9ICdzdGFsZScsXG59XG5cbi8qKlxuICogSGFuZGxlcyBrZWVwaW5nIHRoZSBzdGF0ZSBvZiBhcHAtcm91dGVyLlxuICovXG5leHBvcnQgdHlwZSBBcHBSb3V0ZXJTdGF0ZSA9IHtcbiAgLyoqXG4gICAqIFRoZSByb3V0ZXIgc3RhdGUsIHRoaXMgaXMgd3JpdHRlbiBpbnRvIHRoZSBoaXN0b3J5IHN0YXRlIGluIGFwcC1yb3V0ZXIgdXNpbmcgcmVwbGFjZVN0YXRlL3B1c2hTdGF0ZS5cbiAgICogLSBIYXMgdG8gYmUgc2VyaWFsaXphYmxlIGFzIGl0IGlzIHdyaXR0ZW4gaW50byB0aGUgaGlzdG9yeSBzdGF0ZS5cbiAgICogLSBIb2xkcyB3aGljaCBzZWdtZW50cyBhbmQgcGFyYWxsZWwgcm91dGVzIGFyZSBzaG93biBvbiB0aGUgc2NyZWVuLlxuICAgKi9cbiAgdHJlZTogRmxpZ2h0Um91dGVyU3RhdGVcbiAgLyoqXG4gICAqIFRoZSBjYWNoZSBob2xkcyBSZWFjdCBub2RlcyBmb3IgZXZlcnkgc2VnbWVudCB0aGF0IGlzIHNob3duIG9uIHNjcmVlbiBhcyB3ZWxsIGFzIHByZXZpb3VzbHkgc2hvd24gc2VnbWVudHMuXG4gICAqIEl0IGFsc28gaG9sZHMgaW4tcHJvZ3Jlc3MgZGF0YSByZXF1ZXN0cy5cbiAgICogUHJlZmV0Y2hlZCBkYXRhIGlzIHN0b3JlZCBzZXBhcmF0ZWx5IGluIGBwcmVmZXRjaENhY2hlYCwgdGhhdCBpcyBhcHBsaWVkIGR1cmluZyBBQ1RJT05fTkFWSUdBVEUuXG4gICAqL1xuICBjYWNoZTogQ2FjaGVOb2RlXG4gIC8qKlxuICAgKiBDYWNoZSB0aGF0IGhvbGRzIHByZWZldGNoZWQgRmxpZ2h0IHJlc3BvbnNlcyBrZXllZCBieSB1cmwuXG4gICAqL1xuICBwcmVmZXRjaENhY2hlOiBNYXA8c3RyaW5nLCBQcmVmZXRjaENhY2hlRW50cnk+XG4gIC8qKlxuICAgKiBEZWNpZGVzIGlmIHRoZSB1cGRhdGUgc2hvdWxkIGNyZWF0ZSBhIG5ldyBoaXN0b3J5IGVudHJ5IGFuZCBpZiB0aGUgbmF2aWdhdGlvbiBoYXMgdG8gdHJpZ2dlciBhIGJyb3dzZXIgbmF2aWdhdGlvbi5cbiAgICovXG4gIHB1c2hSZWY6IFB1c2hSZWZcbiAgLyoqXG4gICAqIERlY2lkZXMgaWYgdGhlIHVwZGF0ZSBzaG91bGQgYXBwbHkgc2Nyb2xsIGFuZCBmb2N1cyBtYW5hZ2VtZW50LlxuICAgKi9cbiAgZm9jdXNBbmRTY3JvbGxSZWY6IEZvY3VzQW5kU2Nyb2xsUmVmXG4gIC8qKlxuICAgKiBUaGUgY2Fub25pY2FsIHVybCB0aGF0IGlzIHB1c2hlZC9yZXBsYWNlZC5cbiAgICogLSBUaGlzIGlzIHRoZSB1cmwgeW91IHNlZSBpbiB0aGUgYnJvd3Nlci5cbiAgICovXG4gIGNhbm9uaWNhbFVybDogc3RyaW5nXG4gIC8qKlxuICAgKiBUaGUgdW5kZXJseWluZyBcInVybFwiIHJlcHJlc2VudGluZyB0aGUgVUkgc3RhdGUsIHdoaWNoIGlzIHVzZWQgZm9yIGludGVyY2VwdGluZyByb3V0ZXMuXG4gICAqL1xuICBuZXh0VXJsOiBzdHJpbmcgfCBudWxsXG59XG5cbmV4cG9ydCB0eXBlIFJlYWRvbmx5UmVkdWNlclN0YXRlID0gUmVhZG9ubHk8QXBwUm91dGVyU3RhdGU+XG5leHBvcnQgdHlwZSBSZWR1Y2VyU3RhdGUgPSBQcm9taXNlPEFwcFJvdXRlclN0YXRlPiB8IEFwcFJvdXRlclN0YXRlXG5leHBvcnQgdHlwZSBSZWR1Y2VyQWN0aW9ucyA9IFJlYWRvbmx5PFxuICB8IFJlZnJlc2hBY3Rpb25cbiAgfCBOYXZpZ2F0ZUFjdGlvblxuICB8IFJlc3RvcmVBY3Rpb25cbiAgfCBTZXJ2ZXJQYXRjaEFjdGlvblxuICB8IFByZWZldGNoQWN0aW9uXG4gIHwgSG1yUmVmcmVzaEFjdGlvblxuICB8IFNlcnZlckFjdGlvbkFjdGlvblxuPlxuIl0sIm5hbWVzIjpbIkFDVElPTl9ITVJfUkVGUkVTSCIsIkFDVElPTl9OQVZJR0FURSIsIkFDVElPTl9QUkVGRVRDSCIsIkFDVElPTl9SRUZSRVNIIiwiQUNUSU9OX1JFU1RPUkUiLCJBQ1RJT05fU0VSVkVSX0FDVElPTiIsIkFDVElPTl9TRVJWRVJfUEFUQ0giLCJQcmVmZXRjaENhY2hlRW50cnlTdGF0dXMiLCJQcmVmZXRjaEtpbmQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/router-reducer.js":
|
||
/*!***********************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/router-reducer/router-reducer.js ***!
|
||
\***********************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"reducer\", ({\n enumerable: true,\n get: function() {\n return reducer;\n }\n}));\nconst _routerreducertypes = __webpack_require__(/*! ./router-reducer-types */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst _navigatereducer = __webpack_require__(/*! ./reducers/navigate-reducer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js\");\nconst _serverpatchreducer = __webpack_require__(/*! ./reducers/server-patch-reducer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/server-patch-reducer.js\");\nconst _restorereducer = __webpack_require__(/*! ./reducers/restore-reducer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/restore-reducer.js\");\nconst _refreshreducer = __webpack_require__(/*! ./reducers/refresh-reducer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/refresh-reducer.js\");\nconst _prefetchreducer = __webpack_require__(/*! ./reducers/prefetch-reducer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/prefetch-reducer.js\");\nconst _hmrrefreshreducer = __webpack_require__(/*! ./reducers/hmr-refresh-reducer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/hmr-refresh-reducer.js\");\nconst _serveractionreducer = __webpack_require__(/*! ./reducers/server-action-reducer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/server-action-reducer.js\");\n/**\n * Reducer that handles the app-router state updates.\n */ function clientReducer(state, action) {\n switch(action.type){\n case _routerreducertypes.ACTION_NAVIGATE:\n {\n return (0, _navigatereducer.navigateReducer)(state, action);\n }\n case _routerreducertypes.ACTION_SERVER_PATCH:\n {\n return (0, _serverpatchreducer.serverPatchReducer)(state, action);\n }\n case _routerreducertypes.ACTION_RESTORE:\n {\n return (0, _restorereducer.restoreReducer)(state, action);\n }\n case _routerreducertypes.ACTION_REFRESH:\n {\n return (0, _refreshreducer.refreshReducer)(state, action);\n }\n case _routerreducertypes.ACTION_HMR_REFRESH:\n {\n return (0, _hmrrefreshreducer.hmrRefreshReducer)(state, action);\n }\n case _routerreducertypes.ACTION_PREFETCH:\n {\n return (0, _prefetchreducer.prefetchReducer)(state, action);\n }\n case _routerreducertypes.ACTION_SERVER_ACTION:\n {\n return (0, _serveractionreducer.serverActionReducer)(state, action);\n }\n // This case should never be hit as dispatch is strongly typed.\n default:\n throw Object.defineProperty(new Error('Unknown action'), \"__NEXT_ERROR_CODE\", {\n value: \"E295\",\n enumerable: false,\n configurable: true\n });\n }\n}\nfunction serverReducer(state, _action) {\n return state;\n}\nconst reducer = false ? 0 : clientReducer;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=router-reducer.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcm91dGVyLXJlZHVjZXIuanMiLCJtYXBwaW5ncyI6Ijs7OzsyQ0FpRWFBOzs7ZUFBQUE7OztnREF6RE47NkNBTXlCO2dEQUNHOzRDQUNKOzRDQUNBOzZDQUNDOytDQUNFO2lEQUNFO0FBRXBDOztDQUVDLEdBQ0QsU0FBU0MsY0FDUEMsS0FBMkIsRUFDM0JDLE1BQXNCO0lBRXRCLE9BQVFBLE9BQU9DLElBQUk7UUFDakIsS0FBS0Msb0JBQUFBLGVBQWU7WUFBRTtnQkFDcEIsT0FBT0MsQ0FBQUEsR0FBQUEsaUJBQUFBLGVBQUFBLEVBQWdCSixPQUFPQztZQUNoQztRQUNBLEtBQUtJLG9CQUFBQSxtQkFBbUI7WUFBRTtnQkFDeEIsT0FBT0MsQ0FBQUEsR0FBQUEsb0JBQUFBLGtCQUFBQSxFQUFtQk4sT0FBT0M7WUFDbkM7UUFDQSxLQUFLTSxvQkFBQUEsY0FBYztZQUFFO2dCQUNuQixPQUFPQyxDQUFBQSxHQUFBQSxnQkFBQUEsY0FBQUEsRUFBZVIsT0FBT0M7WUFDL0I7UUFDQSxLQUFLUSxvQkFBQUEsY0FBYztZQUFFO2dCQUNuQixPQUFPQyxDQUFBQSxHQUFBQSxnQkFBQUEsY0FBQUEsRUFBZVYsT0FBT0M7WUFDL0I7UUFDQSxLQUFLVSxvQkFBQUEsa0JBQWtCO1lBQUU7Z0JBQ3ZCLE9BQU9DLENBQUFBLEdBQUFBLG1CQUFBQSxpQkFBQUEsRUFBa0JaLE9BQU9DO1lBQ2xDO1FBQ0EsS0FBS1ksb0JBQUFBLGVBQWU7WUFBRTtnQkFDcEIsT0FBT0MsQ0FBQUEsR0FBQUEsaUJBQUFBLGVBQUFBLEVBQWdCZCxPQUFPQztZQUNoQztRQUNBLEtBQUtjLG9CQUFBQSxvQkFBb0I7WUFBRTtnQkFDekIsT0FBT0MsQ0FBQUEsR0FBQUEscUJBQUFBLG1CQUFBQSxFQUFvQmhCLE9BQU9DO1lBQ3BDO1FBQ0EsK0RBQStEO1FBQy9EO1lBQ0UsTUFBTSxxQkFBMkIsQ0FBM0IsSUFBSWdCLE1BQU0sbUJBQVY7dUJBQUE7NEJBQUE7OEJBQUE7WUFBMEI7SUFDcEM7QUFDRjtBQUVBLFNBQVNDLGNBQ1BsQixLQUEyQixFQUMzQm1CLE9BQXVCO0lBRXZCLE9BQU9uQjtBQUNUO0FBR08sTUFBTUYsVUFDWCxNQUE2QixHQUFHb0IsQ0FBYUEsR0FBR25CIiwic291cmNlcyI6WyIvaG9tZS9zcmMvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcm91dGVyLXJlZHVjZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQUNUSU9OX05BVklHQVRFLFxuICBBQ1RJT05fU0VSVkVSX1BBVENILFxuICBBQ1RJT05fUkVTVE9SRSxcbiAgQUNUSU9OX1JFRlJFU0gsXG4gIEFDVElPTl9QUkVGRVRDSCxcbiAgQUNUSU9OX0hNUl9SRUZSRVNILFxuICBBQ1RJT05fU0VSVkVSX0FDVElPTixcbn0gZnJvbSAnLi9yb3V0ZXItcmVkdWNlci10eXBlcydcbmltcG9ydCB0eXBlIHtcbiAgUmVkdWNlckFjdGlvbnMsXG4gIFJlZHVjZXJTdGF0ZSxcbiAgUmVhZG9ubHlSZWR1Y2VyU3RhdGUsXG59IGZyb20gJy4vcm91dGVyLXJlZHVjZXItdHlwZXMnXG5pbXBvcnQgeyBuYXZpZ2F0ZVJlZHVjZXIgfSBmcm9tICcuL3JlZHVjZXJzL25hdmlnYXRlLXJlZHVjZXInXG5pbXBvcnQgeyBzZXJ2ZXJQYXRjaFJlZHVjZXIgfSBmcm9tICcuL3JlZHVjZXJzL3NlcnZlci1wYXRjaC1yZWR1Y2VyJ1xuaW1wb3J0IHsgcmVzdG9yZVJlZHVjZXIgfSBmcm9tICcuL3JlZHVjZXJzL3Jlc3RvcmUtcmVkdWNlcidcbmltcG9ydCB7IHJlZnJlc2hSZWR1Y2VyIH0gZnJvbSAnLi9yZWR1Y2Vycy9yZWZyZXNoLXJlZHVjZXInXG5pbXBvcnQgeyBwcmVmZXRjaFJlZHVjZXIgfSBmcm9tICcuL3JlZHVjZXJzL3ByZWZldGNoLXJlZHVjZXInXG5pbXBvcnQgeyBobXJSZWZyZXNoUmVkdWNlciB9IGZyb20gJy4vcmVkdWNlcnMvaG1yLXJlZnJlc2gtcmVkdWNlcidcbmltcG9ydCB7IHNlcnZlckFjdGlvblJlZHVjZXIgfSBmcm9tICcuL3JlZHVjZXJzL3NlcnZlci1hY3Rpb24tcmVkdWNlcidcblxuLyoqXG4gKiBSZWR1Y2VyIHRoYXQgaGFuZGxlcyB0aGUgYXBwLXJvdXRlciBzdGF0ZSB1cGRhdGVzLlxuICovXG5mdW5jdGlvbiBjbGllbnRSZWR1Y2VyKFxuICBzdGF0ZTogUmVhZG9ubHlSZWR1Y2VyU3RhdGUsXG4gIGFjdGlvbjogUmVkdWNlckFjdGlvbnNcbik6IFJlZHVjZXJTdGF0ZSB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlIEFDVElPTl9OQVZJR0FURToge1xuICAgICAgcmV0dXJuIG5hdmlnYXRlUmVkdWNlcihzdGF0ZSwgYWN0aW9uKVxuICAgIH1cbiAgICBjYXNlIEFDVElPTl9TRVJWRVJfUEFUQ0g6IHtcbiAgICAgIHJldHVybiBzZXJ2ZXJQYXRjaFJlZHVjZXIoc3RhdGUsIGFjdGlvbilcbiAgICB9XG4gICAgY2FzZSBBQ1RJT05fUkVTVE9SRToge1xuICAgICAgcmV0dXJuIHJlc3RvcmVSZWR1Y2VyKHN0YXRlLCBhY3Rpb24pXG4gICAgfVxuICAgIGNhc2UgQUNUSU9OX1JFRlJFU0g6IHtcbiAgICAgIHJldHVybiByZWZyZXNoUmVkdWNlcihzdGF0ZSwgYWN0aW9uKVxuICAgIH1cbiAgICBjYXNlIEFDVElPTl9ITVJfUkVGUkVTSDoge1xuICAgICAgcmV0dXJuIGhtclJlZnJlc2hSZWR1Y2VyKHN0YXRlLCBhY3Rpb24pXG4gICAgfVxuICAgIGNhc2UgQUNUSU9OX1BSRUZFVENIOiB7XG4gICAgICByZXR1cm4gcHJlZmV0Y2hSZWR1Y2VyKHN0YXRlLCBhY3Rpb24pXG4gICAgfVxuICAgIGNhc2UgQUNUSU9OX1NFUlZFUl9BQ1RJT046IHtcbiAgICAgIHJldHVybiBzZXJ2ZXJBY3Rpb25SZWR1Y2VyKHN0YXRlLCBhY3Rpb24pXG4gICAgfVxuICAgIC8vIFRoaXMgY2FzZSBzaG91bGQgbmV2ZXIgYmUgaGl0IGFzIGRpc3BhdGNoIGlzIHN0cm9uZ2x5IHR5cGVkLlxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gYWN0aW9uJylcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXJ2ZXJSZWR1Y2VyKFxuICBzdGF0ZTogUmVhZG9ubHlSZWR1Y2VyU3RhdGUsXG4gIF9hY3Rpb246IFJlZHVjZXJBY3Rpb25zXG4pOiBSZWR1Y2VyU3RhdGUge1xuICByZXR1cm4gc3RhdGVcbn1cblxuLy8gd2UgZG9uJ3QgcnVuIHRoZSBjbGllbnQgcmVkdWNlciBvbiB0aGUgc2VydmVyLCBzbyB3ZSB1c2UgYSBub29wIGZ1bmN0aW9uIGZvciBiZXR0ZXIgdHJlZSBzaGFraW5nXG5leHBvcnQgY29uc3QgcmVkdWNlciA9XG4gIHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnID8gc2VydmVyUmVkdWNlciA6IGNsaWVudFJlZHVjZXJcbiJdLCJuYW1lcyI6WyJyZWR1Y2VyIiwiY2xpZW50UmVkdWNlciIsInN0YXRlIiwiYWN0aW9uIiwidHlwZSIsIkFDVElPTl9OQVZJR0FURSIsIm5hdmlnYXRlUmVkdWNlciIsIkFDVElPTl9TRVJWRVJfUEFUQ0giLCJzZXJ2ZXJQYXRjaFJlZHVjZXIiLCJBQ1RJT05fUkVTVE9SRSIsInJlc3RvcmVSZWR1Y2VyIiwiQUNUSU9OX1JFRlJFU0giLCJyZWZyZXNoUmVkdWNlciIsIkFDVElPTl9ITVJfUkVGUkVTSCIsImhtclJlZnJlc2hSZWR1Y2VyIiwiQUNUSU9OX1BSRUZFVENIIiwicHJlZmV0Y2hSZWR1Y2VyIiwiQUNUSU9OX1NFUlZFUl9BQ1RJT04iLCJzZXJ2ZXJBY3Rpb25SZWR1Y2VyIiwiRXJyb3IiLCJzZXJ2ZXJSZWR1Y2VyIiwiX2FjdGlvbiIsIndpbmRvdyJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/router-reducer.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/set-cache-busting-search-param.js":
|
||
/*!***************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/router-reducer/set-cache-busting-search-param.js ***!
|
||
\***************************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n setCacheBustingSearchParam: function() {\n return setCacheBustingSearchParam;\n },\n setCacheBustingSearchParamWithHash: function() {\n return setCacheBustingSearchParamWithHash;\n }\n});\nconst _cachebustingsearchparam = __webpack_require__(/*! ../../../shared/lib/router/utils/cache-busting-search-param */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/cache-busting-search-param.js\");\nconst _approuterheaders = __webpack_require__(/*! ../app-router-headers */ \"(app-pages-browser)/./node_modules/next/dist/client/components/app-router-headers.js\");\nconst setCacheBustingSearchParam = (url, headers)=>{\n const uniqueCacheKey = (0, _cachebustingsearchparam.computeCacheBustingSearchParam)(headers[_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER], headers[_approuterheaders.NEXT_ROUTER_SEGMENT_PREFETCH_HEADER], headers[_approuterheaders.NEXT_ROUTER_STATE_TREE_HEADER], headers[_approuterheaders.NEXT_URL]);\n setCacheBustingSearchParamWithHash(url, uniqueCacheKey);\n};\nconst setCacheBustingSearchParamWithHash = (url, hash)=>{\n /**\n * Note that we intentionally do not use `url.searchParams.set` here:\n *\n * const url = new URL('https://example.com/search?q=custom%20spacing');\n * url.searchParams.set('_rsc', 'abc123');\n * console.log(url.toString()); // Outputs: https://example.com/search?q=custom+spacing&_rsc=abc123\n * ^ <--- this is causing confusion\n * This is in fact intended based on https://url.spec.whatwg.org/#interface-urlsearchparams, but\n * we want to preserve the %20 as %20 if that's what the user passed in, hence the custom\n * logic below.\n */ const existingSearch = url.search;\n const rawQuery = existingSearch.startsWith('?') ? existingSearch.slice(1) : existingSearch;\n // Always remove any existing cache busting param and add a fresh one to ensure\n // we have the correct value based on current request headers\n const pairs = rawQuery.split('&').filter((pair)=>pair && !pair.startsWith(\"\" + _approuterheaders.NEXT_RSC_UNION_QUERY + \"=\"));\n if (hash.length > 0) {\n pairs.push(_approuterheaders.NEXT_RSC_UNION_QUERY + \"=\" + hash);\n } else {\n pairs.push(\"\" + _approuterheaders.NEXT_RSC_UNION_QUERY);\n }\n url.search = pairs.length ? \"?\" + pairs.join('&') : '';\n};\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=set-cache-busting-search-param.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvc2V0LWNhY2hlLWJ1c3Rpbmctc2VhcmNoLXBhcmFtLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQTRCYUEsMEJBQTBCO2VBQTFCQTs7SUE2QkFDLGtDQUFrQztlQUFsQ0E7OztxREF2RGtDOzhDQU94QztBQW1CQSxNQUFNRCw2QkFBNkIsQ0FDeENFLEtBQ0FDO0lBRUEsTUFBTUMsaUJBQWlCQyxDQUFBQSxHQUFBQSx5QkFBQUEsOEJBQUFBLEVBQ3JCRixPQUFPLENBQUNHLGtCQUFBQSwyQkFBMkIsQ0FBQyxFQUNwQ0gsT0FBTyxDQUFDSSxrQkFBQUEsbUNBQW1DLENBQUMsRUFDNUNKLE9BQU8sQ0FBQ0ssa0JBQUFBLDZCQUE2QixDQUFDLEVBQ3RDTCxPQUFPLENBQUNNLGtCQUFBQSxRQUFRLENBQUM7SUFFbkJSLG1DQUFtQ0MsS0FBS0U7QUFDMUM7QUFrQk8sTUFBTUgscUNBQXFDLENBQ2hEQyxLQUNBUTtJQUVBOzs7Ozs7Ozs7O0dBVUMsR0FDRCxNQUFNQyxpQkFBaUJULElBQUlVLE1BQU07SUFDakMsTUFBTUMsV0FBV0YsZUFBZUcsVUFBVSxDQUFDLE9BQ3ZDSCxlQUFlSSxLQUFLLENBQUMsS0FDckJKO0lBRUosK0VBQStFO0lBQy9FLDZEQUE2RDtJQUM3RCxNQUFNSyxRQUFRSCxTQUNYSSxLQUFLLENBQUMsS0FDTkMsTUFBTSxDQUFDLENBQUNDLE9BQVNBLFFBQVEsQ0FBQ0EsS0FBS0wsVUFBVSxDQUFFLEtBQUVNLGtCQUFBQSxvQkFBb0IsR0FBQztJQUVyRSxJQUFJVixLQUFLVyxNQUFNLEdBQUcsR0FBRztRQUNuQkwsTUFBTU0sSUFBSSxDQUFJRixrQkFBQUEsb0JBQW9CLEdBQUMsTUFBR1Y7SUFDeEMsT0FBTztRQUNMTSxNQUFNTSxJQUFJLENBQUUsS0FBRUYsa0JBQUFBLG9CQUFvQjtJQUNwQztJQUNBbEIsSUFBSVUsTUFBTSxHQUFHSSxNQUFNSyxNQUFNLEdBQUksTUFBR0wsTUFBTU8sSUFBSSxDQUFDLE9BQVM7QUFDdEQiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9zZXQtY2FjaGUtYnVzdGluZy1zZWFyY2gtcGFyYW0udHMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB7IGNvbXB1dGVDYWNoZUJ1c3RpbmdTZWFyY2hQYXJhbSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2NhY2hlLWJ1c3Rpbmctc2VhcmNoLXBhcmFtJ1xuaW1wb3J0IHtcbiAgTkVYVF9ST1VURVJfUFJFRkVUQ0hfSEVBREVSLFxuICBORVhUX1JPVVRFUl9TRUdNRU5UX1BSRUZFVENIX0hFQURFUixcbiAgTkVYVF9ST1VURVJfU1RBVEVfVFJFRV9IRUFERVIsXG4gIE5FWFRfVVJMLFxuICBORVhUX1JTQ19VTklPTl9RVUVSWSxcbn0gZnJvbSAnLi4vYXBwLXJvdXRlci1oZWFkZXJzJ1xuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0SGVhZGVycyB9IGZyb20gJy4vZmV0Y2gtc2VydmVyLXJlc3BvbnNlJ1xuXG4vKipcbiAqIE11dGF0ZXMgdGhlIHByb3ZpZGVkIFVSTCBieSBhZGRpbmcgYSBjYWNoZS1idXN0aW5nIHNlYXJjaCBwYXJhbWV0ZXIgZm9yIENETnMgdGhhdCBkb24ndFxuICogc3VwcG9ydCBjdXN0b20gaGVhZGVycy4gVGhpcyBoZWxwcyBhdm9pZCBjYWNoaW5nIGNvbmZsaWN0cyBieSBtYWtpbmcgZWFjaCByZXF1ZXN0IHVuaXF1ZS5cbiAqXG4gKiBSYXRoZXIgdGhhbiByZWx5aW5nIG9uIHRoZSBWYXJ5IGhlYWRlciB3aGljaCBzb21lIENETnMgaWdub3JlLCB3ZSBhcHBlbmQgYSBzZWFyY2ggcGFyYW1cbiAqIHRvIGNyZWF0ZSBhIHVuaXF1ZSBVUkwgdGhhdCBmb3JjZXMgYSBmcmVzaCByZXF1ZXN0LlxuICpcbiAqIEV4YW1wbGU6XG4gKiBVUkwgYmVmb3JlOiBodHRwczovL2V4YW1wbGUuY29tL3BhdGg/cXVlcnk9MVxuICogVVJMIGFmdGVyOiBodHRwczovL2V4YW1wbGUuY29tL3BhdGg/cXVlcnk9MSZfcnNjPWFiYzEyM1xuICpcbiAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gbXV0YXRlcyB0aGUgaW5wdXQgVVJMIGRpcmVjdGx5IGFuZCBkb2VzIG5vdCByZXR1cm4gYW55dGhpbmcuXG4gKlxuICogVE9ETzogU2luY2Ugd2UgbmVlZCB0byB1c2UgYSBzZWFyY2ggcGFyYW0gYW55d2F5LCB3ZSBjb3VsZCBzaW1wbGlmeSBieSByZW1vdmluZyB0aGUgY3VzdG9tXG4gKiBoZWFkZXJzIGFwcHJvYWNoIGVudGlyZWx5IGFuZCBqdXN0IHVzZSBzZWFyY2ggcGFyYW1zLlxuICovXG5leHBvcnQgY29uc3Qgc2V0Q2FjaGVCdXN0aW5nU2VhcmNoUGFyYW0gPSAoXG4gIHVybDogVVJMLFxuICBoZWFkZXJzOiBSZXF1ZXN0SGVhZGVyc1xuKTogdm9pZCA9PiB7XG4gIGNvbnN0IHVuaXF1ZUNhY2hlS2V5ID0gY29tcHV0ZUNhY2hlQnVzdGluZ1NlYXJjaFBhcmFtKFxuICAgIGhlYWRlcnNbTkVYVF9ST1VURVJfUFJFRkVUQ0hfSEVBREVSXSxcbiAgICBoZWFkZXJzW05FWFRfUk9VVEVSX1NFR01FTlRfUFJFRkVUQ0hfSEVBREVSXSxcbiAgICBoZWFkZXJzW05FWFRfUk9VVEVSX1NUQVRFX1RSRUVfSEVBREVSXSxcbiAgICBoZWFkZXJzW05FWFRfVVJMXVxuICApXG4gIHNldENhY2hlQnVzdGluZ1NlYXJjaFBhcmFtV2l0aEhhc2godXJsLCB1bmlxdWVDYWNoZUtleSlcbn1cblxuLyoqXG4gKiBTZXRzIGEgY2FjaGUtYnVzdGluZyBzZWFyY2ggcGFyYW1ldGVyIG9uIGEgVVJMIHVzaW5nIGEgcHJvdmlkZWQgaGFzaCB2YWx1ZS5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHRoZSBzYW1lIGxvZ2ljIGFzIGBzZXRDYWNoZUJ1c3RpbmdTZWFyY2hQYXJhbWAgYnV0IGFjY2VwdHNcbiAqIGEgcHJlLWNvbXB1dGVkIGhhc2ggaW5zdGVhZCBvZiBjb21wdXRpbmcgaXQgZnJvbSBoZWFkZXJzLlxuICpcbiAqIEV4YW1wbGU6XG4gKiBVUkwgYmVmb3JlOiBodHRwczovL2V4YW1wbGUuY29tL3BhdGg/cXVlcnk9MVxuICogaGFzaDogXCJhYmMxMjNcIlxuICogVVJMIGFmdGVyOiBodHRwczovL2V4YW1wbGUuY29tL3BhdGg/cXVlcnk9MSZfcnNjPWFiYzEyM1xuICpcbiAqIElmIHRoZSBoYXNoIGlzIG51bGwsIHdlIHdpbGwgc2V0IGBfcnNjYCBzZWFyY2ggcGFyYW0gd2l0aG91dCBhIHZhbHVlLlxuICogTGlrZSB0aGlzOiBodHRwczovL2V4YW1wbGUuY29tL3BhdGg/cXVlcnk9MSZfcnNjXG4gKlxuICogTm90ZTogVGhpcyBmdW5jdGlvbiBtdXRhdGVzIHRoZSBpbnB1dCBVUkwgZGlyZWN0bHkgYW5kIGRvZXMgbm90IHJldHVybiBhbnl0aGluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IHNldENhY2hlQnVzdGluZ1NlYXJjaFBhcmFtV2l0aEhhc2ggPSAoXG4gIHVybDogVVJMLFxuICBoYXNoOiBzdHJpbmdcbik6IHZvaWQgPT4ge1xuICAvKipcbiAgICogTm90ZSB0aGF0IHdlIGludGVudGlvbmFsbHkgZG8gbm90IHVzZSBgdXJsLnNlYXJjaFBhcmFtcy5zZXRgIGhlcmU6XG4gICAqXG4gICAqIGNvbnN0IHVybCA9IG5ldyBVUkwoJ2h0dHBzOi8vZXhhbXBsZS5jb20vc2VhcmNoP3E9Y3VzdG9tJTIwc3BhY2luZycpO1xuICAgKiB1cmwuc2VhcmNoUGFyYW1zLnNldCgnX3JzYycsICdhYmMxMjMnKTtcbiAgICogY29uc29sZS5sb2codXJsLnRvU3RyaW5nKCkpOyAvLyBPdXRwdXRzOiBodHRwczovL2V4YW1wbGUuY29tL3NlYXJjaD9xPWN1c3RvbStzcGFjaW5nJl9yc2M9YWJjMTIzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeIDwtLS0gdGhpcyBpcyBjYXVzaW5nIGNvbmZ1c2lvblxuICAgKiBUaGlzIGlzIGluIGZhY3QgaW50ZW5kZWQgYmFzZWQgb24gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNpbnRlcmZhY2UtdXJsc2VhcmNocGFyYW1zLCBidXRcbiAgICogd2Ugd2FudCB0byBwcmVzZXJ2ZSB0aGUgJTIwIGFzICUyMCBpZiB0aGF0J3Mgd2hhdCB0aGUgdXNlciBwYXNzZWQgaW4sIGhlbmNlIHRoZSBjdXN0b21cbiAgICogbG9naWMgYmVsb3cuXG4gICAqL1xuICBjb25zdCBleGlzdGluZ1NlYXJjaCA9IHVybC5zZWFyY2hcbiAgY29uc3QgcmF3UXVlcnkgPSBleGlzdGluZ1NlYXJjaC5zdGFydHNXaXRoKCc/JylcbiAgICA/IGV4aXN0aW5nU2VhcmNoLnNsaWNlKDEpXG4gICAgOiBleGlzdGluZ1NlYXJjaFxuXG4gIC8vIEFsd2F5cyByZW1vdmUgYW55IGV4aXN0aW5nIGNhY2hlIGJ1c3RpbmcgcGFyYW0gYW5kIGFkZCBhIGZyZXNoIG9uZSB0byBlbnN1cmVcbiAgLy8gd2UgaGF2ZSB0aGUgY29ycmVjdCB2YWx1ZSBiYXNlZCBvbiBjdXJyZW50IHJlcXVlc3QgaGVhZGVyc1xuICBjb25zdCBwYWlycyA9IHJhd1F1ZXJ5XG4gICAgLnNwbGl0KCcmJylcbiAgICAuZmlsdGVyKChwYWlyKSA9PiBwYWlyICYmICFwYWlyLnN0YXJ0c1dpdGgoYCR7TkVYVF9SU0NfVU5JT05fUVVFUll9PWApKVxuXG4gIGlmIChoYXNoLmxlbmd0aCA+IDApIHtcbiAgICBwYWlycy5wdXNoKGAke05FWFRfUlNDX1VOSU9OX1FVRVJZfT0ke2hhc2h9YClcbiAgfSBlbHNlIHtcbiAgICBwYWlycy5wdXNoKGAke05FWFRfUlNDX1VOSU9OX1FVRVJZfWApXG4gIH1cbiAgdXJsLnNlYXJjaCA9IHBhaXJzLmxlbmd0aCA/IGA/JHtwYWlycy5qb2luKCcmJyl9YCA6ICcnXG59XG4iXSwibmFtZXMiOlsic2V0Q2FjaGVCdXN0aW5nU2VhcmNoUGFyYW0iLCJzZXRDYWNoZUJ1c3RpbmdTZWFyY2hQYXJhbVdpdGhIYXNoIiwidXJsIiwiaGVhZGVycyIsInVuaXF1ZUNhY2hlS2V5IiwiY29tcHV0ZUNhY2hlQnVzdGluZ1NlYXJjaFBhcmFtIiwiTkVYVF9ST1VURVJfUFJFRkVUQ0hfSEVBREVSIiwiTkVYVF9ST1VURVJfU0VHTUVOVF9QUkVGRVRDSF9IRUFERVIiLCJORVhUX1JPVVRFUl9TVEFURV9UUkVFX0hFQURFUiIsIk5FWFRfVVJMIiwiaGFzaCIsImV4aXN0aW5nU2VhcmNoIiwic2VhcmNoIiwicmF3UXVlcnkiLCJzdGFydHNXaXRoIiwic2xpY2UiLCJwYWlycyIsInNwbGl0IiwiZmlsdGVyIiwicGFpciIsIk5FWFRfUlNDX1VOSU9OX1FVRVJZIiwibGVuZ3RoIiwicHVzaCIsImpvaW4iXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/set-cache-busting-search-param.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/should-hard-navigate.js":
|
||
/*!*****************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/router-reducer/should-hard-navigate.js ***!
|
||
\*****************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"shouldHardNavigate\", ({\n enumerable: true,\n get: function() {\n return shouldHardNavigate;\n }\n}));\nconst _flightdatahelpers = __webpack_require__(/*! ../../flight-data-helpers */ \"(app-pages-browser)/./node_modules/next/dist/client/flight-data-helpers.js\");\nconst _matchsegments = __webpack_require__(/*! ../match-segments */ \"(app-pages-browser)/./node_modules/next/dist/client/components/match-segments.js\");\nfunction shouldHardNavigate(flightSegmentPath, flightRouterState) {\n const [segment, parallelRoutes] = flightRouterState;\n // TODO-APP: Check if `as` can be replaced.\n const [currentSegment, parallelRouteKey] = flightSegmentPath;\n // Check if current segment matches the existing segment.\n if (!(0, _matchsegments.matchSegment)(currentSegment, segment)) {\n // If dynamic parameter in tree doesn't match up with segment path a hard navigation is triggered.\n if (Array.isArray(currentSegment)) {\n return true;\n }\n // If the existing segment did not match soft navigation is triggered.\n return false;\n }\n const lastSegment = flightSegmentPath.length <= 2;\n if (lastSegment) {\n return false;\n }\n return shouldHardNavigate((0, _flightdatahelpers.getNextFlightSegmentPath)(flightSegmentPath), parallelRoutes[parallelRouteKey]);\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=should-hard-navigate.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvc2hvdWxkLWhhcmQtbmF2aWdhdGUuanMiLCJtYXBwaW5ncyI6Ijs7OztzREFTZ0JBOzs7ZUFBQUE7OzsrQ0FKeUI7MkNBQ1o7QUFHdEIsU0FBU0EsbUJBQ2RDLGlCQUFpQyxFQUNqQ0MsaUJBQW9DO0lBRXBDLE1BQU0sQ0FBQ0MsU0FBU0MsZUFBZSxHQUFHRjtJQUNsQywyQ0FBMkM7SUFDM0MsTUFBTSxDQUFDRyxnQkFBZ0JDLGlCQUFpQixHQUFHTDtJQUszQyx5REFBeUQ7SUFDekQsSUFBSSxDQUFDTSxDQUFBQSxHQUFBQSxlQUFBQSxZQUFBQSxFQUFhRixnQkFBZ0JGLFVBQVU7UUFDMUMsa0dBQWtHO1FBQ2xHLElBQUlLLE1BQU1DLE9BQU8sQ0FBQ0osaUJBQWlCO1lBQ2pDLE9BQU87UUFDVDtRQUVBLHNFQUFzRTtRQUN0RSxPQUFPO0lBQ1Q7SUFDQSxNQUFNSyxjQUFjVCxrQkFBa0JVLE1BQU0sSUFBSTtJQUVoRCxJQUFJRCxhQUFhO1FBQ2YsT0FBTztJQUNUO0lBRUEsT0FBT1YsbUJBQ0xZLENBQUFBLEdBQUFBLG1CQUFBQSx3QkFBQUEsRUFBeUJYLG9CQUN6QkcsY0FBYyxDQUFDRSxpQkFBaUI7QUFFcEMiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9zaG91bGQtaGFyZC1uYXZpZ2F0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIEZsaWdodFJvdXRlclN0YXRlLFxuICBGbGlnaHREYXRhUGF0aCxcbiAgU2VnbWVudCxcbn0gZnJvbSAnLi4vLi4vLi4vc2VydmVyL2FwcC1yZW5kZXIvdHlwZXMnXG5pbXBvcnQgeyBnZXROZXh0RmxpZ2h0U2VnbWVudFBhdGggfSBmcm9tICcuLi8uLi9mbGlnaHQtZGF0YS1oZWxwZXJzJ1xuaW1wb3J0IHsgbWF0Y2hTZWdtZW50IH0gZnJvbSAnLi4vbWF0Y2gtc2VnbWVudHMnXG5cbi8vIFRPRE8tQVBQOiBmbGlnaHRTZWdtZW50UGF0aCB3aWxsIGJlIGVtcHR5IGluIGNhc2Ugb2Ygc3RhdGljIHJlc3BvbnNlLCBuZWVkcyB0byBiZSBoYW5kbGVkLlxuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZEhhcmROYXZpZ2F0ZShcbiAgZmxpZ2h0U2VnbWVudFBhdGg6IEZsaWdodERhdGFQYXRoLFxuICBmbGlnaHRSb3V0ZXJTdGF0ZTogRmxpZ2h0Um91dGVyU3RhdGVcbik6IGJvb2xlYW4ge1xuICBjb25zdCBbc2VnbWVudCwgcGFyYWxsZWxSb3V0ZXNdID0gZmxpZ2h0Um91dGVyU3RhdGVcbiAgLy8gVE9ETy1BUFA6IENoZWNrIGlmIGBhc2AgY2FuIGJlIHJlcGxhY2VkLlxuICBjb25zdCBbY3VycmVudFNlZ21lbnQsIHBhcmFsbGVsUm91dGVLZXldID0gZmxpZ2h0U2VnbWVudFBhdGggYXMgW1xuICAgIFNlZ21lbnQsXG4gICAgc3RyaW5nLFxuICBdXG5cbiAgLy8gQ2hlY2sgaWYgY3VycmVudCBzZWdtZW50IG1hdGNoZXMgdGhlIGV4aXN0aW5nIHNlZ21lbnQuXG4gIGlmICghbWF0Y2hTZWdtZW50KGN1cnJlbnRTZWdtZW50LCBzZWdtZW50KSkge1xuICAgIC8vIElmIGR5bmFtaWMgcGFyYW1ldGVyIGluIHRyZWUgZG9lc24ndCBtYXRjaCB1cCB3aXRoIHNlZ21lbnQgcGF0aCBhIGhhcmQgbmF2aWdhdGlvbiBpcyB0cmlnZ2VyZWQuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY3VycmVudFNlZ21lbnQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIC8vIElmIHRoZSBleGlzdGluZyBzZWdtZW50IGRpZCBub3QgbWF0Y2ggc29mdCBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJlZC5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBjb25zdCBsYXN0U2VnbWVudCA9IGZsaWdodFNlZ21lbnRQYXRoLmxlbmd0aCA8PSAyXG5cbiAgaWYgKGxhc3RTZWdtZW50KSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gc2hvdWxkSGFyZE5hdmlnYXRlKFxuICAgIGdldE5leHRGbGlnaHRTZWdtZW50UGF0aChmbGlnaHRTZWdtZW50UGF0aCksXG4gICAgcGFyYWxsZWxSb3V0ZXNbcGFyYWxsZWxSb3V0ZUtleV1cbiAgKVxufVxuIl0sIm5hbWVzIjpbInNob3VsZEhhcmROYXZpZ2F0ZSIsImZsaWdodFNlZ21lbnRQYXRoIiwiZmxpZ2h0Um91dGVyU3RhdGUiLCJzZWdtZW50IiwicGFyYWxsZWxSb3V0ZXMiLCJjdXJyZW50U2VnbWVudCIsInBhcmFsbGVsUm91dGVLZXkiLCJtYXRjaFNlZ21lbnQiLCJBcnJheSIsImlzQXJyYXkiLCJsYXN0U2VnbWVudCIsImxlbmd0aCIsImdldE5leHRGbGlnaHRTZWdtZW50UGF0aCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/should-hard-navigate.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/segment-cache.js":
|
||
/*!*******************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/segment-cache.js ***!
|
||
\*******************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * Entry point to the Segment Cache implementation.\n *\n * All code related to the Segment Cache lives `segment-cache-impl` directory.\n * Callers access it through this indirection.\n *\n * This is to ensure the code is dead code eliminated from the bundle if the\n * flag is disabled.\n *\n * TODO: This is super tedious. Since experimental flags are an essential part\n * of our workflow, we should establish a better pattern for dead code\n * elimination. Ideally it would be done at the bundler level, like how React's\n * build process works. In the React repo, you don't even need to add any extra\n * configuration per experiment — if the code is not reachable, it gets stripped\n * from the build automatically by Rollup. Or, shorter term, we could stub out\n * experimental modules at build time by updating the build config, i.e. a more\n * automated version of what I'm doing manually in this file.\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n NavigationResultTag: function() {\n return NavigationResultTag;\n },\n PrefetchPriority: function() {\n return PrefetchPriority;\n },\n cancelPrefetchTask: function() {\n return cancelPrefetchTask;\n },\n createCacheKey: function() {\n return createCacheKey;\n },\n getCurrentCacheVersion: function() {\n return getCurrentCacheVersion;\n },\n isPrefetchTaskDirty: function() {\n return isPrefetchTaskDirty;\n },\n navigate: function() {\n return navigate;\n },\n prefetch: function() {\n return prefetch;\n },\n reschedulePrefetchTask: function() {\n return reschedulePrefetchTask;\n },\n revalidateEntireCache: function() {\n return revalidateEntireCache;\n },\n schedulePrefetchTask: function() {\n return schedulePrefetchTask;\n }\n});\nconst notEnabled = ()=>{\n throw Object.defineProperty(new Error('Segment Cache experiment is not enabled. This is a bug in Next.js.'), \"__NEXT_ERROR_CODE\", {\n value: \"E654\",\n enumerable: false,\n configurable: true\n });\n};\nconst prefetch = false ? 0 : notEnabled;\nconst navigate = false ? 0 : notEnabled;\nconst revalidateEntireCache = false ? 0 : notEnabled;\nconst getCurrentCacheVersion = false ? 0 : notEnabled;\nconst schedulePrefetchTask = false ? 0 : notEnabled;\nconst cancelPrefetchTask = false ? 0 : notEnabled;\nconst reschedulePrefetchTask = false ? 0 : notEnabled;\nconst isPrefetchTaskDirty = false ? 0 : notEnabled;\nconst createCacheKey = false ? 0 : notEnabled;\nvar NavigationResultTag = /*#__PURE__*/ function(NavigationResultTag) {\n NavigationResultTag[NavigationResultTag[\"MPA\"] = 0] = \"MPA\";\n NavigationResultTag[NavigationResultTag[\"Success\"] = 1] = \"Success\";\n NavigationResultTag[NavigationResultTag[\"NoOp\"] = 2] = \"NoOp\";\n NavigationResultTag[NavigationResultTag[\"Async\"] = 3] = \"Async\";\n return NavigationResultTag;\n}({});\nvar PrefetchPriority = /*#__PURE__*/ function(PrefetchPriority) {\n /**\n * Assigned to the most recently hovered/touched link. Special network\n * bandwidth is reserved for this task only. There's only ever one Intent-\n * priority task at a time; when a new Intent task is scheduled, the previous\n * one is bumped down to Default.\n */ PrefetchPriority[PrefetchPriority[\"Intent\"] = 2] = \"Intent\";\n /**\n * The default priority for prefetch tasks.\n */ PrefetchPriority[PrefetchPriority[\"Default\"] = 1] = \"Default\";\n /**\n * Assigned to tasks when they spawn non-blocking background work, like\n * revalidating a partially cached entry to see if more data is available.\n */ PrefetchPriority[PrefetchPriority[\"Background\"] = 0] = \"Background\";\n return PrefetchPriority;\n}({});\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=segment-cache.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvc2VnbWVudC1jYWNoZS5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FpQkM7Ozs7Ozs7Ozs7OztJQWlHaUJBLG1CQUFtQjtlQUFuQkE7O0lBVUFDLGdCQUFnQjtlQUFoQkE7O0lBbkRMQyxrQkFBa0I7ZUFBbEJBOztJQTJCQUMsY0FBYztlQUFkQTs7SUE3Q0FDLHNCQUFzQjtlQUF0QkE7O0lBb0NBQyxtQkFBbUI7ZUFBbkJBOztJQXREQUMsUUFBUTtlQUFSQTs7SUFUQUMsUUFBUTtlQUFSQTs7SUFzREFDLHNCQUFzQjtlQUF0QkE7O0lBcENBQyxxQkFBcUI7ZUFBckJBOztJQWtCQUMsb0JBQW9CO2VBQXBCQTs7O0FBMUNiLE1BQU1DLGFBQWtCO0lBQ3RCLE1BQU0scUJBRUwsQ0FGSyxJQUFJQyxNQUNSLHVFQURJO2VBQUE7b0JBQUE7c0JBQUE7SUFFTjtBQUNGO0FBRU8sTUFBTUwsV0FDWE0sTUFBdUMsR0FDbkMsQ0FJQyxHQUNERjtBQUVDLE1BQU1MLFdBQ1hPLE1BQXVDLEdBQ25DLENBSUMsR0FDREY7QUFFQyxNQUFNRix3QkFDWEksTUFBdUMsR0FDbkMsQ0FJQyxHQUNERjtBQUVDLE1BQU1QLHlCQUNYUyxNQUF1QyxHQUNuQyxDQUlDLEdBQ0RGO0FBRUMsTUFBTUQsdUJBQ1hHLE1BQXVDLEdBQ25DLENBSUMsR0FDREY7QUFFQyxNQUFNVCxxQkFDWFcsTUFBdUMsR0FDbkMsQ0FJQyxHQUNERjtBQUVDLE1BQU1ILHlCQUNYSyxNQUF1QyxHQUNuQyxDQUlDLEdBQ0RGO0FBRUMsTUFBTU4sc0JBQ1hRLE1BQXVDLEdBQ25DLENBSUMsR0FDREY7QUFFQyxNQUFNUixpQkFDWFUsTUFBdUMsR0FDbkMsQ0FJQyxHQUNERjtBQU9DLElBQVdYLHNCQUFBQSxXQUFBQSxHQUFBQSxTQUFBQSxtQkFBQUE7Ozs7O1dBQUFBOztBQVVYLElBQVdDLG1CQUFBQSxXQUFBQSxHQUFBQSxTQUFBQSxnQkFBQUE7SUFDaEI7Ozs7O0dBS0M7SUFFRDs7R0FFQztJQUVEOzs7R0FHQztXQWZlQSIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvc3JjL2NsaWVudC9jb21wb25lbnRzL3NlZ21lbnQtY2FjaGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFbnRyeSBwb2ludCB0byB0aGUgU2VnbWVudCBDYWNoZSBpbXBsZW1lbnRhdGlvbi5cbiAqXG4gKiBBbGwgY29kZSByZWxhdGVkIHRvIHRoZSBTZWdtZW50IENhY2hlIGxpdmVzIGBzZWdtZW50LWNhY2hlLWltcGxgIGRpcmVjdG9yeS5cbiAqIENhbGxlcnMgYWNjZXNzIGl0IHRocm91Z2ggdGhpcyBpbmRpcmVjdGlvbi5cbiAqXG4gKiBUaGlzIGlzIHRvIGVuc3VyZSB0aGUgY29kZSBpcyBkZWFkIGNvZGUgZWxpbWluYXRlZCBmcm9tIHRoZSBidW5kbGUgaWYgdGhlXG4gKiBmbGFnIGlzIGRpc2FibGVkLlxuICpcbiAqIFRPRE86IFRoaXMgaXMgc3VwZXIgdGVkaW91cy4gU2luY2UgZXhwZXJpbWVudGFsIGZsYWdzIGFyZSBhbiBlc3NlbnRpYWwgcGFydFxuICogb2Ygb3VyIHdvcmtmbG93LCB3ZSBzaG91bGQgZXN0YWJsaXNoIGEgYmV0dGVyIHBhdHRlcm4gZm9yIGRlYWQgY29kZVxuICogZWxpbWluYXRpb24uIElkZWFsbHkgaXQgd291bGQgYmUgZG9uZSBhdCB0aGUgYnVuZGxlciBsZXZlbCwgbGlrZSBob3cgUmVhY3Qnc1xuICogYnVpbGQgcHJvY2VzcyB3b3Jrcy4gSW4gdGhlIFJlYWN0IHJlcG8sIHlvdSBkb24ndCBldmVuIG5lZWQgdG8gYWRkIGFueSBleHRyYVxuICogY29uZmlndXJhdGlvbiBwZXIgZXhwZXJpbWVudCDigJQgaWYgdGhlIGNvZGUgaXMgbm90IHJlYWNoYWJsZSwgaXQgZ2V0cyBzdHJpcHBlZFxuICogZnJvbSB0aGUgYnVpbGQgYXV0b21hdGljYWxseSBieSBSb2xsdXAuIE9yLCBzaG9ydGVyIHRlcm0sIHdlIGNvdWxkIHN0dWIgb3V0XG4gKiBleHBlcmltZW50YWwgbW9kdWxlcyBhdCBidWlsZCB0aW1lIGJ5IHVwZGF0aW5nIHRoZSBidWlsZCBjb25maWcsIGkuZS4gYSBtb3JlXG4gKiBhdXRvbWF0ZWQgdmVyc2lvbiBvZiB3aGF0IEknbSBkb2luZyBtYW51YWxseSBpbiB0aGlzIGZpbGUuXG4gKi9cblxuZXhwb3J0IHR5cGUgeyBOYXZpZ2F0aW9uUmVzdWx0IH0gZnJvbSAnLi9zZWdtZW50LWNhY2hlLWltcGwvbmF2aWdhdGlvbidcbmV4cG9ydCB0eXBlIHsgUHJlZmV0Y2hUYXNrIH0gZnJvbSAnLi9zZWdtZW50LWNhY2hlLWltcGwvc2NoZWR1bGVyJ1xuXG5jb25zdCBub3RFbmFibGVkOiBhbnkgPSAoKSA9PiB7XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICAnU2VnbWVudCBDYWNoZSBleHBlcmltZW50IGlzIG5vdCBlbmFibGVkLiBUaGlzIGlzIGEgYnVnIGluIE5leHQuanMuJ1xuICApXG59XG5cbmV4cG9ydCBjb25zdCBwcmVmZXRjaDogdHlwZW9mIGltcG9ydCgnLi9zZWdtZW50LWNhY2hlLWltcGwvcHJlZmV0Y2gnKS5wcmVmZXRjaCA9XG4gIHByb2Nlc3MuZW52Ll9fTkVYVF9DTElFTlRfU0VHTUVOVF9DQUNIRVxuICAgID8gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICByZXF1aXJlKCcuL3NlZ21lbnQtY2FjaGUtaW1wbC9wcmVmZXRjaCcpIGFzIHR5cGVvZiBpbXBvcnQoJy4vc2VnbWVudC1jYWNoZS1pbXBsL3ByZWZldGNoJylcbiAgICAgICAgKS5wcmVmZXRjaCguLi5hcmdzKVxuICAgICAgfVxuICAgIDogbm90RW5hYmxlZFxuXG5leHBvcnQgY29uc3QgbmF2aWdhdGU6IHR5cGVvZiBpbXBvcnQoJy4vc2VnbWVudC1jYWNoZS1pbXBsL25hdmlnYXRpb24nKS5uYXZpZ2F0ZSA9XG4gIHByb2Nlc3MuZW52Ll9fTkVYVF9DTElFTlRfU0VHTUVOVF9DQUNIRVxuICAgID8gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICByZXF1aXJlKCcuL3NlZ21lbnQtY2FjaGUtaW1wbC9uYXZpZ2F0aW9uJykgYXMgdHlwZW9mIGltcG9ydCgnLi9zZWdtZW50LWNhY2hlLWltcGwvbmF2aWdhdGlvbicpXG4gICAgICAgICkubmF2aWdhdGUoLi4uYXJncylcbiAgICAgIH1cbiAgICA6IG5vdEVuYWJsZWRcblxuZXhwb3J0IGNvbnN0IHJldmFsaWRhdGVFbnRpcmVDYWNoZTogdHlwZW9mIGltcG9ydCgnLi9zZWdtZW50LWNhY2hlLWltcGwvY2FjaGUnKS5yZXZhbGlkYXRlRW50aXJlQ2FjaGUgPVxuICBwcm9jZXNzLmVudi5fX05FWFRfQ0xJRU5UX1NFR01FTlRfQ0FDSEVcbiAgICA/IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgcmVxdWlyZSgnLi9zZWdtZW50LWNhY2hlLWltcGwvY2FjaGUnKSBhcyB0eXBlb2YgaW1wb3J0KCcuL3NlZ21lbnQtY2FjaGUtaW1wbC9jYWNoZScpXG4gICAgICAgICkucmV2YWxpZGF0ZUVudGlyZUNhY2hlKC4uLmFyZ3MpXG4gICAgICB9XG4gICAgOiBub3RFbmFibGVkXG5cbmV4cG9ydCBjb25zdCBnZXRDdXJyZW50Q2FjaGVWZXJzaW9uOiB0eXBlb2YgaW1wb3J0KCcuL3NlZ21lbnQtY2FjaGUtaW1wbC9jYWNoZScpLmdldEN1cnJlbnRDYWNoZVZlcnNpb24gPVxuICBwcm9jZXNzLmVudi5fX05FWFRfQ0xJRU5UX1NFR01FTlRfQ0FDSEVcbiAgICA/IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgcmVxdWlyZSgnLi9zZWdtZW50LWNhY2hlLWltcGwvY2FjaGUnKSBhcyB0eXBlb2YgaW1wb3J0KCcuL3NlZ21lbnQtY2FjaGUtaW1wbC9jYWNoZScpXG4gICAgICAgICkuZ2V0Q3VycmVudENhY2hlVmVyc2lvbiguLi5hcmdzKVxuICAgICAgfVxuICAgIDogbm90RW5hYmxlZFxuXG5leHBvcnQgY29uc3Qgc2NoZWR1bGVQcmVmZXRjaFRhc2s6IHR5cGVvZiBpbXBvcnQoJy4vc2VnbWVudC1jYWNoZS1pbXBsL3NjaGVkdWxlcicpLnNjaGVkdWxlUHJlZmV0Y2hUYXNrID1cbiAgcHJvY2Vzcy5lbnYuX19ORVhUX0NMSUVOVF9TRUdNRU5UX0NBQ0hFXG4gICAgPyBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHJlcXVpcmUoJy4vc2VnbWVudC1jYWNoZS1pbXBsL3NjaGVkdWxlcicpIGFzIHR5cGVvZiBpbXBvcnQoJy4vc2VnbWVudC1jYWNoZS1pbXBsL3NjaGVkdWxlcicpXG4gICAgICAgICkuc2NoZWR1bGVQcmVmZXRjaFRhc2soLi4uYXJncylcbiAgICAgIH1cbiAgICA6IG5vdEVuYWJsZWRcblxuZXhwb3J0IGNvbnN0IGNhbmNlbFByZWZldGNoVGFzazogdHlwZW9mIGltcG9ydCgnLi9zZWdtZW50LWNhY2hlLWltcGwvc2NoZWR1bGVyJykuY2FuY2VsUHJlZmV0Y2hUYXNrID1cbiAgcHJvY2Vzcy5lbnYuX19ORVhUX0NMSUVOVF9TRUdNRU5UX0NBQ0hFXG4gICAgPyBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHJlcXVpcmUoJy4vc2VnbWVudC1jYWNoZS1pbXBsL3NjaGVkdWxlcicpIGFzIHR5cGVvZiBpbXBvcnQoJy4vc2VnbWVudC1jYWNoZS1pbXBsL3NjaGVkdWxlcicpXG4gICAgICAgICkuY2FuY2VsUHJlZmV0Y2hUYXNrKC4uLmFyZ3MpXG4gICAgICB9XG4gICAgOiBub3RFbmFibGVkXG5cbmV4cG9ydCBjb25zdCByZXNjaGVkdWxlUHJlZmV0Y2hUYXNrOiB0eXBlb2YgaW1wb3J0KCcuL3NlZ21lbnQtY2FjaGUtaW1wbC9zY2hlZHVsZXInKS5yZXNjaGVkdWxlUHJlZmV0Y2hUYXNrID1cbiAgcHJvY2Vzcy5lbnYuX19ORVhUX0NMSUVOVF9TRUdNRU5UX0NBQ0hFXG4gICAgPyBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHJlcXVpcmUoJy4vc2VnbWVudC1jYWNoZS1pbXBsL3NjaGVkdWxlcicpIGFzIHR5cGVvZiBpbXBvcnQoJy4vc2VnbWVudC1jYWNoZS1pbXBsL3NjaGVkdWxlcicpXG4gICAgICAgICkucmVzY2hlZHVsZVByZWZldGNoVGFzayguLi5hcmdzKVxuICAgICAgfVxuICAgIDogbm90RW5hYmxlZFxuXG5leHBvcnQgY29uc3QgaXNQcmVmZXRjaFRhc2tEaXJ0eTogdHlwZW9mIGltcG9ydCgnLi9zZWdtZW50LWNhY2hlLWltcGwvc2NoZWR1bGVyJykuaXNQcmVmZXRjaFRhc2tEaXJ0eSA9XG4gIHByb2Nlc3MuZW52Ll9fTkVYVF9DTElFTlRfU0VHTUVOVF9DQUNIRVxuICAgID8gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICByZXF1aXJlKCcuL3NlZ21lbnQtY2FjaGUtaW1wbC9zY2hlZHVsZXInKSBhcyB0eXBlb2YgaW1wb3J0KCcuL3NlZ21lbnQtY2FjaGUtaW1wbC9zY2hlZHVsZXInKVxuICAgICAgICApLmlzUHJlZmV0Y2hUYXNrRGlydHkoLi4uYXJncylcbiAgICAgIH1cbiAgICA6IG5vdEVuYWJsZWRcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNhY2hlS2V5OiB0eXBlb2YgaW1wb3J0KCcuL3NlZ21lbnQtY2FjaGUtaW1wbC9jYWNoZS1rZXknKS5jcmVhdGVDYWNoZUtleSA9XG4gIHByb2Nlc3MuZW52Ll9fTkVYVF9DTElFTlRfU0VHTUVOVF9DQUNIRVxuICAgID8gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICByZXF1aXJlKCcuL3NlZ21lbnQtY2FjaGUtaW1wbC9jYWNoZS1rZXknKSBhcyB0eXBlb2YgaW1wb3J0KCcuL3NlZ21lbnQtY2FjaGUtaW1wbC9jYWNoZS1rZXknKVxuICAgICAgICApLmNyZWF0ZUNhY2hlS2V5KC4uLmFyZ3MpXG4gICAgICB9XG4gICAgOiBub3RFbmFibGVkXG5cbi8qKlxuICogQmVsb3cgYXJlIHB1YmxpYyBjb25zdGFudHMuIFRoZXkncmUgc21hbGwgZW5vdWdoIHRoYXQgd2UgZG9uJ3QgbmVlZCB0b1xuICogRENFIHRoZW0uXG4gKi9cblxuZXhwb3J0IGNvbnN0IGVudW0gTmF2aWdhdGlvblJlc3VsdFRhZyB7XG4gIE1QQSxcbiAgU3VjY2VzcyxcbiAgTm9PcCxcbiAgQXN5bmMsXG59XG5cbi8qKlxuICogVGhlIHByaW9yaXR5IG9mIHRoZSBwcmVmZXRjaCB0YXNrLiBIaWdoZXIgbnVtYmVycyBhcmUgaGlnaGVyIHByaW9yaXR5LlxuICovXG5leHBvcnQgY29uc3QgZW51bSBQcmVmZXRjaFByaW9yaXR5IHtcbiAgLyoqXG4gICAqIEFzc2lnbmVkIHRvIHRoZSBtb3N0IHJlY2VudGx5IGhvdmVyZWQvdG91Y2hlZCBsaW5rLiBTcGVjaWFsIG5ldHdvcmtcbiAgICogYmFuZHdpZHRoIGlzIHJlc2VydmVkIGZvciB0aGlzIHRhc2sgb25seS4gVGhlcmUncyBvbmx5IGV2ZXIgb25lIEludGVudC1cbiAgICogcHJpb3JpdHkgdGFzayBhdCBhIHRpbWU7IHdoZW4gYSBuZXcgSW50ZW50IHRhc2sgaXMgc2NoZWR1bGVkLCB0aGUgcHJldmlvdXNcbiAgICogb25lIGlzIGJ1bXBlZCBkb3duIHRvIERlZmF1bHQuXG4gICAqL1xuICBJbnRlbnQgPSAyLFxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgcHJpb3JpdHkgZm9yIHByZWZldGNoIHRhc2tzLlxuICAgKi9cbiAgRGVmYXVsdCA9IDEsXG4gIC8qKlxuICAgKiBBc3NpZ25lZCB0byB0YXNrcyB3aGVuIHRoZXkgc3Bhd24gbm9uLWJsb2NraW5nIGJhY2tncm91bmQgd29yaywgbGlrZVxuICAgKiByZXZhbGlkYXRpbmcgYSBwYXJ0aWFsbHkgY2FjaGVkIGVudHJ5IHRvIHNlZSBpZiBtb3JlIGRhdGEgaXMgYXZhaWxhYmxlLlxuICAgKi9cbiAgQmFja2dyb3VuZCA9IDAsXG59XG4iXSwibmFtZXMiOlsiTmF2aWdhdGlvblJlc3VsdFRhZyIsIlByZWZldGNoUHJpb3JpdHkiLCJjYW5jZWxQcmVmZXRjaFRhc2siLCJjcmVhdGVDYWNoZUtleSIsImdldEN1cnJlbnRDYWNoZVZlcnNpb24iLCJpc1ByZWZldGNoVGFza0RpcnR5IiwibmF2aWdhdGUiLCJwcmVmZXRjaCIsInJlc2NoZWR1bGVQcmVmZXRjaFRhc2siLCJyZXZhbGlkYXRlRW50aXJlQ2FjaGUiLCJzY2hlZHVsZVByZWZldGNoVGFzayIsIm5vdEVuYWJsZWQiLCJFcnJvciIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfQ0xJRU5UX1NFR01FTlRfQ0FDSEUiLCJhcmdzIiwicmVxdWlyZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/segment-cache.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/unauthorized.js":
|
||
/*!******************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/unauthorized.js ***!
|
||
\******************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"unauthorized\", ({\n enumerable: true,\n get: function() {\n return unauthorized;\n }\n}));\nconst _httpaccessfallback = __webpack_require__(/*! ./http-access-fallback/http-access-fallback */ \"(app-pages-browser)/./node_modules/next/dist/client/components/http-access-fallback/http-access-fallback.js\");\n// TODO: Add `unauthorized` docs\n/**\n * @experimental\n * This function allows you to render the [unauthorized.js file](https://nextjs.org/docs/app/api-reference/file-conventions/unauthorized)\n * within a route segment as well as inject a tag.\n *\n * `unauthorized()` can be used in\n * [Server Components](https://nextjs.org/docs/app/building-your-application/rendering/server-components),\n * [Route Handlers](https://nextjs.org/docs/app/building-your-application/routing/route-handlers), and\n * [Server Actions](https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations).\n *\n *\n * Read more: [Next.js Docs: `unauthorized`](https://nextjs.org/docs/app/api-reference/functions/unauthorized)\n */ const DIGEST = \"\" + _httpaccessfallback.HTTP_ERROR_FALLBACK_ERROR_CODE + \";401\";\nfunction unauthorized() {\n if (true) {\n throw Object.defineProperty(new Error(\"`unauthorized()` is experimental and only allowed to be used when `experimental.authInterrupts` is enabled.\"), \"__NEXT_ERROR_CODE\", {\n value: \"E411\",\n enumerable: false,\n configurable: true\n });\n }\n // eslint-disable-next-line no-throw-literal\n const error = Object.defineProperty(new Error(DIGEST), \"__NEXT_ERROR_CODE\", {\n value: \"E394\",\n enumerable: false,\n configurable: true\n });\n error.digest = DIGEST;\n throw error;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=unauthorized.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvdW5hdXRob3JpemVkLmpzIiwibWFwcGluZ3MiOiI7Ozs7Z0RBc0JnQkE7OztlQUFBQTs7O2dEQW5CVDtBQUVQLGdDQUFnQztBQUNoQzs7Ozs7Ozs7Ozs7O0NBWUMsR0FFRCxNQUFNQyxTQUFVLEtBQUVDLG9CQUFBQSw4QkFBOEIsR0FBQztBQUUxQyxTQUFTRjtJQUNkLElBQUksSUFBZ0QsRUFBRTtRQUNwRCxNQUFNLHFCQUVMLENBRkssSUFBSU0sTUFDUCxnSEFERzttQkFBQTt3QkFBQTswQkFBQTtRQUVOO0lBQ0Y7SUFFQSw0Q0FBNEM7SUFDNUMsTUFBTUMsUUFBUSxxQkFBaUIsQ0FBakIsSUFBSUQsTUFBTUwsU0FBVjtlQUFBO29CQUFBO3NCQUFBO0lBQWdCO0lBQzVCTSxNQUFrQ0MsTUFBTSxHQUFHUDtJQUM3QyxNQUFNTTtBQUNSIiwic291cmNlcyI6WyIvaG9tZS9OaWNob2xhaS9zcmMvY2xpZW50L2NvbXBvbmVudHMvdW5hdXRob3JpemVkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEhUVFBfRVJST1JfRkFMTEJBQ0tfRVJST1JfQ09ERSxcbiAgdHlwZSBIVFRQQWNjZXNzRmFsbGJhY2tFcnJvcixcbn0gZnJvbSAnLi9odHRwLWFjY2Vzcy1mYWxsYmFjay9odHRwLWFjY2Vzcy1mYWxsYmFjaydcblxuLy8gVE9ETzogQWRkIGB1bmF1dGhvcml6ZWRgIGRvY3Ncbi8qKlxuICogQGV4cGVyaW1lbnRhbFxuICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIHJlbmRlciB0aGUgW3VuYXV0aG9yaXplZC5qcyBmaWxlXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYXBpLXJlZmVyZW5jZS9maWxlLWNvbnZlbnRpb25zL3VuYXV0aG9yaXplZClcbiAqIHdpdGhpbiBhIHJvdXRlIHNlZ21lbnQgYXMgd2VsbCBhcyBpbmplY3QgYSB0YWcuXG4gKlxuICogYHVuYXV0aG9yaXplZCgpYCBjYW4gYmUgdXNlZCBpblxuICogW1NlcnZlciBDb21wb25lbnRzXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9yZW5kZXJpbmcvc2VydmVyLWNvbXBvbmVudHMpLFxuICogW1JvdXRlIEhhbmRsZXJzXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9yb3V0aW5nL3JvdXRlLWhhbmRsZXJzKSwgYW5kXG4gKiBbU2VydmVyIEFjdGlvbnNdKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9idWlsZGluZy15b3VyLWFwcGxpY2F0aW9uL2RhdGEtZmV0Y2hpbmcvc2VydmVyLWFjdGlvbnMtYW5kLW11dGF0aW9ucykuXG4gKlxuICpcbiAqIFJlYWQgbW9yZTogW05leHQuanMgRG9jczogYHVuYXV0aG9yaXplZGBdKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9hcGktcmVmZXJlbmNlL2Z1bmN0aW9ucy91bmF1dGhvcml6ZWQpXG4gKi9cblxuY29uc3QgRElHRVNUID0gYCR7SFRUUF9FUlJPUl9GQUxMQkFDS19FUlJPUl9DT0RFfTs0MDFgXG5cbmV4cG9ydCBmdW5jdGlvbiB1bmF1dGhvcml6ZWQoKTogbmV2ZXIge1xuICBpZiAoIXByb2Nlc3MuZW52Ll9fTkVYVF9FWFBFUklNRU5UQUxfQVVUSF9JTlRFUlJVUFRTKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFxcYHVuYXV0aG9yaXplZCgpXFxgIGlzIGV4cGVyaW1lbnRhbCBhbmQgb25seSBhbGxvd2VkIHRvIGJlIHVzZWQgd2hlbiBcXGBleHBlcmltZW50YWwuYXV0aEludGVycnVwdHNcXGAgaXMgZW5hYmxlZC5gXG4gICAgKVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoRElHRVNUKSBhcyBIVFRQQWNjZXNzRmFsbGJhY2tFcnJvclxuICA7KGVycm9yIGFzIEhUVFBBY2Nlc3NGYWxsYmFja0Vycm9yKS5kaWdlc3QgPSBESUdFU1RcbiAgdGhyb3cgZXJyb3Jcbn1cbiJdLCJuYW1lcyI6WyJ1bmF1dGhvcml6ZWQiLCJESUdFU1QiLCJIVFRQX0VSUk9SX0ZBTExCQUNLX0VSUk9SX0NPREUiLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX0VYUEVSSU1FTlRBTF9BVVRIX0lOVEVSUlVQVFMiLCJFcnJvciIsImVycm9yIiwiZGlnZXN0Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/unauthorized.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/unresolved-thenable.js":
|
||
/*!*************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/unresolved-thenable.js ***!
|
||
\*************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * Create a \"Thenable\" that does not resolve. This is used to suspend indefinitely when data is not available yet.\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"unresolvedThenable\", ({\n enumerable: true,\n get: function() {\n return unresolvedThenable;\n }\n}));\nconst unresolvedThenable = {\n then: ()=>{}\n};\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=unresolved-thenable.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvdW5yZXNvbHZlZC10aGVuYWJsZS5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7Q0FFQzs7OztzREFDWUE7OztlQUFBQTs7O0FBQU4sTUFBTUEscUJBQXFCO0lBQ2hDQyxNQUFNLEtBQU87QUFDZiIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvc3JjL2NsaWVudC9jb21wb25lbnRzL3VucmVzb2x2ZWQtdGhlbmFibGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDcmVhdGUgYSBcIlRoZW5hYmxlXCIgdGhhdCBkb2VzIG5vdCByZXNvbHZlLiBUaGlzIGlzIHVzZWQgdG8gc3VzcGVuZCBpbmRlZmluaXRlbHkgd2hlbiBkYXRhIGlzIG5vdCBhdmFpbGFibGUgeWV0LlxuICovXG5leHBvcnQgY29uc3QgdW5yZXNvbHZlZFRoZW5hYmxlID0ge1xuICB0aGVuOiAoKSA9PiB7fSxcbn0gYXMgUHJvbWlzZUxpa2U8dm9pZD5cbiJdLCJuYW1lcyI6WyJ1bnJlc29sdmVkVGhlbmFibGUiLCJ0aGVuIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/unresolved-thenable.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/unstable-rethrow.browser.js":
|
||
/*!******************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/unstable-rethrow.browser.js ***!
|
||
\******************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"unstable_rethrow\", ({\n enumerable: true,\n get: function() {\n return unstable_rethrow;\n }\n}));\nconst _bailouttocsr = __webpack_require__(/*! ../../shared/lib/lazy-dynamic/bailout-to-csr */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js\");\nconst _isnextroutererror = __webpack_require__(/*! ./is-next-router-error */ \"(app-pages-browser)/./node_modules/next/dist/client/components/is-next-router-error.js\");\nfunction unstable_rethrow(error) {\n if ((0, _isnextroutererror.isNextRouterError)(error) || (0, _bailouttocsr.isBailoutToCSRError)(error)) {\n throw error;\n }\n if (error instanceof Error && 'cause' in error) {\n unstable_rethrow(error.cause);\n }\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=unstable-rethrow.browser.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvdW5zdGFibGUtcmV0aHJvdy5icm93c2VyLmpzIiwibWFwcGluZ3MiOiI7Ozs7b0RBR2dCQTs7O2VBQUFBOzs7MENBSG9COytDQUNGO0FBRTNCLFNBQVNBLGlCQUFpQkMsS0FBYztJQUM3QyxJQUFJQyxDQUFBQSxHQUFBQSxtQkFBQUEsaUJBQUFBLEVBQWtCRCxVQUFVRSxDQUFBQSxHQUFBQSxjQUFBQSxtQkFBQUEsRUFBb0JGLFFBQVE7UUFDMUQsTUFBTUE7SUFDUjtJQUVBLElBQUlBLGlCQUFpQkcsU0FBUyxXQUFXSCxPQUFPO1FBQzlDRCxpQkFBaUJDLE1BQU1JLEtBQUs7SUFDOUI7QUFDRiIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvc3JjL2NsaWVudC9jb21wb25lbnRzL3Vuc3RhYmxlLXJldGhyb3cuYnJvd3Nlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0JhaWxvdXRUb0NTUkVycm9yIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2xpYi9sYXp5LWR5bmFtaWMvYmFpbG91dC10by1jc3InXG5pbXBvcnQgeyBpc05leHRSb3V0ZXJFcnJvciB9IGZyb20gJy4vaXMtbmV4dC1yb3V0ZXItZXJyb3InXG5cbmV4cG9ydCBmdW5jdGlvbiB1bnN0YWJsZV9yZXRocm93KGVycm9yOiB1bmtub3duKTogdm9pZCB7XG4gIGlmIChpc05leHRSb3V0ZXJFcnJvcihlcnJvcikgfHwgaXNCYWlsb3V0VG9DU1JFcnJvcihlcnJvcikpIHtcbiAgICB0aHJvdyBlcnJvclxuICB9XG5cbiAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgJ2NhdXNlJyBpbiBlcnJvcikge1xuICAgIHVuc3RhYmxlX3JldGhyb3coZXJyb3IuY2F1c2UpXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJ1bnN0YWJsZV9yZXRocm93IiwiZXJyb3IiLCJpc05leHRSb3V0ZXJFcnJvciIsImlzQmFpbG91dFRvQ1NSRXJyb3IiLCJFcnJvciIsImNhdXNlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/unstable-rethrow.browser.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/unstable-rethrow.js":
|
||
/*!**********************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/unstable-rethrow.js ***!
|
||
\**********************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * This function should be used to rethrow internal Next.js errors so that they can be handled by the framework.\n * When wrapping an API that uses errors to interrupt control flow, you should use this function before you do any error handling.\n * This function will rethrow the error if it is a Next.js error so it can be handled, otherwise it will do nothing.\n *\n * Read more: [Next.js Docs: `unstable_rethrow`](https://nextjs.org/docs/app/api-reference/functions/unstable_rethrow)\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"unstable_rethrow\", ({\n enumerable: true,\n get: function() {\n return unstable_rethrow;\n }\n}));\nconst unstable_rethrow = false ? 0 : (__webpack_require__(/*! ./unstable-rethrow.browser */ \"(app-pages-browser)/./node_modules/next/dist/client/components/unstable-rethrow.browser.js\").unstable_rethrow);\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=unstable-rethrow.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvdW5zdGFibGUtcmV0aHJvdy5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0NBTUM7Ozs7b0RBQ1lBOzs7ZUFBQUE7OztBQUFOLE1BQU1BLG1CQUNYLE1BQTZCLEdBRXZCRSxDQUNnQixHQUVoQkEsc0tBQ2dCIiwic291cmNlcyI6WyIvaG9tZS9OaWNob2xhaS9zcmMvY2xpZW50L2NvbXBvbmVudHMvdW5zdGFibGUtcmV0aHJvdy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQgdG8gcmV0aHJvdyBpbnRlcm5hbCBOZXh0LmpzIGVycm9ycyBzbyB0aGF0IHRoZXkgY2FuIGJlIGhhbmRsZWQgYnkgdGhlIGZyYW1ld29yay5cbiAqIFdoZW4gd3JhcHBpbmcgYW4gQVBJIHRoYXQgdXNlcyBlcnJvcnMgdG8gaW50ZXJydXB0IGNvbnRyb2wgZmxvdywgeW91IHNob3VsZCB1c2UgdGhpcyBmdW5jdGlvbiBiZWZvcmUgeW91IGRvIGFueSBlcnJvciBoYW5kbGluZy5cbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXRocm93IHRoZSBlcnJvciBpZiBpdCBpcyBhIE5leHQuanMgZXJyb3Igc28gaXQgY2FuIGJlIGhhbmRsZWQsIG90aGVyd2lzZSBpdCB3aWxsIGRvIG5vdGhpbmcuXG4gKlxuICogUmVhZCBtb3JlOiBbTmV4dC5qcyBEb2NzOiBgdW5zdGFibGVfcmV0aHJvd2BdKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9hcGktcmVmZXJlbmNlL2Z1bmN0aW9ucy91bnN0YWJsZV9yZXRocm93KVxuICovXG5leHBvcnQgY29uc3QgdW5zdGFibGVfcmV0aHJvdyA9XG4gIHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnXG4gICAgPyAoXG4gICAgICAgIHJlcXVpcmUoJy4vdW5zdGFibGUtcmV0aHJvdy5zZXJ2ZXInKSBhcyB0eXBlb2YgaW1wb3J0KCcuL3Vuc3RhYmxlLXJldGhyb3cuc2VydmVyJylcbiAgICAgICkudW5zdGFibGVfcmV0aHJvd1xuICAgIDogKFxuICAgICAgICByZXF1aXJlKCcuL3Vuc3RhYmxlLXJldGhyb3cuYnJvd3NlcicpIGFzIHR5cGVvZiBpbXBvcnQoJy4vdW5zdGFibGUtcmV0aHJvdy5icm93c2VyJylcbiAgICAgICkudW5zdGFibGVfcmV0aHJvd1xuIl0sIm5hbWVzIjpbInVuc3RhYmxlX3JldGhyb3ciLCJ3aW5kb3ciLCJyZXF1aXJlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/unstable-rethrow.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/use-action-queue.js":
|
||
/*!**********************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/components/use-action-queue.js ***!
|
||
\**********************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n dispatchAppRouterAction: function() {\n return dispatchAppRouterAction;\n },\n useActionQueue: function() {\n return useActionQueue;\n }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _isthenable = __webpack_require__(/*! ../../shared/lib/is-thenable */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/is-thenable.js\");\n// The app router state lives outside of React, so we can import the dispatch\n// method directly wherever we need it, rather than passing it around via props\n// or context.\nlet dispatch = null;\nfunction dispatchAppRouterAction(action) {\n if (dispatch === null) {\n throw Object.defineProperty(new Error('Internal Next.js error: Router action dispatched before initialization.'), \"__NEXT_ERROR_CODE\", {\n value: \"E668\",\n enumerable: false,\n configurable: true\n });\n }\n dispatch(action);\n}\nfunction useActionQueue(actionQueue) {\n _s();\n const [state, setState] = _react.default.useState(actionQueue.state);\n // Because of a known issue that requires to decode Flight streams inside the\n // render phase, we have to be a bit clever and assign the dispatch method to\n // a module-level variable upon initialization. The useState hook in this\n // module only exists to synchronize state that lives outside of React.\n // Ideally, what we'd do instead is pass the state as a prop to root.render;\n // this is conceptually how we're modeling the app router state, despite the\n // weird implementation details.\n if (true) {\n const { useAppDevRenderingIndicator } = __webpack_require__(/*! ../../next-devtools/userspace/use-app-dev-rendering-indicator */ \"(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/use-app-dev-rendering-indicator.js\");\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const appDevRenderingIndicator = useAppDevRenderingIndicator();\n dispatch = (action)=>{\n appDevRenderingIndicator(()=>{\n actionQueue.dispatch(action, setState);\n });\n };\n } else {}\n return (0, _isthenable.isThenable)(state) ? (0, _react.use)(state) : state;\n}\n_s(useActionQueue, \"Rp0Tj1zyE8LTecjN/cjTzn46xPo=\");\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=use-action-queue.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvdXNlLWFjdGlvbi1xdWV1ZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztJQWVnQkEsdUJBQXVCO2VBQXZCQTs7SUFTQUMsY0FBYztlQUFkQTs7Ozs2RUF2Qlc7d0NBQ0E7QUFRM0IsNkVBQTZFO0FBQzdFLCtFQUErRTtBQUMvRSxjQUFjO0FBQ2QsSUFBSUMsV0FBNEM7QUFFekMsU0FBU0Ysd0JBQXdCRyxNQUFzQjtJQUM1RCxJQUFJRCxhQUFhLE1BQU07UUFDckIsTUFBTSxxQkFFTCxDQUZLLElBQUlFLE1BQ1IsNEVBREk7bUJBQUE7d0JBQUE7MEJBQUE7UUFFTjtJQUNGO0lBQ0FGLFNBQVNDO0FBQ1g7QUFFTyx3QkFDTEUsV0FBaUM7O0lBRWpDLE1BQU0sQ0FBQ0MsT0FBT0MsU0FBUyxHQUFHQyxPQUFBQSxPQUFLLENBQUNDLFFBQVEsQ0FBZUosWUFBWUMsS0FBSztJQUV4RSw2RUFBNkU7SUFDN0UsNkVBQTZFO0lBQzdFLHlFQUF5RTtJQUN6RSx1RUFBdUU7SUFDdkUsNEVBQTRFO0lBQzVFLDRFQUE0RTtJQUM1RSxnQ0FBZ0M7SUFDaEMsSUFBSUksSUFBb0IsRUFBbUI7UUFDekMsTUFBTSxFQUFFRywyQkFBMkIsRUFBRSxHQUNuQ0MsbUJBQU9BLENBQUMsOEtBQStEO1FBQ3pFLHNEQUFzRDtRQUN0RCxNQUFNQywyQkFBMkJGO1FBRWpDWCxXQUFXLENBQUNDO1lBQ1ZZLHlCQUF5QjtnQkFDdkJWLFlBQVlILFFBQVEsQ0FBQ0MsUUFBUUk7WUFDL0I7UUFDRjtJQUNGLE9BQU8sRUFHTjtJQUVELE9BQU9TLENBQUFBLEdBQUFBLFlBQUFBLFVBQVUsRUFBQ1YsU0FBU1csQ0FBQUEsR0FBQUEsT0FBQUEsR0FBQUEsRUFBSVgsU0FBU0E7QUFDMUM7R0E3QmdCTCIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvc3JjL2NsaWVudC9jb21wb25lbnRzL3VzZS1hY3Rpb24tcXVldWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBEaXNwYXRjaCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFJlYWN0LCB7IHVzZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgaXNUaGVuYWJsZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9saWIvaXMtdGhlbmFibGUnXG5pbXBvcnQgdHlwZSB7IEFwcFJvdXRlckFjdGlvblF1ZXVlIH0gZnJvbSAnLi9hcHAtcm91dGVyLWluc3RhbmNlJ1xuaW1wb3J0IHR5cGUge1xuICBBcHBSb3V0ZXJTdGF0ZSxcbiAgUmVkdWNlckFjdGlvbnMsXG4gIFJlZHVjZXJTdGF0ZSxcbn0gZnJvbSAnLi9yb3V0ZXItcmVkdWNlci9yb3V0ZXItcmVkdWNlci10eXBlcydcblxuLy8gVGhlIGFwcCByb3V0ZXIgc3RhdGUgbGl2ZXMgb3V0c2lkZSBvZiBSZWFjdCwgc28gd2UgY2FuIGltcG9ydCB0aGUgZGlzcGF0Y2hcbi8vIG1ldGhvZCBkaXJlY3RseSB3aGVyZXZlciB3ZSBuZWVkIGl0LCByYXRoZXIgdGhhbiBwYXNzaW5nIGl0IGFyb3VuZCB2aWEgcHJvcHNcbi8vIG9yIGNvbnRleHQuXG5sZXQgZGlzcGF0Y2g6IERpc3BhdGNoPFJlZHVjZXJBY3Rpb25zPiB8IG51bGwgPSBudWxsXG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNwYXRjaEFwcFJvdXRlckFjdGlvbihhY3Rpb246IFJlZHVjZXJBY3Rpb25zKSB7XG4gIGlmIChkaXNwYXRjaCA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdJbnRlcm5hbCBOZXh0LmpzIGVycm9yOiBSb3V0ZXIgYWN0aW9uIGRpc3BhdGNoZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uLidcbiAgICApXG4gIH1cbiAgZGlzcGF0Y2goYWN0aW9uKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlQWN0aW9uUXVldWUoXG4gIGFjdGlvblF1ZXVlOiBBcHBSb3V0ZXJBY3Rpb25RdWV1ZVxuKTogQXBwUm91dGVyU3RhdGUge1xuICBjb25zdCBbc3RhdGUsIHNldFN0YXRlXSA9IFJlYWN0LnVzZVN0YXRlPFJlZHVjZXJTdGF0ZT4oYWN0aW9uUXVldWUuc3RhdGUpXG5cbiAgLy8gQmVjYXVzZSBvZiBhIGtub3duIGlzc3VlIHRoYXQgcmVxdWlyZXMgdG8gZGVjb2RlIEZsaWdodCBzdHJlYW1zIGluc2lkZSB0aGVcbiAgLy8gcmVuZGVyIHBoYXNlLCB3ZSBoYXZlIHRvIGJlIGEgYml0IGNsZXZlciBhbmQgYXNzaWduIHRoZSBkaXNwYXRjaCBtZXRob2QgdG9cbiAgLy8gYSBtb2R1bGUtbGV2ZWwgdmFyaWFibGUgdXBvbiBpbml0aWFsaXphdGlvbi4gVGhlIHVzZVN0YXRlIGhvb2sgaW4gdGhpc1xuICAvLyBtb2R1bGUgb25seSBleGlzdHMgdG8gc3luY2hyb25pemUgc3RhdGUgdGhhdCBsaXZlcyBvdXRzaWRlIG9mIFJlYWN0LlxuICAvLyBJZGVhbGx5LCB3aGF0IHdlJ2QgZG8gaW5zdGVhZCBpcyBwYXNzIHRoZSBzdGF0ZSBhcyBhIHByb3AgdG8gcm9vdC5yZW5kZXI7XG4gIC8vIHRoaXMgaXMgY29uY2VwdHVhbGx5IGhvdyB3ZSdyZSBtb2RlbGluZyB0aGUgYXBwIHJvdXRlciBzdGF0ZSwgZGVzcGl0ZSB0aGVcbiAgLy8gd2VpcmQgaW1wbGVtZW50YXRpb24gZGV0YWlscy5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBjb25zdCB7IHVzZUFwcERldlJlbmRlcmluZ0luZGljYXRvciB9ID1cbiAgICAgIHJlcXVpcmUoJy4uLy4uL25leHQtZGV2dG9vbHMvdXNlcnNwYWNlL3VzZS1hcHAtZGV2LXJlbmRlcmluZy1pbmRpY2F0b3InKSBhcyB0eXBlb2YgaW1wb3J0KCcuLi8uLi9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS91c2UtYXBwLWRldi1yZW5kZXJpbmctaW5kaWNhdG9yJylcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBjb25zdCBhcHBEZXZSZW5kZXJpbmdJbmRpY2F0b3IgPSB1c2VBcHBEZXZSZW5kZXJpbmdJbmRpY2F0b3IoKVxuXG4gICAgZGlzcGF0Y2ggPSAoYWN0aW9uOiBSZWR1Y2VyQWN0aW9ucykgPT4ge1xuICAgICAgYXBwRGV2UmVuZGVyaW5nSW5kaWNhdG9yKCgpID0+IHtcbiAgICAgICAgYWN0aW9uUXVldWUuZGlzcGF0Y2goYWN0aW9uLCBzZXRTdGF0ZSlcbiAgICAgIH0pXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGRpc3BhdGNoID0gKGFjdGlvbjogUmVkdWNlckFjdGlvbnMpID0+XG4gICAgICBhY3Rpb25RdWV1ZS5kaXNwYXRjaChhY3Rpb24sIHNldFN0YXRlKVxuICB9XG5cbiAgcmV0dXJuIGlzVGhlbmFibGUoc3RhdGUpID8gdXNlKHN0YXRlKSA6IHN0YXRlXG59XG4iXSwibmFtZXMiOlsiZGlzcGF0Y2hBcHBSb3V0ZXJBY3Rpb24iLCJ1c2VBY3Rpb25RdWV1ZSIsImRpc3BhdGNoIiwiYWN0aW9uIiwiRXJyb3IiLCJhY3Rpb25RdWV1ZSIsInN0YXRlIiwic2V0U3RhdGUiLCJSZWFjdCIsInVzZVN0YXRlIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwidXNlQXBwRGV2UmVuZGVyaW5nSW5kaWNhdG9yIiwicmVxdWlyZSIsImFwcERldlJlbmRlcmluZ0luZGljYXRvciIsImlzVGhlbmFibGUiLCJ1c2UiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/use-action-queue.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/dev/hot-reloader/app/hot-reloader-app.js":
|
||
/*!********************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/dev/hot-reloader/app/hot-reloader-app.js ***!
|
||
\********************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/// <reference types=\"webpack/module.d.ts\" />\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n default: function() {\n return HotReload;\n },\n waitForWebpackRuntimeHotUpdate: function() {\n return waitForWebpackRuntimeHotUpdate;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\nconst _stripansi = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! next/dist/compiled/strip-ansi */ \"(app-pages-browser)/./node_modules/next/dist/compiled/strip-ansi/index.js\"));\nconst _formatwebpackmessages = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../../../../shared/lib/format-webpack-messages */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/format-webpack-messages.js\"));\nconst _navigation = __webpack_require__(/*! ../../../components/navigation */ \"(app-pages-browser)/./node_modules/next/dist/client/components/navigation.js\");\nconst _shared = __webpack_require__(/*! ../shared */ \"(app-pages-browser)/./node_modules/next/dist/client/dev/hot-reloader/shared.js\");\nconst _nextdevtools = __webpack_require__(/*! next/dist/compiled/next-devtools */ \"(app-pages-browser)/./node_modules/next/dist/compiled/next-devtools/index.js\");\nconst _replayssronlyerrors = __webpack_require__(/*! ../../../../next-devtools/userspace/app/errors/replay-ssr-only-errors */ \"(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/errors/replay-ssr-only-errors.js\");\nconst _appdevoverlayerrorboundary = __webpack_require__(/*! ../../../../next-devtools/userspace/app/app-dev-overlay-error-boundary */ \"(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/app-dev-overlay-error-boundary.js\");\nconst _useerrorhandler = __webpack_require__(/*! ../../../../next-devtools/userspace/app/errors/use-error-handler */ \"(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/errors/use-error-handler.js\");\nconst _runtimeerrorhandler = __webpack_require__(/*! ../../runtime-error-handler */ \"(app-pages-browser)/./node_modules/next/dist/client/dev/runtime-error-handler.js\");\nconst _usewebsocket = __webpack_require__(/*! ./use-websocket */ \"(app-pages-browser)/./node_modules/next/dist/client/dev/hot-reloader/app/use-websocket.js\");\nconst _hotreloadertypes = __webpack_require__(/*! ../../../../server/dev/hot-reloader-types */ \"(app-pages-browser)/./node_modules/next/dist/server/dev/hot-reloader-types.js\");\nconst _navigationuntracked = __webpack_require__(/*! ../../../components/navigation-untracked */ \"(app-pages-browser)/./node_modules/next/dist/client/components/navigation-untracked.js\");\nconst _reporthmrlatency = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../../report-hmr-latency */ \"(app-pages-browser)/./node_modules/next/dist/client/dev/report-hmr-latency.js\"));\nconst _turbopackhotreloadercommon = __webpack_require__(/*! ../turbopack-hot-reloader-common */ \"(app-pages-browser)/./node_modules/next/dist/client/dev/hot-reloader/turbopack-hot-reloader-common.js\");\nconst _approuterheaders = __webpack_require__(/*! ../../../components/app-router-headers */ \"(app-pages-browser)/./node_modules/next/dist/client/components/app-router-headers.js\");\nconst _useforwardconsolelog = __webpack_require__(/*! ../../../../next-devtools/userspace/app/errors/use-forward-console-log */ \"(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/errors/use-forward-console-log.js\");\nlet mostRecentCompilationHash = null;\nlet __nextDevClientId = Math.round(Math.random() * 100 + Date.now());\nlet reloading = false;\nlet webpackStartMsSinceEpoch = null;\nconst turbopackHmr = false ? 0 : null;\nlet pendingHotUpdateWebpack = Promise.resolve();\nlet resolvePendingHotUpdateWebpack = ()=>{};\nfunction setPendingHotUpdateWebpack() {\n pendingHotUpdateWebpack = new Promise((resolve)=>{\n resolvePendingHotUpdateWebpack = ()=>{\n resolve();\n };\n });\n}\nfunction waitForWebpackRuntimeHotUpdate() {\n return pendingHotUpdateWebpack;\n}\n// There is a newer version of the code available.\nfunction handleAvailableHash(hash) {\n // Update last known compilation hash.\n mostRecentCompilationHash = hash;\n}\n/**\n * Is there a newer version of this code available?\n * For webpack: Check if the hash changed compared to __webpack_hash__\n * For Turbopack: Always true because it doesn't have __webpack_hash__\n */ function isUpdateAvailable() {\n if (false) {}\n /* globals __webpack_hash__ */ // __webpack_hash__ is the hash of the current compilation.\n // It's a global variable injected by Webpack.\n return mostRecentCompilationHash !== __webpack_require__.h();\n}\n// Webpack disallows updates in other states.\nfunction canApplyUpdates() {\n return module.hot.status() === 'idle';\n}\nfunction afterApplyUpdates(fn) {\n if (canApplyUpdates()) {\n fn();\n } else {\n function handler(status) {\n if (status === 'idle') {\n module.hot.removeStatusHandler(handler);\n fn();\n }\n }\n module.hot.addStatusHandler(handler);\n }\n}\nfunction performFullReload(err, sendMessage) {\n const stackTrace = err && (err.stack && err.stack.split('\\n').slice(0, 5).join('\\n') || err.message || err + '');\n sendMessage(JSON.stringify({\n event: 'client-full-reload',\n stackTrace,\n hadRuntimeError: !!_runtimeerrorhandler.RuntimeErrorHandler.hadRuntimeError,\n dependencyChain: err ? err.dependencyChain : undefined\n }));\n if (reloading) return;\n reloading = true;\n window.location.reload();\n}\n// Attempt to update code on the fly, fall back to a hard reload.\nfunction tryApplyUpdatesWebpack(sendMessage) {\n if (!isUpdateAvailable() || !canApplyUpdates()) {\n resolvePendingHotUpdateWebpack();\n _nextdevtools.dispatcher.onBuildOk();\n (0, _reporthmrlatency.default)(sendMessage, [], webpackStartMsSinceEpoch, Date.now());\n return;\n }\n function handleApplyUpdates(err, updatedModules) {\n if (err || _runtimeerrorhandler.RuntimeErrorHandler.hadRuntimeError || updatedModules == null) {\n if (err) {\n console.warn(_shared.REACT_REFRESH_FULL_RELOAD);\n } else if (_runtimeerrorhandler.RuntimeErrorHandler.hadRuntimeError) {\n console.warn(_shared.REACT_REFRESH_FULL_RELOAD_FROM_ERROR);\n }\n performFullReload(err, sendMessage);\n return;\n }\n _nextdevtools.dispatcher.onBuildOk();\n if (isUpdateAvailable()) {\n // While we were updating, there was a new update! Do it again.\n tryApplyUpdatesWebpack(sendMessage);\n return;\n }\n _nextdevtools.dispatcher.onRefresh();\n resolvePendingHotUpdateWebpack();\n (0, _reporthmrlatency.default)(sendMessage, updatedModules, webpackStartMsSinceEpoch, Date.now());\n if (false) {}\n }\n // https://webpack.js.org/api/hot-module-replacement/#check\n module.hot.check(/* autoApply */ false).then((updatedModules)=>{\n if (updatedModules == null) {\n return null;\n }\n // We should always handle an update, even if updatedModules is empty (but\n // non-null) for any reason. That's what webpack would normally do:\n // https://github.com/webpack/webpack/blob/3aa6b6bc3a64/lib/hmr/HotModuleReplacement.runtime.js#L296-L298\n _nextdevtools.dispatcher.onBeforeRefresh();\n // https://webpack.js.org/api/hot-module-replacement/#apply\n return module.hot.apply();\n }).then((updatedModules)=>{\n handleApplyUpdates(null, updatedModules);\n }, (err)=>{\n handleApplyUpdates(err, null);\n });\n}\n/** Handles messages from the server for the App Router. */ function processMessage(obj, sendMessage, processTurbopackMessage, router, appIsrManifestRef, pathnameRef) {\n if (!('action' in obj)) {\n return;\n }\n function handleErrors(errors) {\n // \"Massage\" webpack messages.\n const formatted = (0, _formatwebpackmessages.default)({\n errors: errors,\n warnings: []\n });\n // Only show the first error.\n _nextdevtools.dispatcher.onBuildError(formatted.errors[0]);\n // Also log them to the console.\n for(let i = 0; i < formatted.errors.length; i++){\n console.error((0, _stripansi.default)(formatted.errors[i]));\n }\n // Do not attempt to reload now.\n // We will reload on next success instead.\n if (false) {}\n }\n function handleHotUpdate() {\n if (false) {} else {\n tryApplyUpdatesWebpack(sendMessage);\n }\n }\n switch(obj.action){\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.ISR_MANIFEST:\n {\n if (true) {\n if (appIsrManifestRef) {\n appIsrManifestRef.current = obj.data;\n // handle initial status on receiving manifest\n // navigation is handled in useEffect for pathname changes\n // as we'll receive the updated manifest before usePathname\n // triggers for new value\n if (pathnameRef.current in obj.data) {\n _nextdevtools.dispatcher.onStaticIndicator(true);\n } else {\n _nextdevtools.dispatcher.onStaticIndicator(false);\n }\n }\n }\n break;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.BUILDING:\n {\n _nextdevtools.dispatcher.buildingIndicatorShow();\n if (false) {} else {\n webpackStartMsSinceEpoch = Date.now();\n setPendingHotUpdateWebpack();\n console.log('[Fast Refresh] rebuilding');\n }\n break;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.BUILT:\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SYNC:\n {\n _nextdevtools.dispatcher.buildingIndicatorHide();\n if (obj.hash) {\n handleAvailableHash(obj.hash);\n }\n const { errors, warnings } = obj;\n // Is undefined when it's a 'built' event\n if ('versionInfo' in obj) _nextdevtools.dispatcher.onVersionInfo(obj.versionInfo);\n if ('debug' in obj && obj.debug) _nextdevtools.dispatcher.onDebugInfo(obj.debug);\n if ('devIndicator' in obj) _nextdevtools.dispatcher.onDevIndicator(obj.devIndicator);\n const hasErrors = Boolean(errors && errors.length);\n // Compilation with errors (e.g. syntax error or missing modules).\n if (hasErrors) {\n sendMessage(JSON.stringify({\n event: 'client-error',\n errorCount: errors.length,\n clientId: __nextDevClientId\n }));\n handleErrors(errors);\n return;\n }\n const hasWarnings = Boolean(warnings && warnings.length);\n if (hasWarnings) {\n sendMessage(JSON.stringify({\n event: 'client-warning',\n warningCount: warnings.length,\n clientId: __nextDevClientId\n }));\n // Print warnings to the console.\n const formattedMessages = (0, _formatwebpackmessages.default)({\n warnings: warnings,\n errors: []\n });\n for(let i = 0; i < formattedMessages.warnings.length; i++){\n if (i === 5) {\n console.warn('There were more warnings in other files.\\n' + 'You can find a complete log in the terminal.');\n break;\n }\n console.warn((0, _stripansi.default)(formattedMessages.warnings[i]));\n }\n // No early return here as we need to apply modules in the same way between warnings only and compiles without warnings\n }\n sendMessage(JSON.stringify({\n event: 'client-success',\n clientId: __nextDevClientId\n }));\n if (obj.action === _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.BUILT) {\n handleHotUpdate();\n }\n return;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_CONNECTED:\n {\n processTurbopackMessage({\n type: _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_CONNECTED,\n data: {\n sessionId: obj.data.sessionId\n }\n });\n break;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_MESSAGE:\n {\n turbopackHmr.onTurbopackMessage(obj);\n _nextdevtools.dispatcher.onBeforeRefresh();\n processTurbopackMessage({\n type: _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_MESSAGE,\n data: obj.data\n });\n if (_runtimeerrorhandler.RuntimeErrorHandler.hadRuntimeError) {\n console.warn(_shared.REACT_REFRESH_FULL_RELOAD_FROM_ERROR);\n performFullReload(null, sendMessage);\n }\n _nextdevtools.dispatcher.onRefresh();\n break;\n }\n // TODO-APP: make server component change more granular\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SERVER_COMPONENT_CHANGES:\n {\n turbopackHmr == null ? void 0 : turbopackHmr.onServerComponentChanges();\n sendMessage(JSON.stringify({\n event: 'server-component-reload-page',\n clientId: __nextDevClientId,\n hash: obj.hash\n }));\n // Store the latest hash in a session cookie so that it's sent back to the\n // server with any subsequent requests.\n document.cookie = _approuterheaders.NEXT_HMR_REFRESH_HASH_COOKIE + \"=\" + obj.hash;\n if (_runtimeerrorhandler.RuntimeErrorHandler.hadRuntimeError) {\n if (reloading) return;\n reloading = true;\n return window.location.reload();\n }\n (0, _react.startTransition)(()=>{\n router.hmrRefresh();\n _nextdevtools.dispatcher.onRefresh();\n });\n if (false) {}\n return;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.RELOAD_PAGE:\n {\n turbopackHmr == null ? void 0 : turbopackHmr.onReloadPage();\n sendMessage(JSON.stringify({\n event: 'client-reload-page',\n clientId: __nextDevClientId\n }));\n if (reloading) return;\n reloading = true;\n return window.location.reload();\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.ADDED_PAGE:\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.REMOVED_PAGE:\n {\n turbopackHmr == null ? void 0 : turbopackHmr.onPageAddRemove();\n // TODO-APP: potentially only refresh if the currently viewed page was added/removed.\n return router.hmrRefresh();\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SERVER_ERROR:\n {\n const { errorJSON } = obj;\n if (errorJSON) {\n const { message, stack } = JSON.parse(errorJSON);\n const error = Object.defineProperty(new Error(message), \"__NEXT_ERROR_CODE\", {\n value: \"E394\",\n enumerable: false,\n configurable: true\n });\n error.stack = stack;\n handleErrors([\n error\n ]);\n }\n return;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.DEV_PAGES_MANIFEST_UPDATE:\n {\n return;\n }\n default:\n {}\n }\n}\nfunction HotReload(param) {\n let { assetPrefix, children, globalError } = param;\n (0, _useerrorhandler.useErrorHandler)(_nextdevtools.dispatcher.onUnhandledError, _nextdevtools.dispatcher.onUnhandledRejection);\n const webSocketRef = (0, _usewebsocket.useWebsocket)(assetPrefix);\n (0, _usewebsocket.useWebsocketPing)(webSocketRef);\n const sendMessage = (0, _usewebsocket.useSendMessage)(webSocketRef);\n (0, _useforwardconsolelog.useForwardConsoleLog)(webSocketRef);\n const processTurbopackMessage = (0, _usewebsocket.useTurbopack)(sendMessage, (err)=>performFullReload(err, sendMessage));\n const router = (0, _navigation.useRouter)();\n // We don't want access of the pathname for the dev tools to trigger a dynamic\n // access (as the dev overlay will never be present in production).\n const pathname = (0, _navigationuntracked.useUntrackedPathname)();\n const appIsrManifestRef = (0, _react.useRef)({});\n const pathnameRef = (0, _react.useRef)(pathname);\n if (true) {\n // this conditional is only for dead-code elimination which\n // isn't a runtime conditional only build-time so ignore hooks rule\n // eslint-disable-next-line react-hooks/rules-of-hooks\n (0, _react.useEffect)(()=>{\n pathnameRef.current = pathname;\n const appIsrManifest = appIsrManifestRef.current;\n if (appIsrManifest) {\n if (pathname && pathname in appIsrManifest) {\n try {\n _nextdevtools.dispatcher.onStaticIndicator(true);\n } catch (reason) {\n let message = '';\n if (reason instanceof DOMException) {\n var _reason_stack;\n // Most likely a SecurityError, because of an unavailable localStorage\n message = (_reason_stack = reason.stack) != null ? _reason_stack : reason.message;\n } else if (reason instanceof Error) {\n var _reason_stack1;\n message = 'Error: ' + reason.message + '\\n' + ((_reason_stack1 = reason.stack) != null ? _reason_stack1 : '');\n } else {\n message = 'Unexpected Exception: ' + reason;\n }\n console.warn('[HMR] ' + message);\n }\n } else {\n _nextdevtools.dispatcher.onStaticIndicator(false);\n }\n }\n }, [\n pathname\n ]);\n }\n (0, _react.useEffect)(()=>{\n const websocket = webSocketRef.current;\n if (!websocket) return;\n const handler = (event)=>{\n try {\n const obj = JSON.parse(event.data);\n processMessage(obj, sendMessage, processTurbopackMessage, router, appIsrManifestRef, pathnameRef);\n } catch (err) {\n (0, _shared.reportInvalidHmrMessage)(event, err);\n }\n };\n websocket.addEventListener('message', handler);\n return ()=>websocket.removeEventListener('message', handler);\n }, [\n sendMessage,\n router,\n webSocketRef,\n processTurbopackMessage,\n appIsrManifestRef\n ]);\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_appdevoverlayerrorboundary.AppDevOverlayErrorBoundary, {\n globalError: globalError,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_replayssronlyerrors.ReplaySsrOnlyErrors, {\n onBlockingError: _nextdevtools.dispatcher.openErrorOverlay\n }),\n children\n ]\n });\n}\n_c = HotReload;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=hot-reloader-app.js.map\nvar _c;\n$RefreshReg$(_c, \"HotReload\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2Rldi9ob3QtcmVsb2FkZXIvYXBwL2hvdC1yZWxvYWRlci1hcHAuanMiLCJtYXBwaW5ncyI6IkFBQUEsNkNBQTZDOzs7Ozs7Ozs7Ozs7O0lBK2I3QyxPQWlHQztlQWpHdUJBOztJQTFZUkMsOEJBQThCO2VBQTlCQTs7Ozs7bUNBbERtQztnRkFDN0I7NEZBQ1k7d0NBQ1I7b0NBS25COzBDQUNvQjtpREFDUzt3REFDTzs2Q0FDWDtpREFDSTswQ0FNN0I7OENBQ3FDO2lEQUtQO3VGQUNSO3dEQUNBOzhDQUNnQjtrREFFUjtBQUVyQyxJQUFJQyw0QkFBaUM7QUFDckMsSUFBSUMsb0JBQW9CQyxLQUFLQyxLQUFLLENBQUNELEtBQUtFLE1BQU0sS0FBSyxNQUFNQyxLQUFLQyxHQUFHO0FBQ2pFLElBQUlDLFlBQVk7QUFDaEIsSUFBSUMsMkJBQTBDO0FBQzlDLE1BQU1DLGVBQW9DQyxNQUFxQixHQUMzRCxDQUFrQixHQUNsQjtBQUVKLElBQUlJLDBCQUEwQkMsUUFBUUMsT0FBTztBQUM3QyxJQUFJQyxpQ0FBNkMsS0FBTztBQUN4RCxTQUFTQztJQUNQSiwwQkFBMEIsSUFBSUMsUUFBUSxDQUFDQztRQUNyQ0MsaUNBQWlDO1lBQy9CRDtRQUNGO0lBQ0Y7QUFDRjtBQUVPLFNBQVNqQjtJQUNkLE9BQU9lO0FBQ1Q7QUFFQSxrREFBa0Q7QUFDbEQsU0FBU0ssb0JBQW9CQyxJQUFZO0lBQ3ZDLHNDQUFzQztJQUN0Q3BCLDRCQUE0Qm9CO0FBQzlCO0FBRUE7Ozs7Q0FJQyxHQUNELFNBQVNDO0lBQ1AsSUFBSVgsS0FBcUIsRUFBRSxFQUUxQjtJQUVELDRCQUE0QixHQUM1QiwyREFBMkQ7SUFDM0QsOENBQThDO0lBQzlDLE9BQU9WLDhCQUE4QnNCLHVCQUFnQkE7QUFDdkQ7QUFFQSw2Q0FBNkM7QUFDN0MsU0FBU0M7SUFDUCxPQUFPQyxVQUFVLENBQUNFLE1BQU0sT0FBTztBQUNqQztBQUNB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QUFVLDJCQUEyQnNIO3dCQUN2Qzt3QkFFQXJHLFFBQVFDLElBQUksQ0FBQyxXQUFXbEI7b0JBQzFCO2dCQUNGLE9BQU87b0JBQ0xZLGNBQUFBLFVBQVUsQ0FBQzZDLGlCQUFpQixDQUFDO2dCQUMvQjtZQUNGO1FBQ0YsR0FBRztZQUFDd0Q7U0FBUztJQUNmO0lBRUFHLENBQUFBLEdBQUFBLE9BQUFBLFNBQUFBLEVBQVU7UUFDUixNQUFNSSxZQUFZZCxhQUFhbkQsT0FBTztRQUN0QyxJQUFJLENBQUNpRSxXQUFXO1FBRWhCLE1BQU1uSSxVQUFVLENBQUNjO1lBQ2YsSUFBSTtnQkFDRixNQUFNMkIsTUFBTTdCLEtBQUtnRyxLQUFLLENBQUM5RixNQUFNcUQsSUFBSTtnQkFDakMzQixlQUNFQyxLQUNBcEMsYUFDQXFDLHlCQUNBQyxRQUNBQyxtQkFDQUM7WUFFSixFQUFFLE9BQU96QyxLQUFjO2dCQUNyQmdJLENBQUFBLEdBQUFBLFFBQUFBLHVCQUFBQSxFQUF3QnRILE9BQU9WO1lBQ2pDO1FBQ0Y7UUFFQStILFVBQVVFLGdCQUFnQixDQUFDLFdBQVdySTtRQUN0QyxPQUFPLElBQU1tSSxVQUFVRyxtQkFBbUIsQ0FBQyxXQUFXdEk7SUFDeEQsR0FBRztRQUNESztRQUNBc0M7UUFDQTBFO1FBQ0EzRTtRQUNBRTtLQUNEO0lBQ0QscUJBQ0Usc0JBQUMyRiw0QkFBQUEsMEJBQTBCO1FBQUN0QixhQUFhQTs7MEJBQ3ZDLHFCQUFDdUIscUJBQUFBLG1CQUFtQjtnQkFBQ0MsaUJBQWlCbEgsY0FBQUEsVUFBVSxDQUFDbUgsZ0JBQWdCOztZQUNoRTFCOzs7QUFHUDtLQWpHd0IvSSIsInNvdXJjZXMiOlsiL3NyYy9jbGllbnQvZGV2L2hvdC1yZWxvYWRlci9hcHAvaG90LXJlbG9hZGVyLWFwcC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCJ3ZWJwYWNrL21vZHVsZS5kLnRzXCIgLz5cblxuaW1wb3J0IHR5cGUgeyBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUVmZmVjdCwgc3RhcnRUcmFuc2l0aW9uLCB1c2VSZWYgfSBmcm9tICdyZWFjdCdcbmltcG9ydCBzdHJpcEFuc2kgZnJvbSAnbmV4dC9kaXN0L2NvbXBpbGVkL3N0cmlwLWFuc2knXG5pbXBvcnQgZm9ybWF0V2VicGFja01lc3NhZ2VzIGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9saWIvZm9ybWF0LXdlYnBhY2stbWVzc2FnZXMnXG5pbXBvcnQgeyB1c2VSb3V0ZXIgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL25hdmlnYXRpb24nXG5pbXBvcnQge1xuICBSRUFDVF9SRUZSRVNIX0ZVTExfUkVMT0FELFxuICBSRUFDVF9SRUZSRVNIX0ZVTExfUkVMT0FEX0ZST01fRVJST1IsXG4gIHJlcG9ydEludmFsaWRIbXJNZXNzYWdlLFxufSBmcm9tICcuLi9zaGFyZWQnXG5pbXBvcnQgeyBkaXNwYXRjaGVyIH0gZnJvbSAnbmV4dC9kaXN0L2NvbXBpbGVkL25leHQtZGV2dG9vbHMnXG5pbXBvcnQgeyBSZXBsYXlTc3JPbmx5RXJyb3JzIH0gZnJvbSAnLi4vLi4vLi4vLi4vbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL2Vycm9ycy9yZXBsYXktc3NyLW9ubHktZXJyb3JzJ1xuaW1wb3J0IHsgQXBwRGV2T3ZlcmxheUVycm9yQm91bmRhcnkgfSBmcm9tICcuLi8uLi8uLi8uLi9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9hcHAvYXBwLWRldi1vdmVybGF5LWVycm9yLWJvdW5kYXJ5J1xuaW1wb3J0IHsgdXNlRXJyb3JIYW5kbGVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL2Vycm9ycy91c2UtZXJyb3ItaGFuZGxlcidcbmltcG9ydCB7IFJ1bnRpbWVFcnJvckhhbmRsZXIgfSBmcm9tICcuLi8uLi9ydW50aW1lLWVycm9yLWhhbmRsZXInXG5pbXBvcnQge1xuICB1c2VTZW5kTWVzc2FnZSxcbiAgdXNlVHVyYm9wYWNrLFxuICB1c2VXZWJzb2NrZXQsXG4gIHVzZVdlYnNvY2tldFBpbmcsXG59IGZyb20gJy4vdXNlLXdlYnNvY2tldCdcbmltcG9ydCB7IEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUiB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZlci9kZXYvaG90LXJlbG9hZGVyLXR5cGVzJ1xuaW1wb3J0IHR5cGUge1xuICBITVJfQUNUSU9OX1RZUEVTLFxuICBUdXJib3BhY2tNc2dUb0Jyb3dzZXIsXG59IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZlci9kZXYvaG90LXJlbG9hZGVyLXR5cGVzJ1xuaW1wb3J0IHsgdXNlVW50cmFja2VkUGF0aG5hbWUgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL25hdmlnYXRpb24tdW50cmFja2VkJ1xuaW1wb3J0IHJlcG9ydEhtckxhdGVuY3kgZnJvbSAnLi4vLi4vcmVwb3J0LWhtci1sYXRlbmN5J1xuaW1wb3J0IHsgVHVyYm9wYWNrSG1yIH0gZnJvbSAnLi4vdHVyYm9wYWNrLWhvdC1yZWxvYWRlci1jb21tb24nXG5pbXBvcnQgeyBORVhUX0hNUl9SRUZSRVNIX0hBU0hfQ09PS0lFIH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9hcHAtcm91dGVyLWhlYWRlcnMnXG5pbXBvcnQgdHlwZSB7IEdsb2JhbEVycm9yU3RhdGUgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL2FwcC1yb3V0ZXItaW5zdGFuY2UnXG5pbXBvcnQgeyB1c2VGb3J3YXJkQ29uc29sZUxvZyB9IGZyb20gJy4uLy4uLy4uLy4uL25leHQtZGV2dG9vbHMvdXNlcnNwYWNlL2FwcC9lcnJvcnMvdXNlLWZvcndhcmQtY29uc29sZS1sb2cnXG5cbmxldCBtb3N0UmVjZW50Q29tcGlsYXRpb25IYXNoOiBhbnkgPSBudWxsXG5sZXQgX19uZXh0RGV2Q2xpZW50SWQgPSBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAxMDAgKyBEYXRlLm5vdygpKVxubGV0IHJlbG9hZGluZyA9IGZhbHNlXG5sZXQgd2VicGFja1N0YXJ0TXNTaW5jZUVwb2NoOiBudW1iZXIgfCBudWxsID0gbnVsbFxuY29uc3QgdHVyYm9wYWNrSG1yOiBUdXJib3BhY2tIbXIgfCBudWxsID0gcHJvY2Vzcy5lbnYuVFVSQk9QQUNLXG4gID8gbmV3IFR1cmJvcGFja0htcigpXG4gIDogbnVsbFxuXG5sZXQgcGVuZGluZ0hvdFVwZGF0ZVdlYnBhY2sgPSBQcm9taXNlLnJlc29sdmUoKVxubGV0IHJlc29sdmVQZW5kaW5nSG90VXBkYXRlV2VicGFjazogKCkgPT4gdm9pZCA9ICgpID0+IHt9XG5mdW5jdGlvbiBzZXRQZW5kaW5nSG90VXBkYXRlV2VicGFjaygpIHtcbiAgcGVuZGluZ0hvdFVwZGF0ZVdlYnBhY2sgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHJlc29sdmVQZW5kaW5nSG90VXBkYXRlV2VicGFjayA9ICgpID0+IHtcbiAgICAgIHJlc29sdmUoKVxuICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdhaXRGb3JXZWJwYWNrUnVudGltZUhvdFVwZGF0ZSgpIHtcbiAgcmV0dXJuIHBlbmRpbmdIb3RVcGRhdGVXZWJwYWNrXG59XG5cbi8vIFRoZXJlIGlzIGEgbmV3ZXIgdmVyc2lvbiBvZiB0aGUgY29kZSBhdmFpbGFibGUuXG5mdW5jdGlvbiBoYW5kbGVBdmFpbGFibGVIYXNoKGhhc2g6IHN0cmluZykge1xuICAvLyBVcGRhdGUgbGFzdCBrbm93biBjb21waWxhdGlvbiBoYXNoLlxuICBtb3N0UmVjZW50Q29tcGlsYXRpb25IYXNoID0gaGFzaFxufVxuXG4vKipcbiAqIElzIHRoZXJlIGEgbmV3ZXIgdmVyc2lvbiBvZiB0aGlzIGNvZGUgYXZhaWxhYmxlP1xuICogRm9yIHdlYnBhY2s6IENoZWNrIGlmIHRoZSBoYXNoIGNoYW5nZWQgY29tcGFyZWQgdG8gX193ZWJwYWNrX2hhc2hfX1xuICogRm9yIFR1cmJvcGFjazogQWx3YXlzIHRydWUgYmVjYXVzZSBpdCBkb2Vzbid0IGhhdmUgX193ZWJwYWNrX2hhc2hfX1xuICovXG5mdW5jdGlvbiBpc1VwZGF0ZUF2YWlsYWJsZSgpIHtcbiAgaWYgKHByb2Nlc3MuZW52LlRVUkJPUEFDSykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvKiBnbG9iYWxzIF9fd2VicGFja19oYXNoX18gKi9cbiAgLy8gX193ZWJwYWNrX2hhc2hfXyBpcyB0aGUgaGFzaCBvZiB0aGUgY3VycmVudCBjb21waWxhdGlvbi5cbiAgLy8gSXQncyBhIGdsb2JhbCB2YXJpYWJsZSBpbmplY3RlZCBieSBXZWJwYWNrLlxuICByZXR1cm4gbW9zdFJlY2VudENvbXBpbGF0aW9uSGFzaCAhPT0gX193ZWJwYWNrX2hhc2hfX1xufVxuXG4vLyBXZWJwYWNrIGRpc2FsbG93cyB1cGRhdGVzIGluIG90aGVyIHN0YXRlcy5cbmZ1bmN0aW9uIGNhbkFwcGx5VXBkYXRlcygpIHtcbiAgcmV0dXJuIG1vZHVsZS5ob3Quc3RhdHVzKCkgPT09ICdpZGxlJ1xufVxuZnVuY3Rpb24gYWZ0ZXJBcHBseVVwZGF0ZXMoZm46IGFueSkge1xuICBpZiAoY2FuQXBwbHlVcGRhdGVzKCkpIHtcbiAgICBmbigpXG4gIH0gZWxzZSB7XG4gICAgZnVuY3Rpb24gaGFuZGxlcihzdGF0dXM6IGFueSkge1xuICAgICAgaWYgKHN0YXR1cyA9PT0gJ2lkbGUnKSB7XG4gICAgICAgIG1vZHVsZS5ob3QucmVtb3ZlU3RhdHVzSGFuZGxlcihoYW5kbGVyKVxuICAgICAgICBmbigpXG4gICAgICB9XG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWRkU3RhdHVzSGFuZGxlcihoYW5kbGVyKVxuICB9XG59XG5cbmZ1bmN0aW9uIHBlcmZvcm1GdWxsUmVsb2FkKGVycjogYW55LCBzZW5kTWVzc2FnZTogYW55KSB7XG4gIGNvbnN0IHN0YWNrVHJhY2UgPVxuICAgIGVyciAmJlxuICAgICgoZXJyLnN0YWNrICYmIGVyci5zdGFjay5zcGxpdCgnXFxuJykuc2xpY2UoMCwgNSkuam9pbignXFxuJykpIHx8XG4gICAgICBlcnIubWVzc2FnZSB8fFxuICAgICAgZXJyICsgJycpXG5cbiAgc2VuZE1lc3NhZ2UoXG4gICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgZXZlbnQ6ICdjbGllbnQtZnVsbC1yZWxvYWQnLFxuICAgICAgc3RhY2tUcmFjZSxcbiAgICAgIGhhZFJ1bnRpbWVFcnJvcjogISFSdW50aW1lRXJyb3JIYW5kbGVyLmhhZFJ1bnRpbWVFcnJvcixcbiAgICAgIGRlcGVuZGVuY3lDaGFpbjogZXJyID8gZXJyLmRlcGVuZGVuY3lDaGFpbiA6IHVuZGVmaW5lZCxcbiAgICB9KVxuICApXG5cbiAgaWYgKHJlbG9hZGluZykgcmV0dXJuXG4gIHJlbG9hZGluZyA9IHRydWVcbiAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpXG59XG5cbi8vIEF0dGVtcHQgdG8gdXBkYXRlIGNvZGUgb24gdGhlIGZseSwgZmFsbCBiYWNrIHRvIGEgaGFyZCByZWxvYWQuXG5mdW5jdGlvbiB0cnlBcHBseVVwZGF0ZXNXZWJwYWNrKHNlbmRNZXNzYWdlOiAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkKSB7XG4gIGlmICghaXNVcGRhdGVBdmFpbGFibGUoKSB8fCAhY2FuQXBwbHlVcGRhdGVzKCkpIHtcbiAgICByZXNvbHZlUGVuZGluZ0hvdFVwZGF0ZVdlYnBhY2soKVxuICAgIGRpc3BhdGNoZXIub25CdWlsZE9rKClcbiAgICByZXBvcnRIbXJMYXRlbmN5KHNlbmRNZXNzYWdlLCBbXSwgd2VicGFja1N0YXJ0TXNTaW5jZUVwb2NoISwgRGF0ZS5ub3coKSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUFwcGx5VXBkYXRlcyhcbiAgICBlcnI6IGFueSxcbiAgICB1cGRhdGVkTW9kdWxlczogKHN0cmluZyB8IG51bWJlcilbXSB8IG51bGxcbiAgKSB7XG4gICAgaWYgKGVyciB8fCBSdW50aW1lRXJyb3JIYW5kbGVyLmhhZFJ1bnRpbWVFcnJvciB8fCB1cGRhdGVkTW9kdWxlcyA9PSBudWxsKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihSRUFDVF9SRUZSRVNIX0ZVTExfUkVMT0FEKVxuICAgICAgfSBlbHNlIGlmIChSdW50aW1lRXJyb3JIYW5kbGVyLmhhZFJ1bnRpbWVFcnJvcikge1xuICAgICAgICBjb25zb2xlLndhcm4oUkVBQ1RfUkVGUkVTSF9GVUxMX1JFTE9BRF9GUk9NX0VSUk9SKVxuICAgICAgfVxuICAgICAgcGVyZm9ybUZ1bGxSZWxvYWQoZXJyLCBzZW5kTWVzc2FnZSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGRpc3BhdGNoZXIub25CdWlsZE9rKClcblxuICAgIGlmIChpc1VwZGF0ZUF2YWlsYWJsZSgpKSB7XG4gICAgICAvLyBXaGlsZSB3ZSB3ZXJlIHVwZGF0aW5nLCB0aGVyZSB3YXMgYSBuZXcgdXBkYXRlISBEbyBpdCBhZ2Fpbi5cbiAgICAgIHRyeUFwcGx5VXBkYXRlc1dlYnBhY2soc2VuZE1lc3NhZ2UpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBkaXNwYXRjaGVyLm9uUmVmcmVzaCgpXG4gICAgcmVzb2x2ZVBlbmRpbmdIb3RVcGRhdGVXZWJwYWNrKClcbiAgICByZXBvcnRIbXJMYXRlbmN5KFxuICAgICAgc2VuZE1lc3NhZ2UsXG4gICAgICB1cGRhdGVkTW9kdWxlcyxcbiAgICAgIHdlYnBhY2tTdGFydE1zU2luY2VFcG9jaCEsXG4gICAgICBEYXRlLm5vdygpXG4gICAgKVxuXG4gICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9URVNUX01PREUpIHtcbiAgICAgIGFmdGVyQXBwbHlVcGRhdGVzKCgpID0+IHtcbiAgICAgICAgaWYgKHNlbGYuX19ORVhUX0hNUl9DQikge1xuICAgICAgICAgIHNlbGYuX19ORVhUX0hNUl9DQigpXG4gICAgICAgICAgc2VsZi5fX05FWFRfSE1SX0NCID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIC8vIGh0dHBzOi8vd2VicGFjay5qcy5vcmcvYXBpL2hvdC1tb2R1bGUtcmVwbGFjZW1lbnQvI2NoZWNrXG4gIG1vZHVsZS5ob3RcbiAgICAuY2hlY2soLyogYXV0b0FwcGx5ICovIGZhbHNlKVxuICAgIC50aGVuKCh1cGRhdGVkTW9kdWxlczogKHN0cmluZyB8IG51bWJlcilbXSB8IG51bGwpID0+IHtcbiAgICAgIGlmICh1cGRhdGVkTW9kdWxlcyA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICAgIC8vIFdlIHNob3VsZCBhbHdheXMgaGFuZGxlIGFuIHVwZGF0ZSwgZXZlbiBpZiB1cGRhdGVkTW9kdWxlcyBpcyBlbXB0eSAoYnV0XG4gICAgICAvLyBub24tbnVsbCkgZm9yIGFueSByZWFzb24uIFRoYXQncyB3aGF0IHdlYnBhY2sgd291bGQgbm9ybWFsbHkgZG86XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2VicGFjay93ZWJwYWNrL2Jsb2IvM2FhNmI2YmMzYTY0L2xpYi9obXIvSG90TW9kdWxlUmVwbGFjZW1lbnQucnVudGltZS5qcyNMMjk2LUwyOThcbiAgICAgIGRpc3BhdGNoZXIub25CZWZvcmVSZWZyZXNoKClcbiAgICAgIC8vIGh0dHBzOi8vd2VicGFjay5qcy5vcmcvYXBpL2hvdC1tb2R1bGUtcmVwbGFjZW1lbnQvI2FwcGx5XG4gICAgICByZXR1cm4gbW9kdWxlLmhvdC5hcHBseSgpXG4gICAgfSlcbiAgICAudGhlbihcbiAgICAgICh1cGRhdGVkTW9kdWxlczogKHN0cmluZyB8IG51bWJlcilbXSB8IG51bGwpID0+IHtcbiAgICAgICAgaGFuZGxlQXBwbHlVcGRhdGVzKG51bGwsIHVwZGF0ZWRNb2R1bGVzKVxuICAgICAgfSxcbiAgICAgIChlcnI6IGFueSkgPT4ge1xuICAgICAgICBoYW5kbGVBcHBseVVwZGF0ZXMoZXJyLCBudWxsKVxuICAgICAgfVxuICAgIClcbn1cblxuLyoqIEhhbmRsZXMgbWVzc2FnZXMgZnJvbSB0aGUgc2VydmVyIGZvciB0aGUgQXBwIFJvdXRlci4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NNZXNzYWdlKFxuICBvYmo6IEhNUl9BQ1RJT05fVFlQRVMsXG4gIHNlbmRNZXNzYWdlOiAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkLFxuICBwcm9jZXNzVHVyYm9wYWNrTWVzc2FnZTogKG1zZzogVHVyYm9wYWNrTXNnVG9Ccm93c2VyKSA9PiB2b2lkLFxuICByb3V0ZXI6IFJldHVyblR5cGU8dHlwZW9mIHVzZVJvdXRlcj4sXG4gIGFwcElzck1hbmlmZXN0UmVmOiBSZXR1cm5UeXBlPHR5cGVvZiB1c2VSZWY+LFxuICBwYXRobmFtZVJlZjogUmV0dXJuVHlwZTx0eXBlb2YgdXNlUmVmPlxuKSB7XG4gIGlmICghKCdhY3Rpb24nIGluIG9iaikpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUVycm9ycyhlcnJvcnM6IFJlYWRvbmx5QXJyYXk8dW5rbm93bj4pIHtcbiAgICAvLyBcIk1hc3NhZ2VcIiB3ZWJwYWNrIG1lc3NhZ2VzLlxuICAgIGNvbnN0IGZvcm1hdHRlZCA9IGZvcm1hdFdlYnBhY2tNZXNzYWdlcyh7XG4gICAgICBlcnJvcnM6IGVycm9ycyxcbiAgICAgIHdhcm5pbmdzOiBbXSxcbiAgICB9KVxuXG4gICAgLy8gT25seSBzaG93IHRoZSBmaXJzdCBlcnJvci5cbiAgICBkaXNwYXRjaGVyLm9uQnVpbGRFcnJvcihmb3JtYXR0ZWQuZXJyb3JzWzBdKVxuXG4gICAgLy8gQWxzbyBsb2cgdGhlbSB0byB0aGUgY29uc29sZS5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZvcm1hdHRlZC5lcnJvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnNvbGUuZXJyb3Ioc3RyaXBBbnNpKGZvcm1hdHRlZC5lcnJvcnNbaV0pKVxuICAgIH1cblxuICAgIC8vIERvIG5vdCBhdHRlbXB0IHRvIHJlbG9hZCBub3cuXG4gICAgLy8gV2Ugd2lsbCByZWxvYWQgb24gbmV4dCBzdWNjZXNzIGluc3RlYWQuXG4gICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9URVNUX01PREUpIHtcbiAgICAgIGlmIChzZWxmLl9fTkVYVF9ITVJfQ0IpIHtcbiAgICAgICAgc2VsZi5fX05FWFRfSE1SX0NCKGZvcm1hdHRlZC5lcnJvcnNbMF0pXG4gICAgICAgIHNlbGYuX19ORVhUX0hNUl9DQiA9IG51bGxcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVIb3RVcGRhdGUoKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52LlRVUkJPUEFDSykge1xuICAgICAgY29uc3QgaG1yVXBkYXRlID0gdHVyYm9wYWNrSG1yIS5vbkJ1aWx0KClcbiAgICAgIGlmIChobXJVcGRhdGUgIT0gbnVsbCkge1xuICAgICAgICByZXBvcnRIbXJMYXRlbmN5KFxuICAgICAgICAgIHNlbmRNZXNzYWdlLFxuICAgICAgICAgIFsuLi5obXJVcGRhdGUudXBkYXRlZE1vZHVsZXNdLFxuICAgICAgICAgIGhtclVwZGF0ZS5zdGFydE1zU2luY2VFcG9jaCxcbiAgICAgICAgICBobXJVcGRhdGUuZW5kTXNTaW5jZUVwb2NoLFxuICAgICAgICAgIC8vIHN1cHByZXNzIHRoZSBgY2xpZW50LWhtci1sYXRlbmN5YCBldmVudCBpZiB0aGUgdXBkYXRlIHdhcyBhIG5vLW9wOlxuICAgICAgICAgIGhtclVwZGF0ZS5oYXNVcGRhdGVzXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGRpc3BhdGNoZXIub25CdWlsZE9rKClcbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5QXBwbHlVcGRhdGVzV2VicGFjayhzZW5kTWVzc2FnZSlcbiAgICB9XG4gIH1cblxuICBzd2l0Y2ggKG9iai5hY3Rpb24pIHtcbiAgICBjYXNlIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5JU1JfTUFOSUZFU1Q6IHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfREVWX0lORElDQVRPUikge1xuICAgICAgICBpZiAoYXBwSXNyTWFuaWZlc3RSZWYpIHtcbiAgICAgICAgICBhcHBJc3JNYW5pZmVzdFJlZi5jdXJyZW50ID0gb2JqLmRhdGFcblxuICAgICAgICAgIC8vIGhhbmRsZSBpbml0aWFsIHN0YXR1cyBvbiByZWNlaXZpbmcgbWFuaWZlc3RcbiAgICAgICAgICAvLyBuYXZpZ2F0aW9uIGlzIGhhbmRsZWQgaW4gdXNlRWZmZWN0IGZvciBwYXRobmFtZSBjaGFuZ2VzXG4gICAgICAgICAgLy8gYXMgd2UnbGwgcmVjZWl2ZSB0aGUgdXBkYXRlZCBtYW5pZmVzdCBiZWZvcmUgdXNlUGF0aG5hbWVcbiAgICAgICAgICAvLyB0cmlnZ2VycyBmb3IgbmV3IHZhbHVlXG4gICAgICAgICAgaWYgKChwYXRobmFtZVJlZi5jdXJyZW50IGFzIHN0cmluZykgaW4gb2JqLmRhdGEpIHtcbiAgICAgICAgICAgIGRpc3BhdGNoZXIub25TdGF0aWNJbmRpY2F0b3IodHJ1ZSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGlzcGF0Y2hlci5vblN0YXRpY0luZGljYXRvcihmYWxzZSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJyZWFrXG4gICAgfVxuICAgIGNhc2UgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLkJVSUxESU5HOiB7XG4gICAgICBkaXNwYXRjaGVyLmJ1aWxkaW5nSW5kaWNhdG9yU2hvdygpXG5cbiAgICAgIGlmIChwcm9jZXNzLmVudi5UVVJCT1BBQ0spIHtcbiAgICAgICAgdHVyYm9wYWNrSG1yIS5vbkJ1aWxkaW5nKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdlYnBhY2tTdGFydE1zU2luY2VFcG9jaCA9IERhdGUubm93KClcbiAgICAgICAgc2V0UGVuZGluZ0hvdFVwZGF0ZVdlYnBhY2soKVxuICAgICAgICBjb25zb2xlLmxvZygnW0Zhc3QgUmVmcmVzaF0gcmVidWlsZGluZycpXG4gICAgICB9XG4gICAgICBicmVha1xuICAgIH1cbiAgICBjYXNlIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5CVUlMVDpcbiAgICBjYXNlIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5TWU5DOiB7XG4gICAgICBkaXNwYXRjaGVyLmJ1aWxkaW5nSW5kaWNhdG9ySGlkZSgpXG5cbiAgICAgIGlmIChvYmouaGFzaCkge1xuICAgICAgICBoYW5kbGVBdmFpbGFibGVIYXNoKG9iai5oYXNoKVxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGVycm9ycywgd2FybmluZ3MgfSA9IG9ialxuXG4gICAgICAvLyBJcyB1bmRlZmluZWQgd2hlbiBpdCdzIGEgJ2J1aWx0JyBldmVudFxuICAgICAgaWYgKCd2ZXJzaW9uSW5mbycgaW4gb2JqKSBkaXNwYXRjaGVyLm9uVmVyc2lvbkluZm8ob2JqLnZlcnNpb25JbmZvKVxuICAgICAgaWYgKCdkZWJ1ZycgaW4gb2JqICYmIG9iai5kZWJ1ZykgZGlzcGF0Y2hlci5vbkRlYnVnSW5mbyhvYmouZGVidWcpXG4gICAgICBpZiAoJ2RldkluZGljYXRvcicgaW4gb2JqKSBkaXNwYXRjaGVyLm9uRGV2SW5kaWNhdG9yKG9iai5kZXZJbmRpY2F0b3IpXG5cbiAgICAgIGNvbnN0IGhhc0Vycm9ycyA9IEJvb2xlYW4oZXJyb3JzICYmIGVycm9ycy5sZW5ndGgpXG4gICAgICAvLyBDb21waWxhdGlvbiB3aXRoIGVycm9ycyAoZS5nLiBzeW50YXggZXJyb3Igb3IgbWlzc2luZyBtb2R1bGVzKS5cbiAgICAgIGlmIChoYXNFcnJvcnMpIHtcbiAgICAgICAgc2VuZE1lc3NhZ2UoXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgZXZlbnQ6ICdjbGllbnQtZXJyb3InLFxuICAgICAgICAgICAgZXJyb3JDb3VudDogZXJyb3JzLmxlbmd0aCxcbiAgICAgICAgICAgIGNsaWVudElkOiBfX25leHREZXZDbGllbnRJZCxcbiAgICAgICAgICB9KVxuICAgICAgICApXG5cbiAgICAgICAgaGFuZGxlRXJyb3JzKGVycm9ycylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhhc1dhcm5pbmdzID0gQm9vbGVhbih3YXJuaW5ncyAmJiB3YXJuaW5ncy5sZW5ndGgpXG4gICAgICBpZiAoaGFzV2FybmluZ3MpIHtcbiAgICAgICAgc2VuZE1lc3NhZ2UoXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgZXZlbnQ6ICdjbGllbnQtd2FybmluZycsXG4gICAgICAgICAgICB3YXJuaW5nQ291bnQ6IHdhcm5pbmdzLmxlbmd0aCxcbiAgICAgICAgICAgIGNsaWVudElkOiBfX25leHREZXZDbGllbnRJZCxcbiAgICAgICAgICB9KVxuICAgICAgICApXG5cbiAgICAgICAgLy8gUHJpbnQgd2FybmluZ3MgdG8gdGhlIGNvbnNvbGUuXG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZE1lc3NhZ2VzID0gZm9ybWF0V2VicGFja01lc3NhZ2VzKHtcbiAgICAgICAgICB3YXJuaW5nczogd2FybmluZ3MsXG4gICAgICAgICAgZXJyb3JzOiBbXSxcbiAgICAgICAgfSlcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZvcm1hdHRlZE1lc3NhZ2VzLndhcm5pbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGkgPT09IDUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgJ1RoZXJlIHdlcmUgbW9yZSB3YXJuaW5ncyBpbiBvdGhlciBmaWxlcy5cXG4nICtcbiAgICAgICAgICAgICAgICAnWW91IGNhbiBmaW5kIGEgY29tcGxldGUgbG9nIGluIHRoZSB0ZXJtaW5hbC4nXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zb2xlLndhcm4oc3RyaXBBbnNpKGZvcm1hdHRlZE1lc3NhZ2VzLndhcm5pbmdzW2ldKSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5vIGVhcmx5IHJldHVybiBoZXJlIGFzIHdlIG5lZWQgdG8gYXBwbHkgbW9kdWxlcyBpbiB0aGUgc2FtZSB3YXkgYmV0d2VlbiB3YXJuaW5ncyBvbmx5IGFuZCBjb21waWxlcyB3aXRob3V0IHdhcm5pbmdzXG4gICAgICB9XG5cbiAgICAgIHNlbmRNZXNzYWdlKFxuICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgZXZlbnQ6ICdjbGllbnQtc3VjY2VzcycsXG4gICAgICAgICAgY2xpZW50SWQ6IF9fbmV4dERldkNsaWVudElkLFxuICAgICAgICB9KVxuICAgICAgKVxuXG4gICAgICBpZiAob2JqLmFjdGlvbiA9PT0gSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLkJVSUxUKSB7XG4gICAgICAgIGhhbmRsZUhvdFVwZGF0ZSgpXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY2FzZSBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIuVFVSQk9QQUNLX0NPTk5FQ1RFRDoge1xuICAgICAgcHJvY2Vzc1R1cmJvcGFja01lc3NhZ2Uoe1xuICAgICAgICB0eXBlOiBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIuVFVSQk9QQUNLX0NPTk5FQ1RFRCxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHNlc3Npb25JZDogb2JqLmRhdGEuc2Vzc2lvbklkLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIGJyZWFrXG4gICAgfVxuICAgIGNhc2UgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLlRVUkJPUEFDS19NRVNTQUdFOiB7XG4gICAgICB0dXJib3BhY2tIbXIhLm9uVHVyYm9wYWNrTWVzc2FnZShvYmopXG4gICAgICBkaXNwYXRjaGVyLm9uQmVmb3JlUmVmcmVzaCgpXG4gICAgICBwcm9jZXNzVHVyYm9wYWNrTWVzc2FnZSh7XG4gICAgICAgIHR5cGU6IEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5UVVJCT1BBQ0tfTUVTU0FHRSxcbiAgICAgICAgZGF0YTogb2JqLmRhdGEsXG4gICAgICB9KVxuICAgICAgaWYgKFJ1bnRpbWVFcnJvckhhbmRsZXIuaGFkUnVudGltZUVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihSRUFDVF9SRUZSRVNIX0ZVTExfUkVMT0FEX0ZST01fRVJST1IpXG4gICAgICAgIHBlcmZvcm1GdWxsUmVsb2FkKG51bGwsIHNlbmRNZXNzYWdlKVxuICAgICAgfVxuICAgICAgZGlzcGF0Y2hlci5vblJlZnJlc2goKVxuICAgICAgYnJlYWtcbiAgICB9XG4gICAgLy8gVE9ETy1BUFA6IG1ha2Ugc2VydmVyIGNvbXBvbmVudCBjaGFuZ2UgbW9yZSBncmFudWxhclxuICAgIGNhc2UgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLlNFUlZFUl9DT01QT05FTlRfQ0hBTkdFUzoge1xuICAgICAgdHVyYm9wYWNrSG1yPy5vblNlcnZlckNvbXBvbmVudENoYW5nZXMoKVxuICAgICAgc2VuZE1lc3NhZ2UoXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBldmVudDogJ3NlcnZlci1jb21wb25lbnQtcmVsb2FkLXBhZ2UnLFxuICAgICAgICAgIGNsaWVudElkOiBfX25leHREZXZDbGllbnRJZCxcbiAgICAgICAgICBoYXNoOiBvYmouaGFzaCxcbiAgICAgICAgfSlcbiAgICAgIClcblxuICAgICAgLy8gU3RvcmUgdGhlIGxhdGVzdCBoYXNoIGluIGEgc2Vzc2lvbiBjb29raWUgc28gdGhhdCBpdCdzIHNlbnQgYmFjayB0byB0aGVcbiAgICAgIC8vIHNlcnZlciB3aXRoIGFueSBzdWJzZXF1ZW50IHJlcXVlc3RzLlxuICAgICAgZG9jdW1lbnQuY29va2llID0gYCR7TkVYVF9ITVJfUkVGUkVTSF9IQVNIX0NPT0tJRX09JHtvYmouaGFzaH1gXG5cbiAgICAgIGlmIChSdW50aW1lRXJyb3JIYW5kbGVyLmhhZFJ1bnRpbWVFcnJvcikge1xuICAgICAgICBpZiAocmVsb2FkaW5nKSByZXR1cm5cbiAgICAgICAgcmVsb2FkaW5nID0gdHJ1ZVxuICAgICAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpXG4gICAgICB9XG5cbiAgICAgIHN0YXJ0VHJhbnNpdGlvbigoKSA9PiB7XG4gICAgICAgIHJvdXRlci5obXJSZWZyZXNoKClcbiAgICAgICAgZGlzcGF0Y2hlci5vblJlZnJlc2goKVxuICAgICAgfSlcblxuICAgICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9URVNUX01PREUpIHtcbiAgICAgICAgaWYgKHNlbGYuX19ORVhUX0hNUl9DQikge1xuICAgICAgICAgIHNlbGYuX19ORVhUX0hNUl9DQigpXG4gICAgICAgICAgc2VsZi5fX05FWFRfSE1SX0NCID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjYXNlIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5SRUxPQURfUEFHRToge1xuICAgICAgdHVyYm9wYWNrSG1yPy5vblJlbG9hZFBhZ2UoKVxuICAgICAgc2VuZE1lc3NhZ2UoXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBldmVudDogJ2NsaWVudC1yZWxvYWQtcGFnZScsXG4gICAgICAgICAgY2xpZW50SWQ6IF9fbmV4dERldkNsaWVudElkLFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgaWYgKHJlbG9hZGluZykgcmV0dXJuXG4gICAgICByZWxvYWRpbmcgPSB0cnVlXG4gICAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpXG4gICAgfVxuICAgIGNhc2UgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLkFEREVEX1BBR0U6XG4gICAgY2FzZSBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIuUkVNT1ZFRF9QQUdFOiB7XG4gICAgICB0dXJib3BhY2tIbXI/Lm9uUGFnZUFkZFJlbW92ZSgpXG4gICAgICAvLyBUT0RPLUFQUDogcG90ZW50aWFsbHkgb25seSByZWZyZXNoIGlmIHRoZSBjdXJyZW50bHkgdmlld2VkIHBhZ2Ugd2FzIGFkZGVkL3JlbW92ZWQuXG4gICAgICByZXR1cm4gcm91dGVyLmhtclJlZnJlc2goKVxuICAgIH1cbiAgICBjYXNlIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5TRVJWRVJfRVJST1I6IHtcbiAgICAgIGNvbnN0IHsgZXJyb3JKU09OIH0gPSBvYmpcbiAgICAgIGlmIChlcnJvckpTT04pIHtcbiAgICAgICAgY29uc3QgeyBtZXNzYWdlLCBzdGFjayB9ID0gSlNPTi5wYXJzZShlcnJvckpTT04pXG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpXG4gICAgICAgIGVycm9yLnN0YWNrID0gc3RhY2tcbiAgICAgICAgaGFuZGxlRXJyb3JzKFtlcnJvcl0pXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY2FzZSBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIuREVWX1BBR0VTX01BTklGRVNUX1VQREFURToge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gSG90UmVsb2FkKHtcbiAgYXNzZXRQcmVmaXgsXG4gIGNoaWxkcmVuLFxuICBnbG9iYWxFcnJvcixcbn06IHtcbiAgYXNzZXRQcmVmaXg6IHN0cmluZ1xuICBjaGlsZHJlbjogUmVhY3ROb2RlXG4gIGdsb2JhbEVycm9yOiBHbG9iYWxFcnJvclN0YXRlXG59KSB7XG4gIHVzZUVycm9ySGFuZGxlcihkaXNwYXRjaGVyLm9uVW5oYW5kbGVkRXJyb3IsIGRpc3BhdGNoZXIub25VbmhhbmRsZWRSZWplY3Rpb24pXG5cbiAgY29uc3Qgd2ViU29ja2V0UmVmID0gdXNlV2Vic29ja2V0KGFzc2V0UHJlZml4KVxuXG4gIHVzZVdlYnNvY2tldFBpbmcod2ViU29ja2V0UmVmKVxuICBjb25zdCBzZW5kTWVzc2FnZSA9IHVzZVNlbmRNZXNzYWdlKHdlYlNvY2tldFJlZilcbiAgdXNlRm9yd2FyZENvbnNvbGVMb2cod2ViU29ja2V0UmVmKVxuICBjb25zdCBwcm9jZXNzVHVyYm9wYWNrTWVzc2FnZSA9IHVzZVR1cmJvcGFjayhzZW5kTWVzc2FnZSwgKGVycikgPT5cbiAgICBwZXJmb3JtRnVsbFJlbG9hZChlcnIsIHNlbmRNZXNzYWdlKVxuICApXG5cbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKClcblxuICAvLyBXZSBkb24ndCB3YW50IGFjY2VzcyBvZiB0aGUgcGF0aG5hbWUgZm9yIHRoZSBkZXYgdG9vbHMgdG8gdHJpZ2dlciBhIGR5bmFtaWNcbiAgLy8gYWNjZXNzIChhcyB0aGUgZGV2IG92ZXJsYXkgd2lsbCBuZXZlciBiZSBwcmVzZW50IGluIHByb2R1Y3Rpb24pLlxuICBjb25zdCBwYXRobmFtZSA9IHVzZVVudHJhY2tlZFBhdGhuYW1lKClcbiAgY29uc3QgYXBwSXNyTWFuaWZlc3RSZWYgPSB1c2VSZWY8UmVjb3JkPHN0cmluZywgZmFsc2UgfCBudW1iZXI+Pih7fSlcbiAgY29uc3QgcGF0aG5hbWVSZWYgPSB1c2VSZWYocGF0aG5hbWUpXG5cbiAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9ERVZfSU5ESUNBVE9SKSB7XG4gICAgLy8gdGhpcyBjb25kaXRpb25hbCBpcyBvbmx5IGZvciBkZWFkLWNvZGUgZWxpbWluYXRpb24gd2hpY2hcbiAgICAvLyBpc24ndCBhIHJ1bnRpbWUgY29uZGl0aW9uYWwgb25seSBidWlsZC10aW1lIHNvIGlnbm9yZSBob29rcyBydWxlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIHBhdGhuYW1lUmVmLmN1cnJlbnQgPSBwYXRobmFtZVxuXG4gICAgICBjb25zdCBhcHBJc3JNYW5pZmVzdCA9IGFwcElzck1hbmlmZXN0UmVmLmN1cnJlbnRcblxuICAgICAgaWYgKGFwcElzck1hbmlmZXN0KSB7XG4gICAgICAgIGlmIChwYXRobmFtZSAmJiBwYXRobmFtZSBpbiBhcHBJc3JNYW5pZmVzdCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBkaXNwYXRjaGVyLm9uU3RhdGljSW5kaWNhdG9yKHRydWUpXG4gICAgICAgICAgfSBjYXRjaCAocmVhc29uKSB7XG4gICAgICAgICAgICBsZXQgbWVzc2FnZSA9ICcnXG5cbiAgICAgICAgICAgIGlmIChyZWFzb24gaW5zdGFuY2VvZiBET01FeGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgLy8gTW9zdCBsaWtlbHkgYSBTZWN1cml0eUVycm9yLCBiZWNhdXNlIG9mIGFuIHVuYXZhaWxhYmxlIGxvY2FsU3RvcmFnZVxuICAgICAgICAgICAgICBtZXNzYWdlID0gcmVhc29uLnN0YWNrID8/IHJlYXNvbi5tZXNzYWdlXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgIG1lc3NhZ2UgPSAnRXJyb3I6ICcgKyByZWFzb24ubWVzc2FnZSArICdcXG4nICsgKHJlYXNvbi5zdGFjayA/PyAnJylcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1lc3NhZ2UgPSAnVW5leHBlY3RlZCBFeGNlcHRpb246ICcgKyByZWFzb25cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdbSE1SXSAnICsgbWVzc2FnZSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGlzcGF0Y2hlci5vblN0YXRpY0luZGljYXRvcihmYWxzZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIFtwYXRobmFtZV0pXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHdlYnNvY2tldCA9IHdlYlNvY2tldFJlZi5jdXJyZW50XG4gICAgaWYgKCF3ZWJzb2NrZXQpIHJldHVyblxuXG4gICAgY29uc3QgaGFuZGxlciA9IChldmVudDogTWVzc2FnZUV2ZW50PGFueT4pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZXZlbnQuZGF0YSlcbiAgICAgICAgcHJvY2Vzc01lc3NhZ2UoXG4gICAgICAgICAgb2JqLFxuICAgICAgICAgIHNlbmRNZXNzYWdlLFxuICAgICAgICAgIHByb2Nlc3NUdXJib3BhY2tNZXNzYWdlLFxuICAgICAgICAgIHJvdXRlcixcbiAgICAgICAgICBhcHBJc3JNYW5pZmVzdFJlZixcbiAgICAgICAgICBwYXRobmFtZVJlZlxuICAgICAgICApXG4gICAgICB9IGNhdGNoIChlcnI6IHVua25vd24pIHtcbiAgICAgICAgcmVwb3J0SW52YWxpZEhtck1lc3NhZ2UoZXZlbnQsIGVycilcbiAgICAgIH1cbiAgICB9XG5cbiAgICB3ZWJzb2NrZXQuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGhhbmRsZXIpXG4gICAgcmV0dXJuICgpID0+IHdlYnNvY2tldC5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgaGFuZGxlcilcbiAgfSwgW1xuICAgIHNlbmRNZXNzYWdlLFxuICAgIHJvdXRlcixcbiAgICB3ZWJTb2NrZXRSZWYsXG4gICAgcHJvY2Vzc1R1cmJvcGFja01lc3NhZ2UsXG4gICAgYXBwSXNyTWFuaWZlc3RSZWYsXG4gIF0pXG4gIHJldHVybiAoXG4gICAgPEFwcERldk92ZXJsYXlFcnJvckJvdW5kYXJ5IGdsb2JhbEVycm9yPXtnbG9iYWxFcnJvcn0+XG4gICAgICA8UmVwbGF5U3NyT25seUVycm9ycyBvbkJsb2NraW5nRXJyb3I9e2Rpc3BhdGNoZXIub3BlbkVycm9yT3ZlcmxheX0gLz5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L0FwcERldk92ZXJsYXlFcnJvckJvdW5kYXJ5PlxuICApXG59XG4iXSwibmFtZXMiOlsiSG90UmVsb2FkIiwid2FpdEZvcldlYnBhY2tSdW50aW1lSG90VXBkYXRlIiwibW9zdFJlY2VudENvbXBpbGF0aW9uSGFzaCIsIl9fbmV4dERldkNsaWVudElkIiwiTWF0aCIsInJvdW5kIiwicmFuZG9tIiwiRGF0ZSIsIm5vdyIsInJlbG9hZGluZyIsIndlYnBhY2tTdGFydE1zU2luY2VFcG9jaCIsInR1cmJvcGFja0htciIsInByb2Nlc3MiLCJlbnYiLCJUVVJCT1BBQ0siLCJUdXJib3BhY2tIbXIiLCJwZW5kaW5nSG90VXBkYXRlV2VicGFjayIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVzb2x2ZVBlbmRpbmdIb3RVcGRhdGVXZWJwYWNrIiwic2V0UGVuZGluZ0hvdFVwZGF0ZVdlYnBhY2siLCJoYW5kbGVBdmFpbGFibGVIYXNoIiwiaGFzaCIsImlzVXBkYXRlQXZhaWxhYmxlIiwiX193ZWJwYWNrX2hhc2hfXyIsImNhbkFwcGx5VXBkYXRlcyIsIm1vZHVsZSIsImhvdCIsInN0YXR1cyIsImFmdGVyQXBwbHlVcGRhdGVzIiwiZm4iLCJoYW5kbGVyIiwicmVtb3ZlU3RhdHVzSGFuZGxlciIsImFkZFN0YXR1c0hhbmRsZXIiLCJwZXJmb3JtRnVsbFJlbG9hZCIsImVyciIsInNlbmRNZXNzYWdlIiwic3RhY2tUcmFjZSIsInN0YWNrIiwic3BsaXQiLCJzbGljZSIsImpvaW4iLCJtZXNzYWdlIiwiSlNPTiIsInN0cmluZ2lmeSIsImV2ZW50IiwiaGFkUnVudGltZUVycm9yIiwiUnVudGltZUVycm9ySGFuZGxlciIsImRlcGVuZGVuY3lDaGFpbiIsInVuZGVmaW5lZCIsIndpbmRvdyIsImxvY2F0aW9uIiwicmVsb2FkIiwidHJ5QXBwbHlVcGRhdGVzV2VicGFjayIsImRpc3BhdGNoZXIiLCJvbkJ1aWxkT2siLCJyZXBvcnRIbXJMYXRlbmN5IiwiaGFuZGxlQXBwbHlVcGRhdGVzIiwidXBkYXRlZE1vZHVsZXMiLCJjb25zb2xlIiwid2FybiIsIlJFQUNUX1JFRlJFU0hfRlVMTF9SRUxPQUQiLCJSRUFDVF9SRUZSRVNIX0ZVTExfUkVMT0FEX0ZST01fRVJST1IiLCJvblJlZnJlc2giLCJfX05FWFRfVEVTVF9NT0RFIiwic2VsZiIsIl9fTkVYVF9ITVJfQ0IiLCJjaGVjayIsInRoZW4iLCJvbkJlZm9yZVJlZnJlc2giLCJhcHBseSIsInByb2Nlc3NNZXNzYWdlIiwib2JqIiwicHJvY2Vzc1R1cmJvcGFja01lc3NhZ2UiLCJyb3V0ZXIiLCJhcHBJc3JNYW5pZmVzdFJlZiIsInBhdGhuYW1lUmVmIiwiaGFuZGxlRXJyb3JzIiwiZXJyb3JzIiwiZm9ybWF0dGVkIiwiZm9ybWF0V2VicGFja01lc3NhZ2VzIiwid2FybmluZ3MiLCJvbkJ1aWxkRXJyb3IiLCJpIiwibGVuZ3RoIiwiZXJyb3IiLCJzdHJpcEFuc2kiLCJoYW5kbGVIb3RVcGRhdGUiLCJobXJVcGRhdGUiLCJvbkJ1aWx0Iiwic3RhcnRNc1NpbmNlRXBvY2giLCJlbmRNc1NpbmNlRXBvY2giLCJoYXNVcGRhdGVzIiwiYWN0aW9uIiwiSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSIiwiSVNSX01BTklGRVNUIiwiX19ORVhUX0RFVl9JTkRJQ0FUT1IiLCJjdXJyZW50IiwiZGF0YSIsIm9uU3RhdGljSW5kaWNhdG9yIiwiQlVJTERJTkciLCJidWlsZGluZ0luZGljYXRvclNob3ciLCJvbkJ1aWxkaW5nIiwibG9nIiwiQlVJTFQiLCJTWU5DIiwiYnVpbGRpbmdJbmRpY2F0b3JIaWRlIiwib25WZXJzaW9uSW5mbyIsInZlcnNpb25JbmZvIiwiZGVidWciLCJvbkRlYnVnSW5mbyIsIm9uRGV2SW5kaWNhdG9yIiwiZGV2SW5kaWNhdG9yIiwiaGFzRXJyb3JzIiwiQm9vbGVhbiIsImVycm9yQ291bnQiLCJjbGllbnRJZCIsImhhc1dhcm5pbmdzIiwid2FybmluZ0NvdW50IiwiZm9ybWF0dGVkTWVzc2FnZXMiLCJUVVJCT1BBQ0tfQ09OTkVDVEVEIiwidHlwZSIsInNlc3Npb25JZCIsIlRVUkJPUEFDS19NRVNTQUdFIiwib25UdXJib3BhY2tNZXNzYWdlIiwiU0VSVkVSX0NPTVBPTkVOVF9DSEFOR0VTIiwib25TZXJ2ZXJDb21wb25lbnRDaGFuZ2VzIiwiZG9jdW1lbnQiLCJjb29raWUiLCJORVhUX0hNUl9SRUZSRVNIX0hBU0hfQ09PS0lFIiwic3RhcnRUcmFuc2l0aW9uIiwiaG1yUmVmcmVzaCIsIlJFTE9BRF9QQUdFIiwib25SZWxvYWRQYWdlIiwiQURERURfUEFHRSIsIlJFTU9WRURfUEFHRSIsIm9uUGFnZUFkZFJlbW92ZSIsIlNFUlZFUl9FUlJPUiIsImVycm9ySlNPTiIsInBhcnNlIiwiRXJyb3IiLCJERVZfUEFHRVNfTUFOSUZFU1RfVVBEQVRFIiwiYXNzZXRQcmVmaXgiLCJjaGlsZHJlbiIsImdsb2JhbEVycm9yIiwidXNlRXJyb3JIYW5kbGVyIiwib25VbmhhbmRsZWRFcnJvciIsIm9uVW5oYW5kbGVkUmVqZWN0aW9uIiwid2ViU29ja2V0UmVmIiwidXNlV2Vic29ja2V0IiwidXNlV2Vic29ja2V0UGluZyIsInVzZVNlbmRNZXNzYWdlIiwidXNlRm9yd2FyZENvbnNvbGVMb2ciLCJ1c2VUdXJib3BhY2siLCJ1c2VSb3V0ZXIiLCJwYXRobmFtZSIsInVzZVVudHJhY2tlZFBhdGhuYW1lIiwidXNlUmVmIiwidXNlRWZmZWN0IiwiYXBwSXNyTWFuaWZlc3QiLCJyZWFzb24iLCJET01FeGNlcHRpb24iLCJ3ZWJzb2NrZXQiLCJyZXBvcnRJbnZhbGlkSG1yTWVzc2FnZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiQXBwRGV2T3ZlcmxheUVycm9yQm91bmRhcnkiLCJSZXBsYXlTc3JPbmx5RXJyb3JzIiwib25CbG9ja2luZ0Vycm9yIiwib3BlbkVycm9yT3ZlcmxheSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/dev/hot-reloader/app/hot-reloader-app.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/dev/hot-reloader/app/use-websocket.js":
|
||
/*!*****************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/dev/hot-reloader/app/use-websocket.js ***!
|
||
\*****************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n useSendMessage: function() {\n return useSendMessage;\n },\n useTurbopack: function() {\n return useTurbopack;\n },\n useWebsocket: function() {\n return useWebsocket;\n },\n useWebsocketPing: function() {\n return useWebsocketPing;\n }\n});\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../../../../shared/lib/app-router-context.shared-runtime */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js\");\nconst _getsocketurl = __webpack_require__(/*! ../get-socket-url */ \"(app-pages-browser)/./node_modules/next/dist/client/dev/hot-reloader/get-socket-url.js\");\nfunction useWebsocket(assetPrefix) {\n const webSocketRef = (0, _react.useRef)(undefined);\n (0, _react.useEffect)(()=>{\n if (webSocketRef.current) {\n return;\n }\n const url = (0, _getsocketurl.getSocketUrl)(assetPrefix);\n webSocketRef.current = new window.WebSocket(\"\" + url + \"/_next/webpack-hmr\");\n }, [\n assetPrefix\n ]);\n return webSocketRef;\n}\nfunction useSendMessage(webSocketRef) {\n const sendMessage = (0, _react.useCallback)((data)=>{\n const socket = webSocketRef.current;\n if (!socket || socket.readyState !== socket.OPEN) {\n return;\n }\n return socket.send(data);\n }, [\n webSocketRef\n ]);\n return sendMessage;\n}\nfunction useTurbopack(sendMessage, onUpdateError) {\n const turbopackState = (0, _react.useRef)({\n init: false,\n // Until the dynamic import resolves, queue any turbopack messages which will be replayed.\n queue: [],\n callback: undefined\n });\n const processTurbopackMessage = (0, _react.useCallback)((msg)=>{\n const { callback, queue } = turbopackState.current;\n if (callback) {\n callback(msg);\n } else {\n queue.push(msg);\n }\n }, []);\n (0, _react.useEffect)(()=>{\n const { current: initCurrent } = turbopackState;\n // TODO(WEB-1589): only install if `process.turbopack` set.\n if (initCurrent.init) {\n return;\n }\n initCurrent.init = true;\n Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! @vercel/turbopack-ecmascript-runtime/browser/dev/hmr-client/hmr-client.ts */ \"(app-pages-browser)/./node_modules/next/dist/client/dev/noop-turbopack-hmr.js\"))).then((param)=>{\n let { connect } = param;\n const { current } = turbopackState;\n connect({\n addMessageListener (cb) {\n current.callback = cb;\n // Replay all Turbopack messages before we were able to establish the HMR client.\n for (const msg of current.queue){\n cb(msg);\n }\n current.queue = undefined;\n },\n sendMessage,\n onUpdateError\n });\n });\n }, [\n sendMessage,\n onUpdateError\n ]);\n return processTurbopackMessage;\n}\nfunction useWebsocketPing(websocketRef) {\n _s();\n const sendMessage = useSendMessage(websocketRef);\n const { tree } = (0, _react.useContext)(_approutercontextsharedruntime.GlobalLayoutRouterContext);\n (0, _react.useEffect)(()=>{\n // Never send pings when using Turbopack as it's not used.\n // Pings were originally used to keep track of active routes in on-demand-entries with webpack.\n if (false) {}\n // Taken from on-demand-entries-client.js\n const interval = setInterval(()=>{\n sendMessage(JSON.stringify({\n event: 'ping',\n tree,\n appDirRoute: true\n }));\n }, 2500);\n return ()=>clearInterval(interval);\n }, [\n tree,\n sendMessage\n ]);\n}\n_s(useWebsocketPing, \"wUse5NG7XMV1uhKK1kY0LLDje8k=\", false, function() {\n return [\n useSendMessage\n ];\n});\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=use-websocket.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2Rldi9ob3QtcmVsb2FkZXIvYXBwL3VzZS13ZWJzb2NrZXQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBcUJnQkEsY0FBYztlQUFkQTs7SUFjQUMsWUFBWTtlQUFaQTs7SUE5QkFDLFlBQVk7ZUFBWkE7O0lBc0ZBQyxnQkFBZ0I7ZUFBaEJBOzs7bUNBM0YyQzsyREFDakI7MENBQ2I7QUFHdEIsU0FBU0QsYUFBYUUsV0FBbUI7SUFDOUMsTUFBTUMsZUFBZUMsQ0FBQUEsR0FBQUEsT0FBQUEsTUFBTSxFQUFZQztJQUV2Q0MsQ0FBQUEsR0FBQUEsT0FBQUEsU0FBQUEsRUFBVTtRQUNSLElBQUlILGFBQWFJLE9BQU8sRUFBRTtZQUN4QjtRQUNGO1FBRUEsTUFBTUMsTUFBTUMsQ0FBQUEsR0FBQUEsY0FBQUEsWUFBQUEsRUFBYVA7UUFFekJDLGFBQWFJLE9BQU8sR0FBRyxJQUFJRyxPQUFPQyxTQUFTLENBQUUsS0FBRUgsTUFBSTtJQUNyRCxHQUFHO1FBQUNOO0tBQVk7SUFFaEIsT0FBT0M7QUFDVDtBQUVPLFNBQVNMLGVBQWVLLFlBQTZDO0lBQzFFLE1BQU1TLGNBQWNDLENBQUFBLEdBQUFBLE9BQUFBLFdBQUFBLEVBQ2xCLENBQUNDO1FBQ0MsTUFBTUMsU0FBU1osYUFBYUksT0FBTztRQUNuQyxJQUFJLENBQUNRLFVBQVVBLE9BQU9DLFVBQVUsS0FBS0QsT0FBT0UsSUFBSSxFQUFFO1lBQ2hEO1FBQ0Y7UUFDQSxPQUFPRixPQUFPRyxJQUFJLENBQUNKO0lBQ3JCLEdBQ0E7UUFBQ1g7S0FBYTtJQUVoQixPQUFPUztBQUNUO0FBRU8sU0FBU2IsYUFDZGEsV0FBOEMsRUFDOUNPLGFBQXFDO0lBRXJDLE1BQU1DLGlCQUFpQmhCLENBQUFBLEdBQUFBLE9BQUFBLE1BQUFBLEVBSXBCO1FBQ0RpQixNQUFNO1FBQ04sMEZBQTBGO1FBQzFGQyxPQUFPLEVBQUU7UUFDVEMsVUFBVWxCO0lBQ1o7SUFFQSxNQUFNbUIsMEJBQTBCWCxDQUFBQSxHQUFBQSxPQUFBQSxXQUFBQSxFQUFZLENBQUNZO1FBQzNDLE1BQU0sRUFBRUYsUUFBUSxFQUFFRCxLQUFLLEVBQUUsR0FBR0YsZUFBZWIsT0FBTztRQUNsRCxJQUFJZ0IsVUFBVTtZQUNaQSxTQUFTRTtRQUNYLE9BQU87WUFDTEgsTUFBT0ksSUFBSSxDQUFDRDtRQUNkO0lBQ0YsR0FBRyxFQUFFO0lBRUxuQixDQUFBQSxHQUFBQSxPQUFBQSxTQUFBQSxFQUFVO1FBQ1IsTUFBTSxFQUFFQyxTQUFTb0IsV0FBVyxFQUFFLEdBQUdQO1FBQ2pDLDJEQUEyRDtRQUMzRCxJQUFJTyxZQUFZTixJQUFJLEVBQUU7WUFDcEI7UUFDRjtRQUNBTSxZQUFZTixJQUFJLEdBQUc7NkVBRW5CLG1CQUNFLENBQ0Esb0tBQ0FPLElBQUksQ0FBQztnQkFBQyxFQUFFQyxPQUFPLEVBQUU7WUFDakIsTUFBTSxFQUFFdEIsT0FBTyxFQUFFLEdBQUdhO1lBQ3BCUyxRQUFRO2dCQUNOQyxvQkFBbUJDLEVBQXdDO29CQUN6RHhCLFFBQVFnQixRQUFRLEdBQUdRO29CQUVuQixpRkFBaUY7b0JBQ2pGLEtBQUssTUFBTU4sT0FBT2xCLFFBQVFlLEtBQUssQ0FBRzt3QkFDaENTLEdBQUdOO29CQUNMO29CQUNBbEIsUUFBUWUsS0FBSyxHQUFHakI7Z0JBQ2xCO2dCQUNBTztnQkFDQU87WUFDRjtRQUNGO0lBQ0YsR0FBRztRQUFDUDtRQUFhTztLQUFjO0lBRS9CLE9BQU9LO0FBQ1Q7QUFFTywwQkFDTFEsWUFBNkM7O0lBRTdDLE1BQU1wQiw2QkFBNkJvQjtJQUNuQyxNQUFNLEVBQUVDLElBQUksRUFBRSxHQUFHQyxDQUFBQSxHQUFBQSxPQUFBQSxVQUFBQSxFQUFXQywrQkFBQUEseUJBQXlCO0lBRXJEN0IsQ0FBQUEsR0FBQUEsT0FBQUEsU0FBQUEsRUFBVTtRQUNSLDBEQUEwRDtRQUMxRCwrRkFBK0Y7UUFDL0YsSUFBSThCLEtBQXFCLEVBQUUsRUFFMUI7UUFFRCx5Q0FBeUM7UUFDekMsTUFBTUcsV0FBV0MsWUFBWTtZQUMzQjVCLFlBQ0U2QixLQUFLQyxTQUFTLENBQUM7Z0JBQ2JDLE9BQU87Z0JBQ1BWO2dCQUNBVyxhQUFhO1lBQ2Y7UUFFSixHQUFHO1FBQ0gsT0FBTyxJQUFNQyxjQUFjTjtJQUM3QixHQUFHO1FBQUNOO1FBQU1yQjtLQUFZO0FBQ3hCO0dBekJnQlg7O1FBR01IIiwic291cmNlcyI6WyIvc3JjL2NsaWVudC9kZXYvaG90LXJlbG9hZGVyL2FwcC91c2Utd2Vic29ja2V0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VDb250ZXh0LCB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgR2xvYmFsTGF5b3V0Um91dGVyQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9saWIvYXBwLXJvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHsgZ2V0U29ja2V0VXJsIH0gZnJvbSAnLi4vZ2V0LXNvY2tldC11cmwnXG5pbXBvcnQgdHlwZSB7IFR1cmJvcGFja01zZ1RvQnJvd3NlciB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZlci9kZXYvaG90LXJlbG9hZGVyLXR5cGVzJ1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlV2Vic29ja2V0KGFzc2V0UHJlZml4OiBzdHJpbmcpIHtcbiAgY29uc3Qgd2ViU29ja2V0UmVmID0gdXNlUmVmPFdlYlNvY2tldD4odW5kZWZpbmVkKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHdlYlNvY2tldFJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBnZXRTb2NrZXRVcmwoYXNzZXRQcmVmaXgpXG5cbiAgICB3ZWJTb2NrZXRSZWYuY3VycmVudCA9IG5ldyB3aW5kb3cuV2ViU29ja2V0KGAke3VybH0vX25leHQvd2VicGFjay1obXJgKVxuICB9LCBbYXNzZXRQcmVmaXhdKVxuXG4gIHJldHVybiB3ZWJTb2NrZXRSZWZcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVNlbmRNZXNzYWdlKHdlYlNvY2tldFJlZjogUmV0dXJuVHlwZTx0eXBlb2YgdXNlV2Vic29ja2V0Pikge1xuICBjb25zdCBzZW5kTWVzc2FnZSA9IHVzZUNhbGxiYWNrKFxuICAgIChkYXRhOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHNvY2tldCA9IHdlYlNvY2tldFJlZi5jdXJyZW50XG4gICAgICBpZiAoIXNvY2tldCB8fCBzb2NrZXQucmVhZHlTdGF0ZSAhPT0gc29ja2V0Lk9QRU4pIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICByZXR1cm4gc29ja2V0LnNlbmQoZGF0YSlcbiAgICB9LFxuICAgIFt3ZWJTb2NrZXRSZWZdXG4gIClcbiAgcmV0dXJuIHNlbmRNZXNzYWdlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VUdXJib3BhY2soXG4gIHNlbmRNZXNzYWdlOiBSZXR1cm5UeXBlPHR5cGVvZiB1c2VTZW5kTWVzc2FnZT4sXG4gIG9uVXBkYXRlRXJyb3I6IChlcnI6IHVua25vd24pID0+IHZvaWRcbikge1xuICBjb25zdCB0dXJib3BhY2tTdGF0ZSA9IHVzZVJlZjx7XG4gICAgaW5pdDogYm9vbGVhblxuICAgIHF1ZXVlOiBBcnJheTxUdXJib3BhY2tNc2dUb0Jyb3dzZXI+IHwgdW5kZWZpbmVkXG4gICAgY2FsbGJhY2s6ICgobXNnOiBUdXJib3BhY2tNc2dUb0Jyb3dzZXIpID0+IHZvaWQpIHwgdW5kZWZpbmVkXG4gIH0+KHtcbiAgICBpbml0OiBmYWxzZSxcbiAgICAvLyBVbnRpbCB0aGUgZHluYW1pYyBpbXBvcnQgcmVzb2x2ZXMsIHF1ZXVlIGFueSB0dXJib3BhY2sgbWVzc2FnZXMgd2hpY2ggd2lsbCBiZSByZXBsYXllZC5cbiAgICBxdWV1ZTogW10sXG4gICAgY2FsbGJhY2s6IHVuZGVmaW5lZCxcbiAgfSlcblxuICBjb25zdCBwcm9jZXNzVHVyYm9wYWNrTWVzc2FnZSA9IHVzZUNhbGxiYWNrKChtc2c6IFR1cmJvcGFja01zZ1RvQnJvd3NlcikgPT4ge1xuICAgIGNvbnN0IHsgY2FsbGJhY2ssIHF1ZXVlIH0gPSB0dXJib3BhY2tTdGF0ZS5jdXJyZW50XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjayhtc2cpXG4gICAgfSBlbHNlIHtcbiAgICAgIHF1ZXVlIS5wdXNoKG1zZylcbiAgICB9XG4gIH0sIFtdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgeyBjdXJyZW50OiBpbml0Q3VycmVudCB9ID0gdHVyYm9wYWNrU3RhdGVcbiAgICAvLyBUT0RPKFdFQi0xNTg5KTogb25seSBpbnN0YWxsIGlmIGBwcm9jZXNzLnR1cmJvcGFja2Agc2V0LlxuICAgIGlmIChpbml0Q3VycmVudC5pbml0KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaW5pdEN1cnJlbnQuaW5pdCA9IHRydWVcblxuICAgIGltcG9ydChcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgcmVxdWlyZXMgXCJtb2R1bGVSZXNvbHV0aW9uXCI6IFwibm9kZTE2XCIgaW4gdHNjb25maWcuanNvbiBhbmQgbm90IC50cyBleHRlbnNpb25cbiAgICAgICdAdmVyY2VsL3R1cmJvcGFjay1lY21hc2NyaXB0LXJ1bnRpbWUvYnJvd3Nlci9kZXYvaG1yLWNsaWVudC9obXItY2xpZW50LnRzJ1xuICAgICkudGhlbigoeyBjb25uZWN0IH0pID0+IHtcbiAgICAgIGNvbnN0IHsgY3VycmVudCB9ID0gdHVyYm9wYWNrU3RhdGVcbiAgICAgIGNvbm5lY3Qoe1xuICAgICAgICBhZGRNZXNzYWdlTGlzdGVuZXIoY2I6IChtc2c6IFR1cmJvcGFja01zZ1RvQnJvd3NlcikgPT4gdm9pZCkge1xuICAgICAgICAgIGN1cnJlbnQuY2FsbGJhY2sgPSBjYlxuXG4gICAgICAgICAgLy8gUmVwbGF5IGFsbCBUdXJib3BhY2sgbWVzc2FnZXMgYmVmb3JlIHdlIHdlcmUgYWJsZSB0byBlc3RhYmxpc2ggdGhlIEhNUiBjbGllbnQuXG4gICAgICAgICAgZm9yIChjb25zdCBtc2cgb2YgY3VycmVudC5xdWV1ZSEpIHtcbiAgICAgICAgICAgIGNiKG1zZylcbiAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudC5xdWV1ZSA9IHVuZGVmaW5lZFxuICAgICAgICB9LFxuICAgICAgICBzZW5kTWVzc2FnZSxcbiAgICAgICAgb25VcGRhdGVFcnJvcixcbiAgICAgIH0pXG4gICAgfSlcbiAgfSwgW3NlbmRNZXNzYWdlLCBvblVwZGF0ZUVycm9yXSlcblxuICByZXR1cm4gcHJvY2Vzc1R1cmJvcGFja01lc3NhZ2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVdlYnNvY2tldFBpbmcoXG4gIHdlYnNvY2tldFJlZjogUmV0dXJuVHlwZTx0eXBlb2YgdXNlV2Vic29ja2V0PlxuKSB7XG4gIGNvbnN0IHNlbmRNZXNzYWdlID0gdXNlU2VuZE1lc3NhZ2Uod2Vic29ja2V0UmVmKVxuICBjb25zdCB7IHRyZWUgfSA9IHVzZUNvbnRleHQoR2xvYmFsTGF5b3V0Um91dGVyQ29udGV4dClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIE5ldmVyIHNlbmQgcGluZ3Mgd2hlbiB1c2luZyBUdXJib3BhY2sgYXMgaXQncyBub3QgdXNlZC5cbiAgICAvLyBQaW5ncyB3ZXJlIG9yaWdpbmFsbHkgdXNlZCB0byBrZWVwIHRyYWNrIG9mIGFjdGl2ZSByb3V0ZXMgaW4gb24tZGVtYW5kLWVudHJpZXMgd2l0aCB3ZWJwYWNrLlxuICAgIGlmIChwcm9jZXNzLmVudi5UVVJCT1BBQ0spIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIFRha2VuIGZyb20gb24tZGVtYW5kLWVudHJpZXMtY2xpZW50LmpzXG4gICAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBzZW5kTWVzc2FnZShcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGV2ZW50OiAncGluZycsXG4gICAgICAgICAgdHJlZSxcbiAgICAgICAgICBhcHBEaXJSb3V0ZTogdHJ1ZSxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9LCAyNTAwKVxuICAgIHJldHVybiAoKSA9PiBjbGVhckludGVydmFsKGludGVydmFsKVxuICB9LCBbdHJlZSwgc2VuZE1lc3NhZ2VdKVxufVxuIl0sIm5hbWVzIjpbInVzZVNlbmRNZXNzYWdlIiwidXNlVHVyYm9wYWNrIiwidXNlV2Vic29ja2V0IiwidXNlV2Vic29ja2V0UGluZyIsImFzc2V0UHJlZml4Iiwid2ViU29ja2V0UmVmIiwidXNlUmVmIiwidW5kZWZpbmVkIiwidXNlRWZmZWN0IiwiY3VycmVudCIsInVybCIsImdldFNvY2tldFVybCIsIndpbmRvdyIsIldlYlNvY2tldCIsInNlbmRNZXNzYWdlIiwidXNlQ2FsbGJhY2siLCJkYXRhIiwic29ja2V0IiwicmVhZHlTdGF0ZSIsIk9QRU4iLCJzZW5kIiwib25VcGRhdGVFcnJvciIsInR1cmJvcGFja1N0YXRlIiwiaW5pdCIsInF1ZXVlIiwiY2FsbGJhY2siLCJwcm9jZXNzVHVyYm9wYWNrTWVzc2FnZSIsIm1zZyIsInB1c2giLCJpbml0Q3VycmVudCIsInRoZW4iLCJjb25uZWN0IiwiYWRkTWVzc2FnZUxpc3RlbmVyIiwiY2IiLCJ3ZWJzb2NrZXRSZWYiLCJ0cmVlIiwidXNlQ29udGV4dCIsIkdsb2JhbExheW91dFJvdXRlckNvbnRleHQiLCJwcm9jZXNzIiwiZW52IiwiVFVSQk9QQUNLIiwiaW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsIkpTT04iLCJzdHJpbmdpZnkiLCJldmVudCIsImFwcERpclJvdXRlIiwiY2xlYXJJbnRlcnZhbCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/dev/hot-reloader/app/use-websocket.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/dev/hot-reloader/get-socket-url.js":
|
||
/*!**************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/dev/hot-reloader/get-socket-url.js ***!
|
||
\**************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getSocketUrl\", ({\n enumerable: true,\n get: function() {\n return getSocketUrl;\n }\n}));\nconst _normalizedassetprefix = __webpack_require__(/*! ../../../shared/lib/normalized-asset-prefix */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/normalized-asset-prefix.js\");\nfunction getSocketProtocol(assetPrefix) {\n let protocol = window.location.protocol;\n try {\n // assetPrefix is a url\n protocol = new URL(assetPrefix).protocol;\n } catch (e) {}\n return protocol === 'http:' ? 'ws:' : 'wss:';\n}\nfunction getSocketUrl(assetPrefix) {\n const prefix = (0, _normalizedassetprefix.normalizedAssetPrefix)(assetPrefix);\n const protocol = getSocketProtocol(assetPrefix || '');\n if (URL.canParse(prefix)) {\n // since normalized asset prefix is ensured to be a URL format,\n // we can safely replace the protocol\n return prefix.replace(/^http/, 'ws');\n }\n const { hostname, port } = window.location;\n return protocol + \"//\" + hostname + (port ? \":\" + port : '') + prefix;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=get-socket-url.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2Rldi9ob3QtcmVsb2FkZXIvZ2V0LXNvY2tldC11cmwuanMiLCJtYXBwaW5ncyI6Ijs7OztnREFhZ0JBOzs7ZUFBQUE7OzttREFic0I7QUFFdEMsU0FBU0Msa0JBQWtCQyxXQUFtQjtJQUM1QyxJQUFJQyxXQUFXQyxPQUFPQyxRQUFRLENBQUNGLFFBQVE7SUFFdkMsSUFBSTtRQUNGLHVCQUF1QjtRQUN2QkEsV0FBVyxJQUFJRyxJQUFJSixhQUFhQyxRQUFRO0lBQzFDLEVBQUUsVUFBTSxDQUFDO0lBRVQsT0FBT0EsYUFBYSxVQUFVLFFBQVE7QUFDeEM7QUFFTyxTQUFTSCxhQUFhRSxXQUErQjtJQUMxRCxNQUFNSyxTQUFTQyxDQUFBQSxHQUFBQSx1QkFBQUEscUJBQUFBLEVBQXNCTjtJQUNyQyxNQUFNQyxXQUFXRixrQkFBa0JDLGVBQWU7SUFFbEQsSUFBSUksSUFBSUcsUUFBUSxDQUFDRixTQUFTO1FBQ3hCLCtEQUErRDtRQUMvRCxxQ0FBcUM7UUFDckMsT0FBT0EsT0FBT0csT0FBTyxDQUFDLFNBQVM7SUFDakM7SUFFQSxNQUFNLEVBQUVDLFFBQVEsRUFBRUMsSUFBSSxFQUFFLEdBQUdSLE9BQU9DLFFBQVE7SUFDMUMsT0FBVUYsV0FBUyxPQUFJUSxXQUFXQyxDQUFBQSxPQUFRLE1BQUdBLE9BQVMsR0FBQyxHQUFJTDtBQUM3RCIsInNvdXJjZXMiOlsiL2hvbWUvc3JjL2NsaWVudC9kZXYvaG90LXJlbG9hZGVyL2dldC1zb2NrZXQtdXJsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG5vcm1hbGl6ZWRBc3NldFByZWZpeCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9saWIvbm9ybWFsaXplZC1hc3NldC1wcmVmaXgnXG5cbmZ1bmN0aW9uIGdldFNvY2tldFByb3RvY29sKGFzc2V0UHJlZml4OiBzdHJpbmcpOiBzdHJpbmcge1xuICBsZXQgcHJvdG9jb2wgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2xcblxuICB0cnkge1xuICAgIC8vIGFzc2V0UHJlZml4IGlzIGEgdXJsXG4gICAgcHJvdG9jb2wgPSBuZXcgVVJMKGFzc2V0UHJlZml4KS5wcm90b2NvbFxuICB9IGNhdGNoIHt9XG5cbiAgcmV0dXJuIHByb3RvY29sID09PSAnaHR0cDonID8gJ3dzOicgOiAnd3NzOidcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNvY2tldFVybChhc3NldFByZWZpeDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgY29uc3QgcHJlZml4ID0gbm9ybWFsaXplZEFzc2V0UHJlZml4KGFzc2V0UHJlZml4KVxuICBjb25zdCBwcm90b2NvbCA9IGdldFNvY2tldFByb3RvY29sKGFzc2V0UHJlZml4IHx8ICcnKVxuXG4gIGlmIChVUkwuY2FuUGFyc2UocHJlZml4KSkge1xuICAgIC8vIHNpbmNlIG5vcm1hbGl6ZWQgYXNzZXQgcHJlZml4IGlzIGVuc3VyZWQgdG8gYmUgYSBVUkwgZm9ybWF0LFxuICAgIC8vIHdlIGNhbiBzYWZlbHkgcmVwbGFjZSB0aGUgcHJvdG9jb2xcbiAgICByZXR1cm4gcHJlZml4LnJlcGxhY2UoL15odHRwLywgJ3dzJylcbiAgfVxuXG4gIGNvbnN0IHsgaG9zdG5hbWUsIHBvcnQgfSA9IHdpbmRvdy5sb2NhdGlvblxuICByZXR1cm4gYCR7cHJvdG9jb2x9Ly8ke2hvc3RuYW1lfSR7cG9ydCA/IGA6JHtwb3J0fWAgOiAnJ30ke3ByZWZpeH1gXG59XG4iXSwibmFtZXMiOlsiZ2V0U29ja2V0VXJsIiwiZ2V0U29ja2V0UHJvdG9jb2wiLCJhc3NldFByZWZpeCIsInByb3RvY29sIiwid2luZG93IiwibG9jYXRpb24iLCJVUkwiLCJwcmVmaXgiLCJub3JtYWxpemVkQXNzZXRQcmVmaXgiLCJjYW5QYXJzZSIsInJlcGxhY2UiLCJob3N0bmFtZSIsInBvcnQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/dev/hot-reloader/get-socket-url.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/dev/hot-reloader/shared.js":
|
||
/*!******************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/dev/hot-reloader/shared.js ***!
|
||
\******************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n REACT_REFRESH_FULL_RELOAD: function() {\n return REACT_REFRESH_FULL_RELOAD;\n },\n REACT_REFRESH_FULL_RELOAD_FROM_ERROR: function() {\n return REACT_REFRESH_FULL_RELOAD_FROM_ERROR;\n },\n reportInvalidHmrMessage: function() {\n return reportInvalidHmrMessage;\n }\n});\nconst REACT_REFRESH_FULL_RELOAD = '[Fast Refresh] performing full reload\\n\\n' + \"Fast Refresh will perform a full reload when you edit a file that's imported by modules outside of the React rendering tree.\\n\" + 'You might have a file which exports a React component but also exports a value that is imported by a non-React component file.\\n' + 'Consider migrating the non-React component export to a separate file and importing it into both files.\\n\\n' + 'It is also possible the parent component of the component you edited is a class component, which disables Fast Refresh.\\n' + 'Fast Refresh requires at least one parent function component in your React tree.';\nconst REACT_REFRESH_FULL_RELOAD_FROM_ERROR = '[Fast Refresh] performing full reload because your application had an unrecoverable error';\nfunction reportInvalidHmrMessage(message, err) {\n console.warn('[HMR] Invalid message: ' + JSON.stringify(message) + '\\n' + (err instanceof Error && (err == null ? void 0 : err.stack) || ''));\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=shared.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2Rldi9ob3QtcmVsb2FkZXIvc2hhcmVkLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQUVhQSx5QkFBeUI7ZUFBekJBOztJQVFBQyxvQ0FBb0M7ZUFBcENBOztJQUdHQyx1QkFBdUI7ZUFBdkJBOzs7QUFYVCxNQUFNRiw0QkFDWCw4Q0FDQSxtSUFDQSxxSUFDQSwrR0FDQSw4SEFDQTtBQUVLLE1BQU1DLHVDQUNYO0FBRUssU0FBU0Msd0JBQ2RDLE9BQWlELEVBQ2pEQyxHQUFZO0lBRVpDLFFBQVFDLElBQUksQ0FDViw0QkFDRUMsS0FBS0MsU0FBUyxDQUFDTCxXQUNmLE9BQ0MsQ0FBQ0MsZUFBZUssVUFBU0wsT0FBQUEsT0FBQUEsS0FBQUEsSUFBQUEsSUFBS00sS0FBQUEsS0FBVSxHQUFDO0FBRWhEIiwic291cmNlcyI6WyIvaG9tZS9zcmMvY2xpZW50L2Rldi9ob3QtcmVsb2FkZXIvc2hhcmVkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSE1SX0FDVElPTl9UWVBFUyB9IGZyb20gJy4uLy4uLy4uL3NlcnZlci9kZXYvaG90LXJlbG9hZGVyLXR5cGVzJ1xuXG5leHBvcnQgY29uc3QgUkVBQ1RfUkVGUkVTSF9GVUxMX1JFTE9BRCA9XG4gICdbRmFzdCBSZWZyZXNoXSBwZXJmb3JtaW5nIGZ1bGwgcmVsb2FkXFxuXFxuJyArXG4gIFwiRmFzdCBSZWZyZXNoIHdpbGwgcGVyZm9ybSBhIGZ1bGwgcmVsb2FkIHdoZW4geW91IGVkaXQgYSBmaWxlIHRoYXQncyBpbXBvcnRlZCBieSBtb2R1bGVzIG91dHNpZGUgb2YgdGhlIFJlYWN0IHJlbmRlcmluZyB0cmVlLlxcblwiICtcbiAgJ1lvdSBtaWdodCBoYXZlIGEgZmlsZSB3aGljaCBleHBvcnRzIGEgUmVhY3QgY29tcG9uZW50IGJ1dCBhbHNvIGV4cG9ydHMgYSB2YWx1ZSB0aGF0IGlzIGltcG9ydGVkIGJ5IGEgbm9uLVJlYWN0IGNvbXBvbmVudCBmaWxlLlxcbicgK1xuICAnQ29uc2lkZXIgbWlncmF0aW5nIHRoZSBub24tUmVhY3QgY29tcG9uZW50IGV4cG9ydCB0byBhIHNlcGFyYXRlIGZpbGUgYW5kIGltcG9ydGluZyBpdCBpbnRvIGJvdGggZmlsZXMuXFxuXFxuJyArXG4gICdJdCBpcyBhbHNvIHBvc3NpYmxlIHRoZSBwYXJlbnQgY29tcG9uZW50IG9mIHRoZSBjb21wb25lbnQgeW91IGVkaXRlZCBpcyBhIGNsYXNzIGNvbXBvbmVudCwgd2hpY2ggZGlzYWJsZXMgRmFzdCBSZWZyZXNoLlxcbicgK1xuICAnRmFzdCBSZWZyZXNoIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBwYXJlbnQgZnVuY3Rpb24gY29tcG9uZW50IGluIHlvdXIgUmVhY3QgdHJlZS4nXG5cbmV4cG9ydCBjb25zdCBSRUFDVF9SRUZSRVNIX0ZVTExfUkVMT0FEX0ZST01fRVJST1IgPVxuICAnW0Zhc3QgUmVmcmVzaF0gcGVyZm9ybWluZyBmdWxsIHJlbG9hZCBiZWNhdXNlIHlvdXIgYXBwbGljYXRpb24gaGFkIGFuIHVucmVjb3ZlcmFibGUgZXJyb3InXG5cbmV4cG9ydCBmdW5jdGlvbiByZXBvcnRJbnZhbGlkSG1yTWVzc2FnZShcbiAgbWVzc2FnZTogSE1SX0FDVElPTl9UWVBFUyB8IE1lc3NhZ2VFdmVudDx1bmtub3duPixcbiAgZXJyOiB1bmtub3duXG4pIHtcbiAgY29uc29sZS53YXJuKFxuICAgICdbSE1SXSBJbnZhbGlkIG1lc3NhZ2U6ICcgK1xuICAgICAgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkgK1xuICAgICAgJ1xcbicgK1xuICAgICAgKChlcnIgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnI/LnN0YWNrKSB8fCAnJylcbiAgKVxufVxuIl0sIm5hbWVzIjpbIlJFQUNUX1JFRlJFU0hfRlVMTF9SRUxPQUQiLCJSRUFDVF9SRUZSRVNIX0ZVTExfUkVMT0FEX0ZST01fRVJST1IiLCJyZXBvcnRJbnZhbGlkSG1yTWVzc2FnZSIsIm1lc3NhZ2UiLCJlcnIiLCJjb25zb2xlIiwid2FybiIsIkpTT04iLCJzdHJpbmdpZnkiLCJFcnJvciIsInN0YWNrIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/dev/hot-reloader/shared.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/dev/hot-reloader/turbopack-hot-reloader-common.js":
|
||
/*!*****************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/dev/hot-reloader/turbopack-hot-reloader-common.js ***!
|
||
\*****************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"TurbopackHmr\", ({\n enumerable: true,\n get: function() {\n return TurbopackHmr;\n }\n}));\nconst _class_private_field_loose_base = __webpack_require__(/*! @swc/helpers/_/_class_private_field_loose_base */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_class_private_field_loose_base.js\");\nconst _class_private_field_loose_key = __webpack_require__(/*! @swc/helpers/_/_class_private_field_loose_key */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_class_private_field_loose_key.js\");\n// How long to wait before reporting the HMR start, used to suppress irrelevant\n// `BUILDING` events. Does not impact reported latency.\nconst TURBOPACK_HMR_START_DELAY_MS = 100;\nvar _updatedModules = /*#__PURE__*/ _class_private_field_loose_key._(\"_updatedModules\"), _startMsSinceEpoch = /*#__PURE__*/ _class_private_field_loose_key._(\"_startMsSinceEpoch\"), _lastUpdateMsSinceEpoch = /*#__PURE__*/ _class_private_field_loose_key._(\"_lastUpdateMsSinceEpoch\"), _deferredReportHmrStartId = /*#__PURE__*/ _class_private_field_loose_key._(\"_deferredReportHmrStartId\"), // as it reports *any* compilation, including fully no-op/cached compilations\n// and those unrelated to HMR. Fixing this would require significant\n// architectural changes.\n//\n// Work around this by deferring any \"rebuilding\" message by 100ms. If we get\n// a BUILT event within that threshold and nothing has changed, just suppress\n// the message entirely.\n_runDeferredReportHmrStart = /*#__PURE__*/ _class_private_field_loose_key._(\"_runDeferredReportHmrStart\"), _cancelDeferredReportHmrStart = /*#__PURE__*/ _class_private_field_loose_key._(\"_cancelDeferredReportHmrStart\"), /** Helper for other `onEvent` methods. */ _onUpdate = /*#__PURE__*/ _class_private_field_loose_key._(\"_onUpdate\");\nclass TurbopackHmr {\n onBuilding() {\n _class_private_field_loose_base._(this, _lastUpdateMsSinceEpoch)[_lastUpdateMsSinceEpoch] = undefined;\n _class_private_field_loose_base._(this, _cancelDeferredReportHmrStart)[_cancelDeferredReportHmrStart]();\n _class_private_field_loose_base._(this, _startMsSinceEpoch)[_startMsSinceEpoch] = Date.now();\n // report the HMR start after a short delay\n _class_private_field_loose_base._(this, _deferredReportHmrStartId)[_deferredReportHmrStartId] = setTimeout(()=>_class_private_field_loose_base._(this, _runDeferredReportHmrStart)[_runDeferredReportHmrStart](), self.__NEXT_HMR_TURBOPACK_REPORT_NOISY_NOOP_EVENTS ? 0 : TURBOPACK_HMR_START_DELAY_MS);\n }\n onTurbopackMessage(msg) {\n _class_private_field_loose_base._(this, _onUpdate)[_onUpdate]();\n const updatedModules = extractModulesFromTurbopackMessage(msg.data);\n for (const module1 of updatedModules){\n _class_private_field_loose_base._(this, _updatedModules)[_updatedModules].add(module1);\n }\n }\n onServerComponentChanges() {\n _class_private_field_loose_base._(this, _onUpdate)[_onUpdate]();\n }\n onReloadPage() {\n _class_private_field_loose_base._(this, _onUpdate)[_onUpdate]();\n }\n onPageAddRemove() {\n _class_private_field_loose_base._(this, _onUpdate)[_onUpdate]();\n }\n /**\n * @returns `null` if the caller should ignore the update entirely. Returns an\n * object with `hasUpdates: false` if the caller should report the end of\n * the HMR in the browser console, but the HMR was a no-op.\n */ onBuilt() {\n // Check that we got *any* `TurbopackMessageAction`, even if\n // `updatedModules` is empty (not everything gets recorded there).\n //\n // There's also a case where `onBuilt` gets called before `onBuilding`,\n // which can happen during initial page load. Ignore that too!\n const hasUpdates = _class_private_field_loose_base._(this, _lastUpdateMsSinceEpoch)[_lastUpdateMsSinceEpoch] != null && _class_private_field_loose_base._(this, _startMsSinceEpoch)[_startMsSinceEpoch] != null;\n if (!hasUpdates && _class_private_field_loose_base._(this, _deferredReportHmrStartId)[_deferredReportHmrStartId] != null) {\n // suppress the update entirely\n _class_private_field_loose_base._(this, _cancelDeferredReportHmrStart)[_cancelDeferredReportHmrStart]();\n return null;\n }\n _class_private_field_loose_base._(this, _runDeferredReportHmrStart)[_runDeferredReportHmrStart]();\n var _class_private_field_loose_base__lastUpdateMsSinceEpoch;\n const result = {\n hasUpdates,\n updatedModules: _class_private_field_loose_base._(this, _updatedModules)[_updatedModules],\n startMsSinceEpoch: _class_private_field_loose_base._(this, _startMsSinceEpoch)[_startMsSinceEpoch],\n endMsSinceEpoch: (_class_private_field_loose_base__lastUpdateMsSinceEpoch = _class_private_field_loose_base._(this, _lastUpdateMsSinceEpoch)[_lastUpdateMsSinceEpoch]) != null ? _class_private_field_loose_base__lastUpdateMsSinceEpoch : Date.now()\n };\n _class_private_field_loose_base._(this, _updatedModules)[_updatedModules] = new Set();\n return result;\n }\n constructor(){\n Object.defineProperty(this, _runDeferredReportHmrStart, {\n value: runDeferredReportHmrStart\n });\n Object.defineProperty(this, _cancelDeferredReportHmrStart, {\n value: cancelDeferredReportHmrStart\n });\n Object.defineProperty(this, _onUpdate, {\n value: onUpdate\n });\n Object.defineProperty(this, _updatedModules, {\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, _startMsSinceEpoch, {\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, _lastUpdateMsSinceEpoch, {\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, _deferredReportHmrStartId, {\n writable: true,\n value: void 0\n });\n _class_private_field_loose_base._(this, _updatedModules)[_updatedModules] = new Set();\n }\n}\nfunction runDeferredReportHmrStart() {\n if (_class_private_field_loose_base._(this, _deferredReportHmrStartId)[_deferredReportHmrStartId] != null) {\n console.log('[Fast Refresh] rebuilding');\n _class_private_field_loose_base._(this, _cancelDeferredReportHmrStart)[_cancelDeferredReportHmrStart]();\n }\n}\nfunction cancelDeferredReportHmrStart() {\n clearTimeout(_class_private_field_loose_base._(this, _deferredReportHmrStartId)[_deferredReportHmrStartId]);\n _class_private_field_loose_base._(this, _deferredReportHmrStartId)[_deferredReportHmrStartId] = undefined;\n}\nfunction onUpdate() {\n _class_private_field_loose_base._(this, _runDeferredReportHmrStart)[_runDeferredReportHmrStart]();\n _class_private_field_loose_base._(this, _lastUpdateMsSinceEpoch)[_lastUpdateMsSinceEpoch] = Date.now();\n}\nfunction extractModulesFromTurbopackMessage(data) {\n const updatedModules = new Set();\n const updates = Array.isArray(data) ? data : [\n data\n ];\n for (const update of updates){\n // TODO this won't capture changes to CSS since they don't result in a \"merged\" update\n if (update.type !== 'partial' || update.instruction.type !== 'ChunkListUpdate' || update.instruction.merged === undefined) {\n continue;\n }\n for (const mergedUpdate of update.instruction.merged){\n for (const name of Object.keys(mergedUpdate.entries)){\n const res = /(.*)\\s+\\[.*/.exec(name);\n if (res === null) {\n console.error('[Turbopack HMR] Expected module to match pattern: ' + name);\n continue;\n }\n updatedModules.add(res[1]);\n }\n }\n }\n return updatedModules;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=turbopack-hot-reloader-common.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2Rldi9ob3QtcmVsb2FkZXIvdHVyYm9wYWNrLWhvdC1yZWxvYWRlci1jb21tb24uanMiLCJtYXBwaW5ncyI6Ijs7OztnREFvQmFBOzs7ZUFBQUE7Ozs7O0FBWGIsK0VBQStFO0FBQy9FLHVEQUF1RDtBQUN2RCxNQUFNQywrQkFBK0I7SUFVbkMscUZBQ0EsMkZBQ0EscUdBQ0EseUdBTUEsNEVBQTRFLENBQ0M7QUFDN0Usb0VBQW9FO0FBQ3BFLHlCQUF5QjtBQUN6QixFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLDZFQUE2RTtBQUM3RSx3QkFBd0I7QUFDeEIsMkdBT0EsaUhBb0JBLHdDQUF3QyxHQUN4QztBQTlDSyxNQUFNRDtJQThCWEUsYUFBYTtRQUNYLHNDQUFJLEVBQUMsb0RBQTBCQztRQUMvQixzQ0FBSSxFQUFDO1FBQ0wsc0NBQUksRUFBQywwQ0FBcUJDLEtBQUtDLEdBQUc7UUFFbEMsMkNBQTJDO1FBQzNDLHNDQUFJLEVBQUMsd0RBQTRCQyxXQUMvQixJQUFNLHNDQUFJLEVBQUMsMkRBQ1gsS0FDS0UsNkNBQTZDLEdBQzlDLElBQ0FQLGlCQUhzRTtJQUs5RTtJQVFBUSxtQkFBbUJDLEdBQTJCLEVBQUU7UUFDOUMsc0NBQUksRUFBQztRQUNMLE1BQU1DLGlCQUFpQkMsbUNBQW1DRixJQUFJRyxJQUFJO1FBQ2xFLEtBQUssTUFBTUMsV0FBVUgsZUFBZ0I7WUFDbkMsc0NBQUksRUFBQyxrQ0FBZ0JJLEdBQUcsQ0FBQ0Q7UUFDM0I7SUFDRjtJQUVBRSwyQkFBMkI7UUFDekIsc0NBQUksRUFBQztJQUNQO0lBRUFDLGVBQWU7UUFDYixzQ0FBSSxFQUFDO0lBQ1A7SUFFQUMsa0JBQWtCO1FBQ2hCLHNDQUFJLEVBQUM7SUFDUDtJQUVBOzs7O0dBSUMsR0FDREMsVUFBNEI7UUFDMUIsNERBQTREO1FBQzVELGtFQUFrRTtRQUNsRSxFQUFFO1FBQ0YsdUVBQXVFO1FBQ3ZFLDhEQUE4RDtRQUM5RCxNQUFNQyxhQUNKLHNDQUFJLEVBQUMscURBQTJCLFFBQVEsc0NBQUksRUFBQywyQ0FBc0I7UUFDckUsSUFBSSxDQUFDQSxjQUFjLHNDQUFJLEVBQUMseURBQTZCLE1BQU07WUFDekQsK0JBQStCO1lBQy9CLHNDQUFJLEVBQUM7WUFDTCxPQUFPO1FBQ1Q7UUFDQSxzQ0FBSSxFQUFDOztRQUVMLE1BQU1DLFNBQVM7WUFDYkQ7WUFDQVQsY0FBYyxFQUFFLHNDQUFJLEVBQUM7WUFDckJXLGlCQUFpQixFQUFFLHNDQUFJLEVBQUM7WUFDeEJDLGlCQUFpQixpR0FBSSxFQUFDLHVIQUEyQm5CLEtBQUtDLEdBQUc7UUFDM0Q7UUFDQSxzQ0FBSSxFQUFDLG9DQUFrQixJQUFJbUI7UUFDM0IsT0FBT0g7SUFDVDtJQTdGQUksYUFBYztRQVlkO21CQUFBOztRQU9BO21CQUFBOztRQXFCQTttQkFBQTs7UUE3Q0E7O21CQUFBOztRQUNBOzttQkFBQTs7UUFDQTs7bUJBQUE7O1FBQ0E7O21CQUFBOztRQUdFLHNDQUFJLEVBQUMsb0NBQWtCLElBQUlEO0lBQzdCO0FBNEZGO0FBbEZFO0lBQ0UsSUFBSSxzQ0FBSSxFQUFDLHlEQUE2QixNQUFNO1FBQzFDRSxRQUFRQyxHQUFHLENBQUM7UUFDWixzQ0FBSSxFQUFDO0lBQ1A7QUFDRjtBQUVBO0lBQ0VDLGFBQWEsc0NBQUksRUFBQztJQUNsQixzQ0FBSSxFQUFDLHdEQUE0QnpCO0FBQ25DO0FBa0JBO0lBQ0Usc0NBQUksRUFBQztJQUNMLHNDQUFJLEVBQUMsb0RBQTBCQyxLQUFLQyxHQUFHO0FBQ3pDO0FBcURGLFNBQVNPLG1DQUNQQyxJQUF5QztJQUV6QyxNQUFNRixpQkFBOEIsSUFBSWE7SUFFeEMsTUFBTUssVUFBVUMsTUFBTUMsT0FBTyxDQUFDbEIsUUFBUUEsT0FBTztRQUFDQTtLQUFLO0lBQ25ELEtBQUssTUFBTW1CLFVBQVVILFFBQVM7UUFDNUIsc0ZBQXNGO1FBQ3RGLElBQ0VHLE9BQU9DLElBQUksS0FBSyxhQUNoQkQsT0FBT0UsV0FBVyxDQUFDRCxJQUFJLEtBQUsscUJBQzVCRCxPQUFPRSxXQUFXLENBQUNDLE1BQU0sS0FBS2hDLFdBQzlCO1lBQ0E7UUFDRjtRQUVBLEtBQUssTUFBTWlDLGdCQUFnQkosT0FBT0UsV0FBVyxDQUFDQyxNQUFNLENBQUU7WUFDcEQsS0FBSyxNQUFNRSxRQUFRQyxPQUFPQyxJQUFJLENBQUNILGFBQWFJLE9BQU8sRUFBRztnQkFDcEQsTUFBTUMsTUFBTSxjQUFjQyxJQUFJLENBQUNMO2dCQUMvQixJQUFJSSxRQUFRLE1BQU07b0JBQ2hCZixRQUFRaUIsS0FBSyxDQUNYLHVEQUF1RE47b0JBRXpEO2dCQUNGO2dCQUVBMUIsZUFBZUksR0FBRyxDQUFDMEIsR0FBRyxDQUFDLEVBQUU7WUFDM0I7UUFDRjtJQUNGO0lBRUEsT0FBTzlCO0FBQ1QiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9jbGllbnQvZGV2L2hvdC1yZWxvYWRlci90dXJib3BhY2staG90LXJlbG9hZGVyLWNvbW1vbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFR1cmJvcGFja01lc3NhZ2VBY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9zZXJ2ZXIvZGV2L2hvdC1yZWxvYWRlci10eXBlcydcbmltcG9ydCB0eXBlIHsgVXBkYXRlIGFzIFR1cmJvcGFja1VwZGF0ZSB9IGZyb20gJy4uLy4uLy4uL2J1aWxkL3N3Yy90eXBlcydcblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBfX05FWFRfSE1SX1RVUkJPUEFDS19SRVBPUlRfTk9JU1lfTk9PUF9FVkVOVFM6IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgfVxufVxuXG4vLyBIb3cgbG9uZyB0byB3YWl0IGJlZm9yZSByZXBvcnRpbmcgdGhlIEhNUiBzdGFydCwgdXNlZCB0byBzdXBwcmVzcyBpcnJlbGV2YW50XG4vLyBgQlVJTERJTkdgIGV2ZW50cy4gRG9lcyBub3QgaW1wYWN0IHJlcG9ydGVkIGxhdGVuY3kuXG5jb25zdCBUVVJCT1BBQ0tfSE1SX1NUQVJUX0RFTEFZX01TID0gMTAwXG5cbmludGVyZmFjZSBIbXJVcGRhdGUge1xuICBoYXNVcGRhdGVzOiBib29sZWFuXG4gIHVwZGF0ZWRNb2R1bGVzOiBTZXQ8c3RyaW5nPlxuICBzdGFydE1zU2luY2VFcG9jaDogbnVtYmVyXG4gIGVuZE1zU2luY2VFcG9jaDogbnVtYmVyXG59XG5cbmV4cG9ydCBjbGFzcyBUdXJib3BhY2tIbXIge1xuICAjdXBkYXRlZE1vZHVsZXM6IFNldDxzdHJpbmc+XG4gICNzdGFydE1zU2luY2VFcG9jaDogbnVtYmVyIHwgdW5kZWZpbmVkXG4gICNsYXN0VXBkYXRlTXNTaW5jZUVwb2NoOiBudW1iZXIgfCB1bmRlZmluZWRcbiAgI2RlZmVycmVkUmVwb3J0SG1yU3RhcnRJZDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWRcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLiN1cGRhdGVkTW9kdWxlcyA9IG5ldyBTZXQoKVxuICB9XG5cbiAgLy8gSEFDSzogVHVyYm9wYWNrIHRlbmRzIHRvIGdlbmVyYXRlIGEgbG90IG9mIGlycmVsZXZhbnQgXCJCVUlMRElOR1wiIGFjdGlvbnMsXG4gIC8vIGFzIGl0IHJlcG9ydHMgKmFueSogY29tcGlsYXRpb24sIGluY2x1ZGluZyBmdWxseSBuby1vcC9jYWNoZWQgY29tcGlsYXRpb25zXG4gIC8vIGFuZCB0aG9zZSB1bnJlbGF0ZWQgdG8gSE1SLiBGaXhpbmcgdGhpcyB3b3VsZCByZXF1aXJlIHNpZ25pZmljYW50XG4gIC8vIGFyY2hpdGVjdHVyYWwgY2hhbmdlcy5cbiAgLy9cbiAgLy8gV29yayBhcm91bmQgdGhpcyBieSBkZWZlcnJpbmcgYW55IFwicmVidWlsZGluZ1wiIG1lc3NhZ2UgYnkgMTAwbXMuIElmIHdlIGdldFxuICAvLyBhIEJVSUxUIGV2ZW50IHdpdGhpbiB0aGF0IHRocmVzaG9sZCBhbmQgbm90aGluZyBoYXMgY2hhbmdlZCwganVzdCBzdXBwcmVzc1xuICAvLyB0aGUgbWVzc2FnZSBlbnRpcmVseS5cbiAgI3J1bkRlZmVycmVkUmVwb3J0SG1yU3RhcnQoKSB7XG4gICAgaWYgKHRoaXMuI2RlZmVycmVkUmVwb3J0SG1yU3RhcnRJZCAhPSBudWxsKSB7XG4gICAgICBjb25zb2xlLmxvZygnW0Zhc3QgUmVmcmVzaF0gcmVidWlsZGluZycpXG4gICAgICB0aGlzLiNjYW5jZWxEZWZlcnJlZFJlcG9ydEhtclN0YXJ0KClcbiAgICB9XG4gIH1cblxuICAjY2FuY2VsRGVmZXJyZWRSZXBvcnRIbXJTdGFydCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy4jZGVmZXJyZWRSZXBvcnRIbXJTdGFydElkKVxuICAgIHRoaXMuI2RlZmVycmVkUmVwb3J0SG1yU3RhcnRJZCA9IHVuZGVmaW5lZFxuICB9XG5cbiAgb25CdWlsZGluZygpIHtcbiAgICB0aGlzLiNsYXN0VXBkYXRlTXNTaW5jZUVwb2NoID0gdW5kZWZpbmVkXG4gICAgdGhpcy4jY2FuY2VsRGVmZXJyZWRSZXBvcnRIbXJTdGFydCgpXG4gICAgdGhpcy4jc3RhcnRNc1NpbmNlRXBvY2ggPSBEYXRlLm5vdygpXG5cbiAgICAvLyByZXBvcnQgdGhlIEhNUiBzdGFydCBhZnRlciBhIHNob3J0IGRlbGF5XG4gICAgdGhpcy4jZGVmZXJyZWRSZXBvcnRIbXJTdGFydElkID0gc2V0VGltZW91dChcbiAgICAgICgpID0+IHRoaXMuI3J1bkRlZmVycmVkUmVwb3J0SG1yU3RhcnQoKSxcbiAgICAgIC8vIGRlYnVnZ2luZyBmZWF0dXJlOiBkb24ndCBkZWZlci9zdXBwcmVzcyBub2lzeSBuby1vcCBITVIgdXBkYXRlIG1lc3NhZ2VzXG4gICAgICBzZWxmLl9fTkVYVF9ITVJfVFVSQk9QQUNLX1JFUE9SVF9OT0lTWV9OT09QX0VWRU5UU1xuICAgICAgICA/IDBcbiAgICAgICAgOiBUVVJCT1BBQ0tfSE1SX1NUQVJUX0RFTEFZX01TXG4gICAgKVxuICB9XG5cbiAgLyoqIEhlbHBlciBmb3Igb3RoZXIgYG9uRXZlbnRgIG1ldGhvZHMuICovXG4gICNvblVwZGF0ZSgpIHtcbiAgICB0aGlzLiNydW5EZWZlcnJlZFJlcG9ydEhtclN0YXJ0KClcbiAgICB0aGlzLiNsYXN0VXBkYXRlTXNTaW5jZUVwb2NoID0gRGF0ZS5ub3coKVxuICB9XG5cbiAgb25UdXJib3BhY2tNZXNzYWdlKG1zZzogVHVyYm9wYWNrTWVzc2FnZUFjdGlvbikge1xuICAgIHRoaXMuI29uVXBkYXRlKClcbiAgICBjb25zdCB1cGRhdGVkTW9kdWxlcyA9IGV4dHJhY3RNb2R1bGVzRnJvbVR1cmJvcGFja01lc3NhZ2UobXNnLmRhdGEpXG4gICAgZm9yIChjb25zdCBtb2R1bGUgb2YgdXBkYXRlZE1vZHVsZXMpIHtcbiAgICAgIHRoaXMuI3VwZGF0ZWRNb2R1bGVzLmFkZChtb2R1bGUpXG4gICAgfVxuICB9XG5cbiAgb25TZXJ2ZXJDb21wb25lbnRDaGFuZ2VzKCkge1xuICAgIHRoaXMuI29uVXBkYXRlKClcbiAgfVxuXG4gIG9uUmVsb2FkUGFnZSgpIHtcbiAgICB0aGlzLiNvblVwZGF0ZSgpXG4gIH1cblxuICBvblBhZ2VBZGRSZW1vdmUoKSB7XG4gICAgdGhpcy4jb25VcGRhdGUoKVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIGBudWxsYCBpZiB0aGUgY2FsbGVyIHNob3VsZCBpZ25vcmUgdGhlIHVwZGF0ZSBlbnRpcmVseS4gUmV0dXJucyBhblxuICAgKiAgIG9iamVjdCB3aXRoIGBoYXNVcGRhdGVzOiBmYWxzZWAgaWYgdGhlIGNhbGxlciBzaG91bGQgcmVwb3J0IHRoZSBlbmQgb2ZcbiAgICogICB0aGUgSE1SIGluIHRoZSBicm93c2VyIGNvbnNvbGUsIGJ1dCB0aGUgSE1SIHdhcyBhIG5vLW9wLlxuICAgKi9cbiAgb25CdWlsdCgpOiBIbXJVcGRhdGUgfCBudWxsIHtcbiAgICAvLyBDaGVjayB0aGF0IHdlIGdvdCAqYW55KiBgVHVyYm9wYWNrTWVzc2FnZUFjdGlvbmAsIGV2ZW4gaWZcbiAgICAvLyBgdXBkYXRlZE1vZHVsZXNgIGlzIGVtcHR5IChub3QgZXZlcnl0aGluZyBnZXRzIHJlY29yZGVkIHRoZXJlKS5cbiAgICAvL1xuICAgIC8vIFRoZXJlJ3MgYWxzbyBhIGNhc2Ugd2hlcmUgYG9uQnVpbHRgIGdldHMgY2FsbGVkIGJlZm9yZSBgb25CdWlsZGluZ2AsXG4gICAgLy8gd2hpY2ggY2FuIGhhcHBlbiBkdXJpbmcgaW5pdGlhbCBwYWdlIGxvYWQuIElnbm9yZSB0aGF0IHRvbyFcbiAgICBjb25zdCBoYXNVcGRhdGVzID1cbiAgICAgIHRoaXMuI2xhc3RVcGRhdGVNc1NpbmNlRXBvY2ggIT0gbnVsbCAmJiB0aGlzLiNzdGFydE1zU2luY2VFcG9jaCAhPSBudWxsXG4gICAgaWYgKCFoYXNVcGRhdGVzICYmIHRoaXMuI2RlZmVycmVkUmVwb3J0SG1yU3RhcnRJZCAhPSBudWxsKSB7XG4gICAgICAvLyBzdXBwcmVzcyB0aGUgdXBkYXRlIGVudGlyZWx5XG4gICAgICB0aGlzLiNjYW5jZWxEZWZlcnJlZFJlcG9ydEhtclN0YXJ0KClcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIHRoaXMuI3J1bkRlZmVycmVkUmVwb3J0SG1yU3RhcnQoKVxuXG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgaGFzVXBkYXRlcyxcbiAgICAgIHVwZGF0ZWRNb2R1bGVzOiB0aGlzLiN1cGRhdGVkTW9kdWxlcyxcbiAgICAgIHN0YXJ0TXNTaW5jZUVwb2NoOiB0aGlzLiNzdGFydE1zU2luY2VFcG9jaCEsXG4gICAgICBlbmRNc1NpbmNlRXBvY2g6IHRoaXMuI2xhc3RVcGRhdGVNc1NpbmNlRXBvY2ggPz8gRGF0ZS5ub3coKSxcbiAgICB9XG4gICAgdGhpcy4jdXBkYXRlZE1vZHVsZXMgPSBuZXcgU2V0KClcbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cbn1cblxuZnVuY3Rpb24gZXh0cmFjdE1vZHVsZXNGcm9tVHVyYm9wYWNrTWVzc2FnZShcbiAgZGF0YTogVHVyYm9wYWNrVXBkYXRlIHwgVHVyYm9wYWNrVXBkYXRlW11cbik6IFNldDxzdHJpbmc+IHtcbiAgY29uc3QgdXBkYXRlZE1vZHVsZXM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpXG5cbiAgY29uc3QgdXBkYXRlcyA9IEFycmF5LmlzQXJyYXkoZGF0YSkgPyBkYXRhIDogW2RhdGFdXG4gIGZvciAoY29uc3QgdXBkYXRlIG9mIHVwZGF0ZXMpIHtcbiAgICAvLyBUT0RPIHRoaXMgd29uJ3QgY2FwdHVyZSBjaGFuZ2VzIHRvIENTUyBzaW5jZSB0aGV5IGRvbid0IHJlc3VsdCBpbiBhIFwibWVyZ2VkXCIgdXBkYXRlXG4gICAgaWYgKFxuICAgICAgdXBkYXRlLnR5cGUgIT09ICdwYXJ0aWFsJyB8fFxuICAgICAgdXBkYXRlLmluc3RydWN0aW9uLnR5cGUgIT09ICdDaHVua0xpc3RVcGRhdGUnIHx8XG4gICAgICB1cGRhdGUuaW5zdHJ1Y3Rpb24ubWVyZ2VkID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBtZXJnZWRVcGRhdGUgb2YgdXBkYXRlLmluc3RydWN0aW9uLm1lcmdlZCkge1xuICAgICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5rZXlzKG1lcmdlZFVwZGF0ZS5lbnRyaWVzKSkge1xuICAgICAgICBjb25zdCByZXMgPSAvKC4qKVxccytcXFsuKi8uZXhlYyhuYW1lKVxuICAgICAgICBpZiAocmVzID09PSBudWxsKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICdbVHVyYm9wYWNrIEhNUl0gRXhwZWN0ZWQgbW9kdWxlIHRvIG1hdGNoIHBhdHRlcm46ICcgKyBuYW1lXG4gICAgICAgICAgKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICB1cGRhdGVkTW9kdWxlcy5hZGQocmVzWzFdKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1cGRhdGVkTW9kdWxlc1xufVxuIl0sIm5hbWVzIjpbIlR1cmJvcGFja0htciIsIlRVUkJPUEFDS19ITVJfU1RBUlRfREVMQVlfTVMiLCJvbkJ1aWxkaW5nIiwidW5kZWZpbmVkIiwiRGF0ZSIsIm5vdyIsInNldFRpbWVvdXQiLCJzZWxmIiwiX19ORVhUX0hNUl9UVVJCT1BBQ0tfUkVQT1JUX05PSVNZX05PT1BfRVZFTlRTIiwib25UdXJib3BhY2tNZXNzYWdlIiwibXNnIiwidXBkYXRlZE1vZHVsZXMiLCJleHRyYWN0TW9kdWxlc0Zyb21UdXJib3BhY2tNZXNzYWdlIiwiZGF0YSIsIm1vZHVsZSIsImFkZCIsIm9uU2VydmVyQ29tcG9uZW50Q2hhbmdlcyIsIm9uUmVsb2FkUGFnZSIsIm9uUGFnZUFkZFJlbW92ZSIsIm9uQnVpbHQiLCJoYXNVcGRhdGVzIiwicmVzdWx0Iiwic3RhcnRNc1NpbmNlRXBvY2giLCJlbmRNc1NpbmNlRXBvY2giLCJTZXQiLCJjb25zdHJ1Y3RvciIsImNvbnNvbGUiLCJsb2ciLCJjbGVhclRpbWVvdXQiLCJ1cGRhdGVzIiwiQXJyYXkiLCJpc0FycmF5IiwidXBkYXRlIiwidHlwZSIsImluc3RydWN0aW9uIiwibWVyZ2VkIiwibWVyZ2VkVXBkYXRlIiwibmFtZSIsIk9iamVjdCIsImtleXMiLCJlbnRyaWVzIiwicmVzIiwiZXhlYyIsImVycm9yIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/dev/hot-reloader/turbopack-hot-reloader-common.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/dev/noop-turbopack-hmr.js":
|
||
/*!*****************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/dev/noop-turbopack-hmr.js ***!
|
||
\*****************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// The Turbopack HMR client can't be properly omitted at the moment (WEB-1589),\n// so instead we remap its import to this file in webpack builds.\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"connect\", ({\n enumerable: true,\n get: function() {\n return connect;\n }\n}));\nfunction connect() {}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=noop-turbopack-hmr.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2Rldi9ub29wLXR1cmJvcGFjay1obXIuanMiLCJtYXBwaW5ncyI6IkFBQUEsK0VBQStFO0FBQy9FLGlFQUFpRTs7Ozs7MkNBQ2pEQTs7O2VBQUFBOzs7QUFBVCxTQUFTQSxXQUFXIiwic291cmNlcyI6WyIvaG9tZS9OaWNob2xhaS9zcmMvY2xpZW50L2Rldi9ub29wLXR1cmJvcGFjay1obXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhlIFR1cmJvcGFjayBITVIgY2xpZW50IGNhbid0IGJlIHByb3Blcmx5IG9taXR0ZWQgYXQgdGhlIG1vbWVudCAoV0VCLTE1ODkpLFxuLy8gc28gaW5zdGVhZCB3ZSByZW1hcCBpdHMgaW1wb3J0IHRvIHRoaXMgZmlsZSBpbiB3ZWJwYWNrIGJ1aWxkcy5cbmV4cG9ydCBmdW5jdGlvbiBjb25uZWN0KCkge31cbiJdLCJuYW1lcyI6WyJjb25uZWN0Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/dev/noop-turbopack-hmr.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/dev/report-hmr-latency.js":
|
||
/*!*****************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/dev/report-hmr-latency.js ***!
|
||
\*****************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return reportHmrLatency;\n }\n}));\nfunction reportHmrLatency(sendMessage, updatedModules, startMsSinceEpoch, endMsSinceEpoch, hasUpdate) {\n if (hasUpdate === void 0) hasUpdate = true;\n const latencyMs = endMsSinceEpoch - startMsSinceEpoch;\n console.log(\"[Fast Refresh] done in \" + latencyMs + \"ms\");\n if (!hasUpdate) {\n return;\n }\n sendMessage(JSON.stringify({\n event: 'client-hmr-latency',\n id: window.__nextDevClientId,\n startTime: startMsSinceEpoch,\n endTime: endMsSinceEpoch,\n page: window.location.pathname,\n updatedModules,\n // Whether the page (tab) was hidden at the time the event occurred.\n // This can impact the accuracy of the event's timing.\n isPageHidden: document.visibilityState === 'hidden'\n }));\n if (self.__NEXT_HMR_LATENCY_CB) {\n self.__NEXT_HMR_LATENCY_CB(latencyMs);\n }\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=report-hmr-latency.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2Rldi9yZXBvcnQtaG1yLWxhdGVuY3kuanMiLCJtYXBwaW5ncyI6Ijs7OzsyQ0FpQkE7OztlQUF3QkE7OztBQUFULFNBQVNBLGlCQUN0QkMsV0FBc0MsRUFDdENDLGNBQThDLEVBQzlDQyxpQkFBeUIsRUFDekJDLGVBQXVCLEVBQ3ZCQyxTQUF5QjtJQUF6QkEsSUFBQUEsY0FBQUEsS0FBQUEsR0FBQUEsWUFBcUI7SUFFckIsTUFBTUMsWUFBWUYsa0JBQWtCRDtJQUNwQ0ksUUFBUUMsR0FBRyxDQUFFLDRCQUF5QkYsWUFBVTtJQUNoRCxJQUFJLENBQUNELFdBQVc7UUFDZDtJQUNGO0lBQ0FKLFlBQ0VRLEtBQUtDLFNBQVMsQ0FBQztRQUNiQyxPQUFPO1FBQ1BDLElBQUlDLE9BQU9DLGlCQUFpQjtRQUM1QkMsV0FBV1o7UUFDWGEsU0FBU1o7UUFDVGEsTUFBTUosT0FBT0ssUUFBUSxDQUFDQyxRQUFRO1FBQzlCakI7UUFDQSxvRUFBb0U7UUFDcEUsc0RBQXNEO1FBQ3REa0IsY0FBY0MsU0FBU0MsZUFBZSxLQUFLO0lBQzdDO0lBRUYsSUFBSUMsS0FBS0MscUJBQXFCLEVBQUU7UUFDOUJELEtBQUtDLHFCQUFxQixDQUFDbEI7SUFDN0I7QUFDRiIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvc3JjL2NsaWVudC9kZXYvcmVwb3J0LWhtci1sYXRlbmN5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgX19ORVhUX0hNUl9MQVRFTkNZX0NCOiAoKGxhdGVuY3lNczogbnVtYmVyKSA9PiB2b2lkKSB8IHVuZGVmaW5lZFxuICB9XG59XG5cbi8qKlxuICogTG9ncyBpbmZvcm1hdGlvbiBhYm91dCBhIGNvbXBsZXRlZCBITVIgdG8gdGhlIGNvbnNvbGUsIHRoZSBzZXJ2ZXIgKHZpYSBhXG4gKiBgY2xpZW50LWhtci1sYXRlbmN5YCBldmVudCksIGFuZCB0byBgc2VsZi5fX05FWFRfSE1SX0xBVEVOQ1lfQ0JgIChhIGRlYnVnZ2luZ1xuICogaG9vaykuXG4gKlxuICogQHBhcmFtIGhhc1VwZGF0ZSBTZXQgdGhpcyB0byBgZmFsc2VgIHRvIGF2b2lkIHJlcG9ydGluZyB0aGUgSE1SIGV2ZW50IHZpYSBhXG4gKiAgIGBjbGllbnQtaG1yLWxhdGVuY3lgIGV2ZW50IG9yIHRvIGBzZWxmLl9fTkVYVF9ITVJfTEFURU5DWV9DQmAuIFVzZWQgYnlcbiAqICAgdHVyYm9wYWNrIHdoZW4gd2UgbXVzdCByZXBvcnQgYSBtZXNzYWdlIHRvIHRoZSBicm93c2VyIGNvbnNvbGUgKGJlY2F1c2Ugd2VcbiAqICAgYWxyZWFkeSBsb2dnZWQgYSBcInJlYnVpbGRpbmdcIiBtZXNzYWdlKSwgYnV0IGl0J3Mgbm90IGEgcmVhbCBITVIsIHNvIHdlXG4gKiAgIGRvbid0IHdhbnQgdG8gaW1wYWN0IG91ciB0ZWxlbWV0cnkuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlcG9ydEhtckxhdGVuY3koXG4gIHNlbmRNZXNzYWdlOiAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkLFxuICB1cGRhdGVkTW9kdWxlczogUmVhZG9ubHlBcnJheTxzdHJpbmcgfCBudW1iZXI+LFxuICBzdGFydE1zU2luY2VFcG9jaDogbnVtYmVyLFxuICBlbmRNc1NpbmNlRXBvY2g6IG51bWJlcixcbiAgaGFzVXBkYXRlOiBib29sZWFuID0gdHJ1ZVxuKSB7XG4gIGNvbnN0IGxhdGVuY3lNcyA9IGVuZE1zU2luY2VFcG9jaCAtIHN0YXJ0TXNTaW5jZUVwb2NoXG4gIGNvbnNvbGUubG9nKGBbRmFzdCBSZWZyZXNoXSBkb25lIGluICR7bGF0ZW5jeU1zfW1zYClcbiAgaWYgKCFoYXNVcGRhdGUpIHtcbiAgICByZXR1cm5cbiAgfVxuICBzZW5kTWVzc2FnZShcbiAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBldmVudDogJ2NsaWVudC1obXItbGF0ZW5jeScsXG4gICAgICBpZDogd2luZG93Ll9fbmV4dERldkNsaWVudElkLFxuICAgICAgc3RhcnRUaW1lOiBzdGFydE1zU2luY2VFcG9jaCxcbiAgICAgIGVuZFRpbWU6IGVuZE1zU2luY2VFcG9jaCxcbiAgICAgIHBhZ2U6IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgIHVwZGF0ZWRNb2R1bGVzLFxuICAgICAgLy8gV2hldGhlciB0aGUgcGFnZSAodGFiKSB3YXMgaGlkZGVuIGF0IHRoZSB0aW1lIHRoZSBldmVudCBvY2N1cnJlZC5cbiAgICAgIC8vIFRoaXMgY2FuIGltcGFjdCB0aGUgYWNjdXJhY3kgb2YgdGhlIGV2ZW50J3MgdGltaW5nLlxuICAgICAgaXNQYWdlSGlkZGVuOiBkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICdoaWRkZW4nLFxuICAgIH0pXG4gIClcbiAgaWYgKHNlbGYuX19ORVhUX0hNUl9MQVRFTkNZX0NCKSB7XG4gICAgc2VsZi5fX05FWFRfSE1SX0xBVEVOQ1lfQ0IobGF0ZW5jeU1zKVxuICB9XG59XG4iXSwibmFtZXMiOlsicmVwb3J0SG1yTGF0ZW5jeSIsInNlbmRNZXNzYWdlIiwidXBkYXRlZE1vZHVsZXMiLCJzdGFydE1zU2luY2VFcG9jaCIsImVuZE1zU2luY2VFcG9jaCIsImhhc1VwZGF0ZSIsImxhdGVuY3lNcyIsImNvbnNvbGUiLCJsb2ciLCJKU09OIiwic3RyaW5naWZ5IiwiZXZlbnQiLCJpZCIsIndpbmRvdyIsIl9fbmV4dERldkNsaWVudElkIiwic3RhcnRUaW1lIiwiZW5kVGltZSIsInBhZ2UiLCJsb2NhdGlvbiIsInBhdGhuYW1lIiwiaXNQYWdlSGlkZGVuIiwiZG9jdW1lbnQiLCJ2aXNpYmlsaXR5U3RhdGUiLCJzZWxmIiwiX19ORVhUX0hNUl9MQVRFTkNZX0NCIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/dev/report-hmr-latency.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/dev/runtime-error-handler.js":
|
||
/*!********************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/dev/runtime-error-handler.js ***!
|
||
\********************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"RuntimeErrorHandler\", ({\n enumerable: true,\n get: function() {\n return RuntimeErrorHandler;\n }\n}));\nconst RuntimeErrorHandler = {\n hadRuntimeError: false\n};\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=runtime-error-handler.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2Rldi9ydW50aW1lLWVycm9yLWhhbmRsZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozt1REFBYUE7OztlQUFBQTs7O0FBQU4sTUFBTUEsc0JBQXNCO0lBQ2pDQyxpQkFBaUI7QUFDbkIiLCJzb3VyY2VzIjpbIi9ob21lL05pY2hvbGFpL3NyYy9jbGllbnQvZGV2L3J1bnRpbWUtZXJyb3ItaGFuZGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgUnVudGltZUVycm9ySGFuZGxlciA9IHtcbiAgaGFkUnVudGltZUVycm9yOiBmYWxzZSxcbn1cbiJdLCJuYW1lcyI6WyJSdW50aW1lRXJyb3JIYW5kbGVyIiwiaGFkUnVudGltZUVycm9yIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/dev/runtime-error-handler.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/flight-data-helpers.js":
|
||
/*!**************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/flight-data-helpers.js ***!
|
||
\**************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n getFlightDataPartsFromPath: function() {\n return getFlightDataPartsFromPath;\n },\n getNextFlightSegmentPath: function() {\n return getNextFlightSegmentPath;\n },\n normalizeFlightData: function() {\n return normalizeFlightData;\n },\n prepareFlightRouterStateForRequest: function() {\n return prepareFlightRouterStateForRequest;\n }\n});\nconst _segment = __webpack_require__(/*! ../shared/lib/segment */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/segment.js\");\nfunction getFlightDataPartsFromPath(flightDataPath) {\n // Pick the last 4 items from the `FlightDataPath` to get the [tree, seedData, viewport, isHeadPartial].\n const flightDataPathLength = 4;\n // tree, seedData, and head are *always* the last three items in the `FlightDataPath`.\n const [tree, seedData, head, isHeadPartial] = flightDataPath.slice(-flightDataPathLength);\n // The `FlightSegmentPath` is everything except the last three items. For a root render, it won't be present.\n const segmentPath = flightDataPath.slice(0, -flightDataPathLength);\n var _segmentPath_;\n return {\n // TODO: Unify these two segment path helpers. We are inconsistently pushing an empty segment (\"\")\n // to the start of the segment path in some places which makes it hard to use solely the segment path.\n // Look for \"// TODO-APP: remove ''\" in the codebase.\n pathToSegment: segmentPath.slice(0, -1),\n segmentPath,\n // if the `FlightDataPath` corresponds with the root, there'll be no segment path,\n // in which case we default to ''.\n segment: (_segmentPath_ = segmentPath[segmentPath.length - 1]) != null ? _segmentPath_ : '',\n tree,\n seedData,\n head,\n isHeadPartial,\n isRootRender: flightDataPath.length === flightDataPathLength\n };\n}\nfunction getNextFlightSegmentPath(flightSegmentPath) {\n // Since `FlightSegmentPath` is a repeated tuple of `Segment` and `ParallelRouteKey`, we slice off two items\n // to get the next segment path.\n return flightSegmentPath.slice(2);\n}\nfunction normalizeFlightData(flightData) {\n // FlightData can be a string when the server didn't respond with a proper flight response,\n // or when a redirect happens, to signal to the client that it needs to perform an MPA navigation.\n if (typeof flightData === 'string') {\n return flightData;\n }\n return flightData.map(getFlightDataPartsFromPath);\n}\nfunction prepareFlightRouterStateForRequest(flightRouterState, isHmrRefresh) {\n // HMR requests need the complete, unmodified state for proper functionality\n if (isHmrRefresh) {\n return encodeURIComponent(JSON.stringify(flightRouterState));\n }\n return encodeURIComponent(JSON.stringify(stripClientOnlyDataFromFlightRouterState(flightRouterState)));\n}\n/**\n * Recursively strips client-only data from FlightRouterState while preserving\n * server-needed information for proper rendering decisions.\n */ function stripClientOnlyDataFromFlightRouterState(flightRouterState) {\n const [segment, parallelRoutes, _url, refreshMarker, isRootLayout, hasLoadingBoundary] = flightRouterState;\n // __PAGE__ segments are always fetched from the server, so there's\n // no need to send them up\n const cleanedSegment = stripSearchParamsFromPageSegment(segment);\n // Recursively process parallel routes\n const cleanedParallelRoutes = {};\n for (const [key, childState] of Object.entries(parallelRoutes)){\n cleanedParallelRoutes[key] = stripClientOnlyDataFromFlightRouterState(childState);\n }\n const result = [\n cleanedSegment,\n cleanedParallelRoutes,\n null,\n shouldPreserveRefreshMarker(refreshMarker) ? refreshMarker : null\n ];\n // Append optional fields if present\n if (isRootLayout !== undefined) {\n result[4] = isRootLayout;\n }\n if (hasLoadingBoundary !== undefined) {\n result[5] = hasLoadingBoundary;\n }\n return result;\n}\n/**\n * Strips search parameters from __PAGE__ segments to prevent sensitive\n * client-side data from being sent to the server.\n */ function stripSearchParamsFromPageSegment(segment) {\n if (typeof segment === 'string' && segment.startsWith(_segment.PAGE_SEGMENT_KEY + '?')) {\n return _segment.PAGE_SEGMENT_KEY;\n }\n return segment;\n}\n/**\n * Determines whether the refresh marker should be sent to the server\n * Client-only markers like 'refresh' are stripped, while server-needed markers\n * like 'refetch' and 'inside-shared-layout' are preserved.\n */ function shouldPreserveRefreshMarker(refreshMarker) {\n return Boolean(refreshMarker && refreshMarker !== 'refresh');\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=flight-data-helpers.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2ZsaWdodC1kYXRhLWhlbHBlcnMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBZ0NnQkEsMEJBQTBCO2VBQTFCQTs7SUE0QkFDLHdCQUF3QjtlQUF4QkE7O0lBUUFDLG1CQUFtQjtlQUFuQkE7O0lBb0JBQyxrQ0FBa0M7ZUFBbENBOzs7cUNBL0VpQjtBQXVCMUIsU0FBU0gsMkJBQ2RJLGNBQThCO0lBRTlCLHdHQUF3RztJQUN4RyxNQUFNQyx1QkFBdUI7SUFDN0Isc0ZBQXNGO0lBQ3RGLE1BQU0sQ0FBQ0MsTUFBTUMsVUFBVUMsTUFBTUMsY0FBYyxHQUN6Q0wsZUFBZU0sS0FBSyxDQUFDLENBQUNMO0lBQ3hCLDZHQUE2RztJQUM3RyxNQUFNTSxjQUFjUCxlQUFlTSxLQUFLLENBQUMsR0FBRyxDQUFDTDtRQVVsQ007SUFSWCxPQUFPO1FBQ0wsa0dBQWtHO1FBQ2xHLHNHQUFzRztRQUN0RyxxREFBcUQ7UUFDckRDLGVBQWVELFlBQVlELEtBQUssQ0FBQyxHQUFHLENBQUM7UUFDckNDO1FBQ0Esa0ZBQWtGO1FBQ2xGLGtDQUFrQztRQUNsQ0UsU0FBU0YsQ0FBQUEsZ0JBQUFBLFdBQVcsQ0FBQ0EsWUFBWUcsTUFBTSxHQUFHLE9BQUUsT0FBbkNILGdCQUF1QztRQUNoREw7UUFDQUM7UUFDQUM7UUFDQUM7UUFDQU0sY0FBY1gsZUFBZVUsTUFBTSxLQUFLVDtJQUMxQztBQUNGO0FBRU8sU0FBU0oseUJBQ2RlLGlCQUFvQztJQUVwQyw0R0FBNEc7SUFDNUcsZ0NBQWdDO0lBQ2hDLE9BQU9BLGtCQUFrQk4sS0FBSyxDQUFDO0FBQ2pDO0FBRU8sU0FBU1Isb0JBQ2RlLFVBQXNCO0lBRXRCLDJGQUEyRjtJQUMzRixrR0FBa0c7SUFDbEcsSUFBSSxPQUFPQSxlQUFlLFVBQVU7UUFDbEMsT0FBT0E7SUFDVDtJQUVBLE9BQU9BLFdBQVdDLEdBQUcsQ0FBQ2xCO0FBQ3hCO0FBVU8sU0FBU0csbUNBQ2RnQixpQkFBb0MsRUFDcENDLFlBQXNCO0lBRXRCLDRFQUE0RTtJQUM1RSxJQUFJQSxjQUFjO1FBQ2hCLE9BQU9DLG1CQUFtQkMsS0FBS0MsU0FBUyxDQUFDSjtJQUMzQztJQUVBLE9BQU9FLG1CQUNMQyxLQUFLQyxTQUFTLENBQUNDLHlDQUF5Q0w7QUFFNUQ7QUFFQTs7O0NBR0MsR0FDRCxTQUFTSyx5Q0FDUEwsaUJBQW9DO0lBRXBDLE1BQU0sQ0FDSk4sU0FDQVksZ0JBQ0FDLE1BQ0FDLGVBQ0FDLGNBQ0FDLG1CQUNELEdBQUdWO0lBRUosbUVBQW1FO0lBQ25FLDBCQUEwQjtJQUMxQixNQUFNVyxpQkFBaUJDLGlDQUFpQ2xCO0lBRXhELHNDQUFzQztJQUN0QyxNQUFNbUIsd0JBQThELENBQUM7SUFDckUsS0FBSyxNQUFNLENBQUNDLEtBQUtDLFdBQVcsSUFBSUMsT0FBT0MsT0FBTyxDQUFDWCxnQkFBaUI7UUFDOURPLHFCQUFxQixDQUFDQyxJQUFJLEdBQ3hCVCx5Q0FBeUNVO0lBQzdDO0lBRUEsTUFBTUcsU0FBNEI7UUFDaENQO1FBQ0FFO1FBQ0E7UUFDQU0sNEJBQTRCWCxpQkFBaUJBLGdCQUFnQjtLQUM5RDtJQUVELG9DQUFvQztJQUNwQyxJQUFJQyxpQkFBaUJXLFdBQVc7UUFDOUJGLE1BQU0sQ0FBQyxFQUFFLEdBQUdUO0lBQ2Q7SUFDQSxJQUFJQyx1QkFBdUJVLFdBQVc7UUFDcENGLE1BQU0sQ0FBQyxFQUFFLEdBQUdSO0lBQ2Q7SUFFQSxPQUFPUTtBQUNUO0FBRUE7OztDQUdDLEdBQ0QsU0FBU04saUNBQWlDbEIsT0FBZ0I7SUFDeEQsSUFDRSxPQUFPQSxZQUFZLFlBQ25CQSxRQUFRMkIsVUFBVSxDQUFDQyxTQUFBQSxnQkFBZ0IsR0FBRyxNQUN0QztRQUNBLE9BQU9BLFNBQUFBLGdCQUFnQjtJQUN6QjtJQUNBLE9BQU81QjtBQUNUO0FBRUE7Ozs7Q0FJQyxHQUNELFNBQVN5Qiw0QkFDUFgsYUFBbUM7SUFFbkMsT0FBT2UsUUFBUWYsaUJBQWlCQSxrQkFBa0I7QUFDcEQiLCJzb3VyY2VzIjpbIi9ob21lL05pY2hvbGFpL0RvY3VtZW50cy9zcmMvY2xpZW50L2ZsaWdodC1kYXRhLWhlbHBlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBDYWNoZU5vZGVTZWVkRGF0YSxcbiAgRmxpZ2h0RGF0YSxcbiAgRmxpZ2h0RGF0YVBhdGgsXG4gIEZsaWdodFJvdXRlclN0YXRlLFxuICBGbGlnaHRTZWdtZW50UGF0aCxcbiAgU2VnbWVudCxcbn0gZnJvbSAnLi4vc2VydmVyL2FwcC1yZW5kZXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IEhlYWREYXRhIH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUnXG5pbXBvcnQgeyBQQUdFX1NFR01FTlRfS0VZIH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9zZWdtZW50J1xuXG5leHBvcnQgdHlwZSBOb3JtYWxpemVkRmxpZ2h0RGF0YSA9IHtcbiAgLyoqXG4gICAqIFRoZSBmdWxsIGBGbGlnaHRTZWdtZW50UGF0aGAgaW5jbHVzaXZlIG9mIHRoZSBmaW5hbCBgU2VnbWVudGBcbiAgICovXG4gIHNlZ21lbnRQYXRoOiBGbGlnaHRTZWdtZW50UGF0aFxuICAvKipcbiAgICogVGhlIGBGbGlnaHRTZWdtZW50UGF0aGAgZXhjbHVzaXZlIG9mIHRoZSBmaW5hbCBgU2VnbWVudGBcbiAgICovXG4gIHBhdGhUb1NlZ21lbnQ6IEZsaWdodFNlZ21lbnRQYXRoXG4gIHNlZ21lbnQ6IFNlZ21lbnRcbiAgdHJlZTogRmxpZ2h0Um91dGVyU3RhdGVcbiAgc2VlZERhdGE6IENhY2hlTm9kZVNlZWREYXRhIHwgbnVsbFxuICBoZWFkOiBIZWFkRGF0YVxuICBpc0hlYWRQYXJ0aWFsOiBib29sZWFuXG4gIGlzUm9vdFJlbmRlcjogYm9vbGVhblxufVxuXG4vLyBUT0RPOiBXZSBzaG91bGQgb25seSBoYXZlIHRvIGV4cG9ydCBgbm9ybWFsaXplRmxpZ2h0RGF0YWAsIGhvd2V2ZXIgYmVjYXVzZSB0aGUgaW5pdGlhbCBmbGlnaHQgZGF0YVxuLy8gdGhhdCBnZXRzIHBhc3NlZCB0byBgY3JlYXRlSW5pdGlhbFJvdXRlclN0YXRlYCBkb2Vzbid0IGNvbmZvcm0gdG8gdGhlIGBGbGlnaHREYXRhUGF0aGAgdHlwZSAoaXQncyBtaXNzaW5nIHRoZSByb290IHNlZ21lbnQpXG4vLyB3ZSdyZSBjdXJyZW50bHkgZXhwb3J0aW5nIGl0IHNvIHdlIGNhbiB1c2UgaXQgZGlyZWN0bHkuIFRoaXMgc2hvdWxkIGJlIGZpeGVkIGFzIHBhcnQgb2YgdGhlIHVuaWZpY2F0aW9uIG9mXG4vLyB0aGUgZGlmZmVyZW50IHdheXMgd2UgZXhwcmVzcyBgRmxpZ2h0U2VnbWVudFBhdGhgLlxuZXhwb3J0IGZ1bmN0aW9uIGdldEZsaWdodERhdGFQYXJ0c0Zyb21QYXRoKFxuICBmbGlnaHREYXRhUGF0aDogRmxpZ2h0RGF0YVBhdGhcbik6IE5vcm1hbGl6ZWRGbGlnaHREYXRhIHtcbiAgLy8gUGljayB0aGUgbGFzdCA0IGl0ZW1zIGZyb20gdGhlIGBGbGlnaHREYXRhUGF0aGAgdG8gZ2V0IHRoZSBbdHJlZSwgc2VlZERhdGEsIHZpZXdwb3J0LCBpc0hlYWRQYXJ0aWFsXS5cbiAgY29uc3QgZmxpZ2h0RGF0YVBhdGhMZW5ndGggPSA0XG4gIC8vIHRyZWUsIHNlZWREYXRhLCBhbmQgaGVhZCBhcmUgKmFsd2F5cyogdGhlIGxhc3QgdGhyZWUgaXRlbXMgaW4gdGhlIGBGbGlnaHREYXRhUGF0aGAuXG4gIGNvbnN0IFt0cmVlLCBzZWVkRGF0YSwgaGVhZCwgaXNIZWFkUGFydGlhbF0gPVxuICAgIGZsaWdodERhdGFQYXRoLnNsaWNlKC1mbGlnaHREYXRhUGF0aExlbmd0aClcbiAgLy8gVGhlIGBGbGlnaHRTZWdtZW50UGF0aGAgaXMgZXZlcnl0aGluZyBleGNlcHQgdGhlIGxhc3QgdGhyZWUgaXRlbXMuIEZvciBhIHJvb3QgcmVuZGVyLCBpdCB3b24ndCBiZSBwcmVzZW50LlxuICBjb25zdCBzZWdtZW50UGF0aCA9IGZsaWdodERhdGFQYXRoLnNsaWNlKDAsIC1mbGlnaHREYXRhUGF0aExlbmd0aClcblxuICByZXR1cm4ge1xuICAgIC8vIFRPRE86IFVuaWZ5IHRoZXNlIHR3byBzZWdtZW50IHBhdGggaGVscGVycy4gV2UgYXJlIGluY29uc2lzdGVudGx5IHB1c2hpbmcgYW4gZW1wdHkgc2VnbWVudCAoXCJcIilcbiAgICAvLyB0byB0aGUgc3RhcnQgb2YgdGhlIHNlZ21lbnQgcGF0aCBpbiBzb21lIHBsYWNlcyB3aGljaCBtYWtlcyBpdCBoYXJkIHRvIHVzZSBzb2xlbHkgdGhlIHNlZ21lbnQgcGF0aC5cbiAgICAvLyBMb29rIGZvciBcIi8vIFRPRE8tQVBQOiByZW1vdmUgJydcIiBpbiB0aGUgY29kZWJhc2UuXG4gICAgcGF0aFRvU2VnbWVudDogc2VnbWVudFBhdGguc2xpY2UoMCwgLTEpLFxuICAgIHNlZ21lbnRQYXRoLFxuICAgIC8vIGlmIHRoZSBgRmxpZ2h0RGF0YVBhdGhgIGNvcnJlc3BvbmRzIHdpdGggdGhlIHJvb3QsIHRoZXJlJ2xsIGJlIG5vIHNlZ21lbnQgcGF0aCxcbiAgICAvLyBpbiB3aGljaCBjYXNlIHdlIGRlZmF1bHQgdG8gJycuXG4gICAgc2VnbWVudDogc2VnbWVudFBhdGhbc2VnbWVudFBhdGgubGVuZ3RoIC0gMV0gPz8gJycsXG4gICAgdHJlZSxcbiAgICBzZWVkRGF0YSxcbiAgICBoZWFkLFxuICAgIGlzSGVhZFBhcnRpYWwsXG4gICAgaXNSb290UmVuZGVyOiBmbGlnaHREYXRhUGF0aC5sZW5ndGggPT09IGZsaWdodERhdGFQYXRoTGVuZ3RoLFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXh0RmxpZ2h0U2VnbWVudFBhdGgoXG4gIGZsaWdodFNlZ21lbnRQYXRoOiBGbGlnaHRTZWdtZW50UGF0aFxuKTogRmxpZ2h0U2VnbWVudFBhdGgge1xuICAvLyBTaW5jZSBgRmxpZ2h0U2VnbWVudFBhdGhgIGlzIGEgcmVwZWF0ZWQgdHVwbGUgb2YgYFNlZ21lbnRgIGFuZCBgUGFyYWxsZWxSb3V0ZUtleWAsIHdlIHNsaWNlIG9mZiB0d28gaXRlbXNcbiAgLy8gdG8gZ2V0IHRoZSBuZXh0IHNlZ21lbnQgcGF0aC5cbiAgcmV0dXJuIGZsaWdodFNlZ21lbnRQYXRoLnNsaWNlKDIpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVGbGlnaHREYXRhKFxuICBmbGlnaHREYXRhOiBGbGlnaHREYXRhXG4pOiBOb3JtYWxpemVkRmxpZ2h0RGF0YVtdIHwgc3RyaW5nIHtcbiAgLy8gRmxpZ2h0RGF0YSBjYW4gYmUgYSBzdHJpbmcgd2hlbiB0aGUgc2VydmVyIGRpZG4ndCByZXNwb25kIHdpdGggYSBwcm9wZXIgZmxpZ2h0IHJlc3BvbnNlLFxuICAvLyBvciB3aGVuIGEgcmVkaXJlY3QgaGFwcGVucywgdG8gc2lnbmFsIHRvIHRoZSBjbGllbnQgdGhhdCBpdCBuZWVkcyB0byBwZXJmb3JtIGFuIE1QQSBuYXZpZ2F0aW9uLlxuICBpZiAodHlwZW9mIGZsaWdodERhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZsaWdodERhdGFcbiAgfVxuXG4gIHJldHVybiBmbGlnaHREYXRhLm1hcChnZXRGbGlnaHREYXRhUGFydHNGcm9tUGF0aClcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcHJlcGFyZSB0aGUgZmxpZ2h0IHJvdXRlciBzdGF0ZSBmb3IgdGhlIHJlcXVlc3QuXG4gKiBJdCByZW1vdmVzIG1hcmtlcnMgdGhhdCBhcmUgbm90IG5lZWRlZCBieSB0aGUgc2VydmVyLCBhbmQgYXJlIHB1cmVseSB1c2VkXG4gKiBmb3Igc3Rhc2hpbmcgc3RhdGUgb24gdGhlIGNsaWVudC5cbiAqIEBwYXJhbSBmbGlnaHRSb3V0ZXJTdGF0ZSAtIFRoZSBmbGlnaHQgcm91dGVyIHN0YXRlIHRvIHByZXBhcmUuXG4gKiBAcGFyYW0gaXNIbXJSZWZyZXNoIC0gV2hldGhlciB0aGlzIGlzIGFuIEhNUiByZWZyZXNoIHJlcXVlc3QuXG4gKiBAcmV0dXJucyBUaGUgcHJlcGFyZWQgZmxpZ2h0IHJvdXRlciBzdGF0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVGbGlnaHRSb3V0ZXJTdGF0ZUZvclJlcXVlc3QoXG4gIGZsaWdodFJvdXRlclN0YXRlOiBGbGlnaHRSb3V0ZXJTdGF0ZSxcbiAgaXNIbXJSZWZyZXNoPzogYm9vbGVhblxuKTogc3RyaW5nIHtcbiAgLy8gSE1SIHJlcXVlc3RzIG5lZWQgdGhlIGNvbXBsZXRlLCB1bm1vZGlmaWVkIHN0YXRlIGZvciBwcm9wZXIgZnVuY3Rpb25hbGl0eVxuICBpZiAoaXNIbXJSZWZyZXNoKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShmbGlnaHRSb3V0ZXJTdGF0ZSkpXG4gIH1cblxuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KFxuICAgIEpTT04uc3RyaW5naWZ5KHN0cmlwQ2xpZW50T25seURhdGFGcm9tRmxpZ2h0Um91dGVyU3RhdGUoZmxpZ2h0Um91dGVyU3RhdGUpKVxuICApXG59XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgc3RyaXBzIGNsaWVudC1vbmx5IGRhdGEgZnJvbSBGbGlnaHRSb3V0ZXJTdGF0ZSB3aGlsZSBwcmVzZXJ2aW5nXG4gKiBzZXJ2ZXItbmVlZGVkIGluZm9ybWF0aW9uIGZvciBwcm9wZXIgcmVuZGVyaW5nIGRlY2lzaW9ucy5cbiAqL1xuZnVuY3Rpb24gc3RyaXBDbGllbnRPbmx5RGF0YUZyb21GbGlnaHRSb3V0ZXJTdGF0ZShcbiAgZmxpZ2h0Um91dGVyU3RhdGU6IEZsaWdodFJvdXRlclN0YXRlXG4pOiBGbGlnaHRSb3V0ZXJTdGF0ZSB7XG4gIGNvbnN0IFtcbiAgICBzZWdtZW50LFxuICAgIHBhcmFsbGVsUm91dGVzLFxuICAgIF91cmwsIC8vIEludGVudGlvbmFsbHkgdW51c2VkIC0gVVJMcyBhcmUgY2xpZW50LW9ubHlcbiAgICByZWZyZXNoTWFya2VyLFxuICAgIGlzUm9vdExheW91dCxcbiAgICBoYXNMb2FkaW5nQm91bmRhcnksXG4gIF0gPSBmbGlnaHRSb3V0ZXJTdGF0ZVxuXG4gIC8vIF9fUEFHRV9fIHNlZ21lbnRzIGFyZSBhbHdheXMgZmV0Y2hlZCBmcm9tIHRoZSBzZXJ2ZXIsIHNvIHRoZXJlJ3NcbiAgLy8gbm8gbmVlZCB0byBzZW5kIHRoZW0gdXBcbiAgY29uc3QgY2xlYW5lZFNlZ21lbnQgPSBzdHJpcFNlYXJjaFBhcmFtc0Zyb21QYWdlU2VnbWVudChzZWdtZW50KVxuXG4gIC8vIFJlY3Vyc2l2ZWx5IHByb2Nlc3MgcGFyYWxsZWwgcm91dGVzXG4gIGNvbnN0IGNsZWFuZWRQYXJhbGxlbFJvdXRlczogeyBba2V5OiBzdHJpbmddOiBGbGlnaHRSb3V0ZXJTdGF0ZSB9ID0ge31cbiAgZm9yIChjb25zdCBba2V5LCBjaGlsZFN0YXRlXSBvZiBPYmplY3QuZW50cmllcyhwYXJhbGxlbFJvdXRlcykpIHtcbiAgICBjbGVhbmVkUGFyYWxsZWxSb3V0ZXNba2V5XSA9XG4gICAgICBzdHJpcENsaWVudE9ubHlEYXRhRnJvbUZsaWdodFJvdXRlclN0YXRlKGNoaWxkU3RhdGUpXG4gIH1cblxuICBjb25zdCByZXN1bHQ6IEZsaWdodFJvdXRlclN0YXRlID0gW1xuICAgIGNsZWFuZWRTZWdtZW50LFxuICAgIGNsZWFuZWRQYXJhbGxlbFJvdXRlcyxcbiAgICBudWxsLCAvLyBVUkxzIG9taXR0ZWQgLSBzZXJ2ZXIgcmVjb25zdHJ1Y3RzIHBhdGhzIGZyb20gc2VnbWVudHNcbiAgICBzaG91bGRQcmVzZXJ2ZVJlZnJlc2hNYXJrZXIocmVmcmVzaE1hcmtlcikgPyByZWZyZXNoTWFya2VyIDogbnVsbCxcbiAgXVxuXG4gIC8vIEFwcGVuZCBvcHRpb25hbCBmaWVsZHMgaWYgcHJlc2VudFxuICBpZiAoaXNSb290TGF5b3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXN1bHRbNF0gPSBpc1Jvb3RMYXlvdXRcbiAgfVxuICBpZiAoaGFzTG9hZGluZ0JvdW5kYXJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXN1bHRbNV0gPSBoYXNMb2FkaW5nQm91bmRhcnlcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBTdHJpcHMgc2VhcmNoIHBhcmFtZXRlcnMgZnJvbSBfX1BBR0VfXyBzZWdtZW50cyB0byBwcmV2ZW50IHNlbnNpdGl2ZVxuICogY2xpZW50LXNpZGUgZGF0YSBmcm9tIGJlaW5nIHNlbnQgdG8gdGhlIHNlcnZlci5cbiAqL1xuZnVuY3Rpb24gc3RyaXBTZWFyY2hQYXJhbXNGcm9tUGFnZVNlZ21lbnQoc2VnbWVudDogU2VnbWVudCk6IFNlZ21lbnQge1xuICBpZiAoXG4gICAgdHlwZW9mIHNlZ21lbnQgPT09ICdzdHJpbmcnICYmXG4gICAgc2VnbWVudC5zdGFydHNXaXRoKFBBR0VfU0VHTUVOVF9LRVkgKyAnPycpXG4gICkge1xuICAgIHJldHVybiBQQUdFX1NFR01FTlRfS0VZXG4gIH1cbiAgcmV0dXJuIHNlZ21lbnRcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHJlZnJlc2ggbWFya2VyIHNob3VsZCBiZSBzZW50IHRvIHRoZSBzZXJ2ZXJcbiAqIENsaWVudC1vbmx5IG1hcmtlcnMgbGlrZSAncmVmcmVzaCcgYXJlIHN0cmlwcGVkLCB3aGlsZSBzZXJ2ZXItbmVlZGVkIG1hcmtlcnNcbiAqIGxpa2UgJ3JlZmV0Y2gnIGFuZCAnaW5zaWRlLXNoYXJlZC1sYXlvdXQnIGFyZSBwcmVzZXJ2ZWQuXG4gKi9cbmZ1bmN0aW9uIHNob3VsZFByZXNlcnZlUmVmcmVzaE1hcmtlcihcbiAgcmVmcmVzaE1hcmtlcjogRmxpZ2h0Um91dGVyU3RhdGVbM11cbik6IGJvb2xlYW4ge1xuICByZXR1cm4gQm9vbGVhbihyZWZyZXNoTWFya2VyICYmIHJlZnJlc2hNYXJrZXIgIT09ICdyZWZyZXNoJylcbn1cbiJdLCJuYW1lcyI6WyJnZXRGbGlnaHREYXRhUGFydHNGcm9tUGF0aCIsImdldE5leHRGbGlnaHRTZWdtZW50UGF0aCIsIm5vcm1hbGl6ZUZsaWdodERhdGEiLCJwcmVwYXJlRmxpZ2h0Um91dGVyU3RhdGVGb3JSZXF1ZXN0IiwiZmxpZ2h0RGF0YVBhdGgiLCJmbGlnaHREYXRhUGF0aExlbmd0aCIsInRyZWUiLCJzZWVkRGF0YSIsImhlYWQiLCJpc0hlYWRQYXJ0aWFsIiwic2xpY2UiLCJzZWdtZW50UGF0aCIsInBhdGhUb1NlZ21lbnQiLCJzZWdtZW50IiwibGVuZ3RoIiwiaXNSb290UmVuZGVyIiwiZmxpZ2h0U2VnbWVudFBhdGgiLCJmbGlnaHREYXRhIiwibWFwIiwiZmxpZ2h0Um91dGVyU3RhdGUiLCJpc0htclJlZnJlc2giLCJlbmNvZGVVUklDb21wb25lbnQiLCJKU09OIiwic3RyaW5naWZ5Iiwic3RyaXBDbGllbnRPbmx5RGF0YUZyb21GbGlnaHRSb3V0ZXJTdGF0ZSIsInBhcmFsbGVsUm91dGVzIiwiX3VybCIsInJlZnJlc2hNYXJrZXIiLCJpc1Jvb3RMYXlvdXQiLCJoYXNMb2FkaW5nQm91bmRhcnkiLCJjbGVhbmVkU2VnbWVudCIsInN0cmlwU2VhcmNoUGFyYW1zRnJvbVBhZ2VTZWdtZW50IiwiY2xlYW5lZFBhcmFsbGVsUm91dGVzIiwia2V5IiwiY2hpbGRTdGF0ZSIsIk9iamVjdCIsImVudHJpZXMiLCJyZXN1bHQiLCJzaG91bGRQcmVzZXJ2ZVJlZnJlc2hNYXJrZXIiLCJ1bmRlZmluZWQiLCJzdGFydHNXaXRoIiwiUEFHRV9TRUdNRU5UX0tFWSIsIkJvb2xlYW4iXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/flight-data-helpers.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/has-base-path.js":
|
||
/*!********************************************************!*\
|
||
!*** ./node_modules/next/dist/client/has-base-path.js ***!
|
||
\********************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"hasBasePath\", ({\n enumerable: true,\n get: function() {\n return hasBasePath;\n }\n}));\nconst _pathhasprefix = __webpack_require__(/*! ../shared/lib/router/utils/path-has-prefix */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js\");\nconst basePath = false || '';\nfunction hasBasePath(path) {\n return (0, _pathhasprefix.pathHasPrefix)(path, basePath);\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=has-base-path.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2hhcy1iYXNlLXBhdGguanMiLCJtYXBwaW5ncyI6Ijs7OzsrQ0FJZ0JBOzs7ZUFBQUE7OzsyQ0FKYztBQUU5QixNQUFNQyxXQUFZQyxNQUFrQyxJQUFlO0FBRTVELFNBQVNGLFlBQVlLLElBQVk7SUFDdEMsT0FBT0MsQ0FBQUEsR0FBQUEsZUFBQUEsYUFBQUEsRUFBY0QsTUFBTUo7QUFDN0IiLCJzb3VyY2VzIjpbIi9ob21lL05pY2hvbGFpL0RvY3VtZW50cy9zcmMvY2xpZW50L2hhcy1iYXNlLXBhdGgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcGF0aEhhc1ByZWZpeCB9IGZyb20gJy4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3BhdGgtaGFzLXByZWZpeCdcblxuY29uc3QgYmFzZVBhdGggPSAocHJvY2Vzcy5lbnYuX19ORVhUX1JPVVRFUl9CQVNFUEFUSCBhcyBzdHJpbmcpIHx8ICcnXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNCYXNlUGF0aChwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHBhdGhIYXNQcmVmaXgocGF0aCwgYmFzZVBhdGgpXG59XG4iXSwibmFtZXMiOlsiaGFzQmFzZVBhdGgiLCJiYXNlUGF0aCIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfUk9VVEVSX0JBU0VQQVRIIiwicGF0aCIsInBhdGhIYXNQcmVmaXgiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/has-base-path.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/lib/console.js":
|
||
/*!******************************************************!*\
|
||
!*** ./node_modules/next/dist/client/lib/console.js ***!
|
||
\******************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n formatConsoleArgs: function() {\n return formatConsoleArgs;\n },\n parseConsoleArgs: function() {\n return parseConsoleArgs;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _iserror = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../../lib/is-error */ \"(app-pages-browser)/./node_modules/next/dist/lib/is-error.js\"));\nfunction formatObject(arg, depth) {\n switch(typeof arg){\n case 'object':\n if (arg === null) {\n return 'null';\n } else if (Array.isArray(arg)) {\n let result = '[';\n if (depth < 1) {\n for(let i = 0; i < arg.length; i++){\n if (result !== '[') {\n result += ',';\n }\n if (Object.prototype.hasOwnProperty.call(arg, i)) {\n result += formatObject(arg[i], depth + 1);\n }\n }\n } else {\n result += arg.length > 0 ? '...' : '';\n }\n result += ']';\n return result;\n } else if (arg instanceof Error) {\n return arg + '';\n } else {\n const keys = Object.keys(arg);\n let result = '{';\n if (depth < 1) {\n for(let i = 0; i < keys.length; i++){\n const key = keys[i];\n const desc = Object.getOwnPropertyDescriptor(arg, 'key');\n if (desc && !desc.get && !desc.set) {\n const jsonKey = JSON.stringify(key);\n if (jsonKey !== '\"' + key + '\"') {\n result += jsonKey + ': ';\n } else {\n result += key + ': ';\n }\n result += formatObject(desc.value, depth + 1);\n }\n }\n } else {\n result += keys.length > 0 ? '...' : '';\n }\n result += '}';\n return result;\n }\n case 'string':\n return JSON.stringify(arg);\n default:\n return String(arg);\n }\n}\nfunction formatConsoleArgs(args) {\n let message;\n let idx;\n if (typeof args[0] === 'string') {\n message = args[0];\n idx = 1;\n } else {\n message = '';\n idx = 0;\n }\n let result = '';\n let startQuote = false;\n for(let i = 0; i < message.length; ++i){\n const char = message[i];\n if (char !== '%' || i === message.length - 1 || idx >= args.length) {\n result += char;\n continue;\n }\n const code = message[++i];\n switch(code){\n case 'c':\n {\n // TODO: We should colorize with HTML instead of turning into a string.\n // Ignore for now.\n result = startQuote ? \"\" + result + \"]\" : \"[\" + result;\n startQuote = !startQuote;\n idx++;\n break;\n }\n case 'O':\n case 'o':\n {\n result += formatObject(args[idx++], 0);\n break;\n }\n case 'd':\n case 'i':\n {\n result += parseInt(args[idx++], 10);\n break;\n }\n case 'f':\n {\n result += parseFloat(args[idx++]);\n break;\n }\n case 's':\n {\n result += String(args[idx++]);\n break;\n }\n default:\n result += '%' + code;\n }\n }\n for(; idx < args.length; idx++){\n result += (idx > 0 ? ' ' : '') + formatObject(args[idx], 0);\n }\n return result;\n}\nfunction parseConsoleArgs(args) {\n // See\n // https://github.com/facebook/react/blob/65a56d0e99261481c721334a3ec4561d173594cd/packages/react-devtools-shared/src/backend/flight/renderer.js#L88-L93\n //\n // Logs replayed from the server look like this:\n // [\n // \"%c%s%c %o\\n\\n%s\\n\\n%s\\n\",\n // \"background: #e6e6e6; ...\",\n // \" Server \", // can also be e.g. \" Prerender \"\n // \"\",\n // Error,\n // \"The above error occurred in the <Page> component.\",\n // ...\n // ]\n if (args.length > 3 && typeof args[0] === 'string' && args[0].startsWith('%c%s%c ') && typeof args[1] === 'string' && typeof args[2] === 'string' && typeof args[3] === 'string') {\n const environmentName = args[2];\n const maybeError = args[4];\n return {\n environmentName: environmentName.trim(),\n error: (0, _iserror.default)(maybeError) ? maybeError : null\n };\n }\n return {\n environmentName: null,\n error: null\n };\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=console.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2xpYi9jb25zb2xlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQXVEZ0JBLGlCQUFpQjtlQUFqQkE7O0lBMkRBQyxnQkFBZ0I7ZUFBaEJBOzs7OzhFQWxISTtBQUVwQixTQUFTQyxhQUFhQyxHQUFZLEVBQUVDLEtBQWE7SUFDL0MsT0FBUSxPQUFPRDtRQUNiLEtBQUs7WUFDSCxJQUFJQSxRQUFRLE1BQU07Z0JBQ2hCLE9BQU87WUFDVCxPQUFPLElBQUlFLE1BQU1DLE9BQU8sQ0FBQ0gsTUFBTTtnQkFDN0IsSUFBSUksU0FBUztnQkFDYixJQUFJSCxRQUFRLEdBQUc7b0JBQ2IsSUFBSyxJQUFJSSxJQUFJLEdBQUdBLElBQUlMLElBQUlNLE1BQU0sRUFBRUQsSUFBSzt3QkFDbkMsSUFBSUQsV0FBVyxLQUFLOzRCQUNsQkEsVUFBVTt3QkFDWjt3QkFDQSxJQUFJRyxPQUFPQyxTQUFTLENBQUNDLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDVixLQUFLSyxJQUFJOzRCQUNoREQsVUFBVUwsYUFBYUMsR0FBRyxDQUFDSyxFQUFFLEVBQUVKLFFBQVE7d0JBQ3pDO29CQUNGO2dCQUNGLE9BQU87b0JBQ0xHLFVBQVVKLElBQUlNLE1BQU0sR0FBRyxJQUFJLFFBQVE7Z0JBQ3JDO2dCQUNBRixVQUFVO2dCQUNWLE9BQU9BO1lBQ1QsT0FBTyxJQUFJSixlQUFlVyxPQUFPO2dCQUMvQixPQUFPWCxNQUFNO1lBQ2YsT0FBTztnQkFDTCxNQUFNWSxPQUFPTCxPQUFPSyxJQUFJLENBQUNaO2dCQUN6QixJQUFJSSxTQUFTO2dCQUNiLElBQUlILFFBQVEsR0FBRztvQkFDYixJQUFLLElBQUlJLElBQUksR0FBR0EsSUFBSU8sS0FBS04sTUFBTSxFQUFFRCxJQUFLO3dCQUNwQyxNQUFNUSxNQUFNRCxJQUFJLENBQUNQLEVBQUU7d0JBQ25CLE1BQU1TLE9BQU9QLE9BQU9RLHdCQUF3QixDQUFDZixL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LE9BQU9BLElBQUksQ0FBQyxFQUFFLEtBQUssVUFDbkI7UUFDQSxNQUFNUyxrQkFBa0JULElBQUksQ0FBQyxFQUFFO1FBQy9CLE1BQU1VLGFBQWFWLElBQUksQ0FBQyxFQUFFO1FBRTFCLE9BQU87WUFDTFMsaUJBQWlCQSxnQkFBZ0JFLElBQUk7WUFDckNDLE9BQU9DLENBQUFBLEdBQUFBLFNBQUFBLE9BQUFBLEVBQVFILGNBQWNBLGFBQWE7UUFDNUM7SUFDRjtJQUVBLE9BQU87UUFDTEQsaUJBQWlCO1FBQ2pCRyxPQUFPO0lBQ1Q7QUFDRiIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvc3JjL2NsaWVudC9saWIvY29uc29sZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaXNFcnJvciBmcm9tICcuLi8uLi9saWIvaXMtZXJyb3InXG5cbmZ1bmN0aW9uIGZvcm1hdE9iamVjdChhcmc6IHVua25vd24sIGRlcHRoOiBudW1iZXIpIHtcbiAgc3dpdGNoICh0eXBlb2YgYXJnKSB7XG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgIGlmIChhcmcgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuICdudWxsJ1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9ICdbJ1xuICAgICAgICBpZiAoZGVwdGggPCAxKSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgIT09ICdbJykge1xuICAgICAgICAgICAgICByZXN1bHQgKz0gJywnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFyZywgaSkpIHtcbiAgICAgICAgICAgICAgcmVzdWx0ICs9IGZvcm1hdE9iamVjdChhcmdbaV0sIGRlcHRoICsgMSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0ICs9IGFyZy5sZW5ndGggPiAwID8gJy4uLicgOiAnJ1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCArPSAnXSdcbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgfSBlbHNlIGlmIChhcmcgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICByZXR1cm4gYXJnICsgJydcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhcmcpXG4gICAgICAgIGxldCByZXN1bHQgPSAneydcbiAgICAgICAgaWYgKGRlcHRoIDwgMSkge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXVxuICAgICAgICAgICAgY29uc3QgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYXJnLCAna2V5JylcbiAgICAgICAgICAgIGlmIChkZXNjICYmICFkZXNjLmdldCAmJiAhZGVzYy5zZXQpIHtcbiAgICAgICAgICAgICAgY29uc3QganNvbktleSA9IEpTT04uc3RyaW5naWZ5KGtleSlcbiAgICAgICAgICAgICAgaWYgKGpzb25LZXkgIT09ICdcIicgKyBrZXkgKyAnXCInKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGpzb25LZXkgKyAnOiAnXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGtleSArICc6ICdcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXN1bHQgKz0gZm9ybWF0T2JqZWN0KGRlc2MudmFsdWUsIGRlcHRoICsgMSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0ICs9IGtleXMubGVuZ3RoID4gMCA/ICcuLi4nIDogJydcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgKz0gJ30nXG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH1cbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGFyZylcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFN0cmluZyhhcmcpXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdENvbnNvbGVBcmdzKGFyZ3M6IHVua25vd25bXSk6IHN0cmluZyB7XG4gIGxldCBtZXNzYWdlOiBzdHJpbmdcbiAgbGV0IGlkeDogbnVtYmVyXG4gIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICBtZXNzYWdlID0gYXJnc1swXVxuICAgIGlkeCA9IDFcbiAgfSBlbHNlIHtcbiAgICBtZXNzYWdlID0gJydcbiAgICBpZHggPSAwXG4gIH1cbiAgbGV0IHJlc3VsdCA9ICcnXG4gIGxldCBzdGFydFF1b3RlID0gZmFsc2VcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXNzYWdlLmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgY2hhciA9IG1lc3NhZ2VbaV1cbiAgICBpZiAoY2hhciAhPT0gJyUnIHx8IGkgPT09IG1lc3NhZ2UubGVuZ3RoIC0gMSB8fCBpZHggPj0gYXJncy5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdCArPSBjaGFyXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGNvbnN0IGNvZGUgPSBtZXNzYWdlWysraV1cbiAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgIGNhc2UgJ2MnOiB7XG4gICAgICAgIC8vIFRPRE86IFdlIHNob3VsZCBjb2xvcml6ZSB3aXRoIEhUTUwgaW5zdGVhZCBvZiB0dXJuaW5nIGludG8gYSBzdHJpbmcuXG4gICAgICAgIC8vIElnbm9yZSBmb3Igbm93LlxuICAgICAgICByZXN1bHQgPSBzdGFydFF1b3RlID8gYCR7cmVzdWx0fV1gIDogYFske3Jlc3VsdH1gXG4gICAgICAgIHN0YXJ0UXVvdGUgPSAhc3RhcnRRdW90ZVxuICAgICAgICBpZHgrK1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSAnTyc6XG4gICAgICBjYXNlICdvJzoge1xuICAgICAgICByZXN1bHQgKz0gZm9ybWF0T2JqZWN0KGFyZ3NbaWR4KytdLCAwKVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSAnZCc6XG4gICAgICBjYXNlICdpJzoge1xuICAgICAgICByZXN1bHQgKz0gcGFyc2VJbnQoYXJnc1tpZHgrK10gYXMgYW55LCAxMClcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2YnOiB7XG4gICAgICAgIHJlc3VsdCArPSBwYXJzZUZsb2F0KGFyZ3NbaWR4KytdIGFzIGFueSlcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3MnOiB7XG4gICAgICAgIHJlc3VsdCArPSBTdHJpbmcoYXJnc1tpZHgrK10pXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXN1bHQgKz0gJyUnICsgY29kZVxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBpZHggPCBhcmdzLmxlbmd0aDsgaWR4KyspIHtcbiAgICByZXN1bHQgKz0gKGlkeCA+IDAgPyAnICcgOiAnJykgKyBmb3JtYXRPYmplY3QoYXJnc1tpZHhdLCAwKVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDb25zb2xlQXJncyhhcmdzOiB1bmtub3duW10pOiB7XG4gIGVudmlyb25tZW50TmFtZTogc3RyaW5nIHwgbnVsbFxuICBlcnJvcjogRXJyb3IgfCBudWxsXG59IHtcbiAgLy8gU2VlXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iLzY1YTU2ZDBlOTkyNjE0ODFjNzIxMzM0YTNlYzQ1NjFkMTczNTk0Y2QvcGFja2FnZXMvcmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL2ZsaWdodC9yZW5kZXJlci5qcyNMODgtTDkzXG4gIC8vXG4gIC8vIExvZ3MgcmVwbGF5ZWQgZnJvbSB0aGUgc2VydmVyIGxvb2sgbGlrZSB0aGlzOlxuICAvLyBbXG4gIC8vICAgXCIlYyVzJWMgJW9cXG5cXG4lc1xcblxcbiVzXFxuXCIsXG4gIC8vICAgXCJiYWNrZ3JvdW5kOiAjZTZlNmU2OyAuLi5cIixcbiAgLy8gICBcIiBTZXJ2ZXIgXCIsIC8vIGNhbiBhbHNvIGJlIGUuZy4gXCIgUHJlcmVuZGVyIFwiXG4gIC8vICAgXCJcIixcbiAgLy8gICBFcnJvcixcbiAgLy8gICBcIlRoZSBhYm92ZSBlcnJvciBvY2N1cnJlZCBpbiB0aGUgPFBhZ2U+IGNvbXBvbmVudC5cIixcbiAgLy8gICAuLi5cbiAgLy8gXVxuICBpZiAoXG4gICAgYXJncy5sZW5ndGggPiAzICYmXG4gICAgdHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnICYmXG4gICAgYXJnc1swXS5zdGFydHNXaXRoKCclYyVzJWMgJykgJiZcbiAgICB0eXBlb2YgYXJnc1sxXSA9PT0gJ3N0cmluZycgJiZcbiAgICB0eXBlb2YgYXJnc1syXSA9PT0gJ3N0cmluZycgJiZcbiAgICB0eXBlb2YgYXJnc1szXSA9PT0gJ3N0cmluZydcbiAgKSB7XG4gICAgY29uc3QgZW52aXJvbm1lbnROYW1lID0gYXJnc1syXVxuICAgIGNvbnN0IG1heWJlRXJyb3IgPSBhcmdzWzRdXG5cbiAgICByZXR1cm4ge1xuICAgICAgZW52aXJvbm1lbnROYW1lOiBlbnZpcm9ubWVudE5hbWUudHJpbSgpLFxuICAgICAgZXJyb3I6IGlzRXJyb3IobWF5YmVFcnJvcikgPyBtYXliZUVycm9yIDogbnVsbCxcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGVudmlyb25tZW50TmFtZTogbnVsbCxcbiAgICBlcnJvcjogbnVsbCxcbiAgfVxufVxuIl0sIm5hbWVzIjpbImZvcm1hdENvbnNvbGVBcmdzIiwicGFyc2VDb25zb2xlQXJncyIsImZvcm1hdE9iamVjdCIsImFyZyIsImRlcHRoIiwiQXJyYXkiLCJpc0FycmF5IiwicmVzdWx0IiwiaSIsImxlbmd0aCIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIkVycm9yIiwia2V5cyIsImtleSIsImRlc2MiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJnZXQiLCJzZXQiLCJqc29uS2V5IiwiSlNPTiIsInN0cmluZ2lmeSIsInZhbHVlIiwiU3RyaW5nIiwiYXJncyIsIm1lc3NhZ2UiLCJpZHgiLCJzdGFydFF1b3RlIiwiY2hhciIsImNvZGUiLCJwYXJzZUludCIsInBhcnNlRmxvYXQiLCJzdGFydHNXaXRoIiwiZW52aXJvbm1lbnROYW1lIiwibWF5YmVFcnJvciIsInRyaW0iLCJlcnJvciIsImlzRXJyb3IiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/lib/console.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/normalize-trailing-slash.js":
|
||
/*!*******************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/normalize-trailing-slash.js ***!
|
||
\*******************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"normalizePathTrailingSlash\", ({\n enumerable: true,\n get: function() {\n return normalizePathTrailingSlash;\n }\n}));\nconst _removetrailingslash = __webpack_require__(/*! ../shared/lib/router/utils/remove-trailing-slash */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\");\nconst _parsepath = __webpack_require__(/*! ../shared/lib/router/utils/parse-path */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nconst normalizePathTrailingSlash = (path)=>{\n if (!path.startsWith('/') || undefined) {\n return path;\n }\n const { pathname, query, hash } = (0, _parsepath.parsePath)(path);\n if (false) {}\n return \"\" + (0, _removetrailingslash.removeTrailingSlash)(pathname) + query + hash;\n};\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=normalize-trailing-slash.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L25vcm1hbGl6ZS10cmFpbGluZy1zbGFzaC5qcyIsIm1hcHBpbmdzIjoiOzs7OzhEQU9hQTs7O2VBQUFBOzs7aURBUHVCO3VDQUNWO0FBTW5CLE1BQU1BLDZCQUE2QixDQUFDQztJQUN6QyxJQUFJLENBQUNBLEtBQUtDLFVBQVUsQ0FBQyxRQUFRQyxTQUF3QyxFQUFFO1FBQ3JFLE9BQU9GO0lBQ1Q7SUFFQSxNQUFNLEVBQUVLLFFBQVEsRUFBRUMsS0FBSyxFQUFFQyxJQUFJLEVBQUUsR0FBR0MsQ0FBQUEsR0FBQUEsV0FBQUEsU0FBQUEsRUFBVVI7SUFDNUMsSUFBSUUsS0FBaUMsRUFBRSxFQVF0QztJQUVELE9BQVEsS0FBRVMsQ0FBQUEsR0FBQUEscUJBQUFBLG1CQUFBQSxFQUFvQk4sWUFBWUMsUUFBUUM7QUFDcEQiLCJzb3VyY2VzIjpbIi9ob21lL05pY2hvbGFpL0RvY3VtZW50cy9zcmMvY2xpZW50L25vcm1hbGl6ZS10cmFpbGluZy1zbGFzaC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZW1vdmVUcmFpbGluZ1NsYXNoIH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcmVtb3ZlLXRyYWlsaW5nLXNsYXNoJ1xuaW1wb3J0IHsgcGFyc2VQYXRoIH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcGFyc2UtcGF0aCdcblxuLyoqXG4gKiBOb3JtYWxpemVzIHRoZSB0cmFpbGluZyBzbGFzaCBvZiBhIHBhdGggYWNjb3JkaW5nIHRvIHRoZSBgdHJhaWxpbmdTbGFzaGAgb3B0aW9uXG4gKiBpbiBgbmV4dC5jb25maWcuanNgLlxuICovXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplUGF0aFRyYWlsaW5nU2xhc2ggPSAocGF0aDogc3RyaW5nKSA9PiB7XG4gIGlmICghcGF0aC5zdGFydHNXaXRoKCcvJykgfHwgcHJvY2Vzcy5lbnYuX19ORVhUX01BTlVBTF9UUkFJTElOR19TTEFTSCkge1xuICAgIHJldHVybiBwYXRoXG4gIH1cblxuICBjb25zdCB7IHBhdGhuYW1lLCBxdWVyeSwgaGFzaCB9ID0gcGFyc2VQYXRoKHBhdGgpXG4gIGlmIChwcm9jZXNzLmVudi5fX05FWFRfVFJBSUxJTkdfU0xBU0gpIHtcbiAgICBpZiAoL1xcLlteL10rXFwvPyQvLnRlc3QocGF0aG5hbWUpKSB7XG4gICAgICByZXR1cm4gYCR7cmVtb3ZlVHJhaWxpbmdTbGFzaChwYXRobmFtZSl9JHtxdWVyeX0ke2hhc2h9YFxuICAgIH0gZWxzZSBpZiAocGF0aG5hbWUuZW5kc1dpdGgoJy8nKSkge1xuICAgICAgcmV0dXJuIGAke3BhdGhuYW1lfSR7cXVlcnl9JHtoYXNofWBcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGAke3BhdGhuYW1lfS8ke3F1ZXJ5fSR7aGFzaH1gXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGAke3JlbW92ZVRyYWlsaW5nU2xhc2gocGF0aG5hbWUpfSR7cXVlcnl9JHtoYXNofWBcbn1cbiJdLCJuYW1lcyI6WyJub3JtYWxpemVQYXRoVHJhaWxpbmdTbGFzaCIsInBhdGgiLCJzdGFydHNXaXRoIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9NQU5VQUxfVFJBSUxJTkdfU0xBU0giLCJwYXRobmFtZSIsInF1ZXJ5IiwiaGFzaCIsInBhcnNlUGF0aCIsIl9fTkVYVF9UUkFJTElOR19TTEFTSCIsInRlc3QiLCJyZW1vdmVUcmFpbGluZ1NsYXNoIiwiZW5kc1dpdGgiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/normalize-trailing-slash.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/react-client-callbacks/error-boundary-callbacks.js":
|
||
/*!******************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/react-client-callbacks/error-boundary-callbacks.js ***!
|
||
\******************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// This file is only used in app router due to the specific error state handling.\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n onCaughtError: function() {\n return onCaughtError;\n },\n onUncaughtError: function() {\n return onUncaughtError;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _isnextroutererror = __webpack_require__(/*! ../components/is-next-router-error */ \"(app-pages-browser)/./node_modules/next/dist/client/components/is-next-router-error.js\");\nconst _bailouttocsr = __webpack_require__(/*! ../../shared/lib/lazy-dynamic/bailout-to-csr */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js\");\nconst _reportglobalerror = __webpack_require__(/*! ./report-global-error */ \"(app-pages-browser)/./node_modules/next/dist/client/react-client-callbacks/report-global-error.js\");\nconst _errorboundary = __webpack_require__(/*! ../components/error-boundary */ \"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js\");\nconst _globalerror = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../components/builtin/global-error */ \"(app-pages-browser)/./node_modules/next/dist/client/components/builtin/global-error.js\"));\nconst devToolErrorMod = true ? __webpack_require__(/*! ../../next-devtools/userspace/app/errors */ \"(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/errors/index.js\") : 0;\nfunction onCaughtError(thrownValue, errorInfo) {\n var _errorInfo_errorBoundary;\n const errorBoundaryComponent = (_errorInfo_errorBoundary = errorInfo.errorBoundary) == null ? void 0 : _errorInfo_errorBoundary.constructor;\n let isImplicitErrorBoundary;\n if (true) {\n const { AppDevOverlayErrorBoundary } = __webpack_require__(/*! ../../next-devtools/userspace/app/app-dev-overlay-error-boundary */ \"(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/app-dev-overlay-error-boundary.js\");\n isImplicitErrorBoundary = errorBoundaryComponent === AppDevOverlayErrorBoundary;\n }\n isImplicitErrorBoundary = isImplicitErrorBoundary || errorBoundaryComponent === _errorboundary.ErrorBoundaryHandler && errorInfo.errorBoundary.props.errorComponent === _globalerror.default;\n // Skip the segment explorer triggered error\n if (true) {\n const { SEGMENT_EXPLORER_SIMULATED_ERROR_MESSAGE } = __webpack_require__(/*! ../../next-devtools/userspace/app/segment-explorer-node */ \"(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js\");\n if (thrownValue instanceof Error && thrownValue.message === SEGMENT_EXPLORER_SIMULATED_ERROR_MESSAGE) {\n return;\n }\n }\n if (isImplicitErrorBoundary) {\n // We don't consider errors caught unless they're caught by an explicit error\n // boundary. The built-in ones are considered implicit.\n // This mimics how the same app would behave without Next.js.\n return onUncaughtError(thrownValue, errorInfo);\n }\n // Skip certain custom errors which are not expected to be reported on client\n if ((0, _bailouttocsr.isBailoutToCSRError)(thrownValue) || (0, _isnextroutererror.isNextRouterError)(thrownValue)) return;\n if (true) {\n var _errorInfo_componentStack;\n const errorBoundaryName = (errorBoundaryComponent == null ? void 0 : errorBoundaryComponent.displayName) || (errorBoundaryComponent == null ? void 0 : errorBoundaryComponent.name) || 'Unknown';\n const componentThatErroredFrame = errorInfo == null ? void 0 : (_errorInfo_componentStack = errorInfo.componentStack) == null ? void 0 : _errorInfo_componentStack.split('\\n')[1];\n var // example 1: at Page (http://localhost:3000/_next/static/chunks/pages/index.js?ts=1631600000000:2:1)\n // example 2: Page@http://localhost:3000/_next/static/chunks/pages/index.js?ts=1631600000000:2:1\n _componentThatErroredFrame_match;\n // Match chrome or safari stack trace\n const matches = (_componentThatErroredFrame_match = componentThatErroredFrame == null ? void 0 : componentThatErroredFrame.match(/\\s+at (\\w+)\\s+|(\\w+)@/)) != null ? _componentThatErroredFrame_match : [];\n const componentThatErroredName = matches[1] || matches[2] || 'Unknown';\n // Create error location with errored component and error boundary, to match the behavior of default React onCaughtError handler.\n const errorBoundaryMessage = \"It was handled by the <\" + errorBoundaryName + \"> error boundary.\";\n const componentErrorMessage = componentThatErroredName ? \"The above error occurred in the <\" + componentThatErroredName + \"> component.\" : \"The above error occurred in one of your components.\";\n const errorLocation = componentErrorMessage + \" \" + errorBoundaryMessage;\n const error = devToolErrorMod.decorateDevError(thrownValue, errorInfo);\n // Log and report the error with location but without modifying the error stack\n devToolErrorMod.originConsoleError('%o\\n\\n%s', thrownValue, errorLocation);\n devToolErrorMod.handleClientError(error);\n } else {}\n}\nfunction onUncaughtError(thrownValue, errorInfo) {\n // Skip certain custom errors which are not expected to be reported on client\n if ((0, _bailouttocsr.isBailoutToCSRError)(thrownValue) || (0, _isnextroutererror.isNextRouterError)(thrownValue)) return;\n if (true) {\n const error = devToolErrorMod.decorateDevError(thrownValue, errorInfo);\n // TODO: Add an adendum to the overlay telling people about custom error boundaries.\n (0, _reportglobalerror.reportGlobalError)(error);\n } else {}\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=error-boundary-callbacks.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3JlYWN0LWNsaWVudC1jYWxsYmFja3MvZXJyb3ItYm91bmRhcnktY2FsbGJhY2tzLmpzIiwibWFwcGluZ3MiOiJBQUFBLGlGQUFpRjs7Ozs7Ozs7Ozs7OztJQWtCakVBLGFBQWE7ZUFBYkE7O0lBK0VBQyxlQUFlO2VBQWZBOzs7OytDQTlGa0I7MENBQ0U7K0NBQ0Y7MkNBQ0c7a0ZBQ0o7QUFFakMsTUFBTUMsa0JBQ0pDLEtBQW9CLEdBQ2ZHLG1CQUFPQSxDQUFDLDBJQUEwQyxJQUNuRCxDQUlDO0FBRUEsU0FBU04sY0FDZGEsV0FBb0IsRUFDcEJDLFNBQTBEO1FBRTNCQTtJQUEvQixNQUFNQyx5QkFBQUEsQ0FBeUJELDJCQUFBQSxVQUFVRSxhQUFBQSxLQUFhLGdCQUF2QkYseUJBQXlCRyxXQUFXO0lBRW5FLElBQUlDO0lBRUosSUFpQ0EsSUFqQ3dCLEVBQW1CO1FBQ3pDLE1BQU0sRUFBRUMsMEJBQTBCLEVBQUUsR0FDbENiLG1CQUFPQSxDQUFDLG9MQUFrRTtRQUU1RVksMEJBQ0VILDJCQUEyQkk7SUFDL0I7SUFFQUQsMEJBQ0VBLDJCQUNDSCwyQkFBMkJLLGVBQUFBLG9CQUFvQixJQUM3Q04sVUFBVUUsYUFBYSxDQUNyQkssS0FBSyxDQUFDQyxjQUFjLEtBQUtDLGFBQUFBLE9BQW9CO0lBRXBELDRDQUE0QztJQUM1QyxJQUFJcEIsSUFBb0IsRUFBbUI7UUFDekMsTUFBTSxFQUFFcUIsd0NBQXdDLEVBQUUsR0FDaERsQixtQkFBT0EsQ0FBQyxrS0FBeUQ7UUFDbkUsSUFDRU8sdUJBQXVCWSxTQUN2QlosWUFBWWEsT0FBTyxLQUFLRiwwQ0FDeEI7WUFDQTtRQUNGO0lBQ0Y7SUFFQSxJQUFJTix5QkFBeUI7UUFDM0IsNkVBQTZFO1FBQzdFLHVEQUF1RDtRQUN2RCw2REFBNkQ7UUFDN0QsT0FBT2pCLGdCQUFnQlksYUFBYUM7SUFDdEM7SUFFQSw2RUFBNkU7SUFDN0UsSUFBSWEsQ0FBQUEsR0FBQUEsY0FBQUEsbUJBQUFBLEVBQW9CZCxnQkFBZ0JlLENBQUFBLEdBQUFBLG1CQUFBQSxpQkFBQUEsRUFBa0JmLGNBQWM7SUFFeEUsSUFBSVYsSUFBb0IsRUFBbUI7WUFPUFc7UUFObEMsTUFBTWUsb0JBRUosQ0FBQ2QsMEJBQUFBLE9BQUFBLEVBRGtDLEdBQ2xDQSxJQUFBQSx1QkFBZ0NlLFdBQUFBLE1BQ2pDZiwwQkFBQUEsT0FBQUEsS0FBQUEsSUFBQUEsdUJBQXdCZ0IsSUFBQUEsS0FDeEI7UUFFRixNQUFNQyw0QkFBNEJsQixhQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSw2QkFBQUEsVUFBV21CLGNBQUFBLEtBQWMsZ0JBQXpCbkIsMEJBQTJCb0IsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBSXpFLHNEQUFzRCwrQ0FDK0M7UUFDckcsZ0dBQWdHO1FBQ2hHRjtRQUxGLHFDQUFxQztRQUNyQyxNQUFNRyxVQUlKSCxDQUFBQSxtQ0FBQUEsNkJBQUFBLE9BQUFBLEtBQUFBLElBQUFBLDBCQUEyQkksS0FBSyxDQUFDLG9DQUFqQ0osbUNBQTZELEVBQUU7UUFDakUsTUFBTUssMkJBQTJCRixPQUFPLENBQUMsRUFBRSxJQUFJQSxPQUFPLENBQUMsRUFBRSxJQUFJO1FBRTdELGlJQUFpSTtRQUNqSSxNQUFNRyx1QkFBd0IsNEJBQXlCVCxvQkFBa0I7UUFDekUsTUFBTVUsd0JBQXdCRiwyQkFDekIsc0NBQW1DQSwyQkFBeUIsaUJBQzVEO1FBRUwsTUFBTUcsZ0JBQW1CRCx3QkFBc0IsTUFBR0Q7UUFDbEQsTUFBTTlCLFFBQVFOLGdCQUFnQkssZ0JBQWdCLENBQUNNLGFBQWFDO1FBRTVELCtFQUErRTtRQUMvRVosZ0JBQWdCUSxrQkFBa0IsQ0FBQyxZQUFZRyxhQUFhMkI7UUFFNUR0QyxnQkFBZ0JPLGlCQUFpQixDQUFDRDtJQUNwQyxPQUFPLEVBRU47QUFDSDtBQUVPLFNBQVNQLGdCQUNkWSxXQUFvQixFQUNwQkMsU0FBMEI7SUFFMUIsNkVBQTZFO0lBQzdFLElBQUlhLENBQUFBLEdBQUFBLGNBQUFBLG1CQUFBQSxFQUFvQmQsZ0JBQWdCZSxDQUFBQSxHQUFBQSxtQkFBQUEsaUJBQUFBLEVBQWtCZixjQUFjO0lBRXhFLElBQUlWLElBQW9CLEVBQW1CO1FBQ3pDLE1BQU1LLFFBQVFOLGdCQUFnQkssZ0JBQWdCLENBQUNNLGFBQWFDO1FBRTVELG9GQUFvRjtRQUNwRjJCLENBQUFBLEdBQUFBLG1CQUFBQSxpQkFBQUEsRUFBa0JqQztJQUNwQixPQUFPLEVBRU47QUFDSCIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvc3JjL2NsaWVudC9yZWFjdC1jbGllbnQtY2FsbGJhY2tzL2Vycm9yLWJvdW5kYXJ5LWNhbGxiYWNrcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIGZpbGUgaXMgb25seSB1c2VkIGluIGFwcCByb3V0ZXIgZHVlIHRvIHRoZSBzcGVjaWZpYyBlcnJvciBzdGF0ZSBoYW5kbGluZy5cblxuaW1wb3J0IHR5cGUgeyBFcnJvckluZm8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGlzTmV4dFJvdXRlckVycm9yIH0gZnJvbSAnLi4vY29tcG9uZW50cy9pcy1uZXh0LXJvdXRlci1lcnJvcidcbmltcG9ydCB7IGlzQmFpbG91dFRvQ1NSRXJyb3IgfSBmcm9tICcuLi8uLi9zaGFyZWQvbGliL2xhenktZHluYW1pYy9iYWlsb3V0LXRvLWNzcidcbmltcG9ydCB7IHJlcG9ydEdsb2JhbEVycm9yIH0gZnJvbSAnLi9yZXBvcnQtZ2xvYmFsLWVycm9yJ1xuaW1wb3J0IHsgRXJyb3JCb3VuZGFyeUhhbmRsZXIgfSBmcm9tICcuLi9jb21wb25lbnRzL2Vycm9yLWJvdW5kYXJ5J1xuaW1wb3J0IERlZmF1bHRFcnJvckJvdW5kYXJ5IGZyb20gJy4uL2NvbXBvbmVudHMvYnVpbHRpbi9nbG9iYWwtZXJyb3InXG5cbmNvbnN0IGRldlRvb2xFcnJvck1vZDogdHlwZW9mIGltcG9ydCgnLi4vLi4vbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL2Vycm9ycycpID1cbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJ1xuICAgID8gKHJlcXVpcmUoJy4uLy4uL25leHQtZGV2dG9vbHMvdXNlcnNwYWNlL2FwcC9lcnJvcnMnKSBhcyB0eXBlb2YgaW1wb3J0KCcuLi8uLi9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9hcHAvZXJyb3JzJykpXG4gICAgOiB7XG4gICAgICAgIGRlY29yYXRlRGV2RXJyb3I6IChlcnJvcjogdW5rbm93bikgPT4gZXJyb3IgYXMgRXJyb3IsXG4gICAgICAgIGhhbmRsZUNsaWVudEVycm9yOiAoKSA9PiB7fSxcbiAgICAgICAgb3JpZ2luQ29uc29sZUVycm9yOiBjb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSksXG4gICAgICB9XG5cbmV4cG9ydCBmdW5jdGlvbiBvbkNhdWdodEVycm9yKFxuICB0aHJvd25WYWx1ZTogdW5rbm93bixcbiAgZXJyb3JJbmZvOiBFcnJvckluZm8gJiB7IGVycm9yQm91bmRhcnk/OiBSZWFjdC5Db21wb25lbnQgfVxuKSB7XG4gIGNvbnN0IGVycm9yQm91bmRhcnlDb21wb25lbnQgPSBlcnJvckluZm8uZXJyb3JCb3VuZGFyeT8uY29uc3RydWN0b3JcblxuICBsZXQgaXNJbXBsaWNpdEVycm9yQm91bmRhcnlcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGNvbnN0IHsgQXBwRGV2T3ZlcmxheUVycm9yQm91bmRhcnkgfSA9XG4gICAgICByZXF1aXJlKCcuLi8uLi9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9hcHAvYXBwLWRldi1vdmVybGF5LWVycm9yLWJvdW5kYXJ5JykgYXMgdHlwZW9mIGltcG9ydCgnLi4vLi4vbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL2FwcC1kZXYtb3ZlcmxheS1lcnJvci1ib3VuZGFyeScpXG5cbiAgICBpc0ltcGxpY2l0RXJyb3JCb3VuZGFyeSA9XG4gICAgICBlcnJvckJvdW5kYXJ5Q29tcG9uZW50ID09PSBBcHBEZXZPdmVybGF5RXJyb3JCb3VuZGFyeVxuICB9XG5cbiAgaXNJbXBsaWNpdEVycm9yQm91bmRhcnkgPVxuICAgIGlzSW1wbGljaXRFcnJvckJvdW5kYXJ5IHx8XG4gICAgKGVycm9yQm91bmRhcnlDb21wb25lbnQgPT09IEVycm9yQm91bmRhcnlIYW5kbGVyICYmXG4gICAgICAoZXJyb3JJbmZvLmVycm9yQm91bmRhcnkhIGFzIEluc3RhbmNlVHlwZTx0eXBlb2YgRXJyb3JCb3VuZGFyeUhhbmRsZXI+KVxuICAgICAgICAucHJvcHMuZXJyb3JDb21wb25lbnQgPT09IERlZmF1bHRFcnJvckJvdW5kYXJ5KVxuXG4gIC8vIFNraXAgdGhlIHNlZ21lbnQgZXhwbG9yZXIgdHJpZ2dlcmVkIGVycm9yXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY29uc3QgeyBTRUdNRU5UX0VYUExPUkVSX1NJTVVMQVRFRF9FUlJPUl9NRVNTQUdFIH0gPVxuICAgICAgcmVxdWlyZSgnLi4vLi4vbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL3NlZ21lbnQtZXhwbG9yZXItbm9kZScpIGFzIHR5cGVvZiBpbXBvcnQoJy4uLy4uL25leHQtZGV2dG9vbHMvdXNlcnNwYWNlL2FwcC9zZWdtZW50LWV4cGxvcmVyLW5vZGUnKVxuICAgIGlmIChcbiAgICAgIHRocm93blZhbHVlIGluc3RhbmNlb2YgRXJyb3IgJiZcbiAgICAgIHRocm93blZhbHVlLm1lc3NhZ2UgPT09IFNFR01FTlRfRVhQTE9SRVJfU0lNVUxBVEVEX0VSUk9SX01FU1NBR0VcbiAgICApIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuXG4gIGlmIChpc0ltcGxpY2l0RXJyb3JCb3VuZGFyeSkge1xuICAgIC8vIFdlIGRvbid0IGNvbnNpZGVyIGVycm9ycyBjYXVnaHQgdW5sZXNzIHRoZXkncmUgY2F1Z2h0IGJ5IGFuIGV4cGxpY2l0IGVycm9yXG4gICAgLy8gYm91bmRhcnkuIFRoZSBidWlsdC1pbiBvbmVzIGFyZSBjb25zaWRlcmVkIGltcGxpY2l0LlxuICAgIC8vIFRoaXMgbWltaWNzIGhvdyB0aGUgc2FtZSBhcHAgd291bGQgYmVoYXZlIHdpdGhvdXQgTmV4dC5qcy5cbiAgICByZXR1cm4gb25VbmNhdWdodEVycm9yKHRocm93blZhbHVlLCBlcnJvckluZm8pXG4gIH1cblxuICAvLyBTa2lwIGNlcnRhaW4gY3VzdG9tIGVycm9ycyB3aGljaCBhcmUgbm90IGV4cGVjdGVkIHRvIGJlIHJlcG9ydGVkIG9uIGNsaWVudFxuICBpZiAoaXNCYWlsb3V0VG9DU1JFcnJvcih0aHJvd25WYWx1ZSkgfHwgaXNOZXh0Um91dGVyRXJyb3IodGhyb3duVmFsdWUpKSByZXR1cm5cblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGNvbnN0IGVycm9yQm91bmRhcnlOYW1lID1cbiAgICAgIC8vIHJlYWQgcmVhY3QgY29tcG9uZW50IGRpc3BsYXlOYW1lXG4gICAgICAoZXJyb3JCb3VuZGFyeUNvbXBvbmVudCBhcyBhbnkpPy5kaXNwbGF5TmFtZSB8fFxuICAgICAgZXJyb3JCb3VuZGFyeUNvbXBvbmVudD8ubmFtZSB8fFxuICAgICAgJ1Vua25vd24nXG5cbiAgICBjb25zdCBjb21wb25lbnRUaGF0RXJyb3JlZEZyYW1lID0gZXJyb3JJbmZvPy5jb21wb25lbnRTdGFjaz8uc3BsaXQoJ1xcbicpWzFdXG5cbiAgICAvLyBNYXRjaCBjaHJvbWUgb3Igc2FmYXJpIHN0YWNrIHRyYWNlXG4gICAgY29uc3QgbWF0Y2hlcyA9XG4gICAgICAvLyByZWdleCB0byBtYXRjaCB0aGUgZnVuY3Rpb24gbmFtZSBpbiB0aGUgc3RhY2sgdHJhY2VcbiAgICAgIC8vIGV4YW1wbGUgMTogYXQgUGFnZSAoaHR0cDovL2xvY2FsaG9zdDozMDAwL19uZXh0L3N0YXRpYy9jaHVua3MvcGFnZXMvaW5kZXguanM/dHM9MTYzMTYwMDAwMDAwMDoyOjEpXG4gICAgICAvLyBleGFtcGxlIDI6IFBhZ2VAaHR0cDovL2xvY2FsaG9zdDozMDAwL19uZXh0L3N0YXRpYy9jaHVua3MvcGFnZXMvaW5kZXguanM/dHM9MTYzMTYwMDAwMDAwMDoyOjFcbiAgICAgIGNvbXBvbmVudFRoYXRFcnJvcmVkRnJhbWU/Lm1hdGNoKC9cXHMrYXQgKFxcdyspXFxzK3woXFx3KylALykgPz8gW11cbiAgICBjb25zdCBjb21wb25lbnRUaGF0RXJyb3JlZE5hbWUgPSBtYXRjaGVzWzFdIHx8IG1hdGNoZXNbMl0gfHwgJ1Vua25vd24nXG5cbiAgICAvLyBDcmVhdGUgZXJyb3IgbG9jYXRpb24gd2l0aCBlcnJvcmVkIGNvbXBvbmVudCBhbmQgZXJyb3IgYm91bmRhcnksIHRvIG1hdGNoIHRoZSBiZWhhdmlvciBvZiBkZWZhdWx0IFJlYWN0IG9uQ2F1Z2h0RXJyb3IgaGFuZGxlci5cbiAgICBjb25zdCBlcnJvckJvdW5kYXJ5TWVzc2FnZSA9IGBJdCB3YXMgaGFuZGxlZCBieSB0aGUgPCR7ZXJyb3JCb3VuZGFyeU5hbWV9PiBlcnJvciBib3VuZGFyeS5gXG4gICAgY29uc3QgY29tcG9uZW50RXJyb3JNZXNzYWdlID0gY29tcG9uZW50VGhhdEVycm9yZWROYW1lXG4gICAgICA/IGBUaGUgYWJvdmUgZXJyb3Igb2NjdXJyZWQgaW4gdGhlIDwke2NvbXBvbmVudFRoYXRFcnJvcmVkTmFtZX0+IGNvbXBvbmVudC5gXG4gICAgICA6IGBUaGUgYWJvdmUgZXJyb3Igb2NjdXJyZWQgaW4gb25lIG9mIHlvdXIgY29tcG9uZW50cy5gXG5cbiAgICBjb25zdCBlcnJvckxvY2F0aW9uID0gYCR7Y29tcG9uZW50RXJyb3JNZXNzYWdlfSAke2Vycm9yQm91bmRhcnlNZXNzYWdlfWBcbiAgICBjb25zdCBlcnJvciA9IGRldlRvb2xFcnJvck1vZC5kZWNvcmF0ZURldkVycm9yKHRocm93blZhbHVlLCBlcnJvckluZm8pXG5cbiAgICAvLyBMb2cgYW5kIHJlcG9ydCB0aGUgZXJyb3Igd2l0aCBsb2NhdGlvbiBidXQgd2l0aG91dCBtb2RpZnlpbmcgdGhlIGVycm9yIHN0YWNrXG4gICAgZGV2VG9vbEVycm9yTW9kLm9yaWdpbkNvbnNvbGVFcnJvcignJW9cXG5cXG4lcycsIHRocm93blZhbHVlLCBlcnJvckxvY2F0aW9uKVxuXG4gICAgZGV2VG9vbEVycm9yTW9kLmhhbmRsZUNsaWVudEVycm9yKGVycm9yKVxuICB9IGVsc2Uge1xuICAgIGRldlRvb2xFcnJvck1vZC5vcmlnaW5Db25zb2xlRXJyb3IodGhyb3duVmFsdWUpXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9uVW5jYXVnaHRFcnJvcihcbiAgdGhyb3duVmFsdWU6IHVua25vd24sXG4gIGVycm9ySW5mbzogUmVhY3QuRXJyb3JJbmZvXG4pIHtcbiAgLy8gU2tpcCBjZXJ0YWluIGN1c3RvbSBlcnJvcnMgd2hpY2ggYXJlIG5vdCBleHBlY3RlZCB0byBiZSByZXBvcnRlZCBvbiBjbGllbnRcbiAgaWYgKGlzQmFpbG91dFRvQ1NSRXJyb3IodGhyb3duVmFsdWUpIHx8IGlzTmV4dFJvdXRlckVycm9yKHRocm93blZhbHVlKSkgcmV0dXJuXG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBjb25zdCBlcnJvciA9IGRldlRvb2xFcnJvck1vZC5kZWNvcmF0ZURldkVycm9yKHRocm93blZhbHVlLCBlcnJvckluZm8pXG5cbiAgICAvLyBUT0RPOiBBZGQgYW4gYWRlbmR1bSB0byB0aGUgb3ZlcmxheSB0ZWxsaW5nIHBlb3BsZSBhYm91dCBjdXN0b20gZXJyb3IgYm91bmRhcmllcy5cbiAgICByZXBvcnRHbG9iYWxFcnJvcihlcnJvcilcbiAgfSBlbHNlIHtcbiAgICByZXBvcnRHbG9iYWxFcnJvcih0aHJvd25WYWx1ZSlcbiAgfVxufVxuIl0sIm5hbWVzIjpbIm9uQ2F1Z2h0RXJyb3IiLCJvblVuY2F1Z2h0RXJyb3IiLCJkZXZUb29sRXJyb3JNb2QiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJyZXF1aXJlIiwiZGVjb3JhdGVEZXZFcnJvciIsImVycm9yIiwiaGFuZGxlQ2xpZW50RXJyb3IiLCJvcmlnaW5Db25zb2xlRXJyb3IiLCJjb25zb2xlIiwiYmluZCIsInRocm93blZhbHVlIiwiZXJyb3JJbmZvIiwiZXJyb3JCb3VuZGFyeUNvbXBvbmVudCIsImVycm9yQm91bmRhcnkiLCJjb25zdHJ1Y3RvciIsImlzSW1wbGljaXRFcnJvckJvdW5kYXJ5IiwiQXBwRGV2T3ZlcmxheUVycm9yQm91bmRhcnkiLCJFcnJvckJvdW5kYXJ5SGFuZGxlciIsInByb3BzIiwiZXJyb3JDb21wb25lbnQiLCJEZWZhdWx0RXJyb3JCb3VuZGFyeSIsIlNFR01FTlRfRVhQTE9SRVJfU0lNVUxBVEVEX0VSUk9SX01FU1NBR0UiLCJFcnJvciIsIm1lc3NhZ2UiLCJpc0JhaWxvdXRUb0NTUkVycm9yIiwiaXNOZXh0Um91dGVyRXJyb3IiLCJlcnJvckJvdW5kYXJ5TmFtZSIsImRpc3BsYXlOYW1lIiwibmFtZSIsImNvbXBvbmVudFRoYXRFcnJvcmVkRnJhbWUiLCJjb21wb25lbnRTdGFjayIsInNwbGl0IiwibWF0Y2hlcyIsIm1hdGNoIiwiY29tcG9uZW50VGhhdEVycm9yZWROYW1lIiwiZXJyb3JCb3VuZGFyeU1lc3NhZ2UiLCJjb21wb25lbnRFcnJvck1lc3NhZ2UiLCJlcnJvckxvY2F0aW9uIiwicmVwb3J0R2xvYmFsRXJyb3IiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/react-client-callbacks/error-boundary-callbacks.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/react-client-callbacks/on-recoverable-error.js":
|
||
/*!**************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/react-client-callbacks/on-recoverable-error.js ***!
|
||
\**************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// This module can be shared between both pages router and app router\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n isRecoverableError: function() {\n return isRecoverableError;\n },\n onRecoverableError: function() {\n return onRecoverableError;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _bailouttocsr = __webpack_require__(/*! ../../shared/lib/lazy-dynamic/bailout-to-csr */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js\");\nconst _iserror = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../../lib/is-error */ \"(app-pages-browser)/./node_modules/next/dist/lib/is-error.js\"));\nconst _reportglobalerror = __webpack_require__(/*! ./report-global-error */ \"(app-pages-browser)/./node_modules/next/dist/client/react-client-callbacks/report-global-error.js\");\nconst recoverableErrors = new WeakSet();\nfunction isRecoverableError(error) {\n return recoverableErrors.has(error);\n}\nconst onRecoverableError = (error, errorInfo)=>{\n // x-ref: https://github.com/facebook/react/pull/28736\n let cause = (0, _iserror.default)(error) && 'cause' in error ? error.cause : error;\n // Skip certain custom errors which are not expected to be reported on client\n if ((0, _bailouttocsr.isBailoutToCSRError)(cause)) return;\n if (true) {\n const { decorateDevError } = __webpack_require__(/*! ../../next-devtools/userspace/app/errors/stitched-error */ \"(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/errors/stitched-error.js\");\n const causeError = decorateDevError(cause, errorInfo);\n recoverableErrors.add(causeError);\n cause = causeError;\n }\n (0, _reportglobalerror.reportGlobalError)(cause);\n};\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=on-recoverable-error.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3JlYWN0LWNsaWVudC1jYWxsYmFja3Mvb24tcmVjb3ZlcmFibGUtZXJyb3IuanMiLCJtYXBwaW5ncyI6IkFBQUEscUVBQXFFOzs7Ozs7Ozs7Ozs7O0lBU3JEQSxrQkFBa0I7ZUFBbEJBOztJQUlIQyxrQkFBa0I7ZUFBbEJBOzs7OzBDQVZ1Qjs4RUFDaEI7K0NBQ2M7QUFFbEMsTUFBTUMsb0JBQW9CLElBQUlDO0FBRXZCLFNBQVNILG1CQUFtQkksS0FBWTtJQUM3QyxPQUFPRixrQkFBa0JHLEdBQUcsQ0FBQ0Q7QUFDL0I7QUFFTyxNQUFNSCxxQkFBNkQsQ0FDeEVHLE9BQ0FFO0lBRUEsc0RBQXNEO0lBQ3RELElBQUlDLFFBQVFDLENBQUFBLEdBQUFBLFNBQUFBLE9BQUFBLEVBQVFKLFVBQVUsV0FBV0EsUUFBUUEsTUFBTUcsS0FBSyxHQUFHSDtJQUMvRCw2RUFBNkU7SUFDN0UsSUFBSUssQ0FBQUEsR0FBQUEsY0FBQUEsbUJBQUFBLEVBQW9CRixRQUFRO0lBRWhDLElBQUlHLElBQW9CLEVBQW1CO1FBQ3pDLE1BQU0sRUFBRUcsZ0JBQWdCLEVBQUUsR0FDeEJDLG1CQUFPQSxDQUFDLGtLQUF5RDtRQUNuRSxNQUFNQyxhQUFhRixpQkFBaUJOLE9BQU9EO1FBQzNDSixrQkFBa0JjLEdBQUcsQ0FBQ0Q7UUFDdEJSLFFBQVFRO0lBQ1Y7SUFFQUUsQ0FBQUEsR0FBQUEsbUJBQUFBLGlCQUFBQSxFQUFrQlY7QUFDcEIiLCJzb3VyY2VzIjpbIi9ob21lL05pY2hvbGFpL3NyYy9jbGllbnQvcmVhY3QtY2xpZW50LWNhbGxiYWNrcy9vbi1yZWNvdmVyYWJsZS1lcnJvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIG1vZHVsZSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gYm90aCBwYWdlcyByb3V0ZXIgYW5kIGFwcCByb3V0ZXJcblxuaW1wb3J0IHR5cGUgeyBIeWRyYXRpb25PcHRpb25zIH0gZnJvbSAncmVhY3QtZG9tL2NsaWVudCdcbmltcG9ydCB7IGlzQmFpbG91dFRvQ1NSRXJyb3IgfSBmcm9tICcuLi8uLi9zaGFyZWQvbGliL2xhenktZHluYW1pYy9iYWlsb3V0LXRvLWNzcidcbmltcG9ydCBpc0Vycm9yIGZyb20gJy4uLy4uL2xpYi9pcy1lcnJvcidcbmltcG9ydCB7IHJlcG9ydEdsb2JhbEVycm9yIH0gZnJvbSAnLi9yZXBvcnQtZ2xvYmFsLWVycm9yJ1xuXG5jb25zdCByZWNvdmVyYWJsZUVycm9ycyA9IG5ldyBXZWFrU2V0PEVycm9yPigpXG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JlY292ZXJhYmxlRXJyb3IoZXJyb3I6IEVycm9yKTogYm9vbGVhbiB7XG4gIHJldHVybiByZWNvdmVyYWJsZUVycm9ycy5oYXMoZXJyb3IpXG59XG5cbmV4cG9ydCBjb25zdCBvblJlY292ZXJhYmxlRXJyb3I6IEh5ZHJhdGlvbk9wdGlvbnNbJ29uUmVjb3ZlcmFibGVFcnJvciddID0gKFxuICBlcnJvcixcbiAgZXJyb3JJbmZvXG4pID0+IHtcbiAgLy8geC1yZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzI4NzM2XG4gIGxldCBjYXVzZSA9IGlzRXJyb3IoZXJyb3IpICYmICdjYXVzZScgaW4gZXJyb3IgPyBlcnJvci5jYXVzZSA6IGVycm9yXG4gIC8vIFNraXAgY2VydGFpbiBjdXN0b20gZXJyb3JzIHdoaWNoIGFyZSBub3QgZXhwZWN0ZWQgdG8gYmUgcmVwb3J0ZWQgb24gY2xpZW50XG4gIGlmIChpc0JhaWxvdXRUb0NTUkVycm9yKGNhdXNlKSkgcmV0dXJuXG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBjb25zdCB7IGRlY29yYXRlRGV2RXJyb3IgfSA9XG4gICAgICByZXF1aXJlKCcuLi8uLi9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9hcHAvZXJyb3JzL3N0aXRjaGVkLWVycm9yJykgYXMgdHlwZW9mIGltcG9ydCgnLi4vLi4vbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL2Vycm9ycy9zdGl0Y2hlZC1lcnJvcicpXG4gICAgY29uc3QgY2F1c2VFcnJvciA9IGRlY29yYXRlRGV2RXJyb3IoY2F1c2UsIGVycm9ySW5mbylcbiAgICByZWNvdmVyYWJsZUVycm9ycy5hZGQoY2F1c2VFcnJvcilcbiAgICBjYXVzZSA9IGNhdXNlRXJyb3JcbiAgfVxuXG4gIHJlcG9ydEdsb2JhbEVycm9yKGNhdXNlKVxufVxuIl0sIm5hbWVzIjpbImlzUmVjb3ZlcmFibGVFcnJvciIsIm9uUmVjb3ZlcmFibGVFcnJvciIsInJlY292ZXJhYmxlRXJyb3JzIiwiV2Vha1NldCIsImVycm9yIiwiaGFzIiwiZXJyb3JJbmZvIiwiY2F1c2UiLCJpc0Vycm9yIiwiaXNCYWlsb3V0VG9DU1JFcnJvciIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImRlY29yYXRlRGV2RXJyb3IiLCJyZXF1aXJlIiwiY2F1c2VFcnJvciIsImFkZCIsInJlcG9ydEdsb2JhbEVycm9yIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/react-client-callbacks/on-recoverable-error.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/react-client-callbacks/report-global-error.js":
|
||
/*!*************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/client/react-client-callbacks/report-global-error.js ***!
|
||
\*************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"reportGlobalError\", ({\n enumerable: true,\n get: function() {\n return reportGlobalError;\n }\n}));\nconst reportGlobalError = typeof reportError === 'function' ? reportError : (error)=>{\n // TODO: Dispatch error event\n globalThis.console.error(error);\n};\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=report-global-error.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3JlYWN0LWNsaWVudC1jYWxsYmFja3MvcmVwb3J0LWdsb2JhbC1lcnJvci5qcyIsIm1hcHBpbmdzIjoiOzs7O3FEQUFhQTs7O2VBQUFBOzs7QUFBTixNQUFNQSxvQkFDWCxPQUFPQyxnQkFBZ0IsYUFFbkIsY0FFQSxDQUFDQztJQUNDLDZCQUE2QjtJQUM3QkMsV0FBV0MsT0FBTyxDQUFDRixLQUFLLENBQUNBO0FBQzNCIiwic291cmNlcyI6WyIvaG9tZS9OaWNob2xhaS9zcmMvY2xpZW50L3JlYWN0LWNsaWVudC1jYWxsYmFja3MvcmVwb3J0LWdsb2JhbC1lcnJvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgcmVwb3J0R2xvYmFsRXJyb3IgPVxuICB0eXBlb2YgcmVwb3J0RXJyb3IgPT09ICdmdW5jdGlvbidcbiAgICA/IC8vIEluIG1vZGVybiBicm93c2VycywgcmVwb3J0RXJyb3Igd2lsbCBkaXNwYXRjaCBhbiBlcnJvciBldmVudCxcbiAgICAgIC8vIGVtdWxhdGluZyBhbiB1bmNhdWdodCBKYXZhU2NyaXB0IGVycm9yLlxuICAgICAgcmVwb3J0RXJyb3JcbiAgICA6IChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgICAvLyBUT0RPOiBEaXNwYXRjaCBlcnJvciBldmVudFxuICAgICAgICBnbG9iYWxUaGlzLmNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICB9XG4iXSwibmFtZXMiOlsicmVwb3J0R2xvYmFsRXJyb3IiLCJyZXBvcnRFcnJvciIsImVycm9yIiwiZ2xvYmFsVGhpcyIsImNvbnNvbGUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/react-client-callbacks/report-global-error.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/remove-base-path.js":
|
||
/*!***********************************************************!*\
|
||
!*** ./node_modules/next/dist/client/remove-base-path.js ***!
|
||
\***********************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"removeBasePath\", ({\n enumerable: true,\n get: function() {\n return removeBasePath;\n }\n}));\nconst _hasbasepath = __webpack_require__(/*! ./has-base-path */ \"(app-pages-browser)/./node_modules/next/dist/client/has-base-path.js\");\nconst basePath = false || '';\nfunction removeBasePath(path) {\n if (false) {}\n // Can't trim the basePath if it has zero length!\n if (basePath.length === 0) return path;\n path = path.slice(basePath.length);\n if (!path.startsWith('/')) path = \"/\" + path;\n return path;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=remove-base-path.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3JlbW92ZS1iYXNlLXBhdGguanMiLCJtYXBwaW5ncyI6Ijs7OztrREFJZ0JBOzs7ZUFBQUE7Ozt5Q0FKWTtBQUU1QixNQUFNQyxXQUFZQyxNQUFrQyxJQUFlO0FBRTVELFNBQVNGLGVBQWVLLElBQVk7SUFDekMsSUFBSUgsS0FBMEMsRUFBRSxFQUkvQztJQUVELGlEQUFpRDtJQUNqRCxJQUFJRCxTQUFTTyxNQUFNLEtBQUssR0FBRyxPQUFPSDtJQUVsQ0EsT0FBT0EsS0FBS0ksS0FBSyxDQUFDUixTQUFTTyxNQUFNO0lBQ2pDLElBQUksQ0FBQ0gsS0FBS0ssVUFBVSxDQUFDLE1BQU1MLE9BQVEsTUFBR0E7SUFDdEMsT0FBT0E7QUFDVCIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvRG9jdW1lbnRzL3NyYy9jbGllbnQvcmVtb3ZlLWJhc2UtcGF0aC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBoYXNCYXNlUGF0aCB9IGZyb20gJy4vaGFzLWJhc2UtcGF0aCdcblxuY29uc3QgYmFzZVBhdGggPSAocHJvY2Vzcy5lbnYuX19ORVhUX1JPVVRFUl9CQVNFUEFUSCBhcyBzdHJpbmcpIHx8ICcnXG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVCYXNlUGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX01BTlVBTF9DTElFTlRfQkFTRV9QQVRIKSB7XG4gICAgaWYgKCFoYXNCYXNlUGF0aChwYXRoKSkge1xuICAgICAgcmV0dXJuIHBhdGhcbiAgICB9XG4gIH1cblxuICAvLyBDYW4ndCB0cmltIHRoZSBiYXNlUGF0aCBpZiBpdCBoYXMgemVybyBsZW5ndGghXG4gIGlmIChiYXNlUGF0aC5sZW5ndGggPT09IDApIHJldHVybiBwYXRoXG5cbiAgcGF0aCA9IHBhdGguc2xpY2UoYmFzZVBhdGgubGVuZ3RoKVxuICBpZiAoIXBhdGguc3RhcnRzV2l0aCgnLycpKSBwYXRoID0gYC8ke3BhdGh9YFxuICByZXR1cm4gcGF0aFxufVxuIl0sIm5hbWVzIjpbInJlbW92ZUJhc2VQYXRoIiwiYmFzZVBhdGgiLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX1JPVVRFUl9CQVNFUEFUSCIsInBhdGgiLCJfX05FWFRfTUFOVUFMX0NMSUVOVF9CQVNFX1BBVEgiLCJoYXNCYXNlUGF0aCIsImxlbmd0aCIsInNsaWNlIiwic3RhcnRzV2l0aCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/remove-base-path.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/@next/react-refresh-utils/dist/internal/helpers.js":
|
||
/*!********************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/@next/react-refresh-utils/dist/internal/helpers.js ***!
|
||
\********************************************************************************************/
|
||
/***/ (function(module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\n/**\n * MIT License\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\n// This file is copied from the Metro JavaScript bundler, with minor tweaks for\n// webpack 4 compatibility.\n//\n// https://github.com/facebook/metro/blob/d6b9685c730d0d63577db40f41369157f28dfa3a/packages/metro/src/lib/polyfills/require.js\nconst runtime_1 = __importDefault(__webpack_require__(/*! next/dist/compiled/react-refresh/runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react-refresh/runtime.js\"));\nfunction isSafeExport(key) {\n return (key === '__esModule' ||\n key === '__N_SSG' ||\n key === '__N_SSP' ||\n // TODO: remove this key from page config instead of allow listing it\n key === 'config');\n}\nfunction registerExportsForReactRefresh(moduleExports, moduleID) {\n runtime_1.default.register(moduleExports, moduleID + ' %exports%');\n if (moduleExports == null || typeof moduleExports !== 'object') {\n // Exit if we can't iterate over exports.\n // (This is important for legacy environments.)\n return;\n }\n for (var key in moduleExports) {\n if (isSafeExport(key)) {\n continue;\n }\n try {\n var exportValue = moduleExports[key];\n }\n catch (_a) {\n // This might fail due to circular dependencies\n continue;\n }\n var typeID = moduleID + ' %exports% ' + key;\n runtime_1.default.register(exportValue, typeID);\n }\n}\nfunction getRefreshBoundarySignature(moduleExports) {\n var signature = [];\n signature.push(runtime_1.default.getFamilyByType(moduleExports));\n if (moduleExports == null || typeof moduleExports !== 'object') {\n // Exit if we can't iterate over exports.\n // (This is important for legacy environments.)\n return signature;\n }\n for (var key in moduleExports) {\n if (isSafeExport(key)) {\n continue;\n }\n try {\n var exportValue = moduleExports[key];\n }\n catch (_a) {\n // This might fail due to circular dependencies\n continue;\n }\n signature.push(key);\n signature.push(runtime_1.default.getFamilyByType(exportValue));\n }\n return signature;\n}\nfunction isReactRefreshBoundary(moduleExports) {\n if (runtime_1.default.isLikelyComponentType(moduleExports)) {\n return true;\n }\n if (moduleExports == null || typeof moduleExports !== 'object') {\n // Exit if we can't iterate over exports.\n return false;\n }\n var hasExports = false;\n var areAllExportsComponents = true;\n for (var key in moduleExports) {\n hasExports = true;\n if (isSafeExport(key)) {\n continue;\n }\n try {\n var exportValue = moduleExports[key];\n }\n catch (_a) {\n // This might fail due to circular dependencies\n return false;\n }\n if (!runtime_1.default.isLikelyComponentType(exportValue)) {\n areAllExportsComponents = false;\n }\n }\n return hasExports && areAllExportsComponents;\n}\nfunction shouldInvalidateReactRefreshBoundary(prevSignature, nextSignature) {\n if (prevSignature.length !== nextSignature.length) {\n return true;\n }\n for (var i = 0; i < nextSignature.length; i++) {\n if (prevSignature[i] !== nextSignature[i]) {\n return true;\n }\n }\n return false;\n}\nvar isUpdateScheduled = false;\n// This function aggregates updates from multiple modules into a single React Refresh call.\nfunction scheduleUpdate() {\n if (isUpdateScheduled) {\n return;\n }\n isUpdateScheduled = true;\n function canApplyUpdate(status) {\n return status === 'idle';\n }\n function applyUpdate() {\n isUpdateScheduled = false;\n try {\n runtime_1.default.performReactRefresh();\n }\n catch (err) {\n console.warn('Warning: Failed to re-render. We will retry on the next Fast Refresh event.\\n' +\n err);\n }\n }\n if (canApplyUpdate(module.hot.status())) {\n // Apply update on the next tick.\n Promise.resolve().then(() => {\n applyUpdate();\n });\n return;\n }\n const statusHandler = (status) => {\n if (canApplyUpdate(status)) {\n module.hot.removeStatusHandler(statusHandler);\n applyUpdate();\n }\n };\n // Apply update once the HMR runtime's status is idle.\n module.hot.addStatusHandler(statusHandler);\n}\n// Needs to be compatible with IE11\nexports[\"default\"] = {\n registerExportsForReactRefresh: registerExportsForReactRefresh,\n isReactRefreshBoundary: isReactRefreshBoundary,\n shouldInvalidateReactRefreshBoundary: shouldInvalidateReactRefreshBoundary,\n getRefreshBoundarySignature: getRefreshBoundarySignature,\n scheduleUpdate: scheduleUpdate,\n};\n//# sourceMappingURL=helpers.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvQG5leHQvcmVhY3QtcmVmcmVzaC11dGlscy9kaXN0L2ludGVybmFsL2hlbHBlcnMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQSw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsbUJBQU8sQ0FBQyxnSUFBMEM7QUFDcEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsMEJBQTBCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsVUFBVTtBQUNqQztBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFVBQVU7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFVBQVU7QUFDZDtBQUNBO0FBQ0Esa0JBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvRG9jdW1lbnRzL0Rldi9iaW9oYXphcmQtdmZ4LTEvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9AbmV4dC9yZWFjdC1yZWZyZXNoLXV0aWxzL2Rpc3QvaW50ZXJuYWwvaGVscGVycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbi8qKlxuICogTUlUIExpY2Vuc2VcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vLyBUaGlzIGZpbGUgaXMgY29waWVkIGZyb20gdGhlIE1ldHJvIEphdmFTY3JpcHQgYnVuZGxlciwgd2l0aCBtaW5vciB0d2Vha3MgZm9yXG4vLyB3ZWJwYWNrIDQgY29tcGF0aWJpbGl0eS5cbi8vXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svbWV0cm8vYmxvYi9kNmI5Njg1YzczMGQwZDYzNTc3ZGI0MGY0MTM2OTE1N2YyOGRmYTNhL3BhY2thZ2VzL21ldHJvL3NyYy9saWIvcG9seWZpbGxzL3JlcXVpcmUuanNcbmNvbnN0IHJ1bnRpbWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwibmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0LXJlZnJlc2gvcnVudGltZVwiKSk7XG5mdW5jdGlvbiBpc1NhZmVFeHBvcnQoa2V5KSB7XG4gICAgcmV0dXJuIChrZXkgPT09ICdfX2VzTW9kdWxlJyB8fFxuICAgICAgICBrZXkgPT09ICdfX05fU1NHJyB8fFxuICAgICAgICBrZXkgPT09ICdfX05fU1NQJyB8fFxuICAgICAgICAvLyBUT0RPOiByZW1vdmUgdGhpcyBrZXkgZnJvbSBwYWdlIGNvbmZpZyBpbnN0ZWFkIG9mIGFsbG93IGxpc3RpbmcgaXRcbiAgICAgICAga2V5ID09PSAnY29uZmlnJyk7XG59XG5mdW5jdGlvbiByZWdpc3RlckV4cG9ydHNGb3JSZWFjdFJlZnJlc2gobW9kdWxlRXhwb3J0cywgbW9kdWxlSUQpIHtcbiAgICBydW50aW1lXzEuZGVmYXVsdC5yZWdpc3Rlcihtb2R1bGVFeHBvcnRzLCBtb2R1bGVJRCArICcgJWV4cG9ydHMlJyk7XG4gICAgaWYgKG1vZHVsZUV4cG9ydHMgPT0gbnVsbCB8fCB0eXBlb2YgbW9kdWxlRXhwb3J0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gRXhpdCBpZiB3ZSBjYW4ndCBpdGVyYXRlIG92ZXIgZXhwb3J0cy5cbiAgICAgICAgLy8gKFRoaXMgaXMgaW1wb3J0YW50IGZvciBsZWdhY3kgZW52aXJvbm1lbnRzLilcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKHZhciBrZXkgaW4gbW9kdWxlRXhwb3J0cykge1xuICAgICAgICBpZiAoaXNTYWZlRXhwb3J0KGtleSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgZXhwb3J0VmFsdWUgPSBtb2R1bGVFeHBvcnRzW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAvLyBUaGlzIG1pZ2h0IGZhaWwgZHVlIHRvIGNpcmN1bGFyIGRlcGVuZGVuY2llc1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHR5cGVJRCA9IG1vZHVsZUlEICsgJyAlZXhwb3J0cyUgJyArIGtleTtcbiAgICAgICAgcnVudGltZV8xLmRlZmF1bHQucmVnaXN0ZXIoZXhwb3J0VmFsdWUsIHR5cGVJRCk7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0UmVmcmVzaEJvdW5kYXJ5U2lnbmF0dXJlKG1vZHVsZUV4cG9ydHMpIHtcbiAgICB2YXIgc2lnbmF0dXJlID0gW107XG4gICAgc2lnbmF0dXJlLnB1c2gocnVudGltZV8xLmRlZmF1bHQuZ2V0RmFtaWx5QnlUeXBlKG1vZHVsZUV4cG9ydHMpKTtcbiAgICBpZiAobW9kdWxlRXhwb3J0cyA9PSBudWxsIHx8IHR5cGVvZiBtb2R1bGVFeHBvcnRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAvLyBFeGl0IGlmIHdlIGNhbid0IGl0ZXJhdGUgb3ZlciBleHBvcnRzLlxuICAgICAgICAvLyAoVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGxlZ2FjeSBlbnZpcm9ubWVudHMuKVxuICAgICAgICByZXR1cm4gc2lnbmF0dXJlO1xuICAgIH1cbiAgICBmb3IgKHZhciBrZXkgaW4gbW9kdWxlRXhwb3J0cykge1xuICAgICAgICBpZiAoaXNTYWZlRXhwb3J0KGtleSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgZXhwb3J0VmFsdWUgPSBtb2R1bGVFeHBvcnRzW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAvLyBUaGlzIG1pZ2h0IGZhaWwgZHVlIHRvIGNpcmN1bGFyIGRlcGVuZGVuY2llc1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgc2lnbmF0dXJlLnB1c2goa2V5KTtcbiAgICAgICAgc2lnbmF0dXJlLnB1c2gocnVudGltZV8xLmRlZmF1bHQuZ2V0RmFtaWx5QnlUeXBlKGV4cG9ydFZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiBzaWduYXR1cmU7XG59XG5mdW5jdGlvbiBpc1JlYWN0UmVmcmVzaEJvdW5kYXJ5KG1vZHVsZUV4cG9ydHMpIHtcbiAgICBpZiAocnVudGltZV8xLmRlZmF1bHQuaXNMaWtlbHlDb21wb25lbnRUeXBlKG1vZHVsZUV4cG9ydHMpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAobW9kdWxlRXhwb3J0cyA9PSBudWxsIHx8IHR5cGVvZiBtb2R1bGVFeHBvcnRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAvLyBFeGl0IGlmIHdlIGNhbid0IGl0ZXJhdGUgb3ZlciBleHBvcnRzLlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHZhciBoYXNFeHBvcnRzID0gZmFsc2U7XG4gICAgdmFyIGFyZUFsbEV4cG9ydHNDb21wb25lbnRzID0gdHJ1ZTtcbiAgICBmb3IgKHZhciBrZXkgaW4gbW9kdWxlRXhwb3J0cykge1xuICAgICAgICBoYXNFeHBvcnRzID0gdHJ1ZTtcbiAgICAgICAgaWYgKGlzU2FmZUV4cG9ydChrZXkpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIGV4cG9ydFZhbHVlID0gbW9kdWxlRXhwb3J0c1trZXldO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgLy8gVGhpcyBtaWdodCBmYWlsIGR1ZSB0byBjaXJjdWxhciBkZXBlbmRlbmNpZXNcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJ1bnRpbWVfMS5kZWZhdWx0LmlzTGlrZWx5Q29tcG9uZW50VHlwZShleHBvcnRWYWx1ZSkpIHtcbiAgICAgICAgICAgIGFyZUFsbEV4cG9ydHNDb21wb25lbnRzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGhhc0V4cG9ydHMgJiYgYXJlQWxsRXhwb3J0c0NvbXBvbmVudHM7XG59XG5mdW5jdGlvbiBzaG91bGRJbnZhbGlkYXRlUmVhY3RSZWZyZXNoQm91bmRhcnkocHJldlNpZ25hdHVyZSwgbmV4dFNpZ25hdHVyZSkge1xuICAgIGlmIChwcmV2U2lnbmF0dXJlLmxlbmd0aCAhPT0gbmV4dFNpZ25hdHVyZS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV4dFNpZ25hdHVyZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocHJldlNpZ25hdHVyZVtpXSAhPT0gbmV4dFNpZ25hdHVyZVtpXSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxudmFyIGlzVXBkYXRlU2NoZWR1bGVkID0gZmFsc2U7XG4vLyBUaGlzIGZ1bmN0aW9uIGFnZ3JlZ2F0ZXMgdXBkYXRlcyBmcm9tIG11bHRpcGxlIG1vZHVsZXMgaW50byBhIHNpbmdsZSBSZWFjdCBSZWZyZXNoIGNhbGwuXG5mdW5jdGlvbiBzY2hlZHVsZVVwZGF0ZSgpIHtcbiAgICBpZiAoaXNVcGRhdGVTY2hlZHVsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpc1VwZGF0ZVNjaGVkdWxlZCA9IHRydWU7XG4gICAgZnVuY3Rpb24gY2FuQXBwbHlVcGRhdGUoc3RhdHVzKSB7XG4gICAgICAgIHJldHVybiBzdGF0dXMgPT09ICdpZGxlJztcbiAgICB9XG4gICAgZnVuY3Rpb24gYXBwbHlVcGRhdGUoKSB7XG4gICAgICAgIGlzVXBkYXRlU2NoZWR1bGVkID0gZmFsc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBydW50aW1lXzEuZGVmYXVsdC5wZXJmb3JtUmVhY3RSZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdXYXJuaW5nOiBGYWlsZWQgdG8gcmUtcmVuZGVyLiBXZSB3aWxsIHJldHJ5IG9uIHRoZSBuZXh0IEZhc3QgUmVmcmVzaCBldmVudC5cXG4nICtcbiAgICAgICAgICAgICAgICBlcnIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChjYW5BcHBseVVwZGF0ZShtb2R1bGUuaG90LnN0YXR1cygpKSkge1xuICAgICAgICAvLyBBcHBseSB1cGRhdGUgb24gdGhlIG5leHQgdGljay5cbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBhcHBseVVwZGF0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzdGF0dXNIYW5kbGVyID0gKHN0YXR1cykgPT4ge1xuICAgICAgICBpZiAoY2FuQXBwbHlVcGRhdGUoc3RhdHVzKSkge1xuICAgICAgICAgICAgbW9kdWxlLmhvdC5yZW1vdmVTdGF0dXNIYW5kbGVyKHN0YXR1c0hhbmRsZXIpO1xuICAgICAgICAgICAgYXBwbHlVcGRhdGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLy8gQXBwbHkgdXBkYXRlIG9uY2UgdGhlIEhNUiBydW50aW1lJ3Mgc3RhdHVzIGlzIGlkbGUuXG4gICAgbW9kdWxlLmhvdC5hZGRTdGF0dXNIYW5kbGVyKHN0YXR1c0hhbmRsZXIpO1xufVxuLy8gTmVlZHMgdG8gYmUgY29tcGF0aWJsZSB3aXRoIElFMTFcbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgICByZWdpc3RlckV4cG9ydHNGb3JSZWFjdFJlZnJlc2g6IHJlZ2lzdGVyRXhwb3J0c0ZvclJlYWN0UmVmcmVzaCxcbiAgICBpc1JlYWN0UmVmcmVzaEJvdW5kYXJ5OiBpc1JlYWN0UmVmcmVzaEJvdW5kYXJ5LFxuICAgIHNob3VsZEludmFsaWRhdGVSZWFjdFJlZnJlc2hCb3VuZGFyeTogc2hvdWxkSW52YWxpZGF0ZVJlYWN0UmVmcmVzaEJvdW5kYXJ5LFxuICAgIGdldFJlZnJlc2hCb3VuZGFyeVNpZ25hdHVyZTogZ2V0UmVmcmVzaEJvdW5kYXJ5U2lnbmF0dXJlLFxuICAgIHNjaGVkdWxlVXBkYXRlOiBzY2hlZHVsZVVwZGF0ZSxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oZWxwZXJzLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/@next/react-refresh-utils/dist/internal/helpers.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js":
|
||
/*!***********************************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js ***!
|
||
\***********************************************************************************/
|
||
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst runtime_1 = __importDefault(__webpack_require__(/*! next/dist/compiled/react-refresh/runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react-refresh/runtime.js\"));\nconst helpers_1 = __importDefault(__webpack_require__(/*! ./internal/helpers */ \"(app-pages-browser)/./node_modules/next/dist/compiled/@next/react-refresh-utils/dist/internal/helpers.js\"));\n// Hook into ReactDOM initialization\nruntime_1.default.injectIntoGlobalHook(self);\n// Register global helpers\nself.$RefreshHelpers$ = helpers_1.default;\n// Register a helper for module execution interception\nself.$RefreshInterceptModuleExecution$ = function (webpackModuleId) {\n var prevRefreshReg = self.$RefreshReg$;\n var prevRefreshSig = self.$RefreshSig$;\n self.$RefreshReg$ = function (type, id) {\n runtime_1.default.register(type, webpackModuleId + ' ' + id);\n };\n self.$RefreshSig$ = runtime_1.default.createSignatureFunctionForTransform;\n // Modeled after `useEffect` cleanup pattern:\n // https://react.dev/learn/synchronizing-with-effects#step-3-add-cleanup-if-needed\n return function () {\n self.$RefreshReg$ = prevRefreshReg;\n self.$RefreshSig$ = prevRefreshSig;\n };\n};\n//# sourceMappingURL=runtime.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvQG5leHQvcmVhY3QtcmVmcmVzaC11dGlscy9kaXN0L3J1bnRpbWUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLDZDQUE2QztBQUM3QztBQUNBLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxrQ0FBa0MsbUJBQU8sQ0FBQyxnSUFBMEM7QUFDcEYsa0NBQWtDLG1CQUFPLENBQUMsb0lBQW9CO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL05pY2hvbGFpL0RvY3VtZW50cy9EZXYvYmlvaGF6YXJkLXZmeC0xL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvQG5leHQvcmVhY3QtcmVmcmVzaC11dGlscy9kaXN0L3J1bnRpbWUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBydW50aW1lXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIm5leHQvZGlzdC9jb21waWxlZC9yZWFjdC1yZWZyZXNoL3J1bnRpbWVcIikpO1xuY29uc3QgaGVscGVyc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL2ludGVybmFsL2hlbHBlcnNcIikpO1xuLy8gSG9vayBpbnRvIFJlYWN0RE9NIGluaXRpYWxpemF0aW9uXG5ydW50aW1lXzEuZGVmYXVsdC5pbmplY3RJbnRvR2xvYmFsSG9vayhzZWxmKTtcbi8vIFJlZ2lzdGVyIGdsb2JhbCBoZWxwZXJzXG5zZWxmLiRSZWZyZXNoSGVscGVycyQgPSBoZWxwZXJzXzEuZGVmYXVsdDtcbi8vIFJlZ2lzdGVyIGEgaGVscGVyIGZvciBtb2R1bGUgZXhlY3V0aW9uIGludGVyY2VwdGlvblxuc2VsZi4kUmVmcmVzaEludGVyY2VwdE1vZHVsZUV4ZWN1dGlvbiQgPSBmdW5jdGlvbiAod2VicGFja01vZHVsZUlkKSB7XG4gICAgdmFyIHByZXZSZWZyZXNoUmVnID0gc2VsZi4kUmVmcmVzaFJlZyQ7XG4gICAgdmFyIHByZXZSZWZyZXNoU2lnID0gc2VsZi4kUmVmcmVzaFNpZyQ7XG4gICAgc2VsZi4kUmVmcmVzaFJlZyQgPSBmdW5jdGlvbiAodHlwZSwgaWQpIHtcbiAgICAgICAgcnVudGltZV8xLmRlZmF1bHQucmVnaXN0ZXIodHlwZSwgd2VicGFja01vZHVsZUlkICsgJyAnICsgaWQpO1xuICAgIH07XG4gICAgc2VsZi4kUmVmcmVzaFNpZyQgPSBydW50aW1lXzEuZGVmYXVsdC5jcmVhdGVTaWduYXR1cmVGdW5jdGlvbkZvclRyYW5zZm9ybTtcbiAgICAvLyBNb2RlbGVkIGFmdGVyIGB1c2VFZmZlY3RgIGNsZWFudXAgcGF0dGVybjpcbiAgICAvLyBodHRwczovL3JlYWN0LmRldi9sZWFybi9zeW5jaHJvbml6aW5nLXdpdGgtZWZmZWN0cyNzdGVwLTMtYWRkLWNsZWFudXAtaWYtbmVlZGVkXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi4kUmVmcmVzaFJlZyQgPSBwcmV2UmVmcmVzaFJlZztcbiAgICAgICAgc2VsZi4kUmVmcmVzaFNpZyQgPSBwcmV2UmVmcmVzaFNpZztcbiAgICB9O1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJ1bnRpbWUuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/next-devtools/index.js":
|
||
/*!****************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/next-devtools/index.js ***!
|
||
\****************************************************************/
|
||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||
|
||
eval(__webpack_require__.ts("/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\nvar __webpack_modules__={\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/components/tooltip.css\":function(e,n,t){\"use strict\";t.d(n,{Z:()=>l});var r=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/sourceMaps.js\"),o=t.n(r),a=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/api.js\"),i=t.n(a)()(o());i.push([e.id,`.tooltip-wrapper {\n position: relative;\n display: inline-block;\n line-height: 1;\n}\n\n.tooltip {\n position: relative;\n padding: 6px 12px;\n border-radius: 8px;\n font-size: 14px;\n line-height: 1.4;\n pointer-events: none;\n}\n\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-style: solid;\n border-width: var(--arrow-size, 6px);\n border-color: transparent;\n}\n\n.tooltip-arrow--top {\n border-width: var(--arrow-size, 6px) var(--arrow-size, 6px) 0\n var(--arrow-size, 6px);\n border-top-color: var(--tooltip-bg-color);\n bottom: 0;\n transform: translateY(100%);\n}\n\n.tooltip-arrow--bottom {\n border-width: 0 var(--arrow-size, 6px) var(--arrow-size, 6px)\n var(--arrow-size, 6px);\n border-bottom-color: var(--tooltip-bg-color);\n top: 0;\n transform: translateY(-100%);\n}\n\n.tooltip-arrow--left {\n border-width: var(--arrow-size, 6px) 0 var(--arrow-size, 6px)\n var(--arrow-size, 6px);\n border-left-color: var(--tooltip-bg-color);\n right: 0;\n transform: translateX(100%);\n}\n\n.tooltip-arrow--right {\n border-width: var(--arrow-size, 6px) var(--arrow-size, 6px)\n var(--arrow-size, 6px) 0;\n border-right-color: var(--tooltip-bg-color);\n left: 0;\n transform: translateX(-100%);\n}\n\n.tooltip-positioner {\n z-index: var(--top-z-index);\n}\n`,\"\",{version:3,sources:[\"webpack://./src/next-devtools/components/tooltip.css\"],names:[],mappings:\"AAAA;EACE,kBAAkB;EAClB,qBAAqB;EACrB,cAAc;AAChB;;AAEA;EACE,kBAAkB;EAClB,iBAAiB;EACjB,kBAAkB;EAClB,eAAe;EACf,gBAAgB;EAChB,oBAAoB;AACtB;;AAEA;EACE,kBAAkB;EAClB,QAAQ;EACR,SAAS;EACT,mBAAmB;EACnB,oCAAoC;EACpC,yBAAyB;AAC3B;;AAEA;EACE;0BACwB;EACxB,yCAAyC;EACzC,SAAS;EACT,2BAA2B;AAC7B;;AAEA;EACE;0BACwB;EACxB,4CAA4C;EAC5C,MAAM;EACN,4BAA4B;AAC9B;;AAEA;EACE;0BACwB;EACxB,0CAA0C;EAC1C,QAAQ;EACR,2BAA2B;AAC7B;;AAEA;EACE;4BAC0B;EAC1B,2CAA2C;EAC3C,OAAO;EACP,4BAA4B;AAC9B;;AAEA;EACE,2BAA2B;AAC7B\",sourcesContent:[\".tooltip-wrapper {\\n position: relative;\\n display: inline-block;\\n line-height: 1;\\n}\\n\\n.tooltip {\\n position: relative;\\n padding: 6px 12px;\\n border-radius: 8px;\\n font-size: 14px;\\n line-height: 1.4;\\n pointer-events: none;\\n}\\n\\n.tooltip-arrow {\\n position: absolute;\\n width: 0;\\n height: 0;\\n border-style: solid;\\n border-width: var(--arrow-size, 6px);\\n border-color: transparent;\\n}\\n\\n.tooltip-arrow--top {\\n border-width: var(--arrow-size, 6px) var(--arrow-size, 6px) 0\\n var(--arrow-size, 6px);\\n border-top-color: var(--tooltip-bg-color);\\n bottom: 0;\\n transform: translateY(100%);\\n}\\n\\n.tooltip-arrow--bottom {\\n border-width: 0 var(--arrow-size, 6px) var(--arrow-size, 6px)\\n var(--arrow-size, 6px);\\n border-bottom-color: var(--tooltip-bg-color);\\n top: 0;\\n transform: translateY(-100%);\\n}\\n\\n.tooltip-arrow--left {\\n border-width: var(--arrow-size, 6px) 0 var(--arrow-size, 6px)\\n var(--arrow-size, 6px);\\n border-left-color: var(--tooltip-bg-color);\\n right: 0;\\n transform: translateX(100%);\\n}\\n\\n.tooltip-arrow--right {\\n border-width: var(--arrow-size, 6px) var(--arrow-size, 6px)\\n var(--arrow-size, 6px) 0;\\n border-right-color: var(--tooltip-bg-color);\\n left: 0;\\n transform: translateX(-100%);\\n}\\n\\n.tooltip-positioner {\\n z-index: var(--top-z-index);\\n}\\n\"],sourceRoot:\"\"}]);let l=i},\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/components/devtools-panel/resize/resize-handle.css\":function(e,n,t){\"use strict\";t.d(n,{Z:()=>l});var r=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/sourceMaps.js\"),o=t.n(r),a=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/api.js\"),i=t.n(a)()(o());i.push([e.id,`.resize-container {\n position: absolute;\n /* todo: better z index */\n z-index: 10;\n /* todo: is this needed */\n background: transparent;\n}\n\n.resize-line {\n position: absolute;\n /* todo smarter z index */\n z-index: -1;\n pointer-events: none;\n /* a normal exit animation curve- at this point the exit animation is */\n /* immediately responsive so we don't need a bespoke curve */\n transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);\n /* todo: better var? */\n border: 1px solid var(--color-gray-100);\n}\n\n/* start really fast because we start super hidden initially behind the panel, otherwise feels like an unintended animation delay */\n.resize-container:hover ~ .resize-line {\n transition: transform 0.2s cubic-bezier(0.05, 0.9, 0.2, 1); /* Fast start for animate in */\n}\n\n.resize-container.right,\n.resize-container.left {\n top: 0;\n height: 100%;\n width: 25px;\n cursor: ew-resize;\n}\n\n/* todo: don't hard code all these values/use vars */\n\n.resize-container.bottom,\n.resize-container.top {\n left: 0;\n width: 100%;\n height: 25px;\n cursor: ns-resize;\n}\n\n.resize-container.top {\n top: -12px;\n}\n.resize-container.bottom {\n bottom: -12px;\n}\n.resize-container.left {\n left: -12px;\n}\n.resize-container.right {\n right: -12px;\n}\n\n.resize-container.top-left,\n.resize-container.top-right,\n.resize-container.bottom-left,\n.resize-container.bottom-right {\n width: 32px;\n height: 32px;\n z-index: 15;\n}\n\n.resize-container.top-left {\n top: -16px;\n left: -16px;\n cursor: nwse-resize;\n}\n.resize-container.top-right {\n top: -16px;\n right: -16px;\n cursor: nesw-resize;\n}\n.resize-container.bottom-left {\n bottom: -16px;\n left: -16px;\n cursor: nesw-resize;\n}\n.resize-container.bottom-right {\n bottom: -16px;\n right: -16px;\n cursor: nwse-resize;\n}\n\n.resize-line.top,\n.resize-line.bottom {\n height: 28px;\n width: 100%;\n background-color: var(--color-background-100);\n}\n\n.resize-line.left,\n.resize-line.right {\n width: 28px;\n height: 100%;\n background-color: var(--color-background-100);\n}\n\n.resize-line.top {\n top: -12px;\n left: calc(-1 * var(--border-left, 2px));\n width: calc(100% + var(--border-horizontal, 4px));\n border-radius: var(--rounded-md) var(--rounded-md) 0 0;\n transform: translateY(28px);\n}\n\n.resize-line.bottom {\n bottom: -12px;\n left: calc(-1 * var(--border-left, 2px));\n width: calc(100% + var(--border-horizontal, 4px));\n border-radius: 0 0 var(--rounded-md) var(--rounded-md);\n transform: translateY(-28px);\n}\n\n.resize-line.left {\n top: calc(-1 * var(--border-top, 2px));\n left: -12px;\n height: calc(100% + var(--border-vertical, 4px));\n border-radius: var(--rounded-md) 0 0 var(--rounded-md);\n transform: translateX(28px);\n}\n\n.resize-line.right {\n top: calc(-1 * var(--border-top, 2px));\n right: -12px;\n height: calc(100% + var(--border-vertical, 4px));\n border-radius: 0 var(--rounded-md) var(--rounded-md) 0;\n transform: translateX(-28px);\n}\n\n.resize-container.right:hover ~ .resize-line.right,\n.resize-container.left:hover ~ .resize-line.left,\n.resize-line.right.dragging,\n.resize-line.left.dragging {\n transform: translateX(0);\n}\n\n.resize-container.bottom:hover ~ .resize-line.bottom,\n.resize-container.top:hover ~ .resize-line.top,\n.resize-line.bottom.dragging,\n.resize-line.top.dragging {\n transform: translateY(0);\n}\n\n/* make sure that we don't show multiple handles at once\n * we should only ever show the currently resizing handle\n * regardless of hover state \n */\n.resize-container.no-hover.right:hover ~ .resize-line.right {\n transform: translateX(-28px);\n}\n.resize-container.no-hover.left:hover ~ .resize-line.left {\n transform: translateX(28px);\n}\n.resize-container.no-hover.bottom:hover ~ .resize-line.bottom {\n transform: translateY(-28px);\n}\n.resize-container.no-hover.top:hover ~ .resize-line.top {\n transform: translateY(28px);\n}\n`,\"\",{version:3,sources:[\"webpack://./src/next-devtools/dev-overlay/components/devtools-panel/resize/resize-handle.css\"],names:[],mappings:\"AAAA;EACE,kBAAkB;EAClB,yBAAyB;EACzB,WAAW;EACX,yBAAyB;EACzB,uBAAuB;AACzB;;AAEA;EACE,kBAAkB;EAClB,yBAAyB;EACzB,WAAW;EACX,oBAAoB;EACpB,uEAAuE;EACvE,4DAA4D;EAC5D,uDAAuD;EACvD,sBAAsB;EACtB,uCAAuC;AACzC;;AAEA,mIAAmI;AACnI;EACE,0DAA0D,EAAE,8BAA8B;AAC5F;;AAEA;;EAEE,MAAM;EACN,YAAY;EACZ,WAAW;EACX,iBAAiB;AACnB;;AAEA,oDAAoD;;AAEpD;;EAEE,OAAO;EACP,WAAW;EACX,YAAY;EACZ,iBAAiB;AACnB;;AAEA;EACE,UAAU;AACZ;AACA;EACE,aAAa;AACf;AACA;EACE,WAAW;AACb;AACA;EACE,YAAY;AACd;;AAEA;;;;EAIE,WAAW;EACX,YAAY;EACZ,WAAW;AACb;;AAEA;EACE,UAAU;EACV,WAAW;EACX,mBAAmB;AACrB;AACA;EACE,UAAU;EACV,YAAY;EACZ,mBAAmB;AACrB;AACA;EACE,aAAa;EACb,WAAW;EACX,mBAAmB;AACrB;AACA;EACE,aAAa;EACb,YAAY;EACZ,mBAAmB;AACrB;;AAEA;;EAEE,YAAY;EACZ,WAAW;EACX,6CAA6C;AAC/C;;AAEA;;EAEE,WAAW;EACX,YAAY;EACZ,6CAA6C;AAC/C;;AAEA;EACE,UAAU;EACV,wCAAwC;EACxC,iDAAiD;EACjD,sDAAsD;EACtD,2BAA2B;AAC7B;;AAEA;EACE,aAAa;EACb,wCAAwC;EACxC,iDAAiD;EACjD,sDAAsD;EACtD,4BAA4B;AAC9B;;AAEA;EACE,sCAAsC;EACtC,WAAW;EACX,gDAAgD;EAChD,sDAAsD;EACtD,2BAA2B;AAC7B;;AAEA;EACE,sCAAsC;EACtC,YAAY;EACZ,gDAAgD;EAChD,sDAAsD;EACtD,4BAA4B;AAC9B;;AAEA;;;;EAIE,wBAAwB;AAC1B;;AAEA;;;;EAIE,wBAAwB;AAC1B;;AAEA;;;EAGE;AACF;EACE,4BAA4B;AAC9B;AACA;EACE,2BAA2B;AAC7B;AACA;EACE,4BAA4B;AAC9B;AACA;EACE,2BAA2B;AAC7B\",sourcesContent:[\".resize-container {\\n position: absolute;\\n /* todo: better z index */\\n z-index: 10;\\n /* todo: is this needed */\\n background: transparent;\\n}\\n\\n.resize-line {\\n position: absolute;\\n /* todo smarter z index */\\n z-index: -1;\\n pointer-events: none;\\n /* a normal exit animation curve- at this point the exit animation is */\\n /* immediately responsive so we don't need a bespoke curve */\\n transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);\\n /* todo: better var? */\\n border: 1px solid var(--color-gray-100);\\n}\\n\\n/* start really fast because we start super hidden initially behind the panel, otherwise feels like an unintended animation delay */\\n.resize-container:hover ~ .resize-line {\\n transition: transform 0.2s cubic-bezier(0.05, 0.9, 0.2, 1); /* Fast start for animate in */\\n}\\n\\n.resize-container.right,\\n.resize-container.left {\\n top: 0;\\n height: 100%;\\n width: 25px;\\n cursor: ew-resize;\\n}\\n\\n/* todo: don't hard code all these values/use vars */\\n\\n.resize-container.bottom,\\n.resize-container.top {\\n left: 0;\\n width: 100%;\\n height: 25px;\\n cursor: ns-resize;\\n}\\n\\n.resize-container.top {\\n top: -12px;\\n}\\n.resize-container.bottom {\\n bottom: -12px;\\n}\\n.resize-container.left {\\n left: -12px;\\n}\\n.resize-container.right {\\n right: -12px;\\n}\\n\\n.resize-container.top-left,\\n.resize-container.top-right,\\n.resize-container.bottom-left,\\n.resize-container.bottom-right {\\n width: 32px;\\n height: 32px;\\n z-index: 15;\\n}\\n\\n.resize-container.top-left {\\n top: -16px;\\n left: -16px;\\n cursor: nwse-resize;\\n}\\n.resize-container.top-right {\\n top: -16px;\\n right: -16px;\\n cursor: nesw-resize;\\n}\\n.resize-container.bottom-left {\\n bottom: -16px;\\n left: -16px;\\n cursor: nesw-resize;\\n}\\n.resize-container.bottom-right {\\n bottom: -16px;\\n right: -16px;\\n cursor: nwse-resize;\\n}\\n\\n.resize-line.top,\\n.resize-line.bottom {\\n height: 28px;\\n width: 100%;\\n background-color: var(--color-background-100);\\n}\\n\\n.resize-line.left,\\n.resize-line.right {\\n width: 28px;\\n height: 100%;\\n background-color: var(--color-background-100);\\n}\\n\\n.resize-line.top {\\n top: -12px;\\n left: calc(-1 * var(--border-left, 2px));\\n width: calc(100% + var(--border-horizontal, 4px));\\n border-radius: var(--rounded-md) var(--rounded-md) 0 0;\\n transform: translateY(28px);\\n}\\n\\n.resize-line.bottom {\\n bottom: -12px;\\n left: calc(-1 * var(--border-left, 2px));\\n width: calc(100% + var(--border-horizontal, 4px));\\n border-radius: 0 0 var(--rounded-md) var(--rounded-md);\\n transform: translateY(-28px);\\n}\\n\\n.resize-line.left {\\n top: calc(-1 * var(--border-top, 2px));\\n left: -12px;\\n height: calc(100% + var(--border-vertical, 4px));\\n border-radius: var(--rounded-md) 0 0 var(--rounded-md);\\n transform: translateX(28px);\\n}\\n\\n.resize-line.right {\\n top: calc(-1 * var(--border-top, 2px));\\n right: -12px;\\n height: calc(100% + var(--border-vertical, 4px));\\n border-radius: 0 var(--rounded-md) var(--rounded-md) 0;\\n transform: translateX(-28px);\\n}\\n\\n.resize-container.right:hover ~ .resize-line.right,\\n.resize-container.left:hover ~ .resize-line.left,\\n.resize-line.right.dragging,\\n.resize-line.left.dragging {\\n transform: translateX(0);\\n}\\n\\n.resize-container.bottom:hover ~ .resize-line.bottom,\\n.resize-container.top:hover ~ .resize-line.top,\\n.resize-line.bottom.dragging,\\n.resize-line.top.dragging {\\n transform: translateY(0);\\n}\\n\\n/* make sure that we don't show multiple handles at once\\n * we should only ever show the currently resizing handle\\n * regardless of hover state \\n */\\n.resize-container.no-hover.right:hover ~ .resize-line.right {\\n transform: translateX(-28px);\\n}\\n.resize-container.no-hover.left:hover ~ .resize-line.left {\\n transform: translateX(28px);\\n}\\n.resize-container.no-hover.bottom:hover ~ .resize-line.bottom {\\n transform: translateY(-28px);\\n}\\n.resize-container.no-hover.top:hover ~ .resize-line.top {\\n transform: translateY(28px);\\n}\\n\"],sourceRoot:\"\"}]);let l=i},\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/components/overview/segment-boundary-trigger.css\":function(e,n,t){\"use strict\";t.d(n,{Z:()=>l});var r=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/sourceMaps.js\"),o=t.n(r),a=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/api.js\"),i=t.n(a)()(o());i.push([e.id,`.segment-boundary-trigger {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 4px 6px;\n line-height: 16px;\n font-weight: 500;\n color: var(--color-gray-1000);\n border-radius: 999px;\n border: none;\n font-size: var(--size-12);\n cursor: pointer;\n transition: background-color 0.15s ease;\n}\n\n.segment-boundary-trigger-text {\n font-size: var(--size-12);\n font-weight: 500;\n user-select: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.segment-boundary-trigger-text .plus-icon {\n transition: transform 0.25s ease;\n}\n\n.segment-boundary-trigger-text:hover .plus-icon {\n color: var(--color-gray-800);\n}\n\n.segment-boundary-trigger svg {\n width: 14px;\n height: 14px;\n flex-shrink: 0;\n vertical-align: middle;\n}\n\n.segment-boundary-trigger:hover svg {\n color: var(--color-gray-700);\n}\n\n.segment-boundary-trigger[disabled] svg,\n.segment-boundary-trigger[disabled]:hover svg {\n color: var(--color-gray-400);\n cursor: not-allowed;\n}\n\n.segment-boundary-dropdown {\n padding: 8px;\n background: var(--color-background-100);\n border: 1px solid var(--color-gray-400);\n border-radius: 16px;\n min-width: 120px;\n user-select: none;\n cursor: default;\n box-shadow: 0px 4px 8px -4px color-mix(in srgb, var(--color-gray-900) 4%, transparent);\n}\n\n.segment-boundary-dropdown-positioner {\n z-index: var(--top-z-index);\n}\n\n.segment-boundary-dropdown-item {\n display: flex;\n align-items: center;\n padding: 8px;\n line-height: 20px;\n font-size: 14px;\n border-radius: 6px;\n color: var(--color-gray-1000);\n cursor: pointer;\n min-width: 220px;\n border: none;\n background: none;\n width: 100%;\n}\n\n.segment-boundary-dropdown-item[data-disabled] {\n color: var(--color-gray-400);\n cursor: not-allowed;\n}\n\n.segment-boundary-dropdown-item svg {\n margin-right: 12px;\n color: currentColor;\n}\n\n.segment-boundary-dropdown-item:hover {\n background: var(--color-gray-200);\n}\n\n.segment-boundary-dropdown-item:first-child {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n}\n\n.segment-boundary-dropdown-item:last-child {\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n}\n\n.segment-boundary-group-label {\n padding: 8px;\n font-size: 13px;\n line-height: 16px;\n font-weight: 400;\n color: var(--color-gray-900);\n}\n`,\"\",{version:3,sources:[\"webpack://./src/next-devtools/dev-overlay/components/overview/segment-boundary-trigger.css\"],names:[],mappings:\"AAAA;EACE,aAAa;EACb,mBAAmB;EACnB,QAAQ;EACR,gBAAgB;EAChB,iBAAiB;EACjB,gBAAgB;EAChB,6BAA6B;EAC7B,oBAAoB;EACpB,YAAY;EACZ,yBAAyB;EACzB,eAAe;EACf,uCAAuC;AACzC;;AAEA;EACE,yBAAyB;EACzB,gBAAgB;EAChB,iBAAiB;EACjB,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,gCAAgC;AAClC;;AAEA;EACE,4BAA4B;AAC9B;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,cAAc;EACd,sBAAsB;AACxB;;AAEA;EACE,4BAA4B;AAC9B;;AAEA;;EAEE,4BAA4B;EAC5B,mBAAmB;AACrB;;AAEA;EACE,YAAY;EACZ,uCAAuC;EACvC,uCAAuC;EACvC,mBAAmB;EACnB,gBAAgB;EAChB,iBAAiB;EACjB,eAAe;EACf,sFAAsF;AACxF;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,YAAY;EACZ,iBAAiB;EACjB,eAAe;EACf,kBAAkB;EAClB,6BAA6B;EAC7B,eAAe;EACf,gBAAgB;EAChB,YAAY;EACZ,gBAAgB;EAChB,WAAW;AACb;;AAEA;EACE,4BAA4B;EAC5B,mBAAmB;AACrB;;AAEA;EACE,kBAAkB;EAClB,mBAAmB;AACrB;;AAEA;EACE,iCAAiC;AACnC;;AAEA;EACE,2BAA2B;EAC3B,4BAA4B;AAC9B;;AAEA;EACE,8BAA8B;EAC9B,+BAA+B;AACjC;;AAEA;EACE,YAAY;EACZ,eAAe;EACf,iBAAiB;EACjB,gBAAgB;EAChB,4BAA4B;AAC9B\",sourcesContent:[\".segment-boundary-trigger {\\n display: flex;\\n align-items: center;\\n gap: 4px;\\n padding: 4px 6px;\\n line-height: 16px;\\n font-weight: 500;\\n color: var(--color-gray-1000);\\n border-radius: 999px;\\n border: none;\\n font-size: var(--size-12);\\n cursor: pointer;\\n transition: background-color 0.15s ease;\\n}\\n\\n.segment-boundary-trigger-text {\\n font-size: var(--size-12);\\n font-weight: 500;\\n user-select: none;\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n}\\n\\n.segment-boundary-trigger-text .plus-icon {\\n transition: transform 0.25s ease;\\n}\\n\\n.segment-boundary-trigger-text:hover .plus-icon {\\n color: var(--color-gray-800);\\n}\\n\\n.segment-boundary-trigger svg {\\n width: 14px;\\n height: 14px;\\n flex-shrink: 0;\\n vertical-align: middle;\\n}\\n\\n.segment-boundary-trigger:hover svg {\\n color: var(--color-gray-700);\\n}\\n\\n.segment-boundary-trigger[disabled] svg,\\n.segment-boundary-trigger[disabled]:hover svg {\\n color: var(--color-gray-400);\\n cursor: not-allowed;\\n}\\n\\n.segment-boundary-dropdown {\\n padding: 8px;\\n background: var(--color-background-100);\\n border: 1px solid var(--color-gray-400);\\n border-radius: 16px;\\n min-width: 120px;\\n user-select: none;\\n cursor: default;\\n box-shadow: 0px 4px 8px -4px color-mix(in srgb, var(--color-gray-900) 4%, transparent);\\n}\\n\\n.segment-boundary-dropdown-positioner {\\n z-index: var(--top-z-index);\\n}\\n\\n.segment-boundary-dropdown-item {\\n display: flex;\\n align-items: center;\\n padding: 8px;\\n line-height: 20px;\\n font-size: 14px;\\n border-radius: 6px;\\n color: var(--color-gray-1000);\\n cursor: pointer;\\n min-width: 220px;\\n border: none;\\n background: none;\\n width: 100%;\\n}\\n\\n.segment-boundary-dropdown-item[data-disabled] {\\n color: var(--color-gray-400);\\n cursor: not-allowed;\\n}\\n\\n.segment-boundary-dropdown-item svg {\\n margin-right: 12px;\\n color: currentColor;\\n}\\n\\n.segment-boundary-dropdown-item:hover {\\n background: var(--color-gray-200);\\n}\\n\\n.segment-boundary-dropdown-item:first-child {\\n border-top-left-radius: 4px;\\n border-top-right-radius: 4px;\\n}\\n\\n.segment-boundary-dropdown-item:last-child {\\n border-bottom-left-radius: 4px;\\n border-bottom-right-radius: 4px;\\n}\\n\\n.segment-boundary-group-label {\\n padding: 8px;\\n font-size: 13px;\\n line-height: 16px;\\n font-weight: 400;\\n color: var(--color-gray-900);\\n}\\n\"],sourceRoot:\"\"}]);let l=i},\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/components/overview/segment-explorer.css\":function(e,n,t){\"use strict\";t.d(n,{Z:()=>l});var r=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/sourceMaps.js\"),o=t.n(r),a=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/api.js\"),i=t.n(a)()(o());i.push([e.id,`.segment-explorer-content {\n font-size: var(--size-14);\n padding: 0 8px;\n width: 700px;\n height: 400px;\n max-width: calc(100vw - 40px);\n max-height: calc(100vh - 240px);\n}\n\n.segment-explorer-page-route-bar {\n display: flex;\n align-items: center;\n padding: 14px 16px;\n background-color: var(--color-background-200);\n gap: 12px;\n}\n\n.segment-explorer-page-route-bar-path {\n font-size: var(--size-14);\n font-weight: 500;\n color: var(--color-gray-1000);\n font-family: var(--font-mono);\n white-space: nowrap;\n line-height: 20px;\n}\n\n.segment-explorer-item {\n margin: 4px 0;\n border-radius: 6px;\n}\n\n.segment-explorer-item:nth-child(even) {\n background-color: var(--color-background-200);\n}\n\n.segment-explorer-item-row {\n display: flex;\n align-items: center;\n padding-top: 10px;\n padding-bottom: 10px;\n padding-right: 4px;\n white-space: pre;\n cursor: default;\n color: var(--color-gray-1000);\n}\n\n.segment-explorer-children--intended {\n padding-left: 16px;\n}\n\n.segment-explorer-filename {\n display: inline-flex;\n width: 100%;\n align-items: center;\n}\n\n.segment-explorer-filename select {\n margin-left: auto;\n}\n\n.segment-explorer-filename--path {\n margin-right: auto;\n}\n.segment-explorer-filename--path small {\n display: inline-block;\n width: 0;\n opacity: 0;\n}\n.segment-explorer-filename--name {\n color: var(--color-gray-800);\n}\n\n.segment-explorer-files {\n display: inline-flex;\n gap: 8px;\n margin-left: auto;\n}\n\n.segment-explorer-files + .segment-boundary-trigger {\n margin-left: 8px;\n}\n\n.segment-explorer-file-label {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 4px 6px;\n border-radius: 16px;\n line-height: 16px;\n font-size: var(--size-12);\n font-weight: 500;\n user-select: none;\n cursor: pointer;\n background-color: var(--color-gray-300);\n color: var(--color-gray-1000);\n}\n\n.segment-explorer-file-label--overridden {\n background-color: var(--color-amber-300);\n color: var(--color-amber-900);\n}\n\n.segment-explorer-file-label .code-icon {\n opacity: 0;\n margin-left: 0;\n width: 0;\n transition: all 0.15s ease-in-out;\n}\n.segment-explorer-file-label:hover .code-icon {\n opacity: 1;\n width: 12px;\n margin-left: 4px;\n}\n\n.segment-explorer-file-label:hover {\n filter: brightness(0.95);\n}\n\n.segment-explorer-file-label--builtin {\n background-color: transparent;\n color: var(--color-gray-900);\n border: 1px dashed var(--color-gray-500);\n height: 24px;\n cursor: default;\n}\n.segment-explorer-file-label--builtin svg {\n margin-left: 4px;\n margin-right: -4px;\n}\n\n/* Footer styles */\n.segment-explorer-footer {\n padding: 8px;\n border-top: 1px solid var(--color-gray-400);\n background-color: var(--color-background-100);\n user-select: none;\n}\n\n.segment-explorer-footer-button {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n width: 100%;\n padding: 6px;\n background: var(--color-background-100);\n border: 1px solid var(--color-gray-400);\n border-radius: 6px;\n color: var(--color-gray-1000);\n font-size: var(--size-14);\n font-weight: 500;\n cursor: pointer;\n transition: background-color 0.15s ease;\n}\n\n.segment-explorer-footer-button:hover:not(:disabled) {\n background: var(--color-gray-200);\n}\n\n.segment-explorer-footer-button--disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.segment-explorer-footer-text {\n text-align: center;\n}\n\n.segment-explorer-footer-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 20px;\n height: 20px;\n padding: 0 6px;\n background: var(--color-amber-300);\n color: var(--color-amber-900);\n border-radius: 10px;\n font-size: var(--size-12);\n font-weight: 600;\n line-height: 1;\n}\n\n.segment-explorer-file-label-tooltip--sm {\n white-space: nowrap;\n}\n\n.segment-explorer-file-label-tooltip--lg {\n min-width: 200px;\n}\n`,\"\",{version:3,sources:[\"webpack://./src/next-devtools/dev-overlay/components/overview/segment-explorer.css\"],names:[],mappings:\"AAAA;EACE,yBAAyB;EACzB,cAAc;EACd,YAAY;EACZ,aAAa;EACb,6BAA6B;EAC7B,+BAA+B;AACjC;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,kBAAkB;EAClB,6CAA6C;EAC7C,SAAS;AACX;;AAEA;EACE,yBAAyB;EACzB,gBAAgB;EAChB,6BAA6B;EAC7B,6BAA6B;EAC7B,mBAAmB;EACnB,iBAAiB;AACnB;;AAEA;EACE,aAAa;EACb,kBAAkB;AACpB;;AAEA;EACE,6CAA6C;AAC/C;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,iBAAiB;EACjB,oBAAoB;EACpB,kBAAkB;EAClB,gBAAgB;EAChB,eAAe;EACf,6BAA6B;AAC/B;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,oBAAoB;EACpB,WAAW;EACX,mBAAmB;AACrB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,kBAAkB;AACpB;AACA;EACE,qBAAqB;EACrB,QAAQ;EACR,UAAU;AACZ;AACA;EACE,4BAA4B;AAC9B;;AAEA;EACE,oBAAoB;EACpB,QAAQ;EACR,iBAAiB;AACnB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;EACvB,gBAAgB;EAChB,mBAAmB;EACnB,iBAAiB;EACjB,yBAAyB;EACzB,gBAAgB;EAChB,iBAAiB;EACjB,eAAe;EACf,uCAAuC;EACvC,6BAA6B;AAC/B;;AAEA;EACE,wCAAwC;EACxC,6BAA6B;AAC/B;;AAEA;EACE,UAAU;EACV,cAAc;EACd,QAAQ;EACR,iCAAiC;AACnC;AACA;EACE,UAAU;EACV,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,6BAA6B;EAC7B,4BAA4B;EAC5B,wCAAwC;EACxC,YAAY;EACZ,eAAe;AACjB;AACA;EACE,gBAAgB;EAChB,kBAAkB;AACpB;;AAEA,kBAAkB;AAClB;EACE,YAAY;EACZ,2CAA2C;EAC3C,6CAA6C;EAC7C,iBAAiB;AACnB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,QAAQ;EACR,WAAW;EACX,YAAY;EACZ,uCAAuC;EACvC,uCAAuC;EACvC,kBAAkB;EAClB,6BAA6B;EAC7B,yBAAyB;EACzB,gBAAgB;EAChB,eAAe;EACf,uCAAuC;AACzC;;AAEA;EACE,iCAAiC;AACnC;;AAEA;EACE,YAAY;EACZ,mBAAmB;AACrB;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;EACvB,eAAe;EACf,YAAY;EACZ,cAAc;EACd,kCAAkC;EAClC,6BAA6B;EAC7B,mBAAmB;EACnB,yBAAyB;EACzB,gBAAgB;EAChB,cAAc;AAChB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,gBAAgB;AAClB\",sourcesContent:[\".segment-explorer-content {\\n font-size: var(--size-14);\\n padding: 0 8px;\\n width: 700px;\\n height: 400px;\\n max-width: calc(100vw - 40px);\\n max-height: calc(100vh - 240px);\\n}\\n\\n.segment-explorer-page-route-bar {\\n display: flex;\\n align-items: center;\\n padding: 14px 16px;\\n background-color: var(--color-background-200);\\n gap: 12px;\\n}\\n\\n.segment-explorer-page-route-bar-path {\\n font-size: var(--size-14);\\n font-weight: 500;\\n color: var(--color-gray-1000);\\n font-family: var(--font-mono);\\n white-space: nowrap;\\n line-height: 20px;\\n}\\n\\n.segment-explorer-item {\\n margin: 4px 0;\\n border-radius: 6px;\\n}\\n\\n.segment-explorer-item:nth-child(even) {\\n background-color: var(--color-background-200);\\n}\\n\\n.segment-explorer-item-row {\\n display: flex;\\n align-items: center;\\n padding-top: 10px;\\n padding-bottom: 10px;\\n padding-right: 4px;\\n white-space: pre;\\n cursor: default;\\n color: var(--color-gray-1000);\\n}\\n\\n.segment-explorer-children--intended {\\n padding-left: 16px;\\n}\\n\\n.segment-explorer-filename {\\n display: inline-flex;\\n width: 100%;\\n align-items: center;\\n}\\n\\n.segment-explorer-filename select {\\n margin-left: auto;\\n}\\n\\n.segment-explorer-filename--path {\\n margin-right: auto;\\n}\\n.segment-explorer-filename--path small {\\n display: inline-block;\\n width: 0;\\n opacity: 0;\\n}\\n.segment-explorer-filename--name {\\n color: var(--color-gray-800);\\n}\\n\\n.segment-explorer-files {\\n display: inline-flex;\\n gap: 8px;\\n margin-left: auto;\\n}\\n\\n.segment-explorer-files + .segment-boundary-trigger {\\n margin-left: 8px;\\n}\\n\\n.segment-explorer-file-label {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n padding: 4px 6px;\\n border-radius: 16px;\\n line-height: 16px;\\n font-size: var(--size-12);\\n font-weight: 500;\\n user-select: none;\\n cursor: pointer;\\n background-color: var(--color-gray-300);\\n color: var(--color-gray-1000);\\n}\\n\\n.segment-explorer-file-label--overridden {\\n background-color: var(--color-amber-300);\\n color: var(--color-amber-900);\\n}\\n\\n.segment-explorer-file-label .code-icon {\\n opacity: 0;\\n margin-left: 0;\\n width: 0;\\n transition: all 0.15s ease-in-out;\\n}\\n.segment-explorer-file-label:hover .code-icon {\\n opacity: 1;\\n width: 12px;\\n margin-left: 4px;\\n}\\n\\n.segment-explorer-file-label:hover {\\n filter: brightness(0.95);\\n}\\n\\n.segment-explorer-file-label--builtin {\\n background-color: transparent;\\n color: var(--color-gray-900);\\n border: 1px dashed var(--color-gray-500);\\n height: 24px;\\n cursor: default;\\n}\\n.segment-explorer-file-label--builtin svg {\\n margin-left: 4px;\\n margin-right: -4px;\\n}\\n\\n/* Footer styles */\\n.segment-explorer-footer {\\n padding: 8px;\\n border-top: 1px solid var(--color-gray-400);\\n background-color: var(--color-background-100);\\n user-select: none;\\n}\\n\\n.segment-explorer-footer-button {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n gap: 8px;\\n width: 100%;\\n padding: 6px;\\n background: var(--color-background-100);\\n border: 1px solid var(--color-gray-400);\\n border-radius: 6px;\\n color: var(--color-gray-1000);\\n font-size: var(--size-14);\\n font-weight: 500;\\n cursor: pointer;\\n transition: background-color 0.15s ease;\\n}\\n\\n.segment-explorer-footer-button:hover:not(:disabled) {\\n background: var(--color-gray-200);\\n}\\n\\n.segment-explorer-footer-button--disabled {\\n opacity: 0.5;\\n cursor: not-allowed;\\n}\\n\\n.segment-explorer-footer-text {\\n text-align: center;\\n}\\n\\n.segment-explorer-footer-badge {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n min-width: 20px;\\n height: 20px;\\n padding: 0 6px;\\n background: var(--color-amber-300);\\n color: var(--color-amber-900);\\n border-radius: 10px;\\n font-size: var(--size-12);\\n font-weight: 600;\\n line-height: 1;\\n}\\n\\n.segment-explorer-file-label-tooltip--sm {\\n white-space: nowrap;\\n}\\n\\n.segment-explorer-file-label-tooltip--lg {\\n min-width: 200px;\\n}\\n\"],sourceRoot:\"\"}]);let l=i},\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/components/toast/style.css\":function(e,n,t){\"use strict\";t.d(n,{Z:()=>l});var r=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/sourceMaps.js\"),o=t.n(r),a=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/api.js\"),i=t.n(a)()(o());i.push([e.id,`.nextjs-toast {\n position: fixed;\n z-index: var(--top-z-index);\n max-width: 420px;\n box-shadow: 0px 16px 32px rgba(0, 0, 0, 0.25);\n}\n\n.nextjs-toast-errors-parent {\n padding: 16px;\n border-radius: var(--rounded-4xl);\n font-weight: 500;\n color: var(--color-ansi-bright-white);\n background-color: var(--color-ansi-red);\n}\n`,\"\",{version:3,sources:[\"webpack://./src/next-devtools/dev-overlay/components/toast/style.css\"],names:[],mappings:\"AAAA;EACE,eAAe;EACf,2BAA2B;EAC3B,gBAAgB;EAChB,6CAA6C;AAC/C;;AAEA;EACE,aAAa;EACb,iCAAiC;EACjC,gBAAgB;EAChB,qCAAqC;EACrC,uCAAuC;AACzC\",sourcesContent:[\".nextjs-toast {\\n position: fixed;\\n z-index: var(--top-z-index);\\n max-width: 420px;\\n box-shadow: 0px 16px 32px rgba(0, 0, 0, 0.25);\\n}\\n\\n.nextjs-toast-errors-parent {\\n padding: 16px;\\n border-radius: var(--rounded-4xl);\\n font-weight: 500;\\n color: var(--color-ansi-bright-white);\\n background-color: var(--color-ansi-red);\\n}\\n\"],sourceRoot:\"\"}]);let l=i},\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/global.css\":function(e,n,t){\"use strict\";t.d(n,{Z:()=>l});var r=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/sourceMaps.js\"),o=t.n(r),a=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/api.js\"),i=t.n(a)()(o());i.push([e.id,`/* devtool global css variables */\n:host {\n --top-z-index: 2147483647;\n}\n`,\"\",{version:3,sources:[\"webpack://./src/next-devtools/global.css\"],names:[],mappings:\"AAAA,iCAAiC;AACjC;EACE,yBAAyB;AAC3B\",sourcesContent:[\"/* devtool global css variables */\\n:host {\\n --top-z-index: 2147483647;\\n}\\n\"],sourceRoot:\"\"}]);let l=i},\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/api.js\":function(e){\"use strict\";e.exports=function(e){var n=[];return n.toString=function(){return this.map(function(n){var t=\"\",r=void 0!==n[5];return n[4]&&(t+=\"@supports (\".concat(n[4],\") {\")),n[2]&&(t+=\"@media \".concat(n[2],\" {\")),r&&(t+=\"@layer\".concat(n[5].length>0?\" \".concat(n[5]):\"\",\" {\")),t+=e(n),r&&(t+=\"}\"),n[2]&&(t+=\"}\"),n[4]&&(t+=\"}\"),t}).join(\"\")},n.i=function(e,t,r,o,a){\"string\"==typeof e&&(e=[[null,e,void 0]]);var i={};if(r)for(var l=0;l<this.length;l++){var s=this[l][0];null!=s&&(i[s]=!0)}for(var c=0;c<e.length;c++){var u=[].concat(e[c]);r&&i[u[0]]||(void 0!==a&&(void 0===u[5]||(u[1]=\"@layer\".concat(u[5].length>0?\" \".concat(u[5]):\"\",\" {\").concat(u[1],\"}\")),u[5]=a),t&&(u[2]&&(u[1]=\"@media \".concat(u[2],\" {\").concat(u[1],\"}\")),u[2]=t),o&&(u[4]?(u[1]=\"@supports (\".concat(u[4],\") {\").concat(u[1],\"}\"),u[4]=o):u[4]=\"\".concat(o)),n.push(u))}},n}},\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/sourceMaps.js\":function(e){\"use strict\";e.exports=function(e){var n=e[1],t=e[3];if(!t)return n;if(\"function\"==typeof btoa){var r=btoa(unescape(encodeURIComponent(JSON.stringify(t))));return[n].concat([\"/*# \".concat(\"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(r),\" */\")]).join(\"\\n\")}return[n].join(\"\\n\")}},\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\":function(e){\"use strict\";var n=[];function t(e){for(var t=-1,r=0;r<n.length;r++)if(n[r].identifier===e){t=r;break}return t}function r(e,r){for(var o={},a=[],i=0;i<e.length;i++){var l=e[i],s=r.base?l[0]+r.base:l[0],c=o[s]||0,u=\"\".concat(s,\" \").concat(c);o[s]=c+1;var d=t(u),f={css:l[1],media:l[2],sourceMap:l[3],supports:l[4],layer:l[5]};if(-1!==d)n[d].references++,n[d].updater(f);else{var p=function(e,n){var t=n.domAPI(n);return t.update(e),function(n){n?(n.css!==e.css||n.media!==e.media||n.sourceMap!==e.sourceMap||n.supports!==e.supports||n.layer!==e.layer)&&t.update(e=n):t.remove()}}(f,r);r.byIndex=i,n.splice(i,0,{identifier:u,updater:p,references:1})}a.push(u)}return a}e.exports=function(e,o){var a=r(e=e||[],o=o||{});return function(e){e=e||[];for(var i=0;i<a.length;i++){var l=t(a[i]);n[l].references--}for(var s=r(e,o),c=0;c<a.length;c++){var u=t(a[c]);0===n[u].references&&(n[u].updater(),n.splice(u,1))}a=s}}},\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/insertStyleElement.js\":function(e){\"use strict\";e.exports=function(e){var n=document.createElement(\"style\");return e.setAttributes(n,e.attributes),e.insert(n,e.options),n}},\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\":function(e,n,t){\"use strict\";e.exports=function(e){var n=t.nc;n&&e.setAttribute(\"nonce\",n)}},\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/styleDomAPI.js\":function(e){\"use strict\";e.exports=function(e){if(\"undefined\"==typeof document)return{update:function(){},remove:function(){}};var n=e.insertStyleElement(e);return{update:function(t){var r,o,a;r=\"\",t.supports&&(r+=\"@supports (\".concat(t.supports,\") {\")),t.media&&(r+=\"@media \".concat(t.media,\" {\")),(o=void 0!==t.layer)&&(r+=\"@layer\".concat(t.layer.length>0?\" \".concat(t.layer):\"\",\" {\")),r+=t.css,o&&(r+=\"}\"),t.media&&(r+=\"}\"),t.supports&&(r+=\"}\"),(a=t.sourceMap)&&\"undefined\"!=typeof btoa&&(r+=\"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(a)))),\" */\")),e.styleTagTransform(r,n,e.options)},remove:function(){!function(e){if(null!==e.parentNode)e.parentNode.removeChild(e)}(n)}}}},\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/styleTagTransform.js\":function(e){\"use strict\";e.exports=function(e,n){if(n.styleSheet)n.styleSheet.cssText=e;else{for(;n.firstChild;)n.removeChild(n.firstChild);n.appendChild(document.createTextNode(e))}}},\"./dist/compiled/anser/index.js\":function(e){(()=>{\"use strict\";var n={211:e=>{var n=function(){function e(e,n){for(var t=0;t<n.length;t++){var r=n[t];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(n,t,r){return t&&e(n.prototype,t),r&&e(n,r),n}}(),t=[[{color:\"0, 0, 0\",class:\"ansi-black\"},{color:\"187, 0, 0\",class:\"ansi-red\"},{color:\"0, 187, 0\",class:\"ansi-green\"},{color:\"187, 187, 0\",class:\"ansi-yellow\"},{color:\"0, 0, 187\",class:\"ansi-blue\"},{color:\"187, 0, 187\",class:\"ansi-magenta\"},{color:\"0, 187, 187\",class:\"ansi-cyan\"},{color:\"255,255,255\",class:\"ansi-white\"}],[{color:\"85, 85, 85\",class:\"ansi-bright-black\"},{color:\"255, 85, 85\",class:\"ansi-bright-red\"},{color:\"0, 255, 0\",class:\"ansi-bright-green\"},{color:\"255, 255, 85\",class:\"ansi-bright-yellow\"},{color:\"85, 85, 255\",class:\"ansi-bright-blue\"},{color:\"255, 85, 255\",class:\"ansi-bright-magenta\"},{color:\"85, 255, 255\",class:\"ansi-bright-cyan\"},{color:\"255, 255, 255\",class:\"ansi-bright-white\"}]];e.exports=function(){function e(){if(!(this instanceof e))throw TypeError(\"Cannot call a class as a function\");this.fg=this.bg=this.fg_truecolor=this.bg_truecolor=null,this.bright=0}return n(e,null,[{key:\"escapeForHtml\",value:function(n){return(new e).escapeForHtml(n)}},{key:\"linkify\",value:function(n){return(new e).linkify(n)}},{key:\"ansiToHtml\",value:function(n,t){return(new e).ansiToHtml(n,t)}},{key:\"ansiToJson\",value:function(n,t){return(new e).ansiToJson(n,t)}},{key:\"ansiToText\",value:function(n){return(new e).ansiToText(n)}}]),n(e,[{key:\"setupPalette\",value:function(){this.PALETTE_COLORS=[];for(var e=0;e<2;++e)for(var n=0;n<8;++n)this.PALETTE_COLORS.push(t[e][n].color);for(var r=[0,95,135,175,215,255],o=function(e,n,t){return r[e]+\", \"+r[n]+\", \"+r[t]},a=0;a<6;++a)for(var i=0;i<6;++i)for(var l=0;l<6;++l)this.PALETTE_COLORS.push(o(a,i,l));for(var s=8,c=0;c<24;++c,s+=10)this.PALETTE_COLORS.push(o(s,s,s))}},{key:\"escapeForHtml\",value:function(e){return e.replace(/[&<>]/gm,function(e){return\"&\"==e?\"&\":\"<\"==e?\"<\":\">\"==e?\">\":\"\"})}},{key:\"linkify\",value:function(e){return e.replace(/(https?:\\/\\/[^\\s]+)/gm,function(e){return'<a href=\"'+e+'\">'+e+\"</a>\"})}},{key:\"ansiToHtml\",value:function(e,n){return this.process(e,n,!0)}},{key:\"ansiToJson\",value:function(e,n){return(n=n||{}).json=!0,n.clearLine=!1,this.process(e,n,!0)}},{key:\"ansiToText\",value:function(e){return this.process(e,{},!1)}},{key:\"process\",value:function(e,n,t){var r=this,o=e.split(/\\033\\[/),a=o.shift();null==n&&(n={}),n.clearLine=/\\r/.test(e);var i=o.map(function(e){return r.processChunk(e,n,t)});if(n&&n.json){var l=this.processChunkJson(\"\");return l.content=a,l.clearLine=n.clearLine,i.unshift(l),n.remove_empty&&(i=i.filter(function(e){return!e.isEmpty()})),i}return i.unshift(a),i.join(\"\")}},{key:\"processChunkJson\",value:function(e,n,r){var o=(n=void 0===n?{}:n).use_classes=void 0!==n.use_classes&&n.use_classes,a=n.key=o?\"class\":\"color\",i={content:e,fg:null,bg:null,fg_truecolor:null,bg_truecolor:null,clearLine:n.clearLine,decoration:null,was_processed:!1,isEmpty:function(){return!i.content}},l=e.match(/^([!\\x3c-\\x3f]*)([\\d;]*)([\\x20-\\x2c]*[\\x40-\\x7e])([\\s\\S]*)/m);if(!l)return i;i.content=l[4];var s=l[2].split(\";\");if(\"\"!==l[1]||\"m\"!==l[3]||!r)return i;for(this.decoration=null;s.length>0;){var c=parseInt(s.shift());if(isNaN(c)||0===c)this.fg=this.bg=this.decoration=null;else if(1===c)this.decoration=\"bold\";else if(2===c)this.decoration=\"dim\";else if(3==c)this.decoration=\"italic\";else if(4==c)this.decoration=\"underline\";else if(5==c)this.decoration=\"blink\";else if(7===c)this.decoration=\"reverse\";else if(8===c)this.decoration=\"hidden\";else if(9===c)this.decoration=\"strikethrough\";else if(39==c)this.fg=null;else if(49==c)this.bg=null;else if(c>=30&&c<38)this.fg=t[0][c%10][a];else if(c>=90&&c<98)this.fg=t[1][c%10][a];else if(c>=40&&c<48)this.bg=t[0][c%10][a];else if(c>=100&&c<108)this.bg=t[1][c%10][a];else if(38===c||48===c){var u=38===c;if(s.length>=1){var d=s.shift();if(\"5\"===d&&s.length>=1){var f=parseInt(s.shift());if(f>=0&&f<=255)if(o){var p=f>=16?\"ansi-palette-\"+f:t[+(f>7)][f%8].class;u?this.fg=p:this.bg=p}else this.PALETTE_COLORS||this.setupPalette(),u?this.fg=this.PALETTE_COLORS[f]:this.bg=this.PALETTE_COLORS[f]}else if(\"2\"===d&&s.length>=3){var h=parseInt(s.shift()),g=parseInt(s.shift()),m=parseInt(s.shift());if(h>=0&&h<=255&&g>=0&&g<=255&&m>=0&&m<=255){var v=h+\", \"+g+\", \"+m;o?u?(this.fg=\"ansi-truecolor\",this.fg_truecolor=v):(this.bg=\"ansi-truecolor\",this.bg_truecolor=v):u?this.fg=v:this.bg=v}}}}}return null===this.fg&&null===this.bg&&null===this.decoration||(i.fg=this.fg,i.bg=this.bg,i.fg_truecolor=this.fg_truecolor,i.bg_truecolor=this.bg_truecolor,i.decoration=this.decoration,i.was_processed=!0),i}},{key:\"processChunk\",value:function(e,n,t){var r=this;n=n||{};var o=this.processChunkJson(e,n,t);if(n.json)return o;if(o.isEmpty())return\"\";if(!o.was_processed)return o.content;var a=n.use_classes,i=[],l=[],s={},c=function(e){var n=[],t=void 0;for(t in e)e.hasOwnProperty(t)&&n.push(\"data-\"+t+'=\"'+r.escapeForHtml(e[t])+'\"');return n.length>0?\" \"+n.join(\" \"):\"\"};return(o.fg&&(a?(l.push(o.fg+\"-fg\"),null!==o.fg_truecolor&&(s[\"ansi-truecolor-fg\"]=o.fg_truecolor,o.fg_truecolor=null)):i.push(\"color:rgb(\"+o.fg+\")\")),o.bg&&(a?(l.push(o.bg+\"-bg\"),null!==o.bg_truecolor&&(s[\"ansi-truecolor-bg\"]=o.bg_truecolor,o.bg_truecolor=null)):i.push(\"background-color:rgb(\"+o.bg+\")\")),o.decoration&&(a?l.push(\"ansi-\"+o.decoration):\"bold\"===o.decoration?i.push(\"font-weight:bold\"):\"dim\"===o.decoration?i.push(\"opacity:0.5\"):\"italic\"===o.decoration?i.push(\"font-style:italic\"):\"reverse\"===o.decoration?i.push(\"filter:invert(100%)\"):\"hidden\"===o.decoration?i.push(\"visibility:hidden\"):\"strikethrough\"===o.decoration?i.push(\"text-decoration:line-through\"):i.push(\"text-decoration:\"+o.decoration)),a)?'<span class=\"'+l.join(\" \")+'\"'+c(s)+\">\"+o.content+\"</span>\":'<span style=\"'+i.join(\";\")+'\"'+c(s)+\">\"+o.content+\"</span>\"}}]),e}()}},t={};function r(e){var o=t[e];if(void 0!==o)return o.exports;var a=t[e]={exports:{}},i=!0;try{n[e](a,a.exports,r),i=!1}finally{i&&delete t[e]}return a.exports}r.ab=\"//\",e.exports=r(211)})()},\"./dist/compiled/react-dom/cjs/react-dom-client.production.js\":function(e,n,t){\"use strict\";var r,o=t(\"./dist/compiled/scheduler/index.js\"),a=t(\"./dist/compiled/react/index.js\"),i=t(\"./dist/compiled/react-dom/index.js\");function l(e){var n=\"https://react.dev/errors/\"+e;if(1<arguments.length){n+=\"?args[]=\"+encodeURIComponent(arguments[1]);for(var t=2;t<arguments.length;t++)n+=\"&args[]=\"+encodeURIComponent(arguments[t])}return\"Minified React error #\"+e+\"; visit \"+n+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}function s(e){var n=e,t=e;if(e.alternate)for(;n.return;)n=n.return;else{e=n;do 0!=(4098&(n=e).flags)&&(t=n.return),e=n.return;while(e)}return 3===n.tag?t:null}function c(e){if(13===e.tag){var n=e.memoizedState;if(null===n&&null!==(e=e.alternate)&&(n=e.memoizedState),null!==n)return n.dehydrated}return null}function u(e){if(31===e.tag){var n=e.memoizedState;if(null===n&&null!==(e=e.alternate)&&(n=e.memoizedState),null!==n)return n.dehydrated}return null}function d(e){if(s(e)!==e)throw Error(l(188))}var f=Object.assign,p=Symbol.for(\"react.element\"),h=Symbol.for(\"react.transitional.element\"),g=Symbol.for(\"react.portal\"),m=Symbol.for(\"react.fragment\"),v=Symbol.for(\"react.strict_mode\"),b=Symbol.for(\"react.profiler\"),y=Symbol.for(\"react.consumer\"),x=Symbol.for(\"react.context\"),w=Symbol.for(\"react.forward_ref\"),j=Symbol.for(\"react.suspense\"),k=Symbol.for(\"react.suspense_list\"),A=Symbol.for(\"react.memo\"),O=Symbol.for(\"react.lazy\");Symbol.for(\"react.scope\");var C=Symbol.for(\"react.activity\");Symbol.for(\"react.legacy_hidden\"),Symbol.for(\"react.tracing_marker\");var S=Symbol.for(\"react.memo_cache_sentinel\");Symbol.for(\"react.view_transition\");var E=Symbol.iterator;function _(e){return null===e||\"object\"!=typeof e?null:\"function\"==typeof(e=E&&e[E]||e[\"@@iterator\"])?e:null}var P=Symbol.for(\"react.client.reference\"),z=Array.isArray,L=a.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,T=i.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,R={pending:!1,data:null,method:null,action:null},N=[],D=-1;function B(e){return{current:e}}function M(e){0>D||(e.current=N[D],N[D]=null,D--)}function I(e,n){N[++D]=e.current,e.current=n}var H=B(null),F=B(null),U=B(null),V=B(null);function q(e,n){switch(I(U,n),I(F,e),I(H,null),n.nodeType){case 9:case 11:e=(e=n.documentElement)&&(e=e.namespaceURI)?cp(e):0;break;default:if(e=n.tagName,n=n.namespaceURI)e=ch(n=cp(n),e);else switch(e){case\"svg\":e=1;break;case\"math\":e=2;break;default:e=0}}M(H),I(H,e)}function W(){M(H),M(F),M(U)}function $(e){null!==e.memoizedState&&I(V,e);var n=H.current,t=ch(n,e.type);n!==t&&(I(F,e),I(H,t))}function Z(e){F.current===e&&(M(H),M(F)),V.current===e&&(M(V),c6._currentValue=R)}function Y(e){if(void 0===nD)try{throw Error()}catch(e){var n=e.stack.trim().match(/\\n( *(at )?)/);nD=n&&n[1]||\"\",nB=-1<e.stack.indexOf(\"\\n at\")?\" (<anonymous>)\":-1<e.stack.indexOf(\"@\")?\"@unknown:0:0\":\"\"}return\"\\n\"+nD+e+nB}var X=!1;function K(e,n){if(!e||X)return\"\";X=!0;var t=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var r={DetermineComponentFrameRoot:function(){try{if(n){var t=function(){throw Error()};if(Object.defineProperty(t.prototype,\"props\",{set:function(){throw Error()}}),\"object\"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(e){var r=e}Reflect.construct(e,[],t)}else{try{t.call()}catch(e){r=e}e.call(t.prototype)}}else{try{throw Error()}catch(e){r=e}(t=e())&&\"function\"==typeof t.catch&&t.catch(function(){})}}catch(e){if(e&&r&&\"string\"==typeof e.stack)return[e.stack,r.stack]}return[null,null]}};r.DetermineComponentFrameRoot.displayName=\"DetermineComponentFrameRoot\";var o=Object.getOwnPropertyDescriptor(r.DetermineComponentFrameRoot,\"name\");o&&o.configurable&&Object.defineProperty(r.DetermineComponentFrameRoot,\"name\",{value:\"DetermineComponentFrameRoot\"});var a=r.DetermineComponentFrameRoot(),i=a[0],l=a[1];if(i&&l){var s=i.split(\"\\n\"),c=l.split(\"\\n\");for(o=r=0;r<s.length&&!s[r].includes(\"DetermineComponentFrameRoot\");)r++;for(;o<c.length&&!c[o].includes(\"DetermineComponentFrameRoot\");)o++;if(r===s.length||o===c.length)for(r=s.length-1,o=c.length-1;1<=r&&0<=o&&s[r]!==c[o];)o--;for(;1<=r&&0<=o;r--,o--)if(s[r]!==c[o]){if(1!==r||1!==o)do if(r--,o--,0>o||s[r]!==c[o]){var u=\"\\n\"+s[r].replace(\" at new \",\" at \");return e.displayName&&u.includes(\"<anonymous>\")&&(u=u.replace(\"<anonymous>\",e.displayName)),u}while(1<=r&&0<=o);break}}}finally{X=!1,Error.prepareStackTrace=t}return(t=e?e.displayName||e.name:\"\")?Y(t):\"\"}function Q(e){try{var n=\"\",t=null;do n+=function(e,n){switch(e.tag){case 26:case 27:case 5:return Y(e.type);case 16:return Y(\"Lazy\");case 13:return e.child!==n&&null!==n?Y(\"Suspense Fallback\"):Y(\"Suspense\");case 19:return Y(\"SuspenseList\");case 0:case 15:return K(e.type,!1);case 11:return K(e.type.render,!1);case 1:return K(e.type,!0);case 31:return Y(\"Activity\");default:return\"\"}}(e,t),t=e,e=e.return;while(e);return n}catch(e){return\"\\nError generating stack: \"+e.message+\"\\n\"+e.stack}}var G=Object.prototype.hasOwnProperty,J=o.unstable_scheduleCallback,ee=o.unstable_cancelCallback,en=o.unstable_shouldYield,et=o.unstable_requestPaint,er=o.unstable_now,eo=o.unstable_getCurrentPriorityLevel,ea=o.unstable_ImmediatePriority,ei=o.unstable_UserBlockingPriority,el=o.unstable_NormalPriority,es=o.unstable_LowPriority,ec=o.unstable_IdlePriority,eu=o.log,ed=o.unstable_setDisableYieldValue,ef=null,ep=null;function eh(e){if(\"function\"==typeof eu&&ed(e),ep&&\"function\"==typeof ep.setStrictMode)try{ep.setStrictMode(ef,e)}catch(e){}}var eg=Math.clz32?Math.clz32:function(e){return 0==(e>>>=0)?32:31-(em(e)/ev|0)|0},em=Math.log,ev=Math.LN2,eb=256,ey=4194304;function ex(e){var n=42&e;if(0!==n)return n;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194048&e;case 4194304:case 8388608:case 0x1000000:case 0x2000000:return 0x3c00000&e;case 0x4000000:return 0x4000000;case 0x8000000:return 0x8000000;case 0x10000000:return 0x10000000;case 0x20000000:return 0x20000000;case 0x40000000:return 0;default:return e}}function ew(e,n,t){var r=e.pendingLanes;if(0===r)return 0;var o=0,a=e.suspendedLanes,i=e.pingedLanes;e=e.warmLanes;var l=0x7ffffff&r;return 0!==l?0!=(r=l&~a)?o=ex(r):0!=(i&=l)?o=ex(i):t||0!=(t=l&~e)&&(o=ex(t)):0!=(l=r&~a)?o=ex(l):0!==i?o=ex(i):t||0!=(t=r&~e)&&(o=ex(t)),0===o?0:0!==n&&n!==o&&0==(n&a)&&((a=o&-o)>=(t=n&-n)||32===a&&0!=(4194048&t))?n:o}function ej(e,n){return 0==(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&n)}function ek(){var e=eb;return 0==(4194048&(eb<<=1))&&(eb=256),e}function eA(){var e=ey;return 0==(0x3c00000&(ey<<=1))&&(ey=4194304),e}function eO(e){for(var n=[],t=0;31>t;t++)n.push(e);return n}function eC(e,n){e.pendingLanes|=n,0x10000000!==n&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function eS(e,n,t){e.pendingLanes|=n,e.suspendedLanes&=~n;var r=31-eg(n);e.entangledLanes|=n,e.entanglements[r]=0x40000000|e.entanglements[r]|4194090&t}function eE(e,n){var t=e.entangledLanes|=n;for(e=e.entanglements;t;){var r=31-eg(t),o=1<<r;o&n|e[r]&n&&(e[r]|=n),t&=~o}}function e_(e,n){var t=n&-n;return 0!=((t=0!=(42&t)?1:eP(t))&(e.suspendedLanes|n))?0:t}function eP(e){switch(e){case 2:e=1;break;case 8:e=4;break;case 32:e=16;break;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 0x1000000:case 0x2000000:e=128;break;case 0x10000000:e=0x8000000;break;default:e=0}return e}function ez(e){return 2<(e&=-e)?8<e?0!=(0x7ffffff&e)?32:0x10000000:8:2}function eL(){var e=T.p;return 0!==e?e:void 0===(e=window.event)?32:uu(e.type)}function eT(e,n){var t=T.p;try{return T.p=e,n()}finally{T.p=t}}var eR=Math.random().toString(36).slice(2),eN=\"__reactFiber$\"+eR,eD=\"__reactProps$\"+eR,eB=\"__reactContainer$\"+eR,eM=\"__reactEvents$\"+eR,eI=\"__reactListeners$\"+eR,eH=\"__reactHandles$\"+eR,eF=\"__reactResources$\"+eR,eU=\"__reactMarker$\"+eR;function eV(e){delete e[eN],delete e[eD],delete e[eM],delete e[eI],delete e[eH]}function eq(e){var n=e[eN];if(n)return n;for(var t=e.parentNode;t;){if(n=t[eB]||t[eN]){if(t=n.alternate,null!==n.child||null!==t&&null!==t.child)for(e=cL(e);null!==e;){if(t=e[eN])return t;e=cL(e)}return n}t=(e=t).parentNode}return null}function eW(e){if(e=e[eN]||e[eB]){var n=e.tag;if(5===n||6===n||13===n||31===n||26===n||27===n||3===n)return e}return null}function e$(e){var n=e.tag;if(5===n||26===n||27===n||6===n)return e.stateNode;throw Error(l(33))}function eZ(e){var n=e[eF];return n||(n=e[eF]={hoistableStyles:new Map,hoistableScripts:new Map}),n}function eY(e){e[eU]=!0}var eX=new Set,eK={};function eQ(e,n){eG(e,n),eG(e+\"Capture\",n)}function eG(e,n){for(eK[e]=n,e=0;e<n.length;e++)eX.add(n[e])}var eJ=RegExp(\"^[:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD][:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"),e0={},e1={};function e2(e,n,t){if(G.call(e1,n)||!G.call(e0,n)&&(eJ.test(n)?e1[n]=!0:(e0[n]=!0,!1)))if(null===t)e.removeAttribute(n);else{switch(typeof t){case\"undefined\":case\"function\":case\"symbol\":e.removeAttribute(n);return;case\"boolean\":var r=n.toLowerCase().slice(0,5);if(\"data-\"!==r&&\"aria-\"!==r)return void e.removeAttribute(n)}e.setAttribute(n,\"\"+t)}}function e4(e,n,t){if(null===t)e.removeAttribute(n);else{switch(typeof t){case\"undefined\":case\"function\":case\"symbol\":case\"boolean\":e.removeAttribute(n);return}e.setAttribute(n,\"\"+t)}}function e5(e,n,t,r){if(null===r)e.removeAttribute(t);else{switch(typeof r){case\"undefined\":case\"function\":case\"symbol\":case\"boolean\":e.removeAttribute(t);return}e.setAttributeNS(n,t,\"\"+r)}}function e3(e){switch(typeof e){case\"bigint\":case\"boolean\":case\"number\":case\"string\":case\"undefined\":case\"object\":return e;default:return\"\"}}function e6(e){var n=e.type;return(e=e.nodeName)&&\"input\"===e.toLowerCase()&&(\"checkbox\"===n||\"radio\"===n)}function e9(e){if(!e._valueTracker){var n=e6(e)?\"checked\":\"value\";e._valueTracker=function(e,n,t){var r=Object.getOwnPropertyDescriptor(e.constructor.prototype,n);if(!e.hasOwnProperty(n)&&void 0!==r&&\"function\"==typeof r.get&&\"function\"==typeof r.set){var o=r.get,a=r.set;return Object.defineProperty(e,n,{configurable:!0,get:function(){return o.call(this)},set:function(e){t=\"\"+e,a.call(this,e)}}),Object.defineProperty(e,n,{enumerable:r.enumerable}),{getValue:function(){return t},setValue:function(e){t=\"\"+e},stopTracking:function(){e._valueTracker=null,delete e[n]}}}}(e,n,\"\"+e[n])}}function e8(e){if(!e)return!1;var n=e._valueTracker;if(!n)return!0;var t=n.getValue(),r=\"\";return e&&(r=e6(e)?e.checked?\"true\":\"false\":e.value),(e=r)!==t&&(n.setValue(e),!0)}function e7(e){if(void 0===(e=e||(\"undefined\"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(n){return e.body}}var ne=/[\\n\"\\\\]/g;function nn(e){return e.replace(ne,function(e){return\"\\\\\"+e.charCodeAt(0).toString(16)+\" \"})}function nt(e,n,t,r,o,a,i,l){e.name=\"\",null!=i&&\"function\"!=typeof i&&\"symbol\"!=typeof i&&\"boolean\"!=typeof i?e.type=i:e.removeAttribute(\"type\"),null!=n?\"number\"===i?(0===n&&\"\"===e.value||e.value!=n)&&(e.value=\"\"+e3(n)):e.value!==\"\"+e3(n)&&(e.value=\"\"+e3(n)):\"submit\"!==i&&\"reset\"!==i||e.removeAttribute(\"value\"),null!=n?no(e,i,e3(n)):null!=t?no(e,i,e3(t)):null!=r&&e.removeAttribute(\"value\"),null==o&&null!=a&&(e.defaultChecked=!!a),null!=o&&(e.checked=o&&\"function\"!=typeof o&&\"symbol\"!=typeof o),null!=l&&\"function\"!=typeof l&&\"symbol\"!=typeof l&&\"boolean\"!=typeof l?e.name=\"\"+e3(l):e.removeAttribute(\"name\")}function nr(e,n,t,r,o,a,i,l){if(null!=a&&\"function\"!=typeof a&&\"symbol\"!=typeof a&&\"boolean\"!=typeof a&&(e.type=a),null!=n||null!=t){if((\"submit\"===a||\"reset\"===a)&&null==n)return void e9(e);t=null!=t?\"\"+e3(t):\"\",n=null!=n?\"\"+e3(n):t,l||n===e.value||(e.value=n),e.defaultValue=n}r=\"function\"!=typeof(r=null!=r?r:o)&&\"symbol\"!=typeof r&&!!r,e.checked=l?e.checked:!!r,e.defaultChecked=!!r,null!=i&&\"function\"!=typeof i&&\"symbol\"!=typeof i&&\"boolean\"!=typeof i&&(e.name=i),e9(e)}function no(e,n,t){\"number\"===n&&e7(e.ownerDocument)===e||e.defaultValue===\"\"+t||(e.defaultValue=\"\"+t)}function na(e,n,t,r){if(e=e.options,n){n={};for(var o=0;o<t.length;o++)n[\"$\"+t[o]]=!0;for(t=0;t<e.length;t++)o=n.hasOwnProperty(\"$\"+e[t].value),e[t].selected!==o&&(e[t].selected=o),o&&r&&(e[t].defaultSelected=!0)}else{for(o=0,t=\"\"+e3(t),n=null;o<e.length;o++){if(e[o].value===t){e[o].selected=!0,r&&(e[o].defaultSelected=!0);return}null!==n||e[o].disabled||(n=e[o])}null!==n&&(n.selected=!0)}}function ni(e,n,t){if(null!=n&&((n=\"\"+e3(n))!==e.value&&(e.value=n),null==t)){e.defaultValue!==n&&(e.defaultValue=n);return}e.defaultValue=null!=t?\"\"+e3(t):\"\"}function nl(e,n,t,r){if(null==n){if(null!=r){if(null!=t)throw Error(l(92));if(z(r)){if(1<r.length)throw Error(l(93));r=r[0]}t=r}null==t&&(t=\"\"),n=t}e.defaultValue=t=e3(n),(r=e.textContent)===t&&\"\"!==r&&null!==r&&(e.value=r),e9(e)}function ns(e,n){if(n){var t=e.firstChild;if(t&&t===e.lastChild&&3===t.nodeType){t.nodeValue=n;return}}e.textContent=n}var nc=new Set(\"animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp\".split(\" \"));function nu(e,n,t){var r=0===n.indexOf(\"--\");null==t||\"boolean\"==typeof t||\"\"===t?r?e.setProperty(n,\"\"):\"float\"===n?e.cssFloat=\"\":e[n]=\"\":r?e.setProperty(n,t):\"number\"!=typeof t||0===t||nc.has(n)?\"float\"===n?e.cssFloat=t:e[n]=(\"\"+t).trim():e[n]=t+\"px\"}function nd(e,n,t){if(null!=n&&\"object\"!=typeof n)throw Error(l(62));if(e=e.style,null!=t){for(var r in t)!t.hasOwnProperty(r)||null!=n&&n.hasOwnProperty(r)||(0===r.indexOf(\"--\")?e.setProperty(r,\"\"):\"float\"===r?e.cssFloat=\"\":e[r]=\"\");for(var o in n)r=n[o],n.hasOwnProperty(o)&&t[o]!==r&&nu(e,o,r)}else for(var a in n)n.hasOwnProperty(a)&&nu(e,a,n[a])}function nf(e){if(-1===e.indexOf(\"-\"))return!1;switch(e){case\"annotation-xml\":case\"color-profile\":case\"font-face\":case\"font-face-src\":case\"font-face-uri\":case\"font-face-format\":case\"font-face-name\":case\"missing-glyph\":return!1;default:return!0}}var np=new Map([[\"acceptCharset\",\"accept-charset\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"],[\"crossOrigin\",\"crossorigin\"],[\"accentHeight\",\"accent-height\"],[\"alignmentBaseline\",\"alignment-baseline\"],[\"arabicForm\",\"arabic-form\"],[\"baselineShift\",\"baseline-shift\"],[\"capHeight\",\"cap-height\"],[\"clipPath\",\"clip-path\"],[\"clipRule\",\"clip-rule\"],[\"colorInterpolation\",\"color-interpolation\"],[\"colorInterpolationFilters\",\"color-interpolation-filters\"],[\"colorProfile\",\"color-profile\"],[\"colorRendering\",\"color-rendering\"],[\"dominantBaseline\",\"dominant-baseline\"],[\"enableBackground\",\"enable-background\"],[\"fillOpacity\",\"fill-opacity\"],[\"fillRule\",\"fill-rule\"],[\"floodColor\",\"flood-color\"],[\"floodOpacity\",\"flood-opacity\"],[\"fontFamily\",\"font-family\"],[\"fontSize\",\"font-size\"],[\"fontSizeAdjust\",\"font-size-adjust\"],[\"fontStretch\",\"font-stretch\"],[\"fontStyle\",\"font-style\"],[\"fontVariant\",\"font-variant\"],[\"fontWeight\",\"font-weight\"],[\"glyphName\",\"glyph-name\"],[\"glyphOrientationHorizontal\",\"glyph-orientation-horizontal\"],[\"glyphOrientationVertical\",\"glyph-orientation-vertical\"],[\"horizAdvX\",\"horiz-adv-x\"],[\"horizOriginX\",\"horiz-origin-x\"],[\"imageRendering\",\"image-rendering\"],[\"letterSpacing\",\"letter-spacing\"],[\"lightingColor\",\"lighting-color\"],[\"markerEnd\",\"marker-end\"],[\"markerMid\",\"marker-mid\"],[\"markerStart\",\"marker-start\"],[\"overlinePosition\",\"overline-position\"],[\"overlineThickness\",\"overline-thickness\"],[\"paintOrder\",\"paint-order\"],[\"panose-1\",\"panose-1\"],[\"pointerEvents\",\"pointer-events\"],[\"renderingIntent\",\"rendering-intent\"],[\"shapeRendering\",\"shape-rendering\"],[\"stopColor\",\"stop-color\"],[\"stopOpacity\",\"stop-opacity\"],[\"strikethroughPosition\",\"strikethrough-position\"],[\"strikethroughThickness\",\"strikethrough-thickness\"],[\"strokeDasharray\",\"stroke-dasharray\"],[\"strokeDashoffset\",\"stroke-dashoffset\"],[\"strokeLinecap\",\"stroke-linecap\"],[\"strokeLinejoin\",\"stroke-linejoin\"],[\"strokeMiterlimit\",\"stroke-miterlimit\"],[\"strokeOpacity\",\"stroke-opacity\"],[\"strokeWidth\",\"stroke-width\"],[\"textAnchor\",\"text-anchor\"],[\"textDecoration\",\"text-decoration\"],[\"textRendering\",\"text-rendering\"],[\"transformOrigin\",\"transform-origin\"],[\"underlinePosition\",\"underline-position\"],[\"underlineThickness\",\"underline-thickness\"],[\"unicodeBidi\",\"unicode-bidi\"],[\"unicodeRange\",\"unicode-range\"],[\"unitsPerEm\",\"units-per-em\"],[\"vAlphabetic\",\"v-alphabetic\"],[\"vHanging\",\"v-hanging\"],[\"vIdeographic\",\"v-ideographic\"],[\"vMathematical\",\"v-mathematical\"],[\"vectorEffect\",\"vector-effect\"],[\"vertAdvY\",\"vert-adv-y\"],[\"vertOriginX\",\"vert-origin-x\"],[\"vertOriginY\",\"vert-origin-y\"],[\"wordSpacing\",\"word-spacing\"],[\"writingMode\",\"writing-mode\"],[\"xmlnsXlink\",\"xmlns:xlink\"],[\"xHeight\",\"x-height\"]]),nh=/^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*:/i;function ng(e){return nh.test(\"\"+e)?\"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')\":e}function nm(){}var nv=null;function nb(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var ny=null,nx=null;function nw(e){var n=eW(e);if(n&&(e=n.stateNode)){var t=e[eD]||null;switch(e=n.stateNode,n.type){case\"input\":if(nt(e,t.value,t.defaultValue,t.defaultValue,t.checked,t.defaultChecked,t.type,t.name),n=t.name,\"radio\"===t.type&&null!=n){for(t=e;t.parentNode;)t=t.parentNode;for(t=t.querySelectorAll('input[name=\"'+nn(\"\"+n)+'\"][type=\"radio\"]'),n=0;n<t.length;n++){var r=t[n];if(r!==e&&r.form===e.form){var o=r[eD]||null;if(!o)throw Error(l(90));nt(r,o.value,o.defaultValue,o.defaultValue,o.checked,o.defaultChecked,o.type,o.name)}}for(n=0;n<t.length;n++)(r=t[n]).form===e.form&&e8(r)}break;case\"textarea\":ni(e,t.value,t.defaultValue);break;case\"select\":null!=(n=t.value)&&na(e,!!t.multiple,n,!1)}}}var nj=!1;function nk(e,n,t){if(nj)return e(n,t);nj=!0;try{return e(n)}finally{if(nj=!1,(null!==ny||null!==nx)&&(ss(),ny&&(n=ny,e=nx,nx=ny=null,nw(n),e)))for(n=0;n<e.length;n++)nw(e[n])}}function nA(e,n){var t=e.stateNode;if(null===t)return null;var r=t[eD]||null;if(null===r)return null;switch(t=r[n],n){case\"onClick\":case\"onClickCapture\":case\"onDoubleClick\":case\"onDoubleClickCapture\":case\"onMouseDown\":case\"onMouseDownCapture\":case\"onMouseMove\":case\"onMouseMoveCapture\":case\"onMouseUp\":case\"onMouseUpCapture\":case\"onMouseEnter\":(r=!r.disabled)||(r=\"button\"!==(e=e.type)&&\"input\"!==e&&\"select\"!==e&&\"textarea\"!==e),e=!r;break;default:e=!1}if(e)return null;if(t&&\"function\"!=typeof t)throw Error(l(231,n,typeof t));return t}var nO=\"undefined\"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement,nC=!1;if(nO)try{var nS={};Object.defineProperty(nS,\"passive\",{get:function(){nC=!0}}),window.addEventListener(\"test\",nS,nS),window.removeEventListener(\"test\",nS,nS)}catch(e){nC=!1}var nE=null,n_=null,nP=null;function nz(){if(nP)return nP;var e,n,t=n_,r=t.length,o=\"value\"in nE?nE.value:nE.textContent,a=o.length;for(e=0;e<r&&t[e]===o[e];e++);var i=r-e;for(n=1;n<=i&&t[r-n]===o[a-n];n++);return nP=o.slice(e,1<n?1-n:void 0)}function nL(e){var n=e.keyCode;return\"charCode\"in e?0===(e=e.charCode)&&13===n&&(e=13):e=n,10===e&&(e=13),32<=e||13===e?e:0}function nT(){return!0}function nR(){return!1}function nN(e){function n(n,t,r,o,a){for(var i in this._reactName=n,this._targetInst=r,this.type=t,this.nativeEvent=o,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(i)&&(n=e[i],this[i]=n?n(o):o[i]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?nT:nR,this.isPropagationStopped=nR,this}return f(n.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():\"unknown\"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=nT)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():\"unknown\"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=nT)},persist:function(){},isPersistent:nT}),n}var nD,nB,nM,nI,nH,nF={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},nU=nN(nF),nV=f({},nF,{view:0,detail:0}),nq=nN(nV),nW=f({},nV,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:n2,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return\"movementX\"in e?e.movementX:(e!==nH&&(nH&&\"mousemove\"===e.type?(nM=e.screenX-nH.screenX,nI=e.screenY-nH.screenY):nI=nM=0,nH=e),nM)},movementY:function(e){return\"movementY\"in e?e.movementY:nI}}),n$=nN(nW),nZ=nN(f({},nW,{dataTransfer:0})),nY=nN(f({},nV,{relatedTarget:0})),nX=nN(f({},nF,{animationName:0,elapsedTime:0,pseudoElement:0})),nK=nN(f({},nF,{clipboardData:function(e){return\"clipboardData\"in e?e.clipboardData:window.clipboardData}})),nQ=nN(f({},nF,{data:0})),nG={Esc:\"Escape\",Spacebar:\" \",Left:\"ArrowLeft\",Up:\"ArrowUp\",Right:\"ArrowRight\",Down:\"ArrowDown\",Del:\"Delete\",Win:\"OS\",Menu:\"ContextMenu\",Apps:\"ContextMenu\",Scroll:\"ScrollLock\",MozPrintableKey:\"Unidentified\"},nJ={8:\"Backspace\",9:\"Tab\",12:\"Clear\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Escape\",32:\" \",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",45:\"Insert\",46:\"Delete\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"NumLock\",145:\"ScrollLock\",224:\"Meta\"},n0={Alt:\"altKey\",Control:\"ctrlKey\",Meta:\"metaKey\",Shift:\"shiftKey\"};function n1(e){var n=this.nativeEvent;return n.getModifierState?n.getModifierState(e):!!(e=n0[e])&&!!n[e]}function n2(){return n1}var n4=nN(f({},nV,{key:function(e){if(e.key){var n=nG[e.key]||e.key;if(\"Unidentified\"!==n)return n}return\"keypress\"===e.type?13===(e=nL(e))?\"Enter\":String.fromCharCode(e):\"keydown\"===e.type||\"keyup\"===e.type?nJ[e.keyCode]||\"Unidentified\":\"\"},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:n2,charCode:function(e){return\"keypress\"===e.type?nL(e):0},keyCode:function(e){return\"keydown\"===e.type||\"keyup\"===e.type?e.keyCode:0},which:function(e){return\"keypress\"===e.type?nL(e):\"keydown\"===e.type||\"keyup\"===e.type?e.keyCode:0}})),n5=nN(f({},nW,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),n3=nN(f({},nV,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:n2})),n6=nN(f({},nF,{propertyName:0,elapsedTime:0,pseudoElement:0})),n9=nN(f({},nW,{deltaX:function(e){return\"deltaX\"in e?e.deltaX:\"wheelDeltaX\"in e?-e.wheelDeltaX:0},deltaY:function(e){return\"deltaY\"in e?e.deltaY:\"wheelDeltaY\"in e?-e.wheelDeltaY:\"wheelDelta\"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0})),n8=nN(f({},nF,{newState:0,oldState:0})),n7=[9,13,27,32],te=nO&&\"CompositionEvent\"in window,tn=null;nO&&\"documentMode\"in document&&(tn=document.documentMode);var tt=nO&&\"TextEvent\"in window&&!tn,tr=nO&&(!te||tn&&8<tn&&11>=tn),to=!1;function ta(e,n){switch(e){case\"keyup\":return -1!==n7.indexOf(n.keyCode);case\"keydown\":return 229!==n.keyCode;case\"keypress\":case\"mousedown\":case\"focusout\":return!0;default:return!1}}function ti(e){return\"object\"==typeof(e=e.detail)&&\"data\"in e?e.data:null}var tl=!1,ts={color:!0,date:!0,datetime:!0,\"datetime-local\":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function tc(e){var n=e&&e.nodeName&&e.nodeName.toLowerCase();return\"input\"===n?!!ts[e.type]:\"textarea\"===n}function tu(e,n,t,r){ny?nx?nx.push(r):nx=[r]:ny=r,0<(n=ce(n,\"onChange\")).length&&(t=new nU(\"onChange\",\"change\",null,t,r),e.push({event:t,listeners:n}))}var td=null,tf=null;function tp(e){s2(e,0)}function th(e){if(e8(e$(e)))return e}function tg(e,n){if(\"change\"===e)return n}var tm=!1;if(nO){if(nO){var tv=\"oninput\"in document;if(!tv){var tb=document.createElement(\"div\");tb.setAttribute(\"oninput\",\"return;\"),tv=\"function\"==typeof tb.oninput}r=tv}else r=!1;tm=r&&(!document.documentMode||9<document.documentMode)}function ty(){td&&(td.detachEvent(\"onpropertychange\",tx),tf=td=null)}function tx(e){if(\"value\"===e.propertyName&&th(tf)){var n=[];tu(n,tf,e,nb(e)),nk(tp,n)}}function tw(e,n,t){\"focusin\"===e?(ty(),td=n,tf=t,td.attachEvent(\"onpropertychange\",tx)):\"focusout\"===e&&ty()}function tj(e){if(\"selectionchange\"===e||\"keyup\"===e||\"keydown\"===e)return th(tf)}function tk(e,n){if(\"click\"===e)return th(n)}function tA(e,n){if(\"input\"===e||\"change\"===e)return th(n)}var tO=\"function\"==typeof Object.is?Object.is:function(e,n){return e===n&&(0!==e||1/e==1/n)||e!=e&&n!=n};function tC(e,n){if(tO(e,n))return!0;if(\"object\"!=typeof e||null===e||\"object\"!=typeof n||null===n)return!1;var t=Object.keys(e),r=Object.keys(n);if(t.length!==r.length)return!1;for(r=0;r<t.length;r++){var o=t[r];if(!G.call(n,o)||!tO(e[o],n[o]))return!1}return!0}function tS(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function tE(e,n){var t,r=tS(e);for(e=0;r;){if(3===r.nodeType){if(t=e+r.textContent.length,e<=n&&t>=n)return{node:r,offset:n-e};e=t}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=tS(r)}}function t_(e){e=null!=e&&null!=e.ownerDocument&&null!=e.ownerDocument.defaultView?e.ownerDocument.defaultView:window;for(var n=e7(e.document);n instanceof e.HTMLIFrameElement;){try{var t=\"string\"==typeof n.contentWindow.location.href}catch(e){t=!1}if(t)e=n.contentWindow;else break;n=e7(e.document)}return n}function tP(e){var n=e&&e.nodeName&&e.nodeName.toLowerCase();return n&&(\"input\"===n&&(\"text\"===e.type||\"search\"===e.type||\"tel\"===e.type||\"url\"===e.type||\"password\"===e.type)||\"textarea\"===n||\"true\"===e.contentEditable)}var tz=nO&&\"documentMode\"in document&&11>=document.documentMode,tL=null,tT=null,tR=null,tN=!1;function tD(e,n,t){var r=t.window===t?t.document:9===t.nodeType?t:t.ownerDocument;tN||null==tL||tL!==e7(r)||(r=\"selectionStart\"in(r=tL)&&tP(r)?{start:r.selectionStart,end:r.selectionEnd}:{anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},tR&&tC(tR,r)||(tR=r,0<(r=ce(tT,\"onSelect\")).length&&(n=new nU(\"onSelect\",\"select\",null,n,t),e.push({event:n,listeners:r}),n.target=tL)))}function tB(e,n){var t={};return t[e.toLowerCase()]=n.toLowerCase(),t[\"Webkit\"+e]=\"webkit\"+n,t[\"Moz\"+e]=\"moz\"+n,t}var tM={animationend:tB(\"Animation\",\"AnimationEnd\"),animationiteration:tB(\"Animation\",\"AnimationIteration\"),animationstart:tB(\"Animation\",\"AnimationStart\"),transitionrun:tB(\"Transition\",\"TransitionRun\"),transitionstart:tB(\"Transition\",\"TransitionStart\"),transitioncancel:tB(\"Transition\",\"TransitionCancel\"),transitionend:tB(\"Transition\",\"TransitionEnd\")},tI={},tH={};function tF(e){if(tI[e])return tI[e];if(!tM[e])return e;var n,t=tM[e];for(n in t)if(t.hasOwnProperty(n)&&n in tH)return tI[e]=t[n];return e}nO&&(tH=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete tM.animationend.animation,delete tM.animationiteration.animation,delete tM.animationstart.animation),\"TransitionEvent\"in window||delete tM.transitionend.transition);var tU=tF(\"animationend\"),tV=tF(\"animationiteration\"),tq=tF(\"animationstart\"),tW=tF(\"transitionrun\"),t$=tF(\"transitionstart\"),tZ=tF(\"transitioncancel\"),tY=tF(\"transitionend\"),tX=new Map,tK=\"abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel\".split(\" \");function tQ(e,n){tX.set(e,n),eQ(n,[e])}tK.push(\"scrollEnd\");var tG=\"function\"==typeof reportError?reportError:function(e){if(\"object\"==typeof window&&\"function\"==typeof window.ErrorEvent){var n=new window.ErrorEvent(\"error\",{bubbles:!0,cancelable:!0,message:\"object\"==typeof e&&null!==e&&\"string\"==typeof e.message?String(e.message):String(e),error:e});if(!window.dispatchEvent(n))return}else if(\"object\"==typeof process&&\"function\"==typeof process.emit)return void process.emit(\"uncaughtException\",e);console.error(e)},tJ=[],t0=0,t1=0;function t2(){for(var e=t0,n=t1=t0=0;n<e;){var t=tJ[n];tJ[n++]=null;var r=tJ[n];tJ[n++]=null;var o=tJ[n];tJ[n++]=null;var a=tJ[n];if(tJ[n++]=null,null!==r&&null!==o){var i=r.pending;null===i?o.next=o:(o.next=i.next,i.next=o),r.pending=o}0!==a&&t6(t,o,a)}}function t4(e,n,t,r){tJ[t0++]=e,tJ[t0++]=n,tJ[t0++]=t,tJ[t0++]=r,t1|=r,e.lanes|=r,null!==(e=e.alternate)&&(e.lanes|=r)}function t5(e,n,t,r){return t4(e,n,t,r),t9(e)}function t3(e,n){return t4(e,null,null,n),t9(e)}function t6(e,n,t){e.lanes|=t;var r=e.alternate;null!==r&&(r.lanes|=t);for(var o=!1,a=e.return;null!==a;)a.childLanes|=t,null!==(r=a.alternate)&&(r.childLanes|=t),22===a.tag&&(null===(e=a.stateNode)||1&e._visibility||(o=!0)),e=a,a=a.return;return 3===e.tag?(a=e.stateNode,o&&null!==n&&(o=31-eg(t),null===(r=(e=a.hiddenUpdates)[o])?e[o]=[n]:r.push(n),n.lane=0x20000000|t),a):null}function t9(e){if(50<se)throw se=0,sn=null,Error(l(185));for(var n=e.return;null!==n;)n=(e=n).return;return 3===e.tag?e.stateNode:null}var t8={};function t7(e,n,t,r){this.tag=e,this.key=t,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.refCleanup=this.ref=null,this.pendingProps=n,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function re(e,n,t,r){return new t7(e,n,t,r)}function rn(e){return!(!(e=e.prototype)||!e.isReactComponent)}function rt(e,n){var t=e.alternate;return null===t?((t=re(e.tag,n,e.key,e.mode)).elementType=e.elementType,t.type=e.type,t.stateNode=e.stateNode,t.alternate=e,e.alternate=t):(t.pendingProps=n,t.type=e.type,t.flags=0,t.subtreeFlags=0,t.deletions=null),t.flags=0x3e00000&e.flags,t.childLanes=e.childLanes,t.lanes=e.lanes,t.child=e.child,t.memoizedProps=e.memoizedProps,t.memoizedState=e.memoizedState,t.updateQueue=e.updateQueue,n=e.dependencies,t.dependencies=null===n?null:{lanes:n.lanes,firstContext:n.firstContext},t.sibling=e.sibling,t.index=e.index,t.ref=e.ref,t.refCleanup=e.refCleanup,t}function rr(e,n){e.flags&=0x3e00002;var t=e.alternate;return null===t?(e.childLanes=0,e.lanes=n,e.child=null,e.subtreeFlags=0,e.memoizedProps=null,e.memoizedState=null,e.updateQueue=null,e.dependencies=null,e.stateNode=null):(e.childLanes=t.childLanes,e.lanes=t.lanes,e.child=t.child,e.subtreeFlags=0,e.deletions=null,e.memoizedProps=t.memoizedProps,e.memoizedState=t.memoizedState,e.updateQueue=t.updateQueue,e.type=t.type,e.dependencies=null===(n=t.dependencies)?null:{lanes:n.lanes,firstContext:n.firstContext}),e}function ro(e,n,t,r,o,a){var i=0;if(r=e,\"function\"==typeof e)rn(e)&&(i=1);else if(\"string\"==typeof e)i=!function(e,n,t){if(1===t||null!=n.itemProp)return!1;switch(e){case\"meta\":case\"title\":return!0;case\"style\":if(\"string\"!=typeof n.precedence||\"string\"!=typeof n.href||\"\"===n.href)break;return!0;case\"link\":if(\"string\"!=typeof n.rel||\"string\"!=typeof n.href||\"\"===n.href||n.onLoad||n.onError)break;if(\"stylesheet\"===n.rel)return e=n.disabled,\"string\"==typeof n.precedence&&null==e;return!0;case\"script\":if(n.async&&\"function\"!=typeof n.async&&\"symbol\"!=typeof n.async&&!n.onLoad&&!n.onError&&n.src&&\"string\"==typeof n.src)return!0}return!1}(e,t,H.current)?\"html\"===e||\"head\"===e||\"body\"===e?27:5:26;else e:switch(e){case C:return(e=re(31,t,n,o)).elementType=C,e.lanes=a,e;case m:return ra(t.children,o,a,n);case v:i=8,o|=24;break;case b:return(e=re(12,t,n,2|o)).elementType=b,e.lanes=a,e;case j:return(e=re(13,t,n,o)).elementType=j,e.lanes=a,e;case k:return(e=re(19,t,n,o)).elementType=k,e.lanes=a,e;default:if(\"object\"==typeof e&&null!==e)switch(e.$$typeof){case x:i=10;break e;case y:i=9;break e;case w:i=11;break e;case A:i=14;break e;case O:i=16,r=null;break e}i=29,t=Error(l(130,null===e?\"null\":typeof e,\"\")),r=null}return(n=re(i,t,n,o)).elementType=e,n.type=r,n.lanes=a,n}function ra(e,n,t,r){return(e=re(7,e,r,n)).lanes=t,e}function ri(e,n,t){return(e=re(6,e,null,n)).lanes=t,e}function rl(e){var n=re(18,null,null,0);return n.stateNode=e,n}function rs(e,n,t){return(n=re(4,null!==e.children?e.children:[],e.key,n)).lanes=t,n.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},n}var rc=new WeakMap;function ru(e,n){if(\"object\"==typeof e&&null!==e){var t=rc.get(e);return void 0!==t?t:(n={value:e,source:n,stack:Q(n)},rc.set(e,n),n)}return{value:e,source:n,stack:Q(n)}}var rd=[],rf=0,rp=null,rh=0,rg=[],rm=0,rv=null,rb=1,ry=\"\";function rx(e,n){rd[rf++]=rh,rd[rf++]=rp,rp=e,rh=n}function rw(e,n,t){rg[rm++]=rb,rg[rm++]=ry,rg[rm++]=rv,rv=e;var r=rb;e=ry;var o=32-eg(r)-1;r&=~(1<<o),t+=1;var a=32-eg(n)+o;if(30<a){var i=o-o%5;a=(r&(1<<i)-1).toString(32),r>>=i,o-=i,rb=1<<32-eg(n)+o|t<<o|r,ry=a+e}else rb=1<<a|t<<o|r,ry=e}function rj(e){null!==e.return&&(rx(e,1),rw(e,1,0))}function rk(e){for(;e===rp;)rp=rd[--rf],rd[rf]=null,rh=rd[--rf],rd[rf]=null;for(;e===rv;)rv=rg[--rm],rg[rm]=null,ry=rg[--rm],rg[rm]=null,rb=rg[--rm],rg[rm]=null}function rA(e,n){rg[rm++]=rb,rg[rm++]=ry,rg[rm++]=rv,rb=n.id,ry=n.overflow,rv=e}var rO=null,rC=null,rS=!1,rE=null,r_=!1,rP=Error(l(519));function rz(e){var n=Error(l(418,1<arguments.length&&void 0!==arguments[1]&&arguments[1]?\"text\":\"HTML\",\"\"));throw rB(ru(n,e)),rP}function rL(e){var n=e.stateNode,t=e.type,r=e.memoizedProps;switch(n[eN]=e,n[eD]=r,t){case\"dialog\":s4(\"cancel\",n),s4(\"close\",n);break;case\"iframe\":case\"object\":case\"embed\":s4(\"load\",n);break;case\"video\":case\"audio\":for(t=0;t<s0.length;t++)s4(s0[t],n);break;case\"source\":s4(\"error\",n);break;case\"img\":case\"image\":case\"link\":s4(\"error\",n),s4(\"load\",n);break;case\"details\":s4(\"toggle\",n);break;case\"input\":s4(\"invalid\",n),nr(n,r.value,r.defaultValue,r.checked,r.defaultChecked,r.type,r.name,!0);break;case\"select\":s4(\"invalid\",n);break;case\"textarea\":s4(\"invalid\",n),nl(n,r.value,r.defaultValue,r.children)}\"string\"!=typeof(t=r.children)&&\"number\"!=typeof t&&\"bigint\"!=typeof t||n.textContent===\"\"+t||!0===r.suppressHydrationWarning||ci(n.textContent,t)?(null!=r.popover&&(s4(\"beforetoggle\",n),s4(\"toggle\",n)),null!=r.onScroll&&s4(\"scroll\",n),null!=r.onScrollEnd&&s4(\"scrollend\",n),null!=r.onClick&&(n.onclick=nm),n=!0):n=!1,n||rz(e,!0)}function rT(e){for(rO=e.return;rO;)switch(rO.tag){case 5:case 31:case 13:r_=!1;return;case 27:case 3:r_=!0;return;default:rO=rO.return}}function rR(e){if(e!==rO)return!1;if(!rS)return rT(e),rS=!0,!1;var n,t=e.tag;if((n=3!==t&&27!==t)&&((n=5===t)&&(n=\"form\"===(n=e.type)||\"button\"===n||cg(e.type,e.memoizedProps)),n=!n),n&&rC&&rz(e),rT(e),13===t){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(l(317));rC=cz(e)}else if(31===t){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(l(317));rC=cz(e)}else 27===t?(t=rC,cj(e.type)?(e=cP,cP=null,rC=e):rC=t):rC=rO?c_(e.stateNode.nextSibling):null;return!0}function rN(){rC=rO=null,rS=!1}function rD(){var e=rE;return null!==e&&(null===lQ?lQ=e:lQ.push.apply(lQ,e),rE=null),e}function rB(e){null===rE?rE=[e]:rE.push(e)}var rM=B(null),rI=null,rH=null;function rF(e,n,t){I(rM,n._currentValue),n._currentValue=t}function rU(e){e._currentValue=rM.current,M(rM)}function rV(e,n,t){for(;null!==e;){var r=e.alternate;if((e.childLanes&n)!==n?(e.childLanes|=n,null!==r&&(r.childLanes|=n)):null!==r&&(r.childLanes&n)!==n&&(r.childLanes|=n),e===t)break;e=e.return}}function rq(e,n,t,r){var o=e.child;for(null!==o&&(o.return=e);null!==o;){var a=o.dependencies;if(null!==a){var i=o.child;a=a.firstContext;e:for(;null!==a;){var s=a;a=o;for(var c=0;c<n.length;c++)if(s.context===n[c]){a.lanes|=t,null!==(s=a.alternate)&&(s.lanes|=t),rV(a.return,t,e),r||(i=null);break e}a=s.next}}else if(18===o.tag){if(null===(i=o.return))throw Error(l(341));i.lanes|=t,null!==(a=i.alternate)&&(a.lanes|=t),rV(i,t,e),i=null}else i=o.child;if(null!==i)i.return=o;else for(i=o;null!==i;){if(i===e){i=null;break}if(null!==(o=i.sibling)){o.return=i.return,i=o;break}i=i.return}o=i}}function rW(e,n,t,r){e=null;for(var o=n,a=!1;null!==o;){if(!a){if(0!=(524288&o.flags))a=!0;else if(0!=(262144&o.flags))break}if(10===o.tag){var i=o.alternate;if(null===i)throw Error(l(387));if(null!==(i=i.memoizedProps)){var s=o.type;tO(o.pendingProps.value,i.value)||(null!==e?e.push(s):e=[s])}}else if(o===V.current){if(null===(i=o.alternate))throw Error(l(387));i.memoizedState.memoizedState!==o.memoizedState.memoizedState&&(null!==e?e.push(c6):e=[c6])}o=o.return}null!==e&&rq(n,e,t,r),n.flags|=262144}function r$(e){for(e=e.firstContext;null!==e;){if(!tO(e.context._currentValue,e.memoizedValue))return!0;e=e.next}return!1}function rZ(e){rI=e,rH=null,null!==(e=e.dependencies)&&(e.firstContext=null)}function rY(e){return rK(rI,e)}function rX(e,n){return null===rI&&rZ(e),rK(e,n)}function rK(e,n){var t=n._currentValue;if(n={context:n,memoizedValue:t,next:null},null===rH){if(null===e)throw Error(l(308));rH=n,e.dependencies={lanes:0,firstContext:n},e.flags|=524288}else rH=rH.next=n;return t}var rQ=\"undefined\"!=typeof AbortController?AbortController:function(){var e=[],n=this.signal={aborted:!1,addEventListener:function(n,t){e.push(t)}};this.abort=function(){n.aborted=!0,e.forEach(function(e){return e()})}},rG=o.unstable_scheduleCallback,rJ=o.unstable_NormalPriority,r0={$$typeof:x,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0};function r1(){return{controller:new rQ,data:new Map,refCount:0}}function r2(e){e.refCount--,0===e.refCount&&rG(rJ,function(){e.controller.abort()})}var r4=null,r5=0,r3=0,r6=null;function r9(){if(0==--r5&&null!==r4){null!==r6&&(r6.status=\"fulfilled\");var e=r4;r4=null,r3=0,r6=null;for(var n=0;n<e.length;n++)(0,e[n])()}}var r8=L.S;L.S=function(e,n){\"object\"==typeof n&&null!==n&&\"function\"==typeof n.then&&function(e,n){if(null===r4){var t=r4=[];r5=0,r3=sX(),r6={status:\"pending\",value:void 0,then:function(e){t.push(e)}}}r5++,n.then(r9,r9)}(0,n),null!==r8&&r8(e,n)};var r7=B(null);function oe(){var e=r7.current;return null!==e?e:lN.pooledCache}function on(e,n){null===n?I(r7,r7.current):I(r7,n.pool)}function ot(){var e=oe();return null===e?null:{parent:r0._currentValue,pool:e}}var or=Error(l(460)),oo=Error(l(474)),oa=Error(l(542)),oi={then:function(){}};function ol(e){return\"fulfilled\"===(e=e.status)||\"rejected\"===e}function os(e,n,t){switch(void 0===(t=e[t])?e.push(n):t!==n&&(n.then(nm,nm),n=t),n.status){case\"fulfilled\":return n.value;case\"rejected\":throw od(e=n.reason),e;default:if(\"string\"==typeof n.status)n.then(nm,nm);else{if(null!==(e=lN)&&100<e.shellSuspendCounter)throw Error(l(482));(e=n).status=\"pending\",e.then(function(e){if(\"pending\"===n.status){var t=n;t.status=\"fulfilled\",t.value=e}},function(e){if(\"pending\"===n.status){var t=n;t.status=\"rejected\",t.reason=e}})}switch(n.status){case\"fulfilled\":return n.value;case\"rejected\":throw od(e=n.reason),e}throw oc=n,or}}var oc=null;function ou(){if(null===oc)throw Error(l(459));var e=oc;return oc=null,e}function od(e){if(e===or||e===oa)throw Error(l(483))}var of=null,op=0;function oh(e){var n=op;return op+=1,null===of&&(of=[]),os(of,e,n)}function og(e,n){e.ref=void 0!==(n=n.props.ref)?n:null}function om(e,n){if(n.$$typeof===p)throw Error(l(525));throw Error(l(31,\"[object Object]\"===(e=Object.prototype.toString.call(n))?\"object with keys {\"+Object.keys(n).join(\", \")+\"}\":e))}function ov(e){return(0,e._init)(e._payload)}function ob(e){function n(n,t){if(e){var r=n.deletions;null===r?(n.deletions=[t],n.flags|=16):r.push(t)}}function t(t,r){if(!e)return null;for(;null!==r;)n(t,r),r=r.sibling;return null}function r(e){for(var n=new Map;null!==e;)null!==e.key?n.set(e.key,e):n.set(e.index,e),e=e.sibling;return n}function o(e,n){return(e=rt(e,n)).index=0,e.sibling=null,e}function a(n,t,r){return(n.index=r,e)?null!==(r=n.alternate)?(r=r.index)<t?(n.flags|=0x4000002,t):r:(n.flags|=0x4000002,t):(n.flags|=1048576,t)}function i(n){return e&&null===n.alternate&&(n.flags|=0x4000002),n}function s(e,n,t,r){return null===n||6!==n.tag?(n=ri(t,e.mode,r)).return=e:(n=o(n,t)).return=e,n}function c(e,n,t,r){var a=t.type;return a===m?d(e,n,t.props.children,r,t.key):(null!==n&&(n.elementType===a||\"object\"==typeof a&&null!==a&&a.$$typeof===O&&ov(a)===n.type)?og(n=o(n,t.props),t):og(n=ro(t.type,t.key,t.props,null,e.mode,r),t),n.return=e,n)}function u(e,n,t,r){return null===n||4!==n.tag||n.stateNode.containerInfo!==t.containerInfo||n.stateNode.implementation!==t.implementation?(n=rs(t,e.mode,r)).return=e:(n=o(n,t.children||[])).return=e,n}function d(e,n,t,r,a){return null===n||7!==n.tag?(n=ra(t,e.mode,r,a)).return=e:(n=o(n,t)).return=e,n}function f(e,n,t){if(\"string\"==typeof n&&\"\"!==n||\"number\"==typeof n||\"bigint\"==typeof n)return(n=ri(\"\"+n,e.mode,t)).return=e,n;if(\"object\"==typeof n&&null!==n){switch(n.$$typeof){case h:return og(t=ro(n.type,n.key,n.props,null,e.mode,t),n),t.return=e,t;case g:return(n=rs(n,e.mode,t)).return=e,n;case O:return f(e,n=(0,n._init)(n._payload),t)}if(z(n)||_(n))return(n=ra(n,e.mode,t,null)).return=e,n;if(\"function\"==typeof n.then)return f(e,oh(n),t);if(n.$$typeof===x)return f(e,rX(e,n),t);om(e,n)}return null}function p(e,n,t,r){var o=null!==n?n.key:null;if(\"string\"==typeof t&&\"\"!==t||\"number\"==typeof t||\"bigint\"==typeof t)return null!==o?null:s(e,n,\"\"+t,r);if(\"object\"==typeof t&&null!==t){switch(t.$$typeof){case h:return t.key===o?c(e,n,t,r):null;case g:return t.key===o?u(e,n,t,r):null;case O:return p(e,n,t=(o=t._init)(t._payload),r)}if(z(t)||_(t))return null!==o?null:d(e,n,t,r,null);if(\"function\"==typeof t.then)return p(e,n,oh(t),r);if(t.$$typeof===x)return p(e,n,rX(e,t),r);om(e,t)}return null}function v(e,n,t,r,o){if(\"string\"==typeof r&&\"\"!==r||\"number\"==typeof r||\"bigint\"==typeof r)return s(n,e=e.get(t)||null,\"\"+r,o);if(\"object\"==typeof r&&null!==r){switch(r.$$typeof){case h:return c(n,e=e.get(null===r.key?t:r.key)||null,r,o);case g:return u(n,e=e.get(null===r.key?t:r.key)||null,r,o);case O:return v(e,n,t,r=(0,r._init)(r._payload),o)}if(z(r)||_(r))return d(n,e=e.get(t)||null,r,o,null);if(\"function\"==typeof r.then)return v(e,n,t,oh(r),o);if(r.$$typeof===x)return v(e,n,t,rX(n,r),o);om(n,r)}return null}return function(s,c,u,d){try{op=0;var b=function s(c,u,d,b){if(\"object\"==typeof d&&null!==d&&d.type===m&&null===d.key&&(d=d.props.children),\"object\"==typeof d&&null!==d){switch(d.$$typeof){case h:e:{for(var y=d.key;null!==u;){if(u.key===y){if((y=d.type)===m){if(7===u.tag){t(c,u.sibling),(b=o(u,d.props.children)).return=c,c=b;break e}}else if(u.elementType===y||\"object\"==typeof y&&null!==y&&y.$$typeof===O&&ov(y)===u.type){t(c,u.sibling),og(b=o(u,d.props),d),b.return=c,c=b;break e}t(c,u);break}n(c,u),u=u.sibling}d.type===m?(b=ra(d.props.children,c.mode,b,d.key)).return=c:(og(b=ro(d.type,d.key,d.props,null,c.mode,b),d),b.return=c),c=b}return i(c);case g:e:{for(y=d.key;null!==u;){if(u.key===y)if(4===u.tag&&u.stateNode.containerInfo===d.containerInfo&&u.stateNode.implementation===d.implementation){t(c,u.sibling),(b=o(u,d.children||[])).return=c,c=b;break e}else{t(c,u);break}n(c,u),u=u.sibling}(b=rs(d,c.mode,b)).return=c,c=b}return i(c);case O:return s(c,u,d=(y=d._init)(d._payload),b)}if(z(d))return function(o,i,l,s){for(var c=null,u=null,d=i,h=i=0,g=null;null!==d&&h<l.length;h++){d.index>h?(g=d,d=null):g=d.sibling;var m=p(o,d,l[h],s);if(null===m){null===d&&(d=g);break}e&&d&&null===m.alternate&&n(o,d),i=a(m,i,h),null===u?c=m:u.sibling=m,u=m,d=g}if(h===l.length)return t(o,d),rS&&rx(o,h),c;if(null===d){for(;h<l.length;h++)null!==(d=f(o,l[h],s))&&(i=a(d,i,h),null===u?c=d:u.sibling=d,u=d);return rS&&rx(o,h),c}for(d=r(d);h<l.length;h++)null!==(g=v(d,o,h,l[h],s))&&(e&&null!==g.alternate&&d.delete(null===g.key?h:g.key),i=a(g,i,h),null===u?c=g:u.sibling=g,u=g);return e&&d.forEach(function(e){return n(o,e)}),rS&&rx(o,h),c}(c,u,d,b);if(_(d)){if(\"function\"!=typeof(y=_(d)))throw Error(l(150));return function(o,i,s,c){if(null==s)throw Error(l(151));for(var u=null,d=null,h=i,g=i=0,m=null,b=s.next();null!==h&&!b.done;g++,b=s.next()){h.index>g?(m=h,h=null):m=h.sibling;var y=p(o,h,b.value,c);if(null===y){null===h&&(h=m);break}e&&h&&null===y.alternate&&n(o,h),i=a(y,i,g),null===d?u=y:d.sibling=y,d=y,h=m}if(b.done)return t(o,h),rS&&rx(o,g),u;if(null===h){for(;!b.done;g++,b=s.next())null!==(b=f(o,b.value,c))&&(i=a(b,i,g),null===d?u=b:d.sibling=b,d=b);return rS&&rx(o,g),u}for(h=r(h);!b.done;g++,b=s.next())null!==(b=v(h,o,g,b.value,c))&&(e&&null!==b.alternate&&h.delete(null===b.key?g:b.key),i=a(b,i,g),null===d?u=b:d.sibling=b,d=b);return e&&h.forEach(function(e){return n(o,e)}),rS&&rx(o,g),u}(c,u,d=y.call(d),b)}if(\"function\"==typeof d.then)return s(c,u,oh(d),b);if(d.$$typeof===x)return s(c,u,rX(c,d),b);om(c,d)}return\"string\"==typeof d&&\"\"!==d||\"number\"==typeof d||\"bigint\"==typeof d?(d=\"\"+d,null!==u&&6===u.tag?(t(c,u.sibling),(b=o(u,d)).return=c):(t(c,u),(b=ri(d,c.mode,b)).return=c),i(c=b)):t(c,u)}(s,c,u,d);return of=null,b}catch(e){if(e===or||e===oa)throw e;var y=re(29,e,null,s.mode);return y.lanes=d,y.return=s,y}finally{}}}var oy=ob(!0),ox=ob(!1),ow=!1;function oj(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function ok(e,n){e=e.updateQueue,n.updateQueue===e&&(n.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function oA(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function oO(e,n,t){var r=e.updateQueue;if(null===r)return null;if(r=r.shared,0!=(2&lR)){var o=r.pending;return null===o?n.next=n:(n.next=o.next,o.next=n),r.pending=n,n=t9(e),t6(e,null,t),n}return t4(e,r,n,t),t9(e)}function oC(e,n,t){if(null!==(n=n.updateQueue)&&(n=n.shared,0!=(4194048&t))){var r=n.lanes;r&=e.pendingLanes,t|=r,n.lanes=t,eE(e,t)}}function oS(e,n){var t=e.updateQueue,r=e.alternate;if(null!==r&&t===(r=r.updateQueue)){var o=null,a=null;if(null!==(t=t.firstBaseUpdate)){do{var i={lane:t.lane,tag:t.tag,payload:t.payload,callback:null,next:null};null===a?o=a=i:a=a.next=i,t=t.next}while(null!==t);null===a?o=a=n:a=a.next=n}else o=a=n;t={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},e.updateQueue=t;return}null===(e=t.lastBaseUpdate)?t.firstBaseUpdate=n:e.next=n,t.lastBaseUpdate=n}var oE=!1;function o_(){if(oE){var e=r6;if(null!==e)throw e}}function oP(e,n,t,r){oE=!1;var o=e.updateQueue;ow=!1;var a=o.firstBaseUpdate,i=o.lastBaseUpdate,l=o.shared.pending;if(null!==l){o.shared.pending=null;var s=l,c=s.next;s.next=null,null===i?a=c:i.next=c,i=s;var u=e.alternate;null!==u&&(l=(u=u.updateQueue).lastBaseUpdate)!==i&&(null===l?u.firstBaseUpdate=c:l.next=c,u.lastBaseUpdate=s)}if(null!==a){var d=o.baseState;for(i=0,u=c=s=null,l=a;;){var p=-0x20000001&l.lane,h=p!==l.lane;if(h?(lB&p)===p:(r&p)===p){0!==p&&p===r3&&(oE=!0),null!==u&&(u=u.next={lane:0,tag:l.tag,payload:l.payload,callback:null,next:null});e:{var g=e,m=l;switch(p=n,m.tag){case 1:if(\"function\"==typeof(g=m.payload)){d=g.call(t,d,p);break e}d=g;break e;case 3:g.flags=-65537&g.flags|128;case 0:if(null==(p=\"function\"==typeof(g=m.payload)?g.call(t,d,p):g))break e;d=f({},d,p);break e;case 2:ow=!0}}null!==(p=l.callback)&&(e.flags|=64,h&&(e.flags|=8192),null===(h=o.callbacks)?o.callbacks=[p]:h.push(p))}else h={lane:p,tag:l.tag,payload:l.payload,callback:l.callback,next:null},null===u?(c=u=h,s=d):u=u.next=h,i|=p;if(null===(l=l.next))if(null===(l=o.shared.pending))break;else l=(h=l).next,h.next=null,o.lastBaseUpdate=h,o.shared.pending=null}null===u&&(s=d),o.baseState=s,o.firstBaseUpdate=c,o.lastBaseUpdate=u,null===a&&(o.shared.lanes=0),lW|=i,e.lanes=i,e.memoizedState=d}}function oz(e,n){if(\"function\"!=typeof e)throw Error(l(191,e));e.call(n)}function oL(e,n){var t=e.callbacks;if(null!==t)for(e.callbacks=null,e=0;e<t.length;e++)oz(t[e],n)}var oT=B(null),oR=B(0);function oN(e,n){I(oR,e=lV),I(oT,n),lV=e|n.baseLanes}function oD(){I(oR,lV),I(oT,oT.current)}function oB(){lV=oR.current,M(oT),M(oR)}var oM=B(null),oI=null;function oH(e){var n=e.alternate;I(oW,1&oW.current),I(oM,e),null===oI&&(null===n||null!==oT.current?oI=e:null!==n.memoizedState&&(oI=e))}function oF(e){I(oW,oW.current),I(oM,e),null===oI&&(oI=e)}function oU(e){22===e.tag?(I(oW,oW.current),I(oM,e),null===oI&&(oI=e)):oV(e)}function oV(){I(oW,oW.current),I(oM,oM.current)}function oq(e){M(oM),oI===e&&(oI=null),M(oW)}var oW=B(0);function o$(e){for(var n=e;null!==n;){if(13===n.tag){var t=n.memoizedState;if(null!==t&&(null===(t=t.dehydrated)||cS(t)||cE(t)))return n}else if(19===n.tag&&(\"forwards\"===n.memoizedProps.revealOrder||\"backwards\"===n.memoizedProps.revealOrder||\"unstable_legacy-backwards\"===n.memoizedProps.revealOrder||\"together\"===n.memoizedProps.revealOrder)){if(0!=(128&n.flags))return n}else if(null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return null;n=n.return}n.sibling.return=n.return,n=n.sibling}return null}var oZ=0,oY=null,oX=null,oK=null,oQ=!1,oG=!1,oJ=!1,o0=0,o1=0,o2=null,o4=0;function o5(){throw Error(l(321))}function o3(e,n){if(null===n)return!1;for(var t=0;t<n.length&&t<e.length;t++)if(!tO(e[t],n[t]))return!1;return!0}function o6(e,n,t,r,o,a){return oZ=a,oY=n,n.memoizedState=null,n.updateQueue=null,n.lanes=0,L.H=null===e||null===e.memoizedState?it:ir,oJ=!1,a=t(r,o),oJ=!1,oG&&(a=o8(n,t,r,o)),o9(e),a}function o9(e){L.H=ie;var n=null!==oX&&null!==oX.next;if(oZ=0,oK=oX=oY=null,oQ=!1,o1=0,o2=null,n)throw Error(l(300));null===e||ix||null!==(e=e.dependencies)&&r$(e)&&(ix=!0)}function o8(e,n,t,r){oY=e;var o=0;do{if(oG&&(o2=null),o1=0,oG=!1,25<=o)throw Error(l(301));if(o+=1,oK=oX=null,null!=e.updateQueue){var a=e.updateQueue;a.lastEffect=null,a.events=null,a.stores=null,null!=a.memoCache&&(a.memoCache.index=0)}L.H=io,a=n(t,r)}while(oG);return a}function o7(){var e=L.H,n=e.useState()[0];return n=\"function\"==typeof n.then?ai(n):n,e=e.useState()[0],(null!==oX?oX.memoizedState:null)!==e&&(oY.flags|=1024),n}function ae(){var e=0!==o0;return o0=0,e}function an(e,n,t){n.updateQueue=e.updateQueue,n.flags&=-2053,e.lanes&=~t}function at(e){if(oQ){for(e=e.memoizedState;null!==e;){var n=e.queue;null!==n&&(n.pending=null),e=e.next}oQ=!1}oZ=0,oK=oX=oY=null,oG=!1,o1=o0=0,o2=null}function ar(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===oK?oY.memoizedState=oK=e:oK=oK.next=e,oK}function ao(){if(null===oX){var e=oY.alternate;e=null!==e?e.memoizedState:null}else e=oX.next;var n=null===oK?oY.memoizedState:oK.next;if(null!==n)oK=n,oX=e;else{if(null===e){if(null===oY.alternate)throw Error(l(467));throw Error(l(310))}e={memoizedState:(oX=e).memoizedState,baseState:oX.baseState,baseQueue:oX.baseQueue,queue:oX.queue,next:null},null===oK?oY.memoizedState=oK=e:oK=oK.next=e}return oK}function aa(){return{lastEffect:null,events:null,stores:null,memoCache:null}}function ai(e){var n=o1;return o1+=1,null===o2&&(o2=[]),e=os(o2,e,n),n=oY,null===(null===oK?n.memoizedState:oK.next)&&(L.H=null===(n=n.alternate)||null===n.memoizedState?it:ir),e}function al(e){if(null!==e&&\"object\"==typeof e){if(\"function\"==typeof e.then)return ai(e);if(e.$$typeof===x)return rY(e)}throw Error(l(438,String(e)))}function as(e){var n=null,t=oY.updateQueue;if(null!==t&&(n=t.memoCache),null==n){var r=oY.alternate;null!==r&&null!==(r=r.updateQueue)&&null!=(r=r.memoCache)&&(n={data:r.data.map(function(e){return e.slice()}),index:0})}if(null==n&&(n={data:[],index:0}),null===t&&(t=aa(),oY.updateQueue=t),t.memoCache=n,void 0===(t=n.data[n.index]))for(t=n.data[n.index]=Array(e),r=0;r<e;r++)t[r]=S;return n.index++,t}function ac(e,n){return\"function\"==typeof n?n(e):n}function au(e){return ad(ao(),oX,e)}function ad(e,n,t){var r=e.queue;if(null===r)throw Error(l(311));r.lastRenderedReducer=t;var o=e.baseQueue,a=r.pending;if(null!==a){if(null!==o){var i=o.next;o.next=a.next,a.next=i}n.baseQueue=o=a,r.pending=null}if(a=e.baseState,null===o)e.memoizedState=a;else{n=o.next;var s=i=null,c=null,u=n,d=!1;do{var f=-0x20000001&u.lane;if(f!==u.lane?(lB&f)===f:(oZ&f)===f){var p=u.revertLane;if(0===p)null!==c&&(c=c.next={lane:0,revertLane:0,gesture:null,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null}),f===r3&&(d=!0);else if((oZ&p)===p){u=u.next,p===r3&&(d=!0);continue}else f={lane:0,revertLane:u.revertLane,gesture:null,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null},null===c?(s=c=f,i=a):c=c.next=f,oY.lanes|=p,lW|=p;f=u.action,oJ&&t(a,f),a=u.hasEagerState?u.eagerState:t(a,f)}else p={lane:f,revertLane:u.revertLane,gesture:u.gesture,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null},null===c?(s=c=p,i=a):c=c.next=p,oY.lanes|=f,lW|=f;u=u.next}while(null!==u&&u!==n);if(null===c?i=a:c.next=s,!tO(a,e.memoizedState)&&(ix=!0,d&&null!==(t=r6)))throw t;e.memoizedState=a,e.baseState=i,e.baseQueue=c,r.lastRenderedState=a}return null===o&&(r.lanes=0),[e.memoizedState,r.dispatch]}function af(e){var n=ao(),t=n.queue;if(null===t)throw Error(l(311));t.lastRenderedReducer=e;var r=t.dispatch,o=t.pending,a=n.memoizedState;if(null!==o){t.pending=null;var i=o=o.next;do a=e(a,i.action),i=i.next;while(i!==o);tO(a,n.memoizedState)||(ix=!0),n.memoizedState=a,null===n.baseQueue&&(n.baseState=a),t.lastRenderedState=a}return[a,r]}function ap(e,n,t){var r=oY,o=ao(),a=rS;if(a){if(void 0===t)throw Error(l(407));t=t()}else t=n();var i=!tO((oX||o).memoizedState,t);if(i&&(o.memoizedState=t,ix=!0),o=o.queue,aM(am.bind(null,r,o,e),[e]),o.getSnapshot!==n||i||null!==oK&&1&oK.memoizedState.tag){if(r.flags|=2048,aT(9,{destroy:void 0},ag.bind(null,r,o,t,n),null),null===lN)throw Error(l(349));a||0!=(124&oZ)||ah(r,n,t)}return t}function ah(e,n,t){e.flags|=16384,e={getSnapshot:n,value:t},null===(n=oY.updateQueue)?(n=aa(),oY.updateQueue=n,n.stores=[e]):null===(t=n.stores)?n.stores=[e]:t.push(e)}function ag(e,n,t,r){n.value=t,n.getSnapshot=r,av(n)&&ab(e)}function am(e,n,t){return t(function(){av(n)&&ab(e)})}function av(e){var n=e.getSnapshot;e=e.value;try{var t=n();return!tO(e,t)}catch(e){return!0}}function ab(e){var n=t3(e,2);null!==n&&so(n,e,2)}function ay(e){var n=ar();if(\"function\"==typeof e){var t=e;if(e=t(),oJ){eh(!0);try{t()}finally{eh(!1)}}}return n.memoizedState=n.baseState=e,n.queue={pending:null,lanes:0,dispatch:null,lastRenderedReducer:ac,lastRenderedState:e},n}function ax(e,n,t,r){return e.baseState=t,ad(e,oX,\"function\"==typeof r?r:ac)}function aw(e,n,t,r,o){if(a9(e))throw Error(l(485));if(null!==(e=n.action)){var a={payload:o,action:e,next:null,isTransition:!0,status:\"pending\",value:null,reason:null,listeners:[],then:function(e){a.listeners.push(e)}};null!==L.T?t(!0):a.isTransition=!1,r(a),null===(t=n.pending)?(a.next=n.pending=a,aj(n,a)):(a.next=t.next,n.pending=t.next=a)}}function aj(e,n){var t=n.action,r=n.payload,o=e.state;if(n.isTransition){var a=L.T,i={};L.T=i;try{var l=t(o,r),s=L.S;null!==s&&s(i,l),ak(e,n,l)}catch(t){aO(e,n,t)}finally{null!==a&&null!==i.types&&(a.types=i.types),L.T=a}}else try{a=t(o,r),ak(e,n,a)}catch(t){aO(e,n,t)}}function ak(e,n,t){null!==t&&\"object\"==typeof t&&\"function\"==typeof t.then?t.then(function(t){aA(e,n,t)},function(t){return aO(e,n,t)}):aA(e,n,t)}function aA(e,n,t){n.status=\"fulfilled\",n.value=t,aC(n),e.state=t,null!==(n=e.pending)&&((t=n.next)===n?e.pending=null:(t=t.next,n.next=t,aj(e,t)))}function aO(e,n,t){var r=e.pending;if(e.pending=null,null!==r){r=r.next;do n.status=\"rejected\",n.reason=t,aC(n),n=n.next;while(n!==r)}e.action=null}function aC(e){e=e.listeners;for(var n=0;n<e.length;n++)(0,e[n])()}function aS(e,n){return n}function aE(e,n){if(rS){var t=lN.formState;if(null!==t){e:{var r=oY;if(rS){if(rC){n:{for(var o=rC,a=r_;8!==o.nodeType;)if(!a||null===(o=c_(o.nextSibling))){o=null;break n}o=\"F!\"===(a=o.data)||\"F\"===a?o:null}if(o){rC=c_(o.nextSibling),r=\"F!\"===o.data;break e}}rz(r)}r=!1}r&&(n=t[0])}}return(t=ar()).memoizedState=t.baseState=n,r={pending:null,lanes:0,dispatch:null,lastRenderedReducer:aS,lastRenderedState:n},t.queue=r,t=a5.bind(null,oY,r),r.dispatch=t,r=ay(!1),a=a6.bind(null,oY,!1,r.queue),r=ar(),o={state:n,dispatch:null,action:e,pending:null},r.queue=o,t=aw.bind(null,oY,o,a,t),o.dispatch=t,r.memoizedState=e,[n,t,!1]}function a_(e){return aP(ao(),oX,e)}function aP(e,n,t){if(n=ad(e,n,aS)[0],e=au(ac)[0],\"object\"==typeof n&&null!==n&&\"function\"==typeof n.then)try{var r=ai(n)}catch(e){if(e===or)throw oa;throw e}else r=n;var o=(n=ao()).queue,a=o.dispatch;return t!==n.memoizedState&&(oY.flags|=2048,aT(9,{destroy:void 0},az.bind(null,o,t),null)),[r,a,e]}function az(e,n){e.action=n}function aL(e){var n=ao(),t=oX;if(null!==t)return aP(n,t,e);ao(),n=n.memoizedState;var r=(t=ao()).queue.dispatch;return t.memoizedState=e,[n,r,!1]}function aT(e,n,t,r){return e={tag:e,create:t,deps:r,inst:n,next:null},null===(n=oY.updateQueue)&&(n=aa(),oY.updateQueue=n),null===(t=n.lastEffect)?n.lastEffect=e.next=e:(r=t.next,t.next=e,e.next=r,n.lastEffect=e),e}function aR(){return ao().memoizedState}function aN(e,n,t,r){var o=ar();oY.flags|=e,o.memoizedState=aT(1|n,{destroy:void 0},t,void 0===r?null:r)}function aD(e,n,t,r){var o=ao();r=void 0===r?null:r;var a=o.memoizedState.inst;null!==oX&&null!==r&&o3(r,oX.memoizedState.deps)?o.memoizedState=aT(n,a,t,r):(oY.flags|=e,o.memoizedState=aT(1|n,a,t,r))}function aB(e,n){aN(8390656,8,e,n)}function aM(e,n){aD(2048,8,e,n)}function aI(e,n){return aD(4,2,e,n)}function aH(e,n){return aD(4,4,e,n)}function aF(e,n){if(\"function\"==typeof n){var t=n(e=e());return function(){\"function\"==typeof t?t():n(null)}}if(null!=n)return n.current=e=e(),function(){n.current=null}}function aU(e,n,t){t=null!=t?t.concat([e]):null,aD(4,4,aF.bind(null,n,e),t)}function aV(){}function aq(e,n){var t=ao();n=void 0===n?null:n;var r=t.memoizedState;return null!==n&&o3(n,r[1])?r[0]:(t.memoizedState=[e,n],e)}function aW(e,n){var t=ao();n=void 0===n?null:n;var r=t.memoizedState;if(null!==n&&o3(n,r[1]))return r[0];if(r=e(),oJ){eh(!0);try{e()}finally{eh(!1)}}return t.memoizedState=[r,n],r}function a$(e,n,t){return void 0===t||0!=(0x40000000&oZ)?e.memoizedState=n:(e.memoizedState=t,e=sr(),oY.lanes|=e,lW|=e,t)}function aZ(e,n,t,r){return tO(t,n)?t:null!==oT.current?(tO(e=a$(e,t,r),n)||(ix=!0),e):0==(42&oZ)||0!=(0x40000000&oZ)?(ix=!0,e.memoizedState=t):(e=sr(),oY.lanes|=e,lW|=e,n)}function aY(e,n,t,r,o){var a=T.p;T.p=0!==a&&8>a?a:8;var i=L.T,l={};L.T=l,a6(e,!1,n,t);try{var s=o(),c=L.S;if(null!==c&&c(l,s),null!==s&&\"object\"==typeof s&&\"function\"==typeof s.then){var u,d,f=(u=[],d={status:\"pending\",value:null,reason:null,then:function(e){u.push(e)}},s.then(function(){d.status=\"fulfilled\",d.value=r;for(var e=0;e<u.length;e++)(0,u[e])(r)},function(e){for(d.status=\"rejected\",d.reason=e,e=0;e<u.length;e++)(0,u[e])(void 0)}),d);a3(e,n,f,st(e))}else a3(e,n,r,st(e))}catch(t){a3(e,n,{then:function(){},status:\"rejected\",reason:t},st())}finally{T.p=a,null!==i&&null!==l.types&&(i.types=l.types),L.T=i}}function aX(){}function aK(e,n,t,r){if(5!==e.tag)throw Error(l(476));var o=aQ(e).queue;aY(e,o,n,R,null===t?aX:function(){return aG(e),t(r)})}function aQ(e){var n=e.memoizedState;if(null!==n)return n;var t={};return(n={memoizedState:R,baseState:R,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ac,lastRenderedState:R},next:null}).next={memoizedState:t,baseState:t,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ac,lastRenderedState:t},next:null},e.memoizedState=n,null!==(e=e.alternate)&&(e.memoizedState=n),n}function aG(e){var n=aQ(e);null===n.next&&(n=e.alternate.memoizedState),a3(e,n.next.queue,{},st())}function aJ(){return rY(c6)}function a0(){return ao().memoizedState}function a1(){return ao().memoizedState}function a2(e){for(var n=e.return;null!==n;){switch(n.tag){case 24:case 3:var t=st(),r=oO(n,e=oA(t),t);null!==r&&(so(r,n,t),oC(r,n,t)),n={cache:r1()},e.payload=n;return}n=n.return}}function a4(e,n,t){var r=st();t={lane:r,revertLane:0,gesture:null,action:t,hasEagerState:!1,eagerState:null,next:null},a9(e)?a8(n,t):null!==(t=t5(e,n,t,r))&&(so(t,e,r),a7(t,n,r))}function a5(e,n,t){a3(e,n,t,st())}function a3(e,n,t,r){var o={lane:r,revertLane:0,gesture:null,action:t,hasEagerState:!1,eagerState:null,next:null};if(a9(e))a8(n,o);else{var a=e.alternate;if(0===e.lanes&&(null===a||0===a.lanes)&&null!==(a=n.lastRenderedReducer))try{var i=n.lastRenderedState,l=a(i,t);if(o.hasEagerState=!0,o.eagerState=l,tO(l,i))return t4(e,n,o,0),null===lN&&t2(),!1}catch(e){}finally{}if(null!==(t=t5(e,n,o,r)))return so(t,e,r),a7(t,n,r),!0}return!1}function a6(e,n,t,r){if(r={lane:2,revertLane:sX(),gesture:null,action:r,hasEagerState:!1,eagerState:null,next:null},a9(e)){if(n)throw Error(l(479))}else null!==(n=t5(e,t,r,2))&&so(n,e,2)}function a9(e){var n=e.alternate;return e===oY||null!==n&&n===oY}function a8(e,n){oG=oQ=!0;var t=e.pending;null===t?n.next=n:(n.next=t.next,t.next=n),e.pending=n}function a7(e,n,t){if(0!=(4194048&t)){var r=n.lanes;r&=e.pendingLanes,n.lanes=t|=r,eE(e,t)}}var ie={readContext:rY,use:al,useCallback:o5,useContext:o5,useEffect:o5,useImperativeHandle:o5,useLayoutEffect:o5,useInsertionEffect:o5,useMemo:o5,useReducer:o5,useRef:o5,useState:o5,useDebugValue:o5,useDeferredValue:o5,useTransition:o5,useSyncExternalStore:o5,useId:o5,useHostTransitionStatus:o5,useFormState:o5,useActionState:o5,useOptimistic:o5,useMemoCache:o5,useCacheRefresh:o5},it={readContext:rY,use:al,useCallback:function(e,n){return ar().memoizedState=[e,void 0===n?null:n],e},useContext:rY,useEffect:aB,useImperativeHandle:function(e,n,t){t=null!=t?t.concat([e]):null,aN(4194308,4,aF.bind(null,n,e),t)},useLayoutEffect:function(e,n){return aN(4194308,4,e,n)},useInsertionEffect:function(e,n){aN(4,2,e,n)},useMemo:function(e,n){var t=ar();n=void 0===n?null:n;var r=e();if(oJ){eh(!0);try{e()}finally{eh(!1)}}return t.memoizedState=[r,n],r},useReducer:function(e,n,t){var r=ar();if(void 0!==t){var o=t(n);if(oJ){eh(!0);try{t(n)}finally{eh(!1)}}}else o=n;return r.memoizedState=r.baseState=o,r.queue=e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:o},e=e.dispatch=a4.bind(null,oY,e),[r.memoizedState,e]},useRef:function(e){return ar().memoizedState=e={current:e}},useState:function(e){var n=(e=ay(e)).queue,t=a5.bind(null,oY,n);return n.dispatch=t,[e.memoizedState,t]},useDebugValue:aV,useDeferredValue:function(e,n){return a$(ar(),e,n)},useTransition:function(){var e=ay(!1);return e=aY.bind(null,oY,e.queue,!0,!1),ar().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,n,t){var r=oY,o=ar();if(rS){if(void 0===t)throw Error(l(407));t=t()}else{if(t=n(),null===lN)throw Error(l(349));0!=(124&lB)||ah(r,n,t)}o.memoizedState=t;var a={value:t,getSnapshot:n};return o.queue=a,aB(am.bind(null,r,a,e),[e]),r.flags|=2048,aT(9,{destroy:void 0},ag.bind(null,r,a,t,n),null),t},useId:function(){var e=ar(),n=lN.identifierPrefix;if(rS){var t=ry,r=rb;n=\"_\"+n+\"R_\"+(t=(r&~(1<<32-eg(r)-1)).toString(32)+t),0<(t=o0++)&&(n+=\"H\"+t.toString(32)),n+=\"_\"}else n=\"_\"+n+\"r_\"+(t=o4++).toString(32)+\"_\";return e.memoizedState=n},useHostTransitionStatus:aJ,useFormState:aE,useActionState:aE,useOptimistic:function(e){var n=ar();n.memoizedState=n.baseState=e;var t={pending:null,lanes:0,dispatch:null,lastRenderedReducer:null,lastRenderedState:null};return n.queue=t,n=a6.bind(null,oY,!0,t),t.dispatch=n,[e,n]},useMemoCache:as,useCacheRefresh:function(){return ar().memoizedState=a2.bind(null,oY)}},ir={readContext:rY,use:al,useCallback:aq,useContext:rY,useEffect:aM,useImperativeHandle:aU,useInsertionEffect:aI,useLayoutEffect:aH,useMemo:aW,useReducer:au,useRef:aR,useState:function(){return au(ac)},useDebugValue:aV,useDeferredValue:function(e,n){return aZ(ao(),oX.memoizedState,e,n)},useTransition:function(){var e=au(ac)[0],n=ao().memoizedState;return[\"boolean\"==typeof e?e:ai(e),n]},useSyncExternalStore:ap,useId:a0,useHostTransitionStatus:aJ,useFormState:a_,useActionState:a_,useOptimistic:function(e,n){return ax(ao(),oX,e,n)},useMemoCache:as,useCacheRefresh:a1},io={readContext:rY,use:al,useCallback:aq,useContext:rY,useEffect:aM,useImperativeHandle:aU,useInsertionEffect:aI,useLayoutEffect:aH,useMemo:aW,useReducer:af,useRef:aR,useState:function(){return af(ac)},useDebugValue:aV,useDeferredValue:function(e,n){var t=ao();return null===oX?a$(t,e,n):aZ(t,oX.memoizedState,e,n)},useTransition:function(){var e=af(ac)[0],n=ao().memoizedState;return[\"boolean\"==typeof e?e:ai(e),n]},useSyncExternalStore:ap,useId:a0,useHostTransitionStatus:aJ,useFormState:aL,useActionState:aL,useOptimistic:function(e,n){var t=ao();return null!==oX?ax(t,oX,e,n):(t.baseState=e,[e,t.queue.dispatch])},useMemoCache:as,useCacheRefresh:a1};function ia(e,n,t,r){t=null==(t=t(r,n=e.memoizedState))?n:f({},n,t),e.memoizedState=t,0===e.lanes&&(e.updateQueue.baseState=t)}var ii={enqueueSetState:function(e,n,t){e=e._reactInternals;var r=st(),o=oA(r);o.payload=n,null!=t&&(o.callback=t),null!==(n=oO(e,o,r))&&(so(n,e,r),oC(n,e,r))},enqueueReplaceState:function(e,n,t){e=e._reactInternals;var r=st(),o=oA(r);o.tag=1,o.payload=n,null!=t&&(o.callback=t),null!==(n=oO(e,o,r))&&(so(n,e,r),oC(n,e,r))},enqueueForceUpdate:function(e,n){e=e._reactInternals;var t=st(),r=oA(t);r.tag=2,null!=n&&(r.callback=n),null!==(n=oO(e,r,t))&&(so(n,e,t),oC(n,e,t))}};function il(e,n,t,r,o,a,i){return\"function\"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,i):!n.prototype||!n.prototype.isPureReactComponent||!tC(t,r)||!tC(o,a)}function is(e,n,t,r){e=n.state,\"function\"==typeof n.componentWillReceiveProps&&n.componentWillReceiveProps(t,r),\"function\"==typeof n.UNSAFE_componentWillReceiveProps&&n.UNSAFE_componentWillReceiveProps(t,r),n.state!==e&&ii.enqueueReplaceState(n,n.state,null)}function ic(e,n){var t=n;if(\"ref\"in n)for(var r in t={},n)\"ref\"!==r&&(t[r]=n[r]);if(e=e.defaultProps)for(var o in t===n&&(t=f({},t)),e)void 0===t[o]&&(t[o]=e[o]);return t}function iu(e){tG(e)}function id(e){console.error(e)}function ip(e){tG(e)}function ih(e,n){try{(0,e.onUncaughtError)(n.value,{componentStack:n.stack})}catch(e){setTimeout(function(){throw e})}}function ig(e,n,t){try{(0,e.onCaughtError)(t.value,{componentStack:t.stack,errorBoundary:1===n.tag?n.stateNode:null})}catch(e){setTimeout(function(){throw e})}}function im(e,n,t){return(t=oA(t)).tag=3,t.payload={element:null},t.callback=function(){ih(e,n)},t}function iv(e){return(e=oA(e)).tag=3,e}function ib(e,n,t,r){var o=t.type.getDerivedStateFromError;if(\"function\"==typeof o){var a=r.value;e.payload=function(){return o(a)},e.callback=function(){ig(n,t,r)}}var i=t.stateNode;null!==i&&\"function\"==typeof i.componentDidCatch&&(e.callback=function(){ig(n,t,r),\"function\"!=typeof o&&(null===l2?l2=new Set([this]):l2.add(this));var e=r.stack;this.componentDidCatch(r.value,{componentStack:null!==e?e:\"\"})})}var iy=Error(l(461)),ix=!1;function iw(e,n,t,r){n.child=null===e?ox(n,null,t,r):oy(n,e.child,t,r)}function ij(e,n,t,r,o){t=t.render;var a=n.ref;if(\"ref\"in r){var i={};for(var l in r)\"ref\"!==l&&(i[l]=r[l])}else i=r;return(rZ(n),r=o6(e,n,t,i,a,o),l=ae(),null===e||ix)?(rS&&l&&rj(n),n.flags|=1,iw(e,n,r,o),n.child):(an(e,n,o),iq(e,n,o))}function ik(e,n,t,r,o){if(null===e){var a=t.type;return\"function\"!=typeof a||rn(a)||void 0!==a.defaultProps||null!==t.compare?((e=ro(t.type,null,r,n,n.mode,o)).ref=n.ref,e.return=n,n.child=e):(n.tag=15,n.type=a,iA(e,n,a,r,o))}if(a=e.child,!iW(e,o)){var i=a.memoizedProps;if((t=null!==(t=t.compare)?t:tC)(i,r)&&e.ref===n.ref)return iq(e,n,o)}return n.flags|=1,(e=rt(a,r)).ref=n.ref,e.return=n,n.child=e}function iA(e,n,t,r,o){if(null!==e){var a=e.memoizedProps;if(tC(a,r)&&e.ref===n.ref)if(ix=!1,n.pendingProps=r=a,!iW(e,o))return n.lanes=e.lanes,iq(e,n,o);else 0!=(131072&e.flags)&&(ix=!0)}return iP(e,n,t,r,o)}function iO(e,n,t,r){var o=r.children,a=null!==e?e.memoizedState:null;if(\"hidden\"===r.mode){if(0!=(128&n.flags)){if(r=null!==a?a.baseLanes|t:t,null!==e){for(a=0,o=n.child=e.child;null!==o;)a=a|o.lanes|o.childLanes,o=o.sibling;n.childLanes=a&~r}else n.childLanes=0,n.child=null;return iC(e,n,r,t)}if(0==(0x20000000&t))return n.lanes=n.childLanes=0x20000000,iC(e,n,null!==a?a.baseLanes|t:t,t);n.memoizedState={baseLanes:0,cachePool:null},null!==e&&on(n,null!==a?a.cachePool:null),null!==a?oN(n,a):oD(),oU(n)}else null!==a?(on(n,a.cachePool),oN(n,a),oV(n),n.memoizedState=null):(null!==e&&on(n,null),oD(),oV(n));return iw(e,n,o,t),n.child}function iC(e,n,t,r){var o=oe();return n.memoizedState={baseLanes:t,cachePool:o=null===o?null:{parent:r0._currentValue,pool:o}},null!==e&&on(n,null),oD(),oU(n),null!==e&&rW(e,n,r,!0),null}function iS(e,n){return(n=iI({mode:n.mode,children:n.children},e.mode)).ref=e.ref,e.child=n,n.return=e,n}function iE(e,n,t){return oy(n,e.child,null,t),e=iS(n,n.pendingProps),e.flags|=2,oq(n),n.memoizedState=null,e}function i_(e,n){var t=n.ref;if(null===t)null!==e&&null!==e.ref&&(n.flags|=4194816);else{if(\"function\"!=typeof t&&\"object\"!=typeof t)throw Error(l(284));(null===e||e.ref!==t)&&(n.flags|=4194816)}}function iP(e,n,t,r,o){return(rZ(n),t=o6(e,n,t,r,void 0,o),r=ae(),null===e||ix)?(rS&&r&&rj(n),n.flags|=1,iw(e,n,t,o),n.child):(an(e,n,o),iq(e,n,o))}function iz(e,n,t,r,o,a){return(rZ(n),n.updateQueue=null,t=o8(n,r,t,o),o9(e),r=ae(),null===e||ix)?(rS&&r&&rj(n),n.flags|=1,iw(e,n,t,a),n.child):(an(e,n,a),iq(e,n,a))}function iL(e,n,t,r,o){if(rZ(n),null===n.stateNode){var a=t8,i=t.contextType;\"object\"==typeof i&&null!==i&&(a=rY(i)),n.memoizedState=null!==(a=new t(r,a)).state&&void 0!==a.state?a.state:null,a.updater=ii,n.stateNode=a,a._reactInternals=n,(a=n.stateNode).props=r,a.state=n.memoizedState,a.refs={},oj(n),i=t.contextType,a.context=\"object\"==typeof i&&null!==i?rY(i):t8,a.state=n.memoizedState,\"function\"==typeof(i=t.getDerivedStateFromProps)&&(ia(n,t,i,r),a.state=n.memoizedState),\"function\"==typeof t.getDerivedStateFromProps||\"function\"==typeof a.getSnapshotBeforeUpdate||\"function\"!=typeof a.UNSAFE_componentWillMount&&\"function\"!=typeof a.componentWillMount||(i=a.state,\"function\"==typeof a.componentWillMount&&a.componentWillMount(),\"function\"==typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount(),i!==a.state&&ii.enqueueReplaceState(a,a.state,null),oP(n,r,a,o),o_(),a.state=n.memoizedState),\"function\"==typeof a.componentDidMount&&(n.flags|=4194308),r=!0}else if(null===e){a=n.stateNode;var l=n.memoizedProps,s=ic(t,l);a.props=s;var c=a.context,u=t.contextType;i=t8,\"object\"==typeof u&&null!==u&&(i=rY(u));var d=t.getDerivedStateFromProps;u=\"function\"==typeof d||\"function\"==typeof a.getSnapshotBeforeUpdate,l=n.pendingProps!==l,u||\"function\"!=typeof a.UNSAFE_componentWillReceiveProps&&\"function\"!=typeof a.componentWillReceiveProps||(l||c!==i)&&is(n,a,r,i),ow=!1;var f=n.memoizedState;a.state=f,oP(n,r,a,o),o_(),c=n.memoizedState,l||f!==c||ow?(\"function\"==typeof d&&(ia(n,t,d,r),c=n.memoizedState),(s=ow||il(n,t,s,r,f,c,i))?(u||\"function\"!=typeof a.UNSAFE_componentWillMount&&\"function\"!=typeof a.componentWillMount||(\"function\"==typeof a.componentWillMount&&a.componentWillMount(),\"function\"==typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount()),\"function\"==typeof a.componentDidMount&&(n.flags|=4194308)):(\"function\"==typeof a.componentDidMount&&(n.flags|=4194308),n.memoizedProps=r,n.memoizedState=c),a.props=r,a.state=c,a.context=i,r=s):(\"function\"==typeof a.componentDidMount&&(n.flags|=4194308),r=!1)}else{a=n.stateNode,ok(e,n),u=ic(t,i=n.memoizedProps),a.props=u,d=n.pendingProps,f=a.context,c=t.contextType,s=t8,\"object\"==typeof c&&null!==c&&(s=rY(c)),(c=\"function\"==typeof(l=t.getDerivedStateFromProps)||\"function\"==typeof a.getSnapshotBeforeUpdate)||\"function\"!=typeof a.UNSAFE_componentWillReceiveProps&&\"function\"!=typeof a.componentWillReceiveProps||(i!==d||f!==s)&&is(n,a,r,s),ow=!1,f=n.memoizedState,a.state=f,oP(n,r,a,o),o_();var p=n.memoizedState;i!==d||f!==p||ow||null!==e&&null!==e.dependencies&&r$(e.dependencies)?(\"function\"==typeof l&&(ia(n,t,l,r),p=n.memoizedState),(u=ow||il(n,t,u,r,f,p,s)||null!==e&&null!==e.dependencies&&r$(e.dependencies))?(c||\"function\"!=typeof a.UNSAFE_componentWillUpdate&&\"function\"!=typeof a.componentWillUpdate||(\"function\"==typeof a.componentWillUpdate&&a.componentWillUpdate(r,p,s),\"function\"==typeof a.UNSAFE_componentWillUpdate&&a.UNSAFE_componentWillUpdate(r,p,s)),\"function\"==typeof a.componentDidUpdate&&(n.flags|=4),\"function\"==typeof a.getSnapshotBeforeUpdate&&(n.flags|=1024)):(\"function\"!=typeof a.componentDidUpdate||i===e.memoizedProps&&f===e.memoizedState||(n.flags|=4),\"function\"!=typeof a.getSnapshotBeforeUpdate||i===e.memoizedProps&&f===e.memoizedState||(n.flags|=1024),n.memoizedProps=r,n.memoizedState=p),a.props=r,a.state=p,a.context=s,r=u):(\"function\"!=typeof a.componentDidUpdate||i===e.memoizedProps&&f===e.memoizedState||(n.flags|=4),\"function\"!=typeof a.getSnapshotBeforeUpdate||i===e.memoizedProps&&f===e.memoizedState||(n.flags|=1024),r=!1)}return a=r,i_(e,n),r=0!=(128&n.flags),a||r?(a=n.stateNode,t=r&&\"function\"!=typeof t.getDerivedStateFromError?null:a.render(),n.flags|=1,null!==e&&r?(n.child=oy(n,e.child,null,o),n.child=oy(n,null,t,o)):iw(e,n,t,o),n.memoizedState=a.state,e=n.child):e=iq(e,n,o),e}function iT(e,n,t,r){return rN(),n.flags|=256,iw(e,n,t,r),n.child}var iR={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function iN(e){return{baseLanes:e,cachePool:ot()}}function iD(e,n,t){return e=null!==e?e.childLanes&~t:0,n&&(e|=lY),e}function iB(e,n,t){var r,o=n.pendingProps,a=!1,i=0!=(128&n.flags);if((r=i)||(r=(null===e||null!==e.memoizedState)&&0!=(2&oW.current)),r&&(a=!0,n.flags&=-129),r=0!=(32&n.flags),n.flags&=-33,null===e){if(rS){if(a?oH(n):oV(n),(e=rC)?null!==(e=null!==(e=cC(e,r_))&&\"&\"!==e.data?e:null)&&(n.memoizedState={dehydrated:e,treeContext:null!==rv?{id:rb,overflow:ry}:null,retryLane:0x20000000,hydrationErrors:null},(t=rl(e)).return=n,n.child=t,rO=n,rC=null):e=null,null===e)throw rz(n);return cE(e)?n.lanes=32:n.lanes=0x20000000,null}var s=o.children;return(o=o.fallback,a)?(oV(n),s=iI({mode:\"hidden\",children:s},a=n.mode),o=ra(o,a,t,null),s.return=n,o.return=n,s.sibling=o,n.child=s,(s=n.child).memoizedState=iN(t),s.childLanes=iD(e,r,t),n.memoizedState=iR,o):(oH(n),iM(n,s))}var c=e.memoizedState;if(null!==c&&null!==(s=c.dehydrated)){if(i)256&n.flags?(oH(n),n.flags&=-257,n=iH(e,n,t)):null!==n.memoizedState?(oV(n),n.child=e.child,n.flags|=128,n=null):(oV(n),s=o.fallback,a=n.mode,o=iI({mode:\"visible\",children:o.children},a),s=ra(s,a,t,null),s.flags|=2,o.return=n,s.return=n,o.sibling=s,n.child=o,oy(n,e.child,null,t),(o=n.child).memoizedState=iN(t),o.childLanes=iD(e,r,t),n.memoizedState=iR,n=s);else if(oH(n),cE(s)){if(r=s.nextSibling&&s.nextSibling.dataset)var u=r.dgst;r=u,(o=Error(l(419))).stack=\"\",o.digest=r,rB({value:o,source:null,stack:null}),n=iH(e,n,t)}else if(ix||rW(e,n,t,!1),r=0!=(t&e.childLanes),ix||r){if(null!==(r=lN)&&0!==(o=e_(r,t))&&o!==c.retryLane)throw c.retryLane=o,t3(e,o),so(r,e,o),iy;cS(s)||sg(),n=iH(e,n,t)}else cS(s)?(n.flags|=192,n.child=e.child,n=null):(e=c.treeContext,rC=c_(s.nextSibling),rO=n,rS=!0,rE=null,r_=!1,null!==e&&rA(n,e),n=iM(n,o.children),n.flags|=4096);return n}return a?(oV(n),s=o.fallback,a=n.mode,u=(c=e.child).sibling,(o=rt(c,{mode:\"hidden\",children:o.children})).subtreeFlags=0x3e00000&c.subtreeFlags,null!==u?s=rt(u,s):(s=ra(s,a,t,null),s.flags|=2),s.return=n,o.return=n,o.sibling=s,n.child=o,o=s,s=n.child,null===(a=e.child.memoizedState)?a=iN(t):(null!==(c=a.cachePool)?(u=r0._currentValue,c=c.parent!==u?{parent:u,pool:u}:c):c=ot(),a={baseLanes:a.baseLanes|t,cachePool:c}),s.memoizedState=a,s.childLanes=iD(e,r,t),n.memoizedState=iR,o):(oH(n),e=(t=e.child).sibling,(t=rt(t,{mode:\"visible\",children:o.children})).return=n,t.sibling=null,null!==e&&(null===(r=n.deletions)?(n.deletions=[e],n.flags|=16):r.push(e)),n.child=t,n.memoizedState=null,t)}function iM(e,n){return(n=iI({mode:\"visible\",children:n},e.mode)).return=e,e.child=n}function iI(e,n){return(e=re(22,e,null,n)).lanes=0,e.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null},e}function iH(e,n,t){return oy(n,e.child,null,t),e=iM(n,n.pendingProps.children),e.flags|=2,n.memoizedState=null,e}function iF(e,n,t){e.lanes|=n;var r=e.alternate;null!==r&&(r.lanes|=n),rV(e.return,n,t)}function iU(e,n,t,r,o,a){var i=e.memoizedState;null===i?e.memoizedState={isBackwards:n,rendering:null,renderingStartTime:0,last:r,tail:t,tailMode:o,treeForkCount:a}:(i.isBackwards=n,i.rendering=null,i.renderingStartTime=0,i.last=r,i.tail=t,i.tailMode=o,i.treeForkCount=a)}function iV(e,n,t){var r=n.pendingProps,o=r.revealOrder,a=r.tail;r=r.children;var i=oW.current,l=0!=(2&i);if(l?(i=1&i|2,n.flags|=128):i&=1,I(oW,i),iw(e,n,r,t),r=rS?rh:0,!l&&null!==e&&0!=(128&e.flags))e:for(e=n.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&iF(e,t,n);else if(19===e.tag)iF(e,t,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===n)break;for(;null===e.sibling;){if(null===e.return||e.return===n)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}switch(o){case\"forwards\":for(o=null,t=n.child;null!==t;)null!==(e=t.alternate)&&null===o$(e)&&(o=t),t=t.sibling;null===(t=o)?(o=n.child,n.child=null):(o=t.sibling,t.sibling=null),iU(n,!1,o,t,a,r);break;case\"backwards\":case\"unstable_legacy-backwards\":for(t=null,o=n.child,n.child=null;null!==o;){if(null!==(e=o.alternate)&&null===o$(e)){n.child=o;break}e=o.sibling,o.sibling=t,t=o,o=e}iU(n,!0,t,null,a,r);break;case\"together\":iU(n,!1,null,null,void 0,r);break;default:n.memoizedState=null}return n.child}function iq(e,n,t){if(null!==e&&(n.dependencies=e.dependencies),lW|=n.lanes,0==(t&n.childLanes)){if(null===e)return null;else if(rW(e,n,t,!1),0==(t&n.childLanes))return null}if(null!==e&&n.child!==e.child)throw Error(l(153));if(null!==n.child){for(t=rt(e=n.child,e.pendingProps),n.child=t,t.return=n;null!==e.sibling;)e=e.sibling,(t=t.sibling=rt(e,e.pendingProps)).return=n;t.sibling=null}return n.child}function iW(e,n){return 0!=(e.lanes&n)||!!(null!==(e=e.dependencies)&&r$(e))}function i$(e,n,t){if(null!==e)if(e.memoizedProps!==n.pendingProps)ix=!0;else{if(!iW(e,t)&&0==(128&n.flags))return ix=!1,function(e,n,t){switch(n.tag){case 3:q(n,n.stateNode.containerInfo),rF(n,r0,e.memoizedState.cache),rN();break;case 27:case 5:$(n);break;case 4:q(n,n.stateNode.containerInfo);break;case 10:rF(n,n.type,n.memoizedProps.value);break;case 31:if(null!==n.memoizedState)return n.flags|=128,oF(n),null;break;case 13:var r=n.memoizedState;if(null!==r){if(null!==r.dehydrated)return oH(n),n.flags|=128,null;if(0!=(t&n.child.childLanes))return iB(e,n,t);return oH(n),null!==(e=iq(e,n,t))?e.sibling:null}oH(n);break;case 19:var o=0!=(128&e.flags);if((r=0!=(t&n.childLanes))||(rW(e,n,t,!1),r=0!=(t&n.childLanes)),o){if(r)return iV(e,n,t);n.flags|=128}if(null!==(o=n.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),I(oW,oW.current),!r)return null;break;case 22:return n.lanes=0,iO(e,n,t,n.pendingProps);case 24:rF(n,r0,e.memoizedState.cache)}return iq(e,n,t)}(e,n,t);ix=0!=(131072&e.flags)}else ix=!1,rS&&0!=(1048576&n.flags)&&rw(n,rh,n.index);switch(n.lanes=0,n.tag){case 16:e:{e=n.pendingProps;var r=n.elementType,o=r._init;if(r=o(r._payload),n.type=r,\"function\"==typeof r)rn(r)?(e=ic(r,e),n.tag=1,n=iL(null,n,r,e,t)):(n.tag=0,n=iP(null,n,r,e,t));else{if(null!=r){if((o=r.$$typeof)===w){n.tag=11,n=ij(null,n,r,e,t);break e}else if(o===A){n.tag=14,n=ik(null,n,r,e,t);break e}}throw Error(l(306,n=function e(n){if(null==n)return null;if(\"function\"==typeof n)return n.$$typeof===P?null:n.displayName||n.name||null;if(\"string\"==typeof n)return n;switch(n){case m:return\"Fragment\";case b:return\"Profiler\";case v:return\"StrictMode\";case j:return\"Suspense\";case k:return\"SuspenseList\";case C:return\"Activity\"}if(\"object\"==typeof n)switch(n.$$typeof){case g:return\"Portal\";case x:return n.displayName||\"Context\";case y:return(n._context.displayName||\"Context\")+\".Consumer\";case w:var t=n.render;return(n=n.displayName)||(n=\"\"!==(n=t.displayName||t.name||\"\")?\"ForwardRef(\"+n+\")\":\"ForwardRef\"),n;case A:return null!==(t=n.displayName||null)?t:e(n.type)||\"Memo\";case O:t=n._payload,n=n._init;try{return e(n(t))}catch(e){}}return null}(r)||r,\"\"))}}return n;case 0:return iP(e,n,n.type,n.pendingProps,t);case 1:return o=ic(r=n.type,n.pendingProps),iL(e,n,r,o,t);case 3:e:{if(q(n,n.stateNode.containerInfo),null===e)throw Error(l(387));r=n.pendingProps;var a=n.memoizedState;o=a.element,ok(e,n),oP(n,r,null,t);var i=n.memoizedState;if(rF(n,r0,r=i.cache),r!==a.cache&&rq(n,[r0],t,!0),o_(),r=i.element,a.isDehydrated)if(a={element:r,isDehydrated:!1,cache:i.cache},n.updateQueue.baseState=a,n.memoizedState=a,256&n.flags){n=iT(e,n,r,t);break e}else if(r!==o){rB(o=ru(Error(l(424)),n)),n=iT(e,n,r,t);break e}else for(rC=c_((e=9===(e=n.stateNode.containerInfo).nodeType?e.body:\"HTML\"===e.nodeName?e.ownerDocument.body:e).firstChild),rO=n,rS=!0,rE=null,r_=!0,t=ox(n,null,r,t),n.child=t;t;)t.flags=-3&t.flags|4096,t=t.sibling;else{if(rN(),r===o){n=iq(e,n,t);break e}iw(e,n,r,t)}n=n.child}return n;case 26:return i_(e,n),null===e?(t=cF(n.type,null,n.pendingProps,null))?n.memoizedState=t:rS||(t=n.type,e=n.pendingProps,(r=cf(U.current).createElement(t))[eN]=n,r[eD]=e,cc(r,t,e),eY(r),n.stateNode=r):n.memoizedState=cF(n.type,e.memoizedProps,n.pendingProps,e.memoizedState),null;case 27:return $(n),null===e&&rS&&(r=n.stateNode=cT(n.type,n.pendingProps,U.current),rO=n,r_=!0,o=rC,cj(n.type)?(cP=o,rC=c_(r.firstChild)):rC=o),iw(e,n,n.pendingProps.children,t),i_(e,n),null===e&&(n.flags|=4194304),n.child;case 5:return null===e&&rS&&((o=r=rC)&&(null!==(r=function(e,n,t,r){for(;1===e.nodeType;){if(e.nodeName.toLowerCase()!==n.toLowerCase()){if(!r&&(\"INPUT\"!==e.nodeName||\"hidden\"!==e.type))break}else if(r){if(!e[eU])switch(n){case\"meta\":if(!e.hasAttribute(\"itemprop\"))break;return e;case\"link\":if(\"stylesheet\"===(o=e.getAttribute(\"rel\"))&&e.hasAttribute(\"data-precedence\")||o!==t.rel||e.getAttribute(\"href\")!==(null==t.href||\"\"===t.href?null:t.href)||e.getAttribute(\"crossorigin\")!==(null==t.crossOrigin?null:t.crossOrigin)||e.getAttribute(\"title\")!==(null==t.title?null:t.title))break;return e;case\"style\":if(e.hasAttribute(\"data-precedence\"))break;return e;case\"script\":if(((o=e.getAttribute(\"src\"))!==(null==t.src?null:t.src)||e.getAttribute(\"type\")!==(null==t.type?null:t.type)||e.getAttribute(\"crossorigin\")!==(null==t.crossOrigin?null:t.crossOrigin))&&o&&e.hasAttribute(\"async\")&&!e.hasAttribute(\"itemprop\"))break;return e;default:return e}}else{if(\"input\"!==n||\"hidden\"!==e.type)return e;var o=null==t.name?null:\"\"+t.name;if(\"hidden\"===t.type&&e.getAttribute(\"name\")===o)return e}if(null===(e=c_(e.nextSibling)))break}return null}(r,n.type,n.pendingProps,r_))?(n.stateNode=r,rO=n,rC=c_(r.firstChild),r_=!1,o=!0):o=!1),o||rz(n)),$(n),o=n.type,a=n.pendingProps,i=null!==e?e.memoizedProps:null,r=a.children,cg(o,a)?r=null:null!==i&&cg(o,i)&&(n.flags|=32),null!==n.memoizedState&&(c6._currentValue=o=o6(e,n,o7,null,null,t)),i_(e,n),iw(e,n,r,t),n.child;case 6:return null===e&&rS&&((e=t=rC)&&(null!==(t=function(e,n,t){if(\"\"===n)return null;for(;3!==e.nodeType;)if((1!==e.nodeType||\"INPUT\"!==e.nodeName||\"hidden\"!==e.type)&&!t||null===(e=c_(e.nextSibling)))return null;return e}(t,n.pendingProps,r_))?(n.stateNode=t,rO=n,rC=null,e=!0):e=!1),e||rz(n)),null;case 13:return iB(e,n,t);case 4:return q(n,n.stateNode.containerInfo),r=n.pendingProps,null===e?n.child=oy(n,null,r,t):iw(e,n,r,t),n.child;case 11:return ij(e,n,n.type,n.pendingProps,t);case 7:return iw(e,n,n.pendingProps,t),n.child;case 8:case 12:return iw(e,n,n.pendingProps.children,t),n.child;case 10:return r=n.pendingProps,rF(n,n.type,r.value),iw(e,n,r.children,t),n.child;case 9:return o=n.type._context,r=n.pendingProps.children,rZ(n),r=r(o=rY(o)),n.flags|=1,iw(e,n,r,t),n.child;case 14:return ik(e,n,n.type,n.pendingProps,t);case 15:return iA(e,n,n.type,n.pendingProps,t);case 19:return iV(e,n,t);case 31:if(o=n.pendingProps,i=0!=(128&n.flags),n.flags&=-129,null===e)if(rS){if(\"hidden\"===o.mode)iS(n,o);else if(oF(n),(t=rC)?null!==(t=null!==(t=cC(t,r_))&&\"&\"===t.data?t:null)&&(n.memoizedState={dehydrated:t,treeContext:null!==rv?{id:rb,overflow:ry}:null,retryLane:0x20000000,hydrationErrors:null},(e=rl(t)).return=n,n.child=e,rO=n,rC=null):t=null,null===t)throw rz(n);n.lanes=0x20000000,n=null}else n=iS(n,o);else if(null!==(r=e.memoizedState))if(a=r.dehydrated,oF(n),i)if(256&n.flags)n.flags&=-257,n=iE(e,n,t);else if(null!==n.memoizedState)n.child=e.child,n.flags|=128,n=null;else throw Error(l(558));else if(ix||rW(e,n,t,!1),i=0!=(t&e.childLanes),ix||i){if(null!==(o=lN)&&0!==(a=e_(o,t))&&a!==r.retryLane)throw r.retryLane=a,t3(e,a),so(o,e,a),iy;sg(),n=iE(e,n,t)}else t=r.treeContext,rC=c_(a.nextSibling),rO=n,rS=!0,rE=null,r_=!1,null!==t&&rA(n,t),n=iS(n,o),n.flags|=4096;else(t=rt(e.child,{mode:o.mode,children:o.children})).ref=n.ref,n.child=t,t.return=n,n=t;return n;case 22:return iO(e,n,t,n.pendingProps);case 24:return rZ(n),r=rY(r0),null===e?(null===(o=oe())&&(o=lN,a=r1(),o.pooledCache=a,a.refCount++,null!==a&&(o.pooledCacheLanes|=t),o=a),n.memoizedState={parent:r,cache:o},oj(n),rF(n,r0,o)):(0!=(e.lanes&t)&&(ok(e,n),oP(n,null,null,t),o_()),o=e.memoizedState,a=n.memoizedState,o.parent!==r?(o={parent:r,cache:r},n.memoizedState=o,0===n.lanes&&(n.memoizedState=n.updateQueue.baseState=o),rF(n,r0,r)):(rF(n,r0,r=a.cache),r!==o.cache&&rq(n,[r0],t,!0))),iw(e,n,n.pendingProps.children,t),n.child;case 29:throw n.pendingProps}throw Error(l(156,n.tag))}function iZ(e){e.flags|=4}function iY(e,n,t,r,o){if((n=0!=(32&e.mode))&&(n=!1),n){if(e.flags|=0x1000000,(0x13ffff40&o)===o)if(e.stateNode.complete)e.flags|=8192;else if(sf())e.flags|=8192;else throw oc=oi,oo}else e.flags&=-0x1000001}function iX(e,n){if(\"stylesheet\"!==n.type||0!=(4&n.state.loading))e.flags&=-0x1000001;else if(e.flags|=0x1000000,!c0(n))if(sf())e.flags|=8192;else throw oc=oi,oo}function iK(e,n){null!==n&&(e.flags|=4),16384&e.flags&&(n=22!==e.tag?eA():0x20000000,e.lanes|=n,lX|=n)}function iQ(e,n){if(!rS)switch(e.tailMode){case\"hidden\":n=e.tail;for(var t=null;null!==n;)null!==n.alternate&&(t=n),n=n.sibling;null===t?e.tail=null:t.sibling=null;break;case\"collapsed\":t=e.tail;for(var r=null;null!==t;)null!==t.alternate&&(r=t),t=t.sibling;null===r?n||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function iG(e){var n=null!==e.alternate&&e.alternate.child===e.child,t=0,r=0;if(n)for(var o=e.child;null!==o;)t|=o.lanes|o.childLanes,r|=0x3e00000&o.subtreeFlags,r|=0x3e00000&o.flags,o.return=e,o=o.sibling;else for(o=e.child;null!==o;)t|=o.lanes|o.childLanes,r|=o.subtreeFlags,r|=o.flags,o.return=e,o=o.sibling;return e.subtreeFlags|=r,e.childLanes=t,n}function iJ(e,n){switch(rk(n),n.tag){case 3:rU(r0),W();break;case 26:case 27:case 5:Z(n);break;case 4:W();break;case 31:null!==n.memoizedState&&oq(n);break;case 13:oq(n);break;case 19:M(oW);break;case 10:rU(n.type);break;case 22:case 23:oq(n),oB(),null!==e&&M(r7);break;case 24:rU(r0)}}function i0(e,n){try{var t=n.updateQueue,r=null!==t?t.lastEffect:null;if(null!==r){var o=r.next;t=o;do{if((t.tag&e)===e){r=void 0;var a=t.create;t.inst.destroy=r=a()}t=t.next}while(t!==o)}}catch(e){sP(n,n.return,e)}}function i1(e,n,t){try{var r=n.updateQueue,o=null!==r?r.lastEffect:null;if(null!==o){var a=o.next;r=a;do{if((r.tag&e)===e){var i=r.inst,l=i.destroy;if(void 0!==l){i.destroy=void 0,o=n;try{l()}catch(e){sP(o,t,e)}}}r=r.next}while(r!==a)}}catch(e){sP(n,n.return,e)}}function i2(e){var n=e.updateQueue;if(null!==n){var t=e.stateNode;try{oL(n,t)}catch(n){sP(e,e.return,n)}}}function i4(e,n,t){t.props=ic(e.type,e.memoizedProps),t.state=e.memoizedState;try{t.componentWillUnmount()}catch(t){sP(e,n,t)}}function i5(e,n){try{var t=e.ref;if(null!==t){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;default:r=e.stateNode}\"function\"==typeof t?e.refCleanup=t(r):t.current=r}}catch(t){sP(e,n,t)}}function i3(e,n){var t=e.ref,r=e.refCleanup;if(null!==t)if(\"function\"==typeof r)try{r()}catch(t){sP(e,n,t)}finally{e.refCleanup=null,null!=(e=e.alternate)&&(e.refCleanup=null)}else if(\"function\"==typeof t)try{t(null)}catch(t){sP(e,n,t)}else t.current=null}function i6(e){var n=e.type,t=e.memoizedProps,r=e.stateNode;try{switch(n){case\"button\":case\"input\":case\"select\":case\"textarea\":t.autoFocus&&r.focus();break;case\"img\":t.src?r.src=t.src:t.srcSet&&(r.srcset=t.srcSet)}}catch(n){sP(e,e.return,n)}}function i9(e,n,t){try{var r=e.stateNode;(function(e,n,t,r){switch(n){case\"div\":case\"span\":case\"svg\":case\"path\":case\"a\":case\"g\":case\"p\":case\"li\":break;case\"input\":var o=null,a=null,i=null,s=null,c=null,u=null,d=null;for(h in t){var f=t[h];if(t.hasOwnProperty(h)&&null!=f)switch(h){case\"checked\":case\"value\":break;case\"defaultValue\":c=f;default:r.hasOwnProperty(h)||cl(e,n,h,null,r,f)}}for(var p in r){var h=r[p];if(f=t[p],r.hasOwnProperty(p)&&(null!=h||null!=f))switch(p){case\"type\":a=h;break;case\"name\":o=h;break;case\"checked\":u=h;break;case\"defaultChecked\":d=h;break;case\"value\":i=h;break;case\"defaultValue\":s=h;break;case\"children\":case\"dangerouslySetInnerHTML\":if(null!=h)throw Error(l(137,n));break;default:h!==f&&cl(e,n,p,h,r,f)}}nt(e,i,s,c,u,d,a,o);return;case\"select\":for(a in h=i=s=p=null,t)if(c=t[a],t.hasOwnProperty(a)&&null!=c)switch(a){case\"value\":break;case\"multiple\":h=c;default:r.hasOwnProperty(a)||cl(e,n,a,null,r,c)}for(o in r)if(a=r[o],c=t[o],r.hasOwnProperty(o)&&(null!=a||null!=c))switch(o){case\"value\":p=a;break;case\"defaultValue\":s=a;break;case\"multiple\":i=a;default:a!==c&&cl(e,n,o,a,r,c)}n=s,t=i,r=h,null!=p?na(e,!!t,p,!1):!!r!=!!t&&(null!=n?na(e,!!t,n,!0):na(e,!!t,t?[]:\"\",!1));return;case\"textarea\":for(s in h=p=null,t)if(o=t[s],t.hasOwnProperty(s)&&null!=o&&!r.hasOwnProperty(s))switch(s){case\"value\":case\"children\":break;default:cl(e,n,s,null,r,o)}for(i in r)if(o=r[i],a=t[i],r.hasOwnProperty(i)&&(null!=o||null!=a))switch(i){case\"value\":p=o;break;case\"defaultValue\":h=o;break;case\"children\":break;case\"dangerouslySetInnerHTML\":if(null!=o)throw Error(l(91));break;default:o!==a&&cl(e,n,i,o,r,a)}ni(e,p,h);return;case\"option\":for(var g in t)p=t[g],t.hasOwnProperty(g)&&null!=p&&!r.hasOwnProperty(g)&&(\"selected\"===g?e.selected=!1:cl(e,n,g,null,r,p));for(c in r)p=r[c],h=t[c],r.hasOwnProperty(c)&&p!==h&&(null!=p||null!=h)&&(\"selected\"===c?e.selected=p&&\"function\"!=typeof p&&\"symbol\"!=typeof p:cl(e,n,c,p,r,h));return;case\"img\":case\"link\":case\"area\":case\"base\":case\"br\":case\"col\":case\"embed\":case\"hr\":case\"keygen\":case\"meta\":case\"param\":case\"source\":case\"track\":case\"wbr\":case\"menuitem\":for(var m in t)p=t[m],t.hasOwnProperty(m)&&null!=p&&!r.hasOwnProperty(m)&&cl(e,n,m,null,r,p);for(u in r)if(p=r[u],h=t[u],r.hasOwnProperty(u)&&p!==h&&(null!=p||null!=h))switch(u){case\"children\":case\"dangerouslySetInnerHTML\":if(null!=p)throw Error(l(137,n));break;default:cl(e,n,u,p,r,h)}return;default:if(nf(n)){for(var v in t)p=t[v],t.hasOwnProperty(v)&&void 0!==p&&!r.hasOwnProperty(v)&&cs(e,n,v,void 0,r,p);for(d in r)p=r[d],h=t[d],r.hasOwnProperty(d)&&p!==h&&(void 0!==p||void 0!==h)&&cs(e,n,d,p,r,h);return}}for(var b in t)p=t[b],t.hasOwnProperty(b)&&null!=p&&!r.hasOwnProperty(b)&&cl(e,n,b,null,r,p);for(f in r)p=r[f],h=t[f],r.hasOwnProperty(f)&&p!==h&&(null!=p||null!=h)&&cl(e,n,f,p,r,h)})(r,e.type,t,n),r[eD]=n}catch(n){sP(e,e.return,n)}}function i8(e){return 5===e.tag||3===e.tag||26===e.tag||27===e.tag&&cj(e.type)||4===e.tag}function i7(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||i8(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(27===e.tag&&cj(e.type)||2&e.flags||null===e.child||4===e.tag)continue e;e.child.return=e,e=e.child}if(!(2&e.flags))return e.stateNode}}function le(e,n,t){var r=e.tag;if(5===r||6===r)e=e.stateNode,n?t.insertBefore(e,n):t.appendChild(e);else if(4!==r&&(27===r&&cj(e.type)&&(t=e.stateNode),null!==(e=e.child)))for(le(e,n,t),e=e.sibling;null!==e;)le(e,n,t),e=e.sibling}function ln(e){var n=e.stateNode,t=e.memoizedProps;try{for(var r=e.type,o=n.attributes;o.length;)n.removeAttributeNode(o[0]);cc(n,r,t),n[eN]=e,n[eD]=t}catch(n){sP(e,e.return,n)}}var lt=!1,lr=!1,lo=!1,la=\"function\"==typeof WeakSet?WeakSet:Set,li=null;function ll(e,n,t){var r=t.flags;switch(t.tag){case 0:case 11:case 15:ly(e,t),4&r&&i0(5,t);break;case 1:if(ly(e,t),4&r)if(e=t.stateNode,null===n)try{e.componentDidMount()}catch(e){sP(t,t.return,e)}else{var o=ic(t.type,n.memoizedProps);n=n.memoizedState;try{e.componentDidUpdate(o,n,e.__reactInternalSnapshotBeforeUpdate)}catch(e){sP(t,t.return,e)}}64&r&&i2(t),512&r&&i5(t,t.return);break;case 3:if(ly(e,t),64&r&&null!==(e=t.updateQueue)){if(n=null,null!==t.child)switch(t.child.tag){case 27:case 5:case 1:n=t.child.stateNode}try{oL(e,n)}catch(e){sP(t,t.return,e)}}break;case 27:null===n&&4&r&&ln(t);case 26:case 5:ly(e,t),null===n&&4&r&&i6(t),512&r&&i5(t,t.return);break;case 12:default:ly(e,t);break;case 31:ly(e,t),4&r&&lf(e,t);break;case 13:ly(e,t),4&r&&lp(e,t),64&r&&null!==(e=t.memoizedState)&&null!==(e=e.dehydrated)&&function(e,n){var t=e.ownerDocument;if(\"$~\"===e.data)e._reactRetry=n;else if(\"$?\"!==e.data||\"loading\"!==t.readyState)n();else{var r=function(){n(),t.removeEventListener(\"DOMContentLoaded\",r)};t.addEventListener(\"DOMContentLoaded\",r),e._reactRetry=r}}(e,t=sR.bind(null,t));break;case 22:if(!(r=null!==t.memoizedState||lt)){n=null!==n&&null!==n.memoizedState||lr,o=lt;var a=lr;lt=r,(lr=n)&&!a?function e(n,t,r){for(r=r&&0!=(8772&t.subtreeFlags),t=t.child;null!==t;){var o=t.alternate,a=n,i=t,l=i.flags;switch(i.tag){case 0:case 11:case 15:e(a,i,r),i0(4,i);break;case 1:if(e(a,i,r),\"function\"==typeof(a=(o=i).stateNode).componentDidMount)try{a.componentDidMount()}catch(e){sP(o,o.return,e)}if(null!==(a=(o=i).updateQueue)){var s=o.stateNode;try{var c=a.shared.hiddenCallbacks;if(null!==c)for(a.shared.hiddenCallbacks=null,a=0;a<c.length;a++)oz(c[a],s)}catch(e){sP(o,o.return,e)}}r&&64&l&&i2(i),i5(i,i.return);break;case 27:ln(i);case 26:case 5:e(a,i,r),r&&null===o&&4&l&&i6(i),i5(i,i.return);break;case 12:default:e(a,i,r);break;case 31:e(a,i,r),r&&4&l&&lf(a,i);break;case 13:e(a,i,r),r&&4&l&&lp(a,i);break;case 22:null===i.memoizedState&&e(a,i,r),i5(i,i.return);case 30:}t=t.sibling}}(e,t,0!=(8772&t.subtreeFlags)):ly(e,t),lt=o,lr=a}case 30:}}var ls=null,lc=!1;function lu(e,n,t){for(t=t.child;null!==t;)ld(e,n,t),t=t.sibling}function ld(e,n,t){if(ep&&\"function\"==typeof ep.onCommitFiberUnmount)try{ep.onCommitFiberUnmount(ef,t)}catch(e){}switch(t.tag){case 26:lr||i3(t,n),lu(e,n,t),t.memoizedState?t.memoizedState.count--:t.stateNode&&(t=t.stateNode).parentNode.removeChild(t);break;case 27:lr||i3(t,n);var r=ls,o=lc;cj(t.type)&&(ls=t.stateNode,lc=!1),lu(e,n,t),cR(t.stateNode),ls=r,lc=o;break;case 5:lr||i3(t,n);case 6:if(r=ls,o=lc,ls=null,lu(e,n,t),ls=r,lc=o,null!==ls)if(lc)try{(9===ls.nodeType?ls.body:\"HTML\"===ls.nodeName?ls.ownerDocument.body:ls).removeChild(t.stateNode)}catch(e){sP(t,n,e)}else try{ls.removeChild(t.stateNode)}catch(e){sP(t,n,e)}break;case 18:null!==ls&&(lc?(ck(9===(e=ls).nodeType?e.body:\"HTML\"===e.nodeName?e.ownerDocument.body:e,t.stateNode),uE(e)):ck(ls,t.stateNode));break;case 4:r=ls,o=lc,ls=t.stateNode.containerInfo,lc=!0,lu(e,n,t),ls=r,lc=o;break;case 0:case 11:case 14:case 15:lr||i1(2,t,n),lr||i1(4,t,n),lu(e,n,t);break;case 1:lr||(i3(t,n),\"function\"==typeof(r=t.stateNode).componentWillUnmount&&i4(t,n,r)),lu(e,n,t);break;case 21:default:lu(e,n,t);break;case 22:lr=(r=lr)||null!==t.memoizedState,lu(e,n,t),lr=r}}function lf(e,n){if(null===n.memoizedState&&null!==(e=n.alternate)&&null!==(e=e.memoizedState)){e=e.dehydrated;try{uE(e)}catch(e){sP(n,n.return,e)}}}function lp(e,n){if(null===n.memoizedState&&null!==(e=n.alternate)&&null!==(e=e.memoizedState)&&null!==(e=e.dehydrated))try{uE(e)}catch(e){sP(n,n.return,e)}}function lh(e,n){var t=function(e){switch(e.tag){case 31:case 13:case 19:var n=e.stateNode;return null===n&&(n=e.stateNode=new la),n;case 22:return null===(n=(e=e.stateNode)._retryCache)&&(n=e._retryCache=new la),n;default:throw Error(l(435,e.tag))}}(e);n.forEach(function(n){var r=sN.bind(null,e,n);t.has(n)||(t.add(n),n.then(r,r))})}function lg(e,n){var t=n.deletions;if(null!==t)for(var r=0;r<t.length;r++){var o=t[r],a=e,i=n,s=i;e:for(;null!==s;){switch(s.tag){case 27:if(cj(s.type)){ls=s.stateNode,lc=!1;break e}break;case 5:ls=s.stateNode,lc=!1;break e;case 3:case 4:ls=s.stateNode.containerInfo,lc=!0;break e}s=s.return}if(null===ls)throw Error(l(160));ld(a,i,o),ls=null,lc=!1,null!==(a=o.alternate)&&(a.return=null),o.return=null}if(13878&n.subtreeFlags)for(n=n.child;null!==n;)lv(n,e),n=n.sibling}var lm=null;function lv(e,n){var t=e.alternate,r=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:lg(n,e),lb(e),4&r&&(i1(3,e,e.return),i0(3,e),i1(5,e,e.return));break;case 1:lg(n,e),lb(e),512&r&&(lr||null===t||i3(t,t.return)),64&r&<&&null!==(e=e.updateQueue)&&null!==(r=e.callbacks)&&(t=e.shared.hiddenCallbacks,e.shared.hiddenCallbacks=null===t?r:t.concat(r));break;case 26:var o=lm;if(lg(n,e),lb(e),512&r&&(lr||null===t||i3(t,t.return)),4&r){var a=null!==t?t.memoizedState:null;if(r=e.memoizedState,null===t)if(null===r)if(null===e.stateNode){e:{r=e.type,t=e.memoizedProps,o=o.ownerDocument||o;n:switch(r){case\"title\":(!(a=o.getElementsByTagName(\"title\")[0])||a[eU]||a[eN]||\"http://www.w3.org/2000/svg\"===a.namespaceURI||a.hasAttribute(\"itemprop\"))&&(a=o.createElement(r),o.head.insertBefore(a,o.querySelector(\"head > title\"))),cc(a,r,t),a[eN]=e,eY(a),r=a;break e;case\"link\":var i=cG(\"link\",\"href\",o).get(r+(t.href||\"\"));if(i){for(var s=0;s<i.length;s++)if((a=i[s]).getAttribute(\"href\")===(null==t.href||\"\"===t.href?null:t.href)&&a.getAttribute(\"rel\")===(null==t.rel?null:t.rel)&&a.getAttribute(\"title\")===(null==t.title?null:t.title)&&a.getAttribute(\"crossorigin\")===(null==t.crossOrigin?null:t.crossOrigin)){i.splice(s,1);break n}}cc(a=o.createElement(r),r,t),o.head.appendChild(a);break;case\"meta\":if(i=cG(\"meta\",\"content\",o).get(r+(t.content||\"\"))){for(s=0;s<i.length;s++)if((a=i[s]).getAttribute(\"content\")===(null==t.content?null:\"\"+t.content)&&a.getAttribute(\"name\")===(null==t.name?null:t.name)&&a.getAttribute(\"property\")===(null==t.property?null:t.property)&&a.getAttribute(\"http-equiv\")===(null==t.httpEquiv?null:t.httpEquiv)&&a.getAttribute(\"charset\")===(null==t.charSet?null:t.charSet)){i.splice(s,1);break n}}cc(a=o.createElement(r),r,t),o.head.appendChild(a);break;default:throw Error(l(468,r))}a[eN]=e,eY(a),r=a}e.stateNode=r}else cJ(o,e.type,e.stateNode);else e.stateNode=cZ(o,r,e.memoizedProps);else a!==r?(null===a?null!==t.stateNode&&(t=t.stateNode).parentNode.removeChild(t):a.count--,null===r?cJ(o,e.type,e.stateNode):cZ(o,r,e.memoizedProps)):null===r&&null!==e.stateNode&&i9(e,e.memoizedProps,t.memoizedProps)}break;case 27:lg(n,e),lb(e),512&r&&(lr||null===t||i3(t,t.return)),null!==t&&4&r&&i9(e,e.memoizedProps,t.memoizedProps);break;case 5:if(lg(n,e),lb(e),512&r&&(lr||null===t||i3(t,t.return)),32&e.flags){o=e.stateNode;try{ns(o,\"\")}catch(n){sP(e,e.return,n)}}4&r&&null!=e.stateNode&&(o=e.memoizedProps,i9(e,o,null!==t?t.memoizedProps:o)),1024&r&&(lo=!0);break;case 6:if(lg(n,e),lb(e),4&r){if(null===e.stateNode)throw Error(l(162));r=e.memoizedProps,t=e.stateNode;try{t.nodeValue=r}catch(n){sP(e,e.return,n)}}break;case 3:if(cQ=null,o=lm,lm=cB(n.containerInfo),lg(n,e),lm=o,lb(e),4&r&&null!==t&&t.memoizedState.isDehydrated)try{uE(n.containerInfo)}catch(n){sP(e,e.return,n)}lo&&(lo=!1,function e(n){if(1024&n.subtreeFlags)for(n=n.child;null!==n;){var t=n;e(t),5===t.tag&&1024&t.flags&&t.stateNode.reset(),n=n.sibling}}(e));break;case 4:r=lm,lm=cB(e.stateNode.containerInfo),lg(n,e),lb(e),lm=r;break;case 12:default:lg(n,e),lb(e);break;case 31:case 19:lg(n,e),lb(e),4&r&&null!==(r=e.updateQueue)&&(e.updateQueue=null,lh(e,r));break;case 13:lg(n,e),lb(e),8192&e.child.flags&&null!==e.memoizedState!=(null!==t&&null!==t.memoizedState)&&(lJ=er()),4&r&&null!==(r=e.updateQueue)&&(e.updateQueue=null,lh(e,r));break;case 22:o=null!==e.memoizedState;var c=null!==t&&null!==t.memoizedState,u=lt,d=lr;if(lt=u||o,lr=d||c,lg(n,e),lr=d,lt=u,lb(e),8192&r)e:for((n=e.stateNode)._visibility=o?-2&n._visibility:1|n._visibility,o&&(null===t||c||lt||lr||function e(n){for(n=n.child;null!==n;){var t=n;switch(t.tag){case 0:case 11:case 14:case 15:i1(4,t,t.return),e(t);break;case 1:i3(t,t.return);var r=t.stateNode;\"function\"==typeof r.componentWillUnmount&&i4(t,t.return,r),e(t);break;case 27:cR(t.stateNode);case 26:case 5:i3(t,t.return),e(t);break;case 22:null===t.memoizedState&&e(t);break;default:e(t)}n=n.sibling}}(e)),t=null,n=e;;){if(5===n.tag||26===n.tag){if(null===t){c=t=n;try{if(a=c.stateNode,o)i=a.style,\"function\"==typeof i.setProperty?i.setProperty(\"display\",\"none\",\"important\"):i.display=\"none\";else{s=c.stateNode;var f=c.memoizedProps.style,p=null!=f&&f.hasOwnProperty(\"display\")?f.display:null;s.style.display=null==p||\"boolean\"==typeof p?\"\":(\"\"+p).trim()}}catch(e){sP(c,c.return,e)}}}else if(6===n.tag){if(null===t){c=n;try{c.stateNode.nodeValue=o?\"\":c.memoizedProps}catch(e){sP(c,c.return,e)}}}else if(18===n.tag){if(null===t){c=n;try{var h=c.stateNode;o?cA(h,!0):cA(c.stateNode,!1)}catch(e){sP(c,c.return,e)}}}else if((22!==n.tag&&23!==n.tag||null===n.memoizedState||n===e)&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)break e;t===n&&(t=null),n=n.return}t===n&&(t=null),n.sibling.return=n.return,n=n.sibling}4&r&&null!==(r=e.updateQueue)&&null!==(t=r.retryQueue)&&(r.retryQueue=null,lh(e,t));case 30:case 21:}}function lb(e){var n=e.flags;if(2&n){try{for(var t,r=e.return;null!==r;){if(i8(r)){t=r;break}r=r.return}if(null==t)throw Error(l(160));switch(t.tag){case 27:var o=t.stateNode,a=i7(e);le(e,a,o);break;case 5:var i=t.stateNode;32&t.flags&&(ns(i,\"\"),t.flags&=-33);var s=i7(e);le(e,s,i);break;case 3:case 4:var c=t.stateNode.containerInfo,u=i7(e);!function e(n,t,r){var o=n.tag;if(5===o||6===o)n=n.stateNode,t?(9===r.nodeType?r.body:\"HTML\"===r.nodeName?r.ownerDocument.body:r).insertBefore(n,t):((t=9===r.nodeType?r.body:\"HTML\"===r.nodeName?r.ownerDocument.body:r).appendChild(n),null!=(r=r._reactRootContainer)||null!==t.onclick||(t.onclick=nm));else if(4!==o&&(27===o&&cj(n.type)&&(r=n.stateNode,t=null),null!==(n=n.child)))for(e(n,t,r),n=n.sibling;null!==n;)e(n,t,r),n=n.sibling}(e,u,c);break;default:throw Error(l(161))}}catch(n){sP(e,e.return,n)}e.flags&=-3}4096&n&&(e.flags&=-4097)}function ly(e,n){if(8772&n.subtreeFlags)for(n=n.child;null!==n;)ll(e,n.alternate,n),n=n.sibling}function lx(e,n){var t=null;null!==e&&null!==e.memoizedState&&null!==e.memoizedState.cachePool&&(t=e.memoizedState.cachePool.pool),e=null,null!==n.memoizedState&&null!==n.memoizedState.cachePool&&(e=n.memoizedState.cachePool.pool),e!==t&&(null!=e&&e.refCount++,null!=t&&r2(t))}function lw(e,n){e=null,null!==n.alternate&&(e=n.alternate.memoizedState.cache),(n=n.memoizedState.cache)!==e&&(n.refCount++,null!=e&&r2(e))}function lj(e,n,t,r){if(10256&n.subtreeFlags)for(n=n.child;null!==n;)lk(e,n,t,r),n=n.sibling}function lk(e,n,t,r){var o=n.flags;switch(n.tag){case 0:case 11:case 15:lj(e,n,t,r),2048&o&&i0(9,n);break;case 1:case 31:case 13:default:lj(e,n,t,r);break;case 3:lj(e,n,t,r),2048&o&&(e=null,null!==n.alternate&&(e=n.alternate.memoizedState.cache),(n=n.memoizedState.cache)!==e&&(n.refCount++,null!=e&&r2(e)));break;case 12:if(2048&o){lj(e,n,t,r),e=n.stateNode;try{var a=n.memoizedProps,i=a.id,l=a.onPostCommit;\"function\"==typeof l&&l(i,null===n.alternate?\"mount\":\"update\",e.passiveEffectDuration,-0)}catch(e){sP(n,n.return,e)}}else lj(e,n,t,r);break;case 23:break;case 22:a=n.stateNode,i=n.alternate,null!==n.memoizedState?2&a._visibility?lj(e,n,t,r):lA(e,n):2&a._visibility?lj(e,n,t,r):(a._visibility|=2,function e(n,t,r,o,a){for(a=a&&0!=(10256&t.subtreeFlags),t=t.child;null!==t;){var i=t,l=i.flags;switch(i.tag){case 0:case 11:case 15:e(n,i,r,o,a),i0(8,i);break;case 23:break;case 22:var s=i.stateNode;null!==i.memoizedState?2&s._visibility?e(n,i,r,o,a):lA(n,i):(s._visibility|=2,e(n,i,r,o,a)),a&&2048&l&&lx(i.alternate,i);break;case 24:e(n,i,r,o,a),a&&2048&l&&lw(i.alternate,i);break;default:e(n,i,r,o,a)}t=t.sibling}}(e,n,t,r,0!=(10256&n.subtreeFlags))),2048&o&&lx(i,n);break;case 24:lj(e,n,t,r),2048&o&&lw(n.alternate,n)}}function lA(e,n){if(10256&n.subtreeFlags)for(n=n.child;null!==n;){var t=n,r=t.flags;switch(t.tag){case 22:lA(e,t),2048&r&&lx(t.alternate,t);break;case 24:lA(e,t),2048&r&&lw(t.alternate,t);break;default:lA(e,t)}n=n.sibling}}var lO=8192;function lC(e){if(e.subtreeFlags&lO)for(e=e.child;null!==e;)lS(e),e=e.sibling}function lS(e){switch(e.tag){case 26:lC(e),e.flags&lO&&null!==e.memoizedState&&function(e,n,t){if(null===c1)throw Error(l(475));var r=c1;if(\"stylesheet\"===n.type&&(\"string\"!=typeof t.media||!1!==matchMedia(t.media).matches)&&0==(4&n.state.loading)){if(null===n.instance){var o=cU(t.href),a=e.querySelector(cV(o));if(a){null!==(e=a._p)&&\"object\"==typeof e&&\"function\"==typeof e.then&&(r.count++,r=c2.bind(r),e.then(r,r)),n.state.loading|=4,n.instance=a,eY(a);return}a=e.ownerDocument||e,t=cq(t),(o=cN.get(o))&&cX(t,o),eY(a=a.createElement(\"link\"));var i=a;i._p=new Promise(function(e,n){i.onload=e,i.onerror=n}),cc(a,\"link\",t),n.instance=a}null===r.stylesheets&&(r.stylesheets=new Map),r.stylesheets.set(n,e),(e=n.state.preload)&&0==(3&n.state.loading)&&(r.count++,n=c2.bind(r),e.addEventListener(\"load\",n),e.addEventListener(\"error\",n))}}(lm,e.memoizedState,e.memoizedProps);break;case 5:default:lC(e);break;case 3:case 4:var n=lm;lm=cB(e.stateNode.containerInfo),lC(e),lm=n;break;case 22:null===e.memoizedState&&(null!==(n=e.alternate)&&null!==n.memoizedState?(n=lO,lO=0x1000000,lC(e),lO=n):lC(e))}}function lE(e){var n=e.alternate;if(null!==n&&null!==(e=n.child)){n.child=null;do n=e.sibling,e.sibling=null,e=n;while(null!==e)}}function l_(e){var n=e.deletions;if(0!=(16&e.flags)){if(null!==n)for(var t=0;t<n.length;t++){var r=n[t];li=r,lz(r,e)}lE(e)}if(10256&e.subtreeFlags)for(e=e.child;null!==e;)lP(e),e=e.sibling}function lP(e){switch(e.tag){case 0:case 11:case 15:l_(e),2048&e.flags&&i1(9,e,e.return);break;case 3:case 12:default:l_(e);break;case 22:var n=e.stateNode;null!==e.memoizedState&&2&n._visibility&&(null===e.return||13!==e.return.tag)?(n._visibility&=-3,function e(n){var t=n.deletions;if(0!=(16&n.flags)){if(null!==t)for(var r=0;r<t.length;r++){var o=t[r];li=o,lz(o,n)}lE(n)}for(n=n.child;null!==n;){switch((t=n).tag){case 0:case 11:case 15:i1(8,t,t.return),e(t);break;case 22:2&(r=t.stateNode)._visibility&&(r._visibility&=-3,e(t));break;default:e(t)}n=n.sibling}}(e)):l_(e)}}function lz(e,n){for(;null!==li;){var t=li;switch(t.tag){case 0:case 11:case 15:i1(8,t,n);break;case 23:case 22:if(null!==t.memoizedState&&null!==t.memoizedState.cachePool){var r=t.memoizedState.cachePool.pool;null!=r&&r.refCount++}break;case 24:r2(t.memoizedState.cache)}if(null!==(r=t.child))r.return=t,li=r;else for(t=e;null!==li;){var o=(r=li).sibling,a=r.return;if(!function e(n){var t=n.alternate;null!==t&&(n.alternate=null,e(t)),n.child=null,n.deletions=null,n.sibling=null,5===n.tag&&null!==(t=n.stateNode)&&eV(t),n.stateNode=null,n.return=null,n.dependencies=null,n.memoizedProps=null,n.memoizedState=null,n.pendingProps=null,n.stateNode=null,n.updateQueue=null}(r),r===t){li=null;break}if(null!==o){o.return=a,li=o;break}li=a}}}var lL={getCacheForType:function(e){var n=rY(r0),t=n.data.get(e);return void 0===t&&(t=e(),n.data.set(e,t)),t},cacheSignal:function(){return rY(r0).controller.signal}},lT=\"function\"==typeof WeakMap?WeakMap:Map,lR=0,lN=null,lD=null,lB=0,lM=0,lI=null,lH=!1,lF=!1,lU=!1,lV=0,lq=0,lW=0,l$=0,lZ=0,lY=0,lX=0,lK=null,lQ=null,lG=!1,lJ=0,l0=1/0,l1=null,l2=null,l4=0,l5=null,l3=null,l6=0,l9=0,l8=null,l7=null,se=0,sn=null;function st(){return 0!=(2&lR)&&0!==lB?lB&-lB:null!==L.T?sX():eL()}function sr(){0===lY&&(lY=0==(0x20000000&lB)||rS?ek():0x20000000);var e=oM.current;return null!==e&&(e.flags|=32),lY}function so(e,n,t){(e===lN&&(2===lM||9===lM)||null!==e.cancelPendingCommit)&&(su(e,0),sl(e,lB,lY,!1)),eC(e,t),(0==(2&lR)||e!==lN)&&(e===lN&&(0==(2&lR)&&(l$|=t),4===lq&&sl(e,lB,lY,!1)),sU(e))}function sa(e,n,t){if(0!=(6&lR))throw Error(l(327));for(var r=!t&&0==(124&n)&&0==(n&e.expiredLanes)||ej(e,n),o=r?function(e,n){var t=lR;lR|=2;var r=sp(),o=sh();lN!==e||lB!==n?(l1=null,l0=er()+500,su(e,n)):lF=ej(e,n);e:for(;;)try{if(0!==lM&&null!==lD){n=lD;var a=lI;n:switch(lM){case 1:lM=0,lI=null,sy(e,n,a,1);break;case 2:case 9:if(ol(a)){lM=0,lI=null,sb(n);break}n=function(){2!==lM&&9!==lM||lN!==e||(lM=7),sU(e)},a.then(n,n);break e;case 3:lM=7;break e;case 4:lM=5;break e;case 7:ol(a)?(lM=0,lI=null,sb(n)):(lM=0,lI=null,sy(e,n,a,7));break;case 5:var i=null;switch(lD.tag){case 26:i=lD.memoizedState;case 5:case 27:var s=lD;if(i?c0(i):s.stateNode.complete){lM=0,lI=null;var c=s.sibling;if(null!==c)lD=c;else{var u=s.return;null!==u?(lD=u,sx(u)):lD=null}break n}}lM=0,lI=null,sy(e,n,a,5);break;case 6:lM=0,lI=null,sy(e,n,a,6);break;case 8:sc(),lq=6;break e;default:throw Error(l(462))}}for(;null!==lD&&!en();)sv(lD);break}catch(n){sd(e,n)}return(rH=rI=null,L.H=r,L.A=o,lR=t,null!==lD)?0:(lN=null,lB=0,t2(),lq)}(e,n):sm(e,n,!0),a=r;;){if(0===o)lF&&!r&&sl(e,n,0,!1);else{if(t=e.current.alternate,a&&!function(e){for(var n=e;;){var t=n.tag;if((0===t||11===t||15===t)&&16384&n.flags&&null!==(t=n.updateQueue)&&null!==(t=t.stores))for(var r=0;r<t.length;r++){var o=t[r],a=o.getSnapshot;o=o.value;try{if(!tO(a(),o))return!1}catch(e){return!1}}if(t=n.child,16384&n.subtreeFlags&&null!==t)t.return=n,n=t;else{if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return!0;n=n.return}n.sibling.return=n.return,n=n.sibling}}return!0}(t)){o=sm(e,n,!1),a=!1;continue}if(2===o){if(a=n,e.errorRecoveryDisabledLanes&a)var i=0;else i=0!=(i=-0x20000001&e.pendingLanes)?i:0x20000000&i?0x20000000:0;if(0!==i){n=i;e:{o=lK;var s=e.current.memoizedState.isDehydrated;if(s&&(su(e,i).flags|=256),2!==(i=sm(e,i,!1))){if(lU&&!s){e.errorRecoveryDisabledLanes|=a,l$|=a,o=4;break e}a=lQ,lQ=o,null!==a&&(null===lQ?lQ=a:lQ.push.apply(lQ,a))}o=i}if(a=!1,2!==o)continue}}if(1===o){su(e,0),sl(e,n,0,!0);break}e:{switch(r=e,a=o){case 0:case 1:throw Error(l(345));case 4:if((4194048&n)!==n)break;case 6:sl(r,n,lY,!lH);break e;case 2:lQ=null;break;case 3:case 5:break;default:throw Error(l(329))}if((0x3c00000&n)===n&&10<(o=lJ+300-er())){if(sl(r,n,lY,!lH),0!==ew(r,0,!0))break e;r.timeoutHandle=cv(si.bind(null,r,t,lQ,l1,lG,n,lY,l$,lX,lH,a,2,-0,0),o);break e}si(r,t,lQ,l1,lG,n,lY,l$,lX,lH,a,0,-0,0)}}break}sU(e)}function si(e,n,t,r,o,a,i,s,c,u,d,f,p,h){if(e.timeoutHandle=-1,(8192&(f=n.subtreeFlags)||0x1002000==(0x1002000&f))&&(c1={stylesheets:null,count:0,unsuspend:nm},lS(n),null!==(f=function(){if(null===c1)throw Error(l(475));var e=c1;return e.stylesheets&&0===e.count&&c5(e,e.stylesheets),0<e.count?function(n){var t=setTimeout(function(){if(e.stylesheets&&c5(e,e.stylesheets),e.unsuspend){var n=e.unsuspend;e.unsuspend=null,n()}},6e4);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(t)}}:null}()))){e.cancelPendingCommit=f(sj.bind(null,e,n,a,t,r,o,i,s,c,d,1,p,h)),sl(e,a,i,!u);return}sj(e,n,a,t,r,o,i,s,c)}function sl(e,n,t,r){n&=~lZ,n&=~l$,e.suspendedLanes|=n,e.pingedLanes&=~n,r&&(e.warmLanes|=n),r=e.expirationTimes;for(var o=n;0<o;){var a=31-eg(o),i=1<<a;r[a]=-1,o&=~i}0!==t&&eS(e,t,n)}function ss(){return 0!=(6&lR)||(sV(0,!1),!1)}function sc(){if(null!==lD){if(0===lM)var e=lD.return;else e=lD,rH=rI=null,at(e),of=null,op=0,e=lD;for(;null!==e;)iJ(e.alternate,e),e=e.return;lD=null}}function su(e,n){var t=e.timeoutHandle;-1!==t&&(e.timeoutHandle=-1,cb(t)),null!==(t=e.cancelPendingCommit)&&(e.cancelPendingCommit=null,t()),sc(),lN=e,lD=t=rt(e.current,null),lB=n,lM=0,lI=null,lH=!1,lF=ej(e,n),lU=!1,lX=lY=lZ=l$=lW=lq=0,lQ=lK=null,lG=!1,0!=(8&n)&&(n|=32&n);var r=e.entangledLanes;if(0!==r)for(e=e.entanglements,r&=n;0<r;){var o=31-eg(r),a=1<<o;n|=e[o],r&=~a}return lV=n,t2(),t}function sd(e,n){oY=null,L.H=ie,n===or||n===oa?(n=ou(),lM=3):n===oo?(n=ou(),lM=4):lM=n===iy?8:null!==n&&\"object\"==typeof n&&\"function\"==typeof n.then?6:1,lI=n,null===lD&&(lq=1,ih(e,ru(n,e.current)))}function sf(){var e=oM.current;return null===e||((4194048&lB)===lB?null===oI:((0x3c00000&lB)===lB||0!=(0x20000000&lB))&&e===oI)}function sp(){var e=L.H;return L.H=ie,null===e?ie:e}function sh(){var e=L.A;return L.A=lL,e}function sg(){lq=4,lH||(4194048&lB)!==lB&&null!==oM.current||(lF=!0),0==(0x7ffffff&lW)&&0==(0x7ffffff&l$)||null===lN||sl(lN,lB,lY,!1)}function sm(e,n,t){var r=lR;lR|=2;var o=sp(),a=sh();(lN!==e||lB!==n)&&(l1=null,su(e,n)),n=!1;var i=lq;e:for(;;)try{if(0!==lM&&null!==lD){var l=lD,s=lI;switch(lM){case 8:sc(),i=6;break e;case 3:case 2:case 9:case 6:null===oM.current&&(n=!0);var c=lM;if(lM=0,lI=null,sy(e,l,s,c),t&&lF){i=0;break e}break;default:c=lM,lM=0,lI=null,sy(e,l,s,c)}}(function(){for(;null!==lD;)sv(lD)})(),i=lq;break}catch(n){sd(e,n)}return n&&e.shellSuspendCounter++,rH=rI=null,lR=r,L.H=o,L.A=a,null===lD&&(lN=null,lB=0,t2()),i}function sv(e){var n=i$(e.alternate,e,lV);e.memoizedProps=e.pendingProps,null===n?sx(e):lD=n}function sb(e){var n=e,t=n.alternate;switch(n.tag){case 15:case 0:n=iz(t,n,n.pendingProps,n.type,void 0,lB);break;case 11:n=iz(t,n,n.pendingProps,n.type.render,n.ref,lB);break;case 5:at(n);default:iJ(t,n),n=i$(t,n=lD=rr(n,lV),lV)}e.memoizedProps=e.pendingProps,null===n?sx(e):lD=n}function sy(e,n,t,r){rH=rI=null,at(n),of=null,op=0;var o=n.return;try{if(function(e,n,t,r,o){if(t.flags|=32768,null!==r&&\"object\"==typeof r&&\"function\"==typeof r.then){if(null!==(n=t.alternate)&&rW(n,t,o,!0),null!==(t=oM.current)){switch(t.tag){case 31:case 13:return null===oI?sg():null===t.alternate&&0===lq&&(lq=3),t.flags&=-257,t.flags|=65536,t.lanes=o,r===oi?t.flags|=16384:(null===(n=t.updateQueue)?t.updateQueue=new Set([r]):n.add(r),sz(e,r,o)),!1;case 22:return t.flags|=65536,r===oi?t.flags|=16384:(null===(n=t.updateQueue)?(n={transitions:null,markerInstances:null,retryQueue:new Set([r])},t.updateQueue=n):null===(t=n.retryQueue)?n.retryQueue=new Set([r]):t.add(r),sz(e,r,o)),!1}throw Error(l(435,t.tag))}return sz(e,r,o),sg(),!1}if(rS)return null!==(n=oM.current)?(0==(65536&n.flags)&&(n.flags|=256),n.flags|=65536,n.lanes=o,r!==rP&&rB(ru(e=Error(l(422),{cause:r}),t))):(r!==rP&&rB(ru(n=Error(l(423),{cause:r}),t)),e=e.current.alternate,e.flags|=65536,o&=-o,e.lanes|=o,r=ru(r,t),o=im(e.stateNode,r,o),oS(e,o),4!==lq&&(lq=2)),!1;var a=Error(l(520),{cause:r});if(a=ru(a,t),null===lK?lK=[a]:lK.push(a),4!==lq&&(lq=2),null===n)return!0;r=ru(r,t),t=n;do{switch(t.tag){case 3:return t.flags|=65536,e=o&-o,t.lanes|=e,e=im(t.stateNode,r,e),oS(t,e),!1;case 1:if(n=t.type,a=t.stateNode,0==(128&t.flags)&&(\"function\"==typeof n.getDerivedStateFromError||null!==a&&\"function\"==typeof a.componentDidCatch&&(null===l2||!l2.has(a))))return t.flags|=65536,o&=-o,t.lanes|=o,ib(o=iv(o),e,t,r),oS(t,o),!1}t=t.return}while(null!==t);return!1}(e,o,n,t,lB)){lq=1,ih(e,ru(t,e.current)),lD=null;return}}catch(n){if(null!==o)throw lD=o,n;lq=1,ih(e,ru(t,e.current)),lD=null;return}32768&n.flags?(rS||1===r?e=!0:lF||0!=(0x20000000&lB)?e=!1:(lH=e=!0,(2===r||9===r||3===r||6===r)&&null!==(r=oM.current)&&13===r.tag&&(r.flags|=16384)),sw(n,e)):sx(n)}function sx(e){var n=e;do{if(0!=(32768&n.flags))return void sw(n,lH);e=n.return;var t=function(e,n,t){var r=n.pendingProps;switch(rk(n),n.tag){case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:case 1:return iG(n),null;case 3:return t=n.stateNode,r=null,null!==e&&(r=e.memoizedState.cache),n.memoizedState.cache!==r&&(n.flags|=2048),rU(r0),W(),t.pendingContext&&(t.context=t.pendingContext,t.pendingContext=null),(null===e||null===e.child)&&(rR(n)?iZ(n):null===e||e.memoizedState.isDehydrated&&0==(256&n.flags)||(n.flags|=1024,rD())),iG(n),null;case 26:var o=n.type,a=n.memoizedState;return null===e?(iZ(n),null!==a?(iG(n),iX(n,a)):(iG(n),iY(n,o,null,r,t))):a?a!==e.memoizedState?(iZ(n),iG(n),iX(n,a)):(iG(n),n.flags&=-0x1000001):((e=e.memoizedProps)!==r&&iZ(n),iG(n),iY(n,o,e,r,t)),null;case 27:if(Z(n),t=U.current,o=n.type,null!==e&&null!=n.stateNode)e.memoizedProps!==r&&iZ(n);else{if(!r){if(null===n.stateNode)throw Error(l(166));return iG(n),null}e=H.current,rR(n)?rL(n,e):(n.stateNode=e=cT(o,r,t),iZ(n))}return iG(n),null;case 5:if(Z(n),o=n.type,null!==e&&null!=n.stateNode)e.memoizedProps!==r&&iZ(n);else{if(!r){if(null===n.stateNode)throw Error(l(166));return iG(n),null}if(a=H.current,rR(n))rL(n,a);else{var i=cf(U.current);switch(a){case 1:a=i.createElementNS(\"http://www.w3.org/2000/svg\",o);break;case 2:a=i.createElementNS(\"http://www.w3.org/1998/Math/MathML\",o);break;default:switch(o){case\"svg\":a=i.createElementNS(\"http://www.w3.org/2000/svg\",o);break;case\"math\":a=i.createElementNS(\"http://www.w3.org/1998/Math/MathML\",o);break;case\"script\":(a=i.createElement(\"div\")).innerHTML=\"<script><\\/script>\",a=a.removeChild(a.firstChild);break;case\"select\":a=\"string\"==typeof r.is?i.createElement(\"select\",{is:r.is}):i.createElement(\"select\"),r.multiple?a.multiple=!0:r.size&&(a.size=r.size);break;default:a=\"string\"==typeof r.is?i.createElement(o,{is:r.is}):i.createElement(o)}}a[eN]=n,a[eD]=r;e:for(i=n.child;null!==i;){if(5===i.tag||6===i.tag)a.appendChild(i.stateNode);else if(4!==i.tag&&27!==i.tag&&null!==i.child){i.child.return=i,i=i.child;continue}if(i===n)break;for(;null===i.sibling;){if(null===i.return||i.return===n)break e;i=i.return}i.sibling.return=i.return,i=i.sibling}switch(n.stateNode=a,cc(a,o,r),o){case\"button\":case\"input\":case\"select\":case\"textarea\":r=!!r.autoFocus;break;case\"img\":r=!0;break;default:r=!1}r&&iZ(n)}}return iG(n),iY(n,n.type,null===e?null:e.memoizedProps,n.pendingProps,t),null;case 6:if(e&&null!=n.stateNode)e.memoizedProps!==r&&iZ(n);else{if(\"string\"!=typeof r&&null===n.stateNode)throw Error(l(166));if(e=U.current,rR(n)){if(e=n.stateNode,t=n.memoizedProps,r=null,null!==(o=rO))switch(o.tag){case 27:case 5:r=o.memoizedProps}e[eN]=n,(e=!!(e.nodeValue===t||null!==r&&!0===r.suppressHydrationWarning||ci(e.nodeValue,t)))||rz(n,!0)}else(e=cf(e).createTextNode(r))[eN]=n,n.stateNode=e}return iG(n),null;case 31:if(t=n.memoizedState,null===e||null!==e.memoizedState){if(r=rR(n),null!==t){if(null===e){if(!r)throw Error(l(318));if(!(e=null!==(e=n.memoizedState)?e.dehydrated:null))throw Error(l(557));e[eN]=n}else rN(),0==(128&n.flags)&&(n.memoizedState=null),n.flags|=4;iG(n),e=!1}else t=rD(),null!==e&&null!==e.memoizedState&&(e.memoizedState.hydrationErrors=t),e=!0;if(!e){if(256&n.flags)return oq(n),n;return oq(n),null}if(0!=(128&n.flags))throw Error(l(558))}return iG(n),null;case 13:if(r=n.memoizedState,null===e||null!==e.memoizedState&&null!==e.memoizedState.dehydrated){if(o=rR(n),null!==r&&null!==r.dehydrated){if(null===e){if(!o)throw Error(l(318));if(!(o=null!==(o=n.memoizedState)?o.dehydrated:null))throw Error(l(317));o[eN]=n}else rN(),0==(128&n.flags)&&(n.memoizedState=null),n.flags|=4;iG(n),o=!1}else o=rD(),null!==e&&null!==e.memoizedState&&(e.memoizedState.hydrationErrors=o),o=!0;if(!o){if(256&n.flags)return oq(n),n;return oq(n),null}}if(oq(n),0!=(128&n.flags))return n.lanes=t,n;return t=null!==r,e=null!==e&&null!==e.memoizedState,t&&(r=n.child,o=null,null!==r.alternate&&null!==r.alternate.memoizedState&&null!==r.alternate.memoizedState.cachePool&&(o=r.alternate.memoizedState.cachePool.pool),a=null,null!==r.memoizedState&&null!==r.memoizedState.cachePool&&(a=r.memoizedState.cachePool.pool),a!==o&&(r.flags|=2048)),t!==e&&t&&(n.child.flags|=8192),iK(n,n.updateQueue),iG(n),null;case 4:return W(),null===e&&s6(n.stateNode.containerInfo),iG(n),null;case 10:return rU(n.type),iG(n),null;case 19:if(M(oW),null===(r=n.memoizedState))return iG(n),null;if(o=0!=(128&n.flags),null===(a=r.rendering))if(o)iQ(r,!1);else{if(0!==lq||null!==e&&0!=(128&e.flags))for(e=n.child;null!==e;){if(null!==(a=o$(e))){for(n.flags|=128,iQ(r,!1),n.updateQueue=e=a.updateQueue,iK(n,e),n.subtreeFlags=0,e=t,t=n.child;null!==t;)rr(t,e),t=t.sibling;return I(oW,1&oW.current|2),rS&&rx(n,r.treeForkCount),n.child}e=e.sibling}null!==r.tail&&er()>l0&&(n.flags|=128,o=!0,iQ(r,!1),n.lanes=4194304)}else{if(!o)if(null!==(e=o$(a))){if(n.flags|=128,o=!0,n.updateQueue=e=e.updateQueue,iK(n,e),iQ(r,!0),null===r.tail&&\"hidden\"===r.tailMode&&!a.alternate&&!rS)return iG(n),null}else 2*er()-r.renderingStartTime>l0&&0x20000000!==t&&(n.flags|=128,o=!0,iQ(r,!1),n.lanes=4194304);r.isBackwards?(a.sibling=n.child,n.child=a):(null!==(e=r.last)?e.sibling=a:n.child=a,r.last=a)}if(null!==r.tail)return e=r.tail,r.rendering=e,r.tail=e.sibling,r.renderingStartTime=er(),e.sibling=null,t=oW.current,I(oW,o?1&t|2:1&t),rS&&rx(n,r.treeForkCount),e;return iG(n),null;case 22:case 23:return oq(n),oB(),r=null!==n.memoizedState,null!==e?null!==e.memoizedState!==r&&(n.flags|=8192):r&&(n.flags|=8192),r?0!=(0x20000000&t)&&0==(128&n.flags)&&(iG(n),6&n.subtreeFlags&&(n.flags|=8192)):iG(n),null!==(t=n.updateQueue)&&iK(n,t.retryQueue),t=null,null!==e&&null!==e.memoizedState&&null!==e.memoizedState.cachePool&&(t=e.memoizedState.cachePool.pool),r=null,null!==n.memoizedState&&null!==n.memoizedState.cachePool&&(r=n.memoizedState.cachePool.pool),r!==t&&(n.flags|=2048),null!==e&&M(r7),null;case 24:return t=null,null!==e&&(t=e.memoizedState.cache),n.memoizedState.cache!==t&&(n.flags|=2048),rU(r0),iG(n),null;case 25:case 30:return null}throw Error(l(156,n.tag))}(n.alternate,n,lV);if(null!==t){lD=t;return}if(null!==(n=n.sibling)){lD=n;return}lD=n=e}while(null!==n);0===lq&&(lq=5)}function sw(e,n){do{var t=function(e,n){switch(rk(n),n.tag){case 1:return 65536&(e=n.flags)?(n.flags=-65537&e|128,n):null;case 3:return rU(r0),W(),0!=(65536&(e=n.flags))&&0==(128&e)?(n.flags=-65537&e|128,n):null;case 26:case 27:case 5:return Z(n),null;case 31:if(null!==n.memoizedState){if(oq(n),null===n.alternate)throw Error(l(340));rN()}return 65536&(e=n.flags)?(n.flags=-65537&e|128,n):null;case 13:if(oq(n),null!==(e=n.memoizedState)&&null!==e.dehydrated){if(null===n.alternate)throw Error(l(340));rN()}return 65536&(e=n.flags)?(n.flags=-65537&e|128,n):null;case 19:return M(oW),null;case 4:return W(),null;case 10:return rU(n.type),null;case 22:case 23:return oq(n),oB(),null!==e&&M(r7),65536&(e=n.flags)?(n.flags=-65537&e|128,n):null;case 24:return rU(r0),null;default:return null}}(e.alternate,e);if(null!==t){t.flags&=32767,lD=t;return}if(null!==(t=e.return)&&(t.flags|=32768,t.subtreeFlags=0,t.deletions=null),!n&&null!==(e=e.sibling)){lD=e;return}lD=e=t}while(null!==e);lq=6,lD=null}function sj(e,n,t,r,o,a,i,s,c){e.cancelPendingCommit=null;do sS();while(0!==l4);if(0!=(6&lR))throw Error(l(327));if(null!==n){if(n===e.current)throw Error(l(177));if(!function(e,n,t,r,o,a){var i=e.pendingLanes;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=t,e.entangledLanes&=t,e.errorRecoveryDisabledLanes&=t,e.shellSuspendCounter=0;var l=e.entanglements,s=e.expirationTimes,c=e.hiddenUpdates;for(t=i&~t;0<t;){var u=31-eg(t),d=1<<u;l[u]=0,s[u]=-1;var f=c[u];if(null!==f)for(c[u]=null,u=0;u<f.length;u++){var p=f[u];null!==p&&(p.lane&=-0x20000001)}t&=~d}0!==r&&eS(e,r,0),0!==a&&0===o&&0!==e.tag&&(e.suspendedLanes|=a&~(i&~n))}(e,t,a=n.lanes|n.childLanes|t1,i,s,c),e===lN&&(lD=lN=null,lB=0),l3=n,l5=e,l6=t,l9=a,l8=o,l7=r,0!=(10256&n.subtreeFlags)||0!=(10256&n.flags)?(e.callbackNode=null,e.callbackPriority=0,J(el,function(){return sE(!0),null})):(e.callbackNode=null,e.callbackPriority=0),r=0!=(13878&n.flags),0!=(13878&n.subtreeFlags)||r){r=L.T,L.T=null,o=T.p,T.p=2,i=lR,lR|=4;try{!function(e,n){if(e=e.containerInfo,cu=ur,tP(e=t_(e))){if(\"selectionStart\"in e)var t={start:e.selectionStart,end:e.selectionEnd};else e:{var r=(t=(t=e.ownerDocument)&&t.defaultView||window).getSelection&&t.getSelection();if(r&&0!==r.rangeCount){t=r.anchorNode;var o,a=r.anchorOffset,i=r.focusNode;r=r.focusOffset;try{t.nodeType,i.nodeType}catch(e){t=null;break e}var s=0,c=-1,u=-1,d=0,f=0,p=e,h=null;n:for(;;){for(;p!==t||0!==a&&3!==p.nodeType||(c=s+a),p!==i||0!==r&&3!==p.nodeType||(u=s+r),3===p.nodeType&&(s+=p.nodeValue.length),null!==(o=p.firstChild);)h=p,p=o;for(;;){if(p===e)break n;if(h===t&&++d===a&&(c=s),h===i&&++f===r&&(u=s),null!==(o=p.nextSibling))break;h=(p=h).parentNode}p=o}t=-1===c||-1===u?null:{start:c,end:u}}else t=null}t=t||{start:0,end:0}}else t=null;for(cd={focusedElem:e,selectionRange:t},ur=!1,li=n;null!==li;)if(e=(n=li).child,0!=(1024&n.subtreeFlags)&&null!==e)e.return=n,li=e;else for(;null!==li;){switch(i=(n=li).alternate,e=n.flags,n.tag){case 0:case 11:case 15:case 5:case 26:case 27:case 6:case 4:case 17:break;case 1:if(0!=(1024&e)&&null!==i){e=void 0,t=n,a=i.memoizedProps,i=i.memoizedState,r=t.stateNode;try{var g=ic(t.type,a);e=r.getSnapshotBeforeUpdate(g,i),r.__reactInternalSnapshotBeforeUpdate=e}catch(e){sP(t,t.return,e)}}break;case 3:if(0!=(1024&e)){if(9===(t=(e=n.stateNode.containerInfo).nodeType))cO(e);else if(1===t)switch(e.nodeName){case\"HEAD\":case\"HTML\":case\"BODY\":cO(e);break;default:e.textContent=\"\"}}break;default:if(0!=(1024&e))throw Error(l(163))}if(null!==(e=n.sibling)){e.return=n.return,li=e;break}li=n.return}}(e,n,t)}finally{lR=i,T.p=o,L.T=r}}l4=1,sk(),sA(),sO()}}function sk(){if(1===l4){l4=0;var e=l5,n=l3,t=0!=(13878&n.flags);if(0!=(13878&n.subtreeFlags)||t){t=L.T,L.T=null;var r=T.p;T.p=2;var o=lR;lR|=4;try{lv(n,e);var a=cd,i=t_(e.containerInfo),l=a.focusedElem,s=a.selectionRange;if(i!==l&&l&&l.ownerDocument&&function e(n,t){return!!n&&!!t&&(n===t||(!n||3!==n.nodeType)&&(t&&3===t.nodeType?e(n,t.parentNode):\"contains\"in n?n.contains(t):!!n.compareDocumentPosition&&!!(16&n.compareDocumentPosition(t))))}(l.ownerDocument.documentElement,l)){if(null!==s&&tP(l)){var c=s.start,u=s.end;if(void 0===u&&(u=c),\"selectionStart\"in l)l.selectionStart=c,l.selectionEnd=Math.min(u,l.value.length);else{var d=l.ownerDocument||document,f=d&&d.defaultView||window;if(f.getSelection){var p=f.getSelection(),h=l.textContent.length,g=Math.min(s.start,h),m=void 0===s.end?g:Math.min(s.end,h);!p.extend&&g>m&&(i=m,m=g,g=i);var v=tE(l,g),b=tE(l,m);if(v&&b&&(1!==p.rangeCount||p.anchorNode!==v.node||p.anchorOffset!==v.offset||p.focusNode!==b.node||p.focusOffset!==b.offset)){var y=d.createRange();y.setStart(v.node,v.offset),p.removeAllRanges(),g>m?(p.addRange(y),p.extend(b.node,b.offset)):(y.setEnd(b.node,b.offset),p.addRange(y))}}}}for(d=[],p=l;p=p.parentNode;)1===p.nodeType&&d.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(\"function\"==typeof l.focus&&l.focus(),l=0;l<d.length;l++){var x=d[l];x.element.scrollLeft=x.left,x.element.scrollTop=x.top}}ur=!!cu,cd=cu=null}finally{lR=o,T.p=r,L.T=t}}e.current=n,l4=2}}function sA(){if(2===l4){l4=0;var e=l5,n=l3,t=0!=(8772&n.flags);if(0!=(8772&n.subtreeFlags)||t){t=L.T,L.T=null;var r=T.p;T.p=2;var o=lR;lR|=4;try{ll(e,n.alternate,n)}finally{lR=o,T.p=r,L.T=t}}l4=3}}function sO(){if(4===l4||3===l4){l4=0,et();var e=l5,n=l3,t=l6,r=l7;0!=(10256&n.subtreeFlags)||0!=(10256&n.flags)?l4=5:(l4=0,l3=l5=null,sC(e,e.pendingLanes));var o=e.pendingLanes;if(0===o&&(l2=null),ez(t),n=n.stateNode,ep&&\"function\"==typeof ep.onCommitFiberRoot)try{ep.onCommitFiberRoot(ef,n,void 0,128==(128&n.current.flags))}catch(e){}if(null!==r){n=L.T,o=T.p,T.p=2,L.T=null;try{for(var a=e.onRecoverableError,i=0;i<r.length;i++){var l=r[i];a(l.value,{componentStack:l.stack})}}finally{L.T=n,T.p=o}}0!=(3&l6)&&sS(),sU(e),o=e.pendingLanes,0!=(4194090&t)&&0!=(42&o)?e===sn?se++:(se=0,sn=e):se=0,sV(0,!1)}}function sC(e,n){0==(e.pooledCacheLanes&=n)&&null!=(n=e.pooledCache)&&(e.pooledCache=null,r2(n))}function sS(e){return sk(),sA(),sO(),sE(e)}function sE(){if(5!==l4)return!1;var e=l5,n=l9;l9=0;var t=ez(l6),r=L.T,o=T.p;try{T.p=32>t?32:t,L.T=null,t=l8,l8=null;var a=l5,i=l6;if(l4=0,l3=l5=null,l6=0,0!=(6&lR))throw Error(l(331));var s=lR;if(lR|=4,lP(a.current),lk(a,a.current,i,t),lR=s,sV(0,!1),ep&&\"function\"==typeof ep.onPostCommitFiberRoot)try{ep.onPostCommitFiberRoot(ef,a)}catch(e){}return!0}finally{T.p=o,L.T=r,sC(e,n)}}function s_(e,n,t){n=ru(t,n),n=im(e.stateNode,n,2),null!==(e=oO(e,n,2))&&(eC(e,2),sU(e))}function sP(e,n,t){if(3===e.tag)s_(e,e,t);else for(;null!==n;){if(3===n.tag){s_(n,e,t);break}if(1===n.tag){var r=n.stateNode;if(\"function\"==typeof n.type.getDerivedStateFromError||\"function\"==typeof r.componentDidCatch&&(null===l2||!l2.has(r))){e=ru(t,e),null!==(r=oO(n,t=iv(2),2))&&(ib(t,r,n,e),eC(r,2),sU(r));break}}n=n.return}}function sz(e,n,t){var r=e.pingCache;if(null===r){r=e.pingCache=new lT;var o=new Set;r.set(n,o)}else void 0===(o=r.get(n))&&(o=new Set,r.set(n,o));o.has(t)||(lU=!0,o.add(t),e=sL.bind(null,e,n,t),n.then(e,e))}function sL(e,n,t){var r=e.pingCache;null!==r&&r.delete(n),e.pingedLanes|=e.suspendedLanes&t,e.warmLanes&=~t,lN===e&&(lB&t)===t&&(4===lq||3===lq&&(0x3c00000&lB)===lB&&300>er()-lJ?0==(2&lR)&&su(e,0):lZ|=t,lX===lB&&(lX=0)),sU(e)}function sT(e,n){0===n&&(n=eA()),null!==(e=t3(e,n))&&(eC(e,n),sU(e))}function sR(e){var n=e.memoizedState,t=0;null!==n&&(t=n.retryLane),sT(e,t)}function sN(e,n){var t=0;switch(e.tag){case 31:case 13:var r=e.stateNode,o=e.memoizedState;null!==o&&(t=o.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(l(314))}null!==r&&r.delete(n),sT(e,t)}var sD=null,sB=null,sM=!1,sI=!1,sH=!1,sF=0;function sU(e){e!==sB&&null===e.next&&(null===sB?sD=sB=e:sB=sB.next=e),sI=!0,sM||(sM=!0,cx(function(){0!=(6&lR)?J(ea,sq):sW()}))}function sV(e,n){if(!sH&&sI){sH=!0;do for(var t=!1,r=sD;null!==r;){if(!n)if(0!==e){var o=r.pendingLanes;if(0===o)var a=0;else{var i=r.suspendedLanes,l=r.pingedLanes;a=0xc000095&(a=(1<<31-eg(42|e)+1)-1&(o&~(i&~l)))?0xc000095&a|1:a?2|a:0}0!==a&&(t=!0,sY(r,a))}else a=lB,0==(3&(a=ew(r,r===lN?a:0,null!==r.cancelPendingCommit||-1!==r.timeoutHandle)))||ej(r,a)||(t=!0,sY(r,a));r=r.next}while(t);sH=!1}}function sq(){sW()}function sW(){sI=sM=!1;var e,n=0;0===sF||((e=window.event)&&\"popstate\"===e.type?e===cm||(cm=e,0):(cm=null,1))||(n=sF);for(var t=er(),r=null,o=sD;null!==o;){var a=o.next,i=s$(o,t);0===i?(o.next=null,null===r?sD=a:r.next=a,null===a&&(sB=r)):(r=o,(0!==n||0!=(3&i))&&(sI=!0)),o=a}0!==l4&&5!==l4||sV(n,!1),0!==sF&&(sF=0)}function s$(e,n){for(var t=e.suspendedLanes,r=e.pingedLanes,o=e.expirationTimes,a=-0x3c00001&e.pendingLanes;0<a;){var i=31-eg(a),l=1<<i,s=o[i];-1===s?(0==(l&t)||0!=(l&r))&&(o[i]=function(e,n){switch(e){case 1:case 2:case 4:case 8:case 64:return n+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return n+5e3;default:return -1}}(l,n)):s<=n&&(e.expiredLanes|=l),a&=~l}if(n=lN,t=lB,t=ew(e,e===n?t:0,null!==e.cancelPendingCommit||-1!==e.timeoutHandle),r=e.callbackNode,0===t||e===n&&(2===lM||9===lM)||null!==e.cancelPendingCommit)return null!==r&&null!==r&&ee(r),e.callbackNode=null,e.callbackPriority=0;if(0==(3&t)||ej(e,t)){if((n=t&-t)===e.callbackPriority)return n;switch(null!==r&&ee(r),ez(t)){case 2:case 8:t=ei;break;case 32:default:t=el;break;case 0x10000000:t=ec}return t=J(t,r=sZ.bind(null,e)),e.callbackPriority=n,e.callbackNode=t,n}return null!==r&&null!==r&&ee(r),e.callbackPriority=2,e.callbackNode=null,2}function sZ(e,n){if(0!==l4&&5!==l4)return e.callbackNode=null,e.callbackPriority=0,null;var t=e.callbackNode;if(sS(!0)&&e.callbackNode!==t)return null;var r=lB;return 0===(r=ew(e,e===lN?r:0,null!==e.cancelPendingCommit||-1!==e.timeoutHandle))?null:(sa(e,r,n),s$(e,er()),null!=e.callbackNode&&e.callbackNode===t?sZ.bind(null,e):null)}function sY(e,n){if(sS())return null;sa(e,n,!0)}function sX(){if(0===sF){var e=r3;sF=0!==e?e:ek()}return sF}function sK(e){return null==e||\"symbol\"==typeof e||\"boolean\"==typeof e?null:\"function\"==typeof e?e:ng(\"\"+e)}function sQ(e,n){var t=n.ownerDocument.createElement(\"input\");return t.name=n.name,t.value=n.value,e.id&&t.setAttribute(\"form\",e.id),n.parentNode.insertBefore(t,n),e=new FormData(e),t.parentNode.removeChild(t),e}for(var sG=0;sG<tK.length;sG++){var sJ=tK[sG];tQ(sJ.toLowerCase(),\"on\"+(sJ[0].toUpperCase()+sJ.slice(1)))}tQ(tU,\"onAnimationEnd\"),tQ(tV,\"onAnimationIteration\"),tQ(tq,\"onAnimationStart\"),tQ(\"dblclick\",\"onDoubleClick\"),tQ(\"focusin\",\"onFocus\"),tQ(\"focusout\",\"onBlur\"),tQ(tW,\"onTransitionRun\"),tQ(t$,\"onTransitionStart\"),tQ(tZ,\"onTransitionCancel\"),tQ(tY,\"onTransitionEnd\"),eG(\"onMouseEnter\",[\"mouseout\",\"mouseover\"]),eG(\"onMouseLeave\",[\"mouseout\",\"mouseover\"]),eG(\"onPointerEnter\",[\"pointerout\",\"pointerover\"]),eG(\"onPointerLeave\",[\"pointerout\",\"pointerover\"]),eQ(\"onChange\",\"change click focusin focusout input keydown keyup selectionchange\".split(\" \")),eQ(\"onSelect\",\"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\" \")),eQ(\"onBeforeInput\",[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]),eQ(\"onCompositionEnd\",\"compositionend focusout keydown keypress keyup mousedown\".split(\" \")),eQ(\"onCompositionStart\",\"compositionstart focusout keydown keypress keyup mousedown\".split(\" \")),eQ(\"onCompositionUpdate\",\"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \"));var s0=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),s1=new Set(\"beforetoggle cancel close invalid load scroll scrollend toggle\".split(\" \").concat(s0));function s2(e,n){n=0!=(4&n);for(var t=0;t<e.length;t++){var r=e[t],o=r.event;r=r.listeners;e:{var a=void 0;if(n)for(var i=r.length-1;0<=i;i--){var l=r[i],s=l.instance,c=l.currentTarget;if(l=l.listener,s!==a&&o.isPropagationStopped())break e;a=l,o.currentTarget=c;try{a(o)}catch(e){tG(e)}o.currentTarget=null,a=s}else for(i=0;i<r.length;i++){if(s=(l=r[i]).instance,c=l.currentTarget,l=l.listener,s!==a&&o.isPropagationStopped())break e;a=l,o.currentTarget=c;try{a(o)}catch(e){tG(e)}o.currentTarget=null,a=s}}}}function s4(e,n){var t=n[eM];void 0===t&&(t=n[eM]=new Set);var r=e+\"__bubble\";t.has(r)||(s9(n,e,2,!1),t.add(r))}function s5(e,n,t){var r=0;n&&(r|=4),s9(t,e,r,n)}var s3=\"_reactListening\"+Math.random().toString(36).slice(2);function s6(e){if(!e[s3]){e[s3]=!0,eX.forEach(function(n){\"selectionchange\"!==n&&(s1.has(n)||s5(n,!1,e),s5(n,!0,e))});var n=9===e.nodeType?e:e.ownerDocument;null===n||n[s3]||(n[s3]=!0,s5(\"selectionchange\",!1,n))}}function s9(e,n,t,r){switch(uu(n)){case 2:var o=uo;break;case 8:o=ua;break;default:o=ui}t=o.bind(null,n,t,e),o=void 0,nC&&(\"touchstart\"===n||\"touchmove\"===n||\"wheel\"===n)&&(o=!0),r?void 0!==o?e.addEventListener(n,t,{capture:!0,passive:o}):e.addEventListener(n,t,!0):void 0!==o?e.addEventListener(n,t,{passive:o}):e.addEventListener(n,t,!1)}function s8(e,n,t,r,o){var a=r;if(0==(1&n)&&0==(2&n)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var l=r.stateNode.containerInfo;if(l===o)break;if(4===i)for(i=r.return;null!==i;){var c=i.tag;if((3===c||4===c)&&i.stateNode.containerInfo===o)return;i=i.return}for(;null!==l;){if(null===(i=eq(l)))return;if(5===(c=i.tag)||6===c||26===c||27===c){r=a=i;continue e}l=l.parentNode}}r=r.return}nk(function(){var r=a,o=nb(t),i=[];e:{var l=tX.get(e);if(void 0!==l){var c=nU,u=e;switch(e){case\"keypress\":if(0===nL(t))break e;case\"keydown\":case\"keyup\":c=n4;break;case\"focusin\":u=\"focus\",c=nY;break;case\"focusout\":u=\"blur\",c=nY;break;case\"beforeblur\":case\"afterblur\":c=nY;break;case\"click\":if(2===t.button)break e;case\"auxclick\":case\"dblclick\":case\"mousedown\":case\"mousemove\":case\"mouseup\":case\"mouseout\":case\"mouseover\":case\"contextmenu\":c=n$;break;case\"drag\":case\"dragend\":case\"dragenter\":case\"dragexit\":case\"dragleave\":case\"dragover\":case\"dragstart\":case\"drop\":c=nZ;break;case\"touchcancel\":case\"touchend\":case\"touchmove\":case\"touchstart\":c=n3;break;case tU:case tV:case tq:c=nX;break;case tY:c=n6;break;case\"scroll\":case\"scrollend\":c=nq;break;case\"wheel\":c=n9;break;case\"copy\":case\"cut\":case\"paste\":c=nK;break;case\"gotpointercapture\":case\"lostpointercapture\":case\"pointercancel\":case\"pointerdown\":case\"pointermove\":case\"pointerout\":case\"pointerover\":case\"pointerup\":c=n5;break;case\"toggle\":case\"beforetoggle\":c=n8}var d=0!=(4&n),f=!d&&(\"scroll\"===e||\"scrollend\"===e),p=d?null!==l?l+\"Capture\":null:l;d=[];for(var h,g=r;null!==g;){var m=g;if(h=m.stateNode,5!==(m=m.tag)&&26!==m&&27!==m||null===h||null===p||null!=(m=nA(g,p))&&d.push(s7(g,m,h)),f)break;g=g.return}0<d.length&&(l=new c(l,u,null,t,o),i.push({event:l,listeners:d}))}}if(0==(7&n)){if((l=\"mouseover\"===e||\"pointerover\"===e,c=\"mouseout\"===e||\"pointerout\"===e,!(l&&t!==nv&&(u=t.relatedTarget||t.fromElement)&&(eq(u)||u[eB])))&&(c||l)&&(l=o.window===o?o:(l=o.ownerDocument)?l.defaultView||l.parentWindow:window,c?(u=t.relatedTarget||t.toElement,c=r,null!==(u=u?eq(u):null)&&(f=s(u),d=u.tag,u!==f||5!==d&&27!==d&&6!==d)&&(u=null)):(c=null,u=r),c!==u)){if(d=n$,m=\"onMouseLeave\",p=\"onMouseEnter\",g=\"mouse\",(\"pointerout\"===e||\"pointerover\"===e)&&(d=n5,m=\"onPointerLeave\",p=\"onPointerEnter\",g=\"pointer\"),f=null==c?l:e$(c),h=null==u?l:e$(u),(l=new d(m,g+\"leave\",c,t,o)).target=f,l.relatedTarget=h,m=null,eq(o)===r&&((d=new d(p,g+\"enter\",u,t,o)).target=h,d.relatedTarget=f,m=d),f=m,c&&u)n:{for(d=cn,p=c,g=u,h=0,m=p;m;m=d(m))h++;m=0;for(var v,b=g;b;b=d(b))m++;for(;0<h-m;)p=d(p),h--;for(;0<m-h;)g=d(g),m--;for(;h--;){if(p===g||null!==g&&p===g.alternate){d=p;break n}p=d(p),g=d(g)}d=null}else d=null;null!==c&&ct(i,l,c,d,!1),null!==u&&null!==f&&ct(i,f,u,d,!0)}e:{if(\"select\"===(c=(l=r?e$(r):window).nodeName&&l.nodeName.toLowerCase())||\"input\"===c&&\"file\"===l.type)var y=tg;else if(tc(l))if(tm)y=tA;else{y=tj;var x=tw}else(c=l.nodeName)&&\"input\"===c.toLowerCase()&&(\"checkbox\"===l.type||\"radio\"===l.type)?y=tk:r&&nf(r.elementType)&&(y=tg);if(y&&(y=y(e,r))){tu(i,y,t,o);break e}x&&x(e,l,r),\"focusout\"===e&&r&&\"number\"===l.type&&null!=r.memoizedProps.value&&no(l,\"number\",l.value)}switch(x=r?e$(r):window,e){case\"focusin\":(tc(x)||\"true\"===x.contentEditable)&&(tL=x,tT=r,tR=null);break;case\"focusout\":tR=tT=tL=null;break;case\"mousedown\":tN=!0;break;case\"contextmenu\":case\"mouseup\":case\"dragend\":tN=!1,tD(i,t,o);break;case\"selectionchange\":if(tz)break;case\"keydown\":case\"keyup\":tD(i,t,o)}if(te)n:{switch(e){case\"compositionstart\":var w=\"onCompositionStart\";break n;case\"compositionend\":w=\"onCompositionEnd\";break n;case\"compositionupdate\":w=\"onCompositionUpdate\";break n}w=void 0}else tl?ta(e,t)&&(w=\"onCompositionEnd\"):\"keydown\"===e&&229===t.keyCode&&(w=\"onCompositionStart\");w&&(tr&&\"ko\"!==t.locale&&(tl||\"onCompositionStart\"!==w?\"onCompositionEnd\"===w&&tl&&(v=nz()):(n_=\"value\"in(nE=o)?nE.value:nE.textContent,tl=!0)),0<(x=ce(r,w)).length&&(w=new nQ(w,e,null,t,o),i.push({event:w,listeners:x}),v?w.data=v:null!==(v=ti(t))&&(w.data=v))),(v=tt?function(e,n){switch(e){case\"compositionend\":return ti(n);case\"keypress\":if(32!==n.which)return null;return to=!0,\" \";case\"textInput\":return\" \"===(e=n.data)&&to?null:e;default:return null}}(e,t):function(e,n){if(tl)return\"compositionend\"===e||!te&&ta(e,n)?(e=nz(),nP=n_=nE=null,tl=!1,e):null;switch(e){case\"paste\":default:return null;case\"keypress\":if(!(n.ctrlKey||n.altKey||n.metaKey)||n.ctrlKey&&n.altKey){if(n.char&&1<n.char.length)return n.char;if(n.which)return String.fromCharCode(n.which)}return null;case\"compositionend\":return tr&&\"ko\"!==n.locale?null:n.data}}(e,t))&&0<(w=ce(r,\"onBeforeInput\")).length&&(x=new nQ(\"onBeforeInput\",\"beforeinput\",null,t,o),i.push({event:x,listeners:w}),x.data=v);var j=e;if(\"submit\"===j&&r&&r.stateNode===o){var k=sK((o[eD]||null).action),A=t.submitter;A&&null!==(j=(j=A[eD]||null)?sK(j.formAction):A.getAttribute(\"formAction\"))&&(k=j,A=null);var O=new nU(\"action\",\"action\",null,t,o);i.push({event:O,listeners:[{instance:null,listener:function(){if(t.defaultPrevented){if(0!==sF){var e=A?sQ(o,A):new FormData(o);aK(r,{pending:!0,data:e,method:o.method,action:k},null,e)}}else\"function\"==typeof k&&(O.preventDefault(),aK(r,{pending:!0,data:e=A?sQ(o,A):new FormData(o),method:o.method,action:k},k,e))},currentTarget:o}]})}}s2(i,n)})}function s7(e,n,t){return{instance:e,listener:n,currentTarget:t}}function ce(e,n){for(var t=n+\"Capture\",r=[];null!==e;){var o=e,a=o.stateNode;if(5!==(o=o.tag)&&26!==o&&27!==o||null===a||(null!=(o=nA(e,t))&&r.unshift(s7(e,o,a)),null!=(o=nA(e,n))&&r.push(s7(e,o,a))),3===e.tag)return r;e=e.return}return[]}function cn(e){if(null===e)return null;do e=e.return;while(e&&5!==e.tag&&27!==e.tag);return e||null}function ct(e,n,t,r,o){for(var a=n._reactName,i=[];null!==t&&t!==r;){var l=t,s=l.alternate,c=l.stateNode;if(l=l.tag,null!==s&&s===r)break;5!==l&&26!==l&&27!==l||null===c||(s=c,o?null!=(c=nA(t,a))&&i.unshift(s7(t,c,s)):o||null!=(c=nA(t,a))&&i.push(s7(t,c,s))),t=t.return}0!==i.length&&e.push({event:n,listeners:i})}var cr=/\\r\\n?/g,co=/\\u0000|\\uFFFD/g;function ca(e){return(\"string\"==typeof e?e:\"\"+e).replace(cr,\"\\n\").replace(co,\"\")}function ci(e,n){return n=ca(n),ca(e)===n}function cl(e,n,t,r,o,a){switch(t){case\"children\":\"string\"==typeof r?\"body\"===n||\"textarea\"===n&&\"\"===r||ns(e,r):(\"number\"==typeof r||\"bigint\"==typeof r)&&\"body\"!==n&&ns(e,\"\"+r);break;case\"className\":e4(e,\"class\",r);break;case\"tabIndex\":e4(e,\"tabindex\",r);break;case\"dir\":case\"role\":case\"viewBox\":case\"width\":case\"height\":e4(e,t,r);break;case\"style\":nd(e,r,a);break;case\"data\":if(\"object\"!==n){e4(e,\"data\",r);break}case\"src\":case\"href\":if(\"\"===r&&(\"a\"!==n||\"href\"!==t)||null==r||\"function\"==typeof r||\"symbol\"==typeof r||\"boolean\"==typeof r){e.removeAttribute(t);break}r=ng(\"\"+r),e.setAttribute(t,r);break;case\"action\":case\"formAction\":if(\"function\"==typeof r){e.setAttribute(t,\"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')\");break}if(\"function\"==typeof a&&(\"formAction\"===t?(\"input\"!==n&&cl(e,n,\"name\",o.name,o,null),cl(e,n,\"formEncType\",o.formEncType,o,null),cl(e,n,\"formMethod\",o.formMethod,o,null),cl(e,n,\"formTarget\",o.formTarget,o,null)):(cl(e,n,\"encType\",o.encType,o,null),cl(e,n,\"method\",o.method,o,null),cl(e,n,\"target\",o.target,o,null))),null==r||\"symbol\"==typeof r||\"boolean\"==typeof r){e.removeAttribute(t);break}r=ng(\"\"+r),e.setAttribute(t,r);break;case\"onClick\":null!=r&&(e.onclick=nm);break;case\"onScroll\":null!=r&&s4(\"scroll\",e);break;case\"onScrollEnd\":null!=r&&s4(\"scrollend\",e);break;case\"dangerouslySetInnerHTML\":if(null!=r){if(\"object\"!=typeof r||!(\"__html\"in r))throw Error(l(61));if(null!=(t=r.__html)){if(null!=o.children)throw Error(l(60));e.innerHTML=t}}break;case\"multiple\":e.multiple=r&&\"function\"!=typeof r&&\"symbol\"!=typeof r;break;case\"muted\":e.muted=r&&\"function\"!=typeof r&&\"symbol\"!=typeof r;break;case\"suppressContentEditableWarning\":case\"suppressHydrationWarning\":case\"defaultValue\":case\"defaultChecked\":case\"innerHTML\":case\"ref\":case\"autoFocus\":case\"innerText\":case\"textContent\":break;case\"xlinkHref\":if(null==r||\"function\"==typeof r||\"boolean\"==typeof r||\"symbol\"==typeof r){e.removeAttribute(\"xlink:href\");break}t=ng(\"\"+r),e.setAttributeNS(\"http://www.w3.org/1999/xlink\",\"xlink:href\",t);break;case\"contentEditable\":case\"spellCheck\":case\"draggable\":case\"value\":case\"autoReverse\":case\"externalResourcesRequired\":case\"focusable\":case\"preserveAlpha\":null!=r&&\"function\"!=typeof r&&\"symbol\"!=typeof r?e.setAttribute(t,\"\"+r):e.removeAttribute(t);break;case\"inert\":case\"allowFullScreen\":case\"async\":case\"autoPlay\":case\"controls\":case\"default\":case\"defer\":case\"disabled\":case\"disablePictureInPicture\":case\"disableRemotePlayback\":case\"formNoValidate\":case\"hidden\":case\"loop\":case\"noModule\":case\"noValidate\":case\"open\":case\"playsInline\":case\"readOnly\":case\"required\":case\"reversed\":case\"scoped\":case\"seamless\":case\"itemScope\":r&&\"function\"!=typeof r&&\"symbol\"!=typeof r?e.setAttribute(t,\"\"):e.removeAttribute(t);break;case\"capture\":case\"download\":!0===r?e.setAttribute(t,\"\"):!1!==r&&null!=r&&\"function\"!=typeof r&&\"symbol\"!=typeof r?e.setAttribute(t,r):e.removeAttribute(t);break;case\"cols\":case\"rows\":case\"size\":case\"span\":null!=r&&\"function\"!=typeof r&&\"symbol\"!=typeof r&&!isNaN(r)&&1<=r?e.setAttribute(t,r):e.removeAttribute(t);break;case\"rowSpan\":case\"start\":null==r||\"function\"==typeof r||\"symbol\"==typeof r||isNaN(r)?e.removeAttribute(t):e.setAttribute(t,r);break;case\"popover\":s4(\"beforetoggle\",e),s4(\"toggle\",e),e2(e,\"popover\",r);break;case\"xlinkActuate\":e5(e,\"http://www.w3.org/1999/xlink\",\"xlink:actuate\",r);break;case\"xlinkArcrole\":e5(e,\"http://www.w3.org/1999/xlink\",\"xlink:arcrole\",r);break;case\"xlinkRole\":e5(e,\"http://www.w3.org/1999/xlink\",\"xlink:role\",r);break;case\"xlinkShow\":e5(e,\"http://www.w3.org/1999/xlink\",\"xlink:show\",r);break;case\"xlinkTitle\":e5(e,\"http://www.w3.org/1999/xlink\",\"xlink:title\",r);break;case\"xlinkType\":e5(e,\"http://www.w3.org/1999/xlink\",\"xlink:type\",r);break;case\"xmlBase\":e5(e,\"http://www.w3.org/XML/1998/namespace\",\"xml:base\",r);break;case\"xmlLang\":e5(e,\"http://www.w3.org/XML/1998/namespace\",\"xml:lang\",r);break;case\"xmlSpace\":e5(e,\"http://www.w3.org/XML/1998/namespace\",\"xml:space\",r);break;case\"is\":e2(e,\"is\",r);break;default:2<t.length&&(\"o\"===t[0]||\"O\"===t[0])&&(\"n\"===t[1]||\"N\"===t[1])||e2(e,t=np.get(t)||t,r)}}function cs(e,n,t,r,o,a){switch(t){case\"style\":nd(e,r,a);break;case\"dangerouslySetInnerHTML\":if(null!=r){if(\"object\"!=typeof r||!(\"__html\"in r))throw Error(l(61));if(null!=(t=r.__html)){if(null!=o.children)throw Error(l(60));e.innerHTML=t}}break;case\"children\":\"string\"==typeof r?ns(e,r):(\"number\"==typeof r||\"bigint\"==typeof r)&&ns(e,\"\"+r);break;case\"onScroll\":null!=r&&s4(\"scroll\",e);break;case\"onScrollEnd\":null!=r&&s4(\"scrollend\",e);break;case\"onClick\":null!=r&&(e.onclick=nm);break;case\"suppressContentEditableWarning\":case\"suppressHydrationWarning\":case\"innerHTML\":case\"ref\":case\"innerText\":case\"textContent\":break;default:if(!eK.hasOwnProperty(t))e:{if(\"o\"===t[0]&&\"n\"===t[1]&&(o=t.endsWith(\"Capture\"),n=t.slice(2,o?t.length-7:void 0),\"function\"==typeof(a=null!=(a=e[eD]||null)?a[t]:null)&&e.removeEventListener(n,a,o),\"function\"==typeof r)){\"function\"!=typeof a&&null!==a&&(t in e?e[t]=null:e.hasAttribute(t)&&e.removeAttribute(t)),e.addEventListener(n,r,o);break e}t in e?e[t]=r:!0===r?e.setAttribute(t,\"\"):e2(e,t,r)}}}function cc(e,n,t){switch(n){case\"div\":case\"span\":case\"svg\":case\"path\":case\"a\":case\"g\":case\"p\":case\"li\":break;case\"img\":s4(\"error\",e),s4(\"load\",e);var r,o=!1,a=!1;for(r in t)if(t.hasOwnProperty(r)){var i=t[r];if(null!=i)switch(r){case\"src\":o=!0;break;case\"srcSet\":a=!0;break;case\"children\":case\"dangerouslySetInnerHTML\":throw Error(l(137,n));default:cl(e,n,r,i,t,null)}}a&&cl(e,n,\"srcSet\",t.srcSet,t,null),o&&cl(e,n,\"src\",t.src,t,null);return;case\"input\":s4(\"invalid\",e);var s=r=i=a=null,c=null,u=null;for(o in t)if(t.hasOwnProperty(o)){var d=t[o];if(null!=d)switch(o){case\"name\":a=d;break;case\"type\":i=d;break;case\"checked\":c=d;break;case\"defaultChecked\":u=d;break;case\"value\":r=d;break;case\"defaultValue\":s=d;break;case\"children\":case\"dangerouslySetInnerHTML\":if(null!=d)throw Error(l(137,n));break;default:cl(e,n,o,d,t,null)}}nr(e,r,s,c,u,i,a,!1);return;case\"select\":for(a in s4(\"invalid\",e),o=i=r=null,t)if(t.hasOwnProperty(a)&&null!=(s=t[a]))switch(a){case\"value\":r=s;break;case\"defaultValue\":i=s;break;case\"multiple\":o=s;default:cl(e,n,a,s,t,null)}n=r,t=i,e.multiple=!!o,null!=n?na(e,!!o,n,!1):null!=t&&na(e,!!o,t,!0);return;case\"textarea\":for(i in s4(\"invalid\",e),r=a=o=null,t)if(t.hasOwnProperty(i)&&null!=(s=t[i]))switch(i){case\"value\":o=s;break;case\"defaultValue\":a=s;break;case\"children\":r=s;break;case\"dangerouslySetInnerHTML\":if(null!=s)throw Error(l(91));break;default:cl(e,n,i,s,t,null)}nl(e,o,a,r);return;case\"option\":for(c in t)t.hasOwnProperty(c)&&null!=(o=t[c])&&(\"selected\"===c?e.selected=o&&\"function\"!=typeof o&&\"symbol\"!=typeof o:cl(e,n,c,o,t,null));return;case\"dialog\":s4(\"beforetoggle\",e),s4(\"toggle\",e),s4(\"cancel\",e),s4(\"close\",e);break;case\"iframe\":case\"object\":s4(\"load\",e);break;case\"video\":case\"audio\":for(o=0;o<s0.length;o++)s4(s0[o],e);break;case\"image\":s4(\"error\",e),s4(\"load\",e);break;case\"details\":s4(\"toggle\",e);break;case\"embed\":case\"source\":case\"link\":s4(\"error\",e),s4(\"load\",e);case\"area\":case\"base\":case\"br\":case\"col\":case\"hr\":case\"keygen\":case\"meta\":case\"param\":case\"track\":case\"wbr\":case\"menuitem\":for(u in t)if(t.hasOwnProperty(u)&&null!=(o=t[u]))switch(u){case\"children\":case\"dangerouslySetInnerHTML\":throw Error(l(137,n));default:cl(e,n,u,o,t,null)}return;default:if(nf(n)){for(d in t)t.hasOwnProperty(d)&&void 0!==(o=t[d])&&cs(e,n,d,o,t,void 0);return}}for(s in t)t.hasOwnProperty(s)&&null!=(o=t[s])&&cl(e,n,s,o,t,null)}var cu=null,cd=null;function cf(e){return 9===e.nodeType?e:e.ownerDocument}function cp(e){switch(e){case\"http://www.w3.org/2000/svg\":return 1;case\"http://www.w3.org/1998/Math/MathML\":return 2;default:return 0}}function ch(e,n){if(0===e)switch(n){case\"svg\":return 1;case\"math\":return 2;default:return 0}return 1===e&&\"foreignObject\"===n?0:e}function cg(e,n){return\"textarea\"===e||\"noscript\"===e||\"string\"==typeof n.children||\"number\"==typeof n.children||\"bigint\"==typeof n.children||\"object\"==typeof n.dangerouslySetInnerHTML&&null!==n.dangerouslySetInnerHTML&&null!=n.dangerouslySetInnerHTML.__html}var cm=null,cv=\"function\"==typeof setTimeout?setTimeout:void 0,cb=\"function\"==typeof clearTimeout?clearTimeout:void 0,cy=\"function\"==typeof Promise?Promise:void 0,cx=\"function\"==typeof queueMicrotask?queueMicrotask:void 0!==cy?function(e){return cy.resolve(null).then(e).catch(cw)}:cv;function cw(e){setTimeout(function(){throw e})}function cj(e){return\"head\"===e}function ck(e,n){var t=n,r=0;do{var o=t.nextSibling;if(e.removeChild(t),o&&8===o.nodeType)if(\"/$\"===(t=o.data)||\"/&\"===t){if(0===r){e.removeChild(o),uE(n);return}r--}else if(\"$\"===t||\"$?\"===t||\"$~\"===t||\"$!\"===t||\"&\"===t)r++;else if(\"html\"===t)cR(e.ownerDocument.documentElement);else if(\"head\"===t){cR(t=e.ownerDocument.head);for(var a=t.firstChild;a;){var i=a.nextSibling,l=a.nodeName;a[eU]||\"SCRIPT\"===l||\"STYLE\"===l||\"LINK\"===l&&\"stylesheet\"===a.rel.toLowerCase()||t.removeChild(a),a=i}}else\"body\"===t&&cR(e.ownerDocument.body);t=o}while(t);uE(n)}function cA(e,n){var t=e;e=0;do{var r=t.nextSibling;if(1===t.nodeType?n?(t._stashedDisplay=t.style.display,t.style.display=\"none\"):(t.style.display=t._stashedDisplay||\"\",\"\"===t.getAttribute(\"style\")&&t.removeAttribute(\"style\")):3===t.nodeType&&(n?(t._stashedText=t.nodeValue,t.nodeValue=\"\"):t.nodeValue=t._stashedText||\"\"),r&&8===r.nodeType)if(\"/$\"===(t=r.data))if(0===e)break;else e--;else\"$\"!==t&&\"$?\"!==t&&\"$~\"!==t&&\"$!\"!==t||e++;t=r}while(t)}function cO(e){var n=e.firstChild;for(n&&10===n.nodeType&&(n=n.nextSibling);n;){var t=n;switch(n=n.nextSibling,t.nodeName){case\"HTML\":case\"HEAD\":case\"BODY\":cO(t),eV(t);continue;case\"SCRIPT\":case\"STYLE\":continue;case\"LINK\":if(\"stylesheet\"===t.rel.toLowerCase())continue}e.removeChild(t)}}function cC(e,n){for(;8!==e.nodeType;)if(!n||null===(e=c_(e.nextSibling)))return null;return e}function cS(e){return\"$?\"===e.data||\"$~\"===e.data}function cE(e){return\"$!\"===e.data||\"$?\"===e.data&&\"loading\"!==e.ownerDocument.readyState}function c_(e){for(;null!=e;e=e.nextSibling){var n=e.nodeType;if(1===n||3===n)break;if(8===n){if(\"$\"===(n=e.data)||\"$!\"===n||\"$?\"===n||\"$~\"===n||\"&\"===n||\"F!\"===n||\"F\"===n)break;if(\"/$\"===n||\"/&\"===n)return null}}return e}var cP=null;function cz(e){e=e.nextSibling;for(var n=0;e;){if(8===e.nodeType){var t=e.data;if(\"/$\"===t||\"/&\"===t){if(0===n)return c_(e.nextSibling);n--}else\"$\"!==t&&\"$!\"!==t&&\"$?\"!==t&&\"$~\"!==t&&\"&\"!==t||n++}e=e.nextSibling}return null}function cL(e){e=e.previousSibling;for(var n=0;e;){if(8===e.nodeType){var t=e.data;if(\"$\"===t||\"$!\"===t||\"$?\"===t||\"$~\"===t||\"&\"===t){if(0===n)return e;n--}else\"/$\"!==t&&\"/&\"!==t||n++}e=e.previousSibling}return null}function cT(e,n,t){switch(n=cf(t),e){case\"html\":if(!(e=n.documentElement))throw Error(l(452));return e;case\"head\":if(!(e=n.head))throw Error(l(453));return e;case\"body\":if(!(e=n.body))throw Error(l(454));return e;default:throw Error(l(451))}}function cR(e){for(var n=e.attributes;n.length;)e.removeAttributeNode(n[0]);eV(e)}var cN=new Map,cD=new Set;function cB(e){return\"function\"==typeof e.getRootNode?e.getRootNode():9===e.nodeType?e:e.ownerDocument}var cM=T.d;T.d={f:function(){var e=cM.f(),n=ss();return e||n},r:function(e){var n=eW(e);null!==n&&5===n.tag&&\"form\"===n.type?aG(n):cM.r(e)},D:function(e){cM.D(e),cH(\"dns-prefetch\",e,null)},C:function(e,n){cM.C(e,n),cH(\"preconnect\",e,n)},L:function(e,n,t){if(cM.L(e,n,t),cI&&e&&n){var r='link[rel=\"preload\"][as=\"'+nn(n)+'\"]';\"image\"===n&&t&&t.imageSrcSet?(r+='[imagesrcset=\"'+nn(t.imageSrcSet)+'\"]',\"string\"==typeof t.imageSizes&&(r+='[imagesizes=\"'+nn(t.imageSizes)+'\"]')):r+='[href=\"'+nn(e)+'\"]';var o=r;switch(n){case\"style\":o=cU(e);break;case\"script\":o=cW(e)}cN.has(o)||(e=f({rel:\"preload\",href:\"image\"===n&&t&&t.imageSrcSet?void 0:e,as:n},t),cN.set(o,e),null!==cI.querySelector(r)||\"style\"===n&&cI.querySelector(cV(o))||\"script\"===n&&cI.querySelector(c$(o))||(cc(n=cI.createElement(\"link\"),\"link\",e),eY(n),cI.head.appendChild(n)))}},m:function(e,n){if(cM.m(e,n),cI&&e){var t=n&&\"string\"==typeof n.as?n.as:\"script\",r='link[rel=\"modulepreload\"][as=\"'+nn(t)+'\"][href=\"'+nn(e)+'\"]',o=r;switch(t){case\"audioworklet\":case\"paintworklet\":case\"serviceworker\":case\"sharedworker\":case\"worker\":case\"script\":o=cW(e)}if(!cN.has(o)&&(e=f({rel:\"modulepreload\",href:e},n),cN.set(o,e),null===cI.querySelector(r))){switch(t){case\"audioworklet\":case\"paintworklet\":case\"serviceworker\":case\"sharedworker\":case\"worker\":case\"script\":if(cI.querySelector(c$(o)))return}cc(t=cI.createElement(\"link\"),\"link\",e),eY(t),cI.head.appendChild(t)}}},X:function(e,n){if(cM.X(e,n),cI&&e){var t=eZ(cI).hoistableScripts,r=cW(e),o=t.get(r);o||((o=cI.querySelector(c$(r)))||(e=f({src:e,async:!0},n),(n=cN.get(r))&&cK(e,n),eY(o=cI.createElement(\"script\")),cc(o,\"link\",e),cI.head.appendChild(o)),o={type:\"script\",instance:o,count:1,state:null},t.set(r,o))}},S:function(e,n,t){if(cM.S(e,n,t),cI&&e){var r=eZ(cI).hoistableStyles,o=cU(e);n=n||\"default\";var a=r.get(o);if(!a){var i={loading:0,preload:null};if(a=cI.querySelector(cV(o)))i.loading=5;else{e=f({rel:\"stylesheet\",href:e,\"data-precedence\":n},t),(t=cN.get(o))&&cX(e,t);var l=a=cI.createElement(\"link\");eY(l),cc(l,\"link\",e),l._p=new Promise(function(e,n){l.onload=e,l.onerror=n}),l.addEventListener(\"load\",function(){i.loading|=1}),l.addEventListener(\"error\",function(){i.loading|=2}),i.loading|=4,cY(a,n,cI)}a={type:\"stylesheet\",instance:a,count:1,state:i},r.set(o,a)}}},M:function(e,n){if(cM.M(e,n),cI&&e){var t=eZ(cI).hoistableScripts,r=cW(e),o=t.get(r);o||((o=cI.querySelector(c$(r)))||(e=f({src:e,async:!0,type:\"module\"},n),(n=cN.get(r))&&cK(e,n),eY(o=cI.createElement(\"script\")),cc(o,\"link\",e),cI.head.appendChild(o)),o={type:\"script\",instance:o,count:1,state:null},t.set(r,o))}}};var cI=\"undefined\"==typeof document?null:document;function cH(e,n,t){if(cI&&\"string\"==typeof n&&n){var r=nn(n);r='link[rel=\"'+e+'\"][href=\"'+r+'\"]',\"string\"==typeof t&&(r+='[crossorigin=\"'+t+'\"]'),cD.has(r)||(cD.add(r),e={rel:e,crossOrigin:t,href:n},null===cI.querySelector(r)&&(cc(n=cI.createElement(\"link\"),\"link\",e),eY(n),cI.head.appendChild(n)))}}function cF(e,n,t,r){var o=(o=U.current)?cB(o):null;if(!o)throw Error(l(446));switch(e){case\"meta\":case\"title\":return null;case\"style\":return\"string\"==typeof t.precedence&&\"string\"==typeof t.href?(n=cU(t.href),(r=(t=eZ(o).hoistableStyles).get(n))||(r={type:\"style\",instance:null,count:0,state:null},t.set(n,r)),r):{type:\"void\",instance:null,count:0,state:null};case\"link\":if(\"stylesheet\"===t.rel&&\"string\"==typeof t.href&&\"string\"==typeof t.precedence){e=cU(t.href);var a,i,s,c,u=eZ(o).hoistableStyles,d=u.get(e);if(d||(o=o.ownerDocument||o,d={type:\"stylesheet\",instance:null,count:0,state:{loading:0,preload:null}},u.set(e,d),(u=o.querySelector(cV(e)))&&!u._p&&(d.instance=u,d.state.loading=5),cN.has(e)||(t={rel:\"preload\",as:\"style\",href:t.href,crossOrigin:t.crossOrigin,integrity:t.integrity,media:t.media,hrefLang:t.hrefLang,referrerPolicy:t.referrerPolicy},cN.set(e,t),u||(a=o,i=e,s=t,c=d.state,a.querySelector('link[rel=\"preload\"][as=\"style\"]['+i+\"]\")?c.loading=1:(c.preload=i=a.createElement(\"link\"),i.addEventListener(\"load\",function(){return c.loading|=1}),i.addEventListener(\"error\",function(){return c.loading|=2}),cc(i,\"link\",s),eY(i),a.head.appendChild(i))))),n&&null===r)throw Error(l(528,\"\"));return d}if(n&&null!==r)throw Error(l(529,\"\"));return null;case\"script\":return n=t.async,\"string\"==typeof(t=t.src)&&n&&\"function\"!=typeof n&&\"symbol\"!=typeof n?(n=cW(t),(r=(t=eZ(o).hoistableScripts).get(n))||(r={type:\"script\",instance:null,count:0,state:null},t.set(n,r)),r):{type:\"void\",instance:null,count:0,state:null};default:throw Error(l(444,e))}}function cU(e){return'href=\"'+nn(e)+'\"'}function cV(e){return'link[rel=\"stylesheet\"]['+e+\"]\"}function cq(e){return f({},e,{\"data-precedence\":e.precedence,precedence:null})}function cW(e){return'[src=\"'+nn(e)+'\"]'}function c$(e){return\"script[async]\"+e}function cZ(e,n,t){if(n.count++,null===n.instance)switch(n.type){case\"style\":var r=e.querySelector('style[data-href~=\"'+nn(t.href)+'\"]');if(r)return n.instance=r,eY(r),r;var o=f({},t,{\"data-href\":t.href,\"data-precedence\":t.precedence,href:null,precedence:null});return eY(r=(e.ownerDocument||e).createElement(\"style\")),cc(r,\"style\",o),cY(r,t.precedence,e),n.instance=r;case\"stylesheet\":o=cU(t.href);var a=e.querySelector(cV(o));if(a)return n.state.loading|=4,n.instance=a,eY(a),a;r=cq(t),(o=cN.get(o))&&cX(r,o),eY(a=(e.ownerDocument||e).createElement(\"link\"));var i=a;return i._p=new Promise(function(e,n){i.onload=e,i.onerror=n}),cc(a,\"link\",r),n.state.loading|=4,cY(a,t.precedence,e),n.instance=a;case\"script\":if(a=cW(t.src),o=e.querySelector(c$(a)))return n.instance=o,eY(o),o;return r=t,(o=cN.get(a))&&cK(r=f({},t),o),eY(o=(e=e.ownerDocument||e).createElement(\"script\")),cc(o,\"link\",r),e.head.appendChild(o),n.instance=o;case\"void\":return null;default:throw Error(l(443,n.type))}return\"stylesheet\"===n.type&&0==(4&n.state.loading)&&(r=n.instance,n.state.loading|=4,cY(r,t.precedence,e)),n.instance}function cY(e,n,t){for(var r=t.querySelectorAll('link[rel=\"stylesheet\"][data-precedence],style[data-precedence]'),o=r.length?r[r.length-1]:null,a=o,i=0;i<r.length;i++){var l=r[i];if(l.dataset.precedence===n)a=l;else if(a!==o)break}a?a.parentNode.insertBefore(e,a.nextSibling):(n=9===t.nodeType?t.head:t).insertBefore(e,n.firstChild)}function cX(e,n){null==e.crossOrigin&&(e.crossOrigin=n.crossOrigin),null==e.referrerPolicy&&(e.referrerPolicy=n.referrerPolicy),null==e.title&&(e.title=n.title)}function cK(e,n){null==e.crossOrigin&&(e.crossOrigin=n.crossOrigin),null==e.referrerPolicy&&(e.referrerPolicy=n.referrerPolicy),null==e.integrity&&(e.integrity=n.integrity)}var cQ=null;function cG(e,n,t){if(null===cQ){var r=new Map,o=cQ=new Map;o.set(t,r)}else(r=(o=cQ).get(t))||(r=new Map,o.set(t,r));if(r.has(e))return r;for(r.set(e,null),t=t.getElementsByTagName(e),o=0;o<t.length;o++){var a=t[o];if(!(a[eU]||a[eN]||\"link\"===e&&\"stylesheet\"===a.getAttribute(\"rel\"))&&\"http://www.w3.org/2000/svg\"!==a.namespaceURI){var i=a.getAttribute(n)||\"\";i=e+i;var l=r.get(i);l?l.push(a):r.set(i,[a])}}return r}function cJ(e,n,t){(e=e.ownerDocument||e).head.insertBefore(t,\"title\"===n?e.querySelector(\"head > title\"):null)}function c0(e){return\"stylesheet\"!==e.type||0!=(3&e.state.loading)}var c1=null;function c2(){if(this.count--,0===this.count){if(this.stylesheets)c5(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var c4=null;function c5(e,n){e.stylesheets=null,null!==e.unsuspend&&(e.count++,c4=new Map,n.forEach(c3,e),c4=null,c2.call(e))}function c3(e,n){if(!(4&n.state.loading)){var t=c4.get(e);if(t)var r=t.get(null);else{t=new Map,c4.set(e,t);for(var o=e.querySelectorAll(\"link[data-precedence],style[data-precedence]\"),a=0;a<o.length;a++){var i=o[a];(\"LINK\"===i.nodeName||\"not all\"!==i.getAttribute(\"media\"))&&(t.set(i.dataset.precedence,i),r=i)}r&&t.set(null,r)}i=(o=n.instance).getAttribute(\"data-precedence\"),(a=t.get(i)||r)===r&&t.set(null,o),t.set(i,o),this.count++,r=c2.bind(this),o.addEventListener(\"load\",r),o.addEventListener(\"error\",r),a?a.parentNode.insertBefore(o,a.nextSibling):(e=9===e.nodeType?e.head:e).insertBefore(o,e.firstChild),n.state.loading|=4}}var c6={$$typeof:x,Provider:null,Consumer:null,_currentValue:R,_currentValue2:R,_threadCount:0};function c9(e,n,t,r,o,a,i,l,s){this.tag=1,this.containerInfo=e,this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.next=this.pendingContext=this.context=this.cancelPendingCommit=null,this.callbackPriority=0,this.expirationTimes=eO(-1),this.entangledLanes=this.shellSuspendCounter=this.errorRecoveryDisabledLanes=this.expiredLanes=this.warmLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=eO(0),this.hiddenUpdates=eO(null),this.identifierPrefix=r,this.onUncaughtError=o,this.onCaughtError=a,this.onRecoverableError=i,this.pooledCache=null,this.pooledCacheLanes=0,this.formState=s,this.incompleteTransitions=new Map}function c8(e,n,t,r,o,a){o=o?t8:t8,null===r.context?r.context=o:r.pendingContext=o,(r=oA(n)).payload={element:t},null!==(a=void 0===a?null:a)&&(r.callback=a),null!==(t=oO(e,r,n))&&(so(t,e,n),oC(t,e,n))}function c7(e,n){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var t=e.retryLane;e.retryLane=0!==t&&t<n?t:n}}function ue(e,n){c7(e,n),(e=e.alternate)&&c7(e,n)}function un(e){if(13===e.tag||31===e.tag){var n=t3(e,0x4000000);null!==n&&so(n,e,0x4000000),ue(e,0x4000000)}}function ut(e){if(13===e.tag||31===e.tag){var n=st(),t=t3(e,n=eP(n));null!==t&&so(t,e,n),ue(e,n)}}var ur=!0;function uo(e,n,t,r){var o=L.T;L.T=null;var a=T.p;try{T.p=2,ui(e,n,t,r)}finally{T.p=a,L.T=o}}function ua(e,n,t,r){var o=L.T;L.T=null;var a=T.p;try{T.p=8,ui(e,n,t,r)}finally{T.p=a,L.T=o}}function ui(e,n,t,r){if(ur){var o=ul(r);if(null===o)s8(e,n,r,us,t),uy(e,r);else if(function(e,n,t,r,o){switch(n){case\"focusin\":return uf=ux(uf,e,n,t,r,o),!0;case\"dragenter\":return up=ux(up,e,n,t,r,o),!0;case\"mouseover\":return uh=ux(uh,e,n,t,r,o),!0;case\"pointerover\":var a=o.pointerId;return ug.set(a,ux(ug.get(a)||null,e,n,t,r,o)),!0;case\"gotpointercapture\":return a=o.pointerId,um.set(a,ux(um.get(a)||null,e,n,t,r,o)),!0}return!1}(o,e,n,t,r))r.stopPropagation();else if(uy(e,r),4&n&&-1<ub.indexOf(e)){for(;null!==o;){var a=eW(o);if(null!==a)switch(a.tag){case 3:if((a=a.stateNode).current.memoizedState.isDehydrated){var i=ex(a.pendingLanes);if(0!==i){var l=a;for(l.pendingLanes|=2,l.entangledLanes|=2;i;){var s=1<<31-eg(i);l.entanglements[1]|=s,i&=~s}sU(a),0==(6&lR)&&(l0=er()+500,sV(0,!1))}}break;case 31:case 13:null!==(l=t3(a,2))&&so(l,a,2),ss(),ue(a,2)}if(null===(a=ul(r))&&s8(e,n,r,us,t),a===o)break;o=a}null!==o&&r.stopPropagation()}else s8(e,n,r,null,t)}}function ul(e){return uc(e=nb(e))}var us=null;function uc(e){if(us=null,null!==(e=eq(e))){var n=s(e);if(null===n)e=null;else{var t=n.tag;if(13===t){if(null!==(e=c(n)))return e;e=null}else if(31===t){if(null!==(e=u(n)))return e;e=null}else if(3===t){if(n.stateNode.current.memoizedState.isDehydrated)return 3===n.tag?n.stateNode.containerInfo:null;e=null}else n!==e&&(e=null)}}return us=e,null}function uu(e){switch(e){case\"beforetoggle\":case\"cancel\":case\"click\":case\"close\":case\"contextmenu\":case\"copy\":case\"cut\":case\"auxclick\":case\"dblclick\":case\"dragend\":case\"dragstart\":case\"drop\":case\"focusin\":case\"focusout\":case\"input\":case\"invalid\":case\"keydown\":case\"keypress\":case\"keyup\":case\"mousedown\":case\"mouseup\":case\"paste\":case\"pause\":case\"play\":case\"pointercancel\":case\"pointerdown\":case\"pointerup\":case\"ratechange\":case\"reset\":case\"resize\":case\"seeked\":case\"submit\":case\"toggle\":case\"touchcancel\":case\"touchend\":case\"touchstart\":case\"volumechange\":case\"change\":case\"selectionchange\":case\"textInput\":case\"compositionstart\":case\"compositionend\":case\"compositionupdate\":case\"beforeblur\":case\"afterblur\":case\"beforeinput\":case\"blur\":case\"fullscreenchange\":case\"focus\":case\"hashchange\":case\"popstate\":case\"select\":case\"selectstart\":return 2;case\"drag\":case\"dragenter\":case\"dragexit\":case\"dragleave\":case\"dragover\":case\"mousemove\":case\"mouseout\":case\"mouseover\":case\"pointermove\":case\"pointerout\":case\"pointerover\":case\"scroll\":case\"touchmove\":case\"wheel\":case\"mouseenter\":case\"mouseleave\":case\"pointerenter\":case\"pointerleave\":return 8;case\"message\":switch(eo()){case ea:return 2;case ei:return 8;case el:case es:return 32;case ec:return 0x10000000;default:return 32}default:return 32}}var ud=!1,uf=null,up=null,uh=null,ug=new Map,um=new Map,uv=[],ub=\"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset\".split(\" \");function uy(e,n){switch(e){case\"focusin\":case\"focusout\":uf=null;break;case\"dragenter\":case\"dragleave\":up=null;break;case\"mouseover\":case\"mouseout\":uh=null;break;case\"pointerover\":case\"pointerout\":ug.delete(n.pointerId);break;case\"gotpointercapture\":case\"lostpointercapture\":um.delete(n.pointerId)}}function ux(e,n,t,r,o,a){return null===e||e.nativeEvent!==a?(e={blockedOn:n,domEventName:t,eventSystemFlags:r,nativeEvent:a,targetContainers:[o]},null!==n&&null!==(n=eW(n))&&un(n)):(e.eventSystemFlags|=r,n=e.targetContainers,null!==o&&-1===n.indexOf(o)&&n.push(o)),e}function uw(e){var n=eq(e.target);if(null!==n){var t=s(n);if(null!==t){if(13===(n=t.tag)){if(null!==(n=c(t))){e.blockedOn=n,eT(e.priority,function(){ut(t)});return}}else if(31===n){if(null!==(n=u(t))){e.blockedOn=n,eT(e.priority,function(){ut(t)});return}}else if(3===n&&t.stateNode.current.memoizedState.isDehydrated){e.blockedOn=3===t.tag?t.stateNode.containerInfo:null;return}}}e.blockedOn=null}function uj(e){if(null!==e.blockedOn)return!1;for(var n=e.targetContainers;0<n.length;){var t=ul(e.nativeEvent);if(null!==t)return null!==(n=eW(t))&&un(n),e.blockedOn=t,!1;var r=new(t=e.nativeEvent).constructor(t.type,t);nv=r,t.target.dispatchEvent(r),nv=null,n.shift()}return!0}function uk(e,n,t){uj(e)&&t.delete(n)}function uA(){ud=!1,null!==uf&&uj(uf)&&(uf=null),null!==up&&uj(up)&&(up=null),null!==uh&&uj(uh)&&(uh=null),ug.forEach(uk),um.forEach(uk)}function uO(e,n){e.blockedOn===n&&(e.blockedOn=null,ud||(ud=!0,o.unstable_scheduleCallback(o.unstable_NormalPriority,uA)))}var uC=null;function uS(e){uC!==e&&(uC=e,o.unstable_scheduleCallback(o.unstable_NormalPriority,function(){uC===e&&(uC=null);for(var n=0;n<e.length;n+=3){var t=e[n],r=e[n+1],o=e[n+2];if(\"function\"!=typeof r)if(null===uc(r||t))continue;else break;var a=eW(t);null!==a&&(e.splice(n,3),n-=3,aK(a,{pending:!0,data:o,method:t.method,action:r},r,o))}}))}function uE(e){function n(n){return uO(n,e)}null!==uf&&uO(uf,e),null!==up&&uO(up,e),null!==uh&&uO(uh,e),ug.forEach(n),um.forEach(n);for(var t=0;t<uv.length;t++){var r=uv[t];r.blockedOn===e&&(r.blockedOn=null)}for(;0<uv.length&&null===(t=uv[0]).blockedOn;)uw(t),null===t.blockedOn&&uv.shift();if(null!=(t=(e.ownerDocument||e).$$reactFormReplay))for(r=0;r<t.length;r+=3){var o=t[r],a=t[r+1],i=o[eD]||null;if(\"function\"==typeof a)i||uS(t);else if(i){var l=null;if(a&&a.hasAttribute(\"formAction\")){if(o=a,i=a[eD]||null)l=i.formAction;else if(null!==uc(o))continue}else l=i.action;\"function\"==typeof l?t[r+1]=l:(t.splice(r,3),r-=3),uS(t)}}}function u_(){function e(e){e.canIntercept&&\"react-transition\"===e.info&&e.intercept({handler:function(){return new Promise(function(e){return o=e})},focusReset:\"manual\",scroll:\"manual\"})}function n(){null!==o&&(o(),o=null),r||setTimeout(t,20)}function t(){if(!r&&!navigation.transition){var e=navigation.currentEntry;e&&null!=e.url&&navigation.navigate(e.url,{state:e.getState(),info:\"react-transition\",history:\"replace\"})}}if(\"object\"==typeof navigation){var r=!1,o=null;return navigation.addEventListener(\"navigate\",e),navigation.addEventListener(\"navigatesuccess\",n),navigation.addEventListener(\"navigateerror\",n),setTimeout(t,100),function(){r=!0,navigation.removeEventListener(\"navigate\",e),navigation.removeEventListener(\"navigatesuccess\",n),navigation.removeEventListener(\"navigateerror\",n),null!==o&&(o(),o=null)}}}function uP(e){this._internalRoot=e}function uz(e){this._internalRoot=e}uz.prototype.render=uP.prototype.render=function(e){var n=this._internalRoot;if(null===n)throw Error(l(409));c8(n.current,st(),e,n,null,null)},uz.prototype.unmount=uP.prototype.unmount=function(){var e=this._internalRoot;if(null!==e){this._internalRoot=null;var n=e.containerInfo;c8(e.current,2,null,e,null,null),ss(),n[eB]=null}},uz.prototype.unstable_scheduleHydration=function(e){if(e){var n=eL();e={blockedOn:null,target:e,priority:n};for(var t=0;t<uv.length&&0!==n&&n<uv[t].priority;t++);uv.splice(t,0,e),0===t&&uw(e)}};var uL=a.version;if(\"19.2.0-canary-97cdd5d3-20250710\"!==uL)throw Error(l(527,uL,\"19.2.0-canary-97cdd5d3-20250710\"));if(T.findDOMNode=function(e){var n=e._reactInternals;if(void 0===n){if(\"function\"==typeof e.render)throw Error(l(188));throw Error(l(268,e=Object.keys(e).join(\",\")))}return e=null===(e=null!==(e=function(e){var n=e.alternate;if(!n){if(null===(n=s(e)))throw Error(l(188));return n!==e?null:e}for(var t=e,r=n;;){var o=t.return;if(null===o)break;var a=o.alternate;if(null===a){if(null!==(r=o.return)){t=r;continue}break}if(o.child===a.child){for(a=o.child;a;){if(a===t)return d(o),e;if(a===r)return d(o),n;a=a.sibling}throw Error(l(188))}if(t.return!==r.return)t=o,r=a;else{for(var i=!1,c=o.child;c;){if(c===t){i=!0,t=o,r=a;break}if(c===r){i=!0,r=o,t=a;break}c=c.sibling}if(!i){for(c=a.child;c;){if(c===t){i=!0,t=a,r=o;break}if(c===r){i=!0,r=a,t=o;break}c=c.sibling}if(!i)throw Error(l(189))}}if(t.alternate!==r)throw Error(l(190))}if(3!==t.tag)throw Error(l(188));return t.stateNode.current===t?e:n}(n))?function e(n){var t=n.tag;if(5===t||26===t||27===t||6===t)return n;for(n=n.child;null!==n;){if(null!==(t=e(n)))return t;n=n.sibling}return null}(e):null)?null:e.stateNode},\"undefined\"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var uT=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!uT.isDisabled&&uT.supportsFiber)try{ef=uT.inject({bundleType:0,version:\"19.2.0-canary-97cdd5d3-20250710\",rendererPackageName:\"react-dom\",currentDispatcherRef:L,reconcilerVersion:\"19.2.0-canary-97cdd5d3-20250710\"}),ep=uT}catch(e){}}n.createRoot=function(e,n){if(!(t=e)||1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType)throw Error(l(299));var t,r,o,a,i,s,c,u,d=!1,f=\"\",p=iu,h=id,g=ip;return null!=n&&(!0===n.unstable_strictMode&&(d=!0),void 0!==n.identifierPrefix&&(f=n.identifierPrefix),void 0!==n.onUncaughtError&&(p=n.onUncaughtError),void 0!==n.onCaughtError&&(h=n.onCaughtError),void 0!==n.onRecoverableError&&(g=n.onRecoverableError)),r=e,o=1,a=!1,i=null,s=0,c=d,u=null,r=new c9(r,o,a,f,p,h,g,u_,null),o=1,!0===c&&(o|=24),c=re(3,null,null,o),r.current=c,c.stateNode=r,o=r1(),o.refCount++,r.pooledCache=o,o.refCount++,c.memoizedState={element:null,isDehydrated:a,cache:o},oj(c),n=r,e[eB]=n.current,s6(e),new uP(n)}},\"./dist/compiled/react-dom/cjs/react-dom.production.js\":function(e,n,t){\"use strict\";var r=t(\"./dist/compiled/react/index.js\");function o(e){var n=\"https://react.dev/errors/\"+e;if(1<arguments.length){n+=\"?args[]=\"+encodeURIComponent(arguments[1]);for(var t=2;t<arguments.length;t++)n+=\"&args[]=\"+encodeURIComponent(arguments[t])}return\"Minified React error #\"+e+\"; visit \"+n+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}function a(){}var i={d:{f:a,r:function(){throw Error(o(522))},D:a,C:a,L:a,m:a,X:a,S:a,M:a},p:0,findDOMNode:null},l=Symbol.for(\"react.portal\"),s=r.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function c(e,n){return\"font\"===e?\"\":\"string\"==typeof n?\"use-credentials\"===n?n:\"\":void 0}n.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=i,n.createPortal=function(e,n){var t=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!n||1!==n.nodeType&&9!==n.nodeType&&11!==n.nodeType)throw Error(o(299));return function(e,n,t){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:l,key:null==r?null:\"\"+r,children:e,containerInfo:n,implementation:t}}(e,n,null,t)},n.flushSync=function(e){var n=s.T,t=i.p;try{if(s.T=null,i.p=2,e)return e()}finally{s.T=n,i.p=t,i.d.f()}},n.preconnect=function(e,n){\"string\"==typeof e&&(n=n?\"string\"==typeof(n=n.crossOrigin)?\"use-credentials\"===n?n:\"\":void 0:null,i.d.C(e,n))},n.prefetchDNS=function(e){\"string\"==typeof e&&i.d.D(e)},n.preinit=function(e,n){if(\"string\"==typeof e&&n&&\"string\"==typeof n.as){var t=n.as,r=c(t,n.crossOrigin),o=\"string\"==typeof n.integrity?n.integrity:void 0,a=\"string\"==typeof n.fetchPriority?n.fetchPriority:void 0;\"style\"===t?i.d.S(e,\"string\"==typeof n.precedence?n.precedence:void 0,{crossOrigin:r,integrity:o,fetchPriority:a}):\"script\"===t&&i.d.X(e,{crossOrigin:r,integrity:o,fetchPriority:a,nonce:\"string\"==typeof n.nonce?n.nonce:void 0})}},n.preinitModule=function(e,n){if(\"string\"==typeof e)if(\"object\"==typeof n&&null!==n){if(null==n.as||\"script\"===n.as){var t=c(n.as,n.crossOrigin);i.d.M(e,{crossOrigin:t,integrity:\"string\"==typeof n.integrity?n.integrity:void 0,nonce:\"string\"==typeof n.nonce?n.nonce:void 0})}}else null==n&&i.d.M(e)},n.preload=function(e,n){if(\"string\"==typeof e&&\"object\"==typeof n&&null!==n&&\"string\"==typeof n.as){var t=n.as,r=c(t,n.crossOrigin);i.d.L(e,t,{crossOrigin:r,integrity:\"string\"==typeof n.integrity?n.integrity:void 0,nonce:\"string\"==typeof n.nonce?n.nonce:void 0,type:\"string\"==typeof n.type?n.type:void 0,fetchPriority:\"string\"==typeof n.fetchPriority?n.fetchPriority:void 0,referrerPolicy:\"string\"==typeof n.referrerPolicy?n.referrerPolicy:void 0,imageSrcSet:\"string\"==typeof n.imageSrcSet?n.imageSrcSet:void 0,imageSizes:\"string\"==typeof n.imageSizes?n.imageSizes:void 0,media:\"string\"==typeof n.media?n.media:void 0})}},n.preloadModule=function(e,n){if(\"string\"==typeof e)if(n){var t=c(n.as,n.crossOrigin);i.d.m(e,{as:\"string\"==typeof n.as&&\"script\"!==n.as?n.as:void 0,crossOrigin:t,integrity:\"string\"==typeof n.integrity?n.integrity:void 0})}else i.d.m(e)},n.requestFormReset=function(e){i.d.r(e)},n.unstable_batchedUpdates=function(e,n){return e(n)},n.useFormState=function(e,n,t){return s.H.useFormState(e,n,t)},n.useFormStatus=function(){return s.H.useHostTransitionStatus()},n.version=\"19.2.0-canary-97cdd5d3-20250710\"},\"./dist/compiled/react-dom/client.js\":function(e,n,t){\"use strict\";!function e(){if(\"undefined\"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&\"function\"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(e){console.error(e)}}(),e.exports=t(\"./dist/compiled/react-dom/cjs/react-dom-client.production.js\")},\"./dist/compiled/react-dom/index.js\":function(e,n,t){\"use strict\";!function e(){if(\"undefined\"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&\"function\"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(e){console.error(e)}}(),e.exports=t(\"./dist/compiled/react-dom/cjs/react-dom.production.js\")},\"./dist/compiled/react/cjs/react-jsx-runtime.production.js\":function(e,n){\"use strict\";var t=Symbol.for(\"react.transitional.element\");function r(e,n,r){var o=null;if(void 0!==r&&(o=\"\"+r),void 0!==n.key&&(o=\"\"+n.key),\"key\"in n)for(var a in r={},n)\"key\"!==a&&(r[a]=n[a]);else r=n;return{$$typeof:t,type:e,key:o,ref:void 0!==(n=r.ref)?n:null,props:r}}n.Fragment=Symbol.for(\"react.fragment\"),n.jsx=r,n.jsxs=r},\"./dist/compiled/react/cjs/react.production.js\":function(e,n){\"use strict\";var t=Symbol.for(\"react.transitional.element\"),r=Symbol.for(\"react.portal\"),o=Symbol.for(\"react.fragment\"),a=Symbol.for(\"react.strict_mode\"),i=Symbol.for(\"react.profiler\"),l=Symbol.for(\"react.consumer\"),s=Symbol.for(\"react.context\"),c=Symbol.for(\"react.forward_ref\"),u=Symbol.for(\"react.suspense\"),d=Symbol.for(\"react.memo\"),f=Symbol.for(\"react.lazy\"),p=Symbol.iterator,h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,m={};function v(e,n,t){this.props=e,this.context=n,this.refs=m,this.updater=t||h}function b(){}function y(e,n,t){this.props=e,this.context=n,this.refs=m,this.updater=t||h}v.prototype.isReactComponent={},v.prototype.setState=function(e,n){if(\"object\"!=typeof e&&\"function\"!=typeof e&&null!=e)throw Error(\"takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,e,n,\"setState\")},v.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,\"forceUpdate\")},b.prototype=v.prototype;var x=y.prototype=new b;x.constructor=y,g(x,v.prototype),x.isPureReactComponent=!0;var w=Array.isArray;function j(){}var k={H:null,A:null,T:null,S:null},A=Object.prototype.hasOwnProperty;function O(e,n,r,o,a,i){return{$$typeof:t,type:e,key:n,ref:void 0!==(r=i.ref)?r:null,props:i}}function C(e){return\"object\"==typeof e&&null!==e&&e.$$typeof===t}var S=/\\/+/g;function E(e,n){var t,r;return\"object\"==typeof e&&null!==e&&null!=e.key?(t=\"\"+e.key,r={\"=\":\"=0\",\":\":\"=2\"},\"$\"+t.replace(/[=:]/g,function(e){return r[e]})):n.toString(36)}function _(e,n,o){if(null==e)return e;var a=[],i=0;return!function e(n,o,a,i,l){var s,c,u,d=typeof n;(\"undefined\"===d||\"boolean\"===d)&&(n=null);var h=!1;if(null===n)h=!0;else switch(d){case\"bigint\":case\"string\":case\"number\":h=!0;break;case\"object\":switch(n.$$typeof){case t:case r:h=!0;break;case f:return e((h=n._init)(n._payload),o,a,i,l)}}if(h)return l=l(n),h=\"\"===i?\".\"+E(n,0):i,w(l)?(a=\"\",null!=h&&(a=h.replace(S,\"$&/\")+\"/\"),e(l,o,a,\"\",function(e){return e})):null!=l&&(C(l)&&(s=l,c=a+(null==l.key||n&&n.key===l.key?\"\":(\"\"+l.key).replace(S,\"$&/\")+\"/\")+h,l=O(s.type,c,void 0,void 0,void 0,s.props)),o.push(l)),1;h=0;var g=\"\"===i?\".\":i+\":\";if(w(n))for(var m=0;m<n.length;m++)d=g+E(i=n[m],m),h+=e(i,o,a,d,l);else if(\"function\"==typeof(m=null===(u=n)||\"object\"!=typeof u?null:\"function\"==typeof(u=p&&u[p]||u[\"@@iterator\"])?u:null))for(n=m.call(n),m=0;!(i=n.next()).done;)d=g+E(i=i.value,m++),h+=e(i,o,a,d,l);else if(\"object\"===d){if(\"function\"==typeof n.then)return e(function(e){switch(e.status){case\"fulfilled\":return e.value;case\"rejected\":throw e.reason;default:switch(\"string\"==typeof e.status?e.then(j,j):(e.status=\"pending\",e.then(function(n){\"pending\"===e.status&&(e.status=\"fulfilled\",e.value=n)},function(n){\"pending\"===e.status&&(e.status=\"rejected\",e.reason=n)})),e.status){case\"fulfilled\":return e.value;case\"rejected\":throw e.reason}}throw e}(n),o,a,i,l);throw Error(\"Objects are not valid as a React child (found: \"+(\"[object Object]\"===(o=String(n))?\"object with keys {\"+Object.keys(n).join(\", \")+\"}\":o)+\"). If you meant to render a collection of children, use an array instead.\")}return h}(e,a,\"\",\"\",function(e){return n.call(o,e,i++)}),a}function P(e){if(-1===e._status){var n=e._result;(n=n()).then(function(n){(0===e._status||-1===e._status)&&(e._status=1,e._result=n)},function(n){(0===e._status||-1===e._status)&&(e._status=2,e._result=n)}),-1===e._status&&(e._status=0,e._result=n)}if(1===e._status)return e._result.default;throw e._result}var z=\"function\"==typeof reportError?reportError:function(e){if(\"object\"==typeof window&&\"function\"==typeof window.ErrorEvent){var n=new window.ErrorEvent(\"error\",{bubbles:!0,cancelable:!0,message:\"object\"==typeof e&&null!==e&&\"string\"==typeof e.message?String(e.message):String(e),error:e});if(!window.dispatchEvent(n))return}else if(\"object\"==typeof process&&\"function\"==typeof process.emit)return void process.emit(\"uncaughtException\",e);console.error(e)};n.Children={map:_,forEach:function(e,n,t){_(e,function(){n.apply(this,arguments)},t)},count:function(e){var n=0;return _(e,function(){n++}),n},toArray:function(e){return _(e,function(e){return e})||[]},only:function(e){if(!C(e))throw Error(\"React.Children.only expected to receive a single React element child.\");return e}},n.Component=v,n.Fragment=o,n.Profiler=i,n.PureComponent=y,n.StrictMode=a,n.Suspense=u,n.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=k,n.__COMPILER_RUNTIME={__proto__:null,c:function(e){return k.H.useMemoCache(e)}},n.cache=function(e){return function(){return e.apply(null,arguments)}},n.cacheSignal=function(){return null},n.cloneElement=function(e,n,t){if(null==e)throw Error(\"The argument must be a React element, but you passed \"+e+\".\");var r=g({},e.props),o=e.key,a=void 0;if(null!=n)for(i in void 0!==n.ref&&(a=void 0),void 0!==n.key&&(o=\"\"+n.key),n)A.call(n,i)&&\"key\"!==i&&\"__self\"!==i&&\"__source\"!==i&&(\"ref\"!==i||void 0!==n.ref)&&(r[i]=n[i]);var i=arguments.length-2;if(1===i)r.children=t;else if(1<i){for(var l=Array(i),s=0;s<i;s++)l[s]=arguments[s+2];r.children=l}return O(e.type,o,void 0,void 0,a,r)},n.createContext=function(e){return(e={$$typeof:s,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider=e,e.Consumer={$$typeof:l,_context:e},e},n.createElement=function(e,n,t){var r,o={},a=null;if(null!=n)for(r in void 0!==n.key&&(a=\"\"+n.key),n)A.call(n,r)&&\"key\"!==r&&\"__self\"!==r&&\"__source\"!==r&&(o[r]=n[r]);var i=arguments.length-2;if(1===i)o.children=t;else if(1<i){for(var l=Array(i),s=0;s<i;s++)l[s]=arguments[s+2];o.children=l}if(e&&e.defaultProps)for(r in i=e.defaultProps)void 0===o[r]&&(o[r]=i[r]);return O(e,a,void 0,void 0,null,o)},n.createRef=function(){return{current:null}},n.forwardRef=function(e){return{$$typeof:c,render:e}},n.isValidElement=C,n.lazy=function(e){return{$$typeof:f,_payload:{_status:-1,_result:e},_init:P}},n.memo=function(e,n){return{$$typeof:d,type:e,compare:void 0===n?null:n}},n.startTransition=function(e){var n=k.T,t={};k.T=t;try{var r=e(),o=k.S;null!==o&&o(t,r),\"object\"==typeof r&&null!==r&&\"function\"==typeof r.then&&r.then(j,z)}catch(e){z(e)}finally{null!==n&&null!==t.types&&(n.types=t.types),k.T=n}},n.unstable_useCacheRefresh=function(){return k.H.useCacheRefresh()},n.use=function(e){return k.H.use(e)},n.useActionState=function(e,n,t){return k.H.useActionState(e,n,t)},n.useCallback=function(e,n){return k.H.useCallback(e,n)},n.useContext=function(e){return k.H.useContext(e)},n.useDebugValue=function(){},n.useDeferredValue=function(e,n){return k.H.useDeferredValue(e,n)},n.useEffect=function(e,n){return k.H.useEffect(e,n)},n.useId=function(){return k.H.useId()},n.useImperativeHandle=function(e,n,t){return k.H.useImperativeHandle(e,n,t)},n.useInsertionEffect=function(e,n){return k.H.useInsertionEffect(e,n)},n.useLayoutEffect=function(e,n){return k.H.useLayoutEffect(e,n)},n.useMemo=function(e,n){return k.H.useMemo(e,n)},n.useOptimistic=function(e,n){return k.H.useOptimistic(e,n)},n.useReducer=function(e,n,t){return k.H.useReducer(e,n,t)},n.useRef=function(e){return k.H.useRef(e)},n.useState=function(e){return k.H.useState(e)},n.useSyncExternalStore=function(e,n,t){return k.H.useSyncExternalStore(e,n,t)},n.useTransition=function(){return k.H.useTransition()},n.version=\"19.2.0-canary-97cdd5d3-20250710\"},\"./dist/compiled/react/index.js\":function(e,n,t){\"use strict\";e.exports=t(\"./dist/compiled/react/cjs/react.production.js\")},\"./dist/compiled/react/jsx-runtime.js\":function(e,n,t){\"use strict\";e.exports=t(\"./dist/compiled/react/cjs/react-jsx-runtime.production.js\")},\"./dist/compiled/scheduler/cjs/scheduler.production.js\":function(e,n){\"use strict\";function t(e,n){var t=e.length;for(e.push(n);0<t;){var r=t-1>>>1,o=e[r];if(0<a(o,n))e[r]=n,e[t]=o,t=r;else break}}function r(e){return 0===e.length?null:e[0]}function o(e){if(0===e.length)return null;var n=e[0],t=e.pop();if(t!==n){e[0]=t;for(var r=0,o=e.length,i=o>>>1;r<i;){var l=2*(r+1)-1,s=e[l],c=l+1,u=e[c];if(0>a(s,t))c<o&&0>a(u,s)?(e[r]=u,e[c]=t,r=c):(e[r]=s,e[l]=t,r=l);else if(c<o&&0>a(u,t))e[r]=u,e[c]=t,r=c;else break}}return n}function a(e,n){var t=e.sortIndex-n.sortIndex;return 0!==t?t:e.id-n.id}if(n.unstable_now=void 0,\"object\"==typeof performance&&\"function\"==typeof performance.now){var i,l=performance;n.unstable_now=function(){return l.now()}}else{var s=Date,c=s.now();n.unstable_now=function(){return s.now()-c}}var u=[],d=[],f=1,p=null,h=3,g=!1,m=!1,v=!1,b=!1,y=\"function\"==typeof setTimeout?setTimeout:null,x=\"function\"==typeof clearTimeout?clearTimeout:null,w=\"undefined\"!=typeof setImmediate?setImmediate:null;function j(e){for(var n=r(d);null!==n;){if(null===n.callback)o(d);else if(n.startTime<=e)o(d),n.sortIndex=n.expirationTime,t(u,n);else break;n=r(d)}}function k(e){if(v=!1,j(e),!m)if(null!==r(u))m=!0,A||(A=!0,i());else{var n=r(d);null!==n&&L(k,n.startTime-e)}}var A=!1,O=-1,C=5,S=-1;function E(){return!!b||!(n.unstable_now()-S<C)}function _(){if(b=!1,A){var e=n.unstable_now();S=e;var t=!0;try{e:{m=!1,v&&(v=!1,x(O),O=-1),g=!0;var a=h;try{n:{for(j(e),p=r(u);null!==p&&!(p.expirationTime>e&&E());){var l=p.callback;if(\"function\"==typeof l){p.callback=null,h=p.priorityLevel;var s=l(p.expirationTime<=e);if(e=n.unstable_now(),\"function\"==typeof s){p.callback=s,j(e),t=!0;break n}p===r(u)&&o(u),j(e)}else o(u);p=r(u)}if(null!==p)t=!0;else{var c=r(d);null!==c&&L(k,c.startTime-e),t=!1}}break e}finally{p=null,h=a,g=!1}}}finally{t?i():A=!1}}}if(\"function\"==typeof w)i=function(){w(_)};else if(\"undefined\"!=typeof MessageChannel){var P=new MessageChannel,z=P.port2;P.port1.onmessage=_,i=function(){z.postMessage(null)}}else i=function(){y(_,0)};function L(e,t){O=y(function(){e(n.unstable_now())},t)}n.unstable_IdlePriority=5,n.unstable_ImmediatePriority=1,n.unstable_LowPriority=4,n.unstable_NormalPriority=3,n.unstable_Profiling=null,n.unstable_UserBlockingPriority=2,n.unstable_cancelCallback=function(e){e.callback=null},n.unstable_forceFrameRate=function(e){0>e||125<e?console.error(\"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"):C=0<e?Math.floor(1e3/e):5},n.unstable_getCurrentPriorityLevel=function(){return h},n.unstable_next=function(e){switch(h){case 1:case 2:case 3:var n=3;break;default:n=h}var t=h;h=n;try{return e()}finally{h=t}},n.unstable_requestPaint=function(){b=!0},n.unstable_runWithPriority=function(e,n){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var t=h;h=e;try{return n()}finally{h=t}},n.unstable_scheduleCallback=function(e,o,a){var l=n.unstable_now();switch(a=\"object\"==typeof a&&null!==a&&\"number\"==typeof(a=a.delay)&&0<a?l+a:l,e){case 1:var s=-1;break;case 2:s=250;break;case 5:s=0x3fffffff;break;case 4:s=1e4;break;default:s=5e3}return s=a+s,e={id:f++,callback:o,priorityLevel:e,startTime:a,expirationTime:s,sortIndex:-1},a>l?(e.sortIndex=a,t(d,e),null===r(u)&&e===r(d)&&(v?(x(O),O=-1):v=!0,L(k,a-l))):(e.sortIndex=s,t(u,e),m||g||(m=!0,A||(A=!0,i()))),e},n.unstable_shouldYield=E,n.unstable_wrapCallback=function(e){var n=h;return function(){var t=h;h=n;try{return e.apply(this,arguments)}finally{h=t}}}},\"./dist/compiled/scheduler/index.js\":function(e,n,t){\"use strict\";e.exports=t(\"./dist/compiled/scheduler/cjs/scheduler.production.js\")},\"./dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js\":function(e){(()=>{\"use strict\";\"undefined\"!=typeof __nccwpck_require__&&(__nccwpck_require__.ab=\"//\");var n,t,r,o,a,i,l,s,c={};Object.defineProperty(c,\"__esModule\",{value:!0}),n=\"<unknown>\",t=/^\\s*at (.*?) ?\\(((?:file|https?|blob|chrome-extension|native|eval|webpack|webpack-internal|rsc|turbopack|<anonymous>|\\/|[a-z]:\\\\|\\\\\\\\).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i,r=/\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/,o=/^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|webpack-internal|rsc|turbopack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i,a=/^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|webpack-internal|rsc|turbopack|resource|\\[native).*?|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i,i=/(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i,l=/^\\s*(?:([^@]*)(?:\\((.*?)\\))?@)?(\\S.*?):(\\d+)(?::(\\d+))?\\s*$/i,s=/^\\s*at (?:((?:\\[object object\\])?[^\\\\/]+(?: \\[as \\S+\\])?) )?\\(?(.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i,c.parse=function(e){return e.split(\"\\n\").reduce(function(e,c){var u,d,f,p,h,g,m=function(e){var o=t.exec(e);if(!o)return null;var a=o[2]&&0===o[2].indexOf(\"native\"),i=o[2]&&0===o[2].indexOf(\"eval\"),l=r.exec(o[2]);return i&&null!=l&&(o[2]=l[1],o[3]=l[2],o[4]=l[3]),{file:a?null:o[2],methodName:o[1]||n,arguments:a?[o[2]]:[],lineNumber:o[3]?+o[3]:null,column:o[4]?+o[4]:null}}(c)||(u=c,(d=o.exec(u))?{file:d[2],methodName:d[1]||n,arguments:[],lineNumber:+d[3],column:d[4]?+d[4]:null}:null)||function(e){var t=a.exec(e);if(!t)return null;var r=t[3]&&t[3].indexOf(\" > eval\")>-1,o=i.exec(t[3]);return r&&null!=o&&(t[3]=o[1],t[4]=o[2],t[5]=null),{file:t[3],methodName:t[1]||n,arguments:t[2]?t[2].split(\",\"):[],lineNumber:t[4]?+t[4]:null,column:t[5]?+t[5]:null}}(c)||(f=c,(p=s.exec(f))?{file:p[2],methodName:p[1]||n,arguments:[],lineNumber:+p[3],column:p[4]?+p[4]:null}:null)||(h=c,(g=l.exec(h))?{file:g[3],methodName:g[1]||n,arguments:[],lineNumber:+g[4],column:g[5]?+g[5]:null}:null);return m&&e.push(m),e},[])},e.exports=c})()},\"./dist/compiled/strip-ansi/index.js\":function(e){(()=>{\"use strict\";var n={511:e=>{e.exports=({onlyFirst:e=!1}={})=>RegExp(\"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)|(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))\",e?void 0:\"g\")},532:(e,n,t)=>{let r=t(511);e.exports=e=>\"string\"==typeof e?e.replace(r(),\"\"):e}},t={};function r(e){var o=t[e];if(void 0!==o)return o.exports;var a=t[e]={exports:{}},i=!0;try{n[e](a,a.exports,r),i=!1}finally{i&&delete t[e]}return a.exports}r.ab=\"//\",e.exports=r(532)})()},\"./src/build/webpack/loaders/devtool/devtool-style-inject.js\":function(e){function n(){let e=window._nextjsDevtoolsStyleCache;if(e.cachedShadowRoot)return e.cachedShadowRoot;let n=document.querySelector(\"nextjs-portal\"),t=n?.shadowRoot||null;return t&&(e.cachedShadowRoot=t),t}function t(e,n){let t=window._nextjsDevtoolsStyleCache;t.lastInsertedElement?t.lastInsertedElement.nextSibling?n.insertBefore(e,t.lastInsertedElement.nextSibling):n.appendChild(e):n.insertBefore(e,n.firstChild),t.lastInsertedElement=e}function r(){let e=window._nextjsDevtoolsStyleCache,r=n();r&&(e.pendingElements.forEach(e=>{t(e,r)}),e.pendingElements=[])}\"undefined\"!=typeof window&&(window._nextjsDevtoolsStyleCache=window._nextjsDevtoolsStyleCache||{pendingElements:[],isObserving:!1,lastInsertedElement:null,cachedShadowRoot:null}),e.exports=function(e){e.setAttribute(\"data-nextjs-dev-tool-style\",\"true\");let o=n();o?t(e,o):(window._nextjsDevtoolsStyleCache.pendingElements.push(e),function(){let e=window._nextjsDevtoolsStyleCache;if(e.isObserving)return;if(e.isObserving=!0,n())return r();let t=new MutationObserver(o=>{if(0===o.length||0===o[0].addedNodes.length)return;let a=o[0].addedNodes[0],i=null;if(\"SCRIPT\"===a.tagName&&a.getAttribute(\"data-nextjs-dev-overlay\")?i=a.firstChild:\"NEXTJS-PORTAL\"===a.tagName&&(i=a),!i)return;let l=()=>{n()?(r(),t.disconnect(),e.isObserving=!1):setTimeout(l,20)};l()});t.observe(document.body,{childList:!0,subtree:!0})}())}},\"./src/next-devtools/dev-overlay/components/errors/dev-tools-indicator/dev-tools-info/dev-tools-info.tsx\":function(e,n,t){\"use strict\";t.d(n,{g:()=>s,x:()=>l});var r=t(\"./dist/compiled/react/jsx-runtime.js\"),o=t(\"./dist/compiled/react/index.js\"),a=t(\"./src/next-devtools/dev-overlay/components/errors/dev-tools-indicator/utils.ts\"),i=t(\"./src/next-devtools/dev-overlay/hooks/use-delayed-render.ts\");function l(e){var n,t,l=e.title,s=e.children,u=e.learnMoreLink,d=e.isOpen,f=e.triggerRef,p=e.close,h=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"title\",\"children\",\"learnMoreLink\",\"isOpen\",\"triggerRef\",\"close\"]),g=(0,o.useRef)(null),m=(0,o.useRef)(null),v=(0,i.N)(d,{enterDelay:0,exitDelay:a.K7}),b=v.mounted,y=v.rendered;return((0,a.P5)(g,f,d,function(){var e;null==(e=m.current)||e.focus()}),(0,a.O8)(g,f,b,p),b)?(0,r.jsx)(\"div\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r;r=t[n],n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r})}return e}({tabIndex:-1,role:\"dialog\",ref:g,\"data-info-popover\":!0},h),t=t={\"data-rendered\":y,children:(0,r.jsxs)(\"div\",{className:\"dev-tools-info-container\",children:[(0,r.jsxs)(\"div\",{className:\"dev-tools-info-header\",children:[(0,r.jsx)(\"button\",{ref:m,className:\"dev-tools-info-close-button\",onClick:p,\"aria-label\":\"Close dialog\",children:(0,r.jsx)(c,{})}),(0,r.jsx)(\"h3\",{className:\"dev-tools-info-title\",children:l})]}),(0,r.jsxs)(\"div\",{className:\"dev-tools-info-body\",children:[s,u&&(0,r.jsx)(\"div\",{className:\"dev-tools-info-button-container\",children:(0,r.jsx)(\"a\",{className:\"dev-tools-info-learn-more-button\",href:u,target:\"_blank\",rel:\"noreferrer noopener\",children:\"Learn More\"})})]})]})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n)):null}var s=\"\\n [data-info-popover] {\\n -webkit-font-smoothing: antialiased;\\n display: flex;\\n flex-direction: column;\\n align-items: flex-start;\\n background: var(--color-background-100);\\n border: 1px solid var(--color-gray-alpha-400);\\n background-clip: padding-box;\\n box-shadow: var(--shadow-menu);\\n border-radius: var(--rounded-xl);\\n position: absolute;\\n font-family: var(--font-stack-sans);\\n z-index: 3;\\n overflow: hidden;\\n opacity: 0;\\n outline: 0;\\n min-width: 350px;\\n transition: opacity var(--animate-out-duration-ms)\\n var(--animate-out-timing-function);\\n\\n &[data-rendered='true'] {\\n opacity: 1;\\n scale: 1;\\n }\\n\\n button:focus-visible {\\n outline: var(--focus-ring);\\n }\\n }\\n\\n .dev-tools-info-container {\\n width: 100%;\\n }\\n\\n .dev-tools-info-body {\\n padding: 16px;\\n }\\n\\n .dev-tools-info-header {\\n height: 48px;\\n display: flex;\\n align-items: center;\\n gap: 6px;\\n padding: 6px 8px;\\n border-bottom: 1px solid var(--color-gray-alpha-400);\\n }\\n\\n .dev-tools-info-close-button {\\n all: unset;\\n width: 20px;\\n height: 20px; \\n display: flex;\\n align-items: center;\\n justify-content: center;\\n color: var(--color-gray-900);\\n transition: color 150ms ease;\\n translate: 0 1px;\\n border-radius: 3px;\\n\\n &:hover {\\n color: var(--color-gray-1000);\\n }\\n }\\n\\n .dev-tools-info-title {\\n color: var(--color-gray-1000);\\n font-size: var(--size-14);\\n font-weight: 500;\\n line-height: var(--size-20);\\n margin: 0;\\n }\\n\\n .dev-tools-info-section-title {\\n padding: 8px 0px;\\n color: var(--color-gray-1000);\\n font-size: var(--size-16);\\n font-weight: 600;\\n line-height: var(--size-20);\\n margin: 0;\\n }\\n\\n .dev-tools-info-article {\\n padding: 8px 6px;\\n color: var(--color-gray-1000);\\n font-size: var(--size-14);\\n line-height: var(--size-20);\\n margin: 0;\\n }\\n .dev-tools-info-paragraph {\\n &:last-child {\\n margin-bottom: 0;\\n }\\n }\\n\\n .dev-tools-info-button-container {\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n }\\n\\n .dev-tools-info-learn-more-button {\\n align-content: center;\\n padding: 0 8px;\\n height: var(--size-28);\\n font-size: var(--size-14);\\n font-weight: 500;\\n line-height: var(--size-20);\\n transition: background var(--duration-short) ease;\\n color: var(--color-background-100);\\n border-radius: var(--rounded-md-2);\\n background: var(--color-gray-1000);\\n margin-left: auto;\\n }\\n\\n .dev-tools-info-learn-more-button:hover {\\n text-decoration: none;\\n color: var(--color-background-100);\\n opacity: 0.9;\\n }\\n\";function c(){return(0,r.jsx)(\"svg\",{width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,r.jsx)(\"path\",{d:\"M5.14645 8.70703C4.75595 8.31651 4.75595 7.68349 5.14645 7.29297L10.5 1.93945L11.5605 3L6.56051 8L11.5605 13L10.5 14.0605L5.14645 8.70703Z\",fill:\"currentColor\"})})}},\"./src/next-devtools/dev-overlay/components/errors/dev-tools-indicator/dev-tools-info/segments-explorer.tsx\":function(e,n,t){\"use strict\";t.d(n,{W:()=>i});var r=t(\"./dist/compiled/react/jsx-runtime.js\"),o=t(\"./src/next-devtools/dev-overlay/components/overview/segment-explorer.tsx\"),a=t(\"./src/next-devtools/dev-overlay/components/errors/dev-tools-indicator/dev-tools-info/dev-tools-info.tsx\");function i(e){var n,t,i=e.routerType,l=e.page,s=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"routerType\",\"page\"]);return(0,r.jsx)(a.x,(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r;r=t[n],n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r})}return e}({title:\"Route Info\"},s),t=t={children:(0,r.jsx)(\"div\",{\"data-nextjs-segments-explorer\":!0,style:{margin:\"-16px\"},children:(0,r.jsx)(o.u,{isAppRouter:\"app\"===i,page:l})})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}},\"./src/next-devtools/dev-overlay/components/errors/dev-tools-indicator/utils.ts\":function(e,n,t){\"use strict\";t.d(n,{K7:()=>s,O8:()=>l,P5:()=>a,uD:()=>c,vY:()=>i});var r=t(\"./dist/compiled/react/index.js\");function o(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function a(e,n,t,a){(0,r.useEffect)(function(){var r=function(e){if(\"Tab\"===e.key&&null!==l){var n,t,r=(t=(n=l.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'))?[n[0],n[n.length-1]]:[],function(e){if(Array.isArray(e))return e}(t)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(t,2)||function(e,n){if(e){if(\"string\"==typeof e)return o(e,2);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return o(e,n)}}(t,2)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),a=r[0],s=r[1],c=i(l);e.shiftKey?c===a&&(null==s||s.focus(),e.preventDefault()):c===s&&(null==a||a.focus(),e.preventDefault())}},l=null,s=setTimeout(function(){if(l=e.current,t)a?a():null==l||l.focus(),null==l||l.addEventListener(\"keydown\",r);else{var o,s=i(l);n&&(null==l?void 0:l.contains(s))&&(null==(o=n.current)||o.focus())}});return function(){clearTimeout(s),null==l||l.removeEventListener(\"keydown\",r)}},[t])}function i(e){var n,t=null==e?void 0:e.getRootNode();return(null!=(n=ShadowRoot)&&\"undefined\"!=typeof Symbol&&n[Symbol.hasInstance]?!!n[Symbol.hasInstance](t):t instanceof n)?null==t?void 0:t.activeElement:null}function l(e,n,t,o,a){(0,r.useEffect)(function(){var r,i=function(t){var r,a,i=t.target;!(e.current&&e.current.contains(i))&&(null!=(r=e.current)&&r.getBoundingClientRect()&&t.clientX>=e.current.getBoundingClientRect().left&&t.clientX<=e.current.getBoundingClientRect().right&&t.clientY>=e.current.getBoundingClientRect().top&&t.clientY<=e.current.getBoundingClientRect().bottom||null!=(a=n.current)&&a.getBoundingClientRect()&&t.clientX>=n.current.getBoundingClientRect().left&&t.clientX<=n.current.getBoundingClientRect().right&&t.clientY>=n.current.getBoundingClientRect().top&&t.clientY<=n.current.getBoundingClientRect().bottom||o())},l=function(e){\"Escape\"===e.key&&o()};if(t){var s=a||(null==(r=e.current)?void 0:r.ownerDocument);return null==s||s.addEventListener(\"mousedown\",i),null==s||s.addEventListener(\"keydown\",l),function(){null==s||s.removeEventListener(\"mousedown\",i),null==s||s.removeEventListener(\"keydown\",l)}}},[t,e,n])}var s=200,c=\"cubic-bezier(0.175, 0.885, 0.32, 1.1)\"},\"./src/next-devtools/dev-overlay/components/overview/segment-explorer.tsx\":function(e,n,t){\"use strict\";t.d(n,{u:()=>at});var r,o,a,i,l=t(\"./dist/compiled/react/jsx-runtime.js\"),s=t(\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\"),c=t.n(s),u=t(\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/styleDomAPI.js\"),d=t.n(u),f=t(\"./src/build/webpack/loaders/devtool/devtool-style-inject.js\"),p=t.n(f),h=t(\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\"),g=t.n(h),m=t(\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/insertStyleElement.js\"),v=t.n(m),b=t(\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/styleTagTransform.js\"),y=t.n(b),x=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/components/overview/segment-explorer.css\"),w={};w.styleTagTransform=y(),w.setAttributes=g(),w.insert=p(),w.domAPI=d(),w.insertStyleElement=v(),c()(x.Z,w),x.Z&&x.Z.locals&&x.Z.locals;var j=t(\"./src/next-devtools/dev-overlay/segment-explorer-trie.ts\"),k=t(\"./src/next-devtools/dev-overlay/utils/cx.ts\"),A=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/components/overview/segment-boundary-trigger.css\"),O={};O.styleTagTransform=y(),O.setAttributes=g(),O.insert=p(),O.domAPI=d(),O.insertStyleElement=v(),c()(A.Z,O),A.Z&&A.Z.locals&&A.Z.locals;var C=t(\"./dist/compiled/react/index.js\"),S=t.t(C,2),E=t(\"./dist/compiled/react-dom/index.js\");let _={};function P(e,n){let t=C.useRef(_);return t.current===_&&(t.current=e(n)),t}let z=S[`useInsertionEffect${Math.random().toFixed(1)}`.slice(0,-3)],L=z&&z!==C.useLayoutEffect?z:e=>e();function T(e){let n=P(R).current;return n.next=e,L(n.effect),n.trampoline}function R(){let e={next:void 0,callback:N,trampoline:(...n)=>e.callback?.(...n),effect:()=>{e.callback=e.next}};return e}function N(){}function D(){let e=new Map;return{emit(n,t){e.get(n)?.forEach(e=>e(t))},on(n,t){e.has(n)||e.set(n,new Set),e.get(n).add(t)},off(n,t){e.get(n)?.delete(t)}}}let B={...S},M=0,I=B.useId;function H(e,n){if(void 0!==I){let t=I();return e??(n?`${n}-${t}`:t)}return function(e,n=\"mui\"){let[t,r]=C.useState(e),o=e||t;return C.useEffect(()=>{null==t&&(M+=1,r(`${n}-${M}`))},[t,n]),o}(e,n)}let F=\"undefined\"!=typeof document?C.useLayoutEffect:()=>{},U=C.createContext(null),V=C.createContext(null),q=()=>C.useContext(U)?.id||null,W=()=>C.useContext(V);function $(e){let{children:n,id:t}=e,r=q();return(0,l.jsx)(U.Provider,{value:C.useMemo(()=>({id:t,parentId:r}),[t,r]),children:n})}function Z(e){let{children:n}=e,t=C.useRef([]),r=C.useCallback(e=>{t.current=[...t.current,e]},[]),o=C.useCallback(e=>{t.current=t.current.filter(n=>n!==e)},[]),[a]=C.useState(()=>D());return(0,l.jsx)(V.Provider,{value:C.useMemo(()=>({nodesRef:t,addNode:r,removeNode:o,events:a}),[r,o,a]),children:n})}function Y(e){let{open:n=!1,onOpenChange:t,elements:r}=e,o=H(),a=C.useRef({}),[i]=C.useState(()=>D()),l=null!=q(),[s,c]=C.useState(r.reference),u=T((e,n,r)=>{a.current.openEvent=e?n:void 0,i.emit(\"openchange\",{open:e,event:n,reason:r,nested:l}),t?.(e,n,r)}),d=C.useMemo(()=>({setPositionReference:c}),[]),f=C.useMemo(()=>({reference:s||r.reference||null,floating:r.floating||null,domReference:r.reference}),[s,r.reference,r.floating]);return C.useMemo(()=>({dataRef:a,open:n,onOpenChange:u,elements:f,events:i,floatingId:o,refs:d}),[n,u,f,i,o,d])}function X(){return\"undefined\"!=typeof window}function K(e){return J(e)?(e.nodeName||\"\").toLowerCase():\"#document\"}function Q(e){var n;return(null==e||null==(n=e.ownerDocument)?void 0:n.defaultView)||window}function G(e){var n;return null==(n=(J(e)?e.ownerDocument:e.document)||window.document)?void 0:n.documentElement}function J(e){return!!X()&&(e instanceof Node||e instanceof Q(e).Node)}function ee(e){return!!X()&&(e instanceof Element||e instanceof Q(e).Element)}function en(e){return!!X()&&(e instanceof HTMLElement||e instanceof Q(e).HTMLElement)}function et(e){return!!X()&&\"undefined\"!=typeof ShadowRoot&&(e instanceof ShadowRoot||e instanceof Q(e).ShadowRoot)}let er=new Set([\"inline\",\"contents\"]);function eo(e){let{overflow:n,overflowX:t,overflowY:r,display:o}=eg(e);return/auto|scroll|overlay|hidden|clip/.test(n+r+t)&&!er.has(o)}let ea=new Set([\"table\",\"td\",\"th\"]),ei=[\":popover-open\",\":modal\"];function el(e){return ei.some(n=>{try{return e.matches(n)}catch(e){return!1}})}let es=[\"transform\",\"translate\",\"scale\",\"rotate\",\"perspective\"],ec=[\"transform\",\"translate\",\"scale\",\"rotate\",\"perspective\",\"filter\"],eu=[\"paint\",\"layout\",\"strict\",\"content\"];function ed(e){let n=ef(),t=ee(e)?eg(e):e;return es.some(e=>!!t[e]&&\"none\"!==t[e])||!!t.containerType&&\"normal\"!==t.containerType||!n&&!!t.backdropFilter&&\"none\"!==t.backdropFilter||!n&&!!t.filter&&\"none\"!==t.filter||ec.some(e=>(t.willChange||\"\").includes(e))||eu.some(e=>(t.contain||\"\").includes(e))}function ef(){return\"undefined\"!=typeof CSS&&!!CSS.supports&&CSS.supports(\"-webkit-backdrop-filter\",\"none\")}let ep=new Set([\"html\",\"body\",\"#document\"]);function eh(e){return ep.has(K(e))}function eg(e){return Q(e).getComputedStyle(e)}function em(e){return ee(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function ev(e){if(\"html\"===K(e))return e;let n=e.assignedSlot||e.parentNode||et(e)&&e.host||G(e);return et(n)?n.host:n}function eb(e,n,t){var r;void 0===n&&(n=[]),void 0===t&&(t=!0);let o=function e(n){let t=ev(n);return eh(t)?n.ownerDocument?n.ownerDocument.body:n.body:en(t)&&eo(t)?t:e(t)}(e),a=o===(null==(r=e.ownerDocument)?void 0:r.body),i=Q(o);if(a){let e=ey(i);return n.concat(i,i.visualViewport||[],eo(o)?o:[],e&&t?eb(e):[])}return n.concat(o,eb(o,[],t))}function ey(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}let ex=[];function ew(e){C.useEffect(e,ex)}class ej{static create(){return new ej}currentId=0;start(e,n){this.clear(),this.currentId=setTimeout(()=>{this.currentId=0,n()},e)}isStarted(){return 0!==this.currentId}clear=()=>{0!==this.currentId&&(clearTimeout(this.currentId),this.currentId=0)};disposeEffect=()=>this.clear}function ek(){let e=P(ej.create).current;return ew(e.disposeEffect),e}function eA(e){let n=P(eO,e).current;return n.next=e,F(n.effect),n}function eO(e){let n={current:e,next:e,effect:()=>{n.current=n.next}};return n}let eC=\"undefined\"!=typeof navigator,eS=function(){if(\"undefined\"==typeof navigator)return{platform:\"\",maxTouchPoints:-1};let e=navigator.userAgentData;return e?.platform?{platform:e.platform,maxTouchPoints:navigator.maxTouchPoints}:{platform:navigator.platform??\"\",maxTouchPoints:navigator.maxTouchPoints??-1}}(),eE=function(){if(!eC)return\"\";let e=navigator.userAgentData;return e?.platform?e.platform:navigator.platform??\"\"}(),e_=function(){if(!eC)return\"\";let e=navigator.userAgentData;return e&&Array.isArray(e.brands)?e.brands.map(({brand:e,version:n})=>`${e}/${n}`).join(\" \"):navigator.userAgent}(),eP=\"undefined\"!=typeof CSS&&!!CSS.supports&&CSS.supports(\"-webkit-backdrop-filter:none\"),ez=\"MacIntel\"===eS.platform&&eS.maxTouchPoints>1||/iP(hone|ad|od)|iOS/.test(eS.platform);eC&&/firefox/i.test(e_);let eL=eC&&/apple/i.test(navigator.vendor),eT=eC&&/android/i.test(eE)||/android/i.test(e_),eR=eC&&eE.toLowerCase().startsWith(\"mac\")&&!navigator.maxTouchPoints,eN=e_.includes(\"jsdom/\");function eD(e){e.preventDefault(),e.stopPropagation()}function eB(e){return 0===e.mozInputSource&&!!e.isTrusted||(eT&&e.pointerType?\"click\"===e.type&&1===e.buttons:0===e.detail&&!e.pointerType)}function eM(e){return!eN&&(!eT&&0===e.width&&0===e.height||eT&&1===e.width&&1===e.height&&0===e.pressure&&0===e.detail&&\"mouse\"===e.pointerType||e.width<1&&e.height<1&&0===e.pressure&&0===e.detail&&\"touch\"===e.pointerType)}function eI(e,n){let t=[\"mouse\",\"pen\"];return n||t.push(\"\",void 0),t.includes(e)}let eH=\"data-base-ui-focusable\",eF=\"active\",eU=\"selected\",eV=\"ArrowLeft\",eq=\"ArrowRight\",eW=\"ArrowUp\",e$=\"ArrowDown\";function eZ(e){let n=e.activeElement;for(;n?.shadowRoot?.activeElement!=null;)n=n.shadowRoot.activeElement;return n}function eY(e,n){if(!e||!n)return!1;let t=n.getRootNode?.();if(e.contains(n))return!0;if(t&&et(t)){let t=n;for(;t;){if(e===t)return!0;t=t.parentNode||t.host}}return!1}function eX(e){return\"composedPath\"in e?e.composedPath()[0]:e.target}function eK(e,n){return null!=n&&(\"composedPath\"in e?e.composedPath().includes(n):null!=e.target&&n.contains(e.target))}function eQ(e){return e?.ownerDocument||document}function eG(e){return en(e)&&e.matches(\"input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])\")}function eJ(e){return!!e&&\"combobox\"===e.getAttribute(\"role\")&&eG(e)}function e0(e){return e?e.hasAttribute(eH)?e:e.querySelector(`[${eH}]`)||e:null}function e1(e){return`data-base-ui-${e}`}let e2=e1(\"safe-polygon\");function e4(e,n,t){if(t&&!eI(t))return 0;if(\"number\"==typeof e)return e;if(\"function\"==typeof e){let t=e();return\"number\"==typeof t?t:t?.[n]}return e?.[n]}function e5(e){return\"function\"==typeof e?e():e}function e3(e,n={}){let{open:t,onOpenChange:r,dataRef:o,events:a,elements:i}=e,{enabled:l=!0,delay:s=0,handleClose:c=null,mouseOnly:u=!1,restMs:d=0,move:f=!0}=n,p=W(),h=q(),g=eA(c),m=eA(s),v=eA(t),b=eA(d),y=C.useRef(void 0),x=ek(),w=C.useRef(void 0),j=ek(),k=C.useRef(!0),A=C.useRef(!1),O=C.useRef(()=>{}),S=C.useRef(!1),E=T(()=>{let e=o.current.openEvent?.type;return e?.includes(\"mouse\")&&\"mousedown\"!==e});C.useEffect(()=>{if(l)return a.on(\"openchange\",e),()=>{a.off(\"openchange\",e)};function e({open:e}){e||(x.clear(),j.clear(),k.current=!0,S.current=!1)}},[l,a,x,j]),C.useEffect(()=>{if(!l||!g.current||!t)return;function e(e){E()&&r(!1,e,\"hover\")}let n=eQ(i.floating).documentElement;return n.addEventListener(\"mouseleave\",e),()=>{n.removeEventListener(\"mouseleave\",e)}},[i.floating,t,r,l,g,E]);let _=C.useCallback((e,n=!0,t=\"hover\")=>{let o=e4(m.current,\"close\",y.current);o&&!w.current?x.start(o,()=>r(!1,e,t)):n&&(x.clear(),r(!1,e,t))},[m,r,x]),P=T(()=>{O.current(),w.current=void 0}),z=T(()=>{if(A.current){let e=eQ(i.floating).body;e.style.pointerEvents=\"\",e.removeAttribute(e2),A.current=!1}}),L=T(()=>!!o.current.openEvent&&[\"click\",\"mousedown\"].includes(o.current.openEvent.type));C.useEffect(()=>{if(l&&ee(i.domReference)){let r=i.domReference,o=i.floating;return t&&r.addEventListener(\"mouseleave\",a),f&&r.addEventListener(\"mousemove\",e,{once:!0}),r.addEventListener(\"mouseenter\",e),r.addEventListener(\"mouseleave\",n),o&&(o.addEventListener(\"mouseleave\",a),o.addEventListener(\"mouseenter\",s),o.addEventListener(\"mouseleave\",c)),()=>{t&&r.removeEventListener(\"mouseleave\",a),f&&r.removeEventListener(\"mousemove\",e),r.removeEventListener(\"mouseenter\",e),r.removeEventListener(\"mouseleave\",n),o&&(o.removeEventListener(\"mouseleave\",a),o.removeEventListener(\"mouseenter\",s),o.removeEventListener(\"mouseleave\",c))}}function e(e){if(x.clear(),k.current=!1,u&&!eI(y.current)||e5(b.current)>0&&!e4(m.current,\"open\"))return;let n=e4(m.current,\"open\",y.current);n?x.start(n,()=>{v.current||r(!0,e,\"hover\")}):t||r(!0,e,\"hover\")}function n(e){if(L())return void z();O.current();let n=eQ(i.floating);if(j.clear(),S.current=!1,g.current&&o.current.floatingContext){t||x.clear(),w.current=g.current({...o.current.floatingContext,tree:p,x:e.clientX,y:e.clientY,onClose(){z(),P(),L()||_(e,!0,\"safe-polygon\")}});let r=w.current;n.addEventListener(\"mousemove\",r),O.current=()=>{n.removeEventListener(\"mousemove\",r)};return}\"touch\"===y.current&&eY(i.floating,e.relatedTarget)||_(e)}function a(e){!L()&&o.current.floatingContext&&g.current?.({...o.current.floatingContext,tree:p,x:e.clientX,y:e.clientY,onClose(){z(),P(),L()||_(e)}})(e)}function s(){x.clear()}function c(e){L()||_(e,!1)}},[i,l,e,u,f,_,P,z,r,t,v,p,m,g,o,L,b,x,j]),F(()=>{if(l&&t&&g.current?.__options?.blockPointerEvents&&E()){A.current=!0;let e=i.floating;if(ee(i.domReference)&&e){let n=eQ(i.floating).body;n.setAttribute(e2,\"\");let t=i.domReference,r=p?.nodesRef.current.find(e=>e.id===h)?.context?.elements.floating;return r&&(r.style.pointerEvents=\"\"),n.style.pointerEvents=\"none\",t.style.pointerEvents=\"auto\",e.style.pointerEvents=\"auto\",()=>{n.style.pointerEvents=\"\",t.style.pointerEvents=\"\",e.style.pointerEvents=\"\"}}}},[l,t,h,i,p,g,E]),F(()=>{t||(y.current=void 0,S.current=!1,P(),z())},[t,P,z]),C.useEffect(()=>()=>{P(),x.clear(),j.clear(),z()},[l,i.domReference,P,z,x,j]);let R=C.useMemo(()=>{function e(e){y.current=e.pointerType}return{onPointerDown:e,onPointerEnter:e,onMouseMove(e){let{nativeEvent:n}=e;function o(){k.current||v.current||r(!0,n,\"hover\")}(!u||eI(y.current))&&!t&&0!==e5(b.current)&&(S.current&&e.movementX**2+e.movementY**2<2||(j.clear(),\"touch\"===y.current?o():(S.current=!0,j.start(e5(b.current),o))))}}},[u,r,t,v,b,j]);return C.useMemo(()=>l?{reference:R}:{},[l,R])}function e6(e,n,t=!0){return e.filter(e=>e.parentId===n&&(!t||e.context?.open)).flatMap(n=>[n,...e6(e,n.id,t)])}function e9(e,n){let t=[],r=e.find(e=>e.id===n)?.parentId;for(;r;){let n=e.find(e=>e.id===r);r=n?.parentId,n&&(t=t.concat(n))}return t}function e8(e,n){let[t,r]=e,o=!1,a=n.length;for(let e=0,i=a-1;e<a;i=e++){let[a,l]=n[e]||[0,0],[s,c]=n[i]||[0,0];l>=r!=c>=r&&t<=(s-a)*(r-l)/(c-l)+a&&(o=!o)}return o}function e7(e={}){let{buffer:n=.5,blockPointerEvents:t=!1,requireIntent:r=!0}=e,o=new ej,a=!1,i=null,l=null,s=performance.now(),c=({x:e,y:t,placement:c,elements:u,onClose:d,nodeId:f,tree:p})=>function(h){function g(){o.clear(),d()}if(o.clear(),!u.domReference||!u.floating||null==c||null==e||null==t)return;let{clientX:m,clientY:v}=h,b=[m,v],y=eX(h),x=\"mouseleave\"===h.type,w=eY(u.floating,y),j=eY(u.domReference,y),k=u.domReference.getBoundingClientRect(),A=u.floating.getBoundingClientRect(),O=c.split(\"-\")[0],C=e>A.right-A.width/2,S=t>A.bottom-A.height/2,E=b[0]>=k.x&&b[0]<=k.x+k.width&&b[1]>=k.y&&b[1]<=k.y+k.height,_=A.width>k.width,P=A.height>k.height,z=(_?k:A).left,L=(_?k:A).right,T=(P?k:A).top,R=(P?k:A).bottom;if(w&&(a=!0,!x))return;if(j&&(a=!1),j&&!x){a=!0;return}if(x&&ee(h.relatedTarget)&&eY(u.floating,h.relatedTarget)||p&&e6(p.nodesRef.current,f).some(({context:e})=>e?.open))return;if(\"top\"===O&&t>=k.bottom-1||\"bottom\"===O&&t<=k.top+1||\"left\"===O&&e>=k.right-1||\"right\"===O&&e<=k.left+1)return g();let N=[];switch(O){case\"top\":N=[[z,k.top+1],[z,A.bottom-1],[L,A.bottom-1],[L,k.top+1]];break;case\"bottom\":N=[[z,A.top+1],[z,k.bottom-1],[L,k.bottom-1],[L,A.top+1]];break;case\"left\":N=[[A.right-1,R],[A.right-1,T],[k.left+1,T],[k.left+1,R]];break;case\"right\":N=[[k.right-1,R],[k.right-1,T],[A.left+1,T],[A.left+1,R]]}if(!e8([m,v],N)){if(a&&!E)return g();if(!x&&r){let e=function(e,n){let t=performance.now(),r=t-s;if(null===i||null===l||0===r)return i=e,l=n,s=t,null;let o=e-i,a=n-l,c=Math.sqrt(o*o+a*a);return i=e,l=n,s=t,c/r}(h.clientX,h.clientY);if(null!==e&&e<.1)return g()}e8([m,v],function([e,t]){switch(O){case\"top\":{let r=[[A.left,C||_?A.bottom-n:A.top],[A.right,C?_?A.bottom-n:A.top:A.bottom-n]];return[[_?e+n/2:C?e+4*n:e-4*n,t+n+1],[_?e-n/2:C?e+4*n:e-4*n,t+n+1],...r]}case\"bottom\":{let r=[[A.left,C||_?A.top+n:A.bottom],[A.right,C?_?A.top+n:A.bottom:A.top+n]];return[[_?e+n/2:C?e+4*n:e-4*n,t-n],[_?e-n/2:C?e+4*n:e-4*n,t-n],...r]}case\"left\":return[[S||P?A.right-n:A.left,A.top],[S?P?A.right-n:A.left:A.right-n,A.bottom],[e+n+1,P?t+n/2:S?t+4*n:t-4*n],[e+n+1,P?t-n/2:S?t+4*n:t-4*n]];case\"right\":{let r=[[S||P?A.left+n:A.right,A.top],[S?P?A.left+n:A.right:A.left+n,A.bottom]];return[[e-n,P?t+n/2:S?t+4*n:t-4*n],[e-n,P?t-n/2:S?t+4*n:t-4*n],...r]}default:return[]}}([e,t]))?!a&&r&&o.start(40,g):g()}};return c.__options={blockPointerEvents:t},c}let ne=eR&&eL;function nn(e,n={}){let{open:t,onOpenChange:r,events:o,dataRef:a,elements:i}=e,{enabled:l=!0,visibleOnly:s=!0}=n,c=C.useRef(!1),u=ek(),d=C.useRef(!0);C.useEffect(()=>{if(!l)return;let e=Q(i.domReference);function n(){!t&&en(i.domReference)&&i.domReference===eZ(eQ(i.domReference))&&(c.current=!0)}function r(){d.current=!0}function o(){d.current=!1}return e.addEventListener(\"blur\",n),ne&&(e.addEventListener(\"keydown\",r,!0),e.addEventListener(\"pointerdown\",o,!0)),()=>{e.removeEventListener(\"blur\",n),ne&&(e.removeEventListener(\"keydown\",r,!0),e.removeEventListener(\"pointerdown\",o,!0))}},[i.domReference,t,l]),C.useEffect(()=>{if(l)return o.on(\"openchange\",e),()=>{o.off(\"openchange\",e)};function e({reason:e}){(\"reference-press\"===e||\"escape-key\"===e)&&(c.current=!0)}},[o,l]);let f=C.useMemo(()=>({onMouseLeave(){c.current=!1},onFocus(e){if(c.current)return;let n=eX(e.nativeEvent);if(s&&ee(n)){if(ne&&!e.relatedTarget){if(!d.current&&!eG(n))return}else if(!function(e){if(!e||eN)return!0;try{return e.matches(\":focus-visible\")}catch(e){return!0}}(n))return}r(!0,e.nativeEvent,\"focus\")},onBlur(e){c.current=!1;let n=e.relatedTarget,t=e.nativeEvent,o=ee(n)&&n.hasAttribute(e1(\"focus-guard\"))&&\"outside\"===n.getAttribute(\"data-type\");u.start(0,()=>{let e=eZ(i.domReference?i.domReference.ownerDocument:document);(n||e!==i.domReference)&&(eY(a.current.floatingContext?.refs.floating.current,e)||eY(i.domReference,e)||o||r(!1,t,\"focus\"))})}}),[a,i.domReference,r,s,u]);return C.useMemo(()=>l?{reference:f}:{},[l,f])}let nt={style:{transition:\"none\"}},nr={},no={fallbackAxisSide:\"none\"},na={fallbackAxisSide:\"end\"},ni=new class{callbacks=[];callbacksCount=0;nextId=1;startId=1;isScheduled=!1;tick=e=>{this.isScheduled=!1;let n=this.callbacks,t=this.callbacksCount;if(this.callbacks=[],this.callbacksCount=0,this.startId=this.nextId,t>0)for(let t=0;t<n.length;t+=1)n[t]?.(e)};request(e){let n=this.nextId;return this.nextId+=1,this.callbacks.push(e),this.callbacksCount+=1,this.isScheduled||(requestAnimationFrame(this.tick),this.isScheduled=!0),n}cancel(e){let n=e-this.startId;n<0||n>=this.callbacks.length||(this.callbacks[n]=null,this.callbacksCount-=1)}};class nl{static create(){return new nl}static request(e){return ni.request(e)}static cancel(e){return ni.cancel(e)}currentId=null;request(e){this.cancel(),this.currentId=ni.request(()=>{this.currentId=null,e()})}cancel=()=>{null!==this.currentId&&(ni.cancel(this.currentId),this.currentId=null)};disposeEffect=()=>this.cancel}function ns(){let e=P(nl.create).current;return ew(e.disposeEffect),e}let nc={pointerdown:\"onPointerDown\",mousedown:\"onMouseDown\",click:\"onClick\"},nu={pointerdown:\"onPointerDownCapture\",mousedown:\"onMouseDownCapture\",click:\"onClickCapture\"},nd=e=>({escapeKey:\"boolean\"==typeof e?e:e?.escapeKey??!1,outsidePress:\"boolean\"==typeof e?e:e?.outsidePress??!0});function nf(e,n={}){let{open:t,onOpenChange:r,elements:o,dataRef:a}=e,{enabled:i=!0,escapeKey:l=!0,outsidePress:s=!0,outsidePressEvent:c=\"pointerdown\",referencePress:u=!1,referencePressEvent:d=\"pointerdown\",ancestorScroll:f=!1,bubbles:p,capture:h}=n,g=W(),m=T(\"function\"==typeof s?s:()=>!1),v=\"function\"==typeof s?m:s,b=C.useRef(!1),{escapeKey:y,outsidePress:x}=nd(p),{escapeKey:w,outsidePress:j}=nd(h),k=C.useRef(!1),A=ek(),O=T(e=>{if(!t||!i||!l||\"Escape\"!==e.key||k.current)return;let n=a.current.floatingContext?.nodeId,o=g?e6(g.nodesRef.current,n):[];if(!y&&(e.stopPropagation(),o.length>0)){let e=!0;if(o.forEach(n=>{n.context?.open&&!n.context.dataRef.current.__escapeKeyBubbles&&(e=!1)}),!e)return}r(!1,\"nativeEvent\"in e?e.nativeEvent:e,\"escape-key\")}),S=T(e=>{let n=()=>{O(e),eX(e)?.removeEventListener(\"keydown\",n)};eX(e)?.addEventListener(\"keydown\",n)}),E=T(e=>{let n=a.current.insideReactTree;a.current.insideReactTree=!1;let t=b.current;if(b.current=!1,\"click\"===c&&t||n||\"function\"==typeof v&&!v(e))return;let i=eX(e),l=`[${e1(\"inert\")}]`,s=eQ(o.floating).querySelectorAll(l),u=ee(i)?i:null;for(;u&&!eh(u);){let e=ev(u);if(eh(e)||!ee(e))break;u=e}if(s.length&&ee(i)&&!i.matches(\"html,body\")&&!eY(i,o.floating)&&Array.from(s).every(e=>!eY(u,e)))return;if(en(i)){let n=eh(i),t=eg(i),r=/auto|scroll/,o=n||r.test(t.overflowX),a=n||r.test(t.overflowY),l=o&&i.clientWidth>0&&i.scrollWidth>i.clientWidth,s=a&&i.clientHeight>0&&i.scrollHeight>i.clientHeight,c=\"rtl\"===t.direction,u=s&&(c?e.offsetX<=i.offsetWidth-i.clientWidth:e.offsetX>i.clientWidth),d=l&&e.offsetY>i.clientHeight;if(u||d)return}let d=a.current.floatingContext?.nodeId,f=g&&e6(g.nodesRef.current,d).some(n=>eK(e,n.context?.elements.floating));if(eK(e,o.floating)||eK(e,o.domReference)||f)return;let p=g?e6(g.nodesRef.current,d):[];if(p.length>0){let e=!0;if(p.forEach(n=>{n.context?.open&&!n.context.dataRef.current.__outsidePressBubbles&&(e=!1)}),!e)return}r(!1,e,\"outside-press\")}),_=T(e=>{let n=()=>{E(e),eX(e)?.removeEventListener(c,n)};eX(e)?.addEventListener(c,n)});C.useEffect(()=>{if(!t||!i)return;a.current.__escapeKeyBubbles=y,a.current.__outsidePressBubbles=x;let e=new ej;function n(e){r(!1,e,\"ancestor-scroll\")}function s(){e.clear(),k.current=!0}function u(){e.start(5*!!ef(),()=>{k.current=!1})}let d=eQ(o.floating);l&&(d.addEventListener(\"keydown\",w?S:O,w),d.addEventListener(\"compositionstart\",s),d.addEventListener(\"compositionend\",u)),v&&d.addEventListener(c,j?_:E,j);let p=[];return f&&(ee(o.domReference)&&(p=eb(o.domReference)),ee(o.floating)&&(p=p.concat(eb(o.floating))),!ee(o.reference)&&o.reference&&o.reference.contextElement&&(p=p.concat(eb(o.reference.contextElement)))),(p=p.filter(e=>e!==d.defaultView?.visualViewport)).forEach(e=>{e.addEventListener(\"scroll\",n,{passive:!0})}),()=>{l&&(d.removeEventListener(\"keydown\",w?S:O,w),d.removeEventListener(\"compositionstart\",s),d.removeEventListener(\"compositionend\",u)),v&&d.removeEventListener(c,j?_:E,j),p.forEach(e=>{e.removeEventListener(\"scroll\",n)}),e.clear()}},[a,o,l,v,c,t,r,f,i,y,x,O,w,S,E,j,_]),C.useEffect(()=>{a.current.insideReactTree=!1},[a,v,c]);let P=C.useMemo(()=>({onKeyDown:O,...u&&{[nc[d]]:e=>{r(!1,e.nativeEvent,\"reference-press\")},...\"click\"!==d&&{onClick(e){r(!1,e.nativeEvent,\"reference-press\")}}}}),[O,r,u,d]),z=C.useMemo(()=>({onKeyDown:O,onMouseDown(){b.current=!0},onMouseUp(){b.current=!0},[nu[c]]:()=>{a.current.insideReactTree=!0},onBlurCapture(){g||(a.current.insideReactTree=!0,A.start(0,()=>{a.current.insideReactTree=!1}))}}),[O,c,a,g,A]);return C.useMemo(()=>i?{reference:P,floating:z}:{},[i,P,z])}let np=new Map([[\"select\",\"listbox\"],[\"combobox\",\"listbox\"],[\"label\",!1]]),nh=[\"top\",\"right\",\"bottom\",\"left\"],ng=Math.min,nm=Math.max,nv=Math.round,nb=Math.floor,ny=e=>({x:e,y:e}),nx={left:\"right\",right:\"left\",bottom:\"top\",top:\"bottom\"},nw={start:\"end\",end:\"start\"};function nj(e,n){return\"function\"==typeof e?e(n):e}function nk(e){return e.split(\"-\")[0]}function nA(e){return e.split(\"-\")[1]}function nO(e){return\"x\"===e?\"y\":\"x\"}function nC(e){return\"y\"===e?\"height\":\"width\"}let nS=new Set([\"top\",\"bottom\"]);function nE(e){return nS.has(nk(e))?\"y\":\"x\"}function n_(e){return e.replace(/start|end/g,e=>nw[e])}let nP=[\"left\",\"right\"],nz=[\"right\",\"left\"],nL=[\"top\",\"bottom\"],nT=[\"bottom\",\"top\"];function nR(e){return e.replace(/left|right|bottom|top/g,e=>nx[e])}function nN(e){return\"number\"!=typeof e?{top:0,right:0,bottom:0,left:0,...e}:{top:e,right:e,bottom:e,left:e}}function nD(e){let{x:n,y:t,width:r,height:o}=e;return{width:r,height:o,top:t,left:n,right:n+r,bottom:t+o,x:n,y:t}}function nB(e,n,t){return Math.floor(e/n)!==t}function nM(e,n){return n<0||n>=e.current.length}function nI(e,n){return nF(e,{disabledIndices:n})}function nH(e,n){return nF(e,{decrement:!0,startingIndex:e.current.length,disabledIndices:n})}function nF(e,{startingIndex:n=-1,decrement:t=!1,disabledIndices:r,amount:o=1}={}){let a=n;do a+=t?-o:o;while(a>=0&&a<=e.current.length-1&&nU(e,a,r));return a}function nU(e,n,t){if(\"function\"==typeof t)return t(n);if(t)return t.includes(n);let r=e.current[n];return null==r||r.hasAttribute(\"disabled\")||\"true\"===r.getAttribute(\"aria-disabled\")}let nV=0;function nq(e,n={}){let{preventScroll:t=!1,cancelPrevious:r=!0,sync:o=!1}=n;r&&cancelAnimationFrame(nV);let a=()=>e?.focus({preventScroll:t});o?a():nV=requestAnimationFrame(a)}function nW(e,n,t){switch(e){case\"vertical\":return n;case\"horizontal\":return t;default:return n||t}}function n$(e,n){return nW(n,e===eW||e===e$,e===eV||e===eq)}function nZ(e,n,t){return nW(n,e===e$,t?e===eV:e===eq)||\"Enter\"===e||\" \"===e||\"\"===e}function nY(e,n,t){return nW(n,t?e===eV:e===eq,e===e$)}function nX(e,n,t,r){return\"both\"===n||\"horizontal\"===n&&r&&r>1?\"Escape\"===e:nW(n,t?e===eq:e===eV,e===eW)}function nK(e=[]){let n=e.map(e=>e?.reference),t=e.map(e=>e?.floating),r=e.map(e=>e?.item),o=C.useCallback(n=>nQ(n,e,\"reference\"),n),a=C.useCallback(n=>nQ(n,e,\"floating\"),t),i=C.useCallback(n=>nQ(n,e,\"item\"),r);return C.useMemo(()=>({getReferenceProps:o,getFloatingProps:a,getItemProps:i}),[o,a,i])}function nQ(e,n,t){let r=new Map,o=\"item\"===t,a={};for(let n in\"floating\"===t&&(a.tabIndex=-1,a[eH]=\"\"),e)o&&e&&(n===eF||n===eU)||(a[n]=e[n]);for(let i=0;i<n.length;i+=1){let l,s=n[i]?.[t];(l=\"function\"==typeof s?e?s(e):null:s)&&nG(a,l,o,r)}return nG(a,e,o,r),a}function nG(e,n,t,r){for(let o in n){let a=n[o];t&&(o===eF||o===eU)||(o.startsWith(\"on\")?(r.has(o)||r.set(o,[]),\"function\"==typeof a&&(r.get(o)?.push(a),e[o]=(...e)=>r.get(o)?.map(n=>n(...e)).find(e=>void 0!==e))):e[o]=a)}}let nJ=C.createContext(void 0);function n0(e){let n=C.useContext(nJ);if(void 0===n&&!e)throw Error(\"Base UI: MenuRootContext is missing. Menu parts must be placed within <Menu.Root>.\");return n}let n1=C.createContext(null);function n2(e,n=!1,t=!1){let[r,o]=C.useState(e&&n?\"idle\":void 0),[a,i]=C.useState(e);return e&&!a&&(i(!0),o(\"starting\")),e||!a||\"ending\"===r||t||o(\"ending\"),e||a||\"ending\"!==r||o(void 0),F(()=>{if(!e&&a&&\"ending\"!==r&&t){let e=nl.request(()=>{o(\"ending\")});return()=>{nl.cancel(e)}}},[e,a,r,t]),F(()=>{if(!e||n)return;let t=nl.request(()=>{E.flushSync(()=>{o(void 0)})});return()=>{nl.cancel(t)}},[n,e]),F(()=>{if(!e||!n)return;e&&a&&\"idle\"!==r&&o(\"starting\");let t=nl.request(()=>{o(\"idle\")});return()=>{nl.cancel(t)}},[n,e,a,o,r]),C.useMemo(()=>({mounted:a,setMounted:i,transitionStatus:r}),[a,r])}function n4({controlled:e,default:n,name:t,state:r=\"value\"}){let{current:o}=C.useRef(void 0!==e),[a,i]=C.useState(n),l=C.useCallback(e=>{o||i(e)},[]);return[o?e:a,l]}function n5(e){let{enabled:n=!0,open:t,ref:r,onComplete:o}=e,a=eA(t),i=T(o),l=function(e,n=!1){let t=ns(),r=ek();return T((o,a=null)=>{t.cancel(),r.clear();let i=e.current;i&&(\"function\"!=typeof i.getAnimations||globalThis.BASE_UI_ANIMATIONS_DISABLED?o():t.request(()=>{function e(){i&&Promise.allSettled(i.getAnimations().map(e=>e.finished)).then(()=>{null!=a&&a.aborted||E.flushSync(o)})}n?r.start(0,e):e()}))})}(r,t);C.useEffect(()=>{n&&l(()=>{t===a.current&&i()})},[n,t,i,l,a])}let n3=C.createContext(void 0);function n6(e=!0){let n=C.useContext(n3);if(void 0===n&&!e)throw Error(\"Base UI: DirectionContext is missing.\");return n?.direction??\"ltr\"}let n9=()=>{},n8={},n7={},te=\"\";class tn{lockCount=0;restore=null;timeoutLock=ej.create();timeoutUnlock=ej.create();acquire(e){return this.lockCount+=1,1===this.lockCount&&null===this.restore&&this.timeoutLock.start(0,()=>this.lock(e)),this.release}release=()=>{this.lockCount-=1,0===this.lockCount&&this.restore&&this.timeoutUnlock.start(0,this.unlock)};unlock=()=>{0===this.lockCount&&this.restore&&(this.restore?.(),this.restore=null)};lock(e){if(0===this.lockCount||null!==this.restore)return;let n=eQ(e).documentElement,t=Q(n).getComputedStyle(n).overflowY;if(\"hidden\"===t||\"clip\"===t){this.restore=n9;return}let r=ez||!function(e){if(\"undefined\"==typeof document)return!1;let n=eQ(e);return Q(n).innerWidth-n.documentElement.clientWidth>0}(e);this.restore=r?function(e){let n=eQ(e).documentElement,t=n.style.overflow;return n.style.overflow=\"hidden\",()=>{n.style.overflow=t}}(e):function(e){let n=eQ(e),t=n.documentElement,r=n.body,o=Q(t),a=0,i=0,l=nl.create();if(eP&&(o.visualViewport?.scale??1)!==1)return()=>{};function s(){let e=o.getComputedStyle(t),n=o.getComputedStyle(r);a=t.scrollTop,i=t.scrollLeft,n8={scrollbarGutter:t.style.scrollbarGutter,overflowY:t.style.overflowY,overflowX:t.style.overflowX},te=t.style.scrollBehavior,n7={position:r.style.position,height:r.style.height,width:r.style.width,boxSizing:r.style.boxSizing,overflowY:r.style.overflowY,overflowX:r.style.overflowX,scrollBehavior:r.style.scrollBehavior};let l=\"undefined\"!=typeof CSS&&CSS.supports?.(\"scrollbar-gutter\",\"stable\"),s=t.scrollHeight>t.clientHeight,c=t.scrollWidth>t.clientWidth,u=\"scroll\"===e.overflowY||\"scroll\"===n.overflowY,d=\"scroll\"===e.overflowX||\"scroll\"===n.overflowX,f=Math.max(0,o.innerWidth-t.clientWidth),p=Math.max(0,o.innerHeight-t.clientHeight),h=parseFloat(n.marginTop)+parseFloat(n.marginBottom),g=parseFloat(n.marginLeft)+parseFloat(n.marginRight);Object.assign(t.style,{scrollbarGutter:\"stable\",overflowY:!l&&(s||u)?\"scroll\":\"hidden\",overflowX:!l&&(c||d)?\"scroll\":\"hidden\"}),Object.assign(r.style,{position:\"relative\",height:h||p?`calc(100dvh - ${h+p}px)`:\"100dvh\",width:g||f?`calc(100vw - ${g+f}px)`:\"100vw\",boxSizing:\"border-box\",overflow:\"hidden\",scrollBehavior:\"unset\"}),r.scrollTop=a,r.scrollLeft=i,t.setAttribute(\"data-base-ui-scroll-locked\",\"\"),t.style.scrollBehavior=\"unset\"}function c(){Object.assign(t.style,n8),Object.assign(r.style,n7),t.scrollTop=a,t.scrollLeft=i,t.removeAttribute(\"data-base-ui-scroll-locked\"),t.style.scrollBehavior=te}function u(){c(),l.request(s)}return s(),o.addEventListener(\"resize\",u),()=>{l.cancel(),c(),o.removeEventListener(\"resize\",u)}}(e)}}let tt=new tn;function tr(e){if(e)return({\"focus-out\":\"focus-out\",\"escape-key\":\"escape-key\",\"outside-press\":\"outside-press\",\"list-navigation\":\"list-navigation\",click:\"trigger-press\",hover:\"trigger-hover\",focus:\"trigger-focus\",\"reference-press\":\"trigger-press\",\"safe-polygon\":\"trigger-hover\",\"ancestor-scroll\":void 0})[e]}let to=C.createContext(void 0);function ta(e=!0){let n=C.useContext(to);if(void 0===n&&!e)throw Error(\"Base UI: ContextMenuRootContext is missing. ContextMenu parts must be placed within <ContextMenu.Root>.\");return n}let ti=C.createContext(!1);function tl(e,n){return e&&!n?e:!e&&n?n:e||n?{...e,...n}:void 0}let ts={};function tc(e,n,t,r,o){let a={...tf(e,ts)};return n&&(a=tu(a,n)),t&&(a=tu(a,t)),r&&(a=tu(a,r)),o&&(a=tu(a,o)),a}function tu(e,n){return td(n)?n(e):function(e,n){if(!n)return e;for(let t in n){let r=n[t];switch(t){case\"style\":e[t]=tl(e.style,r);break;case\"className\":e[t]=th(e.className,r);break;default:!function(e,n){let t=e.charCodeAt(0),r=e.charCodeAt(1),o=e.charCodeAt(2);return 111===t&&110===r&&o>=65&&o<=90&&(\"function\"==typeof n||void 0===n)}(t,r)?e[t]=r:e[t]=function(e,n){return n?e?t=>{var r;if(null!=(r=t)&&\"object\"==typeof r&&\"nativeEvent\"in r){tp(t);let r=n(t);return t.baseUIHandlerPrevented||e?.(t),r}let o=n(t);return e?.(t),o}:n:e}(e[t],r)}}return e}(e,n)}function td(e){return\"function\"==typeof e}function tf(e,n){return td(e)?e(n):e??ts}function tp(e){return e.preventBaseUIHandler=()=>{e.baseUIHandlerPrevented=!0},e}function th(e,n){return n?e?n+\" \"+e:n:e}let tg=[],tm={current:!1},tv=function(e){let n,t,{children:r,open:o,onOpenChange:a,onOpenChangeComplete:i,defaultOpen:s=!1,disabled:c=!1,modal:u,loop:d=!0,orientation:f=\"vertical\",actionsRef:p,openOnHover:h,delay:g=100,closeDelay:m=0,closeParentOnEsc:v=!0}=e,[b,y]=C.useState(null),[x,w]=C.useState(null),[j,k]=C.useState(),[A,O]=C.useState(!0),[S,_]=C.useState(null),[P,z]=C.useState(null),[L,R]=C.useState(!0),[N,D]=C.useState(!1),B=C.useRef(null),M=C.useRef(null),I=C.useRef(null),U=ek(),V=ta(!0),$=C.useContext(ti);{let e=n0(!0),t=function(e){let n=C.useContext(n1);if(null===n&&!e)throw Error(\"Base UI: MenubarContext is missing. Menubar parts must be placed within <Menubar>.\");return n}(!0);n=$&&e?{type:\"menu\",context:e}:t?{type:\"menubar\",context:t}:V?{type:\"context-menu\",context:V}:{type:void 0}}let X=H();void 0!==n.type&&(X=n.context.rootId);let K=(void 0===n.type||\"context-menu\"===n.type)&&(u??!0),Q=\"menu\"===n.type?n.context.allowMouseEnter:N,G=\"menu\"===n.type?n.context.setAllowMouseEnter:D,J=h??(\"menu\"===n.type||\"menubar\"===n.type&&n.context.hasSubmenuOpen),[ee,et]=n4({controlled:o,default:s,name:\"MenuRoot\",state:\"open\"}),er=C.useRef(\"context-menu\"!==n.type),eo=ek();C.useEffect(()=>{if(ee||(B.current=null),\"context-menu\"===n.type){if(!ee){eo.clear(),er.current=!1;return}eo.start(500,()=>{er.current=!0})}},[eo,ee,n.type]);let ea=C.useCallback(e=>{I.current=e,w(e)},[]),{mounted:ei,setMounted:el,transitionStatus:es}=n2(ee),{enabled:ec=!0,mounted:eu,open:ed,referenceElement:ef=null}={enabled:ee&&K&&\"trigger-hover\"!==P,mounted:ei,open:ee,referenceElement:x};F(()=>{if(eP&&eu&&!ed){let e=eQ(ef),n=e.body.style.userSelect,t=e.body.style.webkitUserSelect;return e.body.style.userSelect=\"none\",e.body.style.webkitUserSelect=\"none\",()=>{e.body.style.userSelect=n,e.body.style.webkitUserSelect=t}}},[eu,ed,ef]),F(()=>{if(ec)return tt.acquire(ef)},[ec,ef]),ee||A||O(!0);let ep=T(()=>{el(!1),R(!0),G(!1),i?.(!1)});n5({enabled:!p,open:ee,ref:M,onComplete(){ee||ep()}});let eh=C.useRef(!0),eg=ek(),em=T((e,t,r)=>{if(ee===e||!1===e&&t?.type===\"click\"&&\"touch\"===t.pointerType&&!eh.current)return;e&&\"trigger-focus\"===r?(eh.current=!1,eg.start(300,()=>{eh.current=!0})):(eh.current=!0,eg.clear());let o=(\"trigger-press\"===r||\"item-press\"===r)&&0===t.detail&&t?.isTrusted,i=!e&&(\"escape-key\"===r||null==r);function l(){a?.(e,t,r),et(e),z(r??null),B.current=t??null}\"trigger-hover\"===r?(R(!0),U.start(500,()=>{R(!1)}),E.flushSync(l)):l(),\"menubar\"===n.type&&(\"trigger-focus\"===r||\"focus-out\"===r||\"trigger-hover\"===r||\"list-navigation\"===r||\"sibling-open\"===r)?k(\"group\"):o||i?k(o?\"click\":\"dismiss\"):k(void 0)});C.useImperativeHandle(p,()=>({unmount:ep}),[ep]),\"context-menu\"===n.type&&(t=n.context),C.useImperativeHandle(t?.positionerRef,()=>x,[x]),C.useImperativeHandle(t?.actionsRef,()=>({setOpen:em}),[em]),C.useEffect(()=>{ee||U.clear()},[U,ee]);let ev=Y({elements:{reference:b,floating:x},open:ee,onOpenChange(e,n,t){em(e,n,tr(t))}}),eb=e3(ev,{enabled:A&&J&&!c&&\"context-menu\"!==n.type&&(\"menubar\"!==n.type||n.context.hasSubmenuOpen&&!ee),handleClose:e7({blockPointerEvents:!0}),mouseOnly:!0,move:\"menu\"===n.type,restMs:void 0===n.type||\"menu\"===n.type&&Q?g:void 0,delay:\"menu\"===n.type?{open:Q?g:1e10,close:m}:{close:m}}),ey=nn(ev,{enabled:!c&&!ee&&\"menubar\"===n.type&&n.context.hasSubmenuOpen&&!V}),ex=function(e,n={}){let{open:t,onOpenChange:r,dataRef:o}=e,{enabled:a=!0,event:i=\"click\",toggle:l=!0,ignoreMouse:s=!1,stickIfOpen:c=!0}=n,u=C.useRef(void 0),d=ns(),f=C.useMemo(()=>({onPointerDown(e){u.current=e.pointerType},onMouseDown(e){let n=u.current,a=e.nativeEvent;if(0!==e.button||\"click\"===i||eI(n,!0)&&s)return;let f=o.current.openEvent,p=f?.type,h=!(t&&l&&(!f||!c||\"click\"===p||\"mousedown\"===p));d.request(()=>{r(h,a,\"click\")})},onClick(e){let n=u.current;if(\"mousedown\"===i&&n){u.current=void 0;return}if(eI(n,!0)&&s)return;let a=o.current.openEvent,d=a?.type;r(!(t&&l&&(!a||!c||\"click\"===d||\"mousedown\"===d||\"keydown\"===d||\"keyup\"===d)),e.nativeEvent,\"click\")},onKeyDown(){u.current=void 0}}),[o,i,s,r,t,c,l,d]);return C.useMemo(()=>a?{reference:f}:nr,[a,f])}(ev,{enabled:!c&&\"context-menu\"!==n.type,event:ee&&\"menubar\"===n.type?\"click\":\"mousedown\",toggle:!J||\"menu\"!==n.type,ignoreMouse:J&&\"menu\"===n.type,stickIfOpen:void 0===n.type&&L}),ew=nf(ev,{enabled:!c,bubbles:v&&\"menu\"===n.type,outsidePressEvent:\"mousedown\",outsidePress:()=>\"context-menu\"!==n.type||B.current?.type===\"contextmenu\"||er.current}),ej=function(e,n={}){let{open:t,elements:r,floatingId:o}=e,{enabled:a=!0,role:i=\"dialog\"}=n,l=H(),s=r.domReference?.id||l,c=C.useMemo(()=>e0(r.floating)?.id||o,[r.floating,o]),u=np.get(i)??i,d=null!=q(),f=C.useMemo(()=>\"tooltip\"===u||\"label\"===i?{[`aria-${\"label\"===i?\"labelledby\":\"describedby\"}`]:t?c:void 0}:{\"aria-expanded\":t?\"true\":\"false\",\"aria-haspopup\":\"alertdialog\"===u?\"dialog\":u,\"aria-controls\":t?c:void 0,...\"listbox\"===u&&{role:\"combobox\"},...\"menu\"===u&&{id:s},...\"menu\"===u&&d&&{role:\"menuitem\"},...\"select\"===i&&{\"aria-autocomplete\":\"none\"},...\"combobox\"===i&&{\"aria-autocomplete\":\"list\"}},[u,c,d,t,s,i]),p=C.useMemo(()=>{let e={id:c,...u&&{role:u}};return\"tooltip\"===u||\"label\"===i?e:{...e,...\"menu\"===u&&{\"aria-labelledby\":s}}},[u,c,s,i]),h=C.useCallback(({active:e,selected:n})=>{let t={role:\"option\",...e&&{id:`${c}-fui-option`}};switch(i){case\"select\":return{...t,\"aria-selected\":e&&n};case\"combobox\":return{...t,\"aria-selected\":n}}return{}},[c,i]);return C.useMemo(()=>a?{reference:f,floating:p,item:h}:{},[a,f,p,h])}(ev,{role:\"menu\"}),eO=C.useRef([]),eC=C.useRef([]),eS=n6(),eE=function(e,n){let{open:t,onOpenChange:r,elements:o,floatingId:a}=e,{listRef:i,activeIndex:l,onNavigate:s=()=>{},enabled:c=!0,selectedIndex:u=null,allowEscape:d=!1,loop:f=!1,nested:p=!1,rtl:h=!1,virtual:g=!1,focusItemOnOpen:m=\"auto\",focusItemOnHover:v=!0,openOnArrowKeyDown:b=!0,disabledIndices:y,orientation:x=\"vertical\",parentOrientation:w,cols:j=1,scrollItemIntoView:k=!0,virtualItemRef:A,itemSizes:O,dense:S=!1}=n,E=eA(e0(o.floating)),_=q(),P=W();F(()=>{e.dataRef.current.orientation=x},[e,x]);let z=eJ(o.domReference),L=C.useRef(m),R=C.useRef(u??-1),N=C.useRef(null),D=C.useRef(!0),B=T(()=>{s(-1===R.current?null:R.current)}),M=C.useRef(B),I=C.useRef(!!o.floating),H=C.useRef(t),U=C.useRef(!1),V=C.useRef(!1),$=eA(y),Z=eA(t),Y=eA(k),X=eA(u),[K,Q]=C.useState(),[G,J]=C.useState(),ee=T(()=>{function e(e){g?(e.id?.endsWith(\"-fui-option\")&&(e.id=`${a}-${Math.random().toString(16).slice(2,10)}`),Q(e.id),P?.events.emit(\"virtualfocus\",e),A&&(A.current=e)):nq(e,{sync:U.current,preventScroll:!0})}let n=i.current[R.current],t=V.current;n&&e(n),(U.current?e=>e():requestAnimationFrame)(()=>{let r=i.current[R.current]||n;if(!r)return;n||e(r);let o=Y.current;o&&er&&(t||!D.current)&&r.scrollIntoView?.(\"boolean\"==typeof o?{block:\"nearest\",inline:\"nearest\"}:o)})});F(()=>{c&&(t&&o.floating?L.current&&null!=u&&(V.current=!0,R.current=u,B()):I.current&&(R.current=-1,M.current()))},[c,t,o.floating,u,B]),F(()=>{if(c&&t&&o.floating)if(null==l){if(U.current=!1,null!=X.current)return;if(I.current&&(R.current=-1,ee()),(!H.current||!I.current)&&L.current&&(null!=N.current||!0===L.current&&null==N.current)){let e=0,n=()=>{null==i.current[0]?(e<2&&(e?requestAnimationFrame:queueMicrotask)(n),e+=1):(R.current=null==N.current||nZ(N.current,x,h)||p?nI(i,$.current):nH(i,$.current),N.current=null,B())};n()}}else nM(i,l)||(R.current=l,ee(),V.current=!1)},[c,t,o.floating,l,X,p,i,x,h,B,ee,$]),F(()=>{if(!c||o.floating||!P||g||!I.current)return;let e=P.nodesRef.current,n=e.find(e=>e.id===_)?.context?.elements.floating,t=eZ(eQ(o.floating)),r=e.some(e=>e.context&&eY(e.context.elements.floating,t));n&&!r&&D.current&&n.focus({preventScroll:!0})},[c,o.floating,P,_,g]),F(()=>{if(c&&P&&g&&!_)return P.events.on(\"virtualfocus\",e),()=>{P.events.off(\"virtualfocus\",e)};function e(e){J(e.id),A&&(A.current=e)}},[c,P,g,_,A]),F(()=>{M.current=B,H.current=t,I.current=!!o.floating}),F(()=>{t||(N.current=null,L.current=m)},[t,m]);let et=null!=l,er=C.useMemo(()=>{function e(e){if(!Z.current)return;let n=i.current.indexOf(e);-1!==n&&R.current!==n&&(R.current=n,B())}return{onFocus({currentTarget:n}){U.current=!0,e(n)},onClick:({currentTarget:e})=>e.focus({preventScroll:!0}),onMouseMove({currentTarget:n}){U.current=!0,V.current=!1,v&&e(n)},onPointerLeave({pointerType:e}){D.current&&\"touch\"!==e&&(U.current=!0,v&&(R.current=-1,B(),g||E.current?.focus({preventScroll:!0})))}}},[Z,E,v,i,B,g]),eo=C.useCallback(()=>w??P?.nodesRef.current.find(e=>e.id===_)?.context?.dataRef?.current.orientation,[_,P,w]),ea=T(e=>{if(D.current=!1,U.current=!0,229===e.which||!Z.current&&e.currentTarget===E.current)return;if(p&&nX(e.key,x,h,j)){n$(e.key,eo())||eD(e),r(!1,e.nativeEvent,\"list-navigation\"),en(o.domReference)&&(g?P?.events.emit(\"virtualfocus\",o.domReference):o.domReference.focus());return}let n=R.current,a=nI(i,y),l=nH(i,y);if(z||(\"Home\"===e.key&&(eD(e),R.current=a,B()),\"End\"===e.key&&(eD(e),R.current=l,B())),j>1){var s;let n=O||Array.from({length:i.current.length},()=>({width:1,height:1})),t=function(e,n,t){let r=[],o=0;return e.forEach(({width:e,height:a},i)=>{let l=!1;for(t&&(o=0);!l;){let t=[];for(let r=0;r<e;r+=1)for(let e=0;e<a;e+=1)t.push(o+r+e*n);o%n+e<=n&&t.every(e=>null==r[e])?(t.forEach(e=>{r[e]=i}),l=!0):o+=1}}),[...r]}(n,j,S),r=t.findIndex(e=>null!=e&&!nU(i,e,y)),o=t.reduce((e,n,t)=>null==n||nU(i,n,y)?e:t,-1),c=t[function(e,{event:n,orientation:t,loop:r,rtl:o,cols:a,disabledIndices:i,minIndex:l,maxIndex:s,prevIndex:c,stopEvent:u=!1}){let d=c;if(n.key===eW){if(u&&eD(n),-1===c)d=s;else if(d=nF(e,{startingIndex:d,amount:a,decrement:!0,disabledIndices:i}),r&&(c-a<l||d<0)){let e=c%a,n=s%a,t=s-(n-e);d=n===e?s:n>e?t:t-a}nM(e,d)&&(d=c)}if(n.key===e$&&(u&&eD(n),-1===c?d=l:(d=nF(e,{startingIndex:c,amount:a,disabledIndices:i}),r&&c+a>s&&(d=nF(e,{startingIndex:c%a-a,amount:a,disabledIndices:i}))),nM(e,d)&&(d=c)),\"both\"===t){let t=nb(c/a);n.key===(o?eV:eq)&&(u&&eD(n),c%a!=a-1?(d=nF(e,{startingIndex:c,disabledIndices:i}),r&&nB(d,a,t)&&(d=nF(e,{startingIndex:c-c%a-1,disabledIndices:i}))):r&&(d=nF(e,{startingIndex:c-c%a-1,disabledIndices:i})),nB(d,a,t)&&(d=c)),n.key===(o?eq:eV)&&(u&&eD(n),c%a!=0?(d=nF(e,{startingIndex:c,decrement:!0,disabledIndices:i}),r&&nB(d,a,t)&&(d=nF(e,{startingIndex:c+(a-c%a),decrement:!0,disabledIndices:i}))):r&&(d=nF(e,{startingIndex:c+(a-c%a),decrement:!0,disabledIndices:i})),nB(d,a,t)&&(d=c));let l=nb(s/a)===t;nM(e,d)&&(d=r&&l?n.key===(o?eq:eV)?s:nF(e,{startingIndex:c-c%a-1,disabledIndices:i}):c)}return d}({current:t.map(e=>null!=e?i.current[e]:null)},{event:e,orientation:x,loop:f,rtl:h,cols:j,disabledIndices:(s=[...(\"function\"!=typeof y?y:null)||i.current.map((e,n)=>nU(i,n,y)?n:void 0),void 0],t.flatMap((e,n)=>s.includes(e)?[n]:[])),minIndex:r,maxIndex:o,prevIndex:function(e,n,t,r,o){if(-1===e)return -1;let a=t.indexOf(e),i=n[e];switch(o){case\"tl\":return a;case\"tr\":if(!i)return a;return a+i.width-1;case\"bl\":if(!i)return a;return a+(i.height-1)*r;case\"br\":return t.lastIndexOf(e);default:return -1}}(R.current>l?a:R.current,n,t,j,e.key===e$?\"bl\":e.key===(h?eV:eq)?\"tr\":\"tl\"),stopEvent:!0})];if(null!=c&&(R.current=c,B()),\"both\"===x)return}if(n$(e.key,x)){if(eD(e),t&&!g&&eZ(e.currentTarget.ownerDocument)===e.currentTarget){R.current=nZ(e.key,x,h)?a:l,B();return}nZ(e.key,x,h)?f?R.current=n>=l?d&&n!==i.current.length?-1:a:nF(i,{startingIndex:n,disabledIndices:y}):R.current=Math.min(l,nF(i,{startingIndex:n,disabledIndices:y})):f?R.current=n<=a?d&&-1!==n?i.current.length:l:nF(i,{startingIndex:n,decrement:!0,disabledIndices:y}):R.current=Math.max(a,nF(i,{startingIndex:n,decrement:!0,disabledIndices:y})),nM(i,R.current)&&(R.current=-1),B()}}),ei=C.useMemo(()=>g&&t&&et&&{\"aria-activedescendant\":G||K},[g,t,et,G,K]),el=C.useMemo(()=>({\"aria-orientation\":\"both\"===x?void 0:x,...!z?ei:{},onKeyDown:ea,onPointerMove(){D.current=!0}}),[ei,ea,x,z]),es=C.useMemo(()=>{function e(e){\"auto\"===m&&eB(e.nativeEvent)&&(L.current=!0)}function n(e){L.current=m,\"auto\"===m&&eM(e.nativeEvent)&&(L.current=!0)}return{...ei,onKeyDown(e){D.current=!1;let n=e.key.startsWith(\"Arrow\"),o=[\"Home\",\"End\"].includes(e.key),a=nY(e.key,x,h),l=nX(e.key,x,h,j),s=nY(e.key,eo(),h),c=n$(e.key,x),d=(p?s:c)||\"Enter\"===e.key||\"\"===e.key.trim();if(g&&t){var f,m;let t,r,s=P?.nodesRef.current.find(e=>null==e.parentId),u=P&&s?(f=P.nodesRef.current,m=s.id,r=-1,!function e(n,o){o>r&&(t=n,r=o),e6(f,n).forEach(n=>{e(n.id,o+1)})}(m,0),f.find(e=>e.id===t)):null;if((n||o)&&u&&A){let n=new KeyboardEvent(\"keydown\",{key:e.key,bubbles:!0});if(a||l){let t=u.context?.elements.domReference===e.currentTarget,r=l&&!t?u.context?.elements.domReference:a?i.current.find(e=>e?.id===K):null;r&&(eD(e),r.dispatchEvent(n),J(void 0))}if((c||o)&&u.context&&u.context.open&&u.parentId&&e.currentTarget!==u.context.elements.domReference){eD(e),u.context.elements.domReference?.dispatchEvent(n);return}}return ea(e)}if(t||b||!n){if(d){let n=n$(e.key,eo());N.current=p&&n?null:e.key}if(p){s&&(eD(e),t?(R.current=nI(i,$.current),B()):r(!0,e.nativeEvent,\"list-navigation\"));return}c&&(null!=u&&(R.current=u),eD(e),!t&&b?r(!0,e.nativeEvent,\"list-navigation\"):ea(e),t&&B())}},onFocus(){t&&!g&&(R.current=-1,B())},onPointerDown:n,onPointerEnter:n,onMouseDown:e,onClick:e}},[K,ei,j,ea,$,m,i,p,B,r,t,b,x,eo,h,u,P,g,A]);return C.useMemo(()=>c?{reference:es,floating:el,item:er}:{},[c,es,el,er])}(ev,{enabled:!c,listRef:eO,activeIndex:S,nested:void 0!==n.type,loop:d,orientation:f,parentOrientation:\"menubar\"===n.type?n.context.orientation:void 0,rtl:\"rtl\"===eS,disabledIndices:tg,onNavigate:_,openOnArrowKeyDown:\"context-menu\"!==n.type}),e_=C.useRef(!1),ez=function(e,n){let{open:t,dataRef:r}=e,{listRef:o,activeIndex:a,onMatch:i,onTypingChange:l,enabled:s=!0,findMatch:c=null,resetMs:u=750,ignoreKeys:d=[],selectedIndex:f=null}=n,p=ek(),h=C.useRef(\"\"),g=C.useRef(f??a??-1),m=C.useRef(null),v=T(i),b=T(l),y=eA(c),x=eA(d);F(()=>{t&&(p.clear(),m.current=null,h.current=\"\")},[t,p]),F(()=>{t&&\"\"===h.current&&(g.current=f??a??-1)},[t,f,a]);let w=T(e=>{e?r.current.typing||(r.current.typing=e,b(e)):r.current.typing&&(r.current.typing=e,b(e))}),j=T(e=>{function n(e,n,t){let r=y.current?y.current(n,t):n.find(e=>e?.toLocaleLowerCase().indexOf(t.toLocaleLowerCase())===0);return r?e.indexOf(r):-1}let r=o.current;if(h.current.length>0&&\" \"!==h.current[0]&&(-1===n(r,r,h.current)?w(!1):\" \"===e.key&&eD(e)),null==r||x.current.includes(e.key)||1!==e.key.length||e.ctrlKey||e.metaKey||e.altKey)return;t&&\" \"!==e.key&&(eD(e),w(!0)),r.every(e=>!e||e[0]?.toLocaleLowerCase()!==e[1]?.toLocaleLowerCase())&&h.current===e.key&&(h.current=\"\",g.current=m.current),h.current+=e.key,p.start(u,()=>{h.current=\"\",g.current=m.current,w(!1)});let a=g.current,i=n(r,[...r.slice((a||0)+1),...r.slice(0,(a||0)+1)],h.current);-1!==i?(v(i),m.current=i):\" \"!==e.key&&(h.current=\"\",w(!1))}),k=C.useMemo(()=>({onKeyDown:j}),[j]),A=C.useMemo(()=>({onKeyDown:j,onKeyUp(e){\" \"===e.key&&w(!1)}}),[j,w]);return C.useMemo(()=>s?{reference:k,floating:A}:{},[s,k,A])}(ev,{listRef:eC,activeIndex:S,resetMs:500,onMatch:e=>{ee&&e!==S&&_(e)},onTypingChange:C.useCallback(e=>{e_.current=e},[])}),{getReferenceProps:eL,getFloatingProps:eT,getItemProps:eR}=nK([eb,ex,ew,ey,ej,eE,ez]),eN=function(e){let{enabled:n=!0,mouseDownAction:t,open:r}=e,o=C.useRef(!1);return C.useMemo(()=>n?{onMouseDown:e=>{(\"open\"===t&&!r||\"close\"===t&&r)&&(o.current=!0,eQ(e.currentTarget).addEventListener(\"click\",()=>{o.current=!1},{once:!0}))},onClick:e=>{o.current&&(o.current=!1,e.preventBaseUIHandler())}}:nr,[n,t,r])}({open:ee,enabled:\"menubar\"===n.type,mouseDownAction:\"open\"}),eH=C.useMemo(()=>{let e=tc(eL(),{onMouseEnter(){O(!0)},onMouseMove(){G(!0)}},eN);return delete e.role,e},[eL,eN,G]),eF=C.useMemo(()=>eT({onMouseEnter(){J&&\"menu\"!==n.type||O(!1)},onMouseMove(){G(!0)},onClick(){J&&O(!1)}}),[eT,J,n.type,G]),eU=C.useMemo(()=>eR(),[eR]),eX=C.useMemo(()=>({activeIndex:S,setActiveIndex:_,allowMouseUpTriggerRef:n.type?n.context.allowMouseUpTriggerRef:tm,floatingRootContext:ev,itemProps:eU,popupProps:eF,triggerProps:eH,itemDomElements:eO,itemLabels:eC,mounted:ei,open:ee,popupRef:M,positionerRef:I,setOpen:em,setPositionerElement:ea,triggerElement:b,setTriggerElement:y,transitionStatus:es,lastOpenChangeReason:P,instantType:j,onOpenChangeComplete:i,setHoverEnabled:O,typingRef:e_,modal:K,disabled:c,parent:n,rootId:X,allowMouseEnter:Q,setAllowMouseEnter:G}),[S,ev,eU,eF,eH,eO,eC,ei,ee,I,em,es,b,ea,P,j,i,K,c,n,X,Q,G]),eK=(0,l.jsx)(nJ.Provider,{value:eX,children:r});return void 0===n.type||\"context-menu\"===n.type?(0,l.jsx)(Z,{children:eK}):eK};function tb(e,n,t,r){var o,a,i,l,s;let c=P(ty).current;return o=c,a=e,i=n,l=t,s=r,(o.refs[0]!==a||o.refs[1]!==i||o.refs[2]!==l||o.refs[3]!==s)&&tx(c,[e,n,t,r]),c.callback}function ty(){return{callback:null,cleanup:null,refs:[]}}function tx(e,n){if(e.refs=n,n.every(e=>null==e)){e.callback=null;return}e.callback=t=>{if(e.cleanup&&(e.cleanup(),e.cleanup=null),null!=t){let r=Array(n.length).fill(null);for(let e=0;e<n.length;e+=1){let o=n[e];if(null!=o)switch(typeof o){case\"function\":{let n=o(t);\"function\"==typeof n&&(r[e]=n);break}case\"object\":o.current=t}}e.cleanup=()=>{for(let e=0;e<n.length;e+=1){let t=n[e];if(null!=t)switch(typeof t){case\"function\":{let n=r[e];\"function\"==typeof n?n():t(null);break}case\"object\":t.current=null}}}}}}let tw=parseInt(C.version,10);function tj(e,n,t={}){let r=n.render,o=function(e,n={}){let t,{className:r,render:o}=e,{state:a=nr,ref:i,props:l,disableStyleHooks:s,customStyleHookMapping:c,enabled:u=!0}=n,d=u?\"function\"==typeof r?r(a):r:void 0;!0!==s&&(t=C.useMemo(()=>u?function(e,n){let t={};for(let r in e){let o=e[r];if(n?.hasOwnProperty(r)){let e=n[r](o);null!=e&&Object.assign(t,e);continue}!0===o?t[`data-${r.toLowerCase()}`]=\"\":o&&(t[`data-${r.toLowerCase()}`]=o.toString())}return t}(a,c):nr,[a,c,u]));let f=u?tl(t,Array.isArray(l)?function(e){if(0===e.length)return ts;if(1===e.length)return tf(e[0],ts);let n={...tf(e[0],ts)};for(let t=1;t<e.length;t+=1)n=tu(n,e[t]);return n}(l):l)??nr:nr;return(\"undefined\"!=typeof document&&(u?Array.isArray(i)?f.ref=function(e){var n,t;let r=P(ty).current;return n=r,t=e,(n.refs.length!==t.length||n.refs.some((e,n)=>e!==t[n]))&&tx(r,e),r.callback}([f.ref,tk(o),...i]):f.ref=tb(f.ref,tk(o),i):tb(null,null)),u)?(void 0!==d&&(f.className=th(f.className,d)),f):nr}(n,t);return!1===t.enabled?null:function(e,n,t,r){if(n){if(\"function\"==typeof n)return n(t,r);let e=tc(t,n.props);return e.ref=t.ref,C.cloneElement(n,e)}if(e&&\"string\"==typeof e){var o,a;return o=e,a=t,\"button\"===o?(0,l.jsx)(\"button\",{type:\"button\",...a}):\"img\"===o?(0,l.jsx)(\"img\",{alt:\"\",...a}):C.createElement(o,a)}throw Error(\"Base UI: Render element or function are not defined.\")}(e,r,o,t.state??nr)}function tk(e){return e&&\"function\"!=typeof e?tw>=19?e.props.ref:e.ref:null}let tA=C.createContext(void 0);function tO(e=!1){let n=C.useContext(tA);if(void 0===n&&!e)throw Error(\"Base UI: CompositeRootContext is missing. Composite parts must be placed within <Composite.Root>.\");return n}let tC=C.createContext({register:()=>{},unregister:()=>{},subscribeMapChange:()=>()=>{},elementsRef:{current:[]},nextIndexRef:{current:0}}),tS=((r={})[r.None=0]=\"None\",r[r.GuessFromOrder=1]=\"GuessFromOrder\",r);function tE(e={}){let{label:n,metadata:t,textRef:r,indexGuessBehavior:o}=e,{register:a,unregister:i,subscribeMapChange:l,elementsRef:s,labelsRef:c,nextIndexRef:u}=C.useContext(tC),d=C.useRef(-1),[f,p]=C.useState(o===tS.GuessFromOrder?()=>{if(-1===d.current){let e=u.current;u.current+=1,d.current=e}return d.current}:-1),h=C.useRef(null),g=C.useCallback(e=>{if(h.current=e,-1!==f&&null!==e&&(s.current[f]=e,c)){let t=void 0!==n;c.current[f]=t?n:r?.current?.textContent??e.textContent}},[f,s,c,n,r]);return F(()=>{let e=h.current;if(e)return a(e,t),()=>{i(e)}},[a,i,t]),F(()=>l(e=>{let n=h.current?e.get(h.current)?.index:null;null!=n&&p(n)}),[l,p]),C.useMemo(()=>({ref:g,index:f}),[f,g])}function t_(e){let{render:n,className:t,itemRef:r=null,metadata:o,...a}=e,{props:i,ref:l}=function(e={}){let{highlightedIndex:n,onHighlightedIndexChange:t,highlightItemOnHover:r}=tO(),{ref:o,index:a}=tE(e),i=n===a,l=C.useRef(null),s=tb(o,l),c=C.useMemo(()=>({tabIndex:i?0:-1,onFocus(){t(a)},onMouseMove(){let e=l.current;if(!r||!e)return;let n=e.hasAttribute(\"disabled\")||\"true\"===e.ariaDisabled;i||n||e.focus()}}),[a,i,t,r]);return C.useMemo(()=>({props:c,ref:s,index:a}),[c,a,s])}({metadata:o});return tj(\"div\",e,{ref:[r,l],props:[i,a]})}let tP=((o={}).startingStyle=\"data-starting-style\",o.endingStyle=\"data-ending-style\",o),tz={[tP.startingStyle]:\"\"},tL={[tP.endingStyle]:\"\"},tT={transitionStatus:e=>\"starting\"===e?tz:\"ending\"===e?tL:null},tR=((a={}).open=\"data-open\",a.closed=\"data-closed\",a[a.startingStyle=tP.startingStyle]=\"startingStyle\",a[a.endingStyle=tP.endingStyle]=\"endingStyle\",a.anchorHidden=\"data-anchor-hidden\",a),tN=((i={}).popupOpen=\"data-popup-open\",i.pressed=\"data-pressed\",i),tD={[tN.popupOpen]:\"\"},tB={[tN.popupOpen]:\"\",[tN.pressed]:\"\"},tM={[tR.open]:\"\"},tI={[tR.closed]:\"\"},tH={[tR.anchorHidden]:\"\"},tF={open:e=>e?tD:null},tU={open:e=>e?tB:null},tV={open:e=>e?tM:tI,anchorHidden:e=>e?tH:null};function tq(e={}){let{disabled:n=!1,focusableWhenDisabled:t,tabIndex:r=0,native:o=!0}=e,a=C.useRef(null),i=void 0!==tO(!0),l=T(()=>{let e=a.current;return!!(e?.tagName===\"A\"&&e?.href)}),{props:s}=function(e){let{focusableWhenDisabled:n,disabled:t,composite:r=!1,tabIndex:o=0,isNativeButton:a}=e,i=r&&!1!==n,l=r&&!1===n;return{props:C.useMemo(()=>{let e={onKeyDown(e){t&&n&&\"Tab\"!==e.key&&e.preventDefault()}};return r||(e.tabIndex=o,!a&&t&&(e.tabIndex=n?o:-1)),(a&&(n||i)||!a&&t)&&(e[\"aria-disabled\"]=t),a&&(!n||l)&&(e.disabled=t),e},[r,t,n,i,l,a,o])}}({focusableWhenDisabled:t,disabled:n,composite:i,tabIndex:r,isNativeButton:o});return F(()=>{let e=a.current;e instanceof HTMLButtonElement&&i&&n&&void 0===s.disabled&&e.disabled&&(e.disabled=!1)},[n,s.disabled,i]),{getButtonProps:C.useCallback((e={})=>{let{onClick:t,onMouseDown:r,onKeyUp:a,onKeyDown:i,onPointerDown:c,...u}=e;return tc({type:o?\"button\":void 0,onClick(e){if(n)return void e.preventDefault();t?.(e)},onMouseDown(e){n||r?.(e)},onKeyDown(e){n||(tp(e),i?.(e)),!e.baseUIHandlerPrevented&&(e.target!==e.currentTarget||o||l()||\"Enter\"!==e.key||n||(t?.(e),e.preventDefault()))},onKeyUp(e){n||(tp(e),a?.(e)),!e.baseUIHandlerPrevented&&(e.target!==e.currentTarget||o||n||\" \"!==e.key||t?.(e))},onPointerDown(e){if(n)return void e.preventDefault();c?.(e)}},o?void 0:{role:\"button\"},s,u)},[n,s,o,l]),buttonRef:a}}let tW=C.forwardRef(function(e,n){let{render:t,className:r,disabled:o=!1,nativeButton:a=!0,...i}=e,{triggerProps:s,disabled:c,setTriggerElement:u,open:d,allowMouseUpTriggerRef:f,positionerRef:p,parent:h,lastOpenChangeReason:g,rootId:m}=n0(),v=o||c,b=C.useRef(null),y=ek(),{getButtonProps:x,buttonRef:w}=tq({disabled:v,native:a}),j=tb(w,u),{events:k}=W();C.useEffect(()=>{d||void 0!==h.type||(f.current=!1)},[f,d,h.type]);let A=T(e=>{if(!b.current)return;y.clear(),f.current=!1;let n=e.target;if(eY(b.current,n)||eY(p.current,n)||n===b.current||null!=n&&function e(n){return en(n)&&n.hasAttribute(\"data-rootownerid\")?n.getAttribute(\"data-rootownerid\")??void 0:eh(n)?void 0:e(ev(n))}(n)===m)return;let t=function(e){let n=e.getBoundingClientRect(),t=window.getComputedStyle(e,\"::before\"),r=window.getComputedStyle(e,\"::after\");if(\"none\"===t.content&&\"none\"===r.content)return n;let o=parseFloat(t.width)||0,a=parseFloat(t.height)||0,i=parseFloat(r.width)||0,l=parseFloat(r.height)||0,s=Math.max(n.width,o,i),c=Math.max(n.height,a,l),u=s-n.width,d=c-n.height;return{left:n.left-u/2,right:n.right+u/2,top:n.top-d/2,bottom:n.bottom+d/2}}(b.current);e.clientX>=t.left-2&&e.clientX<=t.right+2&&e.clientY>=t.top-2&&e.clientY<=t.bottom+2||k.emit(\"close\",{domEvent:e,reason:\"cancel-open\"})});C.useEffect(()=>{d&&\"trigger-hover\"===g&&eQ(b.current).addEventListener(\"mouseup\",A,{once:!0})},[d,A,g]);let O=C.useCallback(e=>tc({\"aria-haspopup\":\"menu\",ref:j,onMouseDown:e=>{d||(y.start(200,()=>{f.current=!0}),eQ(e.currentTarget).addEventListener(\"mouseup\",A,{once:!0}))}},e,x),[x,j,d,f,y,A]),S=tj(\"button\",e,{state:C.useMemo(()=>({disabled:v,open:d}),[v,d]),customStyleHookMapping:tU,ref:[b,n,w],props:[s,i,O]});return\"menubar\"===h.type?(0,l.jsx)(t_,{render:S}):S}),t$={clip:\"rect(0 0 0 0)\",overflow:\"hidden\",whiteSpace:\"nowrap\",position:\"fixed\",top:0,left:0,border:0,padding:0,width:1,height:1,margin:-1},tZ=C.forwardRef(function(e,n){let[t,r]=C.useState();return F(()=>{eL&&r(\"button\")},[]),(0,l.jsx)(\"span\",{...e,ref:n,tabIndex:0,role:t,\"aria-hidden\":!t||void 0,style:t$,\"data-base-ui-focus-guard\":\"\"})});var tY='input:not([inert]),select:not([inert]),textarea:not([inert]),a[href]:not([inert]),button:not([inert]),[tabindex]:not(slot):not([inert]),audio[controls]:not([inert]),video[controls]:not([inert]),[contenteditable]:not([contenteditable=\"false\"]):not([inert]),details>summary:first-of-type:not([inert]),details:not([inert])',tX=\"undefined\"==typeof Element,tK=tX?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,tQ=!tX&&Element.prototype.getRootNode?function(e){var n;return null==e||null==(n=e.getRootNode)?void 0:n.call(e)}:function(e){return null==e?void 0:e.ownerDocument},tG=function e(n,t){void 0===t&&(t=!0);var r,o=null==n||null==(r=n.getAttribute)?void 0:r.call(n,\"inert\");return\"\"===o||\"true\"===o||t&&n&&e(n.parentNode)},tJ=function(e){var n,t=null==e||null==(n=e.getAttribute)?void 0:n.call(e,\"contenteditable\");return\"\"===t||\"true\"===t},t0=function(e,n,t){if(tG(e))return[];var r=Array.prototype.slice.apply(e.querySelectorAll(tY));return n&&tK.call(e,tY)&&r.unshift(e),r=r.filter(t)},t1=function e(n,t,r){for(var o=[],a=Array.from(n);a.length;){var i=a.shift();if(!tG(i,!1))if(\"SLOT\"===i.tagName){var l=i.assignedElements(),s=e(l.length?l:i.children,!0,r);r.flatten?o.push.apply(o,s):o.push({scopeParent:i,candidates:s})}else{tK.call(i,tY)&&r.filter(i)&&(t||!n.includes(i))&&o.push(i);var c=i.shadowRoot||\"function\"==typeof r.getShadowRoot&&r.getShadowRoot(i),u=!tG(c,!1)&&(!r.shadowRootFilter||r.shadowRootFilter(i));if(c&&u){var d=e(!0===c?i.children:c.children,!0,r);r.flatten?o.push.apply(o,d):o.push({scopeParent:i,candidates:d})}else a.unshift.apply(a,i.children)}}return o},t2=function(e){return!isNaN(parseInt(e.getAttribute(\"tabindex\"),10))},t4=function(e){if(!e)throw Error(\"No node provided\");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||tJ(e))&&!t2(e)?0:e.tabIndex},t5=function(e,n){var t=t4(e);return t<0&&n&&!t2(e)?0:t},t3=function(e,n){return e.tabIndex===n.tabIndex?e.documentOrder-n.documentOrder:e.tabIndex-n.tabIndex},t6=function(e){return\"INPUT\"===e.tagName},t9=function(e,n){for(var t=0;t<e.length;t++)if(e[t].checked&&e[t].form===n)return e[t]},t8=function(e){if(!e.name)return!0;var n,t=e.form||tQ(e),r=function(e){return t.querySelectorAll('input[type=\"radio\"][name=\"'+e+'\"]')};if(\"undefined\"!=typeof window&&void 0!==window.CSS&&\"function\"==typeof window.CSS.escape)n=r(window.CSS.escape(e.name));else try{n=r(e.name)}catch(e){return console.error(\"Looks like you have a radio button with a name attribute containing invalid CSS selector characters and need the CSS.escape polyfill: %s\",e.message),!1}var o=t9(n,e.form);return!o||o===e},t7=function(e){return t6(e)&&\"radio\"===e.type&&!t8(e)},re=function(e){var n,t,r,o,a,i,l,s=e&&tQ(e),c=null==(n=s)?void 0:n.host,u=!1;if(s&&s!==e)for(u=!!(null!=(t=c)&&null!=(r=t.ownerDocument)&&r.contains(c)||null!=e&&null!=(o=e.ownerDocument)&&o.contains(e));!u&&c;)u=!!(null!=(i=c=null==(a=s=tQ(c))?void 0:a.host)&&null!=(l=i.ownerDocument)&&l.contains(c));return u},rn=function(e){var n=e.getBoundingClientRect(),t=n.width,r=n.height;return 0===t&&0===r},rt=function(e,n){var t=n.displayCheck,r=n.getShadowRoot;if(\"hidden\"===getComputedStyle(e).visibility)return!0;var o=tK.call(e,\"details>summary:first-of-type\")?e.parentElement:e;if(tK.call(o,\"details:not([open]) *\"))return!0;if(t&&\"full\"!==t&&\"legacy-full\"!==t){if(\"non-zero-area\"===t)return rn(e)}else{if(\"function\"==typeof r){for(var a=e;e;){var i=e.parentElement,l=tQ(e);if(i&&!i.shadowRoot&&!0===r(i))return rn(e);e=e.assignedSlot?e.assignedSlot:i||l===e.ownerDocument?i:l.host}e=a}if(re(e))return!e.getClientRects().length;if(\"legacy-full\"!==t)return!0}return!1},rr=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var n=e.parentElement;n;){if(\"FIELDSET\"===n.tagName&&n.disabled){for(var t=0;t<n.children.length;t++){var r=n.children.item(t);if(\"LEGEND\"===r.tagName)return!!tK.call(n,\"fieldset[disabled] *\")||!r.contains(e)}return!0}n=n.parentElement}return!1},ro=function(e,n){return!(n.disabled||tG(n)||t6(n)&&\"hidden\"===n.type||rt(n,e)||\"DETAILS\"===n.tagName&&Array.prototype.slice.apply(n.children).some(function(e){return\"SUMMARY\"===e.tagName})||rr(n))},ra=function(e,n){return!(t7(n)||0>t4(n))&&!!ro(e,n)},ri=function(e){var n=parseInt(e.getAttribute(\"tabindex\"),10);return!!isNaN(n)||!!(n>=0)},rl=function e(n){var t=[],r=[];return n.forEach(function(n,o){var a=!!n.scopeParent,i=a?n.scopeParent:n,l=t5(i,a),s=a?e(n.candidates):i;0===l?a?t.push.apply(t,s):t.push(i):r.push({documentOrder:o,tabIndex:l,item:n,isScope:a,content:s})}),r.sort(t3).reduce(function(e,n){return n.isScope?e.push.apply(e,n.content):e.push(n.content),e},[]).concat(t)},rs=function(e,n){return rl((n=n||{}).getShadowRoot?t1([e],n.includeContainer,{filter:ra.bind(null,n),flatten:!1,getShadowRoot:n.getShadowRoot,shadowRootFilter:ri}):t0(e,n.includeContainer,ra.bind(null,n)))},rc=function(e,n){return(n=n||{}).getShadowRoot?t1([e],n.includeContainer,{filter:ro.bind(null,n),flatten:!0,getShadowRoot:n.getShadowRoot}):t0(e,n.includeContainer,ro.bind(null,n))},ru=function(e,n){if(n=n||{},!e)throw Error(\"No node provided\");return!1!==tK.call(e,tY)&&ra(n,e)};let rd=()=>({getShadowRoot:!0,displayCheck:\"function\"==typeof ResizeObserver&&ResizeObserver.toString().includes(\"[native code]\")?\"full\":\"none\"});function rf(e,n){let t=rs(e,rd()),r=t.length;if(0===r)return;let o=eZ(eQ(e)),a=t.indexOf(o);return t[-1===a?1===n?0:r-1:a+n]}function rp(e){return rf(eQ(e).body,1)||e}function rh(e){return rf(eQ(e).body,-1)||e}function rg(e,n){let t=n||e.currentTarget,r=e.relatedTarget;return!r||!eY(t,r)}function rm(e){e.querySelectorAll(\"[data-tabindex]\").forEach(e=>{let n=e.dataset.tabindex;delete e.dataset.tabindex,n?e.setAttribute(\"tabindex\",n):e.removeAttribute(\"tabindex\")})}let rv=C.createContext(null),rb=()=>C.useContext(rv),ry=e1(\"portal\");function rx(e={}){let{id:n,root:t}=e,r=H(),o=rb(),[a,i]=C.useState(null),l=C.useRef(null);return F(()=>()=>{a?.remove(),queueMicrotask(()=>{l.current=null})},[a]),F(()=>{if(!r||l.current)return;let e=n?document.getElementById(n):null;if(!e)return;let t=document.createElement(\"div\");t.id=r,t.setAttribute(ry,\"\"),e.appendChild(t),l.current=t,i(t)},[n,r]),F(()=>{if(null===t||!r||l.current)return;let e=t||o?.portalNode;e&&!ee(e)&&(e=e.current),e=e||document.body;let a=null;n&&((a=document.createElement(\"div\")).id=n,e.appendChild(a));let s=document.createElement(\"div\");s.id=r,s.setAttribute(ry,\"\"),(e=a||e).appendChild(s),l.current=s,i(s)},[n,t,r,o]),a}function rw(e){let{children:n,id:t,root:r,preserveTabOrder:o=!0}=e,a=rx({id:t,root:r}),[i,s]=C.useState(null),c=C.useRef(null),u=C.useRef(null),d=C.useRef(null),f=C.useRef(null),p=i?.modal,h=i?.open,g=!!i&&!i.modal&&i.open&&o&&!!(r||a);return C.useEffect(()=>{if(a&&o&&!p)return a.addEventListener(\"focusin\",e,!0),a.addEventListener(\"focusout\",e,!0),()=>{a.removeEventListener(\"focusin\",e,!0),a.removeEventListener(\"focusout\",e,!0)};function e(e){a&&rg(e)&&(\"focusin\"===e.type?rm:function(e){rs(e,rd()).forEach(e=>{e.dataset.tabindex=e.getAttribute(\"tabindex\")||\"\",e.setAttribute(\"tabindex\",\"-1\")})})(a)}},[a,o,p]),C.useEffect(()=>{a&&(h||rm(a))},[h,a]),(0,l.jsxs)(rv.Provider,{value:C.useMemo(()=>({preserveTabOrder:o,beforeOutsideRef:c,afterOutsideRef:u,beforeInsideRef:d,afterInsideRef:f,portalNode:a,setFocusManagerState:s}),[o,a]),children:[g&&a&&(0,l.jsx)(tZ,{\"data-type\":\"outside\",ref:c,onFocus:e=>{if(rg(e,a))d.current?.focus();else{let e=rh(i?i.domReference:null);e?.focus()}}}),g&&a&&(0,l.jsx)(\"span\",{\"aria-owns\":a.id,style:t$}),a&&E.createPortal(n,a),g&&a&&(0,l.jsx)(tZ,{\"data-type\":\"outside\",ref:u,onFocus:e=>{if(rg(e,a))f.current?.focus();else{let n=rp(i?i.domReference:null);n?.focus(),i?.closeOnFocusOut&&i?.onOpenChange(!1,e.nativeEvent,\"focus-out\")}}})]})}let rj=C.createContext(void 0);function rk(e){let{children:n,keepMounted:t=!1,container:r}=e,{mounted:o}=n0();return o||t?(0,l.jsx)(rj.Provider,{value:t,children:(0,l.jsx)(rw,{root:r,children:n})}):null}let rA=C.createContext(void 0);function rO(e,n,t){let r,{reference:o,floating:a}=e,i=nE(n),l=nO(nE(n)),s=nC(l),c=nk(n),u=\"y\"===i,d=o.x+o.width/2-a.width/2,f=o.y+o.height/2-a.height/2,p=o[s]/2-a[s]/2;switch(c){case\"top\":r={x:d,y:o.y-a.height};break;case\"bottom\":r={x:d,y:o.y+o.height};break;case\"right\":r={x:o.x+o.width,y:f};break;case\"left\":r={x:o.x-a.width,y:f};break;default:r={x:o.x,y:o.y}}switch(nA(n)){case\"start\":r[l]-=p*(t&&u?-1:1);break;case\"end\":r[l]+=p*(t&&u?-1:1)}return r}let rC=async(e,n,t)=>{let{placement:r=\"bottom\",strategy:o=\"absolute\",middleware:a=[],platform:i}=t,l=a.filter(Boolean),s=await (null==i.isRTL?void 0:i.isRTL(n)),c=await i.getElementRects({reference:e,floating:n,strategy:o}),{x:u,y:d}=rO(c,r,s),f=r,p={},h=0;for(let t=0;t<l.length;t++){let{name:a,fn:g}=l[t],{x:m,y:v,data:b,reset:y}=await g({x:u,y:d,initialPlacement:r,placement:f,strategy:o,middlewareData:p,rects:c,platform:i,elements:{reference:e,floating:n}});u=null!=m?m:u,d=null!=v?v:d,p={...p,[a]:{...p[a],...b}},y&&h<=50&&(h++,\"object\"==typeof y&&(y.placement&&(f=y.placement),y.rects&&(c=!0===y.rects?await i.getElementRects({reference:e,floating:n,strategy:o}):y.rects),{x:u,y:d}=rO(c,f,s)),t=-1)}return{x:u,y:d,placement:f,strategy:o,middlewareData:p}};async function rS(e,n){var t;void 0===n&&(n={});let{x:r,y:o,platform:a,rects:i,elements:l,strategy:s}=e,{boundary:c=\"clippingAncestors\",rootBoundary:u=\"viewport\",elementContext:d=\"floating\",altBoundary:f=!1,padding:p=0}=nj(n,e),h=nN(p),g=l[f?\"floating\"===d?\"reference\":\"floating\":d],m=nD(await a.getClippingRect({element:null==(t=await (null==a.isElement?void 0:a.isElement(g)))||t?g:g.contextElement||await (null==a.getDocumentElement?void 0:a.getDocumentElement(l.floating)),boundary:c,rootBoundary:u,strategy:s})),v=\"floating\"===d?{x:r,y:o,width:i.floating.width,height:i.floating.height}:i.reference,b=await (null==a.getOffsetParent?void 0:a.getOffsetParent(l.floating)),y=await (null==a.isElement?void 0:a.isElement(b))&&await (null==a.getScale?void 0:a.getScale(b))||{x:1,y:1},x=nD(a.convertOffsetParentRelativeRectToViewportRelativeRect?await a.convertOffsetParentRelativeRectToViewportRelativeRect({elements:l,rect:v,offsetParent:b,strategy:s}):v);return{top:(m.top-x.top+h.top)/y.y,bottom:(x.bottom-m.bottom+h.bottom)/y.y,left:(m.left-x.left+h.left)/y.x,right:(x.right-m.right+h.right)/y.x}}function rE(e,n){return{top:e.top-n.height,right:e.right-n.width,bottom:e.bottom-n.height,left:e.left-n.width}}function r_(e){return nh.some(n=>e[n]>=0)}let rP=new Set([\"left\",\"top\"]);async function rz(e,n){let{placement:t,platform:r,elements:o}=e,a=await (null==r.isRTL?void 0:r.isRTL(o.floating)),i=nk(t),l=nA(t),s=\"y\"===nE(t),c=rP.has(i)?-1:1,u=a&&s?-1:1,d=nj(n,e),{mainAxis:f,crossAxis:p,alignmentAxis:h}=\"number\"==typeof d?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return l&&\"number\"==typeof h&&(p=\"end\"===l?-1*h:h),s?{x:p*u,y:f*c}:{x:f*c,y:p*u}}function rL(e){let n=eg(e),t=parseFloat(n.width)||0,r=parseFloat(n.height)||0,o=en(e),a=o?e.offsetWidth:t,i=o?e.offsetHeight:r,l=nv(t)!==a||nv(r)!==i;return l&&(t=a,r=i),{width:t,height:r,$:l}}function rT(e){return ee(e)?e:e.contextElement}function rR(e){let n=rT(e);if(!en(n))return ny(1);let t=n.getBoundingClientRect(),{width:r,height:o,$:a}=rL(n),i=(a?nv(t.width):t.width)/r,l=(a?nv(t.height):t.height)/o;return i&&Number.isFinite(i)||(i=1),l&&Number.isFinite(l)||(l=1),{x:i,y:l}}let rN=ny(0);function rD(e){let n=Q(e);return ef()&&n.visualViewport?{x:n.visualViewport.offsetLeft,y:n.visualViewport.offsetTop}:rN}function rB(e,n,t,r){var o;void 0===n&&(n=!1),void 0===t&&(t=!1);let a=e.getBoundingClientRect(),i=rT(e),l=ny(1);n&&(r?ee(r)&&(l=rR(r)):l=rR(e));let s=(void 0===(o=t)&&(o=!1),r&&(!o||r===Q(i))&&o)?rD(i):ny(0),c=(a.left+s.x)/l.x,u=(a.top+s.y)/l.y,d=a.width/l.x,f=a.height/l.y;if(i){let e=Q(i),n=r&&ee(r)?Q(r):r,t=e,o=ey(t);for(;o&&r&&n!==t;){let e=rR(o),n=o.getBoundingClientRect(),r=eg(o),a=n.left+(o.clientLeft+parseFloat(r.paddingLeft))*e.x,i=n.top+(o.clientTop+parseFloat(r.paddingTop))*e.y;c*=e.x,u*=e.y,d*=e.x,f*=e.y,c+=a,u+=i,o=ey(t=Q(o))}}return nD({width:d,height:f,x:c,y:u})}function rM(e,n){let t=em(e).scrollLeft;return n?n.left+t:rB(G(e)).left+t}function rI(e,n,t){void 0===t&&(t=!1);let r=e.getBoundingClientRect();return{x:r.left+n.scrollLeft-(t?0:rM(e,r)),y:r.top+n.scrollTop}}let rH=new Set([\"absolute\",\"fixed\"]);function rF(e,n,t){let r;if(\"viewport\"===n)r=function(e,n){let t=Q(e),r=G(e),o=t.visualViewport,a=r.clientWidth,i=r.clientHeight,l=0,s=0;if(o){a=o.width,i=o.height;let e=ef();(!e||e&&\"fixed\"===n)&&(l=o.offsetLeft,s=o.offsetTop)}return{width:a,height:i,x:l,y:s}}(e,t);else if(\"document\"===n)r=function(e){let n=G(e),t=em(e),r=e.ownerDocument.body,o=nm(n.scrollWidth,n.clientWidth,r.scrollWidth,r.clientWidth),a=nm(n.scrollHeight,n.clientHeight,r.scrollHeight,r.clientHeight),i=-t.scrollLeft+rM(e),l=-t.scrollTop;return\"rtl\"===eg(r).direction&&(i+=nm(n.clientWidth,r.clientWidth)-o),{width:o,height:a,x:i,y:l}}(G(e));else if(ee(n))r=function(e,n){let t=rB(e,!0,\"fixed\"===n),r=t.top+e.clientTop,o=t.left+e.clientLeft,a=en(e)?rR(e):ny(1),i=e.clientWidth*a.x,l=e.clientHeight*a.y;return{width:i,height:l,x:o*a.x,y:r*a.y}}(n,t);else{let t=rD(e);r={x:n.x-t.x,y:n.y-t.y,width:n.width,height:n.height}}return nD(r)}function rU(e){return\"static\"===eg(e).position}function rV(e,n){if(!en(e)||\"fixed\"===eg(e).position)return null;if(n)return n(e);let t=e.offsetParent;return G(e)===t&&(t=t.ownerDocument.body),t}function rq(e,n){var t;let r=Q(e);if(el(e))return r;if(!en(e)){let n=ev(e);for(;n&&!eh(n);){if(ee(n)&&!rU(n))return n;n=ev(n)}return r}let o=rV(e,n);for(;o&&(t=o,ea.has(K(t)))&&rU(o);)o=rV(o,n);return o&&eh(o)&&rU(o)&&!ed(o)?r:o||function(e){let n=ev(e);for(;en(n)&&!eh(n);){if(ed(n))return n;if(el(n))break;n=ev(n)}return null}(e)||r}let rW=async function(e){let n=this.getOffsetParent||rq,t=this.getDimensions,r=await t(e.floating);return{reference:function(e,n,t){let r=en(n),o=G(n),a=\"fixed\"===t,i=rB(e,!0,a,n),l={scrollLeft:0,scrollTop:0},s=ny(0);if(r||!r&&!a)if((\"body\"!==K(n)||eo(o))&&(l=em(n)),r){let e=rB(n,!0,a,n);s.x=e.x+n.clientLeft,s.y=e.y+n.clientTop}else o&&(s.x=rM(o));a&&!r&&o&&(s.x=rM(o));let c=!o||r||a?ny(0):rI(o,l);return{x:i.left+l.scrollLeft-s.x-c.x,y:i.top+l.scrollTop-s.y-c.y,width:i.width,height:i.height}}(e.reference,await n(e.floating),e.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}},r$={convertOffsetParentRelativeRectToViewportRelativeRect:function(e){let{elements:n,rect:t,offsetParent:r,strategy:o}=e,a=\"fixed\"===o,i=G(r),l=!!n&&el(n.floating);if(r===i||l&&a)return t;let s={scrollLeft:0,scrollTop:0},c=ny(1),u=ny(0),d=en(r);if((d||!d&&!a)&&((\"body\"!==K(r)||eo(i))&&(s=em(r)),en(r))){let e=rB(r);c=rR(r),u.x=e.x+r.clientLeft,u.y=e.y+r.clientTop}let f=!i||d||a?ny(0):rI(i,s,!0);return{width:t.width*c.x,height:t.height*c.y,x:t.x*c.x-s.scrollLeft*c.x+u.x+f.x,y:t.y*c.y-s.scrollTop*c.y+u.y+f.y}},getDocumentElement:G,getClippingRect:function(e){let{element:n,boundary:t,rootBoundary:r,strategy:o}=e,a=[...\"clippingAncestors\"===t?el(n)?[]:function(e,n){let t=n.get(e);if(t)return t;let r=eb(e,[],!1).filter(e=>ee(e)&&\"body\"!==K(e)),o=null,a=\"fixed\"===eg(e).position,i=a?ev(e):e;for(;ee(i)&&!eh(i);){let n=eg(i),t=ed(i);t||\"fixed\"!==n.position||(o=null),(a?!t&&!o:!t&&\"static\"===n.position&&!!o&&rH.has(o.position)||eo(i)&&!t&&function e(n,t){let r=ev(n);return!(r===t||!ee(r)||eh(r))&&(\"fixed\"===eg(r).position||e(r,t))}(e,i))?r=r.filter(e=>e!==i):o=n,i=ev(i)}return n.set(e,r),r}(n,this._c):[].concat(t),r],i=a[0],l=a.reduce((e,t)=>{let r=rF(n,t,o);return e.top=nm(r.top,e.top),e.right=ng(r.right,e.right),e.bottom=ng(r.bottom,e.bottom),e.left=nm(r.left,e.left),e},rF(n,i,o));return{width:l.right-l.left,height:l.bottom-l.top,x:l.left,y:l.top}},getOffsetParent:rq,getElementRects:rW,getClientRects:function(e){return Array.from(e.getClientRects())},getDimensions:function(e){let{width:n,height:t}=rL(e);return{width:n,height:t}},getScale:rR,isElement:ee,isRTL:function(e){return\"rtl\"===eg(e).direction}};function rZ(e,n){return e.x===n.x&&e.y===n.y&&e.width===n.width&&e.height===n.height}function rY(e,n,t,r){let o;void 0===r&&(r={});let{ancestorScroll:a=!0,ancestorResize:i=!0,elementResize:l=\"function\"==typeof ResizeObserver,layoutShift:s=\"function\"==typeof IntersectionObserver,animationFrame:c=!1}=r,u=rT(e),d=a||i?[...u?eb(u):[],...eb(n)]:[];d.forEach(e=>{a&&e.addEventListener(\"scroll\",t,{passive:!0}),i&&e.addEventListener(\"resize\",t)});let f=u&&s?function(e,n){let t,r=null,o=G(e);function a(){var e;clearTimeout(t),null==(e=r)||e.disconnect(),r=null}return!function i(l,s){void 0===l&&(l=!1),void 0===s&&(s=1),a();let c=e.getBoundingClientRect(),{left:u,top:d,width:f,height:p}=c;if(l||n(),!f||!p)return;let h=nb(d),g=nb(o.clientWidth-(u+f)),m={rootMargin:-h+\"px \"+-g+\"px \"+-nb(o.clientHeight-(d+p))+\"px \"+-nb(u)+\"px\",threshold:nm(0,ng(1,s))||1},v=!0;function b(n){let r=n[0].intersectionRatio;if(r!==s){if(!v)return i();r?i(!1,r):t=setTimeout(()=>{i(!1,1e-7)},1e3)}1!==r||rZ(c,e.getBoundingClientRect())||i(),v=!1}try{r=new IntersectionObserver(b,{...m,root:o.ownerDocument})}catch(e){r=new IntersectionObserver(b,m)}r.observe(e)}(!0),a}(u,t):null,p=-1,h=null;l&&(h=new ResizeObserver(e=>{let[r]=e;r&&r.target===u&&h&&(h.unobserve(n),cancelAnimationFrame(p),p=requestAnimationFrame(()=>{var e;null==(e=h)||e.observe(n)})),t()}),u&&!c&&h.observe(u),h.observe(n));let g=c?rB(e):null;return c&&function n(){let r=rB(e);g&&!rZ(g,r)&&t(),g=r,o=requestAnimationFrame(n)}(),t(),()=>{var e;d.forEach(e=>{a&&e.removeEventListener(\"scroll\",t),i&&e.removeEventListener(\"resize\",t)}),null==f||f(),null==(e=h)||e.disconnect(),h=null,c&&cancelAnimationFrame(o)}}let rX=e=>({name:\"arrow\",options:e,async fn(n){let{x:t,y:r,placement:o,rects:a,platform:i,elements:l,middlewareData:s}=n,{element:c,padding:u=0}=nj(e,n)||{};if(null==c)return{};let d=nN(u),f={x:t,y:r},p=nO(nE(o)),h=nC(p),g=await i.getDimensions(c),m=\"y\"===p,v=m?\"clientHeight\":\"clientWidth\",b=a.reference[h]+a.reference[p]-f[p]-a.floating[h],y=f[p]-a.reference[p],x=await (null==i.getOffsetParent?void 0:i.getOffsetParent(c)),w=x?x[v]:0;w&&await (null==i.isElement?void 0:i.isElement(x))||(w=l.floating[v]||a.floating[h]);let j=w/2-g[h]/2-1,k=ng(d[m?\"top\":\"left\"],j),A=ng(d[m?\"bottom\":\"right\"],j),O=w-g[h]-A,C=w/2-g[h]/2+(b/2-y/2),S=nm(k,ng(C,O)),E=!s.arrow&&null!=nA(o)&&C!==S&&a.reference[h]/2-(C<k?k:A)-g[h]/2<0,_=E?C<k?C-k:C-O:0;return{[p]:f[p]+_,data:{[p]:S,centerOffset:C-S-_,...E&&{alignmentOffset:_}},reset:E}}});var rK=\"undefined\"!=typeof document?C.useLayoutEffect:function(){};function rQ(e,n){let t,r,o;if(e===n)return!0;if(typeof e!=typeof n)return!1;if(\"function\"==typeof e&&e.toString()===n.toString())return!0;if(e&&n&&\"object\"==typeof e){if(Array.isArray(e)){if((t=e.length)!==n.length)return!1;for(r=t;0!=r--;)if(!rQ(e[r],n[r]))return!1;return!0}if((t=(o=Object.keys(e)).length)!==Object.keys(n).length)return!1;for(r=t;0!=r--;)if(!({}).hasOwnProperty.call(n,o[r]))return!1;for(r=t;0!=r--;){let t=o[r];if((\"_owner\"!==t||!e.$$typeof)&&!rQ(e[t],n[t]))return!1}return!0}return e!=e&&n!=n}function rG(e){return\"undefined\"==typeof window?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function rJ(e,n){let t=rG(e);return Math.round(n*t)/t}function r0(e){let n=C.useRef(e);return rK(()=>{n.current=e}),n}function r1(e,n,t){let r=\"inline-start\"===e||\"inline-end\"===e;return({top:\"top\",right:r?t?\"inline-start\":\"inline-end\":\"right\",bottom:\"bottom\",left:r?t?\"inline-end\":\"inline-start\":\"left\"})[n]}function r2(e,n,t){let{rects:r,placement:o}=e;return{side:r1(n,nk(o),t),align:nA(o)||\"center\",anchor:{width:r.reference.width,height:r.reference.height},positioner:{width:r.floating.width,height:r.floating.height}}}function r4(e){var n,t,r,o,a,i,l,s,c,u,d,f,p,h,g,m,v;let{anchor:b,positionMethod:y=\"absolute\",side:x=\"bottom\",sideOffset:w=0,align:j=\"center\",alignOffset:k=0,collisionBoundary:A,collisionPadding:O=5,sticky:S=!1,arrowPadding:_=5,trackAnchor:P=!0,keepMounted:z=!1,floatingRootContext:L,mounted:R,collisionAvoidance:N,shiftCrossAxis:D=!1,nodeId:B,adaptiveOrigin:M}=e,I=N.side||\"flip\",H=N.align||\"flip\",U=N.fallbackAxisSide||\"end\",V=\"function\"==typeof b?b:void 0,q=T(V),$=V?q:b,Z=eA(b),X=\"rtl\"===n6(),K={top:\"top\",right:\"right\",bottom:\"bottom\",left:\"left\",\"inline-end\":X?\"left\":\"right\",\"inline-start\":X?\"right\":\"left\"}[x],Q=\"center\"===j?K:`${K}-${j}`,G={boundary:\"clipping-ancestors\"===A?\"clippingAncestors\":A,padding:O},J=C.useRef(null),en=eA(w),et=eA(k),er=\"function\"!=typeof w?w:0,eo=[(n=e=>{let n=r2(e,x,X),t=\"function\"==typeof en.current?en.current(n):en.current,r=\"function\"==typeof et.current?et.current(n):et.current;return{mainAxis:t,crossAxis:r,alignmentAxis:r}},t=[er,\"function\"!=typeof k?k:0,X,x],{...(void 0===(r=n)&&(r=0),{name:\"offset\",options:r,async fn(e){var n,t;let{x:o,y:a,placement:i,middlewareData:l}=e,s=await rz(e,r);return i===(null==(n=l.offset)?void 0:n.placement)&&null!=(t=l.arrow)&&t.alignmentOffset?{}:{x:o+s.x,y:a+s.y,data:{...s,placement:i}}}}),options:[n,t]})],ea=\"none\"===H&&\"shift\"!==I,ei=!ea&&(S||D||\"shift\"===I),el=\"none\"===I?null:{...{name:\"flip\",options:i=o={...G,mainAxis:!D&&\"flip\"===I,crossAxis:\"flip\"===H&&\"alignment\",fallbackAxisSideDirection:U},async fn(e){var n,t,r,o,a;let{placement:l,middlewareData:s,rects:c,initialPlacement:u,platform:d,elements:f}=e,{mainAxis:p=!0,crossAxis:h=!0,fallbackPlacements:g,fallbackStrategy:m=\"bestFit\",fallbackAxisSideDirection:v=\"none\",flipAlignment:b=!0,...y}=nj(i,e);if(null!=(n=s.arrow)&&n.alignmentOffset)return{};let x=nk(l),w=nE(u),j=nk(u)===u,k=await (null==d.isRTL?void 0:d.isRTL(f.floating)),A=g||(j||!b?[nR(u)]:function(e){let n=nR(e);return[n_(e),n,n_(n)]}(u)),O=\"none\"!==v;!g&&O&&A.push(...function(e,n,t,r){let o=nA(e),a=function(e,n,t){switch(e){case\"top\":case\"bottom\":if(t)return n?nz:nP;return n?nP:nz;case\"left\":case\"right\":return n?nL:nT;default:return[]}}(nk(e),\"start\"===t,r);return o&&(a=a.map(e=>e+\"-\"+o),n&&(a=a.concat(a.map(n_)))),a}(u,b,v,k));let C=[u,...A],S=await rS(e,y),E=[],_=(null==(t=s.flip)?void 0:t.overflows)||[];if(p&&E.push(S[x]),h){let e=function(e,n,t){void 0===t&&(t=!1);let r=nA(e),o=nO(nE(e)),a=nC(o),i=\"x\"===o?r===(t?\"end\":\"start\")?\"right\":\"left\":\"start\"===r?\"bottom\":\"top\";return n.reference[a]>n.floating[a]&&(i=nR(i)),[i,nR(i)]}(l,c,k);E.push(S[e[0]],S[e[1]])}if(_=[..._,{placement:l,overflows:E}],!E.every(e=>e<=0)){let e=((null==(r=s.flip)?void 0:r.index)||0)+1,n=C[e];if(n&&(\"alignment\"!==h||w===nE(n)||_.every(e=>e.overflows[0]>0&&nE(e.placement)===w)))return{data:{index:e,overflows:_},reset:{placement:n}};let t=null==(o=_.filter(e=>e.overflows[0]<=0).sort((e,n)=>e.overflows[1]-n.overflows[1])[0])?void 0:o.placement;if(!t)switch(m){case\"bestFit\":{let e=null==(a=_.filter(e=>{if(O){let n=nE(e.placement);return n===w||\"y\"===n}return!0}).map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,n)=>e+n,0)]).sort((e,n)=>e[1]-n[1])[0])?void 0:a[0];e&&(t=e);break}case\"initialPlacement\":t=u}if(l!==t)return{reset:{placement:t}}}return{}}},options:[o,a]},es=ea?null:(l=e=>{var n,t,r;let o=eQ(e.elements.floating).documentElement;return{...G,rootBoundary:D?{x:0,y:0,width:o.clientWidth,height:o.clientHeight}:void 0,mainAxis:\"none\"!==H,crossAxis:ei,limiter:S||D?void 0:{...(void 0===(r=n=()=>{if(!J.current)return{};let{height:e}=J.current.getBoundingClientRect();return{offset:e/2+(\"number\"==typeof O?O:0)}})&&(r={}),{options:r,fn(e){let{x:n,y:t,placement:o,rects:a,middlewareData:i}=e,{offset:l=0,mainAxis:s=!0,crossAxis:c=!0}=nj(r,e),u={x:n,y:t},d=nE(o),f=nO(d),p=u[f],h=u[d],g=nj(l,e),m=\"number\"==typeof g?{mainAxis:g,crossAxis:0}:{mainAxis:0,crossAxis:0,...g};if(s){let e=\"y\"===f?\"height\":\"width\",n=a.reference[f]-a.floating[e]+m.mainAxis,t=a.reference[f]+a.reference[e]-m.mainAxis;p<n?p=n:p>t&&(p=t)}if(c){var v,b;let e=\"y\"===f?\"width\":\"height\",n=rP.has(nk(o)),t=a.reference[d]-a.floating[e]+(n&&(null==(v=i.offset)?void 0:v[d])||0)+(n?0:m.crossAxis),r=a.reference[d]+a.reference[e]+(n?0:(null==(b=i.offset)?void 0:b[d])||0)-(n?m.crossAxis:0);h<t?h=t:h>r&&(h=r)}return{[f]:p,[d]:h}}}),options:[n,t]}}},s=[G,S,D,O,H],{...(void 0===(c=l)&&(c={}),{name:\"shift\",options:c,async fn(e){let{x:n,y:t,placement:r}=e,{mainAxis:o=!0,crossAxis:a=!1,limiter:i={fn:e=>{let{x:n,y:t}=e;return{x:n,y:t}}},...l}=nj(c,e),s={x:n,y:t},u=await rS(e,l),d=nE(nk(r)),f=nO(d),p=s[f],h=s[d];if(o){let e=\"y\"===f?\"top\":\"left\",n=\"y\"===f?\"bottom\":\"right\",t=p+u[e],r=p-u[n];p=nm(t,ng(p,r))}if(a){let e=\"y\"===d?\"top\":\"left\",n=\"y\"===d?\"bottom\":\"right\",t=h+u[e],r=h-u[n];h=nm(t,ng(h,r))}let g=i.fn({...e,[f]:p,[d]:h});return{...g,data:{x:g.x-n,y:g.y-t,enabled:{[f]:o,[d]:a}}}}}),options:[l,s]});\"shift\"===I||\"shift\"===H||\"center\"===j?eo.push(es,el):eo.push(el,es),eo.push({...{name:\"size\",options:f=u={...G,apply({elements:{floating:e},rects:{reference:n},availableWidth:t,availableHeight:r}){Object.entries({\"--available-width\":`${t}px`,\"--available-height\":`${r}px`,\"--anchor-width\":`${n.width}px`,\"--anchor-height\":`${n.height}px`}).forEach(([n,t])=>{e.style.setProperty(n,t)})}},async fn(e){var n,t;let r,o,{placement:a,rects:i,platform:l,elements:s}=e,{apply:c=()=>{},...u}=nj(f,e),d=await rS(e,u),p=nk(a),h=nA(a),g=\"y\"===nE(a),{width:m,height:v}=i.floating;\"top\"===p||\"bottom\"===p?(r=p,o=h===(await (null==l.isRTL?void 0:l.isRTL(s.floating))?\"start\":\"end\")?\"left\":\"right\"):(o=p,r=\"end\"===h?\"top\":\"bottom\");let b=v-d.top-d.bottom,y=m-d.left-d.right,x=ng(v-d[r],b),w=ng(m-d[o],y),j=!e.middlewareData.shift,k=x,A=w;if(null!=(n=e.middlewareData.shift)&&n.enabled.x&&(A=y),null!=(t=e.middlewareData.shift)&&t.enabled.y&&(k=b),j&&!h){let e=nm(d.left,0),n=nm(d.right,0),t=nm(d.top,0),r=nm(d.bottom,0);g?A=m-2*(0!==e||0!==n?e+n:nm(d.left,d.right)):k=v-2*(0!==t||0!==r?t+r:nm(d.top,d.bottom))}await c({...e,availableWidth:A,availableHeight:k});let O=await l.getDimensions(s.floating);return m!==O.width||v!==O.height?{reset:{rects:!0}}:{}}},options:[u,d]},(p=()=>({element:J.current||document.createElement(\"div\"),padding:_}),h=[_],{name:\"arrow\",options:p,fn(e){let{element:n,padding:t}=p(e);return n&&({}).hasOwnProperty.call(n,\"current\")?null!=n.current?rX({element:n.current,padding:t}).fn(e):{}:n?rX({element:n,padding:t}).fn(e):{}},options:[p,h]}),{...(void 0===(v=g)&&(v={}),{name:\"hide\",options:v,async fn(e){let{rects:n}=e,{strategy:t=\"referenceHidden\",...r}=nj(v,e);switch(t){case\"referenceHidden\":{let t=rE(await rS(e,{...r,elementContext:\"reference\"}),n.reference);return{data:{referenceHiddenOffsets:t,referenceHidden:r_(t)}}}case\"escaped\":{let t=rE(await rS(e,{...r,altBoundary:!0}),n.floating);return{data:{escapedOffsets:t,escaped:r_(t)}}}default:return{}}}}),options:[g,m]},{name:\"transformOrigin\",fn(e){let{elements:n,middlewareData:t,placement:r,rects:o,y:a}=e,i=nk(r),l=nE(i),s=J.current,c=t.arrow?.x||0,u=t.arrow?.y||0,d=s?.clientWidth||0,f=s?.clientHeight||0,p=c+d/2,h=u+f/2,g=Math.abs(t.shift?.y||0),m=o.reference.height/2,v=g>(\"function\"==typeof w?w(r2(e,x,X)):w),b={top:`${p}px calc(100% + ${w}px)`,bottom:`${p}px ${-w}px`,left:`calc(100% + ${w}px) ${h}px`,right:`${-w}px ${h}px`}[i],y=`${p}px ${o.reference.y+m-a}px`;return n.floating.style.setProperty(\"--transform-origin\",ei&&\"y\"===l&&v?y:b),{}}},M);let ec=L;!R&&L&&(ec={...L,elements:{reference:null,floating:null,domReference:null}});let eu=C.useMemo(()=>({elementResize:P&&\"undefined\"!=typeof ResizeObserver,layoutShift:P&&\"undefined\"!=typeof IntersectionObserver}),[P]),{refs:ed,elements:ef,x:ep,y:eh,middlewareData:eg,update:em,placement:ev,context:eb,isPositioned:ey,floatingStyles:ex}=function(e={}){let{nodeId:n}=e,t=Y({...e,elements:{reference:null,floating:null,...e.elements}}),r=e.rootContext||t,o=r.elements,[a,i]=C.useState(null),[l,s]=C.useState(null),c=o?.domReference||a,u=C.useRef(null),d=W();F(()=>{c&&(u.current=c)},[c]);let f=function(e){void 0===e&&(e={});let{placement:n=\"bottom\",strategy:t=\"absolute\",middleware:r=[],platform:o,elements:{reference:a,floating:i}={},transform:l=!0,whileElementsMounted:s,open:c}=e,[u,d]=C.useState({x:0,y:0,strategy:t,placement:n,middlewareData:{},isPositioned:!1}),[f,p]=C.useState(r);rQ(f,r)||p(r);let[h,g]=C.useState(null),[m,v]=C.useState(null),b=C.useCallback(e=>{e!==j.current&&(j.current=e,g(e))},[]),y=C.useCallback(e=>{e!==k.current&&(k.current=e,v(e))},[]),x=a||h,w=i||m,j=C.useRef(null),k=C.useRef(null),A=C.useRef(u),O=null!=s,S=r0(s),_=r0(o),P=r0(c),z=C.useCallback(()=>{if(!j.current||!k.current)return;let e={placement:n,strategy:t,middleware:f};_.current&&(e.platform=_.current),((e,n,t)=>{let r=new Map,o={platform:r$,...t},a={...o.platform,_c:r};return rC(e,n,{...o,platform:a})})(j.current,k.current,e).then(e=>{let n={...e,isPositioned:!1!==P.current};L.current&&!rQ(A.current,n)&&(A.current=n,E.flushSync(()=>{d(n)}))})},[f,n,t,_,P]);rK(()=>{!1===c&&A.current.isPositioned&&(A.current.isPositioned=!1,d(e=>({...e,isPositioned:!1})))},[c]);let L=C.useRef(!1);rK(()=>(L.current=!0,()=>{L.current=!1}),[]),rK(()=>{if(x&&(j.current=x),w&&(k.current=w),x&&w){if(S.current)return S.current(x,w,z);z()}},[x,w,z,S,O]);let T=C.useMemo(()=>({reference:j,floating:k,setReference:b,setFloating:y}),[b,y]),R=C.useMemo(()=>({reference:x,floating:w}),[x,w]),N=C.useMemo(()=>{let e={position:t,left:0,top:0};if(!R.floating)return e;let n=rJ(R.floating,u.x),r=rJ(R.floating,u.y);return l?{...e,transform:\"translate(\"+n+\"px, \"+r+\"px)\",...rG(R.floating)>=1.5&&{willChange:\"transform\"}}:{position:t,left:n,top:r}},[t,l,R.floating,u.x,u.y]);return C.useMemo(()=>({...u,update:z,refs:T,elements:R,floatingStyles:N}),[u,z,T,R,N])}({...e,elements:{...o,...l&&{reference:l}}}),p=C.useCallback(e=>{let n=ee(e)?{getBoundingClientRect:()=>e.getBoundingClientRect(),getClientRects:()=>e.getClientRects(),contextElement:e}:e;s(n),f.refs.setReference(n)},[f.refs]),h=C.useCallback(e=>{(ee(e)||null===e)&&(u.current=e,i(e)),(ee(f.refs.reference.current)||null===f.refs.reference.current||null!==e&&!ee(e))&&f.refs.setReference(e)},[f.refs]),g=C.useMemo(()=>({...f.refs,setReference:h,setPositionReference:p,domReference:u}),[f.refs,h,p]),m=C.useMemo(()=>({...f.elements,domReference:c}),[f.elements,c]),v=C.useMemo(()=>({...f,...r,refs:g,elements:m,nodeId:n}),[f,g,m,n,r]);return F(()=>{r.dataRef.current.floatingContext=v;let e=d?.nodesRef.current.find(e=>e.id===n);e&&(e.context=v)}),C.useMemo(()=>({...f,context:v,refs:g,elements:m}),[f,g,m,v])}({rootContext:ec,placement:Q,middleware:eo,strategy:y,whileElementsMounted:z?void 0:(...e)=>rY(...e,eu),nodeId:B}),{sideX:ew,sideY:ej}=eg.adaptiveOrigin||{},ek=C.useMemo(()=>M?{position:y,[ew]:`${ep}px`,[ej]:`${eh}px`}:ex,[M,ew,ej,y,ep,eh,ex]),eO=C.useRef(null);F(()=>{if(!R)return;let e=Z.current,n=\"function\"==typeof e?e():e,t=(r5(n)?n.current:n)||null;t!==eO.current&&(ed.setPositionReference(t),eO.current=t)},[R,ed,$,Z]),C.useEffect(()=>{if(!R)return;let e=Z.current;\"function\"!=typeof e&&r5(e)&&e.current!==eO.current&&(ed.setPositionReference(e.current),eO.current=e.current)},[R,ed,$,Z]),C.useEffect(()=>{if(z&&R&&ef.domReference&&ef.floating)return rY(ef.domReference,ef.floating,em,eu)},[z,R,ef,em,eu]);let eC=r1(x,nk(ev),X),eS=nA(ev)||\"center\",eE=!!eg.hide?.referenceHidden,e_=C.useMemo(()=>({position:\"absolute\",top:eg.arrow?.y,left:eg.arrow?.x}),[eg.arrow]),eP=eg.arrow?.centerOffset!==0;return C.useMemo(()=>({positionerStyles:ek,arrowStyles:e_,arrowRef:J,arrowUncentered:eP,side:eC,align:eS,anchorHidden:eE,refs:ed,context:eb,isPositioned:ey,update:em}),[ek,e_,J,eP,eC,eS,eE,ed,eb,ey,em])}function r5(e){return null!=e&&\"current\"in e}function r3(e){let{children:n,elementsRef:t,labelsRef:r,onMapChange:o}=e,a=C.useRef(0),i=P(r9).current,s=P(r6).current,[c,u]=C.useState(0),d=C.useRef(c),f=T((e,n)=>{s.set(e,n??null),d.current+=1,u(d.current)}),p=T(e=>{s.delete(e),d.current+=1,u(d.current)}),h=C.useMemo(()=>{let e=new Map;return Array.from(s.keys()).sort(r8).forEach((n,t)=>{let r=s.get(n)??{};e.set(n,{...r,index:t})}),e},[s,c]);F(()=>{d.current===c&&(t.current.length!==h.size&&(t.current.length=h.size),r&&r.current.length!==h.size&&(r.current.length=h.size)),o?.(h)},[o,h,t,r,c,d]);let g=T(e=>(i.add(e),()=>{i.delete(e)}));F(()=>{i.forEach(e=>e(h))},[i,h]);let m=C.useMemo(()=>({register:f,unregister:p,subscribeMapChange:g,elementsRef:t,labelsRef:r,nextIndexRef:a}),[f,p,g,t,r,a]);return(0,l.jsx)(tC.Provider,{value:m,children:n})}function r6(){return new Map}function r9(){return new Set}function r8(e,n){let t=e.compareDocumentPosition(n);return t&Node.DOCUMENT_POSITION_FOLLOWING||t&Node.DOCUMENT_POSITION_CONTAINED_BY?-1:t&Node.DOCUMENT_POSITION_PRECEDING||t&Node.DOCUMENT_POSITION_CONTAINS?1:0}let r7=C.forwardRef(function(e,n){let t,{cutout:r,...o}=e;if(r){let e=r?.getBoundingClientRect();t=`polygon(\n 0% 0%,\n 100% 0%,\n 100% 100%,\n 0% 100%,\n 0% 0%,\n ${e.left}px ${e.top}px,\n ${e.left}px ${e.bottom}px,\n ${e.right}px ${e.bottom}px,\n ${e.right}px ${e.top}px,\n ${e.left}px ${e.top}px\n )`}return(0,l.jsx)(\"div\",{ref:n,role:\"presentation\",\"data-base-ui-inert\":\"\",...o,style:{position:\"fixed\",inset:0,userSelect:\"none\",WebkitUserSelect:\"none\",clipPath:t}})}),oe=C.forwardRef(function(e,n){var t;let{anchor:r,positionMethod:o=\"absolute\",className:a,render:i,side:s,align:c,sideOffset:u=0,alignOffset:d=0,collisionBoundary:f=\"clipping-ancestors\",collisionPadding:p=5,arrowPadding:h=5,sticky:g=!1,trackAnchor:m=!0,collisionAvoidance:v=no,...b}=e,{open:y,setOpen:x,floatingRootContext:w,setPositionerElement:j,itemDomElements:k,itemLabels:A,mounted:O,modal:S,lastOpenChangeReason:E,parent:_,setHoverEnabled:P,triggerElement:z}=n0(),L=function(){let e=C.useContext(rj);if(void 0===e)throw Error(\"Base UI: <Menu.Portal> is missing.\");return e}(),T=function(e){let n=H(),t=W(),r=q();return F(()=>{if(!n)return;let e={id:n,parentId:r};return t?.addNode(e),()=>{t?.removeNode(e)}},[t,n,r]),n}(),R=q(),N=ta(!0),D=r,B=u,M=d,I=c;\"context-menu\"===_.type&&(D=_.context?.anchor??r,I=e.align??\"start\",M=e.alignOffset??2,B=e.sideOffset??-5);let U=s,V=I;\"menu\"===_.type?(U=U??\"inline-end\",V=V??\"start\"):\"menubar\"===_.type&&(U=U??\"bottom\",V=V??\"start\");let Z=\"context-menu\"===_.type,Y=r4({anchor:D,floatingRootContext:w,positionMethod:N?\"fixed\":o,mounted:O,side:U,sideOffset:B,align:V,alignOffset:M,arrowPadding:Z?0:h,collisionBoundary:f,collisionPadding:p,sticky:g,nodeId:T,keepMounted:L,trackAnchor:m,collisionAvoidance:v,shiftCrossAxis:Z}),{events:X}=W(),K=C.useMemo(()=>{let e={};return y||(e.pointerEvents=\"none\"),{role:\"presentation\",hidden:!O,style:{...Y.positionerStyles,...e}}},[y,O,Y.positionerStyles]);C.useEffect(()=>{function e(e){e.open?(e.parentNodeId===T&&P(!1),e.nodeId!==T&&e.parentNodeId===R&&x(!1,void 0,\"sibling-open\")):e.parentNodeId===T&&P(!0)}return X.on(\"openchange\",e),()=>{X.off(\"openchange\",e)}},[X,T,R,x,P]),C.useEffect(()=>{X.emit(\"openchange\",{open:y,nodeId:T,parentNodeId:R})},[X,y,T,R]);let Q=C.useMemo(()=>({open:y,side:Y.side,align:Y.align,anchorHidden:Y.anchorHidden,nested:\"menu\"===_.type}),[y,Y.side,Y.align,Y.anchorHidden,_.type]),G=C.useMemo(()=>({side:Y.side,align:Y.align,arrowRef:Y.arrowRef,arrowUncentered:Y.arrowUncentered,arrowStyles:Y.arrowStyles,floatingContext:Y.context}),[Y.side,Y.align,Y.arrowRef,Y.arrowUncentered,Y.arrowStyles,Y.context]),J=tj(\"div\",e,{state:Q,customStyleHookMapping:tV,ref:[n,j],props:{...K,...b}}),ee=O&&\"menu\"!==_.type&&(\"menubar\"!==_.type&&S&&\"trigger-hover\"!==E||\"menubar\"===_.type&&_.context.modal),en=null;return\"menubar\"===_.type?en=_.context.contentElement:void 0===_.type&&(en=z),(0,l.jsxs)(rA.Provider,{value:G,children:[ee&&(0,l.jsx)(r7,{ref:\"context-menu\"===_.type||\"nested-context-menu\"===_.type?_.context.internalBackdropRef:null,inert:(t=!y,tw>=19?t:t?\"true\":void 0),cutout:en}),(0,l.jsx)($,{id:T,children:(0,l.jsx)(r3,{elementsRef:k,labelsRef:A,children:J})})]})}),on={inert:new WeakMap,\"aria-hidden\":new WeakMap,none:new WeakMap};function ot(e){return\"inert\"===e?on.inert:\"aria-hidden\"===e?on[\"aria-hidden\"]:on.none}let or=new WeakSet,oo={},oa=0,oi=e=>e&&(e.host||oi(e.parentNode));function ol(e,n=!1,t=!1){let r=eQ(e[0]).body;return function(e,n,t,r){let o=\"data-base-ui-inert\",a=r?\"inert\":t?\"aria-hidden\":null,i=e.map(e=>{if(n.contains(e))return e;let t=oi(e);return n.contains(t)?t:null}).filter(e=>null!=e),l=new Set,s=new Set(i),c=[];oo[o]||(oo[o]=new WeakMap);let u=oo[o];return i.forEach(function e(n){!(!n||l.has(n))&&(l.add(n),n.parentNode&&e(n.parentNode))}),function e(n){!n||s.has(n)||[].forEach.call(n.children,n=>{if(\"script\"!==K(n))if(l.has(n))e(n);else{let e=a?n.getAttribute(a):null,t=null!==e&&\"false\"!==e,r=ot(a),i=(r.get(n)||0)+1,l=(u.get(n)||0)+1;r.set(n,i),u.set(n,l),c.push(n),1===i&&t&&or.add(n),1===l&&n.setAttribute(o,\"\"),!t&&a&&n.setAttribute(a,\"inert\"===a?\"\":\"true\")}})}(n),l.clear(),oa+=1,()=>{c.forEach(e=>{let n=ot(a),t=(n.get(e)||0)-1,r=(u.get(e)||0)-1;n.set(e,t),u.set(e,r),t||(!or.has(e)&&a&&e.removeAttribute(a),or.delete(e)),r||e.removeAttribute(o)}),(oa-=1)||(on.inert=new WeakMap,on[\"aria-hidden\"]=new WeakMap,on.none=new WeakMap,or=new WeakSet,oo={})}}(e.concat(Array.from(r.querySelectorAll(\"[aria-live]\"))),r,n,t)}let os=[];function oc(){return os.slice().reverse().find(e=>e.isConnected)}function ou(e,n){if(!n.current.includes(\"floating\")&&!e.getAttribute(\"role\")?.includes(\"dialog\"))return;let t=rd(),r=rc(e,t).filter(e=>{let n=e.getAttribute(\"data-tabindex\")||\"\";return ru(e,t)||e.hasAttribute(\"data-tabindex\")&&!n.startsWith(\"-\")}),o=e.getAttribute(\"tabindex\");n.current.includes(\"floating\")||0===r.length?\"0\"!==o&&e.setAttribute(\"tabindex\",\"0\"):(\"-1\"!==o||e.hasAttribute(\"data-tabindex\")&&\"-1\"!==e.getAttribute(\"data-tabindex\"))&&(e.setAttribute(\"tabindex\",\"-1\"),e.setAttribute(\"data-tabindex\",\"-1\"))}let od=C.forwardRef(function(e,n){return(0,l.jsx)(\"button\",{...e,type:\"button\",ref:n,tabIndex:-1,style:t$})});function of(e){let{context:n,children:t,disabled:r=!1,order:o=[\"content\"],guards:a=!0,initialFocus:i=0,returnFocus:s=!0,restoreFocus:c=!1,modal:u=!0,visuallyHiddenDismiss:d=!1,closeOnFocusOut:f=!0,outsideElementsInert:p=!1,getInsideElements:h=()=>[]}=e,{open:g,onOpenChange:m,events:v,dataRef:b,elements:{domReference:y,floating:x}}=n,w=T(()=>b.current.floatingContext?.nodeId),j=T(h),k=\"number\"==typeof i&&i<0,A=eJ(y)&&k,O=\"undefined\"!=typeof HTMLElement&&\"inert\"in HTMLElement.prototype,S=!O||a,E=!S||O&&p,_=eA(o),P=eA(i),z=eA(s),L=W(),R=rb(),N=C.useRef(null),D=C.useRef(null),B=C.useRef(!1),M=C.useRef(!1),I=C.useRef(-1),H=null!=R,U=e0(x),V=T((e=U)=>e?rs(e,rd()):[]),q=T(e=>{let n=V(e);return _.current.map(e=>y&&\"reference\"===e?y:U&&\"floating\"===e?U:n).filter(Boolean).flat()});C.useEffect(()=>{if(r||!u)return;function e(e){if(\"Tab\"===e.key){eY(U,eZ(eQ(U)))&&0===V().length&&!A&&eD(e);let n=q(),t=eX(e);\"reference\"===_.current[0]&&t===y&&(eD(e),e.shiftKey?nq(n[n.length-1]):nq(n[1])),\"floating\"===_.current[1]&&t===U&&e.shiftKey&&(eD(e),nq(n[0]))}}let n=eQ(U);return n.addEventListener(\"keydown\",e),()=>{n.removeEventListener(\"keydown\",e)}},[r,y,U,u,_,A,V,q]),C.useEffect(()=>{if(!r&&x)return x.addEventListener(\"focusin\",e),()=>{x.removeEventListener(\"focusin\",e)};function e(e){let n=eX(e),t=V().indexOf(n);-1!==t&&(I.current=t)}},[r,x,V]),C.useEffect(()=>{if(!r&&f&&x&&en(y))return y.addEventListener(\"focusout\",n),y.addEventListener(\"pointerdown\",e),x.addEventListener(\"focusout\",n),()=>{y.removeEventListener(\"focusout\",n),y.removeEventListener(\"pointerdown\",e),x.removeEventListener(\"focusout\",n)};function e(){M.current=!0,setTimeout(()=>{M.current=!1})}function n(e){let n=e.relatedTarget,t=e.currentTarget,r=eX(e);queueMicrotask(()=>{let o=w(),a=!(eY(y,n)||eY(x,n)||eY(n,x)||eY(R?.portalNode,n)||n?.hasAttribute(e1(\"focus-guard\"))||L&&(e6(L.nodesRef.current,o).find(e=>eY(e.context?.elements.floating,n)||eY(e.context?.elements.domReference,n))||e9(L.nodesRef.current,o).find(e=>[e.context?.elements.floating,e0(e.context?.elements.floating)].includes(n)||e.context?.elements.domReference===n)));if(t===y&&U&&ou(U,_),c&&t!==y&&!r?.isConnected&&eZ(eQ(U))===eQ(U).body){en(U)&&U.focus();let e=I.current,n=V(),t=n[e]||n[n.length-1]||U;en(t)&&t.focus()}if(b.current.insideReactTree){b.current.insideReactTree=!1;return}(A||!u)&&n&&a&&!M.current&&n!==oc()&&(B.current=!0,m(!1,e,\"focus-out\"))})}},[r,y,x,U,u,L,R,m,f,c,V,A,w,_,b]);let $=C.useRef(null),Z=C.useRef(null),Y=tb($,R?.beforeInsideRef),X=tb(Z,R?.afterInsideRef);function Q(e){return!r&&d&&u?(0,l.jsx)(od,{ref:\"start\"===e?N:D,onClick:e=>m(!1,e.nativeEvent),children:\"string\"==typeof d?d:\"Dismiss\"}):null}C.useEffect(()=>{if(r||!x)return;let e=Array.from(R?.portalNode?.querySelectorAll(`[${e1(\"portal\")}]`)||[]),n=L?e9(L.nodesRef.current,w()):[],t=L&&!u?n.map(e=>e.context?.elements.floating):[],o=[x,n.find(e=>eJ(e.context?.elements.domReference||null))?.context?.elements.domReference,...e,...t,...j(),N.current,D.current,$.current,Z.current,R?.beforeOutsideRef.current,R?.afterOutsideRef.current,_.current.includes(\"reference\")||A?y:null].filter(e=>null!=e),a=u||A?ol(o,!E,E):ol(o);return()=>{a()}},[r,y,x,u,_,R,A,S,E,L,w,j]),F(()=>{if(r||!en(U))return;let e=eZ(eQ(U));queueMicrotask(()=>{let n=q(U),t=P.current,r=(\"number\"==typeof t?n[t]:t.current)||U,o=eY(U,e);k||o||!g||nq(r,{preventScroll:r===U})})},[r,g,U,k,q,P]),F(()=>{var e;if(r||!U)return;let n=eQ(U);function t({reason:e,event:n,nested:t}){if([\"hover\",\"safe-polygon\"].includes(e)&&\"mouseleave\"===n.type&&(B.current=!0),\"outside-press\"===e)if(t)B.current=!1;else if(eB(n)||eM(n))B.current=!1;else{let e=!1;document.createElement(\"div\").focus({get preventScroll(){return e=!0,!1}}),e?B.current=!1:B.current=!0}}e=eZ(n),os=os.filter(e=>e.isConnected),e&&\"body\"!==K(e)&&(os.push(e),os.length>20&&(os=os.slice(-20))),v.on(\"openchange\",t);let o=n.createElement(\"span\");return o.setAttribute(\"tabindex\",\"-1\"),o.setAttribute(\"aria-hidden\",\"true\"),Object.assign(o.style,t$),H&&y&&y.insertAdjacentElement(\"afterend\",o),()=>{v.off(\"openchange\",t);let e=eZ(n),r=eY(x,e)||L&&e6(L.nodesRef.current,w(),!1).some(n=>eY(n.context?.elements.floating,e)),a=function(){if(\"boolean\"==typeof z.current){let e=y||oc();return e&&e.isConnected?e:o}return z.current.current||o}();queueMicrotask(()=>{let t=function(e){let n=rd();return ru(e,n)?e:rs(e,n)[0]||e}(a);z.current&&!B.current&&en(t)&&(t===e||e===n.body||r)&&t.focus({preventScroll:!0}),o.remove()})}},[r,x,U,z,b,v,L,H,y,w]),C.useEffect(()=>{queueMicrotask(()=>{B.current=!1})},[r]),F(()=>{if(!r&&R)return R.setFocusManagerState({modal:u,closeOnFocusOut:f,open:g,onOpenChange:m,domReference:y}),()=>{R.setFocusManagerState(null)}},[r,R,u,g,m,f,y]),F(()=>{!r&&U&&ou(U,_)},[r,U,_]);let G=!r&&S&&(!u||!A)&&(H||u);return(0,l.jsxs)(C.Fragment,{children:[G&&(0,l.jsx)(tZ,{\"data-type\":\"inside\",ref:Y,onFocus:e=>{if(u){let e=q();nq(\"reference\"===o[0]?e[0]:e[e.length-1])}else if(R?.preserveTabOrder&&R.portalNode)if(B.current=!1,rg(e,R.portalNode)){let e=rp(y);e?.focus()}else R.beforeOutsideRef.current?.focus()}}),!A&&Q(\"start\"),t,Q(\"end\"),G&&(0,l.jsx)(tZ,{\"data-type\":\"inside\",ref:X,onFocus:e=>{if(u)nq(q()[0]);else if(R?.preserveTabOrder&&R.portalNode)if(f&&(B.current=!0),rg(e,R.portalNode)){let e=rh(y);e?.focus()}else R.afterOutsideRef.current?.focus()}})]})}let op={...tV,...tT},oh=C.forwardRef(function(e,n){let{render:t,className:r,finalFocus:o,...a}=e,{open:i,setOpen:s,popupRef:c,transitionStatus:u,popupProps:d,mounted:f,instantType:p,onOpenChangeComplete:h,parent:g,lastOpenChangeReason:m,rootId:v}=n0(),{side:b,align:y,floatingContext:x}=function(){let e=C.useContext(rA);if(void 0===e)throw Error(\"Base UI: MenuPositionerContext is missing. MenuPositioner parts must be placed within <Menu.Positioner>.\");return e}();n5({open:i,ref:c,onComplete(){i&&h?.(!0)}});let{events:w}=W();C.useEffect(()=>{function e(e){s(!1,e.domEvent,e.reason)}return w.on(\"close\",e),()=>{w.off(\"close\",e)}},[w,s]);let j=tj(\"div\",e,{state:C.useMemo(()=>({transitionStatus:u,side:b,align:y,open:i,nested:\"menu\"===g.type,instant:p}),[u,b,y,i,g.type,p]),ref:[n,c],customStyleHookMapping:op,props:[d,\"starting\"===u?nt:nr,a,{\"data-rootownerid\":v}]}),k=void 0===g.type||\"context-menu\"===g.type;return\"menubar\"===g.type&&\"outside-press\"!==m&&(k=!0),(0,l.jsx)(of,{context:x,modal:!1,disabled:!f,returnFocus:o||k,initialFocus:\"menu\"===g.type?-1:0,restoreFocus:!0,children:j})}),og=C.createContext(void 0),om=C.forwardRef(function(e,n){let{render:t,className:r,...o}=e,[a,i]=C.useState(void 0),s=C.useMemo(()=>({setLabelId:i}),[i]),c=tj(\"div\",e,{ref:n,props:{role:\"group\",\"aria-labelledby\":a,...o}});return(0,l.jsx)(og.Provider,{value:s,children:c})});function ov(e){return H(e,\"base-ui\")}let ob=C.forwardRef(function(e,n){let{className:t,render:r,id:o,...a}=e,i=ov(o),{setLabelId:l}=function(){let e=C.useContext(og);if(void 0===e)throw Error(\"Base UI: MenuGroupRootContext is missing. Menu group parts must be used within <Menu.Group>.\");return e}();return F(()=>(l(i),()=>{l(void 0)}),[l,i]),tj(\"div\",e,{ref:n,props:{id:i,role:\"presentation\",...a}})}),oy={type:\"regular-item\"},ox=C.memo(C.forwardRef(function(e,n){let{className:t,closeOnClick:r=!0,disabled:o=!1,highlighted:a,id:i,menuEvents:l,itemProps:s,render:c,allowMouseUpTriggerRef:u,typingRef:d,nativeButton:f,...p}=e,{getItemProps:h,itemRef:g}=function(e){let{closeOnClick:n,disabled:t=!1,highlighted:r,id:o,menuEvents:a,allowMouseUpTriggerRef:i,typingRef:l,nativeButton:s,itemMetadata:c}=e,u=C.useRef(null),{getButtonProps:d,buttonRef:f}=tq({disabled:t,focusableWhenDisabled:!0,native:s}),p=C.useCallback(e=>tc({id:o,role:\"menuitem\",tabIndex:r?0:-1,onMouseEnter(){\"submenu-trigger\"===c.type&&c.setActive()},onKeyUp:e=>{\" \"===e.key&&l.current&&e.preventBaseUIHandler()},onClick:e=>{n&&a.emit(\"close\",{domEvent:e,reason:\"item-press\"})},onMouseUp:()=>{u.current&&i.current&&\"regular-item\"===c.type&&u.current.click()}},e,d),[o,r,d,l,n,a,i,c]),h=tb(u,f);return C.useMemo(()=>({getItemProps:p,itemRef:h}),[p,h])}({closeOnClick:r,disabled:o,highlighted:a,id:i,menuEvents:l,allowMouseUpTriggerRef:u,typingRef:d,nativeButton:f,itemMetadata:oy});return tj(\"div\",e,{state:C.useMemo(()=>({disabled:o,highlighted:a}),[o,a]),ref:[g,n],props:[s,p,h]})})),ow=C.forwardRef(function(e,n){let{id:t,label:r,nativeButton:o=!1,...a}=e,i=C.useRef(null),s=tE({label:r}),c=tb(n,s.ref,i),{itemProps:u,activeIndex:d,allowMouseUpTriggerRef:f,typingRef:p}=n0(),h=ov(t),g=s.index===d,{events:m}=W();return(0,l.jsx)(ox,{...a,id:h,ref:c,highlighted:g,menuEvents:m,itemProps:u,allowMouseUpTriggerRef:f,typingRef:p,nativeButton:o})});var oj=\"__next_builtin__\";function ok(e){return e.replace(new RegExp(\"^\".concat(oj)),\"\").replace(new RegExp(\"\".concat(\"@boundary\",\"$\")),\"\")}var oA=\"boundary:\";function oO(e){return e.startsWith(oA)}var oC=t(\"./src/next-devtools/dev-overlay/components/errors/dev-tools-indicator/utils.ts\");function oS(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function oE(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r;r=t[n],n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r})}return e}function o_(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}function oP(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return oS(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return oS(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}var oz=function(){for(var e=arguments.length,n=Array(e),t=0;t<e;t++)n[t]=arguments[t];return function(e){n.forEach(function(n){\"function\"==typeof n?n(e):n&&(n.current=e)})}};function oL(e){var n,t,r=e.nodeState,o=e.boundaries,a=r.pagePath,i=r.boundaryType,s=r.setBoundaryType,c=oP((0,C.useState)(!1),2),u=c[0],d=c[1],f=oP((0,C.useState)(function(){return document.querySelector(\"nextjs-portal\").shadowRoot}),1)[0],p=(0,C.useRef)(f),h=(0,C.useRef)(null),g=(0,C.useRef)(null);(0,oC.O8)(g,h,u,function(){d(!1)},null==(n=h.current)?void 0:n.ownerDocument);var m=Object.values(o).find(function(e){return null!==e}),v=m?null==(t=m.split(\".\"))?void 0:t.pop():\"js\",b=(0,C.useMemo)(function(){return Object.fromEntries(Object.entries(o).map(function(e){var n=oP(e,2),t=n[0],r=ok((n[1]||\"\").split(\"/\").pop()||\"\".concat(t,\".\").concat(v));return[t,r]}))},[o,v]),y=(a||\"\").split(\"/\").pop()||\"\",x=ok(i?\"page.\".concat(v):y||\"page.\".concat(v)),w=[{label:b.loading,value:\"loading\",icon:(0,l.jsx)(oT,{}),disabled:!o.loading},{label:b.error,value:\"error\",icon:(0,l.jsx)(oR,{}),disabled:!o.error},{label:b[\"not-found\"],value:\"not-found\",icon:(0,l.jsx)(oN,{}),disabled:!o[\"not-found\"]}],j={label:i?\"Reset\":x,value:\"reset\",icon:(0,l.jsx)(oD,{}),disabled:null===i},k=(0,C.useCallback)(function(e){var n=new URLSearchParams({file:e.filePath,isAppRelativePath:\"1\"});fetch(\"\".concat( false||\"\",\"/__nextjs_launch-editor?\").concat(n.toString())).catch(console.warn)},[]),A=(0,C.useCallback)(function(e){switch(e){case\"not-found\":case\"loading\":case\"error\":s(e);break;case\"reset\":s(null);break;case\"open-editor\":a&&k({filePath:a})}},[s,a,k]),O=(0,C.useMemo)(function(){return\"layout\"!==r.type&&\"template\"!==r.type&&Object.values(o).some(function(e){return null!==e})},[r.type,o]);return(0,l.jsxs)(tv,{delay:0,modal:!1,open:u,onOpenChange:d,children:[(0,l.jsx)(tW,{className:\"segment-boundary-trigger\",\"data-nextjs-dev-overlay-segment-boundary-trigger-button\":!0,render:function(e){var n=oz(e.ref,h);return(0,l.jsx)(oM,o_(oE({},e),{ref:n}))},disabled:!O}),(0,l.jsx)(rk,{container:p,children:(0,l.jsx)(oe,{className:\"segment-boundary-dropdown-positioner\",side:\"bottom\",align:\"center\",sideOffset:6,arrowPadding:8,ref:g,children:(0,l.jsxs)(oh,{className:\"segment-boundary-dropdown\",children:[(0,l.jsxs)(om,{children:[(0,l.jsx)(ob,{className:\"segment-boundary-group-label\",children:\"Toggle Overrides\"}),w.map(function(e){return(0,l.jsxs)(ow,{className:\"segment-boundary-dropdown-item\",onClick:function(){return A(e.value)},disabled:e.disabled,children:[e.icon,e.label]},e.value)})]}),(0,l.jsx)(om,{children:(0,l.jsxs)(ow,{className:\"segment-boundary-dropdown-item\",onClick:function(){return A(j.value)},disabled:j.disabled,children:[j.icon,j.label]},j.value)})]})})})]})}function oT(){return(0,l.jsxs)(\"svg\",{width:\"20px\",height:\"20px\",viewBox:\"0 0 20 20\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:[(0,l.jsx)(\"g\",{clipPath:\"url(#clip0_2759_1866)\",children:(0,l.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M10 3.5C13.5899 3.5 16.5 6.41015 16.5 10C16.5 13.5899 13.5899 16.5 10 16.5C6.41015 16.5 3.5 13.5899 3.5 10C3.5 6.41015 6.41015 3.5 10 3.5ZM2 10C2 14.4183 5.58172 18 10 18C14.4183 18 18 14.4183 18 10C18 5.58172 14.4183 2 10 2C5.58172 2 2 5.58172 2 10ZM10.75 9.62402V6H9.25V9.875C9.25 10.1898 9.39858 10.486 9.65039 10.6748L11.5498 12.0996L12.1504 12.5498L13.0498 11.3496L12.4502 10.9004L10.75 9.62402Z\",fill:\"currentColor\"})}),(0,l.jsx)(\"defs\",{children:(0,l.jsx)(\"clipPath\",{id:\"clip0_2759_1866\",children:(0,l.jsx)(\"rect\",{width:\"16\",height:\"16\",fill:\"white\",transform:\"translate(2 2)\"})})})]})}function oR(){return(0,l.jsxs)(\"svg\",{width:\"20\",height:\"20\",viewBox:\"0 0 20 20\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:[(0,l.jsx)(\"g\",{clipPath:\"url(#clip0_2759_1881)\",children:(0,l.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M3.5 7.30762V12.6924L7.30762 16.5H12.6924L16.5 12.6924V7.30762L12.6924 3.5H7.30762L3.5 7.30762ZM18 12.8994L17.9951 12.998C17.9724 13.2271 17.8712 13.4423 17.707 13.6064L13.6064 17.707L13.5332 17.7734C13.3806 17.8985 13.1944 17.9757 12.998 17.9951L12.8994 18H7.10059L7.00195 17.9951C6.80562 17.9757 6.6194 17.8985 6.4668 17.7734L6.39355 17.707L2.29297 13.6064C2.12883 13.4423 2.02756 13.2271 2.00488 12.998L2 12.8994V7.10059C2 6.83539 2.10546 6.58109 2.29297 6.39355L6.39355 2.29297C6.55771 2.12883 6.77294 2.02756 7.00195 2.00488L7.10059 2H12.8994L12.998 2.00488C13.2271 2.02756 13.4423 2.12883 13.6064 2.29297L17.707 6.39355C17.8945 6.58109 18 6.83539 18 7.10059V12.8994ZM9.25 5.75H10.75L10.75 10.75H9.25L9.25 5.75ZM10 14C10.5523 14 11 13.5523 11 13C11 12.4477 10.5523 12 10 12C9.44772 12 9 12.4477 9 13C9 13.5523 9.44772 14 10 14Z\",fill:\"currentColor\"})}),(0,l.jsx)(\"defs\",{children:(0,l.jsx)(\"clipPath\",{id:\"clip0_2759_1881\",children:(0,l.jsx)(\"rect\",{width:\"16\",height:\"16\",fill:\"white\",transform:\"translate(2 2)\"})})})]})}function oN(){return(0,l.jsx)(\"svg\",{width:\"20px\",height:\"20px\",viewBox:\"0 0 20 20\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,l.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M10.5586 2.5C11.1341 2.50004 11.6588 2.8294 11.9091 3.34766L17.8076 15.5654C18.1278 16.2292 17.6442 16.9997 16.9072 17H3.09274C2.35574 16.9997 1.8721 16.2292 2.19235 15.5654L8.09079 3.34766C8.34109 2.8294 8.86583 2.50004 9.44137 2.5H10.5586ZM3.89059 15.5H16.1093L10.5586 4H9.44137L3.89059 15.5ZM9.24997 6.75H10.75L10.75 10.75H9.24997L9.24997 6.75ZM9.99997 14C10.5523 14 11 13.5523 11 13C11 12.4477 10.5523 12 9.99997 12C9.44768 12 8.99997 12.4477 8.99997 13C8.99997 13.5523 9.44768 14 9.99997 14Z\",fill:\"currentColor\"})})}function oD(){return(0,l.jsx)(\"svg\",{width:\"20\",height:\"20\",viewBox:\"0 0 20 20\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,l.jsx)(\"path\",{d:\"M9.96484 3C13.8463 3.00018 17 6.13012 17 10C17 13.8699 13.8463 16.9998 9.96484 17C7.62404 17 5.54877 15.8617 4.27051 14.1123L3.82812 13.5068L5.03906 12.6221L5.48145 13.2275C6.48815 14.6053 8.12092 15.5 9.96484 15.5C13.0259 15.4998 15.5 13.0335 15.5 10C15.5 6.96654 13.0259 4.50018 9.96484 4.5C7.42905 4.5 5.29544 6.19429 4.63867 8.5H8V10H2.75C2.33579 10 2 9.66421 2 9.25V4H3.5V7.2373C4.57781 4.74376 7.06749 3 9.96484 3Z\",fill:\"currentColor\"})})}function oB(e){return(0,l.jsx)(\"svg\",o_(oE({strokeLinejoin:\"round\",viewBox:\"0 0 16 16\"},e),{children:(0,l.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M8.7071 2.39644C8.31658 2.00592 7.68341 2.00592 7.29289 2.39644L4.46966 5.21966L3.93933 5.74999L4.99999 6.81065L5.53032 6.28032L7.99999 3.81065L10.4697 6.28032L11 6.81065L12.0607 5.74999L11.5303 5.21966L8.7071 2.39644ZM5.53032 9.71966L4.99999 9.18933L3.93933 10.25L4.46966 10.7803L7.29289 13.6035C7.68341 13.9941 8.31658 13.9941 8.7071 13.6035L11.5303 10.7803L12.0607 10.25L11 9.18933L10.4697 9.71966L7.99999 12.1893L5.53032 9.71966Z\",fill:\"currentColor\"})}))}function oM(e){return(0,l.jsx)(\"button\",o_(oE({},e),{children:(0,l.jsx)(\"span\",{className:\"segment-boundary-trigger-text\",children:(0,l.jsx)(oB,{className:\"plus-icon\"})})}))}let oI=C.createContext({hasProvider:!1,timeoutMs:0,delayRef:{current:0},initialDelayRef:{current:0},timeout:new ej,currentIdRef:{current:null},currentContextRef:{current:null}});function oH(e){let{children:n,delay:t,timeoutMs:r=0}=e,o=C.useRef(t),a=C.useRef(t),i=C.useRef(null),s=C.useRef(null),c=ek();return(0,l.jsx)(oI.Provider,{value:C.useMemo(()=>({hasProvider:!0,delayRef:o,initialDelayRef:a,currentIdRef:i,timeoutMs:r,currentContextRef:s,timeout:c}),[r,c]),children:n})}let oF=C.createContext(void 0),oU=function(e){let{delay:n,closeDelay:t,timeout:r=400}=e,o=C.useMemo(()=>({delay:n,closeDelay:t}),[n,t]);return(0,l.jsx)(oF.Provider,{value:o,children:(0,l.jsx)(oH,{delay:{open:n,close:t},timeoutMs:r,children:e.children})})},oV=C.createContext(void 0);function oq(){let e=C.useContext(oV);if(void 0===e)throw Error(\"Base UI: TooltipRootContext is missing. Tooltip parts must be placed within <Tooltip.Root>.\");return e}function oW(e){return null!=e&&null!=e.clientX}function o$(e){let{disabled:n=!1,defaultOpen:t=!1,onOpenChange:r,open:o,delay:a,closeDelay:i,hoverable:s=!0,trackCursorAxis:c=\"none\",actionsRef:u,onOpenChangeComplete:d}=e,f=a??600,p=i??0,[h,g]=C.useState(null),[m,v]=C.useState(null),[b,y]=C.useState(),x=C.useRef(null),[w,j]=n4({controlled:o,default:t,name:\"Tooltip\",state:\"open\"}),k=T(r),A=T((e,n,t)=>{let r=\"trigger-hover\"===t,o=e&&\"trigger-focus\"===t,a=!e&&(\"trigger-press\"===t||\"escape-key\"===t);function i(){k(e,n,t),j(e)}r?E.flushSync(i):i(),o||a?y(o?\"focus\":\"dismiss\"):\"trigger-hover\"===t&&y(void 0)});w&&n&&A(!1,void 0,\"disabled\");let{mounted:O,setMounted:S,transitionStatus:_}=n2(w),P=T(()=>{S(!1),d?.(!1)});n5({enabled:!u,open:w,ref:x,onComplete(){w||P()}}),C.useImperativeHandle(u,()=>({unmount:P}),[P]);let z=Y({elements:{reference:h,floating:m},open:w,onOpenChange(e,n,t){A(e,n,tr(t))}}),L=C.useContext(oF),{delayRef:R,isInstantPhase:N,hasProvider:D}=function(e,n={}){let{open:t,onOpenChange:r,floatingId:o}=e,{enabled:a=!0}=n,{currentIdRef:i,delayRef:l,timeoutMs:s,initialDelayRef:c,currentContextRef:u,hasProvider:d,timeout:f}=C.useContext(oI),[p,h]=C.useState(!1);return F(()=>{function e(){h(!1),u.current?.setIsInstantPhase(!1),i.current=null,u.current=null,l.current=c.current}if(a&&i.current&&!t&&i.current===o){if(h(!1),s)return f.start(s,e),()=>{f.clear()};e()}},[a,t,o,i,l,s,c,u,f]),F(()=>{if(!a||!t)return;let e=u.current,n=i.current;u.current={onOpenChange:r,setIsInstantPhase:h},i.current=o,l.current={open:0,close:e4(c.current,\"close\")},null!==n&&n!==o?(f.clear(),h(!0),e?.setIsInstantPhase(!0),e?.onOpenChange(!1)):(h(!1),e?.setIsInstantPhase(!1))},[a,t,o,r,i,l,s,c,u,f]),F(()=>()=>{u.current=null},[u]),C.useMemo(()=>({hasProvider:d,delayRef:l,isInstantPhase:p}),[d,l,p])}(z),B=N?\"delay\":b,M=e3(z,{enabled:!n,mouseOnly:!0,move:!1,handleClose:s&&\"both\"!==c?e7():null,restMs(){let e=L?.delay,n=\"object\"==typeof R.current?R.current.open:void 0,t=f;return D&&(t=0!==n?a??e??f:0),t},delay(){let e=\"object\"==typeof R.current?R.current.close:void 0,n=p;return null==i&&D&&(n=e),{close:n}}}),I=nn(z,{enabled:!n}),{getReferenceProps:H,getFloatingProps:U}=nK([M,I,nf(z,{enabled:!n,referencePress:!0}),function(e,n={}){let{open:t,dataRef:r,elements:{floating:o,domReference:a},refs:i}=e,{enabled:l=!0,axis:s=\"both\",x:c=null,y:u=null}=n,d=C.useRef(!1),f=C.useRef(null),[p,h]=C.useState(),[g,m]=C.useState([]),v=T((e,n)=>{if(!d.current&&(!r.current.openEvent||oW(r.current.openEvent))){var t;let o,l,c;i.setPositionReference((t={x:e,y:n,axis:s,dataRef:r,pointerType:p},o=null,l=null,c=!1,{contextElement:a||void 0,getBoundingClientRect(){let e=a?.getBoundingClientRect()||{width:0,height:0,x:0,y:0},n=\"x\"===t.axis||\"both\"===t.axis,r=\"y\"===t.axis||\"both\"===t.axis,i=[\"mouseenter\",\"mousemove\"].includes(t.dataRef.current.openEvent?.type||\"\")&&\"touch\"!==t.pointerType,s=e.width,u=e.height,d=e.x,f=e.y;return null==o&&t.x&&n&&(o=e.x-t.x),null==l&&t.y&&r&&(l=e.y-t.y),d-=o||0,f-=l||0,s=0,u=0,!c||i?(s=\"y\"===t.axis?e.width:0,u=\"x\"===t.axis?e.height:0,d=n&&null!=t.x?t.x:d,f=r&&null!=t.y?t.y:f):c&&!i&&(u=\"x\"===t.axis?e.height:u,s=\"y\"===t.axis?e.width:s),c=!0,{width:s,height:u,x:d,y:f,top:f,right:d+s,bottom:f+u,left:d}}}))}}),b=T(e=>{null==c&&null==u&&(t?f.current||m([]):v(e.clientX,e.clientY))}),y=eI(p)?o:t,x=C.useCallback(()=>{if(!y||!l||null!=c||null!=u)return;let e=Q(o);function n(t){eY(o,eX(t))?(e.removeEventListener(\"mousemove\",n),f.current=null):v(t.clientX,t.clientY)}if(!r.current.openEvent||oW(r.current.openEvent)){e.addEventListener(\"mousemove\",n);let t=()=>{e.removeEventListener(\"mousemove\",n),f.current=null};return f.current=t,t}i.setPositionReference(a)},[y,l,c,u,o,r,i,a,v]);C.useEffect(()=>x(),[x,g]),C.useEffect(()=>{l&&!o&&(d.current=!1)},[l,o]),C.useEffect(()=>{!l&&t&&(d.current=!0)},[l,t]),F(()=>{l&&(null!=c||null!=u)&&(d.current=!1,v(c,u))},[l,c,u,v]);let w=C.useMemo(()=>{function e(e){h(e.pointerType)}return{onPointerDown:e,onPointerEnter:e,onMouseMove:b,onMouseEnter:b}},[b]);return C.useMemo(()=>l?{reference:w}:{},[l,w])}(z,{enabled:!n&&\"none\"!==c,axis:\"none\"===c?void 0:c})]),V=C.useMemo(()=>({open:w,setOpen:A,mounted:O,setMounted:S,setTriggerElement:g,positionerElement:m,setPositionerElement:v,popupRef:x,triggerProps:H(),popupProps:U(),floatingRootContext:z,instantType:B,transitionStatus:_,onOpenChangeComplete:d}),[w,A,O,S,g,m,v,x,H,U,z,B,_,d]),q=C.useMemo(()=>({...V,delay:f,closeDelay:p,trackCursorAxis:c,hoverable:s}),[V,f,p,c,s]);return(0,l.jsx)(oV.Provider,{value:q,children:e.children})}let oZ=C.forwardRef(function(e,n){let{className:t,render:r,...o}=e,{open:a,setTriggerElement:i,triggerProps:l}=oq();return tj(\"button\",e,{state:C.useMemo(()=>({open:a}),[a]),ref:[n,i],props:[l,o],customStyleHookMapping:tF})}),oY=C.createContext(void 0);function oX(e){let n=rx({root:e.root});return n&&E.createPortal(e.children,n)}function oK(e){let{children:n,keepMounted:t=!1,container:r}=e,{mounted:o}=oq();return o||t?(0,l.jsx)(oY.Provider,{value:t,children:(0,l.jsx)(oX,{root:r,children:n})}):null}let oQ=C.createContext(void 0);function oG(){let e=C.useContext(oQ);if(void 0===e)throw Error(\"Base UI: TooltipPositionerContext is missing. TooltipPositioner parts must be placed within <Tooltip.Positioner>.\");return e}let oJ=C.forwardRef(function(e,n){let{render:t,className:r,anchor:o,positionMethod:a=\"absolute\",side:i=\"top\",align:s=\"center\",sideOffset:c=0,alignOffset:u=0,collisionBoundary:d=\"clipping-ancestors\",collisionPadding:f=5,arrowPadding:p=5,sticky:h=!1,trackAnchor:g=!0,collisionAvoidance:m=na,...v}=e,{open:b,setPositionerElement:y,mounted:x,floatingRootContext:w,trackCursorAxis:j,hoverable:k}=oq(),A=r4({anchor:o,positionMethod:a,floatingRootContext:w,mounted:x,side:i,sideOffset:c,align:s,alignOffset:u,collisionBoundary:d,collisionPadding:f,sticky:h,arrowPadding:p,trackAnchor:g,keepMounted:function(){let e=C.useContext(oY);if(void 0===e)throw Error(\"Base UI: <Tooltip.Portal> is missing.\");return e}(),collisionAvoidance:m}),O=C.useMemo(()=>{let e={};return b&&\"both\"!==j&&k||(e.pointerEvents=\"none\"),{role:\"presentation\",hidden:!x,style:{...A.positionerStyles,...e}}},[b,j,k,x,A.positionerStyles]),S=C.useMemo(()=>({props:O,...A}),[O,A]),E=C.useMemo(()=>({open:b,side:S.side,align:S.align,anchorHidden:S.anchorHidden}),[b,S.side,S.align,S.anchorHidden]),_=C.useMemo(()=>({...E,arrowRef:S.arrowRef,arrowStyles:S.arrowStyles,arrowUncentered:S.arrowUncentered}),[E,S.arrowRef,S.arrowStyles,S.arrowUncentered]),P=tj(\"div\",e,{state:E,props:[S.props,v],ref:[n,y],customStyleHookMapping:tV});return(0,l.jsx)(oQ.Provider,{value:_,children:P})}),o0={...tV,...tT},o1=C.forwardRef(function(e,n){let{className:t,render:r,...o}=e,{open:a,instantType:i,transitionStatus:l,popupProps:s,popupRef:c,onOpenChangeComplete:u}=oq(),{side:d,align:f}=oG();return n5({open:a,ref:c,onComplete(){a&&u?.(!0)}}),tj(\"div\",e,{state:C.useMemo(()=>({open:a,side:d,align:f,instant:i,transitionStatus:l}),[a,d,f,i,l]),ref:[n,c],props:[s,\"starting\"===l?nt:nr,o],customStyleHookMapping:o0})}),o2=C.forwardRef(function(e,n){let{className:t,render:r,...o}=e,{open:a,arrowRef:i,side:l,align:s,arrowUncentered:c,arrowStyles:u}=oG();return tj(\"div\",e,{state:C.useMemo(()=>({open:a,side:l,align:s,uncentered:c}),[a,l,s,c]),ref:[n,i],props:[{style:u,\"aria-hidden\":!0},o],customStyleHookMapping:tV})});var o4=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/components/tooltip.css\"),o5={};function o3(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}o5.styleTagTransform=y(),o5.setAttributes=g(),o5.insert=p(),o5.domAPI=d(),o5.insertStyleElement=v(),c()(o4.Z,o5),o4.Z&&o4.Z.locals&&o4.Z.locals;var o6=(0,C.forwardRef)(function(e,n){var t,r=e.className,o=e.children,a=e.title,i=e.direction,s=void 0===i?\"top\":i,c=e.arrowSize,u=void 0===c?6:c,d=e.offset,f=e.bgcolor,p=void 0===f?\"#000\":f,h=e.color,g=(t=(0,C.useState)(function(){return document.querySelector(\"nextjs-portal\").shadowRoot}),function(e){if(Array.isArray(e))return e}(t)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(t,1)||function(e,n){if(e){if(\"string\"==typeof e)return o3(e,1);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return o3(e,n)}}(t,1)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}())[0],m=(0,C.useRef)(g);return a?(0,l.jsx)(oU,{children:(0,l.jsxs)(o$,{delay:400,children:[(0,l.jsx)(oZ,{ref:n,render:function(e){var n,t;return(0,l.jsx)(\"span\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r;r=t[n],n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r})}return e}({},e),t=t={children:o},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}}),(0,l.jsx)(oK,{container:m,children:(0,l.jsx)(oJ,{side:s,sideOffset:(void 0===d?8:d)+u,className:\"tooltip-positioner\",style:{\"--anchor-width\":\"\".concat(u,\"px\"),\"--anchor-height\":\"\".concat(u,\"px\")},children:(0,l.jsxs)(o1,{className:(0,k.cx)(\"tooltip\",r),style:{backgroundColor:p,color:void 0===h?\"#fff\":h,\"--tooltip-bg-color\":p,\"--arrow-size\":\"\".concat(u,\"px\")},children:[a,(0,l.jsx)(o2,{className:(0,k.cx)(\"tooltip-arrow\",\"tooltip-arrow--\".concat(s)),style:{\"--arrow-size\":\"\".concat(u,\"px\"),\"--tooltip-bg-color\":p}})]})})})]})}):o});function o9(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r;r=t[n],n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r})}return e}function o8(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}var o7=function(e){var n,t;return!!(null==(n=e.value)?void 0:n.type)&&!!(null==(t=e.value)?void 0:t.pagePath)};function ae(e){var n=e.page;return(0,l.jsxs)(\"div\",{className:\"segment-explorer-page-route-bar\",children:[(0,l.jsx)(aa,{}),(0,l.jsx)(\"span\",{className:\"segment-explorer-page-route-bar-path\",children:n})]})}function an(e){var n=e.activeBoundariesCount,t=e.onGlobalReset,r=n>0;return(0,l.jsx)(\"div\",{className:\"segment-explorer-footer\",children:(0,l.jsxs)(\"button\",{className:\"segment-explorer-footer-button \".concat(r?\"\":\"segment-explorer-footer-button--disabled\"),onClick:r?t:void 0,disabled:!r,type:\"button\",children:[(0,l.jsx)(\"span\",{className:\"segment-explorer-footer-text\",children:\"Clear Segment Overrides\"}),r&&(0,l.jsx)(\"span\",{className:\"segment-explorer-footer-badge\",children:n})]})})}function at(e){var n=e.isAppRouter,t=e.page,r=(0,j.i8)(),o=(0,C.useMemo)(function(){return n?function e(n){var t,r=0;return(null==(t=n.value)?void 0:t.setBoundaryType)&&null!==n.value.boundaryType&&!oO(n.value.type)&&r++,Object.values(n.children).forEach(function(n){n&&(r+=e(n))}),r}(r):0},[r,n]),a=(0,C.useCallback)(function(){n&&function e(n){var t;(null==(t=n.value)?void 0:t.setBoundaryType)&&n.value.setBoundaryType(null),Object.values(n.children).forEach(function(n){n&&e(n)})}(r)},[r,n]);return(0,l.jsxs)(\"div\",{\"data-nextjs-devtools-panel-segments-explorer\":!0,children:[n&&(0,l.jsx)(ae,{page:t}),(0,l.jsx)(\"div\",{className:\"segment-explorer-content\",\"data-nextjs-devtool-segment-explorer\":!0,children:n?(0,l.jsx)(ar,{node:r,level:0,segment:\"\"}):(0,l.jsx)(\"p\",{children:\"Route Info currently is only available for the App Router.\"})}),n&&(0,l.jsx)(an,{activeBoundariesCount:o,onGlobalReset:a})]})}function ar(e){var n=e.segment,t=e.node,r=e.level,o=Object.keys(t.children).sort(function(e,n){var r=e.includes(\".\"),o=n.includes(\".\");if(r&&!o)return -1;if(!r&&o)return 1;if(r&&o){var a,i,l,s,c,u,d,f,p=null==(i=t.children[e])||null==(a=i.value)?void 0:a.type,h=null==(s=t.children[n])||null==(l=s.value)?void 0:l.type,g=function(e){return e?\"layout\"===e?1:\"template\"===e?2:\"page\"===e?3:oO(e)?4:5:5},m=g(p),v=g(h);if(m!==v)return m-v;var b=(null==(u=t.children[e])||null==(c=u.value)?void 0:c.pagePath)||\"\",y=(null==(f=t.children[n])||null==(d=f.value)?void 0:d.pagePath)||\"\";return b.localeCompare(y)}return e.localeCompare(n)}),a=0!==r||n?n:\"app\",i=[],s=[],c=!0,u=!1,d=void 0;try{for(var f,p=o[Symbol.iterator]();!(c=(f=p.next()).done);c=!0){var h=f.value,g=t.children[h];if(g){if(o7(g)){s.push(h);continue}i.push(h)}}}catch(e){u=!0,d=e}finally{try{c||null==p.return||p.return()}finally{if(u)throw d}}for(var m=null,v=o.length-1;v>=0;v--){var b=t.children[o[v]];if(b&&b.value){var y=oO(b.value.type);if(!m&&!y){m=b;break}}}var x=null,w=!0,j=!1,A=void 0;try{for(var O,C=o[Symbol.iterator]();!(w=(O=C.next()).done);w=!0){var S=O.value,E=t.children[S];if(E&&E.value&&oO(E.value.type)){x=E;break}}}catch(e){j=!0,A=e}finally{try{w||null==C.return||C.return()}finally{if(j)throw A}}m=m||x;var _=s.length>0,P={\"not-found\":null,loading:null,error:null};return s.forEach(function(e){var n=t.children[e];if(n&&n.value&&oO(n.value.type)){var r=n.value.type.replace(oA,\"\");r in P&&(P[r]=n.value.pagePath||null)}}),(0,l.jsxs)(l.Fragment,{children:[_&&(0,l.jsx)(\"div\",{className:\"segment-explorer-item\",\"data-nextjs-devtool-segment-explorer-segment\":n+\"-\"+r,children:(0,l.jsx)(\"div\",{className:\"segment-explorer-item-row\",style:o9({},{paddingLeft:\"\".concat((r+1)*8,\"px\")}),children:(0,l.jsxs)(\"div\",{className:\"segment-explorer-filename\",children:[a&&(0,l.jsxs)(\"span\",{className:\"segment-explorer-filename--path\",children:[a,(0,l.jsx)(\"small\",{children:\"/\"})]}),s.length>0&&(0,l.jsx)(\"span\",{className:\"segment-explorer-files\",children:s.map(function(e){var n=t.children[e];if(!n||!n.value||oO(n.value.type))return null;var r=n.value.pagePath,o=r.split(\"/\").pop()||\"\",a=r.startsWith(oj),i=ok(o),s=a?\"The default Next.js \".concat(n.value.type,\" is being shown. You can customize this page by adding your own \").concat(i,\" file to the app/ directory.\"):null,c=null!==n.value.boundaryType;return(0,l.jsx)(o6,{className:\"segment-explorer-file-label-tooltip--\"+(a?\"lg\":\"sm\"),direction:a?\"right\":\"top\",title:s,offset:12,bgcolor:\"var(--color-gray-1000)\",color:\"var(--color-gray-100)\",children:(0,l.jsxs)(\"span\",{className:(0,k.cx)(\"segment-explorer-file-label\",\"segment-explorer-file-label--\".concat(n.value.type),a&&\"segment-explorer-file-label--builtin\",c&&\"segment-explorer-file-label--overridden\"),onClick:function(){var e;e=new URLSearchParams({file:{filePath:r}.filePath,isAppRelativePath:\"1\"}),fetch(\"\".concat( false||\"\",\"/__nextjs_launch-editor?\").concat(e.toString()))},children:[(0,l.jsx)(\"span\",{className:\"segment-explorer-file-label-text\",children:i}),a?(0,l.jsx)(ao,{}):(0,l.jsx)(ai,{className:\"code-icon\"})]})},e)})}),m&&m.value&&(0,l.jsx)(oL,{nodeState:m.value,boundaries:P})]})})}),i.map(function(e){var o=t.children[e];if(!o)return null;var a=_?e:n+\" / \"+e;return(0,l.jsx)(ar,{segment:a,node:o,level:_?r+1:r},e)})]})}function ao(e){return(0,l.jsxs)(\"svg\",o8(o9({width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},e),{children:[(0,l.jsx)(\"path\",{d:\"M14 8C14 11.3137 11.3137 14 8 14C4.68629 14 2 11.3137 2 8C2 4.68629 4.68629 2 8 2C11.3137 2 14 4.68629 14 8Z\",fill:\"var(--color-gray-400)\"}),(0,l.jsx)(\"path\",{d:\"M7.75 7C8.30228 7.00001 8.75 7.44772 8.75 8V11.25H7.25V8.5H6.25V7H7.75ZM8 4C8.55228 4 9 4.44772 9 5C9 5.55228 8.55228 6 8 6C7.44772 6 7 5.55228 7 5C7 4.44772 7.44772 4 8 4Z\",fill:\"var(--color-gray-900)\"})]}))}function aa(){return(0,l.jsx)(\"svg\",{width:\"20\",height:\"20\",viewBox:\"0 0 20 20\",fill:\"var(--color-gray-600)\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,l.jsx)(\"path\",{d:\"M4.5 11.25C4.5 11.3881 4.61193 11.5 4.75 11.5H14.4395L11.9395 9L13 7.93945L16.7803 11.7197L16.832 11.7764C17.0723 12.0709 17.0549 12.5057 16.7803 12.7803L13 16.5605L11.9395 15.5L14.4395 13H4.75C3.7835 13 3 12.2165 3 11.25V4.25H4.5V11.25Z\"})})}function ai(e){return(0,l.jsx)(\"svg\",o8(o9({width:\"12\",height:\"12\",strokeLinejoin:\"round\",viewBox:\"0 0 16 16\",fill:\"currentColor\"},e),{children:(0,l.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M7.22763 14.1819L10.2276 2.18193L10.4095 1.45432L8.95432 1.09052L8.77242 1.81812L5.77242 13.8181L5.59051 14.5457L7.04573 14.9095L7.22763 14.1819ZM3.75002 12.0607L3.21969 11.5304L0.39647 8.70713C0.00594559 8.31661 0.00594559 7.68344 0.39647 7.29292L3.21969 4.46969L3.75002 3.93936L4.81068 5.00002L4.28035 5.53035L1.81068 8.00003L4.28035 10.4697L4.81068 11L3.75002 12.0607ZM12.25 12.0607L12.7804 11.5304L15.6036 8.70713C15.9941 8.31661 15.9941 7.68344 15.6036 7.29292L12.7804 4.46969L12.25 3.93936L11.1894 5.00002L11.7197 5.53035L14.1894 8.00003L11.7197 10.4697L11.1894 11L12.25 12.0607Z\",fill:\"currentColor\"})}))}},\"./src/next-devtools/dev-overlay/hooks/use-delayed-render.ts\":function(e,n,t){\"use strict\";t.d(n,{N:()=>i});var r=t(\"./dist/compiled/react/index.js\");function o(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function a(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return o(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return o(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function i(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=a((0,r.useState)(e),2),o=t[0],i=t[1],l=a((0,r.useState)(!1),2),s=l[0],c=l[1],u=n.enterDelay,d=void 0===u?1:u,f=n.exitDelay,p=void 0===f?0:f;return(0,r.useEffect)(function(){var n,t;return e?(i(!0),d<=0?c(!0):n=setTimeout(function(){c(!0)},d)):(c(!1),p<=0?i(!1):t=setTimeout(function(){i(!1)},p)),function(){clearTimeout(n),clearTimeout(t)}},[e,d,p]),{mounted:o,rendered:s}}},\"./src/next-devtools/dev-overlay/segment-explorer-trie.ts\":function(e,n,t){\"use strict\";t.d(n,{_c:()=>d,i8:()=>f,th:()=>u});var r=t(\"./dist/compiled/react/index.js\");function o(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r;r=t[n],n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r})}return e}var a=new Set,i=function(e){return a.add(e),function(){return a.delete(e)}},l=function(){return c.getRoot()},s=function(){return c.getRoot()},c=function(e){var n=e.getCharacters,t=void 0===n?function(e){return[e]}:n,r=e.compare,i=void 0===r?function(e,n){return e===n}:r,l={value:void 0,children:{}};function s(){var e=!0,n=!1,t=void 0;try{for(var r,o=a[Symbol.iterator]();!(e=(r=o.next()).done);e=!0)(0,r.value)()}catch(e){n=!0,t=e}finally{try{e||null==o.return||o.return()}finally{if(n)throw t}}}return{insert:function(e){var n=l,r=t(e),a=!0,i=!1,c=void 0;try{for(var u,d=r[Symbol.iterator]();!(a=(u=d.next()).done);a=!0){var f=u.value;n.children[f]||(n.children[f]={value:void 0,children:{}}),n=n.children[f]}}catch(e){i=!0,c=e}finally{try{a||null==d.return||d.return()}finally{if(i)throw c}}n.value=e,l=o({},l),s()},remove:function(e){var n=l,r=t(e),a=[],c=!0,u=!0,d=!1,f=void 0;try{for(var p,h=r[Symbol.iterator]();!(u=(p=h.next()).done);u=!0){var g=p.value;if(!n.children[g]){c=!1;break}a.push(n),n=n.children[g]}}catch(e){d=!0,f=e}finally{try{u||null==h.return||h.return()}finally{if(d)throw f}}if(c&&i(n.value,e)){n.value=void 0;for(var m=a.length-1;m>=0;m--){var v=a[m],b=r[m];0===Object.keys(v.children[b].children).length&&delete v.children[b]}l=o({},l),s()}},getRoot:function(){return l}}}({compare:function(e,n){return!!e&&!!n&&e.pagePath===n.pagePath&&e.type===n.type&&e.boundaryType===n.boundaryType},getCharacters:function(e){return e.pagePath.split(\"/\")}}),u=c.insert,d=c.remove;function f(){return(0,r.useSyncExternalStore)(i,l,s)}},\"./src/next-devtools/dev-overlay/utils/cx.ts\":function(e,n,t){\"use strict\";function r(){for(var e=arguments.length,n=Array(e),t=0;t<e;t++)n[t]=arguments[t];return n.filter(Boolean).join(\" \")}t.d(n,{cx:()=>r})}},__webpack_module_cache__={};function __nested_webpack_require_381207__(e){var n=__webpack_module_cache__[e];if(void 0!==n)return n.exports;var t=__webpack_module_cache__[e]={id:e,exports:{}};return __webpack_modules__[e](t,t.exports,__nested_webpack_require_381207__),t.exports}__nested_webpack_require_381207__.n=e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return __nested_webpack_require_381207__.d(n,{a:n}),n},(()=>{var e,n=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__;__nested_webpack_require_381207__.t=function(t,r){if(1&r&&(t=this(t)),8&r||\"object\"==typeof t&&t&&(4&r&&t.__esModule||16&r&&\"function\"==typeof t.then))return t;var o=Object.create(null);__nested_webpack_require_381207__.r(o);var a={};e=e||[null,n({}),n([]),n(n)];for(var i=2&r&&t;\"object\"==typeof i&&!~e.indexOf(i);i=n(i))Object.getOwnPropertyNames(i).forEach(e=>{a[e]=()=>t[e]});return a.default=()=>t,__nested_webpack_require_381207__.d(o,a),o}})(),__nested_webpack_require_381207__.d=(e,n)=>{for(var t in n)__nested_webpack_require_381207__.o(n,t)&&!__nested_webpack_require_381207__.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:n[t]})},__nested_webpack_require_381207__.o=(e,n)=>Object.prototype.hasOwnProperty.call(e,n),__nested_webpack_require_381207__.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},__nested_webpack_require_381207__.nc=void 0;var __nested_webpack_exports__={};for(var __webpack_i__ in(()=>{\"use strict\";__nested_webpack_require_381207__.r(__nested_webpack_exports__),__nested_webpack_require_381207__.d(__nested_webpack_exports__,{dispatcher:()=>aH,renderAppDevOverlay:()=>aW,renderPagesDevOverlay:()=>a$});var e,n,t,r=__nested_webpack_require_381207__(\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\"),o=__nested_webpack_require_381207__.n(r),a=__nested_webpack_require_381207__(\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/styleDomAPI.js\"),i=__nested_webpack_require_381207__.n(a),l=__nested_webpack_require_381207__(\"./src/build/webpack/loaders/devtool/devtool-style-inject.js\"),s=__nested_webpack_require_381207__.n(l),c=__nested_webpack_require_381207__(\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\"),u=__nested_webpack_require_381207__.n(c),d=__nested_webpack_require_381207__(\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/insertStyleElement.js\"),f=__nested_webpack_require_381207__.n(d),p=__nested_webpack_require_381207__(\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/styleTagTransform.js\"),h=__nested_webpack_require_381207__.n(p),g=__nested_webpack_require_381207__(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/global.css\"),m={};m.styleTagTransform=h(),m.setAttributes=u(),m.insert=s(),m.domAPI=i(),m.insertStyleElement=f(),o()(g.Z,m),g.Z&&g.Z.locals&&g.Z.locals;var v=__nested_webpack_require_381207__(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/components/toast/style.css\"),b={};b.styleTagTransform=h(),b.setAttributes=u(),b.insert=s(),b.domAPI=i(),b.insertStyleElement=f(),o()(v.Z,b),v.Z&&v.Z.locals&&v.Z.locals;var y=__nested_webpack_require_381207__(\"./dist/compiled/react/jsx-runtime.js\"),x=__nested_webpack_require_381207__(\"./dist/compiled/react/index.js\");function w(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}var j=__nested_webpack_require_381207__(\"./dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js\"),k=/\\/_next(\\/static\\/.+)/,A=Symbol.for(\"next.console.error.digest\");function O(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function C(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}var S={Small:16/14,Medium:1,Large:16/18},E=\"static-indicator\",_=\"build-ok\",P=\"build-error\",z=\"before-fast-refresh\",L=\"fast-refresh\",T=\"version-info\",R=\"unhandled-error\",N=\"unhandled-rejection\",D=\"debug-info\",B=\"dev-indicator\",M=\"error-overlay-open\",I=\"error-overlay-close\",H=\"error-overlay-toggle\",F=\"building-indicator-show\",U=\"building-indicator-hide\",V=\"rendering-indicator-show\",q=\"rendering-indicator-hide\",W=\"devtools-panel-open\",$=\"devtools-panel-close\",Z=\"devtools-panel-toggle\",Y=\"devtools-position\",X=\"devtools-scale\",K=\"restart-server-button\",Q=\"__nextjs-dev-tools-theme\",G=\"__nextjs-dev-tools-position\",J=\"__nextjs-dev-tools-scale\",ee=\"segment-explorer-update-route-state\",en=/\\s+(at Object\\.react_stack_bottom_frame.*)|(react_stack_bottom_frame@.*)|(at react-stack-bottom-frame.*)|(react-stack-bottom-frame@.*)/;function et(e){return null==e?void 0:e.split(en)[0]}var er=(null==(e=true)?void 0:e.toString())===\"false\",eo={nextId:1,buildError:null,errors:[],notFound:!1,renderingIndicator:!1,staticIndicator:!1,showIndicator:!1,disableDevIndicator:!1,buildingIndicator:!1,refreshState:{type:\"idle\"},versionInfo:{installed:\"0.0.0\",staleness:\"unknown\"},debugInfo:{devtoolsFrontendUrl:void 0},isDevToolsPanelOpen:!1,showRestartServerButton:!1,devToolsPosition:\"bottom-left\",scale:S.Medium,page:\"\"},ea=__nested_webpack_require_381207__(\"./dist/compiled/react-dom/client.js\");function ei(e){for(var n=arguments.length,t=Array(n>1?n-1:0),r=1;r<n;r++)t[r-1]=arguments[r];var o=e.length-1;return(e.slice(0,o).reduce(function(e,n,r){return e+n+t[r]},\"\")+e[o]).replace(/\\/\\*[\\s\\S]*?\\*\\//g,\"\").replace(/\\s+/g,\" \").replace(/\\s*([:;,{}])\\s*/g,\"$1\").replace(/;+}/g,\"}\").trim()}function el(){var e,n,t=(e=[\"\\n /* latin-ext */\\n @font-face {\\n font-family: '__nextjs-Geist';\\n font-style: normal;\\n font-weight: 400 600;\\n font-display: swap;\\n src: url(/__nextjs_font/geist-latin-ext.woff2) format('woff2');\\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7,\\n U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F,\\n U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,\\n U+A720-A7FF;\\n }\\n /* latin-ext */\\n @font-face {\\n font-family: '__nextjs-Geist Mono';\\n font-style: normal;\\n font-weight: 400 600;\\n font-display: swap;\\n src: url(/__nextjs_font/geist-mono-latin-ext.woff2) format('woff2');\\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7,\\n U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F,\\n U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,\\n U+A720-A7FF;\\n }\\n /* latin */\\n @font-face {\\n font-family: '__nextjs-Geist';\\n font-style: normal;\\n font-weight: 400 600;\\n font-display: swap;\\n src: url(/__nextjs_font/geist-latin.woff2) format('woff2');\\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,\\n U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122,\\n U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\\n }\\n /* latin */\\n @font-face {\\n font-family: '__nextjs-Geist Mono';\\n font-style: normal;\\n font-weight: 400 600;\\n font-display: swap;\\n src: url(/__nextjs_font/geist-mono-latin.woff2) format('woff2');\\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,\\n U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122,\\n U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\\n }\\n \"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return el=function(){return t},t}var es=function(){return(0,x.useInsertionEffect)(function(){var e=document.createElement(\"style\");return e.textContent=ei(el()),document.head.appendChild(e),function(){document.head.removeChild(e)}},[]),null},ec=__nested_webpack_require_381207__(\"./dist/compiled/react-dom/index.js\");function eu(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function ed(e){var n,t,r=e.children,o=x.useRef(null),a=x.useRef(null),i=(n=x.useState(),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||function(e,n){if(e){if(\"string\"==typeof e)return eu(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return eu(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}())[1];return x.useEffect(function(){if(o.current=document.querySelector(\"nextjs-portal\"),\"undefined\"!=typeof localStorage){var e=localStorage.getItem(Q);\"dark\"===e?(o.current.classList.add(\"dark\"),o.current.classList.remove(\"light\")):\"light\"===e&&(o.current.classList.remove(\"dark\"),o.current.classList.add(\"light\"))}null===o.current.shadowRoot&&(a.current=o.current.attachShadow({mode:\"open\"})),i({})},[]),a.current?(0,ec.createPortal)(r,a.current):null}function ef(){var e,n,t=(e=[\"\\n :host {\\n /* \\n * Although the style applied to the shadow host is isolated,\\n * the element that attached the shadow host (i.e. \\\"nextjs-portal\\\")\\n * is still affected by the parent's style (e.g. \\\"body\\\"). This may\\n * occur style conflicts like \\\"display: flex\\\", with other children\\n * elements therefore give the shadow host an absolute position.\\n */\\n position: absolute;\\n\\n --color-font: #757575;\\n --color-backdrop: rgba(250, 250, 250, 0.8);\\n --color-border-shadow: rgba(0, 0, 0, 0.145);\\n\\n --color-title-color: #1f1f1f;\\n --color-stack-notes: #777;\\n\\n --color-accents-1: #808080;\\n --color-accents-2: #222222;\\n --color-accents-3: #404040;\\n\\n --font-stack-monospace: '__nextjs-Geist Mono', 'Geist Mono',\\n 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier,\\n monospace;\\n --font-stack-sans: '__nextjs-Geist', 'Geist', -apple-system,\\n 'Source Sans Pro', sans-serif;\\n\\n font-family: var(--font-stack-sans);\\n font-variant-ligatures: none;\\n\\n /* TODO: Remove replaced ones. */\\n --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);\\n --shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1),\\n 0 1px 2px -1px rgb(0 0 0 / 0.1);\\n --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1),\\n 0 2px 4px -2px rgb(0 0 0 / 0.1);\\n --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1),\\n 0 4px 6px -4px rgb(0 0 0 / 0.1);\\n --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1),\\n 0 8px 10px -6px rgb(0 0 0 / 0.1);\\n --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);\\n --shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);\\n --shadow-none: 0 0 #0000;\\n\\n --shadow-small: 0px 2px 2px rgba(0, 0, 0, 0.04);\\n --shadow-menu: 0px 1px 1px rgba(0, 0, 0, 0.02),\\n 0px 4px 8px -4px rgba(0, 0, 0, 0.04),\\n 0px 16px 24px -8px rgba(0, 0, 0, 0.06);\\n\\n --focus-color: var(--color-blue-800);\\n --focus-ring: 2px solid var(--focus-color);\\n\\n --timing-swift: cubic-bezier(0.23, 0.88, 0.26, 0.92);\\n --timing-overlay: cubic-bezier(0.175, 0.885, 0.32, 1.1);\\n /* prettier-ignore */\\n --timing-bounce: linear(0 0%, 0.005871 1%, 0.022058 2%, 0.046612 3%, 0.077823 4%, 0.114199 5%, 0.154441 6%, 0.197431 7.000000000000001%, 0.242208 8%, 0.287959 9%, 0.333995 10%, 0.379743 11%, 0.424732 12%, 0.46858 13%, 0.510982 14.000000000000002%, 0.551702 15%, 0.590564 16%, 0.627445 17%, 0.662261 18%, 0.694971 19%, 0.725561 20%, 0.754047 21%, 0.780462 22%, 0.804861 23%, 0.82731 24%, 0.847888 25%, 0.866679 26%, 0.883775 27%, 0.899272 28.000000000000004%, 0.913267 28.999999999999996%, 0.925856 30%, 0.937137 31%, 0.947205 32%, 0.956153 33%, 0.96407 34%, 0.971043 35%, 0.977153 36%, 0.982479 37%, 0.987094 38%, 0.991066 39%, 0.994462 40%, 0.997339 41%, 0.999755 42%, 1.001761 43%, 1.003404 44%, 1.004727 45%, 1.00577 46%, 1.006569 47%, 1.007157 48%, 1.007563 49%, 1.007813 50%, 1.007931 51%, 1.007939 52%, 1.007855 53%, 1.007697 54%, 1.007477 55.00000000000001%, 1.00721 56.00000000000001%, 1.006907 56.99999999999999%, 1.006576 57.99999999999999%, 1.006228 59%, 1.005868 60%, 1.005503 61%, 1.005137 62%, 1.004776 63%, 1.004422 64%, 1.004078 65%, 1.003746 66%, 1.003429 67%, 1.003127 68%, 1.00284 69%, 1.002571 70%, 1.002318 71%, 1.002082 72%, 1.001863 73%, 1.00166 74%, 1.001473 75%, 1.001301 76%, 1.001143 77%, 1.001 78%, 1.000869 79%, 1.000752 80%, 1.000645 81%, 1.00055 82%, 1.000464 83%, 1.000388 84%, 1.000321 85%, 1.000261 86%, 1.000209 87%, 1.000163 88%, 1.000123 89%, 1.000088 90%);\\n\\n --rounded-none: 0px;\\n --rounded-sm: 2px;\\n --rounded-md: 4px;\\n --rounded-md-2: 6px;\\n --rounded-lg: 8px;\\n --rounded-xl: 12px;\\n --rounded-2xl: 16px;\\n --rounded-3xl: 24px;\\n --rounded-4xl: 32px;\\n --rounded-full: 9999px;\\n\\n /* \\n This value gets set from the Dev Tools preferences,\\n and we use the following --size-* variables to \\n scale the relevant elements.\\n\\n The reason why we don't rely on rem values is because\\n if an app sets their root font size to something tiny, \\n it feels unexpected to have the app root size leak \\n into a Next.js surface.\\n\\n https://github.com/vercel/next.js/discussions/76812\\n */\\n --nextjs-dev-tools-scale: \",\";\\n --size-1: calc(1px / var(--nextjs-dev-tools-scale));\\n --size-2: calc(2px / var(--nextjs-dev-tools-scale));\\n --size-3: calc(3px / var(--nextjs-dev-tools-scale));\\n --size-4: calc(4px / var(--nextjs-dev-tools-scale));\\n --size-5: calc(5px / var(--nextjs-dev-tools-scale));\\n --size-6: calc(6px / var(--nextjs-dev-tools-scale));\\n --size-7: calc(7px / var(--nextjs-dev-tools-scale));\\n --size-8: calc(8px / var(--nextjs-dev-tools-scale));\\n --size-9: calc(9px / var(--nextjs-dev-tools-scale));\\n --size-10: calc(10px / var(--nextjs-dev-tools-scale));\\n --size-11: calc(11px / var(--nextjs-dev-tools-scale));\\n --size-12: calc(12px / var(--nextjs-dev-tools-scale));\\n --size-13: calc(13px / var(--nextjs-dev-tools-scale));\\n --size-14: calc(14px / var(--nextjs-dev-tools-scale));\\n --size-15: calc(15px / var(--nextjs-dev-tools-scale));\\n --size-16: calc(16px / var(--nextjs-dev-tools-scale));\\n --size-17: calc(17px / var(--nextjs-dev-tools-scale));\\n --size-18: calc(18px / var(--nextjs-dev-tools-scale));\\n --size-20: calc(20px / var(--nextjs-dev-tools-scale));\\n --size-22: calc(22px / var(--nextjs-dev-tools-scale));\\n --size-24: calc(24px / var(--nextjs-dev-tools-scale));\\n --size-26: calc(26px / var(--nextjs-dev-tools-scale));\\n --size-28: calc(28px / var(--nextjs-dev-tools-scale));\\n --size-30: calc(30px / var(--nextjs-dev-tools-scale));\\n --size-32: calc(32px / var(--nextjs-dev-tools-scale));\\n --size-34: calc(34px / var(--nextjs-dev-tools-scale));\\n --size-36: calc(36px / var(--nextjs-dev-tools-scale));\\n --size-38: calc(38px / var(--nextjs-dev-tools-scale));\\n --size-40: calc(40px / var(--nextjs-dev-tools-scale));\\n --size-42: calc(42px / var(--nextjs-dev-tools-scale));\\n --size-44: calc(44px / var(--nextjs-dev-tools-scale));\\n --size-46: calc(46px / var(--nextjs-dev-tools-scale));\\n --size-48: calc(48px / var(--nextjs-dev-tools-scale));\\n\\n @media print {\\n display: none;\\n }\\n }\\n\\n h1,\\n h2,\\n h3,\\n h4,\\n h5,\\n h6 {\\n margin-bottom: 8px;\\n font-weight: 500;\\n line-height: 1.5;\\n }\\n\\n a {\\n color: var(--color-blue-900);\\n &:hover {\\n color: var(--color-blue-900);\\n }\\n &:focus-visible {\\n outline: var(--focus-ring);\\n }\\n }\\n \"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return ef=function(){return t},t}function ep(e){var n=e.scale;return(0,y.jsx)(\"style\",{children:ei(ef(),String(void 0===n?1:n))})}function eh(e){if(\"\"===e.trim())throw Error(\"can't decode empty hex\");var n=parseInt(e,16);if(isNaN(n))throw Error(\"invalid hex: `\".concat(e,\"`\"));return String.fromCodePoint(n)}var eg=/^__TURBOPACK__([a-zA-Z0-9_$]+)__$/,em=/https?:\\/\\/[^\\s/$.?#].[^\\s)'\"]*/i,ev=new RegExp(\"(\".concat(/__TURBOPACK__[a-zA-Z0-9_$]+__/g.source,\"|\\\\s+)\")),eb=function(e){var n=e.text,t=e.matcher,r=n.split(ev);return(0,y.jsx)(y.Fragment,{children:r.map(function(e,n){if(em.test(e)){var r=em.exec(e)[0];return\"function\"!=typeof t||t(r)?(0,y.jsx)(x.Fragment,{children:(0,y.jsx)(\"a\",{href:r,target:\"_blank\",rel:\"noreferrer noopener\",children:e})},\"link-\".concat(n)):e}try{var o=function(e){var n=e.match(eg);if(!n)return e;for(var t=n[1],r=\"\",o=0,a=\"\",i=0;i<t.length;i++){var l=t[i];if(0===o)\"_\"===l?o=1:\"$\"===l?o=2:r+=l;else if(1===o)\"_\"===l?(r+=\" \",o=0):\"$\"===l?(r+=\"_\",o=2):(r+=l,o=0);else if(2===o)if(2===a.length&&(r+=eh(a),a=\"\"),\"_\"===l){if(\"\"!==a)throw Error(\"invalid hex: `\".concat(a,\"`\"));o=3}else if(\"$\"===l){if(\"\"!==a)throw Error(\"invalid hex: `\".concat(a,\"`\"));o=0}else a+=l;else if(3===o)if(\"_\"===l)throw Error(\"invalid hex: `\".concat(a+l,\"`\"));else\"$\"===l?(r+=eh(a),a=\"\",o=0):a+=l}return r}(e);if(o!==e)return(0,y.jsxs)(\"i\",{children:[\"{\",o,\"}\"]},\"ident-\".concat(n))}catch(t){return(0,y.jsxs)(\"i\",{children:[\"{\",e,\" (decoding failed: \",\"\"+t,\")\",\"}\"]},\"ident-\".concat(n))}return(0,y.jsx)(x.Fragment,{children:e},\"text-\".concat(n))})})},ey=[/^webpack-internal:\\/\\/\\/(\\([\\w-]+\\)\\/)?/,/^(webpack:\\/\\/\\/|webpack:\\/\\/(_N_E\\/)?)(\\([\\w-]+\\)\\/)?/];function ex(e){var n=!0,t=!1,r=void 0;try{for(var o,a=ey[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){var i=o.value;if(i.test(e))return!0;e=e.replace(i,\"\")}}catch(e){t=!0,r=e}finally{try{n||null==a.return||a.return()}finally{if(t)throw r}}return!1}function ew(e){var n=!0,t=!1,r=void 0;try{for(var o,a=ey[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){var i=o.value;e=e.replace(i,\"\")}}catch(e){t=!0,r=e}finally{try{n||null==a.return||a.return()}finally{if(t)throw r}}return e}function ej(e,n,t,r,o,a,i){try{var l=e[a](i),s=l.value}catch(e){t(e);return}l.done?n(s):Promise.resolve(s).then(r,o)}function ek(e){return function(){var n=this,t=arguments;return new Promise(function(r,o){var a=e.apply(n,t);function i(e){ej(a,r,o,i,l,\"next\",e)}function l(e){ej(a,r,o,i,l,\"throw\",e)}i(void 0)})}}function eA(e,n){var t,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create((\"function\"==typeof Iterator?Iterator:Object).prototype);return i.next=l(0),i.throw=l(1),i.return=l(2),\"function\"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function l(l){return function(s){var c=[l,s];if(t)throw TypeError(\"Generator is already executing.\");for(;i&&(i=0,c[0]&&(a=0)),a;)try{if(t=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,r=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=n.call(e,a)}catch(e){c=[6,e],r=0}finally{t=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}function eO(e,n){var t;return\"file://\"===e.file||(null==(t=e.file)?void 0:t.match(/https?:\\/\\//))?Promise.resolve({error:!1,reason:null,external:!0,sourceStackFrame:e,originalStackFrame:null,originalCodeFrame:null,ignored:!0}):ek(function(){var t,r;return eA(this,function(o){if(\"rejected\"===n.status)throw Error(n.reason);return[2,{error:!1,reason:null,external:!1,sourceStackFrame:e,originalStackFrame:(r=n.value).originalStackFrame,originalCodeFrame:r.originalCodeFrame||null,ignored:(null==(t=r.originalStackFrame)?void 0:t.ignored)||!1}]})})().catch(function(n){var t,r;return{error:!0,reason:null!=(r=null!=(t=null==n?void 0:n.message)?t:null==n?void 0:n.toString())?r:\"Unknown Error\",external:!1,sourceStackFrame:e,originalStackFrame:null,originalCodeFrame:null,ignored:!1}})}function eC(e,n,t){return ek(function(){var r,o,a,i;return eA(this,function(l){switch(l.label){case 0:r={frames:e,isServer:\"server\"===n,isEdgeServer:\"edge-server\"===n,isAppDirectory:t},o=void 0,a=void 0,l.label=1;case 1:return l.trys.push([1,3,,4]),[4,fetch(\"/__nextjs_original-stack-frames\",{method:\"POST\",body:JSON.stringify(r)})];case 2:return o=l.sent(),[3,4];case 3:return a=l.sent()+\"\",[3,4];case 4:if(!(o&&o.ok&&204!==o.status))return[3,6];return[4,o.json()];case 5:return i=l.sent(),[2,Promise.all(e.map(function(e,n){return eO(e,i[n])}))];case 6:if(!o)return[3,8];return[4,o.text()];case 7:a=l.sent(),l.label=8;case 8:return[2,Promise.all(e.map(function(e){return eO(e,{status:\"rejected\",reason:\"Failed to fetch the original stack frames \".concat(a?\": \".concat(a):\"\")})}))]}})})()}function eS(e){if(!e.file)return\"\";var n=ex(e.file),t=\"\";if(n)t=ew(e.file);else try{var r,o=new URL(e.file),a=\"\";(null==(r=globalThis.location)?void 0:r.origin)!==o.origin&&(\"null\"===o.origin?a+=o.protocol:a+=o.origin),a+=o.pathname,t=ew(a)}catch(n){t=ew(e.file)}return!ex(e.file)&&null!=e.lineNumber&&t&&\"<anonymous>\"!==e.file&&(null!=e.column?t+=\" (\".concat(e.lineNumber,\":\").concat(e.column,\")\"):t+=\" (\".concat(e.lineNumber,\")\")),t}function eE(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.file,t=e.lineNumber,r=e.column;return(0,x.useCallback)(function(){if(null!=n&&null!=t&&null!=r){var e=new URLSearchParams;e.append(\"file\",n),e.append(\"lineNumber\",String(t)),e.append(\"column\",String(r)),self.fetch(\"\".concat( false||\"\",\"/__nextjs_launch-editor?\").concat(e.toString())).then(function(){},function(e){console.error('Failed to open file \"'.concat(n,\" (\").concat(t,\":\").concat(r,')\" in your editor. Cause:'),e)})}},[n,t,r])}function e_(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function eP(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}function ez(e){return(0,y.jsx)(\"svg\",eP(e_({xmlns:\"http://www.w3.org/2000/svg\",width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\"},e),{children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",fill:\"currentColor\",d:\"M11.5 9.75V11.25C11.5 11.3881 11.3881 11.5 11.25 11.5H4.75C4.61193 11.5 4.5 11.3881 4.5 11.25L4.5 4.75C4.5 4.61193 4.61193 4.5 4.75 4.5H6.25H7V3H6.25H4.75C3.7835 3 3 3.7835 3 4.75V11.25C3 12.2165 3.7835 13 4.75 13H11.25C12.2165 13 13 12.2165 13 11.25V9.75V9H11.5V9.75ZM8.5 3H9.25H12.2495C12.6637 3 12.9995 3.33579 12.9995 3.75V6.75V7.5H11.4995V6.75V5.56066L8.53033 8.52978L8 9.06011L6.93934 7.99945L7.46967 7.46912L10.4388 4.5H9.25H8.5V3Z\"})}))}function eL(e){return(0,y.jsx)(\"svg\",eP(e_({xmlns:\"http://www.w3.org/2000/svg\",height:\"16\",strokeLinejoin:\"round\",viewBox:\"-4 -4 24 24\",width:\"16\"},e),{children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M8.55846 2H7.44148L1.88975 13.5H14.1102L8.55846 2ZM9.90929 1.34788C9.65902 0.829456 9.13413 0.5 8.55846 0.5H7.44148C6.86581 0.5 6.34092 0.829454 6.09065 1.34787L0.192608 13.5653C-0.127943 14.2293 0.355835 15 1.09316 15H14.9068C15.6441 15 16.1279 14.2293 15.8073 13.5653L9.90929 1.34788ZM8.74997 4.75V5.5V8V8.75H7.24997V8V5.5V4.75H8.74997ZM7.99997 12C8.55226 12 8.99997 11.5523 8.99997 11C8.99997 10.4477 8.55226 10 7.99997 10C7.44769 10 6.99997 10.4477 6.99997 11C6.99997 11.5523 7.44769 12 7.99997 12Z\",fill:\"currentColor\"})}))}function eT(e){var n=e.lang;if(!n)return(0,y.jsx)(eB,{});switch(n.toLowerCase()){case\"jsx\":case\"tsx\":return(0,y.jsx)(eM,{});case\"ts\":case\"typescript\":return(0,y.jsx)(eD,{});case\"javascript\":case\"js\":case\"mjs\":return(0,y.jsx)(eN,{});case\"json\":return(0,y.jsx)(eR,{});default:return(0,y.jsx)(eB,{})}}function eR(){return(0,y.jsx)(\"svg\",{clipRule:\"evenodd\",fillRule:\"evenodd\",height:\"16\",viewBox:\"0 0 1321.45 1333.33\",width:\"16\",children:(0,y.jsx)(\"path\",{d:\"M221.37 618.44h757.94V405.15H755.14c-23.5 0-56.32-12.74-71.82-28.24-15.5-15.5-25-43.47-25-66.97V82.89H88.39c-1.99 0-3.49 1-4.49 2-1.5 1-2 2.5-2 4.5v1155.04c0 1.5 1 3.5 2 4.5 1 1.49 3 1.99 4.49 1.99H972.8c2 0 1.89-.99 2.89-1.99 1.5-1 3.61-3 3.61-4.5v-121.09H221.36c-44.96 0-82-36.9-82-81.99V700.44c0-45.1 36.9-82 82-82zm126.51 117.47h75.24v146.61c0 30.79-2.44 54.23-7.33 70.31-4.92 16.03-14.8 29.67-29.65 40.85-14.86 11.12-33.91 16.72-57.05 16.72-24.53 0-43.51-3.71-56.94-11.06-13.5-7.36-23.89-18.1-31.23-32.3-7.35-14.14-11.69-31.67-12.99-52.53l71.5-10.81c.11 11.81 1.07 20.61 2.81 26.33 1.76 5.78 4.75 10.37 9 13.95 2.87 2.33 6.94 3.46 12.25 3.46 8.4 0 14.58-3.46 18.53-10.37 3.9-6.92 5.87-18.6 5.87-35V735.92zm112.77 180.67l71.17-4.97c1.54 12.81 4.69 22.62 9.44 29.28 7.74 10.88 18.74 16.34 33.09 16.34 10.68 0 18.93-2.76 24.68-8.36 5.81-5.58 8.7-12.07 8.7-19.41 0-6.97-2.71-13.26-8.2-18.79-5.47-5.53-18.23-10.68-38.28-15.65-32.89-8.17-56.27-19.1-70.26-32.74-14.12-13.57-21.18-30.92-21.18-52.03 0-13.83 3.61-26.89 10.85-39.21 7.22-12.38 18.07-22.06 32.59-29.09 14.52-7.04 34.4-10.56 59.65-10.56 31 0 54.62 6.41 70.88 19.29 16.28 12.81 25.92 33.24 29.04 61.27l-70.5 4.65c-1.87-12.25-5.81-21.17-11.81-26.7-6.05-5.6-14.35-8.36-24.9-8.36-8.71 0-15.31 2.07-19.73 6.16-4.4 4.09-6.59 9.12-6.59 15.02 0 4.27 1.81 8.11 5.37 11.57 3.45 3.59 11.8 6.85 25.02 9.93 32.75 7.86 56.2 15.84 70.31 23.87 14.18 8.05 24.52 17.98 30.96 29.92 6.44 11.88 9.66 25.2 9.66 39.96 0 17.29-4.3 33.24-12.88 47.89-8.63 14.58-20.61 25.7-36.08 33.24-15.41 7.54-34.85 11.31-58.33 11.31-41.24 0-69.81-8.86-85.68-26.52-15.88-17.65-24.85-40.09-26.96-67.3zm248.74-45.5c0-44.05 11.02-78.36 33.09-102.87 22.09-24.57 52.82-36.82 92.24-36.82 40.38 0 71.5 12.07 93.34 36.13 21.86 24.13 32.77 57.94 32.77 101.37 0 31.54-4.75 57.36-14.3 77.54-9.54 20.18-23.37 35.89-41.4 47.13-18.07 11.24-40.55 16.84-67.48 16.84-27.33 0-49.99-4.83-67.94-14.52-17.92-9.74-32.49-25.07-43.62-46.06-11.13-20.92-16.72-47.19-16.72-78.74zm74.89.19c0 27.21 4.57 46.81 13.68 58.68 9.13 11.88 21.57 17.85 37.26 17.85 16.1 0 28.65-5.84 37.45-17.47 8.87-11.68 13.28-32.54 13.28-62.77 0-25.39-4.63-43.92-13.84-55.61-9.26-11.76-21.75-17.6-37.56-17.6-15.13 0-27.34 5.97-36.49 17.85-9.21 11.88-13.78 31.61-13.78 59.07zm209.08-135.36h69.99l90.98 149.05V735.91h70.83v269.96h-70.83l-90.48-148.24v148.24h-70.49V735.91zm67.71-117.47h178.37c45.1 0 82 37.04 82 82v340.91c0 44.96-37.03 81.99-82 81.99h-178.37v147c0 17.5-6.99 32.99-18.5 44.5-11.5 11.49-27 18.5-44.5 18.5H62.97c-17.5 0-32.99-7-44.5-18.5-11.49-11.5-18.5-27-18.5-44.5V63.49c0-17.5 7-33 18.5-44.5S45.97.49 62.97.49H700.1c1.5-.5 3-.5 4.5-.5 7 0 14 3 19 7.49h1c1 .5 1.5 1 2.5 2l325.46 329.47c5.5 5.5 9.5 13 9.5 21.5 0 2.5-.5 4.5-1 7v250.98zM732.61 303.47V96.99l232.48 235.47H761.6c-7.99 0-14.99-3.5-20.5-8.49-4.99-5-8.49-12.5-8.49-20.5z\",fill:\"currentColor\"})})}function eN(){return(0,y.jsx)(\"svg\",{height:\"16\",viewBox:\"0 0 50 50\",width:\"16\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,y.jsx)(\"path\",{d:\"M 43.335938 4 L 6.667969 4 C 5.195313 4 4 5.195313 4 6.667969 L 4 43.332031 C 4 44.804688 5.195313 46 6.667969 46 L 43.332031 46 C 44.804688 46 46 44.804688 46 43.335938 L 46 6.667969 C 46 5.195313 44.804688 4 43.335938 4 Z M 27 36.183594 C 27 40.179688 24.65625 42 21.234375 42 C 18.140625 42 15.910156 39.925781 15 38 L 18.144531 36.097656 C 18.75 37.171875 19.671875 38 21 38 C 22.269531 38 23 37.503906 23 35.574219 L 23 23 L 27 23 Z M 35.675781 42 C 32.132813 42 30.121094 40.214844 29 38 L 32 36 C 32.816406 37.335938 33.707031 38.613281 35.589844 38.613281 C 37.171875 38.613281 38 37.824219 38 36.730469 C 38 35.425781 37.140625 34.960938 35.402344 34.199219 L 34.449219 33.789063 C 31.695313 32.617188 29.863281 31.148438 29.863281 28.039063 C 29.863281 25.179688 32.046875 23 35.453125 23 C 37.878906 23 39.621094 23.84375 40.878906 26.054688 L 37.910156 27.964844 C 37.253906 26.789063 36.550781 26.328125 35.453125 26.328125 C 34.335938 26.328125 33.628906 27.039063 33.628906 27.964844 C 33.628906 29.109375 34.335938 29.570313 35.972656 30.28125 L 36.925781 30.691406 C 40.171875 32.078125 42 33.496094 42 36.683594 C 42 40.117188 39.300781 42 35.675781 42 Z\",fill:\"currentColor\"})})}function eD(){return(0,y.jsxs)(\"svg\",{fill:\"none\",height:\"14\",viewBox:\"0 0 512 512\",width:\"14\",xmlns:\"http://www.w3.org/2000/svg\",children:[(0,y.jsx)(\"rect\",{fill:\"currentColor\",height:\"512\",rx:\"50\",width:\"512\"}),(0,y.jsx)(\"rect\",{fill:\"currentColor\",height:\"512\",rx:\"50\",width:\"512\"}),(0,y.jsx)(\"path\",{clipRule:\"evenodd\",d:\"m316.939 407.424v50.061c8.138 4.172 17.763 7.3 28.875 9.386s22.823 3.129 35.135 3.129c11.999 0 23.397-1.147 34.196-3.442 10.799-2.294 20.268-6.075 28.406-11.342 8.138-5.266 14.581-12.15 19.328-20.65s7.121-19.007 7.121-31.522c0-9.074-1.356-17.026-4.069-23.857s-6.625-12.906-11.738-18.225c-5.112-5.319-11.242-10.091-18.389-14.315s-15.207-8.213-24.18-11.967c-6.573-2.712-12.468-5.345-17.685-7.9-5.217-2.556-9.651-5.163-13.303-7.822-3.652-2.66-6.469-5.476-8.451-8.448-1.982-2.973-2.974-6.336-2.974-10.091 0-3.441.887-6.544 2.661-9.308s4.278-5.136 7.512-7.118c3.235-1.981 7.199-3.52 11.894-4.615 4.696-1.095 9.912-1.642 15.651-1.642 4.173 0 8.581.313 13.224.938 4.643.626 9.312 1.591 14.008 2.894 4.695 1.304 9.259 2.947 13.694 4.928 4.434 1.982 8.529 4.276 12.285 6.884v-46.776c-7.616-2.92-15.937-5.084-24.962-6.492s-19.381-2.112-31.066-2.112c-11.895 0-23.163 1.278-33.805 3.833s-20.006 6.544-28.093 11.967c-8.086 5.424-14.476 12.333-19.171 20.729-4.695 8.395-7.043 18.433-7.043 30.114 0 14.914 4.304 27.638 12.912 38.172 8.607 10.533 21.675 19.45 39.204 26.751 6.886 2.816 13.303 5.579 19.25 8.291s11.086 5.528 15.415 8.448c4.33 2.92 7.747 6.101 10.252 9.543 2.504 3.441 3.756 7.352 3.756 11.733 0 3.233-.783 6.231-2.348 8.995s-3.939 5.162-7.121 7.196-7.147 3.624-11.894 4.771c-4.748 1.148-10.303 1.721-16.668 1.721-10.851 0-21.597-1.903-32.24-5.71-10.642-3.806-20.502-9.516-29.579-17.13zm-84.159-123.342h64.22v-41.082h-179v41.082h63.906v182.918h50.874z\",fill:\"var(--color-background-100)\",fillRule:\"evenodd\"})]})}function eB(){return(0,y.jsx)(\"svg\",{width:\"16\",height:\"17\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M14.5 7v7a2.5 2.5 0 0 1-2.5 2.5H4A2.5 2.5 0 0 1 1.5 14V.5h7.586a1 1 0 0 1 .707.293l4.414 4.414a1 1 0 0 1 .293.707V7zM13 7v7a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V2h5v5h5zM9.5 2.621V5.5h2.879L9.5 2.621z\",fill:\"currentColor\"})})}function eM(){return(0,y.jsxs)(\"svg\",{height:\"16\",strokeLinejoin:\"round\",viewBox:\"0 0 16 16\",width:\"16\",children:[(0,y.jsx)(\"g\",{clipPath:\"url(#file_react_clip0_872_3183)\",children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M4.5 1.93782C4.70129 1.82161 4.99472 1.7858 5.41315 1.91053C5.83298 2.03567 6.33139 2.31073 6.87627 2.73948C7.01136 2.84578 7.14803 2.96052 7.28573 3.08331C6.86217 3.53446 6.44239 4.04358 6.03752 4.60092C5.35243 4.67288 4.70164 4.78186 4.09916 4.92309C4.06167 4.74244 4.03064 4.56671 4.00612 4.39656C3.90725 3.71031 3.91825 3.14114 4.01979 2.71499C4.12099 2.29025 4.29871 2.05404 4.5 1.93782ZM7.49466 1.95361C7.66225 2.08548 7.83092 2.22804 7.99999 2.38067C8.16906 2.22804 8.33773 2.08548 8.50532 1.95361C9.10921 1.47842 9.71982 1.12549 10.3012 0.952202C10.8839 0.778496 11.4838 0.7738 12 1.0718C12.5161 1.3698 12.812 1.89169 12.953 2.48322C13.0936 3.07333 13.0932 3.77858 12.9836 4.53917C12.9532 4.75024 12.9141 4.9676 12.8665 5.19034C13.0832 5.26044 13.291 5.33524 13.489 5.41444C14.2025 5.69983 14.8134 6.05217 15.2542 6.46899C15.696 6.8868 16 7.404 16 8C16 8.596 15.696 9.11319 15.2542 9.53101C14.8134 9.94783 14.2025 10.3002 13.489 10.5856C13.291 10.6648 13.0832 10.7396 12.8665 10.8097C12.9141 11.0324 12.9532 11.2498 12.9837 11.4608C13.0932 12.2214 13.0936 12.9267 12.953 13.5168C12.812 14.1083 12.5161 14.6302 12 14.9282C11.4839 15.2262 10.8839 15.2215 10.3012 15.0478C9.71984 14.8745 9.10923 14.5216 8.50534 14.0464C8.33775 13.9145 8.16906 13.7719 7.99999 13.6193C7.83091 13.7719 7.66223 13.9145 7.49464 14.0464C6.89075 14.5216 6.28014 14.8745 5.69879 15.0478C5.11605 15.2215 4.51613 15.2262 3.99998 14.9282C3.48383 14.6302 3.18794 14.1083 3.047 13.5168C2.9064 12.9267 2.90674 12.2214 3.01632 11.4608C3.04673 11.2498 3.08586 11.0324 3.13351 10.8097C2.91679 10.7395 2.709 10.6648 2.511 10.5856C1.79752 10.3002 1.18658 9.94783 0.745833 9.53101C0.304028 9.11319 0 8.596 0 8C0 7.404 0.304028 6.8868 0.745833 6.46899C1.18658 6.05217 1.79752 5.69983 2.511 5.41444C2.709 5.33524 2.9168 5.26044 3.13352 5.19034C3.08587 4.9676 3.04675 4.75024 3.01634 4.53917C2.90676 3.77858 2.90642 3.07332 3.04702 2.48321C3.18796 1.89169 3.48385 1.3698 4 1.0718C4.51615 0.773798 5.11607 0.778495 5.69881 0.952201C6.28016 1.12549 6.89077 1.47841 7.49466 1.95361ZM7.36747 4.51025C7.57735 4.25194 7.78881 4.00927 7.99999 3.78356C8.21117 4.00927 8.42263 4.25194 8.63251 4.51025C8.42369 4.50346 8.21274 4.5 8 4.5C7.78725 4.5 7.5763 4.50345 7.36747 4.51025ZM8.71425 3.08331C9.13781 3.53447 9.55759 4.04358 9.96246 4.60092C10.6475 4.67288 11.2983 4.78186 11.9008 4.92309C11.9383 4.74244 11.9693 4.56671 11.9939 4.39657C12.0927 3.71031 12.0817 3.14114 11.9802 2.71499C11.879 2.29025 11.7013 2.05404 11.5 1.93782C11.2987 1.82161 11.0053 1.7858 10.5868 1.91053C10.167 2.03568 9.66859 2.31073 9.12371 2.73948C8.98862 2.84578 8.85196 2.96052 8.71425 3.08331ZM8 5.5C8.48433 5.5 8.95638 5.51885 9.41188 5.55456C9.67056 5.93118 9.9229 6.33056 10.1651 6.75C10.4072 7.16944 10.6269 7.58766 10.8237 7.99998C10.6269 8.41232 10.4072 8.83055 10.165 9.25C9.92288 9.66944 9.67053 10.0688 9.41185 10.4454C8.95636 10.4812 8.48432 10.5 8 10.5C7.51567 10.5 7.04363 10.4812 6.58813 10.4454C6.32945 10.0688 6.0771 9.66944 5.83494 9.25C5.59277 8.83055 5.37306 8.41232 5.17624 7.99998C5.37306 7.58765 5.59275 7.16944 5.83492 6.75C6.07708 6.33056 6.32942 5.93118 6.5881 5.55456C7.04361 5.51884 7.51566 5.5 8 5.5ZM11.0311 6.25C11.1375 6.43423 11.2399 6.61864 11.3385 6.80287C11.4572 6.49197 11.5616 6.18752 11.6515 5.89178C11.3505 5.82175 11.0346 5.75996 10.706 5.70736C10.8163 5.8848 10.9247 6.06576 11.0311 6.25ZM11.0311 9.75C11.1374 9.56576 11.2399 9.38133 11.3385 9.19709C11.4572 9.50801 11.5617 9.81246 11.6515 10.1082C11.3505 10.1782 11.0346 10.24 10.7059 10.2926C10.8162 10.1152 10.9247 9.93424 11.0311 9.75ZM11.9249 7.99998C12.2051 8.62927 12.4362 9.24738 12.6151 9.83977C12.7903 9.78191 12.958 9.72092 13.1176 9.65708C13.7614 9.39958 14.2488 9.10547 14.5671 8.80446C14.8843 8.50445 15 8.23243 15 8C15 7.76757 14.8843 7.49555 14.5671 7.19554C14.2488 6.89453 13.7614 6.60042 13.1176 6.34292C12.958 6.27907 12.7903 6.21808 12.6151 6.16022C12.4362 6.7526 12.2051 7.37069 11.9249 7.99998ZM9.96244 11.3991C10.6475 11.3271 11.2983 11.2181 11.9008 11.0769C11.9383 11.2576 11.9694 11.4333 11.9939 11.6034C12.0928 12.2897 12.0817 12.8589 11.9802 13.285C11.879 13.7098 11.7013 13.946 11.5 14.0622C11.2987 14.1784 11.0053 14.2142 10.5868 14.0895C10.167 13.9643 9.66861 13.6893 9.12373 13.2605C8.98863 13.1542 8.85196 13.0395 8.71424 12.9167C9.1378 12.4655 9.55758 11.9564 9.96244 11.3991ZM8.63249 11.4898C8.42262 11.7481 8.21116 11.9907 7.99999 12.2164C7.78881 11.9907 7.57737 11.7481 7.36749 11.4897C7.57631 11.4965 7.78726 11.5 8 11.5C8.21273 11.5 8.42367 11.4965 8.63249 11.4898ZM4.96891 9.75C5.07528 9.93424 5.18375 10.1152 5.29404 10.2926C4.9654 10.24 4.64951 10.1782 4.34844 10.1082C4.43833 9.81246 4.54276 9.508 4.66152 9.19708C4.76005 9.38133 4.86254 9.56575 4.96891 9.75ZM6.03754 11.3991C5.35244 11.3271 4.70163 11.2181 4.09914 11.0769C4.06165 11.2576 4.03062 11.4333 4.0061 11.6034C3.90723 12.2897 3.91823 12.8589 4.01977 13.285C4.12097 13.7098 4.29869 13.946 4.49998 14.0622C4.70127 14.1784 4.9947 14.2142 5.41313 14.0895C5.83296 13.9643 6.33137 13.6893 6.87625 13.2605C7.01135 13.1542 7.14802 13.0395 7.28573 12.9167C6.86217 12.4655 6.4424 11.9564 6.03754 11.3991ZM4.07507 7.99998C3.79484 8.62927 3.56381 9.24737 3.38489 9.83977C3.20969 9.78191 3.042 9.72092 2.88239 9.65708C2.23864 9.39958 1.75123 9.10547 1.43294 8.80446C1.11571 8.50445 1 8.23243 1 8C1 7.76757 1.11571 7.49555 1.43294 7.19554C1.75123 6.89453 2.23864 6.60042 2.88239 6.34292C3.042 6.27907 3.2097 6.21808 3.3849 6.16022C3.56383 6.75261 3.79484 7.37069 4.07507 7.99998ZM4.66152 6.80287C4.54277 6.49197 4.43835 6.18752 4.34846 5.89178C4.64952 5.82175 4.96539 5.75996 5.29402 5.70736C5.18373 5.8848 5.07526 6.06576 4.96889 6.25C4.86253 6.43423 4.76005 6.61864 4.66152 6.80287ZM9.25 8C9.25 8.69036 8.69036 9.25 8 9.25C7.30964 9.25 6.75 8.69036 6.75 8C6.75 7.30965 7.30964 6.75 8 6.75C8.69036 6.75 9.25 7.30965 9.25 8Z\",fill:\"currentColor\"})}),(0,y.jsx)(\"defs\",{children:(0,y.jsx)(\"clipPath\",{id:\"file_react_clip0_872_3183\",children:(0,y.jsx)(\"rect\",{width:\"16\",height:\"16\",fill:\"white\"})})})]})}var eI=__nested_webpack_require_381207__(\"./dist/compiled/anser/index.js\"),eH=__nested_webpack_require_381207__.n(eI),eF=__nested_webpack_require_381207__(\"./dist/compiled/strip-ansi/index.js\"),eU=__nested_webpack_require_381207__.n(eF);function eV(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function eq(e){var n,t=e.stackFrame,r=e.codeFrame,o=(0,x.useMemo)(function(){var e,n;return(function(e){var n=eH().ansiToJson(e,{json:!0,use_classes:!0,remove_empty:!0}),t=[],r=[],o=!0,a=!1,i=void 0;try{for(var l,s=n[Symbol.iterator]();!(o=(l=s.next()).done);o=!0){var c=l.value;if(\"string\"==typeof c.content&&c.content.includes(\"\\n\"))for(var u=c.content.split(\"\\n\"),d=0;d<u.length;d++){var f=u[d];f&&r.push(function(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({},c),{content:f})),d<u.length-1&&(t.push(r),r=[])}else r.push(c)}}catch(e){a=!0,i=e}finally{try{o||null==s.return||s.return()}finally{if(a)throw i}}return r.length>0&&t.push(r),t})((n=(e=r.split(/\\r?\\n/g)).map(function(e){return null===/^>? +\\d+ +\\| [ ]+/.exec(eU()(e))?null:/^>? +\\d+ +\\| ( *)/.exec(eU()(e))}).filter(Boolean).map(function(e){return e.pop()}).reduce(function(e,n){return isNaN(e)?n.length:Math.min(e,n.length)},NaN))>1?e.map(function(e,t){return~(t=e.indexOf(\"|\"))?e.substring(0,t)+e.substring(t).replace(\"^\\\\ {\".concat(n,\"}\"),\"\"):e}).join(\"\\n\"):e.join(\"\\n\")).map(function(e){var n,r,o,a,i,l,s,c,u;return{line:e,parsedLine:(n=e,r=t,((null==(o=n[0])?void 0:o.content)===\">\"||(null==(a=n[0])?void 0:a.content)===\" \")&&(s=null==(l=n[1])||null==(u=l.content)||null==(c=u.replace(\"|\",\"\"))?void 0:c.trim()),{lineNumber:s,isErroredLine:s===(null==(i=r.lineNumber)?void 0:i.toString())})}})},[r,t]),a=eE({file:t.file,lineNumber:t.lineNumber,column:t.column}),i=null==t||null==(n=t.file)?void 0:n.split(\".\").pop();return(0,y.jsxs)(\"div\",{\"data-nextjs-codeframe\":!0,children:[(0,y.jsx)(\"div\",{className:\"code-frame-header\",children:(0,y.jsxs)(\"p\",{className:\"code-frame-link\",children:[(0,y.jsx)(\"span\",{className:\"code-frame-icon\",children:(0,y.jsx)(eT,{lang:i})}),(0,y.jsxs)(\"span\",{\"data-text\":!0,children:[eS(t),\" @\",\" \",(0,y.jsx)(eb,{text:t.methodName})]}),(0,y.jsx)(\"button\",{\"aria-label\":\"Open in editor\",\"data-with-open-in-editor-link-source-file\":!0,onClick:a,children:(0,y.jsx)(\"span\",{className:\"code-frame-icon\",\"data-icon\":\"right\",children:(0,y.jsx)(ez,{width:16,height:16})})})]})}),(0,y.jsx)(\"pre\",{className:\"code-frame-pre\",children:(0,y.jsx)(\"div\",{className:\"code-frame-lines\",children:o.map(function(e,n){var t,r,o=e.line,a=e.parsedLine,i=a.lineNumber,l=a.isErroredLine,s={};return i&&(s[\"data-nextjs-codeframe-line\"]=i),l&&(s[\"data-nextjs-codeframe-line--errored\"]=!0),(0,y.jsx)(\"div\",(t=eV({},s),r=r={children:o.map(function(e,n){return(0,y.jsx)(\"span\",{style:eV({color:e.fg?\"var(--color-\".concat(e.fg,\")\"):void 0},\"bold\"===e.decoration?{fontWeight:500}:\"italic\"===e.decoration?{fontStyle:\"italic\"}:void 0),children:e.content},\"frame-\".concat(n))})},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t),\"line-\".concat(n))})})})]})}function eW(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}var e$=[\"[data-next-mark]\",\"[data-issues-open]\",\"#nextjs-dev-tools-menu\",\"[data-nextjs-error-overlay-nav]\",\"[data-info-popover]\",\"[data-nextjs-devtools-panel-overlay]\",\"[data-nextjs-devtools-panel-footer]\",\"[data-nextjs-error-overlay-footer]\"],eZ=function(e){var n,t,r,o,a,i,l,s=e.children,c=e.className,u=e.onClose,d=e[\"aria-labelledby\"],f=e[\"aria-describedby\"],p=(e.dialogResizerRef,function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"children\",\"className\",\"onClose\",\"aria-labelledby\",\"aria-describedby\",\"dialogResizerRef\"])),h=x.useRef(null),g=(n=x.useState(\"undefined\"!=typeof document&&document.hasFocus()?\"dialog\":void 0),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||function(e,n){if(e){if(\"string\"==typeof e)return eW(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return eW(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),m=g[0],v=g[1];return r=h.current,o=e$,a=function(e){return e.preventDefault(),null==u?void 0:u()},x.useEffect(function(){if(null!=r&&null!=a){var e=function(e){!(!r||r.contains(e.target))&&(o.some(function(n){return e.target.closest(n)})||a(e))},n=r.getRootNode();return n.addEventListener(\"mouseup\",e),n.addEventListener(\"touchend\",e,{passive:!1}),function(){n.removeEventListener(\"mouseup\",e),n.removeEventListener(\"touchend\",e)}}},[a,r,o]),x.useEffect(function(){var e=function(){v(document.hasFocus()?\"dialog\":void 0)};if(null!=h.current)return window.addEventListener(\"focus\",e),window.addEventListener(\"blur\",e),function(){window.removeEventListener(\"focus\",e),window.removeEventListener(\"blur\",e)}},[]),x.useEffect(function(){var e,n,t=h.current,r=null==t?void 0:t.getRootNode(),o=(e=r,null!=(n=ShadowRoot)&&\"undefined\"!=typeof Symbol&&n[Symbol.hasInstance]?!!n[Symbol.hasInstance](e):e instanceof n)?null==r?void 0:r.activeElement:null;return null==t||t.focus(),function(){null==t||t.blur(),null==o||o.focus()}},[]),(0,y.jsx)(\"div\",(i=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({ref:h,tabIndex:-1,\"data-nextjs-dialog\":!0,role:m,\"aria-labelledby\":d,\"aria-describedby\":f,\"aria-modal\":\"true\",className:c,onKeyDown:function(e){\"Escape\"===e.key&&(null==u||u())}},p),l=l={children:s},Object.getOwnPropertyDescriptors?Object.defineProperties(i,Object.getOwnPropertyDescriptors(l)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(l)).forEach(function(e){Object.defineProperty(i,e,Object.getOwnPropertyDescriptor(l,e))}),i))},eY=function(e){var n,t,r=e.children,o=e.className,a=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"children\",\"className\"]);return(0,y.jsx)(\"div\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({\"data-nextjs-dialog-body\":!0,className:o},a),t=t={children:r},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))},eX=function(e){var n,t,r=e.children,o=e.className,a=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"children\",\"className\"]);return(0,y.jsx)(\"div\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({\"data-nextjs-dialog-content\":!0,className:o},a),t=t={children:r},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))};function eK(e){var n,t;return(0,y.jsx)(\"div\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({\"data-nextjs-dialog-header\":!0},e),t=t={children:e.children},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function eQ(){var e,n,t=(e=[\"\\n [data-nextjs-dialog-root] {\\n --next-dialog-radius: var(--rounded-xl);\\n --next-dialog-max-width: 960px;\\n --next-dialog-row-padding: 16px;\\n --next-dialog-padding: 12px;\\n --next-dialog-notch-height: 42px;\\n --next-dialog-border-width: 1px;\\n\\n display: flex;\\n flex-direction: column;\\n width: 100%;\\n max-height: calc(100% - 56px);\\n max-width: var(--next-dialog-max-width);\\n margin-right: auto;\\n margin-left: auto;\\n scale: 0.97;\\n opacity: 0;\\n transition-property: scale, opacity;\\n transition-duration: var(--transition-duration);\\n transition-timing-function: var(--timing-overlay);\\n\\n &[data-rendered='true'] {\\n opacity: 1;\\n scale: 1;\\n }\\n\\n [data-nextjs-scroll-fader][data-side='top'] {\\n left: 1px;\\n top: calc(\\n var(--next-dialog-notch-height) + var(--next-dialog-border-width)\\n );\\n width: calc(100% - var(--next-dialog-padding));\\n opacity: 0;\\n }\\n }\\n\\n [data-nextjs-dialog] {\\n outline: 0;\\n }\\n\\n [data-nextjs-dialog],\\n [data-nextjs-dialog] * {\\n &::-webkit-scrollbar {\\n width: 6px;\\n height: 6px;\\n border-radius: 0 0 1rem 1rem;\\n margin-bottom: 1rem;\\n }\\n\\n &::-webkit-scrollbar-button {\\n display: none;\\n }\\n\\n &::-webkit-scrollbar-track {\\n border-radius: 0 0 1rem 1rem;\\n background-color: var(--color-background-100);\\n }\\n\\n &::-webkit-scrollbar-thumb {\\n border-radius: 1rem;\\n background-color: var(--color-gray-500);\\n }\\n }\\n\\n /* Place overflow: hidden on this so we can break out from [data-nextjs-dialog] */\\n [data-nextjs-dialog-sizer] {\\n overflow: hidden;\\n border-radius: inherit;\\n }\\n\\n [data-nextjs-dialog-backdrop] {\\n opacity: 0;\\n transition: opacity var(--transition-duration) var(--timing-overlay);\\n }\\n\\n [data-nextjs-dialog-overlay] {\\n margin: 8px;\\n }\\n\\n [data-nextjs-dialog-overlay][data-rendered='true']\\n [data-nextjs-dialog-backdrop] {\\n opacity: 1;\\n }\\n\\n [data-nextjs-dialog-content] {\\n border: none;\\n margin: 0;\\n display: flex;\\n flex-direction: column;\\n position: relative;\\n padding: var(--next-dialog-padding);\\n }\\n\\n [data-nextjs-dialog-content] > [data-nextjs-dialog-header] {\\n flex-shrink: 0;\\n margin-bottom: 8px;\\n }\\n\\n [data-nextjs-dialog-content] > [data-nextjs-dialog-body] {\\n position: relative;\\n flex: 1 1 auto;\\n }\\n\\n @media (max-height: 812px) {\\n [data-nextjs-dialog-overlay] {\\n max-height: calc(100% - 15px);\\n }\\n }\\n\\n @media (min-width: 576px) {\\n [data-nextjs-dialog-root] {\\n --next-dialog-max-width: 540px;\\n }\\n }\\n\\n @media (min-width: 768px) {\\n [data-nextjs-dialog-root] {\\n --next-dialog-max-width: 720px;\\n }\\n }\\n\\n @media (min-width: 992px) {\\n [data-nextjs-dialog-root] {\\n --next-dialog-max-width: 960px;\\n }\\n }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return eQ=function(){return t},t}var eG=ei(eQ()),eJ=__nested_webpack_require_381207__(\"./src/next-devtools/dev-overlay/utils/cx.ts\");function e0(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function e1(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function e2(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}function e4(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return e0(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return e0(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}var e5=\"function\"==typeof x.useActionState?function(e){var n=e4(x.useActionState(function(n,t){return\"reset\"===t?{state:\"initial\"}:\"copy\"===t?navigator.clipboard?navigator.clipboard.writeText(e).then(function(){return{state:\"success\"}},function(e){return{state:\"error\",error:e}}):{state:\"error\",error:\"Copy to clipboard is not supported in this browser\"}:n},{state:\"initial\"}),3),t=n[0],r=n[1],o=n[2];return[t,function(){x.startTransition(function(){r(\"copy\")})},x.useCallback(function(){r(\"reset\")},[r]),o]}:function(e){var n=e4(x.useReducer(function(e,n){return\"reset\"===n.type?{state:\"initial\"}:\"copied\"===n.type?{state:\"success\"}:\"copying\"===n.type?{state:\"pending\"}:\"error\"===n.type?{state:\"error\",error:n.error}:e},{state:\"initial\"}),2),t=n[0],r=n[1],o=x.useCallback(function(){r({type:\"reset\"})},[]),a=\"pending\"===t.state;return[t,function(){a||(navigator.clipboard?(r({type:\"copying\"}),navigator.clipboard.writeText(e).then(function(){r({type:\"copied\"})},function(e){r({type:\"error\",error:e})})):r({type:\"error\",error:\"Copy to clipboard is not supported in this browser\"}))},o,a]};function e3(e){var n=e.actionLabel,t=e.successLabel,r=e.content,o=e.icon,a=e.disabled,i=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"actionLabel\",\"successLabel\",\"content\",\"icon\",\"disabled\"]),l=e4(e5(r),4),s=l[0],c=l[1],u=l[2],d=l[3],f=\"error\"===s.state?s.error:null;x.useEffect(function(){null!==f&&console.warn(f)},[f]),x.useEffect(function(){if(\"success\"===s.state){var e=setTimeout(function(){u()},2e3);return function(){clearTimeout(e)}}},[d,s.state,u]);var p=!navigator.clipboard||d||a||!!f,h=\"success\"===s.state?t:n,g=\"success\"===s.state?(0,y.jsx)(e9,{}):o||(0,y.jsx)(e6,{width:14,height:14,className:\"error-overlay-toolbar-button-icon\"});return(0,y.jsxs)(\"button\",e2(e1({},i),{type:\"button\",title:h,\"aria-label\":h,\"aria-disabled\":p,disabled:p,\"data-nextjs-copy-button\":!0,className:(0,eJ.cx)(i.className,\"nextjs-data-copy-button\",\"nextjs-data-copy-button--\".concat(s.state)),onClick:function(){p||c()},children:[g,\"error\"===s.state?\" \".concat(s.error):null]}))}function e6(e){return(0,y.jsx)(\"svg\",e2(e1({width:\"14\",height:\"14\",viewBox:\"0 0 14 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},e),{children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M2.406.438c-.845 0-1.531.685-1.531 1.53v6.563c0 .846.686 1.531 1.531 1.531H3.937V8.75H2.406a.219.219 0 0 1-.219-.219V1.97c0-.121.098-.219.22-.219h4.812c.12 0 .218.098.218.219v.656H8.75v-.656c0-.846-.686-1.532-1.531-1.532H2.406zm4.375 3.5c-.845 0-1.531.685-1.531 1.53v6.563c0 .846.686 1.531 1.531 1.531h4.813c.845 0 1.531-.685 1.531-1.53V5.468c0-.846-.686-1.532-1.531-1.532H6.78zm-.218 1.53c0-.12.097-.218.218-.218h4.813c.12 0 .219.098.219.219v6.562c0 .121-.098.219-.22.219H6.782a.219.219 0 0 1-.218-.219V5.47z\",fill:\"currentColor\"})}))}function e9(){return(0,y.jsx)(\"svg\",{height:\"16\",xlinkTitle:\"copied\",viewBox:\"0 0 16 16\",width:\"16\",stroke:\"currentColor\",fill:\"currentColor\",children:(0,y.jsx)(\"path\",{d:\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z\"})})}function e8(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function e7(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}var ne=function(){if(\"undefined\"==typeof window)return!1;var e=\"chrome\"in window&&window.chrome,n=window.navigator.vendor;return null!=e&&\"Google Inc.\"===n}();function nn(e){return(0,y.jsxs)(\"svg\",e7(e8({width:\"14\",height:\"14\",viewBox:\"0 0 14 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},e),{children:[(0,y.jsx)(\"mask\",{id:\"nodejs_icon_mask_a\",style:{maskType:\"luminance\"},maskUnits:\"userSpaceOnUse\",x:\"0\",y:\"0\",width:\"14\",height:\"14\",children:(0,y.jsx)(\"path\",{d:\"M6.67.089 1.205 3.256a.663.663 0 0 0-.33.573v6.339c0 .237.126.455.33.574l5.466 3.17a.66.66 0 0 0 .66 0l5.465-3.17a.664.664 0 0 0 .329-.574V3.829a.663.663 0 0 0-.33-.573L7.33.089a.663.663 0 0 0-.661 0\",fill:\"#fff\"})}),(0,y.jsx)(\"g\",{mask:\"url(#nodejs_icon_mask_a)\",children:(0,y.jsx)(\"path\",{d:\"M18.648 2.717 3.248-4.86-4.648 11.31l15.4 7.58 7.896-16.174z\",fill:\"url(#nodejs_icon_linear_gradient_b)\"})}),(0,y.jsx)(\"mask\",{id:\"nodejs_icon_mask_c\",style:{maskType:\"luminance\"},maskUnits:\"userSpaceOnUse\",x:\"1\",y:\"0\",width:\"12\",height:\"14\",children:(0,y.jsx)(\"path\",{d:\"M1.01 10.57a.663.663 0 0 0 .195.17l4.688 2.72.781.45a.66.66 0 0 0 .51.063l5.764-10.597a.653.653 0 0 0-.153-.122L9.216 1.18 7.325.087a.688.688 0 0 0-.171-.07L1.01 10.57z\",fill:\"#fff\"})}),(0,y.jsx)(\"g\",{mask:\"url(#nodejs_icon_mask_c)\",children:(0,y.jsx)(\"path\",{d:\"M-5.647 4.958 5.226 19.734l14.38-10.667L8.734-5.71-5.647 4.958z\",fill:\"url(#nodejs_icon_linear_gradient_d)\"})}),(0,y.jsxs)(\"g\",{children:[(0,y.jsx)(\"mask\",{id:\"nodejs_icon_mask_e\",style:{maskType:\"luminance\"},maskUnits:\"userSpaceOnUse\",x:\"1\",y:\"0\",width:\"13\",height:\"14\",children:(0,y.jsx)(\"path\",{d:\"M6.934.004A.665.665 0 0 0 6.67.09L1.22 3.247l5.877 10.746a.655.655 0 0 0 .235-.08l5.465-3.17a.665.665 0 0 0 .319-.453L7.126.015a.684.684 0 0 0-.189-.01\",fill:\"#fff\"})}),(0,y.jsx)(\"g\",{mask:\"url(#nodejs_icon_mask_e)\",children:(0,y.jsx)(\"path\",{d:\"M1.22.002v13.992h11.894V.002H1.22z\",fill:\"url(#nodejs_icon_linear_gradient_f)\"})})]}),(0,y.jsxs)(\"defs\",{children:[(0,y.jsxs)(\"linearGradient\",{id:\"nodejs_icon_linear_gradient_b\",x1:\"10.943\",y1:\"-1.084\",x2:\"2.997\",y2:\"15.062\",gradientUnits:\"userSpaceOnUse\",children:[(0,y.jsx)(\"stop\",{offset:\".3\",stopColor:\"#3E863D\"}),(0,y.jsx)(\"stop\",{offset:\".5\",stopColor:\"#55934F\"}),(0,y.jsx)(\"stop\",{offset:\".8\",stopColor:\"#5AAD45\"})]}),(0,y.jsxs)(\"linearGradient\",{id:\"nodejs_icon_linear_gradient_d\",x1:\"-.145\",y1:\"12.431\",x2:\"14.277\",y2:\"1.818\",gradientUnits:\"userSpaceOnUse\",children:[(0,y.jsx)(\"stop\",{offset:\".57\",stopColor:\"#3E863D\"}),(0,y.jsx)(\"stop\",{offset:\".72\",stopColor:\"#619857\"}),(0,y.jsx)(\"stop\",{offset:\"1\",stopColor:\"#76AC64\"})]}),(0,y.jsxs)(\"linearGradient\",{id:\"nodejs_icon_linear_gradient_f\",x1:\"1.225\",y1:\"6.998\",x2:\"13.116\",y2:\"6.998\",gradientUnits:\"userSpaceOnUse\",children:[(0,y.jsx)(\"stop\",{offset:\".16\",stopColor:\"#6BBF47\"}),(0,y.jsx)(\"stop\",{offset:\".38\",stopColor:\"#79B461\"}),(0,y.jsx)(\"stop\",{offset:\".47\",stopColor:\"#75AC64\"}),(0,y.jsx)(\"stop\",{offset:\".7\",stopColor:\"#659E5A\"}),(0,y.jsx)(\"stop\",{offset:\".9\",stopColor:\"#3E863D\"})]})]})]}))}function nt(e){return(0,y.jsxs)(\"svg\",e7(e8({width:\"14\",height:\"14\",viewBox:\"0 0 14 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},e),{children:[(0,y.jsx)(\"mask\",{id:\"nodejs_icon_mask_a\",style:{maskType:\"luminance\"},maskUnits:\"userSpaceOnUse\",x:\"0\",y:\"0\",width:\"14\",height:\"14\",children:(0,y.jsx)(\"path\",{d:\"M6.67.089 1.205 3.256a.663.663 0 0 0-.33.573v6.339c0 .237.126.455.33.574l5.466 3.17a.66.66 0 0 0 .66 0l5.465-3.17a.664.664 0 0 0 .329-.574V3.829a.663.663 0 0 0-.33-.573L7.33.089a.663.663 0 0 0-.661 0\",fill:\"#fff\"})}),(0,y.jsx)(\"g\",{mask:\"url(#nodejs_icon_mask_a)\",children:(0,y.jsx)(\"path\",{d:\"M18.648 2.717 3.248-4.86-4.646 11.31l15.399 7.58 7.896-16.174z\",fill:\"url(#nodejs_icon_linear_gradient_b)\"})}),(0,y.jsx)(\"mask\",{id:\"nodejs_icon_mask_c\",style:{maskType:\"luminance\"},maskUnits:\"userSpaceOnUse\",x:\"1\",y:\"0\",width:\"12\",height:\"15\",children:(0,y.jsx)(\"path\",{d:\"M1.01 10.571a.66.66 0 0 0 .195.172l4.688 2.718.781.451a.66.66 0 0 0 .51.063l5.764-10.597a.653.653 0 0 0-.153-.122L9.216 1.181 7.325.09a.688.688 0 0 0-.171-.07L1.01 10.572z\",fill:\"#fff\"})}),(0,y.jsx)(\"g\",{mask:\"url(#nodejs_icon_mask_c)\",children:(0,y.jsx)(\"path\",{d:\"M-5.647 4.96 5.226 19.736 19.606 9.07 8.734-5.707-5.647 4.96z\",fill:\"url(#nodejs_icon_linear_gradient_d)\"})}),(0,y.jsxs)(\"g\",{children:[(0,y.jsx)(\"mask\",{id:\"nodejs_icon_mask_e\",style:{maskType:\"luminance\"},maskUnits:\"userSpaceOnUse\",x:\"1\",y:\"0\",width:\"13\",height:\"14\",children:(0,y.jsx)(\"path\",{d:\"M6.935.003a.665.665 0 0 0-.264.085l-5.45 3.158 5.877 10.747a.653.653 0 0 0 .235-.082l5.465-3.17a.665.665 0 0 0 .319-.452L7.127.014a.684.684 0 0 0-.189-.01\",fill:\"#fff\"})}),(0,y.jsx)(\"g\",{mask:\"url(#nodejs_icon_mask_e)\",children:(0,y.jsx)(\"path\",{d:\"M1.222.001v13.992h11.893V0H1.222z\",fill:\"url(#nodejs_icon_linear_gradient_f)\"})})]}),(0,y.jsxs)(\"defs\",{children:[(0,y.jsxs)(\"linearGradient\",{id:\"nodejs_icon_linear_gradient_b\",x1:\"10.944\",y1:\"-1.084\",x2:\"2.997\",y2:\"15.062\",gradientUnits:\"userSpaceOnUse\",children:[(0,y.jsx)(\"stop\",{offset:\".3\",stopColor:\"#676767\"}),(0,y.jsx)(\"stop\",{offset:\".5\",stopColor:\"#858585\"}),(0,y.jsx)(\"stop\",{offset:\".8\",stopColor:\"#989A98\"})]}),(0,y.jsxs)(\"linearGradient\",{id:\"nodejs_icon_linear_gradient_d\",x1:\"-.145\",y1:\"12.433\",x2:\"14.277\",y2:\"1.819\",gradientUnits:\"userSpaceOnUse\",children:[(0,y.jsx)(\"stop\",{offset:\".57\",stopColor:\"#747474\"}),(0,y.jsx)(\"stop\",{offset:\".72\",stopColor:\"#707070\"}),(0,y.jsx)(\"stop\",{offset:\"1\",stopColor:\"#929292\"})]}),(0,y.jsxs)(\"linearGradient\",{id:\"nodejs_icon_linear_gradient_f\",x1:\"1.226\",y1:\"6.997\",x2:\"13.117\",y2:\"6.997\",gradientUnits:\"userSpaceOnUse\",children:[(0,y.jsx)(\"stop\",{offset:\".16\",stopColor:\"#878787\"}),(0,y.jsx)(\"stop\",{offset:\".38\",stopColor:\"#A9A9A9\"}),(0,y.jsx)(\"stop\",{offset:\".47\",stopColor:\"#A5A5A5\"}),(0,y.jsx)(\"stop\",{offset:\".7\",stopColor:\"#8F8F8F\"}),(0,y.jsx)(\"stop\",{offset:\".9\",stopColor:\"#626262\"})]})]})]}))}var nr=\"Learn more about enabling Node.js inspector for server code with Chrome DevTools\";function no(e){var n=e.devtoolsFrontendUrl||\"\";return n&&ne?(0,y.jsx)(e3,{\"data-nextjs-data-runtime-error-copy-devtools-url\":!0,className:\"nodejs-inspector-button\",actionLabel:\"Copy Chrome DevTools URL\",successLabel:\"Copied\",content:n,icon:(0,y.jsx)(nn,{className:\"error-overlay-toolbar-button-icon\",width:14,height:14})}):(0,y.jsx)(\"a\",{title:nr,\"aria-label\":nr,className:\"nodejs-inspector-button\",href:\"https://nextjs.org/docs/app/building-your-application/configuring/debugging#server-side-code\",target:\"_blank\",rel:\"noopener noreferrer\",children:(0,y.jsx)(nt,{className:\"error-overlay-toolbar-button-icon\",width:14,height:14})})}function na(e){var n=e.error;return(0,y.jsx)(e3,{\"data-nextjs-data-runtime-error-copy-stack\":!0,className:\"copy-stack-trace-button\",actionLabel:\"Copy Stack Trace\",successLabel:\"Stack Trace Copied\",content:n.stack||\"\",disabled:!n.stack})}function ni(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function nl(e){if(Array.isArray(e))return e}function ns(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}function nc(e,n){return nl(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||nd(e,n)||ns()}function nu(e){return nl(e)||function(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}(e)||nd(e)||ns()}function nd(e,n){if(e){if(\"string\"==typeof e)return ni(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return ni(e,n)}}var nf=\"https://react.dev/link/hydration-mismatch\",np=\"https://nextjs.org/docs/messages/react-hydration-error\",nh=[/^In HTML, (.+?) cannot be a child of <(.+?)>\\.(.*)\\nThis will cause a hydration error\\.(.*)/,/^In HTML, (.+?) cannot be a descendant of <(.+?)>\\.\\nThis will cause a hydration error\\.(.*)/,/^In HTML, text nodes cannot be a child of <(.+?)>\\.\\nThis will cause a hydration error\\./,/^In HTML, whitespace text nodes cannot be a child of <(.+?)>\\. Make sure you don't have any extra whitespace between tags on each line of your source code\\.\\nThis will cause a hydration error\\./];function ng(e){return nh.some(function(n){return n.test(e)})}var nm=[\"https://nextjs.org\",\"https://react.dev\"];function nv(e){return nm.some(function(n){return e.startsWith(n)})}function nb(e){var n=function(e){var n,t,r,o=(n=e,t=nv,r=Array.from(n.matchAll(/https?:\\/\\/[^\\s/$.?#].[^\\s)'\"]*/gi),function(e){return e[0]}),t?r.filter(function(e){return t(e)}):r);if(0===o.length)return null;var a=o[0];return a===nf?np:a}(e.errorMessage);return n?(0,y.jsx)(\"a\",{title:\"Go to related documentation\",\"aria-label\":\"Go to related documentation\",className:\"docs-link-button\",href:n,target:\"_blank\",rel:\"noopener noreferrer\",children:(0,y.jsx)(ny,{className:\"error-overlay-toolbar-button-icon\",width:14,height:14})}):(0,y.jsx)(\"button\",{title:\"No related documentation found\",\"aria-label\":\"No related documentation found\",className:\"docs-link-button\",disabled:!0,children:(0,y.jsx)(ny,{className:\"error-overlay-toolbar-button-icon\",width:14,height:14})})}function ny(e){var n,t;return(0,y.jsx)(\"svg\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({width:\"14\",height:\"14\",viewBox:\"0 0 14 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},e),t=t={children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M0 .875h4.375C5.448.875 6.401 1.39 7 2.187A3.276 3.276 0 0 1 9.625.875H14v11.156H9.4c-.522 0-1.023.208-1.392.577l-.544.543h-.928l-.544-.543c-.369-.37-.87-.577-1.392-.577H0V.875zm6.344 3.281a1.969 1.969 0 0 0-1.969-1.968H1.312v8.53H4.6c.622 0 1.225.177 1.744.502V4.156zm1.312 7.064V4.156c0-1.087.882-1.968 1.969-1.968h3.063v8.53H9.4c-.622 0-1.225.177-1.744.502z\",fill:\"currentColor\"})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function nx(e){var n=e.error,t=e.debugInfo,r=e.feedbackButton;return(0,y.jsxs)(\"span\",{className:\"error-overlay-toolbar\",children:[r,(0,y.jsx)(na,{error:n}),(0,y.jsx)(nb,{errorMessage:n.message}),(0,y.jsx)(no,{devtoolsFrontendUrl:null==t?void 0:t.devtoolsFrontendUrl})]})}function nw(e){var n,t;return(0,y.jsx)(\"svg\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",className:\"thumbs-up-icon\"},e),t=t={children:(0,y.jsx)(\"g\",{id:\"thumb-up-16\",children:(0,y.jsx)(\"path\",{id:\"Union\",fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M6.89531 2.23959C6.72984 2.1214 6.5 2.23968 6.5 2.44303V5.24989C6.5 6.21639 5.7165 6.99989 4.75 6.99989H2.5V13.4999H12.1884C12.762 13.4999 13.262 13.1095 13.4011 12.5531L14.4011 8.55306C14.5984 7.76412 14.0017 6.99989 13.1884 6.99989H9.25H8.5V6.24989V3.51446C8.5 3.43372 8.46101 3.35795 8.39531 3.31102L6.89531 2.23959ZM5 2.44303C5 1.01963 6.6089 0.191656 7.76717 1.01899L9.26717 2.09042C9.72706 2.41892 10 2.94929 10 3.51446V5.49989H13.1884C14.9775 5.49989 16.2903 7.18121 15.8563 8.91686L14.8563 12.9169C14.5503 14.1411 13.4503 14.9999 12.1884 14.9999H1.75H1V14.2499V6.24989V5.49989H1.75H4.75C4.88807 5.49989 5 5.38796 5 5.24989V2.44303Z\",fill:\"currentColor\"})})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function nj(e){var n,t;return(0,y.jsx)(\"svg\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",className:\"thumbs-down-icon\"},e),t=t={children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M5.89531 12.7603C5.72984 12.8785 5.5 12.7602 5.5 12.5569V9.75C5.5 8.7835 4.7165 8 3.75 8H1.5V1.5H11.1884C11.762 1.5 12.262 1.89037 12.4011 2.44683L13.4011 6.44683C13.5984 7.23576 13.0017 8 12.1884 8H8.25H7.5V8.75V11.4854C7.5 11.5662 7.46101 11.6419 7.39531 11.6889L5.89531 12.7603ZM4 12.5569C4 13.9803 5.6089 14.8082 6.76717 13.9809L8.26717 12.9095C8.72706 12.581 9 12.0506 9 11.4854V9.5H12.1884C13.9775 9.5 15.2903 7.81868 14.8563 6.08303L13.8563 2.08303C13.5503 0.858816 12.4503 0 11.1884 0H0.75H0V0.75V8.75V9.5H0.75H3.75C3.88807 9.5 4 9.61193 4 9.75V12.5569Z\",fill:\"currentColor\"})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function nk(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function nA(e,n,t,r,o,a,i){try{var l=e[a](i),s=l.value}catch(e){t(e);return}l.done?n(s):Promise.resolve(s).then(r,o)}function nO(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function nC(e){var n,t,r=e.errorCode,o=e.className,a=(n=(0,x.useState)({}),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||function(e,n){if(e){if(\"string\"==typeof e)return nk(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return nk(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),i=a[0],l=a[1],s=i[r],c=false,u=(0,x.useCallback)(function(e){var n;return(n=function(){return function(e,n){var t,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create((\"function\"==typeof Iterator?Iterator:Object).prototype);return i.next=l(0),i.throw=l(1),i.return=l(2),\"function\"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function l(l){return function(s){var c=[l,s];if(t)throw TypeError(\"Generator is already executing.\");for(;i&&(i=0,c[0]&&(a=0)),a;)try{if(t=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,r=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=n.call(e,a)}catch(e){c=[6,e],r=0}finally{t=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}(this,function(n){switch(n.label){case 0:l(function(n){var t,o;return t=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){nO(e,n,t[n])})}return e}({},n),o=null!=(o=nO({},r,e))?o:{},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(o)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(o)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(o,e))}),t}),n.label=1;case 1:return n.trys.push([1,3,,4]),[4,fetch(\"\".concat( false||\"\",\"/__nextjs_error_feedback?\").concat(new URLSearchParams({errorCode:r,wasHelpful:e.toString()})))];case 2:return n.sent().ok||console.error(\"Failed to record feedback on the server.\"),[3,4];case 3:return console.error(\"Failed to record feedback:\",n.sent()),[3,4];case 4:return[2]}})},function(){var e=this,t=arguments;return new Promise(function(r,o){var a=n.apply(e,t);function i(e){nA(a,r,o,i,l,\"next\",e)}function l(e){nA(a,r,o,i,l,\"throw\",e)}i(void 0)})})()},[r]);return(0,y.jsx)(\"div\",{className:(0,eJ.cx)(\"error-feedback\",o),role:\"region\",\"aria-label\":\"Error feedback\",children:void 0!==s?(0,y.jsx)(\"p\",{className:\"error-feedback-thanks\",role:\"status\",\"aria-live\":\"polite\",children:\"Thanks for your feedback!\"}):(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(\"p\",{children:(0,y.jsx)(\"a\",{href:\"https://nextjs.org/telemetry#error-feedback\",rel:\"noopener noreferrer\",target:\"_blank\",children:\"Was this helpful?\"})}),(0,y.jsx)(\"button\",{\"aria-disabled\":c?\"true\":void 0,\"aria-label\":\"Mark as helpful\",onClick:c?void 0:function(){return u(!0)},className:(0,eJ.cx)(\"feedback-button\",!0===s&&\"voted\"),title:c?\"Feedback disabled due to setting NEXT_TELEMETRY_DISABLED\":void 0,type:\"button\",children:(0,y.jsx)(nw,{\"aria-hidden\":\"true\"})}),(0,y.jsx)(\"button\",{\"aria-disabled\":c?\"true\":void 0,\"aria-label\":\"Mark as not helpful\",onClick:c?void 0:function(){return u(!1)},className:(0,eJ.cx)(\"feedback-button\",!1===s&&\"voted\"),title:c?\"Feedback disabled due to setting NEXT_TELEMETRY_DISABLED\":void 0,type:\"button\",children:(0,y.jsx)(nj,{\"aria-hidden\":\"true\",style:{translate:\"1px 1px\"}})})]})})}function nS(e){var n=e.errorCode;return(0,y.jsx)(\"footer\",{\"data-nextjs-error-overlay-footer\":!0,className:\"error-overlay-footer\",children:n?(0,y.jsx)(nC,{className:\"error-feedback\",errorCode:n}):null})}var nE=\"\\n .error-overlay-footer {\\n display: flex;\\n flex-direction: row;\\n justify-content: space-between;\\n\\n gap: 8px;\\n padding: 12px;\\n background: var(--color-background-200);\\n border-top: 1px solid var(--color-gray-400);\\n }\\n\\n .error-feedback {\\n margin-left: auto;\\n\\n p {\\n font-size: var(--size-14);\\n font-weight: 500;\\n margin: 0;\\n }\\n }\\n\\n \".concat(\"\\n .error-feedback {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n white-space: nowrap;\\n color: var(--color-gray-900);\\n }\\n\\n .error-feedback-thanks {\\n height: var(--size-24);\\n display: flex;\\n align-items: center;\\n padding-right: 4px; /* To match the 4px inner padding of the thumbs up and down icons */\\n }\\n\\n .feedback-button {\\n background: none;\\n border: none;\\n border-radius: var(--rounded-md);\\n width: var(--size-24);\\n height: var(--size-24);\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n cursor: pointer;\\n\\n &:focus {\\n outline: var(--focus-ring);\\n }\\n\\n &:hover {\\n background: var(--color-gray-alpha-100);\\n }\\n\\n &:active {\\n background: var(--color-gray-alpha-200);\\n }\\n }\\n\\n .feedback-button[aria-disabled='true'] {\\n opacity: 0.7;\\n cursor: not-allowed;\\n }\\n\\n .feedback-button.voted {\\n background: var(--color-gray-alpha-200);\\n }\\n\\n .thumbs-up-icon,\\n .thumbs-down-icon {\\n color: var(--color-gray-900);\\n width: var(--size-16);\\n height: var(--size-16);\\n }\\n\",\"\\n\");function n_(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function nP(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return n_(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return n_(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function nz(e){var n=e.errorMessage,t=nP((0,x.useState)(!1),2),r=t[0],o=t[1],a=nP((0,x.useState)(!1),2),i=a[0],l=a[1],s=(0,x.useRef)(null);return(0,x.useLayoutEffect)(function(){s.current&&l(s.current.scrollHeight>200)},[n]),(0,y.jsxs)(\"div\",{className:\"nextjs__container_errors_wrapper\",children:[(0,y.jsx)(\"p\",{ref:s,id:\"nextjs__container_errors_desc\",className:\"nextjs__container_errors_desc \".concat(i&&!r?\"truncated\":\"\"),children:n}),i&&!r&&(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(\"div\",{className:\"nextjs__container_errors_gradient_overlay\"}),(0,y.jsx)(\"button\",{onClick:function(){return o(!0)},className:\"nextjs__container_errors_expand_button\",\"aria-expanded\":r,\"aria-controls\":\"nextjs__container_errors_desc\",children:\"Show More\"})]})]})}function nL(e){var n=e.errorType;return(0,y.jsx)(\"span\",{id:\"nextjs__container_errors_label\",className:\"nextjs__container_errors_label\",children:n})}function nT(e){var n=e.title,t=e.className;return(0,y.jsx)(\"svg\",{width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",\"aria-label\":n,className:t,children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M9.24996 12.0608L8.71963 11.5304L5.89641 8.70722C5.50588 8.3167 5.50588 7.68353 5.89641 7.29301L8.71963 4.46978L9.24996 3.93945L10.3106 5.00011L9.78029 5.53044L7.31062 8.00011L9.78029 10.4698L10.3106 11.0001L9.24996 12.0608Z\",fill:\"currentColor\"})})}function nR(e){var n=e.title,t=e.className;return(0,y.jsx)(\"svg\",{width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",className:t,\"aria-label\":n,children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M6.75011 3.93945L7.28044 4.46978L10.1037 7.29301C10.4942 7.68353 10.4942 8.3167 10.1037 8.70722L7.28044 11.5304L6.75011 12.0608L5.68945 11.0001L6.21978 10.4698L8.68945 8.00011L6.21978 5.53044L5.68945 5.00011L6.75011 3.93945Z\",fill:\"currentColor\"})})}function nN(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function nD(e){var n,t,r=e.runtimeErrors,o=e.activeIdx,a=e.onActiveIndexChange,i=(0,x.useCallback)(function(){return(0,x.startTransition)(function(){o>0&&a(Math.max(0,o-1))})},[o,a]),l=(0,x.useCallback)(function(){return(0,x.startTransition)(function(){o<r.length-1&&a(Math.max(0,Math.min(r.length-1,o+1)))})},[o,r.length,a]),s=(0,x.useRef)(null),c=(0,x.useRef)(null),u=(n=(0,x.useState)(null),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||function(e,n){if(e){if(\"string\"==typeof e)return nN(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return nN(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),d=u[0],f=u[1],p=(0,x.useCallback)(function(e){f(e)},[]);return(0,x.useEffect)(function(){var e=function(e){\"ArrowLeft\"===e.key?(e.preventDefault(),e.stopPropagation(),i&&i()):\"ArrowRight\"===e.key&&(e.preventDefault(),e.stopPropagation(),l&&l())};if(null!=d){var n=d.getRootNode(),t=self.document;return n.addEventListener(\"keydown\",e),n!==t&&t.addEventListener(\"keydown\",e),function(){n.removeEventListener(\"keydown\",e),n!==t&&t.removeEventListener(\"keydown\",e)}}},[d,l,i]),(0,x.useEffect)(function(){if(null!=d){var e,n,t=d.getRootNode();if(e=t,null!=(n=ShadowRoot)&&\"undefined\"!=typeof Symbol&&n[Symbol.hasInstance]?!!n[Symbol.hasInstance](e):e instanceof n){var a=t.activeElement;0===o?s.current&&a===s.current&&s.current.blur():o===r.length-1&&c.current&&a===c.current&&c.current.blur()}}},[d,o,r.length]),(0,y.jsxs)(\"nav\",{className:\"error-overlay-pagination dialog-exclude-closing-from-outside-click\",ref:p,children:[(0,y.jsx)(\"button\",{ref:s,type:\"button\",disabled:0===o,\"aria-disabled\":0===o,onClick:i,\"data-nextjs-dialog-error-previous\":!0,className:\"error-overlay-pagination-button\",children:(0,y.jsx)(nT,{title:\"previous\",className:\"error-overlay-pagination-button-icon\"})}),(0,y.jsxs)(\"div\",{className:\"error-overlay-pagination-count\",children:[(0,y.jsxs)(\"span\",{\"data-nextjs-dialog-error-index\":o,children:[o+1,\"/\"]}),(0,y.jsx)(\"span\",{\"data-nextjs-dialog-header-total-count\":!0,children:r.length||1})]}),(0,y.jsx)(\"button\",{ref:c,type:\"button\",disabled:o>=r.length-1,\"aria-disabled\":o>=r.length-1,onClick:l,\"data-nextjs-dialog-error-next\":!0,className:\"error-overlay-pagination-button\",children:(0,y.jsx)(nR,{title:\"next\",className:\"error-overlay-pagination-button-icon\"})})]})}function nB(e){var n=e.installed,t=e.staleness,r=e.expected,o=\"\",a=\"\",i=\"\",l=\"Next.js \".concat(n);switch(t){case\"newer-than-npm\":case\"fresh\":o=l,a=\"Latest available version is detected (\".concat(n,\").\"),i=\"fresh\";break;case\"stale-patch\":case\"stale-minor\":o=\"\".concat(l,\" (stale)\"),a=\"There is a newer version (\".concat(r,\") available, upgrade recommended! \"),i=\"stale\";break;case\"stale-major\":o=\"\".concat(l,\" (outdated)\"),a=\"An outdated version detected (latest is \".concat(r,\"), upgrade is highly recommended!\"),i=\"outdated\";break;case\"stale-prerelease\":o=\"\".concat(l,\" (stale)\"),a=\"There is a newer canary version (\".concat(r,\") available, please upgrade! \"),i=\"stale\";break;case\"unknown\":o=\"\".concat(l,\" (unknown)\"),a=\"No Next.js version data was found.\",i=\"unknown\"}return{text:o,indicatorClass:i,title:a}}function nM(e){var n,t;return(0,y.jsx)(\"svg\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({width:\"14\",height:\"14\",viewBox:\"0 0 14 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},e),t=t={children:(0,y.jsx)(\"circle\",{cx:\"7\",cy:\"7\",r:\"5.5\",strokeWidth:\"3\"})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function nI(e){var n=e.versionInfo,t=e.bundlerName,r=n.staleness,o=nB(n),a=o.text,i=o.indicatorClass,l=o.title,s=\"Turbopack\"===t;return r.startsWith(\"stale\")?(0,y.jsxs)(\"a\",{className:\"nextjs-container-build-error-version-status dialog-exclude-closing-from-outside-click\",target:\"_blank\",rel:\"noopener noreferrer\",href:\"https://nextjs.org/docs/messages/version-staleness\",children:[(0,y.jsx)(nM,{className:(0,eJ.cx)(\"version-staleness-indicator\",i)}),(0,y.jsx)(\"span\",{\"data-nextjs-version-checker\":!0,title:l,children:a}),(0,y.jsx)(\"span\",{className:(0,eJ.cx)(s&&\"turbopack-text\"),children:t})]}):(0,y.jsxs)(\"span\",{className:\"nextjs-container-build-error-version-status dialog-exclude-closing-from-outside-click\",children:[(0,y.jsx)(nM,{className:(0,eJ.cx)(\"version-staleness-indicator\",i)}),(0,y.jsx)(\"span\",{\"data-nextjs-version-checker\":!0,title:l,children:a}),(0,y.jsx)(\"span\",{className:(0,eJ.cx)(s&&\"turbopack-text\"),children:t})]})}function nH(e){var n=e.runtimeErrors,t=e.activeIdx,r=e.setActiveIndex,o=e.versionInfo,a=\"Webpack\"||0;return(0,y.jsxs)(\"div\",{\"data-nextjs-error-overlay-nav\":!0,children:[(0,y.jsx)(nF,{side:\"left\",children:(0,y.jsx)(nD,{runtimeErrors:null!=n?n:[],activeIdx:null!=t?t:0,onActiveIndexChange:null!=r?r:function(){}})}),o&&(0,y.jsx)(nF,{side:\"right\",children:(0,y.jsx)(nI,{versionInfo:o,bundlerName:a})})]})}function nF(e){var n=e.children,t=e.side;return(0,y.jsxs)(\"div\",{className:\"error-overlay-notch\",\"data-side\":void 0===t?\"left\":t,children:[n,(0,y.jsx)(nU,{})]})}function nU(){return(0,y.jsxs)(\"svg\",{width:\"60\",height:\"42\",viewBox:\"0 0 60 42\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",className:\"error-overlay-notch-tail\",preserveAspectRatio:\"none\",children:[(0,y.jsxs)(\"mask\",{id:\"error_overlay_nav_mask0_2667_14687\",style:{maskType:\"alpha\"},maskUnits:\"userSpaceOnUse\",x:\"0\",y:\"-1\",width:\"60\",height:\"43\",children:[(0,y.jsxs)(\"mask\",{id:\"error_overlay_nav_path_1_outside_1_2667_14687\",maskUnits:\"userSpaceOnUse\",x:\"0\",y:\"-1\",width:\"60\",height:\"43\",fill:\"black\",children:[(0,y.jsx)(\"rect\",{fill:\"white\",y:\"-1\",width:\"60\",height:\"43\"}),(0,y.jsx)(\"path\",{d:\"M1 0L8.0783 0C15.772 0 22.7836 4.41324 26.111 11.3501L34.8889 29.6498C38.2164 36.5868 45.228 41 52.9217 41H60H1L1 0Z\"})]}),(0,y.jsx)(\"path\",{d:\"M1 0L8.0783 0C15.772 0 22.7836 4.41324 26.111 11.3501L34.8889 29.6498C38.2164 36.5868 45.228 41 52.9217 41H60H1L1 0Z\",fill:\"white\"}),(0,y.jsx)(\"path\",{d:\"M1 0V-1H0V0L1 0ZM1 41H0V42H1V41ZM34.8889 29.6498L33.9873 30.0823L34.8889 29.6498ZM26.111 11.3501L27.0127 10.9177L26.111 11.3501ZM1 1H8.0783V-1H1V1ZM60 40H1V42H60V40ZM2 41V0L0 0L0 41H2ZM25.2094 11.7826L33.9873 30.0823L35.7906 29.2174L27.0127 10.9177L25.2094 11.7826ZM52.9217 42H60V40H52.9217V42ZM33.9873 30.0823C37.4811 37.3661 44.8433 42 52.9217 42V40C45.6127 40 38.9517 35.8074 35.7906 29.2174L33.9873 30.0823ZM8.0783 1C15.3873 1 22.0483 5.19257 25.2094 11.7826L27.0127 10.9177C23.5188 3.6339 16.1567 -1 8.0783 -1V1Z\",fill:\"black\",mask:\"url(#error_overlay_nav_path_1_outside_1_2667_14687)\"})]}),(0,y.jsxs)(\"g\",{mask:\"url(#error_overlay_nav_mask0_2667_14687)\",children:[(0,y.jsxs)(\"mask\",{id:\"error_overlay_nav_path_3_outside_2_2667_14687\",maskUnits:\"userSpaceOnUse\",x:\"-1\",y:\"0.0244141\",width:\"60\",height:\"43\",fill:\"black\",children:[(0,y.jsx)(\"rect\",{fill:\"white\",x:\"-1\",y:\"0.0244141\",width:\"60\",height:\"43\"}),(0,y.jsx)(\"path\",{d:\"M0 1.02441H7.0783C14.772 1.02441 21.7836 5.43765 25.111 12.3746L33.8889 30.6743C37.2164 37.6112 44.228 42.0244 51.9217 42.0244H59H0L0 1.02441Z\"})]}),(0,y.jsx)(\"path\",{d:\"M0 1.02441H7.0783C14.772 1.02441 21.7836 5.43765 25.111 12.3746L33.8889 30.6743C37.2164 37.6112 44.228 42.0244 51.9217 42.0244H59H0L0 1.02441Z\",fill:\"var(--background-color)\"}),(0,y.jsx)(\"path\",{d:\"M0 1.02441L0 0.0244141H-1V1.02441H0ZM0 42.0244H-1V43.0244H0L0 42.0244ZM33.8889 30.6743L32.9873 31.1068L33.8889 30.6743ZM25.111 12.3746L26.0127 11.9421L25.111 12.3746ZM0 2.02441H7.0783V0.0244141H0L0 2.02441ZM59 41.0244H0L0 43.0244H59V41.0244ZM1 42.0244L1 1.02441H-1L-1 42.0244H1ZM24.2094 12.8071L32.9873 31.1068L34.7906 30.2418L26.0127 11.9421L24.2094 12.8071ZM51.9217 43.0244H59V41.0244H51.9217V43.0244ZM32.9873 31.1068C36.4811 38.3905 43.8433 43.0244 51.9217 43.0244V41.0244C44.6127 41.0244 37.9517 36.8318 34.7906 30.2418L32.9873 31.1068ZM7.0783 2.02441C14.3873 2.02441 21.0483 6.21699 24.2094 12.8071L26.0127 11.9421C22.5188 4.65831 15.1567 0.0244141 7.0783 0.0244141V2.02441Z\",fill:\"var(--stroke-color)\",mask:\"url(#error_overlay_nav_path_3_outside_2_2667_14687)\"})]})]})}function nV(e){var n,t,r=e.children,o=e.onClose,a=e.footer,i=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"children\",\"onClose\",\"footer\"]);return(0,y.jsxs)(\"div\",{className:\"error-overlay-dialog-container\",children:[(0,y.jsx)(eZ,(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({\"aria-labelledby\":\"nextjs__container_errors_label\",\"aria-describedby\":\"nextjs__container_errors_desc\",className:\"error-overlay-dialog-scroll\",onClose:o},i),t=t={children:r},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n)),a]})}function nq(e){var n=e.children;return(0,y.jsx)(eK,{className:\"nextjs-container-errors-header\",children:n})}function nW(e){var n=e.children;return(0,y.jsx)(eY,{className:\"nextjs-container-errors-body\",children:n})}var n$=0,nZ=function(e){var r,o,a=e.className,i=e.children,l=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"className\",\"children\"]);return x.useEffect(function(){return setTimeout(function(){if(!(n$++>0)){var e=window.innerWidth-document.documentElement.clientWidth;e>0&&(n=document.body.style.paddingRight,document.body.style.paddingRight=\"\".concat(e,\"px\")),t=document.body.style.overflow,document.body.style.overflow=\"hidden\"}}),function(){setTimeout(function(){0!==n$&&0==--n$&&(void 0!==n&&(document.body.style.paddingRight=n,n=void 0),void 0!==t&&(document.body.style.overflow=t,t=void 0))})}},[]),(0,y.jsx)(\"div\",(r=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({\"data-nextjs-dialog-overlay\":!0,className:a},l),o=o={children:i},Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(o)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(o)).forEach(function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(o,e))}),r))};function nY(e){var n,t,r=e.children,o=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"children\"]);return(0,y.jsx)(nZ,(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({},o),t=t={children:r},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function nX(e){var n=Math.min(e.errorCount-e.activeIdx-1,2);return(0,y.jsx)(\"div\",{\"aria-hidden\":!0,className:\"error-overlay-bottom-stack\",children:(0,y.jsxs)(\"div\",{className:\"error-overlay-bottom-stack-stack\",\"data-stack-count\":n,children:[(0,y.jsx)(\"div\",{className:\"error-overlay-bottom-stack-layer error-overlay-bottom-stack-layer-1\",children:\"1\"}),(0,y.jsx)(\"div\",{className:\"error-overlay-bottom-stack-layer error-overlay-bottom-stack-layer-2\",children:\"2\"})]})})}function nK(e){var n=e.environmentName;return(0,y.jsx)(\"span\",{\"data-nextjs-environment-name-label\":!0,children:n})}var nQ=__nested_webpack_require_381207__(\"./src/next-devtools/dev-overlay/components/errors/dev-tools-indicator/utils.ts\"),nG=(0,x.forwardRef)(function(e,n){var t=e.stop,r=e.blur,o=e.side,a=e.style,i=e.height;return(0,y.jsx)(\"div\",{ref:n,\"aria-hidden\":!0,\"data-nextjs-scroll-fader\":!0,className:\"nextjs-scroll-fader\",\"data-side\":o,style:function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({\"--stop\":t,\"--blur\":r,\"--height\":\"\".concat(i,\"px\")},a)})});function nJ(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function n0(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return nJ(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return nJ(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}var n1=(0,x.forwardRef)(function(e,n){var t,r,o,a,i,l,s,c,u,d,f=e.children,p=e.measure,h=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"children\",\"measure\"]),g=(0,x.useRef)(null),m=n0((t=g,r=p,a=(o=n0((0,x.useState)(0),2))[0],i=o[1],s=(l=n0((0,x.useState)(!0),2))[0],c=l[1],(0,x.useEffect)(function(){if(r){var e,n=t.current;if(n){var o=new ResizeObserver(function(n){var t=n0(n,1)[0].contentRect;clearTimeout(e),e=window.setTimeout(function(){c(!1)},100),i(t.height)});return o.observe(n),function(){return o.disconnect()}}}},[r]),[a,s]),2),v=m[0],b=m[1];return(0,y.jsx)(\"div\",(u=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({},h),d=d={ref:n,style:{height:b?\"auto\":v,transition:\"height 250ms var(--timing-swift)\"},children:(0,y.jsx)(\"div\",{ref:g,children:f})},Object.getOwnPropertyDescriptors?Object.defineProperties(u,Object.getOwnPropertyDescriptors(d)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(d)).forEach(function(e){Object.defineProperty(u,e,Object.getOwnPropertyDescriptor(d,e))}),u))});function n2(e){var n=e.fixed,t=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"fixed\"]);return(0,y.jsx)(\"div\",function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({\"data-nextjs-dialog-backdrop\":!0,\"data-nextjs-dialog-backdrop-fixed\":!!n||void 0},t))}function n4(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function n5(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function n3(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}function n6(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return n4(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return n4(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function n9(e){var n=e.errorMessage,t=e.errorType,r=e.children,o=e.errorCode,a=e.errorCount,i=e.error,l=e.debugInfo,s=e.isBuildError,c=e.onClose,u=e.versionInfo,d=e.runtimeErrors,f=e.activeIdx,p=e.setActiveIndex,h=e.isTurbopack,g=e.dialogResizerRef,m=e.rendered,v=void 0===m||m,b=e.transitionDurationMs,w={\"data-rendered\":v,style:{\"--transition-duration\":\"\".concat(b,\"ms\")}},j=n6(x.useState(!!b),2),k=j[0],A=j[1],O=x.useRef(null),C=!!o,S=x.useRef(null);return(0,nQ.P5)(S,null,v),(0,y.jsxs)(nY,n3(n5({},w),{children:[(0,y.jsx)(n2,{fixed:s}),(0,y.jsxs)(\"div\",n3(n5({\"data-nextjs-dialog-root\":!0,onTransitionEnd:function(e){var n=e.propertyName,t=e.target;\"scale\"===n&&t===S.current&&A(!1)},ref:S},w),{children:[(0,y.jsx)(nH,{runtimeErrors:d,activeIdx:f,setActiveIndex:p,versionInfo:u,isTurbopack:h}),(0,y.jsxs)(nV,{onClose:c,dialogResizerRef:g,\"data-has-footer\":C,onScroll:function(e){if(O.current){var n,t,r=(n=e.currentTarget.scrollTop/17,Math.min(Math.max(n,(t=n6([0,1],2))[0]),t[1]));O.current.style.opacity=String(r)}},footer:C&&(0,y.jsx)(nS,{errorCode:o}),children:[(0,y.jsx)(n1,{ref:g,measure:!k,\"data-nextjs-dialog-sizer\":!0,children:(0,y.jsxs)(eX,{children:[(0,y.jsxs)(nq,{children:[(0,y.jsxs)(\"div\",{className:\"nextjs__container_errors__error_title\",\"data-nextjs-error-code\":o,children:[(0,y.jsxs)(\"span\",{\"data-nextjs-error-label-group\":!0,children:[(0,y.jsx)(nL,{errorType:t}),i.environmentName&&(0,y.jsx)(nK,{environmentName:i.environmentName})]}),(0,y.jsx)(nx,{error:i,debugInfo:l})]}),(0,y.jsx)(nz,{errorMessage:n})]}),(0,y.jsx)(nW,{children:r})]})}),(0,y.jsx)(nX,{errorCount:a,activeIdx:null!=f?f:0})]}),(0,y.jsx)(nG,{ref:O,side:\"top\",stop:\"50%\",blur:\"4px\",height:48})]}))]}))}var n8=\"\\n \".concat(\"\\n [data-nextjs-dialog-overlay] {\\n padding: initial;\\n top: 10vh;\\n }\\n\",\"\\n \").concat(\"\\n .error-overlay-dialog-container {\\n -webkit-font-smoothing: antialiased;\\n display: flex;\\n flex-direction: column;\\n background: var(--color-background-100);\\n background-clip: padding-box;\\n border: var(--next-dialog-border-width) solid var(--color-gray-400);\\n border-radius: 0 0 var(--next-dialog-radius) var(--next-dialog-radius);\\n box-shadow: var(--shadow-menu);\\n position: relative;\\n overflow: hidden;\\n }\\n\\n .error-overlay-dialog-scroll {\\n overflow-y: auto;\\n height: 100%;\\n }\\n\",\"\\n \").concat(\"\\n .nextjs-container-errors-header {\\n position: relative;\\n }\\n .nextjs-container-errors-header > h1 {\\n font-size: var(--size-20);\\n line-height: var(--size-24);\\n font-weight: bold;\\n margin: calc(16px * 1.5) 0;\\n color: var(--color-title-h1);\\n }\\n .nextjs-container-errors-header small {\\n font-size: var(--size-14);\\n color: var(--color-accents-1);\\n margin-left: 16px;\\n }\\n .nextjs-container-errors-header small > span {\\n font-family: var(--font-stack-monospace);\\n }\\n .nextjs-container-errors-header > div > small {\\n margin: 0;\\n margin-top: 4px;\\n }\\n .nextjs-container-errors-header > p > a {\\n color: inherit;\\n font-weight: bold;\\n }\\n .nextjs-container-errors-header\\n > .nextjs-container-build-error-version-status {\\n position: absolute;\\n top: 16px;\\n right: 16px;\\n }\\n\",\"\\n \").concat(\"\",\"\\n\\n \").concat(\"\\n [data-nextjs-error-overlay-nav] {\\n --stroke-color: var(--color-gray-400);\\n --background-color: var(--color-background-100);\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n\\n width: 100%;\\n\\n position: relative;\\n z-index: 2;\\n outline: none;\\n translate: var(--next-dialog-border-width) var(--next-dialog-border-width);\\n max-width: var(--next-dialog-max-width);\\n\\n .error-overlay-notch {\\n translate: calc(var(--next-dialog-border-width) * -1);\\n width: auto;\\n height: var(--next-dialog-notch-height);\\n padding: 12px;\\n background: var(--background-color);\\n border: var(--next-dialog-border-width) solid var(--stroke-color);\\n border-bottom: none;\\n position: relative;\\n\\n &[data-side='left'] {\\n padding-right: 0;\\n border-radius: var(--next-dialog-radius) 0 0 0;\\n\\n .error-overlay-notch-tail {\\n right: -54px;\\n }\\n\\n > *:not(.error-overlay-notch-tail) {\\n margin-right: -10px;\\n }\\n }\\n\\n &[data-side='right'] {\\n padding-left: 0;\\n border-radius: 0 var(--next-dialog-radius) 0 0;\\n\\n .error-overlay-notch-tail {\\n left: -54px;\\n transform: rotateY(180deg);\\n }\\n\\n > *:not(.error-overlay-notch-tail) {\\n margin-left: -12px;\\n }\\n }\\n\\n .error-overlay-notch-tail {\\n position: absolute;\\n top: calc(var(--next-dialog-border-width) * -1);\\n pointer-events: none;\\n z-index: -1;\\n height: calc(100% + var(--next-dialog-border-width));\\n }\\n }\\n }\\n\\n @media (max-width: 600px) {\\n [data-nextjs-error-overlay-nav] {\\n background: var(--background-color);\\n border-radius: var(--next-dialog-radius) var(--next-dialog-radius) 0 0;\\n border: var(--next-dialog-border-width) solid var(--stroke-color);\\n border-bottom: none;\\n overflow: hidden;\\n translate: 0 var(--next-dialog-border-width);\\n \\n .error-overlay-notch {\\n border-radius: 0;\\n border: 0;\\n\\n &[data-side=\\\"left\\\"], &[data-side=\\\"right\\\"] {\\n border-radius: 0;\\n }\\n\\n .error-overlay-notch-tail {\\n display: none;\\n }\\n }\\n }\\n }\\n\",\"\\n \").concat(\"\\n .nextjs__container_errors_label {\\n padding: 2px 6px;\\n margin: 0;\\n border-radius: var(--rounded-md-2);\\n background: var(--color-red-100);\\n font-weight: 600;\\n font-size: var(--size-12);\\n color: var(--color-red-900);\\n font-family: var(--font-stack-monospace);\\n line-height: var(--size-20);\\n }\\n\",\"\\n \").concat(\"\\n .nextjs__container_errors_wrapper {\\n position: relative;\\n }\\n\\n .nextjs__container_errors_desc {\\n margin: 0;\\n margin-left: 4px;\\n color: var(--color-red-900);\\n font-weight: 500;\\n font-size: var(--size-16);\\n letter-spacing: -0.32px;\\n line-height: var(--size-24);\\n overflow-wrap: break-word;\\n white-space: pre-wrap;\\n }\\n\\n .nextjs__container_errors_desc.truncated {\\n max-height: 200px;\\n overflow: hidden;\\n }\\n\\n .nextjs__container_errors_gradient_overlay {\\n position: absolute;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n height: 85px;\\n background: linear-gradient(\\n 180deg,\\n rgba(250, 250, 250, 0) 0%,\\n var(--color-background-100) 100%\\n );\\n }\\n\\n .nextjs__container_errors_expand_button {\\n position: absolute;\\n bottom: 10px;\\n left: 50%;\\n transform: translateX(-50%);\\n display: flex;\\n align-items: center;\\n padding: 6px 8px;\\n background: var(--color-background-100);\\n border: 1px solid var(--color-gray-alpha-400);\\n border-radius: 999px;\\n box-shadow:\\n 0px 2px 2px var(--color-gray-alpha-100),\\n 0px 8px 8px -8px var(--color-gray-alpha-100);\\n font-size: var(--size-13);\\n cursor: pointer;\\n color: var(--color-gray-900);\\n font-weight: 500;\\n transition: background-color 0.2s ease;\\n }\\n\\n .nextjs__container_errors_expand_button:hover {\\n background: var(--color-gray-100);\\n }\\n\",\"\\n \").concat(\"\\n .error-overlay-toolbar {\\n display: flex;\\n gap: 6px;\\n }\\n\\n .nodejs-inspector-button,\\n .copy-stack-trace-button,\\n .docs-link-button {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n\\n width: var(--size-28);\\n height: var(--size-28);\\n background: var(--color-background-100);\\n background-clip: padding-box;\\n border: 1px solid var(--color-gray-alpha-400);\\n box-shadow: var(--shadow-small);\\n border-radius: var(--rounded-full);\\n\\n svg {\\n width: var(--size-14);\\n height: var(--size-14);\\n }\\n\\n &:focus {\\n outline: var(--focus-ring);\\n }\\n\\n &:not(:disabled):hover {\\n background: var(--color-gray-alpha-100);\\n }\\n\\n &:not(:disabled):active {\\n background: var(--color-gray-alpha-200);\\n }\\n\\n &:disabled {\\n background-color: var(--color-gray-100);\\n cursor: not-allowed;\\n }\\n }\\n\\n .error-overlay-toolbar-button-icon {\\n color: var(--color-gray-900);\\n }\\n\",\"\\n\\n [data-nextjs-error-label-group] {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n }\\n\");function n7(e){var n,t,r=e.file,o=e.location,a=eE({file:r,lineNumber:null!=(n=null==o?void 0:o.line)?n:1,column:null!=(t=null==o?void 0:o.column)?t:0});return(0,y.jsxs)(\"div\",{\"data-with-open-in-editor-link\":!0,\"data-with-open-in-editor-link-import-trace\":!0,role:\"link\",onClick:a,title:\"Click to open in your editor\",children:[r,o?\":\".concat(o.line,\":\").concat(o.column):null,(0,y.jsxs)(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 24 24\",fill:\"none\",stroke:\"currentColor\",strokeWidth:\"2\",strokeLinecap:\"round\",strokeLinejoin:\"round\",children:[(0,y.jsx)(\"path\",{d:\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"}),(0,y.jsx)(\"polyline\",{points:\"15 3 21 3 21 9\"}),(0,y.jsx)(\"line\",{x1:\"10\",y1:\"14\",x2:\"21\",y2:\"3\"})]})]})}function te(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}var tn=function(e){var n,t,r,o,a,i,l,s,c,u,d=e.content,f=x.useMemo(function(){var e,n,t;return n=function(e){var n,t,r=e.shift();if(!r)return null;var o=(n=r.split(\":\",3),t=3,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,3)||function(e,n){if(e){if(\"string\"==typeof e)return te(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return te(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),a=o[0],i=o[1],l=o[2],s=Number(i),c=Number(l),u=!Number.isNaN(s)&&!Number.isNaN(c);return{fileName:u?a:r,location:u?{line:s,column:c}:void 0}}(e=d.split(\"\\n\")),t=function(e){if(e.some(function(e){return/ReactServerComponentsError:/.test(e)})||e.some(function(e){return/Import trace for requested module:/.test(e)})){for(var n=[];/.+\\..+/.test(e[e.length-1])&&!e[e.length-1].includes(\":\");){var t=e.pop().trim();n.unshift(t)}return n}return[]}(e),{file:n,source:e.join(\"\\n\"),importTraceFiles:t}},[d]),p=f.file,h=f.source,g=f.importTraceFiles,m=x.useMemo(function(){return eH().ansiToJson(h,{json:!0,use_classes:!0,remove_empty:!0})},[h]),v=eE({file:null==p?void 0:p.fileName,lineNumber:null!=(i=null==p||null==(n=p.location)?void 0:n.line)?i:1,column:null!=(l=null==p||null==(t=p.location)?void 0:t.column)?l:0}),b={file:null!=(s=null==p?void 0:p.fileName)?s:null,methodName:\"\",arguments:[],lineNumber:null!=(c=null==p||null==(r=p.location)?void 0:r.line)?c:null,column:null!=(u=null==p||null==(o=p.location)?void 0:o.column)?u:null},w=null==b||null==(a=b.file)?void 0:a.split(\".\").pop();return(0,y.jsxs)(\"div\",{\"data-nextjs-codeframe\":!0,children:[(0,y.jsx)(\"div\",{className:\"code-frame-header\",children:(0,y.jsxs)(\"div\",{className:\"code-frame-link\",children:[(0,y.jsx)(\"span\",{className:\"code-frame-icon\",children:(0,y.jsx)(eT,{lang:w})}),(0,y.jsx)(\"span\",{\"data-text\":!0,children:eS(b)}),(0,y.jsx)(\"button\",{\"aria-label\":\"Open in editor\",\"data-with-open-in-editor-link-source-file\":!0,onClick:v,children:(0,y.jsx)(\"span\",{className:\"code-frame-icon\",\"data-icon\":\"right\",children:(0,y.jsx)(ez,{width:16,height:16})})})]})}),(0,y.jsx)(\"pre\",{className:\"code-frame-pre\",children:(0,y.jsxs)(\"div\",{className:\"code-frame-lines\",children:[m.map(function(e,n){return(0,y.jsx)(\"span\",{style:function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({color:e.fg?\"var(--color-\".concat(e.fg,\")\"):void 0},\"bold\"===e.decoration?{fontWeight:500}:\"italic\"===e.decoration?{fontStyle:\"italic\"}:void 0),children:(0,y.jsx)(eb,{text:e.content})},\"terminal-entry-\".concat(n))}),g.map(function(e){return(0,y.jsx)(n7,{isSourceFile:!1,file:e},e)})]})})]})},tt=function(e){var n=e.split(\"\\n\");return eU()(n[1]||\"\").replace(/^Error: /,\"\")},tr=function(e){var n,t,r=e.message,o=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"message\"]),a=(0,x.useCallback)(function(){},[]),i=Error(r),l=(0,x.useMemo)(function(){return tt(r)||\"Failed to compile\"},[r]);return(0,y.jsx)(n9,(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({errorType:\"Build Error\",errorMessage:l,onClose:a,error:i},o),t=t={children:(0,y.jsx)(tn,{content:r})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))},to=function(e){var n,t=e.frame,r=null!=(n=t.originalStackFrame)?n:t.sourceStackFrame,o=!!t.originalCodeFrame,a=eE(o?{file:r.file,lineNumber:r.lineNumber,column:r.column}:void 0),i=eS(r);return i?(0,y.jsxs)(\"div\",{\"data-nextjs-call-stack-frame\":!0,\"data-nextjs-call-stack-frame-no-source\":!o,\"data-nextjs-call-stack-frame-ignored\":t.ignored,children:[(0,y.jsxs)(\"div\",{className:\"call-stack-frame-method-name\",children:[(0,y.jsx)(eb,{text:r.methodName}),o&&(0,y.jsx)(\"button\",{onClick:a,className:\"open-in-editor-button\",\"aria-label\":\"Open \".concat(r.methodName,\" in editor\"),children:(0,y.jsx)(ez,{width:16,height:16})}),t.error?(0,y.jsx)(\"button\",{className:\"source-mapping-error-button\",onClick:function(){return console.error(t.reason)},title:\"Sourcemapping failed. Click to log cause of error.\",children:(0,y.jsx)(eL,{width:16,height:16})}):null]}),(0,y.jsx)(\"span\",{className:\"call-stack-frame-file-source\",\"data-has-source\":o,children:i})]}):null};function ta(){return(0,y.jsx)(\"svg\",{width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M8.70722 2.39641C8.3167 2.00588 7.68353 2.00588 7.29301 2.39641L4.46978 5.21963L3.93945 5.74996L5.00011 6.81062L5.53044 6.28029L8.00011 3.81062L10.4698 6.28029L11.0001 6.81062L12.0608 5.74996L11.5304 5.21963L8.70722 2.39641ZM5.53044 9.71963L5.00011 9.1893L3.93945 10.25L4.46978 10.7803L7.29301 13.6035C7.68353 13.994 8.3167 13.994 8.70722 13.6035L11.5304 10.7803L12.0608 10.25L11.0001 9.1893L10.4698 9.71963L8.00011 12.1893L5.53044 9.71963Z\",fill:\"currentColor\"})})}function ti(){var e,n,t=(e=[\"\\n [data-nextjs-call-stack-container] {\\n position: relative;\\n margin-top: 8px;\\n }\\n\\n [data-nextjs-call-stack-header] {\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n min-height: var(--size-28);\\n padding: 8px 8px 12px 4px;\\n width: 100%;\\n }\\n\\n [data-nextjs-call-stack-title] {\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n gap: 8px;\\n\\n margin: 0;\\n\\n color: var(--color-gray-1000);\\n font-size: var(--size-16);\\n font-weight: 500;\\n }\\n\\n [data-nextjs-call-stack-count] {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n\\n width: var(--size-20);\\n height: var(--size-20);\\n gap: 4px;\\n\\n color: var(--color-gray-1000);\\n text-align: center;\\n font-size: var(--size-11);\\n font-weight: 500;\\n line-height: var(--size-16);\\n\\n border-radius: var(--rounded-full);\\n background: var(--color-gray-300);\\n }\\n\\n [data-nextjs-call-stack-ignored-list-toggle-button] {\\n all: unset;\\n display: flex;\\n align-items: center;\\n gap: 6px;\\n color: var(--color-gray-900);\\n font-size: var(--size-14);\\n line-height: var(--size-20);\\n border-radius: 6px;\\n padding: 4px 6px;\\n margin-right: -6px;\\n transition: background 150ms ease;\\n\\n &:hover {\\n background: var(--color-gray-100);\\n }\\n\\n &:focus {\\n outline: var(--focus-ring);\\n }\\n\\n svg {\\n width: var(--size-16);\\n height: var(--size-16);\\n }\\n }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return ti=function(){return t},t}function tl(e){var n=e.frames,t=e.isIgnoreListOpen,r=e.ignoredFramesTally,o=e.onToggleIgnoreList;return(0,y.jsxs)(\"div\",{\"data-nextjs-call-stack-container\":!0,children:[(0,y.jsxs)(\"div\",{\"data-nextjs-call-stack-header\":!0,children:[(0,y.jsxs)(\"p\",{\"data-nextjs-call-stack-title\":!0,children:[\"Call Stack \",(0,y.jsx)(\"span\",{\"data-nextjs-call-stack-count\":!0,children:n.length})]}),r>0&&(0,y.jsxs)(\"button\",{\"data-nextjs-call-stack-ignored-list-toggle-button\":t,onClick:o,children:[\"\".concat(t?\"Hide\":\"Show\",\" \").concat(r,\" ignore-listed frame(s)\"),(0,y.jsx)(ta,{})]})]}),n.map(function(e,n){return!e.ignored||t?(0,y.jsx)(to,{frame:e},n):null})]})}var ts=ei(ti());function tc(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function tu(e){var n,t,r=e.frames,o=e.dialogResizerRef,a=(0,x.useRef)(NaN),i=(n=(0,x.useState)(!1),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||function(e,n){if(e){if(\"string\"==typeof e)return tc(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return tc(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),l=i[0],s=i[1],c=(0,x.useMemo)(function(){return r.reduce(function(e,n){return e+ +!!n.ignored},0)},[r]);return(0,y.jsx)(tl,{frames:r,isIgnoreListOpen:l,onToggleIgnoreList:function(){var e=null==o?void 0:o.current;if(e){var n=(null==e?void 0:e.getBoundingClientRect()).height;a.current||(a.current=n),l?(e.style.height=\"\".concat(a.current,\"px\"),e.addEventListener(\"transitionend\",function n(){e.removeEventListener(\"transitionend\",n),s(!1)})):s(!0)}},ignoredFramesTally:c})}function td(){var e,n,t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).collapsed;return(0,y.jsx)(\"svg\",(e=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({\"data-nextjs-call-stack-chevron-icon\":!0,\"data-collapsed\":t,width:\"16\",height:\"16\",fill:\"none\"},\"boolean\"==typeof t?{style:{transform:t?void 0:\"rotate(90deg)\"}}:{}),n=n={children:(0,y.jsx)(\"path\",{style:{fill:\"var(--color-font)\"},fillRule:\"evenodd\",d:\"m6.75 3.94.53.53 2.824 2.823a1 1 0 0 1 0 1.414L7.28 11.53l-.53.53L5.69 11l.53-.53L8.69 8 6.22 5.53 5.69 5l1.06-1.06Z\",clipRule:\"evenodd\"})},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e))}function tf(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function tp(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return tf(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return tf(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function th(e){var n=e.reactOutputComponentDiff,t=tp((0,x.useState)(!0),2),r=t[0],o=t[1],a=(0,x.useMemo)(function(){var e=[];return n.split(\"\\n\").forEach(function(n,t){var r,o,a=\"+\"===n[0]||\"-\"===n[0],i=\">\"===n[0],l=a||i,s=l?n[0]:\"\",c=l?n.indexOf(s):-1,u=tp(l?[n.slice(0,c),n.slice(c+1)]:[n,\"\"],2),d=u[0],f=u[1];a?e.push((0,y.jsx)(\"span\",{\"data-nextjs-container-errors-pseudo-html-line\":!0,\"data-nextjs-container-errors-pseudo-html--diff\":\"+\"===s?\"add\":\"remove\",children:(0,y.jsxs)(\"span\",{children:[d,(0,y.jsx)(\"span\",{\"data-nextjs-container-errors-pseudo-html-line-sign\":!0,children:s}),f,\"\\n\"]})},\"comp-diff\"+t)):e.push((0,y.jsxs)(\"span\",(r=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({\"data-nextjs-container-errors-pseudo-html-line\":!0},i?{\"data-nextjs-container-errors-pseudo-html--diff\":\"error\"}:void 0),o=o={children:[d,(0,y.jsx)(\"span\",{\"data-nextjs-container-errors-pseudo-html-line-sign\":!0,children:s}),f,\"\\n\"]},Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(o)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(o)).forEach(function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(o,e))}),r),\"comp-diff\"+t))}),e},[n]);return(0,y.jsxs)(\"div\",{\"data-nextjs-container-errors-pseudo-html\":!0,\"data-nextjs-container-errors-pseudo-html-collapse\":r,children:[(0,y.jsx)(\"button\",{\"aria-expanded\":!r,\"aria-label\":\"complete Component Stack\",\"data-nextjs-container-errors-pseudo-html-collapse-button\":!0,onClick:function(){return o(!r)},children:(0,y.jsx)(td,{collapsed:r})}),(0,y.jsx)(\"pre\",{className:\"nextjs__container_errors__component-stack\",children:(0,y.jsx)(\"code\",{children:a})})]})}var tg=Symbol.for(\"NextjsError\");function tm(e){return e[tg]||null}function tv(e,n,t,r,o,a,i){try{var l=e[a](i),s=l.value}catch(e){t(e);return}l.done?n(s):Promise.resolve(s).then(r,o)}function tb(e){return function(){var n=this,t=arguments;return new Promise(function(r,o){var a=e.apply(n,t);function i(e){tv(a,r,o,i,l,\"next\",e)}function l(e){tv(a,r,o,i,l,\"throw\",e)}i(void 0)})}}function ty(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function tx(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}function tw(e,n){var t,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create((\"function\"==typeof Iterator?Iterator:Object).prototype);return i.next=l(0),i.throw=l(1),i.return=l(2),\"function\"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function l(l){return function(s){var c=[l,s];if(t)throw TypeError(\"Generator is already executing.\");for(;i&&(i=0,c[0]&&(a=0)),a;)try{if(t=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,r=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=n.call(e,a)}catch(e){c=[6,e],r=0}finally{t=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var tj=function(e){if(\"use\"in x){var n=e.frames;if(\"function\"!=typeof n)throw Error(\"Invariant: frames must be a function when the React version has React.use. This is a bug in Next.js.\");return x.use(n())}if(!Array.isArray(e.frames))throw Error(\"Invariant: frames must be an array when the React version does not have React.use. This is a bug in Next.js.\");return e.frames};function tk(e){var n=e.error,t=e.dialogResizerRef,r=tj(n),o=(0,x.useMemo)(function(){var e,n=r.findIndex(function(e){return!e.ignored&&!!e.originalCodeFrame&&!!e.originalStackFrame});return null!=(e=r[n])?e:null},[r]);return(0,y.jsxs)(y.Fragment,{children:[o&&(0,y.jsx)(eq,{stackFrame:o.originalStackFrame,codeFrame:o.originalCodeFrame}),r.length>0&&(0,y.jsx)(tu,{dialogResizerRef:t,frames:r})]})}var tA=\"\\n \".concat(\"\\n [data-nextjs-container-errors-pseudo-html] {\\n padding: 8px 0;\\n margin: 8px 0;\\n border: 1px solid var(--color-gray-400);\\n background: var(--color-background-200);\\n color: var(--color-syntax-constant);\\n font-family: var(--font-stack-monospace);\\n font-size: var(--size-12);\\n line-height: 1.33em; /* 16px in 12px font size */\\n border-radius: var(--rounded-md-2);\\n }\\n [data-nextjs-container-errors-pseudo-html-line] {\\n display: inline-block;\\n width: 100%;\\n padding-left: 40px;\\n line-height: calc(5 / 3);\\n }\\n [data-nextjs-container-errors-pseudo-html--diff='error'] {\\n background: var(--color-amber-100);\\n box-shadow: 2px 0 0 0 var(--color-amber-900) inset;\\n font-weight: bold;\\n }\\n [data-nextjs-container-errors-pseudo-html-collapse-button] {\\n all: unset;\\n margin-left: 12px;\\n &:focus {\\n outline: none;\\n }\\n }\\n [data-nextjs-container-errors-pseudo-html--diff='add'] {\\n background: var(--color-green-300);\\n }\\n [data-nextjs-container-errors-pseudo-html-line-sign] {\\n margin-left: calc(24px * -1);\\n margin-right: 24px;\\n }\\n [data-nextjs-container-errors-pseudo-html--diff='add']\\n [data-nextjs-container-errors-pseudo-html-line-sign] {\\n color: var(--color-green-900);\\n }\\n [data-nextjs-container-errors-pseudo-html--diff='remove'] {\\n background: var(--color-red-300);\\n }\\n [data-nextjs-container-errors-pseudo-html--diff='remove']\\n [data-nextjs-container-errors-pseudo-html-line-sign] {\\n color: var(--color-red-900);\\n margin-left: calc(24px * -1);\\n margin-right: 24px;\\n }\\n [data-nextjs-container-errors-pseudo-html--diff='error']\\n [data-nextjs-container-errors-pseudo-html-line-sign] {\\n color: var(--color-amber-900);\\n }\\n \\n [data-nextjs-container-errors-pseudo-html--hint] {\\n display: inline-block;\\n font-size: 0;\\n height: 0;\\n }\\n [data-nextjs-container-errors-pseudo-html--tag-adjacent='false'] {\\n color: var(--color-accents-1);\\n }\\n .nextjs__container_errors__component-stack {\\n margin: 0;\\n }\\n [data-nextjs-container-errors-pseudo-html-collapse='true']\\n .nextjs__container_errors__component-stack\\n code {\\n max-height: 120px;\\n mask-image: linear-gradient(to bottom,rgba(0,0,0,0) 0%,black 10%);\\n padding-bottom: 40px;\\n }\\n .nextjs__container_errors__component-stack code {\\n display: block;\\n width: 100%;\\n white-space: pre-wrap;\\n scroll-snap-type: y mandatory;\\n overflow-y: hidden;\\n }\\n [data-nextjs-container-errors-pseudo-html--diff] {\\n scroll-snap-align: center;\\n }\\n .error-overlay-hydration-error-diff-plus-icon {\\n color: var(--color-green-900);\\n }\\n .error-overlay-hydration-error-diff-minus-icon {\\n color: var(--color-red-900);\\n }\\n\",\"\\n\");function tO(e){return e&&\"undefined\"!=typeof Symbol&&e.constructor===Symbol?\"symbol\":typeof e}function tC(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function tS(e){var n,t,r,o,a,i=e.runtimeErrors,l=e.getSquashedHydrationErrorDetails,s=(r=(0,x.useState)(0),o=2,function(e){if(Array.isArray(e))return e}(r)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(r,2)||function(e,n){if(e){if(\"string\"==typeof e)return tC(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return tC(e,n)}}(r,o)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),c=s[0],u=s[1],d=(0,x.useMemo)(function(){return 0===i.length},[i.length]),f=(0,x.useMemo)(function(){var e;return null!=(e=i[c])?e:null},[c,i]),p=(n=null==f?void 0:f.error,t=l,(0,x.useMemo)(function(){if(void 0===n)return tL;var e,r,o,a=t(n);if(null!==a)return{hydrationWarning:null!=(r=a.warning)?r:null,notes:null,reactOutputComponentDiff:null!=(o=a.reactOutputComponentDiff)?o:null};if(!(ng((e=n).message)||/Hydration failed because the server rendered (text|HTML) didn't match the client\\./.test(e.message)||/A tree hydrated but some attributes of the server rendered HTML didn't match the client properties./.test(e.message)))return tL;var i=function(e){var n=e.message;if(ng(n)){var t=nc(n.split(\"\\n\\n\"),2),r=t[0],o=t[1],a=(void 0===o?\"\":o).trim();return{message:\"\"===a?n.trim():r.trim(),diff:a,notes:null}}var i=nc(n.split(\"\".concat(nf)),2),l=i[0],s=i[1],c=l.trim();if(void 0!==s&&s.length>1){var u=[];s.split(\"\\n\").forEach(function(e){\"\"!==e.trim()&&(e.trim().startsWith(\"at \")||u.push(e))});var d=nu(c.split(\"\\n\\n\")),f=d[0],p=d.slice(1);return{message:f,diff:u.join(\"\\n\"),notes:p.join(\"\\n\\n\")||null}}var h=nu(c.split(\"\\n\\n\"));return{message:h[0],diff:null,notes:h.slice(1).join(\"\\n\\n\")}}(n),l=i.message,s=i.notes,c=i.diff;return null===l?tL:{hydrationWarning:l,notes:s,reactOutputComponentDiff:c}},[n,t]));if(d||!f)return{isLoading:d,activeIdx:c,setActiveIndex:u,activeError:null,errorDetails:null,errorCode:null,errorType:null,notes:null,hydrationWarning:null};var h=f.error,g=(void 0===(a=h)?\"undefined\":tO(a))===\"object\"&&null!==a&&\"__NEXT_ERROR_CODE\"in a&&\"string\"==typeof a.__NEXT_ERROR_CODE?a.__NEXT_ERROR_CODE:(void 0===a?\"undefined\":tO(a))===\"object\"&&null!==a&&\"digest\"in a&&\"string\"==typeof a.digest?a.digest.split(\"@\").find(function(e){return e.startsWith(\"E\")}):void 0,m=tz(h,f.type),v=p.notes,b=p.hydrationWarning;return{isLoading:d,activeIdx:c,setActiveIndex:u,activeError:f,errorDetails:p,errorCode:g,errorType:m,notes:v,hydrationWarning:b}}function tE(e){return e.startsWith(\"https://nextjs.org\")}function t_(e){var n=e.message;return(0,y.jsx)(eb,{text:n,matcher:tE})}function tP(e){var n=e.error,t=\"environmentName\"in n?n.environmentName:\"\",r=t?\"[ \".concat(t,\" ] \"):\"\",o=n.message;return o.startsWith(r)&&(o=o.slice(r.length)),(0,y.jsx)(y.Fragment,{children:(0,y.jsx)(eb,{text:o,matcher:tE})})}function tz(e,n){return\"recoverable\"===n?\"Recoverable \".concat(e.name):\"console\"===n?\"Console \".concat(e.name):\"Runtime \".concat(e.name)}var tL={hydrationWarning:null,notes:null,reactOutputComponentDiff:null};function tT(e){var n,t,r=e.getSquashedHydrationErrorDetails,o=e.runtimeErrors,a=e.debugInfo,i=e.onClose,l=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"getSquashedHydrationErrorDetails\",\"runtimeErrors\",\"debugInfo\",\"onClose\"]),s=(0,x.useRef)(null),c=tS({runtimeErrors:o,getSquashedHydrationErrorDetails:r}),u=c.isLoading,d=c.errorCode,f=c.errorType,p=c.notes,h=c.hydrationWarning,g=c.activeIdx,m=c.errorDetails,v=c.activeError,b=c.setActiveIndex;if(u)return(0,y.jsx)(nZ,{children:(0,y.jsx)(n2,{})});if(!v)return null;var w=v.error,j=[\"server\",\"edge-server\"].includes(tm(w)||\"\");return(0,y.jsxs)(n9,(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({errorCode:d,errorType:f,errorMessage:h?(0,y.jsx)(t_,{message:h}):(0,y.jsx)(tP,{error:w}),onClose:j?void 0:i,debugInfo:a,error:w,runtimeErrors:o,activeIdx:g,setActiveIndex:b,dialogResizerRef:s},l),t=t={children:[(0,y.jsxs)(\"div\",{className:\"error-overlay-notes-container\",children:[p?(0,y.jsx)(y.Fragment,{children:(0,y.jsx)(\"p\",{id:\"nextjs__container_errors__notes\",className:\"nextjs__container_errors__notes\",children:p})}):null,h?(0,y.jsx)(\"p\",{id:\"nextjs__container_errors__link\",className:\"nextjs__container_errors__link\",children:(0,y.jsx)(eb,{text:\"See more info here: \".concat(np)})}):null]}),m.reactOutputComponentDiff?(0,y.jsx)(th,{reactOutputComponentDiff:m.reactOutputComponentDiff||\"\"}):null,(0,y.jsx)(x.Suspense,{fallback:(0,y.jsx)(\"div\",{\"data-nextjs-error-suspended\":!0}),children:(0,y.jsx)(tk,{error:v,dialogResizerRef:s},v.id.toString())})]},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}var tR=x.forwardRef(function(e,n){var t,r,o=e.onClick,a=e.children,i=e.className,l=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"onClick\",\"children\",\"className\"]);return(0,y.jsx)(\"div\",(t=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({},l),r=r={ref:n,onClick:function(e){return e.target.closest(\"a\")||e.preventDefault(),null==o?void 0:o()},className:(0,eJ.cx)(\"nextjs-toast\",i),children:a},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))});function tN(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function tD(e){var n,t,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:750,o=(n=(0,x.useState)(!1),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||function(e,n){if(e){if(\"string\"==typeof e)return tN(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return tN(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),a=o[0],i=o[1],l=(0,x.useRef)(null),s=(0,x.useRef)(null);return(0,x.useEffect)(function(){if(s.current&&(clearTimeout(s.current),s.current=null),e)null===l.current&&(l.current=Date.now()),i(!0);else if(null===l.current)i(!1);else{var n=Date.now()-l.current,t=r*Math.ceil(n/r)-n;t>0?s.current=setTimeout(function(){i(!1),l.current=null},t):(i(!1),l.current=null)}return function(){s.current&&clearTimeout(s.current)}},[e,r]),a}function tB(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function tM(e){var n,t,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=(0,x.useRef)(null),a=(n=(0,x.useState)(!1),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||function(e,n){if(e){if(\"string\"==typeof e)return tB(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return tB(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),i=a[0],l=a[1];return(0,x.useEffect)(function(){if(e>0){var n=o.current?Date.now()-o.current:-1;if(o.current=Date.now(),!(n<=r)){l(!0);var t=window.setTimeout(function(){l(!1)},r);return function(){clearTimeout(t)}}}},[e,r]),i}function tI(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function tH(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return tI(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return tI(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function tF(e){var n=tH((0,x.useState)(0),2),t=n[0],r=n[1];return(0,x.useEffect)(function(){var n=e.current;if(n){var t=new ResizeObserver(function(e){r(tH(e,1)[0].contentRect.width)});return t.observe(n),function(){return t.disconnect()}}},[e]),t}function tU(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function tV(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function tq(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}function tW(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function t$(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return tU(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return tU(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function tZ(){var e,n,t=(e=[\"\\n [data-next-badge-root] {\\n --timing: cubic-bezier(0.23, 0.88, 0.26, 0.92);\\n --duration-long: 250ms;\\n --color-outer-border: #171717;\\n --color-inner-border: hsla(0, 0%, 100%, 0.14);\\n --color-hover-alpha-subtle: hsla(0, 0%, 100%, 0.13);\\n --color-hover-alpha-error: hsla(0, 0%, 100%, 0.2);\\n --color-hover-alpha-error-2: hsla(0, 0%, 100%, 0.25);\\n --mark-size: calc(var(--size) - var(--size-2) * 2);\\n\\n --focus-color: var(--color-blue-800);\\n --focus-ring: 2px solid var(--focus-color);\\n\\n &:has([data-next-badge][data-error='true']) {\\n --focus-color: #fff;\\n }\\n }\\n\\n [data-disabled-icon] {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n padding-right: 4px;\\n }\\n\\n [data-next-badge] {\\n -webkit-font-smoothing: antialiased;\\n width: var(--size);\\n height: var(--size);\\n display: flex;\\n align-items: center;\\n position: relative;\\n background: rgba(0, 0, 0, 0.8);\\n box-shadow:\\n 0 0 0 1px var(--color-outer-border),\\n inset 0 0 0 1px var(--color-inner-border),\\n 0px 16px 32px -8px rgba(0, 0, 0, 0.24);\\n backdrop-filter: blur(48px);\\n border-radius: var(--rounded-full);\\n user-select: none;\\n cursor: pointer;\\n scale: 1;\\n overflow: hidden;\\n will-change: scale, box-shadow, width, background;\\n transition:\\n scale var(--duration-short) var(--timing),\\n width var(--duration-long) var(--timing),\\n box-shadow var(--duration-long) var(--timing),\\n background var(--duration-short) ease;\\n\\n &:active[data-error='false'] {\\n scale: 0.95;\\n }\\n\\n &[data-animate='true']:not(:hover) {\\n scale: 1.02;\\n }\\n\\n &[data-error='false']:has([data-next-mark]:focus-visible) {\\n outline: var(--focus-ring);\\n outline-offset: 3px;\\n }\\n\\n &[data-error='true'] {\\n background: #ca2a30;\\n --color-inner-border: #e5484d;\\n\\n [data-next-mark] {\\n background: var(--color-hover-alpha-error);\\n outline-offset: 0px;\\n\\n &:focus-visible {\\n outline: var(--focus-ring);\\n outline-offset: -1px;\\n }\\n\\n &:hover {\\n background: var(--color-hover-alpha-error-2);\\n }\\n }\\n }\\n\\n &[data-error-expanded='false'][data-error='true'] ~ [data-dot] {\\n scale: 1;\\n }\\n\\n > div {\\n display: flex;\\n }\\n }\\n\\n [data-issues-collapse]:focus-visible {\\n outline: var(--focus-ring);\\n }\\n\\n [data-issues]:has([data-issues-open]:focus-visible) {\\n outline: var(--focus-ring);\\n outline-offset: -1px;\\n }\\n\\n [data-dot] {\\n content: '';\\n width: var(--size-8);\\n height: var(--size-8);\\n background: #fff;\\n box-shadow: 0 0 0 1px var(--color-outer-border);\\n border-radius: 50%;\\n position: absolute;\\n top: 2px;\\n right: 0px;\\n scale: 0;\\n pointer-events: none;\\n transition: scale 200ms var(--timing);\\n transition-delay: var(--duration-short);\\n }\\n\\n [data-issues] {\\n --padding-left: 8px;\\n display: flex;\\n gap: 2px;\\n align-items: center;\\n padding-left: 8px;\\n padding-right: 8px;\\n height: var(--size-32);\\n margin-right: 2px;\\n border-radius: var(--rounded-full);\\n transition: background var(--duration-short) ease;\\n\\n &:has([data-issues-open]:hover) {\\n background: var(--color-hover-alpha-error);\\n }\\n\\n &:has([data-issues-collapse]) {\\n padding-right: calc(var(--padding-left) / 2);\\n }\\n\\n [data-cross] {\\n translate: 0px -1px;\\n }\\n }\\n\\n [data-issues-open] {\\n font-size: var(--size-13);\\n color: white;\\n width: fit-content;\\n height: 100%;\\n display: flex;\\n gap: 2px;\\n align-items: center;\\n margin: 0;\\n line-height: var(--size-36);\\n font-weight: 500;\\n z-index: 2;\\n white-space: nowrap;\\n\\n &:focus-visible {\\n outline: 0;\\n }\\n }\\n\\n [data-issues-collapse] {\\n width: var(--size-24);\\n height: var(--size-24);\\n border-radius: var(--rounded-full);\\n transition: background var(--duration-short) ease;\\n\\n &:hover {\\n background: var(--color-hover-alpha-error);\\n }\\n }\\n\\n [data-cross] {\\n color: #fff;\\n width: var(--size-12);\\n height: var(--size-12);\\n }\\n\\n [data-next-mark] {\\n width: var(--mark-size);\\n height: var(--mark-size);\\n margin: 0 2px;\\n display: flex;\\n align-items: center;\\n border-radius: var(--rounded-full);\\n transition: background var(--duration-long) var(--timing);\\n\\n &:focus-visible {\\n outline: 0;\\n }\\n\\n &:hover {\\n background: var(--color-hover-alpha-subtle);\\n }\\n\\n svg {\\n flex-shrink: 0;\\n width: var(--size-40);\\n height: var(--size-40);\\n }\\n }\\n\\n [data-issues-count-animation] {\\n display: grid;\\n place-items: center center;\\n font-variant-numeric: tabular-nums;\\n\\n &[data-animate='false'] {\\n [data-issues-count-exit],\\n [data-issues-count-enter] {\\n animation-duration: 0ms;\\n }\\n }\\n\\n > * {\\n grid-area: 1 / 1;\\n }\\n\\n [data-issues-count-exit] {\\n animation: fadeOut 300ms var(--timing) forwards;\\n }\\n\\n [data-issues-count-enter] {\\n animation: fadeIn 300ms var(--timing) forwards;\\n }\\n }\\n\\n [data-issues-count-plural] {\\n display: inline-block;\\n &[data-animate='true'] {\\n animation: fadeIn 300ms var(--timing) forwards;\\n }\\n }\\n\\n .path0 {\\n animation: draw0 1.5s ease-in-out infinite;\\n }\\n\\n .path1 {\\n animation: draw1 1.5s ease-out infinite;\\n animation-delay: 0.3s;\\n }\\n\\n .paused {\\n stroke-dashoffset: 0;\\n }\\n\\n @keyframes fadeIn {\\n 0% {\\n opacity: 0;\\n filter: blur(2px);\\n transform: translateY(8px);\\n }\\n 100% {\\n opacity: 1;\\n filter: blur(0px);\\n transform: translateY(0);\\n }\\n }\\n\\n @keyframes fadeOut {\\n 0% {\\n opacity: 1;\\n filter: blur(0px);\\n transform: translateY(0);\\n }\\n 100% {\\n opacity: 0;\\n transform: translateY(-12px);\\n filter: blur(2px);\\n }\\n }\\n\\n @keyframes draw0 {\\n 0%,\\n 25% {\\n stroke-dashoffset: -29.6;\\n }\\n 25%,\\n 50% {\\n stroke-dashoffset: 0;\\n }\\n 50%,\\n 75% {\\n stroke-dashoffset: 0;\\n }\\n 75%,\\n 100% {\\n stroke-dashoffset: 29.6;\\n }\\n }\\n\\n @keyframes draw1 {\\n 0%,\\n 20% {\\n stroke-dashoffset: -11.6;\\n }\\n 20%,\\n 50% {\\n stroke-dashoffset: 0;\\n }\\n 50%,\\n 75% {\\n stroke-dashoffset: 0;\\n }\\n 75%,\\n 100% {\\n stroke-dashoffset: 11.6;\\n }\\n }\\n\\n @media (prefers-reduced-motion) {\\n [data-issues-count-exit],\\n [data-issues-count-enter],\\n [data-issues-count-plural] {\\n animation-duration: 0ms !important;\\n }\\n }\\n \"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return tZ=function(){return t},t}var tY=(0,x.forwardRef)(function(e,n){var t=e.disabled,r=e.issueCount,o=e.isDevBuilding,a=e.isDevRendering,i=e.isBuildError,l=e.onTriggerClick,s=e.toggleErrorOverlay,c=e.scale,u=tW(e,[\"disabled\",\"issueCount\",\"isDevBuilding\",\"isDevRendering\",\"isBuildError\",\"onTriggerClick\",\"toggleErrorOverlay\",\"scale\"]),d=r>0,f=t$((0,x.useState)(d),2),p=f[0],h=f[1],g=t$((0,x.useState)(!1),2),m=g[0],v=g[1],b=tM(r,150),w=(0,x.useRef)(null),j=(0,x.useRef)(null),k=tF(j),A=tD(o||a),O=p||t;return(0,x.useEffect)(function(){h(d)},[d]),(0,y.jsxs)(\"div\",{\"data-next-badge-root\":!0,style:{\"--size\":\"\".concat(36/(void 0===c?1:c),\"px\"),\"--duration-short\":\"\".concat(150,\"ms\"),display:t&&(!d||m)?\"none\":\"block\"},children:[(0,y.jsx)(\"style\",{children:ei(tZ())}),(0,y.jsx)(\"div\",{\"data-next-badge\":!0,\"data-error\":d,\"data-error-expanded\":O,\"data-animate\":b,style:{width:0===k?\"auto\":k},children:(0,y.jsxs)(\"div\",{ref:j,children:[!t&&(0,y.jsx)(\"button\",tq(tV({ref:function(){for(var e=arguments.length,n=Array(e),t=0;t<e;t++)n[t]=arguments[t];var r=n.filter(Boolean);return r.length<=1?r[0]||null:function(e){var n=!0,t=!1,o=void 0;try{for(var a,i=r[Symbol.iterator]();!(n=(a=i.next()).done);n=!0){var l=a.value;\"function\"==typeof l?l(e):l&&(l.current=e)}}catch(e){t=!0,o=e}finally{try{n||null==i.return||i.return()}finally{if(t)throw o}}}}(w,n),\"data-next-mark\":!0,\"data-next-mark-loading\":A,onClick:l},u),{children:(0,y.jsx)(tK,{isLoading:A,isDevBuilding:o})})),O&&(0,y.jsxs)(\"div\",{\"data-issues\":!0,children:[(0,y.jsxs)(\"button\",{\"data-issues-open\":!0,\"aria-label\":\"Open issues overlay\",onClick:s,children:[t&&(0,y.jsx)(\"div\",{\"data-disabled-icon\":!0,children:(0,y.jsx)(tQ,{})}),(0,y.jsx)(tX,{animate:b,\"data-issues-count-animation\":!0,children:r},r),\" \",(0,y.jsxs)(\"div\",{children:[\"Issue\",r>1&&(0,y.jsx)(\"span\",{\"aria-hidden\":!0,\"data-issues-count-plural\":!0,\"data-animate\":b&&2===r,children:\"s\"})]})]}),!i&&(0,y.jsx)(\"button\",{\"data-issues-collapse\":!0,\"aria-label\":\"Collapse issues badge\",onClick:function(){var e;t?v(!0):h(!1),null==(e=w.current)||e.focus()},children:(0,y.jsx)(tG,{\"data-cross\":!0})})]})]})}),(0,y.jsx)(\"div\",{\"aria-hidden\":!0,\"data-dot\":!0})]})});function tX(e){var n=e.children,t=e.animate,r=tW(e,[\"children\",\"animate\"]);return(0,y.jsxs)(\"div\",tq(tV({},r),{\"data-animate\":void 0===t||t,children:[(0,y.jsx)(\"div\",{\"aria-hidden\":!0,\"data-issues-count-exit\":!0,children:n-1}),(0,y.jsx)(\"div\",{\"data-issues-count\":!0,\"data-issues-count-enter\":!0,children:n})]}))}function tK(e){var n=e.isLoading,t=e.isDevBuilding?\"rgba(255,255,255,0.7)\":\"white\";return(0,y.jsxs)(\"svg\",{width:\"40\",height:\"40\",viewBox:\"0 0 40 40\",fill:\"none\",\"data-next-mark-loading\":n,children:[(0,y.jsxs)(\"g\",{transform:\"translate(8.5, 13)\",children:[(0,y.jsx)(\"path\",{className:n?\"path0\":\"paused\",d:\"M13.3 15.2 L2.34 1 V12.6\",fill:\"none\",stroke:\"url(#next_logo_paint0_linear_1357_10853)\",strokeWidth:\"1.86\",mask:\"url(#next_logo_mask0)\",strokeDasharray:\"29.6\",strokeDashoffset:\"29.6\"}),(0,y.jsx)(\"path\",{className:n?\"path1\":\"paused\",d:\"M11.825 1.5 V13.1\",strokeWidth:\"1.86\",stroke:\"url(#next_logo_paint1_linear_1357_10853)\",strokeDasharray:\"11.6\",strokeDashoffset:\"11.6\"})]}),(0,y.jsxs)(\"defs\",{children:[(0,y.jsxs)(\"linearGradient\",{id:\"next_logo_paint0_linear_1357_10853\",x1:\"9.95555\",y1:\"11.1226\",x2:\"15.4778\",y2:\"17.9671\",gradientUnits:\"userSpaceOnUse\",children:[(0,y.jsx)(\"stop\",{stopColor:t}),(0,y.jsx)(\"stop\",{offset:\"0.604072\",stopColor:t,stopOpacity:\"0\"}),(0,y.jsx)(\"stop\",{offset:\"1\",stopColor:t,stopOpacity:\"0\"})]}),(0,y.jsxs)(\"linearGradient\",{id:\"next_logo_paint1_linear_1357_10853\",x1:\"11.8222\",y1:\"1.40039\",x2:\"11.791\",y2:\"9.62542\",gradientUnits:\"userSpaceOnUse\",children:[(0,y.jsx)(\"stop\",{stopColor:t}),(0,y.jsx)(\"stop\",{offset:\"1\",stopColor:t,stopOpacity:\"0\"})]}),(0,y.jsxs)(\"mask\",{id:\"next_logo_mask0\",children:[(0,y.jsx)(\"rect\",{width:\"100%\",height:\"100%\",fill:\"white\"}),(0,y.jsx)(\"rect\",{width:\"5\",height:\"1.5\",fill:\"black\"})]})]})]})}function tQ(){return(0,y.jsx)(\"svg\",{width:\"12\",height:\"12\",viewBox:\"0 0 12 12\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M3.98071 1.125L1.125 3.98071L1.125 8.01929L3.98071 10.875H8.01929L10.875 8.01929V3.98071L8.01929 1.125H3.98071ZM3.82538 0C3.62647 0 3.4357 0.0790176 3.29505 0.21967L0.21967 3.29505C0.0790176 3.4357 0 3.62647 0 3.82538V8.17462C0 8.37353 0.0790178 8.5643 0.21967 8.70495L3.29505 11.7803C3.4357 11.921 3.62647 12 3.82538 12H8.17462C8.37353 12 8.5643 11.921 8.70495 11.7803L11.7803 8.70495C11.921 8.5643 12 8.37353 12 8.17462V3.82538C12 3.62647 11.921 3.4357 11.7803 3.29505L8.70495 0.21967C8.5643 0.0790177 8.37353 0 8.17462 0H3.82538ZM6.5625 2.8125V3.375V6V6.5625H5.4375V6V3.375V2.8125H6.5625ZM6 9C6.41421 9 6.75 8.66421 6.75 8.25C6.75 7.83579 6.41421 7.5 6 7.5C5.58579 7.5 5.25 7.83579 5.25 8.25C5.25 8.66421 5.58579 9 6 9Z\",fill:\"#EAEAEA\"})})}function tG(e){return(0,y.jsx)(\"svg\",tq(tV({width:\"12\",height:\"12\",viewBox:\"0 0 14 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},e),{children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M3.08889 11.8384L2.62486 12.3024L1.69678 11.3744L2.16082 10.9103L6.07178 6.99937L2.16082 3.08841L1.69678 2.62437L2.62486 1.69629L3.08889 2.16033L6.99986 6.07129L10.9108 2.16033L11.3749 1.69629L12.3029 2.62437L11.8389 3.08841L7.92793 6.99937L11.8389 10.9103L12.3029 11.3744L11.3749 12.3024L10.9108 11.8384L6.99986 7.92744L3.08889 11.8384Z\",fill:\"currentColor\"})}))}var tJ=__nested_webpack_require_381207__(\"./src/next-devtools/dev-overlay/hooks/use-delayed-render.ts\"),t0=__nested_webpack_require_381207__(\"./src/next-devtools/dev-overlay/components/errors/dev-tools-indicator/dev-tools-info/dev-tools-info.tsx\");function t1(e){var n,t;return(0,y.jsxs)(t0.x,(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({title:\"Turbopack\",learnMoreLink:\"https://nextjs.org/docs/app/api-reference/turbopack\"},e),t=t={children:[(0,y.jsxs)(\"article\",{className:\"dev-tools-info-article\",children:[(0,y.jsxs)(\"p\",{className:\"dev-tools-info-paragraph\",children:[\"Turbopack is an incremental bundler optimized for JavaScript and TypeScript, written in Rust, and built into Next.js. Turbopack can be used in Next.js in both the\",\" \",(0,y.jsx)(\"code\",{className:\"dev-tools-info-code\",children:\"pages\"}),\" and\",\" \",(0,y.jsx)(\"code\",{className:\"dev-tools-info-code\",children:\"app\"}),\" directories for faster local development.\"]}),(0,y.jsxs)(\"p\",{className:\"dev-tools-info-paragraph\",children:[\"To enable Turbopack, use the\",\" \",(0,y.jsx)(\"code\",{className:\"dev-tools-info-code\",children:\"--turbopack\"}),\" flag when running the Next.js development server.\"]})]}),(0,y.jsx)(\"div\",{className:\"dev-tools-info-code-block-container\",children:(0,y.jsxs)(\"div\",{className:\"dev-tools-info-code-block\",children:[(0,y.jsx)(e3,{actionLabel:\"Copy Next.js Turbopack Command\",successLabel:\"Next.js Turbopack Command Copied\",content:\"--turbopack\",className:\"dev-tools-info-copy-button\"}),(0,y.jsx)(\"pre\",{className:\"dev-tools-info-code-block-pre\",children:(0,y.jsxs)(\"code\",{children:[(0,y.jsx)(\"div\",{className:\"dev-tools-info-code-block-line\",children:\" \"}),(0,y.jsx)(\"div\",{className:\"dev-tools-info-code-block-line\",children:\"{\"}),(0,y.jsxs)(\"div\",{className:\"dev-tools-info-code-block-line\",children:[\" \",(0,y.jsx)(\"span\",{className:\"dev-tools-info-code-block-json-key\",children:'\"scripts\"'}),\": \",\"{\"]}),(0,y.jsxs)(\"div\",{className:\"dev-tools-info-code-block-line dev-tools-info-highlight\",children:[\" \",(0,y.jsx)(\"span\",{className:\"dev-tools-info-code-block-json-key\",children:'\"dev\"'}),\":\",\" \",(0,y.jsx)(\"span\",{className:\"dev-tools-info-code-block-json-value\",children:'\"next dev --turbopack\"'}),\",\"]}),(0,y.jsxs)(\"div\",{className:\"dev-tools-info-code-block-line\",children:[\" \",(0,y.jsx)(\"span\",{className:\"dev-tools-info-code-block-json-key\",children:'\"build\"'}),\":\",\" \",(0,y.jsx)(\"span\",{className:\"dev-tools-info-code-block-json-value\",children:'\"next build\"'}),\",\"]}),(0,y.jsxs)(\"div\",{className:\"dev-tools-info-code-block-line\",children:[\" \",(0,y.jsx)(\"span\",{className:\"dev-tools-info-code-block-json-key\",children:'\"start\"'}),\":\",\" \",(0,y.jsx)(\"span\",{className:\"dev-tools-info-code-block-json-value\",children:'\"next start\"'}),\",\"]}),(0,y.jsxs)(\"div\",{className:\"dev-tools-info-code-block-line\",children:[\" \",(0,y.jsx)(\"span\",{className:\"dev-tools-info-code-block-json-key\",children:'\"lint\"'}),\":\",\" \",(0,y.jsx)(\"span\",{className:\"dev-tools-info-code-block-json-value\",children:'\"next lint\"'})]}),(0,y.jsx)(\"div\",{className:\"dev-tools-info-code-block-line\",children:\" }\"}),(0,y.jsx)(\"div\",{className:\"dev-tools-info-code-block-line\",children:\"}\"}),(0,y.jsx)(\"div\",{className:\"dev-tools-info-code-block-line\",children:\" \"})]})})]})})]},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function t2(e){var n=e.routerType;return(0,y.jsxs)(\"article\",{className:\"dev-tools-info-article\",children:[(0,y.jsxs)(\"p\",{className:\"dev-tools-info-paragraph\",children:[\"The path\",\" \",(0,y.jsx)(\"code\",{className:\"dev-tools-info-code\",children:window.location.pathname}),\" \",'is marked as \"static\" since it will be prerendered during the build time.']}),(0,y.jsxs)(\"p\",{className:\"dev-tools-info-paragraph\",children:[\"With Static Rendering, routes are rendered at build time, or in the background after\",\" \",(0,y.jsx)(\"a\",{className:\"dev-tools-info-link\",href:\"pages\"===n?\"https://nextjs.org/docs/pages/building-your-application/data-fetching/incremental-static-regeneration\":\"https://nextjs.org/docs/app/building-your-application/data-fetching/incremental-static-regeneration\",target:\"_blank\",rel:\"noopener noreferrer\",children:\"data revalidation\"}),\".\"]}),(0,y.jsx)(\"p\",{className:\"dev-tools-info-paragraph\",children:\"Static rendering is useful when a route has data that is not personalized to the user and can be known at build time, such as a static blog post or a product page.\"})]})}function t4(e){var n=e.routerType;return(0,y.jsxs)(\"article\",{className:\"dev-tools-info-article\",children:[(0,y.jsxs)(\"p\",{className:\"dev-tools-info-paragraph\",children:[\"The path\",\" \",(0,y.jsx)(\"code\",{className:\"dev-tools-info-code\",children:window.location.pathname}),\" \",'is marked as \"dynamic\" since it will be rendered for each user at',\" \",(0,y.jsx)(\"strong\",{children:\"request time\"}),\".\"]}),(0,y.jsx)(\"p\",{className:\"dev-tools-info-paragraph\",children:\"Dynamic rendering is useful when a route has data that is personalized to the user or has information that can only be known at request time, such as cookies or the URL's search params.\"}),\"pages\"===n?(0,y.jsxs)(\"p\",{className:\"dev-tools-info-pagraph\",children:[\"Exporting the\",\" \",(0,y.jsx)(\"a\",{className:\"dev-tools-info-link\",href:\"https://nextjs.org/docs/pages/building-your-application/data-fetching/get-server-side-props\",target:\"_blank\",rel:\"noopener noreferrer\",children:\"getServerSideProps\"}),\" \",\"function will opt the route into dynamic rendering. This function will be called by the server on every request.\"]}):(0,y.jsxs)(\"p\",{className:\"dev-tools-info-paragraph\",children:[\"During rendering, if a\",\" \",(0,y.jsx)(\"a\",{className:\"dev-tools-info-link\",href:\"https://nextjs.org/docs/app/building-your-application/rendering/server-components#dynamic-apis\",target:\"_blank\",rel:\"noopener noreferrer\",children:\"Dynamic API\"}),\" \",\"or a\",\" \",(0,y.jsx)(\"a\",{className:\"dev-tools-info-link\",href:\"https://nextjs.org/docs/app/api-reference/functions/fetch\",target:\"_blank\",rel:\"noopener noreferrer\",children:\"fetch\"}),\" \",\"option of\",\" \",(0,y.jsx)(\"code\",{className:\"dev-tools-info-code\",children:\"{ cache: 'no-store' }\"}),\" \",\"is discovered, Next.js will switch to dynamically rendering the whole route.\"]})]})}var t5={pages:{static:\"https://nextjs.org/docs/pages/building-your-application/rendering/static-site-generation\",dynamic:\"https://nextjs.org/docs/pages/building-your-application/rendering/server-side-rendering\"},app:{static:\"https://nextjs.org/docs/app/building-your-application/rendering/server-components#static-rendering-default\",dynamic:\"https://nextjs.org/docs/app/building-your-application/rendering/server-components#dynamic-rendering\"}};function t3(e){var n,t,r=e.routeType,o=e.routerType,a=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"routeType\",\"routerType\"]),i=\"Static\"===r,l=i?t5[o].static:t5[o].dynamic;return(0,y.jsx)(t0.x,(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({title:\"\".concat(r,\" Route\"),learnMoreLink:l},a),t=t={children:i?(0,y.jsx)(t2,{routerType:o}):(0,y.jsx)(t4,{routerType:o})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function t6(){return(0,y.jsx)(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",width:\"16\",height:\"16\",viewBox:\"0 0 20 20\",fill:\"none\",children:(0,y.jsx)(\"path\",{fill:\"currentColor\",fillRule:\"evenodd\",d:\"m9.7 3.736.045-.236h.51l.044.236a2.024 2.024 0 0 0 1.334 1.536c.19.066.375.143.554.23.618.301 1.398.29 2.03-.143l.199-.136.36.361-.135.199a2.024 2.024 0 0 0-.143 2.03c.087.179.164.364.23.554.224.65.783 1.192 1.536 1.334l.236.044v.51l-.236.044a2.024 2.024 0 0 0-1.536 1.334 4.95 4.95 0 0 1-.23.554 2.024 2.024 0 0 0 .143 2.03l.136.199-.361.36-.199-.135a2.024 2.024 0 0 0-2.03-.143c-.179.087-.364.164-.554.23a2.024 2.024 0 0 0-1.334 1.536l-.044.236h-.51l-.044-.236a2.024 2.024 0 0 0-1.334-1.536 4.952 4.952 0 0 1-.554-.23 2.024 2.024 0 0 0-2.03.143l-.199.136-.36-.361.135-.199a2.024 2.024 0 0 0 .143-2.03 4.958 4.958 0 0 1-.23-.554 2.024 2.024 0 0 0-1.536-1.334l-.236-.044v-.51l.236-.044a2.024 2.024 0 0 0 1.536-1.334 4.96 4.96 0 0 1 .23-.554 2.024 2.024 0 0 0-.143-2.03l-.136-.199.361-.36.199.135a2.024 2.024 0 0 0 2.03.143c.179-.087.364-.164.554-.23a2.024 2.024 0 0 0 1.334-1.536ZM8.5 2h3l.274 1.46c.034.185.17.333.348.394.248.086.49.186.722.3.17.082.37.074.526-.033l1.226-.839 2.122 2.122-.84 1.226a.524.524 0 0 0-.032.526c.114.233.214.474.3.722.061.177.21.314.394.348L18 8.5v3l-1.46.274a.524.524 0 0 0-.394.348 6.47 6.47 0 0 1-.3.722.524.524 0 0 0 .033.526l.839 1.226-2.122 2.122-1.226-.84a.524.524 0 0 0-.526-.032 6.477 6.477 0 0 1-.722.3.524.524 0 0 0-.348.394L11.5 18h-3l-.274-1.46a.524.524 0 0 0-.348-.394 6.477 6.477 0 0 1-.722-.3.524.524 0 0 0-.526.033l-1.226.839-2.122-2.122.84-1.226a.524.524 0 0 0 .032-.526 6.453 6.453 0 0 1-.3-.722.524.524 0 0 0-.394-.348L2 11.5v-3l1.46-.274a.524.524 0 0 0 .394-.348c.086-.248.186-.49.3-.722a.524.524 0 0 0-.033-.526l-.839-1.226 2.122-2.122 1.226.84a.524.524 0 0 0 .526.032 6.46 6.46 0 0 1 .722-.3.524.524 0 0 0 .348-.394L8.5 2Zm3 8a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0Zm1.5 0a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z\",clipRule:\"evenodd\"})})}function t9(){return(0,y.jsx)(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",width:\"16\",height:\"16\",fill:\"none\",children:(0,y.jsx)(\"path\",{fill:\"currentColor\",fillRule:\"evenodd\",d:\"m.191 2.063.56.498 13.5 12 .561.498.997-1.121-.56-.498-1.81-1.608 2.88-3.342v-.98l-3.204-3.72C10.645.923 6.365.686 3.594 3.08L1.748 1.44 1.188.94.19 2.063ZM14.761 8l-2.442 2.836-1.65-1.466a3.001 3.001 0 0 0-4.342-3.86l-1.6-1.422a5.253 5.253 0 0 1 7.251.682L14.76 8ZM7.526 6.576l1.942 1.727a1.499 1.499 0 0 0-1.942-1.727Zm-7.845.935 1.722-2 1.137.979L1.24 8l2.782 3.23A5.25 5.25 0 0 0 9.9 12.703l.54 1.4a6.751 6.751 0 0 1-7.555-1.892L-.318 8.49v-.98Z\",clipRule:\"evenodd\"})})}function t8(){return(0,y.jsxs)(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",width:\"20\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\",children:[(0,y.jsx)(\"g\",{clipPath:\"url(#light_icon_clip_path)\",children:(0,y.jsx)(\"path\",{fill:\"currentColor\",fillRule:\"evenodd\",d:\"M8.75.75V0h-1.5v2h1.5V.75ZM3.26 4.32l-.53-.53-.354-.353-.53-.53 1.06-1.061.53.53.354.354.53.53-1.06 1.06Zm8.42-1.06.53-.53.353-.354.53-.53 1.061 1.06-.53.53-.354.354-.53.53-1.06-1.06ZM8 11.25a3.25 3.25 0 1 0 0-6.5 3.25 3.25 0 0 0 0 6.5Zm0 1.5a4.75 4.75 0 1 0 0-9.5 4.75 4.75 0 0 0 0 9.5Zm6-5.5h2v1.5h-2v-1.5Zm-13.25 0H0v1.5h2v-1.5H.75Zm1.62 5.32-.53.53 1.06 1.06.53-.53.354-.353.53-.53-1.06-1.061-.53.53-.354.354Zm10.2 1.06.53.53 1.06-1.06-.53-.53-.354-.354-.53-.53-1.06 1.06.53.53.353.354ZM8.75 14v2h-1.5v-2h1.5Z\",clipRule:\"evenodd\"})}),(0,y.jsx)(\"defs\",{children:(0,y.jsx)(\"clipPath\",{id:\"light_icon_clip_path\",children:(0,y.jsx)(\"path\",{fill:\"currentColor\",d:\"M0 0h16v16H0z\"})})})]})}function t7(){return(0,y.jsx)(\"svg\",{\"data-testid\":\"geist-icon\",height:\"16\",strokeLinejoin:\"round\",viewBox:\"0 0 16 16\",width:\"16\",children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M1.5 8.00005C1.5 5.53089 2.99198 3.40932 5.12349 2.48889C4.88136 3.19858 4.75 3.95936 4.75 4.7501C4.75 8.61609 7.88401 11.7501 11.75 11.7501C11.8995 11.7501 12.048 11.7454 12.1953 11.7361C11.0955 13.1164 9.40047 14.0001 7.5 14.0001C4.18629 14.0001 1.5 11.3138 1.5 8.00005ZM6.41706 0.577759C2.78784 1.1031 0 4.22536 0 8.00005C0 12.1422 3.35786 15.5001 7.5 15.5001C10.5798 15.5001 13.2244 13.6438 14.3792 10.9921L13.4588 9.9797C12.9218 10.155 12.3478 10.2501 11.75 10.2501C8.71243 10.2501 6.25 7.78767 6.25 4.7501C6.25 3.63431 6.58146 2.59823 7.15111 1.73217L6.41706 0.577759ZM13.25 1V1.75V2.75L14.25 2.75H15V4.25H14.25H13.25V5.25V6H11.75V5.25V4.25H10.75L10 4.25V2.75H10.75L11.75 2.75V1.75V1H13.25Z\",fill:\"currentColor\"})})}function re(){return(0,y.jsx)(\"svg\",{width:\"16\",height:\"16\",strokeLinejoin:\"round\",children:(0,y.jsx)(\"path\",{fill:\"currentColor\",fillRule:\"evenodd\",d:\"M0 2a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v8.5a1 1 0 0 1-1 1H8.75v3h1.75V16h-5v-1.5h1.75v-3H1a1 1 0 0 1-1-1V2Zm1.5.5V10h13V2.5h-13Z\",clipRule:\"evenodd\"})})}function rn(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function rt(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return rn(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return rn(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}var rr=\"bottom-left\"||0,ro=\"__nextjs_hide_shortcut\";function ra(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function ri(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||rs(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function rl(e){return function(e){if(Array.isArray(e))return ra(e)}(e)||function(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}(e)||rs(e)||function(){throw TypeError(\"Invalid attempt to spread non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function rs(e,n){if(e){if(\"string\"==typeof e)return ra(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return ra(e,n)}}function rc(){var e,n,t=(e=[\"\\n .shortcut-recorder {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n gap: 8px;\\n position: relative;\\n font-family: var(--font-stack-sans);\\n\\n .shortcut-recorder-button {\\n display: flex;\\n align-items: center;\\n gap: 4px;\\n background: transparent;\\n border: 1px dashed var(--color-gray-500);\\n border-radius: var(--rounded-lg);\\n padding: 6px 8px;\\n font-weight: 400;\\n font-size: var(--size-14);\\n color: var(--color-gray-1000);\\n transition: border-color 150ms var(--timing-swift);\\n\\n &[data-has-shortcut='true'] {\\n border: 1px solid var(--color-gray-alpha-400);\\n\\n &:hover {\\n border-color: var(--color-gray-500);\\n }\\n }\\n\\n &:hover {\\n border-color: var(--color-gray-600);\\n }\\n\\n &::placeholder {\\n color: var(--color-gray-900);\\n }\\n\\n &[data-pristine='false']::placeholder {\\n color: transparent;\\n }\\n\\n &:focus-visible {\\n outline: var(--focus-ring);\\n outline-offset: -1px;\\n }\\n }\\n\\n kbd {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n font-family: var(--font-stack-sans);\\n background: var(--color-gray-200);\\n min-width: 20px;\\n height: 20px;\\n font-size: 14px;\\n border-radius: 4px;\\n color: var(--color-gray-1000);\\n\\n &[data-symbol='false'] {\\n padding: 0 4px;\\n }\\n }\\n\\n .shortcut-recorder-clear-button {\\n cursor: pointer;\\n color: var(--color-gray-1000);\\n width: 20px;\\n height: 20px;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n border-radius: 4px;\\n transition: background 150ms var(--timing-swift);\\n\\n &:hover {\\n background: var(--color-gray-300);\\n }\\n\\n &:focus-visible {\\n outline: var(--focus-ring);\\n }\\n\\n svg {\\n width: 14px;\\n height: 14px;\\n }\\n }\\n }\\n\\n .shortcut-recorder-keys {\\n pointer-events: none;\\n user-select: none;\\n display: flex;\\n align-items: center;\\n gap: 2px;\\n }\\n\\n .shortcut-recorder-tooltip {\\n --gap: 8px;\\n --background: var(--color-gray-1000);\\n background: var(--background);\\n color: var(--color-background-100);\\n font-size: var(--size-14);\\n padding: 4px 8px;\\n border-radius: 8px;\\n position: absolute;\\n bottom: calc(100% + var(--gap));\\n text-align: center;\\n opacity: 0;\\n scale: 0.96;\\n white-space: nowrap;\\n user-select: none;\\n transition:\\n opacity 150ms var(--timing-swift),\\n scale 150ms var(--timing-swift);\\n\\n &[data-show='true'] {\\n opacity: 1;\\n scale: 1;\\n }\\n\\n svg {\\n position: absolute;\\n transform: translateX(-50%);\\n bottom: -6px;\\n left: 50%;\\n }\\n\\n .shortcut-recorder-status {\\n display: flex;\\n align-items: center;\\n gap: 6px;\\n }\\n\\n .shortcut-recorder-status-icon {\\n width: 7px;\\n height: 7px;\\n border-radius: 50%;\\n flex-shrink: 0;\\n background: var(--color-red-700);\\n\\n &[data-success='true'] {\\n background: var(--color-green-700);\\n }\\n }\\n }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return rc=function(){return t},t}var ru=[\"Meta\",\"Control\",\"Ctrl\",\"Alt\",\"Option\",\"Shift\"];function rd(e){var n=e.value,t=e.onChange,r=ri((0,x.useState)(!1),2),o=r[0],a=r[1],i=ri((0,x.useState)(null!=n?n:[]),2),l=i[0],s=i[1],c=ri((0,x.useState)(!1),2),u=c[0],d=c[1],f=(0,x.useRef)(null),p=(0,x.useRef)(null),h=!!n||l.length>0;function g(){var e;null==(e=p.current)||e.focus(),s([]),d(!1),setTimeout(function(){a(!0)}),t(null)}function m(){var e;f.current&&clearTimeout(f.current),a(!0),null==(e=p.current)||e.focus()}return(0,y.jsxs)(\"div\",{className:\"shortcut-recorder\",children:[(0,y.jsxs)(\"button\",{className:\"shortcut-recorder-button\",ref:p,onClick:m,onFocus:m,onBlur:function(){d(!1),a(!1)},onKeyDown:function(e){e.target===p.current&&\"Tab\"!==e.key&&(f.current&&clearTimeout(f.current),o||a(!0),3!==l.length&&(e.preventDefault(),e.stopPropagation(),s(function(t){if(t.includes(e.key))return t;if(!ru.includes(e.key)){var r=t.findIndex(function(e){return!ru.includes(e)});if(-1!==r){var o=rl(t);return o[r]=e.key,n(o),o}var a=rl(t).concat([e.key]);return n(a),a}for(var i=rl(t),l=ru.indexOf(e.key),s=0,c=0;c<i.length;c++)if(ru.includes(i[c])){if(l<ru.indexOf(i[c])){s=c;break}s=c+1}else break;return i.splice(s,0,e.key),n(i),i})));function n(e){f.current=window.setTimeout(function(){d(!0),t(e.join(\"+\")),f.current=window.setTimeout(function(){a(!1)},1e3)},180)}},\"data-has-shortcut\":h,\"data-shortcut-recorder\":\"true\",children:[h?(0,y.jsx)(\"div\",{className:\"shortcut-recorder-keys\",children:l.map(function(e){return(0,y.jsx)(rp,{children:e},e)})}):\"Record Shortcut\",h&&(0,y.jsx)(\"div\",{className:\"shortcut-recorder-clear-button\",role:\"button\",onClick:g,onFocus:function(e){return e.stopPropagation()},onKeyDown:function(e){(\"Enter\"===e.key||\" \"===e.key)&&(g(),e.stopPropagation())},\"aria-label\":\"Clear shortcut\",tabIndex:0,children:(0,y.jsx)(rg,{})})]}),(0,y.jsxs)(\"div\",{className:\"shortcut-recorder-tooltip\",\"data-show\":o,children:[(0,y.jsxs)(\"div\",{className:\"shortcut-recorder-status\",children:[(0,y.jsx)(\"div\",{className:\"shortcut-recorder-status-icon\",\"data-success\":u}),u?\"Shortcut set\":\"Recording\"]}),(0,y.jsx)(rf,{})]})]})}function rf(){return(0,y.jsx)(\"svg\",{fill:\"none\",height:\"6\",viewBox:\"0 0 14 6\",width:\"14\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,y.jsx)(\"path\",{d:\"M13.8284 0H0.17157C0.702003 0 1.21071 0.210714 1.58578 0.585787L5.58578 4.58579C6.36683 5.36684 7.63316 5.36683 8.41421 4.58579L12.4142 0.585786C12.7893 0.210714 13.298 0 13.8284 0Z\",fill:\"var(--background)\"})})}function rp(e){var n=e.children,t=function(e){switch(e){case\"Meta\":return(0,y.jsx)(rh,{});case\"Alt\":case\"Option\":return\"⌥\";case\"Control\":case\"Ctrl\":return\"Ctrl\";case\"Shift\":return\"⇧\";case\"Enter\":return\"⏎\";case\"Escape\":case\"Esc\":return\"Esc\";case\" \":case\"Space\":case\"Spacebar\":return\"Space\";case\"ArrowUp\":return\"↑\";case\"ArrowDown\":return\"↓\";case\"ArrowLeft\":return\"←\";case\"ArrowRight\":return\"→\";case\"Tab\":return\"Tab\";case\"Backspace\":return\"⌫\";case\"Delete\":return\"⌦\";default:if(1===n.length)return n.toUpperCase();return n}}(n),r=\"string\"==typeof t&&1===t.length;return(0,y.jsx)(\"kbd\",{\"data-symbol\":r,children:t})}function rh(){var e=ri((0,x.useState)(\"\\xa0\"),2),n=e[0],t=e[1],r=rv(/^Mac/)||rv(/^iPhone/)||rv(/^iPad/)||rv(/^Mac/)&&navigator.maxTouchPoints>1;return(0,x.useEffect)(function(){!0===r&&t(\"⌘\"),!1===r&&t(\"Ctrl\")},[r]),(0,y.jsx)(\"span\",{style:{minWidth:\"1em\",display:\"inline-block\"},children:n})}function rg(){return(0,y.jsx)(\"svg\",{height:\"16\",strokeLinejoin:\"round\",viewBox:\"0 0 16 16\",width:\"16\",children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M12.4697 13.5303L13 14.0607L14.0607 13L13.5303 12.4697L9.06065 7.99999L13.5303 3.53032L14.0607 2.99999L13 1.93933L12.4697 2.46966L7.99999 6.93933L3.53032 2.46966L2.99999 1.93933L1.93933 2.99999L2.46966 3.53032L6.93933 7.99999L2.46966 12.4697L1.93933 13L2.99999 14.0607L3.53032 13.5303L7.99999 9.06065L12.4697 13.5303Z\",fill:\"currentColor\"})})}var rm=ei(rc());function rv(e){return\"undefined\"!=typeof window&&null!=window.navigator?e.test(window.navigator.platform):void 0}function rb(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function ry(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function rx(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}function rw(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function rj(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return rb(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return rb(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function rk(){var e,n,t=(e=[\"\\n .preferences-container {\\n width: 100%;\\n }\\n\\n @media (min-width: 576px) {\\n .preferences-container {\\n width: 480px;\\n }\\n }\\n\\n .preference-section:first-child {\\n padding-top: 0;\\n }\\n\\n .preference-section {\\n padding: 12px 0;\\n border-bottom: 1px solid var(--color-gray-400);\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n gap: 24px;\\n }\\n\\n .preference-section:last-child {\\n border-bottom: none;\\n }\\n\\n .preference-header {\\n margin-bottom: 0;\\n flex: 1;\\n }\\n\\n .preference-header label {\\n font-size: var(--size-14);\\n font-weight: 500;\\n color: var(--color-gray-1000);\\n margin: 0;\\n }\\n\\n .preference-description {\\n color: var(--color-gray-900);\\n font-size: var(--size-14);\\n margin: 0;\\n }\\n\\n .select-button,\\n .action-button {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n background: var(--color-background-100);\\n border: 1px solid var(--color-gray-400);\\n border-radius: var(--rounded-lg);\\n font-weight: 400;\\n font-size: var(--size-14);\\n color: var(--color-gray-1000);\\n padding: 6px 8px;\\n transition: border-color 150ms var(--timing-swift);\\n\\n &:hover {\\n border-color: var(--color-gray-500);\\n }\\n\\n svg {\\n width: 14px;\\n height: 14px;\\n overflow: visible;\\n }\\n }\\n\\n .select-button {\\n &:focus-within {\\n outline: var(--focus-ring);\\n outline-offset: -1px;\\n }\\n\\n select {\\n all: unset;\\n }\\n\\n option {\\n color: var(--color-gray-1000);\\n background: var(--color-background-100);\\n }\\n }\\n\\n :global(.icon) {\\n width: 18px;\\n height: 18px;\\n color: #666;\\n }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return rk=function(){return t},t}function rA(e){var n,t=e.setPosition,r=e.position,o=e.hide,a=e.scale,i=e.setScale,l=e.hideShortcut,s=e.setHideShortcut,c=rw(e,[\"setPosition\",\"position\",\"hide\",\"scale\",\"setScale\",\"hideShortcut\",\"setHideShortcut\"]),u=rj((0,x.useState)(function(){if(\"undefined\"==typeof localStorage)return\"system\";var e=localStorage.getItem(Q);return\"dark\"===e||\"light\"===e?e:\"system\"}()),2),d=u[0],f=u[1];function p(e){var n=\"/__nextjs_restart_dev\";e&&(n=\"/__nextjs_restart_dev?invalidatePersistentCache\"),fetch(n,{method:\"POST\"}).then(function(){})}return(0,y.jsxs)(t0.x,rx(ry({title:\"Preferences\"},c),{children:[(0,y.jsx)(\"h2\",{className:\"dev-tools-info-section-title\",children:\"General\"}),(0,y.jsxs)(\"div\",{className:\"preferences-container\",children:[(0,y.jsxs)(\"div\",{className:\"preference-section\",children:[(0,y.jsxs)(\"div\",{className:\"preference-header\",children:[(0,y.jsx)(\"label\",{htmlFor:\"theme\",children:\"Theme\"}),(0,y.jsx)(\"p\",{className:\"preference-description\",children:\"Select your theme preference.\"})]}),(0,y.jsxs)(rO,{id:\"theme\",name:\"theme\",prefix:(0,y.jsx)(rC,{theme:d}),value:d,onChange:function(e){var n=document.querySelector(\"nextjs-portal\");if(n){if(f(e.target.value),\"system\"===e.target.value){n.classList.remove(\"dark\"),n.classList.remove(\"light\"),localStorage.removeItem(Q);return}\"dark\"===e.target.value?(n.classList.add(\"dark\"),n.classList.remove(\"light\"),localStorage.setItem(Q,\"dark\")):(n.classList.remove(\"dark\"),n.classList.add(\"light\"),localStorage.setItem(Q,\"light\"))}},children:[(0,y.jsx)(\"option\",{value:\"system\",children:\"System\"}),(0,y.jsx)(\"option\",{value:\"light\",children:\"Light\"}),(0,y.jsx)(\"option\",{value:\"dark\",children:\"Dark\"})]})]}),(0,y.jsxs)(\"div\",{className:\"preference-section\",children:[(0,y.jsxs)(\"div\",{className:\"preference-header\",children:[(0,y.jsx)(\"label\",{htmlFor:\"position\",children:\"Position\"}),(0,y.jsx)(\"p\",{className:\"preference-description\",children:\"Adjust the placement of your dev tools.\"})]}),(0,y.jsxs)(rO,{id:\"position\",name:\"position\",value:r,onChange:function(e){t(e.target.value),localStorage.setItem(G,e.target.value)},children:[(0,y.jsx)(\"option\",{value:\"bottom-left\",children:\"Bottom Left\"}),(0,y.jsx)(\"option\",{value:\"bottom-right\",children:\"Bottom Right\"}),(0,y.jsx)(\"option\",{value:\"top-left\",children:\"Top Left\"}),(0,y.jsx)(\"option\",{value:\"top-right\",children:\"Top Right\"})]})]}),(0,y.jsxs)(\"div\",{className:\"preference-section\",children:[(0,y.jsxs)(\"div\",{className:\"preference-header\",children:[(0,y.jsx)(\"label\",{htmlFor:\"size\",children:\"Size\"}),(0,y.jsx)(\"p\",{className:\"preference-description\",children:\"Adjust the size of your dev tools.\"})]}),(0,y.jsx)(rO,{id:\"size\",name:\"size\",value:a,onChange:function(e){i(Number(e.target.value))},children:Object.entries(S).map(function(e){var n=rj(e,2),t=n[0],r=n[1];return(0,y.jsx)(\"option\",{value:r,children:t},t)})})]}),(0,y.jsxs)(\"div\",{className:\"preference-section\",children:[(0,y.jsxs)(\"div\",{className:\"preference-header\",children:[(0,y.jsx)(\"label\",{id:\"hide-dev-tools\",children:\"Hide Dev Tools for this session\"}),(0,y.jsx)(\"p\",{className:\"preference-description\",children:\"Hide Dev Tools until you restart your dev server, or 1 day.\"})]}),(0,y.jsx)(\"div\",{className:\"preference-control\",children:(0,y.jsxs)(\"button\",{\"aria-describedby\":\"hide-dev-tools\",name:\"hide-dev-tools\",\"data-hide-dev-tools\":!0,className:\"action-button\",onClick:o,children:[(0,y.jsx)(t9,{}),(0,y.jsx)(\"span\",{children:\"Hide\"})]})})]}),(0,y.jsxs)(\"div\",{className:\"preference-section\",children:[(0,y.jsxs)(\"div\",{className:\"preference-header\",children:[(0,y.jsx)(\"label\",{id:\"hide-dev-tools\",children:\"Hide Dev Tools shortcut\"}),(0,y.jsx)(\"p\",{className:\"preference-description\",children:\"Set a custom keyboard shortcut to toggle visibility.\"})]}),(0,y.jsx)(\"div\",{className:\"preference-control\",children:(0,y.jsx)(rd,{value:null!=(n=null==l?void 0:l.split(\"+\"))?n:null,onChange:s})})]}),(0,y.jsx)(\"div\",{className:\"preference-section\",children:(0,y.jsxs)(\"div\",{className:\"preference-header\",children:[(0,y.jsx)(\"label\",{children:\"Disable Dev Tools for this project\"}),(0,y.jsxs)(\"p\",{className:\"preference-description\",children:[\"To disable this UI completely, set\",\" \",(0,y.jsx)(\"code\",{className:\"dev-tools-info-code\",children:\"devIndicators: false\"}),\" \",\"in your \",(0,y.jsx)(\"code\",{className:\"dev-tools-info-code\",children:\"next.config\"}),\" \",\"file.\"]})]})})]}),(0,y.jsx)(\"h2\",{className:\"dev-tools-info-section-title\",children:\"Development Server\"}),(0,y.jsx)(\"div\",{className:\"preferences-container\",children:(0,y.jsxs)(\"div\",{className:\"preference-section\",children:[(0,y.jsxs)(\"div\",{className:\"preference-header\",children:[(0,y.jsx)(\"label\",{id:\"restart-dev-server\",children:\"Restart Dev Server\"}),(0,y.jsx)(\"p\",{className:\"preference-description\",children:\"Restarts the development server without needing to leave the browser.\"})]}),(0,y.jsx)(\"div\",{className:\"preference-control\",children:(0,y.jsx)(\"button\",{\"aria-describedby\":\"restart-dev-server\",title:\"Restarts the development server without needing to leave the browser.\",name:\"restart-dev-server\",\"data-restart-dev-server\":!0,className:\"action-button\",onClick:function(){return p(!1)},children:(0,y.jsx)(\"span\",{children:\"Restart\"})})})]})}), true?(0,y.jsx)(\"div\",{className:\"preferences-container\",children:(0,y.jsxs)(\"div\",{className:\"preference-section\",children:[(0,y.jsxs)(\"div\",{className:\"preference-header\",children:[(0,y.jsx)(\"label\",{id:\"reset-bundler-cache\",children:\"Reset Bundler Cache\"}),(0,y.jsx)(\"p\",{className:\"preference-description\",children:\"Clears the bundler cache and restarts the dev server. Helpful if you are seeing stale errors or changes are not appearing.\"})]}),(0,y.jsx)(\"div\",{className:\"preference-control\",children:(0,y.jsx)(\"button\",{\"aria-describedby\":\"reset-bundler-cache\",title:\"Clears the bundler cache and restarts the dev server. Helpful if you are seeing stale errors or changes are not appearing.\",name:\"reset-bundler-cache\",\"data-reset-bundler-cache\":!0,className:\"action-button\",onClick:function(){return p(!0)},children:(0,y.jsx)(\"span\",{children:\"Reset Cache\"})})})]})}):0]}))}function rO(e){var n=e.children,t=e.prefix,r=rw(e,[\"children\",\"prefix\"]);return(0,y.jsxs)(\"div\",{className:\"select-button\",children:[t,(0,y.jsx)(\"select\",rx(ry({},r),{children:n})),(0,y.jsx)(rE,{})]})}function rC(e){switch(e.theme){case\"system\":return(0,y.jsx)(re,{});case\"dark\":return(0,y.jsx)(t7,{});case\"light\":return(0,y.jsx)(t8,{});default:return null}}var rS=ei(rk());function rE(){return(0,y.jsx)(\"svg\",{width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",\"aria-hidden\":!0,children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M14.0607 5.49999L13.5303 6.03032L8.7071 10.8535C8.31658 11.2441 7.68341 11.2441 7.29289 10.8535L2.46966 6.03032L1.93933 5.49999L2.99999 4.43933L3.53032 4.96966L7.99999 9.43933L12.4697 4.96966L13 4.43933L14.0607 5.49999Z\",fill:\"currentColor\"})})}function r_(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function rP(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function rz(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}function rL(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function rT(e){return function(e){if(Array.isArray(e))return r_(e)}(e)||function(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}(e)||rR(e)||function(){throw TypeError(\"Invalid attempt to spread non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function rR(e,n){if(e){if(\"string\"==typeof e)return r_(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return r_(e,n)}}function rN(e){var n=e.children,t=e.padding,r=e.position,o=e.setPosition,a=e.onDragStart,i=e.dragHandleSelector,l=e.disableDrag,s=rL(e,[\"children\",\"padding\",\"position\",\"setPosition\",\"onDragStart\",\"dragHandleSelector\",\"disableDrag\"]),c=function(e){var n=(0,x.useRef)(null),t=(0,x.useRef)({state:\"idle\"}),r=(0,x.useRef)(null),o=(0,x.useRef)({x:0,y:0}),a=(0,x.useRef)({x:0,y:0}),i=(0,x.useRef)(0),l=(0,x.useRef)([]),s=(0,x.useCallback)(function(){var e,o;\"drag\"===t.current.state&&(null==(o=n.current)||o.releasePointerCapture(t.current.pointerId)),t.current=\"drag\"===t.current.state?{state:\"drag-end\"}:{state:\"idle\"},null!==r.current&&(r.current(),r.current=null),l.current=[],null==(e=n.current)||e.classList.remove(\"dev-tools-grabbing\")},[]);function c(e){n.current&&(a.current=e,n.current.style.translate=\"\".concat(e.x,\"px \").concat(e.y,\"px\"))}function u(e){if(\"drag-end\"===t.current.state){var r;e.preventDefault(),e.stopPropagation(),t.current={state:\"idle\"},null==(r=n.current)||r.removeEventListener(\"click\",u)}}function d(r){if(\"press\"===t.current.state){var s,u,d,f,p=r.clientX-o.current.x,h=r.clientY-o.current.y;Math.sqrt(p*p+h*h)>=e.threshold&&(t.current={state:\"drag\",pointerId:r.pointerId},null==(u=n.current)||u.setPointerCapture(r.pointerId),null==(d=n.current)||d.classList.add(\"dev-tools-grabbing\"),null==(f=e.onDragStart)||f.call(e))}if(\"drag\"===t.current.state){var g={x:r.clientX,y:r.clientY},m=g.x-o.current.x,v=g.y-o.current.y;o.current=g,c({x:a.current.x+m,y:a.current.y+v});var b=Date.now();b-i.current>=10&&(l.current=rT(l.current.slice(-5)).concat([{position:g,timestamp:b}])),i.current=b,null==(s=e.onDrag)||s.call(e,a.current)}}function f(){var n,t=function(e){if(e.length<2)return{x:0,y:0};var n=e[0],t=e[e.length-1],r=t.timestamp-n.timestamp;return 0===r?{x:0,y:0}:{x:1e3*((t.position.x-n.position.x)/r),y:1e3*((t.position.y-n.position.y)/r)}}(l.current);s(),null==(n=e.onDragEnd)||n.call(e,a.current,t)}return(0,x.useLayoutEffect)(function(){e.disabled&&s()},[s,e.disabled]),{ref:n,onPointerDown:function(a){var i,l;0===a.button&&(l=a.target,(!e.dragHandleSelector||!n.current||!l||l.matches&&l.matches(e.dragHandleSelector))&&(o.current={x:a.clientX,y:a.clientY},t.current={state:\"press\"},window.addEventListener(\"pointermove\",d),window.addEventListener(\"pointerup\",f),null!==r.current&&(r.current(),r.current=null),r.current=function(){window.removeEventListener(\"pointermove\",d),window.removeEventListener(\"pointerup\",f)},null==(i=n.current)||i.addEventListener(\"click\",u)))},animate:function(t){var r=n.current;null!==r&&(r.style.transition=\"translate 491.22ms var(--timing-bounce)\",r.addEventListener(\"transitionend\",function n(o){if(\"translate\"===o.propertyName){var i;null==(i=e.onAnimationEnd)||i.call(e,t),a.current={x:0,y:0},r.style.transition=\"\",r.removeEventListener(\"transitionend\",n)}}),c(t.translation))}}}({disabled:void 0!==l&&l,threshold:5,onDragStart:a,onDragEnd:function(e,n){var o,a,i,l,s,c,f,p,h,g,m,v,b,y,x,w,j,k,A;if(0===Math.sqrt(e.x*e.x+e.y*e.y)){null==(o=u.current)||o.style.removeProperty(\"translate\");return}d((y=(a={x:e.x+rD(n.x),y:e.y+rD(n.y)}).x,x=a.y,j=Object.entries(w=(p=2*t,h=(null==(c=u.current)?void 0:c.offsetWidth)||0,g=(null==(f=u.current)?void 0:f.offsetHeight)||0,m=window.innerWidth-document.documentElement.clientWidth,{\"top-left\":{x:0-(v=(l=(i=r).includes(\"right\"),s=i.includes(\"bottom\"),{x:l?window.innerWidth-m-p-h:0,y:s?window.innerHeight-p-g:0})).x,y:0-v.y},\"top-right\":{x:window.innerWidth-m-p-h-v.x,y:0-v.y},\"bottom-left\":{x:0-v.x,y:window.innerHeight-p-g-v.y},\"bottom-right\":{x:window.innerWidth-m-p-h-v.x,y:window.innerHeight-p-g-v.y}})).map(function(e){var n,t,r=(t=2,function(e){if(Array.isArray(e))return e}(n=e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||rR(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),o=r[0],a=r[1];return{key:o,distance:Math.sqrt(Math.pow(y-a.x,2)+Math.pow(x-a.y,2))}}),k=(b=Math).min.apply(b,rT(j.map(function(e){return e.distance}))),(A=j.find(function(e){return e.distance===k}))?{translation:w[A.key],corner:A.key}:{corner:r,translation:w[r]}))},onAnimationEnd:function(e){var n=e.corner;setTimeout(function(){var e;null==(e=u.current)||e.style.removeProperty(\"translate\"),o(n)})},dragHandleSelector:i}),u=c.ref,d=c.animate,f=rL(c,[\"ref\",\"animate\"]);return(0,y.jsx)(\"div\",rz(rP(rz(rP({},s),{ref:u}),f),{style:{touchAction:\"none\"},children:n}))}function rD(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.999;return e/1e3*n/(1-n)}function rB(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function rM(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function rI(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){rM(e,n,t[n])})}return e}function rH(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function rF(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return rB(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return rB(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function rU(e){var n=e.state,t=e.errorCount,r=e.isBuildError,o=rH(e,[\"state\",\"errorCount\",\"isBuildError\"]),a=rF((0,x.useState)(!0),2),i=a[0],l=a[1];return(0,y.jsx)(r$,rI({routerType:n.routerType,semver:n.versionInfo.installed,issueCount:t,isDevBuilding:n.buildingIndicator,isDevRendering:n.renderingIndicator,isStaticRoute:n.staticIndicator,hide:function(){l(!1),fetch(\"/__nextjs_disable_dev_indicator\",{method:\"POST\"})},toggleVisibility:function(){l(!i)},isTurbopack:!!false,disabled:n.disableDevIndicator||!i,isBuildError:r,page:n.page},o))}var rV=(0,x.createContext)({}),rq={Root:\"root\",Turbo:\"turbo\",Route:\"route\",Preferences:\"preferences\",SegmentExplorer:\"segment-explorer\"},rW= false?0:function(){return null};function r$(e){var n,t,r,o,a,i,l,s=e.routerType,c=e.disabled,u=e.issueCount,d=e.isDevBuilding,f=e.isDevRendering,p=e.isStaticRoute,h=e.isTurbopack,g=e.isBuildError,m=e.hide,v=e.toggleVisibility,b=e.dispatch,w=e.scale,j=e.setScale,k=e.page,A=(0,x.useRef)(null),O=(0,x.useRef)(null),C=(0,x.useRef)(null),S=rF((0,x.useState)(null),2),E=S[0],_=S[1],P=rF((0,x.useState)(\"undefined\"!=typeof localStorage&&localStorage.getItem(G)?localStorage.getItem(G):rr),2),z=P[0],L=P[1],T=rF((0,x.useState)(-1),2),R=T[0],N=T[1],D=rF((t=(n=rt((0,x.useState)(function(){if(\"undefined\"==typeof localStorage)return null;var e=localStorage.getItem(ro);return e||null}()),2))[0],r=n[1],[t,function(e){r(e),null===e?localStorage.removeItem(ro):localStorage.setItem(ro,e)}]),2),B=D[0],I=D[1],F=E===rq.Root,U=E===rq.Turbo,V=E===rq.Route,q=E===rq.Preferences,W=E===rq.SegmentExplorer,$=(0,tJ.N)(F,{enterDelay:0,exitDelay:nQ.K7}),Z=$.mounted,Y=$.rendered;function X(e){if(\"first\"===e)return void setTimeout(function(){var e,n=null==(e=O.current)?void 0:e.querySelectorAll('[role=\"menuitem\"]');n&&X(Number(n[0].getAttribute(\"data-index\")))});if(\"last\"===e)return void setTimeout(function(){var e,n=null==(e=O.current)?void 0:e.querySelectorAll('[role=\"menuitem\"]');n&&X(n.length-1)});var n,t=null==(n=O.current)?void 0:n.querySelector('[data-index=\"'.concat(e,'\"]'));t&&(N(e),null==t||t.focus())}function K(){_(rq.Root),setTimeout(function(){X(R)},nQ.K7)}function Q(){_(function(e){return e===rq.Root?null:e})}(0,nQ.P5)(O,C,F),(0,nQ.O8)(O,C,Z,Q),o=B?rM({},B,function(){v();var e=A.current;e&&(e.dataset.hidden=\"true\"===e.dataset.hidden?\"false\":\"true\")}):{},a=C,(0,x.useEffect)(function(){var e=function(e){if(n=a,!(t=(0,nQ.vY)(n.current))||\"true\"!==t.contentEditable&&\"INPUT\"!==t.tagName&&\"TEXTAREA\"!==t.tagName&&\"SELECT\"!==t.tagName&&\"true\"!==t.dataset[\"shortcut-recorder\"]||t.hasAttribute(\"readonly\")){var n,t,r=[];e.metaKey&&r.push(\"Meta\"),e.ctrlKey&&r.push(\"Control\"),e.altKey&&r.push(\"Alt\"),e.shiftKey&&r.push(\"Shift\"),\"Meta\"!==e.key&&\"Control\"!==e.key&&\"Alt\"!==e.key&&\"Shift\"!==e.key&&r.push(e.key);var i=r.join(\"+\");o[i]&&(e.preventDefault(),o[i]())}};return window.addEventListener(\"keydown\",e),function(){return window.removeEventListener(\"keydown\",e)}},[o]),(0,x.useEffect)(function(){if(null===E){var e=setTimeout(function(){N(-1)},nQ.K7);return function(){return clearTimeout(e)}}},[E]);var J=rF(z.split(\"-\",2),2),ee=J[0],en=J[1],et=(rM(i={},ee,\"calc(100% + 8px)\"),rM(i,en,0),i);return(0,y.jsxs)(tR,{ref:A,\"data-nextjs-toast\":!0,style:(rM(l={\"--animate-out-duration-ms\":\"\".concat(nQ.K7,\"ms\"),\"--animate-out-timing-function\":nQ.uD,boxShadow:\"none\"},ee,\"\".concat(20,\"px\")),rM(l,en,\"\".concat(20,\"px\")),l),children:[(0,y.jsx)(rN,{padding:20,onDragStart:function(){return _(null)},position:z,setPosition:function(e){localStorage.setItem(G,e),L(e)},children:(0,y.jsx)(tY,{ref:C,\"aria-haspopup\":\"menu\",\"aria-expanded\":F,\"aria-controls\":\"nextjs-dev-tools-menu\",\"aria-label\":\"\".concat(F?\"Close\":\"Open\",\" Next.js Dev Tools\"),\"data-nextjs-dev-tools-button\":!0,disabled:c,issueCount:u,onTriggerClick:function(){E===rq.Root?_(null):(_(rq.Root),setTimeout(function(){X(\"first\")}))},toggleErrorOverlay:function(){b({type:H})},isDevBuilding:d,isDevRendering:f,isBuildError:g,scale:w})}),(0,y.jsx)(t3,{isOpen:V,close:K,triggerRef:C,style:et,routerType:s,routeType:p?\"Static\":\"Dynamic\"}),(0,y.jsx)(t1,{isOpen:U,close:K,triggerRef:C,style:et}),(0,y.jsx)(rA,{isOpen:q,close:K,triggerRef:C,style:et,hide:function(){_(null),m()},setPosition:L,position:z,scale:w,setScale:j,hideShortcut:B,setHideShortcut:I}), false?0:null,Z&&(0,y.jsx)(\"div\",{ref:O,id:\"nextjs-dev-tools-menu\",role:\"menu\",dir:\"ltr\",\"aria-orientation\":\"vertical\",\"aria-label\":\"Next.js Dev Tools Items\",tabIndex:-1,className:\"dev-tools-indicator-menu\",onKeyDown:function(e){switch(e.preventDefault(),e.key){case\"ArrowDown\":X(R+1);break;case\"ArrowUp\":X(R-1);break;case\"Home\":X(\"first\");break;case\"End\":X(\"last\")}},\"data-rendered\":Y,style:et,children:(0,y.jsxs)(rV.Provider,{value:{closeMenu:Q,selectedIndex:R,setSelectedIndex:N},children:[(0,y.jsxs)(\"div\",{className:\"dev-tools-indicator-inner\",children:[u>0&&(0,y.jsx)(rY,{title:\"\".concat(u,\" \").concat(1===u?\"issue\":\"issues\",\" found. Click to view details in the dev overlay.\"),index:0,label:\"Issues\",value:(0,y.jsx)(rX,{children:u}),onClick:function(){_(null),u>0&&b({type:M})}}),(0,y.jsx)(rY,{title:\"Current route is \".concat(p?\"static\":\"dynamic\",\".\"),label:\"Route\",index:1,value:p?\"Static\":\"Dynamic\",onClick:function(){return _(rq.Route)},\"data-nextjs-route-type\":p?\"static\":\"dynamic\"}),h?(0,y.jsx)(rY,{title:\"Turbopack is enabled.\",label:\"Turbopack\",value:\"Enabled\"}):(0,y.jsx)(rY,{index:2,title:\"Learn about Turbopack and how to enable it in your application.\",label:\"Try Turbopack\",value:(0,y.jsx)(rZ,{}),onClick:function(){return _(rq.Turbo)}})]}),(0,y.jsxs)(\"div\",{className:\"dev-tools-indicator-footer\",children:[(0,y.jsx)(rY,{\"data-preferences\":!0,label:\"Preferences\",value:(0,y.jsx)(t6,{}),onClick:function(){return _(rq.Preferences)},index:h?2:3}), false?0:null]})]})})]})}function rZ(){return(0,y.jsx)(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\",children:(0,y.jsx)(\"path\",{fill:\"#666\",fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M5.50011 1.93945L6.03044 2.46978L10.8537 7.293C11.2442 7.68353 11.2442 8.31669 10.8537 8.70722L6.03044 13.5304L5.50011 14.0608L4.43945 13.0001L4.96978 12.4698L9.43945 8.00011L4.96978 3.53044L4.43945 3.00011L5.50011 1.93945Z\"})})}function rY(e){var n,t,r=e.index,o=e.label,a=e.value,i=e.onClick,l=e.href,s=rH(e,[\"index\",\"label\",\"value\",\"onClick\",\"href\"]),c=\"function\"==typeof i||\"string\"==typeof l,u=(0,x.useContext)(rV),d=u.closeMenu,f=u.selectedIndex,p=u.setSelectedIndex,h=f===r;function g(){c&&(null==i||i(),d(),l&&window.open(l,\"_blank\",\"noopener, noreferrer\"))}return(0,y.jsxs)(\"div\",(n=rI({className:\"dev-tools-indicator-item\",\"data-index\":r,\"data-selected\":h,onClick:g,onMouseMove:function(){c&&void 0!==r&&f!==r&&p(r)},onMouseLeave:function(){return p(-1)},onKeyDown:function(e){(\"Enter\"===e.key||\" \"===e.key)&&g()},role:c?\"menuitem\":void 0,tabIndex:h?0:-1},s),t=t={children:[(0,y.jsx)(\"span\",{className:\"dev-tools-indicator-label\",children:o}),(0,y.jsx)(\"span\",{className:\"dev-tools-indicator-value\",children:a})]},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function rX(e){var n=e.children;return(0,y.jsxs)(\"span\",{className:\"dev-tools-indicator-issue-count\",\"data-has-issues\":n>0,children:[(0,y.jsx)(\"span\",{className:\"dev-tools-indicator-issue-count-indicator\"}),n]})}function rK(e){var n,t;return(0,y.jsx)(\"svg\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({xmlns:\"http://www.w3.org/2000/svg\",fill:\"currentColor\"},e),t=t={children:(0,y.jsx)(\"path\",{d:\"M4.30969 8.37891H2.38782C2.9805 10.3647 4.82188 11.8124 7.00012 11.8125C8.81977 11.8124 10.4043 10.8024 11.2228 9.30957L11.5382 8.73438L12.6896 9.36523L12.3741 9.94043L12.1681 10.2891C11.0815 11.993 9.17324 13.1249 7.00012 13.125C4.42207 13.1249 2.21747 11.5322 1.3136 9.27734V11.375H0.00109863V7.72266L0.0147705 7.58984C0.0760304 7.29089 0.340278 7.06641 0.657349 7.06641H4.30969V8.37891ZM7.00012 0.875C9.57685 0.875118 11.7819 2.46569 12.6866 4.71875V2.625H13.9991V6.27734C13.9991 6.63974 13.7053 6.93354 13.3429 6.93359H9.68958V5.62109H11.6115C11.0186 3.6356 9.17813 2.18763 7.00012 2.1875C5.17131 2.18757 3.57959 3.20771 2.76477 4.71289L2.45227 5.29004L1.29797 4.66504L1.61047 4.08789C2.64547 2.17605 4.67052 0.875068 7.00012 0.875Z\",fill:\"#A35200\"})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function rQ(e){return e.showButton?(0,y.jsxs)(\"button\",{className:\"restart-dev-server-button\",onClick:function(){fetch(\"/__nextjs_restart_dev?invalidatePersistentCache\",{method:\"POST\"}).then(function(){})},title:\"Clears the bundler cache and restarts the dev server. Helpful if you are seeing stale errors or changes are not appearing.\",children:[(0,y.jsx)(rK,{width:14,height:14}),\"Clear Bundler Cache & Restart\"]}):null}function rG(){var e,n,t=(e=[\"\\n [data-nextjs-version-staleness-indicator='fresh'] {\\n fill: var(--color-green-800);\\n stroke: var(--color-green-300);\\n }\\n [data-nextjs-version-staleness-indicator='stale'] {\\n fill: var(--color-amber-800);\\n stroke: var(--color-amber-300);\\n }\\n [data-nextjs-version-staleness-indicator='outdated'] {\\n fill: var(--color-red-800);\\n stroke: var(--color-red-300);\\n }\\n [data-nextjs-version-staleness-indicator='unknown'] {\\n fill: var(--color-gray-800);\\n stroke: var(--color-gray-300);\\n }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return rG=function(){return t},t}function rJ(e){var n=e.versionInfo,t=n.staleness,r=nB(n),o=r.text,a=r.indicatorClass,i=r.title;return t.startsWith(\"stale\")?(0,y.jsxs)(\"a\",{\"data-nextjs-devtools-panel-footer-tab\":!0,target:\"_blank\",rel:\"noopener noreferrer\",href:\"https://nextjs.org/docs/messages/version-staleness\",title:i,children:[(0,y.jsx)(nM,{\"data-nextjs-version-staleness-indicator\":a}),(0,y.jsx)(\"span\",{children:o})]}):(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-footer-tab\":!0,title:i,children:[(0,y.jsx)(nM,{\"data-nextjs-version-staleness-indicator\":a}),(0,y.jsx)(\"span\",{children:o})]})}var r0=ei(rG());function r1(){var e,n,t=(e=[\"\\n [data-nextjs-devtools-panel-footer] {\\n background-color: var(--color-background-200);\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n border-top: 1px solid var(--color-gray-400);\\n border-radius: 0 0 var(--rounded-xl) var(--rounded-xl);\\n height: auto;\\n }\\n\\n [data-nextjs-devtools-panel-footer-tab-group] {\\n display: flex;\\n align-items: center;\\n }\\n\\n [data-nextjs-devtools-panel-footer-tab] {\\n display: flex;\\n align-items: center;\\n padding: 12px;\\n gap: 8px;\\n align-self: stretch;\\n border-right: 1px solid var(--color-gray-400);\\n\\n color: var(--color-gray-900);\\n font-size: 12px;\\n font-family: var(--font-stack-monospace);\\n }\\n\\n [data-nextjs-devtools-panel-footer-tab-bundler-name='TURBOPACK'] {\\n background: linear-gradient(\\n to right,\\n var(--color-turbopack-text-red) 0%,\\n var(--color-turbopack-text-blue) 100%\\n );\\n background-clip: text;\\n -webkit-background-clip: text;\\n -webkit-text-fill-color: transparent;\\n }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return r1=function(){return t},t}function r2(e){var n=e.versionInfo,t=e.isDraggable,r=e.showRestartServerButton,o=(\"Webpack\"||0).toUpperCase();return(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-footer\":!0,\"data-nextjs-devtools-panel-draggable\":t,children:[(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-footer-tab-group\":!0,children:[(0,y.jsx)(rJ,{versionInfo:n}),(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-footer-tab\":!0,children:[(0,y.jsx)(\"span\",{\"data-nextjs-devtools-panel-footer-tab-bundler-name\":o,children:o}),(0,y.jsx)(\"span\",{\"data-nextjs-devtools-panel-footer-tab-bundler-status\":!0,children:\"enabled\"})]})]}),r&&(0,y.jsx)(\"div\",{\"data-nextjs-devtools-panel-footer-tab-group\":!0,children:(0,y.jsx)(rQ,{showButton:!0})})]})}var r4=ei(r1());function r5(e){var n,t;return(0,y.jsx)(\"svg\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",\"aria-hidden\":!0},e),t=t={children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M14.0607 5.49999L13.5303 6.03032L8.7071 10.8535C8.31658 11.2441 7.68341 11.2441 7.29289 10.8535L2.46966 6.03032L1.93933 5.49999L2.99999 4.43933L3.53032 4.96966L7.99999 9.43933L12.4697 4.96966L13 4.43933L14.0607 5.49999Z\",fill:\"currentColor\"})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function r3(e){var n,t,r=e.children,o=e.prefix,a=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"children\",\"prefix\"]);return(0,y.jsxs)(\"div\",{\"data-nextjs-select\":!0,children:[o,(0,y.jsx)(\"select\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({},a),t=t={children:r},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n)),(0,y.jsx)(r5,{width:16,height:16})]})}function r6(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function r9(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return r6(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return r6(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function r8(){var e,n,t=(e=[\"\\n [data-nextjs-devtools-panel-settings] {\\n padding: 16px;\\n }\\n\\n [data-nextjs-devtools-panel-settings-section]:first-child {\\n padding-top: 0;\\n }\\n\\n [data-nextjs-devtools-panel-settings-section] {\\n padding: 12px 0;\\n border-bottom: 1px solid var(--color-gray-400);\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n gap: 24px;\\n }\\n\\n [data-nextjs-devtools-panel-settings-section]:last-child {\\n padding-bottom: 0;\\n border-bottom: none;\\n }\\n\\n [data-nextjs-devtools-panel-settings-section-header] {\\n margin-bottom: 0;\\n flex: 1;\\n }\\n\\n [data-nextjs-devtools-panel-settings-section-header] label {\\n font-size: var(--size-14);\\n font-weight: 500;\\n color: var(--color-gray-1000);\\n margin: 0;\\n }\\n\\n [data-nextjs-devtools-panel-settings-section-description] {\\n color: var(--color-gray-900);\\n font-size: var(--size-14);\\n margin: 0;\\n }\\n\\n [data-nextjs-select],\\n [data-nextjs-devtools-panel-settings-section-action-button] {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n background: var(--color-background-100);\\n border: 1px solid var(--color-gray-400);\\n border-radius: var(--rounded-lg);\\n font-weight: 400;\\n font-size: var(--size-14);\\n color: var(--color-gray-1000);\\n padding: 6px 8px;\\n\\n &:hover {\\n background: var(--color-gray-100);\\n }\\n }\\n\\n [data-nextjs-select] {\\n &:focus-within {\\n outline: var(--focus-ring);\\n }\\n\\n select {\\n all: unset;\\n }\\n\\n option {\\n color: var(--color-gray-1000);\\n background: var(--color-background-100);\\n }\\n }\\n\\n :global(.icon) {\\n width: 18px;\\n height: 18px;\\n color: #666;\\n }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return r8=function(){return t},t}function r7(e){switch(e.theme){case\"system\":return(0,y.jsx)(re,{});case\"dark\":return(0,y.jsx)(t7,{});case\"light\":return(0,y.jsx)(t8,{});default:return null}}function oe(e){var n=e.devToolsPosition,t=e.scale,r=e.handlePositionChange,o=e.handleScaleChange,a=r9((0,x.useState)(function(){if(\"undefined\"==typeof localStorage)return\"system\";var e=localStorage.getItem(Q);return\"dark\"===e||\"light\"===e?e:\"system\"}()),2),i=a[0],l=a[1];function s(e){var n=\"/__nextjs_restart_dev\";e&&(n=\"/__nextjs_restart_dev?invalidatePersistentCache\"),fetch(n,{method:\"POST\"}).then(function(){})}return(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings\":!0,children:[(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section\":!0,children:[(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section-header\":!0,children:[(0,y.jsx)(\"label\",{htmlFor:\"theme\",children:\"Theme\"}),(0,y.jsx)(\"p\",{\"data-nextjs-devtools-panel-settings-section-description\":!0,children:\"Select your theme preference.\"})]}),(0,y.jsxs)(r3,{id:\"theme\",name:\"theme\",prefix:(0,y.jsx)(r7,{theme:i}),value:i,onChange:function(e){var n=document.querySelector(\"nextjs-portal\");if(n){if(l(e.target.value),\"system\"===e.target.value){n.classList.remove(\"dark\"),n.classList.remove(\"light\"),localStorage.removeItem(Q);return}\"dark\"===e.target.value?(n.classList.add(\"dark\"),n.classList.remove(\"light\"),localStorage.setItem(Q,\"dark\")):(n.classList.remove(\"dark\"),n.classList.add(\"light\"),localStorage.setItem(Q,\"light\"))}},children:[(0,y.jsx)(\"option\",{value:\"system\",children:\"System\"}),(0,y.jsx)(\"option\",{value:\"light\",children:\"Light\"}),(0,y.jsx)(\"option\",{value:\"dark\",children:\"Dark\"})]})]}),(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section\":!0,children:[(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section-header\":!0,children:[(0,y.jsx)(\"label\",{htmlFor:\"position\",children:\"Position\"}),(0,y.jsx)(\"p\",{\"data-nextjs-devtools-panel-settings-section-description\":!0,children:\"Adjust the placement of your dev tools.\"})]}),(0,y.jsxs)(r3,{id:\"position\",name:\"position\",value:n,onChange:r,children:[(0,y.jsx)(\"option\",{value:\"bottom-left\",children:\"Bottom Left\"}),(0,y.jsx)(\"option\",{value:\"bottom-right\",children:\"Bottom Right\"}),(0,y.jsx)(\"option\",{value:\"top-left\",children:\"Top Left\"}),(0,y.jsx)(\"option\",{value:\"top-right\",children:\"Top Right\"})]})]}),(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section\":!0,children:[(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section-header\":!0,children:[(0,y.jsx)(\"label\",{htmlFor:\"size\",children:\"Size\"}),(0,y.jsx)(\"p\",{\"data-nextjs-devtools-panel-settings-section-description\":!0,children:\"Adjust the size of your dev tools.\"})]}),(0,y.jsx)(r3,{id:\"size\",name:\"size\",value:t,onChange:o,children:Object.entries(S).map(function(e){var n=r9(e,2),t=n[0],r=n[1];return(0,y.jsx)(\"option\",{value:r,children:t},t)})})]}),(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section\":!0,children:[(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section-header\":!0,children:[(0,y.jsx)(\"label\",{id:\"hide-dev-tools\",children:\"Hide Dev Tools for this session\"}),(0,y.jsx)(\"p\",{\"data-nextjs-devtools-panel-settings-section-description\":!0,children:\"Hide Dev Tools until you restart your dev server, or 1 day.\"})]}),(0,y.jsx)(\"div\",{children:(0,y.jsxs)(\"button\",{\"aria-describedby\":\"hide-dev-tools\",name:\"hide-dev-tools\",\"data-hide-dev-tools\":!0,\"data-nextjs-devtools-panel-settings-section-action-button\":!0,onClick:function(){fetch(\"/__nextjs_disable_dev_indicator\",{method:\"POST\"})},children:[(0,y.jsx)(t9,{}),(0,y.jsx)(\"span\",{children:\"Hide\"})]})})]}),(0,y.jsx)(\"div\",{\"data-nextjs-devtools-panel-settings-section\":!0,children:(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section-header\":!0,children:[(0,y.jsx)(\"label\",{children:\"Disable Dev Tools for this project\"}),(0,y.jsxs)(\"p\",{\"data-nextjs-devtools-panel-settings-section-description\":!0,children:[\"To disable this UI completely, set\",\" \",(0,y.jsx)(\"code\",{className:\"dev-tools-info-code\",children:\"devIndicators: false\"}),\" in your \",(0,y.jsx)(\"code\",{className:\"dev-tools-info-code\",children:\"next.config\"}),\" file.\"]})]})}),(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section\":!0,children:[(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section-header\":!0,children:[(0,y.jsx)(\"label\",{id:\"restart-dev-server\",children:\"Restart Dev Server\"}),(0,y.jsx)(\"p\",{\"data-nextjs-devtools-panel-settings-section-description\":!0,children:\"Restarts the development server without needing to leave the browser.\"})]}),(0,y.jsx)(\"div\",{children:(0,y.jsx)(\"button\",{\"aria-describedby\":\"restart-dev-server\",title:\"Restarts the development server without needing to leave the browser.\",name:\"restart-dev-server\",\"data-restart-dev-server\":!0,\"data-nextjs-devtools-panel-settings-section-action-button\":!0,onClick:function(){return s(!1)},children:(0,y.jsx)(\"span\",{children:\"Restart\"})})})]}),process.env.__NEXT_TURBOPACK_PERSISTENT_CACHE?(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section\":!0,children:[(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section-header\":!0,children:[(0,y.jsx)(\"label\",{id:\"reset-bundler-cache\",children:\"Reset Bundler Cache\"}),(0,y.jsx)(\"p\",{\"data-nextjs-devtools-panel-settings-section-description\":!0,children:\"Clears the bundler cache and restarts the dev server. Helpful if you are seeing stale errors or changes are not appearing.\"})]}),(0,y.jsx)(\"div\",{children:(0,y.jsx)(\"button\",{\"aria-describedby\":\"reset-bundler-cache\",title:\"Clears the bundler cache and restarts the dev server. Helpful if you are seeing stale errors or changes are not appearing.\",name:\"reset-bundler-cache\",\"data-reset-bundler-cache\":!0,\"data-nextjs-devtools-panel-settings-section-action-button\":!0,onClick:function(){return s(!0)},children:(0,y.jsx)(\"span\",{children:\"Reset Cache\"})})})]}):null]})}var on=ei(r8());function ot(){var e,n,t=(e=[\"\\n [data-nextjs-devtools-panel-tab-issues-sidebar-frame-skeleton-bar] {\\n height: var(--size-12);\\n border-radius: 100px;\\n background: linear-gradient(\\n 90deg,\\n var(--color-gray-200) 25%,\\n var(--color-gray-100) 50%,\\n var(--color-gray-200) 75%\\n );\\n background-size: 200% 100%;\\n animation: skeleton-shimmer 1.5s ease-in-out infinite;\\n }\\n\\n [data-nextjs-devtools-panel-tab-issues-sidebar-frame-skeleton-bar='1'] {\\n width: 75%;\\n margin-bottom: 8px;\\n }\\n\\n [data-nextjs-devtools-panel-tab-issues-sidebar-frame-skeleton-bar='2'] {\\n width: 36.5%;\\n }\\n\\n @keyframes skeleton-shimmer {\\n 0% {\\n background-position: -200% 0;\\n }\\n 100% {\\n background-position: 200% 0;\\n }\\n }\\n\\n /* Respect user's motion preferences */\\n @media (prefers-reduced-motion: reduce) {\\n [data-nextjs-devtools-panel-tab-issues-sidebar-frame-skeleton-bar='1'],\\n [data-nextjs-devtools-panel-tab-issues-sidebar-frame-skeleton-bar='2'] {\\n animation: none;\\n background: var(--color-gray-200);\\n }\\n }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return ot=function(){return t},t}function or(){return(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(\"div\",{\"data-nextjs-devtools-panel-tab-issues-sidebar-frame-skeleton-bar\":\"1\"}),(0,y.jsx)(\"div\",{\"data-nextjs-devtools-panel-tab-issues-sidebar-frame-skeleton-bar\":\"2\"})]})}var oo=ei(ot());function oa(){var e,n,t=(e=[\"\\n [data-nextjs-devtools-panel-tab-issues-sidebar] {\\n display: flex;\\n flex-direction: column;\\n gap: 4px;\\n padding: 8px;\\n border-right: 1px solid var(--color-gray-400);\\n overflow-y: auto;\\n min-height: 0;\\n\\n @media (max-width: 575px) {\\n max-width: 112px;\\n }\\n\\n @media (min-width: 576px) {\\n max-width: 138px;\\n width: 100%;\\n }\\n\\n @media (min-width: 768px) {\\n max-width: 172.5px;\\n width: 100%;\\n }\\n\\n @media (min-width: 992px) {\\n max-width: 230px;\\n width: 100%;\\n }\\n }\\n\\n [data-nextjs-devtools-panel-tab-issues-sidebar-frame] {\\n display: flex;\\n flex-direction: column;\\n padding: 10px 8px;\\n border-radius: var(--rounded-lg);\\n transition: background-color 0.2s ease-in-out;\\n\\n &:hover {\\n background-color: var(--color-gray-200);\\n }\\n\\n &:active {\\n background-color: var(--color-gray-300);\\n }\\n }\\n\\n [data-nextjs-devtools-panel-tab-issues-sidebar-frame-active='true'] {\\n background-color: var(--color-gray-100);\\n }\\n\\n [data-nextjs-devtools-panel-tab-issues-sidebar-frame-error-type] {\\n display: inline-block;\\n align-self: flex-start;\\n color: var(--color-gray-1000);\\n font-size: var(--size-14);\\n font-weight: 500;\\n line-height: var(--size-20);\\n }\\n\\n [data-nextjs-devtools-panel-tab-issues-sidebar-frame-source] {\\n display: inline-block;\\n align-self: flex-start;\\n color: var(--color-gray-900);\\n font-size: var(--size-13);\\n line-height: var(--size-18);\\n }\\n\\n /* Ellipsis for long stack frame source or small devices. */\\n [data-nextjs-devtools-panel-tab-issues-sidebar-frame-error-type],\\n [data-nextjs-devtools-panel-tab-issues-sidebar-frame-source] {\\n overflow: hidden;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n max-width: 100%;\\n }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return oa=function(){return t},t}function oi(e){var n=e.runtimeErrors,t=e.activeIdx,r=e.setActiveIndex;return 0===n.length?null:(0,y.jsx)(\"aside\",{\"data-nextjs-devtools-panel-tab-issues-sidebar\":!0,children:n.map(function(e,n){var o=n===t;return(0,y.jsx)(os,{runtimeError:e,idx:n,isActive:o,setActiveIndex:r},n)})})}var ol=(0,x.memo)(function(e){var n=e.runtimeError,t=tj(n),r=(0,x.useMemo)(function(){var e,n=t.findIndex(function(e){return!e.ignored&&!!e.originalCodeFrame&&!!e.originalStackFrame});return null!=(e=t[n])?e:null},[t]);if(!(null==r?void 0:r.originalStackFrame))return null;var o=tz(n.error,n.type),a=eS(r.originalStackFrame);return(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(\"span\",{\"data-nextjs-devtools-panel-tab-issues-sidebar-frame-error-type\":!0,children:o}),(0,y.jsx)(\"span\",{\"data-nextjs-devtools-panel-tab-issues-sidebar-frame-source\":!0,children:a})]})}),os=(0,x.memo)(function(e){var n=e.runtimeError,t=e.idx,r=e.isActive,o=e.setActiveIndex;return(0,y.jsx)(\"button\",{\"data-nextjs-devtools-panel-tab-issues-sidebar-frame\":!0,\"data-nextjs-devtools-panel-tab-issues-sidebar-frame-active\":r,onClick:function(){return o(t)},children:(0,y.jsx)(x.Suspense,{fallback:(0,y.jsx)(or,{}),children:(0,y.jsx)(ol,{runtimeError:n})})})}),oc=ei(oa());function ou(){var e,n,t=(e=[\"\\n [data-nextjs-codeframe-skeleton] {\\n margin: 8px 0;\\n border-radius: 8px;\\n background-color: var(--color-background-200);\\n border: 1px solid var(--color-gray-400);\\n overflow: hidden;\\n }\\n\\n [data-nextjs-codeframe-skeleton-header] {\\n display: flex;\\n align-items: center;\\n padding: 12px;\\n border-bottom: 1px solid var(--color-gray-400);\\n border-radius: 8px 8px 0 0;\\n gap: 6px;\\n }\\n\\n [data-nextjs-codeframe-skeleton-icon] {\\n width: var(--size-16);\\n height: var(--size-16);\\n border-radius: 4px;\\n background: linear-gradient(\\n 90deg,\\n var(--color-gray-200) 25%,\\n var(--color-gray-100) 50%,\\n var(--color-gray-200) 75%\\n );\\n background-size: 200% 100%;\\n animation: skeleton-shimmer 1.5s ease-in-out infinite;\\n flex-shrink: 0;\\n }\\n\\n [data-nextjs-codeframe-skeleton-header-bar] {\\n width: 42.9%;\\n }\\n\\n [data-nextjs-codeframe-skeleton-button] {\\n width: var(--size-16);\\n height: var(--size-16);\\n border-radius: var(--rounded-full);\\n background: linear-gradient(\\n 90deg,\\n var(--color-gray-200) 25%,\\n var(--color-gray-100) 50%,\\n var(--color-gray-200) 75%\\n );\\n background-size: 200% 100%;\\n animation: skeleton-shimmer 1.5s ease-in-out infinite;\\n flex-shrink: 0;\\n }\\n\\n [data-nextjs-codeframe-skeleton-content] {\\n padding: 12px;\\n }\\n\\n [data-nextjs-codeframe-skeleton-line] {\\n height: var(--size-16);\\n border-radius: 100px;\\n background: linear-gradient(\\n 90deg,\\n var(--color-gray-200) 25%,\\n var(--color-gray-100) 50%,\\n var(--color-gray-200) 75%\\n );\\n background-size: 200% 100%;\\n animation: skeleton-shimmer 1.5s ease-in-out infinite;\\n margin-bottom: 8px;\\n }\\n\\n [data-nextjs-codeframe-skeleton-line]:last-child {\\n margin-bottom: 0;\\n }\\n\\n [data-nextjs-codeframe-skeleton-line-1] {\\n width: 32.5%;\\n }\\n\\n [data-nextjs-codeframe-skeleton-line-2] {\\n width: 56.8%;\\n }\\n\\n [data-nextjs-codeframe-skeleton-line-3] {\\n width: 29.6%;\\n }\\n\\n [data-nextjs-call-stack-container] {\\n position: relative;\\n margin-top: 8px;\\n }\\n\\n [data-nextjs-call-stack-count-skeleton] {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n width: var(--size-20);\\n height: var(--size-20);\\n border-radius: var(--rounded-full);\\n background: linear-gradient(\\n 90deg,\\n var(--color-gray-200) 25%,\\n var(--color-gray-100) 50%,\\n var(--color-gray-200) 75%\\n );\\n background-size: 200% 100%;\\n animation: skeleton-shimmer 1.5s ease-in-out infinite;\\n }\\n\\n [data-nextjs-call-stack-ignored-list-toggle-button-skeleton] {\\n all: unset;\\n display: flex;\\n align-items: center;\\n border-radius: 6px;\\n padding: 4px 6px;\\n margin-right: -6px;\\n }\\n\\n [data-nextjs-call-stack-skeleton-bar] {\\n height: var(--size-12);\\n width: 148px;\\n border-radius: 100px;\\n background: linear-gradient(\\n 90deg,\\n var(--color-gray-200) 25%,\\n var(--color-gray-100) 50%,\\n var(--color-gray-200) 75%\\n );\\n background-size: 200% 100%;\\n animation: skeleton-shimmer 1.5s ease-in-out infinite;\\n }\\n\\n @keyframes skeleton-shimmer {\\n 0% {\\n background-position: -200% 0;\\n }\\n 100% {\\n background-position: 200% 0;\\n }\\n }\\n\\n /* Respect user's motion preferences */\\n @media (prefers-reduced-motion: reduce) {\\n [data-nextjs-codeframe-skeleton-icon],\\n [data-nextjs-codeframe-skeleton-header-bar],\\n [data-nextjs-codeframe-skeleton-button],\\n [data-nextjs-codeframe-skeleton-line],\\n [data-nextjs-call-stack-count-skeleton],\\n [data-nextjs-call-stack-skeleton-bar] {\\n animation: none;\\n background: var(--color-gray-200);\\n }\\n }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return ou=function(){return t},t}function od(){return(0,y.jsxs)(y.Fragment,{children:[(0,y.jsxs)(\"div\",{\"data-nextjs-codeframe-skeleton\":!0,children:[(0,y.jsxs)(\"div\",{\"data-nextjs-codeframe-skeleton-header\":!0,children:[(0,y.jsx)(\"div\",{\"data-nextjs-codeframe-skeleton-icon\":!0}),(0,y.jsx)(\"div\",{\"data-nextjs-codeframe-skeleton-line\":!0,\"data-nextjs-codeframe-skeleton-header-bar\":!0})]}),(0,y.jsxs)(\"div\",{\"data-nextjs-codeframe-skeleton-content\":!0,children:[(0,y.jsx)(\"div\",{\"data-nextjs-codeframe-skeleton-line\":!0,\"data-nextjs-codeframe-skeleton-line-1\":!0}),(0,y.jsx)(\"div\",{\"data-nextjs-codeframe-skeleton-line\":!0,\"data-nextjs-codeframe-skeleton-line-2\":!0}),(0,y.jsx)(\"div\",{\"data-nextjs-codeframe-skeleton-line\":!0,\"data-nextjs-codeframe-skeleton-line-3\":!0})]})]}),(0,y.jsx)(\"div\",{\"data-nextjs-call-stack-container\":!0,children:(0,y.jsxs)(\"div\",{\"data-nextjs-call-stack-header\":!0,children:[(0,y.jsxs)(\"p\",{\"data-nextjs-call-stack-title\":!0,children:[\"Call Stack\",\" \",(0,y.jsx)(\"span\",{\"data-nextjs-call-stack-count\":!0,\"data-nextjs-call-stack-count-skeleton\":!0})]}),(0,y.jsx)(\"button\",{\"data-nextjs-call-stack-ignored-list-toggle-button\":!0,\"data-nextjs-call-stack-ignored-list-toggle-button-skeleton\":!0,\"aria-hidden\":\"true\",children:(0,y.jsx)(\"div\",{\"data-nextjs-call-stack-skeleton-bar\":!0})})]})})]})}var of=ei(ou());function op(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function oh(e,n,t,r,o,a,i){try{var l=e[a](i),s=l.value}catch(e){t(e);return}l.done?n(s):Promise.resolve(s).then(r,o)}function og(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function om(){var e,n,t=(e=[\"\\n [data-nextjs-issue-feedback-button-group] {\\n display: flex;\\n align-items: center;\\n border: 1px solid var(--color-gray-400);\\n border-radius: var(--rounded-full);\\n background: var(--color-background-100);\\n box-shadow: var(--shadow-small);\\n }\\n\\n [data-nextjs-issue-feedback-button-group] button {\\n height: 100%;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n }\\n\\n [data-nextjs-issue-feedback-button-group] button:first-child {\\n padding: 4px 3px 4px 5px;\\n border-radius: var(--rounded-full) 0 0 var(--rounded-full);\\n }\\n\\n [data-nextjs-issue-feedback-button-group] button:last-child {\\n padding: 4px 5px 4px 3px;\\n border-radius: 0 var(--rounded-full) var(--rounded-full) 0;\\n }\\n\\n [data-nextjs-issue-feedback-separator] {\\n width: 1px;\\n height: 100%;\\n background: var(--color-gray-400);\\n }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return om=function(){return t},t}function ov(e){var n,t,r=e.errorCode,o=(n=(0,x.useState)({}),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||function(e,n){if(e){if(\"string\"==typeof e)return op(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return op(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),a=o[0],i=o[1],l=a[r],s=false,c=(0,x.useCallback)(function(e){var n;return(n=function(){return function(e,n){var t,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create((\"function\"==typeof Iterator?Iterator:Object).prototype);return i.next=l(0),i.throw=l(1),i.return=l(2),\"function\"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function l(l){return function(s){var c=[l,s];if(t)throw TypeError(\"Generator is already executing.\");for(;i&&(i=0,c[0]&&(a=0)),a;)try{if(t=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,r=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=n.call(e,a)}catch(e){c=[6,e],r=0}finally{t=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}(this,function(n){switch(n.label){case 0:i(function(n){var t,o;return t=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){og(e,n,t[n])})}return e}({},n),o=null!=(o=og({},r,e))?o:{},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(o)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(o)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(o,e))}),t}),n.label=1;case 1:return n.trys.push([1,3,,4]),[4,fetch(\"\".concat( false||\"\",\"/__nextjs_error_feedback?\").concat(new URLSearchParams({errorCode:r,wasHelpful:e.toString()})))];case 2:return n.sent().ok||console.error(\"Failed to record feedback on the server.\"),[3,4];case 3:return console.error(\"Failed to record feedback:\",n.sent()),[3,4];case 4:return[2]}})},function(){var e=this,t=arguments;return new Promise(function(r,o){var a=n.apply(e,t);function i(e){oh(a,r,o,i,l,\"next\",e)}function l(e){oh(a,r,o,i,l,\"throw\",e)}i(void 0)})})()},[r]);return(0,y.jsxs)(\"div\",{\"data-nextjs-issue-feedback-button-group\":!0,children:[(0,y.jsx)(\"button\",{\"aria-disabled\":s?\"true\":void 0,\"aria-label\":\"Mark as helpful\",onClick:s?void 0:function(){return c(!0)},className:(0,eJ.cx)(\"feedback-button\",!0===l&&\"voted\"),title:s?\"Feedback disabled due to setting NEXT_TELEMETRY_DISABLED\":void 0,type:\"button\",children:(0,y.jsx)(nw,{\"aria-hidden\":\"true\"})}),(0,y.jsx)(\"div\",{\"data-nextjs-issue-feedback-separator\":!0}),(0,y.jsx)(\"button\",{\"aria-disabled\":s?\"true\":void 0,\"aria-label\":\"Mark as not helpful\",onClick:s?void 0:function(){return c(!1)},className:(0,eJ.cx)(\"feedback-button\",!1===l&&\"voted\"),title:s?\"Feedback disabled due to setting NEXT_TELEMETRY_DISABLED\":void 0,type:\"button\",children:(0,y.jsx)(nj,{\"aria-hidden\":\"true\",style:{translate:\"1px 1px\"}})})]})}var ob=ei(om());function oy(){var e,n,t=(e=[\"\\n [data-nextjs-devtools-panel-tab-issues-content-layout] {\\n flex: 1;\\n display: flex;\\n flex-direction: column;\\n overflow-y: auto;\\n min-height: 0;\\n padding: 14px;\\n }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return oy=function(){return t},t}function ox(e){var n=e.error,t=e.errorType,r=e.message,o=e.debugInfo,a=e.children,i=e.errorCode,l=e.environmentName;return(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-tab-issues-content-layout\":!0,children:[(0,y.jsxs)(\"div\",{className:\"nextjs-container-errors-header\",children:[(0,y.jsxs)(\"div\",{className:\"nextjs__container_errors__error_title\",\"data-nextjs-error-code\":i,children:[(0,y.jsxs)(\"span\",{\"data-nextjs-error-label-group\":!0,children:[(0,y.jsx)(nL,{errorType:t}),l&&(0,y.jsx)(nK,{environmentName:l})]}),(0,y.jsx)(nx,{error:n,debugInfo:o,feedbackButton:i&&(0,y.jsx)(ov,{errorCode:i})})]}),(0,y.jsx)(nz,{errorMessage:r})]}),a]})}var ow=ei(oy());function oj(e){var n,t;return(0,y.jsx)(\"svg\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({width:\"12\",height:\"12\",viewBox:\"0 0 12 12\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},e),t=t={children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M3.98071 1.125L1.125 3.98071L1.125 8.01929L3.98071 10.875H8.01929L10.875 8.01929V3.98071L8.01929 1.125H3.98071ZM3.82538 0C3.62647 0 3.4357 0.0790176 3.29505 0.21967L0.21967 3.29505C0.0790176 3.4357 0 3.62647 0 3.82538V8.17462C0 8.37353 0.0790178 8.5643 0.21967 8.70495L3.29505 11.7803C3.4357 11.921 3.62647 12 3.82538 12H8.17462C8.37353 12 8.5643 11.921 8.70495 11.7803L11.7803 8.70495C11.921 8.5643 12 8.37353 12 8.17462V3.82538C12 3.62647 11.921 3.4357 11.7803 3.29505L8.70495 0.21967C8.5643 0.0790177 8.37353 0 8.17462 0H3.82538ZM6.5625 2.8125V3.375V6V6.5625H5.4375V6V3.375V2.8125H6.5625ZM6 9C6.41421 9 6.75 8.66421 6.75 8.25C6.75 7.83579 6.41421 7.5 6 7.5C5.58579 7.5 5.25 7.83579 5.25 8.25C5.25 8.66421 5.58579 9 6 9Z\",fill:\"currentColor\"})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function ok(){var e,n,t=(e=[\"\\n [data-nextjs-devtools-panel-tab-issues-empty] {\\n display: flex;\\n flex: 1;\\n padding: 12px;\\n min-height: 0;\\n }\\n\\n [data-nextjs-devtools-panel-tab-issues-empty-content] {\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center;\\n flex: 1;\\n border: 1px dashed var(--color-gray-alpha-500);\\n border-radius: 4px;\\n }\\n\\n [data-nextjs-devtools-panel-tab-issues-empty-icon] {\\n margin-bottom: 16px;\\n padding: 8px;\\n border: 1px solid var(--color-gray-alpha-400);\\n border-radius: 6px;\\n\\n background-color: var(--color-background-100);\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n }\\n\\n [data-nextjs-devtools-panel-tab-issues-empty-title] {\\n color: var(--color-gray-1000);\\n font-size: 16px;\\n font-weight: 500;\\n line-height: var(--line-height-20);\\n }\\n\\n [data-nextjs-devtools-panel-tab-issues-empty-subtitle] {\\n color: var(--color-gray-900);\\n font-size: 14px;\\n line-height: var(--line-height-21);\\n }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return ok=function(){return t},t}function oA(){return(0,y.jsx)(\"div\",{\"data-nextjs-devtools-panel-tab-issues-empty\":!0,children:(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-tab-issues-empty-content\":!0,children:[(0,y.jsx)(\"div\",{\"data-nextjs-devtools-panel-tab-issues-empty-icon\":!0,children:(0,y.jsx)(oj,{width:16,height:16})}),(0,y.jsx)(\"h3\",{\"data-nextjs-devtools-panel-tab-issues-empty-title\":!0,children:\"No Issues Found\"}),(0,y.jsx)(\"p\",{\"data-nextjs-devtools-panel-tab-issues-empty-subtitle\":!0,children:\"Issues will appear here when they occur.\"})]})})}var oO=ei(ok());function oC(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function oS(){var e,n,t=(e=[\"\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return oS=function(){return t},t}function oE(e){var n=e.notes,t=e.buildError,r=e.hydrationWarning,o=e.errorDetails,a=e.activeError,i=e.errorType,l=e.debugInfo,s=e.errorCode;return t?(0,y.jsx)(oz,{message:t,debugInfo:l}):(0,y.jsx)(o_,{notes:n,hydrationWarning:r,errorDetails:o,activeError:a,errorType:i,debugInfo:l,errorCode:s})}function o_(e){var n=e.notes,t=e.hydrationWarning,r=e.errorDetails,o=e.activeError,a=e.errorType,i=e.debugInfo,l=e.errorCode;return o&&a?(0,y.jsxs)(ox,{error:o.error,errorType:a,message:o.error.message,debugInfo:i,errorCode:l,environmentName:o.error.environmentName,children:[(0,y.jsxs)(\"div\",{className:\"error-overlay-notes-container\",children:[n?(0,y.jsx)(y.Fragment,{children:(0,y.jsx)(\"p\",{id:\"nextjs__container_errors__notes\",className:\"nextjs__container_errors__notes\",children:n})}):null,t?(0,y.jsx)(\"p\",{id:\"nextjs__container_errors__link\",className:\"nextjs__container_errors__link\",children:(0,y.jsx)(eb,{text:\"See more info here: \".concat(np)})}):null]}),(null==r?void 0:r.reactOutputComponentDiff)?(0,y.jsx)(th,{reactOutputComponentDiff:r.reactOutputComponentDiff||\"\"}):null,(0,y.jsx)(x.Suspense,{fallback:(0,y.jsx)(od,{}),children:(0,y.jsx)(oP,{error:o},o.id.toString())})]}):(0,y.jsx)(oA,{})}function oP(e){var n,t,r=e.error,o=(n=(0,x.useState)(!1),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||function(e,n){if(e){if(\"string\"==typeof e)return oC(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return oC(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),a=o[0],i=o[1],l=tj(r),s=(0,x.useMemo)(function(){return l.reduce(function(e,n){return e+ +!!n.ignored},0)},[l]),c=(0,x.useMemo)(function(){var e,n=l.findIndex(function(e){return!e.ignored&&!!e.originalCodeFrame&&!!e.originalStackFrame});return null!=(e=l[n])?e:null},[l]);return(0,y.jsxs)(y.Fragment,{children:[c&&c.originalStackFrame&&c.originalCodeFrame&&(0,y.jsx)(eq,{stackFrame:c.originalStackFrame,codeFrame:c.originalCodeFrame}),l.length>0&&(0,y.jsx)(tl,{frames:l,isIgnoreListOpen:a,onToggleIgnoreList:function(){return i(!a)},ignoredFramesTally:s})]})}function oz(e){var n=e.message,t=e.debugInfo,r=Error(n),o=(0,x.useMemo)(function(){return tt(n)||\"Failed to compile\"},[n]);return(0,y.jsx)(ox,{errorType:\"Build Error\",error:r,message:o,debugInfo:t,children:(0,y.jsx)(tn,{content:n})})}var oL=ei(oS());function oT(){var e,n,t=(e=[\"\\n [data-nextjs-devtools-panel-tab-issues] {\\n display: flex;\\n flex: 1;\\n min-height: 0;\\n }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return oT=function(){return t},t}function oR(e){var n=e.debugInfo,t=e.runtimeErrors,r=e.getSquashedHydrationErrorDetails,o=e.buildError,a=tS({runtimeErrors:t,getSquashedHydrationErrorDetails:r}),i=a.errorCode,l=a.errorType,s=a.hydrationWarning,c=a.activeError,u=a.activeIdx,d=a.setActiveIndex,f=a.notes,p=a.errorDetails;return(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-tab-issues\":!0,children:[o?null:(0,y.jsx)(oi,{runtimeErrors:t,errorType:l,activeIdx:u,setActiveIndex:d}),(0,y.jsx)(oE,{buildError:o,notes:f,hydrationWarning:s,errorDetails:p,activeError:c,errorType:l,debugInfo:n,errorCode:i})]})}var oN=ei(oT()),oD= false?0:function(){return null};function oB(e){var n=e.routerType,t=e.page;return(0,y.jsx)(oD,{isAppRouter:\"app\"===n,page:t})}function oM(e){var n=e.routerType,t=e.page;return(0,y.jsx)(oB,{routerType:n,page:t})}function oI(e){var n=e.activeTab,t=e.devToolsPosition,r=e.scale,o=e.routerType,a=e.handlePositionChange,i=e.handleScaleChange,l=e.debugInfo,s=e.runtimeErrors,c=e.getSquashedHydrationErrorDetails,u=e.buildError,d=e.page;switch(n){case\"settings\":return(0,y.jsx)(oe,{devToolsPosition:t,scale:r,handlePositionChange:a,handleScaleChange:i});case\"route\":return(0,y.jsx)(oM,{routerType:o,page:d});case\"issues\":return(0,y.jsx)(oR,{debugInfo:l,runtimeErrors:s,getSquashedHydrationErrorDetails:c,buildError:u});default:return null}}function oH(e){var n,t;return(0,y.jsx)(\"svg\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({width:\"12\",height:\"12\",viewBox:\"0 0 14 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},e),t=t={children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M3.08889 11.8384L2.62486 12.3024L1.69678 11.3744L2.16082 10.9103L6.07178 6.99937L2.16082 3.08841L1.69678 2.62437L2.62486 1.69629L3.08889 2.16033L6.99986 6.07129L10.9108 2.16033L11.3749 1.69629L12.3029 2.62437L11.8389 3.08841L7.92793 6.99937L11.8389 10.9103L12.3029 11.3744L11.3749 12.3024L10.9108 11.8384L6.99986 7.92744L3.08889 11.8384Z\",fill:\"currentColor\"})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function oF(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function oU(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function oV(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}function oq(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function oW(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return oF(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return oF(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function o$(){var e,n,t=(e=[\"\\n [data-next-badge-root] {\\n --timing: cubic-bezier(0.23, 0.88, 0.26, 0.92);\\n --duration-long: 250ms;\\n --color-outer-border: #171717;\\n --color-inner-border: hsla(0, 0%, 100%, 0.14);\\n --color-hover-alpha-subtle: hsla(0, 0%, 100%, 0.13);\\n --color-hover-alpha-error: hsla(0, 0%, 100%, 0.2);\\n --color-hover-alpha-error-2: hsla(0, 0%, 100%, 0.25);\\n --mark-size: calc(var(--size) - var(--size-2) * 2);\\n\\n --focus-color: var(--color-blue-800);\\n --focus-ring: 2px solid var(--focus-color);\\n\\n &:has([data-next-badge][data-error='true']) {\\n --focus-color: #fff;\\n }\\n }\\n\\n [data-disabled-icon] {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n padding-right: 4px;\\n }\\n\\n [data-next-badge] {\\n -webkit-font-smoothing: antialiased;\\n width: var(--size);\\n height: var(--size);\\n display: flex;\\n align-items: center;\\n position: relative;\\n background: rgba(0, 0, 0, 0.8);\\n box-shadow:\\n 0 0 0 1px var(--color-outer-border),\\n inset 0 0 0 1px var(--color-inner-border),\\n 0px 16px 32px -8px rgba(0, 0, 0, 0.24);\\n backdrop-filter: blur(48px);\\n border-radius: var(--rounded-full);\\n user-select: none;\\n cursor: pointer;\\n scale: 1;\\n overflow: hidden;\\n will-change: scale, box-shadow, width, background;\\n transition:\\n scale var(--duration-short) var(--timing),\\n width var(--duration-long) var(--timing),\\n box-shadow var(--duration-long) var(--timing),\\n background var(--duration-short) ease;\\n\\n &:active[data-error='false'] {\\n scale: 0.95;\\n }\\n\\n &[data-animate='true']:not(:hover) {\\n scale: 1.02;\\n }\\n\\n &[data-error='false']:has([data-next-mark]:focus-visible) {\\n outline: var(--focus-ring);\\n outline-offset: 3px;\\n }\\n\\n &[data-error='true'] {\\n background: #ca2a30;\\n --color-inner-border: #e5484d;\\n\\n [data-next-mark] {\\n background: var(--color-hover-alpha-error);\\n outline-offset: 0px;\\n\\n &:focus-visible {\\n outline: var(--focus-ring);\\n outline-offset: -1px;\\n }\\n\\n &:hover {\\n background: var(--color-hover-alpha-error-2);\\n }\\n }\\n }\\n\\n &[data-error-expanded='false'][data-error='true'] ~ [data-dot] {\\n scale: 1;\\n }\\n\\n > div {\\n display: flex;\\n }\\n }\\n\\n [data-issues-collapse]:focus-visible {\\n outline: var(--focus-ring);\\n }\\n\\n [data-issues]:has([data-issues-open]:focus-visible) {\\n outline: var(--focus-ring);\\n outline-offset: -1px;\\n }\\n\\n [data-dot] {\\n content: '';\\n width: var(--size-8);\\n height: var(--size-8);\\n background: #fff;\\n box-shadow: 0 0 0 1px var(--color-outer-border);\\n border-radius: 50%;\\n position: absolute;\\n top: 2px;\\n right: 0px;\\n scale: 0;\\n pointer-events: none;\\n transition: scale 200ms var(--timing);\\n transition-delay: var(--duration-short);\\n }\\n\\n [data-issues] {\\n --padding-left: 8px;\\n display: flex;\\n gap: 2px;\\n align-items: center;\\n padding-left: 8px;\\n padding-right: 8px;\\n height: var(--size-32);\\n margin-right: 2px;\\n border-radius: var(--rounded-full);\\n transition: background var(--duration-short) ease;\\n\\n &:has([data-issues-open]:hover) {\\n background: var(--color-hover-alpha-error);\\n }\\n\\n &:has([data-issues-collapse]) {\\n padding-right: calc(var(--padding-left) / 2);\\n }\\n\\n [data-cross] {\\n translate: 0px -1px;\\n }\\n }\\n\\n [data-issues-open] {\\n font-size: var(--size-13);\\n color: white;\\n width: fit-content;\\n height: 100%;\\n display: flex;\\n gap: 2px;\\n align-items: center;\\n margin: 0;\\n line-height: var(--size-36);\\n font-weight: 500;\\n z-index: 2;\\n white-space: nowrap;\\n\\n &:focus-visible {\\n outline: 0;\\n }\\n }\\n\\n [data-issues-collapse] {\\n width: var(--size-24);\\n height: var(--size-24);\\n border-radius: var(--rounded-full);\\n transition: background var(--duration-short) ease;\\n\\n &:hover {\\n background: var(--color-hover-alpha-error);\\n }\\n }\\n\\n [data-cross] {\\n color: #fff;\\n width: var(--size-12);\\n height: var(--size-12);\\n }\\n\\n [data-next-mark] {\\n width: var(--mark-size);\\n height: var(--mark-size);\\n margin: 0 2px;\\n display: flex;\\n align-items: center;\\n border-radius: var(--rounded-full);\\n transition: background var(--duration-long) var(--timing);\\n\\n &:focus-visible {\\n outline: 0;\\n }\\n\\n &:hover {\\n background: var(--color-hover-alpha-subtle);\\n }\\n\\n svg {\\n flex-shrink: 0;\\n width: var(--size-40);\\n height: var(--size-40);\\n }\\n }\\n\\n [data-issues-count-animation] {\\n display: grid;\\n place-items: center center;\\n font-variant-numeric: tabular-nums;\\n\\n &[data-animate='false'] {\\n [data-issues-count-exit],\\n [data-issues-count-enter] {\\n animation-duration: 0ms;\\n }\\n }\\n\\n > * {\\n grid-area: 1 / 1;\\n }\\n\\n [data-issues-count-exit] {\\n animation: fadeOut 300ms var(--timing) forwards;\\n }\\n\\n [data-issues-count-enter] {\\n animation: fadeIn 300ms var(--timing) forwards;\\n }\\n }\\n\\n [data-issues-count-plural] {\\n display: inline-block;\\n &[data-animate='true'] {\\n animation: fadeIn 300ms var(--timing) forwards;\\n }\\n }\\n\\n .path0 {\\n animation: draw0 1.5s ease-in-out infinite;\\n }\\n\\n .path1 {\\n animation: draw1 1.5s ease-out infinite;\\n animation-delay: 0.3s;\\n }\\n\\n .paused {\\n stroke-dashoffset: 0;\\n }\\n\\n @keyframes fadeIn {\\n 0% {\\n opacity: 0;\\n filter: blur(2px);\\n transform: translateY(8px);\\n }\\n 100% {\\n opacity: 1;\\n filter: blur(0px);\\n transform: translateY(0);\\n }\\n }\\n\\n @keyframes fadeOut {\\n 0% {\\n opacity: 1;\\n filter: blur(0px);\\n transform: translateY(0);\\n }\\n 100% {\\n opacity: 0;\\n transform: translateY(-12px);\\n filter: blur(2px);\\n }\\n }\\n\\n @keyframes draw0 {\\n 0%,\\n 25% {\\n stroke-dashoffset: -29.6;\\n }\\n 25%,\\n 50% {\\n stroke-dashoffset: 0;\\n }\\n 50%,\\n 75% {\\n stroke-dashoffset: 0;\\n }\\n 75%,\\n 100% {\\n stroke-dashoffset: 29.6;\\n }\\n }\\n\\n @keyframes draw1 {\\n 0%,\\n 20% {\\n stroke-dashoffset: -11.6;\\n }\\n 20%,\\n 50% {\\n stroke-dashoffset: 0;\\n }\\n 50%,\\n 75% {\\n stroke-dashoffset: 0;\\n }\\n 75%,\\n 100% {\\n stroke-dashoffset: 11.6;\\n }\\n }\\n\\n @media (prefers-reduced-motion) {\\n [data-issues-count-exit],\\n [data-issues-count-enter],\\n [data-issues-count-plural] {\\n animation-duration: 0ms !important;\\n }\\n }\\n \"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return o$=function(){return t},t}function oZ(e){var n=e.disabled,t=e.issueCount,r=e.isDevBuilding,o=e.isDevRendering,a=e.isBuildError,i=e.onTriggerClick,l=e.toggleErrorOverlay,s=e.scale,c=oq(e,[\"disabled\",\"issueCount\",\"isDevBuilding\",\"isDevRendering\",\"isBuildError\",\"onTriggerClick\",\"toggleErrorOverlay\",\"scale\"]),u=t>0,d=oW((0,x.useState)(u),2),f=d[0],p=d[1],h=oW((0,x.useState)(!1),2),g=h[0],m=h[1],v=tM(t,150),b=(0,x.useRef)(null),w=(0,x.useRef)(null),j=tF(w),k=tD(r||o),A=f||n;return(0,x.useEffect)(function(){p(u)},[u]),(0,y.jsxs)(\"div\",{\"data-next-badge-root\":!0,style:{\"--size\":\"\".concat(36/(void 0===s?1:s),\"px\"),\"--duration-short\":\"\".concat(150,\"ms\"),display:n&&(!u||g)?\"none\":\"block\"},children:[(0,y.jsx)(\"style\",{children:ei(o$())}),(0,y.jsx)(\"div\",{\"data-next-badge\":!0,\"data-error\":u,\"data-error-expanded\":A,\"data-animate\":v,style:{width:0===j?\"auto\":j},children:(0,y.jsxs)(\"div\",{ref:w,children:[!n&&(0,y.jsx)(\"button\",oV(oU({ref:b,\"data-next-mark\":!0,\"data-next-mark-loading\":k,onClick:i},c),{children:(0,y.jsx)(oX,{isLoading:k,isDevBuilding:r})})),A&&(0,y.jsxs)(\"div\",{\"data-issues\":!0,children:[(0,y.jsxs)(\"button\",{\"data-issues-open\":!0,\"aria-label\":\"Open issues overlay\",onClick:l,children:[n&&(0,y.jsx)(\"div\",{\"data-disabled-icon\":!0,children:(0,y.jsx)(oj,{})}),(0,y.jsx)(oY,{animate:v,\"data-issues-count-animation\":!0,children:t},t),\" \",(0,y.jsxs)(\"div\",{children:[\"Issue\",t>1&&(0,y.jsx)(\"span\",{\"aria-hidden\":!0,\"data-issues-count-plural\":!0,\"data-animate\":v&&2===t,children:\"s\"})]})]}),!a&&(0,y.jsx)(\"button\",{\"data-issues-collapse\":!0,\"aria-label\":\"Collapse issues badge\",onClick:function(){var e;n?m(!0):p(!1),null==(e=b.current)||e.focus()},children:(0,y.jsx)(oH,{\"data-cross\":!0})})]})]})}),(0,y.jsx)(\"div\",{\"aria-hidden\":!0,\"data-dot\":!0})]})}function oY(e){var n=e.children,t=e.animate,r=oq(e,[\"children\",\"animate\"]);return(0,y.jsxs)(\"div\",oV(oU({},r),{\"data-animate\":void 0===t||t,children:[(0,y.jsx)(\"div\",{\"aria-hidden\":!0,\"data-issues-count-exit\":!0,children:n-1}),(0,y.jsx)(\"div\",{\"data-issues-count\":!0,\"data-issues-count-enter\":!0,children:n})]}))}function oX(e){var n=e.isLoading,t=e.isDevBuilding?\"rgba(255,255,255,0.7)\":\"white\";return(0,y.jsxs)(\"svg\",{width:\"40\",height:\"40\",viewBox:\"0 0 40 40\",fill:\"none\",\"data-next-mark-loading\":n,children:[(0,y.jsxs)(\"g\",{transform:\"translate(8.5, 13)\",children:[(0,y.jsx)(\"path\",{className:n?\"path0\":\"paused\",d:\"M13.3 15.2 L2.34 1 V12.6\",fill:\"none\",stroke:\"url(#next_logo_paint0_linear_1357_10853)\",strokeWidth:\"1.86\",mask:\"url(#next_logo_mask0)\",strokeDasharray:\"29.6\",strokeDashoffset:\"29.6\"}),(0,y.jsx)(\"path\",{className:n?\"path1\":\"paused\",d:\"M11.825 1.5 V13.1\",strokeWidth:\"1.86\",stroke:\"url(#next_logo_paint1_linear_1357_10853)\",strokeDasharray:\"11.6\",strokeDashoffset:\"11.6\"})]}),(0,y.jsxs)(\"defs\",{children:[(0,y.jsxs)(\"linearGradient\",{id:\"next_logo_paint0_linear_1357_10853\",x1:\"9.95555\",y1:\"11.1226\",x2:\"15.4778\",y2:\"17.9671\",gradientUnits:\"userSpaceOnUse\",children:[(0,y.jsx)(\"stop\",{stopColor:t}),(0,y.jsx)(\"stop\",{offset:\"0.604072\",stopColor:t,stopOpacity:\"0\"}),(0,y.jsx)(\"stop\",{offset:\"1\",stopColor:t,stopOpacity:\"0\"})]}),(0,y.jsxs)(\"linearGradient\",{id:\"next_logo_paint1_linear_1357_10853\",x1:\"11.8222\",y1:\"1.40039\",x2:\"11.791\",y2:\"9.62542\",gradientUnits:\"userSpaceOnUse\",children:[(0,y.jsx)(\"stop\",{stopColor:t}),(0,y.jsx)(\"stop\",{offset:\"1\",stopColor:t,stopOpacity:\"0\"})]}),(0,y.jsxs)(\"mask\",{id:\"next_logo_mask0\",children:[(0,y.jsx)(\"rect\",{width:\"100%\",height:\"100%\",fill:\"white\"}),(0,y.jsx)(\"rect\",{width:\"5\",height:\"1.5\",fill:\"black\"})]})]})]})}function oK(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function oQ(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function oG(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return oK(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return oK(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function oJ(e){var n,t=e.state,r=e.dispatch,o=e.errorCount,a=e.isBuildError,i=oG((0,x.useState)(!1),2),l=i[0],s=i[1],c=oG(t.devToolsPosition.split(\"-\",2),2),u=c[0],d=c[1];return(0,y.jsx)(tR,{\"data-nextjs-toast\":!0,style:(oQ(n={\"--animate-out-duration-ms\":\"\".concat(nQ.K7,\"ms\"),\"--animate-out-timing-function\":nQ.uD,boxShadow:\"none\"},u,\"\".concat(20,\"px\")),oQ(n,d,\"\".concat(20,\"px\")),oQ(n,\"visibility\",t.isDevToolsPanelOpen||t.isErrorOverlayOpen?\"hidden\":\"visible\"),n),children:(0,y.jsx)(rN,{padding:20,onDragStart:function(){return s(!1)},position:t.devToolsPosition,setPosition:function(e){r({type:Y,devToolsPosition:e}),localStorage.setItem(G,e)},children:(0,y.jsx)(oZ,{\"aria-haspopup\":\"menu\",\"aria-expanded\":l,\"aria-controls\":\"nextjs-dev-tools-menu\",\"aria-label\":\"\".concat(l?\"Close\":\"Open\",\" Next.js Dev Tools\"),\"data-nextjs-dev-tools-button\":!0,disabled:t.disableDevIndicator,issueCount:o,onTriggerClick:function(){r({type:Z})},toggleErrorOverlay:function(){r({type:M}),r({type:W})},isDevBuilding:t.buildingIndicator,isDevRendering:t.renderingIndicator,isBuildError:a,scale:t.scale})})})}function o0(e){var n,t;return(0,y.jsx)(\"svg\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({xmlns:\"http://www.w3.org/2000/svg\",width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\"},e),t=t={children:(0,y.jsx)(\"path\",{d:\"M15 14C15 14.5523 14.5523 15 14 15H10V13.5H13.5V10H15V14ZM2.5 13.499H6V14.999H2C1.44772 14.999 1 14.5513 1 13.999V9.99902H2.5V13.499ZM6 2.5H2.5V6H1V2C1 1.44772 1.44772 1 2 1H6V2.5ZM14 1C14.5523 1 15 1.44772 15 2V6H13.5V2.5H10V1H14Z\",fill:\"currentColor\"})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function o1(e){var n,t;return(0,y.jsx)(\"svg\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({xmlns:\"http://www.w3.org/2000/svg\",width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\"},e),t=t={children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M1 6V4.5H4.5V1H6V5C6 5.55228 5.55228 6 5 6H1ZM11.5 1H10V5C10 5.55228 10.4477 6 11 6H15V4.5H11.5V1ZM15.04 11.5V10H11C10.4477 10 10 10.4477 10 11V15H11.5V11.5H15.04ZM4.5 15H6V11C6 10.4477 5.55228 10 5 10H1V11.5H4.5V15Z\",fill:\"currentColor\"})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function o2(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}var o4=\"nextjs-devtools-dimensions\",o5=(0,x.createContext)(null),o3=function(e){var n=.95*window.innerWidth,t=.95*window.innerHeight;return{width:Math.min(n,Math.max(e.minWidth,e.width)),height:Math.min(t,Math.max(e.minHeight,e.height))}},o6=function(){var e=localStorage.getItem(o4);if(!e)return null;try{var n,t=JSON.parse(e);if((void 0===t?\"undefined\":(n=t)&&\"undefined\"!=typeof Symbol&&n.constructor===Symbol?\"symbol\":typeof n)==\"object\"&&null!==t&&\"number\"==typeof t.width&&\"number\"==typeof t.height)return{width:t.width,height:t.height};return null}catch(e){return localStorage.removeItem(o4),null}},o9=function(e){var n,t,r,o,a=e.value,i=e.children,l=null!=(r=a.minWidth)?r:100,s=null!=(o=a.minHeight)?o:80,c=(n=(0,x.useState)(null),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||function(e,n){if(e){if(\"string\"==typeof e)return o2(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return o2(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),u=c[0],d=c[1];return(0,x.useLayoutEffect)(function(){var e=function(){if(a.resizeRef.current){var e=o6();if(e){var n,t,r=o3((n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({},e),t=t={minWidth:null!=l?l:100,minHeight:null!=s?s:80},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n)),o=r.height,i=r.width;a.resizeRef.current.style.width=\"\".concat(i,\"px\"),a.resizeRef.current.style.height=\"\".concat(o,\"px\")}}};return e(),window.addEventListener(\"resize\",e),function(){return window.removeEventListener(\"resize\",e)}},[a.resizeRef,l,s]),(0,y.jsx)(o5.Provider,{value:{resizeRef:a.resizeRef,minWidth:l,minHeight:s,devToolsPosition:a.devToolsPosition,draggingDirection:u,setDraggingDirection:d},children:i})},o8=function(){var e=(0,x.useContext)(o5);if(!e)throw Error(\"useResize must be used within a Resize provider\");return e},o7=__nested_webpack_require_381207__(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/components/devtools-panel/resize/resize-handle.css\"),ae={};function an(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}ae.styleTagTransform=h(),ae.setAttributes=u(),ae.insert=s(),ae.domAPI=i(),ae.insertStyleElement=f(),o()(o7.Z,ae),o7.Z&&o7.Z.locals&&o7.Z.locals;var at=function(e){var n,t,r=e.direction,o=o8(),a=o.resizeRef,i=o.minWidth,l=o.minHeight,s=o.devToolsPosition,c=o.draggingDirection,u=o.setDraggingDirection,d=(n=(0,x.useState)({top:0,right:0,bottom:0,left:0}),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||function(e,n){if(e){if(\"string\"==typeof e)return an(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return an(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),f=d[0],p=d[1];if((0,x.useLayoutEffect)(function(){if(a.current){var e=a.current,n=window.getComputedStyle(e);p({top:parseFloat(n.borderTopWidth)||0,right:parseFloat(n.borderRightWidth)||0,bottom:parseFloat(n.borderBottomWidth)||0,left:parseFloat(n.borderLeftWidth)||0})}},[a]),!(!s.split(\"-\").includes(r)&&(!r.includes(\"-\")||r===function(e){switch(e){case\"top-left\":return\"bottom-right\";case\"top-right\":return\"bottom-left\";case\"bottom-left\":return\"top-right\";case\"bottom-right\":return\"top-left\";default:return null}}(s))))return null;var h=f.left+f.right,g=f.top+f.bottom,m=r.includes(\"-\");return(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(\"div\",{className:\"resize-container \".concat(r,\" \").concat(c&&c!==r?\"no-hover\":\"\"),onMouseDown:function(e){if(e.preventDefault(),a.current){u(r);var n=a.current,t=n.getBoundingClientRect(),o=n.offsetLeft,s=n.offsetTop,c=e.clientX,d=e.clientY,f=function(e){var a=ar(r,e.clientX-c,e.clientY-d,t,o,s,i,l),u=a.newWidth,f=a.newHeight,p=a.newLeft,h=a.newTop;n.style.width=\"\".concat(u,\"px\"),n.style.height=\"\".concat(f,\"px\"),(r.includes(\"left\")||\"left\"===r)&&(n.style.left=\"\".concat(p,\"px\")),(r.includes(\"top\")||\"top\"===r)&&(n.style.top=\"\".concat(h,\"px\"))},p=function(){u(null),document.removeEventListener(\"mousemove\",f),document.removeEventListener(\"mouseup\",p);var e=a.current.getBoundingClientRect(),n=e.width,t=e.height;localStorage.setItem(\"nextjs-devtools-dimensions\",JSON.stringify({width:n,height:t}))};document.addEventListener(\"mousemove\",f),document.addEventListener(\"mouseup\",p)}}}),!m&&(0,y.jsx)(\"div\",{className:\"resize-line \".concat(r,\" \").concat(c===r?\"dragging\":\"\"),style:{\"--border-horizontal\":\"\".concat(h,\"px\"),\"--border-vertical\":\"\".concat(g,\"px\"),\"--border-top\":\"\".concat(f.top,\"px\"),\"--border-right\":\"\".concat(f.right,\"px\"),\"--border-bottom\":\"\".concat(f.bottom,\"px\"),\"--border-left\":\"\".concat(f.left,\"px\")}})]})},ar=function(e,n,t,r,o,a,i,l){var s=.95*window.innerWidth,c=.95*window.innerHeight;switch(e){case\"right\":return{newWidth:Math.min(s,Math.max(i,r.width+n)),newHeight:r.height,newLeft:o,newTop:a};case\"left\":var u=Math.min(s,Math.max(i,r.width-n)),d=u-r.width;return{newWidth:u,newHeight:r.height,newLeft:o-d,newTop:a};case\"bottom\":return{newWidth:r.width,newHeight:Math.min(c,Math.max(l,r.height+t)),newLeft:o,newTop:a};case\"top\":var f=Math.min(c,Math.max(l,r.height-t)),p=f-r.height;return{newWidth:r.width,newHeight:f,newLeft:o,newTop:a-p};case\"top-left\":var h=Math.min(s,Math.max(i,r.width-n)),g=Math.min(c,Math.max(l,r.height-t)),m=h-r.width,v=g-r.height;return{newWidth:h,newHeight:g,newLeft:o-m,newTop:a-v};case\"top-right\":var b=Math.min(c,Math.max(l,r.height-t)),y=b-r.height;return{newWidth:Math.min(s,Math.max(i,r.width+n)),newHeight:b,newLeft:o,newTop:a-y};case\"bottom-left\":var x=Math.min(s,Math.max(i,r.width-n)),w=x-r.width;return{newWidth:x,newHeight:Math.min(c,Math.max(l,r.height+t)),newLeft:o-w,newTop:a};case\"bottom-right\":return{newWidth:Math.min(s,Math.max(i,r.width+n)),newHeight:Math.min(c,Math.max(l,r.height+t)),newLeft:o,newTop:a};default:return null}};function ao(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function aa(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function ai(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return ao(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return ao(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function al(){var e,n,t=(e=[\"\\n /* TODO: Better override dialog header style. This conflicts with issues tab content. */\\n [data-nextjs-devtools-panel-dialog-header] {\\n flex-shrink: 0;\\n margin-bottom: 0 !important;\\n }\\n\\n [data-nextjs-devtools-panel-dialog-content] {\\n flex: 1;\\n display: flex;\\n flex-direction: column;\\n min-height: 0; // what allows content to overflow\\n }\\n\\n [data-nextjs-devtools-panel-dialog-body] {\\n flex: 1;\\n overflow: auto;\\n }\\n\\n [data-nextjs-devtools-panel-overlay] {\\n margin: auto;\\n width: 525px;\\n height: 375px;\\n }\\n\\n [data-nextjs-devtools-panel-overlay-backdrop] {\\n opacity: 0;\\n visibility: hidden;\\n }\\n\\n [data-nextjs-devtools-panel-overlay-backdrop='true'] {\\n opacity: 1;\\n visibility: visible;\\n }\\n\\n [data-nextjs-devtools-panel-draggable] {\\n /* For responsiveness */\\n width: 100%;\\n height: 100%;\\n }\\n\\n [data-nextjs-devtools-panel-dialog] {\\n -webkit-font-smoothing: antialiased;\\n display: flex;\\n flex-direction: column;\\n background: var(--color-background-100);\\n background-clip: padding-box;\\n border: 1px solid var(--color-gray-400);\\n border-radius: var(--rounded-xl);\\n box-shadow: var(--shadow-lg);\\n position: relative;\\n width: 100%;\\n height: 100%;\\n min-width: 400px;\\n min-height: 350px;\\n }\\n\\n [data-nextjs-devtools-panel-header] {\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n border-bottom: 1px solid var(--color-gray-400);\\n }\\n\\n [data-nextjs-devtools-panel-header-tab-group] {\\n display: flex;\\n align-items: center;\\n padding: 8px;\\n gap: 6px;\\n }\\n\\n [data-nextjs-devtools-panel-header-tab] {\\n display: flex;\\n align-items: center;\\n color: var(--color-gray-900);\\n border-radius: var(--rounded-md-2);\\n padding: 4px 12px;\\n font-size: 14px;\\n font-weight: 500;\\n transition: background-color 200ms ease;\\n\\n &:hover {\\n background-color: var(--color-gray-200);\\n }\\n\\n &:active {\\n background-color: var(--color-gray-300);\\n }\\n }\\n\\n [data-nextjs-devtools-panel-header-tab='true'] {\\n color: var(--color-gray-1000);\\n background-color: var(--color-gray-100);\\n }\\n\\n [data-nextjs-devtools-panel-header-tab-issues-badge] {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n margin-left: 8px;\\n background-color: var(--color-red-400);\\n color: var(--color-red-900);\\n font-size: 11px;\\n border-radius: var(--rounded-full);\\n padding: 2px 6px;\\n width: 20px;\\n height: 20px;\\n font-weight: 500;\\n }\\n\\n [data-nextjs-devtools-panel-header-action-button-group] {\\n display: flex;\\n align-items: center;\\n gap: 4px;\\n padding-right: 8px;\\n }\\n\\n [data-nextjs-devtools-panel-header-action-button] {\\n background: transparent;\\n border: none;\\n cursor: pointer;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n padding: 6px;\\n color: var(--color-gray-1000);\\n border-radius: 4px;\\n transition-property: background-color, color;\\n transition-duration: 200ms;\\n transition-timing-function: ease;\\n\\n &:hover {\\n background-color: var(--color-gray-200);\\n color: var(--color-gray-900);\\n }\\n\\n &:active {\\n background-color: var(--color-gray-300);\\n }\\n }\\n\\n [data-nextjs-devtools-panel-draggable='true'] {\\n cursor: move;\\n user-select: none;\\n & > * {\\n cursor: auto;\\n /* user-select: auto; follows the parent (parent none -> child none), so reset the direct child to text */\\n user-select: text;\\n }\\n }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return al=function(){return t},t}function as(e){var n,t,r,o,a,i,l=e.state,s=e.dispatch,c=e.issueCount,u=e.runtimeErrors,d=e.getSquashedHydrationErrorDetails,f=ai((n=\"__nextjs-devtools-active-tab\",t=\"issues\",o=(r=ai((0,x.useState)(function(){if(\"undefined\"!=typeof window&&\"undefined\"!=typeof sessionStorage){var e=sessionStorage.getItem(n);return null!=e?e:t}return t}),2))[0],a=r[1],(0,x.useEffect)(function(){\"undefined\"!=typeof window&&\"undefined\"!=typeof sessionStorage&&sessionStorage.setItem(n,o)},[n,o]),[o,a]),2),p=f[0],h=f[1],g=ai((0,x.useState)(!1),2),m=g[0],v=g[1],b=ai((0,x.useState)(!1),2),w=b[0],j=b[1],k=(0,x.useRef)(null);l.isErrorOverlayOpen!==w&&(l.isErrorOverlayOpen&&(v(!0),h(\"issues\")),j(l.isErrorOverlayOpen));var A=ai(l.devToolsPosition.split(\"-\",2),2),O=A[0],C=A[1],S=function(){s({type:$}),s({type:I})};return(0,y.jsx)(o9,{value:{resizeRef:k,minWidth:400,minHeight:350,devToolsPosition:l.devToolsPosition},children:(0,y.jsxs)(nZ,{ref:k,\"data-nextjs-devtools-panel-overlay\":!0,style:m?{}:(aa(i={},O,\"\".concat(20,\"px\")),aa(i,C,\"\".concat(20,\"px\")),aa(i,\"top\"===O?\"bottom\":\"top\",\"auto\"),aa(i,\"left\"===C?\"right\":\"left\",\"auto\"),i),children:[(0,y.jsx)(n2,{\"data-nextjs-devtools-panel-overlay-backdrop\":m,onClick:S}),(0,y.jsx)(rN,{\"data-nextjs-devtools-panel-draggable\":!0,padding:20,onDragStart:function(){},position:l.devToolsPosition,setPosition:function(e){localStorage.setItem(G,e),s({type:Y,devToolsPosition:e})},dragHandleSelector:\"[data-nextjs-devtools-panel-header], [data-nextjs-devtools-panel-footer]\",disableDrag:m,children:(0,y.jsxs)(y.Fragment,{children:[(0,y.jsxs)(eZ,{\"data-nextjs-devtools-panel-dialog\":!0,\"aria-labelledby\":\"nextjs__container_dev_tools_panel_label\",\"aria-describedby\":\"nextjs__container_dev_tools_panel_desc\",onClose:S,children:[(0,y.jsxs)(eX,{\"data-nextjs-devtools-panel-dialog-content\":!0,children:[(0,y.jsx)(eK,{\"data-nextjs-devtools-panel-dialog-header\":!0,children:(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-header\":!0,\"data-nextjs-devtools-panel-draggable\":!m,children:[(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-header-tab-group\":!0,children:[(0,y.jsxs)(\"button\",{\"data-nextjs-devtools-panel-header-tab\":\"issues\"===p,onClick:function(){return h(\"issues\")},children:[\"Issues\",c>0?(0,y.jsx)(\"span\",{\"data-nextjs-devtools-panel-header-tab-issues-badge\":!0,children:c}):null]}),(0,y.jsx)(\"button\",{\"data-nextjs-devtools-panel-header-tab\":\"route\"===p,onClick:function(){return h(\"route\")},children:\"Route Info\"}),(0,y.jsx)(\"button\",{\"data-nextjs-devtools-panel-header-tab\":\"settings\"===p,onClick:function(){return h(\"settings\")},children:\"Settings\"})]}),(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-header-action-button-group\":!0,children:[(0,y.jsx)(\"button\",{\"data-nextjs-devtools-panel-header-action-button\":!0,onClick:function(){v(function(e){return!e}),s({type:I})},children:m?(0,y.jsx)(o1,{width:16,height:16}):(0,y.jsx)(o0,{width:16,height:16})}),(0,y.jsx)(\"button\",{\"data-nextjs-devtools-panel-header-action-button\":!0,onClick:S,children:(0,y.jsx)(oH,{width:16,height:16})})]})]})}),(0,y.jsx)(eY,{\"data-nextjs-devtools-panel-dialog-body\":!0,children:(0,y.jsx)(oI,{page:l.page,activeTab:p,devToolsPosition:l.devToolsPosition,scale:l.scale,routerType:l.routerType,handlePositionChange:function(e){s({type:Y,devToolsPosition:e.target.value}),localStorage.setItem(G,e.target.value)},handleScaleChange:function(e){s({type:X,scale:Number(e.target.value)}),localStorage.setItem(J,e.target.value)},debugInfo:l.debugInfo,runtimeErrors:u,getSquashedHydrationErrorDetails:d,buildError:l.buildError})})]}),(0,y.jsx)(r2,{versionInfo:l.versionInfo,isDraggable:!m,showRestartServerButton:l.showRestartServerButton})]}),!m&&(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(at,{direction:\"top\"}),(0,y.jsx)(at,{direction:\"right\"}),(0,y.jsx)(at,{direction:\"bottom\"}),(0,y.jsx)(at,{direction:\"left\"}),(0,y.jsx)(at,{direction:\"top-left\"}),(0,y.jsx)(at,{direction:\"top-right\"}),(0,y.jsx)(at,{direction:\"bottom-left\"}),(0,y.jsx)(at,{direction:\"bottom-right\"})]})]})})]})})}var ac=ei(al());function au(){var e,n,t=(e=[\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \",\"\\n \"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return au=function(){return t},t}function ad(){return(0,y.jsx)(\"style\",{children:ei(au(),\"\\n .nextjs-data-copy-button {\\n color: inherit;\\n\\n svg {\\n width: var(--size-16);\\n height: var(--size-16);\\n }\\n }\\n .nextjs-data-copy-button:disabled {\\n background-color: var(--color-gray-100);\\n cursor: not-allowed;\\n }\\n .nextjs-data-copy-button--initial:hover:not(:disabled) {\\n cursor: pointer;\\n }\\n .nextjs-data-copy-button--error:not(:disabled),\\n .nextjs-data-copy-button--error:hover:not(:disabled) {\\n color: var(--color-ansi-red);\\n }\\n .nextjs-data-copy-button--success:not(:disabled) {\\n color: var(--color-ansi-green);\\n }\\n\",'\\n [data-nextjs-call-stack-frame-no-source] {\\n padding: 6px 8px;\\n margin-bottom: 4px;\\n\\n border-radius: var(--rounded-lg);\\n }\\n\\n [data-nextjs-call-stack-frame-no-source]:last-child {\\n margin-bottom: 0;\\n }\\n\\n [data-nextjs-call-stack-frame-ignored=\"true\"] {\\n opacity: 0.6;\\n }\\n\\n [data-nextjs-call-stack-frame] {\\n user-select: text;\\n display: block;\\n box-sizing: border-box;\\n\\n user-select: text;\\n -webkit-user-select: text;\\n -moz-user-select: text;\\n -ms-user-select: text;\\n\\n padding: 6px 8px;\\n\\n border-radius: var(--rounded-lg);\\n }\\n\\n .call-stack-frame-method-name {\\n display: flex;\\n align-items: center;\\n gap: 4px;\\n\\n margin-bottom: 4px;\\n font-family: var(--font-stack-monospace);\\n\\n color: var(--color-gray-1000);\\n font-size: var(--size-14);\\n font-weight: 500;\\n line-height: var(--size-20);\\n\\n svg {\\n width: var(--size-16px);\\n height: var(--size-16px);\\n }\\n }\\n\\n .open-in-editor-button, .source-mapping-error-button {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n border-radius: var(--rounded-full);\\n padding: 4px;\\n color: var(--color-font);\\n\\n svg {\\n width: var(--size-16);\\n height: var(--size-16);\\n }\\n\\n &:focus-visible {\\n outline: var(--focus-ring);\\n outline-offset: -2px;\\n }\\n\\n &:hover {\\n background: var(--color-gray-100);\\n }\\n }\\n\\n .call-stack-frame-file-source {\\n color: var(--color-gray-900);\\n font-size: var(--size-14);\\n line-height: var(--size-20);\\n }\\n',ts,\"\\n [data-nextjs-environment-name-label] {\\n padding: 2px 6px;\\n margin: 0;\\n border-radius: var(--rounded-md-2);\\n background: var(--color-gray-100);\\n font-weight: 600;\\n font-size: var(--size-12);\\n color: var(--color-gray-900);\\n font-family: var(--font-stack-monospace);\\n line-height: var(--size-20);\\n }\\n\",\"\\n [data-nextjs-dialog-overlay] {\\n position: fixed;\\n top: 0;\\n right: 0;\\n bottom: 0;\\n left: 0;\\n /* secondary z-index, -1 than toast z-index */\\n z-index: 2147483646;\\n\\n display: flex;\\n align-content: center;\\n align-items: center;\\n flex-direction: column;\\n padding: 10vh 15px 0;\\n }\\n\\n @media (max-height: 812px) {\\n [data-nextjs-dialog-overlay] {\\n padding: 15px 15px 0;\\n }\\n }\\n\\n [data-nextjs-dialog-backdrop] {\\n position: fixed;\\n top: 0;\\n right: 0;\\n bottom: 0;\\n left: 0;\\n background-color: var(--color-backdrop);\\n backdrop-filter: blur(10px);\\n pointer-events: all;\\n z-index: -1;\\n }\\n\\n [data-nextjs-dialog-backdrop-fixed] {\\n cursor: not-allowed;\\n -webkit-backdrop-filter: blur(8px);\\n backdrop-filter: blur(8px);\\n }\\n\",eG,n8,nE,\"\\n .error-overlay-bottom-stack-layer {\\n width: 100%;\\n height: var(--stack-layer-height);\\n position: relative;\\n border: 1px solid var(--color-gray-400);\\n border-radius: var(--rounded-xl);\\n background: var(--color-background-200);\\n transition:\\n translate 350ms var(--timing-swift),\\n box-shadow 350ms var(--timing-swift);\\n }\\n\\n .error-overlay-bottom-stack-layer-1 {\\n width: calc(100% - var(--size-24));\\n }\\n\\n .error-overlay-bottom-stack-layer-2 {\\n width: calc(100% - var(--size-48));\\n z-index: -1;\\n }\\n\\n .error-overlay-bottom-stack {\\n width: 100%;\\n position: absolute;\\n bottom: -1px;\\n height: 0;\\n overflow: visible;\\n }\\n\\n .error-overlay-bottom-stack-stack {\\n --stack-layer-height: 44px;\\n --stack-layer-height-half: calc(var(--stack-layer-height) / 2);\\n --stack-layer-trim: 13px;\\n --shadow: 0px 0.925px 0.925px 0px rgba(0, 0, 0, 0.02),\\n 0px 3.7px 7.4px -3.7px rgba(0, 0, 0, 0.04),\\n 0px 14.8px 22.2px -7.4px rgba(0, 0, 0, 0.06);\\n\\n display: grid;\\n place-items: center center;\\n width: 100%;\\n position: fixed;\\n overflow: hidden;\\n z-index: -1;\\n max-width: var(--next-dialog-max-width);\\n\\n .error-overlay-bottom-stack-layer {\\n grid-area: 1 / 1;\\n /* Hide */\\n translate: 0 calc(var(--stack-layer-height) * -1);\\n }\\n\\n &[data-stack-count='1'],\\n &[data-stack-count='2'] {\\n .error-overlay-bottom-stack-layer-1 {\\n translate: 0\\n calc(var(--stack-layer-height-half) * -1 - var(--stack-layer-trim));\\n }\\n }\\n\\n &[data-stack-count='2'] {\\n .error-overlay-bottom-stack-layer-2 {\\n translate: 0 calc(var(--stack-layer-trim) * -1 * 2);\\n }\\n }\\n\\n /* Only the bottom stack should have the shadow */\\n &[data-stack-count='1'] .error-overlay-bottom-stack-layer-1 {\\n box-shadow: var(--shadow);\\n }\\n\\n &[data-stack-count='2'] {\\n .error-overlay-bottom-stack-layer-2 {\\n box-shadow: var(--shadow);\\n }\\n }\\n }\\n\",\"\\n .error-overlay-pagination {\\n -webkit-font-smoothing: antialiased;\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n gap: 8px;\\n width: fit-content;\\n }\\n\\n .error-overlay-pagination-count {\\n color: var(--color-gray-900);\\n text-align: center;\\n font-size: var(--size-14);\\n font-weight: 500;\\n line-height: var(--size-16);\\n font-variant-numeric: tabular-nums;\\n }\\n\\n .error-overlay-pagination-button {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n\\n width: var(--size-24);\\n height: var(--size-24);\\n background: var(--color-gray-300);\\n flex-shrink: 0;\\n\\n border: none;\\n border-radius: var(--rounded-full);\\n\\n svg {\\n width: var(--size-16);\\n height: var(--size-16);\\n }\\n\\n &:focus-visible {\\n outline: var(--focus-ring);\\n }\\n\\n &:not(:disabled):active {\\n background: var(--color-gray-500);\\n }\\n\\n &:disabled {\\n opacity: 0.5;\\n cursor: not-allowed;\\n }\\n }\\n\\n .error-overlay-pagination-button-icon {\\n color: var(--color-gray-1000);\\n }\\n\",'\\n [data-nextjs-codeframe] {\\n --code-frame-padding: 12px;\\n --code-frame-line-height: var(--size-16);\\n background-color: var(--color-background-200);\\n color: var(--color-gray-1000);\\n text-overflow: ellipsis;\\n border: 1px solid var(--color-gray-400);\\n border-radius: 8px;\\n font-family: var(--font-stack-monospace);\\n font-size: var(--size-12);\\n line-height: var(--code-frame-line-height);\\n margin: 8px 0;\\n\\n svg {\\n width: var(--size-16);\\n height: var(--size-16);\\n }\\n }\\n\\n .code-frame-link,\\n .code-frame-pre {\\n padding: var(--code-frame-padding);\\n }\\n\\n .code-frame-link svg {\\n flex-shrink: 0;\\n }\\n\\n .code-frame-lines {\\n min-width: max-content;\\n }\\n\\n .code-frame-link [data-text] {\\n display: inline-flex;\\n text-align: left;\\n margin: auto 6px;\\n }\\n\\n .code-frame-header {\\n width: 100%;\\n transition: background 100ms ease-out;\\n border-radius: 8px 8px 0 0;\\n border-bottom: 1px solid var(--color-gray-400);\\n }\\n\\n [data-with-open-in-editor-link-source-file] {\\n padding: 4px;\\n margin: -4px 0 -4px auto;\\n border-radius: var(--rounded-full);\\n margin-left: auto;\\n\\n &:focus-visible {\\n outline: var(--focus-ring);\\n outline-offset: -2px;\\n }\\n\\n &:hover {\\n background: var(--color-gray-100);\\n }\\n }\\n\\n [data-nextjs-codeframe]::selection,\\n [data-nextjs-codeframe] *::selection {\\n background-color: var(--color-ansi-selection);\\n }\\n\\n [data-nextjs-codeframe] *:not(a) {\\n color: inherit;\\n background-color: transparent;\\n font-family: var(--font-stack-monospace);\\n }\\n\\n [data-nextjs-codeframe-line][data-nextjs-codeframe-line--errored=\"true\"] {\\n position: relative;\\n isolation: isolate;\\n\\n > span { \\n position: relative;\\n z-index: 1;\\n }\\n\\n &::after {\\n content: \"\";\\n width: calc(100% + var(--code-frame-padding) * 2);\\n height: var(--code-frame-line-height);\\n left: calc(-1 * var(--code-frame-padding));\\n background: var(--color-red-200);\\n box-shadow: 2px 0 0 0 var(--color-red-900) inset;\\n position: absolute;\\n }\\n }\\n\\n\\n [data-nextjs-codeframe] > * {\\n margin: 0;\\n }\\n\\n .code-frame-link {\\n display: flex;\\n margin: 0;\\n outline: 0;\\n }\\n .code-frame-link [data-icon=\\'right\\'] {\\n margin-left: auto;\\n }\\n\\n [data-nextjs-codeframe] div > pre {\\n overflow: hidden;\\n display: inline-block;\\n }\\n\\n [data-nextjs-codeframe] svg {\\n color: var(--color-gray-900);\\n }\\n',\"\\n [data-nextjs-terminal]::selection,\\n [data-nextjs-terminal] *::selection {\\n background-color: var(--color-ansi-selection);\\n }\\n\\n [data-nextjs-terminal] * {\\n color: inherit;\\n background-color: transparent;\\n font-family: var(--font-stack-monospace);\\n }\\n\\n [data-nextjs-terminal] > div > p {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n cursor: pointer;\\n margin: 0;\\n }\\n [data-nextjs-terminal] > div > p:hover {\\n text-decoration: underline dotted;\\n }\\n [data-nextjs-terminal] div > pre {\\n overflow: hidden;\\n display: inline-block;\\n }\\n\",\"\\n [data-with-open-in-editor-link] svg {\\n width: auto;\\n height: var(--size-14);\\n margin-left: 8px;\\n }\\n [data-with-open-in-editor-link] {\\n cursor: pointer;\\n }\\n [data-with-open-in-editor-link]:hover {\\n text-decoration: underline dotted;\\n }\\n [data-with-open-in-editor-link-import-trace] {\\n margin-left: 16px;\\n }\\n\",\"\",\"\\n .nextjs-error-with-static {\\n bottom: calc(16px * 4.5);\\n }\\n p.nextjs__container_errors__link {\\n font-size: var(--size-14);\\n }\\n p.nextjs__container_errors__notes {\\n color: var(--color-stack-notes);\\n font-size: var(--size-14);\\n line-height: 1.5;\\n }\\n .nextjs-container-errors-body > h2:not(:first-child) {\\n margin-top: calc(16px + 8px);\\n }\\n .nextjs-container-errors-body > h2 {\\n color: var(--color-title-color);\\n margin-bottom: 8px;\\n font-size: var(--size-20);\\n }\\n .nextjs-toast-errors-parent {\\n cursor: pointer;\\n transition: transform 0.2s ease;\\n }\\n .nextjs-toast-errors-parent:hover {\\n transform: scale(1.1);\\n }\\n .nextjs-toast-errors {\\n display: flex;\\n align-items: center;\\n justify-content: flex-start;\\n }\\n .nextjs-toast-errors > svg {\\n margin-right: 8px;\\n }\\n .nextjs-toast-hide-button {\\n margin-left: 24px;\\n border: none;\\n background: none;\\n color: var(--color-ansi-bright-white);\\n padding: 0;\\n transition: opacity 0.25s ease;\\n opacity: 0.7;\\n }\\n .nextjs-toast-hide-button:hover {\\n opacity: 1;\\n }\\n .nextjs__container_errors__error_title {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n margin-bottom: 14px;\\n }\\n .error-overlay-notes-container {\\n margin: 8px 2px;\\n }\\n .error-overlay-notes-container p {\\n white-space: pre-wrap;\\n }\\n\",tA,\"\\n .nextjs-container-build-error-version-status {\\n -webkit-font-smoothing: antialiased;\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n gap: 4px;\\n\\n height: var(--size-26);\\n padding: 6px 8px 6px 6px;\\n background: var(--color-background-100);\\n background-clip: padding-box;\\n border: 1px solid var(--color-gray-alpha-400);\\n box-shadow: var(--shadow-small);\\n border-radius: var(--rounded-full);\\n\\n color: var(--color-gray-900);\\n font-size: var(--size-12);\\n font-weight: 500;\\n line-height: var(--size-16);\\n }\\n\\n a.nextjs-container-build-error-version-status {\\n text-decoration: none;\\n color: var(--color-gray-900);\\n\\n &:hover {\\n background: var(--color-gray-100);\\n }\\n\\n &:focus {\\n outline: var(--focus-ring);\\n }\\n }\\n\\n .version-staleness-indicator.fresh {\\n fill: var(--color-green-800);\\n stroke: var(--color-green-300);\\n }\\n .version-staleness-indicator.stale {\\n fill: var(--color-amber-800);\\n stroke: var(--color-amber-300);\\n }\\n .version-staleness-indicator.outdated {\\n fill: var(--color-red-800);\\n stroke: var(--color-red-300);\\n }\\n .version-staleness-indicator.unknown {\\n fill: var(--color-gray-800);\\n stroke: var(--color-gray-300);\\n }\\n\\n .nextjs-container-build-error-version-status > .turbopack-text {\\n background: linear-gradient(\\n to right,\\n var(--color-turbopack-text-red) 0%,\\n var(--color-turbopack-text-blue) 100%\\n );\\n background-clip: text;\\n -webkit-background-clip: text;\\n -webkit-text-fill-color: transparent;\\n }\\n\",\"\\n .restart-dev-server-button {\\n -webkit-font-smoothing: antialiased;\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n gap: 4px;\\n margin: 0 12px;\\n\\n height: var(--size-26);\\n padding: 6px 8px 6px 6px;\\n background: var(--color-amber-100);\\n background-clip: padding-box;\\n border: 1px solid var(--color-gray-alpha-400);\\n box-shadow: var(--shadow-small);\\n border-radius: var(--rounded-full);\\n\\n color: var(--color-amber-900);\\n font-size: var(--size-12);\\n font-weight: 500;\\n line-height: var(--size-16);\\n }\\n\",\"\\n [data-nextjs-toast] {\\n &[data-hidden='true'] {\\n display: none;\\n }\\n }\\n\\n .dev-tools-indicator-menu {\\n -webkit-font-smoothing: antialiased;\\n display: flex;\\n flex-direction: column;\\n align-items: flex-start;\\n background: var(--color-background-100);\\n border: 1px solid var(--color-gray-alpha-400);\\n background-clip: padding-box;\\n box-shadow: var(--shadow-menu);\\n border-radius: var(--rounded-xl);\\n position: absolute;\\n font-family: var(--font-stack-sans);\\n z-index: 3;\\n overflow: hidden;\\n opacity: 0;\\n outline: 0;\\n min-width: 248px;\\n transition: opacity var(--animate-out-duration-ms)\\n var(--animate-out-timing-function);\\n\\n &[data-rendered='true'] {\\n opacity: 1;\\n scale: 1;\\n }\\n }\\n\\n .dev-tools-indicator-inner {\\n padding: 6px;\\n width: 100%;\\n }\\n\\n .dev-tools-indicator-item {\\n display: flex;\\n align-items: center;\\n padding: 8px 6px;\\n height: var(--size-36);\\n border-radius: 6px;\\n text-decoration: none !important;\\n user-select: none;\\n white-space: nowrap;\\n\\n svg {\\n width: var(--size-16);\\n height: var(--size-16);\\n }\\n\\n &:focus-visible {\\n outline: 0;\\n }\\n }\\n\\n .dev-tools-indicator-footer {\\n background: var(--color-background-200);\\n padding: 6px;\\n border-top: 1px solid var(--color-gray-400);\\n width: 100%;\\n }\\n\\n .dev-tools-indicator-item[data-selected='true'] {\\n cursor: pointer;\\n background-color: var(--color-gray-200);\\n }\\n\\n .dev-tools-indicator-label {\\n font-size: var(--size-14);\\n line-height: var(--size-20);\\n color: var(--color-gray-1000);\\n }\\n\\n .dev-tools-indicator-value {\\n font-size: var(--size-14);\\n line-height: var(--size-20);\\n color: var(--color-gray-900);\\n margin-left: auto;\\n }\\n\\n .dev-tools-indicator-issue-count {\\n --color-primary: var(--color-gray-800);\\n --color-secondary: var(--color-gray-100);\\n display: flex;\\n flex-direction: row;\\n align-items: center;\\n justify-content: center;\\n gap: 8px;\\n min-width: var(--size-40);\\n height: var(--size-24);\\n background: var(--color-background-100);\\n border: 1px solid var(--color-gray-alpha-400);\\n background-clip: padding-box;\\n box-shadow: var(--shadow-small);\\n padding: 2px;\\n color: var(--color-gray-1000);\\n border-radius: 128px;\\n font-weight: 500;\\n font-size: var(--size-13);\\n font-variant-numeric: tabular-nums;\\n\\n &[data-has-issues='true'] {\\n --color-primary: var(--color-red-800);\\n --color-secondary: var(--color-red-100);\\n }\\n\\n .dev-tools-indicator-issue-count-indicator {\\n width: var(--size-8);\\n height: var(--size-8);\\n background: var(--color-primary);\\n box-shadow: 0 0 0 2px var(--color-secondary);\\n border-radius: 50%;\\n }\\n }\\n\\n .dev-tools-indicator-shortcut {\\n display: flex;\\n gap: 4px;\\n\\n kbd {\\n width: var(--size-20);\\n height: var(--size-20);\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n border-radius: var(--rounded-md);\\n border: 1px solid var(--color-gray-400);\\n font-family: var(--font-stack-sans);\\n background: var(--color-background-100);\\n color: var(--color-gray-1000);\\n text-align: center;\\n font-size: var(--size-12);\\n line-height: var(--size-16);\\n }\\n }\\n\\n .dev-tools-grabbing {\\n cursor: grabbing;\\n\\n > * {\\n pointer-events: none;\\n }\\n }\\n\",t0.g,\"\\n .dev-tools-info-code {\\n background: var(--color-gray-400);\\n color: var(--color-gray-1000);\\n font-family: var(--font-stack-monospace);\\n padding: 2px 4px;\\n margin: 0;\\n font-size: var(--size-13);\\n white-space: break-spaces;\\n border-radius: var(--rounded-md-2);\\n }\\n\\n .dev-tools-info-code-block-container {\\n padding: 6px;\\n }\\n\\n .dev-tools-info-code-block {\\n position: relative;\\n background: var(--color-background-200);\\n border: 1px solid var(--color-gray-alpha-400);\\n border-radius: var(--rounded-md-2);\\n min-width: 326px;\\n }\\n\\n .dev-tools-info-code-block-pre {\\n margin: 0;\\n font-family: var(--font-stack-monospace);\\n font-size: var(--size-12);\\n }\\n\\n .dev-tools-info-copy-button {\\n position: absolute;\\n\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n right: 8px;\\n top: 8px;\\n padding: 4px;\\n height: var(--size-24);\\n width: var(--size-24);\\n border-radius: var(--rounded-md-2);\\n border: 1px solid var(--color-gray-alpha-400);\\n background: var(--color-background-100);\\n }\\n\\n .dev-tools-info-code-block-line {\\n display: block;\\n line-height: 1.5;\\n padding: 0 16px;\\n }\\n\\n .dev-tools-info-code-block-line.dev-tools-info-highlight {\\n border-left: 2px solid var(--color-blue-900);\\n background: var(--color-blue-400);\\n }\\n\\n .dev-tools-info-code-block-json-key {\\n color: var(--color-syntax-keyword);\\n }\\n\\n .dev-tools-info-code-block-json-value {\\n color: var(--color-syntax-link);\\n }\\n\",\"\",rS,'\\n .nextjs-scroll-fader {\\n --blur: 1px;\\n --stop: 25%;\\n --height: 150px;\\n --color-bg: var(--color-background-100);\\n position: absolute;\\n pointer-events: none;\\n user-select: none;\\n width: 100%;\\n height: var(--height);\\n left: 0;\\n backdrop-filter: blur(var(--blur));\\n\\n &[data-side=\"top\"] {\\n top: 0;\\n background: linear-gradient(to top, transparent, var(--color-bg));\\n mask-image: linear-gradient(to bottom, var(--color-bg) var(--stop), transparent);\\n }\\n }\\n',ac,r4,r0,on,oN,oO,oc,oo,oL,ow,ob,of,rm)})}function af(){var e,n,t=(e=[\"\\n :host {\\n all: initial;\\n\\n /* the direction property is not reset by 'all' */\\n direction: ltr;\\n }\\n\\n /*!\\n * Bootstrap Reboot v4.4.1 (https://getbootstrap.com/)\\n * Copyright 2011-2019 The Bootstrap Authors\\n * Copyright 2011-2019 Twitter, Inc.\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\\n */\\n *,\\n *::before,\\n *::after {\\n box-sizing: border-box;\\n }\\n\\n :host {\\n font-family: sans-serif;\\n line-height: 1.15;\\n -webkit-text-size-adjust: 100%;\\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\\n }\\n\\n article,\\n aside,\\n figcaption,\\n figure,\\n footer,\\n header,\\n hgroup,\\n main,\\n nav,\\n section {\\n display: block;\\n }\\n\\n :host {\\n margin: 0;\\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,\\n 'Helvetica Neue', Arial, 'Noto Sans', sans-serif,\\n 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',\\n 'Noto Color Emoji';\\n font-size: 16px;\\n font-weight: 400;\\n line-height: 1.5;\\n color: var(--color-font);\\n text-align: left;\\n }\\n\\n :host:not(button) {\\n background-color: #fff;\\n }\\n\\n [tabindex='-1']:focus:not(:focus-visible) {\\n outline: 0 !important;\\n }\\n\\n hr {\\n box-sizing: content-box;\\n height: 0;\\n overflow: visible;\\n }\\n\\n h1,\\n h2,\\n h3,\\n h4,\\n h5,\\n h6 {\\n margin-top: 0;\\n margin-bottom: 8px;\\n }\\n\\n p {\\n margin-top: 0;\\n margin-bottom: 16px;\\n }\\n\\n abbr[title],\\n abbr[data-original-title] {\\n text-decoration: underline;\\n -webkit-text-decoration: underline dotted;\\n text-decoration: underline dotted;\\n cursor: help;\\n border-bottom: 0;\\n -webkit-text-decoration-skip-ink: none;\\n text-decoration-skip-ink: none;\\n }\\n\\n address {\\n margin-bottom: 16px;\\n font-style: normal;\\n line-height: inherit;\\n }\\n\\n ol,\\n ul,\\n dl {\\n margin-top: 0;\\n margin-bottom: 16px;\\n }\\n\\n ol ol,\\n ul ul,\\n ol ul,\\n ul ol {\\n margin-bottom: 0;\\n }\\n\\n dt {\\n font-weight: 700;\\n }\\n\\n dd {\\n margin-bottom: 8px;\\n margin-left: 0;\\n }\\n\\n blockquote {\\n margin: 0 0 16px;\\n }\\n\\n b,\\n strong {\\n font-weight: bolder;\\n }\\n\\n small {\\n font-size: 80%;\\n }\\n\\n sub,\\n sup {\\n position: relative;\\n font-size: 75%;\\n line-height: 0;\\n vertical-align: baseline;\\n }\\n\\n sub {\\n bottom: -0.25em;\\n }\\n\\n sup {\\n top: -0.5em;\\n }\\n\\n a {\\n color: #007bff;\\n text-decoration: none;\\n background-color: transparent;\\n }\\n\\n a:hover {\\n color: #0056b3;\\n text-decoration: underline;\\n }\\n\\n a:not([href]) {\\n color: inherit;\\n text-decoration: none;\\n }\\n\\n a:not([href]):hover {\\n color: inherit;\\n text-decoration: none;\\n }\\n\\n pre,\\n code,\\n kbd,\\n samp {\\n font-family: SFMono-Regular, Menlo, Monaco, Consolas,\\n 'Liberation Mono', 'Courier New', monospace;\\n font-size: 1em;\\n }\\n\\n pre {\\n margin-top: 0;\\n margin-bottom: 16px;\\n overflow: auto;\\n }\\n\\n figure {\\n margin: 0 0 16px;\\n }\\n\\n img {\\n vertical-align: middle;\\n border-style: none;\\n }\\n\\n svg {\\n overflow: hidden;\\n vertical-align: middle;\\n }\\n\\n table {\\n border-collapse: collapse;\\n }\\n\\n caption {\\n padding-top: 12px;\\n padding-bottom: 12px;\\n color: #6c757d;\\n text-align: left;\\n caption-side: bottom;\\n }\\n\\n th {\\n text-align: inherit;\\n }\\n\\n label {\\n display: inline-block;\\n margin-bottom: 8px;\\n }\\n\\n button {\\n border-radius: 0;\\n border: 0;\\n padding: 0;\\n margin: 0;\\n background: none;\\n appearance: none;\\n -webkit-appearance: none;\\n }\\n\\n button:focus {\\n outline: 1px dotted;\\n outline: 5px auto -webkit-focus-ring-color;\\n }\\n\\n button:focus:not(:focus-visible) {\\n outline: none;\\n }\\n\\n input,\\n button,\\n select,\\n optgroup,\\n textarea {\\n margin: 0;\\n font-family: inherit;\\n font-size: inherit;\\n line-height: inherit;\\n }\\n\\n button,\\n input {\\n overflow: visible;\\n }\\n\\n button,\\n select {\\n text-transform: none;\\n }\\n\\n select {\\n word-wrap: normal;\\n }\\n\\n button,\\n [type='button'],\\n [type='reset'],\\n [type='submit'] {\\n -webkit-appearance: button;\\n }\\n\\n button:not(:disabled),\\n [type='button']:not(:disabled),\\n [type='reset']:not(:disabled),\\n [type='submit']:not(:disabled) {\\n cursor: pointer;\\n }\\n\\n button::-moz-focus-inner,\\n [type='button']::-moz-focus-inner,\\n [type='reset']::-moz-focus-inner,\\n [type='submit']::-moz-focus-inner {\\n padding: 0;\\n border-style: none;\\n }\\n\\n input[type='radio'],\\n input[type='checkbox'] {\\n box-sizing: border-box;\\n padding: 0;\\n }\\n\\n input[type='date'],\\n input[type='time'],\\n input[type='datetime-local'],\\n input[type='month'] {\\n -webkit-appearance: listbox;\\n }\\n\\n textarea {\\n overflow: auto;\\n resize: vertical;\\n }\\n\\n fieldset {\\n min-width: 0;\\n padding: 0;\\n margin: 0;\\n border: 0;\\n }\\n\\n legend {\\n display: block;\\n width: 100%;\\n max-width: 100%;\\n padding: 0;\\n margin-bottom: 8px;\\n font-size: 24px;\\n line-height: inherit;\\n color: inherit;\\n white-space: normal;\\n }\\n\\n progress {\\n vertical-align: baseline;\\n }\\n\\n [type='number']::-webkit-inner-spin-button,\\n [type='number']::-webkit-outer-spin-button {\\n height: auto;\\n }\\n\\n [type='search'] {\\n outline-offset: -2px;\\n -webkit-appearance: none;\\n }\\n\\n [type='search']::-webkit-search-decoration {\\n -webkit-appearance: none;\\n }\\n\\n ::-webkit-file-upload-button {\\n font: inherit;\\n -webkit-appearance: button;\\n }\\n\\n output {\\n display: inline-block;\\n }\\n\\n summary {\\n display: list-item;\\n cursor: pointer;\\n }\\n\\n template {\\n display: none;\\n }\\n\\n [hidden] {\\n display: none !important;\\n }\\n \"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return af=function(){return t},t}function ap(){return(0,y.jsx)(\"style\",{children:ei(af())})}function ah(){var e,n,t=(e=['\\n :host {\\n /* \\n * CAUTION: THIS IS A WORKAROUND!\\n * For now, we use @babel/code-frame to parse the code frame which does not support option to change the color.\\n * x-ref: https://github.com/babel/babel/blob/efa52324ff835b794c48080f14877b6caf32cd15/packages/babel-code-frame/src/defs.ts#L40-L54\\n * So, we do a workaround mapping to change the color matching the theme.\\n *\\n * For example, in @babel/code-frame, the \"keyword\" is mapped to ANSI \"cyan\".\\n * We want the \"keyword\" to use the \"syntax-keyword\" color in the theme.\\n * So, we map the \"cyan\" to the \"syntax-keyword\" in the theme.\\n */\\n /* cyan: keyword */\\n --color-ansi-cyan: var(--color-syntax-keyword);\\n /* yellow: capitalized, jsxIdentifier, punctuation */\\n --color-ansi-yellow: var(--color-syntax-function);\\n /* magenta: number, regex */\\n --color-ansi-magenta: var(--color-syntax-keyword);\\n /* green: string */\\n --color-ansi-green: var(--color-syntax-string);\\n /* gray (bright black): comment, gutter */\\n --color-ansi-bright-black: var(--color-syntax-comment);\\n\\n /* Ansi - Temporary */\\n --color-ansi-selection: var(--color-gray-alpha-300);\\n --color-ansi-bg: var(--color-background-200);\\n --color-ansi-fg: var(--color-gray-1000);\\n\\n --color-ansi-white: var(--color-gray-700);\\n --color-ansi-black: var(--color-gray-200);\\n --color-ansi-blue: var(--color-blue-700);\\n --color-ansi-red: var(--color-red-700);\\n --color-ansi-bright-white: var(--color-gray-1000);\\n --color-ansi-bright-blue: var(--color-blue-800);\\n --color-ansi-bright-cyan: var(--color-blue-800);\\n --color-ansi-bright-green: var(--color-green-800);\\n --color-ansi-bright-magenta: var(--color-blue-800);\\n --color-ansi-bright-red: var(--color-red-800);\\n --color-ansi-bright-yellow: var(--color-amber-900);\\n\\n /* Background Light */\\n --color-background-100: #ffffff;\\n --color-background-200: #fafafa;\\n\\n /* Syntax Light */\\n --color-syntax-comment: #545454;\\n --color-syntax-constant: #171717;\\n --color-syntax-function: #0054ad;\\n --color-syntax-keyword: #a51850;\\n --color-syntax-link: #066056;\\n --color-syntax-parameter: #8f3e00;\\n --color-syntax-punctuation: #171717;\\n --color-syntax-string: #036157;\\n --color-syntax-string-expression: #066056;\\n\\n /* Gray Scale Light */\\n --color-gray-100: #f2f2f2;\\n --color-gray-200: #ebebeb;\\n --color-gray-300: #e6e6e6;\\n --color-gray-400: #eaeaea;\\n --color-gray-500: #c9c9c9;\\n --color-gray-600: #a8a8a8;\\n --color-gray-700: #8f8f8f;\\n --color-gray-800: #7d7d7d;\\n --color-gray-900: #666666;\\n --color-gray-1000: #171717;\\n\\n /* Gray Alpha Scale Light */\\n --color-gray-alpha-100: rgba(0, 0, 0, 0.05);\\n --color-gray-alpha-200: rgba(0, 0, 0, 0.081);\\n --color-gray-alpha-300: rgba(0, 0, 0, 0.1);\\n --color-gray-alpha-400: rgba(0, 0, 0, 0.08);\\n --color-gray-alpha-500: rgba(0, 0, 0, 0.21);\\n --color-gray-alpha-600: rgba(0, 0, 0, 0.34);\\n --color-gray-alpha-700: rgba(0, 0, 0, 0.44);\\n --color-gray-alpha-800: rgba(0, 0, 0, 0.51);\\n --color-gray-alpha-900: rgba(0, 0, 0, 0.605);\\n --color-gray-alpha-1000: rgba(0, 0, 0, 0.91);\\n\\n /* Blue Scale Light */\\n --color-blue-100: #f0f7ff;\\n --color-blue-200: #edf6ff;\\n --color-blue-300: #e1f0ff;\\n --color-blue-400: #cde7ff;\\n --color-blue-500: #99ceff;\\n --color-blue-600: #52aeff;\\n --color-blue-700: #0070f3;\\n --color-blue-800: #0060d1;\\n --color-blue-900: #0067d6;\\n --color-blue-1000: #0025ad;\\n\\n /* Red Scale Light */\\n --color-red-100: #fff0f0;\\n --color-red-200: #ffebeb;\\n --color-red-300: #ffe5e5;\\n --color-red-400: #fdd8d8;\\n --color-red-500: #f8baba;\\n --color-red-600: #f87274;\\n --color-red-700: #e5484d;\\n --color-red-800: #da3036;\\n --color-red-900: #ca2a30;\\n --color-red-1000: #381316;\\n\\n /* Amber Scale Light */\\n --color-amber-100: #fff6e5;\\n --color-amber-200: #fff4d5;\\n --color-amber-300: #fef0cd;\\n --color-amber-400: #ffddbf;\\n --color-amber-500: #ffc96b;\\n --color-amber-600: #f5b047;\\n --color-amber-700: #ffb224;\\n --color-amber-800: #ff990a;\\n --color-amber-900: #a35200;\\n --color-amber-1000: #4e2009;\\n\\n /* Green Scale Light */\\n --color-green-100: #effbef;\\n --color-green-200: #eafaea;\\n --color-green-300: #dcf6dc;\\n --color-green-400: #c8f1c9;\\n --color-green-500: #99e59f;\\n --color-green-600: #6cda76;\\n --color-green-700: #46a758;\\n --color-green-800: #388e4a;\\n --color-green-900: #297c3b;\\n --color-green-1000: #18311e;\\n\\n /* Turbopack Light - Temporary */\\n --color-turbopack-text-red: #ff1e56;\\n --color-turbopack-text-blue: #0096ff;\\n --color-turbopack-border-red: #f0adbe;\\n --color-turbopack-border-blue: #adccea;\\n --color-turbopack-background-red: #fff7f9;\\n --color-turbopack-background-blue: #f6fbff;\\n }\\n '],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return ah=function(){return t},t}function ag(){return(0,y.jsx)(\"style\",{children:ei(ah())})}function am(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function av(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}function ab(e){var n=e.state,t=e.dispatch,r=e.getSquashedHydrationErrorDetails,o=e.runtimeErrors,a=e.errorCount,i=!!false,l=(0,tJ.N)(n.isErrorOverlayOpen,{exitDelay:200}),s=l.mounted,c={rendered:l.rendered,transitionDurationMs:200,isTurbopack:i,versionInfo:n.versionInfo,errorCount:a};return null!==n.buildError?(0,y.jsx)(tr,av(am({},c),{message:n.buildError,rendered:!0})):o.length&&s?(0,y.jsx)(tT,av(am({},c),{debugInfo:n.debugInfo,getSquashedHydrationErrorDetails:r,runtimeErrors:o,onClose:function(){t({type:I})}})):(0,y.jsx)(x.Suspense,{})}function ay(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function ax(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function aw(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){ax(e,n,t[n])})}return e}function aj(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return ay(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return ay(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}var ak=function(e){return e.state.buildError?(0,y.jsx)(aO,aw({},e)):(0,y.jsx)(aA,aw({},e))},aA=function(e){var n,t,r,o=e.children,a=e.state,i=e.isAppDir,l=e.dispatch,s=a.errors,c=aj((0,x.useState)({}),2),u=c[0],d=c[1],f=aj((0,x.useMemo)(function(){for(var e=[],n=null,t=0;t<s.length;++t){var r=s[t],o=r.id;if(o in u){e.push(u[o]);continue}n=r;break}return[e,n]},[s,u]),2),p=f[0],h=f[1];return t=(n={errors:s,dispatch:l}).errors,r=n.dispatch,(0,x.useEffect)(function(){var e,n,o=(null==(e=\"Webpack\")?void 0:e.toUpperCase())===\"TURBOPACK\"&&true,a=null==(n=t[0])?void 0:n.error;if(o&&a){var i=\"__next_error_overlay:\".concat(window.location.pathname,\":\").concat(a.message);r({type:K,showRestartServerButton:\"1\"===sessionStorage.getItem(i)});var l=function(){sessionStorage.setItem(i,\"1\")};return window.addEventListener(\"beforeunload\",l),function(){window.removeEventListener(\"beforeunload\",l)}}r({type:K,showRestartServerButton:!1})},[t,r]),(0,x.useEffect)(function(){if(null!=h){var e,n,t=!0;return(e=h,n=i,tb(function(){var t,r,o,a,i;return tw(this,function(l){switch(l.label){case 0:var s,c;if(t={id:e.id,runtime:!0,error:e.error,type:e.type},!(\"use\"in x))return[3,1];return r=tx(ty({},t),{frames:(c=(s=function(){return tb(function(){return tw(this,function(t){switch(t.label){case 0:return[4,eC(e.frames,tm(e.error),n)];case 1:return[2,t.sent()]}})})()})(),function(){return c})}),void 0!==e.componentStackFrames&&(r.componentStackFrames=e.componentStackFrames),[2,r];case 1:return a=[ty({},t)],i={},[4,eC(e.frames,tm(e.error),n)];case 2:return o=tx.apply(void 0,a.concat([(i.frames=l.sent(),i)])),void 0!==e.componentStackFrames&&(o.componentStackFrames=e.componentStackFrames),[2,o];case 3:return[2]}})})()).then(function(e){t&&d(function(n){var t,r;return t=aw({},n),r=null!=(r=ax({},e.id,e))?r:{},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t})}),function(){t=!1}}},[h,i]),o({runtimeErrors:p,totalErrorCount:s.length})},aO=function(e){return(0,e.children)({runtimeErrors:[],totalErrorCount:1})};function aC(){var e,n,t=(e=[\"\\n :host(.dark) {\\n \",\"\\n \",\"\\n }\\n\\n @media (prefers-color-scheme: dark) {\\n :host(:not(.light)) {\\n \",\"\\n \",\"\\n }\\n }\\n \"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return aC=function(){return t},t}var aS=\"\\n /* Background Dark */\\n --color-background-100: #0a0a0a;\\n --color-background-200: #000000;\\n\\n /* Syntax Dark */\\n --color-syntax-comment: #a0a0a0;\\n --color-syntax-constant: #ededed;\\n --color-syntax-function: #52a9ff;\\n --color-syntax-keyword: #f76e99;\\n --color-syntax-link: #0ac5b2;\\n --color-syntax-parameter: #f1a10d;\\n --color-syntax-punctuation: #ededed;\\n --color-syntax-string: #0ac5b2;\\n --color-syntax-string-expression: #0ac5b2;\\n\\n /* Gray Scale Dark */\\n --color-gray-100: #1a1a1a;\\n --color-gray-200: #1f1f1f;\\n --color-gray-300: #292929;\\n --color-gray-400: #2e2e2e;\\n --color-gray-500: #454545;\\n --color-gray-600: #878787;\\n --color-gray-700: #8f8f8f;\\n --color-gray-800: #7d7d7d;\\n --color-gray-900: #a0a0a0;\\n --color-gray-1000: #ededed;\\n\\n /* Gray Alpha Scale Dark */\\n --color-gray-alpha-100: rgba(255, 255, 255, 0.066);\\n --color-gray-alpha-200: rgba(255, 255, 255, 0.087);\\n --color-gray-alpha-300: rgba(255, 255, 255, 0.125);\\n --color-gray-alpha-400: rgba(255, 255, 255, 0.145);\\n --color-gray-alpha-500: rgba(255, 255, 255, 0.239);\\n --color-gray-alpha-600: rgba(255, 255, 255, 0.506);\\n --color-gray-alpha-700: rgba(255, 255, 255, 0.54);\\n --color-gray-alpha-800: rgba(255, 255, 255, 0.47);\\n --color-gray-alpha-900: rgba(255, 255, 255, 0.61);\\n --color-gray-alpha-1000: rgba(255, 255, 255, 0.923);\\n\\n /* Blue Scale Dark */\\n --color-blue-100: #0f1b2d;\\n --color-blue-200: #10243e;\\n --color-blue-300: #0f3058;\\n --color-blue-400: #0d3868;\\n --color-blue-500: #0a4481;\\n --color-blue-600: #0091ff;\\n --color-blue-700: #0070f3;\\n --color-blue-800: #0060d1;\\n --color-blue-900: #52a9ff;\\n --color-blue-1000: #eaf6ff;\\n\\n /* Red Scale Dark */\\n --color-red-100: #2a1314;\\n --color-red-200: #3d1719;\\n --color-red-300: #551a1e;\\n --color-red-400: #671e22;\\n --color-red-500: #822025;\\n --color-red-600: #e5484d;\\n --color-red-700: #e5484d;\\n --color-red-800: #da3036;\\n --color-red-900: #ff6369;\\n --color-red-1000: #ffecee;\\n\\n /* Amber Scale Dark */\\n --color-amber-100: #271700;\\n --color-amber-200: #341c00;\\n --color-amber-300: #4a2900;\\n --color-amber-400: #573300;\\n --color-amber-500: #693f05;\\n --color-amber-600: #e79c13;\\n --color-amber-700: #ffb224;\\n --color-amber-800: #ff990a;\\n --color-amber-900: #f1a10d;\\n --color-amber-1000: #fef3dd;\\n\\n /* Green Scale Dark */\\n --color-green-100: #0b2211;\\n --color-green-200: #0f2c17;\\n --color-green-300: #11351b;\\n --color-green-400: #0c461b;\\n --color-green-500: #126427;\\n --color-green-600: #1a9338;\\n --color-green-700: #46a758;\\n --color-green-800: #388e4a;\\n --color-green-900: #63c174;\\n --color-green-1000: #e5fbeb;\\n\\n /* Turbopack Dark - Temporary */\\n --color-turbopack-text-red: #ff6d92;\\n --color-turbopack-text-blue: #45b2ff;\\n --color-turbopack-border-red: #6e293b;\\n --color-turbopack-border-blue: #284f80;\\n --color-turbopack-background-red: #250d12;\\n --color-turbopack-background-blue: #0a1723;\\n\",aE=\"\\n --color-font: white;\\n --color-backdrop: rgba(0, 0, 0, 0.8);\\n --color-border-shadow: rgba(255, 255, 255, 0.145);\\n\\n --color-title-color: #fafafa;\\n --color-stack-notes: #a9a9a9;\\n\";function a_(){return(0,y.jsx)(\"style\",{children:ei(aC(),aE,aS,aE,aS)})}function aP(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function az(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return aP(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return aP(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function aL(e){var n,t,r,o=e.state,a=e.dispatch,i=e.getSquashedHydrationErrorDetails,l=az((t=(n=rt((0,x.useState)(\"undefined\"!=typeof localStorage&&localStorage.getItem(J)?Number(localStorage.getItem(J)):S.Medium),2))[0],r=n[1],[t,function(e){r(e),localStorage.setItem(J,String(e))}]),2),s=l[0],c=l[1],u=az((0,x.useState)(!1),2),d=u[0],f=u[1],p=null!==o.buildError;return false&&(0),(0,y.jsxs)(ed,{children:[(0,y.jsx)(ap,{}),(0,y.jsx)(ep,{scale: false?0:s}),(0,y.jsx)(ag,{}),(0,y.jsx)(ad,{}),(0,y.jsx)(a_,{}),(0,y.jsx)(ak,{state:o,dispatch:a,isAppDir:!0,children:function(e){var n=e.runtimeErrors,t=e.totalErrorCount;return(0,y.jsx)(y.Fragment,{children:o.showIndicator&&( false?0:(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(rU,{scale:s,setScale:c,state:o,dispatch:a,errorCount:t,isBuildError:p}),(0,y.jsx)(ab,{state:o,dispatch:a,getSquashedHydrationErrorDetails:i,runtimeErrors:n,errorCount:t})]}))})}})]})}var aT=__nested_webpack_require_381207__(\"./src/next-devtools/dev-overlay/segment-explorer-trie.ts\");function aR(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function aN(e){return function(e){if(Array.isArray(e))return aR(e)}(e)||function(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}(e)||aD(e)||function(){throw TypeError(\"Invalid attempt to spread non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function aD(e,n){if(e){if(\"string\"==typeof e)return aR(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return aR(e,n)}}var aB=null,aM=[];function aI(e){return function(){for(var n=arguments.length,t=Array(n),r=0;r<n;r++)t[r]=arguments[r];aB?e.apply(void 0,[aB].concat(aN(t))):aM.push(function(n){e.apply(void 0,[n].concat(aN(t)))})}}var aH={onBuildOk:aI(function(e){e({type:_})}),onBuildError:aI(function(e,n){e({type:P,message:n})}),onBeforeRefresh:aI(function(e){e({type:z})}),onRefresh:aI(function(e){e({type:L})}),onVersionInfo:aI(function(e,n){e({type:T,versionInfo:n})}),onStaticIndicator:aI(function(e,n){e({type:E,staticIndicator:n})}),onDebugInfo:aI(function(e,n){e({type:D,debugInfo:n})}),onDevIndicator:aI(function(e,n){e({type:B,devIndicator:n})}),onUnhandledError:aI(function(e,n){e({type:R,reason:n})}),onUnhandledRejection:aI(function(e,n){e({type:N,reason:n})}),openErrorOverlay:aI(function(e){e({type:M})}),closeErrorOverlay:aI(function(e){e({type:I})}),toggleErrorOverlay:aI(function(e){e({type:H})}),buildingIndicatorHide:aI(function(e){e({type:U})}),buildingIndicatorShow:aI(function(e){e({type:F})}),renderingIndicatorHide:aI(function(e){e({type:q})}),renderingIndicatorShow:aI(function(e){e({type:V})}),segmentExplorerNodeAdd:aI(function(e,n){(0,aT.th)(n)}),segmentExplorerNodeRemove:aI(function(e,n){(0,aT._c)(n)}),segmentExplorerUpdateRouteState:aI(function(e,n){e({type:ee,page:n})})};function aF(e){var n,t,r=e.getComponentStack,o=e.getOwnerStack,a=e.getSquashedHydrationErrorDetails,i=e.isRecoverableError,l=(n=function(e,n,t,r){var o;function a(e,o,a){var i,l=n(a),s=void 0===l?void 0:function(e){var n=[],t=!0,r=!1,o=void 0;try{for(var a,i=e.trim().split(\"\\n\")[Symbol.iterator]();!(t=(a=i.next()).done);t=!0){var l=a.value,s=/at ([^ ]+)( \\((.*)\\))?/.exec(l);if(null==s?void 0:s[1]){var c=s[1],u=s[3];if(!u){n.push({canOpenInEditor:!1,component:c});continue}if(null==u?void 0:u.includes(\"next/dist\"))break;var d=function(e){var n,t,r,o,a=(r=e).startsWith(\"file://\")?\"file\":r.includes(\"webpack-internal://\")?\"webpack-internal\":r.startsWith(\"http://\")||r.startsWith(\"https://\")?\"http\":r.startsWith(\"//\")?\"protocol-relative\":\"unknown\",i=null==e?void 0:e.replace(/^(webpack-internal:\\/\\/\\/|file:\\/\\/)(\\(.*\\)\\/)?/,\"\"),l=(n=null!=(o=null==i?void 0:i.match(/^(.+):(\\d+):(\\d+)/))?o:[],t=4,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,4)||function(e,n){if(e){if(\"string\"==typeof e)return w(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return w(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),s=l[1],c=l[2],u=l[3];switch(a){case\"file\":case\"webpack-internal\":return{canOpenInEditor:!0,file:s,lineNumber:c?Number(c):void 0,column:u?Number(u):void 0};default:return{canOpenInEditor:!1}}}(u);n.push(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({component:c},d))}}}catch(e){r=!0,o=e}finally{try{t||null==i.return||i.return()}finally{if(r)throw o}}return n}(l),c=t(a),u=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"/home/Nicholai/Documents/Dev/biohazard-vfx-1/.next\";return e?(e=e.split(\"\\n\").map(function(e){return e.includes(\"(eval \")&&(e=e.replace(/eval code/g,\"eval\").replace(/\\(eval at [^()]* \\(/,\"(file://\").replace(/\\),.*$/g,\")\")),e}).join(\"\\n\"),(0,j.parse)(e).map(function(e){try{var t=new URL(e.file),r=k.exec(t.pathname);if(r){var o,a=null==n||null==(o=n.replace(/\\\\/g,\"/\"))?void 0:o.replace(/\\/$/,\"\");a&&(e.file=\"file://\"+a.concat(r.pop())+t.search)}}catch(e){}return e})):[]}((a.stack||\"\")+(c||\"\")),d={id:o,error:a,frames:u,componentStackFrames:s,type:r(a)?\"recoverable\":(i=a)&&\"NEXT_CONSOLE_ERROR\"===i[A]?\"console\":\"runtime\"},f=e.filter(function(e){return e.error.stack!==d.error.stack&&et(e.error.stack)!==et(d.error.stack)||t(e.error)!==t(d.error)});return f.length===e.length?(f.push(d),f):e}return(0,x.useReducer)(function(e,n){switch(n.type){case D:return C(O({},e),{debugInfo:n.debugInfo});case E:return C(O({},e),{staticIndicator:n.staticIndicator});case _:return C(O({},e),{buildError:null});case P:return C(O({},e),{buildError:n.message});case z:return C(O({},e),{refreshState:{type:\"pending\",errors:[]}});case L:return C(O({},e),{buildError:null,errors:\"pending\"===e.refreshState.type?e.refreshState.errors:[],refreshState:{type:\"idle\"}});case R:case N:switch(e.refreshState.type){case\"idle\":return C(O({},e),{nextId:e.nextId+1,errors:a(e.errors,e.nextId,n.reason)});case\"pending\":return C(O({},e),{nextId:e.nextId+1,refreshState:C(O({},e.refreshState),{errors:a(e.errors,e.nextId,n.reason)})});default:return e}case T:return C(O({},e),{versionInfo:n.versionInfo});case B:return C(O({},e),{showIndicator:!0,disableDevIndicator:er||!!n.devIndicator.disabledUntil});case M:return C(O({},e),{isErrorOverlayOpen:!0});case I:return C(O({},e),{isErrorOverlayOpen:!1});case H:return C(O({},e),{isErrorOverlayOpen:!e.isErrorOverlayOpen});case F:return C(O({},e),{buildingIndicator:!0});case U:return C(O({},e),{buildingIndicator:!1});case V:return C(O({},e),{renderingIndicator:!0});case q:return C(O({},e),{renderingIndicator:!1});case W:return C(O({},e),{isDevToolsPanelOpen:!0});case $:return C(O({},e),{isDevToolsPanelOpen:!1});case Z:return C(O({},e),{isDevToolsPanelOpen:!e.isDevToolsPanelOpen});case Y:return C(O({},e),{devToolsPosition:n.devToolsPosition});case X:return C(O({},e),{scale:n.scale});case ee:return C(O({},e),{page:n.page});case K:return C(O({},e),{showRestartServerButton:n.showRestartServerButton});default:return e}},(o=e,C(O({},eo),{isErrorOverlayOpen:\"pages\"===o,routerType:o})))}(e.routerType,r,o,i),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||aD(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),s=l[0],c=l[1];return(0,x.useInsertionEffect)(function(){aB=c;var e=setTimeout(function(){!function(e){try{var n=!0,t=!1,r=void 0;try{for(var o,a=aM[Symbol.iterator]();!(n=(o=a.next()).done);n=!0)(0,o.value)(e)}catch(e){t=!0,r=e}finally{try{n||null==a.return||a.return()}finally{if(t)throw r}}}finally{aM.length=0}}(c)});return function(){aB=null,clearTimeout(e)}},[]),(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(es,{}),(0,y.jsx)(aL,{state:s,dispatch:c,getSquashedHydrationErrorDetails:a})]})}var aU=!1,aV=!1;function aq(){return null}function aW(e,n,t){if(aU)throw Error(\"Next DevTools: Pages Dev Overlay is already mounted. This is a bug in Next.js\");if(!aV){var r=document.createElement(\"script\");r.style.display=\"block\",r.style.position=\"absolute\",r.setAttribute(\"data-nextjs-dev-overlay\",\"true\");var o=document.createElement(\"nextjs-portal\");r.appendChild(o),document.body.appendChild(r);var a=(0,ea.createRoot)(o,{identifierPrefix:\"ndt-\"});(0,x.startTransition)(function(){a.render((0,y.jsx)(aF,{getComponentStack:e,getOwnerStack:n,getSquashedHydrationErrorDetails:aq,isRecoverableError:t,routerType:\"app\"}))}),aV=!0}}function a$(e,n,t,r){if(aV)throw Error(\"Next DevTools: App Dev Overlay is already mounted. This is a bug in Next.js\");if(!aU){var o=document.createElement(\"nextjs-portal\");o.style.position=\"absolute\",new MutationObserver(function(e){var n=!0,t=!1,r=void 0;try{for(var a,i=e[Symbol.iterator]();!(n=(a=i.next()).done);n=!0){var l=a.value;if(\"childList\"===l.type){var s=!0,c=!1,u=void 0;try{for(var d,f=l.removedNodes[Symbol.iterator]();!(s=(d=f.next()).done);s=!0)d.value===o&&document.body.appendChild(o)}catch(e){c=!0,u=e}finally{try{s||null==f.return||f.return()}finally{if(c)throw u}}}}}catch(e){t=!0,r=e}finally{try{n||null==i.return||i.return()}finally{if(t)throw r}}}).observe(document.body,{childList:!0}),document.body.appendChild(o);var a=(0,ea.createRoot)(o);(0,x.startTransition)(function(){a.render((0,y.jsx)(aF,{getComponentStack:e,getOwnerStack:n,getSquashedHydrationErrorDetails:t,isRecoverableError:r,routerType:\"pages\"}))}),aU=!0}}})(),exports.dispatcher=__nested_webpack_exports__.dispatcher,exports.renderAppDevOverlay=__nested_webpack_exports__.renderAppDevOverlay,exports.renderPagesDevOverlay=__nested_webpack_exports__.renderPagesDevOverlay,__nested_webpack_exports__)-1===[\"dispatcher\",\"renderAppDevOverlay\",\"renderPagesDevOverlay\"].indexOf(__webpack_i__)&&(exports[__webpack_i__]=__nested_webpack_exports__[__webpack_i__]);Object.defineProperty(exports, \"__esModule\", ({value:!0}));\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvbmV4dC1kZXZ0b29scy9pbmRleC5qcyIsIm1hcHBpbmdzIjoiO0FBQUEseUJBQXlCLG1QQUFtUCxhQUFhLE9BQU8sUUFBUSxFQUFFLDhhQUE4YTtBQUN4dEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sbUdBQW1HLFlBQVksYUFBYSxXQUFXLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxXQUFXLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxXQUFXLFVBQVUsWUFBWSxhQUFhLGFBQWEsT0FBTyxLQUFLLEtBQUssT0FBTyxhQUFhLFdBQVcsWUFBWSxPQUFPLEtBQUssS0FBSyxPQUFPLGFBQWEsV0FBVyxZQUFZLE9BQU8sS0FBSyxLQUFLLE9BQU8sYUFBYSxXQUFXLFlBQVksT0FBTyxLQUFLLEtBQUssT0FBTyxhQUFhLFdBQVcsWUFBWSxPQUFPLEtBQUssWUFBWSwwQ0FBMEMsdUJBQXVCLDBCQUEwQixtQkFBbUIsR0FBRyxjQUFjLHVCQUF1QixzQkFBc0IsdUJBQXVCLG9CQUFvQixxQkFBcUIseUJBQXlCLEdBQUcsb0JBQW9CLHVCQUF1QixhQUFhLGNBQWMsd0JBQXdCLHlDQUF5Qyw4QkFBOEIsR0FBRyx5QkFBeUIsOEZBQThGLDhDQUE4QyxjQUFjLGdDQUFnQyxHQUFHLDRCQUE0Qiw4RkFBOEYsaURBQWlELFdBQVcsaUNBQWlDLEdBQUcs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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU0saUlBQWlJLFlBQVksV0FBVyxVQUFVLFVBQVUsWUFBWSxhQUFhLE9BQU8sS0FBSyxVQUFVLFlBQVksYUFBYSxhQUFhLFdBQVcsTUFBTSxLQUFLLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxVQUFVLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLFdBQVcsWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxXQUFXLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksV0FBVyxVQUFVLEtBQUssS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLFdBQVcsWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsV0FBVyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssVUFBVSxVQUFVLFVBQVUsWUFBWSxNQUFNLEtBQUssVUFBVSxVQUFVLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlB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Q0FBMEMsS0FBSyw0QkFBNEIsYUFBYSxJQUFJLHVCQUF1QixJQUFJLGtDQUFrQyx1QkFBdUIsb0JBQW9CLFNBQVMsU0FBUyxRQUFRLElBQUksOEJBQThCLFFBQVEsZUFBZSxRQUFRLGFBQWEsSUFBSSxFQUFFLGtCQUFrQix5QkFBeUIsNEJBQTRCLHlCQUF5QixnQkFBZ0Isc0RBQXNELEdBQUcsRUFBRSxnQkFBZ0IsY0FBYyxZQUFZLG1CQUFtQixtR0FBbUcsUUFBUSx1Q0FBdUMscUdBQXFHLDhDQUE4Qyw4Q0FBOEMsMkJBQTJCLHdCQUF3QixFQUFFLGlDQUFpQyx1QkFBdUIsOEdBQThHLEdBQUcsU0FBUyxxQkFBcUIsaUdBQWlHLFFBQVEsOENBQThDLDZEQUE2RCx1QkFBdUIsSUFBSSxpQ0FBaUMsdUJBQXVCLE1BQU0sY0FBYyx5QkFBeUIsdUJBQXVCLElBQUksOENBQThDLHVCQUF1QiwrQ0FBK0MsU0FBUyxTQUFTLFFBQVEsSUFBSSw4QkFBOEIsUUFBUSxpQkFBaUIsU0FBUyxTQUFTLFFBQVEsSUFBSSw4QkFBOEIsUUFBUSxlQUFlLHlCQUF5QixhQUFhLCtCQUErQiwyQkFBMkIsaUNBQWlDLHVCQUF1QiwrR0FBK0csR0FBRyxVQUFVLElBQUksa0JBQWtCLENBQUMsMEJBQW1CLFlBQVksMkJBQTJCLENBQUMsMEJBQW1CLHFCQUFxQiw2QkFBNkIsQ0FBQywwQkFBbUIsdUJBQXVCLDBCQUFtQixtSEFBbUgsMEJBQW1CLGlCQUFpQiw4Q0FBMkMsQ0FBQyxTQUFTLEVBQUM7QUFDMTdpWSIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvRG9jdW1lbnRzL0Rldi9iaW9oYXphcmQtdmZ4LTEvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9uZXh0LWRldnRvb2xzL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBfX3dlYnBhY2tfbW9kdWxlc19fPXtcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zcmMvbmV4dC1kZXZ0b29scy9jb21wb25lbnRzL3Rvb2x0aXAuY3NzXCI6ZnVuY3Rpb24oZSxuLHQpe1widXNlIHN0cmljdFwiO3QuZChuLHtaOigpPT5sfSk7dmFyIHI9dChcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIiksbz10Lm4ociksYT10KFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCIpLGk9dC5uKGEpKCkobygpKTtpLnB1c2goW2UuaWQsYC50b29sdGlwLXdyYXBwZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbGluZS1oZWlnaHQ6IDE7XG59XG5cbi50b29sdGlwIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nOiA2cHggMTJweDtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBmb250LXNpemU6IDE0cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4udG9vbHRpcC1hcnJvdyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDA7XG4gIGhlaWdodDogMDtcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLXdpZHRoOiB2YXIoLS1hcnJvdy1zaXplLCA2cHgpO1xuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG4udG9vbHRpcC1hcnJvdy0tdG9wIHtcbiAgYm9yZGVyLXdpZHRoOiB2YXIoLS1hcnJvdy1zaXplLCA2cHgpIHZhcigtLWFycm93LXNpemUsIDZweCkgMFxuICAgIHZhcigtLWFycm93LXNpemUsIDZweCk7XG4gIGJvcmRlci10b3AtY29sb3I6IHZhcigtLXRvb2x0aXAtYmctY29sb3IpO1xuICBib3R0b206IDA7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTtcbn1cblxuLnRvb2x0aXAtYXJyb3ctLWJvdHRvbSB7XG4gIGJvcmRlci13aWR0aDogMCB2YXIoLS1hcnJvdy1zaXplLCA2cHgpIHZhcigtLWFycm93LXNpemUsIDZweClcbiAgICB2YXIoLS1hcnJvdy1zaXplLCA2cHgpO1xuICBib3JkZXItYm90dG9tLWNvbG9yOiB2YXIoLS10b29sdGlwLWJnLWNvbG9yKTtcbiAgdG9wOiAwO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwMCUpO1xufVxuXG4udG9vbHRpcC1hcnJvdy0tbGVmdCB7XG4gIGJvcmRlci13aWR0aDogdmFyKC0tYXJyb3ctc2l6ZSwgNnB4KSAwIHZhcigtLWFycm93LXNpemUsIDZweClcbiAgICB2YXIoLS1hcnJvdy1zaXplLCA2cHgpO1xuICBib3JkZXItbGVmdC1jb2xvcjogdmFyKC0tdG9vbHRpcC1iZy1jb2xvcik7XG4gIHJpZ2h0OiAwO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XG59XG5cbi50b29sdGlwLWFycm93LS1yaWdodCB7XG4gIGJvcmRlci13aWR0aDogdmFyKC0tYXJyb3ctc2l6ZSwgNnB4KSB2YXIoLS1hcnJvdy1zaXplLCA2cHgpXG4gICAgdmFyKC0tYXJyb3ctc2l6ZSwgNnB4KSAwO1xuICBib3JkZXItcmlnaHQtY29sb3I6IHZhcigtLXRvb2x0aXAtYmctY29sb3IpO1xuICBsZWZ0OiAwO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpO1xufVxuXG4udG9vbHRpcC1wb3NpdGlvbmVyIHtcbiAgei1pbmRleDogdmFyKC0tdG9wLXotaW5kZXgpO1xufVxuYCxcIlwiLHt2ZXJzaW9uOjMsc291cmNlczpbXCJ3ZWJwYWNrOi8vLi9zcmMvbmV4dC1kZXZ0b29scy9jb21wb25lbnRzL3Rvb2x0aXAuY3NzXCJdLG5hbWVzOltdLG1hcHBpbmdzOlwiQUFBQTtFQUNFLGtCQUFrQjtFQUNsQixxQkFBcUI7RUFDckIsY0FBYztBQUNoQjs7QUFFQTtFQUNFLGtCQUFrQjtFQUNsQixpQkFBaUI7RUFDakIsa0JBQWtCO0VBQ2xCLGVBQWU7RUFDZixnQkFBZ0I7RUFDaEIsb0JBQW9CO0FBQ3RCOztBQUVBO0VBQ0Usa0JBQWtCO0VBQ2xCLFFBQVE7RUFDUixTQUFTO0VBQ1QsbUJBQW1CO0VBQ25CLG9DQUFvQztFQUNwQyx5QkFBeUI7QUFDM0I7O0FBRUE7RUFDRTswQkFDd0I7RUFDeEIseUNBQXlDO0VBQ3pDLFNBQVM7RUFDVCwyQkFBMkI7QUFDN0I7O0FBRUE7RUFDRTswQkFDd0I7RUFDeEIsNENBQTRDO0VBQzVDLE1BQU07RUFDTiw0QkFBNEI7QUFDOUI7O0FBRUE7RUFDRTswQkFDd0I7RUFDeEIsMENBQTBDO0VBQzFDLFFBQVE7RUFDUiwyQkFBMkI7QUFDN0I7O0FBRUE7RUFDRTs0QkFDMEI7RUFDMUIsMkNBQTJDO0VBQzNDLE9BQU87RUFDUCw0QkFBNEI7QUFDOUI7O0FBRUE7RUFDRSwyQkFBMkI7QUFDN0JcIixzb3VyY2VzQ29udGVudDpbXCIudG9vbHRpcC13cmFwcGVyIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIGxpbmUtaGVpZ2h0OiAxO1xcbn1cXG5cXG4udG9vbHRpcCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBwYWRkaW5nOiA2cHggMTJweDtcXG4gIGJvcmRlci1yYWRpdXM6IDhweDtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjQ7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuXFxuLnRvb2x0aXAtYXJyb3cge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgd2lkdGg6IDA7XFxuICBoZWlnaHQ6IDA7XFxuICBib3JkZXItc3R5bGU6IHNvbGlkO1xcbiAgYm9yZGVyLXdpZHRoOiB2YXIoLS1hcnJvdy1zaXplLCA2cHgpO1xcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuLnRvb2x0aXAtYXJyb3ctLXRvcCB7XFxuICBib3JkZXItd2lkdGg6IHZhcigtLWFycm93LXNpemUsIDZweCkgdmFyKC0tYXJyb3ctc2l6ZSwgNnB4KSAwXFxuICAgIHZhcigtLWFycm93LXNpemUsIDZweCk7XFxuICBib3JkZXItdG9wLWNvbG9yOiB2YXIoLS10b29sdGlwLWJnLWNvbG9yKTtcXG4gIGJvdHRvbTogMDtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTtcXG59XFxuXFxuLnRvb2x0aXAtYXJyb3ctLWJvdHRvbSB7XFxuICBib3JkZXItd2lkdGg6IDAgdmFyKC0tYXJyb3ctc2l6ZSwgNnB4KSB2YXIoLS1hcnJvdy1zaXplLCA2cHgpXFxuICAgIHZhcigtLWFycm93LXNpemUsIDZweCk7XFxuICBib3JkZXItYm90dG9tLWNvbG9yOiB2YXIoLS10b29sdGlwLWJnLWNvbG9yKTtcXG4gIHRvcDogMDtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTAwJSk7XFxufVxcblxcbi50b29sdGlwLWFycm93LS1sZWZ0IHtcXG4gIGJvcmRlci13aWR0aDogdmFyKC0tYXJyb3ctc2l6ZSwgNnB4KSAwIHZhcigtLWFycm93LXNpemUsIDZweClcXG4gICAgdmFyKC0tYXJyb3ctc2l6ZSwgNnB4KTtcXG4gIGJvcmRlci1sZWZ0LWNvbG9yOiB2YXIoLS10b29sdGlwLWJnLWNvbG9yKTtcXG4gIHJpZ2h0OiAwO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpO1xcbn1cXG5cXG4udG9vbHRpcC1hcnJvdy0tcmlnaHQge1xcbiAgYm9yZGVyLXdpZHRoOiB2YXIoLS1hcnJvdy1zaXplLCA2cHgpIHZhcigtLWFycm93LXNpemUsIDZweClcXG4gICAgdmFyKC0tYXJyb3ctc2l6ZSwgNnB4KSAwO1xcbiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB2YXIoLS10b29sdGlwLWJnLWNvbG9yKTtcXG4gIGxlZnQ6IDA7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpO1xcbn1cXG5cXG4udG9vbHRpcC1wb3NpdGlvbmVyIHtcXG4gIHotaW5kZXg6IHZhcigtLXRvcC16LWluZGV4KTtcXG59XFxuXCJdLHNvdXJjZVJvb3Q6XCJcIn1dKTtsZXQgbD1pfSxcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9jb21wb25lbnRzL2RldnRvb2xzLXBhbmVsL3Jlc2l6ZS9yZXNpemUtaGFuZGxlLmNzc1wiOmZ1bmN0aW9uKGUsbix0KXtcInVzZSBzdHJpY3RcIjt0LmQobix7WjooKT0+bH0pO3ZhciByPXQoXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCIpLG89dC5uKHIpLGE9dChcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiKSxpPXQubihhKSgpKG8oKSk7aS5wdXNoKFtlLmlkLGAucmVzaXplLWNvbnRhaW5lciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgLyogdG9kbzogYmV0dGVyIHogaW5kZXggKi9cbiAgei1pbmRleDogMTA7XG4gIC8qIHRvZG86IGlzIHRoaXMgbmVlZGVkICovXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xufVxuXG4ucmVzaXplLWxpbmUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIC8qIHRvZG8gc21hcnRlciB6IGluZGV4ICovXG4gIHotaW5kZXg6IC0xO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgLyogYSBub3JtYWwgZXhpdCBhbmltYXRpb24gY3VydmUtIGF0IHRoaXMgcG9pbnQgdGhlIGV4aXQgYW5pbWF0aW9uIGlzICovXG4gIC8qIGltbWVkaWF0ZWx5IHJlc3BvbnNpdmUgc28gd2UgZG9uJ3QgbmVlZCBhIGJlc3Bva2UgY3VydmUgKi9cbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuNHMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTtcbiAgLyogdG9kbzogYmV0dGVyIHZhcj8gKi9cbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS0xMDApO1xufVxuXG4vKiBzdGFydCByZWFsbHkgZmFzdCBiZWNhdXNlIHdlIHN0YXJ0IHN1cGVyIGhpZGRlbiBpbml0aWFsbHkgYmVoaW5kIHRoZSBwYW5lbCwgb3RoZXJ3aXNlIGZlZWxzIGxpa2UgYW4gdW5pbnRlbmRlZCBhbmltYXRpb24gZGVsYXkgKi9cbi5yZXNpemUtY29udGFpbmVyOmhvdmVyIH4gLnJlc2l6ZS1saW5lIHtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgY3ViaWMtYmV6aWVyKDAuMDUsIDAuOSwgMC4yLCAxKTsgLyogRmFzdCBzdGFydCBmb3IgYW5pbWF0ZSBpbiAqL1xufVxuXG4ucmVzaXplLWNvbnRhaW5lci5yaWdodCxcbi5yZXNpemUtY29udGFpbmVyLmxlZnQge1xuICB0b3A6IDA7XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDI1cHg7XG4gIGN1cnNvcjogZXctcmVzaXplO1xufVxuXG4vKiB0b2RvOiBkb24ndCBoYXJkIGNvZGUgYWxsIHRoZXNlIHZhbHVlcy91c2UgdmFycyAqL1xuXG4ucmVzaXplLWNvbnRhaW5lci5ib3R0b20sXG4ucmVzaXplLWNvbnRhaW5lci50b3Age1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAyNXB4O1xuICBjdXJzb3I6IG5zLXJlc2l6ZTtcbn1cblxuLnJlc2l6ZS1jb250YWluZXIudG9wIHtcbiAgdG9wOiAtMTJweDtcbn1cbi5yZXNpemUtY29udGFpbmVyLmJvdHRvbSB7XG4gIGJvdHRvbTogLTEycHg7XG59XG4ucmVzaXplLWNvbnRhaW5lci5sZWZ0IHtcbiAgbGVmdDogLTEycHg7XG59XG4ucmVzaXplLWNvbnRhaW5lci5yaWdodCB7XG4gIHJpZ2h0OiAtMTJweDtcbn1cblxuLnJlc2l6ZS1jb250YWluZXIudG9wLWxlZnQsXG4ucmVzaXplLWNvbnRhaW5lci50b3AtcmlnaHQsXG4ucmVzaXplLWNvbnRhaW5lci5ib3R0b20tbGVmdCxcbi5yZXNpemUtY29udGFpbmVyLmJvdHRvbS1yaWdodCB7XG4gIHdpZHRoOiAzMnB4O1xuICBoZWlnaHQ6IDMycHg7XG4gIHotaW5kZXg6IDE1O1xufVxuXG4ucmVzaXplLWNvbnRhaW5lci50b3AtbGVmdCB7XG4gIHRvcDogLTE2cHg7XG4gIGxlZnQ6IC0xNnB4O1xuICBjdXJzb3I6IG53c2UtcmVzaXplO1xufVxuLnJlc2l6ZS1jb250YWluZXIudG9wLXJpZ2h0IHtcbiAgdG9wOiAtMTZweDtcbiAgcmlnaHQ6IC0xNnB4O1xuICBjdXJzb3I6IG5lc3ctcmVzaXplO1xufVxuLnJlc2l6ZS1jb250YWluZXIuYm90dG9tLWxlZnQge1xuICBib3R0b206IC0xNnB4O1xuICBsZWZ0OiAtMTZweDtcbiAgY3Vyc29yOiBuZXN3LXJlc2l6ZTtcbn1cbi5yZXNpemUtY29udGFpbmVyLmJvdHRvbS1yaWdodCB7XG4gIGJvdHRvbTogLTE2cHg7XG4gIHJpZ2h0OiAtMTZweDtcbiAgY3Vyc29yOiBud3NlLXJlc2l6ZTtcbn1cblxuLnJlc2l6ZS1saW5lLnRvcCxcbi5yZXNpemUtbGluZS5ib3R0b20ge1xuICBoZWlnaHQ6IDI4cHg7XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XG59XG5cbi5yZXNpemUtbGluZS5sZWZ0LFxuLnJlc2l6ZS1saW5lLnJpZ2h0IHtcbiAgd2lkdGg6IDI4cHg7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xufVxuXG4ucmVzaXplLWxpbmUudG9wIHtcbiAgdG9wOiAtMTJweDtcbiAgbGVmdDogY2FsYygtMSAqIHZhcigtLWJvcmRlci1sZWZ0LCAycHgpKTtcbiAgd2lkdGg6IGNhbGMoMTAwJSArIHZhcigtLWJvcmRlci1ob3Jpem9udGFsLCA0cHgpKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1tZCkgdmFyKC0tcm91bmRlZC1tZCkgMCAwO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMjhweCk7XG59XG5cbi5yZXNpemUtbGluZS5ib3R0b20ge1xuICBib3R0b206IC0xMnB4O1xuICBsZWZ0OiBjYWxjKC0xICogdmFyKC0tYm9yZGVyLWxlZnQsIDJweCkpO1xuICB3aWR0aDogY2FsYygxMDAlICsgdmFyKC0tYm9yZGVyLWhvcml6b250YWwsIDRweCkpO1xuICBib3JkZXItcmFkaXVzOiAwIDAgdmFyKC0tcm91bmRlZC1tZCkgdmFyKC0tcm91bmRlZC1tZCk7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMjhweCk7XG59XG5cbi5yZXNpemUtbGluZS5sZWZ0IHtcbiAgdG9wOiBjYWxjKC0xICogdmFyKC0tYm9yZGVyLXRvcCwgMnB4KSk7XG4gIGxlZnQ6IC0xMnB4O1xuICBoZWlnaHQ6IGNhbGMoMTAwJSArIHZhcigtLWJvcmRlci12ZXJ0aWNhbCwgNHB4KSk7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtbWQpIDAgMCB2YXIoLS1yb3VuZGVkLW1kKTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDI4cHgpO1xufVxuXG4ucmVzaXplLWxpbmUucmlnaHQge1xuICB0b3A6IGNhbGMoLTEgKiB2YXIoLS1ib3JkZXItdG9wLCAycHgpKTtcbiAgcmlnaHQ6IC0xMnB4O1xuICBoZWlnaHQ6IGNhbGMoMTAwJSArIHZhcigtLWJvcmRlci12ZXJ0aWNhbCwgNHB4KSk7XG4gIGJvcmRlci1yYWRpdXM6IDAgdmFyKC0tcm91bmRlZC1tZCkgdmFyKC0tcm91bmRlZC1tZCkgMDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0yOHB4KTtcbn1cblxuLnJlc2l6ZS1jb250YWluZXIucmlnaHQ6aG92ZXIgfiAucmVzaXplLWxpbmUucmlnaHQsXG4ucmVzaXplLWNvbnRhaW5lci5sZWZ0OmhvdmVyIH4gLnJlc2l6ZS1saW5lLmxlZnQsXG4ucmVzaXplLWxpbmUucmlnaHQuZHJhZ2dpbmcsXG4ucmVzaXplLWxpbmUubGVmdC5kcmFnZ2luZyB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbn1cblxuLnJlc2l6ZS1jb250YWluZXIuYm90dG9tOmhvdmVyIH4gLnJlc2l6ZS1saW5lLmJvdHRvbSxcbi5yZXNpemUtY29udGFpbmVyLnRvcDpob3ZlciB+IC5yZXNpemUtbGluZS50b3AsXG4ucmVzaXplLWxpbmUuYm90dG9tLmRyYWdnaW5nLFxuLnJlc2l6ZS1saW5lLnRvcC5kcmFnZ2luZyB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbn1cblxuLyogbWFrZSBzdXJlIHRoYXQgd2UgZG9uJ3Qgc2hvdyBtdWx0aXBsZSBoYW5kbGVzIGF0IG9uY2VcbiAqIHdlIHNob3VsZCBvbmx5IGV2ZXIgc2hvdyB0aGUgY3VycmVudGx5IHJlc2l6aW5nIGhhbmRsZVxuICogcmVnYXJkbGVzcyBvZiBob3ZlciBzdGF0ZSBcbiAqL1xuLnJlc2l6ZS1jb250YWluZXIubm8taG92ZXIucmlnaHQ6aG92ZXIgfiAucmVzaXplLWxpbmUucmlnaHQge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTI4cHgpO1xufVxuLnJlc2l6ZS1jb250YWluZXIubm8taG92ZXIubGVmdDpob3ZlciB+IC5yZXNpemUtbGluZS5sZWZ0IHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDI4cHgpO1xufVxuLnJlc2l6ZS1jb250YWluZXIubm8taG92ZXIuYm90dG9tOmhvdmVyIH4gLnJlc2l6ZS1saW5lLmJvdHRvbSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMjhweCk7XG59XG4ucmVzaXplLWNvbnRhaW5lci5uby1ob3Zlci50b3A6aG92ZXIgfiAucmVzaXplLWxpbmUudG9wIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDI4cHgpO1xufVxuYCxcIlwiLHt2ZXJzaW9uOjMsc291cmNlczpbXCJ3ZWJwYWNrOi8vLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9jb21wb25lbnRzL2RldnRvb2xzLXBhbmVsL3Jlc2l6ZS9yZXNpemUtaGFuZGxlLmNzc1wiXSxuYW1lczpbXSxtYXBwaW5nczpcIkFBQUE7RUFDRSxrQkFBa0I7RUFDbEIseUJBQXlCO0VBQ3pCLFdBQVc7RUFDWCx5QkFBeUI7RUFDekIsdUJBQXVCO0FBQ3pCOztBQUVBO0VBQ0Usa0JBQWtCO0VBQ2xCLHlCQUF5QjtFQUN6QixXQUFXO0VBQ1gsb0JBQW9CO0VBQ3BCLHVFQUF1RTtFQUN2RSw0REFBNEQ7RUFDNUQsdURBQXVEO0VBQ3ZELHNCQUFzQjtFQUN0Qix1Q0FBdUM7QUFDekM7O0FBRUEsbUlBQW1JO0FBQ25JO0VBQ0UsMERBQTBELEVBQUUsOEJBQThCO0FBQzVGOztBQUVBOztFQUVFLE1BQU07RUFDTixZQUFZO0VBQ1osV0FBVztFQUNYLGlCQUFpQjtBQUNuQjs7QUFFQSxvREFBb0Q7O0FBRXBEOztFQUVFLE9BQU87RUFDUCxXQUFXO0VBQ1gsWUFBWTtFQUNaLGlCQUFpQjtBQUNuQjs7QUFFQTtFQUNFLFVBQVU7QUFDWjtBQUNBO0VBQ0UsYUFBYTtBQUNmO0FBQ0E7RUFDRSxXQUFXO0FBQ2I7QUFDQTtFQUNFLFlBQVk7QUFDZDs7QUFFQTs7OztFQUlFLFdBQVc7RUFDWCxZQUFZO0VBQ1osV0FBVztBQUNiOztBQUVBO0VBQ0UsVUFBVTtFQUNWLFdBQVc7RUFDWCxtQkFBbUI7QUFDckI7QUFDQTtFQUNFLFVBQVU7RUFDVixZQUFZO0VBQ1osbUJBQW1CO0FBQ3JCO0FBQ0E7RUFDRSxhQUFhO0VBQ2IsV0FBVztFQUNYLG1CQUFtQjtBQUNyQjtBQUNBO0VBQ0UsYUFBYTtFQUNiLFlBQVk7RUFDWixtQkFBbUI7QUFDckI7O0FBRUE7O0VBRUUsWUFBWTtFQUNaLFdBQVc7RUFDWCw2Q0FBNkM7QUFDL0M7O0FBRUE7O0VBRUUsV0FBVztFQUNYLFlBQVk7RUFDWiw2Q0FBNkM7QUFDL0M7O0FBRUE7RUFDRSxVQUFVO0VBQ1Ysd0NBQXdDO0VBQ3hDLGlEQUFpRDtFQUNqRCxzREFBc0Q7RUFDdEQsMkJBQTJCO0FBQzdCOztBQUVBO0VBQ0UsYUFBYTtFQUNiLHdDQUF3QztFQUN4QyxpREFBaUQ7RUFDakQsc0RBQXNEO0VBQ3RELDRCQUE0QjtBQUM5Qjs7QUFFQTtFQUNFLHNDQUFzQztFQUN0QyxXQUFXO0VBQ1gsZ0RBQWdEO0VBQ2hELHNEQUFzRDtFQUN0RCwyQkFBMkI7QUFDN0I7O0FBRUE7RUFDRSxzQ0FBc0M7RUFDdEMsWUFBWTtFQUNaLGdEQUFnRDtFQUNoRCxzREFBc0Q7RUFDdEQsNEJBQTRCO0FBQzlCOztBQUVBOzs7O0VBSUUsd0JBQXdCO0FBQzFCOztBQUVBOzs7O0VBSUUsd0JBQXdCO0FBQzFCOztBQUVBOzs7RUFHRTtBQUNGO0VBQ0UsNEJBQTRCO0FBQzlCO0FBQ0E7RUFDRSwyQkFBMkI7QUFDN0I7QUFDQTtFQUNFLDRCQUE0QjtBQUM5QjtBQUNBO0VBQ0UsMkJBQTJCO0FBQzdCXCIsc291cmNlc0NvbnRlbnQ6W1wiLnJlc2l6ZS1jb250YWluZXIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgLyogdG9kbzogYmV0dGVyIHogaW5kZXggKi9cXG4gIHotaW5kZXg6IDEwO1xcbiAgLyogdG9kbzogaXMgdGhpcyBuZWVkZWQgKi9cXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbn1cXG5cXG4ucmVzaXplLWxpbmUge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgLyogdG9kbyBzbWFydGVyIHogaW5kZXggKi9cXG4gIHotaW5kZXg6IC0xO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICAvKiBhIG5vcm1hbCBleGl0IGFuaW1hdGlvbiBjdXJ2ZS0gYXQgdGhpcyBwb2ludCB0aGUgZXhpdCBhbmltYXRpb24gaXMgKi9cXG4gIC8qIGltbWVkaWF0ZWx5IHJlc3BvbnNpdmUgc28gd2UgZG9uJ3QgbmVlZCBhIGJlc3Bva2UgY3VydmUgKi9cXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjRzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7XFxuICAvKiB0b2RvOiBiZXR0ZXIgdmFyPyAqL1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS0xMDApO1xcbn1cXG5cXG4vKiBzdGFydCByZWFsbHkgZmFzdCBiZWNhdXNlIHdlIHN0YXJ0IHN1cGVyIGhpZGRlbiBpbml0aWFsbHkgYmVoaW5kIHRoZSBwYW5lbCwgb3RoZXJ3aXNlIGZlZWxzIGxpa2UgYW4gdW5pbnRlbmRlZCBhbmltYXRpb24gZGVsYXkgKi9cXG4ucmVzaXplLWNvbnRhaW5lcjpob3ZlciB+IC5yZXNpemUtbGluZSB7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBjdWJpYy1iZXppZXIoMC4wNSwgMC45LCAwLjIsIDEpOyAvKiBGYXN0IHN0YXJ0IGZvciBhbmltYXRlIGluICovXFxufVxcblxcbi5yZXNpemUtY29udGFpbmVyLnJpZ2h0LFxcbi5yZXNpemUtY29udGFpbmVyLmxlZnQge1xcbiAgdG9wOiAwO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgd2lkdGg6IDI1cHg7XFxuICBjdXJzb3I6IGV3LXJlc2l6ZTtcXG59XFxuXFxuLyogdG9kbzogZG9uJ3QgaGFyZCBjb2RlIGFsbCB0aGVzZSB2YWx1ZXMvdXNlIHZhcnMgKi9cXG5cXG4ucmVzaXplLWNvbnRhaW5lci5ib3R0b20sXFxuLnJlc2l6ZS1jb250YWluZXIudG9wIHtcXG4gIGxlZnQ6IDA7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMjVweDtcXG4gIGN1cnNvcjogbnMtcmVzaXplO1xcbn1cXG5cXG4ucmVzaXplLWNvbnRhaW5lci50b3Age1xcbiAgdG9wOiAtMTJweDtcXG59XFxuLnJlc2l6ZS1jb250YWluZXIuYm90dG9tIHtcXG4gIGJvdHRvbTogLTEycHg7XFxufVxcbi5yZXNpemUtY29udGFpbmVyLmxlZnQge1xcbiAgbGVmdDogLTEycHg7XFxufVxcbi5yZXNpemUtY29udGFpbmVyLnJpZ2h0IHtcXG4gIHJpZ2h0OiAtMTJweDtcXG59XFxuXFxuLnJlc2l6ZS1jb250YWluZXIudG9wLWxlZnQsXFxuLnJlc2l6ZS1jb250YWluZXIudG9wLXJpZ2h0LFxcbi5yZXNpemUtY29udGFpbmVyLmJvdHRvbS1sZWZ0LFxcbi5yZXNpemUtY29udGFpbmVyLmJvdHRvbS1yaWdodCB7XFxuICB3aWR0aDogMzJweDtcXG4gIGhlaWdodDogMzJweDtcXG4gIHotaW5kZXg6IDE1O1xcbn1cXG5cXG4ucmVzaXplLWNvbnRhaW5lci50b3AtbGVmdCB7XFxuICB0b3A6IC0xNnB4O1xcbiAgbGVmdDogLTE2cHg7XFxuICBjdXJzb3I6IG53c2UtcmVzaXplO1xcbn1cXG4ucmVzaXplLWNvbnRhaW5lci50b3AtcmlnaHQge1xcbiAgdG9wOiAtMTZweDtcXG4gIHJpZ2h0OiAtMTZweDtcXG4gIGN1cnNvcjogbmVzdy1yZXNpemU7XFxufVxcbi5yZXNpemUtY29udGFpbmVyLmJvdHRvbS1sZWZ0IHtcXG4gIGJvdHRvbTogLTE2cHg7XFxuICBsZWZ0OiAtMTZweDtcXG4gIGN1cnNvcjogbmVzdy1yZXNpemU7XFxufVxcbi5yZXNpemUtY29udGFpbmVyLmJvdHRvbS1yaWdodCB7XFxuICBib3R0b206IC0xNnB4O1xcbiAgcmlnaHQ6IC0xNnB4O1xcbiAgY3Vyc29yOiBud3NlLXJlc2l6ZTtcXG59XFxuXFxuLnJlc2l6ZS1saW5lLnRvcCxcXG4ucmVzaXplLWxpbmUuYm90dG9tIHtcXG4gIGhlaWdodDogMjhweDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xcbn1cXG5cXG4ucmVzaXplLWxpbmUubGVmdCxcXG4ucmVzaXplLWxpbmUucmlnaHQge1xcbiAgd2lkdGg6IDI4cHg7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxufVxcblxcbi5yZXNpemUtbGluZS50b3Age1xcbiAgdG9wOiAtMTJweDtcXG4gIGxlZnQ6IGNhbGMoLTEgKiB2YXIoLS1ib3JkZXItbGVmdCwgMnB4KSk7XFxuICB3aWR0aDogY2FsYygxMDAlICsgdmFyKC0tYm9yZGVyLWhvcml6b250YWwsIDRweCkpO1xcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1tZCkgdmFyKC0tcm91bmRlZC1tZCkgMCAwO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDI4cHgpO1xcbn1cXG5cXG4ucmVzaXplLWxpbmUuYm90dG9tIHtcXG4gIGJvdHRvbTogLTEycHg7XFxuICBsZWZ0OiBjYWxjKC0xICogdmFyKC0tYm9yZGVyLWxlZnQsIDJweCkpO1xcbiAgd2lkdGg6IGNhbGMoMTAwJSArIHZhcigtLWJvcmRlci1ob3Jpem9udGFsLCA0cHgpKTtcXG4gIGJvcmRlci1yYWRpdXM6IDAgMCB2YXIoLS1yb3VuZGVkLW1kKSB2YXIoLS1yb3VuZGVkLW1kKTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMjhweCk7XFxufVxcblxcbi5yZXNpemUtbGluZS5sZWZ0IHtcXG4gIHRvcDogY2FsYygtMSAqIHZhcigtLWJvcmRlci10b3AsIDJweCkpO1xcbiAgbGVmdDogLTEycHg7XFxuICBoZWlnaHQ6IGNhbGMoMTAwJSArIHZhcigtLWJvcmRlci12ZXJ0aWNhbCwgNHB4KSk7XFxuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLW1kKSAwIDAgdmFyKC0tcm91bmRlZC1tZCk7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMjhweCk7XFxufVxcblxcbi5yZXNpemUtbGluZS5yaWdodCB7XFxuICB0b3A6IGNhbGMoLTEgKiB2YXIoLS1ib3JkZXItdG9wLCAycHgpKTtcXG4gIHJpZ2h0OiAtMTJweDtcXG4gIGhlaWdodDogY2FsYygxMDAlICsgdmFyKC0tYm9yZGVyLXZlcnRpY2FsLCA0cHgpKTtcXG4gIGJvcmRlci1yYWRpdXM6IDAgdmFyKC0tcm91bmRlZC1tZCkgdmFyKC0tcm91bmRlZC1tZCkgMDtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMjhweCk7XFxufVxcblxcbi5yZXNpemUtY29udGFpbmVyLnJpZ2h0OmhvdmVyIH4gLnJlc2l6ZS1saW5lLnJpZ2h0LFxcbi5yZXNpemUtY29udGFpbmVyLmxlZnQ6aG92ZXIgfiAucmVzaXplLWxpbmUubGVmdCxcXG4ucmVzaXplLWxpbmUucmlnaHQuZHJhZ2dpbmcsXFxuLnJlc2l6ZS1saW5lLmxlZnQuZHJhZ2dpbmcge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xcbn1cXG5cXG4ucmVzaXplLWNvbnRhaW5lci5ib3R0b206aG92ZXIgfiAucmVzaXplLWxpbmUuYm90dG9tLFxcbi5yZXNpemUtY29udGFpbmVyLnRvcDpob3ZlciB+IC5yZXNpemUtbGluZS50b3AsXFxuLnJlc2l6ZS1saW5lLmJvdHRvbS5kcmFnZ2luZyxcXG4ucmVzaXplLWxpbmUudG9wLmRyYWdnaW5nIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcXG59XFxuXFxuLyogbWFrZSBzdXJlIHRoYXQgd2UgZG9uJ3Qgc2hvdyBtdWx0aXBsZSBoYW5kbGVzIGF0IG9uY2VcXG4gKiB3ZSBzaG91bGQgb25seSBldmVyIHNob3cgdGhlIGN1cnJlbnRseSByZXNpemluZyBoYW5kbGVcXG4gKiByZWdhcmRsZXNzIG9mIGhvdmVyIHN0YXRlIFxcbiAqL1xcbi5yZXNpemUtY29udGFpbmVyLm5vLWhvdmVyLnJpZ2h0OmhvdmVyIH4gLnJlc2l6ZS1saW5lLnJpZ2h0IHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMjhweCk7XFxufVxcbi5yZXNpemUtY29udGFpbmVyLm5vLWhvdmVyLmxlZnQ6aG92ZXIgfiAucmVzaXplLWxpbmUubGVmdCB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMjhweCk7XFxufVxcbi5yZXNpemUtY29udGFpbmVyLm5vLWhvdmVyLmJvdHRvbTpob3ZlciB+IC5yZXNpemUtbGluZS5ib3R0b20ge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0yOHB4KTtcXG59XFxuLnJlc2l6ZS1jb250YWluZXIubm8taG92ZXIudG9wOmhvdmVyIH4gLnJlc2l6ZS1saW5lLnRvcCB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMjhweCk7XFxufVxcblwiXSxzb3VyY2VSb290OlwiXCJ9XSk7bGV0IGw9aX0sXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvY29tcG9uZW50cy9vdmVydmlldy9zZWdtZW50LWJvdW5kYXJ5LXRyaWdnZXIuY3NzXCI6ZnVuY3Rpb24oZSxuLHQpe1widXNlIHN0cmljdFwiO3QuZChuLHtaOigpPT5sfSk7dmFyIHI9dChcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIiksbz10Lm4ociksYT10KFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCIpLGk9dC5uKGEpKCkobygpKTtpLnB1c2goW2UuaWQsYC5zZWdtZW50LWJvdW5kYXJ5LXRyaWdnZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDRweDtcbiAgcGFkZGluZzogNHB4IDZweDtcbiAgbGluZS1oZWlnaHQ6IDE2cHg7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xuICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgYm9yZGVyOiBub25lO1xuICBmb250LXNpemU6IHZhcigtLXNpemUtMTIpO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4xNXMgZWFzZTtcbn1cblxuLnNlZ21lbnQtYm91bmRhcnktdHJpZ2dlci10ZXh0IHtcbiAgZm9udC1zaXplOiB2YXIoLS1zaXplLTEyKTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLnNlZ21lbnQtYm91bmRhcnktdHJpZ2dlci10ZXh0IC5wbHVzLWljb24ge1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXMgZWFzZTtcbn1cblxuLnNlZ21lbnQtYm91bmRhcnktdHJpZ2dlci10ZXh0OmhvdmVyIC5wbHVzLWljb24ge1xuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS04MDApO1xufVxuXG4uc2VnbWVudC1ib3VuZGFyeS10cmlnZ2VyIHN2ZyB7XG4gIHdpZHRoOiAxNHB4O1xuICBoZWlnaHQ6IDE0cHg7XG4gIGZsZXgtc2hyaW5rOiAwO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uc2VnbWVudC1ib3VuZGFyeS10cmlnZ2VyOmhvdmVyIHN2ZyB7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTcwMCk7XG59XG5cbi5zZWdtZW50LWJvdW5kYXJ5LXRyaWdnZXJbZGlzYWJsZWRdIHN2Zyxcbi5zZWdtZW50LWJvdW5kYXJ5LXRyaWdnZXJbZGlzYWJsZWRdOmhvdmVyIHN2ZyB7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG5cbi5zZWdtZW50LWJvdW5kYXJ5LWRyb3Bkb3duIHtcbiAgcGFkZGluZzogOHB4O1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktNDAwKTtcbiAgYm9yZGVyLXJhZGl1czogMTZweDtcbiAgbWluLXdpZHRoOiAxMjBweDtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgYm94LXNoYWRvdzogMHB4IDRweCA4cHggLTRweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29sb3ItZ3JheS05MDApIDQlLCB0cmFuc3BhcmVudCk7XG59XG5cbi5zZWdtZW50LWJvdW5kYXJ5LWRyb3Bkb3duLXBvc2l0aW9uZXIge1xuICB6LWluZGV4OiB2YXIoLS10b3Atei1pbmRleCk7XG59XG5cbi5zZWdtZW50LWJvdW5kYXJ5LWRyb3Bkb3duLWl0ZW0ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwYWRkaW5nOiA4cHg7XG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICBmb250LXNpemU6IDE0cHg7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgbWluLXdpZHRoOiAyMjBweDtcbiAgYm9yZGVyOiBub25lO1xuICBiYWNrZ3JvdW5kOiBub25lO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLnNlZ21lbnQtYm91bmRhcnktZHJvcGRvd24taXRlbVtkYXRhLWRpc2FibGVkXSB7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG5cbi5zZWdtZW50LWJvdW5kYXJ5LWRyb3Bkb3duLWl0ZW0gc3ZnIHtcbiAgbWFyZ2luLXJpZ2h0OiAxMnB4O1xuICBjb2xvcjogY3VycmVudENvbG9yO1xufVxuXG4uc2VnbWVudC1ib3VuZGFyeS1kcm9wZG93bi1pdGVtOmhvdmVyIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS0yMDApO1xufVxuXG4uc2VnbWVudC1ib3VuZGFyeS1kcm9wZG93bi1pdGVtOmZpcnN0LWNoaWxkIHtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNHB4O1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNHB4O1xufVxuXG4uc2VnbWVudC1ib3VuZGFyeS1kcm9wZG93bi1pdGVtOmxhc3QtY2hpbGQge1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA0cHg7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA0cHg7XG59XG5cbi5zZWdtZW50LWJvdW5kYXJ5LWdyb3VwLWxhYmVsIHtcbiAgcGFkZGluZzogOHB4O1xuICBmb250LXNpemU6IDEzcHg7XG4gIGxpbmUtaGVpZ2h0OiAxNnB4O1xuICBmb250LXdlaWdodDogNDAwO1xuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS05MDApO1xufVxuYCxcIlwiLHt2ZXJzaW9uOjMsc291cmNlczpbXCJ3ZWJwYWNrOi8vLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9jb21wb25lbnRzL292ZXJ2aWV3L3NlZ21lbnQtYm91bmRhcnktdHJpZ2dlci5jc3NcIl0sbmFtZXM6W10sbWFwcGluZ3M6XCJBQUFBO0VBQ0UsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQixRQUFRO0VBQ1IsZ0JBQWdCO0VBQ2hCLGlCQUFpQjtFQUNqQixnQkFBZ0I7RUFDaEIsNkJBQTZCO0VBQzdCLG9CQUFvQjtFQUNwQixZQUFZO0VBQ1oseUJBQXlCO0VBQ3pCLGVBQWU7RUFDZix1Q0FBdUM7QUFDekM7O0FBRUE7RUFDRSx5QkFBeUI7RUFDekIsZ0JBQWdCO0VBQ2hCLGlCQUFpQjtFQUNqQixvQkFBb0I7RUFDcEIsbUJBQW1CO0VBQ25CLHVCQUF1QjtBQUN6Qjs7QUFFQTtFQUNFLGdDQUFnQztBQUNsQzs7QUFFQTtFQUNFLDRCQUE0QjtBQUM5Qjs7QUFFQTtFQUNFLFdBQVc7RUFDWCxZQUFZO0VBQ1osY0FBYztFQUNkLHNCQUFzQjtBQUN4Qjs7QUFFQTtFQUNFLDRCQUE0QjtBQUM5Qjs7QUFFQTs7RUFFRSw0QkFBNEI7RUFDNUIsbUJBQW1CO0FBQ3JCOztBQUVBO0VBQ0UsWUFBWTtFQUNaLHVDQUF1QztFQUN2Qyx1Q0FBdUM7RUFDdkMsbUJBQW1CO0VBQ25CLGdCQUFnQjtFQUNoQixpQkFBaUI7RUFDakIsZUFBZTtFQUNmLHNGQUFzRjtBQUN4Rjs7QUFFQTtFQUNFLDJCQUEyQjtBQUM3Qjs7QUFFQTtFQUNFLGFBQWE7RUFDYixtQkFBbUI7RUFDbkIsWUFBWTtFQUNaLGlCQUFpQjtFQUNqQixlQUFlO0VBQ2Ysa0JBQWtCO0VBQ2xCLDZCQUE2QjtFQUM3QixlQUFlO0VBQ2YsZ0JBQWdCO0VBQ2hCLFlBQVk7RUFDWixnQkFBZ0I7RUFDaEIsV0FBVztBQUNiOztBQUVBO0VBQ0UsNEJBQTRCO0VBQzVCLG1CQUFtQjtBQUNyQjs7QUFFQTtFQUNFLGtCQUFrQjtFQUNsQixtQkFBbUI7QUFDckI7O0FBRUE7RUFDRSxpQ0FBaUM7QUFDbkM7O0FBRUE7RUFDRSwyQkFBMkI7RUFDM0IsNEJBQTRCO0FBQzlCOztBQUVBO0VBQ0UsOEJBQThCO0VBQzlCLCtCQUErQjtBQUNqQzs7QUFFQTtFQUNFLFlBQVk7RUFDWixlQUFlO0VBQ2YsaUJBQWlCO0VBQ2pCLGdCQUFnQjtFQUNoQiw0QkFBNEI7QUFDOUJcIixzb3VyY2VzQ29udGVudDpbXCIuc2VnbWVudC1ib3VuZGFyeS10cmlnZ2VyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZ2FwOiA0cHg7XFxuICBwYWRkaW5nOiA0cHggNnB4O1xcbiAgbGluZS1oZWlnaHQ6IDE2cHg7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICBib3JkZXItcmFkaXVzOiA5OTlweDtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xMik7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2U7XFxufVxcblxcbi5zZWdtZW50LWJvdW5kYXJ5LXRyaWdnZXItdGV4dCB7XFxuICBmb250LXNpemU6IHZhcigtLXNpemUtMTIpO1xcbiAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gIHVzZXItc2VsZWN0OiBub25lO1xcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxufVxcblxcbi5zZWdtZW50LWJvdW5kYXJ5LXRyaWdnZXItdGV4dCAucGx1cy1pY29uIHtcXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjI1cyBlYXNlO1xcbn1cXG5cXG4uc2VnbWVudC1ib3VuZGFyeS10cmlnZ2VyLXRleHQ6aG92ZXIgLnBsdXMtaWNvbiB7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS04MDApO1xcbn1cXG5cXG4uc2VnbWVudC1ib3VuZGFyeS10cmlnZ2VyIHN2ZyB7XFxuICB3aWR0aDogMTRweDtcXG4gIGhlaWdodDogMTRweDtcXG4gIGZsZXgtc2hyaW5rOiAwO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG59XFxuXFxuLnNlZ21lbnQtYm91bmRhcnktdHJpZ2dlcjpob3ZlciBzdmcge1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktNzAwKTtcXG59XFxuXFxuLnNlZ21lbnQtYm91bmRhcnktdHJpZ2dlcltkaXNhYmxlZF0gc3ZnLFxcbi5zZWdtZW50LWJvdW5kYXJ5LXRyaWdnZXJbZGlzYWJsZWRdOmhvdmVyIHN2ZyB7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS00MDApO1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG59XFxuXFxuLnNlZ21lbnQtYm91bmRhcnktZHJvcGRvd24ge1xcbiAgcGFkZGluZzogOHB4O1xcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS00MDApO1xcbiAgYm9yZGVyLXJhZGl1czogMTZweDtcXG4gIG1pbi13aWR0aDogMTIwcHg7XFxuICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIGJveC1zaGFkb3c6IDBweCA0cHggOHB4IC00cHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbG9yLWdyYXktOTAwKSA0JSwgdHJhbnNwYXJlbnQpO1xcbn1cXG5cXG4uc2VnbWVudC1ib3VuZGFyeS1kcm9wZG93bi1wb3NpdGlvbmVyIHtcXG4gIHotaW5kZXg6IHZhcigtLXRvcC16LWluZGV4KTtcXG59XFxuXFxuLnNlZ21lbnQtYm91bmRhcnktZHJvcGRvd24taXRlbSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIHBhZGRpbmc6IDhweDtcXG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBtaW4td2lkdGg6IDIyMHB4O1xcbiAgYm9yZGVyOiBub25lO1xcbiAgYmFja2dyb3VuZDogbm9uZTtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG5cXG4uc2VnbWVudC1ib3VuZGFyeS1kcm9wZG93bi1pdGVtW2RhdGEtZGlzYWJsZWRdIHtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbn1cXG5cXG4uc2VnbWVudC1ib3VuZGFyeS1kcm9wZG93bi1pdGVtIHN2ZyB7XFxuICBtYXJnaW4tcmlnaHQ6IDEycHg7XFxuICBjb2xvcjogY3VycmVudENvbG9yO1xcbn1cXG5cXG4uc2VnbWVudC1ib3VuZGFyeS1kcm9wZG93bi1pdGVtOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktMjAwKTtcXG59XFxuXFxuLnNlZ21lbnQtYm91bmRhcnktZHJvcGRvd24taXRlbTpmaXJzdC1jaGlsZCB7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA0cHg7XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNHB4O1xcbn1cXG5cXG4uc2VnbWVudC1ib3VuZGFyeS1kcm9wZG93bi1pdGVtOmxhc3QtY2hpbGQge1xcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNHB4O1xcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDRweDtcXG59XFxuXFxuLnNlZ21lbnQtYm91bmRhcnktZ3JvdXAtbGFiZWwge1xcbiAgcGFkZGluZzogOHB4O1xcbiAgZm9udC1zaXplOiAxM3B4O1xcbiAgbGluZS1oZWlnaHQ6IDE2cHg7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktOTAwKTtcXG59XFxuXCJdLHNvdXJjZVJvb3Q6XCJcIn1dKTtsZXQgbD1pfSxcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9jb21wb25lbnRzL292ZXJ2aWV3L3NlZ21lbnQtZXhwbG9yZXIuY3NzXCI6ZnVuY3Rpb24oZSxuLHQpe1widXNlIHN0cmljdFwiO3QuZChuLHtaOigpPT5sfSk7dmFyIHI9dChcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIiksbz10Lm4ociksYT10KFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCIpLGk9dC5uKGEpKCkobygpKTtpLnB1c2goW2UuaWQsYC5zZWdtZW50LWV4cGxvcmVyLWNvbnRlbnQge1xuICBmb250LXNpemU6IHZhcigtLXNpemUtMTQpO1xuICBwYWRkaW5nOiAwIDhweDtcbiAgd2lkdGg6IDcwMHB4O1xuICBoZWlnaHQ6IDQwMHB4O1xuICBtYXgtd2lkdGg6IGNhbGMoMTAwdncgLSA0MHB4KTtcbiAgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDI0MHB4KTtcbn1cblxuLnNlZ21lbnQtZXhwbG9yZXItcGFnZS1yb3V0ZS1iYXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwYWRkaW5nOiAxNHB4IDE2cHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMjAwKTtcbiAgZ2FwOiAxMnB4O1xufVxuXG4uc2VnbWVudC1leHBsb3Jlci1wYWdlLXJvdXRlLWJhci1wYXRoIHtcbiAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE0KTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LW1vbm8pO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBsaW5lLWhlaWdodDogMjBweDtcbn1cblxuLnNlZ21lbnQtZXhwbG9yZXItaXRlbSB7XG4gIG1hcmdpbjogNHB4IDA7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbn1cblxuLnNlZ21lbnQtZXhwbG9yZXItaXRlbTpudGgtY2hpbGQoZXZlbikge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTIwMCk7XG59XG5cbi5zZWdtZW50LWV4cGxvcmVyLWl0ZW0tcm93IHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcGFkZGluZy10b3A6IDEwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAxMHB4O1xuICBwYWRkaW5nLXJpZ2h0OiA0cHg7XG4gIHdoaXRlLXNwYWNlOiBwcmU7XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XG59XG5cbi5zZWdtZW50LWV4cGxvcmVyLWNoaWxkcmVuLS1pbnRlbmRlZCB7XG4gIHBhZGRpbmctbGVmdDogMTZweDtcbn1cblxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZW5hbWUge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgd2lkdGg6IDEwMCU7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi5zZWdtZW50LWV4cGxvcmVyLWZpbGVuYW1lIHNlbGVjdCB7XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xufVxuXG4uc2VnbWVudC1leHBsb3Jlci1maWxlbmFtZS0tcGF0aCB7XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbn1cbi5zZWdtZW50LWV4cGxvcmVyLWZpbGVuYW1lLS1wYXRoIHNtYWxsIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMDtcbiAgb3BhY2l0eTogMDtcbn1cbi5zZWdtZW50LWV4cGxvcmVyLWZpbGVuYW1lLS1uYW1lIHtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktODAwKTtcbn1cblxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZXMge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgZ2FwOiA4cHg7XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xufVxuXG4uc2VnbWVudC1leHBsb3Jlci1maWxlcyArIC5zZWdtZW50LWJvdW5kYXJ5LXRyaWdnZXIge1xuICBtYXJnaW4tbGVmdDogOHB4O1xufVxuXG4uc2VnbWVudC1leHBsb3Jlci1maWxlLWxhYmVsIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBwYWRkaW5nOiA0cHggNnB4O1xuICBib3JkZXItcmFkaXVzOiAxNnB4O1xuICBsaW5lLWhlaWdodDogMTZweDtcbiAgZm9udC1zaXplOiB2YXIoLS1zaXplLTEyKTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItZ3JheS0zMDApO1xuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcbn1cblxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZS1sYWJlbC0tb3ZlcnJpZGRlbiB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWFtYmVyLTMwMCk7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1hbWJlci05MDApO1xufVxuXG4uc2VnbWVudC1leHBsb3Jlci1maWxlLWxhYmVsIC5jb2RlLWljb24ge1xuICBvcGFjaXR5OiAwO1xuICBtYXJnaW4tbGVmdDogMDtcbiAgd2lkdGg6IDA7XG4gIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlLWluLW91dDtcbn1cbi5zZWdtZW50LWV4cGxvcmVyLWZpbGUtbGFiZWw6aG92ZXIgLmNvZGUtaWNvbiB7XG4gIG9wYWNpdHk6IDE7XG4gIHdpZHRoOiAxMnB4O1xuICBtYXJnaW4tbGVmdDogNHB4O1xufVxuXG4uc2VnbWVudC1leHBsb3Jlci1maWxlLWxhYmVsOmhvdmVyIHtcbiAgZmlsdGVyOiBicmlnaHRuZXNzKDAuOTUpO1xufVxuXG4uc2VnbWVudC1leHBsb3Jlci1maWxlLWxhYmVsLS1idWlsdGluIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTkwMCk7XG4gIGJvcmRlcjogMXB4IGRhc2hlZCB2YXIoLS1jb2xvci1ncmF5LTUwMCk7XG4gIGhlaWdodDogMjRweDtcbiAgY3Vyc29yOiBkZWZhdWx0O1xufVxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZS1sYWJlbC0tYnVpbHRpbiBzdmcge1xuICBtYXJnaW4tbGVmdDogNHB4O1xuICBtYXJnaW4tcmlnaHQ6IC00cHg7XG59XG5cbi8qIEZvb3RlciBzdHlsZXMgKi9cbi5zZWdtZW50LWV4cGxvcmVyLWZvb3RlciB7XG4gIHBhZGRpbmc6IDhweDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktNDAwKTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbn1cblxuLnNlZ21lbnQtZXhwbG9yZXItZm9vdGVyLWJ1dHRvbiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBnYXA6IDhweDtcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6IDZweDtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XG4gIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XG4gIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNCk7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjE1cyBlYXNlO1xufVxuXG4uc2VnbWVudC1leHBsb3Jlci1mb290ZXItYnV0dG9uOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS0yMDApO1xufVxuXG4uc2VnbWVudC1leHBsb3Jlci1mb290ZXItYnV0dG9uLS1kaXNhYmxlZCB7XG4gIG9wYWNpdHk6IDAuNTtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuLnNlZ21lbnQtZXhwbG9yZXItZm9vdGVyLXRleHQge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5zZWdtZW50LWV4cGxvcmVyLWZvb3Rlci1iYWRnZSB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgbWluLXdpZHRoOiAyMHB4O1xuICBoZWlnaHQ6IDIwcHg7XG4gIHBhZGRpbmc6IDAgNnB4O1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1hbWJlci0zMDApO1xuICBjb2xvcjogdmFyKC0tY29sb3ItYW1iZXItOTAwKTtcbiAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgZm9udC1zaXplOiB2YXIoLS1zaXplLTEyKTtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgbGluZS1oZWlnaHQ6IDE7XG59XG5cbi5zZWdtZW50LWV4cGxvcmVyLWZpbGUtbGFiZWwtdG9vbHRpcC0tc20ge1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4uc2VnbWVudC1leHBsb3Jlci1maWxlLWxhYmVsLXRvb2x0aXAtLWxnIHtcbiAgbWluLXdpZHRoOiAyMDBweDtcbn1cbmAsXCJcIix7dmVyc2lvbjozLHNvdXJjZXM6W1wid2VicGFjazovLy4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvY29tcG9uZW50cy9vdmVydmlldy9zZWdtZW50LWV4cGxvcmVyLmNzc1wiXSxuYW1lczpbXSxtYXBwaW5nczpcIkFBQUE7RUFDRSx5QkFBeUI7RUFDekIsY0FBYztFQUNkLFlBQVk7RUFDWixhQUFhO0VBQ2IsNkJBQTZCO0VBQzdCLCtCQUErQjtBQUNqQzs7QUFFQTtFQUNFLGFBQWE7RUFDYixtQkFBbUI7RUFDbkIsa0JBQWtCO0VBQ2xCLDZDQUE2QztFQUM3QyxTQUFTO0FBQ1g7O0FBRUE7RUFDRSx5QkFBeUI7RUFDekIsZ0JBQWdCO0VBQ2hCLDZCQUE2QjtFQUM3Qiw2QkFBNkI7RUFDN0IsbUJBQW1CO0VBQ25CLGlCQUFpQjtBQUNuQjs7QUFFQTtFQUNFLGFBQWE7RUFDYixrQkFBa0I7QUFDcEI7O0FBRUE7RUFDRSw2Q0FBNkM7QUFDL0M7O0FBRUE7RUFDRSxhQUFhO0VBQ2IsbUJBQW1CO0VBQ25CLGlCQUFpQjtFQUNqQixvQkFBb0I7RUFDcEIsa0JBQWtCO0VBQ2xCLGdCQUFnQjtFQUNoQixlQUFlO0VBQ2YsNkJBQTZCO0FBQy9COztBQUVBO0VBQ0Usa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0Usb0JBQW9CO0VBQ3BCLFdBQVc7RUFDWCxtQkFBbUI7QUFDckI7O0FBRUE7RUFDRSxpQkFBaUI7QUFDbkI7O0FBRUE7RUFDRSxrQkFBa0I7QUFDcEI7QUFDQTtFQUNFLHFCQUFxQjtFQUNyQixRQUFRO0VBQ1IsVUFBVTtBQUNaO0FBQ0E7RUFDRSw0QkFBNEI7QUFDOUI7O0FBRUE7RUFDRSxvQkFBb0I7RUFDcEIsUUFBUTtFQUNSLGlCQUFpQjtBQUNuQjs7QUFFQTtFQUNFLGdCQUFnQjtBQUNsQjs7QUFFQTtFQUNFLG9CQUFvQjtFQUNwQixtQkFBbUI7RUFDbkIsdUJBQXVCO0VBQ3ZCLGdCQUFnQjtFQUNoQixtQkFBbUI7RUFDbkIsaUJBQWlCO0VBQ2pCLHlCQUF5QjtFQUN6QixnQkFBZ0I7RUFDaEIsaUJBQWlCO0VBQ2pCLGVBQWU7RUFDZix1Q0FBdUM7RUFDdkMsNkJBQTZCO0FBQy9COztBQUVBO0VBQ0Usd0NBQXdDO0VBQ3hDLDZCQUE2QjtBQUMvQjs7QUFFQTtFQUNFLFVBQVU7RUFDVixjQUFjO0VBQ2QsUUFBUTtFQUNSLGlDQUFpQztBQUNuQztBQUNBO0VBQ0UsVUFBVTtFQUNWLFdBQVc7RUFDWCxnQkFBZ0I7QUFDbEI7O0FBRUE7RUFDRSx3QkFBd0I7QUFDMUI7O0FBRUE7RUFDRSw2QkFBNkI7RUFDN0IsNEJBQTRCO0VBQzVCLHdDQUF3QztFQUN4QyxZQUFZO0VBQ1osZUFBZTtBQUNqQjtBQUNBO0VBQ0UsZ0JBQWdCO0VBQ2hCLGtCQUFrQjtBQUNwQjs7QUFFQSxrQkFBa0I7QUFDbEI7RUFDRSxZQUFZO0VBQ1osMkNBQTJDO0VBQzNDLDZDQUE2QztFQUM3QyxpQkFBaUI7QUFDbkI7O0FBRUE7RUFDRSxhQUFhO0VBQ2IsbUJBQW1CO0VBQ25CLHVCQUF1QjtFQUN2QixRQUFRO0VBQ1IsV0FBVztFQUNYLFlBQVk7RUFDWix1Q0FBdUM7RUFDdkMsdUNBQXVDO0VBQ3ZDLGtCQUFrQjtFQUNsQiw2QkFBNkI7RUFDN0IseUJBQXlCO0VBQ3pCLGdCQUFnQjtFQUNoQixlQUFlO0VBQ2YsdUNBQXVDO0FBQ3pDOztBQUVBO0VBQ0UsaUNBQWlDO0FBQ25DOztBQUVBO0VBQ0UsWUFBWTtFQUNaLG1CQUFtQjtBQUNyQjs7QUFFQTtFQUNFLGtCQUFrQjtBQUNwQjs7QUFFQTtFQUNFLG9CQUFvQjtFQUNwQixtQkFBbUI7RUFDbkIsdUJBQXVCO0VBQ3ZCLGVBQWU7RUFDZixZQUFZO0VBQ1osY0FBYztFQUNkLGtDQUFrQztFQUNsQyw2QkFBNkI7RUFDN0IsbUJBQW1CO0VBQ25CLHlCQUF5QjtFQUN6QixnQkFBZ0I7RUFDaEIsY0FBYztBQUNoQjs7QUFFQTtFQUNFLG1CQUFtQjtBQUNyQjs7QUFFQTtFQUNFLGdCQUFnQjtBQUNsQlwiLHNvdXJjZXNDb250ZW50OltcIi5zZWdtZW50LWV4cGxvcmVyLWNvbnRlbnQge1xcbiAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE0KTtcXG4gIHBhZGRpbmc6IDAgOHB4O1xcbiAgd2lkdGg6IDcwMHB4O1xcbiAgaGVpZ2h0OiA0MDBweDtcXG4gIG1heC13aWR0aDogY2FsYygxMDB2dyAtIDQwcHgpO1xcbiAgbWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDI0MHB4KTtcXG59XFxuXFxuLnNlZ21lbnQtZXhwbG9yZXItcGFnZS1yb3V0ZS1iYXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBwYWRkaW5nOiAxNHB4IDE2cHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTIwMCk7XFxuICBnYXA6IDEycHg7XFxufVxcblxcbi5zZWdtZW50LWV4cGxvcmVyLXBhZ2Utcm91dGUtYmFyLXBhdGgge1xcbiAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE0KTtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LW1vbm8pO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xcbn1cXG5cXG4uc2VnbWVudC1leHBsb3Jlci1pdGVtIHtcXG4gIG1hcmdpbjogNHB4IDA7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxufVxcblxcbi5zZWdtZW50LWV4cGxvcmVyLWl0ZW06bnRoLWNoaWxkKGV2ZW4pIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMjAwKTtcXG59XFxuXFxuLnNlZ21lbnQtZXhwbG9yZXItaXRlbS1yb3cge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBwYWRkaW5nLXRvcDogMTBweDtcXG4gIHBhZGRpbmctYm90dG9tOiAxMHB4O1xcbiAgcGFkZGluZy1yaWdodDogNHB4O1xcbiAgd2hpdGUtc3BhY2U6IHByZTtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbn1cXG5cXG4uc2VnbWVudC1leHBsb3Jlci1jaGlsZHJlbi0taW50ZW5kZWQge1xcbiAgcGFkZGluZy1sZWZ0OiAxNnB4O1xcbn1cXG5cXG4uc2VnbWVudC1leHBsb3Jlci1maWxlbmFtZSB7XFxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG59XFxuXFxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZW5hbWUgc2VsZWN0IHtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbn1cXG5cXG4uc2VnbWVudC1leHBsb3Jlci1maWxlbmFtZS0tcGF0aCB7XFxuICBtYXJnaW4tcmlnaHQ6IGF1dG87XFxufVxcbi5zZWdtZW50LWV4cGxvcmVyLWZpbGVuYW1lLS1wYXRoIHNtYWxsIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHdpZHRoOiAwO1xcbiAgb3BhY2l0eTogMDtcXG59XFxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZW5hbWUtLW5hbWUge1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktODAwKTtcXG59XFxuXFxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZXMge1xcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxuICBnYXA6IDhweDtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbn1cXG5cXG4uc2VnbWVudC1leHBsb3Jlci1maWxlcyArIC5zZWdtZW50LWJvdW5kYXJ5LXRyaWdnZXIge1xcbiAgbWFyZ2luLWxlZnQ6IDhweDtcXG59XFxuXFxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZS1sYWJlbCB7XFxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIHBhZGRpbmc6IDRweCA2cHg7XFxuICBib3JkZXItcmFkaXVzOiAxNnB4O1xcbiAgbGluZS1oZWlnaHQ6IDE2cHg7XFxuICBmb250LXNpemU6IHZhcigtLXNpemUtMTIpO1xcbiAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gIHVzZXItc2VsZWN0OiBub25lO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItZ3JheS0zMDApO1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxufVxcblxcbi5zZWdtZW50LWV4cGxvcmVyLWZpbGUtbGFiZWwtLW92ZXJyaWRkZW4ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYW1iZXItMzAwKTtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci1hbWJlci05MDApO1xcbn1cXG5cXG4uc2VnbWVudC1leHBsb3Jlci1maWxlLWxhYmVsIC5jb2RlLWljb24ge1xcbiAgb3BhY2l0eTogMDtcXG4gIG1hcmdpbi1sZWZ0OiAwO1xcbiAgd2lkdGg6IDA7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZS1pbi1vdXQ7XFxufVxcbi5zZWdtZW50LWV4cGxvcmVyLWZpbGUtbGFiZWw6aG92ZXIgLmNvZGUtaWNvbiB7XFxuICBvcGFjaXR5OiAxO1xcbiAgd2lkdGg6IDEycHg7XFxuICBtYXJnaW4tbGVmdDogNHB4O1xcbn1cXG5cXG4uc2VnbWVudC1leHBsb3Jlci1maWxlLWxhYmVsOmhvdmVyIHtcXG4gIGZpbHRlcjogYnJpZ2h0bmVzcygwLjk1KTtcXG59XFxuXFxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZS1sYWJlbC0tYnVpbHRpbiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTkwMCk7XFxuICBib3JkZXI6IDFweCBkYXNoZWQgdmFyKC0tY29sb3ItZ3JheS01MDApO1xcbiAgaGVpZ2h0OiAyNHB4O1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbn1cXG4uc2VnbWVudC1leHBsb3Jlci1maWxlLWxhYmVsLS1idWlsdGluIHN2ZyB7XFxuICBtYXJnaW4tbGVmdDogNHB4O1xcbiAgbWFyZ2luLXJpZ2h0OiAtNHB4O1xcbn1cXG5cXG4vKiBGb290ZXIgc3R5bGVzICovXFxuLnNlZ21lbnQtZXhwbG9yZXItZm9vdGVyIHtcXG4gIHBhZGRpbmc6IDhweDtcXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuXFxuLnNlZ21lbnQtZXhwbG9yZXItZm9vdGVyLWJ1dHRvbiB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgZ2FwOiA4cHg7XFxuICB3aWR0aDogMTAwJTtcXG4gIHBhZGRpbmc6IDZweDtcXG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMTAwKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG4gIGJvcmRlci1yYWRpdXM6IDZweDtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbiAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE0KTtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2U7XFxufVxcblxcbi5zZWdtZW50LWV4cGxvcmVyLWZvb3Rlci1idXR0b246aG92ZXI6bm90KDpkaXNhYmxlZCkge1xcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS0yMDApO1xcbn1cXG5cXG4uc2VnbWVudC1leHBsb3Jlci1mb290ZXItYnV0dG9uLS1kaXNhYmxlZCB7XFxuICBvcGFjaXR5OiAwLjU7XFxuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbn1cXG5cXG4uc2VnbWVudC1leHBsb3Jlci1mb290ZXItdGV4dCB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbi5zZWdtZW50LWV4cGxvcmVyLWZvb3Rlci1iYWRnZSB7XFxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIG1pbi13aWR0aDogMjBweDtcXG4gIGhlaWdodDogMjBweDtcXG4gIHBhZGRpbmc6IDAgNnB4O1xcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYW1iZXItMzAwKTtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci1hbWJlci05MDApO1xcbiAgYm9yZGVyLXJhZGl1czogMTBweDtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xMik7XFxuICBmb250LXdlaWdodDogNjAwO1xcbiAgbGluZS1oZWlnaHQ6IDE7XFxufVxcblxcbi5zZWdtZW50LWV4cGxvcmVyLWZpbGUtbGFiZWwtdG9vbHRpcC0tc20ge1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG59XFxuXFxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZS1sYWJlbC10b29sdGlwLS1sZyB7XFxuICBtaW4td2lkdGg6IDIwMHB4O1xcbn1cXG5cIl0sc291cmNlUm9vdDpcIlwifV0pO2xldCBsPWl9LFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L2NvbXBvbmVudHMvdG9hc3Qvc3R5bGUuY3NzXCI6ZnVuY3Rpb24oZSxuLHQpe1widXNlIHN0cmljdFwiO3QuZChuLHtaOigpPT5sfSk7dmFyIHI9dChcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIiksbz10Lm4ociksYT10KFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCIpLGk9dC5uKGEpKCkobygpKTtpLnB1c2goW2UuaWQsYC5uZXh0anMtdG9hc3Qge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHotaW5kZXg6IHZhcigtLXRvcC16LWluZGV4KTtcbiAgbWF4LXdpZHRoOiA0MjBweDtcbiAgYm94LXNoYWRvdzogMHB4IDE2cHggMzJweCByZ2JhKDAsIDAsIDAsIDAuMjUpO1xufVxuXG4ubmV4dGpzLXRvYXN0LWVycm9ycy1wYXJlbnQge1xuICBwYWRkaW5nOiAxNnB4O1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLTR4bCk7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1hbnNpLWJyaWdodC13aGl0ZSk7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWFuc2ktcmVkKTtcbn1cbmAsXCJcIix7dmVyc2lvbjozLHNvdXJjZXM6W1wid2VicGFjazovLy4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvY29tcG9uZW50cy90b2FzdC9zdHlsZS5jc3NcIl0sbmFtZXM6W10sbWFwcGluZ3M6XCJBQUFBO0VBQ0UsZUFBZTtFQUNmLDJCQUEyQjtFQUMzQixnQkFBZ0I7RUFDaEIsNkNBQTZDO0FBQy9DOztBQUVBO0VBQ0UsYUFBYTtFQUNiLGlDQUFpQztFQUNqQyxnQkFBZ0I7RUFDaEIscUNBQXFDO0VBQ3JDLHVDQUF1QztBQUN6Q1wiLHNvdXJjZXNDb250ZW50OltcIi5uZXh0anMtdG9hc3Qge1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgei1pbmRleDogdmFyKC0tdG9wLXotaW5kZXgpO1xcbiAgbWF4LXdpZHRoOiA0MjBweDtcXG4gIGJveC1zaGFkb3c6IDBweCAxNnB4IDMycHggcmdiYSgwLCAwLCAwLCAwLjI1KTtcXG59XFxuXFxuLm5leHRqcy10b2FzdC1lcnJvcnMtcGFyZW50IHtcXG4gIHBhZGRpbmc6IDE2cHg7XFxuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLTR4bCk7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLWFuc2ktYnJpZ2h0LXdoaXRlKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWFuc2ktcmVkKTtcXG59XFxuXCJdLHNvdXJjZVJvb3Q6XCJcIn1dKTtsZXQgbD1pfSxcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zcmMvbmV4dC1kZXZ0b29scy9nbG9iYWwuY3NzXCI6ZnVuY3Rpb24oZSxuLHQpe1widXNlIHN0cmljdFwiO3QuZChuLHtaOigpPT5sfSk7dmFyIHI9dChcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIiksbz10Lm4ociksYT10KFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCIpLGk9dC5uKGEpKCkobygpKTtpLnB1c2goW2UuaWQsYC8qIGRldnRvb2wgZ2xvYmFsIGNzcyB2YXJpYWJsZXMgKi9cbjpob3N0IHtcbiAgLS10b3Atei1pbmRleDogMjE0NzQ4MzY0Nztcbn1cbmAsXCJcIix7dmVyc2lvbjozLHNvdXJjZXM6W1wid2VicGFjazovLy4vc3JjL25leHQtZGV2dG9vbHMvZ2xvYmFsLmNzc1wiXSxuYW1lczpbXSxtYXBwaW5nczpcIkFBQUEsaUNBQWlDO0FBQ2pDO0VBQ0UseUJBQXlCO0FBQzNCXCIsc291cmNlc0NvbnRlbnQ6W1wiLyogZGV2dG9vbCBnbG9iYWwgY3NzIHZhcmlhYmxlcyAqL1xcbjpob3N0IHtcXG4gIC0tdG9wLXotaW5kZXg6IDIxNDc0ODM2NDc7XFxufVxcblwiXSxzb3VyY2VSb290OlwiXCJ9XSk7bGV0IGw9aX0sXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjpmdW5jdGlvbihlKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIG49W107cmV0dXJuIG4udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24obil7dmFyIHQ9XCJcIixyPXZvaWQgMCE9PW5bNV07cmV0dXJuIG5bNF0mJih0Kz1cIkBzdXBwb3J0cyAoXCIuY29uY2F0KG5bNF0sXCIpIHtcIikpLG5bMl0mJih0Kz1cIkBtZWRpYSBcIi5jb25jYXQoblsyXSxcIiB7XCIpKSxyJiYodCs9XCJAbGF5ZXJcIi5jb25jYXQobls1XS5sZW5ndGg+MD9cIiBcIi5jb25jYXQobls1XSk6XCJcIixcIiB7XCIpKSx0Kz1lKG4pLHImJih0Kz1cIn1cIiksblsyXSYmKHQrPVwifVwiKSxuWzRdJiYodCs9XCJ9XCIpLHR9KS5qb2luKFwiXCIpfSxuLmk9ZnVuY3Rpb24oZSx0LHIsbyxhKXtcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9W1tudWxsLGUsdm9pZCAwXV0pO3ZhciBpPXt9O2lmKHIpZm9yKHZhciBsPTA7bDx0aGlzLmxlbmd0aDtsKyspe3ZhciBzPXRoaXNbbF1bMF07bnVsbCE9cyYmKGlbc109ITApfWZvcih2YXIgYz0wO2M8ZS5sZW5ndGg7YysrKXt2YXIgdT1bXS5jb25jYXQoZVtjXSk7ciYmaVt1WzBdXXx8KHZvaWQgMCE9PWEmJih2b2lkIDA9PT11WzVdfHwodVsxXT1cIkBsYXllclwiLmNvbmNhdCh1WzVdLmxlbmd0aD4wP1wiIFwiLmNvbmNhdCh1WzVdKTpcIlwiLFwiIHtcIikuY29uY2F0KHVbMV0sXCJ9XCIpKSx1WzVdPWEpLHQmJih1WzJdJiYodVsxXT1cIkBtZWRpYSBcIi5jb25jYXQodVsyXSxcIiB7XCIpLmNvbmNhdCh1WzFdLFwifVwiKSksdVsyXT10KSxvJiYodVs0XT8odVsxXT1cIkBzdXBwb3J0cyAoXCIuY29uY2F0KHVbNF0sXCIpIHtcIikuY29uY2F0KHVbMV0sXCJ9XCIpLHVbNF09byk6dVs0XT1cIlwiLmNvbmNhdChvKSksbi5wdXNoKHUpKX19LG59fSxcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjpmdW5jdGlvbihlKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIG49ZVsxXSx0PWVbM107aWYoIXQpcmV0dXJuIG47aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYnRvYSl7dmFyIHI9YnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkodCkpKSk7cmV0dXJuW25dLmNvbmNhdChbXCIvKiMgXCIuY29uY2F0KFwic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIuY29uY2F0KHIpLFwiICovXCIpXSkuam9pbihcIlxcblwiKX1yZXR1cm5bbl0uam9pbihcIlxcblwiKX19LFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3N0eWxlLWxvYWRlckA0LjAuMF93ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3djK2hlbHBlcnNAMC41LjE1X19lc2J1aWxkQDAuMjQuMl8vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI6ZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49W107ZnVuY3Rpb24gdChlKXtmb3IodmFyIHQ9LTEscj0wO3I8bi5sZW5ndGg7cisrKWlmKG5bcl0uaWRlbnRpZmllcj09PWUpe3Q9cjticmVha31yZXR1cm4gdH1mdW5jdGlvbiByKGUscil7Zm9yKHZhciBvPXt9LGE9W10saT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbD1lW2ldLHM9ci5iYXNlP2xbMF0rci5iYXNlOmxbMF0sYz1vW3NdfHwwLHU9XCJcIi5jb25jYXQocyxcIiBcIikuY29uY2F0KGMpO29bc109YysxO3ZhciBkPXQodSksZj17Y3NzOmxbMV0sbWVkaWE6bFsyXSxzb3VyY2VNYXA6bFszXSxzdXBwb3J0czpsWzRdLGxheWVyOmxbNV19O2lmKC0xIT09ZCluW2RdLnJlZmVyZW5jZXMrKyxuW2RdLnVwZGF0ZXIoZik7ZWxzZXt2YXIgcD1mdW5jdGlvbihlLG4pe3ZhciB0PW4uZG9tQVBJKG4pO3JldHVybiB0LnVwZGF0ZShlKSxmdW5jdGlvbihuKXtuPyhuLmNzcyE9PWUuY3NzfHxuLm1lZGlhIT09ZS5tZWRpYXx8bi5zb3VyY2VNYXAhPT1lLnNvdXJjZU1hcHx8bi5zdXBwb3J0cyE9PWUuc3VwcG9ydHN8fG4ubGF5ZXIhPT1lLmxheWVyKSYmdC51cGRhdGUoZT1uKTp0LnJlbW92ZSgpfX0oZixyKTtyLmJ5SW5kZXg9aSxuLnNwbGljZShpLDAse2lkZW50aWZpZXI6dSx1cGRhdGVyOnAscmVmZXJlbmNlczoxfSl9YS5wdXNoKHUpfXJldHVybiBhfWUuZXhwb3J0cz1mdW5jdGlvbihlLG8pe3ZhciBhPXIoZT1lfHxbXSxvPW98fHt9KTtyZXR1cm4gZnVuY3Rpb24oZSl7ZT1lfHxbXTtmb3IodmFyIGk9MDtpPGEubGVuZ3RoO2krKyl7dmFyIGw9dChhW2ldKTtuW2xdLnJlZmVyZW5jZXMtLX1mb3IodmFyIHM9cihlLG8pLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIHU9dChhW2NdKTswPT09blt1XS5yZWZlcmVuY2VzJiYoblt1XS51cGRhdGVyKCksbi5zcGxpY2UodSwxKSl9YT1zfX19LFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3N0eWxlLWxvYWRlckA0LjAuMF93ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3djK2hlbHBlcnNAMC41LjE1X19lc2J1aWxkQDAuMjQuMl8vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzXCI6ZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtyZXR1cm4gZS5zZXRBdHRyaWJ1dGVzKG4sZS5hdHRyaWJ1dGVzKSxlLmluc2VydChuLGUub3B0aW9ucyksbn19LFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3N0eWxlLWxvYWRlckA0LjAuMF93ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3djK2hlbHBlcnNAMC41LjE1X19lc2J1aWxkQDAuMjQuMl8vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzXCI6ZnVuY3Rpb24oZSxuLHQpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgbj10Lm5jO24mJmUuc2V0QXR0cmlidXRlKFwibm9uY2VcIixuKX19LFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3N0eWxlLWxvYWRlckA0LjAuMF93ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3djK2hlbHBlcnNAMC41LjE1X19lc2J1aWxkQDAuMjQuMl8vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanNcIjpmdW5jdGlvbihlKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGRvY3VtZW50KXJldHVybnt1cGRhdGU6ZnVuY3Rpb24oKXt9LHJlbW92ZTpmdW5jdGlvbigpe319O3ZhciBuPWUuaW5zZXJ0U3R5bGVFbGVtZW50KGUpO3JldHVybnt1cGRhdGU6ZnVuY3Rpb24odCl7dmFyIHIsbyxhO3I9XCJcIix0LnN1cHBvcnRzJiYocis9XCJAc3VwcG9ydHMgKFwiLmNvbmNhdCh0LnN1cHBvcnRzLFwiKSB7XCIpKSx0Lm1lZGlhJiYocis9XCJAbWVkaWEgXCIuY29uY2F0KHQubWVkaWEsXCIge1wiKSksKG89dm9pZCAwIT09dC5sYXllcikmJihyKz1cIkBsYXllclwiLmNvbmNhdCh0LmxheWVyLmxlbmd0aD4wP1wiIFwiLmNvbmNhdCh0LmxheWVyKTpcIlwiLFwiIHtcIikpLHIrPXQuY3NzLG8mJihyKz1cIn1cIiksdC5tZWRpYSYmKHIrPVwifVwiKSx0LnN1cHBvcnRzJiYocis9XCJ9XCIpLChhPXQuc291cmNlTWFwKSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGJ0b2EmJihyKz1cIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIuY29uY2F0KGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGEpKSkpLFwiICovXCIpKSxlLnN0eWxlVGFnVHJhbnNmb3JtKHIsbixlLm9wdGlvbnMpfSxyZW1vdmU6ZnVuY3Rpb24oKXshZnVuY3Rpb24oZSl7aWYobnVsbCE9PWUucGFyZW50Tm9kZSllLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSl9KG4pfX19fSxcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zdHlsZS1sb2FkZXJANC4wLjBfd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3YytoZWxwZXJzQDAuNS4xNV9fZXNidWlsZEAwLjI0LjJfL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzXCI6ZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsbil7aWYobi5zdHlsZVNoZWV0KW4uc3R5bGVTaGVldC5jc3NUZXh0PWU7ZWxzZXtmb3IoO24uZmlyc3RDaGlsZDspbi5yZW1vdmVDaGlsZChuLmZpcnN0Q2hpbGQpO24uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZSkpfX19LFwiLi9kaXN0L2NvbXBpbGVkL2Fuc2VyL2luZGV4LmpzXCI6ZnVuY3Rpb24oZSl7KCgpPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ezIxMTplPT57dmFyIG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsbil7Zm9yKHZhciB0PTA7dDxuLmxlbmd0aDt0Kyspe3ZhciByPW5bdF07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24obix0LHIpe3JldHVybiB0JiZlKG4ucHJvdG90eXBlLHQpLHImJmUobixyKSxufX0oKSx0PVtbe2NvbG9yOlwiMCwgMCwgMFwiLGNsYXNzOlwiYW5zaS1ibGFja1wifSx7Y29sb3I6XCIxODcsIDAsIDBcIixjbGFzczpcImFuc2ktcmVkXCJ9LHtjb2xvcjpcIjAsIDE4NywgMFwiLGNsYXNzOlwiYW5zaS1ncmVlblwifSx7Y29sb3I6XCIxODcsIDE4NywgMFwiLGNsYXNzOlwiYW5zaS15ZWxsb3dcIn0se2NvbG9yOlwiMCwgMCwgMTg3XCIsY2xhc3M6XCJhbnNpLWJsdWVcIn0se2NvbG9yOlwiMTg3LCAwLCAxODdcIixjbGFzczpcImFuc2ktbWFnZW50YVwifSx7Y29sb3I6XCIwLCAxODcsIDE4N1wiLGNsYXNzOlwiYW5zaS1jeWFuXCJ9LHtjb2xvcjpcIjI1NSwyNTUsMjU1XCIsY2xhc3M6XCJhbnNpLXdoaXRlXCJ9XSxbe2NvbG9yOlwiODUsIDg1LCA4NVwiLGNsYXNzOlwiYW5zaS1icmlnaHQtYmxhY2tcIn0se2NvbG9yOlwiMjU1LCA4NSwgODVcIixjbGFzczpcImFuc2ktYnJpZ2h0LXJlZFwifSx7Y29sb3I6XCIwLCAyNTUsIDBcIixjbGFzczpcImFuc2ktYnJpZ2h0LWdyZWVuXCJ9LHtjb2xvcjpcIjI1NSwgMjU1LCA4NVwiLGNsYXNzOlwiYW5zaS1icmlnaHQteWVsbG93XCJ9LHtjb2xvcjpcIjg1LCA4NSwgMjU1XCIsY2xhc3M6XCJhbnNpLWJyaWdodC1ibHVlXCJ9LHtjb2xvcjpcIjI1NSwgODUsIDI1NVwiLGNsYXNzOlwiYW5zaS1icmlnaHQtbWFnZW50YVwifSx7Y29sb3I6XCI4NSwgMjU1LCAyNTVcIixjbGFzczpcImFuc2ktYnJpZ2h0LWN5YW5cIn0se2NvbG9yOlwiMjU1LCAyNTUsIDI1NVwiLGNsYXNzOlwiYW5zaS1icmlnaHQtd2hpdGVcIn1dXTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgZSkpdGhyb3cgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO3RoaXMuZmc9dGhpcy5iZz10aGlzLmZnX3RydWVjb2xvcj10aGlzLmJnX3RydWVjb2xvcj1udWxsLHRoaXMuYnJpZ2h0PTB9cmV0dXJuIG4oZSxudWxsLFt7a2V5OlwiZXNjYXBlRm9ySHRtbFwiLHZhbHVlOmZ1bmN0aW9uKG4pe3JldHVybihuZXcgZSkuZXNjYXBlRm9ySHRtbChuKX19LHtrZXk6XCJsaW5raWZ5XCIsdmFsdWU6ZnVuY3Rpb24obil7cmV0dXJuKG5ldyBlKS5saW5raWZ5KG4pfX0se2tleTpcImFuc2lUb0h0bWxcIix2YWx1ZTpmdW5jdGlvbihuLHQpe3JldHVybihuZXcgZSkuYW5zaVRvSHRtbChuLHQpfX0se2tleTpcImFuc2lUb0pzb25cIix2YWx1ZTpmdW5jdGlvbihuLHQpe3JldHVybihuZXcgZSkuYW5zaVRvSnNvbihuLHQpfX0se2tleTpcImFuc2lUb1RleHRcIix2YWx1ZTpmdW5jdGlvbihuKXtyZXR1cm4obmV3IGUpLmFuc2lUb1RleHQobil9fV0pLG4oZSxbe2tleTpcInNldHVwUGFsZXR0ZVwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5QQUxFVFRFX0NPTE9SUz1bXTtmb3IodmFyIGU9MDtlPDI7KytlKWZvcih2YXIgbj0wO248ODsrK24pdGhpcy5QQUxFVFRFX0NPTE9SUy5wdXNoKHRbZV1bbl0uY29sb3IpO2Zvcih2YXIgcj1bMCw5NSwxMzUsMTc1LDIxNSwyNTVdLG89ZnVuY3Rpb24oZSxuLHQpe3JldHVybiByW2VdK1wiLCBcIityW25dK1wiLCBcIityW3RdfSxhPTA7YTw2OysrYSlmb3IodmFyIGk9MDtpPDY7KytpKWZvcih2YXIgbD0wO2w8NjsrK2wpdGhpcy5QQUxFVFRFX0NPTE9SUy5wdXNoKG8oYSxpLGwpKTtmb3IodmFyIHM9OCxjPTA7YzwyNDsrK2Mscys9MTApdGhpcy5QQUxFVFRFX0NPTE9SUy5wdXNoKG8ocyxzLHMpKX19LHtrZXk6XCJlc2NhcGVGb3JIdG1sXCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvWyY8Pl0vZ20sZnVuY3Rpb24oZSl7cmV0dXJuXCImXCI9PWU/XCImYW1wO1wiOlwiPFwiPT1lP1wiJmx0O1wiOlwiPlwiPT1lP1wiJmd0O1wiOlwiXCJ9KX19LHtrZXk6XCJsaW5raWZ5XCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvKGh0dHBzPzpcXC9cXC9bXlxcc10rKS9nbSxmdW5jdGlvbihlKXtyZXR1cm4nPGEgaHJlZj1cIicrZSsnXCI+JytlK1wiPC9hPlwifSl9fSx7a2V5OlwiYW5zaVRvSHRtbFwiLHZhbHVlOmZ1bmN0aW9uKGUsbil7cmV0dXJuIHRoaXMucHJvY2VzcyhlLG4sITApfX0se2tleTpcImFuc2lUb0pzb25cIix2YWx1ZTpmdW5jdGlvbihlLG4pe3JldHVybihuPW58fHt9KS5qc29uPSEwLG4uY2xlYXJMaW5lPSExLHRoaXMucHJvY2VzcyhlLG4sITApfX0se2tleTpcImFuc2lUb1RleHRcIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wcm9jZXNzKGUse30sITEpfX0se2tleTpcInByb2Nlc3NcIix2YWx1ZTpmdW5jdGlvbihlLG4sdCl7dmFyIHI9dGhpcyxvPWUuc3BsaXQoL1xcMDMzXFxbLyksYT1vLnNoaWZ0KCk7bnVsbD09biYmKG49e30pLG4uY2xlYXJMaW5lPS9cXHIvLnRlc3QoZSk7dmFyIGk9by5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHIucHJvY2Vzc0NodW5rKGUsbix0KX0pO2lmKG4mJm4uanNvbil7dmFyIGw9dGhpcy5wcm9jZXNzQ2h1bmtKc29uKFwiXCIpO3JldHVybiBsLmNvbnRlbnQ9YSxsLmNsZWFyTGluZT1uLmNsZWFyTGluZSxpLnVuc2hpZnQobCksbi5yZW1vdmVfZW1wdHkmJihpPWkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmlzRW1wdHkoKX0pKSxpfXJldHVybiBpLnVuc2hpZnQoYSksaS5qb2luKFwiXCIpfX0se2tleTpcInByb2Nlc3NDaHVua0pzb25cIix2YWx1ZTpmdW5jdGlvbihlLG4scil7dmFyIG89KG49dm9pZCAwPT09bj97fTpuKS51c2VfY2xhc3Nlcz12b2lkIDAhPT1uLnVzZV9jbGFzc2VzJiZuLnVzZV9jbGFzc2VzLGE9bi5rZXk9bz9cImNsYXNzXCI6XCJjb2xvclwiLGk9e2NvbnRlbnQ6ZSxmZzpudWxsLGJnOm51bGwsZmdfdHJ1ZWNvbG9yOm51bGwsYmdfdHJ1ZWNvbG9yOm51bGwsY2xlYXJMaW5lOm4uY2xlYXJMaW5lLGRlY29yYXRpb246bnVsbCx3YXNfcHJvY2Vzc2VkOiExLGlzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4haS5jb250ZW50fX0sbD1lLm1hdGNoKC9eKFshXFx4M2MtXFx4M2ZdKikoW1xcZDtdKikoW1xceDIwLVxceDJjXSpbXFx4NDAtXFx4N2VdKShbXFxzXFxTXSopL20pO2lmKCFsKXJldHVybiBpO2kuY29udGVudD1sWzRdO3ZhciBzPWxbMl0uc3BsaXQoXCI7XCIpO2lmKFwiXCIhPT1sWzFdfHxcIm1cIiE9PWxbM118fCFyKXJldHVybiBpO2Zvcih0aGlzLmRlY29yYXRpb249bnVsbDtzLmxlbmd0aD4wOyl7dmFyIGM9cGFyc2VJbnQocy5zaGlmdCgpKTtpZihpc05hTihjKXx8MD09PWMpdGhpcy5mZz10aGlzLmJnPXRoaXMuZGVjb3JhdGlvbj1udWxsO2Vsc2UgaWYoMT09PWMpdGhpcy5kZWNvcmF0aW9uPVwiYm9sZFwiO2Vsc2UgaWYoMj09PWMpdGhpcy5kZWNvcmF0aW9uPVwiZGltXCI7ZWxzZSBpZigzPT1jKXRoaXMuZGVjb3JhdGlvbj1cIml0YWxpY1wiO2Vsc2UgaWYoND09Yyl0aGlzLmRlY29yYXRpb249XCJ1bmRlcmxpbmVcIjtlbHNlIGlmKDU9PWMpdGhpcy5kZWNvcmF0aW9uPVwiYmxpbmtcIjtlbHNlIGlmKDc9PT1jKXRoaXMuZGVjb3JhdGlvbj1cInJldmVyc2VcIjtlbHNlIGlmKDg9PT1jKXRoaXMuZGVjb3JhdGlvbj1cImhpZGRlblwiO2Vsc2UgaWYoOT09PWMpdGhpcy5kZWNvcmF0aW9uPVwic3RyaWtldGhyb3VnaFwiO2Vsc2UgaWYoMzk9PWMpdGhpcy5mZz1udWxsO2Vsc2UgaWYoNDk9PWMpdGhpcy5iZz1udWxsO2Vsc2UgaWYoYz49MzAmJmM8MzgpdGhpcy5mZz10WzBdW2MlMTBdW2FdO2Vsc2UgaWYoYz49OTAmJmM8OTgpdGhpcy5mZz10WzFdW2MlMTBdW2FdO2Vsc2UgaWYoYz49NDAmJmM8NDgpdGhpcy5iZz10WzBdW2MlMTBdW2FdO2Vsc2UgaWYoYz49MTAwJiZjPDEwOCl0aGlzLmJnPXRbMV1bYyUxMF1bYV07ZWxzZSBpZigzOD09PWN8fDQ4PT09Yyl7dmFyIHU9Mzg9PT1jO2lmKHMubGVuZ3RoPj0xKXt2YXIgZD1zLnNoaWZ0KCk7aWYoXCI1XCI9PT1kJiZzLmxlbmd0aD49MSl7dmFyIGY9cGFyc2VJbnQocy5zaGlmdCgpKTtpZihmPj0wJiZmPD0yNTUpaWYobyl7dmFyIHA9Zj49MTY/XCJhbnNpLXBhbGV0dGUtXCIrZjp0WysoZj43KV1bZiU4XS5jbGFzczt1P3RoaXMuZmc9cDp0aGlzLmJnPXB9ZWxzZSB0aGlzLlBBTEVUVEVfQ09MT1JTfHx0aGlzLnNldHVwUGFsZXR0ZSgpLHU/dGhpcy5mZz10aGlzLlBBTEVUVEVfQ09MT1JTW2ZdOnRoaXMuYmc9dGhpcy5QQUxFVFRFX0NPTE9SU1tmXX1lbHNlIGlmKFwiMlwiPT09ZCYmcy5sZW5ndGg+PTMpe3ZhciBoPXBhcnNlSW50KHMuc2hpZnQoKSksZz1wYXJzZUludChzLnNoaWZ0KCkpLG09cGFyc2VJbnQocy5zaGlmdCgpKTtpZihoPj0wJiZoPD0yNTUmJmc+PTAmJmc8PTI1NSYmbT49MCYmbTw9MjU1KXt2YXIgdj1oK1wiLCBcIitnK1wiLCBcIittO28/dT8odGhpcy5mZz1cImFuc2ktdHJ1ZWNvbG9yXCIsdGhpcy5mZ190cnVlY29sb3I9dik6KHRoaXMuYmc9XCJhbnNpLXRydWVjb2xvclwiLHRoaXMuYmdfdHJ1ZWNvbG9yPXYpOnU/dGhpcy5mZz12OnRoaXMuYmc9dn19fX19cmV0dXJuIG51bGw9PT10aGlzLmZnJiZudWxsPT09dGhpcy5iZyYmbnVsbD09PXRoaXMuZGVjb3JhdGlvbnx8KGkuZmc9dGhpcy5mZyxpLmJnPXRoaXMuYmcsaS5mZ190cnVlY29sb3I9dGhpcy5mZ190cnVlY29sb3IsaS5iZ190cnVlY29sb3I9dGhpcy5iZ190cnVlY29sb3IsaS5kZWNvcmF0aW9uPXRoaXMuZGVjb3JhdGlvbixpLndhc19wcm9jZXNzZWQ9ITApLGl9fSx7a2V5OlwicHJvY2Vzc0NodW5rXCIsdmFsdWU6ZnVuY3Rpb24oZSxuLHQpe3ZhciByPXRoaXM7bj1ufHx7fTt2YXIgbz10aGlzLnByb2Nlc3NDaHVua0pzb24oZSxuLHQpO2lmKG4uanNvbilyZXR1cm4gbztpZihvLmlzRW1wdHkoKSlyZXR1cm5cIlwiO2lmKCFvLndhc19wcm9jZXNzZWQpcmV0dXJuIG8uY29udGVudDt2YXIgYT1uLnVzZV9jbGFzc2VzLGk9W10sbD1bXSxzPXt9LGM9ZnVuY3Rpb24oZSl7dmFyIG49W10sdD12b2lkIDA7Zm9yKHQgaW4gZSllLmhhc093blByb3BlcnR5KHQpJiZuLnB1c2goXCJkYXRhLVwiK3QrJz1cIicrci5lc2NhcGVGb3JIdG1sKGVbdF0pKydcIicpO3JldHVybiBuLmxlbmd0aD4wP1wiIFwiK24uam9pbihcIiBcIik6XCJcIn07cmV0dXJuKG8uZmcmJihhPyhsLnB1c2goby5mZytcIi1mZ1wiKSxudWxsIT09by5mZ190cnVlY29sb3ImJihzW1wiYW5zaS10cnVlY29sb3ItZmdcIl09by5mZ190cnVlY29sb3Isby5mZ190cnVlY29sb3I9bnVsbCkpOmkucHVzaChcImNvbG9yOnJnYihcIitvLmZnK1wiKVwiKSksby5iZyYmKGE/KGwucHVzaChvLmJnK1wiLWJnXCIpLG51bGwhPT1vLmJnX3RydWVjb2xvciYmKHNbXCJhbnNpLXRydWVjb2xvci1iZ1wiXT1vLmJnX3RydWVjb2xvcixvLmJnX3RydWVjb2xvcj1udWxsKSk6aS5wdXNoKFwiYmFja2dyb3VuZC1jb2xvcjpyZ2IoXCIrby5iZytcIilcIikpLG8uZGVjb3JhdGlvbiYmKGE/bC5wdXNoKFwiYW5zaS1cIitvLmRlY29yYXRpb24pOlwiYm9sZFwiPT09by5kZWNvcmF0aW9uP2kucHVzaChcImZvbnQtd2VpZ2h0OmJvbGRcIik6XCJkaW1cIj09PW8uZGVjb3JhdGlvbj9pLnB1c2goXCJvcGFjaXR5OjAuNVwiKTpcIml0YWxpY1wiPT09by5kZWNvcmF0aW9uP2kucHVzaChcImZvbnQtc3R5bGU6aXRhbGljXCIpOlwicmV2ZXJzZVwiPT09by5kZWNvcmF0aW9uP2kucHVzaChcImZpbHRlcjppbnZlcnQoMTAwJSlcIik6XCJoaWRkZW5cIj09PW8uZGVjb3JhdGlvbj9pLnB1c2goXCJ2aXNpYmlsaXR5OmhpZGRlblwiKTpcInN0cmlrZXRocm91Z2hcIj09PW8uZGVjb3JhdGlvbj9pLnB1c2goXCJ0ZXh0LWRlY29yYXRpb246bGluZS10aHJvdWdoXCIpOmkucHVzaChcInRleHQtZGVjb3JhdGlvbjpcIitvLmRlY29yYXRpb24pKSxhKT8nPHNwYW4gY2xhc3M9XCInK2wuam9pbihcIiBcIikrJ1wiJytjKHMpK1wiPlwiK28uY29udGVudCtcIjwvc3Bhbj5cIjonPHNwYW4gc3R5bGU9XCInK2kuam9pbihcIjtcIikrJ1wiJytjKHMpK1wiPlwiK28uY29udGVudCtcIjwvc3Bhbj5cIn19XSksZX0oKX19LHQ9e307ZnVuY3Rpb24gcihlKXt2YXIgbz10W2VdO2lmKHZvaWQgMCE9PW8pcmV0dXJuIG8uZXhwb3J0czt2YXIgYT10W2VdPXtleHBvcnRzOnt9fSxpPSEwO3RyeXtuW2VdKGEsYS5leHBvcnRzLHIpLGk9ITF9ZmluYWxseXtpJiZkZWxldGUgdFtlXX1yZXR1cm4gYS5leHBvcnRzfXIuYWI9XCIvL1wiLGUuZXhwb3J0cz1yKDIxMSl9KSgpfSxcIi4vZGlzdC9jb21waWxlZC9yZWFjdC1kb20vY2pzL3JlYWN0LWRvbS1jbGllbnQucHJvZHVjdGlvbi5qc1wiOmZ1bmN0aW9uKGUsbix0KXtcInVzZSBzdHJpY3RcIjt2YXIgcixvPXQoXCIuL2Rpc3QvY29tcGlsZWQvc2NoZWR1bGVyL2luZGV4LmpzXCIpLGE9dChcIi4vZGlzdC9jb21waWxlZC9yZWFjdC9pbmRleC5qc1wiKSxpPXQoXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QtZG9tL2luZGV4LmpzXCIpO2Z1bmN0aW9uIGwoZSl7dmFyIG49XCJodHRwczovL3JlYWN0LmRldi9lcnJvcnMvXCIrZTtpZigxPGFyZ3VtZW50cy5sZW5ndGgpe24rPVwiP2FyZ3NbXT1cIitlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzWzFdKTtmb3IodmFyIHQ9Mjt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKW4rPVwiJmFyZ3NbXT1cIitlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW3RdKX1yZXR1cm5cIk1pbmlmaWVkIFJlYWN0IGVycm9yICNcIitlK1wiOyB2aXNpdCBcIituK1wiIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy5cIn1mdW5jdGlvbiBzKGUpe3ZhciBuPWUsdD1lO2lmKGUuYWx0ZXJuYXRlKWZvcig7bi5yZXR1cm47KW49bi5yZXR1cm47ZWxzZXtlPW47ZG8gMCE9KDQwOTgmKG49ZSkuZmxhZ3MpJiYodD1uLnJldHVybiksZT1uLnJldHVybjt3aGlsZShlKX1yZXR1cm4gMz09PW4udGFnP3Q6bnVsbH1mdW5jdGlvbiBjKGUpe2lmKDEzPT09ZS50YWcpe3ZhciBuPWUubWVtb2l6ZWRTdGF0ZTtpZihudWxsPT09biYmbnVsbCE9PShlPWUuYWx0ZXJuYXRlKSYmKG49ZS5tZW1vaXplZFN0YXRlKSxudWxsIT09bilyZXR1cm4gbi5kZWh5ZHJhdGVkfXJldHVybiBudWxsfWZ1bmN0aW9uIHUoZSl7aWYoMzE9PT1lLnRhZyl7dmFyIG49ZS5tZW1vaXplZFN0YXRlO2lmKG51bGw9PT1uJiZudWxsIT09KGU9ZS5hbHRlcm5hdGUpJiYobj1lLm1lbW9pemVkU3RhdGUpLG51bGwhPT1uKXJldHVybiBuLmRlaHlkcmF0ZWR9cmV0dXJuIG51bGx9ZnVuY3Rpb24gZChlKXtpZihzKGUpIT09ZSl0aHJvdyBFcnJvcihsKDE4OCkpfXZhciBmPU9iamVjdC5hc3NpZ24scD1TeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKSxoPVN5bWJvbC5mb3IoXCJyZWFjdC50cmFuc2l0aW9uYWwuZWxlbWVudFwiKSxnPVN5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIiksbT1TeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIiksdj1TeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIiksYj1TeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIikseT1TeW1ib2wuZm9yKFwicmVhY3QuY29uc3VtZXJcIikseD1TeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKSx3PVN5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKSxqPVN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZVwiKSxrPVN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpLEE9U3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIiksTz1TeW1ib2wuZm9yKFwicmVhY3QubGF6eVwiKTtTeW1ib2wuZm9yKFwicmVhY3Quc2NvcGVcIik7dmFyIEM9U3ltYm9sLmZvcihcInJlYWN0LmFjdGl2aXR5XCIpO1N5bWJvbC5mb3IoXCJyZWFjdC5sZWdhY3lfaGlkZGVuXCIpLFN5bWJvbC5mb3IoXCJyZWFjdC50cmFjaW5nX21hcmtlclwiKTt2YXIgUz1TeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKTtTeW1ib2wuZm9yKFwicmVhY3Qudmlld190cmFuc2l0aW9uXCIpO3ZhciBFPVN5bWJvbC5pdGVyYXRvcjtmdW5jdGlvbiBfKGUpe3JldHVybiBudWxsPT09ZXx8XCJvYmplY3RcIiE9dHlwZW9mIGU/bnVsbDpcImZ1bmN0aW9uXCI9PXR5cGVvZihlPUUmJmVbRV18fGVbXCJAQGl0ZXJhdG9yXCJdKT9lOm51bGx9dmFyIFA9U3ltYm9sLmZvcihcInJlYWN0LmNsaWVudC5yZWZlcmVuY2VcIiksej1BcnJheS5pc0FycmF5LEw9YS5fX0NMSUVOVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9XQVJOX1VTRVJTX1RIRVlfQ0FOTk9UX1VQR1JBREUsVD1pLl9fRE9NX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERSxSPXtwZW5kaW5nOiExLGRhdGE6bnVsbCxtZXRob2Q6bnVsbCxhY3Rpb246bnVsbH0sTj1bXSxEPS0xO2Z1bmN0aW9uIEIoZSl7cmV0dXJue2N1cnJlbnQ6ZX19ZnVuY3Rpb24gTShlKXswPkR8fChlLmN1cnJlbnQ9TltEXSxOW0RdPW51bGwsRC0tKX1mdW5jdGlvbiBJKGUsbil7TlsrK0RdPWUuY3VycmVudCxlLmN1cnJlbnQ9bn12YXIgSD1CKG51bGwpLEY9QihudWxsKSxVPUIobnVsbCksVj1CKG51bGwpO2Z1bmN0aW9uIHEoZSxuKXtzd2l0Y2goSShVLG4pLEkoRixlKSxJKEgsbnVsbCksbi5ub2RlVHlwZSl7Y2FzZSA5OmNhc2UgMTE6ZT0oZT1uLmRvY3VtZW50RWxlbWVudCkmJihlPWUubmFtZXNwYWNlVVJJKT9jcChlKTowO2JyZWFrO2RlZmF1bHQ6aWYoZT1uLnRhZ05hbWUsbj1uLm5hbWVzcGFjZVVSSSllPWNoKG49Y3AobiksZSk7ZWxzZSBzd2l0Y2goZSl7Y2FzZVwic3ZnXCI6ZT0xO2JyZWFrO2Nhc2VcIm1hdGhcIjplPTI7YnJlYWs7ZGVmYXVsdDplPTB9fU0oSCksSShILGUpfWZ1bmN0aW9uIFcoKXtNKEgpLE0oRiksTShVKX1mdW5jdGlvbiAkKGUpe251bGwhPT1lLm1lbW9pemVkU3RhdGUmJkkoVixlKTt2YXIgbj1ILmN1cnJlbnQsdD1jaChuLGUudHlwZSk7biE9PXQmJihJKEYsZSksSShILHQpKX1mdW5jdGlvbiBaKGUpe0YuY3VycmVudD09PWUmJihNKEgpLE0oRikpLFYuY3VycmVudD09PWUmJihNKFYpLGM2Ll9jdXJyZW50VmFsdWU9Uil9ZnVuY3Rpb24gWShlKXtpZih2b2lkIDA9PT1uRCl0cnl7dGhyb3cgRXJyb3IoKX1jYXRjaChlKXt2YXIgbj1lLnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO25EPW4mJm5bMV18fFwiXCIsbkI9LTE8ZS5zdGFjay5pbmRleE9mKFwiXFxuICAgIGF0XCIpP1wiICg8YW5vbnltb3VzPilcIjotMTxlLnN0YWNrLmluZGV4T2YoXCJAXCIpP1wiQHVua25vd246MDowXCI6XCJcIn1yZXR1cm5cIlxcblwiK25EK2UrbkJ9dmFyIFg9ITE7ZnVuY3Rpb24gSyhlLG4pe2lmKCFlfHxYKXJldHVyblwiXCI7WD0hMDt2YXIgdD1FcnJvci5wcmVwYXJlU3RhY2tUcmFjZTtFcnJvci5wcmVwYXJlU3RhY2tUcmFjZT12b2lkIDA7dHJ5e3ZhciByPXtEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3Q6ZnVuY3Rpb24oKXt0cnl7aWYobil7dmFyIHQ9ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigpfTtpZihPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsXCJwcm9wc1wiLHtzZXQ6ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigpfX0pLFwib2JqZWN0XCI9PXR5cGVvZiBSZWZsZWN0JiZSZWZsZWN0LmNvbnN0cnVjdCl7dHJ5e1JlZmxlY3QuY29uc3RydWN0KHQsW10pfWNhdGNoKGUpe3ZhciByPWV9UmVmbGVjdC5jb25zdHJ1Y3QoZSxbXSx0KX1lbHNle3RyeXt0LmNhbGwoKX1jYXRjaChlKXtyPWV9ZS5jYWxsKHQucHJvdG90eXBlKX19ZWxzZXt0cnl7dGhyb3cgRXJyb3IoKX1jYXRjaChlKXtyPWV9KHQ9ZSgpKSYmXCJmdW5jdGlvblwiPT10eXBlb2YgdC5jYXRjaCYmdC5jYXRjaChmdW5jdGlvbigpe30pfX1jYXRjaChlKXtpZihlJiZyJiZcInN0cmluZ1wiPT10eXBlb2YgZS5zdGFjaylyZXR1cm5bZS5zdGFjayxyLnN0YWNrXX1yZXR1cm5bbnVsbCxudWxsXX19O3IuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290LmRpc3BsYXlOYW1lPVwiRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290XCI7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCxcIm5hbWVcIik7byYmby5jb25maWd1cmFibGUmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCxcIm5hbWVcIix7dmFsdWU6XCJEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3RcIn0pO3ZhciBhPXIuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290KCksaT1hWzBdLGw9YVsxXTtpZihpJiZsKXt2YXIgcz1pLnNwbGl0KFwiXFxuXCIpLGM9bC5zcGxpdChcIlxcblwiKTtmb3Iobz1yPTA7cjxzLmxlbmd0aCYmIXNbcl0uaW5jbHVkZXMoXCJEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3RcIik7KXIrKztmb3IoO288Yy5sZW5ndGgmJiFjW29dLmluY2x1ZGVzKFwiRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290XCIpOylvKys7aWYocj09PXMubGVuZ3RofHxvPT09Yy5sZW5ndGgpZm9yKHI9cy5sZW5ndGgtMSxvPWMubGVuZ3RoLTE7MTw9ciYmMDw9byYmc1tyXSE9PWNbb107KW8tLTtmb3IoOzE8PXImJjA8PW87ci0tLG8tLSlpZihzW3JdIT09Y1tvXSl7aWYoMSE9PXJ8fDEhPT1vKWRvIGlmKHItLSxvLS0sMD5vfHxzW3JdIT09Y1tvXSl7dmFyIHU9XCJcXG5cIitzW3JdLnJlcGxhY2UoXCIgYXQgbmV3IFwiLFwiIGF0IFwiKTtyZXR1cm4gZS5kaXNwbGF5TmFtZSYmdS5pbmNsdWRlcyhcIjxhbm9ueW1vdXM+XCIpJiYodT11LnJlcGxhY2UoXCI8YW5vbnltb3VzPlwiLGUuZGlzcGxheU5hbWUpKSx1fXdoaWxlKDE8PXImJjA8PW8pO2JyZWFrfX19ZmluYWxseXtYPSExLEVycm9yLnByZXBhcmVTdGFja1RyYWNlPXR9cmV0dXJuKHQ9ZT9lLmRpc3BsYXlOYW1lfHxlLm5hbWU6XCJcIik/WSh0KTpcIlwifWZ1bmN0aW9uIFEoZSl7dHJ5e3ZhciBuPVwiXCIsdD1udWxsO2RvIG4rPWZ1bmN0aW9uKGUsbil7c3dpdGNoKGUudGFnKXtjYXNlIDI2OmNhc2UgMjc6Y2FzZSA1OnJldHVybiBZKGUudHlwZSk7Y2FzZSAxNjpyZXR1cm4gWShcIkxhenlcIik7Y2FzZSAxMzpyZXR1cm4gZS5jaGlsZCE9PW4mJm51bGwhPT1uP1koXCJTdXNwZW5zZSBGYWxsYmFja1wiKTpZKFwiU3VzcGVuc2VcIik7Y2FzZSAxOTpyZXR1cm4gWShcIlN1c3BlbnNlTGlzdFwiKTtjYXNlIDA6Y2FzZSAxNTpyZXR1cm4gSyhlLnR5cGUsITEpO2Nhc2UgMTE6cmV0dXJuIEsoZS50eXBlLnJlbmRlciwhMSk7Y2FzZSAxOnJldHVybiBLKGUudHlwZSwhMCk7Y2FzZSAzMTpyZXR1cm4gWShcIkFjdGl2aXR5XCIpO2RlZmF1bHQ6cmV0dXJuXCJcIn19KGUsdCksdD1lLGU9ZS5yZXR1cm47d2hpbGUoZSk7cmV0dXJuIG59Y2F0Y2goZSl7cmV0dXJuXCJcXG5FcnJvciBnZW5lcmF0aW5nIHN0YWNrOiBcIitlLm1lc3NhZ2UrXCJcXG5cIitlLnN0YWNrfX12YXIgRz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LEo9by51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrLGVlPW8udW5zdGFibGVfY2FuY2VsQ2FsbGJhY2ssZW49by51bnN0YWJsZV9zaG91bGRZaWVsZCxldD1vLnVuc3RhYmxlX3JlcXVlc3RQYWludCxlcj1vLnVuc3RhYmxlX25vdyxlbz1vLnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsLGVhPW8udW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHksZWk9by51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eSxlbD1vLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LGVzPW8udW5zdGFibGVfTG93UHJpb3JpdHksZWM9by51bnN0YWJsZV9JZGxlUHJpb3JpdHksZXU9by5sb2csZWQ9by51bnN0YWJsZV9zZXREaXNhYmxlWWllbGRWYWx1ZSxlZj1udWxsLGVwPW51bGw7ZnVuY3Rpb24gZWgoZSl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZXUmJmVkKGUpLGVwJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlcC5zZXRTdHJpY3RNb2RlKXRyeXtlcC5zZXRTdHJpY3RNb2RlKGVmLGUpfWNhdGNoKGUpe319dmFyIGVnPU1hdGguY2x6MzI/TWF0aC5jbHozMjpmdW5jdGlvbihlKXtyZXR1cm4gMD09KGU+Pj49MCk/MzI6MzEtKGVtKGUpL2V2fDApfDB9LGVtPU1hdGgubG9nLGV2PU1hdGguTE4yLGViPTI1NixleT00MTk0MzA0O2Z1bmN0aW9uIGV4KGUpe3ZhciBuPTQyJmU7aWYoMCE9PW4pcmV0dXJuIG47c3dpdGNoKGUmLWUpe2Nhc2UgMTpyZXR1cm4gMTtjYXNlIDI6cmV0dXJuIDI7Y2FzZSA0OnJldHVybiA0O2Nhc2UgODpyZXR1cm4gODtjYXNlIDE2OnJldHVybiAxNjtjYXNlIDMyOnJldHVybiAzMjtjYXNlIDY0OnJldHVybiA2NDtjYXNlIDEyODpyZXR1cm4gMTI4O2Nhc2UgMjU2OmNhc2UgNTEyOmNhc2UgMTAyNDpjYXNlIDIwNDg6Y2FzZSA0MDk2OmNhc2UgODE5MjpjYXNlIDE2Mzg0OmNhc2UgMzI3Njg6Y2FzZSA2NTUzNjpjYXNlIDEzMTA3MjpjYXNlIDI2MjE0NDpjYXNlIDUyNDI4ODpjYXNlIDEwNDg1NzY6Y2FzZSAyMDk3MTUyOnJldHVybiA0MTk0MDQ4JmU7Y2FzZSA0MTk0MzA0OmNhc2UgODM4ODYwODpjYXNlIDB4MTAwMDAwMDpjYXNlIDB4MjAwMDAwMDpyZXR1cm4gMHgzYzAwMDAwJmU7Y2FzZSAweDQwMDAwMDA6cmV0dXJuIDB4NDAwMDAwMDtjYXNlIDB4ODAwMDAwMDpyZXR1cm4gMHg4MDAwMDAwO2Nhc2UgMHgxMDAwMDAwMDpyZXR1cm4gMHgxMDAwMDAwMDtjYXNlIDB4MjAwMDAwMDA6cmV0dXJuIDB4MjAwMDAwMDA7Y2FzZSAweDQwMDAwMDAwOnJldHVybiAwO2RlZmF1bHQ6cmV0dXJuIGV9fWZ1bmN0aW9uIGV3KGUsbix0KXt2YXIgcj1lLnBlbmRpbmdMYW5lcztpZigwPT09cilyZXR1cm4gMDt2YXIgbz0wLGE9ZS5zdXNwZW5kZWRMYW5lcyxpPWUucGluZ2VkTGFuZXM7ZT1lLndhcm1MYW5lczt2YXIgbD0weDdmZmZmZmYmcjtyZXR1cm4gMCE9PWw/MCE9KHI9bCZ+YSk/bz1leChyKTowIT0oaSY9bCk/bz1leChpKTp0fHwwIT0odD1sJn5lKSYmKG89ZXgodCkpOjAhPShsPXImfmEpP289ZXgobCk6MCE9PWk/bz1leChpKTp0fHwwIT0odD1yJn5lKSYmKG89ZXgodCkpLDA9PT1vPzA6MCE9PW4mJm4hPT1vJiYwPT0obiZhKSYmKChhPW8mLW8pPj0odD1uJi1uKXx8MzI9PT1hJiYwIT0oNDE5NDA0OCZ0KSk/bjpvfWZ1bmN0aW9uIGVqKGUsbil7cmV0dXJuIDA9PShlLnBlbmRpbmdMYW5lcyZ+KGUuc3VzcGVuZGVkTGFuZXMmfmUucGluZ2VkTGFuZXMpJm4pfWZ1bmN0aW9uIGVrKCl7dmFyIGU9ZWI7cmV0dXJuIDA9PSg0MTk0MDQ4JihlYjw8PTEpKSYmKGViPTI1NiksZX1mdW5jdGlvbiBlQSgpe3ZhciBlPWV5O3JldHVybiAwPT0oMHgzYzAwMDAwJihleTw8PTEpKSYmKGV5PTQxOTQzMDQpLGV9ZnVuY3Rpb24gZU8oZSl7Zm9yKHZhciBuPVtdLHQ9MDszMT50O3QrKyluLnB1c2goZSk7cmV0dXJuIG59ZnVuY3Rpb24gZUMoZSxuKXtlLnBlbmRpbmdMYW5lc3w9biwweDEwMDAwMDAwIT09biYmKGUuc3VzcGVuZGVkTGFuZXM9MCxlLnBpbmdlZExhbmVzPTAsZS53YXJtTGFuZXM9MCl9ZnVuY3Rpb24gZVMoZSxuLHQpe2UucGVuZGluZ0xhbmVzfD1uLGUuc3VzcGVuZGVkTGFuZXMmPX5uO3ZhciByPTMxLWVnKG4pO2UuZW50YW5nbGVkTGFuZXN8PW4sZS5lbnRhbmdsZW1lbnRzW3JdPTB4NDAwMDAwMDB8ZS5lbnRhbmdsZW1lbnRzW3JdfDQxOTQwOTAmdH1mdW5jdGlvbiBlRShlLG4pe3ZhciB0PWUuZW50YW5nbGVkTGFuZXN8PW47Zm9yKGU9ZS5lbnRhbmdsZW1lbnRzO3Q7KXt2YXIgcj0zMS1lZyh0KSxvPTE8PHI7byZufGVbcl0mbiYmKGVbcl18PW4pLHQmPX5vfX1mdW5jdGlvbiBlXyhlLG4pe3ZhciB0PW4mLW47cmV0dXJuIDAhPSgodD0wIT0oNDImdCk/MTplUCh0KSkmKGUuc3VzcGVuZGVkTGFuZXN8bikpPzA6dH1mdW5jdGlvbiBlUChlKXtzd2l0Y2goZSl7Y2FzZSAyOmU9MTticmVhaztjYXNlIDg6ZT00O2JyZWFrO2Nhc2UgMzI6ZT0xNjticmVhaztjYXNlIDI1NjpjYXNlIDUxMjpjYXNlIDEwMjQ6Y2FzZSAyMDQ4OmNhc2UgNDA5NjpjYXNlIDgxOTI6Y2FzZSAxNjM4NDpjYXNlIDMyNzY4OmNhc2UgNjU1MzY6Y2FzZSAxMzEwNzI6Y2FzZSAyNjIxNDQ6Y2FzZSA1MjQyODg6Y2FzZSAxMDQ4NTc2OmNhc2UgMjA5NzE1MjpjYXNlIDQxOTQzMDQ6Y2FzZSA4Mzg4NjA4OmNhc2UgMHgxMDAwMDAwOmNhc2UgMHgyMDAwMDAwOmU9MTI4O2JyZWFrO2Nhc2UgMHgxMDAwMDAwMDplPTB4ODAwMDAwMDticmVhaztkZWZhdWx0OmU9MH1yZXR1cm4gZX1mdW5jdGlvbiBleihlKXtyZXR1cm4gMjwoZSY9LWUpPzg8ZT8wIT0oMHg3ZmZmZmZmJmUpPzMyOjB4MTAwMDAwMDA6ODoyfWZ1bmN0aW9uIGVMKCl7dmFyIGU9VC5wO3JldHVybiAwIT09ZT9lOnZvaWQgMD09PShlPXdpbmRvdy5ldmVudCk/MzI6dXUoZS50eXBlKX1mdW5jdGlvbiBlVChlLG4pe3ZhciB0PVQucDt0cnl7cmV0dXJuIFQucD1lLG4oKX1maW5hbGx5e1QucD10fX12YXIgZVI9TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiksZU49XCJfX3JlYWN0RmliZXIkXCIrZVIsZUQ9XCJfX3JlYWN0UHJvcHMkXCIrZVIsZUI9XCJfX3JlYWN0Q29udGFpbmVyJFwiK2VSLGVNPVwiX19yZWFjdEV2ZW50cyRcIitlUixlST1cIl9fcmVhY3RMaXN0ZW5lcnMkXCIrZVIsZUg9XCJfX3JlYWN0SGFuZGxlcyRcIitlUixlRj1cIl9fcmVhY3RSZXNvdXJjZXMkXCIrZVIsZVU9XCJfX3JlYWN0TWFya2VyJFwiK2VSO2Z1bmN0aW9uIGVWKGUpe2RlbGV0ZSBlW2VOXSxkZWxldGUgZVtlRF0sZGVsZXRlIGVbZU1dLGRlbGV0ZSBlW2VJXSxkZWxldGUgZVtlSF19ZnVuY3Rpb24gZXEoZSl7dmFyIG49ZVtlTl07aWYobilyZXR1cm4gbjtmb3IodmFyIHQ9ZS5wYXJlbnROb2RlO3Q7KXtpZihuPXRbZUJdfHx0W2VOXSl7aWYodD1uLmFsdGVybmF0ZSxudWxsIT09bi5jaGlsZHx8bnVsbCE9PXQmJm51bGwhPT10LmNoaWxkKWZvcihlPWNMKGUpO251bGwhPT1lOyl7aWYodD1lW2VOXSlyZXR1cm4gdDtlPWNMKGUpfXJldHVybiBufXQ9KGU9dCkucGFyZW50Tm9kZX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBlVyhlKXtpZihlPWVbZU5dfHxlW2VCXSl7dmFyIG49ZS50YWc7aWYoNT09PW58fDY9PT1ufHwxMz09PW58fDMxPT09bnx8MjY9PT1ufHwyNz09PW58fDM9PT1uKXJldHVybiBlfXJldHVybiBudWxsfWZ1bmN0aW9uIGUkKGUpe3ZhciBuPWUudGFnO2lmKDU9PT1ufHwyNj09PW58fDI3PT09bnx8Nj09PW4pcmV0dXJuIGUuc3RhdGVOb2RlO3Rocm93IEVycm9yKGwoMzMpKX1mdW5jdGlvbiBlWihlKXt2YXIgbj1lW2VGXTtyZXR1cm4gbnx8KG49ZVtlRl09e2hvaXN0YWJsZVN0eWxlczpuZXcgTWFwLGhvaXN0YWJsZVNjcmlwdHM6bmV3IE1hcH0pLG59ZnVuY3Rpb24gZVkoZSl7ZVtlVV09ITB9dmFyIGVYPW5ldyBTZXQsZUs9e307ZnVuY3Rpb24gZVEoZSxuKXtlRyhlLG4pLGVHKGUrXCJDYXB0dXJlXCIsbil9ZnVuY3Rpb24gZUcoZSxuKXtmb3IoZUtbZV09bixlPTA7ZTxuLmxlbmd0aDtlKyspZVguYWRkKG5bZV0pfXZhciBlSj1SZWdFeHAoXCJeWzpBLVpfYS16XFxcXHUwMEMwLVxcXFx1MDBENlxcXFx1MDBEOC1cXFxcdTAwRjZcXFxcdTAwRjgtXFxcXHUwMkZGXFxcXHUwMzcwLVxcXFx1MDM3RFxcXFx1MDM3Ri1cXFxcdTFGRkZcXFxcdTIwMEMtXFxcXHUyMDBEXFxcXHUyMDcwLVxcXFx1MjE4RlxcXFx1MkMwMC1cXFxcdTJGRUZcXFxcdTMwMDEtXFxcXHVEN0ZGXFxcXHVGOTAwLVxcXFx1RkRDRlxcXFx1RkRGMC1cXFxcdUZGRkRdWzpBLVpfYS16XFxcXHUwMEMwLVxcXFx1MDBENlxcXFx1MDBEOC1cXFxcdTAwRjZcXFxcdTAwRjgtXFxcXHUwMkZGXFxcXHUwMzcwLVxcXFx1MDM3RFxcXFx1MDM3Ri1cXFxcdTFGRkZcXFxcdTIwMEMtXFxcXHUyMDBEXFxcXHUyMDcwLVxcXFx1MjE4RlxcXFx1MkMwMC1cXFxcdTJGRUZcXFxcdTMwMDEtXFxcXHVEN0ZGXFxcXHVGOTAwLVxcXFx1RkRDRlxcXFx1RkRGMC1cXFxcdUZGRkRcXFxcLS4wLTlcXFxcdTAwQjdcXFxcdTAzMDAtXFxcXHUwMzZGXFxcXHUyMDNGLVxcXFx1MjA0MF0qJFwiKSxlMD17fSxlMT17fTtmdW5jdGlvbiBlMihlLG4sdCl7aWYoRy5jYWxsKGUxLG4pfHwhRy5jYWxsKGUwLG4pJiYoZUoudGVzdChuKT9lMVtuXT0hMDooZTBbbl09ITAsITEpKSlpZihudWxsPT09dCllLnJlbW92ZUF0dHJpYnV0ZShuKTtlbHNle3N3aXRjaCh0eXBlb2YgdCl7Y2FzZVwidW5kZWZpbmVkXCI6Y2FzZVwiZnVuY3Rpb25cIjpjYXNlXCJzeW1ib2xcIjplLnJlbW92ZUF0dHJpYnV0ZShuKTtyZXR1cm47Y2FzZVwiYm9vbGVhblwiOnZhciByPW4udG9Mb3dlckNhc2UoKS5zbGljZSgwLDUpO2lmKFwiZGF0YS1cIiE9PXImJlwiYXJpYS1cIiE9PXIpcmV0dXJuIHZvaWQgZS5yZW1vdmVBdHRyaWJ1dGUobil9ZS5zZXRBdHRyaWJ1dGUobixcIlwiK3QpfX1mdW5jdGlvbiBlNChlLG4sdCl7aWYobnVsbD09PXQpZS5yZW1vdmVBdHRyaWJ1dGUobik7ZWxzZXtzd2l0Y2godHlwZW9mIHQpe2Nhc2VcInVuZGVmaW5lZFwiOmNhc2VcImZ1bmN0aW9uXCI6Y2FzZVwic3ltYm9sXCI6Y2FzZVwiYm9vbGVhblwiOmUucmVtb3ZlQXR0cmlidXRlKG4pO3JldHVybn1lLnNldEF0dHJpYnV0ZShuLFwiXCIrdCl9fWZ1bmN0aW9uIGU1KGUsbix0LHIpe2lmKG51bGw9PT1yKWUucmVtb3ZlQXR0cmlidXRlKHQpO2Vsc2V7c3dpdGNoKHR5cGVvZiByKXtjYXNlXCJ1bmRlZmluZWRcIjpjYXNlXCJmdW5jdGlvblwiOmNhc2VcInN5bWJvbFwiOmNhc2VcImJvb2xlYW5cIjplLnJlbW92ZUF0dHJpYnV0ZSh0KTtyZXR1cm59ZS5zZXRBdHRyaWJ1dGVOUyhuLHQsXCJcIityKX19ZnVuY3Rpb24gZTMoZSl7c3dpdGNoKHR5cGVvZiBlKXtjYXNlXCJiaWdpbnRcIjpjYXNlXCJib29sZWFuXCI6Y2FzZVwibnVtYmVyXCI6Y2FzZVwic3RyaW5nXCI6Y2FzZVwidW5kZWZpbmVkXCI6Y2FzZVwib2JqZWN0XCI6cmV0dXJuIGU7ZGVmYXVsdDpyZXR1cm5cIlwifX1mdW5jdGlvbiBlNihlKXt2YXIgbj1lLnR5cGU7cmV0dXJuKGU9ZS5ub2RlTmFtZSkmJlwiaW5wdXRcIj09PWUudG9Mb3dlckNhc2UoKSYmKFwiY2hlY2tib3hcIj09PW58fFwicmFkaW9cIj09PW4pfWZ1bmN0aW9uIGU5KGUpe2lmKCFlLl92YWx1ZVRyYWNrZXIpe3ZhciBuPWU2KGUpP1wiY2hlY2tlZFwiOlwidmFsdWVcIjtlLl92YWx1ZVRyYWNrZXI9ZnVuY3Rpb24oZSxuLHQpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsbik7aWYoIWUuaGFzT3duUHJvcGVydHkobikmJnZvaWQgMCE9PXImJlwiZnVuY3Rpb25cIj09dHlwZW9mIHIuZ2V0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiByLnNldCl7dmFyIG89ci5nZXQsYT1yLnNldDtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLmNhbGwodGhpcyl9LHNldDpmdW5jdGlvbihlKXt0PVwiXCIrZSxhLmNhbGwodGhpcyxlKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHtlbnVtZXJhYmxlOnIuZW51bWVyYWJsZX0pLHtnZXRWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB0fSxzZXRWYWx1ZTpmdW5jdGlvbihlKXt0PVwiXCIrZX0sc3RvcFRyYWNraW5nOmZ1bmN0aW9uKCl7ZS5fdmFsdWVUcmFja2VyPW51bGwsZGVsZXRlIGVbbl19fX19KGUsbixcIlwiK2Vbbl0pfX1mdW5jdGlvbiBlOChlKXtpZighZSlyZXR1cm4hMTt2YXIgbj1lLl92YWx1ZVRyYWNrZXI7aWYoIW4pcmV0dXJuITA7dmFyIHQ9bi5nZXRWYWx1ZSgpLHI9XCJcIjtyZXR1cm4gZSYmKHI9ZTYoZSk/ZS5jaGVja2VkP1widHJ1ZVwiOlwiZmFsc2VcIjplLnZhbHVlKSwoZT1yKSE9PXQmJihuLnNldFZhbHVlKGUpLCEwKX1mdW5jdGlvbiBlNyhlKXtpZih2b2lkIDA9PT0oZT1lfHwoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50P2RvY3VtZW50OnZvaWQgMCkpKXJldHVybiBudWxsO3RyeXtyZXR1cm4gZS5hY3RpdmVFbGVtZW50fHxlLmJvZHl9Y2F0Y2gobil7cmV0dXJuIGUuYm9keX19dmFyIG5lPS9bXFxuXCJcXFxcXS9nO2Z1bmN0aW9uIG5uKGUpe3JldHVybiBlLnJlcGxhY2UobmUsZnVuY3Rpb24oZSl7cmV0dXJuXCJcXFxcXCIrZS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KStcIiBcIn0pfWZ1bmN0aW9uIG50KGUsbix0LHIsbyxhLGksbCl7ZS5uYW1lPVwiXCIsbnVsbCE9aSYmXCJmdW5jdGlvblwiIT10eXBlb2YgaSYmXCJzeW1ib2xcIiE9dHlwZW9mIGkmJlwiYm9vbGVhblwiIT10eXBlb2YgaT9lLnR5cGU9aTplLnJlbW92ZUF0dHJpYnV0ZShcInR5cGVcIiksbnVsbCE9bj9cIm51bWJlclwiPT09aT8oMD09PW4mJlwiXCI9PT1lLnZhbHVlfHxlLnZhbHVlIT1uKSYmKGUudmFsdWU9XCJcIitlMyhuKSk6ZS52YWx1ZSE9PVwiXCIrZTMobikmJihlLnZhbHVlPVwiXCIrZTMobikpOlwic3VibWl0XCIhPT1pJiZcInJlc2V0XCIhPT1pfHxlLnJlbW92ZUF0dHJpYnV0ZShcInZhbHVlXCIpLG51bGwhPW4/bm8oZSxpLGUzKG4pKTpudWxsIT10P25vKGUsaSxlMyh0KSk6bnVsbCE9ciYmZS5yZW1vdmVBdHRyaWJ1dGUoXCJ2YWx1ZVwiKSxudWxsPT1vJiZudWxsIT1hJiYoZS5kZWZhdWx0Q2hlY2tlZD0hIWEpLG51bGwhPW8mJihlLmNoZWNrZWQ9byYmXCJmdW5jdGlvblwiIT10eXBlb2YgbyYmXCJzeW1ib2xcIiE9dHlwZW9mIG8pLG51bGwhPWwmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGwmJlwic3ltYm9sXCIhPXR5cGVvZiBsJiZcImJvb2xlYW5cIiE9dHlwZW9mIGw/ZS5uYW1lPVwiXCIrZTMobCk6ZS5yZW1vdmVBdHRyaWJ1dGUoXCJuYW1lXCIpfWZ1bmN0aW9uIG5yKGUsbix0LHIsbyxhLGksbCl7aWYobnVsbCE9YSYmXCJmdW5jdGlvblwiIT10eXBlb2YgYSYmXCJzeW1ib2xcIiE9dHlwZW9mIGEmJlwiYm9vbGVhblwiIT10eXBlb2YgYSYmKGUudHlwZT1hKSxudWxsIT1ufHxudWxsIT10KXtpZigoXCJzdWJtaXRcIj09PWF8fFwicmVzZXRcIj09PWEpJiZudWxsPT1uKXJldHVybiB2b2lkIGU5KGUpO3Q9bnVsbCE9dD9cIlwiK2UzKHQpOlwiXCIsbj1udWxsIT1uP1wiXCIrZTMobik6dCxsfHxuPT09ZS52YWx1ZXx8KGUudmFsdWU9biksZS5kZWZhdWx0VmFsdWU9bn1yPVwiZnVuY3Rpb25cIiE9dHlwZW9mKHI9bnVsbCE9cj9yOm8pJiZcInN5bWJvbFwiIT10eXBlb2YgciYmISFyLGUuY2hlY2tlZD1sP2UuY2hlY2tlZDohIXIsZS5kZWZhdWx0Q2hlY2tlZD0hIXIsbnVsbCE9aSYmXCJmdW5jdGlvblwiIT10eXBlb2YgaSYmXCJzeW1ib2xcIiE9dHlwZW9mIGkmJlwiYm9vbGVhblwiIT10eXBlb2YgaSYmKGUubmFtZT1pKSxlOShlKX1mdW5jdGlvbiBubyhlLG4sdCl7XCJudW1iZXJcIj09PW4mJmU3KGUub3duZXJEb2N1bWVudCk9PT1lfHxlLmRlZmF1bHRWYWx1ZT09PVwiXCIrdHx8KGUuZGVmYXVsdFZhbHVlPVwiXCIrdCl9ZnVuY3Rpb24gbmEoZSxuLHQscil7aWYoZT1lLm9wdGlvbnMsbil7bj17fTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyluW1wiJFwiK3Rbb11dPSEwO2Zvcih0PTA7dDxlLmxlbmd0aDt0Kyspbz1uLmhhc093blByb3BlcnR5KFwiJFwiK2VbdF0udmFsdWUpLGVbdF0uc2VsZWN0ZWQhPT1vJiYoZVt0XS5zZWxlY3RlZD1vKSxvJiZyJiYoZVt0XS5kZWZhdWx0U2VsZWN0ZWQ9ITApfWVsc2V7Zm9yKG89MCx0PVwiXCIrZTModCksbj1udWxsO288ZS5sZW5ndGg7bysrKXtpZihlW29dLnZhbHVlPT09dCl7ZVtvXS5zZWxlY3RlZD0hMCxyJiYoZVtvXS5kZWZhdWx0U2VsZWN0ZWQ9ITApO3JldHVybn1udWxsIT09bnx8ZVtvXS5kaXNhYmxlZHx8KG49ZVtvXSl9bnVsbCE9PW4mJihuLnNlbGVjdGVkPSEwKX19ZnVuY3Rpb24gbmkoZSxuLHQpe2lmKG51bGwhPW4mJigobj1cIlwiK2UzKG4pKSE9PWUudmFsdWUmJihlLnZhbHVlPW4pLG51bGw9PXQpKXtlLmRlZmF1bHRWYWx1ZSE9PW4mJihlLmRlZmF1bHRWYWx1ZT1uKTtyZXR1cm59ZS5kZWZhdWx0VmFsdWU9bnVsbCE9dD9cIlwiK2UzKHQpOlwiXCJ9ZnVuY3Rpb24gbmwoZSxuLHQscil7aWYobnVsbD09bil7aWYobnVsbCE9cil7aWYobnVsbCE9dCl0aHJvdyBFcnJvcihsKDkyKSk7aWYoeihyKSl7aWYoMTxyLmxlbmd0aCl0aHJvdyBFcnJvcihsKDkzKSk7cj1yWzBdfXQ9cn1udWxsPT10JiYodD1cIlwiKSxuPXR9ZS5kZWZhdWx0VmFsdWU9dD1lMyhuKSwocj1lLnRleHRDb250ZW50KT09PXQmJlwiXCIhPT1yJiZudWxsIT09ciYmKGUudmFsdWU9ciksZTkoZSl9ZnVuY3Rpb24gbnMoZSxuKXtpZihuKXt2YXIgdD1lLmZpcnN0Q2hpbGQ7aWYodCYmdD09PWUubGFzdENoaWxkJiYzPT09dC5ub2RlVHlwZSl7dC5ub2RlVmFsdWU9bjtyZXR1cm59fWUudGV4dENvbnRlbnQ9bn12YXIgbmM9bmV3IFNldChcImFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50IGFzcGVjdFJhdGlvIGJvcmRlckltYWdlT3V0c2V0IGJvcmRlckltYWdlU2xpY2UgYm9yZGVySW1hZ2VXaWR0aCBib3hGbGV4IGJveEZsZXhHcm91cCBib3hPcmRpbmFsR3JvdXAgY29sdW1uQ291bnQgY29sdW1ucyBmbGV4IGZsZXhHcm93IGZsZXhQb3NpdGl2ZSBmbGV4U2hyaW5rIGZsZXhOZWdhdGl2ZSBmbGV4T3JkZXIgZ3JpZEFyZWEgZ3JpZFJvdyBncmlkUm93RW5kIGdyaWRSb3dTcGFuIGdyaWRSb3dTdGFydCBncmlkQ29sdW1uIGdyaWRDb2x1bW5FbmQgZ3JpZENvbHVtblNwYW4gZ3JpZENvbHVtblN0YXJ0IGZvbnRXZWlnaHQgbGluZUNsYW1wIGxpbmVIZWlnaHQgb3BhY2l0eSBvcmRlciBvcnBoYW5zIHNjYWxlIHRhYlNpemUgd2lkb3dzIHpJbmRleCB6b29tIGZpbGxPcGFjaXR5IGZsb29kT3BhY2l0eSBzdG9wT3BhY2l0eSBzdHJva2VEYXNoYXJyYXkgc3Ryb2tlRGFzaG9mZnNldCBzdHJva2VNaXRlcmxpbWl0IHN0cm9rZU9wYWNpdHkgc3Ryb2tlV2lkdGggTW96QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQgTW96Qm94RmxleCBNb3pCb3hGbGV4R3JvdXAgTW96TGluZUNsYW1wIG1zQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQgbXNGbGV4IG1zWm9vbSBtc0ZsZXhHcm93IG1zRmxleE5lZ2F0aXZlIG1zRmxleE9yZGVyIG1zRmxleFBvc2l0aXZlIG1zRmxleFNocmluayBtc0dyaWRDb2x1bW4gbXNHcmlkQ29sdW1uU3BhbiBtc0dyaWRSb3cgbXNHcmlkUm93U3BhbiBXZWJraXRBbmltYXRpb25JdGVyYXRpb25Db3VudCBXZWJraXRCb3hGbGV4IFdlYktpdEJveEZsZXhHcm91cCBXZWJraXRCb3hPcmRpbmFsR3JvdXAgV2Via2l0Q29sdW1uQ291bnQgV2Via2l0Q29sdW1ucyBXZWJraXRGbGV4IFdlYmtpdEZsZXhHcm93IFdlYmtpdEZsZXhQb3NpdGl2ZSBXZWJraXRGbGV4U2hyaW5rIFdlYmtpdExpbmVDbGFtcFwiLnNwbGl0KFwiIFwiKSk7ZnVuY3Rpb24gbnUoZSxuLHQpe3ZhciByPTA9PT1uLmluZGV4T2YoXCItLVwiKTtudWxsPT10fHxcImJvb2xlYW5cIj09dHlwZW9mIHR8fFwiXCI9PT10P3I/ZS5zZXRQcm9wZXJ0eShuLFwiXCIpOlwiZmxvYXRcIj09PW4/ZS5jc3NGbG9hdD1cIlwiOmVbbl09XCJcIjpyP2Uuc2V0UHJvcGVydHkobix0KTpcIm51bWJlclwiIT10eXBlb2YgdHx8MD09PXR8fG5jLmhhcyhuKT9cImZsb2F0XCI9PT1uP2UuY3NzRmxvYXQ9dDplW25dPShcIlwiK3QpLnRyaW0oKTplW25dPXQrXCJweFwifWZ1bmN0aW9uIG5kKGUsbix0KXtpZihudWxsIT1uJiZcIm9iamVjdFwiIT10eXBlb2Ygbil0aHJvdyBFcnJvcihsKDYyKSk7aWYoZT1lLnN0eWxlLG51bGwhPXQpe2Zvcih2YXIgciBpbiB0KSF0Lmhhc093blByb3BlcnR5KHIpfHxudWxsIT1uJiZuLmhhc093blByb3BlcnR5KHIpfHwoMD09PXIuaW5kZXhPZihcIi0tXCIpP2Uuc2V0UHJvcGVydHkocixcIlwiKTpcImZsb2F0XCI9PT1yP2UuY3NzRmxvYXQ9XCJcIjplW3JdPVwiXCIpO2Zvcih2YXIgbyBpbiBuKXI9bltvXSxuLmhhc093blByb3BlcnR5KG8pJiZ0W29dIT09ciYmbnUoZSxvLHIpfWVsc2UgZm9yKHZhciBhIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShhKSYmbnUoZSxhLG5bYV0pfWZ1bmN0aW9uIG5mKGUpe2lmKC0xPT09ZS5pbmRleE9mKFwiLVwiKSlyZXR1cm4hMTtzd2l0Y2goZSl7Y2FzZVwiYW5ub3RhdGlvbi14bWxcIjpjYXNlXCJjb2xvci1wcm9maWxlXCI6Y2FzZVwiZm9udC1mYWNlXCI6Y2FzZVwiZm9udC1mYWNlLXNyY1wiOmNhc2VcImZvbnQtZmFjZS11cmlcIjpjYXNlXCJmb250LWZhY2UtZm9ybWF0XCI6Y2FzZVwiZm9udC1mYWNlLW5hbWVcIjpjYXNlXCJtaXNzaW5nLWdseXBoXCI6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMH19dmFyIG5wPW5ldyBNYXAoW1tcImFjY2VwdENoYXJzZXRcIixcImFjY2VwdC1jaGFyc2V0XCJdLFtcImh0bWxGb3JcIixcImZvclwiXSxbXCJodHRwRXF1aXZcIixcImh0dHAtZXF1aXZcIl0sW1wiY3Jvc3NPcmlnaW5cIixcImNyb3Nzb3JpZ2luXCJdLFtcImFjY2VudEhlaWdodFwiLFwiYWNjZW50LWhlaWdodFwiXSxbXCJhbGlnbm1lbnRCYXNlbGluZVwiLFwiYWxpZ25tZW50LWJhc2VsaW5lXCJdLFtcImFyYWJpY0Zvcm1cIixcImFyYWJpYy1mb3JtXCJdLFtcImJhc2VsaW5lU2hpZnRcIixcImJhc2VsaW5lLXNoaWZ0XCJdLFtcImNhcEhlaWdodFwiLFwiY2FwLWhlaWdodFwiXSxbXCJjbGlwUGF0aFwiLFwiY2xpcC1wYXRoXCJdLFtcImNsaXBSdWxlXCIsXCJjbGlwLXJ1bGVcIl0sW1wiY29sb3JJbnRlcnBvbGF0aW9uXCIsXCJjb2xvci1pbnRlcnBvbGF0aW9uXCJdLFtcImNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnNcIixcImNvbG9yLWludGVycG9sYXRpb24tZmlsdGVyc1wiXSxbXCJjb2xvclByb2ZpbGVcIixcImNvbG9yLXByb2ZpbGVcIl0sW1wiY29sb3JSZW5kZXJpbmdcIixcImNvbG9yLXJlbmRlcmluZ1wiXSxbXCJkb21pbmFudEJhc2VsaW5lXCIsXCJkb21pbmFudC1iYXNlbGluZVwiXSxbXCJlbmFibGVCYWNrZ3JvdW5kXCIsXCJlbmFibGUtYmFja2dyb3VuZFwiXSxbXCJmaWxsT3BhY2l0eVwiLFwiZmlsbC1vcGFjaXR5XCJdLFtcImZpbGxSdWxlXCIsXCJmaWxsLXJ1bGVcIl0sW1wiZmxvb2RDb2xvclwiLFwiZmxvb2QtY29sb3JcIl0sW1wiZmxvb2RPcGFjaXR5XCIsXCJmbG9vZC1vcGFjaXR5XCJdLFtcImZvbnRGYW1pbHlcIixcImZvbnQtZmFtaWx5XCJdLFtcImZvbnRTaXplXCIsXCJmb250LXNpemVcIl0sW1wiZm9udFNpemVBZGp1c3RcIixcImZvbnQtc2l6ZS1hZGp1c3RcIl0sW1wiZm9udFN0cmV0Y2hcIixcImZvbnQtc3RyZXRjaFwiXSxbXCJmb250U3R5bGVcIixcImZvbnQtc3R5bGVcIl0sW1wiZm9udFZhcmlhbnRcIixcImZvbnQtdmFyaWFudFwiXSxbXCJmb250V2VpZ2h0XCIsXCJmb250LXdlaWdodFwiXSxbXCJnbHlwaE5hbWVcIixcImdseXBoLW5hbWVcIl0sW1wiZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWxcIixcImdseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWxcIl0sW1wiZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsXCIsXCJnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbFwiXSxbXCJob3JpekFkdlhcIixcImhvcml6LWFkdi14XCJdLFtcImhvcml6T3JpZ2luWFwiLFwiaG9yaXotb3JpZ2luLXhcIl0sW1wiaW1hZ2VSZW5kZXJpbmdcIixcImltYWdlLXJlbmRlcmluZ1wiXSxbXCJsZXR0ZXJTcGFjaW5nXCIsXCJsZXR0ZXItc3BhY2luZ1wiXSxbXCJsaWdodGluZ0NvbG9yXCIsXCJsaWdodGluZy1jb2xvclwiXSxbXCJtYXJrZXJFbmRcIixcIm1hcmtlci1lbmRcIl0sW1wibWFya2VyTWlkXCIsXCJtYXJrZXItbWlkXCJdLFtcIm1hcmtlclN0YXJ0XCIsXCJtYXJrZXItc3RhcnRcIl0sW1wib3ZlcmxpbmVQb3NpdGlvblwiLFwib3ZlcmxpbmUtcG9zaXRpb25cIl0sW1wib3ZlcmxpbmVUaGlja25lc3NcIixcIm92ZXJsaW5lLXRoaWNrbmVzc1wiXSxbXCJwYWludE9yZGVyXCIsXCJwYWludC1vcmRlclwiXSxbXCJwYW5vc2UtMVwiLFwicGFub3NlLTFcIl0sW1wicG9pbnRlckV2ZW50c1wiLFwicG9pbnRlci1ldmVudHNcIl0sW1wicmVuZGVyaW5nSW50ZW50XCIsXCJyZW5kZXJpbmctaW50ZW50XCJdLFtcInNoYXBlUmVuZGVyaW5nXCIsXCJzaGFwZS1yZW5kZXJpbmdcIl0sW1wic3RvcENvbG9yXCIsXCJzdG9wLWNvbG9yXCJdLFtcInN0b3BPcGFjaXR5XCIsXCJzdG9wLW9wYWNpdHlcIl0sW1wic3RyaWtldGhyb3VnaFBvc2l0aW9uXCIsXCJzdHJpa2V0aHJvdWdoLXBvc2l0aW9uXCJdLFtcInN0cmlrZXRocm91Z2hUaGlja25lc3NcIixcInN0cmlrZXRocm91Z2gtdGhpY2tuZXNzXCJdLFtcInN0cm9rZURhc2hhcnJheVwiLFwic3Ryb2tlLWRhc2hhcnJheVwiXSxbXCJzdHJva2VEYXNob2Zmc2V0XCIsXCJzdHJva2UtZGFzaG9mZnNldFwiXSxbXCJzdHJva2VMaW5lY2FwXCIsXCJzdHJva2UtbGluZWNhcFwiXSxbXCJzdHJva2VMaW5lam9pblwiLFwic3Ryb2tlLWxpbmVqb2luXCJdLFtcInN0cm9rZU1pdGVybGltaXRcIixcInN0cm9rZS1taXRlcmxpbWl0XCJdLFtcInN0cm9rZU9wYWNpdHlcIixcInN0cm9rZS1vcGFjaXR5XCJdLFtcInN0cm9rZVdpZHRoXCIsXCJzdHJva2Utd2lkdGhcIl0sW1widGV4dEFuY2hvclwiLFwidGV4dC1hbmNob3JcIl0sW1widGV4dERlY29yYXRpb25cIixcInRleHQtZGVjb3JhdGlvblwiXSxbXCJ0ZXh0UmVuZGVyaW5nXCIsXCJ0ZXh0LXJlbmRlcmluZ1wiXSxbXCJ0cmFuc2Zvcm1PcmlnaW5cIixcInRyYW5zZm9ybS1vcmlnaW5cIl0sW1widW5kZXJsaW5lUG9zaXRpb25cIixcInVuZGVybGluZS1wb3NpdGlvblwiXSxbXCJ1bmRlcmxpbmVUaGlja25lc3NcIixcInVuZGVybGluZS10aGlja25lc3NcIl0sW1widW5pY29kZUJpZGlcIixcInVuaWNvZGUtYmlkaVwiXSxbXCJ1bmljb2RlUmFuZ2VcIixcInVuaWNvZGUtcmFuZ2VcIl0sW1widW5pdHNQZXJFbVwiLFwidW5pdHMtcGVyLWVtXCJdLFtcInZBbHBoYWJldGljXCIsXCJ2LWFscGhhYmV0aWNcIl0sW1widkhhbmdpbmdcIixcInYtaGFuZ2luZ1wiXSxbXCJ2SWRlb2dyYXBoaWNcIixcInYtaWRlb2dyYXBoaWNcIl0sW1widk1hdGhlbWF0aWNhbFwiLFwidi1tYXRoZW1hdGljYWxcIl0sW1widmVjdG9yRWZmZWN0XCIsXCJ2ZWN0b3ItZWZmZWN0XCJdLFtcInZlcnRBZHZZXCIsXCJ2ZXJ0LWFkdi15XCJdLFtcInZlcnRPcmlnaW5YXCIsXCJ2ZXJ0LW9yaWdpbi14XCJdLFtcInZlcnRPcmlnaW5ZXCIsXCJ2ZXJ0LW9yaWdpbi15XCJdLFtcIndvcmRTcGFjaW5nXCIsXCJ3b3JkLXNwYWNpbmdcIl0sW1wid3JpdGluZ01vZGVcIixcIndyaXRpbmctbW9kZVwiXSxbXCJ4bWxuc1hsaW5rXCIsXCJ4bWxuczp4bGlua1wiXSxbXCJ4SGVpZ2h0XCIsXCJ4LWhlaWdodFwiXV0pLG5oPS9eW1xcdTAwMDAtXFx1MDAxRiBdKmpbXFxyXFxuXFx0XSphW1xcclxcblxcdF0qdltcXHJcXG5cXHRdKmFbXFxyXFxuXFx0XSpzW1xcclxcblxcdF0qY1tcXHJcXG5cXHRdKnJbXFxyXFxuXFx0XSppW1xcclxcblxcdF0qcFtcXHJcXG5cXHRdKnRbXFxyXFxuXFx0XSo6L2k7ZnVuY3Rpb24gbmcoZSl7cmV0dXJuIG5oLnRlc3QoXCJcIitlKT9cImphdmFzY3JpcHQ6dGhyb3cgbmV3IEVycm9yKCdSZWFjdCBoYXMgYmxvY2tlZCBhIGphdmFzY3JpcHQ6IFVSTCBhcyBhIHNlY3VyaXR5IHByZWNhdXRpb24uJylcIjplfWZ1bmN0aW9uIG5tKCl7fXZhciBudj1udWxsO2Z1bmN0aW9uIG5iKGUpe3JldHVybihlPWUudGFyZ2V0fHxlLnNyY0VsZW1lbnR8fHdpbmRvdykuY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQmJihlPWUuY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQpLDM9PT1lLm5vZGVUeXBlP2UucGFyZW50Tm9kZTplfXZhciBueT1udWxsLG54PW51bGw7ZnVuY3Rpb24gbncoZSl7dmFyIG49ZVcoZSk7aWYobiYmKGU9bi5zdGF0ZU5vZGUpKXt2YXIgdD1lW2VEXXx8bnVsbDtzd2l0Y2goZT1uLnN0YXRlTm9kZSxuLnR5cGUpe2Nhc2VcImlucHV0XCI6aWYobnQoZSx0LnZhbHVlLHQuZGVmYXVsdFZhbHVlLHQuZGVmYXVsdFZhbHVlLHQuY2hlY2tlZCx0LmRlZmF1bHRDaGVja2VkLHQudHlwZSx0Lm5hbWUpLG49dC5uYW1lLFwicmFkaW9cIj09PXQudHlwZSYmbnVsbCE9bil7Zm9yKHQ9ZTt0LnBhcmVudE5vZGU7KXQ9dC5wYXJlbnROb2RlO2Zvcih0PXQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbbmFtZT1cIicrbm4oXCJcIituKSsnXCJdW3R5cGU9XCJyYWRpb1wiXScpLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtpZihyIT09ZSYmci5mb3JtPT09ZS5mb3JtKXt2YXIgbz1yW2VEXXx8bnVsbDtpZighbyl0aHJvdyBFcnJvcihsKDkwKSk7bnQocixvLnZhbHVlLG8uZGVmYXVsdFZhbHVlLG8uZGVmYXVsdFZhbHVlLG8uY2hlY2tlZCxvLmRlZmF1bHRDaGVja2VkLG8udHlwZSxvLm5hbWUpfX1mb3Iobj0wO248dC5sZW5ndGg7bisrKShyPXRbbl0pLmZvcm09PT1lLmZvcm0mJmU4KHIpfWJyZWFrO2Nhc2VcInRleHRhcmVhXCI6bmkoZSx0LnZhbHVlLHQuZGVmYXVsdFZhbHVlKTticmVhaztjYXNlXCJzZWxlY3RcIjpudWxsIT0obj10LnZhbHVlKSYmbmEoZSwhIXQubXVsdGlwbGUsbiwhMSl9fX12YXIgbmo9ITE7ZnVuY3Rpb24gbmsoZSxuLHQpe2lmKG5qKXJldHVybiBlKG4sdCk7bmo9ITA7dHJ5e3JldHVybiBlKG4pfWZpbmFsbHl7aWYobmo9ITEsKG51bGwhPT1ueXx8bnVsbCE9PW54KSYmKHNzKCksbnkmJihuPW55LGU9bngsbng9bnk9bnVsbCxudyhuKSxlKSkpZm9yKG49MDtuPGUubGVuZ3RoO24rKyludyhlW25dKX19ZnVuY3Rpb24gbkEoZSxuKXt2YXIgdD1lLnN0YXRlTm9kZTtpZihudWxsPT09dClyZXR1cm4gbnVsbDt2YXIgcj10W2VEXXx8bnVsbDtpZihudWxsPT09cilyZXR1cm4gbnVsbDtzd2l0Y2godD1yW25dLG4pe2Nhc2VcIm9uQ2xpY2tcIjpjYXNlXCJvbkNsaWNrQ2FwdHVyZVwiOmNhc2VcIm9uRG91YmxlQ2xpY2tcIjpjYXNlXCJvbkRvdWJsZUNsaWNrQ2FwdHVyZVwiOmNhc2VcIm9uTW91c2VEb3duXCI6Y2FzZVwib25Nb3VzZURvd25DYXB0dXJlXCI6Y2FzZVwib25Nb3VzZU1vdmVcIjpjYXNlXCJvbk1vdXNlTW92ZUNhcHR1cmVcIjpjYXNlXCJvbk1vdXNlVXBcIjpjYXNlXCJvbk1vdXNlVXBDYXB0dXJlXCI6Y2FzZVwib25Nb3VzZUVudGVyXCI6KHI9IXIuZGlzYWJsZWQpfHwocj1cImJ1dHRvblwiIT09KGU9ZS50eXBlKSYmXCJpbnB1dFwiIT09ZSYmXCJzZWxlY3RcIiE9PWUmJlwidGV4dGFyZWFcIiE9PWUpLGU9IXI7YnJlYWs7ZGVmYXVsdDplPSExfWlmKGUpcmV0dXJuIG51bGw7aWYodCYmXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBFcnJvcihsKDIzMSxuLHR5cGVvZiB0KSk7cmV0dXJuIHR9dmFyIG5PPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJnZvaWQgMCE9PXdpbmRvdy5kb2N1bWVudCYmdm9pZCAwIT09d2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQsbkM9ITE7aWYobk8pdHJ5e3ZhciBuUz17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoblMsXCJwYXNzaXZlXCIse2dldDpmdW5jdGlvbigpe25DPSEwfX0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwidGVzdFwiLG5TLG5TKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRlc3RcIixuUyxuUyl9Y2F0Y2goZSl7bkM9ITF9dmFyIG5FPW51bGwsbl89bnVsbCxuUD1udWxsO2Z1bmN0aW9uIG56KCl7aWYoblApcmV0dXJuIG5QO3ZhciBlLG4sdD1uXyxyPXQubGVuZ3RoLG89XCJ2YWx1ZVwiaW4gbkU/bkUudmFsdWU6bkUudGV4dENvbnRlbnQsYT1vLmxlbmd0aDtmb3IoZT0wO2U8ciYmdFtlXT09PW9bZV07ZSsrKTt2YXIgaT1yLWU7Zm9yKG49MTtuPD1pJiZ0W3Itbl09PT1vW2Etbl07bisrKTtyZXR1cm4gblA9by5zbGljZShlLDE8bj8xLW46dm9pZCAwKX1mdW5jdGlvbiBuTChlKXt2YXIgbj1lLmtleUNvZGU7cmV0dXJuXCJjaGFyQ29kZVwiaW4gZT8wPT09KGU9ZS5jaGFyQ29kZSkmJjEzPT09biYmKGU9MTMpOmU9biwxMD09PWUmJihlPTEzKSwzMjw9ZXx8MTM9PT1lP2U6MH1mdW5jdGlvbiBuVCgpe3JldHVybiEwfWZ1bmN0aW9uIG5SKCl7cmV0dXJuITF9ZnVuY3Rpb24gbk4oZSl7ZnVuY3Rpb24gbihuLHQscixvLGEpe2Zvcih2YXIgaSBpbiB0aGlzLl9yZWFjdE5hbWU9bix0aGlzLl90YXJnZXRJbnN0PXIsdGhpcy50eXBlPXQsdGhpcy5uYXRpdmVFdmVudD1vLHRoaXMudGFyZ2V0PWEsdGhpcy5jdXJyZW50VGFyZ2V0PW51bGwsZSllLmhhc093blByb3BlcnR5KGkpJiYobj1lW2ldLHRoaXNbaV09bj9uKG8pOm9baV0pO3JldHVybiB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD0obnVsbCE9by5kZWZhdWx0UHJldmVudGVkP28uZGVmYXVsdFByZXZlbnRlZDohMT09PW8ucmV0dXJuVmFsdWUpP25UOm5SLHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9blIsdGhpc31yZXR1cm4gZihuLnByb3RvdHlwZSx7cHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITA7dmFyIGU9dGhpcy5uYXRpdmVFdmVudDtlJiYoZS5wcmV2ZW50RGVmYXVsdD9lLnByZXZlbnREZWZhdWx0KCk6XCJ1bmtub3duXCIhPXR5cGVvZiBlLnJldHVyblZhbHVlJiYoZS5yZXR1cm5WYWx1ZT0hMSksdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9blQpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm5hdGl2ZUV2ZW50O2UmJihlLnN0b3BQcm9wYWdhdGlvbj9lLnN0b3BQcm9wYWdhdGlvbigpOlwidW5rbm93blwiIT10eXBlb2YgZS5jYW5jZWxCdWJibGUmJihlLmNhbmNlbEJ1YmJsZT0hMCksdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1uVCl9LHBlcnNpc3Q6ZnVuY3Rpb24oKXt9LGlzUGVyc2lzdGVudDpuVH0pLG59dmFyIG5ELG5CLG5NLG5JLG5ILG5GPXtldmVudFBoYXNlOjAsYnViYmxlczowLGNhbmNlbGFibGU6MCx0aW1lU3RhbXA6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudGltZVN0YW1wfHxEYXRlLm5vdygpfSxkZWZhdWx0UHJldmVudGVkOjAsaXNUcnVzdGVkOjB9LG5VPW5OKG5GKSxuVj1mKHt9LG5GLHt2aWV3OjAsZGV0YWlsOjB9KSxucT1uTihuViksblc9Zih7fSxuVix7c2NyZWVuWDowLHNjcmVlblk6MCxjbGllbnRYOjAsY2xpZW50WTowLHBhZ2VYOjAscGFnZVk6MCxjdHJsS2V5OjAsc2hpZnRLZXk6MCxhbHRLZXk6MCxtZXRhS2V5OjAsZ2V0TW9kaWZpZXJTdGF0ZTpuMixidXR0b246MCxidXR0b25zOjAscmVsYXRlZFRhcmdldDpmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZS5yZWxhdGVkVGFyZ2V0P2UuZnJvbUVsZW1lbnQ9PT1lLnNyY0VsZW1lbnQ/ZS50b0VsZW1lbnQ6ZS5mcm9tRWxlbWVudDplLnJlbGF0ZWRUYXJnZXR9LG1vdmVtZW50WDpmdW5jdGlvbihlKXtyZXR1cm5cIm1vdmVtZW50WFwiaW4gZT9lLm1vdmVtZW50WDooZSE9PW5IJiYobkgmJlwibW91c2Vtb3ZlXCI9PT1lLnR5cGU/KG5NPWUuc2NyZWVuWC1uSC5zY3JlZW5YLG5JPWUuc2NyZWVuWS1uSC5zY3JlZW5ZKTpuST1uTT0wLG5IPWUpLG5NKX0sbW92ZW1lbnRZOmZ1bmN0aW9uKGUpe3JldHVyblwibW92ZW1lbnRZXCJpbiBlP2UubW92ZW1lbnRZOm5JfX0pLG4kPW5OKG5XKSxuWj1uTihmKHt9LG5XLHtkYXRhVHJhbnNmZXI6MH0pKSxuWT1uTihmKHt9LG5WLHtyZWxhdGVkVGFyZ2V0OjB9KSksblg9bk4oZih7fSxuRix7YW5pbWF0aW9uTmFtZTowLGVsYXBzZWRUaW1lOjAscHNldWRvRWxlbWVudDowfSkpLG5LPW5OKGYoe30sbkYse2NsaXBib2FyZERhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuXCJjbGlwYm9hcmREYXRhXCJpbiBlP2UuY2xpcGJvYXJkRGF0YTp3aW5kb3cuY2xpcGJvYXJkRGF0YX19KSksblE9bk4oZih7fSxuRix7ZGF0YTowfSkpLG5HPXtFc2M6XCJFc2NhcGVcIixTcGFjZWJhcjpcIiBcIixMZWZ0OlwiQXJyb3dMZWZ0XCIsVXA6XCJBcnJvd1VwXCIsUmlnaHQ6XCJBcnJvd1JpZ2h0XCIsRG93bjpcIkFycm93RG93blwiLERlbDpcIkRlbGV0ZVwiLFdpbjpcIk9TXCIsTWVudTpcIkNvbnRleHRNZW51XCIsQXBwczpcIkNvbnRleHRNZW51XCIsU2Nyb2xsOlwiU2Nyb2xsTG9ja1wiLE1velByaW50YWJsZUtleTpcIlVuaWRlbnRpZmllZFwifSxuSj17ODpcIkJhY2tzcGFjZVwiLDk6XCJUYWJcIiwxMjpcIkNsZWFyXCIsMTM6XCJFbnRlclwiLDE2OlwiU2hpZnRcIiwxNzpcIkNvbnRyb2xcIiwxODpcIkFsdFwiLDE5OlwiUGF1c2VcIiwyMDpcIkNhcHNMb2NrXCIsMjc6XCJFc2NhcGVcIiwzMjpcIiBcIiwzMzpcIlBhZ2VVcFwiLDM0OlwiUGFnZURvd25cIiwzNTpcIkVuZFwiLDM2OlwiSG9tZVwiLDM3OlwiQXJyb3dMZWZ0XCIsMzg6XCJBcnJvd1VwXCIsMzk6XCJBcnJvd1JpZ2h0XCIsNDA6XCJBcnJvd0Rvd25cIiw0NTpcIkluc2VydFwiLDQ2OlwiRGVsZXRlXCIsMTEyOlwiRjFcIiwxMTM6XCJGMlwiLDExNDpcIkYzXCIsMTE1OlwiRjRcIiwxMTY6XCJGNVwiLDExNzpcIkY2XCIsMTE4OlwiRjdcIiwxMTk6XCJGOFwiLDEyMDpcIkY5XCIsMTIxOlwiRjEwXCIsMTIyOlwiRjExXCIsMTIzOlwiRjEyXCIsMTQ0OlwiTnVtTG9ja1wiLDE0NTpcIlNjcm9sbExvY2tcIiwyMjQ6XCJNZXRhXCJ9LG4wPXtBbHQ6XCJhbHRLZXlcIixDb250cm9sOlwiY3RybEtleVwiLE1ldGE6XCJtZXRhS2V5XCIsU2hpZnQ6XCJzaGlmdEtleVwifTtmdW5jdGlvbiBuMShlKXt2YXIgbj10aGlzLm5hdGl2ZUV2ZW50O3JldHVybiBuLmdldE1vZGlmaWVyU3RhdGU/bi5nZXRNb2RpZmllclN0YXRlKGUpOiEhKGU9bjBbZV0pJiYhIW5bZV19ZnVuY3Rpb24gbjIoKXtyZXR1cm4gbjF9dmFyIG40PW5OKGYoe30sblYse2tleTpmdW5jdGlvbihlKXtpZihlLmtleSl7dmFyIG49bkdbZS5rZXldfHxlLmtleTtpZihcIlVuaWRlbnRpZmllZFwiIT09bilyZXR1cm4gbn1yZXR1cm5cImtleXByZXNzXCI9PT1lLnR5cGU/MTM9PT0oZT1uTChlKSk/XCJFbnRlclwiOlN0cmluZy5mcm9tQ2hhckNvZGUoZSk6XCJrZXlkb3duXCI9PT1lLnR5cGV8fFwia2V5dXBcIj09PWUudHlwZT9uSltlLmtleUNvZGVdfHxcIlVuaWRlbnRpZmllZFwiOlwiXCJ9LGNvZGU6MCxsb2NhdGlvbjowLGN0cmxLZXk6MCxzaGlmdEtleTowLGFsdEtleTowLG1ldGFLZXk6MCxyZXBlYXQ6MCxsb2NhbGU6MCxnZXRNb2RpZmllclN0YXRlOm4yLGNoYXJDb2RlOmZ1bmN0aW9uKGUpe3JldHVyblwia2V5cHJlc3NcIj09PWUudHlwZT9uTChlKTowfSxrZXlDb2RlOmZ1bmN0aW9uKGUpe3JldHVyblwia2V5ZG93blwiPT09ZS50eXBlfHxcImtleXVwXCI9PT1lLnR5cGU/ZS5rZXlDb2RlOjB9LHdoaWNoOmZ1bmN0aW9uKGUpe3JldHVyblwia2V5cHJlc3NcIj09PWUudHlwZT9uTChlKTpcImtleWRvd25cIj09PWUudHlwZXx8XCJrZXl1cFwiPT09ZS50eXBlP2Uua2V5Q29kZTowfX0pKSxuNT1uTihmKHt9LG5XLHtwb2ludGVySWQ6MCx3aWR0aDowLGhlaWdodDowLHByZXNzdXJlOjAsdGFuZ2VudGlhbFByZXNzdXJlOjAsdGlsdFg6MCx0aWx0WTowLHR3aXN0OjAscG9pbnRlclR5cGU6MCxpc1ByaW1hcnk6MH0pKSxuMz1uTihmKHt9LG5WLHt0b3VjaGVzOjAsdGFyZ2V0VG91Y2hlczowLGNoYW5nZWRUb3VjaGVzOjAsYWx0S2V5OjAsbWV0YUtleTowLGN0cmxLZXk6MCxzaGlmdEtleTowLGdldE1vZGlmaWVyU3RhdGU6bjJ9KSksbjY9bk4oZih7fSxuRix7cHJvcGVydHlOYW1lOjAsZWxhcHNlZFRpbWU6MCxwc2V1ZG9FbGVtZW50OjB9KSksbjk9bk4oZih7fSxuVyx7ZGVsdGFYOmZ1bmN0aW9uKGUpe3JldHVyblwiZGVsdGFYXCJpbiBlP2UuZGVsdGFYOlwid2hlZWxEZWx0YVhcImluIGU/LWUud2hlZWxEZWx0YVg6MH0sZGVsdGFZOmZ1bmN0aW9uKGUpe3JldHVyblwiZGVsdGFZXCJpbiBlP2UuZGVsdGFZOlwid2hlZWxEZWx0YVlcImluIGU/LWUud2hlZWxEZWx0YVk6XCJ3aGVlbERlbHRhXCJpbiBlPy1lLndoZWVsRGVsdGE6MH0sZGVsdGFaOjAsZGVsdGFNb2RlOjB9KSksbjg9bk4oZih7fSxuRix7bmV3U3RhdGU6MCxvbGRTdGF0ZTowfSkpLG43PVs5LDEzLDI3LDMyXSx0ZT1uTyYmXCJDb21wb3NpdGlvbkV2ZW50XCJpbiB3aW5kb3csdG49bnVsbDtuTyYmXCJkb2N1bWVudE1vZGVcImluIGRvY3VtZW50JiYodG49ZG9jdW1lbnQuZG9jdW1lbnRNb2RlKTt2YXIgdHQ9bk8mJlwiVGV4dEV2ZW50XCJpbiB3aW5kb3cmJiF0bix0cj1uTyYmKCF0ZXx8dG4mJjg8dG4mJjExPj10biksdG89ITE7ZnVuY3Rpb24gdGEoZSxuKXtzd2l0Y2goZSl7Y2FzZVwia2V5dXBcIjpyZXR1cm4gLTEhPT1uNy5pbmRleE9mKG4ua2V5Q29kZSk7Y2FzZVwia2V5ZG93blwiOnJldHVybiAyMjkhPT1uLmtleUNvZGU7Y2FzZVwia2V5cHJlc3NcIjpjYXNlXCJtb3VzZWRvd25cIjpjYXNlXCJmb2N1c291dFwiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIHRpKGUpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZihlPWUuZGV0YWlsKSYmXCJkYXRhXCJpbiBlP2UuZGF0YTpudWxsfXZhciB0bD0hMSx0cz17Y29sb3I6ITAsZGF0ZTohMCxkYXRldGltZTohMCxcImRhdGV0aW1lLWxvY2FsXCI6ITAsZW1haWw6ITAsbW9udGg6ITAsbnVtYmVyOiEwLHBhc3N3b3JkOiEwLHJhbmdlOiEwLHNlYXJjaDohMCx0ZWw6ITAsdGV4dDohMCx0aW1lOiEwLHVybDohMCx3ZWVrOiEwfTtmdW5jdGlvbiB0YyhlKXt2YXIgbj1lJiZlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuXCJpbnB1dFwiPT09bj8hIXRzW2UudHlwZV06XCJ0ZXh0YXJlYVwiPT09bn1mdW5jdGlvbiB0dShlLG4sdCxyKXtueT9ueD9ueC5wdXNoKHIpOm54PVtyXTpueT1yLDA8KG49Y2UobixcIm9uQ2hhbmdlXCIpKS5sZW5ndGgmJih0PW5ldyBuVShcIm9uQ2hhbmdlXCIsXCJjaGFuZ2VcIixudWxsLHQsciksZS5wdXNoKHtldmVudDp0LGxpc3RlbmVyczpufSkpfXZhciB0ZD1udWxsLHRmPW51bGw7ZnVuY3Rpb24gdHAoZSl7czIoZSwwKX1mdW5jdGlvbiB0aChlKXtpZihlOChlJChlKSkpcmV0dXJuIGV9ZnVuY3Rpb24gdGcoZSxuKXtpZihcImNoYW5nZVwiPT09ZSlyZXR1cm4gbn12YXIgdG09ITE7aWYobk8pe2lmKG5PKXt2YXIgdHY9XCJvbmlucHV0XCJpbiBkb2N1bWVudDtpZighdHYpe3ZhciB0Yj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3RiLnNldEF0dHJpYnV0ZShcIm9uaW5wdXRcIixcInJldHVybjtcIiksdHY9XCJmdW5jdGlvblwiPT10eXBlb2YgdGIub25pbnB1dH1yPXR2fWVsc2Ugcj0hMTt0bT1yJiYoIWRvY3VtZW50LmRvY3VtZW50TW9kZXx8OTxkb2N1bWVudC5kb2N1bWVudE1vZGUpfWZ1bmN0aW9uIHR5KCl7dGQmJih0ZC5kZXRhY2hFdmVudChcIm9ucHJvcGVydHljaGFuZ2VcIix0eCksdGY9dGQ9bnVsbCl9ZnVuY3Rpb24gdHgoZSl7aWYoXCJ2YWx1ZVwiPT09ZS5wcm9wZXJ0eU5hbWUmJnRoKHRmKSl7dmFyIG49W107dHUobix0ZixlLG5iKGUpKSxuayh0cCxuKX19ZnVuY3Rpb24gdHcoZSxuLHQpe1wiZm9jdXNpblwiPT09ZT8odHkoKSx0ZD1uLHRmPXQsdGQuYXR0YWNoRXZlbnQoXCJvbnByb3BlcnR5Y2hhbmdlXCIsdHgpKTpcImZvY3Vzb3V0XCI9PT1lJiZ0eSgpfWZ1bmN0aW9uIHRqKGUpe2lmKFwic2VsZWN0aW9uY2hhbmdlXCI9PT1lfHxcImtleXVwXCI9PT1lfHxcImtleWRvd25cIj09PWUpcmV0dXJuIHRoKHRmKX1mdW5jdGlvbiB0ayhlLG4pe2lmKFwiY2xpY2tcIj09PWUpcmV0dXJuIHRoKG4pfWZ1bmN0aW9uIHRBKGUsbil7aWYoXCJpbnB1dFwiPT09ZXx8XCJjaGFuZ2VcIj09PWUpcmV0dXJuIHRoKG4pfXZhciB0Tz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuaXM/T2JqZWN0LmlzOmZ1bmN0aW9uKGUsbil7cmV0dXJuIGU9PT1uJiYoMCE9PWV8fDEvZT09MS9uKXx8ZSE9ZSYmbiE9bn07ZnVuY3Rpb24gdEMoZSxuKXtpZih0TyhlLG4pKXJldHVybiEwO2lmKFwib2JqZWN0XCIhPXR5cGVvZiBlfHxudWxsPT09ZXx8XCJvYmplY3RcIiE9dHlwZW9mIG58fG51bGw9PT1uKXJldHVybiExO3ZhciB0PU9iamVjdC5rZXlzKGUpLHI9T2JqZWN0LmtleXMobik7aWYodC5sZW5ndGghPT1yLmxlbmd0aClyZXR1cm4hMTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbz10W3JdO2lmKCFHLmNhbGwobixvKXx8IXRPKGVbb10sbltvXSkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gdFMoZSl7Zm9yKDtlJiZlLmZpcnN0Q2hpbGQ7KWU9ZS5maXJzdENoaWxkO3JldHVybiBlfWZ1bmN0aW9uIHRFKGUsbil7dmFyIHQscj10UyhlKTtmb3IoZT0wO3I7KXtpZigzPT09ci5ub2RlVHlwZSl7aWYodD1lK3IudGV4dENvbnRlbnQubGVuZ3RoLGU8PW4mJnQ+PW4pcmV0dXJue25vZGU6cixvZmZzZXQ6bi1lfTtlPXR9ZTp7Zm9yKDtyOyl7aWYoci5uZXh0U2libGluZyl7cj1yLm5leHRTaWJsaW5nO2JyZWFrIGV9cj1yLnBhcmVudE5vZGV9cj12b2lkIDB9cj10UyhyKX19ZnVuY3Rpb24gdF8oZSl7ZT1udWxsIT1lJiZudWxsIT1lLm93bmVyRG9jdW1lbnQmJm51bGwhPWUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldz9lLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc6d2luZG93O2Zvcih2YXIgbj1lNyhlLmRvY3VtZW50KTtuIGluc3RhbmNlb2YgZS5IVE1MSUZyYW1lRWxlbWVudDspe3RyeXt2YXIgdD1cInN0cmluZ1wiPT10eXBlb2Ygbi5jb250ZW50V2luZG93LmxvY2F0aW9uLmhyZWZ9Y2F0Y2goZSl7dD0hMX1pZih0KWU9bi5jb250ZW50V2luZG93O2Vsc2UgYnJlYWs7bj1lNyhlLmRvY3VtZW50KX1yZXR1cm4gbn1mdW5jdGlvbiB0UChlKXt2YXIgbj1lJiZlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIG4mJihcImlucHV0XCI9PT1uJiYoXCJ0ZXh0XCI9PT1lLnR5cGV8fFwic2VhcmNoXCI9PT1lLnR5cGV8fFwidGVsXCI9PT1lLnR5cGV8fFwidXJsXCI9PT1lLnR5cGV8fFwicGFzc3dvcmRcIj09PWUudHlwZSl8fFwidGV4dGFyZWFcIj09PW58fFwidHJ1ZVwiPT09ZS5jb250ZW50RWRpdGFibGUpfXZhciB0ej1uTyYmXCJkb2N1bWVudE1vZGVcImluIGRvY3VtZW50JiYxMT49ZG9jdW1lbnQuZG9jdW1lbnRNb2RlLHRMPW51bGwsdFQ9bnVsbCx0Uj1udWxsLHROPSExO2Z1bmN0aW9uIHREKGUsbix0KXt2YXIgcj10LndpbmRvdz09PXQ/dC5kb2N1bWVudDo5PT09dC5ub2RlVHlwZT90OnQub3duZXJEb2N1bWVudDt0Tnx8bnVsbD09dEx8fHRMIT09ZTcocil8fChyPVwic2VsZWN0aW9uU3RhcnRcImluKHI9dEwpJiZ0UChyKT97c3RhcnQ6ci5zZWxlY3Rpb25TdGFydCxlbmQ6ci5zZWxlY3Rpb25FbmR9OnthbmNob3JOb2RlOihyPShyLm93bmVyRG9jdW1lbnQmJnIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93KS5nZXRTZWxlY3Rpb24oKSkuYW5jaG9yTm9kZSxhbmNob3JPZmZzZXQ6ci5hbmNob3JPZmZzZXQsZm9jdXNOb2RlOnIuZm9jdXNOb2RlLGZvY3VzT2Zmc2V0OnIuZm9jdXNPZmZzZXR9LHRSJiZ0Qyh0UixyKXx8KHRSPXIsMDwocj1jZSh0VCxcIm9uU2VsZWN0XCIpKS5sZW5ndGgmJihuPW5ldyBuVShcIm9uU2VsZWN0XCIsXCJzZWxlY3RcIixudWxsLG4sdCksZS5wdXNoKHtldmVudDpuLGxpc3RlbmVyczpyfSksbi50YXJnZXQ9dEwpKSl9ZnVuY3Rpb24gdEIoZSxuKXt2YXIgdD17fTtyZXR1cm4gdFtlLnRvTG93ZXJDYXNlKCldPW4udG9Mb3dlckNhc2UoKSx0W1wiV2Via2l0XCIrZV09XCJ3ZWJraXRcIituLHRbXCJNb3pcIitlXT1cIm1velwiK24sdH12YXIgdE09e2FuaW1hdGlvbmVuZDp0QihcIkFuaW1hdGlvblwiLFwiQW5pbWF0aW9uRW5kXCIpLGFuaW1hdGlvbml0ZXJhdGlvbjp0QihcIkFuaW1hdGlvblwiLFwiQW5pbWF0aW9uSXRlcmF0aW9uXCIpLGFuaW1hdGlvbnN0YXJ0OnRCKFwiQW5pbWF0aW9uXCIsXCJBbmltYXRpb25TdGFydFwiKSx0cmFuc2l0aW9ucnVuOnRCKFwiVHJhbnNpdGlvblwiLFwiVHJhbnNpdGlvblJ1blwiKSx0cmFuc2l0aW9uc3RhcnQ6dEIoXCJUcmFuc2l0aW9uXCIsXCJUcmFuc2l0aW9uU3RhcnRcIiksdHJhbnNpdGlvbmNhbmNlbDp0QihcIlRyYW5zaXRpb25cIixcIlRyYW5zaXRpb25DYW5jZWxcIiksdHJhbnNpdGlvbmVuZDp0QihcIlRyYW5zaXRpb25cIixcIlRyYW5zaXRpb25FbmRcIil9LHRJPXt9LHRIPXt9O2Z1bmN0aW9uIHRGKGUpe2lmKHRJW2VdKXJldHVybiB0SVtlXTtpZighdE1bZV0pcmV0dXJuIGU7dmFyIG4sdD10TVtlXTtmb3IobiBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkobikmJm4gaW4gdEgpcmV0dXJuIHRJW2VdPXRbbl07cmV0dXJuIGV9bk8mJih0SD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLnN0eWxlLFwiQW5pbWF0aW9uRXZlbnRcImluIHdpbmRvd3x8KGRlbGV0ZSB0TS5hbmltYXRpb25lbmQuYW5pbWF0aW9uLGRlbGV0ZSB0TS5hbmltYXRpb25pdGVyYXRpb24uYW5pbWF0aW9uLGRlbGV0ZSB0TS5hbmltYXRpb25zdGFydC5hbmltYXRpb24pLFwiVHJhbnNpdGlvbkV2ZW50XCJpbiB3aW5kb3d8fGRlbGV0ZSB0TS50cmFuc2l0aW9uZW5kLnRyYW5zaXRpb24pO3ZhciB0VT10RihcImFuaW1hdGlvbmVuZFwiKSx0Vj10RihcImFuaW1hdGlvbml0ZXJhdGlvblwiKSx0cT10RihcImFuaW1hdGlvbnN0YXJ0XCIpLHRXPXRGKFwidHJhbnNpdGlvbnJ1blwiKSx0JD10RihcInRyYW5zaXRpb25zdGFydFwiKSx0Wj10RihcInRyYW5zaXRpb25jYW5jZWxcIiksdFk9dEYoXCJ0cmFuc2l0aW9uZW5kXCIpLHRYPW5ldyBNYXAsdEs9XCJhYm9ydCBhdXhDbGljayBiZWZvcmVUb2dnbGUgY2FuY2VsIGNhblBsYXkgY2FuUGxheVRocm91Z2ggY2xpY2sgY2xvc2UgY29udGV4dE1lbnUgY29weSBjdXQgZHJhZyBkcmFnRW5kIGRyYWdFbnRlciBkcmFnRXhpdCBkcmFnTGVhdmUgZHJhZ092ZXIgZHJhZ1N0YXJ0IGRyb3AgZHVyYXRpb25DaGFuZ2UgZW1wdGllZCBlbmNyeXB0ZWQgZW5kZWQgZXJyb3IgZ290UG9pbnRlckNhcHR1cmUgaW5wdXQgaW52YWxpZCBrZXlEb3duIGtleVByZXNzIGtleVVwIGxvYWQgbG9hZGVkRGF0YSBsb2FkZWRNZXRhZGF0YSBsb2FkU3RhcnQgbG9zdFBvaW50ZXJDYXB0dXJlIG1vdXNlRG93biBtb3VzZU1vdmUgbW91c2VPdXQgbW91c2VPdmVyIG1vdXNlVXAgcGFzdGUgcGF1c2UgcGxheSBwbGF5aW5nIHBvaW50ZXJDYW5jZWwgcG9pbnRlckRvd24gcG9pbnRlck1vdmUgcG9pbnRlck91dCBwb2ludGVyT3ZlciBwb2ludGVyVXAgcHJvZ3Jlc3MgcmF0ZUNoYW5nZSByZXNldCByZXNpemUgc2Vla2VkIHNlZWtpbmcgc3RhbGxlZCBzdWJtaXQgc3VzcGVuZCB0aW1lVXBkYXRlIHRvdWNoQ2FuY2VsIHRvdWNoRW5kIHRvdWNoU3RhcnQgdm9sdW1lQ2hhbmdlIHNjcm9sbCB0b2dnbGUgdG91Y2hNb3ZlIHdhaXRpbmcgd2hlZWxcIi5zcGxpdChcIiBcIik7ZnVuY3Rpb24gdFEoZSxuKXt0WC5zZXQoZSxuKSxlUShuLFtlXSl9dEsucHVzaChcInNjcm9sbEVuZFwiKTt2YXIgdEc9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVwb3J0RXJyb3I/cmVwb3J0RXJyb3I6ZnVuY3Rpb24oZSl7aWYoXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdyYmXCJmdW5jdGlvblwiPT10eXBlb2Ygd2luZG93LkVycm9yRXZlbnQpe3ZhciBuPW5ldyB3aW5kb3cuRXJyb3JFdmVudChcImVycm9yXCIse2J1YmJsZXM6ITAsY2FuY2VsYWJsZTohMCxtZXNzYWdlOlwib2JqZWN0XCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmXCJzdHJpbmdcIj09dHlwZW9mIGUubWVzc2FnZT9TdHJpbmcoZS5tZXNzYWdlKTpTdHJpbmcoZSksZXJyb3I6ZX0pO2lmKCF3aW5kb3cuZGlzcGF0Y2hFdmVudChuKSlyZXR1cm59ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2YgcHJvY2VzcyYmXCJmdW5jdGlvblwiPT10eXBlb2YgcHJvY2Vzcy5lbWl0KXJldHVybiB2b2lkIHByb2Nlc3MuZW1pdChcInVuY2F1Z2h0RXhjZXB0aW9uXCIsZSk7Y29uc29sZS5lcnJvcihlKX0sdEo9W10sdDA9MCx0MT0wO2Z1bmN0aW9uIHQyKCl7Zm9yKHZhciBlPXQwLG49dDE9dDA9MDtuPGU7KXt2YXIgdD10SltuXTt0SltuKytdPW51bGw7dmFyIHI9dEpbbl07dEpbbisrXT1udWxsO3ZhciBvPXRKW25dO3RKW24rK109bnVsbDt2YXIgYT10SltuXTtpZih0SltuKytdPW51bGwsbnVsbCE9PXImJm51bGwhPT1vKXt2YXIgaT1yLnBlbmRpbmc7bnVsbD09PWk/by5uZXh0PW86KG8ubmV4dD1pLm5leHQsaS5uZXh0PW8pLHIucGVuZGluZz1vfTAhPT1hJiZ0Nih0LG8sYSl9fWZ1bmN0aW9uIHQ0KGUsbix0LHIpe3RKW3QwKytdPWUsdEpbdDArK109bix0Slt0MCsrXT10LHRKW3QwKytdPXIsdDF8PXIsZS5sYW5lc3w9cixudWxsIT09KGU9ZS5hbHRlcm5hdGUpJiYoZS5sYW5lc3w9cil9ZnVuY3Rpb24gdDUoZSxuLHQscil7cmV0dXJuIHQ0KGUsbix0LHIpLHQ5KGUpfWZ1bmN0aW9uIHQzKGUsbil7cmV0dXJuIHQ0KGUsbnVsbCxudWxsLG4pLHQ5KGUpfWZ1bmN0aW9uIHQ2KGUsbix0KXtlLmxhbmVzfD10O3ZhciByPWUuYWx0ZXJuYXRlO251bGwhPT1yJiYoci5sYW5lc3w9dCk7Zm9yKHZhciBvPSExLGE9ZS5yZXR1cm47bnVsbCE9PWE7KWEuY2hpbGRMYW5lc3w9dCxudWxsIT09KHI9YS5hbHRlcm5hdGUpJiYoci5jaGlsZExhbmVzfD10KSwyMj09PWEudGFnJiYobnVsbD09PShlPWEuc3RhdGVOb2RlKXx8MSZlLl92aXNpYmlsaXR5fHwobz0hMCkpLGU9YSxhPWEucmV0dXJuO3JldHVybiAzPT09ZS50YWc/KGE9ZS5zdGF0ZU5vZGUsbyYmbnVsbCE9PW4mJihvPTMxLWVnKHQpLG51bGw9PT0ocj0oZT1hLmhpZGRlblVwZGF0ZXMpW29dKT9lW29dPVtuXTpyLnB1c2gobiksbi5sYW5lPTB4MjAwMDAwMDB8dCksYSk6bnVsbH1mdW5jdGlvbiB0OShlKXtpZig1MDxzZSl0aHJvdyBzZT0wLHNuPW51bGwsRXJyb3IobCgxODUpKTtmb3IodmFyIG49ZS5yZXR1cm47bnVsbCE9PW47KW49KGU9bikucmV0dXJuO3JldHVybiAzPT09ZS50YWc/ZS5zdGF0ZU5vZGU6bnVsbH12YXIgdDg9e307ZnVuY3Rpb24gdDcoZSxuLHQscil7dGhpcy50YWc9ZSx0aGlzLmtleT10LHRoaXMuc2libGluZz10aGlzLmNoaWxkPXRoaXMucmV0dXJuPXRoaXMuc3RhdGVOb2RlPXRoaXMudHlwZT10aGlzLmVsZW1lbnRUeXBlPW51bGwsdGhpcy5pbmRleD0wLHRoaXMucmVmQ2xlYW51cD10aGlzLnJlZj1udWxsLHRoaXMucGVuZGluZ1Byb3BzPW4sdGhpcy5kZXBlbmRlbmNpZXM9dGhpcy5tZW1vaXplZFN0YXRlPXRoaXMudXBkYXRlUXVldWU9dGhpcy5tZW1vaXplZFByb3BzPW51bGwsdGhpcy5tb2RlPXIsdGhpcy5zdWJ0cmVlRmxhZ3M9dGhpcy5mbGFncz0wLHRoaXMuZGVsZXRpb25zPW51bGwsdGhpcy5jaGlsZExhbmVzPXRoaXMubGFuZXM9MCx0aGlzLmFsdGVybmF0ZT1udWxsfWZ1bmN0aW9uIHJlKGUsbix0LHIpe3JldHVybiBuZXcgdDcoZSxuLHQscil9ZnVuY3Rpb24gcm4oZSl7cmV0dXJuISghKGU9ZS5wcm90b3R5cGUpfHwhZS5pc1JlYWN0Q29tcG9uZW50KX1mdW5jdGlvbiBydChlLG4pe3ZhciB0PWUuYWx0ZXJuYXRlO3JldHVybiBudWxsPT09dD8oKHQ9cmUoZS50YWcsbixlLmtleSxlLm1vZGUpKS5lbGVtZW50VHlwZT1lLmVsZW1lbnRUeXBlLHQudHlwZT1lLnR5cGUsdC5zdGF0ZU5vZGU9ZS5zdGF0ZU5vZGUsdC5hbHRlcm5hdGU9ZSxlLmFsdGVybmF0ZT10KToodC5wZW5kaW5nUHJvcHM9bix0LnR5cGU9ZS50eXBlLHQuZmxhZ3M9MCx0LnN1YnRyZWVGbGFncz0wLHQuZGVsZXRpb25zPW51bGwpLHQuZmxhZ3M9MHgzZTAwMDAwJmUuZmxhZ3MsdC5jaGlsZExhbmVzPWUuY2hpbGRMYW5lcyx0LmxhbmVzPWUubGFuZXMsdC5jaGlsZD1lLmNoaWxkLHQubWVtb2l6ZWRQcm9wcz1lLm1lbW9pemVkUHJvcHMsdC5tZW1vaXplZFN0YXRlPWUubWVtb2l6ZWRTdGF0ZSx0LnVwZGF0ZVF1ZXVlPWUudXBkYXRlUXVldWUsbj1lLmRlcGVuZGVuY2llcyx0LmRlcGVuZGVuY2llcz1udWxsPT09bj9udWxsOntsYW5lczpuLmxhbmVzLGZpcnN0Q29udGV4dDpuLmZpcnN0Q29udGV4dH0sdC5zaWJsaW5nPWUuc2libGluZyx0LmluZGV4PWUuaW5kZXgsdC5yZWY9ZS5yZWYsdC5yZWZDbGVhbnVwPWUucmVmQ2xlYW51cCx0fWZ1bmN0aW9uIHJyKGUsbil7ZS5mbGFncyY9MHgzZTAwMDAyO3ZhciB0PWUuYWx0ZXJuYXRlO3JldHVybiBudWxsPT09dD8oZS5jaGlsZExhbmVzPTAsZS5sYW5lcz1uLGUuY2hpbGQ9bnVsbCxlLnN1YnRyZWVGbGFncz0wLGUubWVtb2l6ZWRQcm9wcz1udWxsLGUubWVtb2l6ZWRTdGF0ZT1udWxsLGUudXBkYXRlUXVldWU9bnVsbCxlLmRlcGVuZGVuY2llcz1udWxsLGUuc3RhdGVOb2RlPW51bGwpOihlLmNoaWxkTGFuZXM9dC5jaGlsZExhbmVzLGUubGFuZXM9dC5sYW5lcyxlLmNoaWxkPXQuY2hpbGQsZS5zdWJ0cmVlRmxhZ3M9MCxlLmRlbGV0aW9ucz1udWxsLGUubWVtb2l6ZWRQcm9wcz10Lm1lbW9pemVkUHJvcHMsZS5tZW1vaXplZFN0YXRlPXQubWVtb2l6ZWRTdGF0ZSxlLnVwZGF0ZVF1ZXVlPXQudXBkYXRlUXVldWUsZS50eXBlPXQudHlwZSxlLmRlcGVuZGVuY2llcz1udWxsPT09KG49dC5kZXBlbmRlbmNpZXMpP251bGw6e2xhbmVzOm4ubGFuZXMsZmlyc3RDb250ZXh0Om4uZmlyc3RDb250ZXh0fSksZX1mdW5jdGlvbiBybyhlLG4sdCxyLG8sYSl7dmFyIGk9MDtpZihyPWUsXCJmdW5jdGlvblwiPT10eXBlb2YgZSlybihlKSYmKGk9MSk7ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgZSlpPSFmdW5jdGlvbihlLG4sdCl7aWYoMT09PXR8fG51bGwhPW4uaXRlbVByb3ApcmV0dXJuITE7c3dpdGNoKGUpe2Nhc2VcIm1ldGFcIjpjYXNlXCJ0aXRsZVwiOnJldHVybiEwO2Nhc2VcInN0eWxlXCI6aWYoXCJzdHJpbmdcIiE9dHlwZW9mIG4ucHJlY2VkZW5jZXx8XCJzdHJpbmdcIiE9dHlwZW9mIG4uaHJlZnx8XCJcIj09PW4uaHJlZilicmVhaztyZXR1cm4hMDtjYXNlXCJsaW5rXCI6aWYoXCJzdHJpbmdcIiE9dHlwZW9mIG4ucmVsfHxcInN0cmluZ1wiIT10eXBlb2Ygbi5ocmVmfHxcIlwiPT09bi5ocmVmfHxuLm9uTG9hZHx8bi5vbkVycm9yKWJyZWFrO2lmKFwic3R5bGVzaGVldFwiPT09bi5yZWwpcmV0dXJuIGU9bi5kaXNhYmxlZCxcInN0cmluZ1wiPT10eXBlb2Ygbi5wcmVjZWRlbmNlJiZudWxsPT1lO3JldHVybiEwO2Nhc2VcInNjcmlwdFwiOmlmKG4uYXN5bmMmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIG4uYXN5bmMmJlwic3ltYm9sXCIhPXR5cGVvZiBuLmFzeW5jJiYhbi5vbkxvYWQmJiFuLm9uRXJyb3ImJm4uc3JjJiZcInN0cmluZ1wiPT10eXBlb2Ygbi5zcmMpcmV0dXJuITB9cmV0dXJuITF9KGUsdCxILmN1cnJlbnQpP1wiaHRtbFwiPT09ZXx8XCJoZWFkXCI9PT1lfHxcImJvZHlcIj09PWU/Mjc6NToyNjtlbHNlIGU6c3dpdGNoKGUpe2Nhc2UgQzpyZXR1cm4oZT1yZSgzMSx0LG4sbykpLmVsZW1lbnRUeXBlPUMsZS5sYW5lcz1hLGU7Y2FzZSBtOnJldHVybiByYSh0LmNoaWxkcmVuLG8sYSxuKTtjYXNlIHY6aT04LG98PTI0O2JyZWFrO2Nhc2UgYjpyZXR1cm4oZT1yZSgxMix0LG4sMnxvKSkuZWxlbWVudFR5cGU9YixlLmxhbmVzPWEsZTtjYXNlIGo6cmV0dXJuKGU9cmUoMTMsdCxuLG8pKS5lbGVtZW50VHlwZT1qLGUubGFuZXM9YSxlO2Nhc2UgazpyZXR1cm4oZT1yZSgxOSx0LG4sbykpLmVsZW1lbnRUeXBlPWssZS5sYW5lcz1hLGU7ZGVmYXVsdDppZihcIm9iamVjdFwiPT10eXBlb2YgZSYmbnVsbCE9PWUpc3dpdGNoKGUuJCR0eXBlb2Ype2Nhc2UgeDppPTEwO2JyZWFrIGU7Y2FzZSB5Omk9OTticmVhayBlO2Nhc2UgdzppPTExO2JyZWFrIGU7Y2FzZSBBOmk9MTQ7YnJlYWsgZTtjYXNlIE86aT0xNixyPW51bGw7YnJlYWsgZX1pPTI5LHQ9RXJyb3IobCgxMzAsbnVsbD09PWU/XCJudWxsXCI6dHlwZW9mIGUsXCJcIikpLHI9bnVsbH1yZXR1cm4obj1yZShpLHQsbixvKSkuZWxlbWVudFR5cGU9ZSxuLnR5cGU9cixuLmxhbmVzPWEsbn1mdW5jdGlvbiByYShlLG4sdCxyKXtyZXR1cm4oZT1yZSg3LGUscixuKSkubGFuZXM9dCxlfWZ1bmN0aW9uIHJpKGUsbix0KXtyZXR1cm4oZT1yZSg2LGUsbnVsbCxuKSkubGFuZXM9dCxlfWZ1bmN0aW9uIHJsKGUpe3ZhciBuPXJlKDE4LG51bGwsbnVsbCwwKTtyZXR1cm4gbi5zdGF0ZU5vZGU9ZSxufWZ1bmN0aW9uIHJzKGUsbix0KXtyZXR1cm4obj1yZSg0LG51bGwhPT1lLmNoaWxkcmVuP2UuY2hpbGRyZW46W10sZS5rZXksbikpLmxhbmVzPXQsbi5zdGF0ZU5vZGU9e2NvbnRhaW5lckluZm86ZS5jb250YWluZXJJbmZvLHBlbmRpbmdDaGlsZHJlbjpudWxsLGltcGxlbWVudGF0aW9uOmUuaW1wbGVtZW50YXRpb259LG59dmFyIHJjPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHJ1KGUsbil7aWYoXCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lKXt2YXIgdD1yYy5nZXQoZSk7cmV0dXJuIHZvaWQgMCE9PXQ/dDoobj17dmFsdWU6ZSxzb3VyY2U6bixzdGFjazpRKG4pfSxyYy5zZXQoZSxuKSxuKX1yZXR1cm57dmFsdWU6ZSxzb3VyY2U6bixzdGFjazpRKG4pfX12YXIgcmQ9W10scmY9MCxycD1udWxsLHJoPTAscmc9W10scm09MCxydj1udWxsLHJiPTEscnk9XCJcIjtmdW5jdGlvbiByeChlLG4pe3JkW3JmKytdPXJoLHJkW3JmKytdPXJwLHJwPWUscmg9bn1mdW5jdGlvbiBydyhlLG4sdCl7cmdbcm0rK109cmIscmdbcm0rK109cnkscmdbcm0rK109cnYscnY9ZTt2YXIgcj1yYjtlPXJ5O3ZhciBvPTMyLWVnKHIpLTE7ciY9figxPDxvKSx0Kz0xO3ZhciBhPTMyLWVnKG4pK287aWYoMzA8YSl7dmFyIGk9by1vJTU7YT0ociYoMTw8aSktMSkudG9TdHJpbmcoMzIpLHI+Pj1pLG8tPWkscmI9MTw8MzItZWcobikrb3x0PDxvfHIscnk9YStlfWVsc2UgcmI9MTw8YXx0PDxvfHIscnk9ZX1mdW5jdGlvbiByaihlKXtudWxsIT09ZS5yZXR1cm4mJihyeChlLDEpLHJ3KGUsMSwwKSl9ZnVuY3Rpb24gcmsoZSl7Zm9yKDtlPT09cnA7KXJwPXJkWy0tcmZdLHJkW3JmXT1udWxsLHJoPXJkWy0tcmZdLHJkW3JmXT1udWxsO2Zvcig7ZT09PXJ2Oylydj1yZ1stLXJtXSxyZ1tybV09bnVsbCxyeT1yZ1stLXJtXSxyZ1tybV09bnVsbCxyYj1yZ1stLXJtXSxyZ1tybV09bnVsbH1mdW5jdGlvbiByQShlLG4pe3JnW3JtKytdPXJiLHJnW3JtKytdPXJ5LHJnW3JtKytdPXJ2LHJiPW4uaWQscnk9bi5vdmVyZmxvdyxydj1lfXZhciByTz1udWxsLHJDPW51bGwsclM9ITEsckU9bnVsbCxyXz0hMSxyUD1FcnJvcihsKDUxOSkpO2Z1bmN0aW9uIHJ6KGUpe3ZhciBuPUVycm9yKGwoNDE4LDE8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0/XCJ0ZXh0XCI6XCJIVE1MXCIsXCJcIikpO3Rocm93IHJCKHJ1KG4sZSkpLHJQfWZ1bmN0aW9uIHJMKGUpe3ZhciBuPWUuc3RhdGVOb2RlLHQ9ZS50eXBlLHI9ZS5tZW1vaXplZFByb3BzO3N3aXRjaChuW2VOXT1lLG5bZURdPXIsdCl7Y2FzZVwiZGlhbG9nXCI6czQoXCJjYW5jZWxcIixuKSxzNChcImNsb3NlXCIsbik7YnJlYWs7Y2FzZVwiaWZyYW1lXCI6Y2FzZVwib2JqZWN0XCI6Y2FzZVwiZW1iZWRcIjpzNChcImxvYWRcIixuKTticmVhaztjYXNlXCJ2aWRlb1wiOmNhc2VcImF1ZGlvXCI6Zm9yKHQ9MDt0PHMwLmxlbmd0aDt0KyspczQoczBbdF0sbik7YnJlYWs7Y2FzZVwic291cmNlXCI6czQoXCJlcnJvclwiLG4pO2JyZWFrO2Nhc2VcImltZ1wiOmNhc2VcImltYWdlXCI6Y2FzZVwibGlua1wiOnM0KFwiZXJyb3JcIixuKSxzNChcImxvYWRcIixuKTticmVhaztjYXNlXCJkZXRhaWxzXCI6czQoXCJ0b2dnbGVcIixuKTticmVhaztjYXNlXCJpbnB1dFwiOnM0KFwiaW52YWxpZFwiLG4pLG5yKG4sci52YWx1ZSxyLmRlZmF1bHRWYWx1ZSxyLmNoZWNrZWQsci5kZWZhdWx0Q2hlY2tlZCxyLnR5cGUsci5uYW1lLCEwKTticmVhaztjYXNlXCJzZWxlY3RcIjpzNChcImludmFsaWRcIixuKTticmVhaztjYXNlXCJ0ZXh0YXJlYVwiOnM0KFwiaW52YWxpZFwiLG4pLG5sKG4sci52YWx1ZSxyLmRlZmF1bHRWYWx1ZSxyLmNoaWxkcmVuKX1cInN0cmluZ1wiIT10eXBlb2YodD1yLmNoaWxkcmVuKSYmXCJudW1iZXJcIiE9dHlwZW9mIHQmJlwiYmlnaW50XCIhPXR5cGVvZiB0fHxuLnRleHRDb250ZW50PT09XCJcIit0fHwhMD09PXIuc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nfHxjaShuLnRleHRDb250ZW50LHQpPyhudWxsIT1yLnBvcG92ZXImJihzNChcImJlZm9yZXRvZ2dsZVwiLG4pLHM0KFwidG9nZ2xlXCIsbikpLG51bGwhPXIub25TY3JvbGwmJnM0KFwic2Nyb2xsXCIsbiksbnVsbCE9ci5vblNjcm9sbEVuZCYmczQoXCJzY3JvbGxlbmRcIixuKSxudWxsIT1yLm9uQ2xpY2smJihuLm9uY2xpY2s9bm0pLG49ITApOm49ITEsbnx8cnooZSwhMCl9ZnVuY3Rpb24gclQoZSl7Zm9yKHJPPWUucmV0dXJuO3JPOylzd2l0Y2gock8udGFnKXtjYXNlIDU6Y2FzZSAzMTpjYXNlIDEzOnJfPSExO3JldHVybjtjYXNlIDI3OmNhc2UgMzpyXz0hMDtyZXR1cm47ZGVmYXVsdDpyTz1yTy5yZXR1cm59fWZ1bmN0aW9uIHJSKGUpe2lmKGUhPT1yTylyZXR1cm4hMTtpZighclMpcmV0dXJuIHJUKGUpLHJTPSEwLCExO3ZhciBuLHQ9ZS50YWc7aWYoKG49MyE9PXQmJjI3IT09dCkmJigobj01PT09dCkmJihuPVwiZm9ybVwiPT09KG49ZS50eXBlKXx8XCJidXR0b25cIj09PW58fGNnKGUudHlwZSxlLm1lbW9pemVkUHJvcHMpKSxuPSFuKSxuJiZyQyYmcnooZSksclQoZSksMTM9PT10KXtpZighKGU9bnVsbCE9PShlPWUubWVtb2l6ZWRTdGF0ZSk/ZS5kZWh5ZHJhdGVkOm51bGwpKXRocm93IEVycm9yKGwoMzE3KSk7ckM9Y3ooZSl9ZWxzZSBpZigzMT09PXQpe2lmKCEoZT1udWxsIT09KGU9ZS5tZW1vaXplZFN0YXRlKT9lLmRlaHlkcmF0ZWQ6bnVsbCkpdGhyb3cgRXJyb3IobCgzMTcpKTtyQz1jeihlKX1lbHNlIDI3PT09dD8odD1yQyxjaihlLnR5cGUpPyhlPWNQLGNQPW51bGwsckM9ZSk6ckM9dCk6ckM9ck8/Y18oZS5zdGF0ZU5vZGUubmV4dFNpYmxpbmcpOm51bGw7cmV0dXJuITB9ZnVuY3Rpb24gck4oKXtyQz1yTz1udWxsLHJTPSExfWZ1bmN0aW9uIHJEKCl7dmFyIGU9ckU7cmV0dXJuIG51bGwhPT1lJiYobnVsbD09PWxRP2xRPWU6bFEucHVzaC5hcHBseShsUSxlKSxyRT1udWxsKSxlfWZ1bmN0aW9uIHJCKGUpe251bGw9PT1yRT9yRT1bZV06ckUucHVzaChlKX12YXIgck09QihudWxsKSxyST1udWxsLHJIPW51bGw7ZnVuY3Rpb24gckYoZSxuLHQpe0kock0sbi5fY3VycmVudFZhbHVlKSxuLl9jdXJyZW50VmFsdWU9dH1mdW5jdGlvbiByVShlKXtlLl9jdXJyZW50VmFsdWU9ck0uY3VycmVudCxNKHJNKX1mdW5jdGlvbiByVihlLG4sdCl7Zm9yKDtudWxsIT09ZTspe3ZhciByPWUuYWx0ZXJuYXRlO2lmKChlLmNoaWxkTGFuZXMmbikhPT1uPyhlLmNoaWxkTGFuZXN8PW4sbnVsbCE9PXImJihyLmNoaWxkTGFuZXN8PW4pKTpudWxsIT09ciYmKHIuY2hpbGRMYW5lcyZuKSE9PW4mJihyLmNoaWxkTGFuZXN8PW4pLGU9PT10KWJyZWFrO2U9ZS5yZXR1cm59fWZ1bmN0aW9uIHJxKGUsbix0LHIpe3ZhciBvPWUuY2hpbGQ7Zm9yKG51bGwhPT1vJiYoby5yZXR1cm49ZSk7bnVsbCE9PW87KXt2YXIgYT1vLmRlcGVuZGVuY2llcztpZihudWxsIT09YSl7dmFyIGk9by5jaGlsZDthPWEuZmlyc3RDb250ZXh0O2U6Zm9yKDtudWxsIT09YTspe3ZhciBzPWE7YT1vO2Zvcih2YXIgYz0wO2M8bi5sZW5ndGg7YysrKWlmKHMuY29udGV4dD09PW5bY10pe2EubGFuZXN8PXQsbnVsbCE9PShzPWEuYWx0ZXJuYXRlKSYmKHMubGFuZXN8PXQpLHJWKGEucmV0dXJuLHQsZSkscnx8KGk9bnVsbCk7YnJlYWsgZX1hPXMubmV4dH19ZWxzZSBpZigxOD09PW8udGFnKXtpZihudWxsPT09KGk9by5yZXR1cm4pKXRocm93IEVycm9yKGwoMzQxKSk7aS5sYW5lc3w9dCxudWxsIT09KGE9aS5hbHRlcm5hdGUpJiYoYS5sYW5lc3w9dCksclYoaSx0LGUpLGk9bnVsbH1lbHNlIGk9by5jaGlsZDtpZihudWxsIT09aSlpLnJldHVybj1vO2Vsc2UgZm9yKGk9bztudWxsIT09aTspe2lmKGk9PT1lKXtpPW51bGw7YnJlYWt9aWYobnVsbCE9PShvPWkuc2libGluZykpe28ucmV0dXJuPWkucmV0dXJuLGk9bzticmVha31pPWkucmV0dXJufW89aX19ZnVuY3Rpb24gclcoZSxuLHQscil7ZT1udWxsO2Zvcih2YXIgbz1uLGE9ITE7bnVsbCE9PW87KXtpZighYSl7aWYoMCE9KDUyNDI4OCZvLmZsYWdzKSlhPSEwO2Vsc2UgaWYoMCE9KDI2MjE0NCZvLmZsYWdzKSlicmVha31pZigxMD09PW8udGFnKXt2YXIgaT1vLmFsdGVybmF0ZTtpZihudWxsPT09aSl0aHJvdyBFcnJvcihsKDM4NykpO2lmKG51bGwhPT0oaT1pLm1lbW9pemVkUHJvcHMpKXt2YXIgcz1vLnR5cGU7dE8oby5wZW5kaW5nUHJvcHMudmFsdWUsaS52YWx1ZSl8fChudWxsIT09ZT9lLnB1c2gocyk6ZT1bc10pfX1lbHNlIGlmKG89PT1WLmN1cnJlbnQpe2lmKG51bGw9PT0oaT1vLmFsdGVybmF0ZSkpdGhyb3cgRXJyb3IobCgzODcpKTtpLm1lbW9pemVkU3RhdGUubWVtb2l6ZWRTdGF0ZSE9PW8ubWVtb2l6ZWRTdGF0ZS5tZW1vaXplZFN0YXRlJiYobnVsbCE9PWU/ZS5wdXNoKGM2KTplPVtjNl0pfW89by5yZXR1cm59bnVsbCE9PWUmJnJxKG4sZSx0LHIpLG4uZmxhZ3N8PTI2MjE0NH1mdW5jdGlvbiByJChlKXtmb3IoZT1lLmZpcnN0Q29udGV4dDtudWxsIT09ZTspe2lmKCF0TyhlLmNvbnRleHQuX2N1cnJlbnRWYWx1ZSxlLm1lbW9pemVkVmFsdWUpKXJldHVybiEwO2U9ZS5uZXh0fXJldHVybiExfWZ1bmN0aW9uIHJaKGUpe3JJPWUsckg9bnVsbCxudWxsIT09KGU9ZS5kZXBlbmRlbmNpZXMpJiYoZS5maXJzdENvbnRleHQ9bnVsbCl9ZnVuY3Rpb24gclkoZSl7cmV0dXJuIHJLKHJJLGUpfWZ1bmN0aW9uIHJYKGUsbil7cmV0dXJuIG51bGw9PT1ySSYmclooZSkscksoZSxuKX1mdW5jdGlvbiBySyhlLG4pe3ZhciB0PW4uX2N1cnJlbnRWYWx1ZTtpZihuPXtjb250ZXh0Om4sbWVtb2l6ZWRWYWx1ZTp0LG5leHQ6bnVsbH0sbnVsbD09PXJIKXtpZihudWxsPT09ZSl0aHJvdyBFcnJvcihsKDMwOCkpO3JIPW4sZS5kZXBlbmRlbmNpZXM9e2xhbmVzOjAsZmlyc3RDb250ZXh0Om59LGUuZmxhZ3N8PTUyNDI4OH1lbHNlIHJIPXJILm5leHQ9bjtyZXR1cm4gdH12YXIgclE9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIEFib3J0Q29udHJvbGxlcj9BYm9ydENvbnRyb2xsZXI6ZnVuY3Rpb24oKXt2YXIgZT1bXSxuPXRoaXMuc2lnbmFsPXthYm9ydGVkOiExLGFkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24obix0KXtlLnB1c2godCl9fTt0aGlzLmFib3J0PWZ1bmN0aW9uKCl7bi5hYm9ydGVkPSEwLGUuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gZSgpfSl9fSxyRz1vLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2sscko9by51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSxyMD17JCR0eXBlb2Y6eCxDb25zdW1lcjpudWxsLFByb3ZpZGVyOm51bGwsX2N1cnJlbnRWYWx1ZTpudWxsLF9jdXJyZW50VmFsdWUyOm51bGwsX3RocmVhZENvdW50OjB9O2Z1bmN0aW9uIHIxKCl7cmV0dXJue2NvbnRyb2xsZXI6bmV3IHJRLGRhdGE6bmV3IE1hcCxyZWZDb3VudDowfX1mdW5jdGlvbiByMihlKXtlLnJlZkNvdW50LS0sMD09PWUucmVmQ291bnQmJnJHKHJKLGZ1bmN0aW9uKCl7ZS5jb250cm9sbGVyLmFib3J0KCl9KX12YXIgcjQ9bnVsbCxyNT0wLHIzPTAscjY9bnVsbDtmdW5jdGlvbiByOSgpe2lmKDA9PS0tcjUmJm51bGwhPT1yNCl7bnVsbCE9PXI2JiYocjYuc3RhdHVzPVwiZnVsZmlsbGVkXCIpO3ZhciBlPXI0O3I0PW51bGwscjM9MCxyNj1udWxsO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKSgwLGVbbl0pKCl9fXZhciByOD1MLlM7TC5TPWZ1bmN0aW9uKGUsbil7XCJvYmplY3RcIj09dHlwZW9mIG4mJm51bGwhPT1uJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLnRoZW4mJmZ1bmN0aW9uKGUsbil7aWYobnVsbD09PXI0KXt2YXIgdD1yND1bXTtyNT0wLHIzPXNYKCkscjY9e3N0YXR1czpcInBlbmRpbmdcIix2YWx1ZTp2b2lkIDAsdGhlbjpmdW5jdGlvbihlKXt0LnB1c2goZSl9fX1yNSsrLG4udGhlbihyOSxyOSl9KDAsbiksbnVsbCE9PXI4JiZyOChlLG4pfTt2YXIgcjc9QihudWxsKTtmdW5jdGlvbiBvZSgpe3ZhciBlPXI3LmN1cnJlbnQ7cmV0dXJuIG51bGwhPT1lP2U6bE4ucG9vbGVkQ2FjaGV9ZnVuY3Rpb24gb24oZSxuKXtudWxsPT09bj9JKHI3LHI3LmN1cnJlbnQpOkkocjcsbi5wb29sKX1mdW5jdGlvbiBvdCgpe3ZhciBlPW9lKCk7cmV0dXJuIG51bGw9PT1lP251bGw6e3BhcmVudDpyMC5fY3VycmVudFZhbHVlLHBvb2w6ZX19dmFyIG9yPUVycm9yKGwoNDYwKSksb289RXJyb3IobCg0NzQpKSxvYT1FcnJvcihsKDU0MikpLG9pPXt0aGVuOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gb2woZSl7cmV0dXJuXCJmdWxmaWxsZWRcIj09PShlPWUuc3RhdHVzKXx8XCJyZWplY3RlZFwiPT09ZX1mdW5jdGlvbiBvcyhlLG4sdCl7c3dpdGNoKHZvaWQgMD09PSh0PWVbdF0pP2UucHVzaChuKTp0IT09biYmKG4udGhlbihubSxubSksbj10KSxuLnN0YXR1cyl7Y2FzZVwiZnVsZmlsbGVkXCI6cmV0dXJuIG4udmFsdWU7Y2FzZVwicmVqZWN0ZWRcIjp0aHJvdyBvZChlPW4ucmVhc29uKSxlO2RlZmF1bHQ6aWYoXCJzdHJpbmdcIj09dHlwZW9mIG4uc3RhdHVzKW4udGhlbihubSxubSk7ZWxzZXtpZihudWxsIT09KGU9bE4pJiYxMDA8ZS5zaGVsbFN1c3BlbmRDb3VudGVyKXRocm93IEVycm9yKGwoNDgyKSk7KGU9bikuc3RhdHVzPVwicGVuZGluZ1wiLGUudGhlbihmdW5jdGlvbihlKXtpZihcInBlbmRpbmdcIj09PW4uc3RhdHVzKXt2YXIgdD1uO3Quc3RhdHVzPVwiZnVsZmlsbGVkXCIsdC52YWx1ZT1lfX0sZnVuY3Rpb24oZSl7aWYoXCJwZW5kaW5nXCI9PT1uLnN0YXR1cyl7dmFyIHQ9bjt0LnN0YXR1cz1cInJlamVjdGVkXCIsdC5yZWFzb249ZX19KX1zd2l0Y2gobi5zdGF0dXMpe2Nhc2VcImZ1bGZpbGxlZFwiOnJldHVybiBuLnZhbHVlO2Nhc2VcInJlamVjdGVkXCI6dGhyb3cgb2QoZT1uLnJlYXNvbiksZX10aHJvdyBvYz1uLG9yfX12YXIgb2M9bnVsbDtmdW5jdGlvbiBvdSgpe2lmKG51bGw9PT1vYyl0aHJvdyBFcnJvcihsKDQ1OSkpO3ZhciBlPW9jO3JldHVybiBvYz1udWxsLGV9ZnVuY3Rpb24gb2QoZSl7aWYoZT09PW9yfHxlPT09b2EpdGhyb3cgRXJyb3IobCg0ODMpKX12YXIgb2Y9bnVsbCxvcD0wO2Z1bmN0aW9uIG9oKGUpe3ZhciBuPW9wO3JldHVybiBvcCs9MSxudWxsPT09b2YmJihvZj1bXSksb3Mob2YsZSxuKX1mdW5jdGlvbiBvZyhlLG4pe2UucmVmPXZvaWQgMCE9PShuPW4ucHJvcHMucmVmKT9uOm51bGx9ZnVuY3Rpb24gb20oZSxuKXtpZihuLiQkdHlwZW9mPT09cCl0aHJvdyBFcnJvcihsKDUyNSkpO3Rocm93IEVycm9yKGwoMzEsXCJbb2JqZWN0IE9iamVjdF1cIj09PShlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuKSk/XCJvYmplY3Qgd2l0aCBrZXlzIHtcIitPYmplY3Qua2V5cyhuKS5qb2luKFwiLCBcIikrXCJ9XCI6ZSkpfWZ1bmN0aW9uIG92KGUpe3JldHVybigwLGUuX2luaXQpKGUuX3BheWxvYWQpfWZ1bmN0aW9uIG9iKGUpe2Z1bmN0aW9uIG4obix0KXtpZihlKXt2YXIgcj1uLmRlbGV0aW9ucztudWxsPT09cj8obi5kZWxldGlvbnM9W3RdLG4uZmxhZ3N8PTE2KTpyLnB1c2godCl9fWZ1bmN0aW9uIHQodCxyKXtpZighZSlyZXR1cm4gbnVsbDtmb3IoO251bGwhPT1yOyluKHQscikscj1yLnNpYmxpbmc7cmV0dXJuIG51bGx9ZnVuY3Rpb24gcihlKXtmb3IodmFyIG49bmV3IE1hcDtudWxsIT09ZTspbnVsbCE9PWUua2V5P24uc2V0KGUua2V5LGUpOm4uc2V0KGUuaW5kZXgsZSksZT1lLnNpYmxpbmc7cmV0dXJuIG59ZnVuY3Rpb24gbyhlLG4pe3JldHVybihlPXJ0KGUsbikpLmluZGV4PTAsZS5zaWJsaW5nPW51bGwsZX1mdW5jdGlvbiBhKG4sdCxyKXtyZXR1cm4obi5pbmRleD1yLGUpP251bGwhPT0ocj1uLmFsdGVybmF0ZSk/KHI9ci5pbmRleCk8dD8obi5mbGFnc3w9MHg0MDAwMDAyLHQpOnI6KG4uZmxhZ3N8PTB4NDAwMDAwMix0KToobi5mbGFnc3w9MTA0ODU3Nix0KX1mdW5jdGlvbiBpKG4pe3JldHVybiBlJiZudWxsPT09bi5hbHRlcm5hdGUmJihuLmZsYWdzfD0weDQwMDAwMDIpLG59ZnVuY3Rpb24gcyhlLG4sdCxyKXtyZXR1cm4gbnVsbD09PW58fDYhPT1uLnRhZz8obj1yaSh0LGUubW9kZSxyKSkucmV0dXJuPWU6KG49byhuLHQpKS5yZXR1cm49ZSxufWZ1bmN0aW9uIGMoZSxuLHQscil7dmFyIGE9dC50eXBlO3JldHVybiBhPT09bT9kKGUsbix0LnByb3BzLmNoaWxkcmVuLHIsdC5rZXkpOihudWxsIT09biYmKG4uZWxlbWVudFR5cGU9PT1hfHxcIm9iamVjdFwiPT10eXBlb2YgYSYmbnVsbCE9PWEmJmEuJCR0eXBlb2Y9PT1PJiZvdihhKT09PW4udHlwZSk/b2cobj1vKG4sdC5wcm9wcyksdCk6b2cobj1ybyh0LnR5cGUsdC5rZXksdC5wcm9wcyxudWxsLGUubW9kZSxyKSx0KSxuLnJldHVybj1lLG4pfWZ1bmN0aW9uIHUoZSxuLHQscil7cmV0dXJuIG51bGw9PT1ufHw0IT09bi50YWd8fG4uc3RhdGVOb2RlLmNvbnRhaW5lckluZm8hPT10LmNvbnRhaW5lckluZm98fG4uc3RhdGVOb2RlLmltcGxlbWVudGF0aW9uIT09dC5pbXBsZW1lbnRhdGlvbj8obj1ycyh0LGUubW9kZSxyKSkucmV0dXJuPWU6KG49byhuLHQuY2hpbGRyZW58fFtdKSkucmV0dXJuPWUsbn1mdW5jdGlvbiBkKGUsbix0LHIsYSl7cmV0dXJuIG51bGw9PT1ufHw3IT09bi50YWc/KG49cmEodCxlLm1vZGUscixhKSkucmV0dXJuPWU6KG49byhuLHQpKS5yZXR1cm49ZSxufWZ1bmN0aW9uIGYoZSxuLHQpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuJiZcIlwiIT09bnx8XCJudW1iZXJcIj09dHlwZW9mIG58fFwiYmlnaW50XCI9PXR5cGVvZiBuKXJldHVybihuPXJpKFwiXCIrbixlLm1vZGUsdCkpLnJldHVybj1lLG47aWYoXCJvYmplY3RcIj09dHlwZW9mIG4mJm51bGwhPT1uKXtzd2l0Y2gobi4kJHR5cGVvZil7Y2FzZSBoOnJldHVybiBvZyh0PXJvKG4udHlwZSxuLmtleSxuLnByb3BzLG51bGwsZS5tb2RlLHQpLG4pLHQucmV0dXJuPWUsdDtjYXNlIGc6cmV0dXJuKG49cnMobixlLm1vZGUsdCkpLnJldHVybj1lLG47Y2FzZSBPOnJldHVybiBmKGUsbj0oMCxuLl9pbml0KShuLl9wYXlsb2FkKSx0KX1pZih6KG4pfHxfKG4pKXJldHVybihuPXJhKG4sZS5tb2RlLHQsbnVsbCkpLnJldHVybj1lLG47aWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygbi50aGVuKXJldHVybiBmKGUsb2gobiksdCk7aWYobi4kJHR5cGVvZj09PXgpcmV0dXJuIGYoZSxyWChlLG4pLHQpO29tKGUsbil9cmV0dXJuIG51bGx9ZnVuY3Rpb24gcChlLG4sdCxyKXt2YXIgbz1udWxsIT09bj9uLmtleTpudWxsO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0JiZcIlwiIT09dHx8XCJudW1iZXJcIj09dHlwZW9mIHR8fFwiYmlnaW50XCI9PXR5cGVvZiB0KXJldHVybiBudWxsIT09bz9udWxsOnMoZSxuLFwiXCIrdCxyKTtpZihcIm9iamVjdFwiPT10eXBlb2YgdCYmbnVsbCE9PXQpe3N3aXRjaCh0LiQkdHlwZW9mKXtjYXNlIGg6cmV0dXJuIHQua2V5PT09bz9jKGUsbix0LHIpOm51bGw7Y2FzZSBnOnJldHVybiB0LmtleT09PW8/dShlLG4sdCxyKTpudWxsO2Nhc2UgTzpyZXR1cm4gcChlLG4sdD0obz10Ll9pbml0KSh0Ll9wYXlsb2FkKSxyKX1pZih6KHQpfHxfKHQpKXJldHVybiBudWxsIT09bz9udWxsOmQoZSxuLHQscixudWxsKTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnRoZW4pcmV0dXJuIHAoZSxuLG9oKHQpLHIpO2lmKHQuJCR0eXBlb2Y9PT14KXJldHVybiBwKGUsbixyWChlLHQpLHIpO29tKGUsdCl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gdihlLG4sdCxyLG8pe2lmKFwic3RyaW5nXCI9PXR5cGVvZiByJiZcIlwiIT09cnx8XCJudW1iZXJcIj09dHlwZW9mIHJ8fFwiYmlnaW50XCI9PXR5cGVvZiByKXJldHVybiBzKG4sZT1lLmdldCh0KXx8bnVsbCxcIlwiK3Isbyk7aWYoXCJvYmplY3RcIj09dHlwZW9mIHImJm51bGwhPT1yKXtzd2l0Y2goci4kJHR5cGVvZil7Y2FzZSBoOnJldHVybiBjKG4sZT1lLmdldChudWxsPT09ci5rZXk/dDpyLmtleSl8fG51bGwscixvKTtjYXNlIGc6cmV0dXJuIHUobixlPWUuZ2V0KG51bGw9PT1yLmtleT90OnIua2V5KXx8bnVsbCxyLG8pO2Nhc2UgTzpyZXR1cm4gdihlLG4sdCxyPSgwLHIuX2luaXQpKHIuX3BheWxvYWQpLG8pfWlmKHoocil8fF8ocikpcmV0dXJuIGQobixlPWUuZ2V0KHQpfHxudWxsLHIsbyxudWxsKTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiByLnRoZW4pcmV0dXJuIHYoZSxuLHQsb2gociksbyk7aWYoci4kJHR5cGVvZj09PXgpcmV0dXJuIHYoZSxuLHQsclgobixyKSxvKTtvbShuLHIpfXJldHVybiBudWxsfXJldHVybiBmdW5jdGlvbihzLGMsdSxkKXt0cnl7b3A9MDt2YXIgYj1mdW5jdGlvbiBzKGMsdSxkLGIpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBkJiZudWxsIT09ZCYmZC50eXBlPT09bSYmbnVsbD09PWQua2V5JiYoZD1kLnByb3BzLmNoaWxkcmVuKSxcIm9iamVjdFwiPT10eXBlb2YgZCYmbnVsbCE9PWQpe3N3aXRjaChkLiQkdHlwZW9mKXtjYXNlIGg6ZTp7Zm9yKHZhciB5PWQua2V5O251bGwhPT11Oyl7aWYodS5rZXk9PT15KXtpZigoeT1kLnR5cGUpPT09bSl7aWYoNz09PXUudGFnKXt0KGMsdS5zaWJsaW5nKSwoYj1vKHUsZC5wcm9wcy5jaGlsZHJlbikpLnJldHVybj1jLGM9YjticmVhayBlfX1lbHNlIGlmKHUuZWxlbWVudFR5cGU9PT15fHxcIm9iamVjdFwiPT10eXBlb2YgeSYmbnVsbCE9PXkmJnkuJCR0eXBlb2Y9PT1PJiZvdih5KT09PXUudHlwZSl7dChjLHUuc2libGluZyksb2coYj1vKHUsZC5wcm9wcyksZCksYi5yZXR1cm49YyxjPWI7YnJlYWsgZX10KGMsdSk7YnJlYWt9bihjLHUpLHU9dS5zaWJsaW5nfWQudHlwZT09PW0/KGI9cmEoZC5wcm9wcy5jaGlsZHJlbixjLm1vZGUsYixkLmtleSkpLnJldHVybj1jOihvZyhiPXJvKGQudHlwZSxkLmtleSxkLnByb3BzLG51bGwsYy5tb2RlLGIpLGQpLGIucmV0dXJuPWMpLGM9Yn1yZXR1cm4gaShjKTtjYXNlIGc6ZTp7Zm9yKHk9ZC5rZXk7bnVsbCE9PXU7KXtpZih1LmtleT09PXkpaWYoND09PXUudGFnJiZ1LnN0YXRlTm9kZS5jb250YWluZXJJbmZvPT09ZC5jb250YWluZXJJbmZvJiZ1LnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbj09PWQuaW1wbGVtZW50YXRpb24pe3QoYyx1LnNpYmxpbmcpLChiPW8odSxkLmNoaWxkcmVufHxbXSkpLnJldHVybj1jLGM9YjticmVhayBlfWVsc2V7dChjLHUpO2JyZWFrfW4oYyx1KSx1PXUuc2libGluZ30oYj1ycyhkLGMubW9kZSxiKSkucmV0dXJuPWMsYz1ifXJldHVybiBpKGMpO2Nhc2UgTzpyZXR1cm4gcyhjLHUsZD0oeT1kLl9pbml0KShkLl9wYXlsb2FkKSxiKX1pZih6KGQpKXJldHVybiBmdW5jdGlvbihvLGksbCxzKXtmb3IodmFyIGM9bnVsbCx1PW51bGwsZD1pLGg9aT0wLGc9bnVsbDtudWxsIT09ZCYmaDxsLmxlbmd0aDtoKyspe2QuaW5kZXg+aD8oZz1kLGQ9bnVsbCk6Zz1kLnNpYmxpbmc7dmFyIG09cChvLGQsbFtoXSxzKTtpZihudWxsPT09bSl7bnVsbD09PWQmJihkPWcpO2JyZWFrfWUmJmQmJm51bGw9PT1tLmFsdGVybmF0ZSYmbihvLGQpLGk9YShtLGksaCksbnVsbD09PXU/Yz1tOnUuc2libGluZz1tLHU9bSxkPWd9aWYoaD09PWwubGVuZ3RoKXJldHVybiB0KG8sZCksclMmJnJ4KG8saCksYztpZihudWxsPT09ZCl7Zm9yKDtoPGwubGVuZ3RoO2grKyludWxsIT09KGQ9ZihvLGxbaF0scykpJiYoaT1hKGQsaSxoKSxudWxsPT09dT9jPWQ6dS5zaWJsaW5nPWQsdT1kKTtyZXR1cm4gclMmJnJ4KG8saCksY31mb3IoZD1yKGQpO2g8bC5sZW5ndGg7aCsrKW51bGwhPT0oZz12KGQsbyxoLGxbaF0scykpJiYoZSYmbnVsbCE9PWcuYWx0ZXJuYXRlJiZkLmRlbGV0ZShudWxsPT09Zy5rZXk/aDpnLmtleSksaT1hKGcsaSxoKSxudWxsPT09dT9jPWc6dS5zaWJsaW5nPWcsdT1nKTtyZXR1cm4gZSYmZC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBuKG8sZSl9KSxyUyYmcngobyxoKSxjfShjLHUsZCxiKTtpZihfKGQpKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZih5PV8oZCkpKXRocm93IEVycm9yKGwoMTUwKSk7cmV0dXJuIGZ1bmN0aW9uKG8saSxzLGMpe2lmKG51bGw9PXMpdGhyb3cgRXJyb3IobCgxNTEpKTtmb3IodmFyIHU9bnVsbCxkPW51bGwsaD1pLGc9aT0wLG09bnVsbCxiPXMubmV4dCgpO251bGwhPT1oJiYhYi5kb25lO2crKyxiPXMubmV4dCgpKXtoLmluZGV4Pmc/KG09aCxoPW51bGwpOm09aC5zaWJsaW5nO3ZhciB5PXAobyxoLGIudmFsdWUsYyk7aWYobnVsbD09PXkpe251bGw9PT1oJiYoaD1tKTticmVha31lJiZoJiZudWxsPT09eS5hbHRlcm5hdGUmJm4obyxoKSxpPWEoeSxpLGcpLG51bGw9PT1kP3U9eTpkLnNpYmxpbmc9eSxkPXksaD1tfWlmKGIuZG9uZSlyZXR1cm4gdChvLGgpLHJTJiZyeChvLGcpLHU7aWYobnVsbD09PWgpe2Zvcig7IWIuZG9uZTtnKyssYj1zLm5leHQoKSludWxsIT09KGI9ZihvLGIudmFsdWUsYykpJiYoaT1hKGIsaSxnKSxudWxsPT09ZD91PWI6ZC5zaWJsaW5nPWIsZD1iKTtyZXR1cm4gclMmJnJ4KG8sZyksdX1mb3IoaD1yKGgpOyFiLmRvbmU7ZysrLGI9cy5uZXh0KCkpbnVsbCE9PShiPXYoaCxvLGcsYi52YWx1ZSxjKSkmJihlJiZudWxsIT09Yi5hbHRlcm5hdGUmJmguZGVsZXRlKG51bGw9PT1iLmtleT9nOmIua2V5KSxpPWEoYixpLGcpLG51bGw9PT1kP3U9YjpkLnNpYmxpbmc9YixkPWIpO3JldHVybiBlJiZoLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIG4obyxlKX0pLHJTJiZyeChvLGcpLHV9KGMsdSxkPXkuY2FsbChkKSxiKX1pZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBkLnRoZW4pcmV0dXJuIHMoYyx1LG9oKGQpLGIpO2lmKGQuJCR0eXBlb2Y9PT14KXJldHVybiBzKGMsdSxyWChjLGQpLGIpO29tKGMsZCl9cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGQmJlwiXCIhPT1kfHxcIm51bWJlclwiPT10eXBlb2YgZHx8XCJiaWdpbnRcIj09dHlwZW9mIGQ/KGQ9XCJcIitkLG51bGwhPT11JiY2PT09dS50YWc/KHQoYyx1LnNpYmxpbmcpLChiPW8odSxkKSkucmV0dXJuPWMpOih0KGMsdSksKGI9cmkoZCxjLm1vZGUsYikpLnJldHVybj1jKSxpKGM9YikpOnQoYyx1KX0ocyxjLHUsZCk7cmV0dXJuIG9mPW51bGwsYn1jYXRjaChlKXtpZihlPT09b3J8fGU9PT1vYSl0aHJvdyBlO3ZhciB5PXJlKDI5LGUsbnVsbCxzLm1vZGUpO3JldHVybiB5LmxhbmVzPWQseS5yZXR1cm49cyx5fWZpbmFsbHl7fX19dmFyIG95PW9iKCEwKSxveD1vYighMSksb3c9ITE7ZnVuY3Rpb24gb2ooZSl7ZS51cGRhdGVRdWV1ZT17YmFzZVN0YXRlOmUubWVtb2l6ZWRTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6bnVsbCxsYXN0QmFzZVVwZGF0ZTpudWxsLHNoYXJlZDp7cGVuZGluZzpudWxsLGxhbmVzOjAsaGlkZGVuQ2FsbGJhY2tzOm51bGx9LGNhbGxiYWNrczpudWxsfX1mdW5jdGlvbiBvayhlLG4pe2U9ZS51cGRhdGVRdWV1ZSxuLnVwZGF0ZVF1ZXVlPT09ZSYmKG4udXBkYXRlUXVldWU9e2Jhc2VTdGF0ZTplLmJhc2VTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6ZS5maXJzdEJhc2VVcGRhdGUsbGFzdEJhc2VVcGRhdGU6ZS5sYXN0QmFzZVVwZGF0ZSxzaGFyZWQ6ZS5zaGFyZWQsY2FsbGJhY2tzOm51bGx9KX1mdW5jdGlvbiBvQShlKXtyZXR1cm57bGFuZTplLHRhZzowLHBheWxvYWQ6bnVsbCxjYWxsYmFjazpudWxsLG5leHQ6bnVsbH19ZnVuY3Rpb24gb08oZSxuLHQpe3ZhciByPWUudXBkYXRlUXVldWU7aWYobnVsbD09PXIpcmV0dXJuIG51bGw7aWYocj1yLnNoYXJlZCwwIT0oMiZsUikpe3ZhciBvPXIucGVuZGluZztyZXR1cm4gbnVsbD09PW8/bi5uZXh0PW46KG4ubmV4dD1vLm5leHQsby5uZXh0PW4pLHIucGVuZGluZz1uLG49dDkoZSksdDYoZSxudWxsLHQpLG59cmV0dXJuIHQ0KGUscixuLHQpLHQ5KGUpfWZ1bmN0aW9uIG9DKGUsbix0KXtpZihudWxsIT09KG49bi51cGRhdGVRdWV1ZSkmJihuPW4uc2hhcmVkLDAhPSg0MTk0MDQ4JnQpKSl7dmFyIHI9bi5sYW5lcztyJj1lLnBlbmRpbmdMYW5lcyx0fD1yLG4ubGFuZXM9dCxlRShlLHQpfX1mdW5jdGlvbiBvUyhlLG4pe3ZhciB0PWUudXBkYXRlUXVldWUscj1lLmFsdGVybmF0ZTtpZihudWxsIT09ciYmdD09PShyPXIudXBkYXRlUXVldWUpKXt2YXIgbz1udWxsLGE9bnVsbDtpZihudWxsIT09KHQ9dC5maXJzdEJhc2VVcGRhdGUpKXtkb3t2YXIgaT17bGFuZTp0LmxhbmUsdGFnOnQudGFnLHBheWxvYWQ6dC5wYXlsb2FkLGNhbGxiYWNrOm51bGwsbmV4dDpudWxsfTtudWxsPT09YT9vPWE9aTphPWEubmV4dD1pLHQ9dC5uZXh0fXdoaWxlKG51bGwhPT10KTtudWxsPT09YT9vPWE9bjphPWEubmV4dD1ufWVsc2Ugbz1hPW47dD17YmFzZVN0YXRlOnIuYmFzZVN0YXRlLGZpcnN0QmFzZVVwZGF0ZTpvLGxhc3RCYXNlVXBkYXRlOmEsc2hhcmVkOnIuc2hhcmVkLGNhbGxiYWNrczpyLmNhbGxiYWNrc30sZS51cGRhdGVRdWV1ZT10O3JldHVybn1udWxsPT09KGU9dC5sYXN0QmFzZVVwZGF0ZSk/dC5maXJzdEJhc2VVcGRhdGU9bjplLm5leHQ9bix0Lmxhc3RCYXNlVXBkYXRlPW59dmFyIG9FPSExO2Z1bmN0aW9uIG9fKCl7aWYob0Upe3ZhciBlPXI2O2lmKG51bGwhPT1lKXRocm93IGV9fWZ1bmN0aW9uIG9QKGUsbix0LHIpe29FPSExO3ZhciBvPWUudXBkYXRlUXVldWU7b3c9ITE7dmFyIGE9by5maXJzdEJhc2VVcGRhdGUsaT1vLmxhc3RCYXNlVXBkYXRlLGw9by5zaGFyZWQucGVuZGluZztpZihudWxsIT09bCl7by5zaGFyZWQucGVuZGluZz1udWxsO3ZhciBzPWwsYz1zLm5leHQ7cy5uZXh0PW51bGwsbnVsbD09PWk/YT1jOmkubmV4dD1jLGk9czt2YXIgdT1lLmFsdGVybmF0ZTtudWxsIT09dSYmKGw9KHU9dS51cGRhdGVRdWV1ZSkubGFzdEJhc2VVcGRhdGUpIT09aSYmKG51bGw9PT1sP3UuZmlyc3RCYXNlVXBkYXRlPWM6bC5uZXh0PWMsdS5sYXN0QmFzZVVwZGF0ZT1zKX1pZihudWxsIT09YSl7dmFyIGQ9by5iYXNlU3RhdGU7Zm9yKGk9MCx1PWM9cz1udWxsLGw9YTs7KXt2YXIgcD0tMHgyMDAwMDAwMSZsLmxhbmUsaD1wIT09bC5sYW5lO2lmKGg/KGxCJnApPT09cDoociZwKT09PXApezAhPT1wJiZwPT09cjMmJihvRT0hMCksbnVsbCE9PXUmJih1PXUubmV4dD17bGFuZTowLHRhZzpsLnRhZyxwYXlsb2FkOmwucGF5bG9hZCxjYWxsYmFjazpudWxsLG5leHQ6bnVsbH0pO2U6e3ZhciBnPWUsbT1sO3N3aXRjaChwPW4sbS50YWcpe2Nhc2UgMTppZihcImZ1bmN0aW9uXCI9PXR5cGVvZihnPW0ucGF5bG9hZCkpe2Q9Zy5jYWxsKHQsZCxwKTticmVhayBlfWQ9ZzticmVhayBlO2Nhc2UgMzpnLmZsYWdzPS02NTUzNyZnLmZsYWdzfDEyODtjYXNlIDA6aWYobnVsbD09KHA9XCJmdW5jdGlvblwiPT10eXBlb2YoZz1tLnBheWxvYWQpP2cuY2FsbCh0LGQscCk6ZykpYnJlYWsgZTtkPWYoe30sZCxwKTticmVhayBlO2Nhc2UgMjpvdz0hMH19bnVsbCE9PShwPWwuY2FsbGJhY2spJiYoZS5mbGFnc3w9NjQsaCYmKGUuZmxhZ3N8PTgxOTIpLG51bGw9PT0oaD1vLmNhbGxiYWNrcyk/by5jYWxsYmFja3M9W3BdOmgucHVzaChwKSl9ZWxzZSBoPXtsYW5lOnAsdGFnOmwudGFnLHBheWxvYWQ6bC5wYXlsb2FkLGNhbGxiYWNrOmwuY2FsbGJhY2ssbmV4dDpudWxsfSxudWxsPT09dT8oYz11PWgscz1kKTp1PXUubmV4dD1oLGl8PXA7aWYobnVsbD09PShsPWwubmV4dCkpaWYobnVsbD09PShsPW8uc2hhcmVkLnBlbmRpbmcpKWJyZWFrO2Vsc2UgbD0oaD1sKS5uZXh0LGgubmV4dD1udWxsLG8ubGFzdEJhc2VVcGRhdGU9aCxvLnNoYXJlZC5wZW5kaW5nPW51bGx9bnVsbD09PXUmJihzPWQpLG8uYmFzZVN0YXRlPXMsby5maXJzdEJhc2VVcGRhdGU9YyxvLmxhc3RCYXNlVXBkYXRlPXUsbnVsbD09PWEmJihvLnNoYXJlZC5sYW5lcz0wKSxsV3w9aSxlLmxhbmVzPWksZS5tZW1vaXplZFN0YXRlPWR9fWZ1bmN0aW9uIG96KGUsbil7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBFcnJvcihsKDE5MSxlKSk7ZS5jYWxsKG4pfWZ1bmN0aW9uIG9MKGUsbil7dmFyIHQ9ZS5jYWxsYmFja3M7aWYobnVsbCE9PXQpZm9yKGUuY2FsbGJhY2tzPW51bGwsZT0wO2U8dC5sZW5ndGg7ZSsrKW96KHRbZV0sbil9dmFyIG9UPUIobnVsbCksb1I9QigwKTtmdW5jdGlvbiBvTihlLG4pe0kob1IsZT1sViksSShvVCxuKSxsVj1lfG4uYmFzZUxhbmVzfWZ1bmN0aW9uIG9EKCl7SShvUixsViksSShvVCxvVC5jdXJyZW50KX1mdW5jdGlvbiBvQigpe2xWPW9SLmN1cnJlbnQsTShvVCksTShvUil9dmFyIG9NPUIobnVsbCksb0k9bnVsbDtmdW5jdGlvbiBvSChlKXt2YXIgbj1lLmFsdGVybmF0ZTtJKG9XLDEmb1cuY3VycmVudCksSShvTSxlKSxudWxsPT09b0kmJihudWxsPT09bnx8bnVsbCE9PW9ULmN1cnJlbnQ/b0k9ZTpudWxsIT09bi5tZW1vaXplZFN0YXRlJiYob0k9ZSkpfWZ1bmN0aW9uIG9GKGUpe0kob1csb1cuY3VycmVudCksSShvTSxlKSxudWxsPT09b0kmJihvST1lKX1mdW5jdGlvbiBvVShlKXsyMj09PWUudGFnPyhJKG9XLG9XLmN1cnJlbnQpLEkob00sZSksbnVsbD09PW9JJiYob0k9ZSkpOm9WKGUpfWZ1bmN0aW9uIG9WKCl7SShvVyxvVy5jdXJyZW50KSxJKG9NLG9NLmN1cnJlbnQpfWZ1bmN0aW9uIG9xKGUpe00ob00pLG9JPT09ZSYmKG9JPW51bGwpLE0ob1cpfXZhciBvVz1CKDApO2Z1bmN0aW9uIG8kKGUpe2Zvcih2YXIgbj1lO251bGwhPT1uOyl7aWYoMTM9PT1uLnRhZyl7dmFyIHQ9bi5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT10JiYobnVsbD09PSh0PXQuZGVoeWRyYXRlZCl8fGNTKHQpfHxjRSh0KSkpcmV0dXJuIG59ZWxzZSBpZigxOT09PW4udGFnJiYoXCJmb3J3YXJkc1wiPT09bi5tZW1vaXplZFByb3BzLnJldmVhbE9yZGVyfHxcImJhY2t3YXJkc1wiPT09bi5tZW1vaXplZFByb3BzLnJldmVhbE9yZGVyfHxcInVuc3RhYmxlX2xlZ2FjeS1iYWNrd2FyZHNcIj09PW4ubWVtb2l6ZWRQcm9wcy5yZXZlYWxPcmRlcnx8XCJ0b2dldGhlclwiPT09bi5tZW1vaXplZFByb3BzLnJldmVhbE9yZGVyKSl7aWYoMCE9KDEyOCZuLmZsYWdzKSlyZXR1cm4gbn1lbHNlIGlmKG51bGwhPT1uLmNoaWxkKXtuLmNoaWxkLnJldHVybj1uLG49bi5jaGlsZDtjb250aW51ZX1pZihuPT09ZSlicmVhaztmb3IoO251bGw9PT1uLnNpYmxpbmc7KXtpZihudWxsPT09bi5yZXR1cm58fG4ucmV0dXJuPT09ZSlyZXR1cm4gbnVsbDtuPW4ucmV0dXJufW4uc2libGluZy5yZXR1cm49bi5yZXR1cm4sbj1uLnNpYmxpbmd9cmV0dXJuIG51bGx9dmFyIG9aPTAsb1k9bnVsbCxvWD1udWxsLG9LPW51bGwsb1E9ITEsb0c9ITEsb0o9ITEsbzA9MCxvMT0wLG8yPW51bGwsbzQ9MDtmdW5jdGlvbiBvNSgpe3Rocm93IEVycm9yKGwoMzIxKSl9ZnVuY3Rpb24gbzMoZSxuKXtpZihudWxsPT09bilyZXR1cm4hMTtmb3IodmFyIHQ9MDt0PG4ubGVuZ3RoJiZ0PGUubGVuZ3RoO3QrKylpZighdE8oZVt0XSxuW3RdKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBvNihlLG4sdCxyLG8sYSl7cmV0dXJuIG9aPWEsb1k9bixuLm1lbW9pemVkU3RhdGU9bnVsbCxuLnVwZGF0ZVF1ZXVlPW51bGwsbi5sYW5lcz0wLEwuSD1udWxsPT09ZXx8bnVsbD09PWUubWVtb2l6ZWRTdGF0ZT9pdDppcixvSj0hMSxhPXQocixvKSxvSj0hMSxvRyYmKGE9bzgobix0LHIsbykpLG85KGUpLGF9ZnVuY3Rpb24gbzkoZSl7TC5IPWllO3ZhciBuPW51bGwhPT1vWCYmbnVsbCE9PW9YLm5leHQ7aWYob1o9MCxvSz1vWD1vWT1udWxsLG9RPSExLG8xPTAsbzI9bnVsbCxuKXRocm93IEVycm9yKGwoMzAwKSk7bnVsbD09PWV8fGl4fHxudWxsIT09KGU9ZS5kZXBlbmRlbmNpZXMpJiZyJChlKSYmKGl4PSEwKX1mdW5jdGlvbiBvOChlLG4sdCxyKXtvWT1lO3ZhciBvPTA7ZG97aWYob0cmJihvMj1udWxsKSxvMT0wLG9HPSExLDI1PD1vKXRocm93IEVycm9yKGwoMzAxKSk7aWYobys9MSxvSz1vWD1udWxsLG51bGwhPWUudXBkYXRlUXVldWUpe3ZhciBhPWUudXBkYXRlUXVldWU7YS5sYXN0RWZmZWN0PW51bGwsYS5ldmVudHM9bnVsbCxhLnN0b3Jlcz1udWxsLG51bGwhPWEubWVtb0NhY2hlJiYoYS5tZW1vQ2FjaGUuaW5kZXg9MCl9TC5IPWlvLGE9bih0LHIpfXdoaWxlKG9HKTtyZXR1cm4gYX1mdW5jdGlvbiBvNygpe3ZhciBlPUwuSCxuPWUudXNlU3RhdGUoKVswXTtyZXR1cm4gbj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBuLnRoZW4/YWkobik6bixlPWUudXNlU3RhdGUoKVswXSwobnVsbCE9PW9YP29YLm1lbW9pemVkU3RhdGU6bnVsbCkhPT1lJiYob1kuZmxhZ3N8PTEwMjQpLG59ZnVuY3Rpb24gYWUoKXt2YXIgZT0wIT09bzA7cmV0dXJuIG8wPTAsZX1mdW5jdGlvbiBhbihlLG4sdCl7bi51cGRhdGVRdWV1ZT1lLnVwZGF0ZVF1ZXVlLG4uZmxhZ3MmPS0yMDUzLGUubGFuZXMmPX50fWZ1bmN0aW9uIGF0KGUpe2lmKG9RKXtmb3IoZT1lLm1lbW9pemVkU3RhdGU7bnVsbCE9PWU7KXt2YXIgbj1lLnF1ZXVlO251bGwhPT1uJiYobi5wZW5kaW5nPW51bGwpLGU9ZS5uZXh0fW9RPSExfW9aPTAsb0s9b1g9b1k9bnVsbCxvRz0hMSxvMT1vMD0wLG8yPW51bGx9ZnVuY3Rpb24gYXIoKXt2YXIgZT17bWVtb2l6ZWRTdGF0ZTpudWxsLGJhc2VTdGF0ZTpudWxsLGJhc2VRdWV1ZTpudWxsLHF1ZXVlOm51bGwsbmV4dDpudWxsfTtyZXR1cm4gbnVsbD09PW9LP29ZLm1lbW9pemVkU3RhdGU9b0s9ZTpvSz1vSy5uZXh0PWUsb0t9ZnVuY3Rpb24gYW8oKXtpZihudWxsPT09b1gpe3ZhciBlPW9ZLmFsdGVybmF0ZTtlPW51bGwhPT1lP2UubWVtb2l6ZWRTdGF0ZTpudWxsfWVsc2UgZT1vWC5uZXh0O3ZhciBuPW51bGw9PT1vSz9vWS5tZW1vaXplZFN0YXRlOm9LLm5leHQ7aWYobnVsbCE9PW4pb0s9bixvWD1lO2Vsc2V7aWYobnVsbD09PWUpe2lmKG51bGw9PT1vWS5hbHRlcm5hdGUpdGhyb3cgRXJyb3IobCg0NjcpKTt0aHJvdyBFcnJvcihsKDMxMCkpfWU9e21lbW9pemVkU3RhdGU6KG9YPWUpLm1lbW9pemVkU3RhdGUsYmFzZVN0YXRlOm9YLmJhc2VTdGF0ZSxiYXNlUXVldWU6b1guYmFzZVF1ZXVlLHF1ZXVlOm9YLnF1ZXVlLG5leHQ6bnVsbH0sbnVsbD09PW9LP29ZLm1lbW9pemVkU3RhdGU9b0s9ZTpvSz1vSy5uZXh0PWV9cmV0dXJuIG9LfWZ1bmN0aW9uIGFhKCl7cmV0dXJue2xhc3RFZmZlY3Q6bnVsbCxldmVudHM6bnVsbCxzdG9yZXM6bnVsbCxtZW1vQ2FjaGU6bnVsbH19ZnVuY3Rpb24gYWkoZSl7dmFyIG49bzE7cmV0dXJuIG8xKz0xLG51bGw9PT1vMiYmKG8yPVtdKSxlPW9zKG8yLGUsbiksbj1vWSxudWxsPT09KG51bGw9PT1vSz9uLm1lbW9pemVkU3RhdGU6b0submV4dCkmJihMLkg9bnVsbD09PShuPW4uYWx0ZXJuYXRlKXx8bnVsbD09PW4ubWVtb2l6ZWRTdGF0ZT9pdDppciksZX1mdW5jdGlvbiBhbChlKXtpZihudWxsIT09ZSYmXCJvYmplY3RcIj09dHlwZW9mIGUpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUudGhlbilyZXR1cm4gYWkoZSk7aWYoZS4kJHR5cGVvZj09PXgpcmV0dXJuIHJZKGUpfXRocm93IEVycm9yKGwoNDM4LFN0cmluZyhlKSkpfWZ1bmN0aW9uIGFzKGUpe3ZhciBuPW51bGwsdD1vWS51cGRhdGVRdWV1ZTtpZihudWxsIT09dCYmKG49dC5tZW1vQ2FjaGUpLG51bGw9PW4pe3ZhciByPW9ZLmFsdGVybmF0ZTtudWxsIT09ciYmbnVsbCE9PShyPXIudXBkYXRlUXVldWUpJiZudWxsIT0ocj1yLm1lbW9DYWNoZSkmJihuPXtkYXRhOnIuZGF0YS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2xpY2UoKX0pLGluZGV4OjB9KX1pZihudWxsPT1uJiYobj17ZGF0YTpbXSxpbmRleDowfSksbnVsbD09PXQmJih0PWFhKCksb1kudXBkYXRlUXVldWU9dCksdC5tZW1vQ2FjaGU9bix2b2lkIDA9PT0odD1uLmRhdGFbbi5pbmRleF0pKWZvcih0PW4uZGF0YVtuLmluZGV4XT1BcnJheShlKSxyPTA7cjxlO3IrKyl0W3JdPVM7cmV0dXJuIG4uaW5kZXgrKyx0fWZ1bmN0aW9uIGFjKGUsbil7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uKGUpOm59ZnVuY3Rpb24gYXUoZSl7cmV0dXJuIGFkKGFvKCksb1gsZSl9ZnVuY3Rpb24gYWQoZSxuLHQpe3ZhciByPWUucXVldWU7aWYobnVsbD09PXIpdGhyb3cgRXJyb3IobCgzMTEpKTtyLmxhc3RSZW5kZXJlZFJlZHVjZXI9dDt2YXIgbz1lLmJhc2VRdWV1ZSxhPXIucGVuZGluZztpZihudWxsIT09YSl7aWYobnVsbCE9PW8pe3ZhciBpPW8ubmV4dDtvLm5leHQ9YS5uZXh0LGEubmV4dD1pfW4uYmFzZVF1ZXVlPW89YSxyLnBlbmRpbmc9bnVsbH1pZihhPWUuYmFzZVN0YXRlLG51bGw9PT1vKWUubWVtb2l6ZWRTdGF0ZT1hO2Vsc2V7bj1vLm5leHQ7dmFyIHM9aT1udWxsLGM9bnVsbCx1PW4sZD0hMTtkb3t2YXIgZj0tMHgyMDAwMDAwMSZ1LmxhbmU7aWYoZiE9PXUubGFuZT8obEImZik9PT1mOihvWiZmKT09PWYpe3ZhciBwPXUucmV2ZXJ0TGFuZTtpZigwPT09cCludWxsIT09YyYmKGM9Yy5uZXh0PXtsYW5lOjAscmV2ZXJ0TGFuZTowLGdlc3R1cmU6bnVsbCxhY3Rpb246dS5hY3Rpb24saGFzRWFnZXJTdGF0ZTp1Lmhhc0VhZ2VyU3RhdGUsZWFnZXJTdGF0ZTp1LmVhZ2VyU3RhdGUsbmV4dDpudWxsfSksZj09PXIzJiYoZD0hMCk7ZWxzZSBpZigob1omcCk9PT1wKXt1PXUubmV4dCxwPT09cjMmJihkPSEwKTtjb250aW51ZX1lbHNlIGY9e2xhbmU6MCxyZXZlcnRMYW5lOnUucmV2ZXJ0TGFuZSxnZXN0dXJlOm51bGwsYWN0aW9uOnUuYWN0aW9uLGhhc0VhZ2VyU3RhdGU6dS5oYXNFYWdlclN0YXRlLGVhZ2VyU3RhdGU6dS5lYWdlclN0YXRlLG5leHQ6bnVsbH0sbnVsbD09PWM/KHM9Yz1mLGk9YSk6Yz1jLm5leHQ9ZixvWS5sYW5lc3w9cCxsV3w9cDtmPXUuYWN0aW9uLG9KJiZ0KGEsZiksYT11Lmhhc0VhZ2VyU3RhdGU/dS5lYWdlclN0YXRlOnQoYSxmKX1lbHNlIHA9e2xhbmU6ZixyZXZlcnRMYW5lOnUucmV2ZXJ0TGFuZSxnZXN0dXJlOnUuZ2VzdHVyZSxhY3Rpb246dS5hY3Rpb24saGFzRWFnZXJTdGF0ZTp1Lmhhc0VhZ2VyU3RhdGUsZWFnZXJTdGF0ZTp1LmVhZ2VyU3RhdGUsbmV4dDpudWxsfSxudWxsPT09Yz8ocz1jPXAsaT1hKTpjPWMubmV4dD1wLG9ZLmxhbmVzfD1mLGxXfD1mO3U9dS5uZXh0fXdoaWxlKG51bGwhPT11JiZ1IT09bik7aWYobnVsbD09PWM/aT1hOmMubmV4dD1zLCF0TyhhLGUubWVtb2l6ZWRTdGF0ZSkmJihpeD0hMCxkJiZudWxsIT09KHQ9cjYpKSl0aHJvdyB0O2UubWVtb2l6ZWRTdGF0ZT1hLGUuYmFzZVN0YXRlPWksZS5iYXNlUXVldWU9YyxyLmxhc3RSZW5kZXJlZFN0YXRlPWF9cmV0dXJuIG51bGw9PT1vJiYoci5sYW5lcz0wKSxbZS5tZW1vaXplZFN0YXRlLHIuZGlzcGF0Y2hdfWZ1bmN0aW9uIGFmKGUpe3ZhciBuPWFvKCksdD1uLnF1ZXVlO2lmKG51bGw9PT10KXRocm93IEVycm9yKGwoMzExKSk7dC5sYXN0UmVuZGVyZWRSZWR1Y2VyPWU7dmFyIHI9dC5kaXNwYXRjaCxvPXQucGVuZGluZyxhPW4ubWVtb2l6ZWRTdGF0ZTtpZihudWxsIT09byl7dC5wZW5kaW5nPW51bGw7dmFyIGk9bz1vLm5leHQ7ZG8gYT1lKGEsaS5hY3Rpb24pLGk9aS5uZXh0O3doaWxlKGkhPT1vKTt0TyhhLG4ubWVtb2l6ZWRTdGF0ZSl8fChpeD0hMCksbi5tZW1vaXplZFN0YXRlPWEsbnVsbD09PW4uYmFzZVF1ZXVlJiYobi5iYXNlU3RhdGU9YSksdC5sYXN0UmVuZGVyZWRTdGF0ZT1hfXJldHVyblthLHJdfWZ1bmN0aW9uIGFwKGUsbix0KXt2YXIgcj1vWSxvPWFvKCksYT1yUztpZihhKXtpZih2b2lkIDA9PT10KXRocm93IEVycm9yKGwoNDA3KSk7dD10KCl9ZWxzZSB0PW4oKTt2YXIgaT0hdE8oKG9YfHxvKS5tZW1vaXplZFN0YXRlLHQpO2lmKGkmJihvLm1lbW9pemVkU3RhdGU9dCxpeD0hMCksbz1vLnF1ZXVlLGFNKGFtLmJpbmQobnVsbCxyLG8sZSksW2VdKSxvLmdldFNuYXBzaG90IT09bnx8aXx8bnVsbCE9PW9LJiYxJm9LLm1lbW9pemVkU3RhdGUudGFnKXtpZihyLmZsYWdzfD0yMDQ4LGFUKDkse2Rlc3Ryb3k6dm9pZCAwfSxhZy5iaW5kKG51bGwscixvLHQsbiksbnVsbCksbnVsbD09PWxOKXRocm93IEVycm9yKGwoMzQ5KSk7YXx8MCE9KDEyNCZvWil8fGFoKHIsbix0KX1yZXR1cm4gdH1mdW5jdGlvbiBhaChlLG4sdCl7ZS5mbGFnc3w9MTYzODQsZT17Z2V0U25hcHNob3Q6bix2YWx1ZTp0fSxudWxsPT09KG49b1kudXBkYXRlUXVldWUpPyhuPWFhKCksb1kudXBkYXRlUXVldWU9bixuLnN0b3Jlcz1bZV0pOm51bGw9PT0odD1uLnN0b3Jlcyk/bi5zdG9yZXM9W2VdOnQucHVzaChlKX1mdW5jdGlvbiBhZyhlLG4sdCxyKXtuLnZhbHVlPXQsbi5nZXRTbmFwc2hvdD1yLGF2KG4pJiZhYihlKX1mdW5jdGlvbiBhbShlLG4sdCl7cmV0dXJuIHQoZnVuY3Rpb24oKXthdihuKSYmYWIoZSl9KX1mdW5jdGlvbiBhdihlKXt2YXIgbj1lLmdldFNuYXBzaG90O2U9ZS52YWx1ZTt0cnl7dmFyIHQ9bigpO3JldHVybiF0TyhlLHQpfWNhdGNoKGUpe3JldHVybiEwfX1mdW5jdGlvbiBhYihlKXt2YXIgbj10MyhlLDIpO251bGwhPT1uJiZzbyhuLGUsMil9ZnVuY3Rpb24gYXkoZSl7dmFyIG49YXIoKTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlKXt2YXIgdD1lO2lmKGU9dCgpLG9KKXtlaCghMCk7dHJ5e3QoKX1maW5hbGx5e2VoKCExKX19fXJldHVybiBuLm1lbW9pemVkU3RhdGU9bi5iYXNlU3RhdGU9ZSxuLnF1ZXVlPXtwZW5kaW5nOm51bGwsbGFuZXM6MCxkaXNwYXRjaDpudWxsLGxhc3RSZW5kZXJlZFJlZHVjZXI6YWMsbGFzdFJlbmRlcmVkU3RhdGU6ZX0sbn1mdW5jdGlvbiBheChlLG4sdCxyKXtyZXR1cm4gZS5iYXNlU3RhdGU9dCxhZChlLG9YLFwiZnVuY3Rpb25cIj09dHlwZW9mIHI/cjphYyl9ZnVuY3Rpb24gYXcoZSxuLHQscixvKXtpZihhOShlKSl0aHJvdyBFcnJvcihsKDQ4NSkpO2lmKG51bGwhPT0oZT1uLmFjdGlvbikpe3ZhciBhPXtwYXlsb2FkOm8sYWN0aW9uOmUsbmV4dDpudWxsLGlzVHJhbnNpdGlvbjohMCxzdGF0dXM6XCJwZW5kaW5nXCIsdmFsdWU6bnVsbCxyZWFzb246bnVsbCxsaXN0ZW5lcnM6W10sdGhlbjpmdW5jdGlvbihlKXthLmxpc3RlbmVycy5wdXNoKGUpfX07bnVsbCE9PUwuVD90KCEwKTphLmlzVHJhbnNpdGlvbj0hMSxyKGEpLG51bGw9PT0odD1uLnBlbmRpbmcpPyhhLm5leHQ9bi5wZW5kaW5nPWEsYWoobixhKSk6KGEubmV4dD10Lm5leHQsbi5wZW5kaW5nPXQubmV4dD1hKX19ZnVuY3Rpb24gYWooZSxuKXt2YXIgdD1uLmFjdGlvbixyPW4ucGF5bG9hZCxvPWUuc3RhdGU7aWYobi5pc1RyYW5zaXRpb24pe3ZhciBhPUwuVCxpPXt9O0wuVD1pO3RyeXt2YXIgbD10KG8scikscz1MLlM7bnVsbCE9PXMmJnMoaSxsKSxhayhlLG4sbCl9Y2F0Y2godCl7YU8oZSxuLHQpfWZpbmFsbHl7bnVsbCE9PWEmJm51bGwhPT1pLnR5cGVzJiYoYS50eXBlcz1pLnR5cGVzKSxMLlQ9YX19ZWxzZSB0cnl7YT10KG8sciksYWsoZSxuLGEpfWNhdGNoKHQpe2FPKGUsbix0KX19ZnVuY3Rpb24gYWsoZSxuLHQpe251bGwhPT10JiZcIm9iamVjdFwiPT10eXBlb2YgdCYmXCJmdW5jdGlvblwiPT10eXBlb2YgdC50aGVuP3QudGhlbihmdW5jdGlvbih0KXthQShlLG4sdCl9LGZ1bmN0aW9uKHQpe3JldHVybiBhTyhlLG4sdCl9KTphQShlLG4sdCl9ZnVuY3Rpb24gYUEoZSxuLHQpe24uc3RhdHVzPVwiZnVsZmlsbGVkXCIsbi52YWx1ZT10LGFDKG4pLGUuc3RhdGU9dCxudWxsIT09KG49ZS5wZW5kaW5nKSYmKCh0PW4ubmV4dCk9PT1uP2UucGVuZGluZz1udWxsOih0PXQubmV4dCxuLm5leHQ9dCxhaihlLHQpKSl9ZnVuY3Rpb24gYU8oZSxuLHQpe3ZhciByPWUucGVuZGluZztpZihlLnBlbmRpbmc9bnVsbCxudWxsIT09cil7cj1yLm5leHQ7ZG8gbi5zdGF0dXM9XCJyZWplY3RlZFwiLG4ucmVhc29uPXQsYUMobiksbj1uLm5leHQ7d2hpbGUobiE9PXIpfWUuYWN0aW9uPW51bGx9ZnVuY3Rpb24gYUMoZSl7ZT1lLmxpc3RlbmVycztmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKykoMCxlW25dKSgpfWZ1bmN0aW9uIGFTKGUsbil7cmV0dXJuIG59ZnVuY3Rpb24gYUUoZSxuKXtpZihyUyl7dmFyIHQ9bE4uZm9ybVN0YXRlO2lmKG51bGwhPT10KXtlOnt2YXIgcj1vWTtpZihyUyl7aWYockMpe246e2Zvcih2YXIgbz1yQyxhPXJfOzghPT1vLm5vZGVUeXBlOylpZighYXx8bnVsbD09PShvPWNfKG8ubmV4dFNpYmxpbmcpKSl7bz1udWxsO2JyZWFrIG59bz1cIkYhXCI9PT0oYT1vLmRhdGEpfHxcIkZcIj09PWE/bzpudWxsfWlmKG8pe3JDPWNfKG8ubmV4dFNpYmxpbmcpLHI9XCJGIVwiPT09by5kYXRhO2JyZWFrIGV9fXJ6KHIpfXI9ITF9ciYmKG49dFswXSl9fXJldHVybih0PWFyKCkpLm1lbW9pemVkU3RhdGU9dC5iYXNlU3RhdGU9bixyPXtwZW5kaW5nOm51bGwsbGFuZXM6MCxkaXNwYXRjaDpudWxsLGxhc3RSZW5kZXJlZFJlZHVjZXI6YVMsbGFzdFJlbmRlcmVkU3RhdGU6bn0sdC5xdWV1ZT1yLHQ9YTUuYmluZChudWxsLG9ZLHIpLHIuZGlzcGF0Y2g9dCxyPWF5KCExKSxhPWE2LmJpbmQobnVsbCxvWSwhMSxyLnF1ZXVlKSxyPWFyKCksbz17c3RhdGU6bixkaXNwYXRjaDpudWxsLGFjdGlvbjplLHBlbmRpbmc6bnVsbH0sci5xdWV1ZT1vLHQ9YXcuYmluZChudWxsLG9ZLG8sYSx0KSxvLmRpc3BhdGNoPXQsci5tZW1vaXplZFN0YXRlPWUsW24sdCwhMV19ZnVuY3Rpb24gYV8oZSl7cmV0dXJuIGFQKGFvKCksb1gsZSl9ZnVuY3Rpb24gYVAoZSxuLHQpe2lmKG49YWQoZSxuLGFTKVswXSxlPWF1KGFjKVswXSxcIm9iamVjdFwiPT10eXBlb2YgbiYmbnVsbCE9PW4mJlwiZnVuY3Rpb25cIj09dHlwZW9mIG4udGhlbil0cnl7dmFyIHI9YWkobil9Y2F0Y2goZSl7aWYoZT09PW9yKXRocm93IG9hO3Rocm93IGV9ZWxzZSByPW47dmFyIG89KG49YW8oKSkucXVldWUsYT1vLmRpc3BhdGNoO3JldHVybiB0IT09bi5tZW1vaXplZFN0YXRlJiYob1kuZmxhZ3N8PTIwNDgsYVQoOSx7ZGVzdHJveTp2b2lkIDB9LGF6LmJpbmQobnVsbCxvLHQpLG51bGwpKSxbcixhLGVdfWZ1bmN0aW9uIGF6KGUsbil7ZS5hY3Rpb249bn1mdW5jdGlvbiBhTChlKXt2YXIgbj1hbygpLHQ9b1g7aWYobnVsbCE9PXQpcmV0dXJuIGFQKG4sdCxlKTthbygpLG49bi5tZW1vaXplZFN0YXRlO3ZhciByPSh0PWFvKCkpLnF1ZXVlLmRpc3BhdGNoO3JldHVybiB0Lm1lbW9pemVkU3RhdGU9ZSxbbixyLCExXX1mdW5jdGlvbiBhVChlLG4sdCxyKXtyZXR1cm4gZT17dGFnOmUsY3JlYXRlOnQsZGVwczpyLGluc3Q6bixuZXh0Om51bGx9LG51bGw9PT0obj1vWS51cGRhdGVRdWV1ZSkmJihuPWFhKCksb1kudXBkYXRlUXVldWU9biksbnVsbD09PSh0PW4ubGFzdEVmZmVjdCk/bi5sYXN0RWZmZWN0PWUubmV4dD1lOihyPXQubmV4dCx0Lm5leHQ9ZSxlLm5leHQ9cixuLmxhc3RFZmZlY3Q9ZSksZX1mdW5jdGlvbiBhUigpe3JldHVybiBhbygpLm1lbW9pemVkU3RhdGV9ZnVuY3Rpb24gYU4oZSxuLHQscil7dmFyIG89YXIoKTtvWS5mbGFnc3w9ZSxvLm1lbW9pemVkU3RhdGU9YVQoMXxuLHtkZXN0cm95OnZvaWQgMH0sdCx2b2lkIDA9PT1yP251bGw6cil9ZnVuY3Rpb24gYUQoZSxuLHQscil7dmFyIG89YW8oKTtyPXZvaWQgMD09PXI/bnVsbDpyO3ZhciBhPW8ubWVtb2l6ZWRTdGF0ZS5pbnN0O251bGwhPT1vWCYmbnVsbCE9PXImJm8zKHIsb1gubWVtb2l6ZWRTdGF0ZS5kZXBzKT9vLm1lbW9pemVkU3RhdGU9YVQobixhLHQscik6KG9ZLmZsYWdzfD1lLG8ubWVtb2l6ZWRTdGF0ZT1hVCgxfG4sYSx0LHIpKX1mdW5jdGlvbiBhQihlLG4pe2FOKDgzOTA2NTYsOCxlLG4pfWZ1bmN0aW9uIGFNKGUsbil7YUQoMjA0OCw4LGUsbil9ZnVuY3Rpb24gYUkoZSxuKXtyZXR1cm4gYUQoNCwyLGUsbil9ZnVuY3Rpb24gYUgoZSxuKXtyZXR1cm4gYUQoNCw0LGUsbil9ZnVuY3Rpb24gYUYoZSxuKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuKXt2YXIgdD1uKGU9ZSgpKTtyZXR1cm4gZnVuY3Rpb24oKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3QoKTpuKG51bGwpfX1pZihudWxsIT1uKXJldHVybiBuLmN1cnJlbnQ9ZT1lKCksZnVuY3Rpb24oKXtuLmN1cnJlbnQ9bnVsbH19ZnVuY3Rpb24gYVUoZSxuLHQpe3Q9bnVsbCE9dD90LmNvbmNhdChbZV0pOm51bGwsYUQoNCw0LGFGLmJpbmQobnVsbCxuLGUpLHQpfWZ1bmN0aW9uIGFWKCl7fWZ1bmN0aW9uIGFxKGUsbil7dmFyIHQ9YW8oKTtuPXZvaWQgMD09PW4/bnVsbDpuO3ZhciByPXQubWVtb2l6ZWRTdGF0ZTtyZXR1cm4gbnVsbCE9PW4mJm8zKG4sclsxXSk/clswXToodC5tZW1vaXplZFN0YXRlPVtlLG5dLGUpfWZ1bmN0aW9uIGFXKGUsbil7dmFyIHQ9YW8oKTtuPXZvaWQgMD09PW4/bnVsbDpuO3ZhciByPXQubWVtb2l6ZWRTdGF0ZTtpZihudWxsIT09biYmbzMobixyWzFdKSlyZXR1cm4gclswXTtpZihyPWUoKSxvSil7ZWgoITApO3RyeXtlKCl9ZmluYWxseXtlaCghMSl9fXJldHVybiB0Lm1lbW9pemVkU3RhdGU9W3Isbl0scn1mdW5jdGlvbiBhJChlLG4sdCl7cmV0dXJuIHZvaWQgMD09PXR8fDAhPSgweDQwMDAwMDAwJm9aKT9lLm1lbW9pemVkU3RhdGU9bjooZS5tZW1vaXplZFN0YXRlPXQsZT1zcigpLG9ZLmxhbmVzfD1lLGxXfD1lLHQpfWZ1bmN0aW9uIGFaKGUsbix0LHIpe3JldHVybiB0Tyh0LG4pP3Q6bnVsbCE9PW9ULmN1cnJlbnQ/KHRPKGU9YSQoZSx0LHIpLG4pfHwoaXg9ITApLGUpOjA9PSg0MiZvWil8fDAhPSgweDQwMDAwMDAwJm9aKT8oaXg9ITAsZS5tZW1vaXplZFN0YXRlPXQpOihlPXNyKCksb1kubGFuZXN8PWUsbFd8PWUsbil9ZnVuY3Rpb24gYVkoZSxuLHQscixvKXt2YXIgYT1ULnA7VC5wPTAhPT1hJiY4PmE/YTo4O3ZhciBpPUwuVCxsPXt9O0wuVD1sLGE2KGUsITEsbix0KTt0cnl7dmFyIHM9bygpLGM9TC5TO2lmKG51bGwhPT1jJiZjKGwscyksbnVsbCE9PXMmJlwib2JqZWN0XCI9PXR5cGVvZiBzJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBzLnRoZW4pe3ZhciB1LGQsZj0odT1bXSxkPXtzdGF0dXM6XCJwZW5kaW5nXCIsdmFsdWU6bnVsbCxyZWFzb246bnVsbCx0aGVuOmZ1bmN0aW9uKGUpe3UucHVzaChlKX19LHMudGhlbihmdW5jdGlvbigpe2Quc3RhdHVzPVwiZnVsZmlsbGVkXCIsZC52YWx1ZT1yO2Zvcih2YXIgZT0wO2U8dS5sZW5ndGg7ZSsrKSgwLHVbZV0pKHIpfSxmdW5jdGlvbihlKXtmb3IoZC5zdGF0dXM9XCJyZWplY3RlZFwiLGQucmVhc29uPWUsZT0wO2U8dS5sZW5ndGg7ZSsrKSgwLHVbZV0pKHZvaWQgMCl9KSxkKTthMyhlLG4sZixzdChlKSl9ZWxzZSBhMyhlLG4scixzdChlKSl9Y2F0Y2godCl7YTMoZSxuLHt0aGVuOmZ1bmN0aW9uKCl7fSxzdGF0dXM6XCJyZWplY3RlZFwiLHJlYXNvbjp0fSxzdCgpKX1maW5hbGx5e1QucD1hLG51bGwhPT1pJiZudWxsIT09bC50eXBlcyYmKGkudHlwZXM9bC50eXBlcyksTC5UPWl9fWZ1bmN0aW9uIGFYKCl7fWZ1bmN0aW9uIGFLKGUsbix0LHIpe2lmKDUhPT1lLnRhZyl0aHJvdyBFcnJvcihsKDQ3NikpO3ZhciBvPWFRKGUpLnF1ZXVlO2FZKGUsbyxuLFIsbnVsbD09PXQ/YVg6ZnVuY3Rpb24oKXtyZXR1cm4gYUcoZSksdChyKX0pfWZ1bmN0aW9uIGFRKGUpe3ZhciBuPWUubWVtb2l6ZWRTdGF0ZTtpZihudWxsIT09bilyZXR1cm4gbjt2YXIgdD17fTtyZXR1cm4obj17bWVtb2l6ZWRTdGF0ZTpSLGJhc2VTdGF0ZTpSLGJhc2VRdWV1ZTpudWxsLHF1ZXVlOntwZW5kaW5nOm51bGwsbGFuZXM6MCxkaXNwYXRjaDpudWxsLGxhc3RSZW5kZXJlZFJlZHVjZXI6YWMsbGFzdFJlbmRlcmVkU3RhdGU6Un0sbmV4dDpudWxsfSkubmV4dD17bWVtb2l6ZWRTdGF0ZTp0LGJhc2VTdGF0ZTp0LGJhc2VRdWV1ZTpudWxsLHF1ZXVlOntwZW5kaW5nOm51bGwsbGFuZXM6MCxkaXNwYXRjaDpudWxsLGxhc3RSZW5kZXJlZFJlZHVjZXI6YWMsbGFzdFJlbmRlcmVkU3RhdGU6dH0sbmV4dDpudWxsfSxlLm1lbW9pemVkU3RhdGU9bixudWxsIT09KGU9ZS5hbHRlcm5hdGUpJiYoZS5tZW1vaXplZFN0YXRlPW4pLG59ZnVuY3Rpb24gYUcoZSl7dmFyIG49YVEoZSk7bnVsbD09PW4ubmV4dCYmKG49ZS5hbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZSksYTMoZSxuLm5leHQucXVldWUse30sc3QoKSl9ZnVuY3Rpb24gYUooKXtyZXR1cm4gclkoYzYpfWZ1bmN0aW9uIGEwKCl7cmV0dXJuIGFvKCkubWVtb2l6ZWRTdGF0ZX1mdW5jdGlvbiBhMSgpe3JldHVybiBhbygpLm1lbW9pemVkU3RhdGV9ZnVuY3Rpb24gYTIoZSl7Zm9yKHZhciBuPWUucmV0dXJuO251bGwhPT1uOyl7c3dpdGNoKG4udGFnKXtjYXNlIDI0OmNhc2UgMzp2YXIgdD1zdCgpLHI9b08obixlPW9BKHQpLHQpO251bGwhPT1yJiYoc28ocixuLHQpLG9DKHIsbix0KSksbj17Y2FjaGU6cjEoKX0sZS5wYXlsb2FkPW47cmV0dXJufW49bi5yZXR1cm59fWZ1bmN0aW9uIGE0KGUsbix0KXt2YXIgcj1zdCgpO3Q9e2xhbmU6cixyZXZlcnRMYW5lOjAsZ2VzdHVyZTpudWxsLGFjdGlvbjp0LGhhc0VhZ2VyU3RhdGU6ITEsZWFnZXJTdGF0ZTpudWxsLG5leHQ6bnVsbH0sYTkoZSk/YTgobix0KTpudWxsIT09KHQ9dDUoZSxuLHQscikpJiYoc28odCxlLHIpLGE3KHQsbixyKSl9ZnVuY3Rpb24gYTUoZSxuLHQpe2EzKGUsbix0LHN0KCkpfWZ1bmN0aW9uIGEzKGUsbix0LHIpe3ZhciBvPXtsYW5lOnIscmV2ZXJ0TGFuZTowLGdlc3R1cmU6bnVsbCxhY3Rpb246dCxoYXNFYWdlclN0YXRlOiExLGVhZ2VyU3RhdGU6bnVsbCxuZXh0Om51bGx9O2lmKGE5KGUpKWE4KG4sbyk7ZWxzZXt2YXIgYT1lLmFsdGVybmF0ZTtpZigwPT09ZS5sYW5lcyYmKG51bGw9PT1hfHwwPT09YS5sYW5lcykmJm51bGwhPT0oYT1uLmxhc3RSZW5kZXJlZFJlZHVjZXIpKXRyeXt2YXIgaT1uLmxhc3RSZW5kZXJlZFN0YXRlLGw9YShpLHQpO2lmKG8uaGFzRWFnZXJTdGF0ZT0hMCxvLmVhZ2VyU3RhdGU9bCx0TyhsLGkpKXJldHVybiB0NChlLG4sbywwKSxudWxsPT09bE4mJnQyKCksITF9Y2F0Y2goZSl7fWZpbmFsbHl7fWlmKG51bGwhPT0odD10NShlLG4sbyxyKSkpcmV0dXJuIHNvKHQsZSxyKSxhNyh0LG4sciksITB9cmV0dXJuITF9ZnVuY3Rpb24gYTYoZSxuLHQscil7aWYocj17bGFuZToyLHJldmVydExhbmU6c1goKSxnZXN0dXJlOm51bGwsYWN0aW9uOnIsaGFzRWFnZXJTdGF0ZTohMSxlYWdlclN0YXRlOm51bGwsbmV4dDpudWxsfSxhOShlKSl7aWYobil0aHJvdyBFcnJvcihsKDQ3OSkpfWVsc2UgbnVsbCE9PShuPXQ1KGUsdCxyLDIpKSYmc28obixlLDIpfWZ1bmN0aW9uIGE5KGUpe3ZhciBuPWUuYWx0ZXJuYXRlO3JldHVybiBlPT09b1l8fG51bGwhPT1uJiZuPT09b1l9ZnVuY3Rpb24gYTgoZSxuKXtvRz1vUT0hMDt2YXIgdD1lLnBlbmRpbmc7bnVsbD09PXQ/bi5uZXh0PW46KG4ubmV4dD10Lm5leHQsdC5uZXh0PW4pLGUucGVuZGluZz1ufWZ1bmN0aW9uIGE3KGUsbix0KXtpZigwIT0oNDE5NDA0OCZ0KSl7dmFyIHI9bi5sYW5lcztyJj1lLnBlbmRpbmdMYW5lcyxuLmxhbmVzPXR8PXIsZUUoZSx0KX19dmFyIGllPXtyZWFkQ29udGV4dDpyWSx1c2U6YWwsdXNlQ2FsbGJhY2s6bzUsdXNlQ29udGV4dDpvNSx1c2VFZmZlY3Q6bzUsdXNlSW1wZXJhdGl2ZUhhbmRsZTpvNSx1c2VMYXlvdXRFZmZlY3Q6bzUsdXNlSW5zZXJ0aW9uRWZmZWN0Om81LHVzZU1lbW86bzUsdXNlUmVkdWNlcjpvNSx1c2VSZWY6bzUsdXNlU3RhdGU6bzUsdXNlRGVidWdWYWx1ZTpvNSx1c2VEZWZlcnJlZFZhbHVlOm81LHVzZVRyYW5zaXRpb246bzUsdXNlU3luY0V4dGVybmFsU3RvcmU6bzUsdXNlSWQ6bzUsdXNlSG9zdFRyYW5zaXRpb25TdGF0dXM6bzUsdXNlRm9ybVN0YXRlOm81LHVzZUFjdGlvblN0YXRlOm81LHVzZU9wdGltaXN0aWM6bzUsdXNlTWVtb0NhY2hlOm81LHVzZUNhY2hlUmVmcmVzaDpvNX0saXQ9e3JlYWRDb250ZXh0OnJZLHVzZTphbCx1c2VDYWxsYmFjazpmdW5jdGlvbihlLG4pe3JldHVybiBhcigpLm1lbW9pemVkU3RhdGU9W2Usdm9pZCAwPT09bj9udWxsOm5dLGV9LHVzZUNvbnRleHQ6clksdXNlRWZmZWN0OmFCLHVzZUltcGVyYXRpdmVIYW5kbGU6ZnVuY3Rpb24oZSxuLHQpe3Q9bnVsbCE9dD90LmNvbmNhdChbZV0pOm51bGwsYU4oNDE5NDMwOCw0LGFGLmJpbmQobnVsbCxuLGUpLHQpfSx1c2VMYXlvdXRFZmZlY3Q6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gYU4oNDE5NDMwOCw0LGUsbil9LHVzZUluc2VydGlvbkVmZmVjdDpmdW5jdGlvbihlLG4pe2FOKDQsMixlLG4pfSx1c2VNZW1vOmZ1bmN0aW9uKGUsbil7dmFyIHQ9YXIoKTtuPXZvaWQgMD09PW4/bnVsbDpuO3ZhciByPWUoKTtpZihvSil7ZWgoITApO3RyeXtlKCl9ZmluYWxseXtlaCghMSl9fXJldHVybiB0Lm1lbW9pemVkU3RhdGU9W3Isbl0scn0sdXNlUmVkdWNlcjpmdW5jdGlvbihlLG4sdCl7dmFyIHI9YXIoKTtpZih2b2lkIDAhPT10KXt2YXIgbz10KG4pO2lmKG9KKXtlaCghMCk7dHJ5e3Qobil9ZmluYWxseXtlaCghMSl9fX1lbHNlIG89bjtyZXR1cm4gci5tZW1vaXplZFN0YXRlPXIuYmFzZVN0YXRlPW8sci5xdWV1ZT1lPXtwZW5kaW5nOm51bGwsbGFuZXM6MCxkaXNwYXRjaDpudWxsLGxhc3RSZW5kZXJlZFJlZHVjZXI6ZSxsYXN0UmVuZGVyZWRTdGF0ZTpvfSxlPWUuZGlzcGF0Y2g9YTQuYmluZChudWxsLG9ZLGUpLFtyLm1lbW9pemVkU3RhdGUsZV19LHVzZVJlZjpmdW5jdGlvbihlKXtyZXR1cm4gYXIoKS5tZW1vaXplZFN0YXRlPWU9e2N1cnJlbnQ6ZX19LHVzZVN0YXRlOmZ1bmN0aW9uKGUpe3ZhciBuPShlPWF5KGUpKS5xdWV1ZSx0PWE1LmJpbmQobnVsbCxvWSxuKTtyZXR1cm4gbi5kaXNwYXRjaD10LFtlLm1lbW9pemVkU3RhdGUsdF19LHVzZURlYnVnVmFsdWU6YVYsdXNlRGVmZXJyZWRWYWx1ZTpmdW5jdGlvbihlLG4pe3JldHVybiBhJChhcigpLGUsbil9LHVzZVRyYW5zaXRpb246ZnVuY3Rpb24oKXt2YXIgZT1heSghMSk7cmV0dXJuIGU9YVkuYmluZChudWxsLG9ZLGUucXVldWUsITAsITEpLGFyKCkubWVtb2l6ZWRTdGF0ZT1lLFshMSxlXX0sdXNlU3luY0V4dGVybmFsU3RvcmU6ZnVuY3Rpb24oZSxuLHQpe3ZhciByPW9ZLG89YXIoKTtpZihyUyl7aWYodm9pZCAwPT09dCl0aHJvdyBFcnJvcihsKDQwNykpO3Q9dCgpfWVsc2V7aWYodD1uKCksbnVsbD09PWxOKXRocm93IEVycm9yKGwoMzQ5KSk7MCE9KDEyNCZsQil8fGFoKHIsbix0KX1vLm1lbW9pemVkU3RhdGU9dDt2YXIgYT17dmFsdWU6dCxnZXRTbmFwc2hvdDpufTtyZXR1cm4gby5xdWV1ZT1hLGFCKGFtLmJpbmQobnVsbCxyLGEsZSksW2VdKSxyLmZsYWdzfD0yMDQ4LGFUKDkse2Rlc3Ryb3k6dm9pZCAwfSxhZy5iaW5kKG51bGwscixhLHQsbiksbnVsbCksdH0sdXNlSWQ6ZnVuY3Rpb24oKXt2YXIgZT1hcigpLG49bE4uaWRlbnRpZmllclByZWZpeDtpZihyUyl7dmFyIHQ9cnkscj1yYjtuPVwiX1wiK24rXCJSX1wiKyh0PShyJn4oMTw8MzItZWcociktMSkpLnRvU3RyaW5nKDMyKSt0KSwwPCh0PW8wKyspJiYobis9XCJIXCIrdC50b1N0cmluZygzMikpLG4rPVwiX1wifWVsc2Ugbj1cIl9cIituK1wicl9cIisodD1vNCsrKS50b1N0cmluZygzMikrXCJfXCI7cmV0dXJuIGUubWVtb2l6ZWRTdGF0ZT1ufSx1c2VIb3N0VHJhbnNpdGlvblN0YXR1czphSix1c2VGb3JtU3RhdGU6YUUsdXNlQWN0aW9uU3RhdGU6YUUsdXNlT3B0aW1pc3RpYzpmdW5jdGlvbihlKXt2YXIgbj1hcigpO24ubWVtb2l6ZWRTdGF0ZT1uLmJhc2VTdGF0ZT1lO3ZhciB0PXtwZW5kaW5nOm51bGwsbGFuZXM6MCxkaXNwYXRjaDpudWxsLGxhc3RSZW5kZXJlZFJlZHVjZXI6bnVsbCxsYXN0UmVuZGVyZWRTdGF0ZTpudWxsfTtyZXR1cm4gbi5xdWV1ZT10LG49YTYuYmluZChudWxsLG9ZLCEwLHQpLHQuZGlzcGF0Y2g9bixbZSxuXX0sdXNlTWVtb0NhY2hlOmFzLHVzZUNhY2hlUmVmcmVzaDpmdW5jdGlvbigpe3JldHVybiBhcigpLm1lbW9pemVkU3RhdGU9YTIuYmluZChudWxsLG9ZKX19LGlyPXtyZWFkQ29udGV4dDpyWSx1c2U6YWwsdXNlQ2FsbGJhY2s6YXEsdXNlQ29udGV4dDpyWSx1c2VFZmZlY3Q6YU0sdXNlSW1wZXJhdGl2ZUhhbmRsZTphVSx1c2VJbnNlcnRpb25FZmZlY3Q6YUksdXNlTGF5b3V0RWZmZWN0OmFILHVzZU1lbW86YVcsdXNlUmVkdWNlcjphdSx1c2VSZWY6YVIsdXNlU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gYXUoYWMpfSx1c2VEZWJ1Z1ZhbHVlOmFWLHVzZURlZmVycmVkVmFsdWU6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gYVooYW8oKSxvWC5tZW1vaXplZFN0YXRlLGUsbil9LHVzZVRyYW5zaXRpb246ZnVuY3Rpb24oKXt2YXIgZT1hdShhYylbMF0sbj1hbygpLm1lbW9pemVkU3RhdGU7cmV0dXJuW1wiYm9vbGVhblwiPT10eXBlb2YgZT9lOmFpKGUpLG5dfSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTphcCx1c2VJZDphMCx1c2VIb3N0VHJhbnNpdGlvblN0YXR1czphSix1c2VGb3JtU3RhdGU6YV8sdXNlQWN0aW9uU3RhdGU6YV8sdXNlT3B0aW1pc3RpYzpmdW5jdGlvbihlLG4pe3JldHVybiBheChhbygpLG9YLGUsbil9LHVzZU1lbW9DYWNoZTphcyx1c2VDYWNoZVJlZnJlc2g6YTF9LGlvPXtyZWFkQ29udGV4dDpyWSx1c2U6YWwsdXNlQ2FsbGJhY2s6YXEsdXNlQ29udGV4dDpyWSx1c2VFZmZlY3Q6YU0sdXNlSW1wZXJhdGl2ZUhhbmRsZTphVSx1c2VJbnNlcnRpb25FZmZlY3Q6YUksdXNlTGF5b3V0RWZmZWN0OmFILHVzZU1lbW86YVcsdXNlUmVkdWNlcjphZix1c2VSZWY6YVIsdXNlU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gYWYoYWMpfSx1c2VEZWJ1Z1ZhbHVlOmFWLHVzZURlZmVycmVkVmFsdWU6ZnVuY3Rpb24oZSxuKXt2YXIgdD1hbygpO3JldHVybiBudWxsPT09b1g/YSQodCxlLG4pOmFaKHQsb1gubWVtb2l6ZWRTdGF0ZSxlLG4pfSx1c2VUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9YWYoYWMpWzBdLG49YW8oKS5tZW1vaXplZFN0YXRlO3JldHVybltcImJvb2xlYW5cIj09dHlwZW9mIGU/ZTphaShlKSxuXX0sdXNlU3luY0V4dGVybmFsU3RvcmU6YXAsdXNlSWQ6YTAsdXNlSG9zdFRyYW5zaXRpb25TdGF0dXM6YUosdXNlRm9ybVN0YXRlOmFMLHVzZUFjdGlvblN0YXRlOmFMLHVzZU9wdGltaXN0aWM6ZnVuY3Rpb24oZSxuKXt2YXIgdD1hbygpO3JldHVybiBudWxsIT09b1g/YXgodCxvWCxlLG4pOih0LmJhc2VTdGF0ZT1lLFtlLHQucXVldWUuZGlzcGF0Y2hdKX0sdXNlTWVtb0NhY2hlOmFzLHVzZUNhY2hlUmVmcmVzaDphMX07ZnVuY3Rpb24gaWEoZSxuLHQscil7dD1udWxsPT0odD10KHIsbj1lLm1lbW9pemVkU3RhdGUpKT9uOmYoe30sbix0KSxlLm1lbW9pemVkU3RhdGU9dCwwPT09ZS5sYW5lcyYmKGUudXBkYXRlUXVldWUuYmFzZVN0YXRlPXQpfXZhciBpaT17ZW5xdWV1ZVNldFN0YXRlOmZ1bmN0aW9uKGUsbix0KXtlPWUuX3JlYWN0SW50ZXJuYWxzO3ZhciByPXN0KCksbz1vQShyKTtvLnBheWxvYWQ9bixudWxsIT10JiYoby5jYWxsYmFjaz10KSxudWxsIT09KG49b08oZSxvLHIpKSYmKHNvKG4sZSxyKSxvQyhuLGUscikpfSxlbnF1ZXVlUmVwbGFjZVN0YXRlOmZ1bmN0aW9uKGUsbix0KXtlPWUuX3JlYWN0SW50ZXJuYWxzO3ZhciByPXN0KCksbz1vQShyKTtvLnRhZz0xLG8ucGF5bG9hZD1uLG51bGwhPXQmJihvLmNhbGxiYWNrPXQpLG51bGwhPT0obj1vTyhlLG8scikpJiYoc28obixlLHIpLG9DKG4sZSxyKSl9LGVucXVldWVGb3JjZVVwZGF0ZTpmdW5jdGlvbihlLG4pe2U9ZS5fcmVhY3RJbnRlcm5hbHM7dmFyIHQ9c3QoKSxyPW9BKHQpO3IudGFnPTIsbnVsbCE9biYmKHIuY2FsbGJhY2s9biksbnVsbCE9PShuPW9PKGUscix0KSkmJihzbyhuLGUsdCksb0MobixlLHQpKX19O2Z1bmN0aW9uIGlsKGUsbix0LHIsbyxhLGkpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mKGU9ZS5zdGF0ZU5vZGUpLnNob3VsZENvbXBvbmVudFVwZGF0ZT9lLnNob3VsZENvbXBvbmVudFVwZGF0ZShyLGEsaSk6IW4ucHJvdG90eXBlfHwhbi5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnR8fCF0Qyh0LHIpfHwhdEMobyxhKX1mdW5jdGlvbiBpcyhlLG4sdCxyKXtlPW4uc3RhdGUsXCJmdW5jdGlvblwiPT10eXBlb2Ygbi5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiZuLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHModCxyKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiZuLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKHQsciksbi5zdGF0ZSE9PWUmJmlpLmVucXVldWVSZXBsYWNlU3RhdGUobixuLnN0YXRlLG51bGwpfWZ1bmN0aW9uIGljKGUsbil7dmFyIHQ9bjtpZihcInJlZlwiaW4gbilmb3IodmFyIHIgaW4gdD17fSxuKVwicmVmXCIhPT1yJiYodFtyXT1uW3JdKTtpZihlPWUuZGVmYXVsdFByb3BzKWZvcih2YXIgbyBpbiB0PT09biYmKHQ9Zih7fSx0KSksZSl2b2lkIDA9PT10W29dJiYodFtvXT1lW29dKTtyZXR1cm4gdH1mdW5jdGlvbiBpdShlKXt0RyhlKX1mdW5jdGlvbiBpZChlKXtjb25zb2xlLmVycm9yKGUpfWZ1bmN0aW9uIGlwKGUpe3RHKGUpfWZ1bmN0aW9uIGloKGUsbil7dHJ5eygwLGUub25VbmNhdWdodEVycm9yKShuLnZhbHVlLHtjb21wb25lbnRTdGFjazpuLnN0YWNrfSl9Y2F0Y2goZSl7c2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IGV9KX19ZnVuY3Rpb24gaWcoZSxuLHQpe3RyeXsoMCxlLm9uQ2F1Z2h0RXJyb3IpKHQudmFsdWUse2NvbXBvbmVudFN0YWNrOnQuc3RhY2ssZXJyb3JCb3VuZGFyeToxPT09bi50YWc/bi5zdGF0ZU5vZGU6bnVsbH0pfWNhdGNoKGUpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBlfSl9fWZ1bmN0aW9uIGltKGUsbix0KXtyZXR1cm4odD1vQSh0KSkudGFnPTMsdC5wYXlsb2FkPXtlbGVtZW50Om51bGx9LHQuY2FsbGJhY2s9ZnVuY3Rpb24oKXtpaChlLG4pfSx0fWZ1bmN0aW9uIGl2KGUpe3JldHVybihlPW9BKGUpKS50YWc9MyxlfWZ1bmN0aW9uIGliKGUsbix0LHIpe3ZhciBvPXQudHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I7aWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygbyl7dmFyIGE9ci52YWx1ZTtlLnBheWxvYWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbyhhKX0sZS5jYWxsYmFjaz1mdW5jdGlvbigpe2lnKG4sdCxyKX19dmFyIGk9dC5zdGF0ZU5vZGU7bnVsbCE9PWkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGkuY29tcG9uZW50RGlkQ2F0Y2gmJihlLmNhbGxiYWNrPWZ1bmN0aW9uKCl7aWcobix0LHIpLFwiZnVuY3Rpb25cIiE9dHlwZW9mIG8mJihudWxsPT09bDI/bDI9bmV3IFNldChbdGhpc10pOmwyLmFkZCh0aGlzKSk7dmFyIGU9ci5zdGFjazt0aGlzLmNvbXBvbmVudERpZENhdGNoKHIudmFsdWUse2NvbXBvbmVudFN0YWNrOm51bGwhPT1lP2U6XCJcIn0pfSl9dmFyIGl5PUVycm9yKGwoNDYxKSksaXg9ITE7ZnVuY3Rpb24gaXcoZSxuLHQscil7bi5jaGlsZD1udWxsPT09ZT9veChuLG51bGwsdCxyKTpveShuLGUuY2hpbGQsdCxyKX1mdW5jdGlvbiBpaihlLG4sdCxyLG8pe3Q9dC5yZW5kZXI7dmFyIGE9bi5yZWY7aWYoXCJyZWZcImluIHIpe3ZhciBpPXt9O2Zvcih2YXIgbCBpbiByKVwicmVmXCIhPT1sJiYoaVtsXT1yW2xdKX1lbHNlIGk9cjtyZXR1cm4ocloobikscj1vNihlLG4sdCxpLGEsbyksbD1hZSgpLG51bGw9PT1lfHxpeCk/KHJTJiZsJiZyaihuKSxuLmZsYWdzfD0xLGl3KGUsbixyLG8pLG4uY2hpbGQpOihhbihlLG4sbyksaXEoZSxuLG8pKX1mdW5jdGlvbiBpayhlLG4sdCxyLG8pe2lmKG51bGw9PT1lKXt2YXIgYT10LnR5cGU7cmV0dXJuXCJmdW5jdGlvblwiIT10eXBlb2YgYXx8cm4oYSl8fHZvaWQgMCE9PWEuZGVmYXVsdFByb3BzfHxudWxsIT09dC5jb21wYXJlPygoZT1ybyh0LnR5cGUsbnVsbCxyLG4sbi5tb2RlLG8pKS5yZWY9bi5yZWYsZS5yZXR1cm49bixuLmNoaWxkPWUpOihuLnRhZz0xNSxuLnR5cGU9YSxpQShlLG4sYSxyLG8pKX1pZihhPWUuY2hpbGQsIWlXKGUsbykpe3ZhciBpPWEubWVtb2l6ZWRQcm9wcztpZigodD1udWxsIT09KHQ9dC5jb21wYXJlKT90OnRDKShpLHIpJiZlLnJlZj09PW4ucmVmKXJldHVybiBpcShlLG4sbyl9cmV0dXJuIG4uZmxhZ3N8PTEsKGU9cnQoYSxyKSkucmVmPW4ucmVmLGUucmV0dXJuPW4sbi5jaGlsZD1lfWZ1bmN0aW9uIGlBKGUsbix0LHIsbyl7aWYobnVsbCE9PWUpe3ZhciBhPWUubWVtb2l6ZWRQcm9wcztpZih0QyhhLHIpJiZlLnJlZj09PW4ucmVmKWlmKGl4PSExLG4ucGVuZGluZ1Byb3BzPXI9YSwhaVcoZSxvKSlyZXR1cm4gbi5sYW5lcz1lLmxhbmVzLGlxKGUsbixvKTtlbHNlIDAhPSgxMzEwNzImZS5mbGFncykmJihpeD0hMCl9cmV0dXJuIGlQKGUsbix0LHIsbyl9ZnVuY3Rpb24gaU8oZSxuLHQscil7dmFyIG89ci5jaGlsZHJlbixhPW51bGwhPT1lP2UubWVtb2l6ZWRTdGF0ZTpudWxsO2lmKFwiaGlkZGVuXCI9PT1yLm1vZGUpe2lmKDAhPSgxMjgmbi5mbGFncykpe2lmKHI9bnVsbCE9PWE/YS5iYXNlTGFuZXN8dDp0LG51bGwhPT1lKXtmb3IoYT0wLG89bi5jaGlsZD1lLmNoaWxkO251bGwhPT1vOylhPWF8by5sYW5lc3xvLmNoaWxkTGFuZXMsbz1vLnNpYmxpbmc7bi5jaGlsZExhbmVzPWEmfnJ9ZWxzZSBuLmNoaWxkTGFuZXM9MCxuLmNoaWxkPW51bGw7cmV0dXJuIGlDKGUsbixyLHQpfWlmKDA9PSgweDIwMDAwMDAwJnQpKXJldHVybiBuLmxhbmVzPW4uY2hpbGRMYW5lcz0weDIwMDAwMDAwLGlDKGUsbixudWxsIT09YT9hLmJhc2VMYW5lc3x0OnQsdCk7bi5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6MCxjYWNoZVBvb2w6bnVsbH0sbnVsbCE9PWUmJm9uKG4sbnVsbCE9PWE/YS5jYWNoZVBvb2w6bnVsbCksbnVsbCE9PWE/b04obixhKTpvRCgpLG9VKG4pfWVsc2UgbnVsbCE9PWE/KG9uKG4sYS5jYWNoZVBvb2wpLG9OKG4sYSksb1Yobiksbi5tZW1vaXplZFN0YXRlPW51bGwpOihudWxsIT09ZSYmb24obixudWxsKSxvRCgpLG9WKG4pKTtyZXR1cm4gaXcoZSxuLG8sdCksbi5jaGlsZH1mdW5jdGlvbiBpQyhlLG4sdCxyKXt2YXIgbz1vZSgpO3JldHVybiBuLm1lbW9pemVkU3RhdGU9e2Jhc2VMYW5lczp0LGNhY2hlUG9vbDpvPW51bGw9PT1vP251bGw6e3BhcmVudDpyMC5fY3VycmVudFZhbHVlLHBvb2w6b319LG51bGwhPT1lJiZvbihuLG51bGwpLG9EKCksb1UobiksbnVsbCE9PWUmJnJXKGUsbixyLCEwKSxudWxsfWZ1bmN0aW9uIGlTKGUsbil7cmV0dXJuKG49aUkoe21vZGU6bi5tb2RlLGNoaWxkcmVuOm4uY2hpbGRyZW59LGUubW9kZSkpLnJlZj1lLnJlZixlLmNoaWxkPW4sbi5yZXR1cm49ZSxufWZ1bmN0aW9uIGlFKGUsbix0KXtyZXR1cm4gb3kobixlLmNoaWxkLG51bGwsdCksZT1pUyhuLG4ucGVuZGluZ1Byb3BzKSxlLmZsYWdzfD0yLG9xKG4pLG4ubWVtb2l6ZWRTdGF0ZT1udWxsLGV9ZnVuY3Rpb24gaV8oZSxuKXt2YXIgdD1uLnJlZjtpZihudWxsPT09dCludWxsIT09ZSYmbnVsbCE9PWUucmVmJiYobi5mbGFnc3w9NDE5NDgxNik7ZWxzZXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiZcIm9iamVjdFwiIT10eXBlb2YgdCl0aHJvdyBFcnJvcihsKDI4NCkpOyhudWxsPT09ZXx8ZS5yZWYhPT10KSYmKG4uZmxhZ3N8PTQxOTQ4MTYpfX1mdW5jdGlvbiBpUChlLG4sdCxyLG8pe3JldHVybihyWihuKSx0PW82KGUsbix0LHIsdm9pZCAwLG8pLHI9YWUoKSxudWxsPT09ZXx8aXgpPyhyUyYmciYmcmoobiksbi5mbGFnc3w9MSxpdyhlLG4sdCxvKSxuLmNoaWxkKTooYW4oZSxuLG8pLGlxKGUsbixvKSl9ZnVuY3Rpb24gaXooZSxuLHQscixvLGEpe3JldHVybihyWihuKSxuLnVwZGF0ZVF1ZXVlPW51bGwsdD1vOChuLHIsdCxvKSxvOShlKSxyPWFlKCksbnVsbD09PWV8fGl4KT8oclMmJnImJnJqKG4pLG4uZmxhZ3N8PTEsaXcoZSxuLHQsYSksbi5jaGlsZCk6KGFuKGUsbixhKSxpcShlLG4sYSkpfWZ1bmN0aW9uIGlMKGUsbix0LHIsbyl7aWYocloobiksbnVsbD09PW4uc3RhdGVOb2RlKXt2YXIgYT10OCxpPXQuY29udGV4dFR5cGU7XCJvYmplY3RcIj09dHlwZW9mIGkmJm51bGwhPT1pJiYoYT1yWShpKSksbi5tZW1vaXplZFN0YXRlPW51bGwhPT0oYT1uZXcgdChyLGEpKS5zdGF0ZSYmdm9pZCAwIT09YS5zdGF0ZT9hLnN0YXRlOm51bGwsYS51cGRhdGVyPWlpLG4uc3RhdGVOb2RlPWEsYS5fcmVhY3RJbnRlcm5hbHM9biwoYT1uLnN0YXRlTm9kZSkucHJvcHM9cixhLnN0YXRlPW4ubWVtb2l6ZWRTdGF0ZSxhLnJlZnM9e30sb2oobiksaT10LmNvbnRleHRUeXBlLGEuY29udGV4dD1cIm9iamVjdFwiPT10eXBlb2YgaSYmbnVsbCE9PWk/clkoaSk6dDgsYS5zdGF0ZT1uLm1lbW9pemVkU3RhdGUsXCJmdW5jdGlvblwiPT10eXBlb2YoaT10LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcykmJihpYShuLHQsaSxyKSxhLnN0YXRlPW4ubWVtb2l6ZWRTdGF0ZSksXCJmdW5jdGlvblwiPT10eXBlb2YgdC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHN8fFwiZnVuY3Rpb25cIj09dHlwZW9mIGEuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGV8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGEuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCYmXCJmdW5jdGlvblwiIT10eXBlb2YgYS5jb21wb25lbnRXaWxsTW91bnR8fChpPWEuc3RhdGUsXCJmdW5jdGlvblwiPT10eXBlb2YgYS5jb21wb25lbnRXaWxsTW91bnQmJmEuY29tcG9uZW50V2lsbE1vdW50KCksXCJmdW5jdGlvblwiPT10eXBlb2YgYS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JiZhLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKSxpIT09YS5zdGF0ZSYmaWkuZW5xdWV1ZVJlcGxhY2VTdGF0ZShhLGEuc3RhdGUsbnVsbCksb1AobixyLGEsbyksb18oKSxhLnN0YXRlPW4ubWVtb2l6ZWRTdGF0ZSksXCJmdW5jdGlvblwiPT10eXBlb2YgYS5jb21wb25lbnREaWRNb3VudCYmKG4uZmxhZ3N8PTQxOTQzMDgpLHI9ITB9ZWxzZSBpZihudWxsPT09ZSl7YT1uLnN0YXRlTm9kZTt2YXIgbD1uLm1lbW9pemVkUHJvcHMscz1pYyh0LGwpO2EucHJvcHM9czt2YXIgYz1hLmNvbnRleHQsdT10LmNvbnRleHRUeXBlO2k9dDgsXCJvYmplY3RcIj09dHlwZW9mIHUmJm51bGwhPT11JiYoaT1yWSh1KSk7dmFyIGQ9dC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7dT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBkfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlLGw9bi5wZW5kaW5nUHJvcHMhPT1sLHV8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGEuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGEuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc3x8KGx8fGMhPT1pKSYmaXMobixhLHIsaSksb3c9ITE7dmFyIGY9bi5tZW1vaXplZFN0YXRlO2Euc3RhdGU9ZixvUChuLHIsYSxvKSxvXygpLGM9bi5tZW1vaXplZFN0YXRlLGx8fGYhPT1jfHxvdz8oXCJmdW5jdGlvblwiPT10eXBlb2YgZCYmKGlhKG4sdCxkLHIpLGM9bi5tZW1vaXplZFN0YXRlKSwocz1vd3x8aWwobix0LHMscixmLGMsaSkpPyh1fHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBhLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGEuY29tcG9uZW50V2lsbE1vdW50fHwoXCJmdW5jdGlvblwiPT10eXBlb2YgYS5jb21wb25lbnRXaWxsTW91bnQmJmEuY29tcG9uZW50V2lsbE1vdW50KCksXCJmdW5jdGlvblwiPT10eXBlb2YgYS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JiZhLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKSksXCJmdW5jdGlvblwiPT10eXBlb2YgYS5jb21wb25lbnREaWRNb3VudCYmKG4uZmxhZ3N8PTQxOTQzMDgpKTooXCJmdW5jdGlvblwiPT10eXBlb2YgYS5jb21wb25lbnREaWRNb3VudCYmKG4uZmxhZ3N8PTQxOTQzMDgpLG4ubWVtb2l6ZWRQcm9wcz1yLG4ubWVtb2l6ZWRTdGF0ZT1jKSxhLnByb3BzPXIsYS5zdGF0ZT1jLGEuY29udGV4dD1pLHI9cyk6KFwiZnVuY3Rpb25cIj09dHlwZW9mIGEuY29tcG9uZW50RGlkTW91bnQmJihuLmZsYWdzfD00MTk0MzA4KSxyPSExKX1lbHNle2E9bi5zdGF0ZU5vZGUsb2soZSxuKSx1PWljKHQsaT1uLm1lbW9pemVkUHJvcHMpLGEucHJvcHM9dSxkPW4ucGVuZGluZ1Byb3BzLGY9YS5jb250ZXh0LGM9dC5jb250ZXh0VHlwZSxzPXQ4LFwib2JqZWN0XCI9PXR5cGVvZiBjJiZudWxsIT09YyYmKHM9clkoYykpLChjPVwiZnVuY3Rpb25cIj09dHlwZW9mKGw9dC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMpfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKXx8XCJmdW5jdGlvblwiIT10eXBlb2YgYS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmXCJmdW5jdGlvblwiIT10eXBlb2YgYS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzfHwoaSE9PWR8fGYhPT1zKSYmaXMobixhLHIscyksb3c9ITEsZj1uLm1lbW9pemVkU3RhdGUsYS5zdGF0ZT1mLG9QKG4scixhLG8pLG9fKCk7dmFyIHA9bi5tZW1vaXplZFN0YXRlO2khPT1kfHxmIT09cHx8b3d8fG51bGwhPT1lJiZudWxsIT09ZS5kZXBlbmRlbmNpZXMmJnIkKGUuZGVwZW5kZW5jaWVzKT8oXCJmdW5jdGlvblwiPT10eXBlb2YgbCYmKGlhKG4sdCxsLHIpLHA9bi5tZW1vaXplZFN0YXRlKSwodT1vd3x8aWwobix0LHUscixmLHAscyl8fG51bGwhPT1lJiZudWxsIT09ZS5kZXBlbmRlbmNpZXMmJnIkKGUuZGVwZW5kZW5jaWVzKSk/KGN8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGEuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGEuY29tcG9uZW50V2lsbFVwZGF0ZXx8KFwiZnVuY3Rpb25cIj09dHlwZW9mIGEuY29tcG9uZW50V2lsbFVwZGF0ZSYmYS5jb21wb25lbnRXaWxsVXBkYXRlKHIscCxzKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlJiZhLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlKHIscCxzKSksXCJmdW5jdGlvblwiPT10eXBlb2YgYS5jb21wb25lbnREaWRVcGRhdGUmJihuLmZsYWdzfD00KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlJiYobi5mbGFnc3w9MTAyNCkpOihcImZ1bmN0aW9uXCIhPXR5cGVvZiBhLmNvbXBvbmVudERpZFVwZGF0ZXx8aT09PWUubWVtb2l6ZWRQcm9wcyYmZj09PWUubWVtb2l6ZWRTdGF0ZXx8KG4uZmxhZ3N8PTQpLFwiZnVuY3Rpb25cIiE9dHlwZW9mIGEuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGV8fGk9PT1lLm1lbW9pemVkUHJvcHMmJmY9PT1lLm1lbW9pemVkU3RhdGV8fChuLmZsYWdzfD0xMDI0KSxuLm1lbW9pemVkUHJvcHM9cixuLm1lbW9pemVkU3RhdGU9cCksYS5wcm9wcz1yLGEuc3RhdGU9cCxhLmNvbnRleHQ9cyxyPXUpOihcImZ1bmN0aW9uXCIhPXR5cGVvZiBhLmNvbXBvbmVudERpZFVwZGF0ZXx8aT09PWUubWVtb2l6ZWRQcm9wcyYmZj09PWUubWVtb2l6ZWRTdGF0ZXx8KG4uZmxhZ3N8PTQpLFwiZnVuY3Rpb25cIiE9dHlwZW9mIGEuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGV8fGk9PT1lLm1lbW9pemVkUHJvcHMmJmY9PT1lLm1lbW9pemVkU3RhdGV8fChuLmZsYWdzfD0xMDI0KSxyPSExKX1yZXR1cm4gYT1yLGlfKGUsbikscj0wIT0oMTI4Jm4uZmxhZ3MpLGF8fHI/KGE9bi5zdGF0ZU5vZGUsdD1yJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB0LmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcj9udWxsOmEucmVuZGVyKCksbi5mbGFnc3w9MSxudWxsIT09ZSYmcj8obi5jaGlsZD1veShuLGUuY2hpbGQsbnVsbCxvKSxuLmNoaWxkPW95KG4sbnVsbCx0LG8pKTppdyhlLG4sdCxvKSxuLm1lbW9pemVkU3RhdGU9YS5zdGF0ZSxlPW4uY2hpbGQpOmU9aXEoZSxuLG8pLGV9ZnVuY3Rpb24gaVQoZSxuLHQscil7cmV0dXJuIHJOKCksbi5mbGFnc3w9MjU2LGl3KGUsbix0LHIpLG4uY2hpbGR9dmFyIGlSPXtkZWh5ZHJhdGVkOm51bGwsdHJlZUNvbnRleHQ6bnVsbCxyZXRyeUxhbmU6MCxoeWRyYXRpb25FcnJvcnM6bnVsbH07ZnVuY3Rpb24gaU4oZSl7cmV0dXJue2Jhc2VMYW5lczplLGNhY2hlUG9vbDpvdCgpfX1mdW5jdGlvbiBpRChlLG4sdCl7cmV0dXJuIGU9bnVsbCE9PWU/ZS5jaGlsZExhbmVzJn50OjAsbiYmKGV8PWxZKSxlfWZ1bmN0aW9uIGlCKGUsbix0KXt2YXIgcixvPW4ucGVuZGluZ1Byb3BzLGE9ITEsaT0wIT0oMTI4Jm4uZmxhZ3MpO2lmKChyPWkpfHwocj0obnVsbD09PWV8fG51bGwhPT1lLm1lbW9pemVkU3RhdGUpJiYwIT0oMiZvVy5jdXJyZW50KSksciYmKGE9ITAsbi5mbGFncyY9LTEyOSkscj0wIT0oMzImbi5mbGFncyksbi5mbGFncyY9LTMzLG51bGw9PT1lKXtpZihyUyl7aWYoYT9vSChuKTpvVihuKSwoZT1yQyk/bnVsbCE9PShlPW51bGwhPT0oZT1jQyhlLHJfKSkmJlwiJlwiIT09ZS5kYXRhP2U6bnVsbCkmJihuLm1lbW9pemVkU3RhdGU9e2RlaHlkcmF0ZWQ6ZSx0cmVlQ29udGV4dDpudWxsIT09cnY/e2lkOnJiLG92ZXJmbG93OnJ5fTpudWxsLHJldHJ5TGFuZToweDIwMDAwMDAwLGh5ZHJhdGlvbkVycm9yczpudWxsfSwodD1ybChlKSkucmV0dXJuPW4sbi5jaGlsZD10LHJPPW4sckM9bnVsbCk6ZT1udWxsLG51bGw9PT1lKXRocm93IHJ6KG4pO3JldHVybiBjRShlKT9uLmxhbmVzPTMyOm4ubGFuZXM9MHgyMDAwMDAwMCxudWxsfXZhciBzPW8uY2hpbGRyZW47cmV0dXJuKG89by5mYWxsYmFjayxhKT8ob1Yobikscz1pSSh7bW9kZTpcImhpZGRlblwiLGNoaWxkcmVuOnN9LGE9bi5tb2RlKSxvPXJhKG8sYSx0LG51bGwpLHMucmV0dXJuPW4sby5yZXR1cm49bixzLnNpYmxpbmc9byxuLmNoaWxkPXMsKHM9bi5jaGlsZCkubWVtb2l6ZWRTdGF0ZT1pTih0KSxzLmNoaWxkTGFuZXM9aUQoZSxyLHQpLG4ubWVtb2l6ZWRTdGF0ZT1pUixvKToob0gobiksaU0obixzKSl9dmFyIGM9ZS5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1jJiZudWxsIT09KHM9Yy5kZWh5ZHJhdGVkKSl7aWYoaSkyNTYmbi5mbGFncz8ob0gobiksbi5mbGFncyY9LTI1NyxuPWlIKGUsbix0KSk6bnVsbCE9PW4ubWVtb2l6ZWRTdGF0ZT8ob1Yobiksbi5jaGlsZD1lLmNoaWxkLG4uZmxhZ3N8PTEyOCxuPW51bGwpOihvVihuKSxzPW8uZmFsbGJhY2ssYT1uLm1vZGUsbz1pSSh7bW9kZTpcInZpc2libGVcIixjaGlsZHJlbjpvLmNoaWxkcmVufSxhKSxzPXJhKHMsYSx0LG51bGwpLHMuZmxhZ3N8PTIsby5yZXR1cm49bixzLnJldHVybj1uLG8uc2libGluZz1zLG4uY2hpbGQ9byxveShuLGUuY2hpbGQsbnVsbCx0KSwobz1uLmNoaWxkKS5tZW1vaXplZFN0YXRlPWlOKHQpLG8uY2hpbGRMYW5lcz1pRChlLHIsdCksbi5tZW1vaXplZFN0YXRlPWlSLG49cyk7ZWxzZSBpZihvSChuKSxjRShzKSl7aWYocj1zLm5leHRTaWJsaW5nJiZzLm5leHRTaWJsaW5nLmRhdGFzZXQpdmFyIHU9ci5kZ3N0O3I9dSwobz1FcnJvcihsKDQxOSkpKS5zdGFjaz1cIlwiLG8uZGlnZXN0PXIsckIoe3ZhbHVlOm8sc291cmNlOm51bGwsc3RhY2s6bnVsbH0pLG49aUgoZSxuLHQpfWVsc2UgaWYoaXh8fHJXKGUsbix0LCExKSxyPTAhPSh0JmUuY2hpbGRMYW5lcyksaXh8fHIpe2lmKG51bGwhPT0ocj1sTikmJjAhPT0obz1lXyhyLHQpKSYmbyE9PWMucmV0cnlMYW5lKXRocm93IGMucmV0cnlMYW5lPW8sdDMoZSxvKSxzbyhyLGUsbyksaXk7Y1Mocyl8fHNnKCksbj1pSChlLG4sdCl9ZWxzZSBjUyhzKT8obi5mbGFnc3w9MTkyLG4uY2hpbGQ9ZS5jaGlsZCxuPW51bGwpOihlPWMudHJlZUNvbnRleHQsckM9Y18ocy5uZXh0U2libGluZyksck89bixyUz0hMCxyRT1udWxsLHJfPSExLG51bGwhPT1lJiZyQShuLGUpLG49aU0obixvLmNoaWxkcmVuKSxuLmZsYWdzfD00MDk2KTtyZXR1cm4gbn1yZXR1cm4gYT8ob1Yobikscz1vLmZhbGxiYWNrLGE9bi5tb2RlLHU9KGM9ZS5jaGlsZCkuc2libGluZywobz1ydChjLHttb2RlOlwiaGlkZGVuXCIsY2hpbGRyZW46by5jaGlsZHJlbn0pKS5zdWJ0cmVlRmxhZ3M9MHgzZTAwMDAwJmMuc3VidHJlZUZsYWdzLG51bGwhPT11P3M9cnQodSxzKToocz1yYShzLGEsdCxudWxsKSxzLmZsYWdzfD0yKSxzLnJldHVybj1uLG8ucmV0dXJuPW4sby5zaWJsaW5nPXMsbi5jaGlsZD1vLG89cyxzPW4uY2hpbGQsbnVsbD09PShhPWUuY2hpbGQubWVtb2l6ZWRTdGF0ZSk/YT1pTih0KToobnVsbCE9PShjPWEuY2FjaGVQb29sKT8odT1yMC5fY3VycmVudFZhbHVlLGM9Yy5wYXJlbnQhPT11P3twYXJlbnQ6dSxwb29sOnV9OmMpOmM9b3QoKSxhPXtiYXNlTGFuZXM6YS5iYXNlTGFuZXN8dCxjYWNoZVBvb2w6Y30pLHMubWVtb2l6ZWRTdGF0ZT1hLHMuY2hpbGRMYW5lcz1pRChlLHIsdCksbi5tZW1vaXplZFN0YXRlPWlSLG8pOihvSChuKSxlPSh0PWUuY2hpbGQpLnNpYmxpbmcsKHQ9cnQodCx7bW9kZTpcInZpc2libGVcIixjaGlsZHJlbjpvLmNoaWxkcmVufSkpLnJldHVybj1uLHQuc2libGluZz1udWxsLG51bGwhPT1lJiYobnVsbD09PShyPW4uZGVsZXRpb25zKT8obi5kZWxldGlvbnM9W2VdLG4uZmxhZ3N8PTE2KTpyLnB1c2goZSkpLG4uY2hpbGQ9dCxuLm1lbW9pemVkU3RhdGU9bnVsbCx0KX1mdW5jdGlvbiBpTShlLG4pe3JldHVybihuPWlJKHttb2RlOlwidmlzaWJsZVwiLGNoaWxkcmVuOm59LGUubW9kZSkpLnJldHVybj1lLGUuY2hpbGQ9bn1mdW5jdGlvbiBpSShlLG4pe3JldHVybihlPXJlKDIyLGUsbnVsbCxuKSkubGFuZXM9MCxlLnN0YXRlTm9kZT17X3Zpc2liaWxpdHk6MSxfcGVuZGluZ01hcmtlcnM6bnVsbCxfcmV0cnlDYWNoZTpudWxsLF90cmFuc2l0aW9uczpudWxsfSxlfWZ1bmN0aW9uIGlIKGUsbix0KXtyZXR1cm4gb3kobixlLmNoaWxkLG51bGwsdCksZT1pTShuLG4ucGVuZGluZ1Byb3BzLmNoaWxkcmVuKSxlLmZsYWdzfD0yLG4ubWVtb2l6ZWRTdGF0ZT1udWxsLGV9ZnVuY3Rpb24gaUYoZSxuLHQpe2UubGFuZXN8PW47dmFyIHI9ZS5hbHRlcm5hdGU7bnVsbCE9PXImJihyLmxhbmVzfD1uKSxyVihlLnJldHVybixuLHQpfWZ1bmN0aW9uIGlVKGUsbix0LHIsbyxhKXt2YXIgaT1lLm1lbW9pemVkU3RhdGU7bnVsbD09PWk/ZS5tZW1vaXplZFN0YXRlPXtpc0JhY2t3YXJkczpuLHJlbmRlcmluZzpudWxsLHJlbmRlcmluZ1N0YXJ0VGltZTowLGxhc3Q6cix0YWlsOnQsdGFpbE1vZGU6byx0cmVlRm9ya0NvdW50OmF9OihpLmlzQmFja3dhcmRzPW4saS5yZW5kZXJpbmc9bnVsbCxpLnJlbmRlcmluZ1N0YXJ0VGltZT0wLGkubGFzdD1yLGkudGFpbD10LGkudGFpbE1vZGU9byxpLnRyZWVGb3JrQ291bnQ9YSl9ZnVuY3Rpb24gaVYoZSxuLHQpe3ZhciByPW4ucGVuZGluZ1Byb3BzLG89ci5yZXZlYWxPcmRlcixhPXIudGFpbDtyPXIuY2hpbGRyZW47dmFyIGk9b1cuY3VycmVudCxsPTAhPSgyJmkpO2lmKGw/KGk9MSZpfDIsbi5mbGFnc3w9MTI4KTppJj0xLEkob1csaSksaXcoZSxuLHIsdCkscj1yUz9yaDowLCFsJiZudWxsIT09ZSYmMCE9KDEyOCZlLmZsYWdzKSllOmZvcihlPW4uY2hpbGQ7bnVsbCE9PWU7KXtpZigxMz09PWUudGFnKW51bGwhPT1lLm1lbW9pemVkU3RhdGUmJmlGKGUsdCxuKTtlbHNlIGlmKDE5PT09ZS50YWcpaUYoZSx0LG4pO2Vsc2UgaWYobnVsbCE9PWUuY2hpbGQpe2UuY2hpbGQucmV0dXJuPWUsZT1lLmNoaWxkO2NvbnRpbnVlfWlmKGU9PT1uKWJyZWFrO2Zvcig7bnVsbD09PWUuc2libGluZzspe2lmKG51bGw9PT1lLnJldHVybnx8ZS5yZXR1cm49PT1uKWJyZWFrIGU7ZT1lLnJldHVybn1lLnNpYmxpbmcucmV0dXJuPWUucmV0dXJuLGU9ZS5zaWJsaW5nfXN3aXRjaChvKXtjYXNlXCJmb3J3YXJkc1wiOmZvcihvPW51bGwsdD1uLmNoaWxkO251bGwhPT10OyludWxsIT09KGU9dC5hbHRlcm5hdGUpJiZudWxsPT09byQoZSkmJihvPXQpLHQ9dC5zaWJsaW5nO251bGw9PT0odD1vKT8obz1uLmNoaWxkLG4uY2hpbGQ9bnVsbCk6KG89dC5zaWJsaW5nLHQuc2libGluZz1udWxsKSxpVShuLCExLG8sdCxhLHIpO2JyZWFrO2Nhc2VcImJhY2t3YXJkc1wiOmNhc2VcInVuc3RhYmxlX2xlZ2FjeS1iYWNrd2FyZHNcIjpmb3IodD1udWxsLG89bi5jaGlsZCxuLmNoaWxkPW51bGw7bnVsbCE9PW87KXtpZihudWxsIT09KGU9by5hbHRlcm5hdGUpJiZudWxsPT09byQoZSkpe24uY2hpbGQ9bzticmVha31lPW8uc2libGluZyxvLnNpYmxpbmc9dCx0PW8sbz1lfWlVKG4sITAsdCxudWxsLGEscik7YnJlYWs7Y2FzZVwidG9nZXRoZXJcIjppVShuLCExLG51bGwsbnVsbCx2b2lkIDAscik7YnJlYWs7ZGVmYXVsdDpuLm1lbW9pemVkU3RhdGU9bnVsbH1yZXR1cm4gbi5jaGlsZH1mdW5jdGlvbiBpcShlLG4sdCl7aWYobnVsbCE9PWUmJihuLmRlcGVuZGVuY2llcz1lLmRlcGVuZGVuY2llcyksbFd8PW4ubGFuZXMsMD09KHQmbi5jaGlsZExhbmVzKSl7aWYobnVsbD09PWUpcmV0dXJuIG51bGw7ZWxzZSBpZihyVyhlLG4sdCwhMSksMD09KHQmbi5jaGlsZExhbmVzKSlyZXR1cm4gbnVsbH1pZihudWxsIT09ZSYmbi5jaGlsZCE9PWUuY2hpbGQpdGhyb3cgRXJyb3IobCgxNTMpKTtpZihudWxsIT09bi5jaGlsZCl7Zm9yKHQ9cnQoZT1uLmNoaWxkLGUucGVuZGluZ1Byb3BzKSxuLmNoaWxkPXQsdC5yZXR1cm49bjtudWxsIT09ZS5zaWJsaW5nOyllPWUuc2libGluZywodD10LnNpYmxpbmc9cnQoZSxlLnBlbmRpbmdQcm9wcykpLnJldHVybj1uO3Quc2libGluZz1udWxsfXJldHVybiBuLmNoaWxkfWZ1bmN0aW9uIGlXKGUsbil7cmV0dXJuIDAhPShlLmxhbmVzJm4pfHwhIShudWxsIT09KGU9ZS5kZXBlbmRlbmNpZXMpJiZyJChlKSl9ZnVuY3Rpb24gaSQoZSxuLHQpe2lmKG51bGwhPT1lKWlmKGUubWVtb2l6ZWRQcm9wcyE9PW4ucGVuZGluZ1Byb3BzKWl4PSEwO2Vsc2V7aWYoIWlXKGUsdCkmJjA9PSgxMjgmbi5mbGFncykpcmV0dXJuIGl4PSExLGZ1bmN0aW9uKGUsbix0KXtzd2l0Y2gobi50YWcpe2Nhc2UgMzpxKG4sbi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyksckYobixyMCxlLm1lbW9pemVkU3RhdGUuY2FjaGUpLHJOKCk7YnJlYWs7Y2FzZSAyNzpjYXNlIDU6JChuKTticmVhaztjYXNlIDQ6cShuLG4uc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO2JyZWFrO2Nhc2UgMTA6ckYobixuLnR5cGUsbi5tZW1vaXplZFByb3BzLnZhbHVlKTticmVhaztjYXNlIDMxOmlmKG51bGwhPT1uLm1lbW9pemVkU3RhdGUpcmV0dXJuIG4uZmxhZ3N8PTEyOCxvRihuKSxudWxsO2JyZWFrO2Nhc2UgMTM6dmFyIHI9bi5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1yKXtpZihudWxsIT09ci5kZWh5ZHJhdGVkKXJldHVybiBvSChuKSxuLmZsYWdzfD0xMjgsbnVsbDtpZigwIT0odCZuLmNoaWxkLmNoaWxkTGFuZXMpKXJldHVybiBpQihlLG4sdCk7cmV0dXJuIG9IKG4pLG51bGwhPT0oZT1pcShlLG4sdCkpP2Uuc2libGluZzpudWxsfW9IKG4pO2JyZWFrO2Nhc2UgMTk6dmFyIG89MCE9KDEyOCZlLmZsYWdzKTtpZigocj0wIT0odCZuLmNoaWxkTGFuZXMpKXx8KHJXKGUsbix0LCExKSxyPTAhPSh0Jm4uY2hpbGRMYW5lcykpLG8pe2lmKHIpcmV0dXJuIGlWKGUsbix0KTtuLmZsYWdzfD0xMjh9aWYobnVsbCE9PShvPW4ubWVtb2l6ZWRTdGF0ZSkmJihvLnJlbmRlcmluZz1udWxsLG8udGFpbD1udWxsLG8ubGFzdEVmZmVjdD1udWxsKSxJKG9XLG9XLmN1cnJlbnQpLCFyKXJldHVybiBudWxsO2JyZWFrO2Nhc2UgMjI6cmV0dXJuIG4ubGFuZXM9MCxpTyhlLG4sdCxuLnBlbmRpbmdQcm9wcyk7Y2FzZSAyNDpyRihuLHIwLGUubWVtb2l6ZWRTdGF0ZS5jYWNoZSl9cmV0dXJuIGlxKGUsbix0KX0oZSxuLHQpO2l4PTAhPSgxMzEwNzImZS5mbGFncyl9ZWxzZSBpeD0hMSxyUyYmMCE9KDEwNDg1NzYmbi5mbGFncykmJnJ3KG4scmgsbi5pbmRleCk7c3dpdGNoKG4ubGFuZXM9MCxuLnRhZyl7Y2FzZSAxNjplOntlPW4ucGVuZGluZ1Byb3BzO3ZhciByPW4uZWxlbWVudFR5cGUsbz1yLl9pbml0O2lmKHI9byhyLl9wYXlsb2FkKSxuLnR5cGU9cixcImZ1bmN0aW9uXCI9PXR5cGVvZiByKXJuKHIpPyhlPWljKHIsZSksbi50YWc9MSxuPWlMKG51bGwsbixyLGUsdCkpOihuLnRhZz0wLG49aVAobnVsbCxuLHIsZSx0KSk7ZWxzZXtpZihudWxsIT1yKXtpZigobz1yLiQkdHlwZW9mKT09PXcpe24udGFnPTExLG49aWoobnVsbCxuLHIsZSx0KTticmVhayBlfWVsc2UgaWYobz09PUEpe24udGFnPTE0LG49aWsobnVsbCxuLHIsZSx0KTticmVhayBlfX10aHJvdyBFcnJvcihsKDMwNixuPWZ1bmN0aW9uIGUobil7aWYobnVsbD09bilyZXR1cm4gbnVsbDtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuKXJldHVybiBuLiQkdHlwZW9mPT09UD9udWxsOm4uZGlzcGxheU5hbWV8fG4ubmFtZXx8bnVsbDtpZihcInN0cmluZ1wiPT10eXBlb2YgbilyZXR1cm4gbjtzd2l0Y2gobil7Y2FzZSBtOnJldHVyblwiRnJhZ21lbnRcIjtjYXNlIGI6cmV0dXJuXCJQcm9maWxlclwiO2Nhc2UgdjpyZXR1cm5cIlN0cmljdE1vZGVcIjtjYXNlIGo6cmV0dXJuXCJTdXNwZW5zZVwiO2Nhc2UgazpyZXR1cm5cIlN1c3BlbnNlTGlzdFwiO2Nhc2UgQzpyZXR1cm5cIkFjdGl2aXR5XCJ9aWYoXCJvYmplY3RcIj09dHlwZW9mIG4pc3dpdGNoKG4uJCR0eXBlb2Ype2Nhc2UgZzpyZXR1cm5cIlBvcnRhbFwiO2Nhc2UgeDpyZXR1cm4gbi5kaXNwbGF5TmFtZXx8XCJDb250ZXh0XCI7Y2FzZSB5OnJldHVybihuLl9jb250ZXh0LmRpc3BsYXlOYW1lfHxcIkNvbnRleHRcIikrXCIuQ29uc3VtZXJcIjtjYXNlIHc6dmFyIHQ9bi5yZW5kZXI7cmV0dXJuKG49bi5kaXNwbGF5TmFtZSl8fChuPVwiXCIhPT0obj10LmRpc3BsYXlOYW1lfHx0Lm5hbWV8fFwiXCIpP1wiRm9yd2FyZFJlZihcIituK1wiKVwiOlwiRm9yd2FyZFJlZlwiKSxuO2Nhc2UgQTpyZXR1cm4gbnVsbCE9PSh0PW4uZGlzcGxheU5hbWV8fG51bGwpP3Q6ZShuLnR5cGUpfHxcIk1lbW9cIjtjYXNlIE86dD1uLl9wYXlsb2FkLG49bi5faW5pdDt0cnl7cmV0dXJuIGUobih0KSl9Y2F0Y2goZSl7fX1yZXR1cm4gbnVsbH0ocil8fHIsXCJcIikpfX1yZXR1cm4gbjtjYXNlIDA6cmV0dXJuIGlQKGUsbixuLnR5cGUsbi5wZW5kaW5nUHJvcHMsdCk7Y2FzZSAxOnJldHVybiBvPWljKHI9bi50eXBlLG4ucGVuZGluZ1Byb3BzKSxpTChlLG4scixvLHQpO2Nhc2UgMzplOntpZihxKG4sbi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyksbnVsbD09PWUpdGhyb3cgRXJyb3IobCgzODcpKTtyPW4ucGVuZGluZ1Byb3BzO3ZhciBhPW4ubWVtb2l6ZWRTdGF0ZTtvPWEuZWxlbWVudCxvayhlLG4pLG9QKG4scixudWxsLHQpO3ZhciBpPW4ubWVtb2l6ZWRTdGF0ZTtpZihyRihuLHIwLHI9aS5jYWNoZSksciE9PWEuY2FjaGUmJnJxKG4sW3IwXSx0LCEwKSxvXygpLHI9aS5lbGVtZW50LGEuaXNEZWh5ZHJhdGVkKWlmKGE9e2VsZW1lbnQ6cixpc0RlaHlkcmF0ZWQ6ITEsY2FjaGU6aS5jYWNoZX0sbi51cGRhdGVRdWV1ZS5iYXNlU3RhdGU9YSxuLm1lbW9pemVkU3RhdGU9YSwyNTYmbi5mbGFncyl7bj1pVChlLG4scix0KTticmVhayBlfWVsc2UgaWYociE9PW8pe3JCKG89cnUoRXJyb3IobCg0MjQpKSxuKSksbj1pVChlLG4scix0KTticmVhayBlfWVsc2UgZm9yKHJDPWNfKChlPTk9PT0oZT1uLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKS5ub2RlVHlwZT9lLmJvZHk6XCJIVE1MXCI9PT1lLm5vZGVOYW1lP2Uub3duZXJEb2N1bWVudC5ib2R5OmUpLmZpcnN0Q2hpbGQpLHJPPW4sclM9ITAsckU9bnVsbCxyXz0hMCx0PW94KG4sbnVsbCxyLHQpLG4uY2hpbGQ9dDt0Oyl0LmZsYWdzPS0zJnQuZmxhZ3N8NDA5Nix0PXQuc2libGluZztlbHNle2lmKHJOKCkscj09PW8pe249aXEoZSxuLHQpO2JyZWFrIGV9aXcoZSxuLHIsdCl9bj1uLmNoaWxkfXJldHVybiBuO2Nhc2UgMjY6cmV0dXJuIGlfKGUsbiksbnVsbD09PWU/KHQ9Y0Yobi50eXBlLG51bGwsbi5wZW5kaW5nUHJvcHMsbnVsbCkpP24ubWVtb2l6ZWRTdGF0ZT10OnJTfHwodD1uLnR5cGUsZT1uLnBlbmRpbmdQcm9wcywocj1jZihVLmN1cnJlbnQpLmNyZWF0ZUVsZW1lbnQodCkpW2VOXT1uLHJbZURdPWUsY2Mocix0LGUpLGVZKHIpLG4uc3RhdGVOb2RlPXIpOm4ubWVtb2l6ZWRTdGF0ZT1jRihuLnR5cGUsZS5tZW1vaXplZFByb3BzLG4ucGVuZGluZ1Byb3BzLGUubWVtb2l6ZWRTdGF0ZSksbnVsbDtjYXNlIDI3OnJldHVybiAkKG4pLG51bGw9PT1lJiZyUyYmKHI9bi5zdGF0ZU5vZGU9Y1Qobi50eXBlLG4ucGVuZGluZ1Byb3BzLFUuY3VycmVudCksck89bixyXz0hMCxvPXJDLGNqKG4udHlwZSk/KGNQPW8sckM9Y18oci5maXJzdENoaWxkKSk6ckM9byksaXcoZSxuLG4ucGVuZGluZ1Byb3BzLmNoaWxkcmVuLHQpLGlfKGUsbiksbnVsbD09PWUmJihuLmZsYWdzfD00MTk0MzA0KSxuLmNoaWxkO2Nhc2UgNTpyZXR1cm4gbnVsbD09PWUmJnJTJiYoKG89cj1yQykmJihudWxsIT09KHI9ZnVuY3Rpb24oZSxuLHQscil7Zm9yKDsxPT09ZS5ub2RlVHlwZTspe2lmKGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSE9PW4udG9Mb3dlckNhc2UoKSl7aWYoIXImJihcIklOUFVUXCIhPT1lLm5vZGVOYW1lfHxcImhpZGRlblwiIT09ZS50eXBlKSlicmVha31lbHNlIGlmKHIpe2lmKCFlW2VVXSlzd2l0Y2gobil7Y2FzZVwibWV0YVwiOmlmKCFlLmhhc0F0dHJpYnV0ZShcIml0ZW1wcm9wXCIpKWJyZWFrO3JldHVybiBlO2Nhc2VcImxpbmtcIjppZihcInN0eWxlc2hlZXRcIj09PShvPWUuZ2V0QXR0cmlidXRlKFwicmVsXCIpKSYmZS5oYXNBdHRyaWJ1dGUoXCJkYXRhLXByZWNlZGVuY2VcIil8fG8hPT10LnJlbHx8ZS5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpIT09KG51bGw9PXQuaHJlZnx8XCJcIj09PXQuaHJlZj9udWxsOnQuaHJlZil8fGUuZ2V0QXR0cmlidXRlKFwiY3Jvc3NvcmlnaW5cIikhPT0obnVsbD09dC5jcm9zc09yaWdpbj9udWxsOnQuY3Jvc3NPcmlnaW4pfHxlLmdldEF0dHJpYnV0ZShcInRpdGxlXCIpIT09KG51bGw9PXQudGl0bGU/bnVsbDp0LnRpdGxlKSlicmVhaztyZXR1cm4gZTtjYXNlXCJzdHlsZVwiOmlmKGUuaGFzQXR0cmlidXRlKFwiZGF0YS1wcmVjZWRlbmNlXCIpKWJyZWFrO3JldHVybiBlO2Nhc2VcInNjcmlwdFwiOmlmKCgobz1lLmdldEF0dHJpYnV0ZShcInNyY1wiKSkhPT0obnVsbD09dC5zcmM/bnVsbDp0LnNyYyl8fGUuZ2V0QXR0cmlidXRlKFwidHlwZVwiKSE9PShudWxsPT10LnR5cGU/bnVsbDp0LnR5cGUpfHxlLmdldEF0dHJpYnV0ZShcImNyb3Nzb3JpZ2luXCIpIT09KG51bGw9PXQuY3Jvc3NPcmlnaW4/bnVsbDp0LmNyb3NzT3JpZ2luKSkmJm8mJmUuaGFzQXR0cmlidXRlKFwiYXN5bmNcIikmJiFlLmhhc0F0dHJpYnV0ZShcIml0ZW1wcm9wXCIpKWJyZWFrO3JldHVybiBlO2RlZmF1bHQ6cmV0dXJuIGV9fWVsc2V7aWYoXCJpbnB1dFwiIT09bnx8XCJoaWRkZW5cIiE9PWUudHlwZSlyZXR1cm4gZTt2YXIgbz1udWxsPT10Lm5hbWU/bnVsbDpcIlwiK3QubmFtZTtpZihcImhpZGRlblwiPT09dC50eXBlJiZlLmdldEF0dHJpYnV0ZShcIm5hbWVcIik9PT1vKXJldHVybiBlfWlmKG51bGw9PT0oZT1jXyhlLm5leHRTaWJsaW5nKSkpYnJlYWt9cmV0dXJuIG51bGx9KHIsbi50eXBlLG4ucGVuZGluZ1Byb3BzLHJfKSk/KG4uc3RhdGVOb2RlPXIsck89bixyQz1jXyhyLmZpcnN0Q2hpbGQpLHJfPSExLG89ITApOm89ITEpLG98fHJ6KG4pKSwkKG4pLG89bi50eXBlLGE9bi5wZW5kaW5nUHJvcHMsaT1udWxsIT09ZT9lLm1lbW9pemVkUHJvcHM6bnVsbCxyPWEuY2hpbGRyZW4sY2cobyxhKT9yPW51bGw6bnVsbCE9PWkmJmNnKG8saSkmJihuLmZsYWdzfD0zMiksbnVsbCE9PW4ubWVtb2l6ZWRTdGF0ZSYmKGM2Ll9jdXJyZW50VmFsdWU9bz1vNihlLG4sbzcsbnVsbCxudWxsLHQpKSxpXyhlLG4pLGl3KGUsbixyLHQpLG4uY2hpbGQ7Y2FzZSA2OnJldHVybiBudWxsPT09ZSYmclMmJigoZT10PXJDKSYmKG51bGwhPT0odD1mdW5jdGlvbihlLG4sdCl7aWYoXCJcIj09PW4pcmV0dXJuIG51bGw7Zm9yKDszIT09ZS5ub2RlVHlwZTspaWYoKDEhPT1lLm5vZGVUeXBlfHxcIklOUFVUXCIhPT1lLm5vZGVOYW1lfHxcImhpZGRlblwiIT09ZS50eXBlKSYmIXR8fG51bGw9PT0oZT1jXyhlLm5leHRTaWJsaW5nKSkpcmV0dXJuIG51bGw7cmV0dXJuIGV9KHQsbi5wZW5kaW5nUHJvcHMscl8pKT8obi5zdGF0ZU5vZGU9dCxyTz1uLHJDPW51bGwsZT0hMCk6ZT0hMSksZXx8cnoobikpLG51bGw7Y2FzZSAxMzpyZXR1cm4gaUIoZSxuLHQpO2Nhc2UgNDpyZXR1cm4gcShuLG4uc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLHI9bi5wZW5kaW5nUHJvcHMsbnVsbD09PWU/bi5jaGlsZD1veShuLG51bGwscix0KTppdyhlLG4scix0KSxuLmNoaWxkO2Nhc2UgMTE6cmV0dXJuIGlqKGUsbixuLnR5cGUsbi5wZW5kaW5nUHJvcHMsdCk7Y2FzZSA3OnJldHVybiBpdyhlLG4sbi5wZW5kaW5nUHJvcHMsdCksbi5jaGlsZDtjYXNlIDg6Y2FzZSAxMjpyZXR1cm4gaXcoZSxuLG4ucGVuZGluZ1Byb3BzLmNoaWxkcmVuLHQpLG4uY2hpbGQ7Y2FzZSAxMDpyZXR1cm4gcj1uLnBlbmRpbmdQcm9wcyxyRihuLG4udHlwZSxyLnZhbHVlKSxpdyhlLG4sci5jaGlsZHJlbix0KSxuLmNoaWxkO2Nhc2UgOTpyZXR1cm4gbz1uLnR5cGUuX2NvbnRleHQscj1uLnBlbmRpbmdQcm9wcy5jaGlsZHJlbixyWihuKSxyPXIobz1yWShvKSksbi5mbGFnc3w9MSxpdyhlLG4scix0KSxuLmNoaWxkO2Nhc2UgMTQ6cmV0dXJuIGlrKGUsbixuLnR5cGUsbi5wZW5kaW5nUHJvcHMsdCk7Y2FzZSAxNTpyZXR1cm4gaUEoZSxuLG4udHlwZSxuLnBlbmRpbmdQcm9wcyx0KTtjYXNlIDE5OnJldHVybiBpVihlLG4sdCk7Y2FzZSAzMTppZihvPW4ucGVuZGluZ1Byb3BzLGk9MCE9KDEyOCZuLmZsYWdzKSxuLmZsYWdzJj0tMTI5LG51bGw9PT1lKWlmKHJTKXtpZihcImhpZGRlblwiPT09by5tb2RlKWlTKG4sbyk7ZWxzZSBpZihvRihuKSwodD1yQyk/bnVsbCE9PSh0PW51bGwhPT0odD1jQyh0LHJfKSkmJlwiJlwiPT09dC5kYXRhP3Q6bnVsbCkmJihuLm1lbW9pemVkU3RhdGU9e2RlaHlkcmF0ZWQ6dCx0cmVlQ29udGV4dDpudWxsIT09cnY/e2lkOnJiLG92ZXJmbG93OnJ5fTpudWxsLHJldHJ5TGFuZToweDIwMDAwMDAwLGh5ZHJhdGlvbkVycm9yczpudWxsfSwoZT1ybCh0KSkucmV0dXJuPW4sbi5jaGlsZD1lLHJPPW4sckM9bnVsbCk6dD1udWxsLG51bGw9PT10KXRocm93IHJ6KG4pO24ubGFuZXM9MHgyMDAwMDAwMCxuPW51bGx9ZWxzZSBuPWlTKG4sbyk7ZWxzZSBpZihudWxsIT09KHI9ZS5tZW1vaXplZFN0YXRlKSlpZihhPXIuZGVoeWRyYXRlZCxvRihuKSxpKWlmKDI1NiZuLmZsYWdzKW4uZmxhZ3MmPS0yNTcsbj1pRShlLG4sdCk7ZWxzZSBpZihudWxsIT09bi5tZW1vaXplZFN0YXRlKW4uY2hpbGQ9ZS5jaGlsZCxuLmZsYWdzfD0xMjgsbj1udWxsO2Vsc2UgdGhyb3cgRXJyb3IobCg1NTgpKTtlbHNlIGlmKGl4fHxyVyhlLG4sdCwhMSksaT0wIT0odCZlLmNoaWxkTGFuZXMpLGl4fHxpKXtpZihudWxsIT09KG89bE4pJiYwIT09KGE9ZV8obyx0KSkmJmEhPT1yLnJldHJ5TGFuZSl0aHJvdyByLnJldHJ5TGFuZT1hLHQzKGUsYSksc28obyxlLGEpLGl5O3NnKCksbj1pRShlLG4sdCl9ZWxzZSB0PXIudHJlZUNvbnRleHQsckM9Y18oYS5uZXh0U2libGluZyksck89bixyUz0hMCxyRT1udWxsLHJfPSExLG51bGwhPT10JiZyQShuLHQpLG49aVMobixvKSxuLmZsYWdzfD00MDk2O2Vsc2UodD1ydChlLmNoaWxkLHttb2RlOm8ubW9kZSxjaGlsZHJlbjpvLmNoaWxkcmVufSkpLnJlZj1uLnJlZixuLmNoaWxkPXQsdC5yZXR1cm49bixuPXQ7cmV0dXJuIG47Y2FzZSAyMjpyZXR1cm4gaU8oZSxuLHQsbi5wZW5kaW5nUHJvcHMpO2Nhc2UgMjQ6cmV0dXJuIHJaKG4pLHI9clkocjApLG51bGw9PT1lPyhudWxsPT09KG89b2UoKSkmJihvPWxOLGE9cjEoKSxvLnBvb2xlZENhY2hlPWEsYS5yZWZDb3VudCsrLG51bGwhPT1hJiYoby5wb29sZWRDYWNoZUxhbmVzfD10KSxvPWEpLG4ubWVtb2l6ZWRTdGF0ZT17cGFyZW50OnIsY2FjaGU6b30sb2oobiksckYobixyMCxvKSk6KDAhPShlLmxhbmVzJnQpJiYob2soZSxuKSxvUChuLG51bGwsbnVsbCx0KSxvXygpKSxvPWUubWVtb2l6ZWRTdGF0ZSxhPW4ubWVtb2l6ZWRTdGF0ZSxvLnBhcmVudCE9PXI/KG89e3BhcmVudDpyLGNhY2hlOnJ9LG4ubWVtb2l6ZWRTdGF0ZT1vLDA9PT1uLmxhbmVzJiYobi5tZW1vaXplZFN0YXRlPW4udXBkYXRlUXVldWUuYmFzZVN0YXRlPW8pLHJGKG4scjAscikpOihyRihuLHIwLHI9YS5jYWNoZSksciE9PW8uY2FjaGUmJnJxKG4sW3IwXSx0LCEwKSkpLGl3KGUsbixuLnBlbmRpbmdQcm9wcy5jaGlsZHJlbix0KSxuLmNoaWxkO2Nhc2UgMjk6dGhyb3cgbi5wZW5kaW5nUHJvcHN9dGhyb3cgRXJyb3IobCgxNTYsbi50YWcpKX1mdW5jdGlvbiBpWihlKXtlLmZsYWdzfD00fWZ1bmN0aW9uIGlZKGUsbix0LHIsbyl7aWYoKG49MCE9KDMyJmUubW9kZSkpJiYobj0hMSksbil7aWYoZS5mbGFnc3w9MHgxMDAwMDAwLCgweDEzZmZmZjQwJm8pPT09bylpZihlLnN0YXRlTm9kZS5jb21wbGV0ZSllLmZsYWdzfD04MTkyO2Vsc2UgaWYoc2YoKSllLmZsYWdzfD04MTkyO2Vsc2UgdGhyb3cgb2M9b2ksb299ZWxzZSBlLmZsYWdzJj0tMHgxMDAwMDAxfWZ1bmN0aW9uIGlYKGUsbil7aWYoXCJzdHlsZXNoZWV0XCIhPT1uLnR5cGV8fDAhPSg0Jm4uc3RhdGUubG9hZGluZykpZS5mbGFncyY9LTB4MTAwMDAwMTtlbHNlIGlmKGUuZmxhZ3N8PTB4MTAwMDAwMCwhYzAobikpaWYoc2YoKSllLmZsYWdzfD04MTkyO2Vsc2UgdGhyb3cgb2M9b2ksb299ZnVuY3Rpb24gaUsoZSxuKXtudWxsIT09biYmKGUuZmxhZ3N8PTQpLDE2Mzg0JmUuZmxhZ3MmJihuPTIyIT09ZS50YWc/ZUEoKToweDIwMDAwMDAwLGUubGFuZXN8PW4sbFh8PW4pfWZ1bmN0aW9uIGlRKGUsbil7aWYoIXJTKXN3aXRjaChlLnRhaWxNb2RlKXtjYXNlXCJoaWRkZW5cIjpuPWUudGFpbDtmb3IodmFyIHQ9bnVsbDtudWxsIT09bjspbnVsbCE9PW4uYWx0ZXJuYXRlJiYodD1uKSxuPW4uc2libGluZztudWxsPT09dD9lLnRhaWw9bnVsbDp0LnNpYmxpbmc9bnVsbDticmVhaztjYXNlXCJjb2xsYXBzZWRcIjp0PWUudGFpbDtmb3IodmFyIHI9bnVsbDtudWxsIT09dDspbnVsbCE9PXQuYWx0ZXJuYXRlJiYocj10KSx0PXQuc2libGluZztudWxsPT09cj9ufHxudWxsPT09ZS50YWlsP2UudGFpbD1udWxsOmUudGFpbC5zaWJsaW5nPW51bGw6ci5zaWJsaW5nPW51bGx9fWZ1bmN0aW9uIGlHKGUpe3ZhciBuPW51bGwhPT1lLmFsdGVybmF0ZSYmZS5hbHRlcm5hdGUuY2hpbGQ9PT1lLmNoaWxkLHQ9MCxyPTA7aWYobilmb3IodmFyIG89ZS5jaGlsZDtudWxsIT09bzspdHw9by5sYW5lc3xvLmNoaWxkTGFuZXMscnw9MHgzZTAwMDAwJm8uc3VidHJlZUZsYWdzLHJ8PTB4M2UwMDAwMCZvLmZsYWdzLG8ucmV0dXJuPWUsbz1vLnNpYmxpbmc7ZWxzZSBmb3Iobz1lLmNoaWxkO251bGwhPT1vOyl0fD1vLmxhbmVzfG8uY2hpbGRMYW5lcyxyfD1vLnN1YnRyZWVGbGFncyxyfD1vLmZsYWdzLG8ucmV0dXJuPWUsbz1vLnNpYmxpbmc7cmV0dXJuIGUuc3VidHJlZUZsYWdzfD1yLGUuY2hpbGRMYW5lcz10LG59ZnVuY3Rpb24gaUooZSxuKXtzd2l0Y2gocmsobiksbi50YWcpe2Nhc2UgMzpyVShyMCksVygpO2JyZWFrO2Nhc2UgMjY6Y2FzZSAyNzpjYXNlIDU6WihuKTticmVhaztjYXNlIDQ6VygpO2JyZWFrO2Nhc2UgMzE6bnVsbCE9PW4ubWVtb2l6ZWRTdGF0ZSYmb3Eobik7YnJlYWs7Y2FzZSAxMzpvcShuKTticmVhaztjYXNlIDE5Ok0ob1cpO2JyZWFrO2Nhc2UgMTA6clUobi50eXBlKTticmVhaztjYXNlIDIyOmNhc2UgMjM6b3Eobiksb0IoKSxudWxsIT09ZSYmTShyNyk7YnJlYWs7Y2FzZSAyNDpyVShyMCl9fWZ1bmN0aW9uIGkwKGUsbil7dHJ5e3ZhciB0PW4udXBkYXRlUXVldWUscj1udWxsIT09dD90Lmxhc3RFZmZlY3Q6bnVsbDtpZihudWxsIT09cil7dmFyIG89ci5uZXh0O3Q9bztkb3tpZigodC50YWcmZSk9PT1lKXtyPXZvaWQgMDt2YXIgYT10LmNyZWF0ZTt0Lmluc3QuZGVzdHJveT1yPWEoKX10PXQubmV4dH13aGlsZSh0IT09byl9fWNhdGNoKGUpe3NQKG4sbi5yZXR1cm4sZSl9fWZ1bmN0aW9uIGkxKGUsbix0KXt0cnl7dmFyIHI9bi51cGRhdGVRdWV1ZSxvPW51bGwhPT1yP3IubGFzdEVmZmVjdDpudWxsO2lmKG51bGwhPT1vKXt2YXIgYT1vLm5leHQ7cj1hO2Rve2lmKChyLnRhZyZlKT09PWUpe3ZhciBpPXIuaW5zdCxsPWkuZGVzdHJveTtpZih2b2lkIDAhPT1sKXtpLmRlc3Ryb3k9dm9pZCAwLG89bjt0cnl7bCgpfWNhdGNoKGUpe3NQKG8sdCxlKX19fXI9ci5uZXh0fXdoaWxlKHIhPT1hKX19Y2F0Y2goZSl7c1AobixuLnJldHVybixlKX19ZnVuY3Rpb24gaTIoZSl7dmFyIG49ZS51cGRhdGVRdWV1ZTtpZihudWxsIT09bil7dmFyIHQ9ZS5zdGF0ZU5vZGU7dHJ5e29MKG4sdCl9Y2F0Y2gobil7c1AoZSxlLnJldHVybixuKX19fWZ1bmN0aW9uIGk0KGUsbix0KXt0LnByb3BzPWljKGUudHlwZSxlLm1lbW9pemVkUHJvcHMpLHQuc3RhdGU9ZS5tZW1vaXplZFN0YXRlO3RyeXt0LmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2godCl7c1AoZSxuLHQpfX1mdW5jdGlvbiBpNShlLG4pe3RyeXt2YXIgdD1lLnJlZjtpZihudWxsIT09dCl7c3dpdGNoKGUudGFnKXtjYXNlIDI2OmNhc2UgMjc6Y2FzZSA1OnZhciByPWUuc3RhdGVOb2RlO2JyZWFrO2RlZmF1bHQ6cj1lLnN0YXRlTm9kZX1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P2UucmVmQ2xlYW51cD10KHIpOnQuY3VycmVudD1yfX1jYXRjaCh0KXtzUChlLG4sdCl9fWZ1bmN0aW9uIGkzKGUsbil7dmFyIHQ9ZS5yZWYscj1lLnJlZkNsZWFudXA7aWYobnVsbCE9PXQpaWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygcil0cnl7cigpfWNhdGNoKHQpe3NQKGUsbix0KX1maW5hbGx5e2UucmVmQ2xlYW51cD1udWxsLG51bGwhPShlPWUuYWx0ZXJuYXRlKSYmKGUucmVmQ2xlYW51cD1udWxsKX1lbHNlIGlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpdHJ5e3QobnVsbCl9Y2F0Y2godCl7c1AoZSxuLHQpfWVsc2UgdC5jdXJyZW50PW51bGx9ZnVuY3Rpb24gaTYoZSl7dmFyIG49ZS50eXBlLHQ9ZS5tZW1vaXplZFByb3BzLHI9ZS5zdGF0ZU5vZGU7dHJ5e3N3aXRjaChuKXtjYXNlXCJidXR0b25cIjpjYXNlXCJpbnB1dFwiOmNhc2VcInNlbGVjdFwiOmNhc2VcInRleHRhcmVhXCI6dC5hdXRvRm9jdXMmJnIuZm9jdXMoKTticmVhaztjYXNlXCJpbWdcIjp0LnNyYz9yLnNyYz10LnNyYzp0LnNyY1NldCYmKHIuc3Jjc2V0PXQuc3JjU2V0KX19Y2F0Y2gobil7c1AoZSxlLnJldHVybixuKX19ZnVuY3Rpb24gaTkoZSxuLHQpe3RyeXt2YXIgcj1lLnN0YXRlTm9kZTsoZnVuY3Rpb24oZSxuLHQscil7c3dpdGNoKG4pe2Nhc2VcImRpdlwiOmNhc2VcInNwYW5cIjpjYXNlXCJzdmdcIjpjYXNlXCJwYXRoXCI6Y2FzZVwiYVwiOmNhc2VcImdcIjpjYXNlXCJwXCI6Y2FzZVwibGlcIjpicmVhaztjYXNlXCJpbnB1dFwiOnZhciBvPW51bGwsYT1udWxsLGk9bnVsbCxzPW51bGwsYz1udWxsLHU9bnVsbCxkPW51bGw7Zm9yKGggaW4gdCl7dmFyIGY9dFtoXTtpZih0Lmhhc093blByb3BlcnR5KGgpJiZudWxsIT1mKXN3aXRjaChoKXtjYXNlXCJjaGVja2VkXCI6Y2FzZVwidmFsdWVcIjpicmVhaztjYXNlXCJkZWZhdWx0VmFsdWVcIjpjPWY7ZGVmYXVsdDpyLmhhc093blByb3BlcnR5KGgpfHxjbChlLG4saCxudWxsLHIsZil9fWZvcih2YXIgcCBpbiByKXt2YXIgaD1yW3BdO2lmKGY9dFtwXSxyLmhhc093blByb3BlcnR5KHApJiYobnVsbCE9aHx8bnVsbCE9Zikpc3dpdGNoKHApe2Nhc2VcInR5cGVcIjphPWg7YnJlYWs7Y2FzZVwibmFtZVwiOm89aDticmVhaztjYXNlXCJjaGVja2VkXCI6dT1oO2JyZWFrO2Nhc2VcImRlZmF1bHRDaGVja2VkXCI6ZD1oO2JyZWFrO2Nhc2VcInZhbHVlXCI6aT1oO2JyZWFrO2Nhc2VcImRlZmF1bHRWYWx1ZVwiOnM9aDticmVhaztjYXNlXCJjaGlsZHJlblwiOmNhc2VcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI6aWYobnVsbCE9aCl0aHJvdyBFcnJvcihsKDEzNyxuKSk7YnJlYWs7ZGVmYXVsdDpoIT09ZiYmY2woZSxuLHAsaCxyLGYpfX1udChlLGkscyxjLHUsZCxhLG8pO3JldHVybjtjYXNlXCJzZWxlY3RcIjpmb3IoYSBpbiBoPWk9cz1wPW51bGwsdClpZihjPXRbYV0sdC5oYXNPd25Qcm9wZXJ0eShhKSYmbnVsbCE9Yylzd2l0Y2goYSl7Y2FzZVwidmFsdWVcIjpicmVhaztjYXNlXCJtdWx0aXBsZVwiOmg9YztkZWZhdWx0OnIuaGFzT3duUHJvcGVydHkoYSl8fGNsKGUsbixhLG51bGwscixjKX1mb3IobyBpbiByKWlmKGE9cltvXSxjPXRbb10sci5oYXNPd25Qcm9wZXJ0eShvKSYmKG51bGwhPWF8fG51bGwhPWMpKXN3aXRjaChvKXtjYXNlXCJ2YWx1ZVwiOnA9YTticmVhaztjYXNlXCJkZWZhdWx0VmFsdWVcIjpzPWE7YnJlYWs7Y2FzZVwibXVsdGlwbGVcIjppPWE7ZGVmYXVsdDphIT09YyYmY2woZSxuLG8sYSxyLGMpfW49cyx0PWkscj1oLG51bGwhPXA/bmEoZSwhIXQscCwhMSk6ISFyIT0hIXQmJihudWxsIT1uP25hKGUsISF0LG4sITApOm5hKGUsISF0LHQ/W106XCJcIiwhMSkpO3JldHVybjtjYXNlXCJ0ZXh0YXJlYVwiOmZvcihzIGluIGg9cD1udWxsLHQpaWYobz10W3NdLHQuaGFzT3duUHJvcGVydHkocykmJm51bGwhPW8mJiFyLmhhc093blByb3BlcnR5KHMpKXN3aXRjaChzKXtjYXNlXCJ2YWx1ZVwiOmNhc2VcImNoaWxkcmVuXCI6YnJlYWs7ZGVmYXVsdDpjbChlLG4scyxudWxsLHIsbyl9Zm9yKGkgaW4gcilpZihvPXJbaV0sYT10W2ldLHIuaGFzT3duUHJvcGVydHkoaSkmJihudWxsIT1vfHxudWxsIT1hKSlzd2l0Y2goaSl7Y2FzZVwidmFsdWVcIjpwPW87YnJlYWs7Y2FzZVwiZGVmYXVsdFZhbHVlXCI6aD1vO2JyZWFrO2Nhc2VcImNoaWxkcmVuXCI6YnJlYWs7Y2FzZVwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIjppZihudWxsIT1vKXRocm93IEVycm9yKGwoOTEpKTticmVhaztkZWZhdWx0Om8hPT1hJiZjbChlLG4saSxvLHIsYSl9bmkoZSxwLGgpO3JldHVybjtjYXNlXCJvcHRpb25cIjpmb3IodmFyIGcgaW4gdClwPXRbZ10sdC5oYXNPd25Qcm9wZXJ0eShnKSYmbnVsbCE9cCYmIXIuaGFzT3duUHJvcGVydHkoZykmJihcInNlbGVjdGVkXCI9PT1nP2Uuc2VsZWN0ZWQ9ITE6Y2woZSxuLGcsbnVsbCxyLHApKTtmb3IoYyBpbiByKXA9cltjXSxoPXRbY10sci5oYXNPd25Qcm9wZXJ0eShjKSYmcCE9PWgmJihudWxsIT1wfHxudWxsIT1oKSYmKFwic2VsZWN0ZWRcIj09PWM/ZS5zZWxlY3RlZD1wJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBwJiZcInN5bWJvbFwiIT10eXBlb2YgcDpjbChlLG4sYyxwLHIsaCkpO3JldHVybjtjYXNlXCJpbWdcIjpjYXNlXCJsaW5rXCI6Y2FzZVwiYXJlYVwiOmNhc2VcImJhc2VcIjpjYXNlXCJiclwiOmNhc2VcImNvbFwiOmNhc2VcImVtYmVkXCI6Y2FzZVwiaHJcIjpjYXNlXCJrZXlnZW5cIjpjYXNlXCJtZXRhXCI6Y2FzZVwicGFyYW1cIjpjYXNlXCJzb3VyY2VcIjpjYXNlXCJ0cmFja1wiOmNhc2VcIndiclwiOmNhc2VcIm1lbnVpdGVtXCI6Zm9yKHZhciBtIGluIHQpcD10W21dLHQuaGFzT3duUHJvcGVydHkobSkmJm51bGwhPXAmJiFyLmhhc093blByb3BlcnR5KG0pJiZjbChlLG4sbSxudWxsLHIscCk7Zm9yKHUgaW4gcilpZihwPXJbdV0saD10W3VdLHIuaGFzT3duUHJvcGVydHkodSkmJnAhPT1oJiYobnVsbCE9cHx8bnVsbCE9aCkpc3dpdGNoKHUpe2Nhc2VcImNoaWxkcmVuXCI6Y2FzZVwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIjppZihudWxsIT1wKXRocm93IEVycm9yKGwoMTM3LG4pKTticmVhaztkZWZhdWx0OmNsKGUsbix1LHAscixoKX1yZXR1cm47ZGVmYXVsdDppZihuZihuKSl7Zm9yKHZhciB2IGluIHQpcD10W3ZdLHQuaGFzT3duUHJvcGVydHkodikmJnZvaWQgMCE9PXAmJiFyLmhhc093blByb3BlcnR5KHYpJiZjcyhlLG4sdix2b2lkIDAscixwKTtmb3IoZCBpbiByKXA9cltkXSxoPXRbZF0sci5oYXNPd25Qcm9wZXJ0eShkKSYmcCE9PWgmJih2b2lkIDAhPT1wfHx2b2lkIDAhPT1oKSYmY3MoZSxuLGQscCxyLGgpO3JldHVybn19Zm9yKHZhciBiIGluIHQpcD10W2JdLHQuaGFzT3duUHJvcGVydHkoYikmJm51bGwhPXAmJiFyLmhhc093blByb3BlcnR5KGIpJiZjbChlLG4sYixudWxsLHIscCk7Zm9yKGYgaW4gcilwPXJbZl0saD10W2ZdLHIuaGFzT3duUHJvcGVydHkoZikmJnAhPT1oJiYobnVsbCE9cHx8bnVsbCE9aCkmJmNsKGUsbixmLHAscixoKX0pKHIsZS50eXBlLHQsbikscltlRF09bn1jYXRjaChuKXtzUChlLGUucmV0dXJuLG4pfX1mdW5jdGlvbiBpOChlKXtyZXR1cm4gNT09PWUudGFnfHwzPT09ZS50YWd8fDI2PT09ZS50YWd8fDI3PT09ZS50YWcmJmNqKGUudHlwZSl8fDQ9PT1lLnRhZ31mdW5jdGlvbiBpNyhlKXtlOmZvcig7Oyl7Zm9yKDtudWxsPT09ZS5zaWJsaW5nOyl7aWYobnVsbD09PWUucmV0dXJufHxpOChlLnJldHVybikpcmV0dXJuIG51bGw7ZT1lLnJldHVybn1mb3IoZS5zaWJsaW5nLnJldHVybj1lLnJldHVybixlPWUuc2libGluZzs1IT09ZS50YWcmJjYhPT1lLnRhZyYmMTghPT1lLnRhZzspe2lmKDI3PT09ZS50YWcmJmNqKGUudHlwZSl8fDImZS5mbGFnc3x8bnVsbD09PWUuY2hpbGR8fDQ9PT1lLnRhZyljb250aW51ZSBlO2UuY2hpbGQucmV0dXJuPWUsZT1lLmNoaWxkfWlmKCEoMiZlLmZsYWdzKSlyZXR1cm4gZS5zdGF0ZU5vZGV9fWZ1bmN0aW9uIGxlKGUsbix0KXt2YXIgcj1lLnRhZztpZig1PT09cnx8Nj09PXIpZT1lLnN0YXRlTm9kZSxuP3QuaW5zZXJ0QmVmb3JlKGUsbik6dC5hcHBlbmRDaGlsZChlKTtlbHNlIGlmKDQhPT1yJiYoMjc9PT1yJiZjaihlLnR5cGUpJiYodD1lLnN0YXRlTm9kZSksbnVsbCE9PShlPWUuY2hpbGQpKSlmb3IobGUoZSxuLHQpLGU9ZS5zaWJsaW5nO251bGwhPT1lOylsZShlLG4sdCksZT1lLnNpYmxpbmd9ZnVuY3Rpb24gbG4oZSl7dmFyIG49ZS5zdGF0ZU5vZGUsdD1lLm1lbW9pemVkUHJvcHM7dHJ5e2Zvcih2YXIgcj1lLnR5cGUsbz1uLmF0dHJpYnV0ZXM7by5sZW5ndGg7KW4ucmVtb3ZlQXR0cmlidXRlTm9kZShvWzBdKTtjYyhuLHIsdCksbltlTl09ZSxuW2VEXT10fWNhdGNoKG4pe3NQKGUsZS5yZXR1cm4sbil9fXZhciBsdD0hMSxscj0hMSxsbz0hMSxsYT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBXZWFrU2V0P1dlYWtTZXQ6U2V0LGxpPW51bGw7ZnVuY3Rpb24gbGwoZSxuLHQpe3ZhciByPXQuZmxhZ3M7c3dpdGNoKHQudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1Omx5KGUsdCksNCZyJiZpMCg1LHQpO2JyZWFrO2Nhc2UgMTppZihseShlLHQpLDQmcilpZihlPXQuc3RhdGVOb2RlLG51bGw9PT1uKXRyeXtlLmNvbXBvbmVudERpZE1vdW50KCl9Y2F0Y2goZSl7c1AodCx0LnJldHVybixlKX1lbHNle3ZhciBvPWljKHQudHlwZSxuLm1lbW9pemVkUHJvcHMpO249bi5tZW1vaXplZFN0YXRlO3RyeXtlLmNvbXBvbmVudERpZFVwZGF0ZShvLG4sZS5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZSl9Y2F0Y2goZSl7c1AodCx0LnJldHVybixlKX19NjQmciYmaTIodCksNTEyJnImJmk1KHQsdC5yZXR1cm4pO2JyZWFrO2Nhc2UgMzppZihseShlLHQpLDY0JnImJm51bGwhPT0oZT10LnVwZGF0ZVF1ZXVlKSl7aWYobj1udWxsLG51bGwhPT10LmNoaWxkKXN3aXRjaCh0LmNoaWxkLnRhZyl7Y2FzZSAyNzpjYXNlIDU6Y2FzZSAxOm49dC5jaGlsZC5zdGF0ZU5vZGV9dHJ5e29MKGUsbil9Y2F0Y2goZSl7c1AodCx0LnJldHVybixlKX19YnJlYWs7Y2FzZSAyNzpudWxsPT09biYmNCZyJiZsbih0KTtjYXNlIDI2OmNhc2UgNTpseShlLHQpLG51bGw9PT1uJiY0JnImJmk2KHQpLDUxMiZyJiZpNSh0LHQucmV0dXJuKTticmVhaztjYXNlIDEyOmRlZmF1bHQ6bHkoZSx0KTticmVhaztjYXNlIDMxOmx5KGUsdCksNCZyJiZsZihlLHQpO2JyZWFrO2Nhc2UgMTM6bHkoZSx0KSw0JnImJmxwKGUsdCksNjQmciYmbnVsbCE9PShlPXQubWVtb2l6ZWRTdGF0ZSkmJm51bGwhPT0oZT1lLmRlaHlkcmF0ZWQpJiZmdW5jdGlvbihlLG4pe3ZhciB0PWUub3duZXJEb2N1bWVudDtpZihcIiR+XCI9PT1lLmRhdGEpZS5fcmVhY3RSZXRyeT1uO2Vsc2UgaWYoXCIkP1wiIT09ZS5kYXRhfHxcImxvYWRpbmdcIiE9PXQucmVhZHlTdGF0ZSluKCk7ZWxzZXt2YXIgcj1mdW5jdGlvbigpe24oKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIscil9O3QuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIixyKSxlLl9yZWFjdFJldHJ5PXJ9fShlLHQ9c1IuYmluZChudWxsLHQpKTticmVhaztjYXNlIDIyOmlmKCEocj1udWxsIT09dC5tZW1vaXplZFN0YXRlfHxsdCkpe249bnVsbCE9PW4mJm51bGwhPT1uLm1lbW9pemVkU3RhdGV8fGxyLG89bHQ7dmFyIGE9bHI7bHQ9ciwobHI9bikmJiFhP2Z1bmN0aW9uIGUobix0LHIpe2ZvcihyPXImJjAhPSg4NzcyJnQuc3VidHJlZUZsYWdzKSx0PXQuY2hpbGQ7bnVsbCE9PXQ7KXt2YXIgbz10LmFsdGVybmF0ZSxhPW4saT10LGw9aS5mbGFncztzd2l0Y2goaS50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6ZShhLGksciksaTAoNCxpKTticmVhaztjYXNlIDE6aWYoZShhLGksciksXCJmdW5jdGlvblwiPT10eXBlb2YoYT0obz1pKS5zdGF0ZU5vZGUpLmNvbXBvbmVudERpZE1vdW50KXRyeXthLmNvbXBvbmVudERpZE1vdW50KCl9Y2F0Y2goZSl7c1AobyxvLnJldHVybixlKX1pZihudWxsIT09KGE9KG89aSkudXBkYXRlUXVldWUpKXt2YXIgcz1vLnN0YXRlTm9kZTt0cnl7dmFyIGM9YS5zaGFyZWQuaGlkZGVuQ2FsbGJhY2tzO2lmKG51bGwhPT1jKWZvcihhLnNoYXJlZC5oaWRkZW5DYWxsYmFja3M9bnVsbCxhPTA7YTxjLmxlbmd0aDthKyspb3ooY1thXSxzKX1jYXRjaChlKXtzUChvLG8ucmV0dXJuLGUpfX1yJiY2NCZsJiZpMihpKSxpNShpLGkucmV0dXJuKTticmVhaztjYXNlIDI3OmxuKGkpO2Nhc2UgMjY6Y2FzZSA1OmUoYSxpLHIpLHImJm51bGw9PT1vJiY0JmwmJmk2KGkpLGk1KGksaS5yZXR1cm4pO2JyZWFrO2Nhc2UgMTI6ZGVmYXVsdDplKGEsaSxyKTticmVhaztjYXNlIDMxOmUoYSxpLHIpLHImJjQmbCYmbGYoYSxpKTticmVhaztjYXNlIDEzOmUoYSxpLHIpLHImJjQmbCYmbHAoYSxpKTticmVhaztjYXNlIDIyOm51bGw9PT1pLm1lbW9pemVkU3RhdGUmJmUoYSxpLHIpLGk1KGksaS5yZXR1cm4pO2Nhc2UgMzA6fXQ9dC5zaWJsaW5nfX0oZSx0LDAhPSg4NzcyJnQuc3VidHJlZUZsYWdzKSk6bHkoZSx0KSxsdD1vLGxyPWF9Y2FzZSAzMDp9fXZhciBscz1udWxsLGxjPSExO2Z1bmN0aW9uIGx1KGUsbix0KXtmb3IodD10LmNoaWxkO251bGwhPT10OylsZChlLG4sdCksdD10LnNpYmxpbmd9ZnVuY3Rpb24gbGQoZSxuLHQpe2lmKGVwJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlcC5vbkNvbW1pdEZpYmVyVW5tb3VudCl0cnl7ZXAub25Db21taXRGaWJlclVubW91bnQoZWYsdCl9Y2F0Y2goZSl7fXN3aXRjaCh0LnRhZyl7Y2FzZSAyNjpscnx8aTModCxuKSxsdShlLG4sdCksdC5tZW1vaXplZFN0YXRlP3QubWVtb2l6ZWRTdGF0ZS5jb3VudC0tOnQuc3RhdGVOb2RlJiYodD10LnN0YXRlTm9kZSkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KTticmVhaztjYXNlIDI3OmxyfHxpMyh0LG4pO3ZhciByPWxzLG89bGM7Y2oodC50eXBlKSYmKGxzPXQuc3RhdGVOb2RlLGxjPSExKSxsdShlLG4sdCksY1IodC5zdGF0ZU5vZGUpLGxzPXIsbGM9bzticmVhaztjYXNlIDU6bHJ8fGkzKHQsbik7Y2FzZSA2OmlmKHI9bHMsbz1sYyxscz1udWxsLGx1KGUsbix0KSxscz1yLGxjPW8sbnVsbCE9PWxzKWlmKGxjKXRyeXsoOT09PWxzLm5vZGVUeXBlP2xzLmJvZHk6XCJIVE1MXCI9PT1scy5ub2RlTmFtZT9scy5vd25lckRvY3VtZW50LmJvZHk6bHMpLnJlbW92ZUNoaWxkKHQuc3RhdGVOb2RlKX1jYXRjaChlKXtzUCh0LG4sZSl9ZWxzZSB0cnl7bHMucmVtb3ZlQ2hpbGQodC5zdGF0ZU5vZGUpfWNhdGNoKGUpe3NQKHQsbixlKX1icmVhaztjYXNlIDE4Om51bGwhPT1scyYmKGxjPyhjayg5PT09KGU9bHMpLm5vZGVUeXBlP2UuYm9keTpcIkhUTUxcIj09PWUubm9kZU5hbWU/ZS5vd25lckRvY3VtZW50LmJvZHk6ZSx0LnN0YXRlTm9kZSksdUUoZSkpOmNrKGxzLHQuc3RhdGVOb2RlKSk7YnJlYWs7Y2FzZSA0OnI9bHMsbz1sYyxscz10LnN0YXRlTm9kZS5jb250YWluZXJJbmZvLGxjPSEwLGx1KGUsbix0KSxscz1yLGxjPW87YnJlYWs7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmxyfHxpMSgyLHQsbiksbHJ8fGkxKDQsdCxuKSxsdShlLG4sdCk7YnJlYWs7Y2FzZSAxOmxyfHwoaTModCxuKSxcImZ1bmN0aW9uXCI9PXR5cGVvZihyPXQuc3RhdGVOb2RlKS5jb21wb25lbnRXaWxsVW5tb3VudCYmaTQodCxuLHIpKSxsdShlLG4sdCk7YnJlYWs7Y2FzZSAyMTpkZWZhdWx0Omx1KGUsbix0KTticmVhaztjYXNlIDIyOmxyPShyPWxyKXx8bnVsbCE9PXQubWVtb2l6ZWRTdGF0ZSxsdShlLG4sdCksbHI9cn19ZnVuY3Rpb24gbGYoZSxuKXtpZihudWxsPT09bi5tZW1vaXplZFN0YXRlJiZudWxsIT09KGU9bi5hbHRlcm5hdGUpJiZudWxsIT09KGU9ZS5tZW1vaXplZFN0YXRlKSl7ZT1lLmRlaHlkcmF0ZWQ7dHJ5e3VFKGUpfWNhdGNoKGUpe3NQKG4sbi5yZXR1cm4sZSl9fX1mdW5jdGlvbiBscChlLG4pe2lmKG51bGw9PT1uLm1lbW9pemVkU3RhdGUmJm51bGwhPT0oZT1uLmFsdGVybmF0ZSkmJm51bGwhPT0oZT1lLm1lbW9pemVkU3RhdGUpJiZudWxsIT09KGU9ZS5kZWh5ZHJhdGVkKSl0cnl7dUUoZSl9Y2F0Y2goZSl7c1AobixuLnJldHVybixlKX19ZnVuY3Rpb24gbGgoZSxuKXt2YXIgdD1mdW5jdGlvbihlKXtzd2l0Y2goZS50YWcpe2Nhc2UgMzE6Y2FzZSAxMzpjYXNlIDE5OnZhciBuPWUuc3RhdGVOb2RlO3JldHVybiBudWxsPT09biYmKG49ZS5zdGF0ZU5vZGU9bmV3IGxhKSxuO2Nhc2UgMjI6cmV0dXJuIG51bGw9PT0obj0oZT1lLnN0YXRlTm9kZSkuX3JldHJ5Q2FjaGUpJiYobj1lLl9yZXRyeUNhY2hlPW5ldyBsYSksbjtkZWZhdWx0OnRocm93IEVycm9yKGwoNDM1LGUudGFnKSl9fShlKTtuLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHI9c04uYmluZChudWxsLGUsbik7dC5oYXMobil8fCh0LmFkZChuKSxuLnRoZW4ocixyKSl9KX1mdW5jdGlvbiBsZyhlLG4pe3ZhciB0PW4uZGVsZXRpb25zO2lmKG51bGwhPT10KWZvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbz10W3JdLGE9ZSxpPW4scz1pO2U6Zm9yKDtudWxsIT09czspe3N3aXRjaChzLnRhZyl7Y2FzZSAyNzppZihjaihzLnR5cGUpKXtscz1zLnN0YXRlTm9kZSxsYz0hMTticmVhayBlfWJyZWFrO2Nhc2UgNTpscz1zLnN0YXRlTm9kZSxsYz0hMTticmVhayBlO2Nhc2UgMzpjYXNlIDQ6bHM9cy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyxsYz0hMDticmVhayBlfXM9cy5yZXR1cm59aWYobnVsbD09PWxzKXRocm93IEVycm9yKGwoMTYwKSk7bGQoYSxpLG8pLGxzPW51bGwsbGM9ITEsbnVsbCE9PShhPW8uYWx0ZXJuYXRlKSYmKGEucmV0dXJuPW51bGwpLG8ucmV0dXJuPW51bGx9aWYoMTM4Nzgmbi5zdWJ0cmVlRmxhZ3MpZm9yKG49bi5jaGlsZDtudWxsIT09bjspbHYobixlKSxuPW4uc2libGluZ312YXIgbG09bnVsbDtmdW5jdGlvbiBsdihlLG4pe3ZhciB0PWUuYWx0ZXJuYXRlLHI9ZS5mbGFncztzd2l0Y2goZS50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTQ6Y2FzZSAxNTpsZyhuLGUpLGxiKGUpLDQmciYmKGkxKDMsZSxlLnJldHVybiksaTAoMyxlKSxpMSg1LGUsZS5yZXR1cm4pKTticmVhaztjYXNlIDE6bGcobixlKSxsYihlKSw1MTImciYmKGxyfHxudWxsPT09dHx8aTModCx0LnJldHVybikpLDY0JnImJmx0JiZudWxsIT09KGU9ZS51cGRhdGVRdWV1ZSkmJm51bGwhPT0ocj1lLmNhbGxiYWNrcykmJih0PWUuc2hhcmVkLmhpZGRlbkNhbGxiYWNrcyxlLnNoYXJlZC5oaWRkZW5DYWxsYmFja3M9bnVsbD09PXQ/cjp0LmNvbmNhdChyKSk7YnJlYWs7Y2FzZSAyNjp2YXIgbz1sbTtpZihsZyhuLGUpLGxiKGUpLDUxMiZyJiYobHJ8fG51bGw9PT10fHxpMyh0LHQucmV0dXJuKSksNCZyKXt2YXIgYT1udWxsIT09dD90Lm1lbW9pemVkU3RhdGU6bnVsbDtpZihyPWUubWVtb2l6ZWRTdGF0ZSxudWxsPT09dClpZihudWxsPT09cilpZihudWxsPT09ZS5zdGF0ZU5vZGUpe2U6e3I9ZS50eXBlLHQ9ZS5tZW1vaXplZFByb3BzLG89by5vd25lckRvY3VtZW50fHxvO246c3dpdGNoKHIpe2Nhc2VcInRpdGxlXCI6KCEoYT1vLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidGl0bGVcIilbMF0pfHxhW2VVXXx8YVtlTl18fFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj09PWEubmFtZXNwYWNlVVJJfHxhLmhhc0F0dHJpYnV0ZShcIml0ZW1wcm9wXCIpKSYmKGE9by5jcmVhdGVFbGVtZW50KHIpLG8uaGVhZC5pbnNlcnRCZWZvcmUoYSxvLnF1ZXJ5U2VsZWN0b3IoXCJoZWFkID4gdGl0bGVcIikpKSxjYyhhLHIsdCksYVtlTl09ZSxlWShhKSxyPWE7YnJlYWsgZTtjYXNlXCJsaW5rXCI6dmFyIGk9Y0coXCJsaW5rXCIsXCJocmVmXCIsbykuZ2V0KHIrKHQuaHJlZnx8XCJcIikpO2lmKGkpe2Zvcih2YXIgcz0wO3M8aS5sZW5ndGg7cysrKWlmKChhPWlbc10pLmdldEF0dHJpYnV0ZShcImhyZWZcIik9PT0obnVsbD09dC5ocmVmfHxcIlwiPT09dC5ocmVmP251bGw6dC5ocmVmKSYmYS5nZXRBdHRyaWJ1dGUoXCJyZWxcIik9PT0obnVsbD09dC5yZWw/bnVsbDp0LnJlbCkmJmEuZ2V0QXR0cmlidXRlKFwidGl0bGVcIik9PT0obnVsbD09dC50aXRsZT9udWxsOnQudGl0bGUpJiZhLmdldEF0dHJpYnV0ZShcImNyb3Nzb3JpZ2luXCIpPT09KG51bGw9PXQuY3Jvc3NPcmlnaW4/bnVsbDp0LmNyb3NzT3JpZ2luKSl7aS5zcGxpY2UocywxKTticmVhayBufX1jYyhhPW8uY3JlYXRlRWxlbWVudChyKSxyLHQpLG8uaGVhZC5hcHBlbmRDaGlsZChhKTticmVhaztjYXNlXCJtZXRhXCI6aWYoaT1jRyhcIm1ldGFcIixcImNvbnRlbnRcIixvKS5nZXQocisodC5jb250ZW50fHxcIlwiKSkpe2ZvcihzPTA7czxpLmxlbmd0aDtzKyspaWYoKGE9aVtzXSkuZ2V0QXR0cmlidXRlKFwiY29udGVudFwiKT09PShudWxsPT10LmNvbnRlbnQ/bnVsbDpcIlwiK3QuY29udGVudCkmJmEuZ2V0QXR0cmlidXRlKFwibmFtZVwiKT09PShudWxsPT10Lm5hbWU/bnVsbDp0Lm5hbWUpJiZhLmdldEF0dHJpYnV0ZShcInByb3BlcnR5XCIpPT09KG51bGw9PXQucHJvcGVydHk/bnVsbDp0LnByb3BlcnR5KSYmYS5nZXRBdHRyaWJ1dGUoXCJodHRwLWVxdWl2XCIpPT09KG51bGw9PXQuaHR0cEVxdWl2P251bGw6dC5odHRwRXF1aXYpJiZhLmdldEF0dHJpYnV0ZShcImNoYXJzZXRcIik9PT0obnVsbD09dC5jaGFyU2V0P251bGw6dC5jaGFyU2V0KSl7aS5zcGxpY2UocywxKTticmVhayBufX1jYyhhPW8uY3JlYXRlRWxlbWVudChyKSxyLHQpLG8uaGVhZC5hcHBlbmRDaGlsZChhKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKGwoNDY4LHIpKX1hW2VOXT1lLGVZKGEpLHI9YX1lLnN0YXRlTm9kZT1yfWVsc2UgY0oobyxlLnR5cGUsZS5zdGF0ZU5vZGUpO2Vsc2UgZS5zdGF0ZU5vZGU9Y1oobyxyLGUubWVtb2l6ZWRQcm9wcyk7ZWxzZSBhIT09cj8obnVsbD09PWE/bnVsbCE9PXQuc3RhdGVOb2RlJiYodD10LnN0YXRlTm9kZSkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KTphLmNvdW50LS0sbnVsbD09PXI/Y0oobyxlLnR5cGUsZS5zdGF0ZU5vZGUpOmNaKG8scixlLm1lbW9pemVkUHJvcHMpKTpudWxsPT09ciYmbnVsbCE9PWUuc3RhdGVOb2RlJiZpOShlLGUubWVtb2l6ZWRQcm9wcyx0Lm1lbW9pemVkUHJvcHMpfWJyZWFrO2Nhc2UgMjc6bGcobixlKSxsYihlKSw1MTImciYmKGxyfHxudWxsPT09dHx8aTModCx0LnJldHVybikpLG51bGwhPT10JiY0JnImJmk5KGUsZS5tZW1vaXplZFByb3BzLHQubWVtb2l6ZWRQcm9wcyk7YnJlYWs7Y2FzZSA1OmlmKGxnKG4sZSksbGIoZSksNTEyJnImJihscnx8bnVsbD09PXR8fGkzKHQsdC5yZXR1cm4pKSwzMiZlLmZsYWdzKXtvPWUuc3RhdGVOb2RlO3RyeXtucyhvLFwiXCIpfWNhdGNoKG4pe3NQKGUsZS5yZXR1cm4sbil9fTQmciYmbnVsbCE9ZS5zdGF0ZU5vZGUmJihvPWUubWVtb2l6ZWRQcm9wcyxpOShlLG8sbnVsbCE9PXQ/dC5tZW1vaXplZFByb3BzOm8pKSwxMDI0JnImJihsbz0hMCk7YnJlYWs7Y2FzZSA2OmlmKGxnKG4sZSksbGIoZSksNCZyKXtpZihudWxsPT09ZS5zdGF0ZU5vZGUpdGhyb3cgRXJyb3IobCgxNjIpKTtyPWUubWVtb2l6ZWRQcm9wcyx0PWUuc3RhdGVOb2RlO3RyeXt0Lm5vZGVWYWx1ZT1yfWNhdGNoKG4pe3NQKGUsZS5yZXR1cm4sbil9fWJyZWFrO2Nhc2UgMzppZihjUT1udWxsLG89bG0sbG09Y0Iobi5jb250YWluZXJJbmZvKSxsZyhuLGUpLGxtPW8sbGIoZSksNCZyJiZudWxsIT09dCYmdC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCl0cnl7dUUobi5jb250YWluZXJJbmZvKX1jYXRjaChuKXtzUChlLGUucmV0dXJuLG4pfWxvJiYobG89ITEsZnVuY3Rpb24gZShuKXtpZigxMDI0Jm4uc3VidHJlZUZsYWdzKWZvcihuPW4uY2hpbGQ7bnVsbCE9PW47KXt2YXIgdD1uO2UodCksNT09PXQudGFnJiYxMDI0JnQuZmxhZ3MmJnQuc3RhdGVOb2RlLnJlc2V0KCksbj1uLnNpYmxpbmd9fShlKSk7YnJlYWs7Y2FzZSA0OnI9bG0sbG09Y0IoZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyksbGcobixlKSxsYihlKSxsbT1yO2JyZWFrO2Nhc2UgMTI6ZGVmYXVsdDpsZyhuLGUpLGxiKGUpO2JyZWFrO2Nhc2UgMzE6Y2FzZSAxOTpsZyhuLGUpLGxiKGUpLDQmciYmbnVsbCE9PShyPWUudXBkYXRlUXVldWUpJiYoZS51cGRhdGVRdWV1ZT1udWxsLGxoKGUscikpO2JyZWFrO2Nhc2UgMTM6bGcobixlKSxsYihlKSw4MTkyJmUuY2hpbGQuZmxhZ3MmJm51bGwhPT1lLm1lbW9pemVkU3RhdGUhPShudWxsIT09dCYmbnVsbCE9PXQubWVtb2l6ZWRTdGF0ZSkmJihsSj1lcigpKSw0JnImJm51bGwhPT0ocj1lLnVwZGF0ZVF1ZXVlKSYmKGUudXBkYXRlUXVldWU9bnVsbCxsaChlLHIpKTticmVhaztjYXNlIDIyOm89bnVsbCE9PWUubWVtb2l6ZWRTdGF0ZTt2YXIgYz1udWxsIT09dCYmbnVsbCE9PXQubWVtb2l6ZWRTdGF0ZSx1PWx0LGQ9bHI7aWYobHQ9dXx8byxscj1kfHxjLGxnKG4sZSksbHI9ZCxsdD11LGxiKGUpLDgxOTImcillOmZvcigobj1lLnN0YXRlTm9kZSkuX3Zpc2liaWxpdHk9bz8tMiZuLl92aXNpYmlsaXR5OjF8bi5fdmlzaWJpbGl0eSxvJiYobnVsbD09PXR8fGN8fGx0fHxscnx8ZnVuY3Rpb24gZShuKXtmb3Iobj1uLmNoaWxkO251bGwhPT1uOyl7dmFyIHQ9bjtzd2l0Y2godC50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTQ6Y2FzZSAxNTppMSg0LHQsdC5yZXR1cm4pLGUodCk7YnJlYWs7Y2FzZSAxOmkzKHQsdC5yZXR1cm4pO3ZhciByPXQuc3RhdGVOb2RlO1wiZnVuY3Rpb25cIj09dHlwZW9mIHIuY29tcG9uZW50V2lsbFVubW91bnQmJmk0KHQsdC5yZXR1cm4sciksZSh0KTticmVhaztjYXNlIDI3OmNSKHQuc3RhdGVOb2RlKTtjYXNlIDI2OmNhc2UgNTppMyh0LHQucmV0dXJuKSxlKHQpO2JyZWFrO2Nhc2UgMjI6bnVsbD09PXQubWVtb2l6ZWRTdGF0ZSYmZSh0KTticmVhaztkZWZhdWx0OmUodCl9bj1uLnNpYmxpbmd9fShlKSksdD1udWxsLG49ZTs7KXtpZig1PT09bi50YWd8fDI2PT09bi50YWcpe2lmKG51bGw9PT10KXtjPXQ9bjt0cnl7aWYoYT1jLnN0YXRlTm9kZSxvKWk9YS5zdHlsZSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBpLnNldFByb3BlcnR5P2kuc2V0UHJvcGVydHkoXCJkaXNwbGF5XCIsXCJub25lXCIsXCJpbXBvcnRhbnRcIik6aS5kaXNwbGF5PVwibm9uZVwiO2Vsc2V7cz1jLnN0YXRlTm9kZTt2YXIgZj1jLm1lbW9pemVkUHJvcHMuc3R5bGUscD1udWxsIT1mJiZmLmhhc093blByb3BlcnR5KFwiZGlzcGxheVwiKT9mLmRpc3BsYXk6bnVsbDtzLnN0eWxlLmRpc3BsYXk9bnVsbD09cHx8XCJib29sZWFuXCI9PXR5cGVvZiBwP1wiXCI6KFwiXCIrcCkudHJpbSgpfX1jYXRjaChlKXtzUChjLGMucmV0dXJuLGUpfX19ZWxzZSBpZig2PT09bi50YWcpe2lmKG51bGw9PT10KXtjPW47dHJ5e2Muc3RhdGVOb2RlLm5vZGVWYWx1ZT1vP1wiXCI6Yy5tZW1vaXplZFByb3BzfWNhdGNoKGUpe3NQKGMsYy5yZXR1cm4sZSl9fX1lbHNlIGlmKDE4PT09bi50YWcpe2lmKG51bGw9PT10KXtjPW47dHJ5e3ZhciBoPWMuc3RhdGVOb2RlO28/Y0EoaCwhMCk6Y0EoYy5zdGF0ZU5vZGUsITEpfWNhdGNoKGUpe3NQKGMsYy5yZXR1cm4sZSl9fX1lbHNlIGlmKCgyMiE9PW4udGFnJiYyMyE9PW4udGFnfHxudWxsPT09bi5tZW1vaXplZFN0YXRlfHxuPT09ZSkmJm51bGwhPT1uLmNoaWxkKXtuLmNoaWxkLnJldHVybj1uLG49bi5jaGlsZDtjb250aW51ZX1pZihuPT09ZSlicmVhaztmb3IoO251bGw9PT1uLnNpYmxpbmc7KXtpZihudWxsPT09bi5yZXR1cm58fG4ucmV0dXJuPT09ZSlicmVhayBlO3Q9PT1uJiYodD1udWxsKSxuPW4ucmV0dXJufXQ9PT1uJiYodD1udWxsKSxuLnNpYmxpbmcucmV0dXJuPW4ucmV0dXJuLG49bi5zaWJsaW5nfTQmciYmbnVsbCE9PShyPWUudXBkYXRlUXVldWUpJiZudWxsIT09KHQ9ci5yZXRyeVF1ZXVlKSYmKHIucmV0cnlRdWV1ZT1udWxsLGxoKGUsdCkpO2Nhc2UgMzA6Y2FzZSAyMTp9fWZ1bmN0aW9uIGxiKGUpe3ZhciBuPWUuZmxhZ3M7aWYoMiZuKXt0cnl7Zm9yKHZhciB0LHI9ZS5yZXR1cm47bnVsbCE9PXI7KXtpZihpOChyKSl7dD1yO2JyZWFrfXI9ci5yZXR1cm59aWYobnVsbD09dCl0aHJvdyBFcnJvcihsKDE2MCkpO3N3aXRjaCh0LnRhZyl7Y2FzZSAyNzp2YXIgbz10LnN0YXRlTm9kZSxhPWk3KGUpO2xlKGUsYSxvKTticmVhaztjYXNlIDU6dmFyIGk9dC5zdGF0ZU5vZGU7MzImdC5mbGFncyYmKG5zKGksXCJcIiksdC5mbGFncyY9LTMzKTt2YXIgcz1pNyhlKTtsZShlLHMsaSk7YnJlYWs7Y2FzZSAzOmNhc2UgNDp2YXIgYz10LnN0YXRlTm9kZS5jb250YWluZXJJbmZvLHU9aTcoZSk7IWZ1bmN0aW9uIGUobix0LHIpe3ZhciBvPW4udGFnO2lmKDU9PT1vfHw2PT09byluPW4uc3RhdGVOb2RlLHQ/KDk9PT1yLm5vZGVUeXBlP3IuYm9keTpcIkhUTUxcIj09PXIubm9kZU5hbWU/ci5vd25lckRvY3VtZW50LmJvZHk6cikuaW5zZXJ0QmVmb3JlKG4sdCk6KCh0PTk9PT1yLm5vZGVUeXBlP3IuYm9keTpcIkhUTUxcIj09PXIubm9kZU5hbWU/ci5vd25lckRvY3VtZW50LmJvZHk6cikuYXBwZW5kQ2hpbGQobiksbnVsbCE9KHI9ci5fcmVhY3RSb290Q29udGFpbmVyKXx8bnVsbCE9PXQub25jbGlja3x8KHQub25jbGljaz1ubSkpO2Vsc2UgaWYoNCE9PW8mJigyNz09PW8mJmNqKG4udHlwZSkmJihyPW4uc3RhdGVOb2RlLHQ9bnVsbCksbnVsbCE9PShuPW4uY2hpbGQpKSlmb3IoZShuLHQsciksbj1uLnNpYmxpbmc7bnVsbCE9PW47KWUobix0LHIpLG49bi5zaWJsaW5nfShlLHUsYyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcihsKDE2MSkpfX1jYXRjaChuKXtzUChlLGUucmV0dXJuLG4pfWUuZmxhZ3MmPS0zfTQwOTYmbiYmKGUuZmxhZ3MmPS00MDk3KX1mdW5jdGlvbiBseShlLG4pe2lmKDg3NzImbi5zdWJ0cmVlRmxhZ3MpZm9yKG49bi5jaGlsZDtudWxsIT09bjspbGwoZSxuLmFsdGVybmF0ZSxuKSxuPW4uc2libGluZ31mdW5jdGlvbiBseChlLG4pe3ZhciB0PW51bGw7bnVsbCE9PWUmJm51bGwhPT1lLm1lbW9pemVkU3RhdGUmJm51bGwhPT1lLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sJiYodD1lLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpLGU9bnVsbCxudWxsIT09bi5tZW1vaXplZFN0YXRlJiZudWxsIT09bi5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCYmKGU9bi5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKSxlIT09dCYmKG51bGwhPWUmJmUucmVmQ291bnQrKyxudWxsIT10JiZyMih0KSl9ZnVuY3Rpb24gbHcoZSxuKXtlPW51bGwsbnVsbCE9PW4uYWx0ZXJuYXRlJiYoZT1uLmFsdGVybmF0ZS5tZW1vaXplZFN0YXRlLmNhY2hlKSwobj1uLm1lbW9pemVkU3RhdGUuY2FjaGUpIT09ZSYmKG4ucmVmQ291bnQrKyxudWxsIT1lJiZyMihlKSl9ZnVuY3Rpb24gbGooZSxuLHQscil7aWYoMTAyNTYmbi5zdWJ0cmVlRmxhZ3MpZm9yKG49bi5jaGlsZDtudWxsIT09bjspbGsoZSxuLHQsciksbj1uLnNpYmxpbmd9ZnVuY3Rpb24gbGsoZSxuLHQscil7dmFyIG89bi5mbGFncztzd2l0Y2gobi50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6bGooZSxuLHQsciksMjA0OCZvJiZpMCg5LG4pO2JyZWFrO2Nhc2UgMTpjYXNlIDMxOmNhc2UgMTM6ZGVmYXVsdDpsaihlLG4sdCxyKTticmVhaztjYXNlIDM6bGooZSxuLHQsciksMjA0OCZvJiYoZT1udWxsLG51bGwhPT1uLmFsdGVybmF0ZSYmKGU9bi5hbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZS5jYWNoZSksKG49bi5tZW1vaXplZFN0YXRlLmNhY2hlKSE9PWUmJihuLnJlZkNvdW50KyssbnVsbCE9ZSYmcjIoZSkpKTticmVhaztjYXNlIDEyOmlmKDIwNDgmbyl7bGooZSxuLHQsciksZT1uLnN0YXRlTm9kZTt0cnl7dmFyIGE9bi5tZW1vaXplZFByb3BzLGk9YS5pZCxsPWEub25Qb3N0Q29tbWl0O1wiZnVuY3Rpb25cIj09dHlwZW9mIGwmJmwoaSxudWxsPT09bi5hbHRlcm5hdGU/XCJtb3VudFwiOlwidXBkYXRlXCIsZS5wYXNzaXZlRWZmZWN0RHVyYXRpb24sLTApfWNhdGNoKGUpe3NQKG4sbi5yZXR1cm4sZSl9fWVsc2UgbGooZSxuLHQscik7YnJlYWs7Y2FzZSAyMzpicmVhaztjYXNlIDIyOmE9bi5zdGF0ZU5vZGUsaT1uLmFsdGVybmF0ZSxudWxsIT09bi5tZW1vaXplZFN0YXRlPzImYS5fdmlzaWJpbGl0eT9saihlLG4sdCxyKTpsQShlLG4pOjImYS5fdmlzaWJpbGl0eT9saihlLG4sdCxyKTooYS5fdmlzaWJpbGl0eXw9MixmdW5jdGlvbiBlKG4sdCxyLG8sYSl7Zm9yKGE9YSYmMCE9KDEwMjU2JnQuc3VidHJlZUZsYWdzKSx0PXQuY2hpbGQ7bnVsbCE9PXQ7KXt2YXIgaT10LGw9aS5mbGFncztzd2l0Y2goaS50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6ZShuLGkscixvLGEpLGkwKDgsaSk7YnJlYWs7Y2FzZSAyMzpicmVhaztjYXNlIDIyOnZhciBzPWkuc3RhdGVOb2RlO251bGwhPT1pLm1lbW9pemVkU3RhdGU/MiZzLl92aXNpYmlsaXR5P2UobixpLHIsbyxhKTpsQShuLGkpOihzLl92aXNpYmlsaXR5fD0yLGUobixpLHIsbyxhKSksYSYmMjA0OCZsJiZseChpLmFsdGVybmF0ZSxpKTticmVhaztjYXNlIDI0OmUobixpLHIsbyxhKSxhJiYyMDQ4JmwmJmx3KGkuYWx0ZXJuYXRlLGkpO2JyZWFrO2RlZmF1bHQ6ZShuLGkscixvLGEpfXQ9dC5zaWJsaW5nfX0oZSxuLHQsciwwIT0oMTAyNTYmbi5zdWJ0cmVlRmxhZ3MpKSksMjA0OCZvJiZseChpLG4pO2JyZWFrO2Nhc2UgMjQ6bGooZSxuLHQsciksMjA0OCZvJiZsdyhuLmFsdGVybmF0ZSxuKX19ZnVuY3Rpb24gbEEoZSxuKXtpZigxMDI1NiZuLnN1YnRyZWVGbGFncylmb3Iobj1uLmNoaWxkO251bGwhPT1uOyl7dmFyIHQ9bixyPXQuZmxhZ3M7c3dpdGNoKHQudGFnKXtjYXNlIDIyOmxBKGUsdCksMjA0OCZyJiZseCh0LmFsdGVybmF0ZSx0KTticmVhaztjYXNlIDI0OmxBKGUsdCksMjA0OCZyJiZsdyh0LmFsdGVybmF0ZSx0KTticmVhaztkZWZhdWx0OmxBKGUsdCl9bj1uLnNpYmxpbmd9fXZhciBsTz04MTkyO2Z1bmN0aW9uIGxDKGUpe2lmKGUuc3VidHJlZUZsYWdzJmxPKWZvcihlPWUuY2hpbGQ7bnVsbCE9PWU7KWxTKGUpLGU9ZS5zaWJsaW5nfWZ1bmN0aW9uIGxTKGUpe3N3aXRjaChlLnRhZyl7Y2FzZSAyNjpsQyhlKSxlLmZsYWdzJmxPJiZudWxsIT09ZS5tZW1vaXplZFN0YXRlJiZmdW5jdGlvbihlLG4sdCl7aWYobnVsbD09PWMxKXRocm93IEVycm9yKGwoNDc1KSk7dmFyIHI9YzE7aWYoXCJzdHlsZXNoZWV0XCI9PT1uLnR5cGUmJihcInN0cmluZ1wiIT10eXBlb2YgdC5tZWRpYXx8ITEhPT1tYXRjaE1lZGlhKHQubWVkaWEpLm1hdGNoZXMpJiYwPT0oNCZuLnN0YXRlLmxvYWRpbmcpKXtpZihudWxsPT09bi5pbnN0YW5jZSl7dmFyIG89Y1UodC5ocmVmKSxhPWUucXVlcnlTZWxlY3RvcihjVihvKSk7aWYoYSl7bnVsbCE9PShlPWEuX3ApJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS50aGVuJiYoci5jb3VudCsrLHI9YzIuYmluZChyKSxlLnRoZW4ocixyKSksbi5zdGF0ZS5sb2FkaW5nfD00LG4uaW5zdGFuY2U9YSxlWShhKTtyZXR1cm59YT1lLm93bmVyRG9jdW1lbnR8fGUsdD1jcSh0KSwobz1jTi5nZXQobykpJiZjWCh0LG8pLGVZKGE9YS5jcmVhdGVFbGVtZW50KFwibGlua1wiKSk7dmFyIGk9YTtpLl9wPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGUsbil7aS5vbmxvYWQ9ZSxpLm9uZXJyb3I9bn0pLGNjKGEsXCJsaW5rXCIsdCksbi5pbnN0YW5jZT1hfW51bGw9PT1yLnN0eWxlc2hlZXRzJiYoci5zdHlsZXNoZWV0cz1uZXcgTWFwKSxyLnN0eWxlc2hlZXRzLnNldChuLGUpLChlPW4uc3RhdGUucHJlbG9hZCkmJjA9PSgzJm4uc3RhdGUubG9hZGluZykmJihyLmNvdW50Kyssbj1jMi5iaW5kKHIpLGUuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIixuKSxlLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLG4pKX19KGxtLGUubWVtb2l6ZWRTdGF0ZSxlLm1lbW9pemVkUHJvcHMpO2JyZWFrO2Nhc2UgNTpkZWZhdWx0OmxDKGUpO2JyZWFrO2Nhc2UgMzpjYXNlIDQ6dmFyIG49bG07bG09Y0IoZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyksbEMoZSksbG09bjticmVhaztjYXNlIDIyOm51bGw9PT1lLm1lbW9pemVkU3RhdGUmJihudWxsIT09KG49ZS5hbHRlcm5hdGUpJiZudWxsIT09bi5tZW1vaXplZFN0YXRlPyhuPWxPLGxPPTB4MTAwMDAwMCxsQyhlKSxsTz1uKTpsQyhlKSl9fWZ1bmN0aW9uIGxFKGUpe3ZhciBuPWUuYWx0ZXJuYXRlO2lmKG51bGwhPT1uJiZudWxsIT09KGU9bi5jaGlsZCkpe24uY2hpbGQ9bnVsbDtkbyBuPWUuc2libGluZyxlLnNpYmxpbmc9bnVsbCxlPW47d2hpbGUobnVsbCE9PWUpfX1mdW5jdGlvbiBsXyhlKXt2YXIgbj1lLmRlbGV0aW9ucztpZigwIT0oMTYmZS5mbGFncykpe2lmKG51bGwhPT1uKWZvcih2YXIgdD0wO3Q8bi5sZW5ndGg7dCsrKXt2YXIgcj1uW3RdO2xpPXIsbHoocixlKX1sRShlKX1pZigxMDI1NiZlLnN1YnRyZWVGbGFncylmb3IoZT1lLmNoaWxkO251bGwhPT1lOylsUChlKSxlPWUuc2libGluZ31mdW5jdGlvbiBsUChlKXtzd2l0Y2goZS50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6bF8oZSksMjA0OCZlLmZsYWdzJiZpMSg5LGUsZS5yZXR1cm4pO2JyZWFrO2Nhc2UgMzpjYXNlIDEyOmRlZmF1bHQ6bF8oZSk7YnJlYWs7Y2FzZSAyMjp2YXIgbj1lLnN0YXRlTm9kZTtudWxsIT09ZS5tZW1vaXplZFN0YXRlJiYyJm4uX3Zpc2liaWxpdHkmJihudWxsPT09ZS5yZXR1cm58fDEzIT09ZS5yZXR1cm4udGFnKT8obi5fdmlzaWJpbGl0eSY9LTMsZnVuY3Rpb24gZShuKXt2YXIgdD1uLmRlbGV0aW9ucztpZigwIT0oMTYmbi5mbGFncykpe2lmKG51bGwhPT10KWZvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbz10W3JdO2xpPW8sbHoobyxuKX1sRShuKX1mb3Iobj1uLmNoaWxkO251bGwhPT1uOyl7c3dpdGNoKCh0PW4pLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTppMSg4LHQsdC5yZXR1cm4pLGUodCk7YnJlYWs7Y2FzZSAyMjoyJihyPXQuc3RhdGVOb2RlKS5fdmlzaWJpbGl0eSYmKHIuX3Zpc2liaWxpdHkmPS0zLGUodCkpO2JyZWFrO2RlZmF1bHQ6ZSh0KX1uPW4uc2libGluZ319KGUpKTpsXyhlKX19ZnVuY3Rpb24gbHooZSxuKXtmb3IoO251bGwhPT1saTspe3ZhciB0PWxpO3N3aXRjaCh0LnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTppMSg4LHQsbik7YnJlYWs7Y2FzZSAyMzpjYXNlIDIyOmlmKG51bGwhPT10Lm1lbW9pemVkU3RhdGUmJm51bGwhPT10Lm1lbW9pemVkU3RhdGUuY2FjaGVQb29sKXt2YXIgcj10Lm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2w7bnVsbCE9ciYmci5yZWZDb3VudCsrfWJyZWFrO2Nhc2UgMjQ6cjIodC5tZW1vaXplZFN0YXRlLmNhY2hlKX1pZihudWxsIT09KHI9dC5jaGlsZCkpci5yZXR1cm49dCxsaT1yO2Vsc2UgZm9yKHQ9ZTtudWxsIT09bGk7KXt2YXIgbz0ocj1saSkuc2libGluZyxhPXIucmV0dXJuO2lmKCFmdW5jdGlvbiBlKG4pe3ZhciB0PW4uYWx0ZXJuYXRlO251bGwhPT10JiYobi5hbHRlcm5hdGU9bnVsbCxlKHQpKSxuLmNoaWxkPW51bGwsbi5kZWxldGlvbnM9bnVsbCxuLnNpYmxpbmc9bnVsbCw1PT09bi50YWcmJm51bGwhPT0odD1uLnN0YXRlTm9kZSkmJmVWKHQpLG4uc3RhdGVOb2RlPW51bGwsbi5yZXR1cm49bnVsbCxuLmRlcGVuZGVuY2llcz1udWxsLG4ubWVtb2l6ZWRQcm9wcz1udWxsLG4ubWVtb2l6ZWRTdGF0ZT1udWxsLG4ucGVuZGluZ1Byb3BzPW51bGwsbi5zdGF0ZU5vZGU9bnVsbCxuLnVwZGF0ZVF1ZXVlPW51bGx9KHIpLHI9PT10KXtsaT1udWxsO2JyZWFrfWlmKG51bGwhPT1vKXtvLnJldHVybj1hLGxpPW87YnJlYWt9bGk9YX19fXZhciBsTD17Z2V0Q2FjaGVGb3JUeXBlOmZ1bmN0aW9uKGUpe3ZhciBuPXJZKHIwKSx0PW4uZGF0YS5nZXQoZSk7cmV0dXJuIHZvaWQgMD09PXQmJih0PWUoKSxuLmRhdGEuc2V0KGUsdCkpLHR9LGNhY2hlU2lnbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIHJZKHIwKS5jb250cm9sbGVyLnNpZ25hbH19LGxUPVwiZnVuY3Rpb25cIj09dHlwZW9mIFdlYWtNYXA/V2Vha01hcDpNYXAsbFI9MCxsTj1udWxsLGxEPW51bGwsbEI9MCxsTT0wLGxJPW51bGwsbEg9ITEsbEY9ITEsbFU9ITEsbFY9MCxscT0wLGxXPTAsbCQ9MCxsWj0wLGxZPTAsbFg9MCxsSz1udWxsLGxRPW51bGwsbEc9ITEsbEo9MCxsMD0xLzAsbDE9bnVsbCxsMj1udWxsLGw0PTAsbDU9bnVsbCxsMz1udWxsLGw2PTAsbDk9MCxsOD1udWxsLGw3PW51bGwsc2U9MCxzbj1udWxsO2Z1bmN0aW9uIHN0KCl7cmV0dXJuIDAhPSgyJmxSKSYmMCE9PWxCP2xCJi1sQjpudWxsIT09TC5UP3NYKCk6ZUwoKX1mdW5jdGlvbiBzcigpezA9PT1sWSYmKGxZPTA9PSgweDIwMDAwMDAwJmxCKXx8clM/ZWsoKToweDIwMDAwMDAwKTt2YXIgZT1vTS5jdXJyZW50O3JldHVybiBudWxsIT09ZSYmKGUuZmxhZ3N8PTMyKSxsWX1mdW5jdGlvbiBzbyhlLG4sdCl7KGU9PT1sTiYmKDI9PT1sTXx8OT09PWxNKXx8bnVsbCE9PWUuY2FuY2VsUGVuZGluZ0NvbW1pdCkmJihzdShlLDApLHNsKGUsbEIsbFksITEpKSxlQyhlLHQpLCgwPT0oMiZsUil8fGUhPT1sTikmJihlPT09bE4mJigwPT0oMiZsUikmJihsJHw9dCksND09PWxxJiZzbChlLGxCLGxZLCExKSksc1UoZSkpfWZ1bmN0aW9uIHNhKGUsbix0KXtpZigwIT0oNiZsUikpdGhyb3cgRXJyb3IobCgzMjcpKTtmb3IodmFyIHI9IXQmJjA9PSgxMjQmbikmJjA9PShuJmUuZXhwaXJlZExhbmVzKXx8ZWooZSxuKSxvPXI/ZnVuY3Rpb24oZSxuKXt2YXIgdD1sUjtsUnw9Mjt2YXIgcj1zcCgpLG89c2goKTtsTiE9PWV8fGxCIT09bj8obDE9bnVsbCxsMD1lcigpKzUwMCxzdShlLG4pKTpsRj1laihlLG4pO2U6Zm9yKDs7KXRyeXtpZigwIT09bE0mJm51bGwhPT1sRCl7bj1sRDt2YXIgYT1sSTtuOnN3aXRjaChsTSl7Y2FzZSAxOmxNPTAsbEk9bnVsbCxzeShlLG4sYSwxKTticmVhaztjYXNlIDI6Y2FzZSA5OmlmKG9sKGEpKXtsTT0wLGxJPW51bGwsc2Iobik7YnJlYWt9bj1mdW5jdGlvbigpezIhPT1sTSYmOSE9PWxNfHxsTiE9PWV8fChsTT03KSxzVShlKX0sYS50aGVuKG4sbik7YnJlYWsgZTtjYXNlIDM6bE09NzticmVhayBlO2Nhc2UgNDpsTT01O2JyZWFrIGU7Y2FzZSA3Om9sKGEpPyhsTT0wLGxJPW51bGwsc2IobikpOihsTT0wLGxJPW51bGwsc3koZSxuLGEsNykpO2JyZWFrO2Nhc2UgNTp2YXIgaT1udWxsO3N3aXRjaChsRC50YWcpe2Nhc2UgMjY6aT1sRC5tZW1vaXplZFN0YXRlO2Nhc2UgNTpjYXNlIDI3OnZhciBzPWxEO2lmKGk/YzAoaSk6cy5zdGF0ZU5vZGUuY29tcGxldGUpe2xNPTAsbEk9bnVsbDt2YXIgYz1zLnNpYmxpbmc7aWYobnVsbCE9PWMpbEQ9YztlbHNle3ZhciB1PXMucmV0dXJuO251bGwhPT11PyhsRD11LHN4KHUpKTpsRD1udWxsfWJyZWFrIG59fWxNPTAsbEk9bnVsbCxzeShlLG4sYSw1KTticmVhaztjYXNlIDY6bE09MCxsST1udWxsLHN5KGUsbixhLDYpO2JyZWFrO2Nhc2UgODpzYygpLGxxPTY7YnJlYWsgZTtkZWZhdWx0OnRocm93IEVycm9yKGwoNDYyKSl9fWZvcig7bnVsbCE9PWxEJiYhZW4oKTspc3YobEQpO2JyZWFrfWNhdGNoKG4pe3NkKGUsbil9cmV0dXJuKHJIPXJJPW51bGwsTC5IPXIsTC5BPW8sbFI9dCxudWxsIT09bEQpPzA6KGxOPW51bGwsbEI9MCx0MigpLGxxKX0oZSxuKTpzbShlLG4sITApLGE9cjs7KXtpZigwPT09bylsRiYmIXImJnNsKGUsbiwwLCExKTtlbHNle2lmKHQ9ZS5jdXJyZW50LmFsdGVybmF0ZSxhJiYhZnVuY3Rpb24oZSl7Zm9yKHZhciBuPWU7Oyl7dmFyIHQ9bi50YWc7aWYoKDA9PT10fHwxMT09PXR8fDE1PT09dCkmJjE2Mzg0Jm4uZmxhZ3MmJm51bGwhPT0odD1uLnVwZGF0ZVF1ZXVlKSYmbnVsbCE9PSh0PXQuc3RvcmVzKSlmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG89dFtyXSxhPW8uZ2V0U25hcHNob3Q7bz1vLnZhbHVlO3RyeXtpZighdE8oYSgpLG8pKXJldHVybiExfWNhdGNoKGUpe3JldHVybiExfX1pZih0PW4uY2hpbGQsMTYzODQmbi5zdWJ0cmVlRmxhZ3MmJm51bGwhPT10KXQucmV0dXJuPW4sbj10O2Vsc2V7aWYobj09PWUpYnJlYWs7Zm9yKDtudWxsPT09bi5zaWJsaW5nOyl7aWYobnVsbD09PW4ucmV0dXJufHxuLnJldHVybj09PWUpcmV0dXJuITA7bj1uLnJldHVybn1uLnNpYmxpbmcucmV0dXJuPW4ucmV0dXJuLG49bi5zaWJsaW5nfX1yZXR1cm4hMH0odCkpe289c20oZSxuLCExKSxhPSExO2NvbnRpbnVlfWlmKDI9PT1vKXtpZihhPW4sZS5lcnJvclJlY292ZXJ5RGlzYWJsZWRMYW5lcyZhKXZhciBpPTA7ZWxzZSBpPTAhPShpPS0weDIwMDAwMDAxJmUucGVuZGluZ0xhbmVzKT9pOjB4MjAwMDAwMDAmaT8weDIwMDAwMDAwOjA7aWYoMCE9PWkpe249aTtlOntvPWxLO3ZhciBzPWUuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZDtpZihzJiYoc3UoZSxpKS5mbGFnc3w9MjU2KSwyIT09KGk9c20oZSxpLCExKSkpe2lmKGxVJiYhcyl7ZS5lcnJvclJlY292ZXJ5RGlzYWJsZWRMYW5lc3w9YSxsJHw9YSxvPTQ7YnJlYWsgZX1hPWxRLGxRPW8sbnVsbCE9PWEmJihudWxsPT09bFE/bFE9YTpsUS5wdXNoLmFwcGx5KGxRLGEpKX1vPWl9aWYoYT0hMSwyIT09byljb250aW51ZX19aWYoMT09PW8pe3N1KGUsMCksc2woZSxuLDAsITApO2JyZWFrfWU6e3N3aXRjaChyPWUsYT1vKXtjYXNlIDA6Y2FzZSAxOnRocm93IEVycm9yKGwoMzQ1KSk7Y2FzZSA0OmlmKCg0MTk0MDQ4Jm4pIT09bilicmVhaztjYXNlIDY6c2wocixuLGxZLCFsSCk7YnJlYWsgZTtjYXNlIDI6bFE9bnVsbDticmVhaztjYXNlIDM6Y2FzZSA1OmJyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IobCgzMjkpKX1pZigoMHgzYzAwMDAwJm4pPT09biYmMTA8KG89bEorMzAwLWVyKCkpKXtpZihzbChyLG4sbFksIWxIKSwwIT09ZXcociwwLCEwKSlicmVhayBlO3IudGltZW91dEhhbmRsZT1jdihzaS5iaW5kKG51bGwscix0LGxRLGwxLGxHLG4sbFksbCQsbFgsbEgsYSwyLC0wLDApLG8pO2JyZWFrIGV9c2kocix0LGxRLGwxLGxHLG4sbFksbCQsbFgsbEgsYSwwLC0wLDApfX1icmVha31zVShlKX1mdW5jdGlvbiBzaShlLG4sdCxyLG8sYSxpLHMsYyx1LGQsZixwLGgpe2lmKGUudGltZW91dEhhbmRsZT0tMSwoODE5MiYoZj1uLnN1YnRyZWVGbGFncyl8fDB4MTAwMjAwMD09KDB4MTAwMjAwMCZmKSkmJihjMT17c3R5bGVzaGVldHM6bnVsbCxjb3VudDowLHVuc3VzcGVuZDpubX0sbFMobiksbnVsbCE9PShmPWZ1bmN0aW9uKCl7aWYobnVsbD09PWMxKXRocm93IEVycm9yKGwoNDc1KSk7dmFyIGU9YzE7cmV0dXJuIGUuc3R5bGVzaGVldHMmJjA9PT1lLmNvdW50JiZjNShlLGUuc3R5bGVzaGVldHMpLDA8ZS5jb3VudD9mdW5jdGlvbihuKXt2YXIgdD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoZS5zdHlsZXNoZWV0cyYmYzUoZSxlLnN0eWxlc2hlZXRzKSxlLnVuc3VzcGVuZCl7dmFyIG49ZS51bnN1c3BlbmQ7ZS51bnN1c3BlbmQ9bnVsbCxuKCl9fSw2ZTQpO3JldHVybiBlLnVuc3VzcGVuZD1uLGZ1bmN0aW9uKCl7ZS51bnN1c3BlbmQ9bnVsbCxjbGVhclRpbWVvdXQodCl9fTpudWxsfSgpKSkpe2UuY2FuY2VsUGVuZGluZ0NvbW1pdD1mKHNqLmJpbmQobnVsbCxlLG4sYSx0LHIsbyxpLHMsYyxkLDEscCxoKSksc2woZSxhLGksIXUpO3JldHVybn1zaihlLG4sYSx0LHIsbyxpLHMsYyl9ZnVuY3Rpb24gc2woZSxuLHQscil7biY9fmxaLG4mPX5sJCxlLnN1c3BlbmRlZExhbmVzfD1uLGUucGluZ2VkTGFuZXMmPX5uLHImJihlLndhcm1MYW5lc3w9bikscj1lLmV4cGlyYXRpb25UaW1lcztmb3IodmFyIG89bjswPG87KXt2YXIgYT0zMS1lZyhvKSxpPTE8PGE7clthXT0tMSxvJj1+aX0wIT09dCYmZVMoZSx0LG4pfWZ1bmN0aW9uIHNzKCl7cmV0dXJuIDAhPSg2JmxSKXx8KHNWKDAsITEpLCExKX1mdW5jdGlvbiBzYygpe2lmKG51bGwhPT1sRCl7aWYoMD09PWxNKXZhciBlPWxELnJldHVybjtlbHNlIGU9bEQsckg9ckk9bnVsbCxhdChlKSxvZj1udWxsLG9wPTAsZT1sRDtmb3IoO251bGwhPT1lOylpSihlLmFsdGVybmF0ZSxlKSxlPWUucmV0dXJuO2xEPW51bGx9fWZ1bmN0aW9uIHN1KGUsbil7dmFyIHQ9ZS50aW1lb3V0SGFuZGxlOy0xIT09dCYmKGUudGltZW91dEhhbmRsZT0tMSxjYih0KSksbnVsbCE9PSh0PWUuY2FuY2VsUGVuZGluZ0NvbW1pdCkmJihlLmNhbmNlbFBlbmRpbmdDb21taXQ9bnVsbCx0KCkpLHNjKCksbE49ZSxsRD10PXJ0KGUuY3VycmVudCxudWxsKSxsQj1uLGxNPTAsbEk9bnVsbCxsSD0hMSxsRj1laihlLG4pLGxVPSExLGxYPWxZPWxaPWwkPWxXPWxxPTAsbFE9bEs9bnVsbCxsRz0hMSwwIT0oOCZuKSYmKG58PTMyJm4pO3ZhciByPWUuZW50YW5nbGVkTGFuZXM7aWYoMCE9PXIpZm9yKGU9ZS5lbnRhbmdsZW1lbnRzLHImPW47MDxyOyl7dmFyIG89MzEtZWcociksYT0xPDxvO258PWVbb10sciY9fmF9cmV0dXJuIGxWPW4sdDIoKSx0fWZ1bmN0aW9uIHNkKGUsbil7b1k9bnVsbCxMLkg9aWUsbj09PW9yfHxuPT09b2E/KG49b3UoKSxsTT0zKTpuPT09b28/KG49b3UoKSxsTT00KTpsTT1uPT09aXk/ODpudWxsIT09biYmXCJvYmplY3RcIj09dHlwZW9mIG4mJlwiZnVuY3Rpb25cIj09dHlwZW9mIG4udGhlbj82OjEsbEk9bixudWxsPT09bEQmJihscT0xLGloKGUscnUobixlLmN1cnJlbnQpKSl9ZnVuY3Rpb24gc2YoKXt2YXIgZT1vTS5jdXJyZW50O3JldHVybiBudWxsPT09ZXx8KCg0MTk0MDQ4JmxCKT09PWxCP251bGw9PT1vSTooKDB4M2MwMDAwMCZsQik9PT1sQnx8MCE9KDB4MjAwMDAwMDAmbEIpKSYmZT09PW9JKX1mdW5jdGlvbiBzcCgpe3ZhciBlPUwuSDtyZXR1cm4gTC5IPWllLG51bGw9PT1lP2llOmV9ZnVuY3Rpb24gc2goKXt2YXIgZT1MLkE7cmV0dXJuIEwuQT1sTCxlfWZ1bmN0aW9uIHNnKCl7bHE9NCxsSHx8KDQxOTQwNDgmbEIpIT09bEImJm51bGwhPT1vTS5jdXJyZW50fHwobEY9ITApLDA9PSgweDdmZmZmZmYmbFcpJiYwPT0oMHg3ZmZmZmZmJmwkKXx8bnVsbD09PWxOfHxzbChsTixsQixsWSwhMSl9ZnVuY3Rpb24gc20oZSxuLHQpe3ZhciByPWxSO2xSfD0yO3ZhciBvPXNwKCksYT1zaCgpOyhsTiE9PWV8fGxCIT09bikmJihsMT1udWxsLHN1KGUsbikpLG49ITE7dmFyIGk9bHE7ZTpmb3IoOzspdHJ5e2lmKDAhPT1sTSYmbnVsbCE9PWxEKXt2YXIgbD1sRCxzPWxJO3N3aXRjaChsTSl7Y2FzZSA4OnNjKCksaT02O2JyZWFrIGU7Y2FzZSAzOmNhc2UgMjpjYXNlIDk6Y2FzZSA2Om51bGw9PT1vTS5jdXJyZW50JiYobj0hMCk7dmFyIGM9bE07aWYobE09MCxsST1udWxsLHN5KGUsbCxzLGMpLHQmJmxGKXtpPTA7YnJlYWsgZX1icmVhaztkZWZhdWx0OmM9bE0sbE09MCxsST1udWxsLHN5KGUsbCxzLGMpfX0oZnVuY3Rpb24oKXtmb3IoO251bGwhPT1sRDspc3YobEQpfSkoKSxpPWxxO2JyZWFrfWNhdGNoKG4pe3NkKGUsbil9cmV0dXJuIG4mJmUuc2hlbGxTdXNwZW5kQ291bnRlcisrLHJIPXJJPW51bGwsbFI9cixMLkg9byxMLkE9YSxudWxsPT09bEQmJihsTj1udWxsLGxCPTAsdDIoKSksaX1mdW5jdGlvbiBzdihlKXt2YXIgbj1pJChlLmFsdGVybmF0ZSxlLGxWKTtlLm1lbW9pemVkUHJvcHM9ZS5wZW5kaW5nUHJvcHMsbnVsbD09PW4/c3goZSk6bEQ9bn1mdW5jdGlvbiBzYihlKXt2YXIgbj1lLHQ9bi5hbHRlcm5hdGU7c3dpdGNoKG4udGFnKXtjYXNlIDE1OmNhc2UgMDpuPWl6KHQsbixuLnBlbmRpbmdQcm9wcyxuLnR5cGUsdm9pZCAwLGxCKTticmVhaztjYXNlIDExOm49aXoodCxuLG4ucGVuZGluZ1Byb3BzLG4udHlwZS5yZW5kZXIsbi5yZWYsbEIpO2JyZWFrO2Nhc2UgNTphdChuKTtkZWZhdWx0OmlKKHQsbiksbj1pJCh0LG49bEQ9cnIobixsViksbFYpfWUubWVtb2l6ZWRQcm9wcz1lLnBlbmRpbmdQcm9wcyxudWxsPT09bj9zeChlKTpsRD1ufWZ1bmN0aW9uIHN5KGUsbix0LHIpe3JIPXJJPW51bGwsYXQobiksb2Y9bnVsbCxvcD0wO3ZhciBvPW4ucmV0dXJuO3RyeXtpZihmdW5jdGlvbihlLG4sdCxyLG8pe2lmKHQuZmxhZ3N8PTMyNzY4LG51bGwhPT1yJiZcIm9iamVjdFwiPT10eXBlb2YgciYmXCJmdW5jdGlvblwiPT10eXBlb2Ygci50aGVuKXtpZihudWxsIT09KG49dC5hbHRlcm5hdGUpJiZyVyhuLHQsbywhMCksbnVsbCE9PSh0PW9NLmN1cnJlbnQpKXtzd2l0Y2godC50YWcpe2Nhc2UgMzE6Y2FzZSAxMzpyZXR1cm4gbnVsbD09PW9JP3NnKCk6bnVsbD09PXQuYWx0ZXJuYXRlJiYwPT09bHEmJihscT0zKSx0LmZsYWdzJj0tMjU3LHQuZmxhZ3N8PTY1NTM2LHQubGFuZXM9byxyPT09b2k/dC5mbGFnc3w9MTYzODQ6KG51bGw9PT0obj10LnVwZGF0ZVF1ZXVlKT90LnVwZGF0ZVF1ZXVlPW5ldyBTZXQoW3JdKTpuLmFkZChyKSxzeihlLHIsbykpLCExO2Nhc2UgMjI6cmV0dXJuIHQuZmxhZ3N8PTY1NTM2LHI9PT1vaT90LmZsYWdzfD0xNjM4NDoobnVsbD09PShuPXQudXBkYXRlUXVldWUpPyhuPXt0cmFuc2l0aW9uczpudWxsLG1hcmtlckluc3RhbmNlczpudWxsLHJldHJ5UXVldWU6bmV3IFNldChbcl0pfSx0LnVwZGF0ZVF1ZXVlPW4pOm51bGw9PT0odD1uLnJldHJ5UXVldWUpP24ucmV0cnlRdWV1ZT1uZXcgU2V0KFtyXSk6dC5hZGQociksc3ooZSxyLG8pKSwhMX10aHJvdyBFcnJvcihsKDQzNSx0LnRhZykpfXJldHVybiBzeihlLHIsbyksc2coKSwhMX1pZihyUylyZXR1cm4gbnVsbCE9PShuPW9NLmN1cnJlbnQpPygwPT0oNjU1MzYmbi5mbGFncykmJihuLmZsYWdzfD0yNTYpLG4uZmxhZ3N8PTY1NTM2LG4ubGFuZXM9byxyIT09clAmJnJCKHJ1KGU9RXJyb3IobCg0MjIpLHtjYXVzZTpyfSksdCkpKToociE9PXJQJiZyQihydShuPUVycm9yKGwoNDIzKSx7Y2F1c2U6cn0pLHQpKSxlPWUuY3VycmVudC5hbHRlcm5hdGUsZS5mbGFnc3w9NjU1MzYsbyY9LW8sZS5sYW5lc3w9byxyPXJ1KHIsdCksbz1pbShlLnN0YXRlTm9kZSxyLG8pLG9TKGUsbyksNCE9PWxxJiYobHE9MikpLCExO3ZhciBhPUVycm9yKGwoNTIwKSx7Y2F1c2U6cn0pO2lmKGE9cnUoYSx0KSxudWxsPT09bEs/bEs9W2FdOmxLLnB1c2goYSksNCE9PWxxJiYobHE9MiksbnVsbD09PW4pcmV0dXJuITA7cj1ydShyLHQpLHQ9bjtkb3tzd2l0Y2godC50YWcpe2Nhc2UgMzpyZXR1cm4gdC5mbGFnc3w9NjU1MzYsZT1vJi1vLHQubGFuZXN8PWUsZT1pbSh0LnN0YXRlTm9kZSxyLGUpLG9TKHQsZSksITE7Y2FzZSAxOmlmKG49dC50eXBlLGE9dC5zdGF0ZU5vZGUsMD09KDEyOCZ0LmZsYWdzKSYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4uZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yfHxudWxsIT09YSYmXCJmdW5jdGlvblwiPT10eXBlb2YgYS5jb21wb25lbnREaWRDYXRjaCYmKG51bGw9PT1sMnx8IWwyLmhhcyhhKSkpKXJldHVybiB0LmZsYWdzfD02NTUzNixvJj0tbyx0LmxhbmVzfD1vLGliKG89aXYobyksZSx0LHIpLG9TKHQsbyksITF9dD10LnJldHVybn13aGlsZShudWxsIT09dCk7cmV0dXJuITF9KGUsbyxuLHQsbEIpKXtscT0xLGloKGUscnUodCxlLmN1cnJlbnQpKSxsRD1udWxsO3JldHVybn19Y2F0Y2gobil7aWYobnVsbCE9PW8pdGhyb3cgbEQ9byxuO2xxPTEsaWgoZSxydSh0LGUuY3VycmVudCkpLGxEPW51bGw7cmV0dXJufTMyNzY4Jm4uZmxhZ3M/KHJTfHwxPT09cj9lPSEwOmxGfHwwIT0oMHgyMDAwMDAwMCZsQik/ZT0hMToobEg9ZT0hMCwoMj09PXJ8fDk9PT1yfHwzPT09cnx8Nj09PXIpJiZudWxsIT09KHI9b00uY3VycmVudCkmJjEzPT09ci50YWcmJihyLmZsYWdzfD0xNjM4NCkpLHN3KG4sZSkpOnN4KG4pfWZ1bmN0aW9uIHN4KGUpe3ZhciBuPWU7ZG97aWYoMCE9KDMyNzY4Jm4uZmxhZ3MpKXJldHVybiB2b2lkIHN3KG4sbEgpO2U9bi5yZXR1cm47dmFyIHQ9ZnVuY3Rpb24oZSxuLHQpe3ZhciByPW4ucGVuZGluZ1Byb3BzO3N3aXRjaChyayhuKSxuLnRhZyl7Y2FzZSAxNjpjYXNlIDE1OmNhc2UgMDpjYXNlIDExOmNhc2UgNzpjYXNlIDg6Y2FzZSAxMjpjYXNlIDk6Y2FzZSAxNDpjYXNlIDE6cmV0dXJuIGlHKG4pLG51bGw7Y2FzZSAzOnJldHVybiB0PW4uc3RhdGVOb2RlLHI9bnVsbCxudWxsIT09ZSYmKHI9ZS5tZW1vaXplZFN0YXRlLmNhY2hlKSxuLm1lbW9pemVkU3RhdGUuY2FjaGUhPT1yJiYobi5mbGFnc3w9MjA0OCksclUocjApLFcoKSx0LnBlbmRpbmdDb250ZXh0JiYodC5jb250ZXh0PXQucGVuZGluZ0NvbnRleHQsdC5wZW5kaW5nQ29udGV4dD1udWxsKSwobnVsbD09PWV8fG51bGw9PT1lLmNoaWxkKSYmKHJSKG4pP2laKG4pOm51bGw9PT1lfHxlLm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkJiYwPT0oMjU2Jm4uZmxhZ3MpfHwobi5mbGFnc3w9MTAyNCxyRCgpKSksaUcobiksbnVsbDtjYXNlIDI2OnZhciBvPW4udHlwZSxhPW4ubWVtb2l6ZWRTdGF0ZTtyZXR1cm4gbnVsbD09PWU/KGlaKG4pLG51bGwhPT1hPyhpRyhuKSxpWChuLGEpKTooaUcobiksaVkobixvLG51bGwscix0KSkpOmE/YSE9PWUubWVtb2l6ZWRTdGF0ZT8oaVoobiksaUcobiksaVgobixhKSk6KGlHKG4pLG4uZmxhZ3MmPS0weDEwMDAwMDEpOigoZT1lLm1lbW9pemVkUHJvcHMpIT09ciYmaVoobiksaUcobiksaVkobixvLGUscix0KSksbnVsbDtjYXNlIDI3OmlmKFoobiksdD1VLmN1cnJlbnQsbz1uLnR5cGUsbnVsbCE9PWUmJm51bGwhPW4uc3RhdGVOb2RlKWUubWVtb2l6ZWRQcm9wcyE9PXImJmlaKG4pO2Vsc2V7aWYoIXIpe2lmKG51bGw9PT1uLnN0YXRlTm9kZSl0aHJvdyBFcnJvcihsKDE2NikpO3JldHVybiBpRyhuKSxudWxsfWU9SC5jdXJyZW50LHJSKG4pP3JMKG4sZSk6KG4uc3RhdGVOb2RlPWU9Y1QobyxyLHQpLGlaKG4pKX1yZXR1cm4gaUcobiksbnVsbDtjYXNlIDU6aWYoWihuKSxvPW4udHlwZSxudWxsIT09ZSYmbnVsbCE9bi5zdGF0ZU5vZGUpZS5tZW1vaXplZFByb3BzIT09ciYmaVoobik7ZWxzZXtpZighcil7aWYobnVsbD09PW4uc3RhdGVOb2RlKXRocm93IEVycm9yKGwoMTY2KSk7cmV0dXJuIGlHKG4pLG51bGx9aWYoYT1ILmN1cnJlbnQsclIobikpckwobixhKTtlbHNle3ZhciBpPWNmKFUuY3VycmVudCk7c3dpdGNoKGEpe2Nhc2UgMTphPWkuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixvKTticmVhaztjYXNlIDI6YT1pLmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUxcIixvKTticmVhaztkZWZhdWx0OnN3aXRjaChvKXtjYXNlXCJzdmdcIjphPWkuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixvKTticmVhaztjYXNlXCJtYXRoXCI6YT1pLmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUxcIixvKTticmVhaztjYXNlXCJzY3JpcHRcIjooYT1pLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLmlubmVySFRNTD1cIjxzY3JpcHQ+PFxcL3NjcmlwdD5cIixhPWEucmVtb3ZlQ2hpbGQoYS5maXJzdENoaWxkKTticmVhaztjYXNlXCJzZWxlY3RcIjphPVwic3RyaW5nXCI9PXR5cGVvZiByLmlzP2kuY3JlYXRlRWxlbWVudChcInNlbGVjdFwiLHtpczpyLmlzfSk6aS5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIpLHIubXVsdGlwbGU/YS5tdWx0aXBsZT0hMDpyLnNpemUmJihhLnNpemU9ci5zaXplKTticmVhaztkZWZhdWx0OmE9XCJzdHJpbmdcIj09dHlwZW9mIHIuaXM/aS5jcmVhdGVFbGVtZW50KG8se2lzOnIuaXN9KTppLmNyZWF0ZUVsZW1lbnQobyl9fWFbZU5dPW4sYVtlRF09cjtlOmZvcihpPW4uY2hpbGQ7bnVsbCE9PWk7KXtpZig1PT09aS50YWd8fDY9PT1pLnRhZylhLmFwcGVuZENoaWxkKGkuc3RhdGVOb2RlKTtlbHNlIGlmKDQhPT1pLnRhZyYmMjchPT1pLnRhZyYmbnVsbCE9PWkuY2hpbGQpe2kuY2hpbGQucmV0dXJuPWksaT1pLmNoaWxkO2NvbnRpbnVlfWlmKGk9PT1uKWJyZWFrO2Zvcig7bnVsbD09PWkuc2libGluZzspe2lmKG51bGw9PT1pLnJldHVybnx8aS5yZXR1cm49PT1uKWJyZWFrIGU7aT1pLnJldHVybn1pLnNpYmxpbmcucmV0dXJuPWkucmV0dXJuLGk9aS5zaWJsaW5nfXN3aXRjaChuLnN0YXRlTm9kZT1hLGNjKGEsbyxyKSxvKXtjYXNlXCJidXR0b25cIjpjYXNlXCJpbnB1dFwiOmNhc2VcInNlbGVjdFwiOmNhc2VcInRleHRhcmVhXCI6cj0hIXIuYXV0b0ZvY3VzO2JyZWFrO2Nhc2VcImltZ1wiOnI9ITA7YnJlYWs7ZGVmYXVsdDpyPSExfXImJmlaKG4pfX1yZXR1cm4gaUcobiksaVkobixuLnR5cGUsbnVsbD09PWU/bnVsbDplLm1lbW9pemVkUHJvcHMsbi5wZW5kaW5nUHJvcHMsdCksbnVsbDtjYXNlIDY6aWYoZSYmbnVsbCE9bi5zdGF0ZU5vZGUpZS5tZW1vaXplZFByb3BzIT09ciYmaVoobik7ZWxzZXtpZihcInN0cmluZ1wiIT10eXBlb2YgciYmbnVsbD09PW4uc3RhdGVOb2RlKXRocm93IEVycm9yKGwoMTY2KSk7aWYoZT1VLmN1cnJlbnQsclIobikpe2lmKGU9bi5zdGF0ZU5vZGUsdD1uLm1lbW9pemVkUHJvcHMscj1udWxsLG51bGwhPT0obz1yTykpc3dpdGNoKG8udGFnKXtjYXNlIDI3OmNhc2UgNTpyPW8ubWVtb2l6ZWRQcm9wc31lW2VOXT1uLChlPSEhKGUubm9kZVZhbHVlPT09dHx8bnVsbCE9PXImJiEwPT09ci5zdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmd8fGNpKGUubm9kZVZhbHVlLHQpKSl8fHJ6KG4sITApfWVsc2UoZT1jZihlKS5jcmVhdGVUZXh0Tm9kZShyKSlbZU5dPW4sbi5zdGF0ZU5vZGU9ZX1yZXR1cm4gaUcobiksbnVsbDtjYXNlIDMxOmlmKHQ9bi5tZW1vaXplZFN0YXRlLG51bGw9PT1lfHxudWxsIT09ZS5tZW1vaXplZFN0YXRlKXtpZihyPXJSKG4pLG51bGwhPT10KXtpZihudWxsPT09ZSl7aWYoIXIpdGhyb3cgRXJyb3IobCgzMTgpKTtpZighKGU9bnVsbCE9PShlPW4ubWVtb2l6ZWRTdGF0ZSk/ZS5kZWh5ZHJhdGVkOm51bGwpKXRocm93IEVycm9yKGwoNTU3KSk7ZVtlTl09bn1lbHNlIHJOKCksMD09KDEyOCZuLmZsYWdzKSYmKG4ubWVtb2l6ZWRTdGF0ZT1udWxsKSxuLmZsYWdzfD00O2lHKG4pLGU9ITF9ZWxzZSB0PXJEKCksbnVsbCE9PWUmJm51bGwhPT1lLm1lbW9pemVkU3RhdGUmJihlLm1lbW9pemVkU3RhdGUuaHlkcmF0aW9uRXJyb3JzPXQpLGU9ITA7aWYoIWUpe2lmKDI1NiZuLmZsYWdzKXJldHVybiBvcShuKSxuO3JldHVybiBvcShuKSxudWxsfWlmKDAhPSgxMjgmbi5mbGFncykpdGhyb3cgRXJyb3IobCg1NTgpKX1yZXR1cm4gaUcobiksbnVsbDtjYXNlIDEzOmlmKHI9bi5tZW1vaXplZFN0YXRlLG51bGw9PT1lfHxudWxsIT09ZS5tZW1vaXplZFN0YXRlJiZudWxsIT09ZS5tZW1vaXplZFN0YXRlLmRlaHlkcmF0ZWQpe2lmKG89clIobiksbnVsbCE9PXImJm51bGwhPT1yLmRlaHlkcmF0ZWQpe2lmKG51bGw9PT1lKXtpZighbyl0aHJvdyBFcnJvcihsKDMxOCkpO2lmKCEobz1udWxsIT09KG89bi5tZW1vaXplZFN0YXRlKT9vLmRlaHlkcmF0ZWQ6bnVsbCkpdGhyb3cgRXJyb3IobCgzMTcpKTtvW2VOXT1ufWVsc2Ugck4oKSwwPT0oMTI4Jm4uZmxhZ3MpJiYobi5tZW1vaXplZFN0YXRlPW51bGwpLG4uZmxhZ3N8PTQ7aUcobiksbz0hMX1lbHNlIG89ckQoKSxudWxsIT09ZSYmbnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSYmKGUubWVtb2l6ZWRTdGF0ZS5oeWRyYXRpb25FcnJvcnM9byksbz0hMDtpZighbyl7aWYoMjU2Jm4uZmxhZ3MpcmV0dXJuIG9xKG4pLG47cmV0dXJuIG9xKG4pLG51bGx9fWlmKG9xKG4pLDAhPSgxMjgmbi5mbGFncykpcmV0dXJuIG4ubGFuZXM9dCxuO3JldHVybiB0PW51bGwhPT1yLGU9bnVsbCE9PWUmJm51bGwhPT1lLm1lbW9pemVkU3RhdGUsdCYmKHI9bi5jaGlsZCxvPW51bGwsbnVsbCE9PXIuYWx0ZXJuYXRlJiZudWxsIT09ci5hbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZSYmbnVsbCE9PXIuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sJiYobz1yLmFsdGVybmF0ZS5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKSxhPW51bGwsbnVsbCE9PXIubWVtb2l6ZWRTdGF0ZSYmbnVsbCE9PXIubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wmJihhPXIubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wucG9vbCksYSE9PW8mJihyLmZsYWdzfD0yMDQ4KSksdCE9PWUmJnQmJihuLmNoaWxkLmZsYWdzfD04MTkyKSxpSyhuLG4udXBkYXRlUXVldWUpLGlHKG4pLG51bGw7Y2FzZSA0OnJldHVybiBXKCksbnVsbD09PWUmJnM2KG4uc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLGlHKG4pLG51bGw7Y2FzZSAxMDpyZXR1cm4gclUobi50eXBlKSxpRyhuKSxudWxsO2Nhc2UgMTk6aWYoTShvVyksbnVsbD09PShyPW4ubWVtb2l6ZWRTdGF0ZSkpcmV0dXJuIGlHKG4pLG51bGw7aWYobz0wIT0oMTI4Jm4uZmxhZ3MpLG51bGw9PT0oYT1yLnJlbmRlcmluZykpaWYobylpUShyLCExKTtlbHNle2lmKDAhPT1scXx8bnVsbCE9PWUmJjAhPSgxMjgmZS5mbGFncykpZm9yKGU9bi5jaGlsZDtudWxsIT09ZTspe2lmKG51bGwhPT0oYT1vJChlKSkpe2ZvcihuLmZsYWdzfD0xMjgsaVEociwhMSksbi51cGRhdGVRdWV1ZT1lPWEudXBkYXRlUXVldWUsaUsobixlKSxuLnN1YnRyZWVGbGFncz0wLGU9dCx0PW4uY2hpbGQ7bnVsbCE9PXQ7KXJyKHQsZSksdD10LnNpYmxpbmc7cmV0dXJuIEkob1csMSZvVy5jdXJyZW50fDIpLHJTJiZyeChuLHIudHJlZUZvcmtDb3VudCksbi5jaGlsZH1lPWUuc2libGluZ31udWxsIT09ci50YWlsJiZlcigpPmwwJiYobi5mbGFnc3w9MTI4LG89ITAsaVEociwhMSksbi5sYW5lcz00MTk0MzA0KX1lbHNle2lmKCFvKWlmKG51bGwhPT0oZT1vJChhKSkpe2lmKG4uZmxhZ3N8PTEyOCxvPSEwLG4udXBkYXRlUXVldWU9ZT1lLnVwZGF0ZVF1ZXVlLGlLKG4sZSksaVEociwhMCksbnVsbD09PXIudGFpbCYmXCJoaWRkZW5cIj09PXIudGFpbE1vZGUmJiFhLmFsdGVybmF0ZSYmIXJTKXJldHVybiBpRyhuKSxudWxsfWVsc2UgMiplcigpLXIucmVuZGVyaW5nU3RhcnRUaW1lPmwwJiYweDIwMDAwMDAwIT09dCYmKG4uZmxhZ3N8PTEyOCxvPSEwLGlRKHIsITEpLG4ubGFuZXM9NDE5NDMwNCk7ci5pc0JhY2t3YXJkcz8oYS5zaWJsaW5nPW4uY2hpbGQsbi5jaGlsZD1hKToobnVsbCE9PShlPXIubGFzdCk/ZS5zaWJsaW5nPWE6bi5jaGlsZD1hLHIubGFzdD1hKX1pZihudWxsIT09ci50YWlsKXJldHVybiBlPXIudGFpbCxyLnJlbmRlcmluZz1lLHIudGFpbD1lLnNpYmxpbmcsci5yZW5kZXJpbmdTdGFydFRpbWU9ZXIoKSxlLnNpYmxpbmc9bnVsbCx0PW9XLmN1cnJlbnQsSShvVyxvPzEmdHwyOjEmdCksclMmJnJ4KG4sci50cmVlRm9ya0NvdW50KSxlO3JldHVybiBpRyhuKSxudWxsO2Nhc2UgMjI6Y2FzZSAyMzpyZXR1cm4gb3Eobiksb0IoKSxyPW51bGwhPT1uLm1lbW9pemVkU3RhdGUsbnVsbCE9PWU/bnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSE9PXImJihuLmZsYWdzfD04MTkyKTpyJiYobi5mbGFnc3w9ODE5Mikscj8wIT0oMHgyMDAwMDAwMCZ0KSYmMD09KDEyOCZuLmZsYWdzKSYmKGlHKG4pLDYmbi5zdWJ0cmVlRmxhZ3MmJihuLmZsYWdzfD04MTkyKSk6aUcobiksbnVsbCE9PSh0PW4udXBkYXRlUXVldWUpJiZpSyhuLHQucmV0cnlRdWV1ZSksdD1udWxsLG51bGwhPT1lJiZudWxsIT09ZS5tZW1vaXplZFN0YXRlJiZudWxsIT09ZS5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCYmKHQ9ZS5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKSxyPW51bGwsbnVsbCE9PW4ubWVtb2l6ZWRTdGF0ZSYmbnVsbCE9PW4ubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wmJihyPW4ubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wucG9vbCksciE9PXQmJihuLmZsYWdzfD0yMDQ4KSxudWxsIT09ZSYmTShyNyksbnVsbDtjYXNlIDI0OnJldHVybiB0PW51bGwsbnVsbCE9PWUmJih0PWUubWVtb2l6ZWRTdGF0ZS5jYWNoZSksbi5tZW1vaXplZFN0YXRlLmNhY2hlIT09dCYmKG4uZmxhZ3N8PTIwNDgpLHJVKHIwKSxpRyhuKSxudWxsO2Nhc2UgMjU6Y2FzZSAzMDpyZXR1cm4gbnVsbH10aHJvdyBFcnJvcihsKDE1NixuLnRhZykpfShuLmFsdGVybmF0ZSxuLGxWKTtpZihudWxsIT09dCl7bEQ9dDtyZXR1cm59aWYobnVsbCE9PShuPW4uc2libGluZykpe2xEPW47cmV0dXJufWxEPW49ZX13aGlsZShudWxsIT09bik7MD09PWxxJiYobHE9NSl9ZnVuY3Rpb24gc3coZSxuKXtkb3t2YXIgdD1mdW5jdGlvbihlLG4pe3N3aXRjaChyayhuKSxuLnRhZyl7Y2FzZSAxOnJldHVybiA2NTUzNiYoZT1uLmZsYWdzKT8obi5mbGFncz0tNjU1MzcmZXwxMjgsbik6bnVsbDtjYXNlIDM6cmV0dXJuIHJVKHIwKSxXKCksMCE9KDY1NTM2JihlPW4uZmxhZ3MpKSYmMD09KDEyOCZlKT8obi5mbGFncz0tNjU1MzcmZXwxMjgsbik6bnVsbDtjYXNlIDI2OmNhc2UgMjc6Y2FzZSA1OnJldHVybiBaKG4pLG51bGw7Y2FzZSAzMTppZihudWxsIT09bi5tZW1vaXplZFN0YXRlKXtpZihvcShuKSxudWxsPT09bi5hbHRlcm5hdGUpdGhyb3cgRXJyb3IobCgzNDApKTtyTigpfXJldHVybiA2NTUzNiYoZT1uLmZsYWdzKT8obi5mbGFncz0tNjU1MzcmZXwxMjgsbik6bnVsbDtjYXNlIDEzOmlmKG9xKG4pLG51bGwhPT0oZT1uLm1lbW9pemVkU3RhdGUpJiZudWxsIT09ZS5kZWh5ZHJhdGVkKXtpZihudWxsPT09bi5hbHRlcm5hdGUpdGhyb3cgRXJyb3IobCgzNDApKTtyTigpfXJldHVybiA2NTUzNiYoZT1uLmZsYWdzKT8obi5mbGFncz0tNjU1MzcmZXwxMjgsbik6bnVsbDtjYXNlIDE5OnJldHVybiBNKG9XKSxudWxsO2Nhc2UgNDpyZXR1cm4gVygpLG51bGw7Y2FzZSAxMDpyZXR1cm4gclUobi50eXBlKSxudWxsO2Nhc2UgMjI6Y2FzZSAyMzpyZXR1cm4gb3Eobiksb0IoKSxudWxsIT09ZSYmTShyNyksNjU1MzYmKGU9bi5mbGFncyk/KG4uZmxhZ3M9LTY1NTM3JmV8MTI4LG4pOm51bGw7Y2FzZSAyNDpyZXR1cm4gclUocjApLG51bGw7ZGVmYXVsdDpyZXR1cm4gbnVsbH19KGUuYWx0ZXJuYXRlLGUpO2lmKG51bGwhPT10KXt0LmZsYWdzJj0zMjc2NyxsRD10O3JldHVybn1pZihudWxsIT09KHQ9ZS5yZXR1cm4pJiYodC5mbGFnc3w9MzI3NjgsdC5zdWJ0cmVlRmxhZ3M9MCx0LmRlbGV0aW9ucz1udWxsKSwhbiYmbnVsbCE9PShlPWUuc2libGluZykpe2xEPWU7cmV0dXJufWxEPWU9dH13aGlsZShudWxsIT09ZSk7bHE9NixsRD1udWxsfWZ1bmN0aW9uIHNqKGUsbix0LHIsbyxhLGkscyxjKXtlLmNhbmNlbFBlbmRpbmdDb21taXQ9bnVsbDtkbyBzUygpO3doaWxlKDAhPT1sNCk7aWYoMCE9KDYmbFIpKXRocm93IEVycm9yKGwoMzI3KSk7aWYobnVsbCE9PW4pe2lmKG49PT1lLmN1cnJlbnQpdGhyb3cgRXJyb3IobCgxNzcpKTtpZighZnVuY3Rpb24oZSxuLHQscixvLGEpe3ZhciBpPWUucGVuZGluZ0xhbmVzO2UucGVuZGluZ0xhbmVzPXQsZS5zdXNwZW5kZWRMYW5lcz0wLGUucGluZ2VkTGFuZXM9MCxlLndhcm1MYW5lcz0wLGUuZXhwaXJlZExhbmVzJj10LGUuZW50YW5nbGVkTGFuZXMmPXQsZS5lcnJvclJlY292ZXJ5RGlzYWJsZWRMYW5lcyY9dCxlLnNoZWxsU3VzcGVuZENvdW50ZXI9MDt2YXIgbD1lLmVudGFuZ2xlbWVudHMscz1lLmV4cGlyYXRpb25UaW1lcyxjPWUuaGlkZGVuVXBkYXRlcztmb3IodD1pJn50OzA8dDspe3ZhciB1PTMxLWVnKHQpLGQ9MTw8dTtsW3VdPTAsc1t1XT0tMTt2YXIgZj1jW3VdO2lmKG51bGwhPT1mKWZvcihjW3VdPW51bGwsdT0wO3U8Zi5sZW5ndGg7dSsrKXt2YXIgcD1mW3VdO251bGwhPT1wJiYocC5sYW5lJj0tMHgyMDAwMDAwMSl9dCY9fmR9MCE9PXImJmVTKGUsciwwKSwwIT09YSYmMD09PW8mJjAhPT1lLnRhZyYmKGUuc3VzcGVuZGVkTGFuZXN8PWEmfihpJn5uKSl9KGUsdCxhPW4ubGFuZXN8bi5jaGlsZExhbmVzfHQxLGkscyxjKSxlPT09bE4mJihsRD1sTj1udWxsLGxCPTApLGwzPW4sbDU9ZSxsNj10LGw5PWEsbDg9byxsNz1yLDAhPSgxMDI1NiZuLnN1YnRyZWVGbGFncyl8fDAhPSgxMDI1NiZuLmZsYWdzKT8oZS5jYWxsYmFja05vZGU9bnVsbCxlLmNhbGxiYWNrUHJpb3JpdHk9MCxKKGVsLGZ1bmN0aW9uKCl7cmV0dXJuIHNFKCEwKSxudWxsfSkpOihlLmNhbGxiYWNrTm9kZT1udWxsLGUuY2FsbGJhY2tQcmlvcml0eT0wKSxyPTAhPSgxMzg3OCZuLmZsYWdzKSwwIT0oMTM4Nzgmbi5zdWJ0cmVlRmxhZ3MpfHxyKXtyPUwuVCxMLlQ9bnVsbCxvPVQucCxULnA9MixpPWxSLGxSfD00O3RyeXshZnVuY3Rpb24oZSxuKXtpZihlPWUuY29udGFpbmVySW5mbyxjdT11cix0UChlPXRfKGUpKSl7aWYoXCJzZWxlY3Rpb25TdGFydFwiaW4gZSl2YXIgdD17c3RhcnQ6ZS5zZWxlY3Rpb25TdGFydCxlbmQ6ZS5zZWxlY3Rpb25FbmR9O2Vsc2UgZTp7dmFyIHI9KHQ9KHQ9ZS5vd25lckRvY3VtZW50KSYmdC5kZWZhdWx0Vmlld3x8d2luZG93KS5nZXRTZWxlY3Rpb24mJnQuZ2V0U2VsZWN0aW9uKCk7aWYociYmMCE9PXIucmFuZ2VDb3VudCl7dD1yLmFuY2hvck5vZGU7dmFyIG8sYT1yLmFuY2hvck9mZnNldCxpPXIuZm9jdXNOb2RlO3I9ci5mb2N1c09mZnNldDt0cnl7dC5ub2RlVHlwZSxpLm5vZGVUeXBlfWNhdGNoKGUpe3Q9bnVsbDticmVhayBlfXZhciBzPTAsYz0tMSx1PS0xLGQ9MCxmPTAscD1lLGg9bnVsbDtuOmZvcig7Oyl7Zm9yKDtwIT09dHx8MCE9PWEmJjMhPT1wLm5vZGVUeXBlfHwoYz1zK2EpLHAhPT1pfHwwIT09ciYmMyE9PXAubm9kZVR5cGV8fCh1PXMrciksMz09PXAubm9kZVR5cGUmJihzKz1wLm5vZGVWYWx1ZS5sZW5ndGgpLG51bGwhPT0obz1wLmZpcnN0Q2hpbGQpOyloPXAscD1vO2Zvcig7Oyl7aWYocD09PWUpYnJlYWsgbjtpZihoPT09dCYmKytkPT09YSYmKGM9cyksaD09PWkmJisrZj09PXImJih1PXMpLG51bGwhPT0obz1wLm5leHRTaWJsaW5nKSlicmVhaztoPShwPWgpLnBhcmVudE5vZGV9cD1vfXQ9LTE9PT1jfHwtMT09PXU/bnVsbDp7c3RhcnQ6YyxlbmQ6dX19ZWxzZSB0PW51bGx9dD10fHx7c3RhcnQ6MCxlbmQ6MH19ZWxzZSB0PW51bGw7Zm9yKGNkPXtmb2N1c2VkRWxlbTplLHNlbGVjdGlvblJhbmdlOnR9LHVyPSExLGxpPW47bnVsbCE9PWxpOylpZihlPShuPWxpKS5jaGlsZCwwIT0oMTAyNCZuLnN1YnRyZWVGbGFncykmJm51bGwhPT1lKWUucmV0dXJuPW4sbGk9ZTtlbHNlIGZvcig7bnVsbCE9PWxpOyl7c3dpdGNoKGk9KG49bGkpLmFsdGVybmF0ZSxlPW4uZmxhZ3Msbi50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6Y2FzZSA1OmNhc2UgMjY6Y2FzZSAyNzpjYXNlIDY6Y2FzZSA0OmNhc2UgMTc6YnJlYWs7Y2FzZSAxOmlmKDAhPSgxMDI0JmUpJiZudWxsIT09aSl7ZT12b2lkIDAsdD1uLGE9aS5tZW1vaXplZFByb3BzLGk9aS5tZW1vaXplZFN0YXRlLHI9dC5zdGF0ZU5vZGU7dHJ5e3ZhciBnPWljKHQudHlwZSxhKTtlPXIuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoZyxpKSxyLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlPWV9Y2F0Y2goZSl7c1AodCx0LnJldHVybixlKX19YnJlYWs7Y2FzZSAzOmlmKDAhPSgxMDI0JmUpKXtpZig5PT09KHQ9KGU9bi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbykubm9kZVR5cGUpKWNPKGUpO2Vsc2UgaWYoMT09PXQpc3dpdGNoKGUubm9kZU5hbWUpe2Nhc2VcIkhFQURcIjpjYXNlXCJIVE1MXCI6Y2FzZVwiQk9EWVwiOmNPKGUpO2JyZWFrO2RlZmF1bHQ6ZS50ZXh0Q29udGVudD1cIlwifX1icmVhaztkZWZhdWx0OmlmKDAhPSgxMDI0JmUpKXRocm93IEVycm9yKGwoMTYzKSl9aWYobnVsbCE9PShlPW4uc2libGluZykpe2UucmV0dXJuPW4ucmV0dXJuLGxpPWU7YnJlYWt9bGk9bi5yZXR1cm59fShlLG4sdCl9ZmluYWxseXtsUj1pLFQucD1vLEwuVD1yfX1sND0xLHNrKCksc0EoKSxzTygpfX1mdW5jdGlvbiBzaygpe2lmKDE9PT1sNCl7bDQ9MDt2YXIgZT1sNSxuPWwzLHQ9MCE9KDEzODc4Jm4uZmxhZ3MpO2lmKDAhPSgxMzg3OCZuLnN1YnRyZWVGbGFncyl8fHQpe3Q9TC5ULEwuVD1udWxsO3ZhciByPVQucDtULnA9Mjt2YXIgbz1sUjtsUnw9NDt0cnl7bHYobixlKTt2YXIgYT1jZCxpPXRfKGUuY29udGFpbmVySW5mbyksbD1hLmZvY3VzZWRFbGVtLHM9YS5zZWxlY3Rpb25SYW5nZTtpZihpIT09bCYmbCYmbC5vd25lckRvY3VtZW50JiZmdW5jdGlvbiBlKG4sdCl7cmV0dXJuISFuJiYhIXQmJihuPT09dHx8KCFufHwzIT09bi5ub2RlVHlwZSkmJih0JiYzPT09dC5ub2RlVHlwZT9lKG4sdC5wYXJlbnROb2RlKTpcImNvbnRhaW5zXCJpbiBuP24uY29udGFpbnModCk6ISFuLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiYhISgxNiZuLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHQpKSkpfShsLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGwpKXtpZihudWxsIT09cyYmdFAobCkpe3ZhciBjPXMuc3RhcnQsdT1zLmVuZDtpZih2b2lkIDA9PT11JiYodT1jKSxcInNlbGVjdGlvblN0YXJ0XCJpbiBsKWwuc2VsZWN0aW9uU3RhcnQ9YyxsLnNlbGVjdGlvbkVuZD1NYXRoLm1pbih1LGwudmFsdWUubGVuZ3RoKTtlbHNle3ZhciBkPWwub3duZXJEb2N1bWVudHx8ZG9jdW1lbnQsZj1kJiZkLmRlZmF1bHRWaWV3fHx3aW5kb3c7aWYoZi5nZXRTZWxlY3Rpb24pe3ZhciBwPWYuZ2V0U2VsZWN0aW9uKCksaD1sLnRleHRDb250ZW50Lmxlbmd0aCxnPU1hdGgubWluKHMuc3RhcnQsaCksbT12b2lkIDA9PT1zLmVuZD9nOk1hdGgubWluKHMuZW5kLGgpOyFwLmV4dGVuZCYmZz5tJiYoaT1tLG09ZyxnPWkpO3ZhciB2PXRFKGwsZyksYj10RShsLG0pO2lmKHYmJmImJigxIT09cC5yYW5nZUNvdW50fHxwLmFuY2hvck5vZGUhPT12Lm5vZGV8fHAuYW5jaG9yT2Zmc2V0IT09di5vZmZzZXR8fHAuZm9jdXNOb2RlIT09Yi5ub2RlfHxwLmZvY3VzT2Zmc2V0IT09Yi5vZmZzZXQpKXt2YXIgeT1kLmNyZWF0ZVJhbmdlKCk7eS5zZXRTdGFydCh2Lm5vZGUsdi5vZmZzZXQpLHAucmVtb3ZlQWxsUmFuZ2VzKCksZz5tPyhwLmFkZFJhbmdlKHkpLHAuZXh0ZW5kKGIubm9kZSxiLm9mZnNldCkpOih5LnNldEVuZChiLm5vZGUsYi5vZmZzZXQpLHAuYWRkUmFuZ2UoeSkpfX19fWZvcihkPVtdLHA9bDtwPXAucGFyZW50Tm9kZTspMT09PXAubm9kZVR5cGUmJmQucHVzaCh7ZWxlbWVudDpwLGxlZnQ6cC5zY3JvbGxMZWZ0LHRvcDpwLnNjcm9sbFRvcH0pO2ZvcihcImZ1bmN0aW9uXCI9PXR5cGVvZiBsLmZvY3VzJiZsLmZvY3VzKCksbD0wO2w8ZC5sZW5ndGg7bCsrKXt2YXIgeD1kW2xdO3guZWxlbWVudC5zY3JvbGxMZWZ0PXgubGVmdCx4LmVsZW1lbnQuc2Nyb2xsVG9wPXgudG9wfX11cj0hIWN1LGNkPWN1PW51bGx9ZmluYWxseXtsUj1vLFQucD1yLEwuVD10fX1lLmN1cnJlbnQ9bixsND0yfX1mdW5jdGlvbiBzQSgpe2lmKDI9PT1sNCl7bDQ9MDt2YXIgZT1sNSxuPWwzLHQ9MCE9KDg3NzImbi5mbGFncyk7aWYoMCE9KDg3NzImbi5zdWJ0cmVlRmxhZ3MpfHx0KXt0PUwuVCxMLlQ9bnVsbDt2YXIgcj1ULnA7VC5wPTI7dmFyIG89bFI7bFJ8PTQ7dHJ5e2xsKGUsbi5hbHRlcm5hdGUsbil9ZmluYWxseXtsUj1vLFQucD1yLEwuVD10fX1sND0zfX1mdW5jdGlvbiBzTygpe2lmKDQ9PT1sNHx8Mz09PWw0KXtsND0wLGV0KCk7dmFyIGU9bDUsbj1sMyx0PWw2LHI9bDc7MCE9KDEwMjU2Jm4uc3VidHJlZUZsYWdzKXx8MCE9KDEwMjU2Jm4uZmxhZ3MpP2w0PTU6KGw0PTAsbDM9bDU9bnVsbCxzQyhlLGUucGVuZGluZ0xhbmVzKSk7dmFyIG89ZS5wZW5kaW5nTGFuZXM7aWYoMD09PW8mJihsMj1udWxsKSxleih0KSxuPW4uc3RhdGVOb2RlLGVwJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlcC5vbkNvbW1pdEZpYmVyUm9vdCl0cnl7ZXAub25Db21taXRGaWJlclJvb3QoZWYsbix2b2lkIDAsMTI4PT0oMTI4Jm4uY3VycmVudC5mbGFncykpfWNhdGNoKGUpe31pZihudWxsIT09cil7bj1MLlQsbz1ULnAsVC5wPTIsTC5UPW51bGw7dHJ5e2Zvcih2YXIgYT1lLm9uUmVjb3ZlcmFibGVFcnJvcixpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBsPXJbaV07YShsLnZhbHVlLHtjb21wb25lbnRTdGFjazpsLnN0YWNrfSl9fWZpbmFsbHl7TC5UPW4sVC5wPW99fTAhPSgzJmw2KSYmc1MoKSxzVShlKSxvPWUucGVuZGluZ0xhbmVzLDAhPSg0MTk0MDkwJnQpJiYwIT0oNDImbyk/ZT09PXNuP3NlKys6KHNlPTAsc249ZSk6c2U9MCxzVigwLCExKX19ZnVuY3Rpb24gc0MoZSxuKXswPT0oZS5wb29sZWRDYWNoZUxhbmVzJj1uKSYmbnVsbCE9KG49ZS5wb29sZWRDYWNoZSkmJihlLnBvb2xlZENhY2hlPW51bGwscjIobikpfWZ1bmN0aW9uIHNTKGUpe3JldHVybiBzaygpLHNBKCksc08oKSxzRShlKX1mdW5jdGlvbiBzRSgpe2lmKDUhPT1sNClyZXR1cm4hMTt2YXIgZT1sNSxuPWw5O2w5PTA7dmFyIHQ9ZXoobDYpLHI9TC5ULG89VC5wO3RyeXtULnA9MzI+dD8zMjp0LEwuVD1udWxsLHQ9bDgsbDg9bnVsbDt2YXIgYT1sNSxpPWw2O2lmKGw0PTAsbDM9bDU9bnVsbCxsNj0wLDAhPSg2JmxSKSl0aHJvdyBFcnJvcihsKDMzMSkpO3ZhciBzPWxSO2lmKGxSfD00LGxQKGEuY3VycmVudCksbGsoYSxhLmN1cnJlbnQsaSx0KSxsUj1zLHNWKDAsITEpLGVwJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlcC5vblBvc3RDb21taXRGaWJlclJvb3QpdHJ5e2VwLm9uUG9zdENvbW1pdEZpYmVyUm9vdChlZixhKX1jYXRjaChlKXt9cmV0dXJuITB9ZmluYWxseXtULnA9byxMLlQ9cixzQyhlLG4pfX1mdW5jdGlvbiBzXyhlLG4sdCl7bj1ydSh0LG4pLG49aW0oZS5zdGF0ZU5vZGUsbiwyKSxudWxsIT09KGU9b08oZSxuLDIpKSYmKGVDKGUsMiksc1UoZSkpfWZ1bmN0aW9uIHNQKGUsbix0KXtpZigzPT09ZS50YWcpc18oZSxlLHQpO2Vsc2UgZm9yKDtudWxsIT09bjspe2lmKDM9PT1uLnRhZyl7c18obixlLHQpO2JyZWFrfWlmKDE9PT1uLnRhZyl7dmFyIHI9bi5zdGF0ZU5vZGU7aWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygbi50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcnx8XCJmdW5jdGlvblwiPT10eXBlb2Ygci5jb21wb25lbnREaWRDYXRjaCYmKG51bGw9PT1sMnx8IWwyLmhhcyhyKSkpe2U9cnUodCxlKSxudWxsIT09KHI9b08obix0PWl2KDIpLDIpKSYmKGliKHQscixuLGUpLGVDKHIsMiksc1UocikpO2JyZWFrfX1uPW4ucmV0dXJufX1mdW5jdGlvbiBzeihlLG4sdCl7dmFyIHI9ZS5waW5nQ2FjaGU7aWYobnVsbD09PXIpe3I9ZS5waW5nQ2FjaGU9bmV3IGxUO3ZhciBvPW5ldyBTZXQ7ci5zZXQobixvKX1lbHNlIHZvaWQgMD09PShvPXIuZ2V0KG4pKSYmKG89bmV3IFNldCxyLnNldChuLG8pKTtvLmhhcyh0KXx8KGxVPSEwLG8uYWRkKHQpLGU9c0wuYmluZChudWxsLGUsbix0KSxuLnRoZW4oZSxlKSl9ZnVuY3Rpb24gc0woZSxuLHQpe3ZhciByPWUucGluZ0NhY2hlO251bGwhPT1yJiZyLmRlbGV0ZShuKSxlLnBpbmdlZExhbmVzfD1lLnN1c3BlbmRlZExhbmVzJnQsZS53YXJtTGFuZXMmPX50LGxOPT09ZSYmKGxCJnQpPT09dCYmKDQ9PT1scXx8Mz09PWxxJiYoMHgzYzAwMDAwJmxCKT09PWxCJiYzMDA+ZXIoKS1sSj8wPT0oMiZsUikmJnN1KGUsMCk6bFp8PXQsbFg9PT1sQiYmKGxYPTApKSxzVShlKX1mdW5jdGlvbiBzVChlLG4pezA9PT1uJiYobj1lQSgpKSxudWxsIT09KGU9dDMoZSxuKSkmJihlQyhlLG4pLHNVKGUpKX1mdW5jdGlvbiBzUihlKXt2YXIgbj1lLm1lbW9pemVkU3RhdGUsdD0wO251bGwhPT1uJiYodD1uLnJldHJ5TGFuZSksc1QoZSx0KX1mdW5jdGlvbiBzTihlLG4pe3ZhciB0PTA7c3dpdGNoKGUudGFnKXtjYXNlIDMxOmNhc2UgMTM6dmFyIHI9ZS5zdGF0ZU5vZGUsbz1lLm1lbW9pemVkU3RhdGU7bnVsbCE9PW8mJih0PW8ucmV0cnlMYW5lKTticmVhaztjYXNlIDE5OnI9ZS5zdGF0ZU5vZGU7YnJlYWs7Y2FzZSAyMjpyPWUuc3RhdGVOb2RlLl9yZXRyeUNhY2hlO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IobCgzMTQpKX1udWxsIT09ciYmci5kZWxldGUobiksc1QoZSx0KX12YXIgc0Q9bnVsbCxzQj1udWxsLHNNPSExLHNJPSExLHNIPSExLHNGPTA7ZnVuY3Rpb24gc1UoZSl7ZSE9PXNCJiZudWxsPT09ZS5uZXh0JiYobnVsbD09PXNCP3NEPXNCPWU6c0I9c0IubmV4dD1lKSxzST0hMCxzTXx8KHNNPSEwLGN4KGZ1bmN0aW9uKCl7MCE9KDYmbFIpP0ooZWEsc3EpOnNXKCl9KSl9ZnVuY3Rpb24gc1YoZSxuKXtpZighc0gmJnNJKXtzSD0hMDtkbyBmb3IodmFyIHQ9ITEscj1zRDtudWxsIT09cjspe2lmKCFuKWlmKDAhPT1lKXt2YXIgbz1yLnBlbmRpbmdMYW5lcztpZigwPT09byl2YXIgYT0wO2Vsc2V7dmFyIGk9ci5zdXNwZW5kZWRMYW5lcyxsPXIucGluZ2VkTGFuZXM7YT0weGMwMDAwOTUmKGE9KDE8PDMxLWVnKDQyfGUpKzEpLTEmKG8mfihpJn5sKSkpPzB4YzAwMDA5NSZhfDE6YT8yfGE6MH0wIT09YSYmKHQ9ITAsc1kocixhKSl9ZWxzZSBhPWxCLDA9PSgzJihhPWV3KHIscj09PWxOP2E6MCxudWxsIT09ci5jYW5jZWxQZW5kaW5nQ29tbWl0fHwtMSE9PXIudGltZW91dEhhbmRsZSkpKXx8ZWoocixhKXx8KHQ9ITAsc1kocixhKSk7cj1yLm5leHR9d2hpbGUodCk7c0g9ITF9fWZ1bmN0aW9uIHNxKCl7c1coKX1mdW5jdGlvbiBzVygpe3NJPXNNPSExO3ZhciBlLG49MDswPT09c0Z8fCgoZT13aW5kb3cuZXZlbnQpJiZcInBvcHN0YXRlXCI9PT1lLnR5cGU/ZT09PWNtfHwoY209ZSwwKTooY209bnVsbCwxKSl8fChuPXNGKTtmb3IodmFyIHQ9ZXIoKSxyPW51bGwsbz1zRDtudWxsIT09bzspe3ZhciBhPW8ubmV4dCxpPXMkKG8sdCk7MD09PWk/KG8ubmV4dD1udWxsLG51bGw9PT1yP3NEPWE6ci5uZXh0PWEsbnVsbD09PWEmJihzQj1yKSk6KHI9bywoMCE9PW58fDAhPSgzJmkpKSYmKHNJPSEwKSksbz1hfTAhPT1sNCYmNSE9PWw0fHxzVihuLCExKSwwIT09c0YmJihzRj0wKX1mdW5jdGlvbiBzJChlLG4pe2Zvcih2YXIgdD1lLnN1c3BlbmRlZExhbmVzLHI9ZS5waW5nZWRMYW5lcyxvPWUuZXhwaXJhdGlvblRpbWVzLGE9LTB4M2MwMDAwMSZlLnBlbmRpbmdMYW5lczswPGE7KXt2YXIgaT0zMS1lZyhhKSxsPTE8PGkscz1vW2ldOy0xPT09cz8oMD09KGwmdCl8fDAhPShsJnIpKSYmKG9baV09ZnVuY3Rpb24oZSxuKXtzd2l0Y2goZSl7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA4OmNhc2UgNjQ6cmV0dXJuIG4rMjUwO2Nhc2UgMTY6Y2FzZSAzMjpjYXNlIDEyODpjYXNlIDI1NjpjYXNlIDUxMjpjYXNlIDEwMjQ6Y2FzZSAyMDQ4OmNhc2UgNDA5NjpjYXNlIDgxOTI6Y2FzZSAxNjM4NDpjYXNlIDMyNzY4OmNhc2UgNjU1MzY6Y2FzZSAxMzEwNzI6Y2FzZSAyNjIxNDQ6Y2FzZSA1MjQyODg6Y2FzZSAxMDQ4NTc2OmNhc2UgMjA5NzE1MjpyZXR1cm4gbis1ZTM7ZGVmYXVsdDpyZXR1cm4gLTF9fShsLG4pKTpzPD1uJiYoZS5leHBpcmVkTGFuZXN8PWwpLGEmPX5sfWlmKG49bE4sdD1sQix0PWV3KGUsZT09PW4/dDowLG51bGwhPT1lLmNhbmNlbFBlbmRpbmdDb21taXR8fC0xIT09ZS50aW1lb3V0SGFuZGxlKSxyPWUuY2FsbGJhY2tOb2RlLDA9PT10fHxlPT09biYmKDI9PT1sTXx8OT09PWxNKXx8bnVsbCE9PWUuY2FuY2VsUGVuZGluZ0NvbW1pdClyZXR1cm4gbnVsbCE9PXImJm51bGwhPT1yJiZlZShyKSxlLmNhbGxiYWNrTm9kZT1udWxsLGUuY2FsbGJhY2tQcmlvcml0eT0wO2lmKDA9PSgzJnQpfHxlaihlLHQpKXtpZigobj10Ji10KT09PWUuY2FsbGJhY2tQcmlvcml0eSlyZXR1cm4gbjtzd2l0Y2gobnVsbCE9PXImJmVlKHIpLGV6KHQpKXtjYXNlIDI6Y2FzZSA4OnQ9ZWk7YnJlYWs7Y2FzZSAzMjpkZWZhdWx0OnQ9ZWw7YnJlYWs7Y2FzZSAweDEwMDAwMDAwOnQ9ZWN9cmV0dXJuIHQ9Sih0LHI9c1ouYmluZChudWxsLGUpKSxlLmNhbGxiYWNrUHJpb3JpdHk9bixlLmNhbGxiYWNrTm9kZT10LG59cmV0dXJuIG51bGwhPT1yJiZudWxsIT09ciYmZWUociksZS5jYWxsYmFja1ByaW9yaXR5PTIsZS5jYWxsYmFja05vZGU9bnVsbCwyfWZ1bmN0aW9uIHNaKGUsbil7aWYoMCE9PWw0JiY1IT09bDQpcmV0dXJuIGUuY2FsbGJhY2tOb2RlPW51bGwsZS5jYWxsYmFja1ByaW9yaXR5PTAsbnVsbDt2YXIgdD1lLmNhbGxiYWNrTm9kZTtpZihzUyghMCkmJmUuY2FsbGJhY2tOb2RlIT09dClyZXR1cm4gbnVsbDt2YXIgcj1sQjtyZXR1cm4gMD09PShyPWV3KGUsZT09PWxOP3I6MCxudWxsIT09ZS5jYW5jZWxQZW5kaW5nQ29tbWl0fHwtMSE9PWUudGltZW91dEhhbmRsZSkpP251bGw6KHNhKGUscixuKSxzJChlLGVyKCkpLG51bGwhPWUuY2FsbGJhY2tOb2RlJiZlLmNhbGxiYWNrTm9kZT09PXQ/c1ouYmluZChudWxsLGUpOm51bGwpfWZ1bmN0aW9uIHNZKGUsbil7aWYoc1MoKSlyZXR1cm4gbnVsbDtzYShlLG4sITApfWZ1bmN0aW9uIHNYKCl7aWYoMD09PXNGKXt2YXIgZT1yMztzRj0wIT09ZT9lOmVrKCl9cmV0dXJuIHNGfWZ1bmN0aW9uIHNLKGUpe3JldHVybiBudWxsPT1lfHxcInN5bWJvbFwiPT10eXBlb2YgZXx8XCJib29sZWFuXCI9PXR5cGVvZiBlP251bGw6XCJmdW5jdGlvblwiPT10eXBlb2YgZT9lOm5nKFwiXCIrZSl9ZnVuY3Rpb24gc1EoZSxuKXt2YXIgdD1uLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO3JldHVybiB0Lm5hbWU9bi5uYW1lLHQudmFsdWU9bi52YWx1ZSxlLmlkJiZ0LnNldEF0dHJpYnV0ZShcImZvcm1cIixlLmlkKSxuLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHQsbiksZT1uZXcgRm9ybURhdGEoZSksdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpLGV9Zm9yKHZhciBzRz0wO3NHPHRLLmxlbmd0aDtzRysrKXt2YXIgc0o9dEtbc0ddO3RRKHNKLnRvTG93ZXJDYXNlKCksXCJvblwiKyhzSlswXS50b1VwcGVyQ2FzZSgpK3NKLnNsaWNlKDEpKSl9dFEodFUsXCJvbkFuaW1hdGlvbkVuZFwiKSx0USh0VixcIm9uQW5pbWF0aW9uSXRlcmF0aW9uXCIpLHRRKHRxLFwib25BbmltYXRpb25TdGFydFwiKSx0UShcImRibGNsaWNrXCIsXCJvbkRvdWJsZUNsaWNrXCIpLHRRKFwiZm9jdXNpblwiLFwib25Gb2N1c1wiKSx0UShcImZvY3Vzb3V0XCIsXCJvbkJsdXJcIiksdFEodFcsXCJvblRyYW5zaXRpb25SdW5cIiksdFEodCQsXCJvblRyYW5zaXRpb25TdGFydFwiKSx0USh0WixcIm9uVHJhbnNpdGlvbkNhbmNlbFwiKSx0USh0WSxcIm9uVHJhbnNpdGlvbkVuZFwiKSxlRyhcIm9uTW91c2VFbnRlclwiLFtcIm1vdXNlb3V0XCIsXCJtb3VzZW92ZXJcIl0pLGVHKFwib25Nb3VzZUxlYXZlXCIsW1wibW91c2VvdXRcIixcIm1vdXNlb3ZlclwiXSksZUcoXCJvblBvaW50ZXJFbnRlclwiLFtcInBvaW50ZXJvdXRcIixcInBvaW50ZXJvdmVyXCJdKSxlRyhcIm9uUG9pbnRlckxlYXZlXCIsW1wicG9pbnRlcm91dFwiLFwicG9pbnRlcm92ZXJcIl0pLGVRKFwib25DaGFuZ2VcIixcImNoYW5nZSBjbGljayBmb2N1c2luIGZvY3Vzb3V0IGlucHV0IGtleWRvd24ga2V5dXAgc2VsZWN0aW9uY2hhbmdlXCIuc3BsaXQoXCIgXCIpKSxlUShcIm9uU2VsZWN0XCIsXCJmb2N1c291dCBjb250ZXh0bWVudSBkcmFnZW5kIGZvY3VzaW4ga2V5ZG93biBrZXl1cCBtb3VzZWRvd24gbW91c2V1cCBzZWxlY3Rpb25jaGFuZ2VcIi5zcGxpdChcIiBcIikpLGVRKFwib25CZWZvcmVJbnB1dFwiLFtcImNvbXBvc2l0aW9uZW5kXCIsXCJrZXlwcmVzc1wiLFwidGV4dElucHV0XCIsXCJwYXN0ZVwiXSksZVEoXCJvbkNvbXBvc2l0aW9uRW5kXCIsXCJjb21wb3NpdGlvbmVuZCBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93blwiLnNwbGl0KFwiIFwiKSksZVEoXCJvbkNvbXBvc2l0aW9uU3RhcnRcIixcImNvbXBvc2l0aW9uc3RhcnQgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd25cIi5zcGxpdChcIiBcIikpLGVRKFwib25Db21wb3NpdGlvblVwZGF0ZVwiLFwiY29tcG9zaXRpb251cGRhdGUgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd25cIi5zcGxpdChcIiBcIikpO3ZhciBzMD1cImFib3J0IGNhbnBsYXkgY2FucGxheXRocm91Z2ggZHVyYXRpb25jaGFuZ2UgZW1wdGllZCBlbmNyeXB0ZWQgZW5kZWQgZXJyb3IgbG9hZGVkZGF0YSBsb2FkZWRtZXRhZGF0YSBsb2Fkc3RhcnQgcGF1c2UgcGxheSBwbGF5aW5nIHByb2dyZXNzIHJhdGVjaGFuZ2UgcmVzaXplIHNlZWtlZCBzZWVraW5nIHN0YWxsZWQgc3VzcGVuZCB0aW1ldXBkYXRlIHZvbHVtZWNoYW5nZSB3YWl0aW5nXCIuc3BsaXQoXCIgXCIpLHMxPW5ldyBTZXQoXCJiZWZvcmV0b2dnbGUgY2FuY2VsIGNsb3NlIGludmFsaWQgbG9hZCBzY3JvbGwgc2Nyb2xsZW5kIHRvZ2dsZVwiLnNwbGl0KFwiIFwiKS5jb25jYXQoczApKTtmdW5jdGlvbiBzMihlLG4pe249MCE9KDQmbik7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0Kyspe3ZhciByPWVbdF0sbz1yLmV2ZW50O3I9ci5saXN0ZW5lcnM7ZTp7dmFyIGE9dm9pZCAwO2lmKG4pZm9yKHZhciBpPXIubGVuZ3RoLTE7MDw9aTtpLS0pe3ZhciBsPXJbaV0scz1sLmluc3RhbmNlLGM9bC5jdXJyZW50VGFyZ2V0O2lmKGw9bC5saXN0ZW5lcixzIT09YSYmby5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWJyZWFrIGU7YT1sLG8uY3VycmVudFRhcmdldD1jO3RyeXthKG8pfWNhdGNoKGUpe3RHKGUpfW8uY3VycmVudFRhcmdldD1udWxsLGE9c31lbHNlIGZvcihpPTA7aTxyLmxlbmd0aDtpKyspe2lmKHM9KGw9cltpXSkuaW5zdGFuY2UsYz1sLmN1cnJlbnRUYXJnZXQsbD1sLmxpc3RlbmVyLHMhPT1hJiZvLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpYnJlYWsgZTthPWwsby5jdXJyZW50VGFyZ2V0PWM7dHJ5e2Eobyl9Y2F0Y2goZSl7dEcoZSl9by5jdXJyZW50VGFyZ2V0PW51bGwsYT1zfX19fWZ1bmN0aW9uIHM0KGUsbil7dmFyIHQ9bltlTV07dm9pZCAwPT09dCYmKHQ9bltlTV09bmV3IFNldCk7dmFyIHI9ZStcIl9fYnViYmxlXCI7dC5oYXMocil8fChzOShuLGUsMiwhMSksdC5hZGQocikpfWZ1bmN0aW9uIHM1KGUsbix0KXt2YXIgcj0wO24mJihyfD00KSxzOSh0LGUscixuKX12YXIgczM9XCJfcmVhY3RMaXN0ZW5pbmdcIitNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTtmdW5jdGlvbiBzNihlKXtpZighZVtzM10pe2VbczNdPSEwLGVYLmZvckVhY2goZnVuY3Rpb24obil7XCJzZWxlY3Rpb25jaGFuZ2VcIiE9PW4mJihzMS5oYXMobil8fHM1KG4sITEsZSksczUobiwhMCxlKSl9KTt2YXIgbj05PT09ZS5ub2RlVHlwZT9lOmUub3duZXJEb2N1bWVudDtudWxsPT09bnx8bltzM118fChuW3MzXT0hMCxzNShcInNlbGVjdGlvbmNoYW5nZVwiLCExLG4pKX19ZnVuY3Rpb24gczkoZSxuLHQscil7c3dpdGNoKHV1KG4pKXtjYXNlIDI6dmFyIG89dW87YnJlYWs7Y2FzZSA4Om89dWE7YnJlYWs7ZGVmYXVsdDpvPXVpfXQ9by5iaW5kKG51bGwsbix0LGUpLG89dm9pZCAwLG5DJiYoXCJ0b3VjaHN0YXJ0XCI9PT1ufHxcInRvdWNobW92ZVwiPT09bnx8XCJ3aGVlbFwiPT09bikmJihvPSEwKSxyP3ZvaWQgMCE9PW8/ZS5hZGRFdmVudExpc3RlbmVyKG4sdCx7Y2FwdHVyZTohMCxwYXNzaXZlOm99KTplLmFkZEV2ZW50TGlzdGVuZXIobix0LCEwKTp2b2lkIDAhPT1vP2UuYWRkRXZlbnRMaXN0ZW5lcihuLHQse3Bhc3NpdmU6b30pOmUuYWRkRXZlbnRMaXN0ZW5lcihuLHQsITEpfWZ1bmN0aW9uIHM4KGUsbix0LHIsbyl7dmFyIGE9cjtpZigwPT0oMSZuKSYmMD09KDImbikmJm51bGwhPT1yKWU6Zm9yKDs7KXtpZihudWxsPT09cilyZXR1cm47dmFyIGk9ci50YWc7aWYoMz09PWl8fDQ9PT1pKXt2YXIgbD1yLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO2lmKGw9PT1vKWJyZWFrO2lmKDQ9PT1pKWZvcihpPXIucmV0dXJuO251bGwhPT1pOyl7dmFyIGM9aS50YWc7aWYoKDM9PT1jfHw0PT09YykmJmkuc3RhdGVOb2RlLmNvbnRhaW5lckluZm89PT1vKXJldHVybjtpPWkucmV0dXJufWZvcig7bnVsbCE9PWw7KXtpZihudWxsPT09KGk9ZXEobCkpKXJldHVybjtpZig1PT09KGM9aS50YWcpfHw2PT09Y3x8MjY9PT1jfHwyNz09PWMpe3I9YT1pO2NvbnRpbnVlIGV9bD1sLnBhcmVudE5vZGV9fXI9ci5yZXR1cm59bmsoZnVuY3Rpb24oKXt2YXIgcj1hLG89bmIodCksaT1bXTtlOnt2YXIgbD10WC5nZXQoZSk7aWYodm9pZCAwIT09bCl7dmFyIGM9blUsdT1lO3N3aXRjaChlKXtjYXNlXCJrZXlwcmVzc1wiOmlmKDA9PT1uTCh0KSlicmVhayBlO2Nhc2VcImtleWRvd25cIjpjYXNlXCJrZXl1cFwiOmM9bjQ7YnJlYWs7Y2FzZVwiZm9jdXNpblwiOnU9XCJmb2N1c1wiLGM9blk7YnJlYWs7Y2FzZVwiZm9jdXNvdXRcIjp1PVwiYmx1clwiLGM9blk7YnJlYWs7Y2FzZVwiYmVmb3JlYmx1clwiOmNhc2VcImFmdGVyYmx1clwiOmM9blk7YnJlYWs7Y2FzZVwiY2xpY2tcIjppZigyPT09dC5idXR0b24pYnJlYWsgZTtjYXNlXCJhdXhjbGlja1wiOmNhc2VcImRibGNsaWNrXCI6Y2FzZVwibW91c2Vkb3duXCI6Y2FzZVwibW91c2Vtb3ZlXCI6Y2FzZVwibW91c2V1cFwiOmNhc2VcIm1vdXNlb3V0XCI6Y2FzZVwibW91c2VvdmVyXCI6Y2FzZVwiY29udGV4dG1lbnVcIjpjPW4kO2JyZWFrO2Nhc2VcImRyYWdcIjpjYXNlXCJkcmFnZW5kXCI6Y2FzZVwiZHJhZ2VudGVyXCI6Y2FzZVwiZHJhZ2V4aXRcIjpjYXNlXCJkcmFnbGVhdmVcIjpjYXNlXCJkcmFnb3ZlclwiOmNhc2VcImRyYWdzdGFydFwiOmNhc2VcImRyb3BcIjpjPW5aO2JyZWFrO2Nhc2VcInRvdWNoY2FuY2VsXCI6Y2FzZVwidG91Y2hlbmRcIjpjYXNlXCJ0b3VjaG1vdmVcIjpjYXNlXCJ0b3VjaHN0YXJ0XCI6Yz1uMzticmVhaztjYXNlIHRVOmNhc2UgdFY6Y2FzZSB0cTpjPW5YO2JyZWFrO2Nhc2UgdFk6Yz1uNjticmVhaztjYXNlXCJzY3JvbGxcIjpjYXNlXCJzY3JvbGxlbmRcIjpjPW5xO2JyZWFrO2Nhc2VcIndoZWVsXCI6Yz1uOTticmVhaztjYXNlXCJjb3B5XCI6Y2FzZVwiY3V0XCI6Y2FzZVwicGFzdGVcIjpjPW5LO2JyZWFrO2Nhc2VcImdvdHBvaW50ZXJjYXB0dXJlXCI6Y2FzZVwibG9zdHBvaW50ZXJjYXB0dXJlXCI6Y2FzZVwicG9pbnRlcmNhbmNlbFwiOmNhc2VcInBvaW50ZXJkb3duXCI6Y2FzZVwicG9pbnRlcm1vdmVcIjpjYXNlXCJwb2ludGVyb3V0XCI6Y2FzZVwicG9pbnRlcm92ZXJcIjpjYXNlXCJwb2ludGVydXBcIjpjPW41O2JyZWFrO2Nhc2VcInRvZ2dsZVwiOmNhc2VcImJlZm9yZXRvZ2dsZVwiOmM9bjh9dmFyIGQ9MCE9KDQmbiksZj0hZCYmKFwic2Nyb2xsXCI9PT1lfHxcInNjcm9sbGVuZFwiPT09ZSkscD1kP251bGwhPT1sP2wrXCJDYXB0dXJlXCI6bnVsbDpsO2Q9W107Zm9yKHZhciBoLGc9cjtudWxsIT09Zzspe3ZhciBtPWc7aWYoaD1tLnN0YXRlTm9kZSw1IT09KG09bS50YWcpJiYyNiE9PW0mJjI3IT09bXx8bnVsbD09PWh8fG51bGw9PT1wfHxudWxsIT0obT1uQShnLHApKSYmZC5wdXNoKHM3KGcsbSxoKSksZilicmVhaztnPWcucmV0dXJufTA8ZC5sZW5ndGgmJihsPW5ldyBjKGwsdSxudWxsLHQsbyksaS5wdXNoKHtldmVudDpsLGxpc3RlbmVyczpkfSkpfX1pZigwPT0oNyZuKSl7aWYoKGw9XCJtb3VzZW92ZXJcIj09PWV8fFwicG9pbnRlcm92ZXJcIj09PWUsYz1cIm1vdXNlb3V0XCI9PT1lfHxcInBvaW50ZXJvdXRcIj09PWUsIShsJiZ0IT09bnYmJih1PXQucmVsYXRlZFRhcmdldHx8dC5mcm9tRWxlbWVudCkmJihlcSh1KXx8dVtlQl0pKSkmJihjfHxsKSYmKGw9by53aW5kb3c9PT1vP286KGw9by5vd25lckRvY3VtZW50KT9sLmRlZmF1bHRWaWV3fHxsLnBhcmVudFdpbmRvdzp3aW5kb3csYz8odT10LnJlbGF0ZWRUYXJnZXR8fHQudG9FbGVtZW50LGM9cixudWxsIT09KHU9dT9lcSh1KTpudWxsKSYmKGY9cyh1KSxkPXUudGFnLHUhPT1mfHw1IT09ZCYmMjchPT1kJiY2IT09ZCkmJih1PW51bGwpKTooYz1udWxsLHU9ciksYyE9PXUpKXtpZihkPW4kLG09XCJvbk1vdXNlTGVhdmVcIixwPVwib25Nb3VzZUVudGVyXCIsZz1cIm1vdXNlXCIsKFwicG9pbnRlcm91dFwiPT09ZXx8XCJwb2ludGVyb3ZlclwiPT09ZSkmJihkPW41LG09XCJvblBvaW50ZXJMZWF2ZVwiLHA9XCJvblBvaW50ZXJFbnRlclwiLGc9XCJwb2ludGVyXCIpLGY9bnVsbD09Yz9sOmUkKGMpLGg9bnVsbD09dT9sOmUkKHUpLChsPW5ldyBkKG0sZytcImxlYXZlXCIsYyx0LG8pKS50YXJnZXQ9ZixsLnJlbGF0ZWRUYXJnZXQ9aCxtPW51bGwsZXEobyk9PT1yJiYoKGQ9bmV3IGQocCxnK1wiZW50ZXJcIix1LHQsbykpLnRhcmdldD1oLGQucmVsYXRlZFRhcmdldD1mLG09ZCksZj1tLGMmJnUpbjp7Zm9yKGQ9Y24scD1jLGc9dSxoPTAsbT1wO207bT1kKG0pKWgrKzttPTA7Zm9yKHZhciB2LGI9ZztiO2I9ZChiKSltKys7Zm9yKDswPGgtbTspcD1kKHApLGgtLTtmb3IoOzA8bS1oOylnPWQoZyksbS0tO2Zvcig7aC0tOyl7aWYocD09PWd8fG51bGwhPT1nJiZwPT09Zy5hbHRlcm5hdGUpe2Q9cDticmVhayBufXA9ZChwKSxnPWQoZyl9ZD1udWxsfWVsc2UgZD1udWxsO251bGwhPT1jJiZjdChpLGwsYyxkLCExKSxudWxsIT09dSYmbnVsbCE9PWYmJmN0KGksZix1LGQsITApfWU6e2lmKFwic2VsZWN0XCI9PT0oYz0obD1yP2UkKHIpOndpbmRvdykubm9kZU5hbWUmJmwubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl8fFwiaW5wdXRcIj09PWMmJlwiZmlsZVwiPT09bC50eXBlKXZhciB5PXRnO2Vsc2UgaWYodGMobCkpaWYodG0peT10QTtlbHNle3k9dGo7dmFyIHg9dHd9ZWxzZShjPWwubm9kZU5hbWUpJiZcImlucHV0XCI9PT1jLnRvTG93ZXJDYXNlKCkmJihcImNoZWNrYm94XCI9PT1sLnR5cGV8fFwicmFkaW9cIj09PWwudHlwZSk/eT10azpyJiZuZihyLmVsZW1lbnRUeXBlKSYmKHk9dGcpO2lmKHkmJih5PXkoZSxyKSkpe3R1KGkseSx0LG8pO2JyZWFrIGV9eCYmeChlLGwsciksXCJmb2N1c291dFwiPT09ZSYmciYmXCJudW1iZXJcIj09PWwudHlwZSYmbnVsbCE9ci5tZW1vaXplZFByb3BzLnZhbHVlJiZubyhsLFwibnVtYmVyXCIsbC52YWx1ZSl9c3dpdGNoKHg9cj9lJChyKTp3aW5kb3csZSl7Y2FzZVwiZm9jdXNpblwiOih0Yyh4KXx8XCJ0cnVlXCI9PT14LmNvbnRlbnRFZGl0YWJsZSkmJih0TD14LHRUPXIsdFI9bnVsbCk7YnJlYWs7Y2FzZVwiZm9jdXNvdXRcIjp0Uj10VD10TD1udWxsO2JyZWFrO2Nhc2VcIm1vdXNlZG93blwiOnROPSEwO2JyZWFrO2Nhc2VcImNvbnRleHRtZW51XCI6Y2FzZVwibW91c2V1cFwiOmNhc2VcImRyYWdlbmRcIjp0Tj0hMSx0RChpLHQsbyk7YnJlYWs7Y2FzZVwic2VsZWN0aW9uY2hhbmdlXCI6aWYodHopYnJlYWs7Y2FzZVwia2V5ZG93blwiOmNhc2VcImtleXVwXCI6dEQoaSx0LG8pfWlmKHRlKW46e3N3aXRjaChlKXtjYXNlXCJjb21wb3NpdGlvbnN0YXJ0XCI6dmFyIHc9XCJvbkNvbXBvc2l0aW9uU3RhcnRcIjticmVhayBuO2Nhc2VcImNvbXBvc2l0aW9uZW5kXCI6dz1cIm9uQ29tcG9zaXRpb25FbmRcIjticmVhayBuO2Nhc2VcImNvbXBvc2l0aW9udXBkYXRlXCI6dz1cIm9uQ29tcG9zaXRpb25VcGRhdGVcIjticmVhayBufXc9dm9pZCAwfWVsc2UgdGw/dGEoZSx0KSYmKHc9XCJvbkNvbXBvc2l0aW9uRW5kXCIpOlwia2V5ZG93blwiPT09ZSYmMjI5PT09dC5rZXlDb2RlJiYodz1cIm9uQ29tcG9zaXRpb25TdGFydFwiKTt3JiYodHImJlwia29cIiE9PXQubG9jYWxlJiYodGx8fFwib25Db21wb3NpdGlvblN0YXJ0XCIhPT13P1wib25Db21wb3NpdGlvbkVuZFwiPT09dyYmdGwmJih2PW56KCkpOihuXz1cInZhbHVlXCJpbihuRT1vKT9uRS52YWx1ZTpuRS50ZXh0Q29udGVudCx0bD0hMCkpLDA8KHg9Y2Uocix3KSkubGVuZ3RoJiYodz1uZXcgblEodyxlLG51bGwsdCxvKSxpLnB1c2goe2V2ZW50OncsbGlzdGVuZXJzOnh9KSx2P3cuZGF0YT12Om51bGwhPT0odj10aSh0KSkmJih3LmRhdGE9dikpKSwodj10dD9mdW5jdGlvbihlLG4pe3N3aXRjaChlKXtjYXNlXCJjb21wb3NpdGlvbmVuZFwiOnJldHVybiB0aShuKTtjYXNlXCJrZXlwcmVzc1wiOmlmKDMyIT09bi53aGljaClyZXR1cm4gbnVsbDtyZXR1cm4gdG89ITAsXCIgXCI7Y2FzZVwidGV4dElucHV0XCI6cmV0dXJuXCIgXCI9PT0oZT1uLmRhdGEpJiZ0bz9udWxsOmU7ZGVmYXVsdDpyZXR1cm4gbnVsbH19KGUsdCk6ZnVuY3Rpb24oZSxuKXtpZih0bClyZXR1cm5cImNvbXBvc2l0aW9uZW5kXCI9PT1lfHwhdGUmJnRhKGUsbik/KGU9bnooKSxuUD1uXz1uRT1udWxsLHRsPSExLGUpOm51bGw7c3dpdGNoKGUpe2Nhc2VcInBhc3RlXCI6ZGVmYXVsdDpyZXR1cm4gbnVsbDtjYXNlXCJrZXlwcmVzc1wiOmlmKCEobi5jdHJsS2V5fHxuLmFsdEtleXx8bi5tZXRhS2V5KXx8bi5jdHJsS2V5JiZuLmFsdEtleSl7aWYobi5jaGFyJiYxPG4uY2hhci5sZW5ndGgpcmV0dXJuIG4uY2hhcjtpZihuLndoaWNoKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG4ud2hpY2gpfXJldHVybiBudWxsO2Nhc2VcImNvbXBvc2l0aW9uZW5kXCI6cmV0dXJuIHRyJiZcImtvXCIhPT1uLmxvY2FsZT9udWxsOm4uZGF0YX19KGUsdCkpJiYwPCh3PWNlKHIsXCJvbkJlZm9yZUlucHV0XCIpKS5sZW5ndGgmJih4PW5ldyBuUShcIm9uQmVmb3JlSW5wdXRcIixcImJlZm9yZWlucHV0XCIsbnVsbCx0LG8pLGkucHVzaCh7ZXZlbnQ6eCxsaXN0ZW5lcnM6d30pLHguZGF0YT12KTt2YXIgaj1lO2lmKFwic3VibWl0XCI9PT1qJiZyJiZyLnN0YXRlTm9kZT09PW8pe3ZhciBrPXNLKChvW2VEXXx8bnVsbCkuYWN0aW9uKSxBPXQuc3VibWl0dGVyO0EmJm51bGwhPT0oaj0oaj1BW2VEXXx8bnVsbCk/c0soai5mb3JtQWN0aW9uKTpBLmdldEF0dHJpYnV0ZShcImZvcm1BY3Rpb25cIikpJiYoaz1qLEE9bnVsbCk7dmFyIE89bmV3IG5VKFwiYWN0aW9uXCIsXCJhY3Rpb25cIixudWxsLHQsbyk7aS5wdXNoKHtldmVudDpPLGxpc3RlbmVyczpbe2luc3RhbmNlOm51bGwsbGlzdGVuZXI6ZnVuY3Rpb24oKXtpZih0LmRlZmF1bHRQcmV2ZW50ZWQpe2lmKDAhPT1zRil7dmFyIGU9QT9zUShvLEEpOm5ldyBGb3JtRGF0YShvKTthSyhyLHtwZW5kaW5nOiEwLGRhdGE6ZSxtZXRob2Q6by5tZXRob2QsYWN0aW9uOmt9LG51bGwsZSl9fWVsc2VcImZ1bmN0aW9uXCI9PXR5cGVvZiBrJiYoTy5wcmV2ZW50RGVmYXVsdCgpLGFLKHIse3BlbmRpbmc6ITAsZGF0YTplPUE/c1EobyxBKTpuZXcgRm9ybURhdGEobyksbWV0aG9kOm8ubWV0aG9kLGFjdGlvbjprfSxrLGUpKX0sY3VycmVudFRhcmdldDpvfV19KX19czIoaSxuKX0pfWZ1bmN0aW9uIHM3KGUsbix0KXtyZXR1cm57aW5zdGFuY2U6ZSxsaXN0ZW5lcjpuLGN1cnJlbnRUYXJnZXQ6dH19ZnVuY3Rpb24gY2UoZSxuKXtmb3IodmFyIHQ9bitcIkNhcHR1cmVcIixyPVtdO251bGwhPT1lOyl7dmFyIG89ZSxhPW8uc3RhdGVOb2RlO2lmKDUhPT0obz1vLnRhZykmJjI2IT09byYmMjchPT1vfHxudWxsPT09YXx8KG51bGwhPShvPW5BKGUsdCkpJiZyLnVuc2hpZnQoczcoZSxvLGEpKSxudWxsIT0obz1uQShlLG4pKSYmci5wdXNoKHM3KGUsbyxhKSkpLDM9PT1lLnRhZylyZXR1cm4gcjtlPWUucmV0dXJufXJldHVybltdfWZ1bmN0aW9uIGNuKGUpe2lmKG51bGw9PT1lKXJldHVybiBudWxsO2RvIGU9ZS5yZXR1cm47d2hpbGUoZSYmNSE9PWUudGFnJiYyNyE9PWUudGFnKTtyZXR1cm4gZXx8bnVsbH1mdW5jdGlvbiBjdChlLG4sdCxyLG8pe2Zvcih2YXIgYT1uLl9yZWFjdE5hbWUsaT1bXTtudWxsIT09dCYmdCE9PXI7KXt2YXIgbD10LHM9bC5hbHRlcm5hdGUsYz1sLnN0YXRlTm9kZTtpZihsPWwudGFnLG51bGwhPT1zJiZzPT09cilicmVhazs1IT09bCYmMjYhPT1sJiYyNyE9PWx8fG51bGw9PT1jfHwocz1jLG8/bnVsbCE9KGM9bkEodCxhKSkmJmkudW5zaGlmdChzNyh0LGMscykpOm98fG51bGwhPShjPW5BKHQsYSkpJiZpLnB1c2goczcodCxjLHMpKSksdD10LnJldHVybn0wIT09aS5sZW5ndGgmJmUucHVzaCh7ZXZlbnQ6bixsaXN0ZW5lcnM6aX0pfXZhciBjcj0vXFxyXFxuPy9nLGNvPS9cXHUwMDAwfFxcdUZGRkQvZztmdW5jdGlvbiBjYShlKXtyZXR1cm4oXCJzdHJpbmdcIj09dHlwZW9mIGU/ZTpcIlwiK2UpLnJlcGxhY2UoY3IsXCJcXG5cIikucmVwbGFjZShjbyxcIlwiKX1mdW5jdGlvbiBjaShlLG4pe3JldHVybiBuPWNhKG4pLGNhKGUpPT09bn1mdW5jdGlvbiBjbChlLG4sdCxyLG8sYSl7c3dpdGNoKHQpe2Nhc2VcImNoaWxkcmVuXCI6XCJzdHJpbmdcIj09dHlwZW9mIHI/XCJib2R5XCI9PT1ufHxcInRleHRhcmVhXCI9PT1uJiZcIlwiPT09cnx8bnMoZSxyKTooXCJudW1iZXJcIj09dHlwZW9mIHJ8fFwiYmlnaW50XCI9PXR5cGVvZiByKSYmXCJib2R5XCIhPT1uJiZucyhlLFwiXCIrcik7YnJlYWs7Y2FzZVwiY2xhc3NOYW1lXCI6ZTQoZSxcImNsYXNzXCIscik7YnJlYWs7Y2FzZVwidGFiSW5kZXhcIjplNChlLFwidGFiaW5kZXhcIixyKTticmVhaztjYXNlXCJkaXJcIjpjYXNlXCJyb2xlXCI6Y2FzZVwidmlld0JveFwiOmNhc2VcIndpZHRoXCI6Y2FzZVwiaGVpZ2h0XCI6ZTQoZSx0LHIpO2JyZWFrO2Nhc2VcInN0eWxlXCI6bmQoZSxyLGEpO2JyZWFrO2Nhc2VcImRhdGFcIjppZihcIm9iamVjdFwiIT09bil7ZTQoZSxcImRhdGFcIixyKTticmVha31jYXNlXCJzcmNcIjpjYXNlXCJocmVmXCI6aWYoXCJcIj09PXImJihcImFcIiE9PW58fFwiaHJlZlwiIT09dCl8fG51bGw9PXJ8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHJ8fFwic3ltYm9sXCI9PXR5cGVvZiByfHxcImJvb2xlYW5cIj09dHlwZW9mIHIpe2UucmVtb3ZlQXR0cmlidXRlKHQpO2JyZWFrfXI9bmcoXCJcIityKSxlLnNldEF0dHJpYnV0ZSh0LHIpO2JyZWFrO2Nhc2VcImFjdGlvblwiOmNhc2VcImZvcm1BY3Rpb25cIjppZihcImZ1bmN0aW9uXCI9PXR5cGVvZiByKXtlLnNldEF0dHJpYnV0ZSh0LFwiamF2YXNjcmlwdDp0aHJvdyBuZXcgRXJyb3IoJ0EgUmVhY3QgZm9ybSB3YXMgdW5leHBlY3RlZGx5IHN1Ym1pdHRlZC4gSWYgeW91IGNhbGxlZCBmb3JtLnN1Ym1pdCgpIG1hbnVhbGx5LCBjb25zaWRlciB1c2luZyBmb3JtLnJlcXVlc3RTdWJtaXQoKSBpbnN0ZWFkLiBJZiB5b3VcXFxcJ3JlIHRyeWluZyB0byB1c2UgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkgaW4gYSBzdWJtaXQgZXZlbnQgaGFuZGxlciwgY29uc2lkZXIgYWxzbyBjYWxsaW5nIGV2ZW50LnByZXZlbnREZWZhdWx0KCkuJylcIik7YnJlYWt9aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYSYmKFwiZm9ybUFjdGlvblwiPT09dD8oXCJpbnB1dFwiIT09biYmY2woZSxuLFwibmFtZVwiLG8ubmFtZSxvLG51bGwpLGNsKGUsbixcImZvcm1FbmNUeXBlXCIsby5mb3JtRW5jVHlwZSxvLG51bGwpLGNsKGUsbixcImZvcm1NZXRob2RcIixvLmZvcm1NZXRob2QsbyxudWxsKSxjbChlLG4sXCJmb3JtVGFyZ2V0XCIsby5mb3JtVGFyZ2V0LG8sbnVsbCkpOihjbChlLG4sXCJlbmNUeXBlXCIsby5lbmNUeXBlLG8sbnVsbCksY2woZSxuLFwibWV0aG9kXCIsby5tZXRob2QsbyxudWxsKSxjbChlLG4sXCJ0YXJnZXRcIixvLnRhcmdldCxvLG51bGwpKSksbnVsbD09cnx8XCJzeW1ib2xcIj09dHlwZW9mIHJ8fFwiYm9vbGVhblwiPT10eXBlb2Ygcil7ZS5yZW1vdmVBdHRyaWJ1dGUodCk7YnJlYWt9cj1uZyhcIlwiK3IpLGUuc2V0QXR0cmlidXRlKHQscik7YnJlYWs7Y2FzZVwib25DbGlja1wiOm51bGwhPXImJihlLm9uY2xpY2s9bm0pO2JyZWFrO2Nhc2VcIm9uU2Nyb2xsXCI6bnVsbCE9ciYmczQoXCJzY3JvbGxcIixlKTticmVhaztjYXNlXCJvblNjcm9sbEVuZFwiOm51bGwhPXImJnM0KFwic2Nyb2xsZW5kXCIsZSk7YnJlYWs7Y2FzZVwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIjppZihudWxsIT1yKXtpZihcIm9iamVjdFwiIT10eXBlb2Ygcnx8IShcIl9faHRtbFwiaW4gcikpdGhyb3cgRXJyb3IobCg2MSkpO2lmKG51bGwhPSh0PXIuX19odG1sKSl7aWYobnVsbCE9by5jaGlsZHJlbil0aHJvdyBFcnJvcihsKDYwKSk7ZS5pbm5lckhUTUw9dH19YnJlYWs7Y2FzZVwibXVsdGlwbGVcIjplLm11bHRpcGxlPXImJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHImJlwic3ltYm9sXCIhPXR5cGVvZiByO2JyZWFrO2Nhc2VcIm11dGVkXCI6ZS5tdXRlZD1yJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiByJiZcInN5bWJvbFwiIT10eXBlb2YgcjticmVhaztjYXNlXCJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmdcIjpjYXNlXCJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmdcIjpjYXNlXCJkZWZhdWx0VmFsdWVcIjpjYXNlXCJkZWZhdWx0Q2hlY2tlZFwiOmNhc2VcImlubmVySFRNTFwiOmNhc2VcInJlZlwiOmNhc2VcImF1dG9Gb2N1c1wiOmNhc2VcImlubmVyVGV4dFwiOmNhc2VcInRleHRDb250ZW50XCI6YnJlYWs7Y2FzZVwieGxpbmtIcmVmXCI6aWYobnVsbD09cnx8XCJmdW5jdGlvblwiPT10eXBlb2Ygcnx8XCJib29sZWFuXCI9PXR5cGVvZiByfHxcInN5bWJvbFwiPT10eXBlb2Ygcil7ZS5yZW1vdmVBdHRyaWJ1dGUoXCJ4bGluazpocmVmXCIpO2JyZWFrfXQ9bmcoXCJcIityKSxlLnNldEF0dHJpYnV0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFwieGxpbms6aHJlZlwiLHQpO2JyZWFrO2Nhc2VcImNvbnRlbnRFZGl0YWJsZVwiOmNhc2VcInNwZWxsQ2hlY2tcIjpjYXNlXCJkcmFnZ2FibGVcIjpjYXNlXCJ2YWx1ZVwiOmNhc2VcImF1dG9SZXZlcnNlXCI6Y2FzZVwiZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZFwiOmNhc2VcImZvY3VzYWJsZVwiOmNhc2VcInByZXNlcnZlQWxwaGFcIjpudWxsIT1yJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiByJiZcInN5bWJvbFwiIT10eXBlb2Ygcj9lLnNldEF0dHJpYnV0ZSh0LFwiXCIrcik6ZS5yZW1vdmVBdHRyaWJ1dGUodCk7YnJlYWs7Y2FzZVwiaW5lcnRcIjpjYXNlXCJhbGxvd0Z1bGxTY3JlZW5cIjpjYXNlXCJhc3luY1wiOmNhc2VcImF1dG9QbGF5XCI6Y2FzZVwiY29udHJvbHNcIjpjYXNlXCJkZWZhdWx0XCI6Y2FzZVwiZGVmZXJcIjpjYXNlXCJkaXNhYmxlZFwiOmNhc2VcImRpc2FibGVQaWN0dXJlSW5QaWN0dXJlXCI6Y2FzZVwiZGlzYWJsZVJlbW90ZVBsYXliYWNrXCI6Y2FzZVwiZm9ybU5vVmFsaWRhdGVcIjpjYXNlXCJoaWRkZW5cIjpjYXNlXCJsb29wXCI6Y2FzZVwibm9Nb2R1bGVcIjpjYXNlXCJub1ZhbGlkYXRlXCI6Y2FzZVwib3BlblwiOmNhc2VcInBsYXlzSW5saW5lXCI6Y2FzZVwicmVhZE9ubHlcIjpjYXNlXCJyZXF1aXJlZFwiOmNhc2VcInJldmVyc2VkXCI6Y2FzZVwic2NvcGVkXCI6Y2FzZVwic2VhbWxlc3NcIjpjYXNlXCJpdGVtU2NvcGVcIjpyJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiByJiZcInN5bWJvbFwiIT10eXBlb2Ygcj9lLnNldEF0dHJpYnV0ZSh0LFwiXCIpOmUucmVtb3ZlQXR0cmlidXRlKHQpO2JyZWFrO2Nhc2VcImNhcHR1cmVcIjpjYXNlXCJkb3dubG9hZFwiOiEwPT09cj9lLnNldEF0dHJpYnV0ZSh0LFwiXCIpOiExIT09ciYmbnVsbCE9ciYmXCJmdW5jdGlvblwiIT10eXBlb2YgciYmXCJzeW1ib2xcIiE9dHlwZW9mIHI/ZS5zZXRBdHRyaWJ1dGUodCxyKTplLnJlbW92ZUF0dHJpYnV0ZSh0KTticmVhaztjYXNlXCJjb2xzXCI6Y2FzZVwicm93c1wiOmNhc2VcInNpemVcIjpjYXNlXCJzcGFuXCI6bnVsbCE9ciYmXCJmdW5jdGlvblwiIT10eXBlb2YgciYmXCJzeW1ib2xcIiE9dHlwZW9mIHImJiFpc05hTihyKSYmMTw9cj9lLnNldEF0dHJpYnV0ZSh0LHIpOmUucmVtb3ZlQXR0cmlidXRlKHQpO2JyZWFrO2Nhc2VcInJvd1NwYW5cIjpjYXNlXCJzdGFydFwiOm51bGw9PXJ8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHJ8fFwic3ltYm9sXCI9PXR5cGVvZiByfHxpc05hTihyKT9lLnJlbW92ZUF0dHJpYnV0ZSh0KTplLnNldEF0dHJpYnV0ZSh0LHIpO2JyZWFrO2Nhc2VcInBvcG92ZXJcIjpzNChcImJlZm9yZXRvZ2dsZVwiLGUpLHM0KFwidG9nZ2xlXCIsZSksZTIoZSxcInBvcG92ZXJcIixyKTticmVhaztjYXNlXCJ4bGlua0FjdHVhdGVcIjplNShlLFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFwieGxpbms6YWN0dWF0ZVwiLHIpO2JyZWFrO2Nhc2VcInhsaW5rQXJjcm9sZVwiOmU1KGUsXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXCJ4bGluazphcmNyb2xlXCIscik7YnJlYWs7Y2FzZVwieGxpbmtSb2xlXCI6ZTUoZSxcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcInhsaW5rOnJvbGVcIixyKTticmVhaztjYXNlXCJ4bGlua1Nob3dcIjplNShlLFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFwieGxpbms6c2hvd1wiLHIpO2JyZWFrO2Nhc2VcInhsaW5rVGl0bGVcIjplNShlLFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFwieGxpbms6dGl0bGVcIixyKTticmVhaztjYXNlXCJ4bGlua1R5cGVcIjplNShlLFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFwieGxpbms6dHlwZVwiLHIpO2JyZWFrO2Nhc2VcInhtbEJhc2VcIjplNShlLFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIsXCJ4bWw6YmFzZVwiLHIpO2JyZWFrO2Nhc2VcInhtbExhbmdcIjplNShlLFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIsXCJ4bWw6bGFuZ1wiLHIpO2JyZWFrO2Nhc2VcInhtbFNwYWNlXCI6ZTUoZSxcImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZVwiLFwieG1sOnNwYWNlXCIscik7YnJlYWs7Y2FzZVwiaXNcIjplMihlLFwiaXNcIixyKTticmVhaztkZWZhdWx0OjI8dC5sZW5ndGgmJihcIm9cIj09PXRbMF18fFwiT1wiPT09dFswXSkmJihcIm5cIj09PXRbMV18fFwiTlwiPT09dFsxXSl8fGUyKGUsdD1ucC5nZXQodCl8fHQscil9fWZ1bmN0aW9uIGNzKGUsbix0LHIsbyxhKXtzd2l0Y2godCl7Y2FzZVwic3R5bGVcIjpuZChlLHIsYSk7YnJlYWs7Y2FzZVwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIjppZihudWxsIT1yKXtpZihcIm9iamVjdFwiIT10eXBlb2Ygcnx8IShcIl9faHRtbFwiaW4gcikpdGhyb3cgRXJyb3IobCg2MSkpO2lmKG51bGwhPSh0PXIuX19odG1sKSl7aWYobnVsbCE9by5jaGlsZHJlbil0aHJvdyBFcnJvcihsKDYwKSk7ZS5pbm5lckhUTUw9dH19YnJlYWs7Y2FzZVwiY2hpbGRyZW5cIjpcInN0cmluZ1wiPT10eXBlb2Ygcj9ucyhlLHIpOihcIm51bWJlclwiPT10eXBlb2Ygcnx8XCJiaWdpbnRcIj09dHlwZW9mIHIpJiZucyhlLFwiXCIrcik7YnJlYWs7Y2FzZVwib25TY3JvbGxcIjpudWxsIT1yJiZzNChcInNjcm9sbFwiLGUpO2JyZWFrO2Nhc2VcIm9uU2Nyb2xsRW5kXCI6bnVsbCE9ciYmczQoXCJzY3JvbGxlbmRcIixlKTticmVhaztjYXNlXCJvbkNsaWNrXCI6bnVsbCE9ciYmKGUub25jbGljaz1ubSk7YnJlYWs7Y2FzZVwic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nXCI6Y2FzZVwic3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nXCI6Y2FzZVwiaW5uZXJIVE1MXCI6Y2FzZVwicmVmXCI6Y2FzZVwiaW5uZXJUZXh0XCI6Y2FzZVwidGV4dENvbnRlbnRcIjpicmVhaztkZWZhdWx0OmlmKCFlSy5oYXNPd25Qcm9wZXJ0eSh0KSllOntpZihcIm9cIj09PXRbMF0mJlwiblwiPT09dFsxXSYmKG89dC5lbmRzV2l0aChcIkNhcHR1cmVcIiksbj10LnNsaWNlKDIsbz90Lmxlbmd0aC03OnZvaWQgMCksXCJmdW5jdGlvblwiPT10eXBlb2YoYT1udWxsIT0oYT1lW2VEXXx8bnVsbCk/YVt0XTpudWxsKSYmZS5yZW1vdmVFdmVudExpc3RlbmVyKG4sYSxvKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiByKSl7XCJmdW5jdGlvblwiIT10eXBlb2YgYSYmbnVsbCE9PWEmJih0IGluIGU/ZVt0XT1udWxsOmUuaGFzQXR0cmlidXRlKHQpJiZlLnJlbW92ZUF0dHJpYnV0ZSh0KSksZS5hZGRFdmVudExpc3RlbmVyKG4scixvKTticmVhayBlfXQgaW4gZT9lW3RdPXI6ITA9PT1yP2Uuc2V0QXR0cmlidXRlKHQsXCJcIik6ZTIoZSx0LHIpfX19ZnVuY3Rpb24gY2MoZSxuLHQpe3N3aXRjaChuKXtjYXNlXCJkaXZcIjpjYXNlXCJzcGFuXCI6Y2FzZVwic3ZnXCI6Y2FzZVwicGF0aFwiOmNhc2VcImFcIjpjYXNlXCJnXCI6Y2FzZVwicFwiOmNhc2VcImxpXCI6YnJlYWs7Y2FzZVwiaW1nXCI6czQoXCJlcnJvclwiLGUpLHM0KFwibG9hZFwiLGUpO3ZhciByLG89ITEsYT0hMTtmb3IociBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkocikpe3ZhciBpPXRbcl07aWYobnVsbCE9aSlzd2l0Y2gocil7Y2FzZVwic3JjXCI6bz0hMDticmVhaztjYXNlXCJzcmNTZXRcIjphPSEwO2JyZWFrO2Nhc2VcImNoaWxkcmVuXCI6Y2FzZVwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIjp0aHJvdyBFcnJvcihsKDEzNyxuKSk7ZGVmYXVsdDpjbChlLG4scixpLHQsbnVsbCl9fWEmJmNsKGUsbixcInNyY1NldFwiLHQuc3JjU2V0LHQsbnVsbCksbyYmY2woZSxuLFwic3JjXCIsdC5zcmMsdCxudWxsKTtyZXR1cm47Y2FzZVwiaW5wdXRcIjpzNChcImludmFsaWRcIixlKTt2YXIgcz1yPWk9YT1udWxsLGM9bnVsbCx1PW51bGw7Zm9yKG8gaW4gdClpZih0Lmhhc093blByb3BlcnR5KG8pKXt2YXIgZD10W29dO2lmKG51bGwhPWQpc3dpdGNoKG8pe2Nhc2VcIm5hbWVcIjphPWQ7YnJlYWs7Y2FzZVwidHlwZVwiOmk9ZDticmVhaztjYXNlXCJjaGVja2VkXCI6Yz1kO2JyZWFrO2Nhc2VcImRlZmF1bHRDaGVja2VkXCI6dT1kO2JyZWFrO2Nhc2VcInZhbHVlXCI6cj1kO2JyZWFrO2Nhc2VcImRlZmF1bHRWYWx1ZVwiOnM9ZDticmVhaztjYXNlXCJjaGlsZHJlblwiOmNhc2VcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI6aWYobnVsbCE9ZCl0aHJvdyBFcnJvcihsKDEzNyxuKSk7YnJlYWs7ZGVmYXVsdDpjbChlLG4sbyxkLHQsbnVsbCl9fW5yKGUscixzLGMsdSxpLGEsITEpO3JldHVybjtjYXNlXCJzZWxlY3RcIjpmb3IoYSBpbiBzNChcImludmFsaWRcIixlKSxvPWk9cj1udWxsLHQpaWYodC5oYXNPd25Qcm9wZXJ0eShhKSYmbnVsbCE9KHM9dFthXSkpc3dpdGNoKGEpe2Nhc2VcInZhbHVlXCI6cj1zO2JyZWFrO2Nhc2VcImRlZmF1bHRWYWx1ZVwiOmk9czticmVhaztjYXNlXCJtdWx0aXBsZVwiOm89cztkZWZhdWx0OmNsKGUsbixhLHMsdCxudWxsKX1uPXIsdD1pLGUubXVsdGlwbGU9ISFvLG51bGwhPW4/bmEoZSwhIW8sbiwhMSk6bnVsbCE9dCYmbmEoZSwhIW8sdCwhMCk7cmV0dXJuO2Nhc2VcInRleHRhcmVhXCI6Zm9yKGkgaW4gczQoXCJpbnZhbGlkXCIsZSkscj1hPW89bnVsbCx0KWlmKHQuaGFzT3duUHJvcGVydHkoaSkmJm51bGwhPShzPXRbaV0pKXN3aXRjaChpKXtjYXNlXCJ2YWx1ZVwiOm89czticmVhaztjYXNlXCJkZWZhdWx0VmFsdWVcIjphPXM7YnJlYWs7Y2FzZVwiY2hpbGRyZW5cIjpyPXM7YnJlYWs7Y2FzZVwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIjppZihudWxsIT1zKXRocm93IEVycm9yKGwoOTEpKTticmVhaztkZWZhdWx0OmNsKGUsbixpLHMsdCxudWxsKX1ubChlLG8sYSxyKTtyZXR1cm47Y2FzZVwib3B0aW9uXCI6Zm9yKGMgaW4gdCl0Lmhhc093blByb3BlcnR5KGMpJiZudWxsIT0obz10W2NdKSYmKFwic2VsZWN0ZWRcIj09PWM/ZS5zZWxlY3RlZD1vJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBvJiZcInN5bWJvbFwiIT10eXBlb2YgbzpjbChlLG4sYyxvLHQsbnVsbCkpO3JldHVybjtjYXNlXCJkaWFsb2dcIjpzNChcImJlZm9yZXRvZ2dsZVwiLGUpLHM0KFwidG9nZ2xlXCIsZSksczQoXCJjYW5jZWxcIixlKSxzNChcImNsb3NlXCIsZSk7YnJlYWs7Y2FzZVwiaWZyYW1lXCI6Y2FzZVwib2JqZWN0XCI6czQoXCJsb2FkXCIsZSk7YnJlYWs7Y2FzZVwidmlkZW9cIjpjYXNlXCJhdWRpb1wiOmZvcihvPTA7bzxzMC5sZW5ndGg7bysrKXM0KHMwW29dLGUpO2JyZWFrO2Nhc2VcImltYWdlXCI6czQoXCJlcnJvclwiLGUpLHM0KFwibG9hZFwiLGUpO2JyZWFrO2Nhc2VcImRldGFpbHNcIjpzNChcInRvZ2dsZVwiLGUpO2JyZWFrO2Nhc2VcImVtYmVkXCI6Y2FzZVwic291cmNlXCI6Y2FzZVwibGlua1wiOnM0KFwiZXJyb3JcIixlKSxzNChcImxvYWRcIixlKTtjYXNlXCJhcmVhXCI6Y2FzZVwiYmFzZVwiOmNhc2VcImJyXCI6Y2FzZVwiY29sXCI6Y2FzZVwiaHJcIjpjYXNlXCJrZXlnZW5cIjpjYXNlXCJtZXRhXCI6Y2FzZVwicGFyYW1cIjpjYXNlXCJ0cmFja1wiOmNhc2VcIndiclwiOmNhc2VcIm1lbnVpdGVtXCI6Zm9yKHUgaW4gdClpZih0Lmhhc093blByb3BlcnR5KHUpJiZudWxsIT0obz10W3VdKSlzd2l0Y2godSl7Y2FzZVwiY2hpbGRyZW5cIjpjYXNlXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOnRocm93IEVycm9yKGwoMTM3LG4pKTtkZWZhdWx0OmNsKGUsbix1LG8sdCxudWxsKX1yZXR1cm47ZGVmYXVsdDppZihuZihuKSl7Zm9yKGQgaW4gdCl0Lmhhc093blByb3BlcnR5KGQpJiZ2b2lkIDAhPT0obz10W2RdKSYmY3MoZSxuLGQsbyx0LHZvaWQgMCk7cmV0dXJufX1mb3IocyBpbiB0KXQuaGFzT3duUHJvcGVydHkocykmJm51bGwhPShvPXRbc10pJiZjbChlLG4scyxvLHQsbnVsbCl9dmFyIGN1PW51bGwsY2Q9bnVsbDtmdW5jdGlvbiBjZihlKXtyZXR1cm4gOT09PWUubm9kZVR5cGU/ZTplLm93bmVyRG9jdW1lbnR9ZnVuY3Rpb24gY3AoZSl7c3dpdGNoKGUpe2Nhc2VcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI6cmV0dXJuIDE7Y2FzZVwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiOnJldHVybiAyO2RlZmF1bHQ6cmV0dXJuIDB9fWZ1bmN0aW9uIGNoKGUsbil7aWYoMD09PWUpc3dpdGNoKG4pe2Nhc2VcInN2Z1wiOnJldHVybiAxO2Nhc2VcIm1hdGhcIjpyZXR1cm4gMjtkZWZhdWx0OnJldHVybiAwfXJldHVybiAxPT09ZSYmXCJmb3JlaWduT2JqZWN0XCI9PT1uPzA6ZX1mdW5jdGlvbiBjZyhlLG4pe3JldHVyblwidGV4dGFyZWFcIj09PWV8fFwibm9zY3JpcHRcIj09PWV8fFwic3RyaW5nXCI9PXR5cGVvZiBuLmNoaWxkcmVufHxcIm51bWJlclwiPT10eXBlb2Ygbi5jaGlsZHJlbnx8XCJiaWdpbnRcIj09dHlwZW9mIG4uY2hpbGRyZW58fFwib2JqZWN0XCI9PXR5cGVvZiBuLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MJiZudWxsIT09bi5kYW5nZXJvdXNseVNldElubmVySFRNTCYmbnVsbCE9bi5kYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWx9dmFyIGNtPW51bGwsY3Y9XCJmdW5jdGlvblwiPT10eXBlb2Ygc2V0VGltZW91dD9zZXRUaW1lb3V0OnZvaWQgMCxjYj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0OnZvaWQgMCxjeT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBQcm9taXNlP1Byb21pc2U6dm9pZCAwLGN4PVwiZnVuY3Rpb25cIj09dHlwZW9mIHF1ZXVlTWljcm90YXNrP3F1ZXVlTWljcm90YXNrOnZvaWQgMCE9PWN5P2Z1bmN0aW9uKGUpe3JldHVybiBjeS5yZXNvbHZlKG51bGwpLnRoZW4oZSkuY2F0Y2goY3cpfTpjdjtmdW5jdGlvbiBjdyhlKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgZX0pfWZ1bmN0aW9uIGNqKGUpe3JldHVyblwiaGVhZFwiPT09ZX1mdW5jdGlvbiBjayhlLG4pe3ZhciB0PW4scj0wO2Rve3ZhciBvPXQubmV4dFNpYmxpbmc7aWYoZS5yZW1vdmVDaGlsZCh0KSxvJiY4PT09by5ub2RlVHlwZSlpZihcIi8kXCI9PT0odD1vLmRhdGEpfHxcIi8mXCI9PT10KXtpZigwPT09cil7ZS5yZW1vdmVDaGlsZChvKSx1RShuKTtyZXR1cm59ci0tfWVsc2UgaWYoXCIkXCI9PT10fHxcIiQ/XCI9PT10fHxcIiR+XCI9PT10fHxcIiQhXCI9PT10fHxcIiZcIj09PXQpcisrO2Vsc2UgaWYoXCJodG1sXCI9PT10KWNSKGUub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpO2Vsc2UgaWYoXCJoZWFkXCI9PT10KXtjUih0PWUub3duZXJEb2N1bWVudC5oZWFkKTtmb3IodmFyIGE9dC5maXJzdENoaWxkO2E7KXt2YXIgaT1hLm5leHRTaWJsaW5nLGw9YS5ub2RlTmFtZTthW2VVXXx8XCJTQ1JJUFRcIj09PWx8fFwiU1RZTEVcIj09PWx8fFwiTElOS1wiPT09bCYmXCJzdHlsZXNoZWV0XCI9PT1hLnJlbC50b0xvd2VyQ2FzZSgpfHx0LnJlbW92ZUNoaWxkKGEpLGE9aX19ZWxzZVwiYm9keVwiPT09dCYmY1IoZS5vd25lckRvY3VtZW50LmJvZHkpO3Q9b313aGlsZSh0KTt1RShuKX1mdW5jdGlvbiBjQShlLG4pe3ZhciB0PWU7ZT0wO2Rve3ZhciByPXQubmV4dFNpYmxpbmc7aWYoMT09PXQubm9kZVR5cGU/bj8odC5fc3Rhc2hlZERpc3BsYXk9dC5zdHlsZS5kaXNwbGF5LHQuc3R5bGUuZGlzcGxheT1cIm5vbmVcIik6KHQuc3R5bGUuZGlzcGxheT10Ll9zdGFzaGVkRGlzcGxheXx8XCJcIixcIlwiPT09dC5nZXRBdHRyaWJ1dGUoXCJzdHlsZVwiKSYmdC5yZW1vdmVBdHRyaWJ1dGUoXCJzdHlsZVwiKSk6Mz09PXQubm9kZVR5cGUmJihuPyh0Ll9zdGFzaGVkVGV4dD10Lm5vZGVWYWx1ZSx0Lm5vZGVWYWx1ZT1cIlwiKTp0Lm5vZGVWYWx1ZT10Ll9zdGFzaGVkVGV4dHx8XCJcIiksciYmOD09PXIubm9kZVR5cGUpaWYoXCIvJFwiPT09KHQ9ci5kYXRhKSlpZigwPT09ZSlicmVhaztlbHNlIGUtLTtlbHNlXCIkXCIhPT10JiZcIiQ/XCIhPT10JiZcIiR+XCIhPT10JiZcIiQhXCIhPT10fHxlKys7dD1yfXdoaWxlKHQpfWZ1bmN0aW9uIGNPKGUpe3ZhciBuPWUuZmlyc3RDaGlsZDtmb3IobiYmMTA9PT1uLm5vZGVUeXBlJiYobj1uLm5leHRTaWJsaW5nKTtuOyl7dmFyIHQ9bjtzd2l0Y2gobj1uLm5leHRTaWJsaW5nLHQubm9kZU5hbWUpe2Nhc2VcIkhUTUxcIjpjYXNlXCJIRUFEXCI6Y2FzZVwiQk9EWVwiOmNPKHQpLGVWKHQpO2NvbnRpbnVlO2Nhc2VcIlNDUklQVFwiOmNhc2VcIlNUWUxFXCI6Y29udGludWU7Y2FzZVwiTElOS1wiOmlmKFwic3R5bGVzaGVldFwiPT09dC5yZWwudG9Mb3dlckNhc2UoKSljb250aW51ZX1lLnJlbW92ZUNoaWxkKHQpfX1mdW5jdGlvbiBjQyhlLG4pe2Zvcig7OCE9PWUubm9kZVR5cGU7KWlmKCFufHxudWxsPT09KGU9Y18oZS5uZXh0U2libGluZykpKXJldHVybiBudWxsO3JldHVybiBlfWZ1bmN0aW9uIGNTKGUpe3JldHVyblwiJD9cIj09PWUuZGF0YXx8XCIkflwiPT09ZS5kYXRhfWZ1bmN0aW9uIGNFKGUpe3JldHVyblwiJCFcIj09PWUuZGF0YXx8XCIkP1wiPT09ZS5kYXRhJiZcImxvYWRpbmdcIiE9PWUub3duZXJEb2N1bWVudC5yZWFkeVN0YXRlfWZ1bmN0aW9uIGNfKGUpe2Zvcig7bnVsbCE9ZTtlPWUubmV4dFNpYmxpbmcpe3ZhciBuPWUubm9kZVR5cGU7aWYoMT09PW58fDM9PT1uKWJyZWFrO2lmKDg9PT1uKXtpZihcIiRcIj09PShuPWUuZGF0YSl8fFwiJCFcIj09PW58fFwiJD9cIj09PW58fFwiJH5cIj09PW58fFwiJlwiPT09bnx8XCJGIVwiPT09bnx8XCJGXCI9PT1uKWJyZWFrO2lmKFwiLyRcIj09PW58fFwiLyZcIj09PW4pcmV0dXJuIG51bGx9fXJldHVybiBlfXZhciBjUD1udWxsO2Z1bmN0aW9uIGN6KGUpe2U9ZS5uZXh0U2libGluZztmb3IodmFyIG49MDtlOyl7aWYoOD09PWUubm9kZVR5cGUpe3ZhciB0PWUuZGF0YTtpZihcIi8kXCI9PT10fHxcIi8mXCI9PT10KXtpZigwPT09bilyZXR1cm4gY18oZS5uZXh0U2libGluZyk7bi0tfWVsc2VcIiRcIiE9PXQmJlwiJCFcIiE9PXQmJlwiJD9cIiE9PXQmJlwiJH5cIiE9PXQmJlwiJlwiIT09dHx8bisrfWU9ZS5uZXh0U2libGluZ31yZXR1cm4gbnVsbH1mdW5jdGlvbiBjTChlKXtlPWUucHJldmlvdXNTaWJsaW5nO2Zvcih2YXIgbj0wO2U7KXtpZig4PT09ZS5ub2RlVHlwZSl7dmFyIHQ9ZS5kYXRhO2lmKFwiJFwiPT09dHx8XCIkIVwiPT09dHx8XCIkP1wiPT09dHx8XCIkflwiPT09dHx8XCImXCI9PT10KXtpZigwPT09bilyZXR1cm4gZTtuLS19ZWxzZVwiLyRcIiE9PXQmJlwiLyZcIiE9PXR8fG4rK31lPWUucHJldmlvdXNTaWJsaW5nfXJldHVybiBudWxsfWZ1bmN0aW9uIGNUKGUsbix0KXtzd2l0Y2gobj1jZih0KSxlKXtjYXNlXCJodG1sXCI6aWYoIShlPW4uZG9jdW1lbnRFbGVtZW50KSl0aHJvdyBFcnJvcihsKDQ1MikpO3JldHVybiBlO2Nhc2VcImhlYWRcIjppZighKGU9bi5oZWFkKSl0aHJvdyBFcnJvcihsKDQ1MykpO3JldHVybiBlO2Nhc2VcImJvZHlcIjppZighKGU9bi5ib2R5KSl0aHJvdyBFcnJvcihsKDQ1NCkpO3JldHVybiBlO2RlZmF1bHQ6dGhyb3cgRXJyb3IobCg0NTEpKX19ZnVuY3Rpb24gY1IoZSl7Zm9yKHZhciBuPWUuYXR0cmlidXRlcztuLmxlbmd0aDspZS5yZW1vdmVBdHRyaWJ1dGVOb2RlKG5bMF0pO2VWKGUpfXZhciBjTj1uZXcgTWFwLGNEPW5ldyBTZXQ7ZnVuY3Rpb24gY0IoZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZS5nZXRSb290Tm9kZT9lLmdldFJvb3ROb2RlKCk6OT09PWUubm9kZVR5cGU/ZTplLm93bmVyRG9jdW1lbnR9dmFyIGNNPVQuZDtULmQ9e2Y6ZnVuY3Rpb24oKXt2YXIgZT1jTS5mKCksbj1zcygpO3JldHVybiBlfHxufSxyOmZ1bmN0aW9uKGUpe3ZhciBuPWVXKGUpO251bGwhPT1uJiY1PT09bi50YWcmJlwiZm9ybVwiPT09bi50eXBlP2FHKG4pOmNNLnIoZSl9LEQ6ZnVuY3Rpb24oZSl7Y00uRChlKSxjSChcImRucy1wcmVmZXRjaFwiLGUsbnVsbCl9LEM6ZnVuY3Rpb24oZSxuKXtjTS5DKGUsbiksY0goXCJwcmVjb25uZWN0XCIsZSxuKX0sTDpmdW5jdGlvbihlLG4sdCl7aWYoY00uTChlLG4sdCksY0kmJmUmJm4pe3ZhciByPSdsaW5rW3JlbD1cInByZWxvYWRcIl1bYXM9XCInK25uKG4pKydcIl0nO1wiaW1hZ2VcIj09PW4mJnQmJnQuaW1hZ2VTcmNTZXQ/KHIrPSdbaW1hZ2VzcmNzZXQ9XCInK25uKHQuaW1hZ2VTcmNTZXQpKydcIl0nLFwic3RyaW5nXCI9PXR5cGVvZiB0LmltYWdlU2l6ZXMmJihyKz0nW2ltYWdlc2l6ZXM9XCInK25uKHQuaW1hZ2VTaXplcykrJ1wiXScpKTpyKz0nW2hyZWY9XCInK25uKGUpKydcIl0nO3ZhciBvPXI7c3dpdGNoKG4pe2Nhc2VcInN0eWxlXCI6bz1jVShlKTticmVhaztjYXNlXCJzY3JpcHRcIjpvPWNXKGUpfWNOLmhhcyhvKXx8KGU9Zih7cmVsOlwicHJlbG9hZFwiLGhyZWY6XCJpbWFnZVwiPT09biYmdCYmdC5pbWFnZVNyY1NldD92b2lkIDA6ZSxhczpufSx0KSxjTi5zZXQobyxlKSxudWxsIT09Y0kucXVlcnlTZWxlY3RvcihyKXx8XCJzdHlsZVwiPT09biYmY0kucXVlcnlTZWxlY3RvcihjVihvKSl8fFwic2NyaXB0XCI9PT1uJiZjSS5xdWVyeVNlbGVjdG9yKGMkKG8pKXx8KGNjKG49Y0kuY3JlYXRlRWxlbWVudChcImxpbmtcIiksXCJsaW5rXCIsZSksZVkobiksY0kuaGVhZC5hcHBlbmRDaGlsZChuKSkpfX0sbTpmdW5jdGlvbihlLG4pe2lmKGNNLm0oZSxuKSxjSSYmZSl7dmFyIHQ9biYmXCJzdHJpbmdcIj09dHlwZW9mIG4uYXM/bi5hczpcInNjcmlwdFwiLHI9J2xpbmtbcmVsPVwibW9kdWxlcHJlbG9hZFwiXVthcz1cIicrbm4odCkrJ1wiXVtocmVmPVwiJytubihlKSsnXCJdJyxvPXI7c3dpdGNoKHQpe2Nhc2VcImF1ZGlvd29ya2xldFwiOmNhc2VcInBhaW50d29ya2xldFwiOmNhc2VcInNlcnZpY2V3b3JrZXJcIjpjYXNlXCJzaGFyZWR3b3JrZXJcIjpjYXNlXCJ3b3JrZXJcIjpjYXNlXCJzY3JpcHRcIjpvPWNXKGUpfWlmKCFjTi5oYXMobykmJihlPWYoe3JlbDpcIm1vZHVsZXByZWxvYWRcIixocmVmOmV9LG4pLGNOLnNldChvLGUpLG51bGw9PT1jSS5xdWVyeVNlbGVjdG9yKHIpKSl7c3dpdGNoKHQpe2Nhc2VcImF1ZGlvd29ya2xldFwiOmNhc2VcInBhaW50d29ya2xldFwiOmNhc2VcInNlcnZpY2V3b3JrZXJcIjpjYXNlXCJzaGFyZWR3b3JrZXJcIjpjYXNlXCJ3b3JrZXJcIjpjYXNlXCJzY3JpcHRcIjppZihjSS5xdWVyeVNlbGVjdG9yKGMkKG8pKSlyZXR1cm59Y2ModD1jSS5jcmVhdGVFbGVtZW50KFwibGlua1wiKSxcImxpbmtcIixlKSxlWSh0KSxjSS5oZWFkLmFwcGVuZENoaWxkKHQpfX19LFg6ZnVuY3Rpb24oZSxuKXtpZihjTS5YKGUsbiksY0kmJmUpe3ZhciB0PWVaKGNJKS5ob2lzdGFibGVTY3JpcHRzLHI9Y1coZSksbz10LmdldChyKTtvfHwoKG89Y0kucXVlcnlTZWxlY3RvcihjJChyKSkpfHwoZT1mKHtzcmM6ZSxhc3luYzohMH0sbiksKG49Y04uZ2V0KHIpKSYmY0soZSxuKSxlWShvPWNJLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIikpLGNjKG8sXCJsaW5rXCIsZSksY0kuaGVhZC5hcHBlbmRDaGlsZChvKSksbz17dHlwZTpcInNjcmlwdFwiLGluc3RhbmNlOm8sY291bnQ6MSxzdGF0ZTpudWxsfSx0LnNldChyLG8pKX19LFM6ZnVuY3Rpb24oZSxuLHQpe2lmKGNNLlMoZSxuLHQpLGNJJiZlKXt2YXIgcj1lWihjSSkuaG9pc3RhYmxlU3R5bGVzLG89Y1UoZSk7bj1ufHxcImRlZmF1bHRcIjt2YXIgYT1yLmdldChvKTtpZighYSl7dmFyIGk9e2xvYWRpbmc6MCxwcmVsb2FkOm51bGx9O2lmKGE9Y0kucXVlcnlTZWxlY3RvcihjVihvKSkpaS5sb2FkaW5nPTU7ZWxzZXtlPWYoe3JlbDpcInN0eWxlc2hlZXRcIixocmVmOmUsXCJkYXRhLXByZWNlZGVuY2VcIjpufSx0KSwodD1jTi5nZXQobykpJiZjWChlLHQpO3ZhciBsPWE9Y0kuY3JlYXRlRWxlbWVudChcImxpbmtcIik7ZVkobCksY2MobCxcImxpbmtcIixlKSxsLl9wPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGUsbil7bC5vbmxvYWQ9ZSxsLm9uZXJyb3I9bn0pLGwuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIixmdW5jdGlvbigpe2kubG9hZGluZ3w9MX0pLGwuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsZnVuY3Rpb24oKXtpLmxvYWRpbmd8PTJ9KSxpLmxvYWRpbmd8PTQsY1koYSxuLGNJKX1hPXt0eXBlOlwic3R5bGVzaGVldFwiLGluc3RhbmNlOmEsY291bnQ6MSxzdGF0ZTppfSxyLnNldChvLGEpfX19LE06ZnVuY3Rpb24oZSxuKXtpZihjTS5NKGUsbiksY0kmJmUpe3ZhciB0PWVaKGNJKS5ob2lzdGFibGVTY3JpcHRzLHI9Y1coZSksbz10LmdldChyKTtvfHwoKG89Y0kucXVlcnlTZWxlY3RvcihjJChyKSkpfHwoZT1mKHtzcmM6ZSxhc3luYzohMCx0eXBlOlwibW9kdWxlXCJ9LG4pLChuPWNOLmdldChyKSkmJmNLKGUsbiksZVkobz1jSS5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpKSxjYyhvLFwibGlua1wiLGUpLGNJLmhlYWQuYXBwZW5kQ2hpbGQobykpLG89e3R5cGU6XCJzY3JpcHRcIixpbnN0YW5jZTpvLGNvdW50OjEsc3RhdGU6bnVsbH0sdC5zZXQocixvKSl9fX07dmFyIGNJPVwidW5kZWZpbmVkXCI9PXR5cGVvZiBkb2N1bWVudD9udWxsOmRvY3VtZW50O2Z1bmN0aW9uIGNIKGUsbix0KXtpZihjSSYmXCJzdHJpbmdcIj09dHlwZW9mIG4mJm4pe3ZhciByPW5uKG4pO3I9J2xpbmtbcmVsPVwiJytlKydcIl1baHJlZj1cIicrcisnXCJdJyxcInN0cmluZ1wiPT10eXBlb2YgdCYmKHIrPSdbY3Jvc3NvcmlnaW49XCInK3QrJ1wiXScpLGNELmhhcyhyKXx8KGNELmFkZChyKSxlPXtyZWw6ZSxjcm9zc09yaWdpbjp0LGhyZWY6bn0sbnVsbD09PWNJLnF1ZXJ5U2VsZWN0b3IocikmJihjYyhuPWNJLmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpLFwibGlua1wiLGUpLGVZKG4pLGNJLmhlYWQuYXBwZW5kQ2hpbGQobikpKX19ZnVuY3Rpb24gY0YoZSxuLHQscil7dmFyIG89KG89VS5jdXJyZW50KT9jQihvKTpudWxsO2lmKCFvKXRocm93IEVycm9yKGwoNDQ2KSk7c3dpdGNoKGUpe2Nhc2VcIm1ldGFcIjpjYXNlXCJ0aXRsZVwiOnJldHVybiBudWxsO2Nhc2VcInN0eWxlXCI6cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQucHJlY2VkZW5jZSYmXCJzdHJpbmdcIj09dHlwZW9mIHQuaHJlZj8obj1jVSh0LmhyZWYpLChyPSh0PWVaKG8pLmhvaXN0YWJsZVN0eWxlcykuZ2V0KG4pKXx8KHI9e3R5cGU6XCJzdHlsZVwiLGluc3RhbmNlOm51bGwsY291bnQ6MCxzdGF0ZTpudWxsfSx0LnNldChuLHIpKSxyKTp7dHlwZTpcInZvaWRcIixpbnN0YW5jZTpudWxsLGNvdW50OjAsc3RhdGU6bnVsbH07Y2FzZVwibGlua1wiOmlmKFwic3R5bGVzaGVldFwiPT09dC5yZWwmJlwic3RyaW5nXCI9PXR5cGVvZiB0LmhyZWYmJlwic3RyaW5nXCI9PXR5cGVvZiB0LnByZWNlZGVuY2Upe2U9Y1UodC5ocmVmKTt2YXIgYSxpLHMsYyx1PWVaKG8pLmhvaXN0YWJsZVN0eWxlcyxkPXUuZ2V0KGUpO2lmKGR8fChvPW8ub3duZXJEb2N1bWVudHx8byxkPXt0eXBlOlwic3R5bGVzaGVldFwiLGluc3RhbmNlOm51bGwsY291bnQ6MCxzdGF0ZTp7bG9hZGluZzowLHByZWxvYWQ6bnVsbH19LHUuc2V0KGUsZCksKHU9by5xdWVyeVNlbGVjdG9yKGNWKGUpKSkmJiF1Ll9wJiYoZC5pbnN0YW5jZT11LGQuc3RhdGUubG9hZGluZz01KSxjTi5oYXMoZSl8fCh0PXtyZWw6XCJwcmVsb2FkXCIsYXM6XCJzdHlsZVwiLGhyZWY6dC5ocmVmLGNyb3NzT3JpZ2luOnQuY3Jvc3NPcmlnaW4saW50ZWdyaXR5OnQuaW50ZWdyaXR5LG1lZGlhOnQubWVkaWEsaHJlZkxhbmc6dC5ocmVmTGFuZyxyZWZlcnJlclBvbGljeTp0LnJlZmVycmVyUG9saWN5fSxjTi5zZXQoZSx0KSx1fHwoYT1vLGk9ZSxzPXQsYz1kLnN0YXRlLGEucXVlcnlTZWxlY3RvcignbGlua1tyZWw9XCJwcmVsb2FkXCJdW2FzPVwic3R5bGVcIl1bJytpK1wiXVwiKT9jLmxvYWRpbmc9MTooYy5wcmVsb2FkPWk9YS5jcmVhdGVFbGVtZW50KFwibGlua1wiKSxpLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsZnVuY3Rpb24oKXtyZXR1cm4gYy5sb2FkaW5nfD0xfSksaS5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIixmdW5jdGlvbigpe3JldHVybiBjLmxvYWRpbmd8PTJ9KSxjYyhpLFwibGlua1wiLHMpLGVZKGkpLGEuaGVhZC5hcHBlbmRDaGlsZChpKSkpKSksbiYmbnVsbD09PXIpdGhyb3cgRXJyb3IobCg1MjgsXCJcIikpO3JldHVybiBkfWlmKG4mJm51bGwhPT1yKXRocm93IEVycm9yKGwoNTI5LFwiXCIpKTtyZXR1cm4gbnVsbDtjYXNlXCJzY3JpcHRcIjpyZXR1cm4gbj10LmFzeW5jLFwic3RyaW5nXCI9PXR5cGVvZih0PXQuc3JjKSYmbiYmXCJmdW5jdGlvblwiIT10eXBlb2YgbiYmXCJzeW1ib2xcIiE9dHlwZW9mIG4/KG49Y1codCksKHI9KHQ9ZVoobykuaG9pc3RhYmxlU2NyaXB0cykuZ2V0KG4pKXx8KHI9e3R5cGU6XCJzY3JpcHRcIixpbnN0YW5jZTpudWxsLGNvdW50OjAsc3RhdGU6bnVsbH0sdC5zZXQobixyKSkscik6e3R5cGU6XCJ2b2lkXCIsaW5zdGFuY2U6bnVsbCxjb3VudDowLHN0YXRlOm51bGx9O2RlZmF1bHQ6dGhyb3cgRXJyb3IobCg0NDQsZSkpfX1mdW5jdGlvbiBjVShlKXtyZXR1cm4naHJlZj1cIicrbm4oZSkrJ1wiJ31mdW5jdGlvbiBjVihlKXtyZXR1cm4nbGlua1tyZWw9XCJzdHlsZXNoZWV0XCJdWycrZStcIl1cIn1mdW5jdGlvbiBjcShlKXtyZXR1cm4gZih7fSxlLHtcImRhdGEtcHJlY2VkZW5jZVwiOmUucHJlY2VkZW5jZSxwcmVjZWRlbmNlOm51bGx9KX1mdW5jdGlvbiBjVyhlKXtyZXR1cm4nW3NyYz1cIicrbm4oZSkrJ1wiXSd9ZnVuY3Rpb24gYyQoZSl7cmV0dXJuXCJzY3JpcHRbYXN5bmNdXCIrZX1mdW5jdGlvbiBjWihlLG4sdCl7aWYobi5jb3VudCsrLG51bGw9PT1uLmluc3RhbmNlKXN3aXRjaChuLnR5cGUpe2Nhc2VcInN0eWxlXCI6dmFyIHI9ZS5xdWVyeVNlbGVjdG9yKCdzdHlsZVtkYXRhLWhyZWZ+PVwiJytubih0LmhyZWYpKydcIl0nKTtpZihyKXJldHVybiBuLmluc3RhbmNlPXIsZVkocikscjt2YXIgbz1mKHt9LHQse1wiZGF0YS1ocmVmXCI6dC5ocmVmLFwiZGF0YS1wcmVjZWRlbmNlXCI6dC5wcmVjZWRlbmNlLGhyZWY6bnVsbCxwcmVjZWRlbmNlOm51bGx9KTtyZXR1cm4gZVkocj0oZS5vd25lckRvY3VtZW50fHxlKS5jcmVhdGVFbGVtZW50KFwic3R5bGVcIikpLGNjKHIsXCJzdHlsZVwiLG8pLGNZKHIsdC5wcmVjZWRlbmNlLGUpLG4uaW5zdGFuY2U9cjtjYXNlXCJzdHlsZXNoZWV0XCI6bz1jVSh0LmhyZWYpO3ZhciBhPWUucXVlcnlTZWxlY3RvcihjVihvKSk7aWYoYSlyZXR1cm4gbi5zdGF0ZS5sb2FkaW5nfD00LG4uaW5zdGFuY2U9YSxlWShhKSxhO3I9Y3EodCksKG89Y04uZ2V0KG8pKSYmY1gocixvKSxlWShhPShlLm93bmVyRG9jdW1lbnR8fGUpLmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpKTt2YXIgaT1hO3JldHVybiBpLl9wPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGUsbil7aS5vbmxvYWQ9ZSxpLm9uZXJyb3I9bn0pLGNjKGEsXCJsaW5rXCIsciksbi5zdGF0ZS5sb2FkaW5nfD00LGNZKGEsdC5wcmVjZWRlbmNlLGUpLG4uaW5zdGFuY2U9YTtjYXNlXCJzY3JpcHRcIjppZihhPWNXKHQuc3JjKSxvPWUucXVlcnlTZWxlY3RvcihjJChhKSkpcmV0dXJuIG4uaW5zdGFuY2U9byxlWShvKSxvO3JldHVybiByPXQsKG89Y04uZ2V0KGEpKSYmY0socj1mKHt9LHQpLG8pLGVZKG89KGU9ZS5vd25lckRvY3VtZW50fHxlKS5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpKSxjYyhvLFwibGlua1wiLHIpLGUuaGVhZC5hcHBlbmRDaGlsZChvKSxuLmluc3RhbmNlPW87Y2FzZVwidm9pZFwiOnJldHVybiBudWxsO2RlZmF1bHQ6dGhyb3cgRXJyb3IobCg0NDMsbi50eXBlKSl9cmV0dXJuXCJzdHlsZXNoZWV0XCI9PT1uLnR5cGUmJjA9PSg0Jm4uc3RhdGUubG9hZGluZykmJihyPW4uaW5zdGFuY2Usbi5zdGF0ZS5sb2FkaW5nfD00LGNZKHIsdC5wcmVjZWRlbmNlLGUpKSxuLmluc3RhbmNlfWZ1bmN0aW9uIGNZKGUsbix0KXtmb3IodmFyIHI9dC5xdWVyeVNlbGVjdG9yQWxsKCdsaW5rW3JlbD1cInN0eWxlc2hlZXRcIl1bZGF0YS1wcmVjZWRlbmNlXSxzdHlsZVtkYXRhLXByZWNlZGVuY2VdJyksbz1yLmxlbmd0aD9yW3IubGVuZ3RoLTFdOm51bGwsYT1vLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGw9cltpXTtpZihsLmRhdGFzZXQucHJlY2VkZW5jZT09PW4pYT1sO2Vsc2UgaWYoYSE9PW8pYnJlYWt9YT9hLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsYS5uZXh0U2libGluZyk6KG49OT09PXQubm9kZVR5cGU/dC5oZWFkOnQpLmluc2VydEJlZm9yZShlLG4uZmlyc3RDaGlsZCl9ZnVuY3Rpb24gY1goZSxuKXtudWxsPT1lLmNyb3NzT3JpZ2luJiYoZS5jcm9zc09yaWdpbj1uLmNyb3NzT3JpZ2luKSxudWxsPT1lLnJlZmVycmVyUG9saWN5JiYoZS5yZWZlcnJlclBvbGljeT1uLnJlZmVycmVyUG9saWN5KSxudWxsPT1lLnRpdGxlJiYoZS50aXRsZT1uLnRpdGxlKX1mdW5jdGlvbiBjSyhlLG4pe251bGw9PWUuY3Jvc3NPcmlnaW4mJihlLmNyb3NzT3JpZ2luPW4uY3Jvc3NPcmlnaW4pLG51bGw9PWUucmVmZXJyZXJQb2xpY3kmJihlLnJlZmVycmVyUG9saWN5PW4ucmVmZXJyZXJQb2xpY3kpLG51bGw9PWUuaW50ZWdyaXR5JiYoZS5pbnRlZ3JpdHk9bi5pbnRlZ3JpdHkpfXZhciBjUT1udWxsO2Z1bmN0aW9uIGNHKGUsbix0KXtpZihudWxsPT09Y1Epe3ZhciByPW5ldyBNYXAsbz1jUT1uZXcgTWFwO28uc2V0KHQscil9ZWxzZShyPShvPWNRKS5nZXQodCkpfHwocj1uZXcgTWFwLG8uc2V0KHQscikpO2lmKHIuaGFzKGUpKXJldHVybiByO2ZvcihyLnNldChlLG51bGwpLHQ9dC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBhPXRbb107aWYoIShhW2VVXXx8YVtlTl18fFwibGlua1wiPT09ZSYmXCJzdHlsZXNoZWV0XCI9PT1hLmdldEF0dHJpYnV0ZShcInJlbFwiKSkmJlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiE9PWEubmFtZXNwYWNlVVJJKXt2YXIgaT1hLmdldEF0dHJpYnV0ZShuKXx8XCJcIjtpPWUraTt2YXIgbD1yLmdldChpKTtsP2wucHVzaChhKTpyLnNldChpLFthXSl9fXJldHVybiByfWZ1bmN0aW9uIGNKKGUsbix0KXsoZT1lLm93bmVyRG9jdW1lbnR8fGUpLmhlYWQuaW5zZXJ0QmVmb3JlKHQsXCJ0aXRsZVwiPT09bj9lLnF1ZXJ5U2VsZWN0b3IoXCJoZWFkID4gdGl0bGVcIik6bnVsbCl9ZnVuY3Rpb24gYzAoZSl7cmV0dXJuXCJzdHlsZXNoZWV0XCIhPT1lLnR5cGV8fDAhPSgzJmUuc3RhdGUubG9hZGluZyl9dmFyIGMxPW51bGw7ZnVuY3Rpb24gYzIoKXtpZih0aGlzLmNvdW50LS0sMD09PXRoaXMuY291bnQpe2lmKHRoaXMuc3R5bGVzaGVldHMpYzUodGhpcyx0aGlzLnN0eWxlc2hlZXRzKTtlbHNlIGlmKHRoaXMudW5zdXNwZW5kKXt2YXIgZT10aGlzLnVuc3VzcGVuZDt0aGlzLnVuc3VzcGVuZD1udWxsLGUoKX19fXZhciBjND1udWxsO2Z1bmN0aW9uIGM1KGUsbil7ZS5zdHlsZXNoZWV0cz1udWxsLG51bGwhPT1lLnVuc3VzcGVuZCYmKGUuY291bnQrKyxjND1uZXcgTWFwLG4uZm9yRWFjaChjMyxlKSxjND1udWxsLGMyLmNhbGwoZSkpfWZ1bmN0aW9uIGMzKGUsbil7aWYoISg0Jm4uc3RhdGUubG9hZGluZykpe3ZhciB0PWM0LmdldChlKTtpZih0KXZhciByPXQuZ2V0KG51bGwpO2Vsc2V7dD1uZXcgTWFwLGM0LnNldChlLHQpO2Zvcih2YXIgbz1lLnF1ZXJ5U2VsZWN0b3JBbGwoXCJsaW5rW2RhdGEtcHJlY2VkZW5jZV0sc3R5bGVbZGF0YS1wcmVjZWRlbmNlXVwiKSxhPTA7YTxvLmxlbmd0aDthKyspe3ZhciBpPW9bYV07KFwiTElOS1wiPT09aS5ub2RlTmFtZXx8XCJub3QgYWxsXCIhPT1pLmdldEF0dHJpYnV0ZShcIm1lZGlhXCIpKSYmKHQuc2V0KGkuZGF0YXNldC5wcmVjZWRlbmNlLGkpLHI9aSl9ciYmdC5zZXQobnVsbCxyKX1pPShvPW4uaW5zdGFuY2UpLmdldEF0dHJpYnV0ZShcImRhdGEtcHJlY2VkZW5jZVwiKSwoYT10LmdldChpKXx8cik9PT1yJiZ0LnNldChudWxsLG8pLHQuc2V0KGksbyksdGhpcy5jb3VudCsrLHI9YzIuYmluZCh0aGlzKSxvLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsciksby5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIixyKSxhP2EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobyxhLm5leHRTaWJsaW5nKTooZT05PT09ZS5ub2RlVHlwZT9lLmhlYWQ6ZSkuaW5zZXJ0QmVmb3JlKG8sZS5maXJzdENoaWxkKSxuLnN0YXRlLmxvYWRpbmd8PTR9fXZhciBjNj17JCR0eXBlb2Y6eCxQcm92aWRlcjpudWxsLENvbnN1bWVyOm51bGwsX2N1cnJlbnRWYWx1ZTpSLF9jdXJyZW50VmFsdWUyOlIsX3RocmVhZENvdW50OjB9O2Z1bmN0aW9uIGM5KGUsbix0LHIsbyxhLGksbCxzKXt0aGlzLnRhZz0xLHRoaXMuY29udGFpbmVySW5mbz1lLHRoaXMucGluZ0NhY2hlPXRoaXMuY3VycmVudD10aGlzLnBlbmRpbmdDaGlsZHJlbj1udWxsLHRoaXMudGltZW91dEhhbmRsZT0tMSx0aGlzLmNhbGxiYWNrTm9kZT10aGlzLm5leHQ9dGhpcy5wZW5kaW5nQ29udGV4dD10aGlzLmNvbnRleHQ9dGhpcy5jYW5jZWxQZW5kaW5nQ29tbWl0PW51bGwsdGhpcy5jYWxsYmFja1ByaW9yaXR5PTAsdGhpcy5leHBpcmF0aW9uVGltZXM9ZU8oLTEpLHRoaXMuZW50YW5nbGVkTGFuZXM9dGhpcy5zaGVsbFN1c3BlbmRDb3VudGVyPXRoaXMuZXJyb3JSZWNvdmVyeURpc2FibGVkTGFuZXM9dGhpcy5leHBpcmVkTGFuZXM9dGhpcy53YXJtTGFuZXM9dGhpcy5waW5nZWRMYW5lcz10aGlzLnN1c3BlbmRlZExhbmVzPXRoaXMucGVuZGluZ0xhbmVzPTAsdGhpcy5lbnRhbmdsZW1lbnRzPWVPKDApLHRoaXMuaGlkZGVuVXBkYXRlcz1lTyhudWxsKSx0aGlzLmlkZW50aWZpZXJQcmVmaXg9cix0aGlzLm9uVW5jYXVnaHRFcnJvcj1vLHRoaXMub25DYXVnaHRFcnJvcj1hLHRoaXMub25SZWNvdmVyYWJsZUVycm9yPWksdGhpcy5wb29sZWRDYWNoZT1udWxsLHRoaXMucG9vbGVkQ2FjaGVMYW5lcz0wLHRoaXMuZm9ybVN0YXRlPXMsdGhpcy5pbmNvbXBsZXRlVHJhbnNpdGlvbnM9bmV3IE1hcH1mdW5jdGlvbiBjOChlLG4sdCxyLG8sYSl7bz1vP3Q4OnQ4LG51bGw9PT1yLmNvbnRleHQ/ci5jb250ZXh0PW86ci5wZW5kaW5nQ29udGV4dD1vLChyPW9BKG4pKS5wYXlsb2FkPXtlbGVtZW50OnR9LG51bGwhPT0oYT12b2lkIDA9PT1hP251bGw6YSkmJihyLmNhbGxiYWNrPWEpLG51bGwhPT0odD1vTyhlLHIsbikpJiYoc28odCxlLG4pLG9DKHQsZSxuKSl9ZnVuY3Rpb24gYzcoZSxuKXtpZihudWxsIT09KGU9ZS5tZW1vaXplZFN0YXRlKSYmbnVsbCE9PWUuZGVoeWRyYXRlZCl7dmFyIHQ9ZS5yZXRyeUxhbmU7ZS5yZXRyeUxhbmU9MCE9PXQmJnQ8bj90Om59fWZ1bmN0aW9uIHVlKGUsbil7YzcoZSxuKSwoZT1lLmFsdGVybmF0ZSkmJmM3KGUsbil9ZnVuY3Rpb24gdW4oZSl7aWYoMTM9PT1lLnRhZ3x8MzE9PT1lLnRhZyl7dmFyIG49dDMoZSwweDQwMDAwMDApO251bGwhPT1uJiZzbyhuLGUsMHg0MDAwMDAwKSx1ZShlLDB4NDAwMDAwMCl9fWZ1bmN0aW9uIHV0KGUpe2lmKDEzPT09ZS50YWd8fDMxPT09ZS50YWcpe3ZhciBuPXN0KCksdD10MyhlLG49ZVAobikpO251bGwhPT10JiZzbyh0LGUsbiksdWUoZSxuKX19dmFyIHVyPSEwO2Z1bmN0aW9uIHVvKGUsbix0LHIpe3ZhciBvPUwuVDtMLlQ9bnVsbDt2YXIgYT1ULnA7dHJ5e1QucD0yLHVpKGUsbix0LHIpfWZpbmFsbHl7VC5wPWEsTC5UPW99fWZ1bmN0aW9uIHVhKGUsbix0LHIpe3ZhciBvPUwuVDtMLlQ9bnVsbDt2YXIgYT1ULnA7dHJ5e1QucD04LHVpKGUsbix0LHIpfWZpbmFsbHl7VC5wPWEsTC5UPW99fWZ1bmN0aW9uIHVpKGUsbix0LHIpe2lmKHVyKXt2YXIgbz11bChyKTtpZihudWxsPT09bylzOChlLG4scix1cyx0KSx1eShlLHIpO2Vsc2UgaWYoZnVuY3Rpb24oZSxuLHQscixvKXtzd2l0Y2gobil7Y2FzZVwiZm9jdXNpblwiOnJldHVybiB1Zj11eCh1ZixlLG4sdCxyLG8pLCEwO2Nhc2VcImRyYWdlbnRlclwiOnJldHVybiB1cD11eCh1cCxlLG4sdCxyLG8pLCEwO2Nhc2VcIm1vdXNlb3ZlclwiOnJldHVybiB1aD11eCh1aCxlLG4sdCxyLG8pLCEwO2Nhc2VcInBvaW50ZXJvdmVyXCI6dmFyIGE9by5wb2ludGVySWQ7cmV0dXJuIHVnLnNldChhLHV4KHVnLmdldChhKXx8bnVsbCxlLG4sdCxyLG8pKSwhMDtjYXNlXCJnb3Rwb2ludGVyY2FwdHVyZVwiOnJldHVybiBhPW8ucG9pbnRlcklkLHVtLnNldChhLHV4KHVtLmdldChhKXx8bnVsbCxlLG4sdCxyLG8pKSwhMH1yZXR1cm4hMX0obyxlLG4sdCxyKSlyLnN0b3BQcm9wYWdhdGlvbigpO2Vsc2UgaWYodXkoZSxyKSw0Jm4mJi0xPHViLmluZGV4T2YoZSkpe2Zvcig7bnVsbCE9PW87KXt2YXIgYT1lVyhvKTtpZihudWxsIT09YSlzd2l0Y2goYS50YWcpe2Nhc2UgMzppZigoYT1hLnN0YXRlTm9kZSkuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCl7dmFyIGk9ZXgoYS5wZW5kaW5nTGFuZXMpO2lmKDAhPT1pKXt2YXIgbD1hO2ZvcihsLnBlbmRpbmdMYW5lc3w9MixsLmVudGFuZ2xlZExhbmVzfD0yO2k7KXt2YXIgcz0xPDwzMS1lZyhpKTtsLmVudGFuZ2xlbWVudHNbMV18PXMsaSY9fnN9c1UoYSksMD09KDYmbFIpJiYobDA9ZXIoKSs1MDAsc1YoMCwhMSkpfX1icmVhaztjYXNlIDMxOmNhc2UgMTM6bnVsbCE9PShsPXQzKGEsMikpJiZzbyhsLGEsMiksc3MoKSx1ZShhLDIpfWlmKG51bGw9PT0oYT11bChyKSkmJnM4KGUsbixyLHVzLHQpLGE9PT1vKWJyZWFrO289YX1udWxsIT09byYmci5zdG9wUHJvcGFnYXRpb24oKX1lbHNlIHM4KGUsbixyLG51bGwsdCl9fWZ1bmN0aW9uIHVsKGUpe3JldHVybiB1YyhlPW5iKGUpKX12YXIgdXM9bnVsbDtmdW5jdGlvbiB1YyhlKXtpZih1cz1udWxsLG51bGwhPT0oZT1lcShlKSkpe3ZhciBuPXMoZSk7aWYobnVsbD09PW4pZT1udWxsO2Vsc2V7dmFyIHQ9bi50YWc7aWYoMTM9PT10KXtpZihudWxsIT09KGU9YyhuKSkpcmV0dXJuIGU7ZT1udWxsfWVsc2UgaWYoMzE9PT10KXtpZihudWxsIT09KGU9dShuKSkpcmV0dXJuIGU7ZT1udWxsfWVsc2UgaWYoMz09PXQpe2lmKG4uc3RhdGVOb2RlLmN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQpcmV0dXJuIDM9PT1uLnRhZz9uLnN0YXRlTm9kZS5jb250YWluZXJJbmZvOm51bGw7ZT1udWxsfWVsc2UgbiE9PWUmJihlPW51bGwpfX1yZXR1cm4gdXM9ZSxudWxsfWZ1bmN0aW9uIHV1KGUpe3N3aXRjaChlKXtjYXNlXCJiZWZvcmV0b2dnbGVcIjpjYXNlXCJjYW5jZWxcIjpjYXNlXCJjbGlja1wiOmNhc2VcImNsb3NlXCI6Y2FzZVwiY29udGV4dG1lbnVcIjpjYXNlXCJjb3B5XCI6Y2FzZVwiY3V0XCI6Y2FzZVwiYXV4Y2xpY2tcIjpjYXNlXCJkYmxjbGlja1wiOmNhc2VcImRyYWdlbmRcIjpjYXNlXCJkcmFnc3RhcnRcIjpjYXNlXCJkcm9wXCI6Y2FzZVwiZm9jdXNpblwiOmNhc2VcImZvY3Vzb3V0XCI6Y2FzZVwiaW5wdXRcIjpjYXNlXCJpbnZhbGlkXCI6Y2FzZVwia2V5ZG93blwiOmNhc2VcImtleXByZXNzXCI6Y2FzZVwia2V5dXBcIjpjYXNlXCJtb3VzZWRvd25cIjpjYXNlXCJtb3VzZXVwXCI6Y2FzZVwicGFzdGVcIjpjYXNlXCJwYXVzZVwiOmNhc2VcInBsYXlcIjpjYXNlXCJwb2ludGVyY2FuY2VsXCI6Y2FzZVwicG9pbnRlcmRvd25cIjpjYXNlXCJwb2ludGVydXBcIjpjYXNlXCJyYXRlY2hhbmdlXCI6Y2FzZVwicmVzZXRcIjpjYXNlXCJyZXNpemVcIjpjYXNlXCJzZWVrZWRcIjpjYXNlXCJzdWJtaXRcIjpjYXNlXCJ0b2dnbGVcIjpjYXNlXCJ0b3VjaGNhbmNlbFwiOmNhc2VcInRvdWNoZW5kXCI6Y2FzZVwidG91Y2hzdGFydFwiOmNhc2VcInZvbHVtZWNoYW5nZVwiOmNhc2VcImNoYW5nZVwiOmNhc2VcInNlbGVjdGlvbmNoYW5nZVwiOmNhc2VcInRleHRJbnB1dFwiOmNhc2VcImNvbXBvc2l0aW9uc3RhcnRcIjpjYXNlXCJjb21wb3NpdGlvbmVuZFwiOmNhc2VcImNvbXBvc2l0aW9udXBkYXRlXCI6Y2FzZVwiYmVmb3JlYmx1clwiOmNhc2VcImFmdGVyYmx1clwiOmNhc2VcImJlZm9yZWlucHV0XCI6Y2FzZVwiYmx1clwiOmNhc2VcImZ1bGxzY3JlZW5jaGFuZ2VcIjpjYXNlXCJmb2N1c1wiOmNhc2VcImhhc2hjaGFuZ2VcIjpjYXNlXCJwb3BzdGF0ZVwiOmNhc2VcInNlbGVjdFwiOmNhc2VcInNlbGVjdHN0YXJ0XCI6cmV0dXJuIDI7Y2FzZVwiZHJhZ1wiOmNhc2VcImRyYWdlbnRlclwiOmNhc2VcImRyYWdleGl0XCI6Y2FzZVwiZHJhZ2xlYXZlXCI6Y2FzZVwiZHJhZ292ZXJcIjpjYXNlXCJtb3VzZW1vdmVcIjpjYXNlXCJtb3VzZW91dFwiOmNhc2VcIm1vdXNlb3ZlclwiOmNhc2VcInBvaW50ZXJtb3ZlXCI6Y2FzZVwicG9pbnRlcm91dFwiOmNhc2VcInBvaW50ZXJvdmVyXCI6Y2FzZVwic2Nyb2xsXCI6Y2FzZVwidG91Y2htb3ZlXCI6Y2FzZVwid2hlZWxcIjpjYXNlXCJtb3VzZWVudGVyXCI6Y2FzZVwibW91c2VsZWF2ZVwiOmNhc2VcInBvaW50ZXJlbnRlclwiOmNhc2VcInBvaW50ZXJsZWF2ZVwiOnJldHVybiA4O2Nhc2VcIm1lc3NhZ2VcIjpzd2l0Y2goZW8oKSl7Y2FzZSBlYTpyZXR1cm4gMjtjYXNlIGVpOnJldHVybiA4O2Nhc2UgZWw6Y2FzZSBlczpyZXR1cm4gMzI7Y2FzZSBlYzpyZXR1cm4gMHgxMDAwMDAwMDtkZWZhdWx0OnJldHVybiAzMn1kZWZhdWx0OnJldHVybiAzMn19dmFyIHVkPSExLHVmPW51bGwsdXA9bnVsbCx1aD1udWxsLHVnPW5ldyBNYXAsdW09bmV3IE1hcCx1dj1bXSx1Yj1cIm1vdXNlZG93biBtb3VzZXVwIHRvdWNoY2FuY2VsIHRvdWNoZW5kIHRvdWNoc3RhcnQgYXV4Y2xpY2sgZGJsY2xpY2sgcG9pbnRlcmNhbmNlbCBwb2ludGVyZG93biBwb2ludGVydXAgZHJhZ2VuZCBkcmFnc3RhcnQgZHJvcCBjb21wb3NpdGlvbmVuZCBjb21wb3NpdGlvbnN0YXJ0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgaW5wdXQgdGV4dElucHV0IGNvcHkgY3V0IHBhc3RlIGNsaWNrIGNoYW5nZSBjb250ZXh0bWVudSByZXNldFwiLnNwbGl0KFwiIFwiKTtmdW5jdGlvbiB1eShlLG4pe3N3aXRjaChlKXtjYXNlXCJmb2N1c2luXCI6Y2FzZVwiZm9jdXNvdXRcIjp1Zj1udWxsO2JyZWFrO2Nhc2VcImRyYWdlbnRlclwiOmNhc2VcImRyYWdsZWF2ZVwiOnVwPW51bGw7YnJlYWs7Y2FzZVwibW91c2VvdmVyXCI6Y2FzZVwibW91c2VvdXRcIjp1aD1udWxsO2JyZWFrO2Nhc2VcInBvaW50ZXJvdmVyXCI6Y2FzZVwicG9pbnRlcm91dFwiOnVnLmRlbGV0ZShuLnBvaW50ZXJJZCk7YnJlYWs7Y2FzZVwiZ290cG9pbnRlcmNhcHR1cmVcIjpjYXNlXCJsb3N0cG9pbnRlcmNhcHR1cmVcIjp1bS5kZWxldGUobi5wb2ludGVySWQpfX1mdW5jdGlvbiB1eChlLG4sdCxyLG8sYSl7cmV0dXJuIG51bGw9PT1lfHxlLm5hdGl2ZUV2ZW50IT09YT8oZT17YmxvY2tlZE9uOm4sZG9tRXZlbnROYW1lOnQsZXZlbnRTeXN0ZW1GbGFnczpyLG5hdGl2ZUV2ZW50OmEsdGFyZ2V0Q29udGFpbmVyczpbb119LG51bGwhPT1uJiZudWxsIT09KG49ZVcobikpJiZ1bihuKSk6KGUuZXZlbnRTeXN0ZW1GbGFnc3w9cixuPWUudGFyZ2V0Q29udGFpbmVycyxudWxsIT09byYmLTE9PT1uLmluZGV4T2YobykmJm4ucHVzaChvKSksZX1mdW5jdGlvbiB1dyhlKXt2YXIgbj1lcShlLnRhcmdldCk7aWYobnVsbCE9PW4pe3ZhciB0PXMobik7aWYobnVsbCE9PXQpe2lmKDEzPT09KG49dC50YWcpKXtpZihudWxsIT09KG49Yyh0KSkpe2UuYmxvY2tlZE9uPW4sZVQoZS5wcmlvcml0eSxmdW5jdGlvbigpe3V0KHQpfSk7cmV0dXJufX1lbHNlIGlmKDMxPT09bil7aWYobnVsbCE9PShuPXUodCkpKXtlLmJsb2NrZWRPbj1uLGVUKGUucHJpb3JpdHksZnVuY3Rpb24oKXt1dCh0KX0pO3JldHVybn19ZWxzZSBpZigzPT09biYmdC5zdGF0ZU5vZGUuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCl7ZS5ibG9ja2VkT249Mz09PXQudGFnP3Quc3RhdGVOb2RlLmNvbnRhaW5lckluZm86bnVsbDtyZXR1cm59fX1lLmJsb2NrZWRPbj1udWxsfWZ1bmN0aW9uIHVqKGUpe2lmKG51bGwhPT1lLmJsb2NrZWRPbilyZXR1cm4hMTtmb3IodmFyIG49ZS50YXJnZXRDb250YWluZXJzOzA8bi5sZW5ndGg7KXt2YXIgdD11bChlLm5hdGl2ZUV2ZW50KTtpZihudWxsIT09dClyZXR1cm4gbnVsbCE9PShuPWVXKHQpKSYmdW4obiksZS5ibG9ja2VkT249dCwhMTt2YXIgcj1uZXcodD1lLm5hdGl2ZUV2ZW50KS5jb25zdHJ1Y3Rvcih0LnR5cGUsdCk7bnY9cix0LnRhcmdldC5kaXNwYXRjaEV2ZW50KHIpLG52PW51bGwsbi5zaGlmdCgpfXJldHVybiEwfWZ1bmN0aW9uIHVrKGUsbix0KXt1aihlKSYmdC5kZWxldGUobil9ZnVuY3Rpb24gdUEoKXt1ZD0hMSxudWxsIT09dWYmJnVqKHVmKSYmKHVmPW51bGwpLG51bGwhPT11cCYmdWoodXApJiYodXA9bnVsbCksbnVsbCE9PXVoJiZ1aih1aCkmJih1aD1udWxsKSx1Zy5mb3JFYWNoKHVrKSx1bS5mb3JFYWNoKHVrKX1mdW5jdGlvbiB1TyhlLG4pe2UuYmxvY2tlZE9uPT09biYmKGUuYmxvY2tlZE9uPW51bGwsdWR8fCh1ZD0hMCxvLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2soby51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSx1QSkpKX12YXIgdUM9bnVsbDtmdW5jdGlvbiB1UyhlKXt1QyE9PWUmJih1Qz1lLG8udW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayhvLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LGZ1bmN0aW9uKCl7dUM9PT1lJiYodUM9bnVsbCk7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKz0zKXt2YXIgdD1lW25dLHI9ZVtuKzFdLG89ZVtuKzJdO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHIpaWYobnVsbD09PXVjKHJ8fHQpKWNvbnRpbnVlO2Vsc2UgYnJlYWs7dmFyIGE9ZVcodCk7bnVsbCE9PWEmJihlLnNwbGljZShuLDMpLG4tPTMsYUsoYSx7cGVuZGluZzohMCxkYXRhOm8sbWV0aG9kOnQubWV0aG9kLGFjdGlvbjpyfSxyLG8pKX19KSl9ZnVuY3Rpb24gdUUoZSl7ZnVuY3Rpb24gbihuKXtyZXR1cm4gdU8obixlKX1udWxsIT09dWYmJnVPKHVmLGUpLG51bGwhPT11cCYmdU8odXAsZSksbnVsbCE9PXVoJiZ1Tyh1aCxlKSx1Zy5mb3JFYWNoKG4pLHVtLmZvckVhY2gobik7Zm9yKHZhciB0PTA7dDx1di5sZW5ndGg7dCsrKXt2YXIgcj11dlt0XTtyLmJsb2NrZWRPbj09PWUmJihyLmJsb2NrZWRPbj1udWxsKX1mb3IoOzA8dXYubGVuZ3RoJiZudWxsPT09KHQ9dXZbMF0pLmJsb2NrZWRPbjspdXcodCksbnVsbD09PXQuYmxvY2tlZE9uJiZ1di5zaGlmdCgpO2lmKG51bGwhPSh0PShlLm93bmVyRG9jdW1lbnR8fGUpLiQkcmVhY3RGb3JtUmVwbGF5KSlmb3Iocj0wO3I8dC5sZW5ndGg7cis9Myl7dmFyIG89dFtyXSxhPXRbcisxXSxpPW9bZURdfHxudWxsO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGEpaXx8dVModCk7ZWxzZSBpZihpKXt2YXIgbD1udWxsO2lmKGEmJmEuaGFzQXR0cmlidXRlKFwiZm9ybUFjdGlvblwiKSl7aWYobz1hLGk9YVtlRF18fG51bGwpbD1pLmZvcm1BY3Rpb247ZWxzZSBpZihudWxsIT09dWMobykpY29udGludWV9ZWxzZSBsPWkuYWN0aW9uO1wiZnVuY3Rpb25cIj09dHlwZW9mIGw/dFtyKzFdPWw6KHQuc3BsaWNlKHIsMyksci09MyksdVModCl9fX1mdW5jdGlvbiB1Xygpe2Z1bmN0aW9uIGUoZSl7ZS5jYW5JbnRlcmNlcHQmJlwicmVhY3QtdHJhbnNpdGlvblwiPT09ZS5pbmZvJiZlLmludGVyY2VwdCh7aGFuZGxlcjpmdW5jdGlvbigpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlKXtyZXR1cm4gbz1lfSl9LGZvY3VzUmVzZXQ6XCJtYW51YWxcIixzY3JvbGw6XCJtYW51YWxcIn0pfWZ1bmN0aW9uIG4oKXtudWxsIT09byYmKG8oKSxvPW51bGwpLHJ8fHNldFRpbWVvdXQodCwyMCl9ZnVuY3Rpb24gdCgpe2lmKCFyJiYhbmF2aWdhdGlvbi50cmFuc2l0aW9uKXt2YXIgZT1uYXZpZ2F0aW9uLmN1cnJlbnRFbnRyeTtlJiZudWxsIT1lLnVybCYmbmF2aWdhdGlvbi5uYXZpZ2F0ZShlLnVybCx7c3RhdGU6ZS5nZXRTdGF0ZSgpLGluZm86XCJyZWFjdC10cmFuc2l0aW9uXCIsaGlzdG9yeTpcInJlcGxhY2VcIn0pfX1pZihcIm9iamVjdFwiPT10eXBlb2YgbmF2aWdhdGlvbil7dmFyIHI9ITEsbz1udWxsO3JldHVybiBuYXZpZ2F0aW9uLmFkZEV2ZW50TGlzdGVuZXIoXCJuYXZpZ2F0ZVwiLGUpLG5hdmlnYXRpb24uYWRkRXZlbnRMaXN0ZW5lcihcIm5hdmlnYXRlc3VjY2Vzc1wiLG4pLG5hdmlnYXRpb24uYWRkRXZlbnRMaXN0ZW5lcihcIm5hdmlnYXRlZXJyb3JcIixuKSxzZXRUaW1lb3V0KHQsMTAwKSxmdW5jdGlvbigpe3I9ITAsbmF2aWdhdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwibmF2aWdhdGVcIixlKSxuYXZpZ2F0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJuYXZpZ2F0ZXN1Y2Nlc3NcIixuKSxuYXZpZ2F0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJuYXZpZ2F0ZWVycm9yXCIsbiksbnVsbCE9PW8mJihvKCksbz1udWxsKX19fWZ1bmN0aW9uIHVQKGUpe3RoaXMuX2ludGVybmFsUm9vdD1lfWZ1bmN0aW9uIHV6KGUpe3RoaXMuX2ludGVybmFsUm9vdD1lfXV6LnByb3RvdHlwZS5yZW5kZXI9dVAucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihlKXt2YXIgbj10aGlzLl9pbnRlcm5hbFJvb3Q7aWYobnVsbD09PW4pdGhyb3cgRXJyb3IobCg0MDkpKTtjOChuLmN1cnJlbnQsc3QoKSxlLG4sbnVsbCxudWxsKX0sdXoucHJvdG90eXBlLnVubW91bnQ9dVAucHJvdG90eXBlLnVubW91bnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9pbnRlcm5hbFJvb3Q7aWYobnVsbCE9PWUpe3RoaXMuX2ludGVybmFsUm9vdD1udWxsO3ZhciBuPWUuY29udGFpbmVySW5mbztjOChlLmN1cnJlbnQsMixudWxsLGUsbnVsbCxudWxsKSxzcygpLG5bZUJdPW51bGx9fSx1ei5wcm90b3R5cGUudW5zdGFibGVfc2NoZWR1bGVIeWRyYXRpb249ZnVuY3Rpb24oZSl7aWYoZSl7dmFyIG49ZUwoKTtlPXtibG9ja2VkT246bnVsbCx0YXJnZXQ6ZSxwcmlvcml0eTpufTtmb3IodmFyIHQ9MDt0PHV2Lmxlbmd0aCYmMCE9PW4mJm48dXZbdF0ucHJpb3JpdHk7dCsrKTt1di5zcGxpY2UodCwwLGUpLDA9PT10JiZ1dyhlKX19O3ZhciB1TD1hLnZlcnNpb247aWYoXCIxOS4yLjAtY2FuYXJ5LTk3Y2RkNWQzLTIwMjUwNzEwXCIhPT11TCl0aHJvdyBFcnJvcihsKDUyNyx1TCxcIjE5LjIuMC1jYW5hcnktOTdjZGQ1ZDMtMjAyNTA3MTBcIikpO2lmKFQuZmluZERPTU5vZGU9ZnVuY3Rpb24oZSl7dmFyIG49ZS5fcmVhY3RJbnRlcm5hbHM7aWYodm9pZCAwPT09bil7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZS5yZW5kZXIpdGhyb3cgRXJyb3IobCgxODgpKTt0aHJvdyBFcnJvcihsKDI2OCxlPU9iamVjdC5rZXlzKGUpLmpvaW4oXCIsXCIpKSl9cmV0dXJuIGU9bnVsbD09PShlPW51bGwhPT0oZT1mdW5jdGlvbihlKXt2YXIgbj1lLmFsdGVybmF0ZTtpZighbil7aWYobnVsbD09PShuPXMoZSkpKXRocm93IEVycm9yKGwoMTg4KSk7cmV0dXJuIG4hPT1lP251bGw6ZX1mb3IodmFyIHQ9ZSxyPW47Oyl7dmFyIG89dC5yZXR1cm47aWYobnVsbD09PW8pYnJlYWs7dmFyIGE9by5hbHRlcm5hdGU7aWYobnVsbD09PWEpe2lmKG51bGwhPT0ocj1vLnJldHVybikpe3Q9cjtjb250aW51ZX1icmVha31pZihvLmNoaWxkPT09YS5jaGlsZCl7Zm9yKGE9by5jaGlsZDthOyl7aWYoYT09PXQpcmV0dXJuIGQobyksZTtpZihhPT09cilyZXR1cm4gZChvKSxuO2E9YS5zaWJsaW5nfXRocm93IEVycm9yKGwoMTg4KSl9aWYodC5yZXR1cm4hPT1yLnJldHVybil0PW8scj1hO2Vsc2V7Zm9yKHZhciBpPSExLGM9by5jaGlsZDtjOyl7aWYoYz09PXQpe2k9ITAsdD1vLHI9YTticmVha31pZihjPT09cil7aT0hMCxyPW8sdD1hO2JyZWFrfWM9Yy5zaWJsaW5nfWlmKCFpKXtmb3IoYz1hLmNoaWxkO2M7KXtpZihjPT09dCl7aT0hMCx0PWEscj1vO2JyZWFrfWlmKGM9PT1yKXtpPSEwLHI9YSx0PW87YnJlYWt9Yz1jLnNpYmxpbmd9aWYoIWkpdGhyb3cgRXJyb3IobCgxODkpKX19aWYodC5hbHRlcm5hdGUhPT1yKXRocm93IEVycm9yKGwoMTkwKSl9aWYoMyE9PXQudGFnKXRocm93IEVycm9yKGwoMTg4KSk7cmV0dXJuIHQuc3RhdGVOb2RlLmN1cnJlbnQ9PT10P2U6bn0obikpP2Z1bmN0aW9uIGUobil7dmFyIHQ9bi50YWc7aWYoNT09PXR8fDI2PT09dHx8Mjc9PT10fHw2PT09dClyZXR1cm4gbjtmb3Iobj1uLmNoaWxkO251bGwhPT1uOyl7aWYobnVsbCE9PSh0PWUobikpKXJldHVybiB0O249bi5zaWJsaW5nfXJldHVybiBudWxsfShlKTpudWxsKT9udWxsOmUuc3RhdGVOb2RlfSxcInVuZGVmaW5lZFwiIT10eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fKXt2YXIgdVQ9X19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fO2lmKCF1VC5pc0Rpc2FibGVkJiZ1VC5zdXBwb3J0c0ZpYmVyKXRyeXtlZj11VC5pbmplY3Qoe2J1bmRsZVR5cGU6MCx2ZXJzaW9uOlwiMTkuMi4wLWNhbmFyeS05N2NkZDVkMy0yMDI1MDcxMFwiLHJlbmRlcmVyUGFja2FnZU5hbWU6XCJyZWFjdC1kb21cIixjdXJyZW50RGlzcGF0Y2hlclJlZjpMLHJlY29uY2lsZXJWZXJzaW9uOlwiMTkuMi4wLWNhbmFyeS05N2NkZDVkMy0yMDI1MDcxMFwifSksZXA9dVR9Y2F0Y2goZSl7fX1uLmNyZWF0ZVJvb3Q9ZnVuY3Rpb24oZSxuKXtpZighKHQ9ZSl8fDEhPT10Lm5vZGVUeXBlJiY5IT09dC5ub2RlVHlwZSYmMTEhPT10Lm5vZGVUeXBlKXRocm93IEVycm9yKGwoMjk5KSk7dmFyIHQscixvLGEsaSxzLGMsdSxkPSExLGY9XCJcIixwPWl1LGg9aWQsZz1pcDtyZXR1cm4gbnVsbCE9biYmKCEwPT09bi51bnN0YWJsZV9zdHJpY3RNb2RlJiYoZD0hMCksdm9pZCAwIT09bi5pZGVudGlmaWVyUHJlZml4JiYoZj1uLmlkZW50aWZpZXJQcmVmaXgpLHZvaWQgMCE9PW4ub25VbmNhdWdodEVycm9yJiYocD1uLm9uVW5jYXVnaHRFcnJvciksdm9pZCAwIT09bi5vbkNhdWdodEVycm9yJiYoaD1uLm9uQ2F1Z2h0RXJyb3IpLHZvaWQgMCE9PW4ub25SZWNvdmVyYWJsZUVycm9yJiYoZz1uLm9uUmVjb3ZlcmFibGVFcnJvcikpLHI9ZSxvPTEsYT0hMSxpPW51bGwscz0wLGM9ZCx1PW51bGwscj1uZXcgYzkocixvLGEsZixwLGgsZyx1XyxudWxsKSxvPTEsITA9PT1jJiYob3w9MjQpLGM9cmUoMyxudWxsLG51bGwsbyksci5jdXJyZW50PWMsYy5zdGF0ZU5vZGU9cixvPXIxKCksby5yZWZDb3VudCsrLHIucG9vbGVkQ2FjaGU9byxvLnJlZkNvdW50KyssYy5tZW1vaXplZFN0YXRlPXtlbGVtZW50Om51bGwsaXNEZWh5ZHJhdGVkOmEsY2FjaGU6b30sb2ooYyksbj1yLGVbZUJdPW4uY3VycmVudCxzNihlKSxuZXcgdVAobil9fSxcIi4vZGlzdC9jb21waWxlZC9yZWFjdC1kb20vY2pzL3JlYWN0LWRvbS5wcm9kdWN0aW9uLmpzXCI6ZnVuY3Rpb24oZSxuLHQpe1widXNlIHN0cmljdFwiO3ZhciByPXQoXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QvaW5kZXguanNcIik7ZnVuY3Rpb24gbyhlKXt2YXIgbj1cImh0dHBzOi8vcmVhY3QuZGV2L2Vycm9ycy9cIitlO2lmKDE8YXJndW1lbnRzLmxlbmd0aCl7bis9XCI/YXJnc1tdPVwiK2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbMV0pO2Zvcih2YXIgdD0yO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspbis9XCImYXJnc1tdPVwiK2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbdF0pfXJldHVyblwiTWluaWZpZWQgUmVhY3QgZXJyb3IgI1wiK2UrXCI7IHZpc2l0IFwiK24rXCIgZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLlwifWZ1bmN0aW9uIGEoKXt9dmFyIGk9e2Q6e2Y6YSxyOmZ1bmN0aW9uKCl7dGhyb3cgRXJyb3Iobyg1MjIpKX0sRDphLEM6YSxMOmEsbTphLFg6YSxTOmEsTTphfSxwOjAsZmluZERPTU5vZGU6bnVsbH0sbD1TeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpLHM9ci5fX0NMSUVOVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9XQVJOX1VTRVJTX1RIRVlfQ0FOTk9UX1VQR1JBREU7ZnVuY3Rpb24gYyhlLG4pe3JldHVyblwiZm9udFwiPT09ZT9cIlwiOlwic3RyaW5nXCI9PXR5cGVvZiBuP1widXNlLWNyZWRlbnRpYWxzXCI9PT1uP246XCJcIjp2b2lkIDB9bi5fX0RPTV9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9XQVJOX1VTRVJTX1RIRVlfQ0FOTk9UX1VQR1JBREU9aSxuLmNyZWF0ZVBvcnRhbD1mdW5jdGlvbihlLG4pe3ZhciB0PTI8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsO2lmKCFufHwxIT09bi5ub2RlVHlwZSYmOSE9PW4ubm9kZVR5cGUmJjExIT09bi5ub2RlVHlwZSl0aHJvdyBFcnJvcihvKDI5OSkpO3JldHVybiBmdW5jdGlvbihlLG4sdCl7dmFyIHI9Mzxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOm51bGw7cmV0dXJueyQkdHlwZW9mOmwsa2V5Om51bGw9PXI/bnVsbDpcIlwiK3IsY2hpbGRyZW46ZSxjb250YWluZXJJbmZvOm4saW1wbGVtZW50YXRpb246dH19KGUsbixudWxsLHQpfSxuLmZsdXNoU3luYz1mdW5jdGlvbihlKXt2YXIgbj1zLlQsdD1pLnA7dHJ5e2lmKHMuVD1udWxsLGkucD0yLGUpcmV0dXJuIGUoKX1maW5hbGx5e3MuVD1uLGkucD10LGkuZC5mKCl9fSxuLnByZWNvbm5lY3Q9ZnVuY3Rpb24oZSxuKXtcInN0cmluZ1wiPT10eXBlb2YgZSYmKG49bj9cInN0cmluZ1wiPT10eXBlb2Yobj1uLmNyb3NzT3JpZ2luKT9cInVzZS1jcmVkZW50aWFsc1wiPT09bj9uOlwiXCI6dm9pZCAwOm51bGwsaS5kLkMoZSxuKSl9LG4ucHJlZmV0Y2hETlM9ZnVuY3Rpb24oZSl7XCJzdHJpbmdcIj09dHlwZW9mIGUmJmkuZC5EKGUpfSxuLnByZWluaXQ9ZnVuY3Rpb24oZSxuKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSYmbiYmXCJzdHJpbmdcIj09dHlwZW9mIG4uYXMpe3ZhciB0PW4uYXMscj1jKHQsbi5jcm9zc09yaWdpbiksbz1cInN0cmluZ1wiPT10eXBlb2Ygbi5pbnRlZ3JpdHk/bi5pbnRlZ3JpdHk6dm9pZCAwLGE9XCJzdHJpbmdcIj09dHlwZW9mIG4uZmV0Y2hQcmlvcml0eT9uLmZldGNoUHJpb3JpdHk6dm9pZCAwO1wic3R5bGVcIj09PXQ/aS5kLlMoZSxcInN0cmluZ1wiPT10eXBlb2Ygbi5wcmVjZWRlbmNlP24ucHJlY2VkZW5jZTp2b2lkIDAse2Nyb3NzT3JpZ2luOnIsaW50ZWdyaXR5Om8sZmV0Y2hQcmlvcml0eTphfSk6XCJzY3JpcHRcIj09PXQmJmkuZC5YKGUse2Nyb3NzT3JpZ2luOnIsaW50ZWdyaXR5Om8sZmV0Y2hQcmlvcml0eTphLG5vbmNlOlwic3RyaW5nXCI9PXR5cGVvZiBuLm5vbmNlP24ubm9uY2U6dm9pZCAwfSl9fSxuLnByZWluaXRNb2R1bGU9ZnVuY3Rpb24oZSxuKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlpZihcIm9iamVjdFwiPT10eXBlb2YgbiYmbnVsbCE9PW4pe2lmKG51bGw9PW4uYXN8fFwic2NyaXB0XCI9PT1uLmFzKXt2YXIgdD1jKG4uYXMsbi5jcm9zc09yaWdpbik7aS5kLk0oZSx7Y3Jvc3NPcmlnaW46dCxpbnRlZ3JpdHk6XCJzdHJpbmdcIj09dHlwZW9mIG4uaW50ZWdyaXR5P24uaW50ZWdyaXR5OnZvaWQgMCxub25jZTpcInN0cmluZ1wiPT10eXBlb2Ygbi5ub25jZT9uLm5vbmNlOnZvaWQgMH0pfX1lbHNlIG51bGw9PW4mJmkuZC5NKGUpfSxuLnByZWxvYWQ9ZnVuY3Rpb24oZSxuKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSYmXCJvYmplY3RcIj09dHlwZW9mIG4mJm51bGwhPT1uJiZcInN0cmluZ1wiPT10eXBlb2Ygbi5hcyl7dmFyIHQ9bi5hcyxyPWModCxuLmNyb3NzT3JpZ2luKTtpLmQuTChlLHQse2Nyb3NzT3JpZ2luOnIsaW50ZWdyaXR5Olwic3RyaW5nXCI9PXR5cGVvZiBuLmludGVncml0eT9uLmludGVncml0eTp2b2lkIDAsbm9uY2U6XCJzdHJpbmdcIj09dHlwZW9mIG4ubm9uY2U/bi5ub25jZTp2b2lkIDAsdHlwZTpcInN0cmluZ1wiPT10eXBlb2Ygbi50eXBlP24udHlwZTp2b2lkIDAsZmV0Y2hQcmlvcml0eTpcInN0cmluZ1wiPT10eXBlb2Ygbi5mZXRjaFByaW9yaXR5P24uZmV0Y2hQcmlvcml0eTp2b2lkIDAscmVmZXJyZXJQb2xpY3k6XCJzdHJpbmdcIj09dHlwZW9mIG4ucmVmZXJyZXJQb2xpY3k/bi5yZWZlcnJlclBvbGljeTp2b2lkIDAsaW1hZ2VTcmNTZXQ6XCJzdHJpbmdcIj09dHlwZW9mIG4uaW1hZ2VTcmNTZXQ/bi5pbWFnZVNyY1NldDp2b2lkIDAsaW1hZ2VTaXplczpcInN0cmluZ1wiPT10eXBlb2Ygbi5pbWFnZVNpemVzP24uaW1hZ2VTaXplczp2b2lkIDAsbWVkaWE6XCJzdHJpbmdcIj09dHlwZW9mIG4ubWVkaWE/bi5tZWRpYTp2b2lkIDB9KX19LG4ucHJlbG9hZE1vZHVsZT1mdW5jdGlvbihlLG4pe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKWlmKG4pe3ZhciB0PWMobi5hcyxuLmNyb3NzT3JpZ2luKTtpLmQubShlLHthczpcInN0cmluZ1wiPT10eXBlb2Ygbi5hcyYmXCJzY3JpcHRcIiE9PW4uYXM/bi5hczp2b2lkIDAsY3Jvc3NPcmlnaW46dCxpbnRlZ3JpdHk6XCJzdHJpbmdcIj09dHlwZW9mIG4uaW50ZWdyaXR5P24uaW50ZWdyaXR5OnZvaWQgMH0pfWVsc2UgaS5kLm0oZSl9LG4ucmVxdWVzdEZvcm1SZXNldD1mdW5jdGlvbihlKXtpLmQucihlKX0sbi51bnN0YWJsZV9iYXRjaGVkVXBkYXRlcz1mdW5jdGlvbihlLG4pe3JldHVybiBlKG4pfSxuLnVzZUZvcm1TdGF0ZT1mdW5jdGlvbihlLG4sdCl7cmV0dXJuIHMuSC51c2VGb3JtU3RhdGUoZSxuLHQpfSxuLnVzZUZvcm1TdGF0dXM9ZnVuY3Rpb24oKXtyZXR1cm4gcy5ILnVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzKCl9LG4udmVyc2lvbj1cIjE5LjIuMC1jYW5hcnktOTdjZGQ1ZDMtMjAyNTA3MTBcIn0sXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QtZG9tL2NsaWVudC5qc1wiOmZ1bmN0aW9uKGUsbix0KXtcInVzZSBzdHJpY3RcIjshZnVuY3Rpb24gZSgpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18mJlwiZnVuY3Rpb25cIj09dHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRSl0cnl7X19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFKGUpfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoZSl9fSgpLGUuZXhwb3J0cz10KFwiLi9kaXN0L2NvbXBpbGVkL3JlYWN0LWRvbS9janMvcmVhY3QtZG9tLWNsaWVudC5wcm9kdWN0aW9uLmpzXCIpfSxcIi4vZGlzdC9jb21waWxlZC9yZWFjdC1kb20vaW5kZXguanNcIjpmdW5jdGlvbihlLG4sdCl7XCJ1c2Ugc3RyaWN0XCI7IWZ1bmN0aW9uIGUoKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UpdHJ5e19fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRShlKX1jYXRjaChlKXtjb25zb2xlLmVycm9yKGUpfX0oKSxlLmV4cG9ydHM9dChcIi4vZGlzdC9jb21waWxlZC9yZWFjdC1kb20vY2pzL3JlYWN0LWRvbS5wcm9kdWN0aW9uLmpzXCIpfSxcIi4vZGlzdC9jb21waWxlZC9yZWFjdC9janMvcmVhY3QtanN4LXJ1bnRpbWUucHJvZHVjdGlvbi5qc1wiOmZ1bmN0aW9uKGUsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIHQ9U3ltYm9sLmZvcihcInJlYWN0LnRyYW5zaXRpb25hbC5lbGVtZW50XCIpO2Z1bmN0aW9uIHIoZSxuLHIpe3ZhciBvPW51bGw7aWYodm9pZCAwIT09ciYmKG89XCJcIityKSx2b2lkIDAhPT1uLmtleSYmKG89XCJcIituLmtleSksXCJrZXlcImluIG4pZm9yKHZhciBhIGluIHI9e30sbilcImtleVwiIT09YSYmKHJbYV09blthXSk7ZWxzZSByPW47cmV0dXJueyQkdHlwZW9mOnQsdHlwZTplLGtleTpvLHJlZjp2b2lkIDAhPT0obj1yLnJlZik/bjpudWxsLHByb3BzOnJ9fW4uRnJhZ21lbnQ9U3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpLG4uanN4PXIsbi5qc3hzPXJ9LFwiLi9kaXN0L2NvbXBpbGVkL3JlYWN0L2Nqcy9yZWFjdC5wcm9kdWN0aW9uLmpzXCI6ZnVuY3Rpb24oZSxuKXtcInVzZSBzdHJpY3RcIjt2YXIgdD1TeW1ib2wuZm9yKFwicmVhY3QudHJhbnNpdGlvbmFsLmVsZW1lbnRcIikscj1TeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpLG89U3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpLGE9U3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpLGk9U3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpLGw9U3ltYm9sLmZvcihcInJlYWN0LmNvbnN1bWVyXCIpLHM9U3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIiksYz1TeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIiksdT1TeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIiksZD1TeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKSxmPVN5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpLHA9U3ltYm9sLml0ZXJhdG9yLGg9e2lzTW91bnRlZDpmdW5jdGlvbigpe3JldHVybiExfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbigpe319LGc9T2JqZWN0LmFzc2lnbixtPXt9O2Z1bmN0aW9uIHYoZSxuLHQpe3RoaXMucHJvcHM9ZSx0aGlzLmNvbnRleHQ9bix0aGlzLnJlZnM9bSx0aGlzLnVwZGF0ZXI9dHx8aH1mdW5jdGlvbiBiKCl7fWZ1bmN0aW9uIHkoZSxuLHQpe3RoaXMucHJvcHM9ZSx0aGlzLmNvbnRleHQ9bix0aGlzLnJlZnM9bSx0aGlzLnVwZGF0ZXI9dHx8aH12LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXt9LHYucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKGUsbil7aWYoXCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJm51bGwhPWUpdGhyb3cgRXJyb3IoXCJ0YWtlcyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzIHRvIHVwZGF0ZSBvciBhIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcy5cIik7dGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLGUsbixcInNldFN0YXRlXCIpfSx2LnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsZSxcImZvcmNlVXBkYXRlXCIpfSxiLnByb3RvdHlwZT12LnByb3RvdHlwZTt2YXIgeD15LnByb3RvdHlwZT1uZXcgYjt4LmNvbnN0cnVjdG9yPXksZyh4LHYucHJvdG90eXBlKSx4LmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwO3ZhciB3PUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gaigpe312YXIgaz17SDpudWxsLEE6bnVsbCxUOm51bGwsUzpudWxsfSxBPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gTyhlLG4scixvLGEsaSl7cmV0dXJueyQkdHlwZW9mOnQsdHlwZTplLGtleTpuLHJlZjp2b2lkIDAhPT0ocj1pLnJlZik/cjpudWxsLHByb3BzOml9fWZ1bmN0aW9uIEMoZSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lJiZlLiQkdHlwZW9mPT09dH12YXIgUz0vXFwvKy9nO2Z1bmN0aW9uIEUoZSxuKXt2YXIgdCxyO3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmbnVsbCE9ZS5rZXk/KHQ9XCJcIitlLmtleSxyPXtcIj1cIjpcIj0wXCIsXCI6XCI6XCI9MlwifSxcIiRcIit0LnJlcGxhY2UoL1s9Ol0vZyxmdW5jdGlvbihlKXtyZXR1cm4gcltlXX0pKTpuLnRvU3RyaW5nKDM2KX1mdW5jdGlvbiBfKGUsbixvKXtpZihudWxsPT1lKXJldHVybiBlO3ZhciBhPVtdLGk9MDtyZXR1cm4hZnVuY3Rpb24gZShuLG8sYSxpLGwpe3ZhciBzLGMsdSxkPXR5cGVvZiBuOyhcInVuZGVmaW5lZFwiPT09ZHx8XCJib29sZWFuXCI9PT1kKSYmKG49bnVsbCk7dmFyIGg9ITE7aWYobnVsbD09PW4paD0hMDtlbHNlIHN3aXRjaChkKXtjYXNlXCJiaWdpbnRcIjpjYXNlXCJzdHJpbmdcIjpjYXNlXCJudW1iZXJcIjpoPSEwO2JyZWFrO2Nhc2VcIm9iamVjdFwiOnN3aXRjaChuLiQkdHlwZW9mKXtjYXNlIHQ6Y2FzZSByOmg9ITA7YnJlYWs7Y2FzZSBmOnJldHVybiBlKChoPW4uX2luaXQpKG4uX3BheWxvYWQpLG8sYSxpLGwpfX1pZihoKXJldHVybiBsPWwobiksaD1cIlwiPT09aT9cIi5cIitFKG4sMCk6aSx3KGwpPyhhPVwiXCIsbnVsbCE9aCYmKGE9aC5yZXBsYWNlKFMsXCIkJi9cIikrXCIvXCIpLGUobCxvLGEsXCJcIixmdW5jdGlvbihlKXtyZXR1cm4gZX0pKTpudWxsIT1sJiYoQyhsKSYmKHM9bCxjPWErKG51bGw9PWwua2V5fHxuJiZuLmtleT09PWwua2V5P1wiXCI6KFwiXCIrbC5rZXkpLnJlcGxhY2UoUyxcIiQmL1wiKStcIi9cIikraCxsPU8ocy50eXBlLGMsdm9pZCAwLHZvaWQgMCx2b2lkIDAscy5wcm9wcykpLG8ucHVzaChsKSksMTtoPTA7dmFyIGc9XCJcIj09PWk/XCIuXCI6aStcIjpcIjtpZih3KG4pKWZvcih2YXIgbT0wO208bi5sZW5ndGg7bSsrKWQ9ZytFKGk9blttXSxtKSxoKz1lKGksbyxhLGQsbCk7ZWxzZSBpZihcImZ1bmN0aW9uXCI9PXR5cGVvZihtPW51bGw9PT0odT1uKXx8XCJvYmplY3RcIiE9dHlwZW9mIHU/bnVsbDpcImZ1bmN0aW9uXCI9PXR5cGVvZih1PXAmJnVbcF18fHVbXCJAQGl0ZXJhdG9yXCJdKT91Om51bGwpKWZvcihuPW0uY2FsbChuKSxtPTA7IShpPW4ubmV4dCgpKS5kb25lOylkPWcrRShpPWkudmFsdWUsbSsrKSxoKz1lKGksbyxhLGQsbCk7ZWxzZSBpZihcIm9iamVjdFwiPT09ZCl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygbi50aGVuKXJldHVybiBlKGZ1bmN0aW9uKGUpe3N3aXRjaChlLnN0YXR1cyl7Y2FzZVwiZnVsZmlsbGVkXCI6cmV0dXJuIGUudmFsdWU7Y2FzZVwicmVqZWN0ZWRcIjp0aHJvdyBlLnJlYXNvbjtkZWZhdWx0OnN3aXRjaChcInN0cmluZ1wiPT10eXBlb2YgZS5zdGF0dXM/ZS50aGVuKGosaik6KGUuc3RhdHVzPVwicGVuZGluZ1wiLGUudGhlbihmdW5jdGlvbihuKXtcInBlbmRpbmdcIj09PWUuc3RhdHVzJiYoZS5zdGF0dXM9XCJmdWxmaWxsZWRcIixlLnZhbHVlPW4pfSxmdW5jdGlvbihuKXtcInBlbmRpbmdcIj09PWUuc3RhdHVzJiYoZS5zdGF0dXM9XCJyZWplY3RlZFwiLGUucmVhc29uPW4pfSkpLGUuc3RhdHVzKXtjYXNlXCJmdWxmaWxsZWRcIjpyZXR1cm4gZS52YWx1ZTtjYXNlXCJyZWplY3RlZFwiOnRocm93IGUucmVhc29ufX10aHJvdyBlfShuKSxvLGEsaSxsKTt0aHJvdyBFcnJvcihcIk9iamVjdHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkIChmb3VuZDogXCIrKFwiW29iamVjdCBPYmplY3RdXCI9PT0obz1TdHJpbmcobikpP1wib2JqZWN0IHdpdGgga2V5cyB7XCIrT2JqZWN0LmtleXMobikuam9pbihcIiwgXCIpK1wifVwiOm8pK1wiKS4gSWYgeW91IG1lYW50IHRvIHJlbmRlciBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4sIHVzZSBhbiBhcnJheSBpbnN0ZWFkLlwiKX1yZXR1cm4gaH0oZSxhLFwiXCIsXCJcIixmdW5jdGlvbihlKXtyZXR1cm4gbi5jYWxsKG8sZSxpKyspfSksYX1mdW5jdGlvbiBQKGUpe2lmKC0xPT09ZS5fc3RhdHVzKXt2YXIgbj1lLl9yZXN1bHQ7KG49bigpKS50aGVuKGZ1bmN0aW9uKG4peygwPT09ZS5fc3RhdHVzfHwtMT09PWUuX3N0YXR1cykmJihlLl9zdGF0dXM9MSxlLl9yZXN1bHQ9bil9LGZ1bmN0aW9uKG4peygwPT09ZS5fc3RhdHVzfHwtMT09PWUuX3N0YXR1cykmJihlLl9zdGF0dXM9MixlLl9yZXN1bHQ9bil9KSwtMT09PWUuX3N0YXR1cyYmKGUuX3N0YXR1cz0wLGUuX3Jlc3VsdD1uKX1pZigxPT09ZS5fc3RhdHVzKXJldHVybiBlLl9yZXN1bHQuZGVmYXVsdDt0aHJvdyBlLl9yZXN1bHR9dmFyIHo9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVwb3J0RXJyb3I/cmVwb3J0RXJyb3I6ZnVuY3Rpb24oZSl7aWYoXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdyYmXCJmdW5jdGlvblwiPT10eXBlb2Ygd2luZG93LkVycm9yRXZlbnQpe3ZhciBuPW5ldyB3aW5kb3cuRXJyb3JFdmVudChcImVycm9yXCIse2J1YmJsZXM6ITAsY2FuY2VsYWJsZTohMCxtZXNzYWdlOlwib2JqZWN0XCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmXCJzdHJpbmdcIj09dHlwZW9mIGUubWVzc2FnZT9TdHJpbmcoZS5tZXNzYWdlKTpTdHJpbmcoZSksZXJyb3I6ZX0pO2lmKCF3aW5kb3cuZGlzcGF0Y2hFdmVudChuKSlyZXR1cm59ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2YgcHJvY2VzcyYmXCJmdW5jdGlvblwiPT10eXBlb2YgcHJvY2Vzcy5lbWl0KXJldHVybiB2b2lkIHByb2Nlc3MuZW1pdChcInVuY2F1Z2h0RXhjZXB0aW9uXCIsZSk7Y29uc29sZS5lcnJvcihlKX07bi5DaGlsZHJlbj17bWFwOl8sZm9yRWFjaDpmdW5jdGlvbihlLG4sdCl7XyhlLGZ1bmN0aW9uKCl7bi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHQpfSxjb3VudDpmdW5jdGlvbihlKXt2YXIgbj0wO3JldHVybiBfKGUsZnVuY3Rpb24oKXtuKyt9KSxufSx0b0FycmF5OmZ1bmN0aW9uKGUpe3JldHVybiBfKGUsZnVuY3Rpb24oZSl7cmV0dXJuIGV9KXx8W119LG9ubHk6ZnVuY3Rpb24oZSl7aWYoIUMoZSkpdGhyb3cgRXJyb3IoXCJSZWFjdC5DaGlsZHJlbi5vbmx5IGV4cGVjdGVkIHRvIHJlY2VpdmUgYSBzaW5nbGUgUmVhY3QgZWxlbWVudCBjaGlsZC5cIik7cmV0dXJuIGV9fSxuLkNvbXBvbmVudD12LG4uRnJhZ21lbnQ9byxuLlByb2ZpbGVyPWksbi5QdXJlQ29tcG9uZW50PXksbi5TdHJpY3RNb2RlPWEsbi5TdXNwZW5zZT11LG4uX19DTElFTlRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFPWssbi5fX0NPTVBJTEVSX1JVTlRJTUU9e19fcHJvdG9fXzpudWxsLGM6ZnVuY3Rpb24oZSl7cmV0dXJuIGsuSC51c2VNZW1vQ2FjaGUoZSl9fSxuLmNhY2hlPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KG51bGwsYXJndW1lbnRzKX19LG4uY2FjaGVTaWduYWw9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbi5jbG9uZUVsZW1lbnQ9ZnVuY3Rpb24oZSxuLHQpe2lmKG51bGw9PWUpdGhyb3cgRXJyb3IoXCJUaGUgYXJndW1lbnQgbXVzdCBiZSBhIFJlYWN0IGVsZW1lbnQsIGJ1dCB5b3UgcGFzc2VkIFwiK2UrXCIuXCIpO3ZhciByPWcoe30sZS5wcm9wcyksbz1lLmtleSxhPXZvaWQgMDtpZihudWxsIT1uKWZvcihpIGluIHZvaWQgMCE9PW4ucmVmJiYoYT12b2lkIDApLHZvaWQgMCE9PW4ua2V5JiYobz1cIlwiK24ua2V5KSxuKUEuY2FsbChuLGkpJiZcImtleVwiIT09aSYmXCJfX3NlbGZcIiE9PWkmJlwiX19zb3VyY2VcIiE9PWkmJihcInJlZlwiIT09aXx8dm9pZCAwIT09bi5yZWYpJiYocltpXT1uW2ldKTt2YXIgaT1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PWkpci5jaGlsZHJlbj10O2Vsc2UgaWYoMTxpKXtmb3IodmFyIGw9QXJyYXkoaSkscz0wO3M8aTtzKyspbFtzXT1hcmd1bWVudHNbcysyXTtyLmNoaWxkcmVuPWx9cmV0dXJuIE8oZS50eXBlLG8sdm9pZCAwLHZvaWQgMCxhLHIpfSxuLmNyZWF0ZUNvbnRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuKGU9eyQkdHlwZW9mOnMsX2N1cnJlbnRWYWx1ZTplLF9jdXJyZW50VmFsdWUyOmUsX3RocmVhZENvdW50OjAsUHJvdmlkZXI6bnVsbCxDb25zdW1lcjpudWxsfSkuUHJvdmlkZXI9ZSxlLkNvbnN1bWVyPXskJHR5cGVvZjpsLF9jb250ZXh0OmV9LGV9LG4uY3JlYXRlRWxlbWVudD1mdW5jdGlvbihlLG4sdCl7dmFyIHIsbz17fSxhPW51bGw7aWYobnVsbCE9bilmb3IociBpbiB2b2lkIDAhPT1uLmtleSYmKGE9XCJcIituLmtleSksbilBLmNhbGwobixyKSYmXCJrZXlcIiE9PXImJlwiX19zZWxmXCIhPT1yJiZcIl9fc291cmNlXCIhPT1yJiYob1tyXT1uW3JdKTt2YXIgaT1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PWkpby5jaGlsZHJlbj10O2Vsc2UgaWYoMTxpKXtmb3IodmFyIGw9QXJyYXkoaSkscz0wO3M8aTtzKyspbFtzXT1hcmd1bWVudHNbcysyXTtvLmNoaWxkcmVuPWx9aWYoZSYmZS5kZWZhdWx0UHJvcHMpZm9yKHIgaW4gaT1lLmRlZmF1bHRQcm9wcyl2b2lkIDA9PT1vW3JdJiYob1tyXT1pW3JdKTtyZXR1cm4gTyhlLGEsdm9pZCAwLHZvaWQgMCxudWxsLG8pfSxuLmNyZWF0ZVJlZj1mdW5jdGlvbigpe3JldHVybntjdXJyZW50Om51bGx9fSxuLmZvcndhcmRSZWY9ZnVuY3Rpb24oZSl7cmV0dXJueyQkdHlwZW9mOmMscmVuZGVyOmV9fSxuLmlzVmFsaWRFbGVtZW50PUMsbi5sYXp5PWZ1bmN0aW9uKGUpe3JldHVybnskJHR5cGVvZjpmLF9wYXlsb2FkOntfc3RhdHVzOi0xLF9yZXN1bHQ6ZX0sX2luaXQ6UH19LG4ubWVtbz1mdW5jdGlvbihlLG4pe3JldHVybnskJHR5cGVvZjpkLHR5cGU6ZSxjb21wYXJlOnZvaWQgMD09PW4/bnVsbDpufX0sbi5zdGFydFRyYW5zaXRpb249ZnVuY3Rpb24oZSl7dmFyIG49ay5ULHQ9e307ay5UPXQ7dHJ5e3ZhciByPWUoKSxvPWsuUztudWxsIT09byYmbyh0LHIpLFwib2JqZWN0XCI9PXR5cGVvZiByJiZudWxsIT09ciYmXCJmdW5jdGlvblwiPT10eXBlb2Ygci50aGVuJiZyLnRoZW4oaix6KX1jYXRjaChlKXt6KGUpfWZpbmFsbHl7bnVsbCE9PW4mJm51bGwhPT10LnR5cGVzJiYobi50eXBlcz10LnR5cGVzKSxrLlQ9bn19LG4udW5zdGFibGVfdXNlQ2FjaGVSZWZyZXNoPWZ1bmN0aW9uKCl7cmV0dXJuIGsuSC51c2VDYWNoZVJlZnJlc2goKX0sbi51c2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGsuSC51c2UoZSl9LG4udXNlQWN0aW9uU3RhdGU9ZnVuY3Rpb24oZSxuLHQpe3JldHVybiBrLkgudXNlQWN0aW9uU3RhdGUoZSxuLHQpfSxuLnVzZUNhbGxiYWNrPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGsuSC51c2VDYWxsYmFjayhlLG4pfSxuLnVzZUNvbnRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGsuSC51c2VDb250ZXh0KGUpfSxuLnVzZURlYnVnVmFsdWU9ZnVuY3Rpb24oKXt9LG4udXNlRGVmZXJyZWRWYWx1ZT1mdW5jdGlvbihlLG4pe3JldHVybiBrLkgudXNlRGVmZXJyZWRWYWx1ZShlLG4pfSxuLnVzZUVmZmVjdD1mdW5jdGlvbihlLG4pe3JldHVybiBrLkgudXNlRWZmZWN0KGUsbil9LG4udXNlSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gay5ILnVzZUlkKCl9LG4udXNlSW1wZXJhdGl2ZUhhbmRsZT1mdW5jdGlvbihlLG4sdCl7cmV0dXJuIGsuSC51c2VJbXBlcmF0aXZlSGFuZGxlKGUsbix0KX0sbi51c2VJbnNlcnRpb25FZmZlY3Q9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gay5ILnVzZUluc2VydGlvbkVmZmVjdChlLG4pfSxuLnVzZUxheW91dEVmZmVjdD1mdW5jdGlvbihlLG4pe3JldHVybiBrLkgudXNlTGF5b3V0RWZmZWN0KGUsbil9LG4udXNlTWVtbz1mdW5jdGlvbihlLG4pe3JldHVybiBrLkgudXNlTWVtbyhlLG4pfSxuLnVzZU9wdGltaXN0aWM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gay5ILnVzZU9wdGltaXN0aWMoZSxuKX0sbi51c2VSZWR1Y2VyPWZ1bmN0aW9uKGUsbix0KXtyZXR1cm4gay5ILnVzZVJlZHVjZXIoZSxuLHQpfSxuLnVzZVJlZj1mdW5jdGlvbihlKXtyZXR1cm4gay5ILnVzZVJlZihlKX0sbi51c2VTdGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gay5ILnVzZVN0YXRlKGUpfSxuLnVzZVN5bmNFeHRlcm5hbFN0b3JlPWZ1bmN0aW9uKGUsbix0KXtyZXR1cm4gay5ILnVzZVN5bmNFeHRlcm5hbFN0b3JlKGUsbix0KX0sbi51c2VUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGsuSC51c2VUcmFuc2l0aW9uKCl9LG4udmVyc2lvbj1cIjE5LjIuMC1jYW5hcnktOTdjZGQ1ZDMtMjAyNTA3MTBcIn0sXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QvaW5kZXguanNcIjpmdW5jdGlvbihlLG4sdCl7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QvY2pzL3JlYWN0LnByb2R1Y3Rpb24uanNcIil9LFwiLi9kaXN0L2NvbXBpbGVkL3JlYWN0L2pzeC1ydW50aW1lLmpzXCI6ZnVuY3Rpb24oZSxuLHQpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz10KFwiLi9kaXN0L2NvbXBpbGVkL3JlYWN0L2Nqcy9yZWFjdC1qc3gtcnVudGltZS5wcm9kdWN0aW9uLmpzXCIpfSxcIi4vZGlzdC9jb21waWxlZC9zY2hlZHVsZXIvY2pzL3NjaGVkdWxlci5wcm9kdWN0aW9uLmpzXCI6ZnVuY3Rpb24oZSxuKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiB0KGUsbil7dmFyIHQ9ZS5sZW5ndGg7Zm9yKGUucHVzaChuKTswPHQ7KXt2YXIgcj10LTE+Pj4xLG89ZVtyXTtpZigwPGEobyxuKSllW3JdPW4sZVt0XT1vLHQ9cjtlbHNlIGJyZWFrfX1mdW5jdGlvbiByKGUpe3JldHVybiAwPT09ZS5sZW5ndGg/bnVsbDplWzBdfWZ1bmN0aW9uIG8oZSl7aWYoMD09PWUubGVuZ3RoKXJldHVybiBudWxsO3ZhciBuPWVbMF0sdD1lLnBvcCgpO2lmKHQhPT1uKXtlWzBdPXQ7Zm9yKHZhciByPTAsbz1lLmxlbmd0aCxpPW8+Pj4xO3I8aTspe3ZhciBsPTIqKHIrMSktMSxzPWVbbF0sYz1sKzEsdT1lW2NdO2lmKDA+YShzLHQpKWM8byYmMD5hKHUscyk/KGVbcl09dSxlW2NdPXQscj1jKTooZVtyXT1zLGVbbF09dCxyPWwpO2Vsc2UgaWYoYzxvJiYwPmEodSx0KSllW3JdPXUsZVtjXT10LHI9YztlbHNlIGJyZWFrfX1yZXR1cm4gbn1mdW5jdGlvbiBhKGUsbil7dmFyIHQ9ZS5zb3J0SW5kZXgtbi5zb3J0SW5kZXg7cmV0dXJuIDAhPT10P3Q6ZS5pZC1uLmlkfWlmKG4udW5zdGFibGVfbm93PXZvaWQgMCxcIm9iamVjdFwiPT10eXBlb2YgcGVyZm9ybWFuY2UmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHBlcmZvcm1hbmNlLm5vdyl7dmFyIGksbD1wZXJmb3JtYW5jZTtuLnVuc3RhYmxlX25vdz1mdW5jdGlvbigpe3JldHVybiBsLm5vdygpfX1lbHNle3ZhciBzPURhdGUsYz1zLm5vdygpO24udW5zdGFibGVfbm93PWZ1bmN0aW9uKCl7cmV0dXJuIHMubm93KCktY319dmFyIHU9W10sZD1bXSxmPTEscD1udWxsLGg9MyxnPSExLG09ITEsdj0hMSxiPSExLHk9XCJmdW5jdGlvblwiPT10eXBlb2Ygc2V0VGltZW91dD9zZXRUaW1lb3V0Om51bGwseD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0Om51bGwsdz1cInVuZGVmaW5lZFwiIT10eXBlb2Ygc2V0SW1tZWRpYXRlP3NldEltbWVkaWF0ZTpudWxsO2Z1bmN0aW9uIGooZSl7Zm9yKHZhciBuPXIoZCk7bnVsbCE9PW47KXtpZihudWxsPT09bi5jYWxsYmFjaylvKGQpO2Vsc2UgaWYobi5zdGFydFRpbWU8PWUpbyhkKSxuLnNvcnRJbmRleD1uLmV4cGlyYXRpb25UaW1lLHQodSxuKTtlbHNlIGJyZWFrO249cihkKX19ZnVuY3Rpb24gayhlKXtpZih2PSExLGooZSksIW0paWYobnVsbCE9PXIodSkpbT0hMCxBfHwoQT0hMCxpKCkpO2Vsc2V7dmFyIG49cihkKTtudWxsIT09biYmTChrLG4uc3RhcnRUaW1lLWUpfX12YXIgQT0hMSxPPS0xLEM9NSxTPS0xO2Z1bmN0aW9uIEUoKXtyZXR1cm4hIWJ8fCEobi51bnN0YWJsZV9ub3coKS1TPEMpfWZ1bmN0aW9uIF8oKXtpZihiPSExLEEpe3ZhciBlPW4udW5zdGFibGVfbm93KCk7Uz1lO3ZhciB0PSEwO3RyeXtlOnttPSExLHYmJih2PSExLHgoTyksTz0tMSksZz0hMDt2YXIgYT1oO3RyeXtuOntmb3IoaihlKSxwPXIodSk7bnVsbCE9PXAmJiEocC5leHBpcmF0aW9uVGltZT5lJiZFKCkpOyl7dmFyIGw9cC5jYWxsYmFjaztpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBsKXtwLmNhbGxiYWNrPW51bGwsaD1wLnByaW9yaXR5TGV2ZWw7dmFyIHM9bChwLmV4cGlyYXRpb25UaW1lPD1lKTtpZihlPW4udW5zdGFibGVfbm93KCksXCJmdW5jdGlvblwiPT10eXBlb2Ygcyl7cC5jYWxsYmFjaz1zLGooZSksdD0hMDticmVhayBufXA9PT1yKHUpJiZvKHUpLGooZSl9ZWxzZSBvKHUpO3A9cih1KX1pZihudWxsIT09cCl0PSEwO2Vsc2V7dmFyIGM9cihkKTtudWxsIT09YyYmTChrLGMuc3RhcnRUaW1lLWUpLHQ9ITF9fWJyZWFrIGV9ZmluYWxseXtwPW51bGwsaD1hLGc9ITF9fX1maW5hbGx5e3Q/aSgpOkE9ITF9fX1pZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB3KWk9ZnVuY3Rpb24oKXt3KF8pfTtlbHNlIGlmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBNZXNzYWdlQ2hhbm5lbCl7dmFyIFA9bmV3IE1lc3NhZ2VDaGFubmVsLHo9UC5wb3J0MjtQLnBvcnQxLm9ubWVzc2FnZT1fLGk9ZnVuY3Rpb24oKXt6LnBvc3RNZXNzYWdlKG51bGwpfX1lbHNlIGk9ZnVuY3Rpb24oKXt5KF8sMCl9O2Z1bmN0aW9uIEwoZSx0KXtPPXkoZnVuY3Rpb24oKXtlKG4udW5zdGFibGVfbm93KCkpfSx0KX1uLnVuc3RhYmxlX0lkbGVQcmlvcml0eT01LG4udW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHk9MSxuLnVuc3RhYmxlX0xvd1ByaW9yaXR5PTQsbi51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eT0zLG4udW5zdGFibGVfUHJvZmlsaW5nPW51bGwsbi51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eT0yLG4udW5zdGFibGVfY2FuY2VsQ2FsbGJhY2s9ZnVuY3Rpb24oZSl7ZS5jYWxsYmFjaz1udWxsfSxuLnVuc3RhYmxlX2ZvcmNlRnJhbWVSYXRlPWZ1bmN0aW9uKGUpezA+ZXx8MTI1PGU/Y29uc29sZS5lcnJvcihcImZvcmNlRnJhbWVSYXRlIHRha2VzIGEgcG9zaXRpdmUgaW50IGJldHdlZW4gMCBhbmQgMTI1LCBmb3JjaW5nIGZyYW1lIHJhdGVzIGhpZ2hlciB0aGFuIDEyNSBmcHMgaXMgbm90IHN1cHBvcnRlZFwiKTpDPTA8ZT9NYXRoLmZsb29yKDFlMy9lKTo1fSxuLnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIGh9LG4udW5zdGFibGVfbmV4dD1mdW5jdGlvbihlKXtzd2l0Y2goaCl7Y2FzZSAxOmNhc2UgMjpjYXNlIDM6dmFyIG49MzticmVhaztkZWZhdWx0Om49aH12YXIgdD1oO2g9bjt0cnl7cmV0dXJuIGUoKX1maW5hbGx5e2g9dH19LG4udW5zdGFibGVfcmVxdWVzdFBhaW50PWZ1bmN0aW9uKCl7Yj0hMH0sbi51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHk9ZnVuY3Rpb24oZSxuKXtzd2l0Y2goZSl7Y2FzZSAxOmNhc2UgMjpjYXNlIDM6Y2FzZSA0OmNhc2UgNTpicmVhaztkZWZhdWx0OmU9M312YXIgdD1oO2g9ZTt0cnl7cmV0dXJuIG4oKX1maW5hbGx5e2g9dH19LG4udW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjaz1mdW5jdGlvbihlLG8sYSl7dmFyIGw9bi51bnN0YWJsZV9ub3coKTtzd2l0Y2goYT1cIm9iamVjdFwiPT10eXBlb2YgYSYmbnVsbCE9PWEmJlwibnVtYmVyXCI9PXR5cGVvZihhPWEuZGVsYXkpJiYwPGE/bCthOmwsZSl7Y2FzZSAxOnZhciBzPS0xO2JyZWFrO2Nhc2UgMjpzPTI1MDticmVhaztjYXNlIDU6cz0weDNmZmZmZmZmO2JyZWFrO2Nhc2UgNDpzPTFlNDticmVhaztkZWZhdWx0OnM9NWUzfXJldHVybiBzPWErcyxlPXtpZDpmKyssY2FsbGJhY2s6byxwcmlvcml0eUxldmVsOmUsc3RhcnRUaW1lOmEsZXhwaXJhdGlvblRpbWU6cyxzb3J0SW5kZXg6LTF9LGE+bD8oZS5zb3J0SW5kZXg9YSx0KGQsZSksbnVsbD09PXIodSkmJmU9PT1yKGQpJiYodj8oeChPKSxPPS0xKTp2PSEwLEwoayxhLWwpKSk6KGUuc29ydEluZGV4PXMsdCh1LGUpLG18fGd8fChtPSEwLEF8fChBPSEwLGkoKSkpKSxlfSxuLnVuc3RhYmxlX3Nob3VsZFlpZWxkPUUsbi51bnN0YWJsZV93cmFwQ2FsbGJhY2s9ZnVuY3Rpb24oZSl7dmFyIG49aDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1oO2g9bjt0cnl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZpbmFsbHl7aD10fX19fSxcIi4vZGlzdC9jb21waWxlZC9zY2hlZHVsZXIvaW5kZXguanNcIjpmdW5jdGlvbihlLG4sdCl7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuL2Rpc3QvY29tcGlsZWQvc2NoZWR1bGVyL2Nqcy9zY2hlZHVsZXIucHJvZHVjdGlvbi5qc1wiKX0sXCIuL2Rpc3QvY29tcGlsZWQvc3RhY2t0cmFjZS1wYXJzZXIvc3RhY2stdHJhY2UtcGFyc2VyLmNqcy5qc1wiOmZ1bmN0aW9uKGUpeygoKT0+e1widXNlIHN0cmljdFwiO1widW5kZWZpbmVkXCIhPXR5cGVvZiBfX25jY3dwY2tfcmVxdWlyZV9fJiYoX19uY2N3cGNrX3JlcXVpcmVfXy5hYj1cIi8vXCIpO3ZhciBuLHQscixvLGEsaSxsLHMsYz17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxuPVwiPHVua25vd24+XCIsdD0vXlxccyphdCAoLio/KSA/XFwoKCg/OmZpbGV8aHR0cHM/fGJsb2J8Y2hyb21lLWV4dGVuc2lvbnxuYXRpdmV8ZXZhbHx3ZWJwYWNrfHdlYnBhY2staW50ZXJuYWx8cnNjfHR1cmJvcGFja3w8YW5vbnltb3VzPnxcXC98W2Etel06XFxcXHxcXFxcXFxcXCkuKj8pKD86OihcXGQrKSk/KD86OihcXGQrKSk/XFwpP1xccyokL2kscj0vXFwoKFxcUyopKD86OihcXGQrKSkoPzo6KFxcZCspKVxcKS8sbz0vXlxccyphdCAoPzooKD86XFxbb2JqZWN0IG9iamVjdFxcXSk/LispICk/XFwoPygoPzpmaWxlfG1zLWFwcHh8aHR0cHM/fHdlYnBhY2t8d2VicGFjay1pbnRlcm5hbHxyc2N8dHVyYm9wYWNrfGJsb2IpOi4qPyk6KFxcZCspKD86OihcXGQrKSk/XFwpP1xccyokL2ksYT0vXlxccyooLio/KSg/OlxcKCguKj8pXFwpKT8oPzpefEApKCg/OmZpbGV8aHR0cHM/fGJsb2J8Y2hyb21lfHdlYnBhY2t8d2VicGFjay1pbnRlcm5hbHxyc2N8dHVyYm9wYWNrfHJlc291cmNlfFxcW25hdGl2ZSkuKj98W15AXSpidW5kbGUpKD86OihcXGQrKSk/KD86OihcXGQrKSk/XFxzKiQvaSxpPS8oXFxTKykgbGluZSAoXFxkKykoPzogPiBldmFsIGxpbmUgXFxkKykqID4gZXZhbC9pLGw9L15cXHMqKD86KFteQF0qKSg/OlxcKCguKj8pXFwpKT9AKT8oXFxTLio/KTooXFxkKykoPzo6KFxcZCspKT9cXHMqJC9pLHM9L15cXHMqYXQgKD86KCg/OlxcW29iamVjdCBvYmplY3RcXF0pP1teXFxcXC9dKyg/OiBcXFthcyBcXFMrXFxdKT8pICk/XFwoPyguKj8pOihcXGQrKSg/OjooXFxkKykpP1xcKT9cXHMqJC9pLGMucGFyc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3BsaXQoXCJcXG5cIikucmVkdWNlKGZ1bmN0aW9uKGUsYyl7dmFyIHUsZCxmLHAsaCxnLG09ZnVuY3Rpb24oZSl7dmFyIG89dC5leGVjKGUpO2lmKCFvKXJldHVybiBudWxsO3ZhciBhPW9bMl0mJjA9PT1vWzJdLmluZGV4T2YoXCJuYXRpdmVcIiksaT1vWzJdJiYwPT09b1syXS5pbmRleE9mKFwiZXZhbFwiKSxsPXIuZXhlYyhvWzJdKTtyZXR1cm4gaSYmbnVsbCE9bCYmKG9bMl09bFsxXSxvWzNdPWxbMl0sb1s0XT1sWzNdKSx7ZmlsZTphP251bGw6b1syXSxtZXRob2ROYW1lOm9bMV18fG4sYXJndW1lbnRzOmE/W29bMl1dOltdLGxpbmVOdW1iZXI6b1szXT8rb1szXTpudWxsLGNvbHVtbjpvWzRdPytvWzRdOm51bGx9fShjKXx8KHU9YywoZD1vLmV4ZWModSkpP3tmaWxlOmRbMl0sbWV0aG9kTmFtZTpkWzFdfHxuLGFyZ3VtZW50czpbXSxsaW5lTnVtYmVyOitkWzNdLGNvbHVtbjpkWzRdPytkWzRdOm51bGx9Om51bGwpfHxmdW5jdGlvbihlKXt2YXIgdD1hLmV4ZWMoZSk7aWYoIXQpcmV0dXJuIG51bGw7dmFyIHI9dFszXSYmdFszXS5pbmRleE9mKFwiID4gZXZhbFwiKT4tMSxvPWkuZXhlYyh0WzNdKTtyZXR1cm4gciYmbnVsbCE9byYmKHRbM109b1sxXSx0WzRdPW9bMl0sdFs1XT1udWxsKSx7ZmlsZTp0WzNdLG1ldGhvZE5hbWU6dFsxXXx8bixhcmd1bWVudHM6dFsyXT90WzJdLnNwbGl0KFwiLFwiKTpbXSxsaW5lTnVtYmVyOnRbNF0/K3RbNF06bnVsbCxjb2x1bW46dFs1XT8rdFs1XTpudWxsfX0oYyl8fChmPWMsKHA9cy5leGVjKGYpKT97ZmlsZTpwWzJdLG1ldGhvZE5hbWU6cFsxXXx8bixhcmd1bWVudHM6W10sbGluZU51bWJlcjorcFszXSxjb2x1bW46cFs0XT8rcFs0XTpudWxsfTpudWxsKXx8KGg9YywoZz1sLmV4ZWMoaCkpP3tmaWxlOmdbM10sbWV0aG9kTmFtZTpnWzFdfHxuLGFyZ3VtZW50czpbXSxsaW5lTnVtYmVyOitnWzRdLGNvbHVtbjpnWzVdPytnWzVdOm51bGx9Om51bGwpO3JldHVybiBtJiZlLnB1c2gobSksZX0sW10pfSxlLmV4cG9ydHM9Y30pKCl9LFwiLi9kaXN0L2NvbXBpbGVkL3N0cmlwLWFuc2kvaW5kZXguanNcIjpmdW5jdGlvbihlKXsoKCk9PntcInVzZSBzdHJpY3RcIjt2YXIgbj17NTExOmU9PntlLmV4cG9ydHM9KHtvbmx5Rmlyc3Q6ZT0hMX09e30pPT5SZWdFeHAoXCJbXFxcXHUwMDFCXFxcXHUwMDlCXVtbXFxcXF0oKSM7P10qKD86KD86KD86KD86O1stYS16QS1aXFxcXGRcXFxcLyMmLjo9PyVAfl9dKykqfFthLXpBLVpcXFxcZF0rKD86O1stYS16QS1aXFxcXGRcXFxcLyMmLjo9PyVAfl9dKikqKT9cXFxcdTAwMDcpfCg/Oig/OlxcXFxkezEsNH0oPzo7XFxcXGR7MCw0fSkqKT9bXFxcXGRBLVBSLVRaY2YtbnRxcnk9Pjx+XSkpXCIsZT92b2lkIDA6XCJnXCIpfSw1MzI6KGUsbix0KT0+e2xldCByPXQoNTExKTtlLmV4cG9ydHM9ZT0+XCJzdHJpbmdcIj09dHlwZW9mIGU/ZS5yZXBsYWNlKHIoKSxcIlwiKTplfX0sdD17fTtmdW5jdGlvbiByKGUpe3ZhciBvPXRbZV07aWYodm9pZCAwIT09bylyZXR1cm4gby5leHBvcnRzO3ZhciBhPXRbZV09e2V4cG9ydHM6e319LGk9ITA7dHJ5e25bZV0oYSxhLmV4cG9ydHMsciksaT0hMX1maW5hbGx5e2kmJmRlbGV0ZSB0W2VdfXJldHVybiBhLmV4cG9ydHN9ci5hYj1cIi8vXCIsZS5leHBvcnRzPXIoNTMyKX0pKCl9LFwiLi9zcmMvYnVpbGQvd2VicGFjay9sb2FkZXJzL2RldnRvb2wvZGV2dG9vbC1zdHlsZS1pbmplY3QuanNcIjpmdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7bGV0IGU9d2luZG93Ll9uZXh0anNEZXZ0b29sc1N0eWxlQ2FjaGU7aWYoZS5jYWNoZWRTaGFkb3dSb290KXJldHVybiBlLmNhY2hlZFNoYWRvd1Jvb3Q7bGV0IG49ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIm5leHRqcy1wb3J0YWxcIiksdD1uPy5zaGFkb3dSb290fHxudWxsO3JldHVybiB0JiYoZS5jYWNoZWRTaGFkb3dSb290PXQpLHR9ZnVuY3Rpb24gdChlLG4pe2xldCB0PXdpbmRvdy5fbmV4dGpzRGV2dG9vbHNTdHlsZUNhY2hlO3QubGFzdEluc2VydGVkRWxlbWVudD90Lmxhc3RJbnNlcnRlZEVsZW1lbnQubmV4dFNpYmxpbmc/bi5pbnNlcnRCZWZvcmUoZSx0Lmxhc3RJbnNlcnRlZEVsZW1lbnQubmV4dFNpYmxpbmcpOm4uYXBwZW5kQ2hpbGQoZSk6bi5pbnNlcnRCZWZvcmUoZSxuLmZpcnN0Q2hpbGQpLHQubGFzdEluc2VydGVkRWxlbWVudD1lfWZ1bmN0aW9uIHIoKXtsZXQgZT13aW5kb3cuX25leHRqc0RldnRvb2xzU3R5bGVDYWNoZSxyPW4oKTtyJiYoZS5wZW5kaW5nRWxlbWVudHMuZm9yRWFjaChlPT57dChlLHIpfSksZS5wZW5kaW5nRWxlbWVudHM9W10pfVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJih3aW5kb3cuX25leHRqc0RldnRvb2xzU3R5bGVDYWNoZT13aW5kb3cuX25leHRqc0RldnRvb2xzU3R5bGVDYWNoZXx8e3BlbmRpbmdFbGVtZW50czpbXSxpc09ic2VydmluZzohMSxsYXN0SW5zZXJ0ZWRFbGVtZW50Om51bGwsY2FjaGVkU2hhZG93Um9vdDpudWxsfSksZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2Uuc2V0QXR0cmlidXRlKFwiZGF0YS1uZXh0anMtZGV2LXRvb2wtc3R5bGVcIixcInRydWVcIik7bGV0IG89bigpO28/dChlLG8pOih3aW5kb3cuX25leHRqc0RldnRvb2xzU3R5bGVDYWNoZS5wZW5kaW5nRWxlbWVudHMucHVzaChlKSxmdW5jdGlvbigpe2xldCBlPXdpbmRvdy5fbmV4dGpzRGV2dG9vbHNTdHlsZUNhY2hlO2lmKGUuaXNPYnNlcnZpbmcpcmV0dXJuO2lmKGUuaXNPYnNlcnZpbmc9ITAsbigpKXJldHVybiByKCk7bGV0IHQ9bmV3IE11dGF0aW9uT2JzZXJ2ZXIobz0+e2lmKDA9PT1vLmxlbmd0aHx8MD09PW9bMF0uYWRkZWROb2Rlcy5sZW5ndGgpcmV0dXJuO2xldCBhPW9bMF0uYWRkZWROb2Rlc1swXSxpPW51bGw7aWYoXCJTQ1JJUFRcIj09PWEudGFnTmFtZSYmYS5nZXRBdHRyaWJ1dGUoXCJkYXRhLW5leHRqcy1kZXYtb3ZlcmxheVwiKT9pPWEuZmlyc3RDaGlsZDpcIk5FWFRKUy1QT1JUQUxcIj09PWEudGFnTmFtZSYmKGk9YSksIWkpcmV0dXJuO2xldCBsPSgpPT57bigpPyhyKCksdC5kaXNjb25uZWN0KCksZS5pc09ic2VydmluZz0hMSk6c2V0VGltZW91dChsLDIwKX07bCgpfSk7dC5vYnNlcnZlKGRvY3VtZW50LmJvZHkse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSl9KCkpfX0sXCIuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L2NvbXBvbmVudHMvZXJyb3JzL2Rldi10b29scy1pbmRpY2F0b3IvZGV2LXRvb2xzLWluZm8vZGV2LXRvb2xzLWluZm8udHN4XCI6ZnVuY3Rpb24oZSxuLHQpe1widXNlIHN0cmljdFwiO3QuZChuLHtnOigpPT5zLHg6KCk9Pmx9KTt2YXIgcj10KFwiLi9kaXN0L2NvbXBpbGVkL3JlYWN0L2pzeC1ydW50aW1lLmpzXCIpLG89dChcIi4vZGlzdC9jb21waWxlZC9yZWFjdC9pbmRleC5qc1wiKSxhPXQoXCIuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L2NvbXBvbmVudHMvZXJyb3JzL2Rldi10b29scy1pbmRpY2F0b3IvdXRpbHMudHNcIiksaT10KFwiLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9ob29rcy91c2UtZGVsYXllZC1yZW5kZXIudHNcIik7ZnVuY3Rpb24gbChlKXt2YXIgbix0LGw9ZS50aXRsZSxzPWUuY2hpbGRyZW4sdT1lLmxlYXJuTW9yZUxpbmssZD1lLmlzT3BlbixmPWUudHJpZ2dlclJlZixwPWUuY2xvc2UsaD1mdW5jdGlvbihlLG4pe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHQscixvPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSxuLmluZGV4T2YodCk+PTB8fChvW3RdPWVbdF0pO3JldHVybiBvfShlLG4pO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl0PWFbcl0sIShuLmluZGV4T2YodCk+PTApJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSx0KSYmKG9bdF09ZVt0XSl9cmV0dXJuIG99KGUsW1widGl0bGVcIixcImNoaWxkcmVuXCIsXCJsZWFybk1vcmVMaW5rXCIsXCJpc09wZW5cIixcInRyaWdnZXJSZWZcIixcImNsb3NlXCJdKSxnPSgwLG8udXNlUmVmKShudWxsKSxtPSgwLG8udXNlUmVmKShudWxsKSx2PSgwLGkuTikoZCx7ZW50ZXJEZWxheTowLGV4aXREZWxheTphLks3fSksYj12Lm1vdW50ZWQseT12LnJlbmRlcmVkO3JldHVybigoMCxhLlA1KShnLGYsZCxmdW5jdGlvbigpe3ZhciBlO251bGw9PShlPW0uY3VycmVudCl8fGUuZm9jdXMoKX0pLCgwLGEuTzgpKGcsZixiLHApLGIpPygwLHIuanN4KShcImRpdlwiLChuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcjtyPXRbbl0sbiBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW25dPXJ9KX1yZXR1cm4gZX0oe3RhYkluZGV4Oi0xLHJvbGU6XCJkaWFsb2dcIixyZWY6ZyxcImRhdGEtaW5mby1wb3BvdmVyXCI6ITB9LGgpLHQ9dD17XCJkYXRhLXJlbmRlcmVkXCI6eSxjaGlsZHJlbjooMCxyLmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvbnRhaW5lclwiLGNoaWxkcmVuOlsoMCxyLmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWhlYWRlclwiLGNoaWxkcmVuOlsoMCxyLmpzeCkoXCJidXR0b25cIix7cmVmOm0sY2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY2xvc2UtYnV0dG9uXCIsb25DbGljazpwLFwiYXJpYS1sYWJlbFwiOlwiQ2xvc2UgZGlhbG9nXCIsY2hpbGRyZW46KDAsci5qc3gpKGMse30pfSksKDAsci5qc3gpKFwiaDNcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tdGl0bGVcIixjaGlsZHJlbjpsfSldfSksKDAsci5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1ib2R5XCIsY2hpbGRyZW46W3MsdSYmKDAsci5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWJ1dHRvbi1jb250YWluZXJcIixjaGlsZHJlbjooMCxyLmpzeCkoXCJhXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWxlYXJuLW1vcmUtYnV0dG9uXCIsaHJlZjp1LHRhcmdldDpcIl9ibGFua1wiLHJlbDpcIm5vcmVmZXJyZXIgbm9vcGVuZXJcIixjaGlsZHJlbjpcIkxlYXJuIE1vcmVcIn0pfSldfSldfSl9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG4sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkpfSksbikpOm51bGx9dmFyIHM9XCJcXG4gIFtkYXRhLWluZm8tcG9wb3Zlcl0ge1xcbiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMTAwKTtcXG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS1hbHBoYS00MDApO1xcbiAgICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xcbiAgICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctbWVudSk7XFxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQteGwpO1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrLXNhbnMpO1xcbiAgICB6LWluZGV4OiAzO1xcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgICBvdXRsaW5lOiAwO1xcbiAgICBtaW4td2lkdGg6IDM1MHB4O1xcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IHZhcigtLWFuaW1hdGUtb3V0LWR1cmF0aW9uLW1zKVxcbiAgICAgIHZhcigtLWFuaW1hdGUtb3V0LXRpbWluZy1mdW5jdGlvbik7XFxuXFxuICAgICZbZGF0YS1yZW5kZXJlZD0ndHJ1ZSddIHtcXG4gICAgICBvcGFjaXR5OiAxO1xcbiAgICAgIHNjYWxlOiAxO1xcbiAgICB9XFxuXFxuICAgIGJ1dHRvbjpmb2N1cy12aXNpYmxlIHtcXG4gICAgICBvdXRsaW5lOiB2YXIoLS1mb2N1cy1yaW5nKTtcXG4gICAgfVxcbiAgfVxcblxcbiAgLmRldi10b29scy1pbmZvLWNvbnRhaW5lciB7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgfVxcblxcbiAgLmRldi10b29scy1pbmZvLWJvZHkge1xcbiAgICBwYWRkaW5nOiAxNnB4O1xcbiAgfVxcblxcbiAgLmRldi10b29scy1pbmZvLWhlYWRlciB7XFxuICAgIGhlaWdodDogNDhweDtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgZ2FwOiA2cHg7XFxuICAgIHBhZGRpbmc6IDZweCA4cHg7XFxuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LWFscGhhLTQwMCk7XFxuICB9XFxuXFxuICAuZGV2LXRvb2xzLWluZm8tY2xvc2UtYnV0dG9uIHtcXG4gICAgYWxsOiB1bnNldDtcXG4gICAgd2lkdGg6IDIwcHg7XFxuICAgIGhlaWdodDogMjBweDsgICAgXFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS05MDApO1xcbiAgICB0cmFuc2l0aW9uOiBjb2xvciAxNTBtcyBlYXNlO1xcbiAgICB0cmFuc2xhdGU6IDAgMXB4O1xcbiAgICBib3JkZXItcmFkaXVzOiAzcHg7XFxuXFxuICAgICY6aG92ZXIge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbiAgICB9XFxuICB9XFxuXFxuICAuZGV2LXRvb2xzLWluZm8tdGl0bGUge1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE0KTtcXG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLXNpemUtMjApO1xcbiAgICBtYXJnaW46IDA7XFxuICB9XFxuXFxuICAuZGV2LXRvb2xzLWluZm8tc2VjdGlvbi10aXRsZSB7XFxuICAgIHBhZGRpbmc6IDhweCAwcHg7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTYpO1xcbiAgICBmb250LXdlaWdodDogNjAwO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tc2l6ZS0yMCk7XFxuICAgIG1hcmdpbjogMDtcXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5mby1hcnRpY2xlIHtcXG4gICAgcGFkZGluZzogOHB4IDZweDtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNCk7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1zaXplLTIwKTtcXG4gICAgbWFyZ2luOiAwO1xcbiAgfVxcbiAgLmRldi10b29scy1pbmZvLXBhcmFncmFwaCB7XFxuICAgICY6bGFzdC1jaGlsZCB7XFxuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcXG4gICAgfVxcbiAgfVxcblxcbiAgLmRldi10b29scy1pbmZvLWJ1dHRvbi1jb250YWluZXIge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICB9XFxuXFxuICAuZGV2LXRvb2xzLWluZm8tbGVhcm4tbW9yZS1idXR0b24ge1xcbiAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XFxuICAgIHBhZGRpbmc6IDAgOHB4O1xcbiAgICBoZWlnaHQ6IHZhcigtLXNpemUtMjgpO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTQpO1xcbiAgICBmb250LXdlaWdodDogNTAwO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tc2l6ZS0yMCk7XFxuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgdmFyKC0tZHVyYXRpb24tc2hvcnQpIGVhc2U7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtbWQtMik7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgfVxcblxcbiAgLmRldi10b29scy1pbmZvLWxlYXJuLW1vcmUtYnV0dG9uOmhvdmVyIHtcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xcbiAgICBvcGFjaXR5OiAwLjk7XFxuICB9XFxuXCI7ZnVuY3Rpb24gYygpe3JldHVybigwLHIuanN4KShcInN2Z1wiLHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTZcIix2aWV3Qm94OlwiMCAwIDE2IDE2XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsY2hpbGRyZW46KDAsci5qc3gpKFwicGF0aFwiLHtkOlwiTTUuMTQ2NDUgOC43MDcwM0M0Ljc1NTk1IDguMzE2NTEgNC43NTU5NSA3LjY4MzQ5IDUuMTQ2NDUgNy4yOTI5N0wxMC41IDEuOTM5NDVMMTEuNTYwNSAzTDYuNTYwNTEgOEwxMS41NjA1IDEzTDEwLjUgMTQuMDYwNUw1LjE0NjQ1IDguNzA3MDNaXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSl9KX19LFwiLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9jb21wb25lbnRzL2Vycm9ycy9kZXYtdG9vbHMtaW5kaWNhdG9yL2Rldi10b29scy1pbmZvL3NlZ21lbnRzLWV4cGxvcmVyLnRzeFwiOmZ1bmN0aW9uKGUsbix0KXtcInVzZSBzdHJpY3RcIjt0LmQobix7VzooKT0+aX0pO3ZhciByPXQoXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QvanN4LXJ1bnRpbWUuanNcIiksbz10KFwiLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9jb21wb25lbnRzL292ZXJ2aWV3L3NlZ21lbnQtZXhwbG9yZXIudHN4XCIpLGE9dChcIi4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvY29tcG9uZW50cy9lcnJvcnMvZGV2LXRvb2xzLWluZGljYXRvci9kZXYtdG9vbHMtaW5mby9kZXYtdG9vbHMtaW5mby50c3hcIik7ZnVuY3Rpb24gaShlKXt2YXIgbix0LGk9ZS5yb3V0ZXJUeXBlLGw9ZS5wYWdlLHM9ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz1mdW5jdGlvbihlLG4pe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHQscixvPXt9LGE9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl0PWFbcl0sbi5pbmRleE9mKHQpPj0wfHwob1t0XT1lW3RdKTtyZXR1cm4gb30oZSxuKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLCEobi5pbmRleE9mKHQpPj0wKSYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsdCkmJihvW3RdPWVbdF0pfXJldHVybiBvfShlLFtcInJvdXRlclR5cGVcIixcInBhZ2VcIl0pO3JldHVybigwLHIuanN4KShhLngsKG49ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByO3I9dFtuXSxuIGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbbl09cn0pfXJldHVybiBlfSh7dGl0bGU6XCJSb3V0ZSBJbmZvXCJ9LHMpLHQ9dD17Y2hpbGRyZW46KDAsci5qc3gpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtc2VnbWVudHMtZXhwbG9yZXJcIjohMCxzdHlsZTp7bWFyZ2luOlwiLTE2cHhcIn0sY2hpbGRyZW46KDAsci5qc3gpKG8udSx7aXNBcHBSb3V0ZXI6XCJhcHBcIj09PWkscGFnZTpsfSl9KX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKSl9KSxuKSl9fSxcIi4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvY29tcG9uZW50cy9lcnJvcnMvZGV2LXRvb2xzLWluZGljYXRvci91dGlscy50c1wiOmZ1bmN0aW9uKGUsbix0KXtcInVzZSBzdHJpY3RcIjt0LmQobix7Szc6KCk9PnMsTzg6KCk9PmwsUDU6KCk9PmEsdUQ6KCk9PmMsdlk6KCk9Pml9KTt2YXIgcj10KFwiLi9kaXN0L2NvbXBpbGVkL3JlYWN0L2luZGV4LmpzXCIpO2Z1bmN0aW9uIG8oZSxuKXsobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxyPUFycmF5KG4pO3Q8bjt0Kyspclt0XT1lW3RdO3JldHVybiByfWZ1bmN0aW9uIGEoZSxuLHQsYSl7KDAsci51c2VFZmZlY3QpKGZ1bmN0aW9uKCl7dmFyIHI9ZnVuY3Rpb24oZSl7aWYoXCJUYWJcIj09PWUua2V5JiZudWxsIT09bCl7dmFyIG4sdCxyPSh0PShuPWwucXVlcnlTZWxlY3RvckFsbCgnYnV0dG9uLCBbaHJlZl0sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBbdGFiaW5kZXhdOm5vdChbdGFiaW5kZXg9XCItMVwiXSknKSk/W25bMF0sbltuLmxlbmd0aC0xXV06W10sZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0odCl8fGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0odD1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2godC52YWx1ZSksYS5sZW5ndGghPT1uKTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0odCwyKXx8ZnVuY3Rpb24oZSxuKXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gbyhlLDIpO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20odCk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiBvKGUsbil9fSh0LDIpfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpKSxhPXJbMF0scz1yWzFdLGM9aShsKTtlLnNoaWZ0S2V5P2M9PT1hJiYobnVsbD09c3x8cy5mb2N1cygpLGUucHJldmVudERlZmF1bHQoKSk6Yz09PXMmJihudWxsPT1hfHxhLmZvY3VzKCksZS5wcmV2ZW50RGVmYXVsdCgpKX19LGw9bnVsbCxzPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihsPWUuY3VycmVudCx0KWE/YSgpOm51bGw9PWx8fGwuZm9jdXMoKSxudWxsPT1sfHxsLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIscik7ZWxzZXt2YXIgbyxzPWkobCk7biYmKG51bGw9PWw/dm9pZCAwOmwuY29udGFpbnMocykpJiYobnVsbD09KG89bi5jdXJyZW50KXx8by5mb2N1cygpKX19KTtyZXR1cm4gZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQocyksbnVsbD09bHx8bC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLHIpfX0sW3RdKX1mdW5jdGlvbiBpKGUpe3ZhciBuLHQ9bnVsbD09ZT92b2lkIDA6ZS5nZXRSb290Tm9kZSgpO3JldHVybihudWxsIT0obj1TaGFkb3dSb290KSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmbltTeW1ib2wuaGFzSW5zdGFuY2VdPyEhbltTeW1ib2wuaGFzSW5zdGFuY2VdKHQpOnQgaW5zdGFuY2VvZiBuKT9udWxsPT10P3ZvaWQgMDp0LmFjdGl2ZUVsZW1lbnQ6bnVsbH1mdW5jdGlvbiBsKGUsbix0LG8sYSl7KDAsci51c2VFZmZlY3QpKGZ1bmN0aW9uKCl7dmFyIHIsaT1mdW5jdGlvbih0KXt2YXIgcixhLGk9dC50YXJnZXQ7IShlLmN1cnJlbnQmJmUuY3VycmVudC5jb250YWlucyhpKSkmJihudWxsIT0ocj1lLmN1cnJlbnQpJiZyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpJiZ0LmNsaWVudFg+PWUuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0JiZ0LmNsaWVudFg8PWUuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodCYmdC5jbGllbnRZPj1lLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wJiZ0LmNsaWVudFk8PWUuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b218fG51bGwhPShhPW4uY3VycmVudCkmJmEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkmJnQuY2xpZW50WD49bi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQmJnQuY2xpZW50WDw9bi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0JiZ0LmNsaWVudFk+PW4uY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AmJnQuY2xpZW50WTw9bi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbXx8bygpKX0sbD1mdW5jdGlvbihlKXtcIkVzY2FwZVwiPT09ZS5rZXkmJm8oKX07aWYodCl7dmFyIHM9YXx8KG51bGw9PShyPWUuY3VycmVudCk/dm9pZCAwOnIub3duZXJEb2N1bWVudCk7cmV0dXJuIG51bGw9PXN8fHMuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLGkpLG51bGw9PXN8fHMuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixsKSxmdW5jdGlvbigpe251bGw9PXN8fHMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLGkpLG51bGw9PXN8fHMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixsKX19fSxbdCxlLG5dKX12YXIgcz0yMDAsYz1cImN1YmljLWJlemllcigwLjE3NSwgMC44ODUsIDAuMzIsIDEuMSlcIn0sXCIuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L2NvbXBvbmVudHMvb3ZlcnZpZXcvc2VnbWVudC1leHBsb3Jlci50c3hcIjpmdW5jdGlvbihlLG4sdCl7XCJ1c2Ugc3RyaWN0XCI7dC5kKG4se3U6KCk9PmF0fSk7dmFyIHIsbyxhLGksbD10KFwiLi9kaXN0L2NvbXBpbGVkL3JlYWN0L2pzeC1ydW50aW1lLmpzXCIpLHM9dChcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zdHlsZS1sb2FkZXJANC4wLjBfd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3YytoZWxwZXJzQDAuNS4xNV9fZXNidWlsZEAwLjI0LjJfL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiKSxjPXQubihzKSx1PXQoXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc3R5bGUtbG9hZGVyQDQuMC4wX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd2MraGVscGVyc0AwLjUuMTVfX2VzYnVpbGRAMC4yNC4yXy9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qc1wiKSxkPXQubih1KSxmPXQoXCIuL3NyYy9idWlsZC93ZWJwYWNrL2xvYWRlcnMvZGV2dG9vbC9kZXZ0b29sLXN0eWxlLWluamVjdC5qc1wiKSxwPXQubihmKSxoPXQoXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc3R5bGUtbG9hZGVyQDQuMC4wX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd2MraGVscGVyc0AwLjUuMTVfX2VzYnVpbGRAMC4yNC4yXy9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanNcIiksZz10Lm4oaCksbT10KFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3N0eWxlLWxvYWRlckA0LjAuMF93ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3djK2hlbHBlcnNAMC41LjE1X19lc2J1aWxkQDAuMjQuMl8vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzXCIpLHY9dC5uKG0pLGI9dChcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zdHlsZS1sb2FkZXJANC4wLjBfd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3YytoZWxwZXJzQDAuNS4xNV9fZXNidWlsZEAwLjI0LjJfL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzXCIpLHk9dC5uKGIpLHg9dChcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9jb21wb25lbnRzL292ZXJ2aWV3L3NlZ21lbnQtZXhwbG9yZXIuY3NzXCIpLHc9e307dy5zdHlsZVRhZ1RyYW5zZm9ybT15KCksdy5zZXRBdHRyaWJ1dGVzPWcoKSx3Lmluc2VydD1wKCksdy5kb21BUEk9ZCgpLHcuaW5zZXJ0U3R5bGVFbGVtZW50PXYoKSxjKCkoeC5aLHcpLHguWiYmeC5aLmxvY2FscyYmeC5aLmxvY2Fsczt2YXIgaj10KFwiLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9zZWdtZW50LWV4cGxvcmVyLXRyaWUudHNcIiksaz10KFwiLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS91dGlscy9jeC50c1wiKSxBPXQoXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvY29tcG9uZW50cy9vdmVydmlldy9zZWdtZW50LWJvdW5kYXJ5LXRyaWdnZXIuY3NzXCIpLE89e307Ty5zdHlsZVRhZ1RyYW5zZm9ybT15KCksTy5zZXRBdHRyaWJ1dGVzPWcoKSxPLmluc2VydD1wKCksTy5kb21BUEk9ZCgpLE8uaW5zZXJ0U3R5bGVFbGVtZW50PXYoKSxjKCkoQS5aLE8pLEEuWiYmQS5aLmxvY2FscyYmQS5aLmxvY2Fsczt2YXIgQz10KFwiLi9kaXN0L2NvbXBpbGVkL3JlYWN0L2luZGV4LmpzXCIpLFM9dC50KEMsMiksRT10KFwiLi9kaXN0L2NvbXBpbGVkL3JlYWN0LWRvbS9pbmRleC5qc1wiKTtsZXQgXz17fTtmdW5jdGlvbiBQKGUsbil7bGV0IHQ9Qy51c2VSZWYoXyk7cmV0dXJuIHQuY3VycmVudD09PV8mJih0LmN1cnJlbnQ9ZShuKSksdH1sZXQgej1TW2B1c2VJbnNlcnRpb25FZmZlY3Qke01hdGgucmFuZG9tKCkudG9GaXhlZCgxKX1gLnNsaWNlKDAsLTMpXSxMPXomJnohPT1DLnVzZUxheW91dEVmZmVjdD96OmU9PmUoKTtmdW5jdGlvbiBUKGUpe2xldCBuPVAoUikuY3VycmVudDtyZXR1cm4gbi5uZXh0PWUsTChuLmVmZmVjdCksbi50cmFtcG9saW5lfWZ1bmN0aW9uIFIoKXtsZXQgZT17bmV4dDp2b2lkIDAsY2FsbGJhY2s6Tix0cmFtcG9saW5lOiguLi5uKT0+ZS5jYWxsYmFjaz8uKC4uLm4pLGVmZmVjdDooKT0+e2UuY2FsbGJhY2s9ZS5uZXh0fX07cmV0dXJuIGV9ZnVuY3Rpb24gTigpe31mdW5jdGlvbiBEKCl7bGV0IGU9bmV3IE1hcDtyZXR1cm57ZW1pdChuLHQpe2UuZ2V0KG4pPy5mb3JFYWNoKGU9PmUodCkpfSxvbihuLHQpe2UuaGFzKG4pfHxlLnNldChuLG5ldyBTZXQpLGUuZ2V0KG4pLmFkZCh0KX0sb2ZmKG4sdCl7ZS5nZXQobik/LmRlbGV0ZSh0KX19fWxldCBCPXsuLi5TfSxNPTAsST1CLnVzZUlkO2Z1bmN0aW9uIEgoZSxuKXtpZih2b2lkIDAhPT1JKXtsZXQgdD1JKCk7cmV0dXJuIGU/PyhuP2Ake259LSR7dH1gOnQpfXJldHVybiBmdW5jdGlvbihlLG49XCJtdWlcIil7bGV0W3Qscl09Qy51c2VTdGF0ZShlKSxvPWV8fHQ7cmV0dXJuIEMudXNlRWZmZWN0KCgpPT57bnVsbD09dCYmKE0rPTEscihgJHtufS0ke019YCkpfSxbdCxuXSksb30oZSxuKX1sZXQgRj1cInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQ/Qy51c2VMYXlvdXRFZmZlY3Q6KCk9Pnt9LFU9Qy5jcmVhdGVDb250ZXh0KG51bGwpLFY9Qy5jcmVhdGVDb250ZXh0KG51bGwpLHE9KCk9PkMudXNlQ29udGV4dChVKT8uaWR8fG51bGwsVz0oKT0+Qy51c2VDb250ZXh0KFYpO2Z1bmN0aW9uICQoZSl7bGV0e2NoaWxkcmVuOm4saWQ6dH09ZSxyPXEoKTtyZXR1cm4oMCxsLmpzeCkoVS5Qcm92aWRlcix7dmFsdWU6Qy51c2VNZW1vKCgpPT4oe2lkOnQscGFyZW50SWQ6cn0pLFt0LHJdKSxjaGlsZHJlbjpufSl9ZnVuY3Rpb24gWihlKXtsZXR7Y2hpbGRyZW46bn09ZSx0PUMudXNlUmVmKFtdKSxyPUMudXNlQ2FsbGJhY2soZT0+e3QuY3VycmVudD1bLi4udC5jdXJyZW50LGVdfSxbXSksbz1DLnVzZUNhbGxiYWNrKGU9Pnt0LmN1cnJlbnQ9dC5jdXJyZW50LmZpbHRlcihuPT5uIT09ZSl9LFtdKSxbYV09Qy51c2VTdGF0ZSgoKT0+RCgpKTtyZXR1cm4oMCxsLmpzeCkoVi5Qcm92aWRlcix7dmFsdWU6Qy51c2VNZW1vKCgpPT4oe25vZGVzUmVmOnQsYWRkTm9kZTpyLHJlbW92ZU5vZGU6byxldmVudHM6YX0pLFtyLG8sYV0pLGNoaWxkcmVuOm59KX1mdW5jdGlvbiBZKGUpe2xldHtvcGVuOm49ITEsb25PcGVuQ2hhbmdlOnQsZWxlbWVudHM6cn09ZSxvPUgoKSxhPUMudXNlUmVmKHt9KSxbaV09Qy51c2VTdGF0ZSgoKT0+RCgpKSxsPW51bGwhPXEoKSxbcyxjXT1DLnVzZVN0YXRlKHIucmVmZXJlbmNlKSx1PVQoKGUsbixyKT0+e2EuY3VycmVudC5vcGVuRXZlbnQ9ZT9uOnZvaWQgMCxpLmVtaXQoXCJvcGVuY2hhbmdlXCIse29wZW46ZSxldmVudDpuLHJlYXNvbjpyLG5lc3RlZDpsfSksdD8uKGUsbixyKX0pLGQ9Qy51c2VNZW1vKCgpPT4oe3NldFBvc2l0aW9uUmVmZXJlbmNlOmN9KSxbXSksZj1DLnVzZU1lbW8oKCk9Pih7cmVmZXJlbmNlOnN8fHIucmVmZXJlbmNlfHxudWxsLGZsb2F0aW5nOnIuZmxvYXRpbmd8fG51bGwsZG9tUmVmZXJlbmNlOnIucmVmZXJlbmNlfSksW3Msci5yZWZlcmVuY2Usci5mbG9hdGluZ10pO3JldHVybiBDLnVzZU1lbW8oKCk9Pih7ZGF0YVJlZjphLG9wZW46bixvbk9wZW5DaGFuZ2U6dSxlbGVtZW50czpmLGV2ZW50czppLGZsb2F0aW5nSWQ6byxyZWZzOmR9KSxbbix1LGYsaSxvLGRdKX1mdW5jdGlvbiBYKCl7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvd31mdW5jdGlvbiBLKGUpe3JldHVybiBKKGUpPyhlLm5vZGVOYW1lfHxcIlwiKS50b0xvd2VyQ2FzZSgpOlwiI2RvY3VtZW50XCJ9ZnVuY3Rpb24gUShlKXt2YXIgbjtyZXR1cm4obnVsbD09ZXx8bnVsbD09KG49ZS5vd25lckRvY3VtZW50KT92b2lkIDA6bi5kZWZhdWx0Vmlldyl8fHdpbmRvd31mdW5jdGlvbiBHKGUpe3ZhciBuO3JldHVybiBudWxsPT0obj0oSihlKT9lLm93bmVyRG9jdW1lbnQ6ZS5kb2N1bWVudCl8fHdpbmRvdy5kb2N1bWVudCk/dm9pZCAwOm4uZG9jdW1lbnRFbGVtZW50fWZ1bmN0aW9uIEooZSl7cmV0dXJuISFYKCkmJihlIGluc3RhbmNlb2YgTm9kZXx8ZSBpbnN0YW5jZW9mIFEoZSkuTm9kZSl9ZnVuY3Rpb24gZWUoZSl7cmV0dXJuISFYKCkmJihlIGluc3RhbmNlb2YgRWxlbWVudHx8ZSBpbnN0YW5jZW9mIFEoZSkuRWxlbWVudCl9ZnVuY3Rpb24gZW4oZSl7cmV0dXJuISFYKCkmJihlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnR8fGUgaW5zdGFuY2VvZiBRKGUpLkhUTUxFbGVtZW50KX1mdW5jdGlvbiBldChlKXtyZXR1cm4hIVgoKSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFNoYWRvd1Jvb3QmJihlIGluc3RhbmNlb2YgU2hhZG93Um9vdHx8ZSBpbnN0YW5jZW9mIFEoZSkuU2hhZG93Um9vdCl9bGV0IGVyPW5ldyBTZXQoW1wiaW5saW5lXCIsXCJjb250ZW50c1wiXSk7ZnVuY3Rpb24gZW8oZSl7bGV0e292ZXJmbG93Om4sb3ZlcmZsb3dYOnQsb3ZlcmZsb3dZOnIsZGlzcGxheTpvfT1lZyhlKTtyZXR1cm4vYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW58Y2xpcC8udGVzdChuK3IrdCkmJiFlci5oYXMobyl9bGV0IGVhPW5ldyBTZXQoW1widGFibGVcIixcInRkXCIsXCJ0aFwiXSksZWk9W1wiOnBvcG92ZXItb3BlblwiLFwiOm1vZGFsXCJdO2Z1bmN0aW9uIGVsKGUpe3JldHVybiBlaS5zb21lKG49Pnt0cnl7cmV0dXJuIGUubWF0Y2hlcyhuKX1jYXRjaChlKXtyZXR1cm4hMX19KX1sZXQgZXM9W1widHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGVcIixcInNjYWxlXCIsXCJyb3RhdGVcIixcInBlcnNwZWN0aXZlXCJdLGVjPVtcInRyYW5zZm9ybVwiLFwidHJhbnNsYXRlXCIsXCJzY2FsZVwiLFwicm90YXRlXCIsXCJwZXJzcGVjdGl2ZVwiLFwiZmlsdGVyXCJdLGV1PVtcInBhaW50XCIsXCJsYXlvdXRcIixcInN0cmljdFwiLFwiY29udGVudFwiXTtmdW5jdGlvbiBlZChlKXtsZXQgbj1lZigpLHQ9ZWUoZSk/ZWcoZSk6ZTtyZXR1cm4gZXMuc29tZShlPT4hIXRbZV0mJlwibm9uZVwiIT09dFtlXSl8fCEhdC5jb250YWluZXJUeXBlJiZcIm5vcm1hbFwiIT09dC5jb250YWluZXJUeXBlfHwhbiYmISF0LmJhY2tkcm9wRmlsdGVyJiZcIm5vbmVcIiE9PXQuYmFja2Ryb3BGaWx0ZXJ8fCFuJiYhIXQuZmlsdGVyJiZcIm5vbmVcIiE9PXQuZmlsdGVyfHxlYy5zb21lKGU9Pih0LndpbGxDaGFuZ2V8fFwiXCIpLmluY2x1ZGVzKGUpKXx8ZXUuc29tZShlPT4odC5jb250YWlufHxcIlwiKS5pbmNsdWRlcyhlKSl9ZnVuY3Rpb24gZWYoKXtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgQ1NTJiYhIUNTUy5zdXBwb3J0cyYmQ1NTLnN1cHBvcnRzKFwiLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXJcIixcIm5vbmVcIil9bGV0IGVwPW5ldyBTZXQoW1wiaHRtbFwiLFwiYm9keVwiLFwiI2RvY3VtZW50XCJdKTtmdW5jdGlvbiBlaChlKXtyZXR1cm4gZXAuaGFzKEsoZSkpfWZ1bmN0aW9uIGVnKGUpe3JldHVybiBRKGUpLmdldENvbXB1dGVkU3R5bGUoZSl9ZnVuY3Rpb24gZW0oZSl7cmV0dXJuIGVlKGUpP3tzY3JvbGxMZWZ0OmUuc2Nyb2xsTGVmdCxzY3JvbGxUb3A6ZS5zY3JvbGxUb3B9OntzY3JvbGxMZWZ0OmUuc2Nyb2xsWCxzY3JvbGxUb3A6ZS5zY3JvbGxZfX1mdW5jdGlvbiBldihlKXtpZihcImh0bWxcIj09PUsoZSkpcmV0dXJuIGU7bGV0IG49ZS5hc3NpZ25lZFNsb3R8fGUucGFyZW50Tm9kZXx8ZXQoZSkmJmUuaG9zdHx8RyhlKTtyZXR1cm4gZXQobik/bi5ob3N0Om59ZnVuY3Rpb24gZWIoZSxuLHQpe3ZhciByO3ZvaWQgMD09PW4mJihuPVtdKSx2b2lkIDA9PT10JiYodD0hMCk7bGV0IG89ZnVuY3Rpb24gZShuKXtsZXQgdD1ldihuKTtyZXR1cm4gZWgodCk/bi5vd25lckRvY3VtZW50P24ub3duZXJEb2N1bWVudC5ib2R5Om4uYm9keTplbih0KSYmZW8odCk/dDplKHQpfShlKSxhPW89PT0obnVsbD09KHI9ZS5vd25lckRvY3VtZW50KT92b2lkIDA6ci5ib2R5KSxpPVEobyk7aWYoYSl7bGV0IGU9ZXkoaSk7cmV0dXJuIG4uY29uY2F0KGksaS52aXN1YWxWaWV3cG9ydHx8W10sZW8obyk/bzpbXSxlJiZ0P2ViKGUpOltdKX1yZXR1cm4gbi5jb25jYXQobyxlYihvLFtdLHQpKX1mdW5jdGlvbiBleShlKXtyZXR1cm4gZS5wYXJlbnQmJk9iamVjdC5nZXRQcm90b3R5cGVPZihlLnBhcmVudCk/ZS5mcmFtZUVsZW1lbnQ6bnVsbH1sZXQgZXg9W107ZnVuY3Rpb24gZXcoZSl7Qy51c2VFZmZlY3QoZSxleCl9Y2xhc3MgZWp7c3RhdGljIGNyZWF0ZSgpe3JldHVybiBuZXcgZWp9Y3VycmVudElkPTA7c3RhcnQoZSxuKXt0aGlzLmNsZWFyKCksdGhpcy5jdXJyZW50SWQ9c2V0VGltZW91dCgoKT0+e3RoaXMuY3VycmVudElkPTAsbigpfSxlKX1pc1N0YXJ0ZWQoKXtyZXR1cm4gMCE9PXRoaXMuY3VycmVudElkfWNsZWFyPSgpPT57MCE9PXRoaXMuY3VycmVudElkJiYoY2xlYXJUaW1lb3V0KHRoaXMuY3VycmVudElkKSx0aGlzLmN1cnJlbnRJZD0wKX07ZGlzcG9zZUVmZmVjdD0oKT0+dGhpcy5jbGVhcn1mdW5jdGlvbiBlaygpe2xldCBlPVAoZWouY3JlYXRlKS5jdXJyZW50O3JldHVybiBldyhlLmRpc3Bvc2VFZmZlY3QpLGV9ZnVuY3Rpb24gZUEoZSl7bGV0IG49UChlTyxlKS5jdXJyZW50O3JldHVybiBuLm5leHQ9ZSxGKG4uZWZmZWN0KSxufWZ1bmN0aW9uIGVPKGUpe2xldCBuPXtjdXJyZW50OmUsbmV4dDplLGVmZmVjdDooKT0+e24uY3VycmVudD1uLm5leHR9fTtyZXR1cm4gbn1sZXQgZUM9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIG5hdmlnYXRvcixlUz1mdW5jdGlvbigpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBuYXZpZ2F0b3IpcmV0dXJue3BsYXRmb3JtOlwiXCIsbWF4VG91Y2hQb2ludHM6LTF9O2xldCBlPW5hdmlnYXRvci51c2VyQWdlbnREYXRhO3JldHVybiBlPy5wbGF0Zm9ybT97cGxhdGZvcm06ZS5wbGF0Zm9ybSxtYXhUb3VjaFBvaW50czpuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHN9OntwbGF0Zm9ybTpuYXZpZ2F0b3IucGxhdGZvcm0/P1wiXCIsbWF4VG91Y2hQb2ludHM6bmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzPz8tMX19KCksZUU9ZnVuY3Rpb24oKXtpZighZUMpcmV0dXJuXCJcIjtsZXQgZT1uYXZpZ2F0b3IudXNlckFnZW50RGF0YTtyZXR1cm4gZT8ucGxhdGZvcm0/ZS5wbGF0Zm9ybTpuYXZpZ2F0b3IucGxhdGZvcm0/P1wiXCJ9KCksZV89ZnVuY3Rpb24oKXtpZighZUMpcmV0dXJuXCJcIjtsZXQgZT1uYXZpZ2F0b3IudXNlckFnZW50RGF0YTtyZXR1cm4gZSYmQXJyYXkuaXNBcnJheShlLmJyYW5kcyk/ZS5icmFuZHMubWFwKCh7YnJhbmQ6ZSx2ZXJzaW9uOm59KT0+YCR7ZX0vJHtufWApLmpvaW4oXCIgXCIpOm5hdmlnYXRvci51c2VyQWdlbnR9KCksZVA9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIENTUyYmISFDU1Muc3VwcG9ydHMmJkNTUy5zdXBwb3J0cyhcIi13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOm5vbmVcIiksZXo9XCJNYWNJbnRlbFwiPT09ZVMucGxhdGZvcm0mJmVTLm1heFRvdWNoUG9pbnRzPjF8fC9pUChob25lfGFkfG9kKXxpT1MvLnRlc3QoZVMucGxhdGZvcm0pO2VDJiYvZmlyZWZveC9pLnRlc3QoZV8pO2xldCBlTD1lQyYmL2FwcGxlL2kudGVzdChuYXZpZ2F0b3IudmVuZG9yKSxlVD1lQyYmL2FuZHJvaWQvaS50ZXN0KGVFKXx8L2FuZHJvaWQvaS50ZXN0KGVfKSxlUj1lQyYmZUUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKFwibWFjXCIpJiYhbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzLGVOPWVfLmluY2x1ZGVzKFwianNkb20vXCIpO2Z1bmN0aW9uIGVEKGUpe2UucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIGVCKGUpe3JldHVybiAwPT09ZS5tb3pJbnB1dFNvdXJjZSYmISFlLmlzVHJ1c3RlZHx8KGVUJiZlLnBvaW50ZXJUeXBlP1wiY2xpY2tcIj09PWUudHlwZSYmMT09PWUuYnV0dG9uczowPT09ZS5kZXRhaWwmJiFlLnBvaW50ZXJUeXBlKX1mdW5jdGlvbiBlTShlKXtyZXR1cm4hZU4mJighZVQmJjA9PT1lLndpZHRoJiYwPT09ZS5oZWlnaHR8fGVUJiYxPT09ZS53aWR0aCYmMT09PWUuaGVpZ2h0JiYwPT09ZS5wcmVzc3VyZSYmMD09PWUuZGV0YWlsJiZcIm1vdXNlXCI9PT1lLnBvaW50ZXJUeXBlfHxlLndpZHRoPDEmJmUuaGVpZ2h0PDEmJjA9PT1lLnByZXNzdXJlJiYwPT09ZS5kZXRhaWwmJlwidG91Y2hcIj09PWUucG9pbnRlclR5cGUpfWZ1bmN0aW9uIGVJKGUsbil7bGV0IHQ9W1wibW91c2VcIixcInBlblwiXTtyZXR1cm4gbnx8dC5wdXNoKFwiXCIsdm9pZCAwKSx0LmluY2x1ZGVzKGUpfWxldCBlSD1cImRhdGEtYmFzZS11aS1mb2N1c2FibGVcIixlRj1cImFjdGl2ZVwiLGVVPVwic2VsZWN0ZWRcIixlVj1cIkFycm93TGVmdFwiLGVxPVwiQXJyb3dSaWdodFwiLGVXPVwiQXJyb3dVcFwiLGUkPVwiQXJyb3dEb3duXCI7ZnVuY3Rpb24gZVooZSl7bGV0IG49ZS5hY3RpdmVFbGVtZW50O2Zvcig7bj8uc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCE9bnVsbDspbj1uLnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudDtyZXR1cm4gbn1mdW5jdGlvbiBlWShlLG4pe2lmKCFlfHwhbilyZXR1cm4hMTtsZXQgdD1uLmdldFJvb3ROb2RlPy4oKTtpZihlLmNvbnRhaW5zKG4pKXJldHVybiEwO2lmKHQmJmV0KHQpKXtsZXQgdD1uO2Zvcig7dDspe2lmKGU9PT10KXJldHVybiEwO3Q9dC5wYXJlbnROb2RlfHx0Lmhvc3R9fXJldHVybiExfWZ1bmN0aW9uIGVYKGUpe3JldHVyblwiY29tcG9zZWRQYXRoXCJpbiBlP2UuY29tcG9zZWRQYXRoKClbMF06ZS50YXJnZXR9ZnVuY3Rpb24gZUsoZSxuKXtyZXR1cm4gbnVsbCE9biYmKFwiY29tcG9zZWRQYXRoXCJpbiBlP2UuY29tcG9zZWRQYXRoKCkuaW5jbHVkZXMobik6bnVsbCE9ZS50YXJnZXQmJm4uY29udGFpbnMoZS50YXJnZXQpKX1mdW5jdGlvbiBlUShlKXtyZXR1cm4gZT8ub3duZXJEb2N1bWVudHx8ZG9jdW1lbnR9ZnVuY3Rpb24gZUcoZSl7cmV0dXJuIGVuKGUpJiZlLm1hdGNoZXMoXCJpbnB1dDpub3QoW3R5cGU9J2hpZGRlbiddKTpub3QoW2Rpc2FibGVkXSksW2NvbnRlbnRlZGl0YWJsZV06bm90KFtjb250ZW50ZWRpdGFibGU9J2ZhbHNlJ10pLHRleHRhcmVhOm5vdChbZGlzYWJsZWRdKVwiKX1mdW5jdGlvbiBlSihlKXtyZXR1cm4hIWUmJlwiY29tYm9ib3hcIj09PWUuZ2V0QXR0cmlidXRlKFwicm9sZVwiKSYmZUcoZSl9ZnVuY3Rpb24gZTAoZSl7cmV0dXJuIGU/ZS5oYXNBdHRyaWJ1dGUoZUgpP2U6ZS5xdWVyeVNlbGVjdG9yKGBbJHtlSH1dYCl8fGU6bnVsbH1mdW5jdGlvbiBlMShlKXtyZXR1cm5gZGF0YS1iYXNlLXVpLSR7ZX1gfWxldCBlMj1lMShcInNhZmUtcG9seWdvblwiKTtmdW5jdGlvbiBlNChlLG4sdCl7aWYodCYmIWVJKHQpKXJldHVybiAwO2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXJldHVybiBlO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUpe2xldCB0PWUoKTtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdD90OnQ/LltuXX1yZXR1cm4gZT8uW25dfWZ1bmN0aW9uIGU1KGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZSgpOmV9ZnVuY3Rpb24gZTMoZSxuPXt9KXtsZXR7b3Blbjp0LG9uT3BlbkNoYW5nZTpyLGRhdGFSZWY6byxldmVudHM6YSxlbGVtZW50czppfT1lLHtlbmFibGVkOmw9ITAsZGVsYXk6cz0wLGhhbmRsZUNsb3NlOmM9bnVsbCxtb3VzZU9ubHk6dT0hMSxyZXN0TXM6ZD0wLG1vdmU6Zj0hMH09bixwPVcoKSxoPXEoKSxnPWVBKGMpLG09ZUEocyksdj1lQSh0KSxiPWVBKGQpLHk9Qy51c2VSZWYodm9pZCAwKSx4PWVrKCksdz1DLnVzZVJlZih2b2lkIDApLGo9ZWsoKSxrPUMudXNlUmVmKCEwKSxBPUMudXNlUmVmKCExKSxPPUMudXNlUmVmKCgpPT57fSksUz1DLnVzZVJlZighMSksRT1UKCgpPT57bGV0IGU9by5jdXJyZW50Lm9wZW5FdmVudD8udHlwZTtyZXR1cm4gZT8uaW5jbHVkZXMoXCJtb3VzZVwiKSYmXCJtb3VzZWRvd25cIiE9PWV9KTtDLnVzZUVmZmVjdCgoKT0+e2lmKGwpcmV0dXJuIGEub24oXCJvcGVuY2hhbmdlXCIsZSksKCk9PnthLm9mZihcIm9wZW5jaGFuZ2VcIixlKX07ZnVuY3Rpb24gZSh7b3BlbjplfSl7ZXx8KHguY2xlYXIoKSxqLmNsZWFyKCksay5jdXJyZW50PSEwLFMuY3VycmVudD0hMSl9fSxbbCxhLHgsal0pLEMudXNlRWZmZWN0KCgpPT57aWYoIWx8fCFnLmN1cnJlbnR8fCF0KXJldHVybjtmdW5jdGlvbiBlKGUpe0UoKSYmcighMSxlLFwiaG92ZXJcIil9bGV0IG49ZVEoaS5mbG9hdGluZykuZG9jdW1lbnRFbGVtZW50O3JldHVybiBuLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsZSksKCk9PntuLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsZSl9fSxbaS5mbG9hdGluZyx0LHIsbCxnLEVdKTtsZXQgXz1DLnVzZUNhbGxiYWNrKChlLG49ITAsdD1cImhvdmVyXCIpPT57bGV0IG89ZTQobS5jdXJyZW50LFwiY2xvc2VcIix5LmN1cnJlbnQpO28mJiF3LmN1cnJlbnQ/eC5zdGFydChvLCgpPT5yKCExLGUsdCkpOm4mJih4LmNsZWFyKCkscighMSxlLHQpKX0sW20scix4XSksUD1UKCgpPT57Ty5jdXJyZW50KCksdy5jdXJyZW50PXZvaWQgMH0pLHo9VCgoKT0+e2lmKEEuY3VycmVudCl7bGV0IGU9ZVEoaS5mbG9hdGluZykuYm9keTtlLnN0eWxlLnBvaW50ZXJFdmVudHM9XCJcIixlLnJlbW92ZUF0dHJpYnV0ZShlMiksQS5jdXJyZW50PSExfX0pLEw9VCgoKT0+ISFvLmN1cnJlbnQub3BlbkV2ZW50JiZbXCJjbGlja1wiLFwibW91c2Vkb3duXCJdLmluY2x1ZGVzKG8uY3VycmVudC5vcGVuRXZlbnQudHlwZSkpO0MudXNlRWZmZWN0KCgpPT57aWYobCYmZWUoaS5kb21SZWZlcmVuY2UpKXtsZXQgcj1pLmRvbVJlZmVyZW5jZSxvPWkuZmxvYXRpbmc7cmV0dXJuIHQmJnIuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIixhKSxmJiZyLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIixlLHtvbmNlOiEwfSksci5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLGUpLHIuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIixuKSxvJiYoby5hZGRFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLGEpLG8uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIixzKSxvLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsYykpLCgpPT57dCYmci5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLGEpLGYmJnIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLGUpLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIixlKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsbiksbyYmKG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIixhKSxvLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIscyksby5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLGMpKX19ZnVuY3Rpb24gZShlKXtpZih4LmNsZWFyKCksay5jdXJyZW50PSExLHUmJiFlSSh5LmN1cnJlbnQpfHxlNShiLmN1cnJlbnQpPjAmJiFlNChtLmN1cnJlbnQsXCJvcGVuXCIpKXJldHVybjtsZXQgbj1lNChtLmN1cnJlbnQsXCJvcGVuXCIseS5jdXJyZW50KTtuP3guc3RhcnQobiwoKT0+e3YuY3VycmVudHx8cighMCxlLFwiaG92ZXJcIil9KTp0fHxyKCEwLGUsXCJob3ZlclwiKX1mdW5jdGlvbiBuKGUpe2lmKEwoKSlyZXR1cm4gdm9pZCB6KCk7Ty5jdXJyZW50KCk7bGV0IG49ZVEoaS5mbG9hdGluZyk7aWYoai5jbGVhcigpLFMuY3VycmVudD0hMSxnLmN1cnJlbnQmJm8uY3VycmVudC5mbG9hdGluZ0NvbnRleHQpe3R8fHguY2xlYXIoKSx3LmN1cnJlbnQ9Zy5jdXJyZW50KHsuLi5vLmN1cnJlbnQuZmxvYXRpbmdDb250ZXh0LHRyZWU6cCx4OmUuY2xpZW50WCx5OmUuY2xpZW50WSxvbkNsb3NlKCl7eigpLFAoKSxMKCl8fF8oZSwhMCxcInNhZmUtcG9seWdvblwiKX19KTtsZXQgcj13LmN1cnJlbnQ7bi5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsciksTy5jdXJyZW50PSgpPT57bi5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIscil9O3JldHVybn1cInRvdWNoXCI9PT15LmN1cnJlbnQmJmVZKGkuZmxvYXRpbmcsZS5yZWxhdGVkVGFyZ2V0KXx8XyhlKX1mdW5jdGlvbiBhKGUpeyFMKCkmJm8uY3VycmVudC5mbG9hdGluZ0NvbnRleHQmJmcuY3VycmVudD8uKHsuLi5vLmN1cnJlbnQuZmxvYXRpbmdDb250ZXh0LHRyZWU6cCx4OmUuY2xpZW50WCx5OmUuY2xpZW50WSxvbkNsb3NlKCl7eigpLFAoKSxMKCl8fF8oZSl9fSkoZSl9ZnVuY3Rpb24gcygpe3guY2xlYXIoKX1mdW5jdGlvbiBjKGUpe0woKXx8XyhlLCExKX19LFtpLGwsZSx1LGYsXyxQLHoscix0LHYscCxtLGcsbyxMLGIseCxqXSksRigoKT0+e2lmKGwmJnQmJmcuY3VycmVudD8uX19vcHRpb25zPy5ibG9ja1BvaW50ZXJFdmVudHMmJkUoKSl7QS5jdXJyZW50PSEwO2xldCBlPWkuZmxvYXRpbmc7aWYoZWUoaS5kb21SZWZlcmVuY2UpJiZlKXtsZXQgbj1lUShpLmZsb2F0aW5nKS5ib2R5O24uc2V0QXR0cmlidXRlKGUyLFwiXCIpO2xldCB0PWkuZG9tUmVmZXJlbmNlLHI9cD8ubm9kZXNSZWYuY3VycmVudC5maW5kKGU9PmUuaWQ9PT1oKT8uY29udGV4dD8uZWxlbWVudHMuZmxvYXRpbmc7cmV0dXJuIHImJihyLnN0eWxlLnBvaW50ZXJFdmVudHM9XCJcIiksbi5zdHlsZS5wb2ludGVyRXZlbnRzPVwibm9uZVwiLHQuc3R5bGUucG9pbnRlckV2ZW50cz1cImF1dG9cIixlLnN0eWxlLnBvaW50ZXJFdmVudHM9XCJhdXRvXCIsKCk9PntuLnN0eWxlLnBvaW50ZXJFdmVudHM9XCJcIix0LnN0eWxlLnBvaW50ZXJFdmVudHM9XCJcIixlLnN0eWxlLnBvaW50ZXJFdmVudHM9XCJcIn19fX0sW2wsdCxoLGkscCxnLEVdKSxGKCgpPT57dHx8KHkuY3VycmVudD12b2lkIDAsUy5jdXJyZW50PSExLFAoKSx6KCkpfSxbdCxQLHpdKSxDLnVzZUVmZmVjdCgoKT0+KCk9PntQKCkseC5jbGVhcigpLGouY2xlYXIoKSx6KCl9LFtsLGkuZG9tUmVmZXJlbmNlLFAseix4LGpdKTtsZXQgUj1DLnVzZU1lbW8oKCk9PntmdW5jdGlvbiBlKGUpe3kuY3VycmVudD1lLnBvaW50ZXJUeXBlfXJldHVybntvblBvaW50ZXJEb3duOmUsb25Qb2ludGVyRW50ZXI6ZSxvbk1vdXNlTW92ZShlKXtsZXR7bmF0aXZlRXZlbnQ6bn09ZTtmdW5jdGlvbiBvKCl7ay5jdXJyZW50fHx2LmN1cnJlbnR8fHIoITAsbixcImhvdmVyXCIpfSghdXx8ZUkoeS5jdXJyZW50KSkmJiF0JiYwIT09ZTUoYi5jdXJyZW50KSYmKFMuY3VycmVudCYmZS5tb3ZlbWVudFgqKjIrZS5tb3ZlbWVudFkqKjI8Mnx8KGouY2xlYXIoKSxcInRvdWNoXCI9PT15LmN1cnJlbnQ/bygpOihTLmN1cnJlbnQ9ITAsai5zdGFydChlNShiLmN1cnJlbnQpLG8pKSkpfX19LFt1LHIsdCx2LGIsal0pO3JldHVybiBDLnVzZU1lbW8oKCk9Pmw/e3JlZmVyZW5jZTpSfTp7fSxbbCxSXSl9ZnVuY3Rpb24gZTYoZSxuLHQ9ITApe3JldHVybiBlLmZpbHRlcihlPT5lLnBhcmVudElkPT09biYmKCF0fHxlLmNvbnRleHQ/Lm9wZW4pKS5mbGF0TWFwKG49PltuLC4uLmU2KGUsbi5pZCx0KV0pfWZ1bmN0aW9uIGU5KGUsbil7bGV0IHQ9W10scj1lLmZpbmQoZT0+ZS5pZD09PW4pPy5wYXJlbnRJZDtmb3IoO3I7KXtsZXQgbj1lLmZpbmQoZT0+ZS5pZD09PXIpO3I9bj8ucGFyZW50SWQsbiYmKHQ9dC5jb25jYXQobikpfXJldHVybiB0fWZ1bmN0aW9uIGU4KGUsbil7bGV0W3Qscl09ZSxvPSExLGE9bi5sZW5ndGg7Zm9yKGxldCBlPTAsaT1hLTE7ZTxhO2k9ZSsrKXtsZXRbYSxsXT1uW2VdfHxbMCwwXSxbcyxjXT1uW2ldfHxbMCwwXTtsPj1yIT1jPj1yJiZ0PD0ocy1hKSooci1sKS8oYy1sKSthJiYobz0hbyl9cmV0dXJuIG99ZnVuY3Rpb24gZTcoZT17fSl7bGV0e2J1ZmZlcjpuPS41LGJsb2NrUG9pbnRlckV2ZW50czp0PSExLHJlcXVpcmVJbnRlbnQ6cj0hMH09ZSxvPW5ldyBlaixhPSExLGk9bnVsbCxsPW51bGwscz1wZXJmb3JtYW5jZS5ub3coKSxjPSh7eDplLHk6dCxwbGFjZW1lbnQ6YyxlbGVtZW50czp1LG9uQ2xvc2U6ZCxub2RlSWQ6Zix0cmVlOnB9KT0+ZnVuY3Rpb24oaCl7ZnVuY3Rpb24gZygpe28uY2xlYXIoKSxkKCl9aWYoby5jbGVhcigpLCF1LmRvbVJlZmVyZW5jZXx8IXUuZmxvYXRpbmd8fG51bGw9PWN8fG51bGw9PWV8fG51bGw9PXQpcmV0dXJuO2xldHtjbGllbnRYOm0sY2xpZW50WTp2fT1oLGI9W20sdl0seT1lWChoKSx4PVwibW91c2VsZWF2ZVwiPT09aC50eXBlLHc9ZVkodS5mbG9hdGluZyx5KSxqPWVZKHUuZG9tUmVmZXJlbmNlLHkpLGs9dS5kb21SZWZlcmVuY2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksQT11LmZsb2F0aW5nLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLE89Yy5zcGxpdChcIi1cIilbMF0sQz1lPkEucmlnaHQtQS53aWR0aC8yLFM9dD5BLmJvdHRvbS1BLmhlaWdodC8yLEU9YlswXT49ay54JiZiWzBdPD1rLngray53aWR0aCYmYlsxXT49ay55JiZiWzFdPD1rLnkray5oZWlnaHQsXz1BLndpZHRoPmsud2lkdGgsUD1BLmhlaWdodD5rLmhlaWdodCx6PShfP2s6QSkubGVmdCxMPShfP2s6QSkucmlnaHQsVD0oUD9rOkEpLnRvcCxSPShQP2s6QSkuYm90dG9tO2lmKHcmJihhPSEwLCF4KSlyZXR1cm47aWYoaiYmKGE9ITEpLGomJiF4KXthPSEwO3JldHVybn1pZih4JiZlZShoLnJlbGF0ZWRUYXJnZXQpJiZlWSh1LmZsb2F0aW5nLGgucmVsYXRlZFRhcmdldCl8fHAmJmU2KHAubm9kZXNSZWYuY3VycmVudCxmKS5zb21lKCh7Y29udGV4dDplfSk9PmU/Lm9wZW4pKXJldHVybjtpZihcInRvcFwiPT09TyYmdD49ay5ib3R0b20tMXx8XCJib3R0b21cIj09PU8mJnQ8PWsudG9wKzF8fFwibGVmdFwiPT09TyYmZT49ay5yaWdodC0xfHxcInJpZ2h0XCI9PT1PJiZlPD1rLmxlZnQrMSlyZXR1cm4gZygpO2xldCBOPVtdO3N3aXRjaChPKXtjYXNlXCJ0b3BcIjpOPVtbeixrLnRvcCsxXSxbeixBLmJvdHRvbS0xXSxbTCxBLmJvdHRvbS0xXSxbTCxrLnRvcCsxXV07YnJlYWs7Y2FzZVwiYm90dG9tXCI6Tj1bW3osQS50b3ArMV0sW3osay5ib3R0b20tMV0sW0wsay5ib3R0b20tMV0sW0wsQS50b3ArMV1dO2JyZWFrO2Nhc2VcImxlZnRcIjpOPVtbQS5yaWdodC0xLFJdLFtBLnJpZ2h0LTEsVF0sW2subGVmdCsxLFRdLFtrLmxlZnQrMSxSXV07YnJlYWs7Y2FzZVwicmlnaHRcIjpOPVtbay5yaWdodC0xLFJdLFtrLnJpZ2h0LTEsVF0sW0EubGVmdCsxLFRdLFtBLmxlZnQrMSxSXV19aWYoIWU4KFttLHZdLE4pKXtpZihhJiYhRSlyZXR1cm4gZygpO2lmKCF4JiZyKXtsZXQgZT1mdW5jdGlvbihlLG4pe2xldCB0PXBlcmZvcm1hbmNlLm5vdygpLHI9dC1zO2lmKG51bGw9PT1pfHxudWxsPT09bHx8MD09PXIpcmV0dXJuIGk9ZSxsPW4scz10LG51bGw7bGV0IG89ZS1pLGE9bi1sLGM9TWF0aC5zcXJ0KG8qbythKmEpO3JldHVybiBpPWUsbD1uLHM9dCxjL3J9KGguY2xpZW50WCxoLmNsaWVudFkpO2lmKG51bGwhPT1lJiZlPC4xKXJldHVybiBnKCl9ZTgoW20sdl0sZnVuY3Rpb24oW2UsdF0pe3N3aXRjaChPKXtjYXNlXCJ0b3BcIjp7bGV0IHI9W1tBLmxlZnQsQ3x8Xz9BLmJvdHRvbS1uOkEudG9wXSxbQS5yaWdodCxDP18/QS5ib3R0b20tbjpBLnRvcDpBLmJvdHRvbS1uXV07cmV0dXJuW1tfP2Urbi8yOkM/ZSs0Km46ZS00Km4sdCtuKzFdLFtfP2Utbi8yOkM/ZSs0Km46ZS00Km4sdCtuKzFdLC4uLnJdfWNhc2VcImJvdHRvbVwiOntsZXQgcj1bW0EubGVmdCxDfHxfP0EudG9wK246QS5ib3R0b21dLFtBLnJpZ2h0LEM/Xz9BLnRvcCtuOkEuYm90dG9tOkEudG9wK25dXTtyZXR1cm5bW18/ZStuLzI6Qz9lKzQqbjplLTQqbix0LW5dLFtfP2Utbi8yOkM/ZSs0Km46ZS00Km4sdC1uXSwuLi5yXX1jYXNlXCJsZWZ0XCI6cmV0dXJuW1tTfHxQP0EucmlnaHQtbjpBLmxlZnQsQS50b3BdLFtTP1A/QS5yaWdodC1uOkEubGVmdDpBLnJpZ2h0LW4sQS5ib3R0b21dLFtlK24rMSxQP3Qrbi8yOlM/dCs0Km46dC00Km5dLFtlK24rMSxQP3Qtbi8yOlM/dCs0Km46dC00Km5dXTtjYXNlXCJyaWdodFwiOntsZXQgcj1bW1N8fFA/QS5sZWZ0K246QS5yaWdodCxBLnRvcF0sW1M/UD9BLmxlZnQrbjpBLnJpZ2h0OkEubGVmdCtuLEEuYm90dG9tXV07cmV0dXJuW1tlLW4sUD90K24vMjpTP3QrNCpuOnQtNCpuXSxbZS1uLFA/dC1uLzI6Uz90KzQqbjp0LTQqbl0sLi4ucl19ZGVmYXVsdDpyZXR1cm5bXX19KFtlLHRdKSk/IWEmJnImJm8uc3RhcnQoNDAsZyk6ZygpfX07cmV0dXJuIGMuX19vcHRpb25zPXtibG9ja1BvaW50ZXJFdmVudHM6dH0sY31sZXQgbmU9ZVImJmVMO2Z1bmN0aW9uIG5uKGUsbj17fSl7bGV0e29wZW46dCxvbk9wZW5DaGFuZ2U6cixldmVudHM6byxkYXRhUmVmOmEsZWxlbWVudHM6aX09ZSx7ZW5hYmxlZDpsPSEwLHZpc2libGVPbmx5OnM9ITB9PW4sYz1DLnVzZVJlZighMSksdT1laygpLGQ9Qy51c2VSZWYoITApO0MudXNlRWZmZWN0KCgpPT57aWYoIWwpcmV0dXJuO2xldCBlPVEoaS5kb21SZWZlcmVuY2UpO2Z1bmN0aW9uIG4oKXshdCYmZW4oaS5kb21SZWZlcmVuY2UpJiZpLmRvbVJlZmVyZW5jZT09PWVaKGVRKGkuZG9tUmVmZXJlbmNlKSkmJihjLmN1cnJlbnQ9ITApfWZ1bmN0aW9uIHIoKXtkLmN1cnJlbnQ9ITB9ZnVuY3Rpb24gbygpe2QuY3VycmVudD0hMX1yZXR1cm4gZS5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLG4pLG5lJiYoZS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLHIsITApLGUuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsbywhMCkpLCgpPT57ZS5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmx1clwiLG4pLG5lJiYoZS5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLHIsITApLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsbywhMCkpfX0sW2kuZG9tUmVmZXJlbmNlLHQsbF0pLEMudXNlRWZmZWN0KCgpPT57aWYobClyZXR1cm4gby5vbihcIm9wZW5jaGFuZ2VcIixlKSwoKT0+e28ub2ZmKFwib3BlbmNoYW5nZVwiLGUpfTtmdW5jdGlvbiBlKHtyZWFzb246ZX0peyhcInJlZmVyZW5jZS1wcmVzc1wiPT09ZXx8XCJlc2NhcGUta2V5XCI9PT1lKSYmKGMuY3VycmVudD0hMCl9fSxbbyxsXSk7bGV0IGY9Qy51c2VNZW1vKCgpPT4oe29uTW91c2VMZWF2ZSgpe2MuY3VycmVudD0hMX0sb25Gb2N1cyhlKXtpZihjLmN1cnJlbnQpcmV0dXJuO2xldCBuPWVYKGUubmF0aXZlRXZlbnQpO2lmKHMmJmVlKG4pKXtpZihuZSYmIWUucmVsYXRlZFRhcmdldCl7aWYoIWQuY3VycmVudCYmIWVHKG4pKXJldHVybn1lbHNlIGlmKCFmdW5jdGlvbihlKXtpZighZXx8ZU4pcmV0dXJuITA7dHJ5e3JldHVybiBlLm1hdGNoZXMoXCI6Zm9jdXMtdmlzaWJsZVwiKX1jYXRjaChlKXtyZXR1cm4hMH19KG4pKXJldHVybn1yKCEwLGUubmF0aXZlRXZlbnQsXCJmb2N1c1wiKX0sb25CbHVyKGUpe2MuY3VycmVudD0hMTtsZXQgbj1lLnJlbGF0ZWRUYXJnZXQsdD1lLm5hdGl2ZUV2ZW50LG89ZWUobikmJm4uaGFzQXR0cmlidXRlKGUxKFwiZm9jdXMtZ3VhcmRcIikpJiZcIm91dHNpZGVcIj09PW4uZ2V0QXR0cmlidXRlKFwiZGF0YS10eXBlXCIpO3Uuc3RhcnQoMCwoKT0+e2xldCBlPWVaKGkuZG9tUmVmZXJlbmNlP2kuZG9tUmVmZXJlbmNlLm93bmVyRG9jdW1lbnQ6ZG9jdW1lbnQpOyhufHxlIT09aS5kb21SZWZlcmVuY2UpJiYoZVkoYS5jdXJyZW50LmZsb2F0aW5nQ29udGV4dD8ucmVmcy5mbG9hdGluZy5jdXJyZW50LGUpfHxlWShpLmRvbVJlZmVyZW5jZSxlKXx8b3x8cighMSx0LFwiZm9jdXNcIikpfSl9fSksW2EsaS5kb21SZWZlcmVuY2UscixzLHVdKTtyZXR1cm4gQy51c2VNZW1vKCgpPT5sP3tyZWZlcmVuY2U6Zn06e30sW2wsZl0pfWxldCBudD17c3R5bGU6e3RyYW5zaXRpb246XCJub25lXCJ9fSxucj17fSxubz17ZmFsbGJhY2tBeGlzU2lkZTpcIm5vbmVcIn0sbmE9e2ZhbGxiYWNrQXhpc1NpZGU6XCJlbmRcIn0sbmk9bmV3IGNsYXNze2NhbGxiYWNrcz1bXTtjYWxsYmFja3NDb3VudD0wO25leHRJZD0xO3N0YXJ0SWQ9MTtpc1NjaGVkdWxlZD0hMTt0aWNrPWU9Pnt0aGlzLmlzU2NoZWR1bGVkPSExO2xldCBuPXRoaXMuY2FsbGJhY2tzLHQ9dGhpcy5jYWxsYmFja3NDb3VudDtpZih0aGlzLmNhbGxiYWNrcz1bXSx0aGlzLmNhbGxiYWNrc0NvdW50PTAsdGhpcy5zdGFydElkPXRoaXMubmV4dElkLHQ+MClmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrPTEpblt0XT8uKGUpfTtyZXF1ZXN0KGUpe2xldCBuPXRoaXMubmV4dElkO3JldHVybiB0aGlzLm5leHRJZCs9MSx0aGlzLmNhbGxiYWNrcy5wdXNoKGUpLHRoaXMuY2FsbGJhY2tzQ291bnQrPTEsdGhpcy5pc1NjaGVkdWxlZHx8KHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnRpY2spLHRoaXMuaXNTY2hlZHVsZWQ9ITApLG59Y2FuY2VsKGUpe2xldCBuPWUtdGhpcy5zdGFydElkO248MHx8bj49dGhpcy5jYWxsYmFja3MubGVuZ3RofHwodGhpcy5jYWxsYmFja3Nbbl09bnVsbCx0aGlzLmNhbGxiYWNrc0NvdW50LT0xKX19O2NsYXNzIG5se3N0YXRpYyBjcmVhdGUoKXtyZXR1cm4gbmV3IG5sfXN0YXRpYyByZXF1ZXN0KGUpe3JldHVybiBuaS5yZXF1ZXN0KGUpfXN0YXRpYyBjYW5jZWwoZSl7cmV0dXJuIG5pLmNhbmNlbChlKX1jdXJyZW50SWQ9bnVsbDtyZXF1ZXN0KGUpe3RoaXMuY2FuY2VsKCksdGhpcy5jdXJyZW50SWQ9bmkucmVxdWVzdCgoKT0+e3RoaXMuY3VycmVudElkPW51bGwsZSgpfSl9Y2FuY2VsPSgpPT57bnVsbCE9PXRoaXMuY3VycmVudElkJiYobmkuY2FuY2VsKHRoaXMuY3VycmVudElkKSx0aGlzLmN1cnJlbnRJZD1udWxsKX07ZGlzcG9zZUVmZmVjdD0oKT0+dGhpcy5jYW5jZWx9ZnVuY3Rpb24gbnMoKXtsZXQgZT1QKG5sLmNyZWF0ZSkuY3VycmVudDtyZXR1cm4gZXcoZS5kaXNwb3NlRWZmZWN0KSxlfWxldCBuYz17cG9pbnRlcmRvd246XCJvblBvaW50ZXJEb3duXCIsbW91c2Vkb3duOlwib25Nb3VzZURvd25cIixjbGljazpcIm9uQ2xpY2tcIn0sbnU9e3BvaW50ZXJkb3duOlwib25Qb2ludGVyRG93bkNhcHR1cmVcIixtb3VzZWRvd246XCJvbk1vdXNlRG93bkNhcHR1cmVcIixjbGljazpcIm9uQ2xpY2tDYXB0dXJlXCJ9LG5kPWU9Pih7ZXNjYXBlS2V5OlwiYm9vbGVhblwiPT10eXBlb2YgZT9lOmU/LmVzY2FwZUtleT8/ITEsb3V0c2lkZVByZXNzOlwiYm9vbGVhblwiPT10eXBlb2YgZT9lOmU/Lm91dHNpZGVQcmVzcz8/ITB9KTtmdW5jdGlvbiBuZihlLG49e30pe2xldHtvcGVuOnQsb25PcGVuQ2hhbmdlOnIsZWxlbWVudHM6byxkYXRhUmVmOmF9PWUse2VuYWJsZWQ6aT0hMCxlc2NhcGVLZXk6bD0hMCxvdXRzaWRlUHJlc3M6cz0hMCxvdXRzaWRlUHJlc3NFdmVudDpjPVwicG9pbnRlcmRvd25cIixyZWZlcmVuY2VQcmVzczp1PSExLHJlZmVyZW5jZVByZXNzRXZlbnQ6ZD1cInBvaW50ZXJkb3duXCIsYW5jZXN0b3JTY3JvbGw6Zj0hMSxidWJibGVzOnAsY2FwdHVyZTpofT1uLGc9VygpLG09VChcImZ1bmN0aW9uXCI9PXR5cGVvZiBzP3M6KCk9PiExKSx2PVwiZnVuY3Rpb25cIj09dHlwZW9mIHM/bTpzLGI9Qy51c2VSZWYoITEpLHtlc2NhcGVLZXk6eSxvdXRzaWRlUHJlc3M6eH09bmQocCkse2VzY2FwZUtleTp3LG91dHNpZGVQcmVzczpqfT1uZChoKSxrPUMudXNlUmVmKCExKSxBPWVrKCksTz1UKGU9PntpZighdHx8IWl8fCFsfHxcIkVzY2FwZVwiIT09ZS5rZXl8fGsuY3VycmVudClyZXR1cm47bGV0IG49YS5jdXJyZW50LmZsb2F0aW5nQ29udGV4dD8ubm9kZUlkLG89Zz9lNihnLm5vZGVzUmVmLmN1cnJlbnQsbik6W107aWYoIXkmJihlLnN0b3BQcm9wYWdhdGlvbigpLG8ubGVuZ3RoPjApKXtsZXQgZT0hMDtpZihvLmZvckVhY2gobj0+e24uY29udGV4dD8ub3BlbiYmIW4uY29udGV4dC5kYXRhUmVmLmN1cnJlbnQuX19lc2NhcGVLZXlCdWJibGVzJiYoZT0hMSl9KSwhZSlyZXR1cm59cighMSxcIm5hdGl2ZUV2ZW50XCJpbiBlP2UubmF0aXZlRXZlbnQ6ZSxcImVzY2FwZS1rZXlcIil9KSxTPVQoZT0+e2xldCBuPSgpPT57TyhlKSxlWChlKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixuKX07ZVgoZSk/LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsbil9KSxFPVQoZT0+e2xldCBuPWEuY3VycmVudC5pbnNpZGVSZWFjdFRyZWU7YS5jdXJyZW50Lmluc2lkZVJlYWN0VHJlZT0hMTtsZXQgdD1iLmN1cnJlbnQ7aWYoYi5jdXJyZW50PSExLFwiY2xpY2tcIj09PWMmJnR8fG58fFwiZnVuY3Rpb25cIj09dHlwZW9mIHYmJiF2KGUpKXJldHVybjtsZXQgaT1lWChlKSxsPWBbJHtlMShcImluZXJ0XCIpfV1gLHM9ZVEoby5mbG9hdGluZykucXVlcnlTZWxlY3RvckFsbChsKSx1PWVlKGkpP2k6bnVsbDtmb3IoO3UmJiFlaCh1KTspe2xldCBlPWV2KHUpO2lmKGVoKGUpfHwhZWUoZSkpYnJlYWs7dT1lfWlmKHMubGVuZ3RoJiZlZShpKSYmIWkubWF0Y2hlcyhcImh0bWwsYm9keVwiKSYmIWVZKGksby5mbG9hdGluZykmJkFycmF5LmZyb20ocykuZXZlcnkoZT0+IWVZKHUsZSkpKXJldHVybjtpZihlbihpKSl7bGV0IG49ZWgoaSksdD1lZyhpKSxyPS9hdXRvfHNjcm9sbC8sbz1ufHxyLnRlc3QodC5vdmVyZmxvd1gpLGE9bnx8ci50ZXN0KHQub3ZlcmZsb3dZKSxsPW8mJmkuY2xpZW50V2lkdGg+MCYmaS5zY3JvbGxXaWR0aD5pLmNsaWVudFdpZHRoLHM9YSYmaS5jbGllbnRIZWlnaHQ+MCYmaS5zY3JvbGxIZWlnaHQ+aS5jbGllbnRIZWlnaHQsYz1cInJ0bFwiPT09dC5kaXJlY3Rpb24sdT1zJiYoYz9lLm9mZnNldFg8PWkub2Zmc2V0V2lkdGgtaS5jbGllbnRXaWR0aDplLm9mZnNldFg+aS5jbGllbnRXaWR0aCksZD1sJiZlLm9mZnNldFk+aS5jbGllbnRIZWlnaHQ7aWYodXx8ZClyZXR1cm59bGV0IGQ9YS5jdXJyZW50LmZsb2F0aW5nQ29udGV4dD8ubm9kZUlkLGY9ZyYmZTYoZy5ub2Rlc1JlZi5jdXJyZW50LGQpLnNvbWUobj0+ZUsoZSxuLmNvbnRleHQ/LmVsZW1lbnRzLmZsb2F0aW5nKSk7aWYoZUsoZSxvLmZsb2F0aW5nKXx8ZUsoZSxvLmRvbVJlZmVyZW5jZSl8fGYpcmV0dXJuO2xldCBwPWc/ZTYoZy5ub2Rlc1JlZi5jdXJyZW50LGQpOltdO2lmKHAubGVuZ3RoPjApe2xldCBlPSEwO2lmKHAuZm9yRWFjaChuPT57bi5jb250ZXh0Py5vcGVuJiYhbi5jb250ZXh0LmRhdGFSZWYuY3VycmVudC5fX291dHNpZGVQcmVzc0J1YmJsZXMmJihlPSExKX0pLCFlKXJldHVybn1yKCExLGUsXCJvdXRzaWRlLXByZXNzXCIpfSksXz1UKGU9PntsZXQgbj0oKT0+e0UoZSksZVgoZSk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoYyxuKX07ZVgoZSk/LmFkZEV2ZW50TGlzdGVuZXIoYyxuKX0pO0MudXNlRWZmZWN0KCgpPT57aWYoIXR8fCFpKXJldHVybjthLmN1cnJlbnQuX19lc2NhcGVLZXlCdWJibGVzPXksYS5jdXJyZW50Ll9fb3V0c2lkZVByZXNzQnViYmxlcz14O2xldCBlPW5ldyBlajtmdW5jdGlvbiBuKGUpe3IoITEsZSxcImFuY2VzdG9yLXNjcm9sbFwiKX1mdW5jdGlvbiBzKCl7ZS5jbGVhcigpLGsuY3VycmVudD0hMH1mdW5jdGlvbiB1KCl7ZS5zdGFydCg1KiEhZWYoKSwoKT0+e2suY3VycmVudD0hMX0pfWxldCBkPWVRKG8uZmxvYXRpbmcpO2wmJihkLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsdz9TOk8sdyksZC5hZGRFdmVudExpc3RlbmVyKFwiY29tcG9zaXRpb25zdGFydFwiLHMpLGQuYWRkRXZlbnRMaXN0ZW5lcihcImNvbXBvc2l0aW9uZW5kXCIsdSkpLHYmJmQuYWRkRXZlbnRMaXN0ZW5lcihjLGo/XzpFLGopO2xldCBwPVtdO3JldHVybiBmJiYoZWUoby5kb21SZWZlcmVuY2UpJiYocD1lYihvLmRvbVJlZmVyZW5jZSkpLGVlKG8uZmxvYXRpbmcpJiYocD1wLmNvbmNhdChlYihvLmZsb2F0aW5nKSkpLCFlZShvLnJlZmVyZW5jZSkmJm8ucmVmZXJlbmNlJiZvLnJlZmVyZW5jZS5jb250ZXh0RWxlbWVudCYmKHA9cC5jb25jYXQoZWIoby5yZWZlcmVuY2UuY29udGV4dEVsZW1lbnQpKSkpLChwPXAuZmlsdGVyKGU9PmUhPT1kLmRlZmF1bHRWaWV3Py52aXN1YWxWaWV3cG9ydCkpLmZvckVhY2goZT0+e2UuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLG4se3Bhc3NpdmU6ITB9KX0pLCgpPT57bCYmKGQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIix3P1M6Tyx3KSxkLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjb21wb3NpdGlvbnN0YXJ0XCIscyksZC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY29tcG9zaXRpb25lbmRcIix1KSksdiYmZC5yZW1vdmVFdmVudExpc3RlbmVyKGMsaj9fOkUsaikscC5mb3JFYWNoKGU9PntlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIixuKX0pLGUuY2xlYXIoKX19LFthLG8sbCx2LGMsdCxyLGYsaSx5LHgsTyx3LFMsRSxqLF9dKSxDLnVzZUVmZmVjdCgoKT0+e2EuY3VycmVudC5pbnNpZGVSZWFjdFRyZWU9ITF9LFthLHYsY10pO2xldCBQPUMudXNlTWVtbygoKT0+KHtvbktleURvd246TywuLi51JiZ7W25jW2RdXTplPT57cighMSxlLm5hdGl2ZUV2ZW50LFwicmVmZXJlbmNlLXByZXNzXCIpfSwuLi5cImNsaWNrXCIhPT1kJiZ7b25DbGljayhlKXtyKCExLGUubmF0aXZlRXZlbnQsXCJyZWZlcmVuY2UtcHJlc3NcIil9fX19KSxbTyxyLHUsZF0pLHo9Qy51c2VNZW1vKCgpPT4oe29uS2V5RG93bjpPLG9uTW91c2VEb3duKCl7Yi5jdXJyZW50PSEwfSxvbk1vdXNlVXAoKXtiLmN1cnJlbnQ9ITB9LFtudVtjXV06KCk9PnthLmN1cnJlbnQuaW5zaWRlUmVhY3RUcmVlPSEwfSxvbkJsdXJDYXB0dXJlKCl7Z3x8KGEuY3VycmVudC5pbnNpZGVSZWFjdFRyZWU9ITAsQS5zdGFydCgwLCgpPT57YS5jdXJyZW50Lmluc2lkZVJlYWN0VHJlZT0hMX0pKX19KSxbTyxjLGEsZyxBXSk7cmV0dXJuIEMudXNlTWVtbygoKT0+aT97cmVmZXJlbmNlOlAsZmxvYXRpbmc6en06e30sW2ksUCx6XSl9bGV0IG5wPW5ldyBNYXAoW1tcInNlbGVjdFwiLFwibGlzdGJveFwiXSxbXCJjb21ib2JveFwiLFwibGlzdGJveFwiXSxbXCJsYWJlbFwiLCExXV0pLG5oPVtcInRvcFwiLFwicmlnaHRcIixcImJvdHRvbVwiLFwibGVmdFwiXSxuZz1NYXRoLm1pbixubT1NYXRoLm1heCxudj1NYXRoLnJvdW5kLG5iPU1hdGguZmxvb3Isbnk9ZT0+KHt4OmUseTplfSksbng9e2xlZnQ6XCJyaWdodFwiLHJpZ2h0OlwibGVmdFwiLGJvdHRvbTpcInRvcFwiLHRvcDpcImJvdHRvbVwifSxudz17c3RhcnQ6XCJlbmRcIixlbmQ6XCJzdGFydFwifTtmdW5jdGlvbiBuaihlLG4pe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZShuKTplfWZ1bmN0aW9uIG5rKGUpe3JldHVybiBlLnNwbGl0KFwiLVwiKVswXX1mdW5jdGlvbiBuQShlKXtyZXR1cm4gZS5zcGxpdChcIi1cIilbMV19ZnVuY3Rpb24gbk8oZSl7cmV0dXJuXCJ4XCI9PT1lP1wieVwiOlwieFwifWZ1bmN0aW9uIG5DKGUpe3JldHVyblwieVwiPT09ZT9cImhlaWdodFwiOlwid2lkdGhcIn1sZXQgblM9bmV3IFNldChbXCJ0b3BcIixcImJvdHRvbVwiXSk7ZnVuY3Rpb24gbkUoZSl7cmV0dXJuIG5TLmhhcyhuayhlKSk/XCJ5XCI6XCJ4XCJ9ZnVuY3Rpb24gbl8oZSl7cmV0dXJuIGUucmVwbGFjZSgvc3RhcnR8ZW5kL2csZT0+bndbZV0pfWxldCBuUD1bXCJsZWZ0XCIsXCJyaWdodFwiXSxuej1bXCJyaWdodFwiLFwibGVmdFwiXSxuTD1bXCJ0b3BcIixcImJvdHRvbVwiXSxuVD1bXCJib3R0b21cIixcInRvcFwiXTtmdW5jdGlvbiBuUihlKXtyZXR1cm4gZS5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZyxlPT5ueFtlXSl9ZnVuY3Rpb24gbk4oZSl7cmV0dXJuXCJudW1iZXJcIiE9dHlwZW9mIGU/e3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDowLC4uLmV9Ont0b3A6ZSxyaWdodDplLGJvdHRvbTplLGxlZnQ6ZX19ZnVuY3Rpb24gbkQoZSl7bGV0e3g6bix5OnQsd2lkdGg6cixoZWlnaHQ6b309ZTtyZXR1cm57d2lkdGg6cixoZWlnaHQ6byx0b3A6dCxsZWZ0Om4scmlnaHQ6bityLGJvdHRvbTp0K28seDpuLHk6dH19ZnVuY3Rpb24gbkIoZSxuLHQpe3JldHVybiBNYXRoLmZsb29yKGUvbikhPT10fWZ1bmN0aW9uIG5NKGUsbil7cmV0dXJuIG48MHx8bj49ZS5jdXJyZW50Lmxlbmd0aH1mdW5jdGlvbiBuSShlLG4pe3JldHVybiBuRihlLHtkaXNhYmxlZEluZGljZXM6bn0pfWZ1bmN0aW9uIG5IKGUsbil7cmV0dXJuIG5GKGUse2RlY3JlbWVudDohMCxzdGFydGluZ0luZGV4OmUuY3VycmVudC5sZW5ndGgsZGlzYWJsZWRJbmRpY2VzOm59KX1mdW5jdGlvbiBuRihlLHtzdGFydGluZ0luZGV4Om49LTEsZGVjcmVtZW50OnQ9ITEsZGlzYWJsZWRJbmRpY2VzOnIsYW1vdW50Om89MX09e30pe2xldCBhPW47ZG8gYSs9dD8tbzpvO3doaWxlKGE+PTAmJmE8PWUuY3VycmVudC5sZW5ndGgtMSYmblUoZSxhLHIpKTtyZXR1cm4gYX1mdW5jdGlvbiBuVShlLG4sdCl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdClyZXR1cm4gdChuKTtpZih0KXJldHVybiB0LmluY2x1ZGVzKG4pO2xldCByPWUuY3VycmVudFtuXTtyZXR1cm4gbnVsbD09cnx8ci5oYXNBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKXx8XCJ0cnVlXCI9PT1yLmdldEF0dHJpYnV0ZShcImFyaWEtZGlzYWJsZWRcIil9bGV0IG5WPTA7ZnVuY3Rpb24gbnEoZSxuPXt9KXtsZXR7cHJldmVudFNjcm9sbDp0PSExLGNhbmNlbFByZXZpb3VzOnI9ITAsc3luYzpvPSExfT1uO3ImJmNhbmNlbEFuaW1hdGlvbkZyYW1lKG5WKTtsZXQgYT0oKT0+ZT8uZm9jdXMoe3ByZXZlbnRTY3JvbGw6dH0pO28/YSgpOm5WPXJlcXVlc3RBbmltYXRpb25GcmFtZShhKX1mdW5jdGlvbiBuVyhlLG4sdCl7c3dpdGNoKGUpe2Nhc2VcInZlcnRpY2FsXCI6cmV0dXJuIG47Y2FzZVwiaG9yaXpvbnRhbFwiOnJldHVybiB0O2RlZmF1bHQ6cmV0dXJuIG58fHR9fWZ1bmN0aW9uIG4kKGUsbil7cmV0dXJuIG5XKG4sZT09PWVXfHxlPT09ZSQsZT09PWVWfHxlPT09ZXEpfWZ1bmN0aW9uIG5aKGUsbix0KXtyZXR1cm4gblcobixlPT09ZSQsdD9lPT09ZVY6ZT09PWVxKXx8XCJFbnRlclwiPT09ZXx8XCIgXCI9PT1lfHxcIlwiPT09ZX1mdW5jdGlvbiBuWShlLG4sdCl7cmV0dXJuIG5XKG4sdD9lPT09ZVY6ZT09PWVxLGU9PT1lJCl9ZnVuY3Rpb24gblgoZSxuLHQscil7cmV0dXJuXCJib3RoXCI9PT1ufHxcImhvcml6b250YWxcIj09PW4mJnImJnI+MT9cIkVzY2FwZVwiPT09ZTpuVyhuLHQ/ZT09PWVxOmU9PT1lVixlPT09ZVcpfWZ1bmN0aW9uIG5LKGU9W10pe2xldCBuPWUubWFwKGU9PmU/LnJlZmVyZW5jZSksdD1lLm1hcChlPT5lPy5mbG9hdGluZykscj1lLm1hcChlPT5lPy5pdGVtKSxvPUMudXNlQ2FsbGJhY2sobj0+blEobixlLFwicmVmZXJlbmNlXCIpLG4pLGE9Qy51c2VDYWxsYmFjayhuPT5uUShuLGUsXCJmbG9hdGluZ1wiKSx0KSxpPUMudXNlQ2FsbGJhY2sobj0+blEobixlLFwiaXRlbVwiKSxyKTtyZXR1cm4gQy51c2VNZW1vKCgpPT4oe2dldFJlZmVyZW5jZVByb3BzOm8sZ2V0RmxvYXRpbmdQcm9wczphLGdldEl0ZW1Qcm9wczppfSksW28sYSxpXSl9ZnVuY3Rpb24gblEoZSxuLHQpe2xldCByPW5ldyBNYXAsbz1cIml0ZW1cIj09PXQsYT17fTtmb3IobGV0IG4gaW5cImZsb2F0aW5nXCI9PT10JiYoYS50YWJJbmRleD0tMSxhW2VIXT1cIlwiKSxlKW8mJmUmJihuPT09ZUZ8fG49PT1lVSl8fChhW25dPWVbbl0pO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSs9MSl7bGV0IGwscz1uW2ldPy5bdF07KGw9XCJmdW5jdGlvblwiPT10eXBlb2Ygcz9lP3MoZSk6bnVsbDpzKSYmbkcoYSxsLG8scil9cmV0dXJuIG5HKGEsZSxvLHIpLGF9ZnVuY3Rpb24gbkcoZSxuLHQscil7Zm9yKGxldCBvIGluIG4pe2xldCBhPW5bb107dCYmKG89PT1lRnx8bz09PWVVKXx8KG8uc3RhcnRzV2l0aChcIm9uXCIpPyhyLmhhcyhvKXx8ci5zZXQobyxbXSksXCJmdW5jdGlvblwiPT10eXBlb2YgYSYmKHIuZ2V0KG8pPy5wdXNoKGEpLGVbb109KC4uLmUpPT5yLmdldChvKT8ubWFwKG49Pm4oLi4uZSkpLmZpbmQoZT0+dm9pZCAwIT09ZSkpKTplW29dPWEpfX1sZXQgbko9Qy5jcmVhdGVDb250ZXh0KHZvaWQgMCk7ZnVuY3Rpb24gbjAoZSl7bGV0IG49Qy51c2VDb250ZXh0KG5KKTtpZih2b2lkIDA9PT1uJiYhZSl0aHJvdyBFcnJvcihcIkJhc2UgVUk6IE1lbnVSb290Q29udGV4dCBpcyBtaXNzaW5nLiBNZW51IHBhcnRzIG11c3QgYmUgcGxhY2VkIHdpdGhpbiA8TWVudS5Sb290Pi5cIik7cmV0dXJuIG59bGV0IG4xPUMuY3JlYXRlQ29udGV4dChudWxsKTtmdW5jdGlvbiBuMihlLG49ITEsdD0hMSl7bGV0W3Isb109Qy51c2VTdGF0ZShlJiZuP1wiaWRsZVwiOnZvaWQgMCksW2EsaV09Qy51c2VTdGF0ZShlKTtyZXR1cm4gZSYmIWEmJihpKCEwKSxvKFwic3RhcnRpbmdcIikpLGV8fCFhfHxcImVuZGluZ1wiPT09cnx8dHx8byhcImVuZGluZ1wiKSxlfHxhfHxcImVuZGluZ1wiIT09cnx8byh2b2lkIDApLEYoKCk9PntpZighZSYmYSYmXCJlbmRpbmdcIiE9PXImJnQpe2xldCBlPW5sLnJlcXVlc3QoKCk9PntvKFwiZW5kaW5nXCIpfSk7cmV0dXJuKCk9PntubC5jYW5jZWwoZSl9fX0sW2UsYSxyLHRdKSxGKCgpPT57aWYoIWV8fG4pcmV0dXJuO2xldCB0PW5sLnJlcXVlc3QoKCk9PntFLmZsdXNoU3luYygoKT0+e28odm9pZCAwKX0pfSk7cmV0dXJuKCk9PntubC5jYW5jZWwodCl9fSxbbixlXSksRigoKT0+e2lmKCFlfHwhbilyZXR1cm47ZSYmYSYmXCJpZGxlXCIhPT1yJiZvKFwic3RhcnRpbmdcIik7bGV0IHQ9bmwucmVxdWVzdCgoKT0+e28oXCJpZGxlXCIpfSk7cmV0dXJuKCk9PntubC5jYW5jZWwodCl9fSxbbixlLGEsbyxyXSksQy51c2VNZW1vKCgpPT4oe21vdW50ZWQ6YSxzZXRNb3VudGVkOmksdHJhbnNpdGlvblN0YXR1czpyfSksW2Escl0pfWZ1bmN0aW9uIG40KHtjb250cm9sbGVkOmUsZGVmYXVsdDpuLG5hbWU6dCxzdGF0ZTpyPVwidmFsdWVcIn0pe2xldHtjdXJyZW50Om99PUMudXNlUmVmKHZvaWQgMCE9PWUpLFthLGldPUMudXNlU3RhdGUobiksbD1DLnVzZUNhbGxiYWNrKGU9PntvfHxpKGUpfSxbXSk7cmV0dXJuW28/ZTphLGxdfWZ1bmN0aW9uIG41KGUpe2xldHtlbmFibGVkOm49ITAsb3Blbjp0LHJlZjpyLG9uQ29tcGxldGU6b309ZSxhPWVBKHQpLGk9VChvKSxsPWZ1bmN0aW9uKGUsbj0hMSl7bGV0IHQ9bnMoKSxyPWVrKCk7cmV0dXJuIFQoKG8sYT1udWxsKT0+e3QuY2FuY2VsKCksci5jbGVhcigpO2xldCBpPWUuY3VycmVudDtpJiYoXCJmdW5jdGlvblwiIT10eXBlb2YgaS5nZXRBbmltYXRpb25zfHxnbG9iYWxUaGlzLkJBU0VfVUlfQU5JTUFUSU9OU19ESVNBQkxFRD9vKCk6dC5yZXF1ZXN0KCgpPT57ZnVuY3Rpb24gZSgpe2kmJlByb21pc2UuYWxsU2V0dGxlZChpLmdldEFuaW1hdGlvbnMoKS5tYXAoZT0+ZS5maW5pc2hlZCkpLnRoZW4oKCk9PntudWxsIT1hJiZhLmFib3J0ZWR8fEUuZmx1c2hTeW5jKG8pfSl9bj9yLnN0YXJ0KDAsZSk6ZSgpfSkpfSl9KHIsdCk7Qy51c2VFZmZlY3QoKCk9PntuJiZsKCgpPT57dD09PWEuY3VycmVudCYmaSgpfSl9LFtuLHQsaSxsLGFdKX1sZXQgbjM9Qy5jcmVhdGVDb250ZXh0KHZvaWQgMCk7ZnVuY3Rpb24gbjYoZT0hMCl7bGV0IG49Qy51c2VDb250ZXh0KG4zKTtpZih2b2lkIDA9PT1uJiYhZSl0aHJvdyBFcnJvcihcIkJhc2UgVUk6IERpcmVjdGlvbkNvbnRleHQgaXMgbWlzc2luZy5cIik7cmV0dXJuIG4/LmRpcmVjdGlvbj8/XCJsdHJcIn1sZXQgbjk9KCk9Pnt9LG44PXt9LG43PXt9LHRlPVwiXCI7Y2xhc3MgdG57bG9ja0NvdW50PTA7cmVzdG9yZT1udWxsO3RpbWVvdXRMb2NrPWVqLmNyZWF0ZSgpO3RpbWVvdXRVbmxvY2s9ZWouY3JlYXRlKCk7YWNxdWlyZShlKXtyZXR1cm4gdGhpcy5sb2NrQ291bnQrPTEsMT09PXRoaXMubG9ja0NvdW50JiZudWxsPT09dGhpcy5yZXN0b3JlJiZ0aGlzLnRpbWVvdXRMb2NrLnN0YXJ0KDAsKCk9PnRoaXMubG9jayhlKSksdGhpcy5yZWxlYXNlfXJlbGVhc2U9KCk9Pnt0aGlzLmxvY2tDb3VudC09MSwwPT09dGhpcy5sb2NrQ291bnQmJnRoaXMucmVzdG9yZSYmdGhpcy50aW1lb3V0VW5sb2NrLnN0YXJ0KDAsdGhpcy51bmxvY2spfTt1bmxvY2s9KCk9PnswPT09dGhpcy5sb2NrQ291bnQmJnRoaXMucmVzdG9yZSYmKHRoaXMucmVzdG9yZT8uKCksdGhpcy5yZXN0b3JlPW51bGwpfTtsb2NrKGUpe2lmKDA9PT10aGlzLmxvY2tDb3VudHx8bnVsbCE9PXRoaXMucmVzdG9yZSlyZXR1cm47bGV0IG49ZVEoZSkuZG9jdW1lbnRFbGVtZW50LHQ9UShuKS5nZXRDb21wdXRlZFN0eWxlKG4pLm92ZXJmbG93WTtpZihcImhpZGRlblwiPT09dHx8XCJjbGlwXCI9PT10KXt0aGlzLnJlc3RvcmU9bjk7cmV0dXJufWxldCByPWV6fHwhZnVuY3Rpb24oZSl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGRvY3VtZW50KXJldHVybiExO2xldCBuPWVRKGUpO3JldHVybiBRKG4pLmlubmVyV2lkdGgtbi5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg+MH0oZSk7dGhpcy5yZXN0b3JlPXI/ZnVuY3Rpb24oZSl7bGV0IG49ZVEoZSkuZG9jdW1lbnRFbGVtZW50LHQ9bi5zdHlsZS5vdmVyZmxvdztyZXR1cm4gbi5zdHlsZS5vdmVyZmxvdz1cImhpZGRlblwiLCgpPT57bi5zdHlsZS5vdmVyZmxvdz10fX0oZSk6ZnVuY3Rpb24oZSl7bGV0IG49ZVEoZSksdD1uLmRvY3VtZW50RWxlbWVudCxyPW4uYm9keSxvPVEodCksYT0wLGk9MCxsPW5sLmNyZWF0ZSgpO2lmKGVQJiYoby52aXN1YWxWaWV3cG9ydD8uc2NhbGU/PzEpIT09MSlyZXR1cm4oKT0+e307ZnVuY3Rpb24gcygpe2xldCBlPW8uZ2V0Q29tcHV0ZWRTdHlsZSh0KSxuPW8uZ2V0Q29tcHV0ZWRTdHlsZShyKTthPXQuc2Nyb2xsVG9wLGk9dC5zY3JvbGxMZWZ0LG44PXtzY3JvbGxiYXJHdXR0ZXI6dC5zdHlsZS5zY3JvbGxiYXJHdXR0ZXIsb3ZlcmZsb3dZOnQuc3R5bGUub3ZlcmZsb3dZLG92ZXJmbG93WDp0LnN0eWxlLm92ZXJmbG93WH0sdGU9dC5zdHlsZS5zY3JvbGxCZWhhdmlvcixuNz17cG9zaXRpb246ci5zdHlsZS5wb3NpdGlvbixoZWlnaHQ6ci5zdHlsZS5oZWlnaHQsd2lkdGg6ci5zdHlsZS53aWR0aCxib3hTaXppbmc6ci5zdHlsZS5ib3hTaXppbmcsb3ZlcmZsb3dZOnIuc3R5bGUub3ZlcmZsb3dZLG92ZXJmbG93WDpyLnN0eWxlLm92ZXJmbG93WCxzY3JvbGxCZWhhdmlvcjpyLnN0eWxlLnNjcm9sbEJlaGF2aW9yfTtsZXQgbD1cInVuZGVmaW5lZFwiIT10eXBlb2YgQ1NTJiZDU1Muc3VwcG9ydHM/LihcInNjcm9sbGJhci1ndXR0ZXJcIixcInN0YWJsZVwiKSxzPXQuc2Nyb2xsSGVpZ2h0PnQuY2xpZW50SGVpZ2h0LGM9dC5zY3JvbGxXaWR0aD50LmNsaWVudFdpZHRoLHU9XCJzY3JvbGxcIj09PWUub3ZlcmZsb3dZfHxcInNjcm9sbFwiPT09bi5vdmVyZmxvd1ksZD1cInNjcm9sbFwiPT09ZS5vdmVyZmxvd1h8fFwic2Nyb2xsXCI9PT1uLm92ZXJmbG93WCxmPU1hdGgubWF4KDAsby5pbm5lcldpZHRoLXQuY2xpZW50V2lkdGgpLHA9TWF0aC5tYXgoMCxvLmlubmVySGVpZ2h0LXQuY2xpZW50SGVpZ2h0KSxoPXBhcnNlRmxvYXQobi5tYXJnaW5Ub3ApK3BhcnNlRmxvYXQobi5tYXJnaW5Cb3R0b20pLGc9cGFyc2VGbG9hdChuLm1hcmdpbkxlZnQpK3BhcnNlRmxvYXQobi5tYXJnaW5SaWdodCk7T2JqZWN0LmFzc2lnbih0LnN0eWxlLHtzY3JvbGxiYXJHdXR0ZXI6XCJzdGFibGVcIixvdmVyZmxvd1k6IWwmJihzfHx1KT9cInNjcm9sbFwiOlwiaGlkZGVuXCIsb3ZlcmZsb3dYOiFsJiYoY3x8ZCk/XCJzY3JvbGxcIjpcImhpZGRlblwifSksT2JqZWN0LmFzc2lnbihyLnN0eWxlLHtwb3NpdGlvbjpcInJlbGF0aXZlXCIsaGVpZ2h0Omh8fHA/YGNhbGMoMTAwZHZoIC0gJHtoK3B9cHgpYDpcIjEwMGR2aFwiLHdpZHRoOmd8fGY/YGNhbGMoMTAwdncgLSAke2crZn1weClgOlwiMTAwdndcIixib3hTaXppbmc6XCJib3JkZXItYm94XCIsb3ZlcmZsb3c6XCJoaWRkZW5cIixzY3JvbGxCZWhhdmlvcjpcInVuc2V0XCJ9KSxyLnNjcm9sbFRvcD1hLHIuc2Nyb2xsTGVmdD1pLHQuc2V0QXR0cmlidXRlKFwiZGF0YS1iYXNlLXVpLXNjcm9sbC1sb2NrZWRcIixcIlwiKSx0LnN0eWxlLnNjcm9sbEJlaGF2aW9yPVwidW5zZXRcIn1mdW5jdGlvbiBjKCl7T2JqZWN0LmFzc2lnbih0LnN0eWxlLG44KSxPYmplY3QuYXNzaWduKHIuc3R5bGUsbjcpLHQuc2Nyb2xsVG9wPWEsdC5zY3JvbGxMZWZ0PWksdC5yZW1vdmVBdHRyaWJ1dGUoXCJkYXRhLWJhc2UtdWktc2Nyb2xsLWxvY2tlZFwiKSx0LnN0eWxlLnNjcm9sbEJlaGF2aW9yPXRlfWZ1bmN0aW9uIHUoKXtjKCksbC5yZXF1ZXN0KHMpfXJldHVybiBzKCksby5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdSksKCk9PntsLmNhbmNlbCgpLGMoKSxvLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix1KX19KGUpfX1sZXQgdHQ9bmV3IHRuO2Z1bmN0aW9uIHRyKGUpe2lmKGUpcmV0dXJuKHtcImZvY3VzLW91dFwiOlwiZm9jdXMtb3V0XCIsXCJlc2NhcGUta2V5XCI6XCJlc2NhcGUta2V5XCIsXCJvdXRzaWRlLXByZXNzXCI6XCJvdXRzaWRlLXByZXNzXCIsXCJsaXN0LW5hdmlnYXRpb25cIjpcImxpc3QtbmF2aWdhdGlvblwiLGNsaWNrOlwidHJpZ2dlci1wcmVzc1wiLGhvdmVyOlwidHJpZ2dlci1ob3ZlclwiLGZvY3VzOlwidHJpZ2dlci1mb2N1c1wiLFwicmVmZXJlbmNlLXByZXNzXCI6XCJ0cmlnZ2VyLXByZXNzXCIsXCJzYWZlLXBvbHlnb25cIjpcInRyaWdnZXItaG92ZXJcIixcImFuY2VzdG9yLXNjcm9sbFwiOnZvaWQgMH0pW2VdfWxldCB0bz1DLmNyZWF0ZUNvbnRleHQodm9pZCAwKTtmdW5jdGlvbiB0YShlPSEwKXtsZXQgbj1DLnVzZUNvbnRleHQodG8pO2lmKHZvaWQgMD09PW4mJiFlKXRocm93IEVycm9yKFwiQmFzZSBVSTogQ29udGV4dE1lbnVSb290Q29udGV4dCBpcyBtaXNzaW5nLiBDb250ZXh0TWVudSBwYXJ0cyBtdXN0IGJlIHBsYWNlZCB3aXRoaW4gPENvbnRleHRNZW51LlJvb3Q+LlwiKTtyZXR1cm4gbn1sZXQgdGk9Qy5jcmVhdGVDb250ZXh0KCExKTtmdW5jdGlvbiB0bChlLG4pe3JldHVybiBlJiYhbj9lOiFlJiZuP246ZXx8bj97Li4uZSwuLi5ufTp2b2lkIDB9bGV0IHRzPXt9O2Z1bmN0aW9uIHRjKGUsbix0LHIsbyl7bGV0IGE9ey4uLnRmKGUsdHMpfTtyZXR1cm4gbiYmKGE9dHUoYSxuKSksdCYmKGE9dHUoYSx0KSksciYmKGE9dHUoYSxyKSksbyYmKGE9dHUoYSxvKSksYX1mdW5jdGlvbiB0dShlLG4pe3JldHVybiB0ZChuKT9uKGUpOmZ1bmN0aW9uKGUsbil7aWYoIW4pcmV0dXJuIGU7Zm9yKGxldCB0IGluIG4pe2xldCByPW5bdF07c3dpdGNoKHQpe2Nhc2VcInN0eWxlXCI6ZVt0XT10bChlLnN0eWxlLHIpO2JyZWFrO2Nhc2VcImNsYXNzTmFtZVwiOmVbdF09dGgoZS5jbGFzc05hbWUscik7YnJlYWs7ZGVmYXVsdDohZnVuY3Rpb24oZSxuKXtsZXQgdD1lLmNoYXJDb2RlQXQoMCkscj1lLmNoYXJDb2RlQXQoMSksbz1lLmNoYXJDb2RlQXQoMik7cmV0dXJuIDExMT09PXQmJjExMD09PXImJm8+PTY1JiZvPD05MCYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG58fHZvaWQgMD09PW4pfSh0LHIpP2VbdF09cjplW3RdPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG4/ZT90PT57dmFyIHI7aWYobnVsbCE9KHI9dCkmJlwib2JqZWN0XCI9PXR5cGVvZiByJiZcIm5hdGl2ZUV2ZW50XCJpbiByKXt0cCh0KTtsZXQgcj1uKHQpO3JldHVybiB0LmJhc2VVSUhhbmRsZXJQcmV2ZW50ZWR8fGU/Lih0KSxyfWxldCBvPW4odCk7cmV0dXJuIGU/Lih0KSxvfTpuOmV9KGVbdF0scil9fXJldHVybiBlfShlLG4pfWZ1bmN0aW9uIHRkKGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGV9ZnVuY3Rpb24gdGYoZSxuKXtyZXR1cm4gdGQoZSk/ZShuKTplPz90c31mdW5jdGlvbiB0cChlKXtyZXR1cm4gZS5wcmV2ZW50QmFzZVVJSGFuZGxlcj0oKT0+e2UuYmFzZVVJSGFuZGxlclByZXZlbnRlZD0hMH0sZX1mdW5jdGlvbiB0aChlLG4pe3JldHVybiBuP2U/bitcIiBcIitlOm46ZX1sZXQgdGc9W10sdG09e2N1cnJlbnQ6ITF9LHR2PWZ1bmN0aW9uKGUpe2xldCBuLHQse2NoaWxkcmVuOnIsb3BlbjpvLG9uT3BlbkNoYW5nZTphLG9uT3BlbkNoYW5nZUNvbXBsZXRlOmksZGVmYXVsdE9wZW46cz0hMSxkaXNhYmxlZDpjPSExLG1vZGFsOnUsbG9vcDpkPSEwLG9yaWVudGF0aW9uOmY9XCJ2ZXJ0aWNhbFwiLGFjdGlvbnNSZWY6cCxvcGVuT25Ib3ZlcjpoLGRlbGF5Omc9MTAwLGNsb3NlRGVsYXk6bT0wLGNsb3NlUGFyZW50T25Fc2M6dj0hMH09ZSxbYix5XT1DLnVzZVN0YXRlKG51bGwpLFt4LHddPUMudXNlU3RhdGUobnVsbCksW2osa109Qy51c2VTdGF0ZSgpLFtBLE9dPUMudXNlU3RhdGUoITApLFtTLF9dPUMudXNlU3RhdGUobnVsbCksW1Asel09Qy51c2VTdGF0ZShudWxsKSxbTCxSXT1DLnVzZVN0YXRlKCEwKSxbTixEXT1DLnVzZVN0YXRlKCExKSxCPUMudXNlUmVmKG51bGwpLE09Qy51c2VSZWYobnVsbCksST1DLnVzZVJlZihudWxsKSxVPWVrKCksVj10YSghMCksJD1DLnVzZUNvbnRleHQodGkpO3tsZXQgZT1uMCghMCksdD1mdW5jdGlvbihlKXtsZXQgbj1DLnVzZUNvbnRleHQobjEpO2lmKG51bGw9PT1uJiYhZSl0aHJvdyBFcnJvcihcIkJhc2UgVUk6IE1lbnViYXJDb250ZXh0IGlzIG1pc3NpbmcuIE1lbnViYXIgcGFydHMgbXVzdCBiZSBwbGFjZWQgd2l0aGluIDxNZW51YmFyPi5cIik7cmV0dXJuIG59KCEwKTtuPSQmJmU/e3R5cGU6XCJtZW51XCIsY29udGV4dDplfTp0P3t0eXBlOlwibWVudWJhclwiLGNvbnRleHQ6dH06Vj97dHlwZTpcImNvbnRleHQtbWVudVwiLGNvbnRleHQ6Vn06e3R5cGU6dm9pZCAwfX1sZXQgWD1IKCk7dm9pZCAwIT09bi50eXBlJiYoWD1uLmNvbnRleHQucm9vdElkKTtsZXQgSz0odm9pZCAwPT09bi50eXBlfHxcImNvbnRleHQtbWVudVwiPT09bi50eXBlKSYmKHU/PyEwKSxRPVwibWVudVwiPT09bi50eXBlP24uY29udGV4dC5hbGxvd01vdXNlRW50ZXI6TixHPVwibWVudVwiPT09bi50eXBlP24uY29udGV4dC5zZXRBbGxvd01vdXNlRW50ZXI6RCxKPWg/PyhcIm1lbnVcIj09PW4udHlwZXx8XCJtZW51YmFyXCI9PT1uLnR5cGUmJm4uY29udGV4dC5oYXNTdWJtZW51T3BlbiksW2VlLGV0XT1uNCh7Y29udHJvbGxlZDpvLGRlZmF1bHQ6cyxuYW1lOlwiTWVudVJvb3RcIixzdGF0ZTpcIm9wZW5cIn0pLGVyPUMudXNlUmVmKFwiY29udGV4dC1tZW51XCIhPT1uLnR5cGUpLGVvPWVrKCk7Qy51c2VFZmZlY3QoKCk9PntpZihlZXx8KEIuY3VycmVudD1udWxsKSxcImNvbnRleHQtbWVudVwiPT09bi50eXBlKXtpZighZWUpe2VvLmNsZWFyKCksZXIuY3VycmVudD0hMTtyZXR1cm59ZW8uc3RhcnQoNTAwLCgpPT57ZXIuY3VycmVudD0hMH0pfX0sW2VvLGVlLG4udHlwZV0pO2xldCBlYT1DLnVzZUNhbGxiYWNrKGU9PntJLmN1cnJlbnQ9ZSx3KGUpfSxbXSkse21vdW50ZWQ6ZWksc2V0TW91bnRlZDplbCx0cmFuc2l0aW9uU3RhdHVzOmVzfT1uMihlZSkse2VuYWJsZWQ6ZWM9ITAsbW91bnRlZDpldSxvcGVuOmVkLHJlZmVyZW5jZUVsZW1lbnQ6ZWY9bnVsbH09e2VuYWJsZWQ6ZWUmJksmJlwidHJpZ2dlci1ob3ZlclwiIT09UCxtb3VudGVkOmVpLG9wZW46ZWUscmVmZXJlbmNlRWxlbWVudDp4fTtGKCgpPT57aWYoZVAmJmV1JiYhZWQpe2xldCBlPWVRKGVmKSxuPWUuYm9keS5zdHlsZS51c2VyU2VsZWN0LHQ9ZS5ib2R5LnN0eWxlLndlYmtpdFVzZXJTZWxlY3Q7cmV0dXJuIGUuYm9keS5zdHlsZS51c2VyU2VsZWN0PVwibm9uZVwiLGUuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0PVwibm9uZVwiLCgpPT57ZS5ib2R5LnN0eWxlLnVzZXJTZWxlY3Q9bixlLmJvZHkuc3R5bGUud2Via2l0VXNlclNlbGVjdD10fX19LFtldSxlZCxlZl0pLEYoKCk9PntpZihlYylyZXR1cm4gdHQuYWNxdWlyZShlZil9LFtlYyxlZl0pLGVlfHxBfHxPKCEwKTtsZXQgZXA9VCgoKT0+e2VsKCExKSxSKCEwKSxHKCExKSxpPy4oITEpfSk7bjUoe2VuYWJsZWQ6IXAsb3BlbjplZSxyZWY6TSxvbkNvbXBsZXRlKCl7ZWV8fGVwKCl9fSk7bGV0IGVoPUMudXNlUmVmKCEwKSxlZz1laygpLGVtPVQoKGUsdCxyKT0+e2lmKGVlPT09ZXx8ITE9PT1lJiZ0Py50eXBlPT09XCJjbGlja1wiJiZcInRvdWNoXCI9PT10LnBvaW50ZXJUeXBlJiYhZWguY3VycmVudClyZXR1cm47ZSYmXCJ0cmlnZ2VyLWZvY3VzXCI9PT1yPyhlaC5jdXJyZW50PSExLGVnLnN0YXJ0KDMwMCwoKT0+e2VoLmN1cnJlbnQ9ITB9KSk6KGVoLmN1cnJlbnQ9ITAsZWcuY2xlYXIoKSk7bGV0IG89KFwidHJpZ2dlci1wcmVzc1wiPT09cnx8XCJpdGVtLXByZXNzXCI9PT1yKSYmMD09PXQuZGV0YWlsJiZ0Py5pc1RydXN0ZWQsaT0hZSYmKFwiZXNjYXBlLWtleVwiPT09cnx8bnVsbD09cik7ZnVuY3Rpb24gbCgpe2E/LihlLHQsciksZXQoZSkseihyPz9udWxsKSxCLmN1cnJlbnQ9dD8/bnVsbH1cInRyaWdnZXItaG92ZXJcIj09PXI/KFIoITApLFUuc3RhcnQoNTAwLCgpPT57UighMSl9KSxFLmZsdXNoU3luYyhsKSk6bCgpLFwibWVudWJhclwiPT09bi50eXBlJiYoXCJ0cmlnZ2VyLWZvY3VzXCI9PT1yfHxcImZvY3VzLW91dFwiPT09cnx8XCJ0cmlnZ2VyLWhvdmVyXCI9PT1yfHxcImxpc3QtbmF2aWdhdGlvblwiPT09cnx8XCJzaWJsaW5nLW9wZW5cIj09PXIpP2soXCJncm91cFwiKTpvfHxpP2sobz9cImNsaWNrXCI6XCJkaXNtaXNzXCIpOmsodm9pZCAwKX0pO0MudXNlSW1wZXJhdGl2ZUhhbmRsZShwLCgpPT4oe3VubW91bnQ6ZXB9KSxbZXBdKSxcImNvbnRleHQtbWVudVwiPT09bi50eXBlJiYodD1uLmNvbnRleHQpLEMudXNlSW1wZXJhdGl2ZUhhbmRsZSh0Py5wb3NpdGlvbmVyUmVmLCgpPT54LFt4XSksQy51c2VJbXBlcmF0aXZlSGFuZGxlKHQ/LmFjdGlvbnNSZWYsKCk9Pih7c2V0T3BlbjplbX0pLFtlbV0pLEMudXNlRWZmZWN0KCgpPT57ZWV8fFUuY2xlYXIoKX0sW1UsZWVdKTtsZXQgZXY9WSh7ZWxlbWVudHM6e3JlZmVyZW5jZTpiLGZsb2F0aW5nOnh9LG9wZW46ZWUsb25PcGVuQ2hhbmdlKGUsbix0KXtlbShlLG4sdHIodCkpfX0pLGViPWUzKGV2LHtlbmFibGVkOkEmJkomJiFjJiZcImNvbnRleHQtbWVudVwiIT09bi50eXBlJiYoXCJtZW51YmFyXCIhPT1uLnR5cGV8fG4uY29udGV4dC5oYXNTdWJtZW51T3BlbiYmIWVlKSxoYW5kbGVDbG9zZTplNyh7YmxvY2tQb2ludGVyRXZlbnRzOiEwfSksbW91c2VPbmx5OiEwLG1vdmU6XCJtZW51XCI9PT1uLnR5cGUscmVzdE1zOnZvaWQgMD09PW4udHlwZXx8XCJtZW51XCI9PT1uLnR5cGUmJlE/Zzp2b2lkIDAsZGVsYXk6XCJtZW51XCI9PT1uLnR5cGU/e29wZW46UT9nOjFlMTAsY2xvc2U6bX06e2Nsb3NlOm19fSksZXk9bm4oZXYse2VuYWJsZWQ6IWMmJiFlZSYmXCJtZW51YmFyXCI9PT1uLnR5cGUmJm4uY29udGV4dC5oYXNTdWJtZW51T3BlbiYmIVZ9KSxleD1mdW5jdGlvbihlLG49e30pe2xldHtvcGVuOnQsb25PcGVuQ2hhbmdlOnIsZGF0YVJlZjpvfT1lLHtlbmFibGVkOmE9ITAsZXZlbnQ6aT1cImNsaWNrXCIsdG9nZ2xlOmw9ITAsaWdub3JlTW91c2U6cz0hMSxzdGlja0lmT3BlbjpjPSEwfT1uLHU9Qy51c2VSZWYodm9pZCAwKSxkPW5zKCksZj1DLnVzZU1lbW8oKCk9Pih7b25Qb2ludGVyRG93bihlKXt1LmN1cnJlbnQ9ZS5wb2ludGVyVHlwZX0sb25Nb3VzZURvd24oZSl7bGV0IG49dS5jdXJyZW50LGE9ZS5uYXRpdmVFdmVudDtpZigwIT09ZS5idXR0b258fFwiY2xpY2tcIj09PWl8fGVJKG4sITApJiZzKXJldHVybjtsZXQgZj1vLmN1cnJlbnQub3BlbkV2ZW50LHA9Zj8udHlwZSxoPSEodCYmbCYmKCFmfHwhY3x8XCJjbGlja1wiPT09cHx8XCJtb3VzZWRvd25cIj09PXApKTtkLnJlcXVlc3QoKCk9PntyKGgsYSxcImNsaWNrXCIpfSl9LG9uQ2xpY2soZSl7bGV0IG49dS5jdXJyZW50O2lmKFwibW91c2Vkb3duXCI9PT1pJiZuKXt1LmN1cnJlbnQ9dm9pZCAwO3JldHVybn1pZihlSShuLCEwKSYmcylyZXR1cm47bGV0IGE9by5jdXJyZW50Lm9wZW5FdmVudCxkPWE/LnR5cGU7cighKHQmJmwmJighYXx8IWN8fFwiY2xpY2tcIj09PWR8fFwibW91c2Vkb3duXCI9PT1kfHxcImtleWRvd25cIj09PWR8fFwia2V5dXBcIj09PWQpKSxlLm5hdGl2ZUV2ZW50LFwiY2xpY2tcIil9LG9uS2V5RG93bigpe3UuY3VycmVudD12b2lkIDB9fSksW28saSxzLHIsdCxjLGwsZF0pO3JldHVybiBDLnVzZU1lbW8oKCk9PmE/e3JlZmVyZW5jZTpmfTpucixbYSxmXSl9KGV2LHtlbmFibGVkOiFjJiZcImNvbnRleHQtbWVudVwiIT09bi50eXBlLGV2ZW50OmVlJiZcIm1lbnViYXJcIj09PW4udHlwZT9cImNsaWNrXCI6XCJtb3VzZWRvd25cIix0b2dnbGU6IUp8fFwibWVudVwiIT09bi50eXBlLGlnbm9yZU1vdXNlOkomJlwibWVudVwiPT09bi50eXBlLHN0aWNrSWZPcGVuOnZvaWQgMD09PW4udHlwZSYmTH0pLGV3PW5mKGV2LHtlbmFibGVkOiFjLGJ1YmJsZXM6diYmXCJtZW51XCI9PT1uLnR5cGUsb3V0c2lkZVByZXNzRXZlbnQ6XCJtb3VzZWRvd25cIixvdXRzaWRlUHJlc3M6KCk9PlwiY29udGV4dC1tZW51XCIhPT1uLnR5cGV8fEIuY3VycmVudD8udHlwZT09PVwiY29udGV4dG1lbnVcInx8ZXIuY3VycmVudH0pLGVqPWZ1bmN0aW9uKGUsbj17fSl7bGV0e29wZW46dCxlbGVtZW50czpyLGZsb2F0aW5nSWQ6b309ZSx7ZW5hYmxlZDphPSEwLHJvbGU6aT1cImRpYWxvZ1wifT1uLGw9SCgpLHM9ci5kb21SZWZlcmVuY2U/LmlkfHxsLGM9Qy51c2VNZW1vKCgpPT5lMChyLmZsb2F0aW5nKT8uaWR8fG8sW3IuZmxvYXRpbmcsb10pLHU9bnAuZ2V0KGkpPz9pLGQ9bnVsbCE9cSgpLGY9Qy51c2VNZW1vKCgpPT5cInRvb2x0aXBcIj09PXV8fFwibGFiZWxcIj09PWk/e1tgYXJpYS0ke1wibGFiZWxcIj09PWk/XCJsYWJlbGxlZGJ5XCI6XCJkZXNjcmliZWRieVwifWBdOnQ/Yzp2b2lkIDB9OntcImFyaWEtZXhwYW5kZWRcIjp0P1widHJ1ZVwiOlwiZmFsc2VcIixcImFyaWEtaGFzcG9wdXBcIjpcImFsZXJ0ZGlhbG9nXCI9PT11P1wiZGlhbG9nXCI6dSxcImFyaWEtY29udHJvbHNcIjp0P2M6dm9pZCAwLC4uLlwibGlzdGJveFwiPT09dSYme3JvbGU6XCJjb21ib2JveFwifSwuLi5cIm1lbnVcIj09PXUmJntpZDpzfSwuLi5cIm1lbnVcIj09PXUmJmQmJntyb2xlOlwibWVudWl0ZW1cIn0sLi4uXCJzZWxlY3RcIj09PWkmJntcImFyaWEtYXV0b2NvbXBsZXRlXCI6XCJub25lXCJ9LC4uLlwiY29tYm9ib3hcIj09PWkmJntcImFyaWEtYXV0b2NvbXBsZXRlXCI6XCJsaXN0XCJ9fSxbdSxjLGQsdCxzLGldKSxwPUMudXNlTWVtbygoKT0+e2xldCBlPXtpZDpjLC4uLnUmJntyb2xlOnV9fTtyZXR1cm5cInRvb2x0aXBcIj09PXV8fFwibGFiZWxcIj09PWk/ZTp7Li4uZSwuLi5cIm1lbnVcIj09PXUmJntcImFyaWEtbGFiZWxsZWRieVwiOnN9fX0sW3UsYyxzLGldKSxoPUMudXNlQ2FsbGJhY2soKHthY3RpdmU6ZSxzZWxlY3RlZDpufSk9PntsZXQgdD17cm9sZTpcIm9wdGlvblwiLC4uLmUmJntpZDpgJHtjfS1mdWktb3B0aW9uYH19O3N3aXRjaChpKXtjYXNlXCJzZWxlY3RcIjpyZXR1cm57Li4udCxcImFyaWEtc2VsZWN0ZWRcIjplJiZufTtjYXNlXCJjb21ib2JveFwiOnJldHVybnsuLi50LFwiYXJpYS1zZWxlY3RlZFwiOm59fXJldHVybnt9fSxbYyxpXSk7cmV0dXJuIEMudXNlTWVtbygoKT0+YT97cmVmZXJlbmNlOmYsZmxvYXRpbmc6cCxpdGVtOmh9Ont9LFthLGYscCxoXSl9KGV2LHtyb2xlOlwibWVudVwifSksZU89Qy51c2VSZWYoW10pLGVDPUMudXNlUmVmKFtdKSxlUz1uNigpLGVFPWZ1bmN0aW9uKGUsbil7bGV0e29wZW46dCxvbk9wZW5DaGFuZ2U6cixlbGVtZW50czpvLGZsb2F0aW5nSWQ6YX09ZSx7bGlzdFJlZjppLGFjdGl2ZUluZGV4Omwsb25OYXZpZ2F0ZTpzPSgpPT57fSxlbmFibGVkOmM9ITAsc2VsZWN0ZWRJbmRleDp1PW51bGwsYWxsb3dFc2NhcGU6ZD0hMSxsb29wOmY9ITEsbmVzdGVkOnA9ITEscnRsOmg9ITEsdmlydHVhbDpnPSExLGZvY3VzSXRlbU9uT3BlbjptPVwiYXV0b1wiLGZvY3VzSXRlbU9uSG92ZXI6dj0hMCxvcGVuT25BcnJvd0tleURvd246Yj0hMCxkaXNhYmxlZEluZGljZXM6eSxvcmllbnRhdGlvbjp4PVwidmVydGljYWxcIixwYXJlbnRPcmllbnRhdGlvbjp3LGNvbHM6aj0xLHNjcm9sbEl0ZW1JbnRvVmlldzprPSEwLHZpcnR1YWxJdGVtUmVmOkEsaXRlbVNpemVzOk8sZGVuc2U6Uz0hMX09bixFPWVBKGUwKG8uZmxvYXRpbmcpKSxfPXEoKSxQPVcoKTtGKCgpPT57ZS5kYXRhUmVmLmN1cnJlbnQub3JpZW50YXRpb249eH0sW2UseF0pO2xldCB6PWVKKG8uZG9tUmVmZXJlbmNlKSxMPUMudXNlUmVmKG0pLFI9Qy51c2VSZWYodT8/LTEpLE49Qy51c2VSZWYobnVsbCksRD1DLnVzZVJlZighMCksQj1UKCgpPT57cygtMT09PVIuY3VycmVudD9udWxsOlIuY3VycmVudCl9KSxNPUMudXNlUmVmKEIpLEk9Qy51c2VSZWYoISFvLmZsb2F0aW5nKSxIPUMudXNlUmVmKHQpLFU9Qy51c2VSZWYoITEpLFY9Qy51c2VSZWYoITEpLCQ9ZUEoeSksWj1lQSh0KSxZPWVBKGspLFg9ZUEodSksW0ssUV09Qy51c2VTdGF0ZSgpLFtHLEpdPUMudXNlU3RhdGUoKSxlZT1UKCgpPT57ZnVuY3Rpb24gZShlKXtnPyhlLmlkPy5lbmRzV2l0aChcIi1mdWktb3B0aW9uXCIpJiYoZS5pZD1gJHthfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMTYpLnNsaWNlKDIsMTApfWApLFEoZS5pZCksUD8uZXZlbnRzLmVtaXQoXCJ2aXJ0dWFsZm9jdXNcIixlKSxBJiYoQS5jdXJyZW50PWUpKTpucShlLHtzeW5jOlUuY3VycmVudCxwcmV2ZW50U2Nyb2xsOiEwfSl9bGV0IG49aS5jdXJyZW50W1IuY3VycmVudF0sdD1WLmN1cnJlbnQ7biYmZShuKSwoVS5jdXJyZW50P2U9PmUoKTpyZXF1ZXN0QW5pbWF0aW9uRnJhbWUpKCgpPT57bGV0IHI9aS5jdXJyZW50W1IuY3VycmVudF18fG47aWYoIXIpcmV0dXJuO258fGUocik7bGV0IG89WS5jdXJyZW50O28mJmVyJiYodHx8IUQuY3VycmVudCkmJnIuc2Nyb2xsSW50b1ZpZXc/LihcImJvb2xlYW5cIj09dHlwZW9mIG8/e2Jsb2NrOlwibmVhcmVzdFwiLGlubGluZTpcIm5lYXJlc3RcIn06byl9KX0pO0YoKCk9PntjJiYodCYmby5mbG9hdGluZz9MLmN1cnJlbnQmJm51bGwhPXUmJihWLmN1cnJlbnQ9ITAsUi5jdXJyZW50PXUsQigpKTpJLmN1cnJlbnQmJihSLmN1cnJlbnQ9LTEsTS5jdXJyZW50KCkpKX0sW2MsdCxvLmZsb2F0aW5nLHUsQl0pLEYoKCk9PntpZihjJiZ0JiZvLmZsb2F0aW5nKWlmKG51bGw9PWwpe2lmKFUuY3VycmVudD0hMSxudWxsIT1YLmN1cnJlbnQpcmV0dXJuO2lmKEkuY3VycmVudCYmKFIuY3VycmVudD0tMSxlZSgpKSwoIUguY3VycmVudHx8IUkuY3VycmVudCkmJkwuY3VycmVudCYmKG51bGwhPU4uY3VycmVudHx8ITA9PT1MLmN1cnJlbnQmJm51bGw9PU4uY3VycmVudCkpe2xldCBlPTAsbj0oKT0+e251bGw9PWkuY3VycmVudFswXT8oZTwyJiYoZT9yZXF1ZXN0QW5pbWF0aW9uRnJhbWU6cXVldWVNaWNyb3Rhc2spKG4pLGUrPTEpOihSLmN1cnJlbnQ9bnVsbD09Ti5jdXJyZW50fHxuWihOLmN1cnJlbnQseCxoKXx8cD9uSShpLCQuY3VycmVudCk6bkgoaSwkLmN1cnJlbnQpLE4uY3VycmVudD1udWxsLEIoKSl9O24oKX19ZWxzZSBuTShpLGwpfHwoUi5jdXJyZW50PWwsZWUoKSxWLmN1cnJlbnQ9ITEpfSxbYyx0LG8uZmxvYXRpbmcsbCxYLHAsaSx4LGgsQixlZSwkXSksRigoKT0+e2lmKCFjfHxvLmZsb2F0aW5nfHwhUHx8Z3x8IUkuY3VycmVudClyZXR1cm47bGV0IGU9UC5ub2Rlc1JlZi5jdXJyZW50LG49ZS5maW5kKGU9PmUuaWQ9PT1fKT8uY29udGV4dD8uZWxlbWVudHMuZmxvYXRpbmcsdD1lWihlUShvLmZsb2F0aW5nKSkscj1lLnNvbWUoZT0+ZS5jb250ZXh0JiZlWShlLmNvbnRleHQuZWxlbWVudHMuZmxvYXRpbmcsdCkpO24mJiFyJiZELmN1cnJlbnQmJm4uZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KX0sW2Msby5mbG9hdGluZyxQLF8sZ10pLEYoKCk9PntpZihjJiZQJiZnJiYhXylyZXR1cm4gUC5ldmVudHMub24oXCJ2aXJ0dWFsZm9jdXNcIixlKSwoKT0+e1AuZXZlbnRzLm9mZihcInZpcnR1YWxmb2N1c1wiLGUpfTtmdW5jdGlvbiBlKGUpe0ooZS5pZCksQSYmKEEuY3VycmVudD1lKX19LFtjLFAsZyxfLEFdKSxGKCgpPT57TS5jdXJyZW50PUIsSC5jdXJyZW50PXQsSS5jdXJyZW50PSEhby5mbG9hdGluZ30pLEYoKCk9Pnt0fHwoTi5jdXJyZW50PW51bGwsTC5jdXJyZW50PW0pfSxbdCxtXSk7bGV0IGV0PW51bGwhPWwsZXI9Qy51c2VNZW1vKCgpPT57ZnVuY3Rpb24gZShlKXtpZighWi5jdXJyZW50KXJldHVybjtsZXQgbj1pLmN1cnJlbnQuaW5kZXhPZihlKTstMSE9PW4mJlIuY3VycmVudCE9PW4mJihSLmN1cnJlbnQ9bixCKCkpfXJldHVybntvbkZvY3VzKHtjdXJyZW50VGFyZ2V0Om59KXtVLmN1cnJlbnQ9ITAsZShuKX0sb25DbGljazooe2N1cnJlbnRUYXJnZXQ6ZX0pPT5lLmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSksb25Nb3VzZU1vdmUoe2N1cnJlbnRUYXJnZXQ6bn0pe1UuY3VycmVudD0hMCxWLmN1cnJlbnQ9ITEsdiYmZShuKX0sb25Qb2ludGVyTGVhdmUoe3BvaW50ZXJUeXBlOmV9KXtELmN1cnJlbnQmJlwidG91Y2hcIiE9PWUmJihVLmN1cnJlbnQ9ITAsdiYmKFIuY3VycmVudD0tMSxCKCksZ3x8RS5jdXJyZW50Py5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pKSl9fX0sW1osRSx2LGksQixnXSksZW89Qy51c2VDYWxsYmFjaygoKT0+dz8/UD8ubm9kZXNSZWYuY3VycmVudC5maW5kKGU9PmUuaWQ9PT1fKT8uY29udGV4dD8uZGF0YVJlZj8uY3VycmVudC5vcmllbnRhdGlvbixbXyxQLHddKSxlYT1UKGU9PntpZihELmN1cnJlbnQ9ITEsVS5jdXJyZW50PSEwLDIyOT09PWUud2hpY2h8fCFaLmN1cnJlbnQmJmUuY3VycmVudFRhcmdldD09PUUuY3VycmVudClyZXR1cm47aWYocCYmblgoZS5rZXkseCxoLGopKXtuJChlLmtleSxlbygpKXx8ZUQoZSkscighMSxlLm5hdGl2ZUV2ZW50LFwibGlzdC1uYXZpZ2F0aW9uXCIpLGVuKG8uZG9tUmVmZXJlbmNlKSYmKGc/UD8uZXZlbnRzLmVtaXQoXCJ2aXJ0dWFsZm9jdXNcIixvLmRvbVJlZmVyZW5jZSk6by5kb21SZWZlcmVuY2UuZm9jdXMoKSk7cmV0dXJufWxldCBuPVIuY3VycmVudCxhPW5JKGkseSksbD1uSChpLHkpO2lmKHp8fChcIkhvbWVcIj09PWUua2V5JiYoZUQoZSksUi5jdXJyZW50PWEsQigpKSxcIkVuZFwiPT09ZS5rZXkmJihlRChlKSxSLmN1cnJlbnQ9bCxCKCkpKSxqPjEpe3ZhciBzO2xldCBuPU98fEFycmF5LmZyb20oe2xlbmd0aDppLmN1cnJlbnQubGVuZ3RofSwoKT0+KHt3aWR0aDoxLGhlaWdodDoxfSkpLHQ9ZnVuY3Rpb24oZSxuLHQpe2xldCByPVtdLG89MDtyZXR1cm4gZS5mb3JFYWNoKCh7d2lkdGg6ZSxoZWlnaHQ6YX0saSk9PntsZXQgbD0hMTtmb3IodCYmKG89MCk7IWw7KXtsZXQgdD1bXTtmb3IobGV0IHI9MDtyPGU7cis9MSlmb3IobGV0IGU9MDtlPGE7ZSs9MSl0LnB1c2gobytyK2Uqbik7byVuK2U8PW4mJnQuZXZlcnkoZT0+bnVsbD09cltlXSk/KHQuZm9yRWFjaChlPT57cltlXT1pfSksbD0hMCk6bys9MX19KSxbLi4ucl19KG4saixTKSxyPXQuZmluZEluZGV4KGU9Pm51bGwhPWUmJiFuVShpLGUseSkpLG89dC5yZWR1Y2UoKGUsbix0KT0+bnVsbD09bnx8blUoaSxuLHkpP2U6dCwtMSksYz10W2Z1bmN0aW9uKGUse2V2ZW50Om4sb3JpZW50YXRpb246dCxsb29wOnIscnRsOm8sY29sczphLGRpc2FibGVkSW5kaWNlczppLG1pbkluZGV4OmwsbWF4SW5kZXg6cyxwcmV2SW5kZXg6YyxzdG9wRXZlbnQ6dT0hMX0pe2xldCBkPWM7aWYobi5rZXk9PT1lVyl7aWYodSYmZUQobiksLTE9PT1jKWQ9cztlbHNlIGlmKGQ9bkYoZSx7c3RhcnRpbmdJbmRleDpkLGFtb3VudDphLGRlY3JlbWVudDohMCxkaXNhYmxlZEluZGljZXM6aX0pLHImJihjLWE8bHx8ZDwwKSl7bGV0IGU9YyVhLG49cyVhLHQ9cy0obi1lKTtkPW49PT1lP3M6bj5lP3Q6dC1hfW5NKGUsZCkmJihkPWMpfWlmKG4ua2V5PT09ZSQmJih1JiZlRChuKSwtMT09PWM/ZD1sOihkPW5GKGUse3N0YXJ0aW5nSW5kZXg6YyxhbW91bnQ6YSxkaXNhYmxlZEluZGljZXM6aX0pLHImJmMrYT5zJiYoZD1uRihlLHtzdGFydGluZ0luZGV4OmMlYS1hLGFtb3VudDphLGRpc2FibGVkSW5kaWNlczppfSkpKSxuTShlLGQpJiYoZD1jKSksXCJib3RoXCI9PT10KXtsZXQgdD1uYihjL2EpO24ua2V5PT09KG8/ZVY6ZXEpJiYodSYmZUQobiksYyVhIT1hLTE/KGQ9bkYoZSx7c3RhcnRpbmdJbmRleDpjLGRpc2FibGVkSW5kaWNlczppfSksciYmbkIoZCxhLHQpJiYoZD1uRihlLHtzdGFydGluZ0luZGV4OmMtYyVhLTEsZGlzYWJsZWRJbmRpY2VzOml9KSkpOnImJihkPW5GKGUse3N0YXJ0aW5nSW5kZXg6Yy1jJWEtMSxkaXNhYmxlZEluZGljZXM6aX0pKSxuQihkLGEsdCkmJihkPWMpKSxuLmtleT09PShvP2VxOmVWKSYmKHUmJmVEKG4pLGMlYSE9MD8oZD1uRihlLHtzdGFydGluZ0luZGV4OmMsZGVjcmVtZW50OiEwLGRpc2FibGVkSW5kaWNlczppfSksciYmbkIoZCxhLHQpJiYoZD1uRihlLHtzdGFydGluZ0luZGV4OmMrKGEtYyVhKSxkZWNyZW1lbnQ6ITAsZGlzYWJsZWRJbmRpY2VzOml9KSkpOnImJihkPW5GKGUse3N0YXJ0aW5nSW5kZXg6YysoYS1jJWEpLGRlY3JlbWVudDohMCxkaXNhYmxlZEluZGljZXM6aX0pKSxuQihkLGEsdCkmJihkPWMpKTtsZXQgbD1uYihzL2EpPT09dDtuTShlLGQpJiYoZD1yJiZsP24ua2V5PT09KG8/ZXE6ZVYpP3M6bkYoZSx7c3RhcnRpbmdJbmRleDpjLWMlYS0xLGRpc2FibGVkSW5kaWNlczppfSk6Yyl9cmV0dXJuIGR9KHtjdXJyZW50OnQubWFwKGU9Pm51bGwhPWU/aS5jdXJyZW50W2VdOm51bGwpfSx7ZXZlbnQ6ZSxvcmllbnRhdGlvbjp4LGxvb3A6ZixydGw6aCxjb2xzOmosZGlzYWJsZWRJbmRpY2VzOihzPVsuLi4oXCJmdW5jdGlvblwiIT10eXBlb2YgeT95Om51bGwpfHxpLmN1cnJlbnQubWFwKChlLG4pPT5uVShpLG4seSk/bjp2b2lkIDApLHZvaWQgMF0sdC5mbGF0TWFwKChlLG4pPT5zLmluY2x1ZGVzKGUpP1tuXTpbXSkpLG1pbkluZGV4OnIsbWF4SW5kZXg6byxwcmV2SW5kZXg6ZnVuY3Rpb24oZSxuLHQscixvKXtpZigtMT09PWUpcmV0dXJuIC0xO2xldCBhPXQuaW5kZXhPZihlKSxpPW5bZV07c3dpdGNoKG8pe2Nhc2VcInRsXCI6cmV0dXJuIGE7Y2FzZVwidHJcIjppZighaSlyZXR1cm4gYTtyZXR1cm4gYStpLndpZHRoLTE7Y2FzZVwiYmxcIjppZighaSlyZXR1cm4gYTtyZXR1cm4gYSsoaS5oZWlnaHQtMSkqcjtjYXNlXCJiclwiOnJldHVybiB0Lmxhc3RJbmRleE9mKGUpO2RlZmF1bHQ6cmV0dXJuIC0xfX0oUi5jdXJyZW50Pmw/YTpSLmN1cnJlbnQsbix0LGosZS5rZXk9PT1lJD9cImJsXCI6ZS5rZXk9PT0oaD9lVjplcSk/XCJ0clwiOlwidGxcIiksc3RvcEV2ZW50OiEwfSldO2lmKG51bGwhPWMmJihSLmN1cnJlbnQ9YyxCKCkpLFwiYm90aFwiPT09eClyZXR1cm59aWYobiQoZS5rZXkseCkpe2lmKGVEKGUpLHQmJiFnJiZlWihlLmN1cnJlbnRUYXJnZXQub3duZXJEb2N1bWVudCk9PT1lLmN1cnJlbnRUYXJnZXQpe1IuY3VycmVudD1uWihlLmtleSx4LGgpP2E6bCxCKCk7cmV0dXJufW5aKGUua2V5LHgsaCk/Zj9SLmN1cnJlbnQ9bj49bD9kJiZuIT09aS5jdXJyZW50Lmxlbmd0aD8tMTphOm5GKGkse3N0YXJ0aW5nSW5kZXg6bixkaXNhYmxlZEluZGljZXM6eX0pOlIuY3VycmVudD1NYXRoLm1pbihsLG5GKGkse3N0YXJ0aW5nSW5kZXg6bixkaXNhYmxlZEluZGljZXM6eX0pKTpmP1IuY3VycmVudD1uPD1hP2QmJi0xIT09bj9pLmN1cnJlbnQubGVuZ3RoOmw6bkYoaSx7c3RhcnRpbmdJbmRleDpuLGRlY3JlbWVudDohMCxkaXNhYmxlZEluZGljZXM6eX0pOlIuY3VycmVudD1NYXRoLm1heChhLG5GKGkse3N0YXJ0aW5nSW5kZXg6bixkZWNyZW1lbnQ6ITAsZGlzYWJsZWRJbmRpY2VzOnl9KSksbk0oaSxSLmN1cnJlbnQpJiYoUi5jdXJyZW50PS0xKSxCKCl9fSksZWk9Qy51c2VNZW1vKCgpPT5nJiZ0JiZldCYme1wiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCI6R3x8S30sW2csdCxldCxHLEtdKSxlbD1DLnVzZU1lbW8oKCk9Pih7XCJhcmlhLW9yaWVudGF0aW9uXCI6XCJib3RoXCI9PT14P3ZvaWQgMDp4LC4uLiF6P2VpOnt9LG9uS2V5RG93bjplYSxvblBvaW50ZXJNb3ZlKCl7RC5jdXJyZW50PSEwfX0pLFtlaSxlYSx4LHpdKSxlcz1DLnVzZU1lbW8oKCk9PntmdW5jdGlvbiBlKGUpe1wiYXV0b1wiPT09bSYmZUIoZS5uYXRpdmVFdmVudCkmJihMLmN1cnJlbnQ9ITApfWZ1bmN0aW9uIG4oZSl7TC5jdXJyZW50PW0sXCJhdXRvXCI9PT1tJiZlTShlLm5hdGl2ZUV2ZW50KSYmKEwuY3VycmVudD0hMCl9cmV0dXJuey4uLmVpLG9uS2V5RG93bihlKXtELmN1cnJlbnQ9ITE7bGV0IG49ZS5rZXkuc3RhcnRzV2l0aChcIkFycm93XCIpLG89W1wiSG9tZVwiLFwiRW5kXCJdLmluY2x1ZGVzKGUua2V5KSxhPW5ZKGUua2V5LHgsaCksbD1uWChlLmtleSx4LGgsaikscz1uWShlLmtleSxlbygpLGgpLGM9biQoZS5rZXkseCksZD0ocD9zOmMpfHxcIkVudGVyXCI9PT1lLmtleXx8XCJcIj09PWUua2V5LnRyaW0oKTtpZihnJiZ0KXt2YXIgZixtO2xldCB0LHIscz1QPy5ub2Rlc1JlZi5jdXJyZW50LmZpbmQoZT0+bnVsbD09ZS5wYXJlbnRJZCksdT1QJiZzPyhmPVAubm9kZXNSZWYuY3VycmVudCxtPXMuaWQscj0tMSwhZnVuY3Rpb24gZShuLG8pe28+ciYmKHQ9bixyPW8pLGU2KGYsbikuZm9yRWFjaChuPT57ZShuLmlkLG8rMSl9KX0obSwwKSxmLmZpbmQoZT0+ZS5pZD09PXQpKTpudWxsO2lmKChufHxvKSYmdSYmQSl7bGV0IG49bmV3IEtleWJvYXJkRXZlbnQoXCJrZXlkb3duXCIse2tleTplLmtleSxidWJibGVzOiEwfSk7aWYoYXx8bCl7bGV0IHQ9dS5jb250ZXh0Py5lbGVtZW50cy5kb21SZWZlcmVuY2U9PT1lLmN1cnJlbnRUYXJnZXQscj1sJiYhdD91LmNvbnRleHQ/LmVsZW1lbnRzLmRvbVJlZmVyZW5jZTphP2kuY3VycmVudC5maW5kKGU9PmU/LmlkPT09Syk6bnVsbDtyJiYoZUQoZSksci5kaXNwYXRjaEV2ZW50KG4pLEoodm9pZCAwKSl9aWYoKGN8fG8pJiZ1LmNvbnRleHQmJnUuY29udGV4dC5vcGVuJiZ1LnBhcmVudElkJiZlLmN1cnJlbnRUYXJnZXQhPT11LmNvbnRleHQuZWxlbWVudHMuZG9tUmVmZXJlbmNlKXtlRChlKSx1LmNvbnRleHQuZWxlbWVudHMuZG9tUmVmZXJlbmNlPy5kaXNwYXRjaEV2ZW50KG4pO3JldHVybn19cmV0dXJuIGVhKGUpfWlmKHR8fGJ8fCFuKXtpZihkKXtsZXQgbj1uJChlLmtleSxlbygpKTtOLmN1cnJlbnQ9cCYmbj9udWxsOmUua2V5fWlmKHApe3MmJihlRChlKSx0PyhSLmN1cnJlbnQ9bkkoaSwkLmN1cnJlbnQpLEIoKSk6cighMCxlLm5hdGl2ZUV2ZW50LFwibGlzdC1uYXZpZ2F0aW9uXCIpKTtyZXR1cm59YyYmKG51bGwhPXUmJihSLmN1cnJlbnQ9dSksZUQoZSksIXQmJmI/cighMCxlLm5hdGl2ZUV2ZW50LFwibGlzdC1uYXZpZ2F0aW9uXCIpOmVhKGUpLHQmJkIoKSl9fSxvbkZvY3VzKCl7dCYmIWcmJihSLmN1cnJlbnQ9LTEsQigpKX0sb25Qb2ludGVyRG93bjpuLG9uUG9pbnRlckVudGVyOm4sb25Nb3VzZURvd246ZSxvbkNsaWNrOmV9fSxbSyxlaSxqLGVhLCQsbSxpLHAsQixyLHQsYix4LGVvLGgsdSxQLGcsQV0pO3JldHVybiBDLnVzZU1lbW8oKCk9PmM/e3JlZmVyZW5jZTplcyxmbG9hdGluZzplbCxpdGVtOmVyfTp7fSxbYyxlcyxlbCxlcl0pfShldix7ZW5hYmxlZDohYyxsaXN0UmVmOmVPLGFjdGl2ZUluZGV4OlMsbmVzdGVkOnZvaWQgMCE9PW4udHlwZSxsb29wOmQsb3JpZW50YXRpb246ZixwYXJlbnRPcmllbnRhdGlvbjpcIm1lbnViYXJcIj09PW4udHlwZT9uLmNvbnRleHQub3JpZW50YXRpb246dm9pZCAwLHJ0bDpcInJ0bFwiPT09ZVMsZGlzYWJsZWRJbmRpY2VzOnRnLG9uTmF2aWdhdGU6XyxvcGVuT25BcnJvd0tleURvd246XCJjb250ZXh0LW1lbnVcIiE9PW4udHlwZX0pLGVfPUMudXNlUmVmKCExKSxlej1mdW5jdGlvbihlLG4pe2xldHtvcGVuOnQsZGF0YVJlZjpyfT1lLHtsaXN0UmVmOm8sYWN0aXZlSW5kZXg6YSxvbk1hdGNoOmksb25UeXBpbmdDaGFuZ2U6bCxlbmFibGVkOnM9ITAsZmluZE1hdGNoOmM9bnVsbCxyZXNldE1zOnU9NzUwLGlnbm9yZUtleXM6ZD1bXSxzZWxlY3RlZEluZGV4OmY9bnVsbH09bixwPWVrKCksaD1DLnVzZVJlZihcIlwiKSxnPUMudXNlUmVmKGY/P2E/Py0xKSxtPUMudXNlUmVmKG51bGwpLHY9VChpKSxiPVQobCkseT1lQShjKSx4PWVBKGQpO0YoKCk9Pnt0JiYocC5jbGVhcigpLG0uY3VycmVudD1udWxsLGguY3VycmVudD1cIlwiKX0sW3QscF0pLEYoKCk9Pnt0JiZcIlwiPT09aC5jdXJyZW50JiYoZy5jdXJyZW50PWY/P2E/Py0xKX0sW3QsZixhXSk7bGV0IHc9VChlPT57ZT9yLmN1cnJlbnQudHlwaW5nfHwoci5jdXJyZW50LnR5cGluZz1lLGIoZSkpOnIuY3VycmVudC50eXBpbmcmJihyLmN1cnJlbnQudHlwaW5nPWUsYihlKSl9KSxqPVQoZT0+e2Z1bmN0aW9uIG4oZSxuLHQpe2xldCByPXkuY3VycmVudD95LmN1cnJlbnQobix0KTpuLmZpbmQoZT0+ZT8udG9Mb2NhbGVMb3dlckNhc2UoKS5pbmRleE9mKHQudG9Mb2NhbGVMb3dlckNhc2UoKSk9PT0wKTtyZXR1cm4gcj9lLmluZGV4T2Yocik6LTF9bGV0IHI9by5jdXJyZW50O2lmKGguY3VycmVudC5sZW5ndGg+MCYmXCIgXCIhPT1oLmN1cnJlbnRbMF0mJigtMT09PW4ocixyLGguY3VycmVudCk/dyghMSk6XCIgXCI9PT1lLmtleSYmZUQoZSkpLG51bGw9PXJ8fHguY3VycmVudC5pbmNsdWRlcyhlLmtleSl8fDEhPT1lLmtleS5sZW5ndGh8fGUuY3RybEtleXx8ZS5tZXRhS2V5fHxlLmFsdEtleSlyZXR1cm47dCYmXCIgXCIhPT1lLmtleSYmKGVEKGUpLHcoITApKSxyLmV2ZXJ5KGU9PiFlfHxlWzBdPy50b0xvY2FsZUxvd2VyQ2FzZSgpIT09ZVsxXT8udG9Mb2NhbGVMb3dlckNhc2UoKSkmJmguY3VycmVudD09PWUua2V5JiYoaC5jdXJyZW50PVwiXCIsZy5jdXJyZW50PW0uY3VycmVudCksaC5jdXJyZW50Kz1lLmtleSxwLnN0YXJ0KHUsKCk9PntoLmN1cnJlbnQ9XCJcIixnLmN1cnJlbnQ9bS5jdXJyZW50LHcoITEpfSk7bGV0IGE9Zy5jdXJyZW50LGk9bihyLFsuLi5yLnNsaWNlKChhfHwwKSsxKSwuLi5yLnNsaWNlKDAsKGF8fDApKzEpXSxoLmN1cnJlbnQpOy0xIT09aT8odihpKSxtLmN1cnJlbnQ9aSk6XCIgXCIhPT1lLmtleSYmKGguY3VycmVudD1cIlwiLHcoITEpKX0pLGs9Qy51c2VNZW1vKCgpPT4oe29uS2V5RG93bjpqfSksW2pdKSxBPUMudXNlTWVtbygoKT0+KHtvbktleURvd246aixvbktleVVwKGUpe1wiIFwiPT09ZS5rZXkmJncoITEpfX0pLFtqLHddKTtyZXR1cm4gQy51c2VNZW1vKCgpPT5zP3tyZWZlcmVuY2U6ayxmbG9hdGluZzpBfTp7fSxbcyxrLEFdKX0oZXYse2xpc3RSZWY6ZUMsYWN0aXZlSW5kZXg6UyxyZXNldE1zOjUwMCxvbk1hdGNoOmU9PntlZSYmZSE9PVMmJl8oZSl9LG9uVHlwaW5nQ2hhbmdlOkMudXNlQ2FsbGJhY2soZT0+e2VfLmN1cnJlbnQ9ZX0sW10pfSkse2dldFJlZmVyZW5jZVByb3BzOmVMLGdldEZsb2F0aW5nUHJvcHM6ZVQsZ2V0SXRlbVByb3BzOmVSfT1uSyhbZWIsZXgsZXcsZXksZWosZUUsZXpdKSxlTj1mdW5jdGlvbihlKXtsZXR7ZW5hYmxlZDpuPSEwLG1vdXNlRG93bkFjdGlvbjp0LG9wZW46cn09ZSxvPUMudXNlUmVmKCExKTtyZXR1cm4gQy51c2VNZW1vKCgpPT5uP3tvbk1vdXNlRG93bjplPT57KFwib3BlblwiPT09dCYmIXJ8fFwiY2xvc2VcIj09PXQmJnIpJiYoby5jdXJyZW50PSEwLGVRKGUuY3VycmVudFRhcmdldCkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsKCk9PntvLmN1cnJlbnQ9ITF9LHtvbmNlOiEwfSkpfSxvbkNsaWNrOmU9PntvLmN1cnJlbnQmJihvLmN1cnJlbnQ9ITEsZS5wcmV2ZW50QmFzZVVJSGFuZGxlcigpKX19Om5yLFtuLHQscl0pfSh7b3BlbjplZSxlbmFibGVkOlwibWVudWJhclwiPT09bi50eXBlLG1vdXNlRG93bkFjdGlvbjpcIm9wZW5cIn0pLGVIPUMudXNlTWVtbygoKT0+e2xldCBlPXRjKGVMKCkse29uTW91c2VFbnRlcigpe08oITApfSxvbk1vdXNlTW92ZSgpe0coITApfX0sZU4pO3JldHVybiBkZWxldGUgZS5yb2xlLGV9LFtlTCxlTixHXSksZUY9Qy51c2VNZW1vKCgpPT5lVCh7b25Nb3VzZUVudGVyKCl7SiYmXCJtZW51XCIhPT1uLnR5cGV8fE8oITEpfSxvbk1vdXNlTW92ZSgpe0coITApfSxvbkNsaWNrKCl7SiYmTyghMSl9fSksW2VULEosbi50eXBlLEddKSxlVT1DLnVzZU1lbW8oKCk9PmVSKCksW2VSXSksZVg9Qy51c2VNZW1vKCgpPT4oe2FjdGl2ZUluZGV4OlMsc2V0QWN0aXZlSW5kZXg6XyxhbGxvd01vdXNlVXBUcmlnZ2VyUmVmOm4udHlwZT9uLmNvbnRleHQuYWxsb3dNb3VzZVVwVHJpZ2dlclJlZjp0bSxmbG9hdGluZ1Jvb3RDb250ZXh0OmV2LGl0ZW1Qcm9wczplVSxwb3B1cFByb3BzOmVGLHRyaWdnZXJQcm9wczplSCxpdGVtRG9tRWxlbWVudHM6ZU8saXRlbUxhYmVsczplQyxtb3VudGVkOmVpLG9wZW46ZWUscG9wdXBSZWY6TSxwb3NpdGlvbmVyUmVmOkksc2V0T3BlbjplbSxzZXRQb3NpdGlvbmVyRWxlbWVudDplYSx0cmlnZ2VyRWxlbWVudDpiLHNldFRyaWdnZXJFbGVtZW50OnksdHJhbnNpdGlvblN0YXR1czplcyxsYXN0T3BlbkNoYW5nZVJlYXNvbjpQLGluc3RhbnRUeXBlOmosb25PcGVuQ2hhbmdlQ29tcGxldGU6aSxzZXRIb3ZlckVuYWJsZWQ6Tyx0eXBpbmdSZWY6ZV8sbW9kYWw6SyxkaXNhYmxlZDpjLHBhcmVudDpuLHJvb3RJZDpYLGFsbG93TW91c2VFbnRlcjpRLHNldEFsbG93TW91c2VFbnRlcjpHfSksW1MsZXYsZVUsZUYsZUgsZU8sZUMsZWksZWUsSSxlbSxlcyxiLGVhLFAsaixpLEssYyxuLFgsUSxHXSksZUs9KDAsbC5qc3gpKG5KLlByb3ZpZGVyLHt2YWx1ZTplWCxjaGlsZHJlbjpyfSk7cmV0dXJuIHZvaWQgMD09PW4udHlwZXx8XCJjb250ZXh0LW1lbnVcIj09PW4udHlwZT8oMCxsLmpzeCkoWix7Y2hpbGRyZW46ZUt9KTplS307ZnVuY3Rpb24gdGIoZSxuLHQscil7dmFyIG8sYSxpLGwscztsZXQgYz1QKHR5KS5jdXJyZW50O3JldHVybiBvPWMsYT1lLGk9bixsPXQscz1yLChvLnJlZnNbMF0hPT1hfHxvLnJlZnNbMV0hPT1pfHxvLnJlZnNbMl0hPT1sfHxvLnJlZnNbM10hPT1zKSYmdHgoYyxbZSxuLHQscl0pLGMuY2FsbGJhY2t9ZnVuY3Rpb24gdHkoKXtyZXR1cm57Y2FsbGJhY2s6bnVsbCxjbGVhbnVwOm51bGwscmVmczpbXX19ZnVuY3Rpb24gdHgoZSxuKXtpZihlLnJlZnM9bixuLmV2ZXJ5KGU9Pm51bGw9PWUpKXtlLmNhbGxiYWNrPW51bGw7cmV0dXJufWUuY2FsbGJhY2s9dD0+e2lmKGUuY2xlYW51cCYmKGUuY2xlYW51cCgpLGUuY2xlYW51cD1udWxsKSxudWxsIT10KXtsZXQgcj1BcnJheShuLmxlbmd0aCkuZmlsbChudWxsKTtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrPTEpe2xldCBvPW5bZV07aWYobnVsbCE9bylzd2l0Y2godHlwZW9mIG8pe2Nhc2VcImZ1bmN0aW9uXCI6e2xldCBuPW8odCk7XCJmdW5jdGlvblwiPT10eXBlb2YgbiYmKHJbZV09bik7YnJlYWt9Y2FzZVwib2JqZWN0XCI6by5jdXJyZW50PXR9fWUuY2xlYW51cD0oKT0+e2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSs9MSl7bGV0IHQ9bltlXTtpZihudWxsIT10KXN3aXRjaCh0eXBlb2YgdCl7Y2FzZVwiZnVuY3Rpb25cIjp7bGV0IG49cltlXTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBuP24oKTp0KG51bGwpO2JyZWFrfWNhc2VcIm9iamVjdFwiOnQuY3VycmVudD1udWxsfX19fX19bGV0IHR3PXBhcnNlSW50KEMudmVyc2lvbiwxMCk7ZnVuY3Rpb24gdGooZSxuLHQ9e30pe2xldCByPW4ucmVuZGVyLG89ZnVuY3Rpb24oZSxuPXt9KXtsZXQgdCx7Y2xhc3NOYW1lOnIscmVuZGVyOm99PWUse3N0YXRlOmE9bnIscmVmOmkscHJvcHM6bCxkaXNhYmxlU3R5bGVIb29rczpzLGN1c3RvbVN0eWxlSG9va01hcHBpbmc6YyxlbmFibGVkOnU9ITB9PW4sZD11P1wiZnVuY3Rpb25cIj09dHlwZW9mIHI/cihhKTpyOnZvaWQgMDshMCE9PXMmJih0PUMudXNlTWVtbygoKT0+dT9mdW5jdGlvbihlLG4pe2xldCB0PXt9O2ZvcihsZXQgciBpbiBlKXtsZXQgbz1lW3JdO2lmKG4/Lmhhc093blByb3BlcnR5KHIpKXtsZXQgZT1uW3JdKG8pO251bGwhPWUmJk9iamVjdC5hc3NpZ24odCxlKTtjb250aW51ZX0hMD09PW8/dFtgZGF0YS0ke3IudG9Mb3dlckNhc2UoKX1gXT1cIlwiOm8mJih0W2BkYXRhLSR7ci50b0xvd2VyQ2FzZSgpfWBdPW8udG9TdHJpbmcoKSl9cmV0dXJuIHR9KGEsYyk6bnIsW2EsYyx1XSkpO2xldCBmPXU/dGwodCxBcnJheS5pc0FycmF5KGwpP2Z1bmN0aW9uKGUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gdHM7aWYoMT09PWUubGVuZ3RoKXJldHVybiB0ZihlWzBdLHRzKTtsZXQgbj17Li4udGYoZVswXSx0cyl9O2ZvcihsZXQgdD0xO3Q8ZS5sZW5ndGg7dCs9MSluPXR1KG4sZVt0XSk7cmV0dXJuIG59KGwpOmwpPz9ucjpucjtyZXR1cm4oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50JiYodT9BcnJheS5pc0FycmF5KGkpP2YucmVmPWZ1bmN0aW9uKGUpe3ZhciBuLHQ7bGV0IHI9UCh0eSkuY3VycmVudDtyZXR1cm4gbj1yLHQ9ZSwobi5yZWZzLmxlbmd0aCE9PXQubGVuZ3RofHxuLnJlZnMuc29tZSgoZSxuKT0+ZSE9PXRbbl0pKSYmdHgocixlKSxyLmNhbGxiYWNrfShbZi5yZWYsdGsobyksLi4uaV0pOmYucmVmPXRiKGYucmVmLHRrKG8pLGkpOnRiKG51bGwsbnVsbCkpLHUpPyh2b2lkIDAhPT1kJiYoZi5jbGFzc05hbWU9dGgoZi5jbGFzc05hbWUsZCkpLGYpOm5yfShuLHQpO3JldHVybiExPT09dC5lbmFibGVkP251bGw6ZnVuY3Rpb24oZSxuLHQscil7aWYobil7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgbilyZXR1cm4gbih0LHIpO2xldCBlPXRjKHQsbi5wcm9wcyk7cmV0dXJuIGUucmVmPXQucmVmLEMuY2xvbmVFbGVtZW50KG4sZSl9aWYoZSYmXCJzdHJpbmdcIj09dHlwZW9mIGUpe3ZhciBvLGE7cmV0dXJuIG89ZSxhPXQsXCJidXR0b25cIj09PW8/KDAsbC5qc3gpKFwiYnV0dG9uXCIse3R5cGU6XCJidXR0b25cIiwuLi5hfSk6XCJpbWdcIj09PW8/KDAsbC5qc3gpKFwiaW1nXCIse2FsdDpcIlwiLC4uLmF9KTpDLmNyZWF0ZUVsZW1lbnQobyxhKX10aHJvdyBFcnJvcihcIkJhc2UgVUk6IFJlbmRlciBlbGVtZW50IG9yIGZ1bmN0aW9uIGFyZSBub3QgZGVmaW5lZC5cIil9KGUscixvLHQuc3RhdGU/P25yKX1mdW5jdGlvbiB0ayhlKXtyZXR1cm4gZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZT90dz49MTk/ZS5wcm9wcy5yZWY6ZS5yZWY6bnVsbH1sZXQgdEE9Qy5jcmVhdGVDb250ZXh0KHZvaWQgMCk7ZnVuY3Rpb24gdE8oZT0hMSl7bGV0IG49Qy51c2VDb250ZXh0KHRBKTtpZih2b2lkIDA9PT1uJiYhZSl0aHJvdyBFcnJvcihcIkJhc2UgVUk6IENvbXBvc2l0ZVJvb3RDb250ZXh0IGlzIG1pc3NpbmcuIENvbXBvc2l0ZSBwYXJ0cyBtdXN0IGJlIHBsYWNlZCB3aXRoaW4gPENvbXBvc2l0ZS5Sb290Pi5cIik7cmV0dXJuIG59bGV0IHRDPUMuY3JlYXRlQ29udGV4dCh7cmVnaXN0ZXI6KCk9Pnt9LHVucmVnaXN0ZXI6KCk9Pnt9LHN1YnNjcmliZU1hcENoYW5nZTooKT0+KCk9Pnt9LGVsZW1lbnRzUmVmOntjdXJyZW50OltdfSxuZXh0SW5kZXhSZWY6e2N1cnJlbnQ6MH19KSx0Uz0oKHI9e30pW3IuTm9uZT0wXT1cIk5vbmVcIixyW3IuR3Vlc3NGcm9tT3JkZXI9MV09XCJHdWVzc0Zyb21PcmRlclwiLHIpO2Z1bmN0aW9uIHRFKGU9e30pe2xldHtsYWJlbDpuLG1ldGFkYXRhOnQsdGV4dFJlZjpyLGluZGV4R3Vlc3NCZWhhdmlvcjpvfT1lLHtyZWdpc3RlcjphLHVucmVnaXN0ZXI6aSxzdWJzY3JpYmVNYXBDaGFuZ2U6bCxlbGVtZW50c1JlZjpzLGxhYmVsc1JlZjpjLG5leHRJbmRleFJlZjp1fT1DLnVzZUNvbnRleHQodEMpLGQ9Qy51c2VSZWYoLTEpLFtmLHBdPUMudXNlU3RhdGUobz09PXRTLkd1ZXNzRnJvbU9yZGVyPygpPT57aWYoLTE9PT1kLmN1cnJlbnQpe2xldCBlPXUuY3VycmVudDt1LmN1cnJlbnQrPTEsZC5jdXJyZW50PWV9cmV0dXJuIGQuY3VycmVudH06LTEpLGg9Qy51c2VSZWYobnVsbCksZz1DLnVzZUNhbGxiYWNrKGU9PntpZihoLmN1cnJlbnQ9ZSwtMSE9PWYmJm51bGwhPT1lJiYocy5jdXJyZW50W2ZdPWUsYykpe2xldCB0PXZvaWQgMCE9PW47Yy5jdXJyZW50W2ZdPXQ/bjpyPy5jdXJyZW50Py50ZXh0Q29udGVudD8/ZS50ZXh0Q29udGVudH19LFtmLHMsYyxuLHJdKTtyZXR1cm4gRigoKT0+e2xldCBlPWguY3VycmVudDtpZihlKXJldHVybiBhKGUsdCksKCk9PntpKGUpfX0sW2EsaSx0XSksRigoKT0+bChlPT57bGV0IG49aC5jdXJyZW50P2UuZ2V0KGguY3VycmVudCk/LmluZGV4Om51bGw7bnVsbCE9biYmcChuKX0pLFtsLHBdKSxDLnVzZU1lbW8oKCk9Pih7cmVmOmcsaW5kZXg6Zn0pLFtmLGddKX1mdW5jdGlvbiB0XyhlKXtsZXR7cmVuZGVyOm4sY2xhc3NOYW1lOnQsaXRlbVJlZjpyPW51bGwsbWV0YWRhdGE6bywuLi5hfT1lLHtwcm9wczppLHJlZjpsfT1mdW5jdGlvbihlPXt9KXtsZXR7aGlnaGxpZ2h0ZWRJbmRleDpuLG9uSGlnaGxpZ2h0ZWRJbmRleENoYW5nZTp0LGhpZ2hsaWdodEl0ZW1PbkhvdmVyOnJ9PXRPKCkse3JlZjpvLGluZGV4OmF9PXRFKGUpLGk9bj09PWEsbD1DLnVzZVJlZihudWxsKSxzPXRiKG8sbCksYz1DLnVzZU1lbW8oKCk9Pih7dGFiSW5kZXg6aT8wOi0xLG9uRm9jdXMoKXt0KGEpfSxvbk1vdXNlTW92ZSgpe2xldCBlPWwuY3VycmVudDtpZighcnx8IWUpcmV0dXJuO2xldCBuPWUuaGFzQXR0cmlidXRlKFwiZGlzYWJsZWRcIil8fFwidHJ1ZVwiPT09ZS5hcmlhRGlzYWJsZWQ7aXx8bnx8ZS5mb2N1cygpfX0pLFthLGksdCxyXSk7cmV0dXJuIEMudXNlTWVtbygoKT0+KHtwcm9wczpjLHJlZjpzLGluZGV4OmF9KSxbYyxhLHNdKX0oe21ldGFkYXRhOm99KTtyZXR1cm4gdGooXCJkaXZcIixlLHtyZWY6W3IsbF0scHJvcHM6W2ksYV19KX1sZXQgdFA9KChvPXt9KS5zdGFydGluZ1N0eWxlPVwiZGF0YS1zdGFydGluZy1zdHlsZVwiLG8uZW5kaW5nU3R5bGU9XCJkYXRhLWVuZGluZy1zdHlsZVwiLG8pLHR6PXtbdFAuc3RhcnRpbmdTdHlsZV06XCJcIn0sdEw9e1t0UC5lbmRpbmdTdHlsZV06XCJcIn0sdFQ9e3RyYW5zaXRpb25TdGF0dXM6ZT0+XCJzdGFydGluZ1wiPT09ZT90ejpcImVuZGluZ1wiPT09ZT90TDpudWxsfSx0Uj0oKGE9e30pLm9wZW49XCJkYXRhLW9wZW5cIixhLmNsb3NlZD1cImRhdGEtY2xvc2VkXCIsYVthLnN0YXJ0aW5nU3R5bGU9dFAuc3RhcnRpbmdTdHlsZV09XCJzdGFydGluZ1N0eWxlXCIsYVthLmVuZGluZ1N0eWxlPXRQLmVuZGluZ1N0eWxlXT1cImVuZGluZ1N0eWxlXCIsYS5hbmNob3JIaWRkZW49XCJkYXRhLWFuY2hvci1oaWRkZW5cIixhKSx0Tj0oKGk9e30pLnBvcHVwT3Blbj1cImRhdGEtcG9wdXAtb3BlblwiLGkucHJlc3NlZD1cImRhdGEtcHJlc3NlZFwiLGkpLHREPXtbdE4ucG9wdXBPcGVuXTpcIlwifSx0Qj17W3ROLnBvcHVwT3Blbl06XCJcIixbdE4ucHJlc3NlZF06XCJcIn0sdE09e1t0Ui5vcGVuXTpcIlwifSx0ST17W3RSLmNsb3NlZF06XCJcIn0sdEg9e1t0Ui5hbmNob3JIaWRkZW5dOlwiXCJ9LHRGPXtvcGVuOmU9PmU/dEQ6bnVsbH0sdFU9e29wZW46ZT0+ZT90QjpudWxsfSx0Vj17b3BlbjplPT5lP3RNOnRJLGFuY2hvckhpZGRlbjplPT5lP3RIOm51bGx9O2Z1bmN0aW9uIHRxKGU9e30pe2xldHtkaXNhYmxlZDpuPSExLGZvY3VzYWJsZVdoZW5EaXNhYmxlZDp0LHRhYkluZGV4OnI9MCxuYXRpdmU6bz0hMH09ZSxhPUMudXNlUmVmKG51bGwpLGk9dm9pZCAwIT09dE8oITApLGw9VCgoKT0+e2xldCBlPWEuY3VycmVudDtyZXR1cm4hIShlPy50YWdOYW1lPT09XCJBXCImJmU/LmhyZWYpfSkse3Byb3BzOnN9PWZ1bmN0aW9uKGUpe2xldHtmb2N1c2FibGVXaGVuRGlzYWJsZWQ6bixkaXNhYmxlZDp0LGNvbXBvc2l0ZTpyPSExLHRhYkluZGV4Om89MCxpc05hdGl2ZUJ1dHRvbjphfT1lLGk9ciYmITEhPT1uLGw9ciYmITE9PT1uO3JldHVybntwcm9wczpDLnVzZU1lbW8oKCk9PntsZXQgZT17b25LZXlEb3duKGUpe3QmJm4mJlwiVGFiXCIhPT1lLmtleSYmZS5wcmV2ZW50RGVmYXVsdCgpfX07cmV0dXJuIHJ8fChlLnRhYkluZGV4PW8sIWEmJnQmJihlLnRhYkluZGV4PW4/bzotMSkpLChhJiYobnx8aSl8fCFhJiZ0KSYmKGVbXCJhcmlhLWRpc2FibGVkXCJdPXQpLGEmJighbnx8bCkmJihlLmRpc2FibGVkPXQpLGV9LFtyLHQsbixpLGwsYSxvXSl9fSh7Zm9jdXNhYmxlV2hlbkRpc2FibGVkOnQsZGlzYWJsZWQ6bixjb21wb3NpdGU6aSx0YWJJbmRleDpyLGlzTmF0aXZlQnV0dG9uOm99KTtyZXR1cm4gRigoKT0+e2xldCBlPWEuY3VycmVudDtlIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQmJmkmJm4mJnZvaWQgMD09PXMuZGlzYWJsZWQmJmUuZGlzYWJsZWQmJihlLmRpc2FibGVkPSExKX0sW24scy5kaXNhYmxlZCxpXSkse2dldEJ1dHRvblByb3BzOkMudXNlQ2FsbGJhY2soKGU9e30pPT57bGV0e29uQ2xpY2s6dCxvbk1vdXNlRG93bjpyLG9uS2V5VXA6YSxvbktleURvd246aSxvblBvaW50ZXJEb3duOmMsLi4udX09ZTtyZXR1cm4gdGMoe3R5cGU6bz9cImJ1dHRvblwiOnZvaWQgMCxvbkNsaWNrKGUpe2lmKG4pcmV0dXJuIHZvaWQgZS5wcmV2ZW50RGVmYXVsdCgpO3Q/LihlKX0sb25Nb3VzZURvd24oZSl7bnx8cj8uKGUpfSxvbktleURvd24oZSl7bnx8KHRwKGUpLGk/LihlKSksIWUuYmFzZVVJSGFuZGxlclByZXZlbnRlZCYmKGUudGFyZ2V0IT09ZS5jdXJyZW50VGFyZ2V0fHxvfHxsKCl8fFwiRW50ZXJcIiE9PWUua2V5fHxufHwodD8uKGUpLGUucHJldmVudERlZmF1bHQoKSkpfSxvbktleVVwKGUpe258fCh0cChlKSxhPy4oZSkpLCFlLmJhc2VVSUhhbmRsZXJQcmV2ZW50ZWQmJihlLnRhcmdldCE9PWUuY3VycmVudFRhcmdldHx8b3x8bnx8XCIgXCIhPT1lLmtleXx8dD8uKGUpKX0sb25Qb2ludGVyRG93bihlKXtpZihuKXJldHVybiB2b2lkIGUucHJldmVudERlZmF1bHQoKTtjPy4oZSl9fSxvP3ZvaWQgMDp7cm9sZTpcImJ1dHRvblwifSxzLHUpfSxbbixzLG8sbF0pLGJ1dHRvblJlZjphfX1sZXQgdFc9Qy5mb3J3YXJkUmVmKGZ1bmN0aW9uKGUsbil7bGV0e3JlbmRlcjp0LGNsYXNzTmFtZTpyLGRpc2FibGVkOm89ITEsbmF0aXZlQnV0dG9uOmE9ITAsLi4uaX09ZSx7dHJpZ2dlclByb3BzOnMsZGlzYWJsZWQ6YyxzZXRUcmlnZ2VyRWxlbWVudDp1LG9wZW46ZCxhbGxvd01vdXNlVXBUcmlnZ2VyUmVmOmYscG9zaXRpb25lclJlZjpwLHBhcmVudDpoLGxhc3RPcGVuQ2hhbmdlUmVhc29uOmcscm9vdElkOm19PW4wKCksdj1vfHxjLGI9Qy51c2VSZWYobnVsbCkseT1laygpLHtnZXRCdXR0b25Qcm9wczp4LGJ1dHRvblJlZjp3fT10cSh7ZGlzYWJsZWQ6dixuYXRpdmU6YX0pLGo9dGIodyx1KSx7ZXZlbnRzOmt9PVcoKTtDLnVzZUVmZmVjdCgoKT0+e2R8fHZvaWQgMCE9PWgudHlwZXx8KGYuY3VycmVudD0hMSl9LFtmLGQsaC50eXBlXSk7bGV0IEE9VChlPT57aWYoIWIuY3VycmVudClyZXR1cm47eS5jbGVhcigpLGYuY3VycmVudD0hMTtsZXQgbj1lLnRhcmdldDtpZihlWShiLmN1cnJlbnQsbil8fGVZKHAuY3VycmVudCxuKXx8bj09PWIuY3VycmVudHx8bnVsbCE9biYmZnVuY3Rpb24gZShuKXtyZXR1cm4gZW4obikmJm4uaGFzQXR0cmlidXRlKFwiZGF0YS1yb290b3duZXJpZFwiKT9uLmdldEF0dHJpYnV0ZShcImRhdGEtcm9vdG93bmVyaWRcIik/P3ZvaWQgMDplaChuKT92b2lkIDA6ZShldihuKSl9KG4pPT09bSlyZXR1cm47bGV0IHQ9ZnVuY3Rpb24oZSl7bGV0IG49ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUsXCI6OmJlZm9yZVwiKSxyPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUsXCI6OmFmdGVyXCIpO2lmKFwibm9uZVwiPT09dC5jb250ZW50JiZcIm5vbmVcIj09PXIuY29udGVudClyZXR1cm4gbjtsZXQgbz1wYXJzZUZsb2F0KHQud2lkdGgpfHwwLGE9cGFyc2VGbG9hdCh0LmhlaWdodCl8fDAsaT1wYXJzZUZsb2F0KHIud2lkdGgpfHwwLGw9cGFyc2VGbG9hdChyLmhlaWdodCl8fDAscz1NYXRoLm1heChuLndpZHRoLG8saSksYz1NYXRoLm1heChuLmhlaWdodCxhLGwpLHU9cy1uLndpZHRoLGQ9Yy1uLmhlaWdodDtyZXR1cm57bGVmdDpuLmxlZnQtdS8yLHJpZ2h0Om4ucmlnaHQrdS8yLHRvcDpuLnRvcC1kLzIsYm90dG9tOm4uYm90dG9tK2QvMn19KGIuY3VycmVudCk7ZS5jbGllbnRYPj10LmxlZnQtMiYmZS5jbGllbnRYPD10LnJpZ2h0KzImJmUuY2xpZW50WT49dC50b3AtMiYmZS5jbGllbnRZPD10LmJvdHRvbSsyfHxrLmVtaXQoXCJjbG9zZVwiLHtkb21FdmVudDplLHJlYXNvbjpcImNhbmNlbC1vcGVuXCJ9KX0pO0MudXNlRWZmZWN0KCgpPT57ZCYmXCJ0cmlnZ2VyLWhvdmVyXCI9PT1nJiZlUShiLmN1cnJlbnQpLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsQSx7b25jZTohMH0pfSxbZCxBLGddKTtsZXQgTz1DLnVzZUNhbGxiYWNrKGU9PnRjKHtcImFyaWEtaGFzcG9wdXBcIjpcIm1lbnVcIixyZWY6aixvbk1vdXNlRG93bjplPT57ZHx8KHkuc3RhcnQoMjAwLCgpPT57Zi5jdXJyZW50PSEwfSksZVEoZS5jdXJyZW50VGFyZ2V0KS5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLEEse29uY2U6ITB9KSl9fSxlLHgpLFt4LGosZCxmLHksQV0pLFM9dGooXCJidXR0b25cIixlLHtzdGF0ZTpDLnVzZU1lbW8oKCk9Pih7ZGlzYWJsZWQ6dixvcGVuOmR9KSxbdixkXSksY3VzdG9tU3R5bGVIb29rTWFwcGluZzp0VSxyZWY6W2Isbix3XSxwcm9wczpbcyxpLE9dfSk7cmV0dXJuXCJtZW51YmFyXCI9PT1oLnR5cGU/KDAsbC5qc3gpKHRfLHtyZW5kZXI6U30pOlN9KSx0JD17Y2xpcDpcInJlY3QoMCAwIDAgMClcIixvdmVyZmxvdzpcImhpZGRlblwiLHdoaXRlU3BhY2U6XCJub3dyYXBcIixwb3NpdGlvbjpcImZpeGVkXCIsdG9wOjAsbGVmdDowLGJvcmRlcjowLHBhZGRpbmc6MCx3aWR0aDoxLGhlaWdodDoxLG1hcmdpbjotMX0sdFo9Qy5mb3J3YXJkUmVmKGZ1bmN0aW9uKGUsbil7bGV0W3Qscl09Qy51c2VTdGF0ZSgpO3JldHVybiBGKCgpPT57ZUwmJnIoXCJidXR0b25cIil9LFtdKSwoMCxsLmpzeCkoXCJzcGFuXCIsey4uLmUscmVmOm4sdGFiSW5kZXg6MCxyb2xlOnQsXCJhcmlhLWhpZGRlblwiOiF0fHx2b2lkIDAsc3R5bGU6dCQsXCJkYXRhLWJhc2UtdWktZm9jdXMtZ3VhcmRcIjpcIlwifSl9KTt2YXIgdFk9J2lucHV0Om5vdChbaW5lcnRdKSxzZWxlY3Q6bm90KFtpbmVydF0pLHRleHRhcmVhOm5vdChbaW5lcnRdKSxhW2hyZWZdOm5vdChbaW5lcnRdKSxidXR0b246bm90KFtpbmVydF0pLFt0YWJpbmRleF06bm90KHNsb3QpOm5vdChbaW5lcnRdKSxhdWRpb1tjb250cm9sc106bm90KFtpbmVydF0pLHZpZGVvW2NvbnRyb2xzXTpub3QoW2luZXJ0XSksW2NvbnRlbnRlZGl0YWJsZV06bm90KFtjb250ZW50ZWRpdGFibGU9XCJmYWxzZVwiXSk6bm90KFtpbmVydF0pLGRldGFpbHM+c3VtbWFyeTpmaXJzdC1vZi10eXBlOm5vdChbaW5lcnRdKSxkZXRhaWxzOm5vdChbaW5lcnRdKScsdFg9XCJ1bmRlZmluZWRcIj09dHlwZW9mIEVsZW1lbnQsdEs9dFg/ZnVuY3Rpb24oKXt9OkVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXN8fEVsZW1lbnQucHJvdG90eXBlLm1zTWF0Y2hlc1NlbGVjdG9yfHxFbGVtZW50LnByb3RvdHlwZS53ZWJraXRNYXRjaGVzU2VsZWN0b3IsdFE9IXRYJiZFbGVtZW50LnByb3RvdHlwZS5nZXRSb290Tm9kZT9mdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4gbnVsbD09ZXx8bnVsbD09KG49ZS5nZXRSb290Tm9kZSk/dm9pZCAwOm4uY2FsbChlKX06ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/dm9pZCAwOmUub3duZXJEb2N1bWVudH0sdEc9ZnVuY3Rpb24gZShuLHQpe3ZvaWQgMD09PXQmJih0PSEwKTt2YXIgcixvPW51bGw9PW58fG51bGw9PShyPW4uZ2V0QXR0cmlidXRlKT92b2lkIDA6ci5jYWxsKG4sXCJpbmVydFwiKTtyZXR1cm5cIlwiPT09b3x8XCJ0cnVlXCI9PT1vfHx0JiZuJiZlKG4ucGFyZW50Tm9kZSl9LHRKPWZ1bmN0aW9uKGUpe3ZhciBuLHQ9bnVsbD09ZXx8bnVsbD09KG49ZS5nZXRBdHRyaWJ1dGUpP3ZvaWQgMDpuLmNhbGwoZSxcImNvbnRlbnRlZGl0YWJsZVwiKTtyZXR1cm5cIlwiPT09dHx8XCJ0cnVlXCI9PT10fSx0MD1mdW5jdGlvbihlLG4sdCl7aWYodEcoZSkpcmV0dXJuW107dmFyIHI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGUucXVlcnlTZWxlY3RvckFsbCh0WSkpO3JldHVybiBuJiZ0Sy5jYWxsKGUsdFkpJiZyLnVuc2hpZnQoZSkscj1yLmZpbHRlcih0KX0sdDE9ZnVuY3Rpb24gZShuLHQscil7Zm9yKHZhciBvPVtdLGE9QXJyYXkuZnJvbShuKTthLmxlbmd0aDspe3ZhciBpPWEuc2hpZnQoKTtpZighdEcoaSwhMSkpaWYoXCJTTE9UXCI9PT1pLnRhZ05hbWUpe3ZhciBsPWkuYXNzaWduZWRFbGVtZW50cygpLHM9ZShsLmxlbmd0aD9sOmkuY2hpbGRyZW4sITAscik7ci5mbGF0dGVuP28ucHVzaC5hcHBseShvLHMpOm8ucHVzaCh7c2NvcGVQYXJlbnQ6aSxjYW5kaWRhdGVzOnN9KX1lbHNle3RLLmNhbGwoaSx0WSkmJnIuZmlsdGVyKGkpJiYodHx8IW4uaW5jbHVkZXMoaSkpJiZvLnB1c2goaSk7dmFyIGM9aS5zaGFkb3dSb290fHxcImZ1bmN0aW9uXCI9PXR5cGVvZiByLmdldFNoYWRvd1Jvb3QmJnIuZ2V0U2hhZG93Um9vdChpKSx1PSF0RyhjLCExKSYmKCFyLnNoYWRvd1Jvb3RGaWx0ZXJ8fHIuc2hhZG93Um9vdEZpbHRlcihpKSk7aWYoYyYmdSl7dmFyIGQ9ZSghMD09PWM/aS5jaGlsZHJlbjpjLmNoaWxkcmVuLCEwLHIpO3IuZmxhdHRlbj9vLnB1c2guYXBwbHkobyxkKTpvLnB1c2goe3Njb3BlUGFyZW50OmksY2FuZGlkYXRlczpkfSl9ZWxzZSBhLnVuc2hpZnQuYXBwbHkoYSxpLmNoaWxkcmVuKX19cmV0dXJuIG99LHQyPWZ1bmN0aW9uKGUpe3JldHVybiFpc05hTihwYXJzZUludChlLmdldEF0dHJpYnV0ZShcInRhYmluZGV4XCIpLDEwKSl9LHQ0PWZ1bmN0aW9uKGUpe2lmKCFlKXRocm93IEVycm9yKFwiTm8gbm9kZSBwcm92aWRlZFwiKTtyZXR1cm4gZS50YWJJbmRleDwwJiYoL14oQVVESU98VklERU98REVUQUlMUykkLy50ZXN0KGUudGFnTmFtZSl8fHRKKGUpKSYmIXQyKGUpPzA6ZS50YWJJbmRleH0sdDU9ZnVuY3Rpb24oZSxuKXt2YXIgdD10NChlKTtyZXR1cm4gdDwwJiZuJiYhdDIoZSk/MDp0fSx0Mz1mdW5jdGlvbihlLG4pe3JldHVybiBlLnRhYkluZGV4PT09bi50YWJJbmRleD9lLmRvY3VtZW50T3JkZXItbi5kb2N1bWVudE9yZGVyOmUudGFiSW5kZXgtbi50YWJJbmRleH0sdDY9ZnVuY3Rpb24oZSl7cmV0dXJuXCJJTlBVVFwiPT09ZS50YWdOYW1lfSx0OT1mdW5jdGlvbihlLG4pe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKWlmKGVbdF0uY2hlY2tlZCYmZVt0XS5mb3JtPT09bilyZXR1cm4gZVt0XX0sdDg9ZnVuY3Rpb24oZSl7aWYoIWUubmFtZSlyZXR1cm4hMDt2YXIgbix0PWUuZm9ybXx8dFEoZSkscj1mdW5jdGlvbihlKXtyZXR1cm4gdC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPVwicmFkaW9cIl1bbmFtZT1cIicrZSsnXCJdJyl9O2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJnZvaWQgMCE9PXdpbmRvdy5DU1MmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHdpbmRvdy5DU1MuZXNjYXBlKW49cih3aW5kb3cuQ1NTLmVzY2FwZShlLm5hbWUpKTtlbHNlIHRyeXtuPXIoZS5uYW1lKX1jYXRjaChlKXtyZXR1cm4gY29uc29sZS5lcnJvcihcIkxvb2tzIGxpa2UgeW91IGhhdmUgYSByYWRpbyBidXR0b24gd2l0aCBhIG5hbWUgYXR0cmlidXRlIGNvbnRhaW5pbmcgaW52YWxpZCBDU1Mgc2VsZWN0b3IgY2hhcmFjdGVycyBhbmQgbmVlZCB0aGUgQ1NTLmVzY2FwZSBwb2x5ZmlsbDogJXNcIixlLm1lc3NhZ2UpLCExfXZhciBvPXQ5KG4sZS5mb3JtKTtyZXR1cm4hb3x8bz09PWV9LHQ3PWZ1bmN0aW9uKGUpe3JldHVybiB0NihlKSYmXCJyYWRpb1wiPT09ZS50eXBlJiYhdDgoZSl9LHJlPWZ1bmN0aW9uKGUpe3ZhciBuLHQscixvLGEsaSxsLHM9ZSYmdFEoZSksYz1udWxsPT0obj1zKT92b2lkIDA6bi5ob3N0LHU9ITE7aWYocyYmcyE9PWUpZm9yKHU9ISEobnVsbCE9KHQ9YykmJm51bGwhPShyPXQub3duZXJEb2N1bWVudCkmJnIuY29udGFpbnMoYyl8fG51bGwhPWUmJm51bGwhPShvPWUub3duZXJEb2N1bWVudCkmJm8uY29udGFpbnMoZSkpOyF1JiZjOyl1PSEhKG51bGwhPShpPWM9bnVsbD09KGE9cz10UShjKSk/dm9pZCAwOmEuaG9zdCkmJm51bGwhPShsPWkub3duZXJEb2N1bWVudCkmJmwuY29udGFpbnMoYykpO3JldHVybiB1fSxybj1mdW5jdGlvbihlKXt2YXIgbj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHQ9bi53aWR0aCxyPW4uaGVpZ2h0O3JldHVybiAwPT09dCYmMD09PXJ9LHJ0PWZ1bmN0aW9uKGUsbil7dmFyIHQ9bi5kaXNwbGF5Q2hlY2sscj1uLmdldFNoYWRvd1Jvb3Q7aWYoXCJoaWRkZW5cIj09PWdldENvbXB1dGVkU3R5bGUoZSkudmlzaWJpbGl0eSlyZXR1cm4hMDt2YXIgbz10Sy5jYWxsKGUsXCJkZXRhaWxzPnN1bW1hcnk6Zmlyc3Qtb2YtdHlwZVwiKT9lLnBhcmVudEVsZW1lbnQ6ZTtpZih0Sy5jYWxsKG8sXCJkZXRhaWxzOm5vdChbb3Blbl0pICpcIikpcmV0dXJuITA7aWYodCYmXCJmdWxsXCIhPT10JiZcImxlZ2FjeS1mdWxsXCIhPT10KXtpZihcIm5vbi16ZXJvLWFyZWFcIj09PXQpcmV0dXJuIHJuKGUpfWVsc2V7aWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygcil7Zm9yKHZhciBhPWU7ZTspe3ZhciBpPWUucGFyZW50RWxlbWVudCxsPXRRKGUpO2lmKGkmJiFpLnNoYWRvd1Jvb3QmJiEwPT09cihpKSlyZXR1cm4gcm4oZSk7ZT1lLmFzc2lnbmVkU2xvdD9lLmFzc2lnbmVkU2xvdDppfHxsPT09ZS5vd25lckRvY3VtZW50P2k6bC5ob3N0fWU9YX1pZihyZShlKSlyZXR1cm4hZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aDtpZihcImxlZ2FjeS1mdWxsXCIhPT10KXJldHVybiEwfXJldHVybiExfSxycj1mdW5jdGlvbihlKXtpZigvXihJTlBVVHxCVVRUT058U0VMRUNUfFRFWFRBUkVBKSQvLnRlc3QoZS50YWdOYW1lKSlmb3IodmFyIG49ZS5wYXJlbnRFbGVtZW50O247KXtpZihcIkZJRUxEU0VUXCI9PT1uLnRhZ05hbWUmJm4uZGlzYWJsZWQpe2Zvcih2YXIgdD0wO3Q8bi5jaGlsZHJlbi5sZW5ndGg7dCsrKXt2YXIgcj1uLmNoaWxkcmVuLml0ZW0odCk7aWYoXCJMRUdFTkRcIj09PXIudGFnTmFtZSlyZXR1cm4hIXRLLmNhbGwobixcImZpZWxkc2V0W2Rpc2FibGVkXSAqXCIpfHwhci5jb250YWlucyhlKX1yZXR1cm4hMH1uPW4ucGFyZW50RWxlbWVudH1yZXR1cm4hMX0scm89ZnVuY3Rpb24oZSxuKXtyZXR1cm4hKG4uZGlzYWJsZWR8fHRHKG4pfHx0NihuKSYmXCJoaWRkZW5cIj09PW4udHlwZXx8cnQobixlKXx8XCJERVRBSUxTXCI9PT1uLnRhZ05hbWUmJkFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShuLmNoaWxkcmVuKS5zb21lKGZ1bmN0aW9uKGUpe3JldHVyblwiU1VNTUFSWVwiPT09ZS50YWdOYW1lfSl8fHJyKG4pKX0scmE9ZnVuY3Rpb24oZSxuKXtyZXR1cm4hKHQ3KG4pfHwwPnQ0KG4pKSYmISFybyhlLG4pfSxyaT1mdW5jdGlvbihlKXt2YXIgbj1wYXJzZUludChlLmdldEF0dHJpYnV0ZShcInRhYmluZGV4XCIpLDEwKTtyZXR1cm4hIWlzTmFOKG4pfHwhIShuPj0wKX0scmw9ZnVuY3Rpb24gZShuKXt2YXIgdD1bXSxyPVtdO3JldHVybiBuLmZvckVhY2goZnVuY3Rpb24obixvKXt2YXIgYT0hIW4uc2NvcGVQYXJlbnQsaT1hP24uc2NvcGVQYXJlbnQ6bixsPXQ1KGksYSkscz1hP2Uobi5jYW5kaWRhdGVzKTppOzA9PT1sP2E/dC5wdXNoLmFwcGx5KHQscyk6dC5wdXNoKGkpOnIucHVzaCh7ZG9jdW1lbnRPcmRlcjpvLHRhYkluZGV4OmwsaXRlbTpuLGlzU2NvcGU6YSxjb250ZW50OnN9KX0pLHIuc29ydCh0MykucmVkdWNlKGZ1bmN0aW9uKGUsbil7cmV0dXJuIG4uaXNTY29wZT9lLnB1c2guYXBwbHkoZSxuLmNvbnRlbnQpOmUucHVzaChuLmNvbnRlbnQpLGV9LFtdKS5jb25jYXQodCl9LHJzPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHJsKChuPW58fHt9KS5nZXRTaGFkb3dSb290P3QxKFtlXSxuLmluY2x1ZGVDb250YWluZXIse2ZpbHRlcjpyYS5iaW5kKG51bGwsbiksZmxhdHRlbjohMSxnZXRTaGFkb3dSb290Om4uZ2V0U2hhZG93Um9vdCxzaGFkb3dSb290RmlsdGVyOnJpfSk6dDAoZSxuLmluY2x1ZGVDb250YWluZXIscmEuYmluZChudWxsLG4pKSl9LHJjPWZ1bmN0aW9uKGUsbil7cmV0dXJuKG49bnx8e30pLmdldFNoYWRvd1Jvb3Q/dDEoW2VdLG4uaW5jbHVkZUNvbnRhaW5lcix7ZmlsdGVyOnJvLmJpbmQobnVsbCxuKSxmbGF0dGVuOiEwLGdldFNoYWRvd1Jvb3Q6bi5nZXRTaGFkb3dSb290fSk6dDAoZSxuLmluY2x1ZGVDb250YWluZXIscm8uYmluZChudWxsLG4pKX0scnU9ZnVuY3Rpb24oZSxuKXtpZihuPW58fHt9LCFlKXRocm93IEVycm9yKFwiTm8gbm9kZSBwcm92aWRlZFwiKTtyZXR1cm4hMSE9PXRLLmNhbGwoZSx0WSkmJnJhKG4sZSl9O2xldCByZD0oKT0+KHtnZXRTaGFkb3dSb290OiEwLGRpc3BsYXlDaGVjazpcImZ1bmN0aW9uXCI9PXR5cGVvZiBSZXNpemVPYnNlcnZlciYmUmVzaXplT2JzZXJ2ZXIudG9TdHJpbmcoKS5pbmNsdWRlcyhcIltuYXRpdmUgY29kZV1cIik/XCJmdWxsXCI6XCJub25lXCJ9KTtmdW5jdGlvbiByZihlLG4pe2xldCB0PXJzKGUscmQoKSkscj10Lmxlbmd0aDtpZigwPT09cilyZXR1cm47bGV0IG89ZVooZVEoZSkpLGE9dC5pbmRleE9mKG8pO3JldHVybiB0Wy0xPT09YT8xPT09bj8wOnItMTphK25dfWZ1bmN0aW9uIHJwKGUpe3JldHVybiByZihlUShlKS5ib2R5LDEpfHxlfWZ1bmN0aW9uIHJoKGUpe3JldHVybiByZihlUShlKS5ib2R5LC0xKXx8ZX1mdW5jdGlvbiByZyhlLG4pe2xldCB0PW58fGUuY3VycmVudFRhcmdldCxyPWUucmVsYXRlZFRhcmdldDtyZXR1cm4hcnx8IWVZKHQscil9ZnVuY3Rpb24gcm0oZSl7ZS5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtdGFiaW5kZXhdXCIpLmZvckVhY2goZT0+e2xldCBuPWUuZGF0YXNldC50YWJpbmRleDtkZWxldGUgZS5kYXRhc2V0LnRhYmluZGV4LG4/ZS5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLG4pOmUucmVtb3ZlQXR0cmlidXRlKFwidGFiaW5kZXhcIil9KX1sZXQgcnY9Qy5jcmVhdGVDb250ZXh0KG51bGwpLHJiPSgpPT5DLnVzZUNvbnRleHQocnYpLHJ5PWUxKFwicG9ydGFsXCIpO2Z1bmN0aW9uIHJ4KGU9e30pe2xldHtpZDpuLHJvb3Q6dH09ZSxyPUgoKSxvPXJiKCksW2EsaV09Qy51c2VTdGF0ZShudWxsKSxsPUMudXNlUmVmKG51bGwpO3JldHVybiBGKCgpPT4oKT0+e2E/LnJlbW92ZSgpLHF1ZXVlTWljcm90YXNrKCgpPT57bC5jdXJyZW50PW51bGx9KX0sW2FdKSxGKCgpPT57aWYoIXJ8fGwuY3VycmVudClyZXR1cm47bGV0IGU9bj9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChuKTpudWxsO2lmKCFlKXJldHVybjtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3QuaWQ9cix0LnNldEF0dHJpYnV0ZShyeSxcIlwiKSxlLmFwcGVuZENoaWxkKHQpLGwuY3VycmVudD10LGkodCl9LFtuLHJdKSxGKCgpPT57aWYobnVsbD09PXR8fCFyfHxsLmN1cnJlbnQpcmV0dXJuO2xldCBlPXR8fG8/LnBvcnRhbE5vZGU7ZSYmIWVlKGUpJiYoZT1lLmN1cnJlbnQpLGU9ZXx8ZG9jdW1lbnQuYm9keTtsZXQgYT1udWxsO24mJigoYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKS5pZD1uLGUuYXBwZW5kQ2hpbGQoYSkpO2xldCBzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7cy5pZD1yLHMuc2V0QXR0cmlidXRlKHJ5LFwiXCIpLChlPWF8fGUpLmFwcGVuZENoaWxkKHMpLGwuY3VycmVudD1zLGkocyl9LFtuLHQscixvXSksYX1mdW5jdGlvbiBydyhlKXtsZXR7Y2hpbGRyZW46bixpZDp0LHJvb3Q6cixwcmVzZXJ2ZVRhYk9yZGVyOm89ITB9PWUsYT1yeCh7aWQ6dCxyb290OnJ9KSxbaSxzXT1DLnVzZVN0YXRlKG51bGwpLGM9Qy51c2VSZWYobnVsbCksdT1DLnVzZVJlZihudWxsKSxkPUMudXNlUmVmKG51bGwpLGY9Qy51c2VSZWYobnVsbCkscD1pPy5tb2RhbCxoPWk/Lm9wZW4sZz0hIWkmJiFpLm1vZGFsJiZpLm9wZW4mJm8mJiEhKHJ8fGEpO3JldHVybiBDLnVzZUVmZmVjdCgoKT0+e2lmKGEmJm8mJiFwKXJldHVybiBhLmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c2luXCIsZSwhMCksYS5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNvdXRcIixlLCEwKSwoKT0+e2EucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImZvY3VzaW5cIixlLCEwKSxhLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c291dFwiLGUsITApfTtmdW5jdGlvbiBlKGUpe2EmJnJnKGUpJiYoXCJmb2N1c2luXCI9PT1lLnR5cGU/cm06ZnVuY3Rpb24oZSl7cnMoZSxyZCgpKS5mb3JFYWNoKGU9PntlLmRhdGFzZXQudGFiaW5kZXg9ZS5nZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiKXx8XCJcIixlLnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsXCItMVwiKX0pfSkoYSl9fSxbYSxvLHBdKSxDLnVzZUVmZmVjdCgoKT0+e2EmJihofHxybShhKSl9LFtoLGFdKSwoMCxsLmpzeHMpKHJ2LlByb3ZpZGVyLHt2YWx1ZTpDLnVzZU1lbW8oKCk9Pih7cHJlc2VydmVUYWJPcmRlcjpvLGJlZm9yZU91dHNpZGVSZWY6YyxhZnRlck91dHNpZGVSZWY6dSxiZWZvcmVJbnNpZGVSZWY6ZCxhZnRlckluc2lkZVJlZjpmLHBvcnRhbE5vZGU6YSxzZXRGb2N1c01hbmFnZXJTdGF0ZTpzfSksW28sYV0pLGNoaWxkcmVuOltnJiZhJiYoMCxsLmpzeCkodFose1wiZGF0YS10eXBlXCI6XCJvdXRzaWRlXCIscmVmOmMsb25Gb2N1czplPT57aWYocmcoZSxhKSlkLmN1cnJlbnQ/LmZvY3VzKCk7ZWxzZXtsZXQgZT1yaChpP2kuZG9tUmVmZXJlbmNlOm51bGwpO2U/LmZvY3VzKCl9fX0pLGcmJmEmJigwLGwuanN4KShcInNwYW5cIix7XCJhcmlhLW93bnNcIjphLmlkLHN0eWxlOnQkfSksYSYmRS5jcmVhdGVQb3J0YWwobixhKSxnJiZhJiYoMCxsLmpzeCkodFose1wiZGF0YS10eXBlXCI6XCJvdXRzaWRlXCIscmVmOnUsb25Gb2N1czplPT57aWYocmcoZSxhKSlmLmN1cnJlbnQ/LmZvY3VzKCk7ZWxzZXtsZXQgbj1ycChpP2kuZG9tUmVmZXJlbmNlOm51bGwpO24/LmZvY3VzKCksaT8uY2xvc2VPbkZvY3VzT3V0JiZpPy5vbk9wZW5DaGFuZ2UoITEsZS5uYXRpdmVFdmVudCxcImZvY3VzLW91dFwiKX19fSldfSl9bGV0IHJqPUMuY3JlYXRlQ29udGV4dCh2b2lkIDApO2Z1bmN0aW9uIHJrKGUpe2xldHtjaGlsZHJlbjpuLGtlZXBNb3VudGVkOnQ9ITEsY29udGFpbmVyOnJ9PWUse21vdW50ZWQ6b309bjAoKTtyZXR1cm4gb3x8dD8oMCxsLmpzeCkocmouUHJvdmlkZXIse3ZhbHVlOnQsY2hpbGRyZW46KDAsbC5qc3gpKHJ3LHtyb290OnIsY2hpbGRyZW46bn0pfSk6bnVsbH1sZXQgckE9Qy5jcmVhdGVDb250ZXh0KHZvaWQgMCk7ZnVuY3Rpb24gck8oZSxuLHQpe2xldCByLHtyZWZlcmVuY2U6byxmbG9hdGluZzphfT1lLGk9bkUobiksbD1uTyhuRShuKSkscz1uQyhsKSxjPW5rKG4pLHU9XCJ5XCI9PT1pLGQ9by54K28ud2lkdGgvMi1hLndpZHRoLzIsZj1vLnkrby5oZWlnaHQvMi1hLmhlaWdodC8yLHA9b1tzXS8yLWFbc10vMjtzd2l0Y2goYyl7Y2FzZVwidG9wXCI6cj17eDpkLHk6by55LWEuaGVpZ2h0fTticmVhaztjYXNlXCJib3R0b21cIjpyPXt4OmQseTpvLnkrby5oZWlnaHR9O2JyZWFrO2Nhc2VcInJpZ2h0XCI6cj17eDpvLngrby53aWR0aCx5OmZ9O2JyZWFrO2Nhc2VcImxlZnRcIjpyPXt4Om8ueC1hLndpZHRoLHk6Zn07YnJlYWs7ZGVmYXVsdDpyPXt4Om8ueCx5Om8ueX19c3dpdGNoKG5BKG4pKXtjYXNlXCJzdGFydFwiOnJbbF0tPXAqKHQmJnU/LTE6MSk7YnJlYWs7Y2FzZVwiZW5kXCI6cltsXSs9cCoodCYmdT8tMToxKX1yZXR1cm4gcn1sZXQgckM9YXN5bmMoZSxuLHQpPT57bGV0e3BsYWNlbWVudDpyPVwiYm90dG9tXCIsc3RyYXRlZ3k6bz1cImFic29sdXRlXCIsbWlkZGxld2FyZTphPVtdLHBsYXRmb3JtOml9PXQsbD1hLmZpbHRlcihCb29sZWFuKSxzPWF3YWl0IChudWxsPT1pLmlzUlRMP3ZvaWQgMDppLmlzUlRMKG4pKSxjPWF3YWl0IGkuZ2V0RWxlbWVudFJlY3RzKHtyZWZlcmVuY2U6ZSxmbG9hdGluZzpuLHN0cmF0ZWd5Om99KSx7eDp1LHk6ZH09ck8oYyxyLHMpLGY9cixwPXt9LGg9MDtmb3IobGV0IHQ9MDt0PGwubGVuZ3RoO3QrKyl7bGV0e25hbWU6YSxmbjpnfT1sW3RdLHt4Om0seTp2LGRhdGE6YixyZXNldDp5fT1hd2FpdCBnKHt4OnUseTpkLGluaXRpYWxQbGFjZW1lbnQ6cixwbGFjZW1lbnQ6ZixzdHJhdGVneTpvLG1pZGRsZXdhcmVEYXRhOnAscmVjdHM6YyxwbGF0Zm9ybTppLGVsZW1lbnRzOntyZWZlcmVuY2U6ZSxmbG9hdGluZzpufX0pO3U9bnVsbCE9bT9tOnUsZD1udWxsIT12P3Y6ZCxwPXsuLi5wLFthXTp7Li4ucFthXSwuLi5ifX0seSYmaDw9NTAmJihoKyssXCJvYmplY3RcIj09dHlwZW9mIHkmJih5LnBsYWNlbWVudCYmKGY9eS5wbGFjZW1lbnQpLHkucmVjdHMmJihjPSEwPT09eS5yZWN0cz9hd2FpdCBpLmdldEVsZW1lbnRSZWN0cyh7cmVmZXJlbmNlOmUsZmxvYXRpbmc6bixzdHJhdGVneTpvfSk6eS5yZWN0cykse3g6dSx5OmR9PXJPKGMsZixzKSksdD0tMSl9cmV0dXJue3g6dSx5OmQscGxhY2VtZW50OmYsc3RyYXRlZ3k6byxtaWRkbGV3YXJlRGF0YTpwfX07YXN5bmMgZnVuY3Rpb24gclMoZSxuKXt2YXIgdDt2b2lkIDA9PT1uJiYobj17fSk7bGV0e3g6cix5Om8scGxhdGZvcm06YSxyZWN0czppLGVsZW1lbnRzOmwsc3RyYXRlZ3k6c309ZSx7Ym91bmRhcnk6Yz1cImNsaXBwaW5nQW5jZXN0b3JzXCIscm9vdEJvdW5kYXJ5OnU9XCJ2aWV3cG9ydFwiLGVsZW1lbnRDb250ZXh0OmQ9XCJmbG9hdGluZ1wiLGFsdEJvdW5kYXJ5OmY9ITEscGFkZGluZzpwPTB9PW5qKG4sZSksaD1uTihwKSxnPWxbZj9cImZsb2F0aW5nXCI9PT1kP1wicmVmZXJlbmNlXCI6XCJmbG9hdGluZ1wiOmRdLG09bkQoYXdhaXQgYS5nZXRDbGlwcGluZ1JlY3Qoe2VsZW1lbnQ6bnVsbD09KHQ9YXdhaXQgKG51bGw9PWEuaXNFbGVtZW50P3ZvaWQgMDphLmlzRWxlbWVudChnKSkpfHx0P2c6Zy5jb250ZXh0RWxlbWVudHx8YXdhaXQgKG51bGw9PWEuZ2V0RG9jdW1lbnRFbGVtZW50P3ZvaWQgMDphLmdldERvY3VtZW50RWxlbWVudChsLmZsb2F0aW5nKSksYm91bmRhcnk6Yyxyb290Qm91bmRhcnk6dSxzdHJhdGVneTpzfSkpLHY9XCJmbG9hdGluZ1wiPT09ZD97eDpyLHk6byx3aWR0aDppLmZsb2F0aW5nLndpZHRoLGhlaWdodDppLmZsb2F0aW5nLmhlaWdodH06aS5yZWZlcmVuY2UsYj1hd2FpdCAobnVsbD09YS5nZXRPZmZzZXRQYXJlbnQ/dm9pZCAwOmEuZ2V0T2Zmc2V0UGFyZW50KGwuZmxvYXRpbmcpKSx5PWF3YWl0IChudWxsPT1hLmlzRWxlbWVudD92b2lkIDA6YS5pc0VsZW1lbnQoYikpJiZhd2FpdCAobnVsbD09YS5nZXRTY2FsZT92b2lkIDA6YS5nZXRTY2FsZShiKSl8fHt4OjEseToxfSx4PW5EKGEuY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3Q/YXdhaXQgYS5jb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdCh7ZWxlbWVudHM6bCxyZWN0OnYsb2Zmc2V0UGFyZW50OmIsc3RyYXRlZ3k6c30pOnYpO3JldHVybnt0b3A6KG0udG9wLXgudG9wK2gudG9wKS95LnksYm90dG9tOih4LmJvdHRvbS1tLmJvdHRvbStoLmJvdHRvbSkveS55LGxlZnQ6KG0ubGVmdC14LmxlZnQraC5sZWZ0KS95LngscmlnaHQ6KHgucmlnaHQtbS5yaWdodCtoLnJpZ2h0KS95Lnh9fWZ1bmN0aW9uIHJFKGUsbil7cmV0dXJue3RvcDplLnRvcC1uLmhlaWdodCxyaWdodDplLnJpZ2h0LW4ud2lkdGgsYm90dG9tOmUuYm90dG9tLW4uaGVpZ2h0LGxlZnQ6ZS5sZWZ0LW4ud2lkdGh9fWZ1bmN0aW9uIHJfKGUpe3JldHVybiBuaC5zb21lKG49PmVbbl0+PTApfWxldCByUD1uZXcgU2V0KFtcImxlZnRcIixcInRvcFwiXSk7YXN5bmMgZnVuY3Rpb24gcnooZSxuKXtsZXR7cGxhY2VtZW50OnQscGxhdGZvcm06cixlbGVtZW50czpvfT1lLGE9YXdhaXQgKG51bGw9PXIuaXNSVEw/dm9pZCAwOnIuaXNSVEwoby5mbG9hdGluZykpLGk9bmsodCksbD1uQSh0KSxzPVwieVwiPT09bkUodCksYz1yUC5oYXMoaSk/LTE6MSx1PWEmJnM/LTE6MSxkPW5qKG4sZSkse21haW5BeGlzOmYsY3Jvc3NBeGlzOnAsYWxpZ25tZW50QXhpczpofT1cIm51bWJlclwiPT10eXBlb2YgZD97bWFpbkF4aXM6ZCxjcm9zc0F4aXM6MCxhbGlnbm1lbnRBeGlzOm51bGx9OnttYWluQXhpczpkLm1haW5BeGlzfHwwLGNyb3NzQXhpczpkLmNyb3NzQXhpc3x8MCxhbGlnbm1lbnRBeGlzOmQuYWxpZ25tZW50QXhpc307cmV0dXJuIGwmJlwibnVtYmVyXCI9PXR5cGVvZiBoJiYocD1cImVuZFwiPT09bD8tMSpoOmgpLHM/e3g6cCp1LHk6ZipjfTp7eDpmKmMseTpwKnV9fWZ1bmN0aW9uIHJMKGUpe2xldCBuPWVnKGUpLHQ9cGFyc2VGbG9hdChuLndpZHRoKXx8MCxyPXBhcnNlRmxvYXQobi5oZWlnaHQpfHwwLG89ZW4oZSksYT1vP2Uub2Zmc2V0V2lkdGg6dCxpPW8/ZS5vZmZzZXRIZWlnaHQ6cixsPW52KHQpIT09YXx8bnYocikhPT1pO3JldHVybiBsJiYodD1hLHI9aSkse3dpZHRoOnQsaGVpZ2h0OnIsJDpsfX1mdW5jdGlvbiByVChlKXtyZXR1cm4gZWUoZSk/ZTplLmNvbnRleHRFbGVtZW50fWZ1bmN0aW9uIHJSKGUpe2xldCBuPXJUKGUpO2lmKCFlbihuKSlyZXR1cm4gbnkoMSk7bGV0IHQ9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx7d2lkdGg6cixoZWlnaHQ6bywkOmF9PXJMKG4pLGk9KGE/bnYodC53aWR0aCk6dC53aWR0aCkvcixsPShhP252KHQuaGVpZ2h0KTp0LmhlaWdodCkvbztyZXR1cm4gaSYmTnVtYmVyLmlzRmluaXRlKGkpfHwoaT0xKSxsJiZOdW1iZXIuaXNGaW5pdGUobCl8fChsPTEpLHt4OmkseTpsfX1sZXQgck49bnkoMCk7ZnVuY3Rpb24gckQoZSl7bGV0IG49UShlKTtyZXR1cm4gZWYoKSYmbi52aXN1YWxWaWV3cG9ydD97eDpuLnZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQseTpuLnZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcH06ck59ZnVuY3Rpb24gckIoZSxuLHQscil7dmFyIG87dm9pZCAwPT09biYmKG49ITEpLHZvaWQgMD09PXQmJih0PSExKTtsZXQgYT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9clQoZSksbD1ueSgxKTtuJiYocj9lZShyKSYmKGw9clIocikpOmw9clIoZSkpO2xldCBzPSh2b2lkIDA9PT0obz10KSYmKG89ITEpLHImJighb3x8cj09PVEoaSkpJiZvKT9yRChpKTpueSgwKSxjPShhLmxlZnQrcy54KS9sLngsdT0oYS50b3Arcy55KS9sLnksZD1hLndpZHRoL2wueCxmPWEuaGVpZ2h0L2wueTtpZihpKXtsZXQgZT1RKGkpLG49ciYmZWUocik/UShyKTpyLHQ9ZSxvPWV5KHQpO2Zvcig7byYmciYmbiE9PXQ7KXtsZXQgZT1yUihvKSxuPW8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscj1lZyhvKSxhPW4ubGVmdCsoby5jbGllbnRMZWZ0K3BhcnNlRmxvYXQoci5wYWRkaW5nTGVmdCkpKmUueCxpPW4udG9wKyhvLmNsaWVudFRvcCtwYXJzZUZsb2F0KHIucGFkZGluZ1RvcCkpKmUueTtjKj1lLngsdSo9ZS55LGQqPWUueCxmKj1lLnksYys9YSx1Kz1pLG89ZXkodD1RKG8pKX19cmV0dXJuIG5EKHt3aWR0aDpkLGhlaWdodDpmLHg6Yyx5OnV9KX1mdW5jdGlvbiByTShlLG4pe2xldCB0PWVtKGUpLnNjcm9sbExlZnQ7cmV0dXJuIG4/bi5sZWZ0K3Q6ckIoRyhlKSkubGVmdCt0fWZ1bmN0aW9uIHJJKGUsbix0KXt2b2lkIDA9PT10JiYodD0hMSk7bGV0IHI9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57eDpyLmxlZnQrbi5zY3JvbGxMZWZ0LSh0PzA6ck0oZSxyKSkseTpyLnRvcCtuLnNjcm9sbFRvcH19bGV0IHJIPW5ldyBTZXQoW1wiYWJzb2x1dGVcIixcImZpeGVkXCJdKTtmdW5jdGlvbiByRihlLG4sdCl7bGV0IHI7aWYoXCJ2aWV3cG9ydFwiPT09bilyPWZ1bmN0aW9uKGUsbil7bGV0IHQ9UShlKSxyPUcoZSksbz10LnZpc3VhbFZpZXdwb3J0LGE9ci5jbGllbnRXaWR0aCxpPXIuY2xpZW50SGVpZ2h0LGw9MCxzPTA7aWYobyl7YT1vLndpZHRoLGk9by5oZWlnaHQ7bGV0IGU9ZWYoKTsoIWV8fGUmJlwiZml4ZWRcIj09PW4pJiYobD1vLm9mZnNldExlZnQscz1vLm9mZnNldFRvcCl9cmV0dXJue3dpZHRoOmEsaGVpZ2h0OmkseDpsLHk6c319KGUsdCk7ZWxzZSBpZihcImRvY3VtZW50XCI9PT1uKXI9ZnVuY3Rpb24oZSl7bGV0IG49RyhlKSx0PWVtKGUpLHI9ZS5vd25lckRvY3VtZW50LmJvZHksbz1ubShuLnNjcm9sbFdpZHRoLG4uY2xpZW50V2lkdGgsci5zY3JvbGxXaWR0aCxyLmNsaWVudFdpZHRoKSxhPW5tKG4uc2Nyb2xsSGVpZ2h0LG4uY2xpZW50SGVpZ2h0LHIuc2Nyb2xsSGVpZ2h0LHIuY2xpZW50SGVpZ2h0KSxpPS10LnNjcm9sbExlZnQrck0oZSksbD0tdC5zY3JvbGxUb3A7cmV0dXJuXCJydGxcIj09PWVnKHIpLmRpcmVjdGlvbiYmKGkrPW5tKG4uY2xpZW50V2lkdGgsci5jbGllbnRXaWR0aCktbykse3dpZHRoOm8saGVpZ2h0OmEseDppLHk6bH19KEcoZSkpO2Vsc2UgaWYoZWUobikpcj1mdW5jdGlvbihlLG4pe2xldCB0PXJCKGUsITAsXCJmaXhlZFwiPT09bikscj10LnRvcCtlLmNsaWVudFRvcCxvPXQubGVmdCtlLmNsaWVudExlZnQsYT1lbihlKT9yUihlKTpueSgxKSxpPWUuY2xpZW50V2lkdGgqYS54LGw9ZS5jbGllbnRIZWlnaHQqYS55O3JldHVybnt3aWR0aDppLGhlaWdodDpsLHg6byphLngseTpyKmEueX19KG4sdCk7ZWxzZXtsZXQgdD1yRChlKTtyPXt4Om4ueC10LngseTpuLnktdC55LHdpZHRoOm4ud2lkdGgsaGVpZ2h0Om4uaGVpZ2h0fX1yZXR1cm4gbkQocil9ZnVuY3Rpb24gclUoZSl7cmV0dXJuXCJzdGF0aWNcIj09PWVnKGUpLnBvc2l0aW9ufWZ1bmN0aW9uIHJWKGUsbil7aWYoIWVuKGUpfHxcImZpeGVkXCI9PT1lZyhlKS5wb3NpdGlvbilyZXR1cm4gbnVsbDtpZihuKXJldHVybiBuKGUpO2xldCB0PWUub2Zmc2V0UGFyZW50O3JldHVybiBHKGUpPT09dCYmKHQ9dC5vd25lckRvY3VtZW50LmJvZHkpLHR9ZnVuY3Rpb24gcnEoZSxuKXt2YXIgdDtsZXQgcj1RKGUpO2lmKGVsKGUpKXJldHVybiByO2lmKCFlbihlKSl7bGV0IG49ZXYoZSk7Zm9yKDtuJiYhZWgobik7KXtpZihlZShuKSYmIXJVKG4pKXJldHVybiBuO249ZXYobil9cmV0dXJuIHJ9bGV0IG89clYoZSxuKTtmb3IoO28mJih0PW8sZWEuaGFzKEsodCkpKSYmclUobyk7KW89clYobyxuKTtyZXR1cm4gbyYmZWgobykmJnJVKG8pJiYhZWQobyk/cjpvfHxmdW5jdGlvbihlKXtsZXQgbj1ldihlKTtmb3IoO2VuKG4pJiYhZWgobik7KXtpZihlZChuKSlyZXR1cm4gbjtpZihlbChuKSlicmVhaztuPWV2KG4pfXJldHVybiBudWxsfShlKXx8cn1sZXQgclc9YXN5bmMgZnVuY3Rpb24oZSl7bGV0IG49dGhpcy5nZXRPZmZzZXRQYXJlbnR8fHJxLHQ9dGhpcy5nZXREaW1lbnNpb25zLHI9YXdhaXQgdChlLmZsb2F0aW5nKTtyZXR1cm57cmVmZXJlbmNlOmZ1bmN0aW9uKGUsbix0KXtsZXQgcj1lbihuKSxvPUcobiksYT1cImZpeGVkXCI9PT10LGk9ckIoZSwhMCxhLG4pLGw9e3Njcm9sbExlZnQ6MCxzY3JvbGxUb3A6MH0scz1ueSgwKTtpZihyfHwhciYmIWEpaWYoKFwiYm9keVwiIT09SyhuKXx8ZW8obykpJiYobD1lbShuKSkscil7bGV0IGU9ckIobiwhMCxhLG4pO3MueD1lLngrbi5jbGllbnRMZWZ0LHMueT1lLnkrbi5jbGllbnRUb3B9ZWxzZSBvJiYocy54PXJNKG8pKTthJiYhciYmbyYmKHMueD1yTShvKSk7bGV0IGM9IW98fHJ8fGE/bnkoMCk6ckkobyxsKTtyZXR1cm57eDppLmxlZnQrbC5zY3JvbGxMZWZ0LXMueC1jLngseTppLnRvcCtsLnNjcm9sbFRvcC1zLnktYy55LHdpZHRoOmkud2lkdGgsaGVpZ2h0OmkuaGVpZ2h0fX0oZS5yZWZlcmVuY2UsYXdhaXQgbihlLmZsb2F0aW5nKSxlLnN0cmF0ZWd5KSxmbG9hdGluZzp7eDowLHk6MCx3aWR0aDpyLndpZHRoLGhlaWdodDpyLmhlaWdodH19fSxyJD17Y29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3Q6ZnVuY3Rpb24oZSl7bGV0e2VsZW1lbnRzOm4scmVjdDp0LG9mZnNldFBhcmVudDpyLHN0cmF0ZWd5Om99PWUsYT1cImZpeGVkXCI9PT1vLGk9RyhyKSxsPSEhbiYmZWwobi5mbG9hdGluZyk7aWYocj09PWl8fGwmJmEpcmV0dXJuIHQ7bGV0IHM9e3Njcm9sbExlZnQ6MCxzY3JvbGxUb3A6MH0sYz1ueSgxKSx1PW55KDApLGQ9ZW4ocik7aWYoKGR8fCFkJiYhYSkmJigoXCJib2R5XCIhPT1LKHIpfHxlbyhpKSkmJihzPWVtKHIpKSxlbihyKSkpe2xldCBlPXJCKHIpO2M9clIociksdS54PWUueCtyLmNsaWVudExlZnQsdS55PWUueStyLmNsaWVudFRvcH1sZXQgZj0haXx8ZHx8YT9ueSgwKTpySShpLHMsITApO3JldHVybnt3aWR0aDp0LndpZHRoKmMueCxoZWlnaHQ6dC5oZWlnaHQqYy55LHg6dC54KmMueC1zLnNjcm9sbExlZnQqYy54K3UueCtmLngseTp0LnkqYy55LXMuc2Nyb2xsVG9wKmMueSt1LnkrZi55fX0sZ2V0RG9jdW1lbnRFbGVtZW50OkcsZ2V0Q2xpcHBpbmdSZWN0OmZ1bmN0aW9uKGUpe2xldHtlbGVtZW50Om4sYm91bmRhcnk6dCxyb290Qm91bmRhcnk6cixzdHJhdGVneTpvfT1lLGE9Wy4uLlwiY2xpcHBpbmdBbmNlc3RvcnNcIj09PXQ/ZWwobik/W106ZnVuY3Rpb24oZSxuKXtsZXQgdD1uLmdldChlKTtpZih0KXJldHVybiB0O2xldCByPWViKGUsW10sITEpLmZpbHRlcihlPT5lZShlKSYmXCJib2R5XCIhPT1LKGUpKSxvPW51bGwsYT1cImZpeGVkXCI9PT1lZyhlKS5wb3NpdGlvbixpPWE/ZXYoZSk6ZTtmb3IoO2VlKGkpJiYhZWgoaSk7KXtsZXQgbj1lZyhpKSx0PWVkKGkpO3R8fFwiZml4ZWRcIiE9PW4ucG9zaXRpb258fChvPW51bGwpLChhPyF0JiYhbzohdCYmXCJzdGF0aWNcIj09PW4ucG9zaXRpb24mJiEhbyYmckguaGFzKG8ucG9zaXRpb24pfHxlbyhpKSYmIXQmJmZ1bmN0aW9uIGUobix0KXtsZXQgcj1ldihuKTtyZXR1cm4hKHI9PT10fHwhZWUocil8fGVoKHIpKSYmKFwiZml4ZWRcIj09PWVnKHIpLnBvc2l0aW9ufHxlKHIsdCkpfShlLGkpKT9yPXIuZmlsdGVyKGU9PmUhPT1pKTpvPW4saT1ldihpKX1yZXR1cm4gbi5zZXQoZSxyKSxyfShuLHRoaXMuX2MpOltdLmNvbmNhdCh0KSxyXSxpPWFbMF0sbD1hLnJlZHVjZSgoZSx0KT0+e2xldCByPXJGKG4sdCxvKTtyZXR1cm4gZS50b3A9bm0oci50b3AsZS50b3ApLGUucmlnaHQ9bmcoci5yaWdodCxlLnJpZ2h0KSxlLmJvdHRvbT1uZyhyLmJvdHRvbSxlLmJvdHRvbSksZS5sZWZ0PW5tKHIubGVmdCxlLmxlZnQpLGV9LHJGKG4saSxvKSk7cmV0dXJue3dpZHRoOmwucmlnaHQtbC5sZWZ0LGhlaWdodDpsLmJvdHRvbS1sLnRvcCx4OmwubGVmdCx5OmwudG9wfX0sZ2V0T2Zmc2V0UGFyZW50OnJxLGdldEVsZW1lbnRSZWN0czpyVyxnZXRDbGllbnRSZWN0czpmdW5jdGlvbihlKXtyZXR1cm4gQXJyYXkuZnJvbShlLmdldENsaWVudFJlY3RzKCkpfSxnZXREaW1lbnNpb25zOmZ1bmN0aW9uKGUpe2xldHt3aWR0aDpuLGhlaWdodDp0fT1yTChlKTtyZXR1cm57d2lkdGg6bixoZWlnaHQ6dH19LGdldFNjYWxlOnJSLGlzRWxlbWVudDplZSxpc1JUTDpmdW5jdGlvbihlKXtyZXR1cm5cInJ0bFwiPT09ZWcoZSkuZGlyZWN0aW9ufX07ZnVuY3Rpb24gclooZSxuKXtyZXR1cm4gZS54PT09bi54JiZlLnk9PT1uLnkmJmUud2lkdGg9PT1uLndpZHRoJiZlLmhlaWdodD09PW4uaGVpZ2h0fWZ1bmN0aW9uIHJZKGUsbix0LHIpe2xldCBvO3ZvaWQgMD09PXImJihyPXt9KTtsZXR7YW5jZXN0b3JTY3JvbGw6YT0hMCxhbmNlc3RvclJlc2l6ZTppPSEwLGVsZW1lbnRSZXNpemU6bD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBSZXNpemVPYnNlcnZlcixsYXlvdXRTaGlmdDpzPVwiZnVuY3Rpb25cIj09dHlwZW9mIEludGVyc2VjdGlvbk9ic2VydmVyLGFuaW1hdGlvbkZyYW1lOmM9ITF9PXIsdT1yVChlKSxkPWF8fGk/Wy4uLnU/ZWIodSk6W10sLi4uZWIobildOltdO2QuZm9yRWFjaChlPT57YSYmZS5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsdCx7cGFzc2l2ZTohMH0pLGkmJmUuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHQpfSk7bGV0IGY9dSYmcz9mdW5jdGlvbihlLG4pe2xldCB0LHI9bnVsbCxvPUcoZSk7ZnVuY3Rpb24gYSgpe3ZhciBlO2NsZWFyVGltZW91dCh0KSxudWxsPT0oZT1yKXx8ZS5kaXNjb25uZWN0KCkscj1udWxsfXJldHVybiFmdW5jdGlvbiBpKGwscyl7dm9pZCAwPT09bCYmKGw9ITEpLHZvaWQgMD09PXMmJihzPTEpLGEoKTtsZXQgYz1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHtsZWZ0OnUsdG9wOmQsd2lkdGg6ZixoZWlnaHQ6cH09YztpZihsfHxuKCksIWZ8fCFwKXJldHVybjtsZXQgaD1uYihkKSxnPW5iKG8uY2xpZW50V2lkdGgtKHUrZikpLG09e3Jvb3RNYXJnaW46LWgrXCJweCBcIistZytcInB4IFwiKy1uYihvLmNsaWVudEhlaWdodC0oZCtwKSkrXCJweCBcIistbmIodSkrXCJweFwiLHRocmVzaG9sZDpubSgwLG5nKDEscykpfHwxfSx2PSEwO2Z1bmN0aW9uIGIobil7bGV0IHI9blswXS5pbnRlcnNlY3Rpb25SYXRpbztpZihyIT09cyl7aWYoIXYpcmV0dXJuIGkoKTtyP2koITEscik6dD1zZXRUaW1lb3V0KCgpPT57aSghMSwxZS03KX0sMWUzKX0xIT09cnx8clooYyxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKXx8aSgpLHY9ITF9dHJ5e3I9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGIsey4uLm0scm9vdDpvLm93bmVyRG9jdW1lbnR9KX1jYXRjaChlKXtyPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihiLG0pfXIub2JzZXJ2ZShlKX0oITApLGF9KHUsdCk6bnVsbCxwPS0xLGg9bnVsbDtsJiYoaD1uZXcgUmVzaXplT2JzZXJ2ZXIoZT0+e2xldFtyXT1lO3ImJnIudGFyZ2V0PT09dSYmaCYmKGgudW5vYnNlcnZlKG4pLGNhbmNlbEFuaW1hdGlvbkZyYW1lKHApLHA9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dmFyIGU7bnVsbD09KGU9aCl8fGUub2JzZXJ2ZShuKX0pKSx0KCl9KSx1JiYhYyYmaC5vYnNlcnZlKHUpLGgub2JzZXJ2ZShuKSk7bGV0IGc9Yz9yQihlKTpudWxsO3JldHVybiBjJiZmdW5jdGlvbiBuKCl7bGV0IHI9ckIoZSk7ZyYmIXJaKGcscikmJnQoKSxnPXIsbz1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobil9KCksdCgpLCgpPT57dmFyIGU7ZC5mb3JFYWNoKGU9PnthJiZlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIix0KSxpJiZlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0KX0pLG51bGw9PWZ8fGYoKSxudWxsPT0oZT1oKXx8ZS5kaXNjb25uZWN0KCksaD1udWxsLGMmJmNhbmNlbEFuaW1hdGlvbkZyYW1lKG8pfX1sZXQgclg9ZT0+KHtuYW1lOlwiYXJyb3dcIixvcHRpb25zOmUsYXN5bmMgZm4obil7bGV0e3g6dCx5OnIscGxhY2VtZW50Om8scmVjdHM6YSxwbGF0Zm9ybTppLGVsZW1lbnRzOmwsbWlkZGxld2FyZURhdGE6c309bix7ZWxlbWVudDpjLHBhZGRpbmc6dT0wfT1uaihlLG4pfHx7fTtpZihudWxsPT1jKXJldHVybnt9O2xldCBkPW5OKHUpLGY9e3g6dCx5OnJ9LHA9bk8obkUobykpLGg9bkMocCksZz1hd2FpdCBpLmdldERpbWVuc2lvbnMoYyksbT1cInlcIj09PXAsdj1tP1wiY2xpZW50SGVpZ2h0XCI6XCJjbGllbnRXaWR0aFwiLGI9YS5yZWZlcmVuY2VbaF0rYS5yZWZlcmVuY2VbcF0tZltwXS1hLmZsb2F0aW5nW2hdLHk9ZltwXS1hLnJlZmVyZW5jZVtwXSx4PWF3YWl0IChudWxsPT1pLmdldE9mZnNldFBhcmVudD92b2lkIDA6aS5nZXRPZmZzZXRQYXJlbnQoYykpLHc9eD94W3ZdOjA7dyYmYXdhaXQgKG51bGw9PWkuaXNFbGVtZW50P3ZvaWQgMDppLmlzRWxlbWVudCh4KSl8fCh3PWwuZmxvYXRpbmdbdl18fGEuZmxvYXRpbmdbaF0pO2xldCBqPXcvMi1nW2hdLzItMSxrPW5nKGRbbT9cInRvcFwiOlwibGVmdFwiXSxqKSxBPW5nKGRbbT9cImJvdHRvbVwiOlwicmlnaHRcIl0saiksTz13LWdbaF0tQSxDPXcvMi1nW2hdLzIrKGIvMi15LzIpLFM9bm0oayxuZyhDLE8pKSxFPSFzLmFycm93JiZudWxsIT1uQShvKSYmQyE9PVMmJmEucmVmZXJlbmNlW2hdLzItKEM8az9rOkEpLWdbaF0vMjwwLF89RT9DPGs/Qy1rOkMtTzowO3JldHVybntbcF06ZltwXStfLGRhdGE6e1twXTpTLGNlbnRlck9mZnNldDpDLVMtXywuLi5FJiZ7YWxpZ25tZW50T2Zmc2V0Ol99fSxyZXNldDpFfX19KTt2YXIgcks9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50P0MudXNlTGF5b3V0RWZmZWN0OmZ1bmN0aW9uKCl7fTtmdW5jdGlvbiByUShlLG4pe2xldCB0LHIsbztpZihlPT09bilyZXR1cm4hMDtpZih0eXBlb2YgZSE9dHlwZW9mIG4pcmV0dXJuITE7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZSYmZS50b1N0cmluZygpPT09bi50b1N0cmluZygpKXJldHVybiEwO2lmKGUmJm4mJlwib2JqZWN0XCI9PXR5cGVvZiBlKXtpZihBcnJheS5pc0FycmF5KGUpKXtpZigodD1lLmxlbmd0aCkhPT1uLmxlbmd0aClyZXR1cm4hMTtmb3Iocj10OzAhPXItLTspaWYoIXJRKGVbcl0sbltyXSkpcmV0dXJuITE7cmV0dXJuITB9aWYoKHQ9KG89T2JqZWN0LmtleXMoZSkpLmxlbmd0aCkhPT1PYmplY3Qua2V5cyhuKS5sZW5ndGgpcmV0dXJuITE7Zm9yKHI9dDswIT1yLS07KWlmKCEoe30pLmhhc093blByb3BlcnR5LmNhbGwobixvW3JdKSlyZXR1cm4hMTtmb3Iocj10OzAhPXItLTspe2xldCB0PW9bcl07aWYoKFwiX293bmVyXCIhPT10fHwhZS4kJHR5cGVvZikmJiFyUShlW3RdLG5bdF0pKXJldHVybiExfXJldHVybiEwfXJldHVybiBlIT1lJiZuIT1ufWZ1bmN0aW9uIHJHKGUpe3JldHVyblwidW5kZWZpbmVkXCI9PXR5cGVvZiB3aW5kb3c/MTooZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3cpLmRldmljZVBpeGVsUmF0aW98fDF9ZnVuY3Rpb24gckooZSxuKXtsZXQgdD1yRyhlKTtyZXR1cm4gTWF0aC5yb3VuZChuKnQpL3R9ZnVuY3Rpb24gcjAoZSl7bGV0IG49Qy51c2VSZWYoZSk7cmV0dXJuIHJLKCgpPT57bi5jdXJyZW50PWV9KSxufWZ1bmN0aW9uIHIxKGUsbix0KXtsZXQgcj1cImlubGluZS1zdGFydFwiPT09ZXx8XCJpbmxpbmUtZW5kXCI9PT1lO3JldHVybih7dG9wOlwidG9wXCIscmlnaHQ6cj90P1wiaW5saW5lLXN0YXJ0XCI6XCJpbmxpbmUtZW5kXCI6XCJyaWdodFwiLGJvdHRvbTpcImJvdHRvbVwiLGxlZnQ6cj90P1wiaW5saW5lLWVuZFwiOlwiaW5saW5lLXN0YXJ0XCI6XCJsZWZ0XCJ9KVtuXX1mdW5jdGlvbiByMihlLG4sdCl7bGV0e3JlY3RzOnIscGxhY2VtZW50Om99PWU7cmV0dXJue3NpZGU6cjEobixuayhvKSx0KSxhbGlnbjpuQShvKXx8XCJjZW50ZXJcIixhbmNob3I6e3dpZHRoOnIucmVmZXJlbmNlLndpZHRoLGhlaWdodDpyLnJlZmVyZW5jZS5oZWlnaHR9LHBvc2l0aW9uZXI6e3dpZHRoOnIuZmxvYXRpbmcud2lkdGgsaGVpZ2h0OnIuZmxvYXRpbmcuaGVpZ2h0fX19ZnVuY3Rpb24gcjQoZSl7dmFyIG4sdCxyLG8sYSxpLGwscyxjLHUsZCxmLHAsaCxnLG0sdjtsZXR7YW5jaG9yOmIscG9zaXRpb25NZXRob2Q6eT1cImFic29sdXRlXCIsc2lkZTp4PVwiYm90dG9tXCIsc2lkZU9mZnNldDp3PTAsYWxpZ246aj1cImNlbnRlclwiLGFsaWduT2Zmc2V0Oms9MCxjb2xsaXNpb25Cb3VuZGFyeTpBLGNvbGxpc2lvblBhZGRpbmc6Tz01LHN0aWNreTpTPSExLGFycm93UGFkZGluZzpfPTUsdHJhY2tBbmNob3I6UD0hMCxrZWVwTW91bnRlZDp6PSExLGZsb2F0aW5nUm9vdENvbnRleHQ6TCxtb3VudGVkOlIsY29sbGlzaW9uQXZvaWRhbmNlOk4sc2hpZnRDcm9zc0F4aXM6RD0hMSxub2RlSWQ6QixhZGFwdGl2ZU9yaWdpbjpNfT1lLEk9Ti5zaWRlfHxcImZsaXBcIixIPU4uYWxpZ258fFwiZmxpcFwiLFU9Ti5mYWxsYmFja0F4aXNTaWRlfHxcImVuZFwiLFY9XCJmdW5jdGlvblwiPT10eXBlb2YgYj9iOnZvaWQgMCxxPVQoViksJD1WP3E6YixaPWVBKGIpLFg9XCJydGxcIj09PW42KCksSz17dG9wOlwidG9wXCIscmlnaHQ6XCJyaWdodFwiLGJvdHRvbTpcImJvdHRvbVwiLGxlZnQ6XCJsZWZ0XCIsXCJpbmxpbmUtZW5kXCI6WD9cImxlZnRcIjpcInJpZ2h0XCIsXCJpbmxpbmUtc3RhcnRcIjpYP1wicmlnaHRcIjpcImxlZnRcIn1beF0sUT1cImNlbnRlclwiPT09aj9LOmAke0t9LSR7an1gLEc9e2JvdW5kYXJ5OlwiY2xpcHBpbmctYW5jZXN0b3JzXCI9PT1BP1wiY2xpcHBpbmdBbmNlc3RvcnNcIjpBLHBhZGRpbmc6T30sSj1DLnVzZVJlZihudWxsKSxlbj1lQSh3KSxldD1lQShrKSxlcj1cImZ1bmN0aW9uXCIhPXR5cGVvZiB3P3c6MCxlbz1bKG49ZT0+e2xldCBuPXIyKGUseCxYKSx0PVwiZnVuY3Rpb25cIj09dHlwZW9mIGVuLmN1cnJlbnQ/ZW4uY3VycmVudChuKTplbi5jdXJyZW50LHI9XCJmdW5jdGlvblwiPT10eXBlb2YgZXQuY3VycmVudD9ldC5jdXJyZW50KG4pOmV0LmN1cnJlbnQ7cmV0dXJue21haW5BeGlzOnQsY3Jvc3NBeGlzOnIsYWxpZ25tZW50QXhpczpyfX0sdD1bZXIsXCJmdW5jdGlvblwiIT10eXBlb2Ygaz9rOjAsWCx4XSx7Li4uKHZvaWQgMD09PShyPW4pJiYocj0wKSx7bmFtZTpcIm9mZnNldFwiLG9wdGlvbnM6cixhc3luYyBmbihlKXt2YXIgbix0O2xldHt4Om8seTphLHBsYWNlbWVudDppLG1pZGRsZXdhcmVEYXRhOmx9PWUscz1hd2FpdCByeihlLHIpO3JldHVybiBpPT09KG51bGw9PShuPWwub2Zmc2V0KT92b2lkIDA6bi5wbGFjZW1lbnQpJiZudWxsIT0odD1sLmFycm93KSYmdC5hbGlnbm1lbnRPZmZzZXQ/e306e3g6bytzLngseTphK3MueSxkYXRhOnsuLi5zLHBsYWNlbWVudDppfX19fSksb3B0aW9uczpbbix0XX0pXSxlYT1cIm5vbmVcIj09PUgmJlwic2hpZnRcIiE9PUksZWk9IWVhJiYoU3x8RHx8XCJzaGlmdFwiPT09SSksZWw9XCJub25lXCI9PT1JP251bGw6ey4uLntuYW1lOlwiZmxpcFwiLG9wdGlvbnM6aT1vPXsuLi5HLG1haW5BeGlzOiFEJiZcImZsaXBcIj09PUksY3Jvc3NBeGlzOlwiZmxpcFwiPT09SCYmXCJhbGlnbm1lbnRcIixmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uOlV9LGFzeW5jIGZuKGUpe3ZhciBuLHQscixvLGE7bGV0e3BsYWNlbWVudDpsLG1pZGRsZXdhcmVEYXRhOnMscmVjdHM6Yyxpbml0aWFsUGxhY2VtZW50OnUscGxhdGZvcm06ZCxlbGVtZW50czpmfT1lLHttYWluQXhpczpwPSEwLGNyb3NzQXhpczpoPSEwLGZhbGxiYWNrUGxhY2VtZW50czpnLGZhbGxiYWNrU3RyYXRlZ3k6bT1cImJlc3RGaXRcIixmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uOnY9XCJub25lXCIsZmxpcEFsaWdubWVudDpiPSEwLC4uLnl9PW5qKGksZSk7aWYobnVsbCE9KG49cy5hcnJvdykmJm4uYWxpZ25tZW50T2Zmc2V0KXJldHVybnt9O2xldCB4PW5rKGwpLHc9bkUodSksaj1uayh1KT09PXUsaz1hd2FpdCAobnVsbD09ZC5pc1JUTD92b2lkIDA6ZC5pc1JUTChmLmZsb2F0aW5nKSksQT1nfHwoanx8IWI/W25SKHUpXTpmdW5jdGlvbihlKXtsZXQgbj1uUihlKTtyZXR1cm5bbl8oZSksbixuXyhuKV19KHUpKSxPPVwibm9uZVwiIT09djshZyYmTyYmQS5wdXNoKC4uLmZ1bmN0aW9uKGUsbix0LHIpe2xldCBvPW5BKGUpLGE9ZnVuY3Rpb24oZSxuLHQpe3N3aXRjaChlKXtjYXNlXCJ0b3BcIjpjYXNlXCJib3R0b21cIjppZih0KXJldHVybiBuP256Om5QO3JldHVybiBuP25QOm56O2Nhc2VcImxlZnRcIjpjYXNlXCJyaWdodFwiOnJldHVybiBuP25MOm5UO2RlZmF1bHQ6cmV0dXJuW119fShuayhlKSxcInN0YXJ0XCI9PT10LHIpO3JldHVybiBvJiYoYT1hLm1hcChlPT5lK1wiLVwiK28pLG4mJihhPWEuY29uY2F0KGEubWFwKG5fKSkpKSxhfSh1LGIsdixrKSk7bGV0IEM9W3UsLi4uQV0sUz1hd2FpdCByUyhlLHkpLEU9W10sXz0obnVsbD09KHQ9cy5mbGlwKT92b2lkIDA6dC5vdmVyZmxvd3MpfHxbXTtpZihwJiZFLnB1c2goU1t4XSksaCl7bGV0IGU9ZnVuY3Rpb24oZSxuLHQpe3ZvaWQgMD09PXQmJih0PSExKTtsZXQgcj1uQShlKSxvPW5PKG5FKGUpKSxhPW5DKG8pLGk9XCJ4XCI9PT1vP3I9PT0odD9cImVuZFwiOlwic3RhcnRcIik/XCJyaWdodFwiOlwibGVmdFwiOlwic3RhcnRcIj09PXI/XCJib3R0b21cIjpcInRvcFwiO3JldHVybiBuLnJlZmVyZW5jZVthXT5uLmZsb2F0aW5nW2FdJiYoaT1uUihpKSksW2ksblIoaSldfShsLGMsayk7RS5wdXNoKFNbZVswXV0sU1tlWzFdXSl9aWYoXz1bLi4uXyx7cGxhY2VtZW50Omwsb3ZlcmZsb3dzOkV9XSwhRS5ldmVyeShlPT5lPD0wKSl7bGV0IGU9KChudWxsPT0ocj1zLmZsaXApP3ZvaWQgMDpyLmluZGV4KXx8MCkrMSxuPUNbZV07aWYobiYmKFwiYWxpZ25tZW50XCIhPT1ofHx3PT09bkUobil8fF8uZXZlcnkoZT0+ZS5vdmVyZmxvd3NbMF0+MCYmbkUoZS5wbGFjZW1lbnQpPT09dykpKXJldHVybntkYXRhOntpbmRleDplLG92ZXJmbG93czpffSxyZXNldDp7cGxhY2VtZW50Om59fTtsZXQgdD1udWxsPT0obz1fLmZpbHRlcihlPT5lLm92ZXJmbG93c1swXTw9MCkuc29ydCgoZSxuKT0+ZS5vdmVyZmxvd3NbMV0tbi5vdmVyZmxvd3NbMV0pWzBdKT92b2lkIDA6by5wbGFjZW1lbnQ7aWYoIXQpc3dpdGNoKG0pe2Nhc2VcImJlc3RGaXRcIjp7bGV0IGU9bnVsbD09KGE9Xy5maWx0ZXIoZT0+e2lmKE8pe2xldCBuPW5FKGUucGxhY2VtZW50KTtyZXR1cm4gbj09PXd8fFwieVwiPT09bn1yZXR1cm4hMH0pLm1hcChlPT5bZS5wbGFjZW1lbnQsZS5vdmVyZmxvd3MuZmlsdGVyKGU9PmU+MCkucmVkdWNlKChlLG4pPT5lK24sMCldKS5zb3J0KChlLG4pPT5lWzFdLW5bMV0pWzBdKT92b2lkIDA6YVswXTtlJiYodD1lKTticmVha31jYXNlXCJpbml0aWFsUGxhY2VtZW50XCI6dD11fWlmKGwhPT10KXJldHVybntyZXNldDp7cGxhY2VtZW50OnR9fX1yZXR1cm57fX19LG9wdGlvbnM6W28sYV19LGVzPWVhP251bGw6KGw9ZT0+e3ZhciBuLHQscjtsZXQgbz1lUShlLmVsZW1lbnRzLmZsb2F0aW5nKS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuey4uLkcscm9vdEJvdW5kYXJ5OkQ/e3g6MCx5OjAsd2lkdGg6by5jbGllbnRXaWR0aCxoZWlnaHQ6by5jbGllbnRIZWlnaHR9OnZvaWQgMCxtYWluQXhpczpcIm5vbmVcIiE9PUgsY3Jvc3NBeGlzOmVpLGxpbWl0ZXI6U3x8RD92b2lkIDA6ey4uLih2b2lkIDA9PT0ocj1uPSgpPT57aWYoIUouY3VycmVudClyZXR1cm57fTtsZXR7aGVpZ2h0OmV9PUouY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57b2Zmc2V0OmUvMisoXCJudW1iZXJcIj09dHlwZW9mIE8/TzowKX19KSYmKHI9e30pLHtvcHRpb25zOnIsZm4oZSl7bGV0e3g6bix5OnQscGxhY2VtZW50Om8scmVjdHM6YSxtaWRkbGV3YXJlRGF0YTppfT1lLHtvZmZzZXQ6bD0wLG1haW5BeGlzOnM9ITAsY3Jvc3NBeGlzOmM9ITB9PW5qKHIsZSksdT17eDpuLHk6dH0sZD1uRShvKSxmPW5PKGQpLHA9dVtmXSxoPXVbZF0sZz1uaihsLGUpLG09XCJudW1iZXJcIj09dHlwZW9mIGc/e21haW5BeGlzOmcsY3Jvc3NBeGlzOjB9OnttYWluQXhpczowLGNyb3NzQXhpczowLC4uLmd9O2lmKHMpe2xldCBlPVwieVwiPT09Zj9cImhlaWdodFwiOlwid2lkdGhcIixuPWEucmVmZXJlbmNlW2ZdLWEuZmxvYXRpbmdbZV0rbS5tYWluQXhpcyx0PWEucmVmZXJlbmNlW2ZdK2EucmVmZXJlbmNlW2VdLW0ubWFpbkF4aXM7cDxuP3A9bjpwPnQmJihwPXQpfWlmKGMpe3ZhciB2LGI7bGV0IGU9XCJ5XCI9PT1mP1wid2lkdGhcIjpcImhlaWdodFwiLG49clAuaGFzKG5rKG8pKSx0PWEucmVmZXJlbmNlW2RdLWEuZmxvYXRpbmdbZV0rKG4mJihudWxsPT0odj1pLm9mZnNldCk/dm9pZCAwOnZbZF0pfHwwKSsobj8wOm0uY3Jvc3NBeGlzKSxyPWEucmVmZXJlbmNlW2RdK2EucmVmZXJlbmNlW2VdKyhuPzA6KG51bGw9PShiPWkub2Zmc2V0KT92b2lkIDA6YltkXSl8fDApLShuP20uY3Jvc3NBeGlzOjApO2g8dD9oPXQ6aD5yJiYoaD1yKX1yZXR1cm57W2ZdOnAsW2RdOmh9fX0pLG9wdGlvbnM6W24sdF19fX0scz1bRyxTLEQsTyxIXSx7Li4uKHZvaWQgMD09PShjPWwpJiYoYz17fSkse25hbWU6XCJzaGlmdFwiLG9wdGlvbnM6Yyxhc3luYyBmbihlKXtsZXR7eDpuLHk6dCxwbGFjZW1lbnQ6cn09ZSx7bWFpbkF4aXM6bz0hMCxjcm9zc0F4aXM6YT0hMSxsaW1pdGVyOmk9e2ZuOmU9PntsZXR7eDpuLHk6dH09ZTtyZXR1cm57eDpuLHk6dH19fSwuLi5sfT1uaihjLGUpLHM9e3g6bix5OnR9LHU9YXdhaXQgclMoZSxsKSxkPW5FKG5rKHIpKSxmPW5PKGQpLHA9c1tmXSxoPXNbZF07aWYobyl7bGV0IGU9XCJ5XCI9PT1mP1widG9wXCI6XCJsZWZ0XCIsbj1cInlcIj09PWY/XCJib3R0b21cIjpcInJpZ2h0XCIsdD1wK3VbZV0scj1wLXVbbl07cD1ubSh0LG5nKHAscikpfWlmKGEpe2xldCBlPVwieVwiPT09ZD9cInRvcFwiOlwibGVmdFwiLG49XCJ5XCI9PT1kP1wiYm90dG9tXCI6XCJyaWdodFwiLHQ9aCt1W2VdLHI9aC11W25dO2g9bm0odCxuZyhoLHIpKX1sZXQgZz1pLmZuKHsuLi5lLFtmXTpwLFtkXTpofSk7cmV0dXJuey4uLmcsZGF0YTp7eDpnLngtbix5OmcueS10LGVuYWJsZWQ6e1tmXTpvLFtkXTphfX19fX0pLG9wdGlvbnM6W2wsc119KTtcInNoaWZ0XCI9PT1JfHxcInNoaWZ0XCI9PT1IfHxcImNlbnRlclwiPT09aj9lby5wdXNoKGVzLGVsKTplby5wdXNoKGVsLGVzKSxlby5wdXNoKHsuLi57bmFtZTpcInNpemVcIixvcHRpb25zOmY9dT17Li4uRyxhcHBseSh7ZWxlbWVudHM6e2Zsb2F0aW5nOmV9LHJlY3RzOntyZWZlcmVuY2U6bn0sYXZhaWxhYmxlV2lkdGg6dCxhdmFpbGFibGVIZWlnaHQ6cn0pe09iamVjdC5lbnRyaWVzKHtcIi0tYXZhaWxhYmxlLXdpZHRoXCI6YCR7dH1weGAsXCItLWF2YWlsYWJsZS1oZWlnaHRcIjpgJHtyfXB4YCxcIi0tYW5jaG9yLXdpZHRoXCI6YCR7bi53aWR0aH1weGAsXCItLWFuY2hvci1oZWlnaHRcIjpgJHtuLmhlaWdodH1weGB9KS5mb3JFYWNoKChbbix0XSk9PntlLnN0eWxlLnNldFByb3BlcnR5KG4sdCl9KX19LGFzeW5jIGZuKGUpe3ZhciBuLHQ7bGV0IHIsbyx7cGxhY2VtZW50OmEscmVjdHM6aSxwbGF0Zm9ybTpsLGVsZW1lbnRzOnN9PWUse2FwcGx5OmM9KCk9Pnt9LC4uLnV9PW5qKGYsZSksZD1hd2FpdCByUyhlLHUpLHA9bmsoYSksaD1uQShhKSxnPVwieVwiPT09bkUoYSkse3dpZHRoOm0saGVpZ2h0OnZ9PWkuZmxvYXRpbmc7XCJ0b3BcIj09PXB8fFwiYm90dG9tXCI9PT1wPyhyPXAsbz1oPT09KGF3YWl0IChudWxsPT1sLmlzUlRMP3ZvaWQgMDpsLmlzUlRMKHMuZmxvYXRpbmcpKT9cInN0YXJ0XCI6XCJlbmRcIik/XCJsZWZ0XCI6XCJyaWdodFwiKToobz1wLHI9XCJlbmRcIj09PWg/XCJ0b3BcIjpcImJvdHRvbVwiKTtsZXQgYj12LWQudG9wLWQuYm90dG9tLHk9bS1kLmxlZnQtZC5yaWdodCx4PW5nKHYtZFtyXSxiKSx3PW5nKG0tZFtvXSx5KSxqPSFlLm1pZGRsZXdhcmVEYXRhLnNoaWZ0LGs9eCxBPXc7aWYobnVsbCE9KG49ZS5taWRkbGV3YXJlRGF0YS5zaGlmdCkmJm4uZW5hYmxlZC54JiYoQT15KSxudWxsIT0odD1lLm1pZGRsZXdhcmVEYXRhLnNoaWZ0KSYmdC5lbmFibGVkLnkmJihrPWIpLGomJiFoKXtsZXQgZT1ubShkLmxlZnQsMCksbj1ubShkLnJpZ2h0LDApLHQ9bm0oZC50b3AsMCkscj1ubShkLmJvdHRvbSwwKTtnP0E9bS0yKigwIT09ZXx8MCE9PW4/ZStuOm5tKGQubGVmdCxkLnJpZ2h0KSk6az12LTIqKDAhPT10fHwwIT09cj90K3I6bm0oZC50b3AsZC5ib3R0b20pKX1hd2FpdCBjKHsuLi5lLGF2YWlsYWJsZVdpZHRoOkEsYXZhaWxhYmxlSGVpZ2h0Omt9KTtsZXQgTz1hd2FpdCBsLmdldERpbWVuc2lvbnMocy5mbG9hdGluZyk7cmV0dXJuIG0hPT1PLndpZHRofHx2IT09Ty5oZWlnaHQ/e3Jlc2V0OntyZWN0czohMH19Ont9fX0sb3B0aW9uczpbdSxkXX0sKHA9KCk9Pih7ZWxlbWVudDpKLmN1cnJlbnR8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikscGFkZGluZzpffSksaD1bX10se25hbWU6XCJhcnJvd1wiLG9wdGlvbnM6cCxmbihlKXtsZXR7ZWxlbWVudDpuLHBhZGRpbmc6dH09cChlKTtyZXR1cm4gbiYmKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sXCJjdXJyZW50XCIpP251bGwhPW4uY3VycmVudD9yWCh7ZWxlbWVudDpuLmN1cnJlbnQscGFkZGluZzp0fSkuZm4oZSk6e306bj9yWCh7ZWxlbWVudDpuLHBhZGRpbmc6dH0pLmZuKGUpOnt9fSxvcHRpb25zOltwLGhdfSksey4uLih2b2lkIDA9PT0odj1nKSYmKHY9e30pLHtuYW1lOlwiaGlkZVwiLG9wdGlvbnM6dixhc3luYyBmbihlKXtsZXR7cmVjdHM6bn09ZSx7c3RyYXRlZ3k6dD1cInJlZmVyZW5jZUhpZGRlblwiLC4uLnJ9PW5qKHYsZSk7c3dpdGNoKHQpe2Nhc2VcInJlZmVyZW5jZUhpZGRlblwiOntsZXQgdD1yRShhd2FpdCByUyhlLHsuLi5yLGVsZW1lbnRDb250ZXh0OlwicmVmZXJlbmNlXCJ9KSxuLnJlZmVyZW5jZSk7cmV0dXJue2RhdGE6e3JlZmVyZW5jZUhpZGRlbk9mZnNldHM6dCxyZWZlcmVuY2VIaWRkZW46cl8odCl9fX1jYXNlXCJlc2NhcGVkXCI6e2xldCB0PXJFKGF3YWl0IHJTKGUsey4uLnIsYWx0Qm91bmRhcnk6ITB9KSxuLmZsb2F0aW5nKTtyZXR1cm57ZGF0YTp7ZXNjYXBlZE9mZnNldHM6dCxlc2NhcGVkOnJfKHQpfX19ZGVmYXVsdDpyZXR1cm57fX19fSksb3B0aW9uczpbZyxtXX0se25hbWU6XCJ0cmFuc2Zvcm1PcmlnaW5cIixmbihlKXtsZXR7ZWxlbWVudHM6bixtaWRkbGV3YXJlRGF0YTp0LHBsYWNlbWVudDpyLHJlY3RzOm8seTphfT1lLGk9bmsociksbD1uRShpKSxzPUouY3VycmVudCxjPXQuYXJyb3c/Lnh8fDAsdT10LmFycm93Py55fHwwLGQ9cz8uY2xpZW50V2lkdGh8fDAsZj1zPy5jbGllbnRIZWlnaHR8fDAscD1jK2QvMixoPXUrZi8yLGc9TWF0aC5hYnModC5zaGlmdD8ueXx8MCksbT1vLnJlZmVyZW5jZS5oZWlnaHQvMix2PWc+KFwiZnVuY3Rpb25cIj09dHlwZW9mIHc/dyhyMihlLHgsWCkpOncpLGI9e3RvcDpgJHtwfXB4IGNhbGMoMTAwJSArICR7d31weClgLGJvdHRvbTpgJHtwfXB4ICR7LXd9cHhgLGxlZnQ6YGNhbGMoMTAwJSArICR7d31weCkgJHtofXB4YCxyaWdodDpgJHstd31weCAke2h9cHhgfVtpXSx5PWAke3B9cHggJHtvLnJlZmVyZW5jZS55K20tYX1weGA7cmV0dXJuIG4uZmxvYXRpbmcuc3R5bGUuc2V0UHJvcGVydHkoXCItLXRyYW5zZm9ybS1vcmlnaW5cIixlaSYmXCJ5XCI9PT1sJiZ2P3k6Yikse319fSxNKTtsZXQgZWM9TDshUiYmTCYmKGVjPXsuLi5MLGVsZW1lbnRzOntyZWZlcmVuY2U6bnVsbCxmbG9hdGluZzpudWxsLGRvbVJlZmVyZW5jZTpudWxsfX0pO2xldCBldT1DLnVzZU1lbW8oKCk9Pih7ZWxlbWVudFJlc2l6ZTpQJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgUmVzaXplT2JzZXJ2ZXIsbGF5b3V0U2hpZnQ6UCYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEludGVyc2VjdGlvbk9ic2VydmVyfSksW1BdKSx7cmVmczplZCxlbGVtZW50czplZix4OmVwLHk6ZWgsbWlkZGxld2FyZURhdGE6ZWcsdXBkYXRlOmVtLHBsYWNlbWVudDpldixjb250ZXh0OmViLGlzUG9zaXRpb25lZDpleSxmbG9hdGluZ1N0eWxlczpleH09ZnVuY3Rpb24oZT17fSl7bGV0e25vZGVJZDpufT1lLHQ9WSh7Li4uZSxlbGVtZW50czp7cmVmZXJlbmNlOm51bGwsZmxvYXRpbmc6bnVsbCwuLi5lLmVsZW1lbnRzfX0pLHI9ZS5yb290Q29udGV4dHx8dCxvPXIuZWxlbWVudHMsW2EsaV09Qy51c2VTdGF0ZShudWxsKSxbbCxzXT1DLnVzZVN0YXRlKG51bGwpLGM9bz8uZG9tUmVmZXJlbmNlfHxhLHU9Qy51c2VSZWYobnVsbCksZD1XKCk7RigoKT0+e2MmJih1LmN1cnJlbnQ9Yyl9LFtjXSk7bGV0IGY9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9e30pO2xldHtwbGFjZW1lbnQ6bj1cImJvdHRvbVwiLHN0cmF0ZWd5OnQ9XCJhYnNvbHV0ZVwiLG1pZGRsZXdhcmU6cj1bXSxwbGF0Zm9ybTpvLGVsZW1lbnRzOntyZWZlcmVuY2U6YSxmbG9hdGluZzppfT17fSx0cmFuc2Zvcm06bD0hMCx3aGlsZUVsZW1lbnRzTW91bnRlZDpzLG9wZW46Y309ZSxbdSxkXT1DLnVzZVN0YXRlKHt4OjAseTowLHN0cmF0ZWd5OnQscGxhY2VtZW50Om4sbWlkZGxld2FyZURhdGE6e30saXNQb3NpdGlvbmVkOiExfSksW2YscF09Qy51c2VTdGF0ZShyKTtyUShmLHIpfHxwKHIpO2xldFtoLGddPUMudXNlU3RhdGUobnVsbCksW20sdl09Qy51c2VTdGF0ZShudWxsKSxiPUMudXNlQ2FsbGJhY2soZT0+e2UhPT1qLmN1cnJlbnQmJihqLmN1cnJlbnQ9ZSxnKGUpKX0sW10pLHk9Qy51c2VDYWxsYmFjayhlPT57ZSE9PWsuY3VycmVudCYmKGsuY3VycmVudD1lLHYoZSkpfSxbXSkseD1hfHxoLHc9aXx8bSxqPUMudXNlUmVmKG51bGwpLGs9Qy51c2VSZWYobnVsbCksQT1DLnVzZVJlZih1KSxPPW51bGwhPXMsUz1yMChzKSxfPXIwKG8pLFA9cjAoYyksej1DLnVzZUNhbGxiYWNrKCgpPT57aWYoIWouY3VycmVudHx8IWsuY3VycmVudClyZXR1cm47bGV0IGU9e3BsYWNlbWVudDpuLHN0cmF0ZWd5OnQsbWlkZGxld2FyZTpmfTtfLmN1cnJlbnQmJihlLnBsYXRmb3JtPV8uY3VycmVudCksKChlLG4sdCk9PntsZXQgcj1uZXcgTWFwLG89e3BsYXRmb3JtOnIkLC4uLnR9LGE9ey4uLm8ucGxhdGZvcm0sX2M6cn07cmV0dXJuIHJDKGUsbix7Li4ubyxwbGF0Zm9ybTphfSl9KShqLmN1cnJlbnQsay5jdXJyZW50LGUpLnRoZW4oZT0+e2xldCBuPXsuLi5lLGlzUG9zaXRpb25lZDohMSE9PVAuY3VycmVudH07TC5jdXJyZW50JiYhclEoQS5jdXJyZW50LG4pJiYoQS5jdXJyZW50PW4sRS5mbHVzaFN5bmMoKCk9PntkKG4pfSkpfSl9LFtmLG4sdCxfLFBdKTtySygoKT0+eyExPT09YyYmQS5jdXJyZW50LmlzUG9zaXRpb25lZCYmKEEuY3VycmVudC5pc1Bvc2l0aW9uZWQ9ITEsZChlPT4oey4uLmUsaXNQb3NpdGlvbmVkOiExfSkpKX0sW2NdKTtsZXQgTD1DLnVzZVJlZighMSk7cksoKCk9PihMLmN1cnJlbnQ9ITAsKCk9PntMLmN1cnJlbnQ9ITF9KSxbXSkscksoKCk9PntpZih4JiYoai5jdXJyZW50PXgpLHcmJihrLmN1cnJlbnQ9dykseCYmdyl7aWYoUy5jdXJyZW50KXJldHVybiBTLmN1cnJlbnQoeCx3LHopO3ooKX19LFt4LHcseixTLE9dKTtsZXQgVD1DLnVzZU1lbW8oKCk9Pih7cmVmZXJlbmNlOmosZmxvYXRpbmc6ayxzZXRSZWZlcmVuY2U6YixzZXRGbG9hdGluZzp5fSksW2IseV0pLFI9Qy51c2VNZW1vKCgpPT4oe3JlZmVyZW5jZTp4LGZsb2F0aW5nOnd9KSxbeCx3XSksTj1DLnVzZU1lbW8oKCk9PntsZXQgZT17cG9zaXRpb246dCxsZWZ0OjAsdG9wOjB9O2lmKCFSLmZsb2F0aW5nKXJldHVybiBlO2xldCBuPXJKKFIuZmxvYXRpbmcsdS54KSxyPXJKKFIuZmxvYXRpbmcsdS55KTtyZXR1cm4gbD97Li4uZSx0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoXCIrbitcInB4LCBcIityK1wicHgpXCIsLi4uckcoUi5mbG9hdGluZyk+PTEuNSYme3dpbGxDaGFuZ2U6XCJ0cmFuc2Zvcm1cIn19Ontwb3NpdGlvbjp0LGxlZnQ6bix0b3A6cn19LFt0LGwsUi5mbG9hdGluZyx1LngsdS55XSk7cmV0dXJuIEMudXNlTWVtbygoKT0+KHsuLi51LHVwZGF0ZTp6LHJlZnM6VCxlbGVtZW50czpSLGZsb2F0aW5nU3R5bGVzOk59KSxbdSx6LFQsUixOXSl9KHsuLi5lLGVsZW1lbnRzOnsuLi5vLC4uLmwmJntyZWZlcmVuY2U6bH19fSkscD1DLnVzZUNhbGxiYWNrKGU9PntsZXQgbj1lZShlKT97Z2V0Qm91bmRpbmdDbGllbnRSZWN0OigpPT5lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGdldENsaWVudFJlY3RzOigpPT5lLmdldENsaWVudFJlY3RzKCksY29udGV4dEVsZW1lbnQ6ZX06ZTtzKG4pLGYucmVmcy5zZXRSZWZlcmVuY2Uobil9LFtmLnJlZnNdKSxoPUMudXNlQ2FsbGJhY2soZT0+eyhlZShlKXx8bnVsbD09PWUpJiYodS5jdXJyZW50PWUsaShlKSksKGVlKGYucmVmcy5yZWZlcmVuY2UuY3VycmVudCl8fG51bGw9PT1mLnJlZnMucmVmZXJlbmNlLmN1cnJlbnR8fG51bGwhPT1lJiYhZWUoZSkpJiZmLnJlZnMuc2V0UmVmZXJlbmNlKGUpfSxbZi5yZWZzXSksZz1DLnVzZU1lbW8oKCk9Pih7Li4uZi5yZWZzLHNldFJlZmVyZW5jZTpoLHNldFBvc2l0aW9uUmVmZXJlbmNlOnAsZG9tUmVmZXJlbmNlOnV9KSxbZi5yZWZzLGgscF0pLG09Qy51c2VNZW1vKCgpPT4oey4uLmYuZWxlbWVudHMsZG9tUmVmZXJlbmNlOmN9KSxbZi5lbGVtZW50cyxjXSksdj1DLnVzZU1lbW8oKCk9Pih7Li4uZiwuLi5yLHJlZnM6ZyxlbGVtZW50czptLG5vZGVJZDpufSksW2YsZyxtLG4scl0pO3JldHVybiBGKCgpPT57ci5kYXRhUmVmLmN1cnJlbnQuZmxvYXRpbmdDb250ZXh0PXY7bGV0IGU9ZD8ubm9kZXNSZWYuY3VycmVudC5maW5kKGU9PmUuaWQ9PT1uKTtlJiYoZS5jb250ZXh0PXYpfSksQy51c2VNZW1vKCgpPT4oey4uLmYsY29udGV4dDp2LHJlZnM6ZyxlbGVtZW50czptfSksW2YsZyxtLHZdKX0oe3Jvb3RDb250ZXh0OmVjLHBsYWNlbWVudDpRLG1pZGRsZXdhcmU6ZW8sc3RyYXRlZ3k6eSx3aGlsZUVsZW1lbnRzTW91bnRlZDp6P3ZvaWQgMDooLi4uZSk9PnJZKC4uLmUsZXUpLG5vZGVJZDpCfSkse3NpZGVYOmV3LHNpZGVZOmVqfT1lZy5hZGFwdGl2ZU9yaWdpbnx8e30sZWs9Qy51c2VNZW1vKCgpPT5NP3twb3NpdGlvbjp5LFtld106YCR7ZXB9cHhgLFtlal06YCR7ZWh9cHhgfTpleCxbTSxldyxlaix5LGVwLGVoLGV4XSksZU89Qy51c2VSZWYobnVsbCk7RigoKT0+e2lmKCFSKXJldHVybjtsZXQgZT1aLmN1cnJlbnQsbj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2UoKTplLHQ9KHI1KG4pP24uY3VycmVudDpuKXx8bnVsbDt0IT09ZU8uY3VycmVudCYmKGVkLnNldFBvc2l0aW9uUmVmZXJlbmNlKHQpLGVPLmN1cnJlbnQ9dCl9LFtSLGVkLCQsWl0pLEMudXNlRWZmZWN0KCgpPT57aWYoIVIpcmV0dXJuO2xldCBlPVouY3VycmVudDtcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZyNShlKSYmZS5jdXJyZW50IT09ZU8uY3VycmVudCYmKGVkLnNldFBvc2l0aW9uUmVmZXJlbmNlKGUuY3VycmVudCksZU8uY3VycmVudD1lLmN1cnJlbnQpfSxbUixlZCwkLFpdKSxDLnVzZUVmZmVjdCgoKT0+e2lmKHomJlImJmVmLmRvbVJlZmVyZW5jZSYmZWYuZmxvYXRpbmcpcmV0dXJuIHJZKGVmLmRvbVJlZmVyZW5jZSxlZi5mbG9hdGluZyxlbSxldSl9LFt6LFIsZWYsZW0sZXVdKTtsZXQgZUM9cjEoeCxuayhldiksWCksZVM9bkEoZXYpfHxcImNlbnRlclwiLGVFPSEhZWcuaGlkZT8ucmVmZXJlbmNlSGlkZGVuLGVfPUMudXNlTWVtbygoKT0+KHtwb3NpdGlvbjpcImFic29sdXRlXCIsdG9wOmVnLmFycm93Py55LGxlZnQ6ZWcuYXJyb3c/Lnh9KSxbZWcuYXJyb3ddKSxlUD1lZy5hcnJvdz8uY2VudGVyT2Zmc2V0IT09MDtyZXR1cm4gQy51c2VNZW1vKCgpPT4oe3Bvc2l0aW9uZXJTdHlsZXM6ZWssYXJyb3dTdHlsZXM6ZV8sYXJyb3dSZWY6SixhcnJvd1VuY2VudGVyZWQ6ZVAsc2lkZTplQyxhbGlnbjplUyxhbmNob3JIaWRkZW46ZUUscmVmczplZCxjb250ZXh0OmViLGlzUG9zaXRpb25lZDpleSx1cGRhdGU6ZW19KSxbZWssZV8sSixlUCxlQyxlUyxlRSxlZCxlYixleSxlbV0pfWZ1bmN0aW9uIHI1KGUpe3JldHVybiBudWxsIT1lJiZcImN1cnJlbnRcImluIGV9ZnVuY3Rpb24gcjMoZSl7bGV0e2NoaWxkcmVuOm4sZWxlbWVudHNSZWY6dCxsYWJlbHNSZWY6cixvbk1hcENoYW5nZTpvfT1lLGE9Qy51c2VSZWYoMCksaT1QKHI5KS5jdXJyZW50LHM9UChyNikuY3VycmVudCxbYyx1XT1DLnVzZVN0YXRlKDApLGQ9Qy51c2VSZWYoYyksZj1UKChlLG4pPT57cy5zZXQoZSxuPz9udWxsKSxkLmN1cnJlbnQrPTEsdShkLmN1cnJlbnQpfSkscD1UKGU9PntzLmRlbGV0ZShlKSxkLmN1cnJlbnQrPTEsdShkLmN1cnJlbnQpfSksaD1DLnVzZU1lbW8oKCk9PntsZXQgZT1uZXcgTWFwO3JldHVybiBBcnJheS5mcm9tKHMua2V5cygpKS5zb3J0KHI4KS5mb3JFYWNoKChuLHQpPT57bGV0IHI9cy5nZXQobik/P3t9O2Uuc2V0KG4sey4uLnIsaW5kZXg6dH0pfSksZX0sW3MsY10pO0YoKCk9PntkLmN1cnJlbnQ9PT1jJiYodC5jdXJyZW50Lmxlbmd0aCE9PWguc2l6ZSYmKHQuY3VycmVudC5sZW5ndGg9aC5zaXplKSxyJiZyLmN1cnJlbnQubGVuZ3RoIT09aC5zaXplJiYoci5jdXJyZW50Lmxlbmd0aD1oLnNpemUpKSxvPy4oaCl9LFtvLGgsdCxyLGMsZF0pO2xldCBnPVQoZT0+KGkuYWRkKGUpLCgpPT57aS5kZWxldGUoZSl9KSk7RigoKT0+e2kuZm9yRWFjaChlPT5lKGgpKX0sW2ksaF0pO2xldCBtPUMudXNlTWVtbygoKT0+KHtyZWdpc3RlcjpmLHVucmVnaXN0ZXI6cCxzdWJzY3JpYmVNYXBDaGFuZ2U6ZyxlbGVtZW50c1JlZjp0LGxhYmVsc1JlZjpyLG5leHRJbmRleFJlZjphfSksW2YscCxnLHQscixhXSk7cmV0dXJuKDAsbC5qc3gpKHRDLlByb3ZpZGVyLHt2YWx1ZTptLGNoaWxkcmVuOm59KX1mdW5jdGlvbiByNigpe3JldHVybiBuZXcgTWFwfWZ1bmN0aW9uIHI5KCl7cmV0dXJuIG5ldyBTZXR9ZnVuY3Rpb24gcjgoZSxuKXtsZXQgdD1lLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG4pO3JldHVybiB0Jk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HfHx0Jk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZPy0xOnQmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9QUkVDRURJTkd8fHQmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlOUz8xOjB9bGV0IHI3PUMuZm9yd2FyZFJlZihmdW5jdGlvbihlLG4pe2xldCB0LHtjdXRvdXQ6ciwuLi5vfT1lO2lmKHIpe2xldCBlPXI/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3Q9YHBvbHlnb24oXG4gICAgICAwJSAwJSxcbiAgICAgIDEwMCUgMCUsXG4gICAgICAxMDAlIDEwMCUsXG4gICAgICAwJSAxMDAlLFxuICAgICAgMCUgMCUsXG4gICAgICAke2UubGVmdH1weCAke2UudG9wfXB4LFxuICAgICAgJHtlLmxlZnR9cHggJHtlLmJvdHRvbX1weCxcbiAgICAgICR7ZS5yaWdodH1weCAke2UuYm90dG9tfXB4LFxuICAgICAgJHtlLnJpZ2h0fXB4ICR7ZS50b3B9cHgsXG4gICAgICAke2UubGVmdH1weCAke2UudG9wfXB4XG4gICAgKWB9cmV0dXJuKDAsbC5qc3gpKFwiZGl2XCIse3JlZjpuLHJvbGU6XCJwcmVzZW50YXRpb25cIixcImRhdGEtYmFzZS11aS1pbmVydFwiOlwiXCIsLi4ubyxzdHlsZTp7cG9zaXRpb246XCJmaXhlZFwiLGluc2V0OjAsdXNlclNlbGVjdDpcIm5vbmVcIixXZWJraXRVc2VyU2VsZWN0Olwibm9uZVwiLGNsaXBQYXRoOnR9fSl9KSxvZT1DLmZvcndhcmRSZWYoZnVuY3Rpb24oZSxuKXt2YXIgdDtsZXR7YW5jaG9yOnIscG9zaXRpb25NZXRob2Q6bz1cImFic29sdXRlXCIsY2xhc3NOYW1lOmEscmVuZGVyOmksc2lkZTpzLGFsaWduOmMsc2lkZU9mZnNldDp1PTAsYWxpZ25PZmZzZXQ6ZD0wLGNvbGxpc2lvbkJvdW5kYXJ5OmY9XCJjbGlwcGluZy1hbmNlc3RvcnNcIixjb2xsaXNpb25QYWRkaW5nOnA9NSxhcnJvd1BhZGRpbmc6aD01LHN0aWNreTpnPSExLHRyYWNrQW5jaG9yOm09ITAsY29sbGlzaW9uQXZvaWRhbmNlOnY9bm8sLi4uYn09ZSx7b3Blbjp5LHNldE9wZW46eCxmbG9hdGluZ1Jvb3RDb250ZXh0Oncsc2V0UG9zaXRpb25lckVsZW1lbnQ6aixpdGVtRG9tRWxlbWVudHM6ayxpdGVtTGFiZWxzOkEsbW91bnRlZDpPLG1vZGFsOlMsbGFzdE9wZW5DaGFuZ2VSZWFzb246RSxwYXJlbnQ6XyxzZXRIb3ZlckVuYWJsZWQ6UCx0cmlnZ2VyRWxlbWVudDp6fT1uMCgpLEw9ZnVuY3Rpb24oKXtsZXQgZT1DLnVzZUNvbnRleHQocmopO2lmKHZvaWQgMD09PWUpdGhyb3cgRXJyb3IoXCJCYXNlIFVJOiA8TWVudS5Qb3J0YWw+IGlzIG1pc3NpbmcuXCIpO3JldHVybiBlfSgpLFQ9ZnVuY3Rpb24oZSl7bGV0IG49SCgpLHQ9VygpLHI9cSgpO3JldHVybiBGKCgpPT57aWYoIW4pcmV0dXJuO2xldCBlPXtpZDpuLHBhcmVudElkOnJ9O3JldHVybiB0Py5hZGROb2RlKGUpLCgpPT57dD8ucmVtb3ZlTm9kZShlKX19LFt0LG4scl0pLG59KCksUj1xKCksTj10YSghMCksRD1yLEI9dSxNPWQsST1jO1wiY29udGV4dC1tZW51XCI9PT1fLnR5cGUmJihEPV8uY29udGV4dD8uYW5jaG9yPz9yLEk9ZS5hbGlnbj8/XCJzdGFydFwiLE09ZS5hbGlnbk9mZnNldD8/MixCPWUuc2lkZU9mZnNldD8/LTUpO2xldCBVPXMsVj1JO1wibWVudVwiPT09Xy50eXBlPyhVPVU/P1wiaW5saW5lLWVuZFwiLFY9Vj8/XCJzdGFydFwiKTpcIm1lbnViYXJcIj09PV8udHlwZSYmKFU9VT8/XCJib3R0b21cIixWPVY/P1wic3RhcnRcIik7bGV0IFo9XCJjb250ZXh0LW1lbnVcIj09PV8udHlwZSxZPXI0KHthbmNob3I6RCxmbG9hdGluZ1Jvb3RDb250ZXh0OncscG9zaXRpb25NZXRob2Q6Tj9cImZpeGVkXCI6byxtb3VudGVkOk8sc2lkZTpVLHNpZGVPZmZzZXQ6QixhbGlnbjpWLGFsaWduT2Zmc2V0Ok0sYXJyb3dQYWRkaW5nOlo/MDpoLGNvbGxpc2lvbkJvdW5kYXJ5OmYsY29sbGlzaW9uUGFkZGluZzpwLHN0aWNreTpnLG5vZGVJZDpULGtlZXBNb3VudGVkOkwsdHJhY2tBbmNob3I6bSxjb2xsaXNpb25Bdm9pZGFuY2U6dixzaGlmdENyb3NzQXhpczpafSkse2V2ZW50czpYfT1XKCksSz1DLnVzZU1lbW8oKCk9PntsZXQgZT17fTtyZXR1cm4geXx8KGUucG9pbnRlckV2ZW50cz1cIm5vbmVcIikse3JvbGU6XCJwcmVzZW50YXRpb25cIixoaWRkZW46IU8sc3R5bGU6ey4uLlkucG9zaXRpb25lclN0eWxlcywuLi5lfX19LFt5LE8sWS5wb3NpdGlvbmVyU3R5bGVzXSk7Qy51c2VFZmZlY3QoKCk9PntmdW5jdGlvbiBlKGUpe2Uub3Blbj8oZS5wYXJlbnROb2RlSWQ9PT1UJiZQKCExKSxlLm5vZGVJZCE9PVQmJmUucGFyZW50Tm9kZUlkPT09UiYmeCghMSx2b2lkIDAsXCJzaWJsaW5nLW9wZW5cIikpOmUucGFyZW50Tm9kZUlkPT09VCYmUCghMCl9cmV0dXJuIFgub24oXCJvcGVuY2hhbmdlXCIsZSksKCk9PntYLm9mZihcIm9wZW5jaGFuZ2VcIixlKX19LFtYLFQsUix4LFBdKSxDLnVzZUVmZmVjdCgoKT0+e1guZW1pdChcIm9wZW5jaGFuZ2VcIix7b3Blbjp5LG5vZGVJZDpULHBhcmVudE5vZGVJZDpSfSl9LFtYLHksVCxSXSk7bGV0IFE9Qy51c2VNZW1vKCgpPT4oe29wZW46eSxzaWRlOlkuc2lkZSxhbGlnbjpZLmFsaWduLGFuY2hvckhpZGRlbjpZLmFuY2hvckhpZGRlbixuZXN0ZWQ6XCJtZW51XCI9PT1fLnR5cGV9KSxbeSxZLnNpZGUsWS5hbGlnbixZLmFuY2hvckhpZGRlbixfLnR5cGVdKSxHPUMudXNlTWVtbygoKT0+KHtzaWRlOlkuc2lkZSxhbGlnbjpZLmFsaWduLGFycm93UmVmOlkuYXJyb3dSZWYsYXJyb3dVbmNlbnRlcmVkOlkuYXJyb3dVbmNlbnRlcmVkLGFycm93U3R5bGVzOlkuYXJyb3dTdHlsZXMsZmxvYXRpbmdDb250ZXh0OlkuY29udGV4dH0pLFtZLnNpZGUsWS5hbGlnbixZLmFycm93UmVmLFkuYXJyb3dVbmNlbnRlcmVkLFkuYXJyb3dTdHlsZXMsWS5jb250ZXh0XSksSj10aihcImRpdlwiLGUse3N0YXRlOlEsY3VzdG9tU3R5bGVIb29rTWFwcGluZzp0VixyZWY6W24sal0scHJvcHM6ey4uLkssLi4uYn19KSxlZT1PJiZcIm1lbnVcIiE9PV8udHlwZSYmKFwibWVudWJhclwiIT09Xy50eXBlJiZTJiZcInRyaWdnZXItaG92ZXJcIiE9PUV8fFwibWVudWJhclwiPT09Xy50eXBlJiZfLmNvbnRleHQubW9kYWwpLGVuPW51bGw7cmV0dXJuXCJtZW51YmFyXCI9PT1fLnR5cGU/ZW49Xy5jb250ZXh0LmNvbnRlbnRFbGVtZW50OnZvaWQgMD09PV8udHlwZSYmKGVuPXopLCgwLGwuanN4cykockEuUHJvdmlkZXIse3ZhbHVlOkcsY2hpbGRyZW46W2VlJiYoMCxsLmpzeCkocjcse3JlZjpcImNvbnRleHQtbWVudVwiPT09Xy50eXBlfHxcIm5lc3RlZC1jb250ZXh0LW1lbnVcIj09PV8udHlwZT9fLmNvbnRleHQuaW50ZXJuYWxCYWNrZHJvcFJlZjpudWxsLGluZXJ0Oih0PSF5LHR3Pj0xOT90OnQ/XCJ0cnVlXCI6dm9pZCAwKSxjdXRvdXQ6ZW59KSwoMCxsLmpzeCkoJCx7aWQ6VCxjaGlsZHJlbjooMCxsLmpzeCkocjMse2VsZW1lbnRzUmVmOmssbGFiZWxzUmVmOkEsY2hpbGRyZW46Sn0pfSldfSl9KSxvbj17aW5lcnQ6bmV3IFdlYWtNYXAsXCJhcmlhLWhpZGRlblwiOm5ldyBXZWFrTWFwLG5vbmU6bmV3IFdlYWtNYXB9O2Z1bmN0aW9uIG90KGUpe3JldHVyblwiaW5lcnRcIj09PWU/b24uaW5lcnQ6XCJhcmlhLWhpZGRlblwiPT09ZT9vbltcImFyaWEtaGlkZGVuXCJdOm9uLm5vbmV9bGV0IG9yPW5ldyBXZWFrU2V0LG9vPXt9LG9hPTAsb2k9ZT0+ZSYmKGUuaG9zdHx8b2koZS5wYXJlbnROb2RlKSk7ZnVuY3Rpb24gb2woZSxuPSExLHQ9ITEpe2xldCByPWVRKGVbMF0pLmJvZHk7cmV0dXJuIGZ1bmN0aW9uKGUsbix0LHIpe2xldCBvPVwiZGF0YS1iYXNlLXVpLWluZXJ0XCIsYT1yP1wiaW5lcnRcIjp0P1wiYXJpYS1oaWRkZW5cIjpudWxsLGk9ZS5tYXAoZT0+e2lmKG4uY29udGFpbnMoZSkpcmV0dXJuIGU7bGV0IHQ9b2koZSk7cmV0dXJuIG4uY29udGFpbnModCk/dDpudWxsfSkuZmlsdGVyKGU9Pm51bGwhPWUpLGw9bmV3IFNldCxzPW5ldyBTZXQoaSksYz1bXTtvb1tvXXx8KG9vW29dPW5ldyBXZWFrTWFwKTtsZXQgdT1vb1tvXTtyZXR1cm4gaS5mb3JFYWNoKGZ1bmN0aW9uIGUobil7ISghbnx8bC5oYXMobikpJiYobC5hZGQobiksbi5wYXJlbnROb2RlJiZlKG4ucGFyZW50Tm9kZSkpfSksZnVuY3Rpb24gZShuKXshbnx8cy5oYXMobil8fFtdLmZvckVhY2guY2FsbChuLmNoaWxkcmVuLG49PntpZihcInNjcmlwdFwiIT09SyhuKSlpZihsLmhhcyhuKSllKG4pO2Vsc2V7bGV0IGU9YT9uLmdldEF0dHJpYnV0ZShhKTpudWxsLHQ9bnVsbCE9PWUmJlwiZmFsc2VcIiE9PWUscj1vdChhKSxpPShyLmdldChuKXx8MCkrMSxsPSh1LmdldChuKXx8MCkrMTtyLnNldChuLGkpLHUuc2V0KG4sbCksYy5wdXNoKG4pLDE9PT1pJiZ0JiZvci5hZGQobiksMT09PWwmJm4uc2V0QXR0cmlidXRlKG8sXCJcIiksIXQmJmEmJm4uc2V0QXR0cmlidXRlKGEsXCJpbmVydFwiPT09YT9cIlwiOlwidHJ1ZVwiKX19KX0obiksbC5jbGVhcigpLG9hKz0xLCgpPT57Yy5mb3JFYWNoKGU9PntsZXQgbj1vdChhKSx0PShuLmdldChlKXx8MCktMSxyPSh1LmdldChlKXx8MCktMTtuLnNldChlLHQpLHUuc2V0KGUsciksdHx8KCFvci5oYXMoZSkmJmEmJmUucmVtb3ZlQXR0cmlidXRlKGEpLG9yLmRlbGV0ZShlKSkscnx8ZS5yZW1vdmVBdHRyaWJ1dGUobyl9KSwob2EtPTEpfHwob24uaW5lcnQ9bmV3IFdlYWtNYXAsb25bXCJhcmlhLWhpZGRlblwiXT1uZXcgV2Vha01hcCxvbi5ub25lPW5ldyBXZWFrTWFwLG9yPW5ldyBXZWFrU2V0LG9vPXt9KX19KGUuY29uY2F0KEFycmF5LmZyb20oci5xdWVyeVNlbGVjdG9yQWxsKFwiW2FyaWEtbGl2ZV1cIikpKSxyLG4sdCl9bGV0IG9zPVtdO2Z1bmN0aW9uIG9jKCl7cmV0dXJuIG9zLnNsaWNlKCkucmV2ZXJzZSgpLmZpbmQoZT0+ZS5pc0Nvbm5lY3RlZCl9ZnVuY3Rpb24gb3UoZSxuKXtpZighbi5jdXJyZW50LmluY2x1ZGVzKFwiZmxvYXRpbmdcIikmJiFlLmdldEF0dHJpYnV0ZShcInJvbGVcIik/LmluY2x1ZGVzKFwiZGlhbG9nXCIpKXJldHVybjtsZXQgdD1yZCgpLHI9cmMoZSx0KS5maWx0ZXIoZT0+e2xldCBuPWUuZ2V0QXR0cmlidXRlKFwiZGF0YS10YWJpbmRleFwiKXx8XCJcIjtyZXR1cm4gcnUoZSx0KXx8ZS5oYXNBdHRyaWJ1dGUoXCJkYXRhLXRhYmluZGV4XCIpJiYhbi5zdGFydHNXaXRoKFwiLVwiKX0pLG89ZS5nZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiKTtuLmN1cnJlbnQuaW5jbHVkZXMoXCJmbG9hdGluZ1wiKXx8MD09PXIubGVuZ3RoP1wiMFwiIT09byYmZS5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLFwiMFwiKTooXCItMVwiIT09b3x8ZS5oYXNBdHRyaWJ1dGUoXCJkYXRhLXRhYmluZGV4XCIpJiZcIi0xXCIhPT1lLmdldEF0dHJpYnV0ZShcImRhdGEtdGFiaW5kZXhcIikpJiYoZS5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLFwiLTFcIiksZS5zZXRBdHRyaWJ1dGUoXCJkYXRhLXRhYmluZGV4XCIsXCItMVwiKSl9bGV0IG9kPUMuZm9yd2FyZFJlZihmdW5jdGlvbihlLG4pe3JldHVybigwLGwuanN4KShcImJ1dHRvblwiLHsuLi5lLHR5cGU6XCJidXR0b25cIixyZWY6bix0YWJJbmRleDotMSxzdHlsZTp0JH0pfSk7ZnVuY3Rpb24gb2YoZSl7bGV0e2NvbnRleHQ6bixjaGlsZHJlbjp0LGRpc2FibGVkOnI9ITEsb3JkZXI6bz1bXCJjb250ZW50XCJdLGd1YXJkczphPSEwLGluaXRpYWxGb2N1czppPTAscmV0dXJuRm9jdXM6cz0hMCxyZXN0b3JlRm9jdXM6Yz0hMSxtb2RhbDp1PSEwLHZpc3VhbGx5SGlkZGVuRGlzbWlzczpkPSExLGNsb3NlT25Gb2N1c091dDpmPSEwLG91dHNpZGVFbGVtZW50c0luZXJ0OnA9ITEsZ2V0SW5zaWRlRWxlbWVudHM6aD0oKT0+W119PWUse29wZW46Zyxvbk9wZW5DaGFuZ2U6bSxldmVudHM6dixkYXRhUmVmOmIsZWxlbWVudHM6e2RvbVJlZmVyZW5jZTp5LGZsb2F0aW5nOnh9fT1uLHc9VCgoKT0+Yi5jdXJyZW50LmZsb2F0aW5nQ29udGV4dD8ubm9kZUlkKSxqPVQoaCksaz1cIm51bWJlclwiPT10eXBlb2YgaSYmaTwwLEE9ZUooeSkmJmssTz1cInVuZGVmaW5lZFwiIT10eXBlb2YgSFRNTEVsZW1lbnQmJlwiaW5lcnRcImluIEhUTUxFbGVtZW50LnByb3RvdHlwZSxTPSFPfHxhLEU9IVN8fE8mJnAsXz1lQShvKSxQPWVBKGkpLHo9ZUEocyksTD1XKCksUj1yYigpLE49Qy51c2VSZWYobnVsbCksRD1DLnVzZVJlZihudWxsKSxCPUMudXNlUmVmKCExKSxNPUMudXNlUmVmKCExKSxJPUMudXNlUmVmKC0xKSxIPW51bGwhPVIsVT1lMCh4KSxWPVQoKGU9VSk9PmU/cnMoZSxyZCgpKTpbXSkscT1UKGU9PntsZXQgbj1WKGUpO3JldHVybiBfLmN1cnJlbnQubWFwKGU9PnkmJlwicmVmZXJlbmNlXCI9PT1lP3k6VSYmXCJmbG9hdGluZ1wiPT09ZT9VOm4pLmZpbHRlcihCb29sZWFuKS5mbGF0KCl9KTtDLnVzZUVmZmVjdCgoKT0+e2lmKHJ8fCF1KXJldHVybjtmdW5jdGlvbiBlKGUpe2lmKFwiVGFiXCI9PT1lLmtleSl7ZVkoVSxlWihlUShVKSkpJiYwPT09VigpLmxlbmd0aCYmIUEmJmVEKGUpO2xldCBuPXEoKSx0PWVYKGUpO1wicmVmZXJlbmNlXCI9PT1fLmN1cnJlbnRbMF0mJnQ9PT15JiYoZUQoZSksZS5zaGlmdEtleT9ucShuW24ubGVuZ3RoLTFdKTpucShuWzFdKSksXCJmbG9hdGluZ1wiPT09Xy5jdXJyZW50WzFdJiZ0PT09VSYmZS5zaGlmdEtleSYmKGVEKGUpLG5xKG5bMF0pKX19bGV0IG49ZVEoVSk7cmV0dXJuIG4uYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixlKSwoKT0+e24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixlKX19LFtyLHksVSx1LF8sQSxWLHFdKSxDLnVzZUVmZmVjdCgoKT0+e2lmKCFyJiZ4KXJldHVybiB4LmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c2luXCIsZSksKCk9Pnt4LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c2luXCIsZSl9O2Z1bmN0aW9uIGUoZSl7bGV0IG49ZVgoZSksdD1WKCkuaW5kZXhPZihuKTstMSE9PXQmJihJLmN1cnJlbnQ9dCl9fSxbcix4LFZdKSxDLnVzZUVmZmVjdCgoKT0+e2lmKCFyJiZmJiZ4JiZlbih5KSlyZXR1cm4geS5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNvdXRcIixuKSx5LmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLGUpLHguYWRkRXZlbnRMaXN0ZW5lcihcImZvY3Vzb3V0XCIsbiksKCk9Pnt5LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c291dFwiLG4pLHkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsZSkseC5yZW1vdmVFdmVudExpc3RlbmVyKFwiZm9jdXNvdXRcIixuKX07ZnVuY3Rpb24gZSgpe00uY3VycmVudD0hMCxzZXRUaW1lb3V0KCgpPT57TS5jdXJyZW50PSExfSl9ZnVuY3Rpb24gbihlKXtsZXQgbj1lLnJlbGF0ZWRUYXJnZXQsdD1lLmN1cnJlbnRUYXJnZXQscj1lWChlKTtxdWV1ZU1pY3JvdGFzaygoKT0+e2xldCBvPXcoKSxhPSEoZVkoeSxuKXx8ZVkoeCxuKXx8ZVkobix4KXx8ZVkoUj8ucG9ydGFsTm9kZSxuKXx8bj8uaGFzQXR0cmlidXRlKGUxKFwiZm9jdXMtZ3VhcmRcIikpfHxMJiYoZTYoTC5ub2Rlc1JlZi5jdXJyZW50LG8pLmZpbmQoZT0+ZVkoZS5jb250ZXh0Py5lbGVtZW50cy5mbG9hdGluZyxuKXx8ZVkoZS5jb250ZXh0Py5lbGVtZW50cy5kb21SZWZlcmVuY2UsbikpfHxlOShMLm5vZGVzUmVmLmN1cnJlbnQsbykuZmluZChlPT5bZS5jb250ZXh0Py5lbGVtZW50cy5mbG9hdGluZyxlMChlLmNvbnRleHQ/LmVsZW1lbnRzLmZsb2F0aW5nKV0uaW5jbHVkZXMobil8fGUuY29udGV4dD8uZWxlbWVudHMuZG9tUmVmZXJlbmNlPT09bikpKTtpZih0PT09eSYmVSYmb3UoVSxfKSxjJiZ0IT09eSYmIXI/LmlzQ29ubmVjdGVkJiZlWihlUShVKSk9PT1lUShVKS5ib2R5KXtlbihVKSYmVS5mb2N1cygpO2xldCBlPUkuY3VycmVudCxuPVYoKSx0PW5bZV18fG5bbi5sZW5ndGgtMV18fFU7ZW4odCkmJnQuZm9jdXMoKX1pZihiLmN1cnJlbnQuaW5zaWRlUmVhY3RUcmVlKXtiLmN1cnJlbnQuaW5zaWRlUmVhY3RUcmVlPSExO3JldHVybn0oQXx8IXUpJiZuJiZhJiYhTS5jdXJyZW50JiZuIT09b2MoKSYmKEIuY3VycmVudD0hMCxtKCExLGUsXCJmb2N1cy1vdXRcIikpfSl9fSxbcix5LHgsVSx1LEwsUixtLGYsYyxWLEEsdyxfLGJdKTtsZXQgJD1DLnVzZVJlZihudWxsKSxaPUMudXNlUmVmKG51bGwpLFk9dGIoJCxSPy5iZWZvcmVJbnNpZGVSZWYpLFg9dGIoWixSPy5hZnRlckluc2lkZVJlZik7ZnVuY3Rpb24gUShlKXtyZXR1cm4hciYmZCYmdT8oMCxsLmpzeCkob2Qse3JlZjpcInN0YXJ0XCI9PT1lP046RCxvbkNsaWNrOmU9Pm0oITEsZS5uYXRpdmVFdmVudCksY2hpbGRyZW46XCJzdHJpbmdcIj09dHlwZW9mIGQ/ZDpcIkRpc21pc3NcIn0pOm51bGx9Qy51c2VFZmZlY3QoKCk9PntpZihyfHwheClyZXR1cm47bGV0IGU9QXJyYXkuZnJvbShSPy5wb3J0YWxOb2RlPy5xdWVyeVNlbGVjdG9yQWxsKGBbJHtlMShcInBvcnRhbFwiKX1dYCl8fFtdKSxuPUw/ZTkoTC5ub2Rlc1JlZi5jdXJyZW50LHcoKSk6W10sdD1MJiYhdT9uLm1hcChlPT5lLmNvbnRleHQ/LmVsZW1lbnRzLmZsb2F0aW5nKTpbXSxvPVt4LG4uZmluZChlPT5lSihlLmNvbnRleHQ/LmVsZW1lbnRzLmRvbVJlZmVyZW5jZXx8bnVsbCkpPy5jb250ZXh0Py5lbGVtZW50cy5kb21SZWZlcmVuY2UsLi4uZSwuLi50LC4uLmooKSxOLmN1cnJlbnQsRC5jdXJyZW50LCQuY3VycmVudCxaLmN1cnJlbnQsUj8uYmVmb3JlT3V0c2lkZVJlZi5jdXJyZW50LFI/LmFmdGVyT3V0c2lkZVJlZi5jdXJyZW50LF8uY3VycmVudC5pbmNsdWRlcyhcInJlZmVyZW5jZVwiKXx8QT95Om51bGxdLmZpbHRlcihlPT5udWxsIT1lKSxhPXV8fEE/b2wobywhRSxFKTpvbChvKTtyZXR1cm4oKT0+e2EoKX19LFtyLHkseCx1LF8sUixBLFMsRSxMLHcsal0pLEYoKCk9PntpZihyfHwhZW4oVSkpcmV0dXJuO2xldCBlPWVaKGVRKFUpKTtxdWV1ZU1pY3JvdGFzaygoKT0+e2xldCBuPXEoVSksdD1QLmN1cnJlbnQscj0oXCJudW1iZXJcIj09dHlwZW9mIHQ/blt0XTp0LmN1cnJlbnQpfHxVLG89ZVkoVSxlKTtrfHxvfHwhZ3x8bnEocix7cHJldmVudFNjcm9sbDpyPT09VX0pfSl9LFtyLGcsVSxrLHEsUF0pLEYoKCk9Pnt2YXIgZTtpZihyfHwhVSlyZXR1cm47bGV0IG49ZVEoVSk7ZnVuY3Rpb24gdCh7cmVhc29uOmUsZXZlbnQ6bixuZXN0ZWQ6dH0pe2lmKFtcImhvdmVyXCIsXCJzYWZlLXBvbHlnb25cIl0uaW5jbHVkZXMoZSkmJlwibW91c2VsZWF2ZVwiPT09bi50eXBlJiYoQi5jdXJyZW50PSEwKSxcIm91dHNpZGUtcHJlc3NcIj09PWUpaWYodClCLmN1cnJlbnQ9ITE7ZWxzZSBpZihlQihuKXx8ZU0obikpQi5jdXJyZW50PSExO2Vsc2V7bGV0IGU9ITE7ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKS5mb2N1cyh7Z2V0IHByZXZlbnRTY3JvbGwoKXtyZXR1cm4gZT0hMCwhMX19KSxlP0IuY3VycmVudD0hMTpCLmN1cnJlbnQ9ITB9fWU9ZVoobiksb3M9b3MuZmlsdGVyKGU9PmUuaXNDb25uZWN0ZWQpLGUmJlwiYm9keVwiIT09SyhlKSYmKG9zLnB1c2goZSksb3MubGVuZ3RoPjIwJiYob3M9b3Muc2xpY2UoLTIwKSkpLHYub24oXCJvcGVuY2hhbmdlXCIsdCk7bGV0IG89bi5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtyZXR1cm4gby5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLFwiLTFcIiksby5zZXRBdHRyaWJ1dGUoXCJhcmlhLWhpZGRlblwiLFwidHJ1ZVwiKSxPYmplY3QuYXNzaWduKG8uc3R5bGUsdCQpLEgmJnkmJnkuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYWZ0ZXJlbmRcIixvKSwoKT0+e3Yub2ZmKFwib3BlbmNoYW5nZVwiLHQpO2xldCBlPWVaKG4pLHI9ZVkoeCxlKXx8TCYmZTYoTC5ub2Rlc1JlZi5jdXJyZW50LHcoKSwhMSkuc29tZShuPT5lWShuLmNvbnRleHQ/LmVsZW1lbnRzLmZsb2F0aW5nLGUpKSxhPWZ1bmN0aW9uKCl7aWYoXCJib29sZWFuXCI9PXR5cGVvZiB6LmN1cnJlbnQpe2xldCBlPXl8fG9jKCk7cmV0dXJuIGUmJmUuaXNDb25uZWN0ZWQ/ZTpvfXJldHVybiB6LmN1cnJlbnQuY3VycmVudHx8b30oKTtxdWV1ZU1pY3JvdGFzaygoKT0+e2xldCB0PWZ1bmN0aW9uKGUpe2xldCBuPXJkKCk7cmV0dXJuIHJ1KGUsbik/ZTpycyhlLG4pWzBdfHxlfShhKTt6LmN1cnJlbnQmJiFCLmN1cnJlbnQmJmVuKHQpJiYodD09PWV8fGU9PT1uLmJvZHl8fHIpJiZ0LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSksby5yZW1vdmUoKX0pfX0sW3IseCxVLHosYix2LEwsSCx5LHddKSxDLnVzZUVmZmVjdCgoKT0+e3F1ZXVlTWljcm90YXNrKCgpPT57Qi5jdXJyZW50PSExfSl9LFtyXSksRigoKT0+e2lmKCFyJiZSKXJldHVybiBSLnNldEZvY3VzTWFuYWdlclN0YXRlKHttb2RhbDp1LGNsb3NlT25Gb2N1c091dDpmLG9wZW46Zyxvbk9wZW5DaGFuZ2U6bSxkb21SZWZlcmVuY2U6eX0pLCgpPT57Ui5zZXRGb2N1c01hbmFnZXJTdGF0ZShudWxsKX19LFtyLFIsdSxnLG0sZix5XSksRigoKT0+eyFyJiZVJiZvdShVLF8pfSxbcixVLF9dKTtsZXQgRz0hciYmUyYmKCF1fHwhQSkmJihIfHx1KTtyZXR1cm4oMCxsLmpzeHMpKEMuRnJhZ21lbnQse2NoaWxkcmVuOltHJiYoMCxsLmpzeCkodFose1wiZGF0YS10eXBlXCI6XCJpbnNpZGVcIixyZWY6WSxvbkZvY3VzOmU9PntpZih1KXtsZXQgZT1xKCk7bnEoXCJyZWZlcmVuY2VcIj09PW9bMF0/ZVswXTplW2UubGVuZ3RoLTFdKX1lbHNlIGlmKFI/LnByZXNlcnZlVGFiT3JkZXImJlIucG9ydGFsTm9kZSlpZihCLmN1cnJlbnQ9ITEscmcoZSxSLnBvcnRhbE5vZGUpKXtsZXQgZT1ycCh5KTtlPy5mb2N1cygpfWVsc2UgUi5iZWZvcmVPdXRzaWRlUmVmLmN1cnJlbnQ/LmZvY3VzKCl9fSksIUEmJlEoXCJzdGFydFwiKSx0LFEoXCJlbmRcIiksRyYmKDAsbC5qc3gpKHRaLHtcImRhdGEtdHlwZVwiOlwiaW5zaWRlXCIscmVmOlgsb25Gb2N1czplPT57aWYodSlucShxKClbMF0pO2Vsc2UgaWYoUj8ucHJlc2VydmVUYWJPcmRlciYmUi5wb3J0YWxOb2RlKWlmKGYmJihCLmN1cnJlbnQ9ITApLHJnKGUsUi5wb3J0YWxOb2RlKSl7bGV0IGU9cmgoeSk7ZT8uZm9jdXMoKX1lbHNlIFIuYWZ0ZXJPdXRzaWRlUmVmLmN1cnJlbnQ/LmZvY3VzKCl9fSldfSl9bGV0IG9wPXsuLi50ViwuLi50VH0sb2g9Qy5mb3J3YXJkUmVmKGZ1bmN0aW9uKGUsbil7bGV0e3JlbmRlcjp0LGNsYXNzTmFtZTpyLGZpbmFsRm9jdXM6bywuLi5hfT1lLHtvcGVuOmksc2V0T3BlbjpzLHBvcHVwUmVmOmMsdHJhbnNpdGlvblN0YXR1czp1LHBvcHVwUHJvcHM6ZCxtb3VudGVkOmYsaW5zdGFudFR5cGU6cCxvbk9wZW5DaGFuZ2VDb21wbGV0ZTpoLHBhcmVudDpnLGxhc3RPcGVuQ2hhbmdlUmVhc29uOm0scm9vdElkOnZ9PW4wKCkse3NpZGU6YixhbGlnbjp5LGZsb2F0aW5nQ29udGV4dDp4fT1mdW5jdGlvbigpe2xldCBlPUMudXNlQ29udGV4dChyQSk7aWYodm9pZCAwPT09ZSl0aHJvdyBFcnJvcihcIkJhc2UgVUk6IE1lbnVQb3NpdGlvbmVyQ29udGV4dCBpcyBtaXNzaW5nLiBNZW51UG9zaXRpb25lciBwYXJ0cyBtdXN0IGJlIHBsYWNlZCB3aXRoaW4gPE1lbnUuUG9zaXRpb25lcj4uXCIpO3JldHVybiBlfSgpO241KHtvcGVuOmkscmVmOmMsb25Db21wbGV0ZSgpe2kmJmg/LighMCl9fSk7bGV0e2V2ZW50czp3fT1XKCk7Qy51c2VFZmZlY3QoKCk9PntmdW5jdGlvbiBlKGUpe3MoITEsZS5kb21FdmVudCxlLnJlYXNvbil9cmV0dXJuIHcub24oXCJjbG9zZVwiLGUpLCgpPT57dy5vZmYoXCJjbG9zZVwiLGUpfX0sW3csc10pO2xldCBqPXRqKFwiZGl2XCIsZSx7c3RhdGU6Qy51c2VNZW1vKCgpPT4oe3RyYW5zaXRpb25TdGF0dXM6dSxzaWRlOmIsYWxpZ246eSxvcGVuOmksbmVzdGVkOlwibWVudVwiPT09Zy50eXBlLGluc3RhbnQ6cH0pLFt1LGIseSxpLGcudHlwZSxwXSkscmVmOltuLGNdLGN1c3RvbVN0eWxlSG9va01hcHBpbmc6b3AscHJvcHM6W2QsXCJzdGFydGluZ1wiPT09dT9udDpucixhLHtcImRhdGEtcm9vdG93bmVyaWRcIjp2fV19KSxrPXZvaWQgMD09PWcudHlwZXx8XCJjb250ZXh0LW1lbnVcIj09PWcudHlwZTtyZXR1cm5cIm1lbnViYXJcIj09PWcudHlwZSYmXCJvdXRzaWRlLXByZXNzXCIhPT1tJiYoaz0hMCksKDAsbC5qc3gpKG9mLHtjb250ZXh0OngsbW9kYWw6ITEsZGlzYWJsZWQ6IWYscmV0dXJuRm9jdXM6b3x8ayxpbml0aWFsRm9jdXM6XCJtZW51XCI9PT1nLnR5cGU/LTE6MCxyZXN0b3JlRm9jdXM6ITAsY2hpbGRyZW46an0pfSksb2c9Qy5jcmVhdGVDb250ZXh0KHZvaWQgMCksb209Qy5mb3J3YXJkUmVmKGZ1bmN0aW9uKGUsbil7bGV0e3JlbmRlcjp0LGNsYXNzTmFtZTpyLC4uLm99PWUsW2EsaV09Qy51c2VTdGF0ZSh2b2lkIDApLHM9Qy51c2VNZW1vKCgpPT4oe3NldExhYmVsSWQ6aX0pLFtpXSksYz10aihcImRpdlwiLGUse3JlZjpuLHByb3BzOntyb2xlOlwiZ3JvdXBcIixcImFyaWEtbGFiZWxsZWRieVwiOmEsLi4ub319KTtyZXR1cm4oMCxsLmpzeCkob2cuUHJvdmlkZXIse3ZhbHVlOnMsY2hpbGRyZW46Y30pfSk7ZnVuY3Rpb24gb3YoZSl7cmV0dXJuIEgoZSxcImJhc2UtdWlcIil9bGV0IG9iPUMuZm9yd2FyZFJlZihmdW5jdGlvbihlLG4pe2xldHtjbGFzc05hbWU6dCxyZW5kZXI6cixpZDpvLC4uLmF9PWUsaT1vdihvKSx7c2V0TGFiZWxJZDpsfT1mdW5jdGlvbigpe2xldCBlPUMudXNlQ29udGV4dChvZyk7aWYodm9pZCAwPT09ZSl0aHJvdyBFcnJvcihcIkJhc2UgVUk6IE1lbnVHcm91cFJvb3RDb250ZXh0IGlzIG1pc3NpbmcuIE1lbnUgZ3JvdXAgcGFydHMgbXVzdCBiZSB1c2VkIHdpdGhpbiA8TWVudS5Hcm91cD4uXCIpO3JldHVybiBlfSgpO3JldHVybiBGKCgpPT4obChpKSwoKT0+e2wodm9pZCAwKX0pLFtsLGldKSx0aihcImRpdlwiLGUse3JlZjpuLHByb3BzOntpZDppLHJvbGU6XCJwcmVzZW50YXRpb25cIiwuLi5hfX0pfSksb3k9e3R5cGU6XCJyZWd1bGFyLWl0ZW1cIn0sb3g9Qy5tZW1vKEMuZm9yd2FyZFJlZihmdW5jdGlvbihlLG4pe2xldHtjbGFzc05hbWU6dCxjbG9zZU9uQ2xpY2s6cj0hMCxkaXNhYmxlZDpvPSExLGhpZ2hsaWdodGVkOmEsaWQ6aSxtZW51RXZlbnRzOmwsaXRlbVByb3BzOnMscmVuZGVyOmMsYWxsb3dNb3VzZVVwVHJpZ2dlclJlZjp1LHR5cGluZ1JlZjpkLG5hdGl2ZUJ1dHRvbjpmLC4uLnB9PWUse2dldEl0ZW1Qcm9wczpoLGl0ZW1SZWY6Z309ZnVuY3Rpb24oZSl7bGV0e2Nsb3NlT25DbGljazpuLGRpc2FibGVkOnQ9ITEsaGlnaGxpZ2h0ZWQ6cixpZDpvLG1lbnVFdmVudHM6YSxhbGxvd01vdXNlVXBUcmlnZ2VyUmVmOmksdHlwaW5nUmVmOmwsbmF0aXZlQnV0dG9uOnMsaXRlbU1ldGFkYXRhOmN9PWUsdT1DLnVzZVJlZihudWxsKSx7Z2V0QnV0dG9uUHJvcHM6ZCxidXR0b25SZWY6Zn09dHEoe2Rpc2FibGVkOnQsZm9jdXNhYmxlV2hlbkRpc2FibGVkOiEwLG5hdGl2ZTpzfSkscD1DLnVzZUNhbGxiYWNrKGU9PnRjKHtpZDpvLHJvbGU6XCJtZW51aXRlbVwiLHRhYkluZGV4OnI/MDotMSxvbk1vdXNlRW50ZXIoKXtcInN1Ym1lbnUtdHJpZ2dlclwiPT09Yy50eXBlJiZjLnNldEFjdGl2ZSgpfSxvbktleVVwOmU9PntcIiBcIj09PWUua2V5JiZsLmN1cnJlbnQmJmUucHJldmVudEJhc2VVSUhhbmRsZXIoKX0sb25DbGljazplPT57biYmYS5lbWl0KFwiY2xvc2VcIix7ZG9tRXZlbnQ6ZSxyZWFzb246XCJpdGVtLXByZXNzXCJ9KX0sb25Nb3VzZVVwOigpPT57dS5jdXJyZW50JiZpLmN1cnJlbnQmJlwicmVndWxhci1pdGVtXCI9PT1jLnR5cGUmJnUuY3VycmVudC5jbGljaygpfX0sZSxkKSxbbyxyLGQsbCxuLGEsaSxjXSksaD10Yih1LGYpO3JldHVybiBDLnVzZU1lbW8oKCk9Pih7Z2V0SXRlbVByb3BzOnAsaXRlbVJlZjpofSksW3AsaF0pfSh7Y2xvc2VPbkNsaWNrOnIsZGlzYWJsZWQ6byxoaWdobGlnaHRlZDphLGlkOmksbWVudUV2ZW50czpsLGFsbG93TW91c2VVcFRyaWdnZXJSZWY6dSx0eXBpbmdSZWY6ZCxuYXRpdmVCdXR0b246ZixpdGVtTWV0YWRhdGE6b3l9KTtyZXR1cm4gdGooXCJkaXZcIixlLHtzdGF0ZTpDLnVzZU1lbW8oKCk9Pih7ZGlzYWJsZWQ6byxoaWdobGlnaHRlZDphfSksW28sYV0pLHJlZjpbZyxuXSxwcm9wczpbcyxwLGhdfSl9KSksb3c9Qy5mb3J3YXJkUmVmKGZ1bmN0aW9uKGUsbil7bGV0e2lkOnQsbGFiZWw6cixuYXRpdmVCdXR0b246bz0hMSwuLi5hfT1lLGk9Qy51c2VSZWYobnVsbCkscz10RSh7bGFiZWw6cn0pLGM9dGIobixzLnJlZixpKSx7aXRlbVByb3BzOnUsYWN0aXZlSW5kZXg6ZCxhbGxvd01vdXNlVXBUcmlnZ2VyUmVmOmYsdHlwaW5nUmVmOnB9PW4wKCksaD1vdih0KSxnPXMuaW5kZXg9PT1kLHtldmVudHM6bX09VygpO3JldHVybigwLGwuanN4KShveCx7Li4uYSxpZDpoLHJlZjpjLGhpZ2hsaWdodGVkOmcsbWVudUV2ZW50czptLGl0ZW1Qcm9wczp1LGFsbG93TW91c2VVcFRyaWdnZXJSZWY6Zix0eXBpbmdSZWY6cCxuYXRpdmVCdXR0b246b30pfSk7dmFyIG9qPVwiX19uZXh0X2J1aWx0aW5fX1wiO2Z1bmN0aW9uIG9rKGUpe3JldHVybiBlLnJlcGxhY2UobmV3IFJlZ0V4cChcIl5cIi5jb25jYXQob2opKSxcIlwiKS5yZXBsYWNlKG5ldyBSZWdFeHAoXCJcIi5jb25jYXQoXCJAYm91bmRhcnlcIixcIiRcIikpLFwiXCIpfXZhciBvQT1cImJvdW5kYXJ5OlwiO2Z1bmN0aW9uIG9PKGUpe3JldHVybiBlLnN0YXJ0c1dpdGgob0EpfXZhciBvQz10KFwiLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9jb21wb25lbnRzL2Vycm9ycy9kZXYtdG9vbHMtaW5kaWNhdG9yL3V0aWxzLnRzXCIpO2Z1bmN0aW9uIG9TKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiBvRShlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHI7cj10W25dLG4gaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVtuXT1yfSl9cmV0dXJuIGV9ZnVuY3Rpb24gb18oZSxuKXtyZXR1cm4gbj1udWxsIT1uP246e30sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSxlfWZ1bmN0aW9uIG9QKGUsbil7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLCFufHxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShlLG4pfHxmdW5jdGlvbihlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBvUyhlLG4pO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20odCk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiBvUyhlLG4pfX0oZSxuKXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX12YXIgb3o9ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KGUpLHQ9MDt0PGU7dCsrKW5bdF09YXJndW1lbnRzW3RdO3JldHVybiBmdW5jdGlvbihlKXtuLmZvckVhY2goZnVuY3Rpb24obil7XCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uKGUpOm4mJihuLmN1cnJlbnQ9ZSl9KX19O2Z1bmN0aW9uIG9MKGUpe3ZhciBuLHQscj1lLm5vZGVTdGF0ZSxvPWUuYm91bmRhcmllcyxhPXIucGFnZVBhdGgsaT1yLmJvdW5kYXJ5VHlwZSxzPXIuc2V0Qm91bmRhcnlUeXBlLGM9b1AoKDAsQy51c2VTdGF0ZSkoITEpLDIpLHU9Y1swXSxkPWNbMV0sZj1vUCgoMCxDLnVzZVN0YXRlKShmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwibmV4dGpzLXBvcnRhbFwiKS5zaGFkb3dSb290fSksMSlbMF0scD0oMCxDLnVzZVJlZikoZiksaD0oMCxDLnVzZVJlZikobnVsbCksZz0oMCxDLnVzZVJlZikobnVsbCk7KDAsb0MuTzgpKGcsaCx1LGZ1bmN0aW9uKCl7ZCghMSl9LG51bGw9PShuPWguY3VycmVudCk/dm9pZCAwOm4ub3duZXJEb2N1bWVudCk7dmFyIG09T2JqZWN0LnZhbHVlcyhvKS5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZX0pLHY9bT9udWxsPT0odD1tLnNwbGl0KFwiLlwiKSk/dm9pZCAwOnQucG9wKCk6XCJqc1wiLGI9KDAsQy51c2VNZW1vKShmdW5jdGlvbigpe3JldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMobykubWFwKGZ1bmN0aW9uKGUpe3ZhciBuPW9QKGUsMiksdD1uWzBdLHI9b2soKG5bMV18fFwiXCIpLnNwbGl0KFwiL1wiKS5wb3AoKXx8XCJcIi5jb25jYXQodCxcIi5cIikuY29uY2F0KHYpKTtyZXR1cm5bdCxyXX0pKX0sW28sdl0pLHk9KGF8fFwiXCIpLnNwbGl0KFwiL1wiKS5wb3AoKXx8XCJcIix4PW9rKGk/XCJwYWdlLlwiLmNvbmNhdCh2KTp5fHxcInBhZ2UuXCIuY29uY2F0KHYpKSx3PVt7bGFiZWw6Yi5sb2FkaW5nLHZhbHVlOlwibG9hZGluZ1wiLGljb246KDAsbC5qc3gpKG9ULHt9KSxkaXNhYmxlZDohby5sb2FkaW5nfSx7bGFiZWw6Yi5lcnJvcix2YWx1ZTpcImVycm9yXCIsaWNvbjooMCxsLmpzeCkob1Ise30pLGRpc2FibGVkOiFvLmVycm9yfSx7bGFiZWw6YltcIm5vdC1mb3VuZFwiXSx2YWx1ZTpcIm5vdC1mb3VuZFwiLGljb246KDAsbC5qc3gpKG9OLHt9KSxkaXNhYmxlZDohb1tcIm5vdC1mb3VuZFwiXX1dLGo9e2xhYmVsOmk/XCJSZXNldFwiOngsdmFsdWU6XCJyZXNldFwiLGljb246KDAsbC5qc3gpKG9ELHt9KSxkaXNhYmxlZDpudWxsPT09aX0saz0oMCxDLnVzZUNhbGxiYWNrKShmdW5jdGlvbihlKXt2YXIgbj1uZXcgVVJMU2VhcmNoUGFyYW1zKHtmaWxlOmUuZmlsZVBhdGgsaXNBcHBSZWxhdGl2ZVBhdGg6XCIxXCJ9KTtmZXRjaChcIlwiLmNvbmNhdChwcm9jZXNzLmVudi5fX05FWFRfUk9VVEVSX0JBU0VQQVRIfHxcIlwiLFwiL19fbmV4dGpzX2xhdW5jaC1lZGl0b3I/XCIpLmNvbmNhdChuLnRvU3RyaW5nKCkpKS5jYXRjaChjb25zb2xlLndhcm4pfSxbXSksQT0oMCxDLnVzZUNhbGxiYWNrKShmdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZVwibm90LWZvdW5kXCI6Y2FzZVwibG9hZGluZ1wiOmNhc2VcImVycm9yXCI6cyhlKTticmVhaztjYXNlXCJyZXNldFwiOnMobnVsbCk7YnJlYWs7Y2FzZVwib3Blbi1lZGl0b3JcIjphJiZrKHtmaWxlUGF0aDphfSl9fSxbcyxhLGtdKSxPPSgwLEMudXNlTWVtbykoZnVuY3Rpb24oKXtyZXR1cm5cImxheW91dFwiIT09ci50eXBlJiZcInRlbXBsYXRlXCIhPT1yLnR5cGUmJk9iamVjdC52YWx1ZXMobykuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9PWV9KX0sW3IudHlwZSxvXSk7cmV0dXJuKDAsbC5qc3hzKSh0dix7ZGVsYXk6MCxtb2RhbDohMSxvcGVuOnUsb25PcGVuQ2hhbmdlOmQsY2hpbGRyZW46WygwLGwuanN4KSh0Vyx7Y2xhc3NOYW1lOlwic2VnbWVudC1ib3VuZGFyeS10cmlnZ2VyXCIsXCJkYXRhLW5leHRqcy1kZXYtb3ZlcmxheS1zZWdtZW50LWJvdW5kYXJ5LXRyaWdnZXItYnV0dG9uXCI6ITAscmVuZGVyOmZ1bmN0aW9uKGUpe3ZhciBuPW96KGUucmVmLGgpO3JldHVybigwLGwuanN4KShvTSxvXyhvRSh7fSxlKSx7cmVmOm59KSl9LGRpc2FibGVkOiFPfSksKDAsbC5qc3gpKHJrLHtjb250YWluZXI6cCxjaGlsZHJlbjooMCxsLmpzeCkob2Use2NsYXNzTmFtZTpcInNlZ21lbnQtYm91bmRhcnktZHJvcGRvd24tcG9zaXRpb25lclwiLHNpZGU6XCJib3R0b21cIixhbGlnbjpcImNlbnRlclwiLHNpZGVPZmZzZXQ6NixhcnJvd1BhZGRpbmc6OCxyZWY6ZyxjaGlsZHJlbjooMCxsLmpzeHMpKG9oLHtjbGFzc05hbWU6XCJzZWdtZW50LWJvdW5kYXJ5LWRyb3Bkb3duXCIsY2hpbGRyZW46WygwLGwuanN4cykob20se2NoaWxkcmVuOlsoMCxsLmpzeCkob2Ise2NsYXNzTmFtZTpcInNlZ21lbnQtYm91bmRhcnktZ3JvdXAtbGFiZWxcIixjaGlsZHJlbjpcIlRvZ2dsZSBPdmVycmlkZXNcIn0pLHcubWFwKGZ1bmN0aW9uKGUpe3JldHVybigwLGwuanN4cykob3cse2NsYXNzTmFtZTpcInNlZ21lbnQtYm91bmRhcnktZHJvcGRvd24taXRlbVwiLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gQShlLnZhbHVlKX0sZGlzYWJsZWQ6ZS5kaXNhYmxlZCxjaGlsZHJlbjpbZS5pY29uLGUubGFiZWxdfSxlLnZhbHVlKX0pXX0pLCgwLGwuanN4KShvbSx7Y2hpbGRyZW46KDAsbC5qc3hzKShvdyx7Y2xhc3NOYW1lOlwic2VnbWVudC1ib3VuZGFyeS1kcm9wZG93bi1pdGVtXCIsb25DbGljazpmdW5jdGlvbigpe3JldHVybiBBKGoudmFsdWUpfSxkaXNhYmxlZDpqLmRpc2FibGVkLGNoaWxkcmVuOltqLmljb24sai5sYWJlbF19LGoudmFsdWUpfSldfSl9KX0pXX0pfWZ1bmN0aW9uIG9UKCl7cmV0dXJuKDAsbC5qc3hzKShcInN2Z1wiLHt3aWR0aDpcIjIwcHhcIixoZWlnaHQ6XCIyMHB4XCIsdmlld0JveDpcIjAgMCAyMCAyMFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLGNoaWxkcmVuOlsoMCxsLmpzeCkoXCJnXCIse2NsaXBQYXRoOlwidXJsKCNjbGlwMF8yNzU5XzE4NjYpXCIsY2hpbGRyZW46KDAsbC5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTEwIDMuNUMxMy41ODk5IDMuNSAxNi41IDYuNDEwMTUgMTYuNSAxMEMxNi41IDEzLjU4OTkgMTMuNTg5OSAxNi41IDEwIDE2LjVDNi40MTAxNSAxNi41IDMuNSAxMy41ODk5IDMuNSAxMEMzLjUgNi40MTAxNSA2LjQxMDE1IDMuNSAxMCAzLjVaTTIgMTBDMiAxNC40MTgzIDUuNTgxNzIgMTggMTAgMThDMTQuNDE4MyAxOCAxOCAxNC40MTgzIDE4IDEwQzE4IDUuNTgxNzIgMTQuNDE4MyAyIDEwIDJDNS41ODE3MiAyIDIgNS41ODE3MiAyIDEwWk0xMC43NSA5LjYyNDAyVjZIOS4yNVY5Ljg3NUM5LjI1IDEwLjE4OTggOS4zOTg1OCAxMC40ODYgOS42NTAzOSAxMC42NzQ4TDExLjU0OTggMTIuMDk5NkwxMi4xNTA0IDEyLjU0OThMMTMuMDQ5OCAxMS4zNDk2TDEyLjQ1MDIgMTAuOTAwNEwxMC43NSA5LjYyNDAyWlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSksKDAsbC5qc3gpKFwiZGVmc1wiLHtjaGlsZHJlbjooMCxsLmpzeCkoXCJjbGlwUGF0aFwiLHtpZDpcImNsaXAwXzI3NTlfMTg2NlwiLGNoaWxkcmVuOigwLGwuanN4KShcInJlY3RcIix7d2lkdGg6XCIxNlwiLGhlaWdodDpcIjE2XCIsZmlsbDpcIndoaXRlXCIsdHJhbnNmb3JtOlwidHJhbnNsYXRlKDIgMilcIn0pfSl9KV19KX1mdW5jdGlvbiBvUigpe3JldHVybigwLGwuanN4cykoXCJzdmdcIix7d2lkdGg6XCIyMFwiLGhlaWdodDpcIjIwXCIsdmlld0JveDpcIjAgMCAyMCAyMFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLGNoaWxkcmVuOlsoMCxsLmpzeCkoXCJnXCIse2NsaXBQYXRoOlwidXJsKCNjbGlwMF8yNzU5XzE4ODEpXCIsY2hpbGRyZW46KDAsbC5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTMuNSA3LjMwNzYyVjEyLjY5MjRMNy4zMDc2MiAxNi41SDEyLjY5MjRMMTYuNSAxMi42OTI0VjcuMzA3NjJMMTIuNjkyNCAzLjVINy4zMDc2MkwzLjUgNy4zMDc2MlpNMTggMTIuODk5NEwxNy45OTUxIDEyLjk5OEMxNy45NzI0IDEzLjIyNzEgMTcuODcxMiAxMy40NDIzIDE3LjcwNyAxMy42MDY0TDEzLjYwNjQgMTcuNzA3TDEzLjUzMzIgMTcuNzczNEMxMy4zODA2IDE3Ljg5ODUgMTMuMTk0NCAxNy45NzU3IDEyLjk5OCAxNy45OTUxTDEyLjg5OTQgMThINy4xMDA1OUw3LjAwMTk1IDE3Ljk5NTFDNi44MDU2MiAxNy45NzU3IDYuNjE5NCAxNy44OTg1IDYuNDY2OCAxNy43NzM0TDYuMzkzNTUgMTcuNzA3TDIuMjkyOTcgMTMuNjA2NEMyLjEyODgzIDEzLjQ0MjMgMi4wMjc1NiAxMy4yMjcxIDIuMDA0ODggMTIuOTk4TDIgMTIuODk5NFY3LjEwMDU5QzIgNi44MzUzOSAyLjEwNTQ2IDYuNTgxMDkgMi4yOTI5NyA2LjM5MzU1TDYuMzkzNTUgMi4yOTI5N0M2LjU1NzcxIDIuMTI4ODMgNi43NzI5NCAyLjAyNzU2IDcuMDAxOTUgMi4wMDQ4OEw3LjEwMDU5IDJIMTIuODk5NEwxMi45OTggMi4wMDQ4OEMxMy4yMjcxIDIuMDI3NTYgMTMuNDQyMyAyLjEyODgzIDEzLjYwNjQgMi4yOTI5N0wxNy43MDcgNi4zOTM1NUMxNy44OTQ1IDYuNTgxMDkgMTggNi44MzUzOSAxOCA3LjEwMDU5VjEyLjg5OTRaTTkuMjUgNS43NUgxMC43NUwxMC43NSAxMC43NUg5LjI1TDkuMjUgNS43NVpNMTAgMTRDMTAuNTUyMyAxNCAxMSAxMy41NTIzIDExIDEzQzExIDEyLjQ0NzcgMTAuNTUyMyAxMiAxMCAxMkM5LjQ0NzcyIDEyIDkgMTIuNDQ3NyA5IDEzQzkgMTMuNTUyMyA5LjQ0NzcyIDE0IDEwIDE0WlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSksKDAsbC5qc3gpKFwiZGVmc1wiLHtjaGlsZHJlbjooMCxsLmpzeCkoXCJjbGlwUGF0aFwiLHtpZDpcImNsaXAwXzI3NTlfMTg4MVwiLGNoaWxkcmVuOigwLGwuanN4KShcInJlY3RcIix7d2lkdGg6XCIxNlwiLGhlaWdodDpcIjE2XCIsZmlsbDpcIndoaXRlXCIsdHJhbnNmb3JtOlwidHJhbnNsYXRlKDIgMilcIn0pfSl9KV19KX1mdW5jdGlvbiBvTigpe3JldHVybigwLGwuanN4KShcInN2Z1wiLHt3aWR0aDpcIjIwcHhcIixoZWlnaHQ6XCIyMHB4XCIsdmlld0JveDpcIjAgMCAyMCAyMFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLGNoaWxkcmVuOigwLGwuanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk0xMC41NTg2IDIuNUMxMS4xMzQxIDIuNTAwMDQgMTEuNjU4OCAyLjgyOTQgMTEuOTA5MSAzLjM0NzY2TDE3LjgwNzYgMTUuNTY1NEMxOC4xMjc4IDE2LjIyOTIgMTcuNjQ0MiAxNi45OTk3IDE2LjkwNzIgMTdIMy4wOTI3NEMyLjM1NTc0IDE2Ljk5OTcgMS44NzIxIDE2LjIyOTIgMi4xOTIzNSAxNS41NjU0TDguMDkwNzkgMy4zNDc2NkM4LjM0MTA5IDIuODI5NCA4Ljg2NTgzIDIuNTAwMDQgOS40NDEzNyAyLjVIMTAuNTU4NlpNMy44OTA1OSAxNS41SDE2LjEwOTNMMTAuNTU4NiA0SDkuNDQxMzdMMy44OTA1OSAxNS41Wk05LjI0OTk3IDYuNzVIMTAuNzVMMTAuNzUgMTAuNzVIOS4yNDk5N0w5LjI0OTk3IDYuNzVaTTkuOTk5OTcgMTRDMTAuNTUyMyAxNCAxMSAxMy41NTIzIDExIDEzQzExIDEyLjQ0NzcgMTAuNTUyMyAxMiA5Ljk5OTk3IDEyQzkuNDQ3NjggMTIgOC45OTk5NyAxMi40NDc3IDguOTk5OTcgMTNDOC45OTk5NyAxMy41NTIzIDkuNDQ3NjggMTQgOS45OTk5NyAxNFpcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KX0pfWZ1bmN0aW9uIG9EKCl7cmV0dXJuKDAsbC5qc3gpKFwic3ZnXCIse3dpZHRoOlwiMjBcIixoZWlnaHQ6XCIyMFwiLHZpZXdCb3g6XCIwIDAgMjAgMjBcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixjaGlsZHJlbjooMCxsLmpzeCkoXCJwYXRoXCIse2Q6XCJNOS45NjQ4NCAzQzEzLjg0NjMgMy4wMDAxOCAxNyA2LjEzMDEyIDE3IDEwQzE3IDEzLjg2OTkgMTMuODQ2MyAxNi45OTk4IDkuOTY0ODQgMTdDNy42MjQwNCAxNyA1LjU0ODc3IDE1Ljg2MTcgNC4yNzA1MSAxNC4xMTIzTDMuODI4MTIgMTMuNTA2OEw1LjAzOTA2IDEyLjYyMjFMNS40ODE0NSAxMy4yMjc1QzYuNDg4MTUgMTQuNjA1MyA4LjEyMDkyIDE1LjUgOS45NjQ4NCAxNS41QzEzLjAyNTkgMTUuNDk5OCAxNS41IDEzLjAzMzUgMTUuNSAxMEMxNS41IDYuOTY2NTQgMTMuMDI1OSA0LjUwMDE4IDkuOTY0ODQgNC41QzcuNDI5MDUgNC41IDUuMjk1NDQgNi4xOTQyOSA0LjYzODY3IDguNUg4VjEwSDIuNzVDMi4zMzU3OSAxMCAyIDkuNjY0MjEgMiA5LjI1VjRIMy41VjcuMjM3M0M0LjU3NzgxIDQuNzQzNzYgNy4wNjc0OSAzIDkuOTY0ODQgM1pcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KX0pfWZ1bmN0aW9uIG9CKGUpe3JldHVybigwLGwuanN4KShcInN2Z1wiLG9fKG9FKHtzdHJva2VMaW5lam9pbjpcInJvdW5kXCIsdmlld0JveDpcIjAgMCAxNiAxNlwifSxlKSx7Y2hpbGRyZW46KDAsbC5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTguNzA3MSAyLjM5NjQ0QzguMzE2NTggMi4wMDU5MiA3LjY4MzQxIDIuMDA1OTIgNy4yOTI4OSAyLjM5NjQ0TDQuNDY5NjYgNS4yMTk2NkwzLjkzOTMzIDUuNzQ5OTlMNC45OTk5OSA2LjgxMDY1TDUuNTMwMzIgNi4yODAzMkw3Ljk5OTk5IDMuODEwNjVMMTAuNDY5NyA2LjI4MDMyTDExIDYuODEwNjVMMTIuMDYwNyA1Ljc0OTk5TDExLjUzMDMgNS4yMTk2Nkw4LjcwNzEgMi4zOTY0NFpNNS41MzAzMiA5LjcxOTY2TDQuOTk5OTkgOS4xODkzM0wzLjkzOTMzIDEwLjI1TDQuNDY5NjYgMTAuNzgwM0w3LjI5Mjg5IDEzLjYwMzVDNy42ODM0MSAxMy45OTQxIDguMzE2NTggMTMuOTk0MSA4LjcwNzEgMTMuNjAzNUwxMS41MzAzIDEwLjc4MDNMMTIuMDYwNyAxMC4yNUwxMSA5LjE4OTMzTDEwLjQ2OTcgOS43MTk2Nkw3Ljk5OTk5IDEyLjE4OTNMNS41MzAzMiA5LjcxOTY2WlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSkpfWZ1bmN0aW9uIG9NKGUpe3JldHVybigwLGwuanN4KShcImJ1dHRvblwiLG9fKG9FKHt9LGUpLHtjaGlsZHJlbjooMCxsLmpzeCkoXCJzcGFuXCIse2NsYXNzTmFtZTpcInNlZ21lbnQtYm91bmRhcnktdHJpZ2dlci10ZXh0XCIsY2hpbGRyZW46KDAsbC5qc3gpKG9CLHtjbGFzc05hbWU6XCJwbHVzLWljb25cIn0pfSl9KSl9bGV0IG9JPUMuY3JlYXRlQ29udGV4dCh7aGFzUHJvdmlkZXI6ITEsdGltZW91dE1zOjAsZGVsYXlSZWY6e2N1cnJlbnQ6MH0saW5pdGlhbERlbGF5UmVmOntjdXJyZW50OjB9LHRpbWVvdXQ6bmV3IGVqLGN1cnJlbnRJZFJlZjp7Y3VycmVudDpudWxsfSxjdXJyZW50Q29udGV4dFJlZjp7Y3VycmVudDpudWxsfX0pO2Z1bmN0aW9uIG9IKGUpe2xldHtjaGlsZHJlbjpuLGRlbGF5OnQsdGltZW91dE1zOnI9MH09ZSxvPUMudXNlUmVmKHQpLGE9Qy51c2VSZWYodCksaT1DLnVzZVJlZihudWxsKSxzPUMudXNlUmVmKG51bGwpLGM9ZWsoKTtyZXR1cm4oMCxsLmpzeCkob0kuUHJvdmlkZXIse3ZhbHVlOkMudXNlTWVtbygoKT0+KHtoYXNQcm92aWRlcjohMCxkZWxheVJlZjpvLGluaXRpYWxEZWxheVJlZjphLGN1cnJlbnRJZFJlZjppLHRpbWVvdXRNczpyLGN1cnJlbnRDb250ZXh0UmVmOnMsdGltZW91dDpjfSksW3IsY10pLGNoaWxkcmVuOm59KX1sZXQgb0Y9Qy5jcmVhdGVDb250ZXh0KHZvaWQgMCksb1U9ZnVuY3Rpb24oZSl7bGV0e2RlbGF5Om4sY2xvc2VEZWxheTp0LHRpbWVvdXQ6cj00MDB9PWUsbz1DLnVzZU1lbW8oKCk9Pih7ZGVsYXk6bixjbG9zZURlbGF5OnR9KSxbbix0XSk7cmV0dXJuKDAsbC5qc3gpKG9GLlByb3ZpZGVyLHt2YWx1ZTpvLGNoaWxkcmVuOigwLGwuanN4KShvSCx7ZGVsYXk6e29wZW46bixjbG9zZTp0fSx0aW1lb3V0TXM6cixjaGlsZHJlbjplLmNoaWxkcmVufSl9KX0sb1Y9Qy5jcmVhdGVDb250ZXh0KHZvaWQgMCk7ZnVuY3Rpb24gb3EoKXtsZXQgZT1DLnVzZUNvbnRleHQob1YpO2lmKHZvaWQgMD09PWUpdGhyb3cgRXJyb3IoXCJCYXNlIFVJOiBUb29sdGlwUm9vdENvbnRleHQgaXMgbWlzc2luZy4gVG9vbHRpcCBwYXJ0cyBtdXN0IGJlIHBsYWNlZCB3aXRoaW4gPFRvb2x0aXAuUm9vdD4uXCIpO3JldHVybiBlfWZ1bmN0aW9uIG9XKGUpe3JldHVybiBudWxsIT1lJiZudWxsIT1lLmNsaWVudFh9ZnVuY3Rpb24gbyQoZSl7bGV0e2Rpc2FibGVkOm49ITEsZGVmYXVsdE9wZW46dD0hMSxvbk9wZW5DaGFuZ2U6cixvcGVuOm8sZGVsYXk6YSxjbG9zZURlbGF5OmksaG92ZXJhYmxlOnM9ITAsdHJhY2tDdXJzb3JBeGlzOmM9XCJub25lXCIsYWN0aW9uc1JlZjp1LG9uT3BlbkNoYW5nZUNvbXBsZXRlOmR9PWUsZj1hPz82MDAscD1pPz8wLFtoLGddPUMudXNlU3RhdGUobnVsbCksW20sdl09Qy51c2VTdGF0ZShudWxsKSxbYix5XT1DLnVzZVN0YXRlKCkseD1DLnVzZVJlZihudWxsKSxbdyxqXT1uNCh7Y29udHJvbGxlZDpvLGRlZmF1bHQ6dCxuYW1lOlwiVG9vbHRpcFwiLHN0YXRlOlwib3BlblwifSksaz1UKHIpLEE9VCgoZSxuLHQpPT57bGV0IHI9XCJ0cmlnZ2VyLWhvdmVyXCI9PT10LG89ZSYmXCJ0cmlnZ2VyLWZvY3VzXCI9PT10LGE9IWUmJihcInRyaWdnZXItcHJlc3NcIj09PXR8fFwiZXNjYXBlLWtleVwiPT09dCk7ZnVuY3Rpb24gaSgpe2soZSxuLHQpLGooZSl9cj9FLmZsdXNoU3luYyhpKTppKCksb3x8YT95KG8/XCJmb2N1c1wiOlwiZGlzbWlzc1wiKTpcInRyaWdnZXItaG92ZXJcIj09PXQmJnkodm9pZCAwKX0pO3cmJm4mJkEoITEsdm9pZCAwLFwiZGlzYWJsZWRcIik7bGV0e21vdW50ZWQ6TyxzZXRNb3VudGVkOlMsdHJhbnNpdGlvblN0YXR1czpffT1uMih3KSxQPVQoKCk9PntTKCExKSxkPy4oITEpfSk7bjUoe2VuYWJsZWQ6IXUsb3Blbjp3LHJlZjp4LG9uQ29tcGxldGUoKXt3fHxQKCl9fSksQy51c2VJbXBlcmF0aXZlSGFuZGxlKHUsKCk9Pih7dW5tb3VudDpQfSksW1BdKTtsZXQgej1ZKHtlbGVtZW50czp7cmVmZXJlbmNlOmgsZmxvYXRpbmc6bX0sb3Blbjp3LG9uT3BlbkNoYW5nZShlLG4sdCl7QShlLG4sdHIodCkpfX0pLEw9Qy51c2VDb250ZXh0KG9GKSx7ZGVsYXlSZWY6Uixpc0luc3RhbnRQaGFzZTpOLGhhc1Byb3ZpZGVyOkR9PWZ1bmN0aW9uKGUsbj17fSl7bGV0e29wZW46dCxvbk9wZW5DaGFuZ2U6cixmbG9hdGluZ0lkOm99PWUse2VuYWJsZWQ6YT0hMH09bix7Y3VycmVudElkUmVmOmksZGVsYXlSZWY6bCx0aW1lb3V0TXM6cyxpbml0aWFsRGVsYXlSZWY6YyxjdXJyZW50Q29udGV4dFJlZjp1LGhhc1Byb3ZpZGVyOmQsdGltZW91dDpmfT1DLnVzZUNvbnRleHQob0kpLFtwLGhdPUMudXNlU3RhdGUoITEpO3JldHVybiBGKCgpPT57ZnVuY3Rpb24gZSgpe2goITEpLHUuY3VycmVudD8uc2V0SXNJbnN0YW50UGhhc2UoITEpLGkuY3VycmVudD1udWxsLHUuY3VycmVudD1udWxsLGwuY3VycmVudD1jLmN1cnJlbnR9aWYoYSYmaS5jdXJyZW50JiYhdCYmaS5jdXJyZW50PT09byl7aWYoaCghMSkscylyZXR1cm4gZi5zdGFydChzLGUpLCgpPT57Zi5jbGVhcigpfTtlKCl9fSxbYSx0LG8saSxsLHMsYyx1LGZdKSxGKCgpPT57aWYoIWF8fCF0KXJldHVybjtsZXQgZT11LmN1cnJlbnQsbj1pLmN1cnJlbnQ7dS5jdXJyZW50PXtvbk9wZW5DaGFuZ2U6cixzZXRJc0luc3RhbnRQaGFzZTpofSxpLmN1cnJlbnQ9byxsLmN1cnJlbnQ9e29wZW46MCxjbG9zZTplNChjLmN1cnJlbnQsXCJjbG9zZVwiKX0sbnVsbCE9PW4mJm4hPT1vPyhmLmNsZWFyKCksaCghMCksZT8uc2V0SXNJbnN0YW50UGhhc2UoITApLGU/Lm9uT3BlbkNoYW5nZSghMSkpOihoKCExKSxlPy5zZXRJc0luc3RhbnRQaGFzZSghMSkpfSxbYSx0LG8scixpLGwscyxjLHUsZl0pLEYoKCk9PigpPT57dS5jdXJyZW50PW51bGx9LFt1XSksQy51c2VNZW1vKCgpPT4oe2hhc1Byb3ZpZGVyOmQsZGVsYXlSZWY6bCxpc0luc3RhbnRQaGFzZTpwfSksW2QsbCxwXSl9KHopLEI9Tj9cImRlbGF5XCI6YixNPWUzKHose2VuYWJsZWQ6IW4sbW91c2VPbmx5OiEwLG1vdmU6ITEsaGFuZGxlQ2xvc2U6cyYmXCJib3RoXCIhPT1jP2U3KCk6bnVsbCxyZXN0TXMoKXtsZXQgZT1MPy5kZWxheSxuPVwib2JqZWN0XCI9PXR5cGVvZiBSLmN1cnJlbnQ/Ui5jdXJyZW50Lm9wZW46dm9pZCAwLHQ9ZjtyZXR1cm4gRCYmKHQ9MCE9PW4/YT8/ZT8/ZjowKSx0fSxkZWxheSgpe2xldCBlPVwib2JqZWN0XCI9PXR5cGVvZiBSLmN1cnJlbnQ/Ui5jdXJyZW50LmNsb3NlOnZvaWQgMCxuPXA7cmV0dXJuIG51bGw9PWkmJkQmJihuPWUpLHtjbG9zZTpufX19KSxJPW5uKHose2VuYWJsZWQ6IW59KSx7Z2V0UmVmZXJlbmNlUHJvcHM6SCxnZXRGbG9hdGluZ1Byb3BzOlV9PW5LKFtNLEksbmYoeix7ZW5hYmxlZDohbixyZWZlcmVuY2VQcmVzczohMH0pLGZ1bmN0aW9uKGUsbj17fSl7bGV0e29wZW46dCxkYXRhUmVmOnIsZWxlbWVudHM6e2Zsb2F0aW5nOm8sZG9tUmVmZXJlbmNlOmF9LHJlZnM6aX09ZSx7ZW5hYmxlZDpsPSEwLGF4aXM6cz1cImJvdGhcIix4OmM9bnVsbCx5OnU9bnVsbH09bixkPUMudXNlUmVmKCExKSxmPUMudXNlUmVmKG51bGwpLFtwLGhdPUMudXNlU3RhdGUoKSxbZyxtXT1DLnVzZVN0YXRlKFtdKSx2PVQoKGUsbik9PntpZighZC5jdXJyZW50JiYoIXIuY3VycmVudC5vcGVuRXZlbnR8fG9XKHIuY3VycmVudC5vcGVuRXZlbnQpKSl7dmFyIHQ7bGV0IG8sbCxjO2kuc2V0UG9zaXRpb25SZWZlcmVuY2UoKHQ9e3g6ZSx5Om4sYXhpczpzLGRhdGFSZWY6cixwb2ludGVyVHlwZTpwfSxvPW51bGwsbD1udWxsLGM9ITEse2NvbnRleHRFbGVtZW50OmF8fHZvaWQgMCxnZXRCb3VuZGluZ0NsaWVudFJlY3QoKXtsZXQgZT1hPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKXx8e3dpZHRoOjAsaGVpZ2h0OjAseDowLHk6MH0sbj1cInhcIj09PXQuYXhpc3x8XCJib3RoXCI9PT10LmF4aXMscj1cInlcIj09PXQuYXhpc3x8XCJib3RoXCI9PT10LmF4aXMsaT1bXCJtb3VzZWVudGVyXCIsXCJtb3VzZW1vdmVcIl0uaW5jbHVkZXModC5kYXRhUmVmLmN1cnJlbnQub3BlbkV2ZW50Py50eXBlfHxcIlwiKSYmXCJ0b3VjaFwiIT09dC5wb2ludGVyVHlwZSxzPWUud2lkdGgsdT1lLmhlaWdodCxkPWUueCxmPWUueTtyZXR1cm4gbnVsbD09byYmdC54JiZuJiYobz1lLngtdC54KSxudWxsPT1sJiZ0LnkmJnImJihsPWUueS10LnkpLGQtPW98fDAsZi09bHx8MCxzPTAsdT0wLCFjfHxpPyhzPVwieVwiPT09dC5heGlzP2Uud2lkdGg6MCx1PVwieFwiPT09dC5heGlzP2UuaGVpZ2h0OjAsZD1uJiZudWxsIT10Lng/dC54OmQsZj1yJiZudWxsIT10Lnk/dC55OmYpOmMmJiFpJiYodT1cInhcIj09PXQuYXhpcz9lLmhlaWdodDp1LHM9XCJ5XCI9PT10LmF4aXM/ZS53aWR0aDpzKSxjPSEwLHt3aWR0aDpzLGhlaWdodDp1LHg6ZCx5OmYsdG9wOmYscmlnaHQ6ZCtzLGJvdHRvbTpmK3UsbGVmdDpkfX19KSl9fSksYj1UKGU9PntudWxsPT1jJiZudWxsPT11JiYodD9mLmN1cnJlbnR8fG0oW10pOnYoZS5jbGllbnRYLGUuY2xpZW50WSkpfSkseT1lSShwKT9vOnQseD1DLnVzZUNhbGxiYWNrKCgpPT57aWYoIXl8fCFsfHxudWxsIT1jfHxudWxsIT11KXJldHVybjtsZXQgZT1RKG8pO2Z1bmN0aW9uIG4odCl7ZVkobyxlWCh0KSk/KGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLG4pLGYuY3VycmVudD1udWxsKTp2KHQuY2xpZW50WCx0LmNsaWVudFkpfWlmKCFyLmN1cnJlbnQub3BlbkV2ZW50fHxvVyhyLmN1cnJlbnQub3BlbkV2ZW50KSl7ZS5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsbik7bGV0IHQ9KCk9PntlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIixuKSxmLmN1cnJlbnQ9bnVsbH07cmV0dXJuIGYuY3VycmVudD10LHR9aS5zZXRQb3NpdGlvblJlZmVyZW5jZShhKX0sW3ksbCxjLHUsbyxyLGksYSx2XSk7Qy51c2VFZmZlY3QoKCk9PngoKSxbeCxnXSksQy51c2VFZmZlY3QoKCk9PntsJiYhbyYmKGQuY3VycmVudD0hMSl9LFtsLG9dKSxDLnVzZUVmZmVjdCgoKT0+eyFsJiZ0JiYoZC5jdXJyZW50PSEwKX0sW2wsdF0pLEYoKCk9PntsJiYobnVsbCE9Y3x8bnVsbCE9dSkmJihkLmN1cnJlbnQ9ITEsdihjLHUpKX0sW2wsYyx1LHZdKTtsZXQgdz1DLnVzZU1lbW8oKCk9PntmdW5jdGlvbiBlKGUpe2goZS5wb2ludGVyVHlwZSl9cmV0dXJue29uUG9pbnRlckRvd246ZSxvblBvaW50ZXJFbnRlcjplLG9uTW91c2VNb3ZlOmIsb25Nb3VzZUVudGVyOmJ9fSxbYl0pO3JldHVybiBDLnVzZU1lbW8oKCk9Pmw/e3JlZmVyZW5jZTp3fTp7fSxbbCx3XSl9KHose2VuYWJsZWQ6IW4mJlwibm9uZVwiIT09YyxheGlzOlwibm9uZVwiPT09Yz92b2lkIDA6Y30pXSksVj1DLnVzZU1lbW8oKCk9Pih7b3Blbjp3LHNldE9wZW46QSxtb3VudGVkOk8sc2V0TW91bnRlZDpTLHNldFRyaWdnZXJFbGVtZW50OmcscG9zaXRpb25lckVsZW1lbnQ6bSxzZXRQb3NpdGlvbmVyRWxlbWVudDp2LHBvcHVwUmVmOngsdHJpZ2dlclByb3BzOkgoKSxwb3B1cFByb3BzOlUoKSxmbG9hdGluZ1Jvb3RDb250ZXh0OnosaW5zdGFudFR5cGU6Qix0cmFuc2l0aW9uU3RhdHVzOl8sb25PcGVuQ2hhbmdlQ29tcGxldGU6ZH0pLFt3LEEsTyxTLGcsbSx2LHgsSCxVLHosQixfLGRdKSxxPUMudXNlTWVtbygoKT0+KHsuLi5WLGRlbGF5OmYsY2xvc2VEZWxheTpwLHRyYWNrQ3Vyc29yQXhpczpjLGhvdmVyYWJsZTpzfSksW1YsZixwLGMsc10pO3JldHVybigwLGwuanN4KShvVi5Qcm92aWRlcix7dmFsdWU6cSxjaGlsZHJlbjplLmNoaWxkcmVufSl9bGV0IG9aPUMuZm9yd2FyZFJlZihmdW5jdGlvbihlLG4pe2xldHtjbGFzc05hbWU6dCxyZW5kZXI6ciwuLi5vfT1lLHtvcGVuOmEsc2V0VHJpZ2dlckVsZW1lbnQ6aSx0cmlnZ2VyUHJvcHM6bH09b3EoKTtyZXR1cm4gdGooXCJidXR0b25cIixlLHtzdGF0ZTpDLnVzZU1lbW8oKCk9Pih7b3BlbjphfSksW2FdKSxyZWY6W24saV0scHJvcHM6W2wsb10sY3VzdG9tU3R5bGVIb29rTWFwcGluZzp0Rn0pfSksb1k9Qy5jcmVhdGVDb250ZXh0KHZvaWQgMCk7ZnVuY3Rpb24gb1goZSl7bGV0IG49cngoe3Jvb3Q6ZS5yb290fSk7cmV0dXJuIG4mJkUuY3JlYXRlUG9ydGFsKGUuY2hpbGRyZW4sbil9ZnVuY3Rpb24gb0soZSl7bGV0e2NoaWxkcmVuOm4sa2VlcE1vdW50ZWQ6dD0hMSxjb250YWluZXI6cn09ZSx7bW91bnRlZDpvfT1vcSgpO3JldHVybiBvfHx0PygwLGwuanN4KShvWS5Qcm92aWRlcix7dmFsdWU6dCxjaGlsZHJlbjooMCxsLmpzeCkob1gse3Jvb3Q6cixjaGlsZHJlbjpufSl9KTpudWxsfWxldCBvUT1DLmNyZWF0ZUNvbnRleHQodm9pZCAwKTtmdW5jdGlvbiBvRygpe2xldCBlPUMudXNlQ29udGV4dChvUSk7aWYodm9pZCAwPT09ZSl0aHJvdyBFcnJvcihcIkJhc2UgVUk6IFRvb2x0aXBQb3NpdGlvbmVyQ29udGV4dCBpcyBtaXNzaW5nLiBUb29sdGlwUG9zaXRpb25lciBwYXJ0cyBtdXN0IGJlIHBsYWNlZCB3aXRoaW4gPFRvb2x0aXAuUG9zaXRpb25lcj4uXCIpO3JldHVybiBlfWxldCBvSj1DLmZvcndhcmRSZWYoZnVuY3Rpb24oZSxuKXtsZXR7cmVuZGVyOnQsY2xhc3NOYW1lOnIsYW5jaG9yOm8scG9zaXRpb25NZXRob2Q6YT1cImFic29sdXRlXCIsc2lkZTppPVwidG9wXCIsYWxpZ246cz1cImNlbnRlclwiLHNpZGVPZmZzZXQ6Yz0wLGFsaWduT2Zmc2V0OnU9MCxjb2xsaXNpb25Cb3VuZGFyeTpkPVwiY2xpcHBpbmctYW5jZXN0b3JzXCIsY29sbGlzaW9uUGFkZGluZzpmPTUsYXJyb3dQYWRkaW5nOnA9NSxzdGlja3k6aD0hMSx0cmFja0FuY2hvcjpnPSEwLGNvbGxpc2lvbkF2b2lkYW5jZTptPW5hLC4uLnZ9PWUse29wZW46YixzZXRQb3NpdGlvbmVyRWxlbWVudDp5LG1vdW50ZWQ6eCxmbG9hdGluZ1Jvb3RDb250ZXh0OncsdHJhY2tDdXJzb3JBeGlzOmosaG92ZXJhYmxlOmt9PW9xKCksQT1yNCh7YW5jaG9yOm8scG9zaXRpb25NZXRob2Q6YSxmbG9hdGluZ1Jvb3RDb250ZXh0OncsbW91bnRlZDp4LHNpZGU6aSxzaWRlT2Zmc2V0OmMsYWxpZ246cyxhbGlnbk9mZnNldDp1LGNvbGxpc2lvbkJvdW5kYXJ5OmQsY29sbGlzaW9uUGFkZGluZzpmLHN0aWNreTpoLGFycm93UGFkZGluZzpwLHRyYWNrQW5jaG9yOmcsa2VlcE1vdW50ZWQ6ZnVuY3Rpb24oKXtsZXQgZT1DLnVzZUNvbnRleHQob1kpO2lmKHZvaWQgMD09PWUpdGhyb3cgRXJyb3IoXCJCYXNlIFVJOiA8VG9vbHRpcC5Qb3J0YWw+IGlzIG1pc3NpbmcuXCIpO3JldHVybiBlfSgpLGNvbGxpc2lvbkF2b2lkYW5jZTptfSksTz1DLnVzZU1lbW8oKCk9PntsZXQgZT17fTtyZXR1cm4gYiYmXCJib3RoXCIhPT1qJiZrfHwoZS5wb2ludGVyRXZlbnRzPVwibm9uZVwiKSx7cm9sZTpcInByZXNlbnRhdGlvblwiLGhpZGRlbjoheCxzdHlsZTp7Li4uQS5wb3NpdGlvbmVyU3R5bGVzLC4uLmV9fX0sW2IsaixrLHgsQS5wb3NpdGlvbmVyU3R5bGVzXSksUz1DLnVzZU1lbW8oKCk9Pih7cHJvcHM6TywuLi5BfSksW08sQV0pLEU9Qy51c2VNZW1vKCgpPT4oe29wZW46YixzaWRlOlMuc2lkZSxhbGlnbjpTLmFsaWduLGFuY2hvckhpZGRlbjpTLmFuY2hvckhpZGRlbn0pLFtiLFMuc2lkZSxTLmFsaWduLFMuYW5jaG9ySGlkZGVuXSksXz1DLnVzZU1lbW8oKCk9Pih7Li4uRSxhcnJvd1JlZjpTLmFycm93UmVmLGFycm93U3R5bGVzOlMuYXJyb3dTdHlsZXMsYXJyb3dVbmNlbnRlcmVkOlMuYXJyb3dVbmNlbnRlcmVkfSksW0UsUy5hcnJvd1JlZixTLmFycm93U3R5bGVzLFMuYXJyb3dVbmNlbnRlcmVkXSksUD10aihcImRpdlwiLGUse3N0YXRlOkUscHJvcHM6W1MucHJvcHMsdl0scmVmOltuLHldLGN1c3RvbVN0eWxlSG9va01hcHBpbmc6dFZ9KTtyZXR1cm4oMCxsLmpzeCkob1EuUHJvdmlkZXIse3ZhbHVlOl8sY2hpbGRyZW46UH0pfSksbzA9ey4uLnRWLC4uLnRUfSxvMT1DLmZvcndhcmRSZWYoZnVuY3Rpb24oZSxuKXtsZXR7Y2xhc3NOYW1lOnQscmVuZGVyOnIsLi4ub309ZSx7b3BlbjphLGluc3RhbnRUeXBlOmksdHJhbnNpdGlvblN0YXR1czpsLHBvcHVwUHJvcHM6cyxwb3B1cFJlZjpjLG9uT3BlbkNoYW5nZUNvbXBsZXRlOnV9PW9xKCkse3NpZGU6ZCxhbGlnbjpmfT1vRygpO3JldHVybiBuNSh7b3BlbjphLHJlZjpjLG9uQ29tcGxldGUoKXthJiZ1Py4oITApfX0pLHRqKFwiZGl2XCIsZSx7c3RhdGU6Qy51c2VNZW1vKCgpPT4oe29wZW46YSxzaWRlOmQsYWxpZ246ZixpbnN0YW50OmksdHJhbnNpdGlvblN0YXR1czpsfSksW2EsZCxmLGksbF0pLHJlZjpbbixjXSxwcm9wczpbcyxcInN0YXJ0aW5nXCI9PT1sP250Om5yLG9dLGN1c3RvbVN0eWxlSG9va01hcHBpbmc6bzB9KX0pLG8yPUMuZm9yd2FyZFJlZihmdW5jdGlvbihlLG4pe2xldHtjbGFzc05hbWU6dCxyZW5kZXI6ciwuLi5vfT1lLHtvcGVuOmEsYXJyb3dSZWY6aSxzaWRlOmwsYWxpZ246cyxhcnJvd1VuY2VudGVyZWQ6YyxhcnJvd1N0eWxlczp1fT1vRygpO3JldHVybiB0aihcImRpdlwiLGUse3N0YXRlOkMudXNlTWVtbygoKT0+KHtvcGVuOmEsc2lkZTpsLGFsaWduOnMsdW5jZW50ZXJlZDpjfSksW2EsbCxzLGNdKSxyZWY6W24saV0scHJvcHM6W3tzdHlsZTp1LFwiYXJpYS1oaWRkZW5cIjohMH0sb10sY3VzdG9tU3R5bGVIb29rTWFwcGluZzp0Vn0pfSk7dmFyIG80PXQoXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3JjL25leHQtZGV2dG9vbHMvY29tcG9uZW50cy90b29sdGlwLmNzc1wiKSxvNT17fTtmdW5jdGlvbiBvMyhlLG4peyhudWxsPT1ufHxuPmUubGVuZ3RoKSYmKG49ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLHI9QXJyYXkobik7dDxuO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9bzUuc3R5bGVUYWdUcmFuc2Zvcm09eSgpLG81LnNldEF0dHJpYnV0ZXM9ZygpLG81Lmluc2VydD1wKCksbzUuZG9tQVBJPWQoKSxvNS5pbnNlcnRTdHlsZUVsZW1lbnQ9digpLGMoKShvNC5aLG81KSxvNC5aJiZvNC5aLmxvY2FscyYmbzQuWi5sb2NhbHM7dmFyIG82PSgwLEMuZm9yd2FyZFJlZikoZnVuY3Rpb24oZSxuKXt2YXIgdCxyPWUuY2xhc3NOYW1lLG89ZS5jaGlsZHJlbixhPWUudGl0bGUsaT1lLmRpcmVjdGlvbixzPXZvaWQgMD09PWk/XCJ0b3BcIjppLGM9ZS5hcnJvd1NpemUsdT12b2lkIDA9PT1jPzY6YyxkPWUub2Zmc2V0LGY9ZS5iZ2NvbG9yLHA9dm9pZCAwPT09Zj9cIiMwMDBcIjpmLGg9ZS5jb2xvcixnPSh0PSgwLEMudXNlU3RhdGUpKGZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJuZXh0anMtcG9ydGFsXCIpLnNoYWRvd1Jvb3R9KSxmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfSh0KXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fSh0LDEpfHxmdW5jdGlvbihlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBvMyhlLDEpO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20odCk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiBvMyhlLG4pfX0odCwxKXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKSlbMF0sbT0oMCxDLnVzZVJlZikoZyk7cmV0dXJuIGE/KDAsbC5qc3gpKG9VLHtjaGlsZHJlbjooMCxsLmpzeHMpKG8kLHtkZWxheTo0MDAsY2hpbGRyZW46WygwLGwuanN4KShvWix7cmVmOm4scmVuZGVyOmZ1bmN0aW9uKGUpe3ZhciBuLHQ7cmV0dXJuKDAsbC5qc3gpKFwic3BhblwiLChuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcjtyPXRbbl0sbiBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW25dPXJ9KX1yZXR1cm4gZX0oe30sZSksdD10PXtjaGlsZHJlbjpvfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpKX0pLG4pKX19KSwoMCxsLmpzeCkob0sse2NvbnRhaW5lcjptLGNoaWxkcmVuOigwLGwuanN4KShvSix7c2lkZTpzLHNpZGVPZmZzZXQ6KHZvaWQgMD09PWQ/ODpkKSt1LGNsYXNzTmFtZTpcInRvb2x0aXAtcG9zaXRpb25lclwiLHN0eWxlOntcIi0tYW5jaG9yLXdpZHRoXCI6XCJcIi5jb25jYXQodSxcInB4XCIpLFwiLS1hbmNob3ItaGVpZ2h0XCI6XCJcIi5jb25jYXQodSxcInB4XCIpfSxjaGlsZHJlbjooMCxsLmpzeHMpKG8xLHtjbGFzc05hbWU6KDAsay5jeCkoXCJ0b29sdGlwXCIsciksc3R5bGU6e2JhY2tncm91bmRDb2xvcjpwLGNvbG9yOnZvaWQgMD09PWg/XCIjZmZmXCI6aCxcIi0tdG9vbHRpcC1iZy1jb2xvclwiOnAsXCItLWFycm93LXNpemVcIjpcIlwiLmNvbmNhdCh1LFwicHhcIil9LGNoaWxkcmVuOlthLCgwLGwuanN4KShvMix7Y2xhc3NOYW1lOigwLGsuY3gpKFwidG9vbHRpcC1hcnJvd1wiLFwidG9vbHRpcC1hcnJvdy0tXCIuY29uY2F0KHMpKSxzdHlsZTp7XCItLWFycm93LXNpemVcIjpcIlwiLmNvbmNhdCh1LFwicHhcIiksXCItLXRvb2x0aXAtYmctY29sb3JcIjpwfX0pXX0pfSl9KV19KX0pOm99KTtmdW5jdGlvbiBvOShlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHI7cj10W25dLG4gaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVtuXT1yfSl9cmV0dXJuIGV9ZnVuY3Rpb24gbzgoZSxuKXtyZXR1cm4gbj1udWxsIT1uP246e30sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSxlfXZhciBvNz1mdW5jdGlvbihlKXt2YXIgbix0O3JldHVybiEhKG51bGw9PShuPWUudmFsdWUpP3ZvaWQgMDpuLnR5cGUpJiYhIShudWxsPT0odD1lLnZhbHVlKT92b2lkIDA6dC5wYWdlUGF0aCl9O2Z1bmN0aW9uIGFlKGUpe3ZhciBuPWUucGFnZTtyZXR1cm4oMCxsLmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcInNlZ21lbnQtZXhwbG9yZXItcGFnZS1yb3V0ZS1iYXJcIixjaGlsZHJlbjpbKDAsbC5qc3gpKGFhLHt9KSwoMCxsLmpzeCkoXCJzcGFuXCIse2NsYXNzTmFtZTpcInNlZ21lbnQtZXhwbG9yZXItcGFnZS1yb3V0ZS1iYXItcGF0aFwiLGNoaWxkcmVuOm59KV19KX1mdW5jdGlvbiBhbihlKXt2YXIgbj1lLmFjdGl2ZUJvdW5kYXJpZXNDb3VudCx0PWUub25HbG9iYWxSZXNldCxyPW4+MDtyZXR1cm4oMCxsLmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwic2VnbWVudC1leHBsb3Jlci1mb290ZXJcIixjaGlsZHJlbjooMCxsLmpzeHMpKFwiYnV0dG9uXCIse2NsYXNzTmFtZTpcInNlZ21lbnQtZXhwbG9yZXItZm9vdGVyLWJ1dHRvbiBcIi5jb25jYXQocj9cIlwiOlwic2VnbWVudC1leHBsb3Jlci1mb290ZXItYnV0dG9uLS1kaXNhYmxlZFwiKSxvbkNsaWNrOnI/dDp2b2lkIDAsZGlzYWJsZWQ6IXIsdHlwZTpcImJ1dHRvblwiLGNoaWxkcmVuOlsoMCxsLmpzeCkoXCJzcGFuXCIse2NsYXNzTmFtZTpcInNlZ21lbnQtZXhwbG9yZXItZm9vdGVyLXRleHRcIixjaGlsZHJlbjpcIkNsZWFyIFNlZ21lbnQgT3ZlcnJpZGVzXCJ9KSxyJiYoMCxsLmpzeCkoXCJzcGFuXCIse2NsYXNzTmFtZTpcInNlZ21lbnQtZXhwbG9yZXItZm9vdGVyLWJhZGdlXCIsY2hpbGRyZW46bn0pXX0pfSl9ZnVuY3Rpb24gYXQoZSl7dmFyIG49ZS5pc0FwcFJvdXRlcix0PWUucGFnZSxyPSgwLGouaTgpKCksbz0oMCxDLnVzZU1lbW8pKGZ1bmN0aW9uKCl7cmV0dXJuIG4/ZnVuY3Rpb24gZShuKXt2YXIgdCxyPTA7cmV0dXJuKG51bGw9PSh0PW4udmFsdWUpP3ZvaWQgMDp0LnNldEJvdW5kYXJ5VHlwZSkmJm51bGwhPT1uLnZhbHVlLmJvdW5kYXJ5VHlwZSYmIW9PKG4udmFsdWUudHlwZSkmJnIrKyxPYmplY3QudmFsdWVzKG4uY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24obil7biYmKHIrPWUobikpfSkscn0ocik6MH0sW3Isbl0pLGE9KDAsQy51c2VDYWxsYmFjaykoZnVuY3Rpb24oKXtuJiZmdW5jdGlvbiBlKG4pe3ZhciB0OyhudWxsPT0odD1uLnZhbHVlKT92b2lkIDA6dC5zZXRCb3VuZGFyeVR5cGUpJiZuLnZhbHVlLnNldEJvdW5kYXJ5VHlwZShudWxsKSxPYmplY3QudmFsdWVzKG4uY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24obil7biYmZShuKX0pfShyKX0sW3Isbl0pO3JldHVybigwLGwuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZWdtZW50cy1leHBsb3JlclwiOiEwLGNoaWxkcmVuOltuJiYoMCxsLmpzeCkoYWUse3BhZ2U6dH0pLCgwLGwuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJzZWdtZW50LWV4cGxvcmVyLWNvbnRlbnRcIixcImRhdGEtbmV4dGpzLWRldnRvb2wtc2VnbWVudC1leHBsb3JlclwiOiEwLGNoaWxkcmVuOm4/KDAsbC5qc3gpKGFyLHtub2RlOnIsbGV2ZWw6MCxzZWdtZW50OlwiXCJ9KTooMCxsLmpzeCkoXCJwXCIse2NoaWxkcmVuOlwiUm91dGUgSW5mbyBjdXJyZW50bHkgaXMgb25seSBhdmFpbGFibGUgZm9yIHRoZSBBcHAgUm91dGVyLlwifSl9KSxuJiYoMCxsLmpzeCkoYW4se2FjdGl2ZUJvdW5kYXJpZXNDb3VudDpvLG9uR2xvYmFsUmVzZXQ6YX0pXX0pfWZ1bmN0aW9uIGFyKGUpe3ZhciBuPWUuc2VnbWVudCx0PWUubm9kZSxyPWUubGV2ZWwsbz1PYmplY3Qua2V5cyh0LmNoaWxkcmVuKS5zb3J0KGZ1bmN0aW9uKGUsbil7dmFyIHI9ZS5pbmNsdWRlcyhcIi5cIiksbz1uLmluY2x1ZGVzKFwiLlwiKTtpZihyJiYhbylyZXR1cm4gLTE7aWYoIXImJm8pcmV0dXJuIDE7aWYociYmbyl7dmFyIGEsaSxsLHMsYyx1LGQsZixwPW51bGw9PShpPXQuY2hpbGRyZW5bZV0pfHxudWxsPT0oYT1pLnZhbHVlKT92b2lkIDA6YS50eXBlLGg9bnVsbD09KHM9dC5jaGlsZHJlbltuXSl8fG51bGw9PShsPXMudmFsdWUpP3ZvaWQgMDpsLnR5cGUsZz1mdW5jdGlvbihlKXtyZXR1cm4gZT9cImxheW91dFwiPT09ZT8xOlwidGVtcGxhdGVcIj09PWU/MjpcInBhZ2VcIj09PWU/MzpvTyhlKT80OjU6NX0sbT1nKHApLHY9ZyhoKTtpZihtIT09dilyZXR1cm4gbS12O3ZhciBiPShudWxsPT0odT10LmNoaWxkcmVuW2VdKXx8bnVsbD09KGM9dS52YWx1ZSk/dm9pZCAwOmMucGFnZVBhdGgpfHxcIlwiLHk9KG51bGw9PShmPXQuY2hpbGRyZW5bbl0pfHxudWxsPT0oZD1mLnZhbHVlKT92b2lkIDA6ZC5wYWdlUGF0aCl8fFwiXCI7cmV0dXJuIGIubG9jYWxlQ29tcGFyZSh5KX1yZXR1cm4gZS5sb2NhbGVDb21wYXJlKG4pfSksYT0wIT09cnx8bj9uOlwiYXBwXCIsaT1bXSxzPVtdLGM9ITAsdT0hMSxkPXZvaWQgMDt0cnl7Zm9yKHZhciBmLHA9b1tTeW1ib2wuaXRlcmF0b3JdKCk7IShjPShmPXAubmV4dCgpKS5kb25lKTtjPSEwKXt2YXIgaD1mLnZhbHVlLGc9dC5jaGlsZHJlbltoXTtpZihnKXtpZihvNyhnKSl7cy5wdXNoKGgpO2NvbnRpbnVlfWkucHVzaChoKX19fWNhdGNoKGUpe3U9ITAsZD1lfWZpbmFsbHl7dHJ5e2N8fG51bGw9PXAucmV0dXJufHxwLnJldHVybigpfWZpbmFsbHl7aWYodSl0aHJvdyBkfX1mb3IodmFyIG09bnVsbCx2PW8ubGVuZ3RoLTE7dj49MDt2LS0pe3ZhciBiPXQuY2hpbGRyZW5bb1t2XV07aWYoYiYmYi52YWx1ZSl7dmFyIHk9b08oYi52YWx1ZS50eXBlKTtpZighbSYmIXkpe209YjticmVha319fXZhciB4PW51bGwsdz0hMCxqPSExLEE9dm9pZCAwO3RyeXtmb3IodmFyIE8sQz1vW1N5bWJvbC5pdGVyYXRvcl0oKTshKHc9KE89Qy5uZXh0KCkpLmRvbmUpO3c9ITApe3ZhciBTPU8udmFsdWUsRT10LmNoaWxkcmVuW1NdO2lmKEUmJkUudmFsdWUmJm9PKEUudmFsdWUudHlwZSkpe3g9RTticmVha319fWNhdGNoKGUpe2o9ITAsQT1lfWZpbmFsbHl7dHJ5e3d8fG51bGw9PUMucmV0dXJufHxDLnJldHVybigpfWZpbmFsbHl7aWYoail0aHJvdyBBfX1tPW18fHg7dmFyIF89cy5sZW5ndGg+MCxQPXtcIm5vdC1mb3VuZFwiOm51bGwsbG9hZGluZzpudWxsLGVycm9yOm51bGx9O3JldHVybiBzLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49dC5jaGlsZHJlbltlXTtpZihuJiZuLnZhbHVlJiZvTyhuLnZhbHVlLnR5cGUpKXt2YXIgcj1uLnZhbHVlLnR5cGUucmVwbGFjZShvQSxcIlwiKTtyIGluIFAmJihQW3JdPW4udmFsdWUucGFnZVBhdGh8fG51bGwpfX0pLCgwLGwuanN4cykobC5GcmFnbWVudCx7Y2hpbGRyZW46W18mJigwLGwuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJzZWdtZW50LWV4cGxvcmVyLWl0ZW1cIixcImRhdGEtbmV4dGpzLWRldnRvb2wtc2VnbWVudC1leHBsb3Jlci1zZWdtZW50XCI6bitcIi1cIityLGNoaWxkcmVuOigwLGwuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJzZWdtZW50LWV4cGxvcmVyLWl0ZW0tcm93XCIsc3R5bGU6bzkoe30se3BhZGRpbmdMZWZ0OlwiXCIuY29uY2F0KChyKzEpKjgsXCJweFwiKX0pLGNoaWxkcmVuOigwLGwuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwic2VnbWVudC1leHBsb3Jlci1maWxlbmFtZVwiLGNoaWxkcmVuOlthJiYoMCxsLmpzeHMpKFwic3BhblwiLHtjbGFzc05hbWU6XCJzZWdtZW50LWV4cGxvcmVyLWZpbGVuYW1lLS1wYXRoXCIsY2hpbGRyZW46W2EsKDAsbC5qc3gpKFwic21hbGxcIix7Y2hpbGRyZW46XCIvXCJ9KV19KSxzLmxlbmd0aD4wJiYoMCxsLmpzeCkoXCJzcGFuXCIse2NsYXNzTmFtZTpcInNlZ21lbnQtZXhwbG9yZXItZmlsZXNcIixjaGlsZHJlbjpzLm1hcChmdW5jdGlvbihlKXt2YXIgbj10LmNoaWxkcmVuW2VdO2lmKCFufHwhbi52YWx1ZXx8b08obi52YWx1ZS50eXBlKSlyZXR1cm4gbnVsbDt2YXIgcj1uLnZhbHVlLnBhZ2VQYXRoLG89ci5zcGxpdChcIi9cIikucG9wKCl8fFwiXCIsYT1yLnN0YXJ0c1dpdGgob2opLGk9b2sobykscz1hP1wiVGhlIGRlZmF1bHQgTmV4dC5qcyBcIi5jb25jYXQobi52YWx1ZS50eXBlLFwiIGlzIGJlaW5nIHNob3duLiBZb3UgY2FuIGN1c3RvbWl6ZSB0aGlzIHBhZ2UgYnkgYWRkaW5nIHlvdXIgb3duIFwiKS5jb25jYXQoaSxcIiBmaWxlIHRvIHRoZSBhcHAvIGRpcmVjdG9yeS5cIik6bnVsbCxjPW51bGwhPT1uLnZhbHVlLmJvdW5kYXJ5VHlwZTtyZXR1cm4oMCxsLmpzeCkobzYse2NsYXNzTmFtZTpcInNlZ21lbnQtZXhwbG9yZXItZmlsZS1sYWJlbC10b29sdGlwLS1cIisoYT9cImxnXCI6XCJzbVwiKSxkaXJlY3Rpb246YT9cInJpZ2h0XCI6XCJ0b3BcIix0aXRsZTpzLG9mZnNldDoxMixiZ2NvbG9yOlwidmFyKC0tY29sb3ItZ3JheS0xMDAwKVwiLGNvbG9yOlwidmFyKC0tY29sb3ItZ3JheS0xMDApXCIsY2hpbGRyZW46KDAsbC5qc3hzKShcInNwYW5cIix7Y2xhc3NOYW1lOigwLGsuY3gpKFwic2VnbWVudC1leHBsb3Jlci1maWxlLWxhYmVsXCIsXCJzZWdtZW50LWV4cGxvcmVyLWZpbGUtbGFiZWwtLVwiLmNvbmNhdChuLnZhbHVlLnR5cGUpLGEmJlwic2VnbWVudC1leHBsb3Jlci1maWxlLWxhYmVsLS1idWlsdGluXCIsYyYmXCJzZWdtZW50LWV4cGxvcmVyLWZpbGUtbGFiZWwtLW92ZXJyaWRkZW5cIiksb25DbGljazpmdW5jdGlvbigpe3ZhciBlO2U9bmV3IFVSTFNlYXJjaFBhcmFtcyh7ZmlsZTp7ZmlsZVBhdGg6cn0uZmlsZVBhdGgsaXNBcHBSZWxhdGl2ZVBhdGg6XCIxXCJ9KSxmZXRjaChcIlwiLmNvbmNhdChwcm9jZXNzLmVudi5fX05FWFRfUk9VVEVSX0JBU0VQQVRIfHxcIlwiLFwiL19fbmV4dGpzX2xhdW5jaC1lZGl0b3I/XCIpLmNvbmNhdChlLnRvU3RyaW5nKCkpKX0sY2hpbGRyZW46WygwLGwuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwic2VnbWVudC1leHBsb3Jlci1maWxlLWxhYmVsLXRleHRcIixjaGlsZHJlbjppfSksYT8oMCxsLmpzeCkoYW8se30pOigwLGwuanN4KShhaSx7Y2xhc3NOYW1lOlwiY29kZS1pY29uXCJ9KV19KX0sZSl9KX0pLG0mJm0udmFsdWUmJigwLGwuanN4KShvTCx7bm9kZVN0YXRlOm0udmFsdWUsYm91bmRhcmllczpQfSldfSl9KX0pLGkubWFwKGZ1bmN0aW9uKGUpe3ZhciBvPXQuY2hpbGRyZW5bZV07aWYoIW8pcmV0dXJuIG51bGw7dmFyIGE9Xz9lOm4rXCIgLyBcIitlO3JldHVybigwLGwuanN4KShhcix7c2VnbWVudDphLG5vZGU6byxsZXZlbDpfP3IrMTpyfSxlKX0pXX0pfWZ1bmN0aW9uIGFvKGUpe3JldHVybigwLGwuanN4cykoXCJzdmdcIixvOChvOSh7d2lkdGg6XCIxNlwiLGhlaWdodDpcIjE2XCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSx7Y2hpbGRyZW46WygwLGwuanN4KShcInBhdGhcIix7ZDpcIk0xNCA4QzE0IDExLjMxMzcgMTEuMzEzNyAxNCA4IDE0QzQuNjg2MjkgMTQgMiAxMS4zMTM3IDIgOEMyIDQuNjg2MjkgNC42ODYyOSAyIDggMkMxMS4zMTM3IDIgMTQgNC42ODYyOSAxNCA4WlwiLGZpbGw6XCJ2YXIoLS1jb2xvci1ncmF5LTQwMClcIn0pLCgwLGwuanN4KShcInBhdGhcIix7ZDpcIk03Ljc1IDdDOC4zMDIyOCA3LjAwMDAxIDguNzUgNy40NDc3MiA4Ljc1IDhWMTEuMjVINy4yNVY4LjVINi4yNVY3SDcuNzVaTTggNEM4LjU1MjI4IDQgOSA0LjQ0NzcyIDkgNUM5IDUuNTUyMjggOC41NTIyOCA2IDggNkM3LjQ0NzcyIDYgNyA1LjU1MjI4IDcgNUM3IDQuNDQ3NzIgNy40NDc3MiA0IDggNFpcIixmaWxsOlwidmFyKC0tY29sb3ItZ3JheS05MDApXCJ9KV19KSl9ZnVuY3Rpb24gYWEoKXtyZXR1cm4oMCxsLmpzeCkoXCJzdmdcIix7d2lkdGg6XCIyMFwiLGhlaWdodDpcIjIwXCIsdmlld0JveDpcIjAgMCAyMCAyMFwiLGZpbGw6XCJ2YXIoLS1jb2xvci1ncmF5LTYwMClcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsY2hpbGRyZW46KDAsbC5qc3gpKFwicGF0aFwiLHtkOlwiTTQuNSAxMS4yNUM0LjUgMTEuMzg4MSA0LjYxMTkzIDExLjUgNC43NSAxMS41SDE0LjQzOTVMMTEuOTM5NSA5TDEzIDcuOTM5NDVMMTYuNzgwMyAxMS43MTk3TDE2LjgzMiAxMS43NzY0QzE3LjA3MjMgMTIuMDcwOSAxNy4wNTQ5IDEyLjUwNTcgMTYuNzgwMyAxMi43ODAzTDEzIDE2LjU2MDVMMTEuOTM5NSAxNS41TDE0LjQzOTUgMTNINC43NUMzLjc4MzUgMTMgMyAxMi4yMTY1IDMgMTEuMjVWNC4yNUg0LjVWMTEuMjVaXCJ9KX0pfWZ1bmN0aW9uIGFpKGUpe3JldHVybigwLGwuanN4KShcInN2Z1wiLG84KG85KHt3aWR0aDpcIjEyXCIsaGVpZ2h0OlwiMTJcIixzdHJva2VMaW5lam9pbjpcInJvdW5kXCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0sZSkse2NoaWxkcmVuOigwLGwuanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk03LjIyNzYzIDE0LjE4MTlMMTAuMjI3NiAyLjE4MTkzTDEwLjQwOTUgMS40NTQzMkw4Ljk1NDMyIDEuMDkwNTJMOC43NzI0MiAxLjgxODEyTDUuNzcyNDIgMTMuODE4MUw1LjU5MDUxIDE0LjU0NTdMNy4wNDU3MyAxNC45MDk1TDcuMjI3NjMgMTQuMTgxOVpNMy43NTAwMiAxMi4wNjA3TDMuMjE5NjkgMTEuNTMwNEwwLjM5NjQ3IDguNzA3MTNDMC4wMDU5NDU1OSA4LjMxNjYxIDAuMDA1OTQ1NTkgNy42ODM0NCAwLjM5NjQ3IDcuMjkyOTJMMy4yMTk2OSA0LjQ2OTY5TDMuNzUwMDIgMy45MzkzNkw0LjgxMDY4IDUuMDAwMDJMNC4yODAzNSA1LjUzMDM1TDEuODEwNjggOC4wMDAwM0w0LjI4MDM1IDEwLjQ2OTdMNC44MTA2OCAxMUwzLjc1MDAyIDEyLjA2MDdaTTEyLjI1IDEyLjA2MDdMMTIuNzgwNCAxMS41MzA0TDE1LjYwMzYgOC43MDcxM0MxNS45OTQxIDguMzE2NjEgMTUuOTk0MSA3LjY4MzQ0IDE1LjYwMzYgNy4yOTI5MkwxMi43ODA0IDQuNDY5NjlMMTIuMjUgMy45MzkzNkwxMS4xODk0IDUuMDAwMDJMMTEuNzE5NyA1LjUzMDM1TDE0LjE4OTQgOC4wMDAwM0wxMS43MTk3IDEwLjQ2OTdMMTEuMTg5NCAxMUwxMi4yNSAxMi4wNjA3WlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSkpfX0sXCIuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L2hvb2tzL3VzZS1kZWxheWVkLXJlbmRlci50c1wiOmZ1bmN0aW9uKGUsbix0KXtcInVzZSBzdHJpY3RcIjt0LmQobix7TjooKT0+aX0pO3ZhciByPXQoXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QvaW5kZXguanNcIik7ZnVuY3Rpb24gbyhlLG4peyhudWxsPT1ufHxuPmUubGVuZ3RoKSYmKG49ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLHI9QXJyYXkobik7dDxuO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9ZnVuY3Rpb24gYShlLG4pe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSwhbnx8YS5sZW5ndGghPT1uKTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0oZSxuKXx8ZnVuY3Rpb24oZSxuKXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gbyhlLG4pO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20odCk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiBvKGUsbil9fShlLG4pfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIGkoKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LHQ9YSgoMCxyLnVzZVN0YXRlKShlKSwyKSxvPXRbMF0saT10WzFdLGw9YSgoMCxyLnVzZVN0YXRlKSghMSksMikscz1sWzBdLGM9bFsxXSx1PW4uZW50ZXJEZWxheSxkPXZvaWQgMD09PXU/MTp1LGY9bi5leGl0RGVsYXkscD12b2lkIDA9PT1mPzA6ZjtyZXR1cm4oMCxyLnVzZUVmZmVjdCkoZnVuY3Rpb24oKXt2YXIgbix0O3JldHVybiBlPyhpKCEwKSxkPD0wP2MoITApOm49c2V0VGltZW91dChmdW5jdGlvbigpe2MoITApfSxkKSk6KGMoITEpLHA8PTA/aSghMSk6dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aSghMSl9LHApKSxmdW5jdGlvbigpe2NsZWFyVGltZW91dChuKSxjbGVhclRpbWVvdXQodCl9fSxbZSxkLHBdKSx7bW91bnRlZDpvLHJlbmRlcmVkOnN9fX0sXCIuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L3NlZ21lbnQtZXhwbG9yZXItdHJpZS50c1wiOmZ1bmN0aW9uKGUsbix0KXtcInVzZSBzdHJpY3RcIjt0LmQobix7X2M6KCk9PmQsaTg6KCk9PmYsdGg6KCk9PnV9KTt2YXIgcj10KFwiLi9kaXN0L2NvbXBpbGVkL3JlYWN0L2luZGV4LmpzXCIpO2Z1bmN0aW9uIG8oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByO3I9dFtuXSxuIGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbbl09cn0pfXJldHVybiBlfXZhciBhPW5ldyBTZXQsaT1mdW5jdGlvbihlKXtyZXR1cm4gYS5hZGQoZSksZnVuY3Rpb24oKXtyZXR1cm4gYS5kZWxldGUoZSl9fSxsPWZ1bmN0aW9uKCl7cmV0dXJuIGMuZ2V0Um9vdCgpfSxzPWZ1bmN0aW9uKCl7cmV0dXJuIGMuZ2V0Um9vdCgpfSxjPWZ1bmN0aW9uKGUpe3ZhciBuPWUuZ2V0Q2hhcmFjdGVycyx0PXZvaWQgMD09PW4/ZnVuY3Rpb24oZSl7cmV0dXJuW2VdfTpuLHI9ZS5jb21wYXJlLGk9dm9pZCAwPT09cj9mdW5jdGlvbihlLG4pe3JldHVybiBlPT09bn06cixsPXt2YWx1ZTp2b2lkIDAsY2hpbGRyZW46e319O2Z1bmN0aW9uIHMoKXt2YXIgZT0hMCxuPSExLHQ9dm9pZCAwO3RyeXtmb3IodmFyIHIsbz1hW1N5bWJvbC5pdGVyYXRvcl0oKTshKGU9KHI9by5uZXh0KCkpLmRvbmUpO2U9ITApKDAsci52YWx1ZSkoKX1jYXRjaChlKXtuPSEwLHQ9ZX1maW5hbGx5e3RyeXtlfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKG4pdGhyb3cgdH19fXJldHVybntpbnNlcnQ6ZnVuY3Rpb24oZSl7dmFyIG49bCxyPXQoZSksYT0hMCxpPSExLGM9dm9pZCAwO3RyeXtmb3IodmFyIHUsZD1yW1N5bWJvbC5pdGVyYXRvcl0oKTshKGE9KHU9ZC5uZXh0KCkpLmRvbmUpO2E9ITApe3ZhciBmPXUudmFsdWU7bi5jaGlsZHJlbltmXXx8KG4uY2hpbGRyZW5bZl09e3ZhbHVlOnZvaWQgMCxjaGlsZHJlbjp7fX0pLG49bi5jaGlsZHJlbltmXX19Y2F0Y2goZSl7aT0hMCxjPWV9ZmluYWxseXt0cnl7YXx8bnVsbD09ZC5yZXR1cm58fGQucmV0dXJuKCl9ZmluYWxseXtpZihpKXRocm93IGN9fW4udmFsdWU9ZSxsPW8oe30sbCkscygpfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIG49bCxyPXQoZSksYT1bXSxjPSEwLHU9ITAsZD0hMSxmPXZvaWQgMDt0cnl7Zm9yKHZhciBwLGg9cltTeW1ib2wuaXRlcmF0b3JdKCk7ISh1PShwPWgubmV4dCgpKS5kb25lKTt1PSEwKXt2YXIgZz1wLnZhbHVlO2lmKCFuLmNoaWxkcmVuW2ddKXtjPSExO2JyZWFrfWEucHVzaChuKSxuPW4uY2hpbGRyZW5bZ119fWNhdGNoKGUpe2Q9ITAsZj1lfWZpbmFsbHl7dHJ5e3V8fG51bGw9PWgucmV0dXJufHxoLnJldHVybigpfWZpbmFsbHl7aWYoZCl0aHJvdyBmfX1pZihjJiZpKG4udmFsdWUsZSkpe24udmFsdWU9dm9pZCAwO2Zvcih2YXIgbT1hLmxlbmd0aC0xO20+PTA7bS0tKXt2YXIgdj1hW21dLGI9clttXTswPT09T2JqZWN0LmtleXModi5jaGlsZHJlbltiXS5jaGlsZHJlbikubGVuZ3RoJiZkZWxldGUgdi5jaGlsZHJlbltiXX1sPW8oe30sbCkscygpfX0sZ2V0Um9vdDpmdW5jdGlvbigpe3JldHVybiBsfX19KHtjb21wYXJlOmZ1bmN0aW9uKGUsbil7cmV0dXJuISFlJiYhIW4mJmUucGFnZVBhdGg9PT1uLnBhZ2VQYXRoJiZlLnR5cGU9PT1uLnR5cGUmJmUuYm91bmRhcnlUeXBlPT09bi5ib3VuZGFyeVR5cGV9LGdldENoYXJhY3RlcnM6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucGFnZVBhdGguc3BsaXQoXCIvXCIpfX0pLHU9Yy5pbnNlcnQsZD1jLnJlbW92ZTtmdW5jdGlvbiBmKCl7cmV0dXJuKDAsci51c2VTeW5jRXh0ZXJuYWxTdG9yZSkoaSxsLHMpfX0sXCIuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L3V0aWxzL2N4LnRzXCI6ZnVuY3Rpb24oZSxuLHQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHIoKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KGUpLHQ9MDt0PGU7dCsrKW5bdF09YXJndW1lbnRzW3RdO3JldHVybiBuLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX10LmQobix7Y3g6KCk9PnJ9KX19LF9fd2VicGFja19tb2R1bGVfY2FjaGVfXz17fTtmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKGUpe3ZhciBuPV9fd2VicGFja19tb2R1bGVfY2FjaGVfX1tlXTtpZih2b2lkIDAhPT1uKXJldHVybiBuLmV4cG9ydHM7dmFyIHQ9X193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW2VdPXtpZDplLGV4cG9ydHM6e319O3JldHVybiBfX3dlYnBhY2tfbW9kdWxlc19fW2VdKHQsdC5leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pLHQuZXhwb3J0c31fX3dlYnBhY2tfcmVxdWlyZV9fLm49ZT0+e3ZhciBuPWUmJmUuX19lc01vZHVsZT8oKT0+ZS5kZWZhdWx0OigpPT5lO3JldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobix7YTpufSksbn0sKCgpPT57dmFyIGUsbj1PYmplY3QuZ2V0UHJvdG90eXBlT2Y/ZT0+T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpOmU9PmUuX19wcm90b19fO19fd2VicGFja19yZXF1aXJlX18udD1mdW5jdGlvbih0LHIpe2lmKDEmciYmKHQ9dGhpcyh0KSksOCZyfHxcIm9iamVjdFwiPT10eXBlb2YgdCYmdCYmKDQmciYmdC5fX2VzTW9kdWxlfHwxNiZyJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnRoZW4pKXJldHVybiB0O3ZhciBvPU9iamVjdC5jcmVhdGUobnVsbCk7X193ZWJwYWNrX3JlcXVpcmVfXy5yKG8pO3ZhciBhPXt9O2U9ZXx8W251bGwsbih7fSksbihbXSksbihuKV07Zm9yKHZhciBpPTImciYmdDtcIm9iamVjdFwiPT10eXBlb2YgaSYmIX5lLmluZGV4T2YoaSk7aT1uKGkpKU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGkpLmZvckVhY2goZT0+e2FbZV09KCk9PnRbZV19KTtyZXR1cm4gYS5kZWZhdWx0PSgpPT50LF9fd2VicGFja19yZXF1aXJlX18uZChvLGEpLG99fSkoKSxfX3dlYnBhY2tfcmVxdWlyZV9fLmQ9KGUsbik9Pntmb3IodmFyIHQgaW4gbilfX3dlYnBhY2tfcmVxdWlyZV9fLm8obix0KSYmIV9fd2VicGFja19yZXF1aXJlX18ubyhlLHQpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtlbnVtZXJhYmxlOiEwLGdldDpuW3RdfSl9LF9fd2VicGFja19yZXF1aXJlX18ubz0oZSxuKT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbiksX193ZWJwYWNrX3JlcXVpcmVfXy5yPWU9PntcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6XCJNb2R1bGVcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSxfX3dlYnBhY2tfcmVxdWlyZV9fLm5jPXZvaWQgMDt2YXIgX193ZWJwYWNrX2V4cG9ydHNfXz17fTtmb3IodmFyIF9fd2VicGFja19pX18gaW4oKCk9PntcInVzZSBzdHJpY3RcIjtfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyksX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18se2Rpc3BhdGNoZXI6KCk9PmFILHJlbmRlckFwcERldk92ZXJsYXk6KCk9PmFXLHJlbmRlclBhZ2VzRGV2T3ZlcmxheTooKT0+YSR9KTt2YXIgZSxuLHQscj1fX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3N0eWxlLWxvYWRlckA0LjAuMF93ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3djK2hlbHBlcnNAMC41LjE1X19lc2J1aWxkQDAuMjQuMl8vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCIpLG89X193ZWJwYWNrX3JlcXVpcmVfXy5uKHIpLGE9X193ZWJwYWNrX3JlcXVpcmVfXyhcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zdHlsZS1sb2FkZXJANC4wLjBfd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3YytoZWxwZXJzQDAuNS4xNV9fZXNidWlsZEAwLjI0LjJfL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzXCIpLGk9X193ZWJwYWNrX3JlcXVpcmVfXy5uKGEpLGw9X193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vc3JjL2J1aWxkL3dlYnBhY2svbG9hZGVycy9kZXZ0b29sL2RldnRvb2wtc3R5bGUtaW5qZWN0LmpzXCIpLHM9X193ZWJwYWNrX3JlcXVpcmVfXy5uKGwpLGM9X193ZWJwYWNrX3JlcXVpcmVfXyhcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zdHlsZS1sb2FkZXJANC4wLjBfd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3YytoZWxwZXJzQDAuNS4xNV9fZXNidWlsZEAwLjI0LjJfL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiKSx1PV9fd2VicGFja19yZXF1aXJlX18ubihjKSxkPV9fd2VicGFja19yZXF1aXJlX18oXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc3R5bGUtbG9hZGVyQDQuMC4wX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd2MraGVscGVyc0AwLjUuMTVfX2VzYnVpbGRAMC4yNC4yXy9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanNcIiksZj1fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZCkscD1fX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3N0eWxlLWxvYWRlckA0LjAuMF93ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3djK2hlbHBlcnNAMC41LjE1X19lc2J1aWxkQDAuMjQuMl8vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanNcIiksaD1fX3dlYnBhY2tfcmVxdWlyZV9fLm4ocCksZz1fX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9uZXh0LWRldnRvb2xzL2dsb2JhbC5jc3NcIiksbT17fTttLnN0eWxlVGFnVHJhbnNmb3JtPWgoKSxtLnNldEF0dHJpYnV0ZXM9dSgpLG0uaW5zZXJ0PXMoKSxtLmRvbUFQST1pKCksbS5pbnNlcnRTdHlsZUVsZW1lbnQ9ZigpLG8oKShnLlosbSksZy5aJiZnLloubG9jYWxzJiZnLloubG9jYWxzO3ZhciB2PV9fd2VicGFja19yZXF1aXJlX18oXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvY29tcG9uZW50cy90b2FzdC9zdHlsZS5jc3NcIiksYj17fTtiLnN0eWxlVGFnVHJhbnNmb3JtPWgoKSxiLnNldEF0dHJpYnV0ZXM9dSgpLGIuaW5zZXJ0PXMoKSxiLmRvbUFQST1pKCksYi5pbnNlcnRTdHlsZUVsZW1lbnQ9ZigpLG8oKSh2LlosYiksdi5aJiZ2LloubG9jYWxzJiZ2LloubG9jYWxzO3ZhciB5PV9fd2VicGFja19yZXF1aXJlX18oXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QvanN4LXJ1bnRpbWUuanNcIikseD1fX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi9kaXN0L2NvbXBpbGVkL3JlYWN0L2luZGV4LmpzXCIpO2Z1bmN0aW9uIHcoZSxuKXsobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxyPUFycmF5KG4pO3Q8bjt0Kyspclt0XT1lW3RdO3JldHVybiByfXZhciBqPV9fd2VicGFja19yZXF1aXJlX18oXCIuL2Rpc3QvY29tcGlsZWQvc3RhY2t0cmFjZS1wYXJzZXIvc3RhY2stdHJhY2UtcGFyc2VyLmNqcy5qc1wiKSxrPS9cXC9fbmV4dChcXC9zdGF0aWNcXC8uKykvLEE9U3ltYm9sLmZvcihcIm5leHQuY29uc29sZS5lcnJvci5kaWdlc3RcIik7ZnVuY3Rpb24gTyhlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9ZnVuY3Rpb24gQyhlLG4pe3JldHVybiBuPW51bGwhPW4/bjp7fSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KG4pKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pLGV9dmFyIFM9e1NtYWxsOjE2LzE0LE1lZGl1bToxLExhcmdlOjE2LzE4fSxFPVwic3RhdGljLWluZGljYXRvclwiLF89XCJidWlsZC1va1wiLFA9XCJidWlsZC1lcnJvclwiLHo9XCJiZWZvcmUtZmFzdC1yZWZyZXNoXCIsTD1cImZhc3QtcmVmcmVzaFwiLFQ9XCJ2ZXJzaW9uLWluZm9cIixSPVwidW5oYW5kbGVkLWVycm9yXCIsTj1cInVuaGFuZGxlZC1yZWplY3Rpb25cIixEPVwiZGVidWctaW5mb1wiLEI9XCJkZXYtaW5kaWNhdG9yXCIsTT1cImVycm9yLW92ZXJsYXktb3BlblwiLEk9XCJlcnJvci1vdmVybGF5LWNsb3NlXCIsSD1cImVycm9yLW92ZXJsYXktdG9nZ2xlXCIsRj1cImJ1aWxkaW5nLWluZGljYXRvci1zaG93XCIsVT1cImJ1aWxkaW5nLWluZGljYXRvci1oaWRlXCIsVj1cInJlbmRlcmluZy1pbmRpY2F0b3Itc2hvd1wiLHE9XCJyZW5kZXJpbmctaW5kaWNhdG9yLWhpZGVcIixXPVwiZGV2dG9vbHMtcGFuZWwtb3BlblwiLCQ9XCJkZXZ0b29scy1wYW5lbC1jbG9zZVwiLFo9XCJkZXZ0b29scy1wYW5lbC10b2dnbGVcIixZPVwiZGV2dG9vbHMtcG9zaXRpb25cIixYPVwiZGV2dG9vbHMtc2NhbGVcIixLPVwicmVzdGFydC1zZXJ2ZXItYnV0dG9uXCIsUT1cIl9fbmV4dGpzLWRldi10b29scy10aGVtZVwiLEc9XCJfX25leHRqcy1kZXYtdG9vbHMtcG9zaXRpb25cIixKPVwiX19uZXh0anMtZGV2LXRvb2xzLXNjYWxlXCIsZWU9XCJzZWdtZW50LWV4cGxvcmVyLXVwZGF0ZS1yb3V0ZS1zdGF0ZVwiLGVuPS9cXHMrKGF0IE9iamVjdFxcLnJlYWN0X3N0YWNrX2JvdHRvbV9mcmFtZS4qKXwocmVhY3Rfc3RhY2tfYm90dG9tX2ZyYW1lQC4qKXwoYXQgcmVhY3Qtc3RhY2stYm90dG9tLWZyYW1lLiopfChyZWFjdC1zdGFjay1ib3R0b20tZnJhbWVALiopLztmdW5jdGlvbiBldChlKXtyZXR1cm4gbnVsbD09ZT92b2lkIDA6ZS5zcGxpdChlbilbMF19dmFyIGVyPShudWxsPT0oZT1wcm9jZXNzLmVudi5fX05FWFRfREVWX0lORElDQVRPUik/dm9pZCAwOmUudG9TdHJpbmcoKSk9PT1cImZhbHNlXCIsZW89e25leHRJZDoxLGJ1aWxkRXJyb3I6bnVsbCxlcnJvcnM6W10sbm90Rm91bmQ6ITEscmVuZGVyaW5nSW5kaWNhdG9yOiExLHN0YXRpY0luZGljYXRvcjohMSxzaG93SW5kaWNhdG9yOiExLGRpc2FibGVEZXZJbmRpY2F0b3I6ITEsYnVpbGRpbmdJbmRpY2F0b3I6ITEscmVmcmVzaFN0YXRlOnt0eXBlOlwiaWRsZVwifSx2ZXJzaW9uSW5mbzp7aW5zdGFsbGVkOlwiMC4wLjBcIixzdGFsZW5lc3M6XCJ1bmtub3duXCJ9LGRlYnVnSW5mbzp7ZGV2dG9vbHNGcm9udGVuZFVybDp2b2lkIDB9LGlzRGV2VG9vbHNQYW5lbE9wZW46ITEsc2hvd1Jlc3RhcnRTZXJ2ZXJCdXR0b246ITEsZGV2VG9vbHNQb3NpdGlvbjpcImJvdHRvbS1sZWZ0XCIsc2NhbGU6Uy5NZWRpdW0scGFnZTpcIlwifSxlYT1fX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi9kaXN0L2NvbXBpbGVkL3JlYWN0LWRvbS9jbGllbnQuanNcIik7ZnVuY3Rpb24gZWkoZSl7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgsdD1BcnJheShuPjE/bi0xOjApLHI9MTtyPG47cisrKXRbci0xXT1hcmd1bWVudHNbcl07dmFyIG89ZS5sZW5ndGgtMTtyZXR1cm4oZS5zbGljZSgwLG8pLnJlZHVjZShmdW5jdGlvbihlLG4scil7cmV0dXJuIGUrbit0W3JdfSxcIlwiKStlW29dKS5yZXBsYWNlKC9cXC9cXCpbXFxzXFxTXSo/XFwqXFwvL2csXCJcIikucmVwbGFjZSgvXFxzKy9nLFwiIFwiKS5yZXBsYWNlKC9cXHMqKFs6Oyx7fV0pXFxzKi9nLFwiJDFcIikucmVwbGFjZSgvOyt9L2csXCJ9XCIpLnRyaW0oKX1mdW5jdGlvbiBlbCgpe3ZhciBlLG4sdD0oZT1bXCJcXG4gICAgICAvKiBsYXRpbi1leHQgKi9cXG4gICAgICBAZm9udC1mYWNlIHtcXG4gICAgICAgIGZvbnQtZmFtaWx5OiAnX19uZXh0anMtR2Vpc3QnO1xcbiAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMCA2MDA7XFxuICAgICAgICBmb250LWRpc3BsYXk6IHN3YXA7XFxuICAgICAgICBzcmM6IHVybCgvX19uZXh0anNfZm9udC9nZWlzdC1sYXRpbi1leHQud29mZjIpIGZvcm1hdCgnd29mZjInKTtcXG4gICAgICAgIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMkJBLCBVKzAyQkQtMDJDNSwgVSswMkM3LTAyQ0MsIFUrMDJDRS0wMkQ3LFxcbiAgICAgICAgICBVKzAyREQtMDJGRiwgVSswMzA0LCBVKzAzMDgsIFUrMDMyOSwgVSsxRDAwLTFEQkYsIFUrMUUwMC0xRTlGLFxcbiAgICAgICAgICBVKzFFRjItMUVGRiwgVSsyMDIwLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQzAsIFUrMjExMywgVSsyQzYwLTJDN0YsXFxuICAgICAgICAgIFUrQTcyMC1BN0ZGO1xcbiAgICAgIH1cXG4gICAgICAvKiBsYXRpbi1leHQgKi9cXG4gICAgICBAZm9udC1mYWNlIHtcXG4gICAgICAgIGZvbnQtZmFtaWx5OiAnX19uZXh0anMtR2Vpc3QgTW9ubyc7XFxuICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XFxuICAgICAgICBmb250LXdlaWdodDogNDAwIDYwMDtcXG4gICAgICAgIGZvbnQtZGlzcGxheTogc3dhcDtcXG4gICAgICAgIHNyYzogdXJsKC9fX25leHRqc19mb250L2dlaXN0LW1vbm8tbGF0aW4tZXh0LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7XFxuICAgICAgICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDJCQSwgVSswMkJELTAyQzUsIFUrMDJDNy0wMkNDLCBVKzAyQ0UtMDJENyxcXG4gICAgICAgICAgVSswMkRELTAyRkYsIFUrMDMwNCwgVSswMzA4LCBVKzAzMjksIFUrMUQwMC0xREJGLCBVKzFFMDAtMUU5RixcXG4gICAgICAgICAgVSsxRUYyLTFFRkYsIFUrMjAyMCwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMEMwLCBVKzIxMTMsIFUrMkM2MC0yQzdGLFxcbiAgICAgICAgICBVK0E3MjAtQTdGRjtcXG4gICAgICB9XFxuICAgICAgLyogbGF0aW4gKi9cXG4gICAgICBAZm9udC1mYWNlIHtcXG4gICAgICAgIGZvbnQtZmFtaWx5OiAnX19uZXh0anMtR2Vpc3QnO1xcbiAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMCA2MDA7XFxuICAgICAgICBmb250LWRpc3BsYXk6IHN3YXA7XFxuICAgICAgICBzcmM6IHVybCgvX19uZXh0anNfZm9udC9nZWlzdC1sYXRpbi53b2ZmMikgZm9ybWF0KCd3b2ZmMicpO1xcbiAgICAgICAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJCQi0wMkJDLCBVKzAyQzYsXFxuICAgICAgICAgIFUrMDJEQSwgVSswMkRDLCBVKzAzMDQsIFUrMDMwOCwgVSswMzI5LCBVKzIwMDAtMjA2RiwgVSsyMEFDLCBVKzIxMjIsXFxuICAgICAgICAgIFUrMjE5MSwgVSsyMTkzLCBVKzIyMTIsIFUrMjIxNSwgVStGRUZGLCBVK0ZGRkQ7XFxuICAgICAgfVxcbiAgICAgIC8qIGxhdGluICovXFxuICAgICAgQGZvbnQtZmFjZSB7XFxuICAgICAgICBmb250LWZhbWlseTogJ19fbmV4dGpzLUdlaXN0IE1vbm8nO1xcbiAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMCA2MDA7XFxuICAgICAgICBmb250LWRpc3BsYXk6IHN3YXA7XFxuICAgICAgICBzcmM6IHVybCgvX19uZXh0anNfZm9udC9nZWlzdC1tb25vLWxhdGluLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7XFxuICAgICAgICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkJCLTAyQkMsIFUrMDJDNixcXG4gICAgICAgICAgVSswMkRBLCBVKzAyREMsIFUrMDMwNCwgVSswMzA4LCBVKzAzMjksIFUrMjAwMC0yMDZGLCBVKzIwQUMsIFUrMjEyMixcXG4gICAgICAgICAgVSsyMTkxLCBVKzIxOTMsIFUrMjIxMiwgVSsyMjE1LCBVK0ZFRkYsIFUrRkZGRDtcXG4gICAgICB9XFxuICAgIFwiXSxufHwobj1lLnNsaWNlKDApKSxPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUse3Jhdzp7dmFsdWU6T2JqZWN0LmZyZWV6ZShuKX19KSkpO3JldHVybiBlbD1mdW5jdGlvbigpe3JldHVybiB0fSx0fXZhciBlcz1mdW5jdGlvbigpe3JldHVybigwLHgudXNlSW5zZXJ0aW9uRWZmZWN0KShmdW5jdGlvbigpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtyZXR1cm4gZS50ZXh0Q29udGVudD1laShlbCgpKSxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGUpLGZ1bmN0aW9uKCl7ZG9jdW1lbnQuaGVhZC5yZW1vdmVDaGlsZChlKX19LFtdKSxudWxsfSxlYz1fX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi9kaXN0L2NvbXBpbGVkL3JlYWN0LWRvbS9pbmRleC5qc1wiKTtmdW5jdGlvbiBldShlLG4peyhudWxsPT1ufHxuPmUubGVuZ3RoKSYmKG49ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLHI9QXJyYXkobik7dDxuO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9ZnVuY3Rpb24gZWQoZSl7dmFyIG4sdCxyPWUuY2hpbGRyZW4sbz14LnVzZVJlZihudWxsKSxhPXgudXNlUmVmKG51bGwpLGk9KG49eC51c2VTdGF0ZSgpLHQ9MixmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShuKXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShuLDIpfHxmdW5jdGlvbihlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBldShlLG4pO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20odCk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiBldShlLG4pfX0obix0KXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKSlbMV07cmV0dXJuIHgudXNlRWZmZWN0KGZ1bmN0aW9uKCl7aWYoby5jdXJyZW50PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJuZXh0anMtcG9ydGFsXCIpLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBsb2NhbFN0b3JhZ2Upe3ZhciBlPWxvY2FsU3RvcmFnZS5nZXRJdGVtKFEpO1wiZGFya1wiPT09ZT8oby5jdXJyZW50LmNsYXNzTGlzdC5hZGQoXCJkYXJrXCIpLG8uY3VycmVudC5jbGFzc0xpc3QucmVtb3ZlKFwibGlnaHRcIikpOlwibGlnaHRcIj09PWUmJihvLmN1cnJlbnQuY2xhc3NMaXN0LnJlbW92ZShcImRhcmtcIiksby5jdXJyZW50LmNsYXNzTGlzdC5hZGQoXCJsaWdodFwiKSl9bnVsbD09PW8uY3VycmVudC5zaGFkb3dSb290JiYoYS5jdXJyZW50PW8uY3VycmVudC5hdHRhY2hTaGFkb3coe21vZGU6XCJvcGVuXCJ9KSksaSh7fSl9LFtdKSxhLmN1cnJlbnQ/KDAsZWMuY3JlYXRlUG9ydGFsKShyLGEuY3VycmVudCk6bnVsbH1mdW5jdGlvbiBlZigpe3ZhciBlLG4sdD0oZT1bXCJcXG4gICAgICAgIDpob3N0IHtcXG4gICAgICAgICAgLyogXFxuICAgICAgICAgICAqIEFsdGhvdWdoIHRoZSBzdHlsZSBhcHBsaWVkIHRvIHRoZSBzaGFkb3cgaG9zdCBpcyBpc29sYXRlZCxcXG4gICAgICAgICAgICogdGhlIGVsZW1lbnQgdGhhdCBhdHRhY2hlZCB0aGUgc2hhZG93IGhvc3QgKGkuZS4gXFxcIm5leHRqcy1wb3J0YWxcXFwiKVxcbiAgICAgICAgICAgKiBpcyBzdGlsbCBhZmZlY3RlZCBieSB0aGUgcGFyZW50J3Mgc3R5bGUgKGUuZy4gXFxcImJvZHlcXFwiKS4gVGhpcyBtYXlcXG4gICAgICAgICAgICogb2NjdXIgc3R5bGUgY29uZmxpY3RzIGxpa2UgXFxcImRpc3BsYXk6IGZsZXhcXFwiLCB3aXRoIG90aGVyIGNoaWxkcmVuXFxuICAgICAgICAgICAqIGVsZW1lbnRzIHRoZXJlZm9yZSBnaXZlIHRoZSBzaGFkb3cgaG9zdCBhbiBhYnNvbHV0ZSBwb3NpdGlvbi5cXG4gICAgICAgICAgICovXFxuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG5cXG4gICAgICAgICAgLS1jb2xvci1mb250OiAjNzU3NTc1O1xcbiAgICAgICAgICAtLWNvbG9yLWJhY2tkcm9wOiByZ2JhKDI1MCwgMjUwLCAyNTAsIDAuOCk7XFxuICAgICAgICAgIC0tY29sb3ItYm9yZGVyLXNoYWRvdzogcmdiYSgwLCAwLCAwLCAwLjE0NSk7XFxuXFxuICAgICAgICAgIC0tY29sb3ItdGl0bGUtY29sb3I6ICMxZjFmMWY7XFxuICAgICAgICAgIC0tY29sb3Itc3RhY2stbm90ZXM6ICM3Nzc7XFxuXFxuICAgICAgICAgIC0tY29sb3ItYWNjZW50cy0xOiAjODA4MDgwO1xcbiAgICAgICAgICAtLWNvbG9yLWFjY2VudHMtMjogIzIyMjIyMjtcXG4gICAgICAgICAgLS1jb2xvci1hY2NlbnRzLTM6ICM0MDQwNDA7XFxuXFxuICAgICAgICAgIC0tZm9udC1zdGFjay1tb25vc3BhY2U6ICdfX25leHRqcy1HZWlzdCBNb25vJywgJ0dlaXN0IE1vbm8nLFxcbiAgICAgICAgICAgICdTRk1vbm8tUmVndWxhcicsIENvbnNvbGFzLCAnTGliZXJhdGlvbiBNb25vJywgTWVubG8sIENvdXJpZXIsXFxuICAgICAgICAgICAgbW9ub3NwYWNlO1xcbiAgICAgICAgICAtLWZvbnQtc3RhY2stc2FuczogJ19fbmV4dGpzLUdlaXN0JywgJ0dlaXN0JywgLWFwcGxlLXN5c3RlbSxcXG4gICAgICAgICAgICAnU291cmNlIFNhbnMgUHJvJywgc2Fucy1zZXJpZjtcXG5cXG4gICAgICAgICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2stc2Fucyk7XFxuICAgICAgICAgIGZvbnQtdmFyaWFudC1saWdhdHVyZXM6IG5vbmU7XFxuXFxuICAgICAgICAgIC8qIFRPRE86IFJlbW92ZSByZXBsYWNlZCBvbmVzLiAqL1xcbiAgICAgICAgICAtLXNoYWRvdy1zbTogMCAxcHggMnB4IDAgcmdiKDAgMCAwIC8gMC4wNSk7XFxuICAgICAgICAgIC0tc2hhZG93OiAwIDFweCAzcHggMCByZ2IoMCAwIDAgLyAwLjEpLFxcbiAgICAgICAgICAgIDAgMXB4IDJweCAtMXB4IHJnYigwIDAgMCAvIDAuMSk7XFxuICAgICAgICAgIC0tc2hhZG93LW1kOiAwIDRweCA2cHggLTFweCByZ2IoMCAwIDAgLyAwLjEpLFxcbiAgICAgICAgICAgIDAgMnB4IDRweCAtMnB4IHJnYigwIDAgMCAvIDAuMSk7XFxuICAgICAgICAgIC0tc2hhZG93LWxnOiAwIDEwcHggMTVweCAtM3B4IHJnYigwIDAgMCAvIDAuMSksXFxuICAgICAgICAgICAgMCA0cHggNnB4IC00cHggcmdiKDAgMCAwIC8gMC4xKTtcXG4gICAgICAgICAgLS1zaGFkb3cteGw6IDAgMjBweCAyNXB4IC01cHggcmdiKDAgMCAwIC8gMC4xKSxcXG4gICAgICAgICAgICAwIDhweCAxMHB4IC02cHggcmdiKDAgMCAwIC8gMC4xKTtcXG4gICAgICAgICAgLS1zaGFkb3ctMnhsOiAwIDI1cHggNTBweCAtMTJweCByZ2IoMCAwIDAgLyAwLjI1KTtcXG4gICAgICAgICAgLS1zaGFkb3ctaW5uZXI6IGluc2V0IDAgMnB4IDRweCAwIHJnYigwIDAgMCAvIDAuMDUpO1xcbiAgICAgICAgICAtLXNoYWRvdy1ub25lOiAwIDAgIzAwMDA7XFxuXFxuICAgICAgICAgIC0tc2hhZG93LXNtYWxsOiAwcHggMnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDQpO1xcbiAgICAgICAgICAtLXNoYWRvdy1tZW51OiAwcHggMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDIpLFxcbiAgICAgICAgICAgIDBweCA0cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjA0KSxcXG4gICAgICAgICAgICAwcHggMTZweCAyNHB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjA2KTtcXG5cXG4gICAgICAgICAgLS1mb2N1cy1jb2xvcjogdmFyKC0tY29sb3ItYmx1ZS04MDApO1xcbiAgICAgICAgICAtLWZvY3VzLXJpbmc6IDJweCBzb2xpZCB2YXIoLS1mb2N1cy1jb2xvcik7XFxuXFxuICAgICAgICAgIC0tdGltaW5nLXN3aWZ0OiBjdWJpYy1iZXppZXIoMC4yMywgMC44OCwgMC4yNiwgMC45Mik7XFxuICAgICAgICAgIC0tdGltaW5nLW92ZXJsYXk6IGN1YmljLWJlemllcigwLjE3NSwgMC44ODUsIDAuMzIsIDEuMSk7XFxuICAgICAgICAgIC8qIHByZXR0aWVyLWlnbm9yZSAqL1xcbiAgICAgICAgICAtLXRpbWluZy1ib3VuY2U6IGxpbmVhcigwIDAlLCAwLjAwNTg3MSAxJSwgMC4wMjIwNTggMiUsIDAuMDQ2NjEyIDMlLCAwLjA3NzgyMyA0JSwgMC4xMTQxOTkgNSUsIDAuMTU0NDQxIDYlLCAwLjE5NzQzMSA3LjAwMDAwMDAwMDAwMDAwMSUsIDAuMjQyMjA4IDglLCAwLjI4Nzk1OSA5JSwgMC4zMzM5OTUgMTAlLCAwLjM3OTc0MyAxMSUsIDAuNDI0NzMyIDEyJSwgMC40Njg1OCAxMyUsIDAuNTEwOTgyIDE0LjAwMDAwMDAwMDAwMDAwMiUsIDAuNTUxNzAyIDE1JSwgMC41OTA1NjQgMTYlLCAwLjYyNzQ0NSAxNyUsIDAuNjYyMjYxIDE4JSwgMC42OTQ5NzEgMTklLCAwLjcyNTU2MSAyMCUsIDAuNzU0MDQ3IDIxJSwgMC43ODA0NjIgMjIlLCAwLjgwNDg2MSAyMyUsIDAuODI3MzEgMjQlLCAwLjg0Nzg4OCAyNSUsIDAuODY2Njc5IDI2JSwgMC44ODM3NzUgMjclLCAwLjg5OTI3MiAyOC4wMDAwMDAwMDAwMDAwMDQlLCAwLjkxMzI2NyAyOC45OTk5OTk5OTk5OTk5OTYlLCAwLjkyNTg1NiAzMCUsIDAuOTM3MTM3IDMxJSwgMC45NDcyMDUgMzIlLCAwLjk1NjE1MyAzMyUsIDAuOTY0MDcgMzQlLCAwLjk3MTA0MyAzNSUsIDAuOTc3MTUzIDM2JSwgMC45ODI0NzkgMzclLCAwLjk4NzA5NCAzOCUsIDAuOTkxMDY2IDM5JSwgMC45OTQ0NjIgNDAlLCAwLjk5NzMzOSA0MSUsIDAuOTk5NzU1IDQyJSwgMS4wMDE3NjEgNDMlLCAxLjAwMzQwNCA0NCUsIDEuMDA0NzI3IDQ1JSwgMS4wMDU3NyA0NiUsIDEuMDA2NTY5IDQ3JSwgMS4wMDcxNTcgNDglLCAxLjAwNzU2MyA0OSUsIDEuMDA3ODEzIDUwJSwgMS4wMDc5MzEgNTElLCAxLjAwNzkzOSA1MiUsIDEuMDA3ODU1IDUzJSwgMS4wMDc2OTcgNTQlLCAxLjAwNzQ3NyA1NS4wMDAwMDAwMDAwMDAwMSUsIDEuMDA3MjEgNTYuMDAwMDAwMDAwMDAwMDElLCAxLjAwNjkwNyA1Ni45OTk5OTk5OTk5OTk5OSUsIDEuMDA2NTc2IDU3Ljk5OTk5OTk5OTk5OTk5JSwgMS4wMDYyMjggNTklLCAxLjAwNTg2OCA2MCUsIDEuMDA1NTAzIDYxJSwgMS4wMDUxMzcgNjIlLCAxLjAwNDc3NiA2MyUsIDEuMDA0NDIyIDY0JSwgMS4wMDQwNzggNjUlLCAxLjAwMzc0NiA2NiUsIDEuMDAzNDI5IDY3JSwgMS4wMDMxMjcgNjglLCAxLjAwMjg0IDY5JSwgMS4wMDI1NzEgNzAlLCAxLjAwMjMxOCA3MSUsIDEuMDAyMDgyIDcyJSwgMS4wMDE4NjMgNzMlLCAxLjAwMTY2IDc0JSwgMS4wMDE0NzMgNzUlLCAxLjAwMTMwMSA3NiUsIDEuMDAxMTQzIDc3JSwgMS4wMDEgNzglLCAxLjAwMDg2OSA3OSUsIDEuMDAwNzUyIDgwJSwgMS4wMDA2NDUgODElLCAxLjAwMDU1IDgyJSwgMS4wMDA0NjQgODMlLCAxLjAwMDM4OCA4NCUsIDEuMDAwMzIxIDg1JSwgMS4wMDAyNjEgODYlLCAxLjAwMDIwOSA4NyUsIDEuMDAwMTYzIDg4JSwgMS4wMDAxMjMgODklLCAxLjAwMDA4OCA5MCUpO1xcblxcbiAgICAgICAgICAtLXJvdW5kZWQtbm9uZTogMHB4O1xcbiAgICAgICAgICAtLXJvdW5kZWQtc206IDJweDtcXG4gICAgICAgICAgLS1yb3VuZGVkLW1kOiA0cHg7XFxuICAgICAgICAgIC0tcm91bmRlZC1tZC0yOiA2cHg7XFxuICAgICAgICAgIC0tcm91bmRlZC1sZzogOHB4O1xcbiAgICAgICAgICAtLXJvdW5kZWQteGw6IDEycHg7XFxuICAgICAgICAgIC0tcm91bmRlZC0yeGw6IDE2cHg7XFxuICAgICAgICAgIC0tcm91bmRlZC0zeGw6IDI0cHg7XFxuICAgICAgICAgIC0tcm91bmRlZC00eGw6IDMycHg7XFxuICAgICAgICAgIC0tcm91bmRlZC1mdWxsOiA5OTk5cHg7XFxuXFxuICAgICAgICAgIC8qIFxcbiAgICAgICAgICAgIFRoaXMgdmFsdWUgZ2V0cyBzZXQgZnJvbSB0aGUgRGV2IFRvb2xzIHByZWZlcmVuY2VzLFxcbiAgICAgICAgICAgIGFuZCB3ZSB1c2UgdGhlIGZvbGxvd2luZyAtLXNpemUtKiB2YXJpYWJsZXMgdG8gXFxuICAgICAgICAgICAgc2NhbGUgdGhlIHJlbGV2YW50IGVsZW1lbnRzLlxcblxcbiAgICAgICAgICAgIFRoZSByZWFzb24gd2h5IHdlIGRvbid0IHJlbHkgb24gcmVtIHZhbHVlcyBpcyBiZWNhdXNlXFxuICAgICAgICAgICAgaWYgYW4gYXBwIHNldHMgdGhlaXIgcm9vdCBmb250IHNpemUgdG8gc29tZXRoaW5nIHRpbnksIFxcbiAgICAgICAgICAgIGl0IGZlZWxzIHVuZXhwZWN0ZWQgdG8gaGF2ZSB0aGUgYXBwIHJvb3Qgc2l6ZSBsZWFrIFxcbiAgICAgICAgICAgIGludG8gYSBOZXh0LmpzIHN1cmZhY2UuXFxuXFxuICAgICAgICAgICAgaHR0cHM6Ly9naXRodWIuY29tL3ZlcmNlbC9uZXh0LmpzL2Rpc2N1c3Npb25zLzc2ODEyXFxuICAgICAgICAgICovXFxuICAgICAgICAgIC0tbmV4dGpzLWRldi10b29scy1zY2FsZTogXCIsXCI7XFxuICAgICAgICAgIC0tc2l6ZS0xOiBjYWxjKDFweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gICAgICAgICAgLS1zaXplLTI6IGNhbGMoMnB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgICAgICAgICAtLXNpemUtMzogY2FsYygzcHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAgICAgICAgIC0tc2l6ZS00OiBjYWxjKDRweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gICAgICAgICAgLS1zaXplLTU6IGNhbGMoNXB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgICAgICAgICAtLXNpemUtNjogY2FsYyg2cHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAgICAgICAgIC0tc2l6ZS03OiBjYWxjKDdweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gICAgICAgICAgLS1zaXplLTg6IGNhbGMoOHB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgICAgICAgICAtLXNpemUtOTogY2FsYyg5cHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAgICAgICAgIC0tc2l6ZS0xMDogY2FsYygxMHB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgICAgICAgICAtLXNpemUtMTE6IGNhbGMoMTFweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gICAgICAgICAgLS1zaXplLTEyOiBjYWxjKDEycHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAgICAgICAgIC0tc2l6ZS0xMzogY2FsYygxM3B4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgICAgICAgICAtLXNpemUtMTQ6IGNhbGMoMTRweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gICAgICAgICAgLS1zaXplLTE1OiBjYWxjKDE1cHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAgICAgICAgIC0tc2l6ZS0xNjogY2FsYygxNnB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgICAgICAgICAtLXNpemUtMTc6IGNhbGMoMTdweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gICAgICAgICAgLS1zaXplLTE4OiBjYWxjKDE4cHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAgICAgICAgIC0tc2l6ZS0yMDogY2FsYygyMHB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgICAgICAgICAtLXNpemUtMjI6IGNhbGMoMjJweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gICAgICAgICAgLS1zaXplLTI0OiBjYWxjKDI0cHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAgICAgICAgIC0tc2l6ZS0yNjogY2FsYygyNnB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgICAgICAgICAtLXNpemUtMjg6IGNhbGMoMjhweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gICAgICAgICAgLS1zaXplLTMwOiBjYWxjKDMwcHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAgICAgICAgIC0tc2l6ZS0zMjogY2FsYygzMnB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgICAgICAgICAtLXNpemUtMzQ6IGNhbGMoMzRweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gICAgICAgICAgLS1zaXplLTM2OiBjYWxjKDM2cHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAgICAgICAgIC0tc2l6ZS0zODogY2FsYygzOHB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgICAgICAgICAtLXNpemUtNDA6IGNhbGMoNDBweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gICAgICAgICAgLS1zaXplLTQyOiBjYWxjKDQycHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAgICAgICAgIC0tc2l6ZS00NDogY2FsYyg0NHB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgICAgICAgICAtLXNpemUtNDY6IGNhbGMoNDZweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gICAgICAgICAgLS1zaXplLTQ4OiBjYWxjKDQ4cHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuXFxuICAgICAgICAgIEBtZWRpYSBwcmludCB7XFxuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcblxcbiAgICAgICAgaDEsXFxuICAgICAgICBoMixcXG4gICAgICAgIGgzLFxcbiAgICAgICAgaDQsXFxuICAgICAgICBoNSxcXG4gICAgICAgIGg2IHtcXG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4O1xcbiAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xcbiAgICAgICAgICBsaW5lLWhlaWdodDogMS41O1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgYSB7XFxuICAgICAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ibHVlLTkwMCk7XFxuICAgICAgICAgICY6aG92ZXIge1xcbiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ibHVlLTkwMCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgICAgJjpmb2N1cy12aXNpYmxlIHtcXG4gICAgICAgICAgICBvdXRsaW5lOiB2YXIoLS1mb2N1cy1yaW5nKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIFwiXSxufHwobj1lLnNsaWNlKDApKSxPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUse3Jhdzp7dmFsdWU6T2JqZWN0LmZyZWV6ZShuKX19KSkpO3JldHVybiBlZj1mdW5jdGlvbigpe3JldHVybiB0fSx0fWZ1bmN0aW9uIGVwKGUpe3ZhciBuPWUuc2NhbGU7cmV0dXJuKDAseS5qc3gpKFwic3R5bGVcIix7Y2hpbGRyZW46ZWkoZWYoKSxTdHJpbmcodm9pZCAwPT09bj8xOm4pKX0pfWZ1bmN0aW9uIGVoKGUpe2lmKFwiXCI9PT1lLnRyaW0oKSl0aHJvdyBFcnJvcihcImNhbid0IGRlY29kZSBlbXB0eSBoZXhcIik7dmFyIG49cGFyc2VJbnQoZSwxNik7aWYoaXNOYU4obikpdGhyb3cgRXJyb3IoXCJpbnZhbGlkIGhleDogYFwiLmNvbmNhdChlLFwiYFwiKSk7cmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KG4pfXZhciBlZz0vXl9fVFVSQk9QQUNLX18oW2EtekEtWjAtOV8kXSspX18kLyxlbT0vaHR0cHM/OlxcL1xcL1teXFxzLyQuPyNdLlteXFxzKSdcIl0qL2ksZXY9bmV3IFJlZ0V4cChcIihcIi5jb25jYXQoL19fVFVSQk9QQUNLX19bYS16QS1aMC05XyRdK19fL2cuc291cmNlLFwifFxcXFxzKylcIikpLGViPWZ1bmN0aW9uKGUpe3ZhciBuPWUudGV4dCx0PWUubWF0Y2hlcixyPW4uc3BsaXQoZXYpO3JldHVybigwLHkuanN4KSh5LkZyYWdtZW50LHtjaGlsZHJlbjpyLm1hcChmdW5jdGlvbihlLG4pe2lmKGVtLnRlc3QoZSkpe3ZhciByPWVtLmV4ZWMoZSlbMF07cmV0dXJuXCJmdW5jdGlvblwiIT10eXBlb2YgdHx8dChyKT8oMCx5LmpzeCkoeC5GcmFnbWVudCx7Y2hpbGRyZW46KDAseS5qc3gpKFwiYVwiLHtocmVmOnIsdGFyZ2V0OlwiX2JsYW5rXCIscmVsOlwibm9yZWZlcnJlciBub29wZW5lclwiLGNoaWxkcmVuOmV9KX0sXCJsaW5rLVwiLmNvbmNhdChuKSk6ZX10cnl7dmFyIG89ZnVuY3Rpb24oZSl7dmFyIG49ZS5tYXRjaChlZyk7aWYoIW4pcmV0dXJuIGU7Zm9yKHZhciB0PW5bMV0scj1cIlwiLG89MCxhPVwiXCIsaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgbD10W2ldO2lmKDA9PT1vKVwiX1wiPT09bD9vPTE6XCIkXCI9PT1sP289MjpyKz1sO2Vsc2UgaWYoMT09PW8pXCJfXCI9PT1sPyhyKz1cIiBcIixvPTApOlwiJFwiPT09bD8ocis9XCJfXCIsbz0yKToocis9bCxvPTApO2Vsc2UgaWYoMj09PW8paWYoMj09PWEubGVuZ3RoJiYocis9ZWgoYSksYT1cIlwiKSxcIl9cIj09PWwpe2lmKFwiXCIhPT1hKXRocm93IEVycm9yKFwiaW52YWxpZCBoZXg6IGBcIi5jb25jYXQoYSxcImBcIikpO289M31lbHNlIGlmKFwiJFwiPT09bCl7aWYoXCJcIiE9PWEpdGhyb3cgRXJyb3IoXCJpbnZhbGlkIGhleDogYFwiLmNvbmNhdChhLFwiYFwiKSk7bz0wfWVsc2UgYSs9bDtlbHNlIGlmKDM9PT1vKWlmKFwiX1wiPT09bCl0aHJvdyBFcnJvcihcImludmFsaWQgaGV4OiBgXCIuY29uY2F0KGErbCxcImBcIikpO2Vsc2VcIiRcIj09PWw/KHIrPWVoKGEpLGE9XCJcIixvPTApOmErPWx9cmV0dXJuIHJ9KGUpO2lmKG8hPT1lKXJldHVybigwLHkuanN4cykoXCJpXCIse2NoaWxkcmVuOltcIntcIixvLFwifVwiXX0sXCJpZGVudC1cIi5jb25jYXQobikpfWNhdGNoKHQpe3JldHVybigwLHkuanN4cykoXCJpXCIse2NoaWxkcmVuOltcIntcIixlLFwiIChkZWNvZGluZyBmYWlsZWQ6IFwiLFwiXCIrdCxcIilcIixcIn1cIl19LFwiaWRlbnQtXCIuY29uY2F0KG4pKX1yZXR1cm4oMCx5LmpzeCkoeC5GcmFnbWVudCx7Y2hpbGRyZW46ZX0sXCJ0ZXh0LVwiLmNvbmNhdChuKSl9KX0pfSxleT1bL153ZWJwYWNrLWludGVybmFsOlxcL1xcL1xcLyhcXChbXFx3LV0rXFwpXFwvKT8vLC9eKHdlYnBhY2s6XFwvXFwvXFwvfHdlYnBhY2s6XFwvXFwvKF9OX0VcXC8pPykoXFwoW1xcdy1dK1xcKVxcLyk/L107ZnVuY3Rpb24gZXgoZSl7dmFyIG49ITAsdD0hMSxyPXZvaWQgMDt0cnl7Zm9yKHZhciBvLGE9ZXlbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0obz1hLm5leHQoKSkuZG9uZSk7bj0hMCl7dmFyIGk9by52YWx1ZTtpZihpLnRlc3QoZSkpcmV0dXJuITA7ZT1lLnJlcGxhY2UoaSxcIlwiKX19Y2F0Y2goZSl7dD0hMCxyPWV9ZmluYWxseXt0cnl7bnx8bnVsbD09YS5yZXR1cm58fGEucmV0dXJuKCl9ZmluYWxseXtpZih0KXRocm93IHJ9fXJldHVybiExfWZ1bmN0aW9uIGV3KGUpe3ZhciBuPSEwLHQ9ITEscj12b2lkIDA7dHJ5e2Zvcih2YXIgbyxhPWV5W1N5bWJvbC5pdGVyYXRvcl0oKTshKG49KG89YS5uZXh0KCkpLmRvbmUpO249ITApe3ZhciBpPW8udmFsdWU7ZT1lLnJlcGxhY2UoaSxcIlwiKX19Y2F0Y2goZSl7dD0hMCxyPWV9ZmluYWxseXt0cnl7bnx8bnVsbD09YS5yZXR1cm58fGEucmV0dXJuKCl9ZmluYWxseXtpZih0KXRocm93IHJ9fXJldHVybiBlfWZ1bmN0aW9uIGVqKGUsbix0LHIsbyxhLGkpe3RyeXt2YXIgbD1lW2FdKGkpLHM9bC52YWx1ZX1jYXRjaChlKXt0KGUpO3JldHVybn1sLmRvbmU/bihzKTpQcm9taXNlLnJlc29sdmUocykudGhlbihyLG8pfWZ1bmN0aW9uIGVrKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXRoaXMsdD1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbyl7dmFyIGE9ZS5hcHBseShuLHQpO2Z1bmN0aW9uIGkoZSl7ZWooYSxyLG8saSxsLFwibmV4dFwiLGUpfWZ1bmN0aW9uIGwoZSl7ZWooYSxyLG8saSxsLFwidGhyb3dcIixlKX1pKHZvaWQgMCl9KX19ZnVuY3Rpb24gZUEoZSxuKXt2YXIgdCxyLG8sYT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZvWzBdKXRocm93IG9bMV07cmV0dXJuIG9bMV19LHRyeXM6W10sb3BzOltdfSxpPU9iamVjdC5jcmVhdGUoKFwiZnVuY3Rpb25cIj09dHlwZW9mIEl0ZXJhdG9yP0l0ZXJhdG9yOk9iamVjdCkucHJvdG90eXBlKTtyZXR1cm4gaS5uZXh0PWwoMCksaS50aHJvdz1sKDEpLGkucmV0dXJuPWwoMiksXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiYoaVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxpO2Z1bmN0aW9uIGwobCl7cmV0dXJuIGZ1bmN0aW9uKHMpe3ZhciBjPVtsLHNdO2lmKHQpdGhyb3cgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtmb3IoO2kmJihpPTAsY1swXSYmKGE9MCkpLGE7KXRyeXtpZih0PTEsciYmKG89MiZjWzBdP3IucmV0dXJuOmNbMF0/ci50aHJvd3x8KChvPXIucmV0dXJuKSYmby5jYWxsKHIpLDApOnIubmV4dCkmJiEobz1vLmNhbGwocixjWzFdKSkuZG9uZSlyZXR1cm4gbztzd2l0Y2gocj0wLG8mJihjPVsyJmNbMF0sby52YWx1ZV0pLGNbMF0pe2Nhc2UgMDpjYXNlIDE6bz1jO2JyZWFrO2Nhc2UgNDpyZXR1cm4gYS5sYWJlbCsrLHt2YWx1ZTpjWzFdLGRvbmU6ITF9O2Nhc2UgNTphLmxhYmVsKysscj1jWzFdLGM9WzBdO2NvbnRpbnVlO2Nhc2UgNzpjPWEub3BzLnBvcCgpLGEudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEobz0obz1hLnRyeXMpLmxlbmd0aD4wJiZvW28ubGVuZ3RoLTFdKSYmKDY9PT1jWzBdfHwyPT09Y1swXSkpe2E9MDtjb250aW51ZX1pZigzPT09Y1swXSYmKCFvfHxjWzFdPm9bMF0mJmNbMV08b1szXSkpe2EubGFiZWw9Y1sxXTticmVha31pZig2PT09Y1swXSYmYS5sYWJlbDxvWzFdKXthLmxhYmVsPW9bMV0sbz1jO2JyZWFrfWlmKG8mJmEubGFiZWw8b1syXSl7YS5sYWJlbD1vWzJdLGEub3BzLnB1c2goYyk7YnJlYWt9b1syXSYmYS5vcHMucG9wKCksYS50cnlzLnBvcCgpO2NvbnRpbnVlfWM9bi5jYWxsKGUsYSl9Y2F0Y2goZSl7Yz1bNixlXSxyPTB9ZmluYWxseXt0PW89MH1pZig1JmNbMF0pdGhyb3cgY1sxXTtyZXR1cm57dmFsdWU6Y1swXT9jWzFdOnZvaWQgMCxkb25lOiEwfX19fWZ1bmN0aW9uIGVPKGUsbil7dmFyIHQ7cmV0dXJuXCJmaWxlOi8vXCI9PT1lLmZpbGV8fChudWxsPT0odD1lLmZpbGUpP3ZvaWQgMDp0Lm1hdGNoKC9odHRwcz86XFwvXFwvLykpP1Byb21pc2UucmVzb2x2ZSh7ZXJyb3I6ITEscmVhc29uOm51bGwsZXh0ZXJuYWw6ITAsc291cmNlU3RhY2tGcmFtZTplLG9yaWdpbmFsU3RhY2tGcmFtZTpudWxsLG9yaWdpbmFsQ29kZUZyYW1lOm51bGwsaWdub3JlZDohMH0pOmVrKGZ1bmN0aW9uKCl7dmFyIHQscjtyZXR1cm4gZUEodGhpcyxmdW5jdGlvbihvKXtpZihcInJlamVjdGVkXCI9PT1uLnN0YXR1cyl0aHJvdyBFcnJvcihuLnJlYXNvbik7cmV0dXJuWzIse2Vycm9yOiExLHJlYXNvbjpudWxsLGV4dGVybmFsOiExLHNvdXJjZVN0YWNrRnJhbWU6ZSxvcmlnaW5hbFN0YWNrRnJhbWU6KHI9bi52YWx1ZSkub3JpZ2luYWxTdGFja0ZyYW1lLG9yaWdpbmFsQ29kZUZyYW1lOnIub3JpZ2luYWxDb2RlRnJhbWV8fG51bGwsaWdub3JlZDoobnVsbD09KHQ9ci5vcmlnaW5hbFN0YWNrRnJhbWUpP3ZvaWQgMDp0Lmlnbm9yZWQpfHwhMX1dfSl9KSgpLmNhdGNoKGZ1bmN0aW9uKG4pe3ZhciB0LHI7cmV0dXJue2Vycm9yOiEwLHJlYXNvbjpudWxsIT0ocj1udWxsIT0odD1udWxsPT1uP3ZvaWQgMDpuLm1lc3NhZ2UpP3Q6bnVsbD09bj92b2lkIDA6bi50b1N0cmluZygpKT9yOlwiVW5rbm93biBFcnJvclwiLGV4dGVybmFsOiExLHNvdXJjZVN0YWNrRnJhbWU6ZSxvcmlnaW5hbFN0YWNrRnJhbWU6bnVsbCxvcmlnaW5hbENvZGVGcmFtZTpudWxsLGlnbm9yZWQ6ITF9fSl9ZnVuY3Rpb24gZUMoZSxuLHQpe3JldHVybiBlayhmdW5jdGlvbigpe3ZhciByLG8sYSxpO3JldHVybiBlQSh0aGlzLGZ1bmN0aW9uKGwpe3N3aXRjaChsLmxhYmVsKXtjYXNlIDA6cj17ZnJhbWVzOmUsaXNTZXJ2ZXI6XCJzZXJ2ZXJcIj09PW4saXNFZGdlU2VydmVyOlwiZWRnZS1zZXJ2ZXJcIj09PW4saXNBcHBEaXJlY3Rvcnk6dH0sbz12b2lkIDAsYT12b2lkIDAsbC5sYWJlbD0xO2Nhc2UgMTpyZXR1cm4gbC50cnlzLnB1c2goWzEsMywsNF0pLFs0LGZldGNoKFwiL19fbmV4dGpzX29yaWdpbmFsLXN0YWNrLWZyYW1lc1wiLHttZXRob2Q6XCJQT1NUXCIsYm9keTpKU09OLnN0cmluZ2lmeShyKX0pXTtjYXNlIDI6cmV0dXJuIG89bC5zZW50KCksWzMsNF07Y2FzZSAzOnJldHVybiBhPWwuc2VudCgpK1wiXCIsWzMsNF07Y2FzZSA0OmlmKCEobyYmby5vayYmMjA0IT09by5zdGF0dXMpKXJldHVyblszLDZdO3JldHVybls0LG8uanNvbigpXTtjYXNlIDU6cmV0dXJuIGk9bC5zZW50KCksWzIsUHJvbWlzZS5hbGwoZS5tYXAoZnVuY3Rpb24oZSxuKXtyZXR1cm4gZU8oZSxpW25dKX0pKV07Y2FzZSA2OmlmKCFvKXJldHVyblszLDhdO3JldHVybls0LG8udGV4dCgpXTtjYXNlIDc6YT1sLnNlbnQoKSxsLmxhYmVsPTg7Y2FzZSA4OnJldHVyblsyLFByb21pc2UuYWxsKGUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlTyhlLHtzdGF0dXM6XCJyZWplY3RlZFwiLHJlYXNvbjpcIkZhaWxlZCB0byBmZXRjaCB0aGUgb3JpZ2luYWwgc3RhY2sgZnJhbWVzIFwiLmNvbmNhdChhP1wiOiBcIi5jb25jYXQoYSk6XCJcIil9KX0pKV19fSl9KSgpfWZ1bmN0aW9uIGVTKGUpe2lmKCFlLmZpbGUpcmV0dXJuXCJcIjt2YXIgbj1leChlLmZpbGUpLHQ9XCJcIjtpZihuKXQ9ZXcoZS5maWxlKTtlbHNlIHRyeXt2YXIgcixvPW5ldyBVUkwoZS5maWxlKSxhPVwiXCI7KG51bGw9PShyPWdsb2JhbFRoaXMubG9jYXRpb24pP3ZvaWQgMDpyLm9yaWdpbikhPT1vLm9yaWdpbiYmKFwibnVsbFwiPT09by5vcmlnaW4/YSs9by5wcm90b2NvbDphKz1vLm9yaWdpbiksYSs9by5wYXRobmFtZSx0PWV3KGEpfWNhdGNoKG4pe3Q9ZXcoZS5maWxlKX1yZXR1cm4hZXgoZS5maWxlKSYmbnVsbCE9ZS5saW5lTnVtYmVyJiZ0JiZcIjxhbm9ueW1vdXM+XCIhPT1lLmZpbGUmJihudWxsIT1lLmNvbHVtbj90Kz1cIiAoXCIuY29uY2F0KGUubGluZU51bWJlcixcIjpcIikuY29uY2F0KGUuY29sdW1uLFwiKVwiKTp0Kz1cIiAoXCIuY29uY2F0KGUubGluZU51bWJlcixcIilcIikpLHR9ZnVuY3Rpb24gZUUoKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sbj1lLmZpbGUsdD1lLmxpbmVOdW1iZXIscj1lLmNvbHVtbjtyZXR1cm4oMCx4LnVzZUNhbGxiYWNrKShmdW5jdGlvbigpe2lmKG51bGwhPW4mJm51bGwhPXQmJm51bGwhPXIpe3ZhciBlPW5ldyBVUkxTZWFyY2hQYXJhbXM7ZS5hcHBlbmQoXCJmaWxlXCIsbiksZS5hcHBlbmQoXCJsaW5lTnVtYmVyXCIsU3RyaW5nKHQpKSxlLmFwcGVuZChcImNvbHVtblwiLFN0cmluZyhyKSksc2VsZi5mZXRjaChcIlwiLmNvbmNhdChwcm9jZXNzLmVudi5fX05FWFRfUk9VVEVSX0JBU0VQQVRIfHxcIlwiLFwiL19fbmV4dGpzX2xhdW5jaC1lZGl0b3I/XCIpLmNvbmNhdChlLnRvU3RyaW5nKCkpKS50aGVuKGZ1bmN0aW9uKCl7fSxmdW5jdGlvbihlKXtjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gb3BlbiBmaWxlIFwiJy5jb25jYXQobixcIiAoXCIpLmNvbmNhdCh0LFwiOlwiKS5jb25jYXQociwnKVwiIGluIHlvdXIgZWRpdG9yLiBDYXVzZTonKSxlKX0pfX0sW24sdCxyXSl9ZnVuY3Rpb24gZV8oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfWZ1bmN0aW9uIGVQKGUsbil7cmV0dXJuIG49bnVsbCE9bj9uOnt9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QobikpLmZvckVhY2goZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSksZX1mdW5jdGlvbiBleihlKXtyZXR1cm4oMCx5LmpzeCkoXCJzdmdcIixlUChlXyh7eG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHdpZHRoOlwiMTZcIixoZWlnaHQ6XCIxNlwiLHZpZXdCb3g6XCIwIDAgMTYgMTZcIixmaWxsOlwibm9uZVwifSxlKSx7Y2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixmaWxsOlwiY3VycmVudENvbG9yXCIsZDpcIk0xMS41IDkuNzVWMTEuMjVDMTEuNSAxMS4zODgxIDExLjM4ODEgMTEuNSAxMS4yNSAxMS41SDQuNzVDNC42MTE5MyAxMS41IDQuNSAxMS4zODgxIDQuNSAxMS4yNUw0LjUgNC43NUM0LjUgNC42MTE5MyA0LjYxMTkzIDQuNSA0Ljc1IDQuNUg2LjI1SDdWM0g2LjI1SDQuNzVDMy43ODM1IDMgMyAzLjc4MzUgMyA0Ljc1VjExLjI1QzMgMTIuMjE2NSAzLjc4MzUgMTMgNC43NSAxM0gxMS4yNUMxMi4yMTY1IDEzIDEzIDEyLjIxNjUgMTMgMTEuMjVWOS43NVY5SDExLjVWOS43NVpNOC41IDNIOS4yNUgxMi4yNDk1QzEyLjY2MzcgMyAxMi45OTk1IDMuMzM1NzkgMTIuOTk5NSAzLjc1VjYuNzVWNy41SDExLjQ5OTVWNi43NVY1LjU2MDY2TDguNTMwMzMgOC41Mjk3OEw4IDkuMDYwMTFMNi45MzkzNCA3Ljk5OTQ1TDcuNDY5NjcgNy40NjkxMkwxMC40Mzg4IDQuNUg5LjI1SDguNVYzWlwifSl9KSl9ZnVuY3Rpb24gZUwoZSl7cmV0dXJuKDAseS5qc3gpKFwic3ZnXCIsZVAoZV8oe3htbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixoZWlnaHQ6XCIxNlwiLHN0cm9rZUxpbmVqb2luOlwicm91bmRcIix2aWV3Qm94OlwiLTQgLTQgMjQgMjRcIix3aWR0aDpcIjE2XCJ9LGUpLHtjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNOC41NTg0NiAySDcuNDQxNDhMMS44ODk3NSAxMy41SDE0LjExMDJMOC41NTg0NiAyWk05LjkwOTI5IDEuMzQ3ODhDOS42NTkwMiAwLjgyOTQ1NiA5LjEzNDEzIDAuNSA4LjU1ODQ2IDAuNUg3LjQ0MTQ4QzYuODY1ODEgMC41IDYuMzQwOTIgMC44Mjk0NTQgNi4wOTA2NSAxLjM0Nzg3TDAuMTkyNjA4IDEzLjU2NTNDLTAuMTI3OTQzIDE0LjIyOTMgMC4zNTU4MzUgMTUgMS4wOTMxNiAxNUgxNC45MDY4QzE1LjY0NDEgMTUgMTYuMTI3OSAxNC4yMjkzIDE1LjgwNzMgMTMuNTY1M0w5LjkwOTI5IDEuMzQ3ODhaTTguNzQ5OTcgNC43NVY1LjVWOFY4Ljc1SDcuMjQ5OTdWOFY1LjVWNC43NUg4Ljc0OTk3Wk03Ljk5OTk3IDEyQzguNTUyMjYgMTIgOC45OTk5NyAxMS41NTIzIDguOTk5OTcgMTFDOC45OTk5NyAxMC40NDc3IDguNTUyMjYgMTAgNy45OTk5NyAxMEM3LjQ0NzY5IDEwIDYuOTk5OTcgMTAuNDQ3NyA2Ljk5OTk3IDExQzYuOTk5OTcgMTEuNTUyMyA3LjQ0NzY5IDEyIDcuOTk5OTcgMTJaXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSl9KSl9ZnVuY3Rpb24gZVQoZSl7dmFyIG49ZS5sYW5nO2lmKCFuKXJldHVybigwLHkuanN4KShlQix7fSk7c3dpdGNoKG4udG9Mb3dlckNhc2UoKSl7Y2FzZVwianN4XCI6Y2FzZVwidHN4XCI6cmV0dXJuKDAseS5qc3gpKGVNLHt9KTtjYXNlXCJ0c1wiOmNhc2VcInR5cGVzY3JpcHRcIjpyZXR1cm4oMCx5LmpzeCkoZUQse30pO2Nhc2VcImphdmFzY3JpcHRcIjpjYXNlXCJqc1wiOmNhc2VcIm1qc1wiOnJldHVybigwLHkuanN4KShlTix7fSk7Y2FzZVwianNvblwiOnJldHVybigwLHkuanN4KShlUix7fSk7ZGVmYXVsdDpyZXR1cm4oMCx5LmpzeCkoZUIse30pfX1mdW5jdGlvbiBlUigpe3JldHVybigwLHkuanN4KShcInN2Z1wiLHtjbGlwUnVsZTpcImV2ZW5vZGRcIixmaWxsUnVsZTpcImV2ZW5vZGRcIixoZWlnaHQ6XCIxNlwiLHZpZXdCb3g6XCIwIDAgMTMyMS40NSAxMzMzLjMzXCIsd2lkdGg6XCIxNlwiLGNoaWxkcmVuOigwLHkuanN4KShcInBhdGhcIix7ZDpcIk0yMjEuMzcgNjE4LjQ0aDc1Ny45NFY0MDUuMTVINzU1LjE0Yy0yMy41IDAtNTYuMzItMTIuNzQtNzEuODItMjguMjQtMTUuNS0xNS41LTI1LTQzLjQ3LTI1LTY2Ljk3VjgyLjg5SDg4LjM5Yy0xLjk5IDAtMy40OSAxLTQuNDkgMi0xLjUgMS0yIDIuNS0yIDQuNXYxMTU1LjA0YzAgMS41IDEgMy41IDIgNC41IDEgMS40OSAzIDEuOTkgNC40OSAxLjk5SDk3Mi44YzIgMCAxLjg5LS45OSAyLjg5LTEuOTkgMS41LTEgMy42MS0zIDMuNjEtNC41di0xMjEuMDlIMjIxLjM2Yy00NC45NiAwLTgyLTM2LjktODItODEuOTlWNzAwLjQ0YzAtNDUuMSAzNi45LTgyIDgyLTgyem0xMjYuNTEgMTE3LjQ3aDc1LjI0djE0Ni42MWMwIDMwLjc5LTIuNDQgNTQuMjMtNy4zMyA3MC4zMS00LjkyIDE2LjAzLTE0LjggMjkuNjctMjkuNjUgNDAuODUtMTQuODYgMTEuMTItMzMuOTEgMTYuNzItNTcuMDUgMTYuNzItMjQuNTMgMC00My41MS0zLjcxLTU2Ljk0LTExLjA2LTEzLjUtNy4zNi0yMy44OS0xOC4xLTMxLjIzLTMyLjMtNy4zNS0xNC4xNC0xMS42OS0zMS42Ny0xMi45OS01Mi41M2w3MS41LTEwLjgxYy4xMSAxMS44MSAxLjA3IDIwLjYxIDIuODEgMjYuMzMgMS43NiA1Ljc4IDQuNzUgMTAuMzcgOSAxMy45NSAyLjg3IDIuMzMgNi45NCAzLjQ2IDEyLjI1IDMuNDYgOC40IDAgMTQuNTgtMy40NiAxOC41My0xMC4zNyAzLjktNi45MiA1Ljg3LTE4LjYgNS44Ny0zNVY3MzUuOTJ6bTExMi43NyAxODAuNjdsNzEuMTctNC45N2MxLjU0IDEyLjgxIDQuNjkgMjIuNjIgOS40NCAyOS4yOCA3Ljc0IDEwLjg4IDE4Ljc0IDE2LjM0IDMzLjA5IDE2LjM0IDEwLjY4IDAgMTguOTMtMi43NiAyNC42OC04LjM2IDUuODEtNS41OCA4LjctMTIuMDcgOC43LTE5LjQxIDAtNi45Ny0yLjcxLTEzLjI2LTguMi0xOC43OS01LjQ3LTUuNTMtMTguMjMtMTAuNjgtMzguMjgtMTUuNjUtMzIuODktOC4xNy01Ni4yNy0xOS4xLTcwLjI2LTMyLjc0LTE0LjEyLTEzLjU3LTIxLjE4LTMwLjkyLTIxLjE4LTUyLjAzIDAtMTMuODMgMy42MS0yNi44OSAxMC44NS0zOS4yMSA3LjIyLTEyLjM4IDE4LjA3LTIyLjA2IDMyLjU5LTI5LjA5IDE0LjUyLTcuMDQgMzQuNC0xMC41NiA1OS42NS0xMC41NiAzMSAwIDU0LjYyIDYuNDEgNzAuODggMTkuMjkgMTYuMjggMTIuODEgMjUuOTIgMzMuMjQgMjkuMDQgNjEuMjdsLTcwLjUgNC42NWMtMS44Ny0xMi4yNS01LjgxLTIxLjE3LTExLjgxLTI2LjctNi4wNS01LjYtMTQuMzUtOC4zNi0yNC45LTguMzYtOC43MSAwLTE1LjMxIDIuMDctMTkuNzMgNi4xNi00LjQgNC4wOS02LjU5IDkuMTItNi41OSAxNS4wMiAwIDQuMjcgMS44MSA4LjExIDUuMzcgMTEuNTcgMy40NSAzLjU5IDExLjggNi44NSAyNS4wMiA5LjkzIDMyLjc1IDcuODYgNTYuMiAxNS44NCA3MC4zMSAyMy44NyAxNC4xOCA4LjA1IDI0LjUyIDE3Ljk4IDMwLjk2IDI5LjkyIDYuNDQgMTEuODggOS42NiAyNS4yIDkuNjYgMzkuOTYgMCAxNy4yOS00LjMgMzMuMjQtMTIuODggNDcuODktOC42MyAxNC41OC0yMC42MSAyNS43LTM2LjA4IDMzLjI0LTE1LjQxIDcuNTQtMzQuODUgMTEuMzEtNTguMzMgMTEuMzEtNDEuMjQgMC02OS44MS04Ljg2LTg1LjY4LTI2LjUyLTE1Ljg4LTE3LjY1LTI0Ljg1LTQwLjA5LTI2Ljk2LTY3LjN6bTI0OC43NC00NS41YzAtNDQuMDUgMTEuMDItNzguMzYgMzMuMDktMTAyLjg3IDIyLjA5LTI0LjU3IDUyLjgyLTM2LjgyIDkyLjI0LTM2LjgyIDQwLjM4IDAgNzEuNSAxMi4wNyA5My4zNCAzNi4xMyAyMS44NiAyNC4xMyAzMi43NyA1Ny45NCAzMi43NyAxMDEuMzcgMCAzMS41NC00Ljc1IDU3LjM2LTE0LjMgNzcuNTQtOS41NCAyMC4xOC0yMy4zNyAzNS44OS00MS40IDQ3LjEzLTE4LjA3IDExLjI0LTQwLjU1IDE2Ljg0LTY3LjQ4IDE2Ljg0LTI3LjMzIDAtNDkuOTktNC44My02Ny45NC0xNC41Mi0xNy45Mi05Ljc0LTMyLjQ5LTI1LjA3LTQzLjYyLTQ2LjA2LTExLjEzLTIwLjkyLTE2LjcyLTQ3LjE5LTE2LjcyLTc4Ljc0em03NC44OS4xOWMwIDI3LjIxIDQuNTcgNDYuODEgMTMuNjggNTguNjggOS4xMyAxMS44OCAyMS41NyAxNy44NSAzNy4yNiAxNy44NSAxNi4xIDAgMjguNjUtNS44NCAzNy40NS0xNy40NyA4Ljg3LTExLjY4IDEzLjI4LTMyLjU0IDEzLjI4LTYyLjc3IDAtMjUuMzktNC42My00My45Mi0xMy44NC01NS42MS05LjI2LTExLjc2LTIxLjc1LTE3LjYtMzcuNTYtMTcuNi0xNS4xMyAwLTI3LjM0IDUuOTctMzYuNDkgMTcuODUtOS4yMSAxMS44OC0xMy43OCAzMS42MS0xMy43OCA1OS4wN3ptMjA5LjA4LTEzNS4zNmg2OS45OWw5MC45OCAxNDkuMDVWNzM1LjkxaDcwLjgzdjI2OS45NmgtNzAuODNsLTkwLjQ4LTE0OC4yNHYxNDguMjRoLTcwLjQ5VjczNS45MXptNjcuNzEtMTE3LjQ3aDE3OC4zN2M0NS4xIDAgODIgMzcuMDQgODIgODJ2MzQwLjkxYzAgNDQuOTYtMzcuMDMgODEuOTktODIgODEuOTloLTE3OC4zN3YxNDdjMCAxNy41LTYuOTkgMzIuOTktMTguNSA0NC41LTExLjUgMTEuNDktMjcgMTguNS00NC41IDE4LjVINjIuOTdjLTE3LjUgMC0zMi45OS03LTQ0LjUtMTguNS0xMS40OS0xMS41LTE4LjUtMjctMTguNS00NC41VjYzLjQ5YzAtMTcuNSA3LTMzIDE4LjUtNDQuNVM0NS45Ny40OSA2Mi45Ny40OUg3MDAuMWMxLjUtLjUgMy0uNSA0LjUtLjUgNyAwIDE0IDMgMTkgNy40OWgxYzEgLjUgMS41IDEgMi41IDJsMzI1LjQ2IDMyOS40N2M1LjUgNS41IDkuNSAxMyA5LjUgMjEuNSAwIDIuNS0uNSA0LjUtMSA3djI1MC45OHpNNzMyLjYxIDMwMy40N1Y5Ni45OWwyMzIuNDggMjM1LjQ3SDc2MS42Yy03Ljk5IDAtMTQuOTktMy41LTIwLjUtOC40OS00Ljk5LTUtOC40OS0xMi41LTguNDktMjAuNXpcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KX0pfWZ1bmN0aW9uIGVOKCl7cmV0dXJuKDAseS5qc3gpKFwic3ZnXCIse2hlaWdodDpcIjE2XCIsdmlld0JveDpcIjAgMCA1MCA1MFwiLHdpZHRoOlwiMTZcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtkOlwiTSA0My4zMzU5MzggNCBMIDYuNjY3OTY5IDQgQyA1LjE5NTMxMyA0IDQgNS4xOTUzMTMgNCA2LjY2Nzk2OSBMIDQgNDMuMzMyMDMxIEMgNCA0NC44MDQ2ODggNS4xOTUzMTMgNDYgNi42Njc5NjkgNDYgTCA0My4zMzIwMzEgNDYgQyA0NC44MDQ2ODggNDYgNDYgNDQuODA0Njg4IDQ2IDQzLjMzNTkzOCBMIDQ2IDYuNjY3OTY5IEMgNDYgNS4xOTUzMTMgNDQuODA0Njg4IDQgNDMuMzM1OTM4IDQgWiBNIDI3IDM2LjE4MzU5NCBDIDI3IDQwLjE3OTY4OCAyNC42NTYyNSA0MiAyMS4yMzQzNzUgNDIgQyAxOC4xNDA2MjUgNDIgMTUuOTEwMTU2IDM5LjkyNTc4MSAxNSAzOCBMIDE4LjE0NDUzMSAzNi4wOTc2NTYgQyAxOC43NSAzNy4xNzE4NzUgMTkuNjcxODc1IDM4IDIxIDM4IEMgMjIuMjY5NTMxIDM4IDIzIDM3LjUwMzkwNiAyMyAzNS41NzQyMTkgTCAyMyAyMyBMIDI3IDIzIFogTSAzNS42NzU3ODEgNDIgQyAzMi4xMzI4MTMgNDIgMzAuMTIxMDk0IDQwLjIxNDg0NCAyOSAzOCBMIDMyIDM2IEMgMzIuODE2NDA2IDM3LjMzNTkzOCAzMy43MDcwMzEgMzguNjEzMjgxIDM1LjU4OTg0NCAzOC42MTMyODEgQyAzNy4xNzE4NzUgMzguNjEzMjgxIDM4IDM3LjgyNDIxOSAzOCAzNi43MzA0NjkgQyAzOCAzNS40MjU3ODEgMzcuMTQwNjI1IDM0Ljk2MDkzOCAzNS40MDIzNDQgMzQuMTk5MjE5IEwgMzQuNDQ5MjE5IDMzLjc4OTA2MyBDIDMxLjY5NTMxMyAzMi42MTcxODggMjkuODYzMjgxIDMxLjE0ODQzOCAyOS44NjMyODEgMjguMDM5MDYzIEMgMjkuODYzMjgxIDI1LjE3OTY4OCAzMi4wNDY4NzUgMjMgMzUuNDUzMTI1IDIzIEMgMzcuODc4OTA2IDIzIDM5LjYyMTA5NCAyMy44NDM3NSA0MC44Nzg5MDYgMjYuMDU0Njg4IEwgMzcuOTEwMTU2IDI3Ljk2NDg0NCBDIDM3LjI1MzkwNiAyNi43ODkwNjMgMzYuNTUwNzgxIDI2LjMyODEyNSAzNS40NTMxMjUgMjYuMzI4MTI1IEMgMzQuMzM1OTM4IDI2LjMyODEyNSAzMy42Mjg5MDYgMjcuMDM5MDYzIDMzLjYyODkwNiAyNy45NjQ4NDQgQyAzMy42Mjg5MDYgMjkuMTA5Mzc1IDM0LjMzNTkzOCAyOS41NzAzMTMgMzUuOTcyNjU2IDMwLjI4MTI1IEwgMzYuOTI1NzgxIDMwLjY5MTQwNiBDIDQwLjE3MTg3NSAzMi4wNzgxMjUgNDIgMzMuNDk2MDk0IDQyIDM2LjY4MzU5NCBDIDQyIDQwLjExNzE4OCAzOS4zMDA3ODEgNDIgMzUuNjc1NzgxIDQyIFpcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KX0pfWZ1bmN0aW9uIGVEKCl7cmV0dXJuKDAseS5qc3hzKShcInN2Z1wiLHtmaWxsOlwibm9uZVwiLGhlaWdodDpcIjE0XCIsdmlld0JveDpcIjAgMCA1MTIgNTEyXCIsd2lkdGg6XCIxNFwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwicmVjdFwiLHtmaWxsOlwiY3VycmVudENvbG9yXCIsaGVpZ2h0OlwiNTEyXCIscng6XCI1MFwiLHdpZHRoOlwiNTEyXCJ9KSwoMCx5LmpzeCkoXCJyZWN0XCIse2ZpbGw6XCJjdXJyZW50Q29sb3JcIixoZWlnaHQ6XCI1MTJcIixyeDpcIjUwXCIsd2lkdGg6XCI1MTJcIn0pLCgwLHkuanN4KShcInBhdGhcIix7Y2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIm0zMTYuOTM5IDQwNy40MjR2NTAuMDYxYzguMTM4IDQuMTcyIDE3Ljc2MyA3LjMgMjguODc1IDkuMzg2czIyLjgyMyAzLjEyOSAzNS4xMzUgMy4xMjljMTEuOTk5IDAgMjMuMzk3LTEuMTQ3IDM0LjE5Ni0zLjQ0MiAxMC43OTktMi4yOTQgMjAuMjY4LTYuMDc1IDI4LjQwNi0xMS4zNDIgOC4xMzgtNS4yNjYgMTQuNTgxLTEyLjE1IDE5LjMyOC0yMC42NXM3LjEyMS0xOS4wMDcgNy4xMjEtMzEuNTIyYzAtOS4wNzQtMS4zNTYtMTcuMDI2LTQuMDY5LTIzLjg1N3MtNi42MjUtMTIuOTA2LTExLjczOC0xOC4yMjVjLTUuMTEyLTUuMzE5LTExLjI0Mi0xMC4wOTEtMTguMzg5LTE0LjMxNXMtMTUuMjA3LTguMjEzLTI0LjE4LTExLjk2N2MtNi41NzMtMi43MTItMTIuNDY4LTUuMzQ1LTE3LjY4NS03LjktNS4yMTctMi41NTYtOS42NTEtNS4xNjMtMTMuMzAzLTcuODIyLTMuNjUyLTIuNjYtNi40NjktNS40NzYtOC40NTEtOC40NDgtMS45ODItMi45NzMtMi45NzQtNi4zMzYtMi45NzQtMTAuMDkxIDAtMy40NDEuODg3LTYuNTQ0IDIuNjYxLTkuMzA4czQuMjc4LTUuMTM2IDcuNTEyLTcuMTE4YzMuMjM1LTEuOTgxIDcuMTk5LTMuNTIgMTEuODk0LTQuNjE1IDQuNjk2LTEuMDk1IDkuOTEyLTEuNjQyIDE1LjY1MS0xLjY0MiA0LjE3MyAwIDguNTgxLjMxMyAxMy4yMjQuOTM4IDQuNjQzLjYyNiA5LjMxMiAxLjU5MSAxNC4wMDggMi44OTQgNC42OTUgMS4zMDQgOS4yNTkgMi45NDcgMTMuNjk0IDQuOTI4IDQuNDM0IDEuOTgyIDguNTI5IDQuMjc2IDEyLjI4NSA2Ljg4NHYtNDYuNzc2Yy03LjYxNi0yLjkyLTE1LjkzNy01LjA4NC0yNC45NjItNi40OTJzLTE5LjM4MS0yLjExMi0zMS4wNjYtMi4xMTJjLTExLjg5NSAwLTIzLjE2MyAxLjI3OC0zMy44MDUgMy44MzNzLTIwLjAwNiA2LjU0NC0yOC4wOTMgMTEuOTY3Yy04LjA4NiA1LjQyNC0xNC40NzYgMTIuMzMzLTE5LjE3MSAyMC43MjktNC42OTUgOC4zOTUtNy4wNDMgMTguNDMzLTcuMDQzIDMwLjExNCAwIDE0LjkxNCA0LjMwNCAyNy42MzggMTIuOTEyIDM4LjE3MiA4LjYwNyAxMC41MzMgMjEuNjc1IDE5LjQ1IDM5LjIwNCAyNi43NTEgNi44ODYgMi44MTYgMTMuMzAzIDUuNTc5IDE5LjI1IDguMjkxczExLjA4NiA1LjUyOCAxNS40MTUgOC40NDhjNC4zMyAyLjkyIDcuNzQ3IDYuMTAxIDEwLjI1MiA5LjU0MyAyLjUwNCAzLjQ0MSAzLjc1NiA3LjM1MiAzLjc1NiAxMS43MzMgMCAzLjIzMy0uNzgzIDYuMjMxLTIuMzQ4IDguOTk1cy0zLjkzOSA1LjE2Mi03LjEyMSA3LjE5Ni03LjE0NyAzLjYyNC0xMS44OTQgNC43NzFjLTQuNzQ4IDEuMTQ4LTEwLjMwMyAxLjcyMS0xNi42NjggMS43MjEtMTAuODUxIDAtMjEuNTk3LTEuOTAzLTMyLjI0LTUuNzEtMTAuNjQyLTMuODA2LTIwLjUwMi05LjUxNi0yOS41NzktMTcuMTN6bS04NC4xNTktMTIzLjM0Mmg2NC4yMnYtNDEuMDgyaC0xNzl2NDEuMDgyaDYzLjkwNnYxODIuOTE4aDUwLjg3NHpcIixmaWxsOlwidmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApXCIsZmlsbFJ1bGU6XCJldmVub2RkXCJ9KV19KX1mdW5jdGlvbiBlQigpe3JldHVybigwLHkuanN4KShcInN2Z1wiLHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTdcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMTQuNSA3djdhMi41IDIuNSAwIDAgMS0yLjUgMi41SDRBMi41IDIuNSAwIDAgMSAxLjUgMTRWLjVoNy41ODZhMSAxIDAgMCAxIC43MDcuMjkzbDQuNDE0IDQuNDE0YTEgMSAwIDAgMSAuMjkzLjcwN1Y3ek0xMyA3djdhMSAxIDAgMCAxLTEgMUg0YTEgMSAwIDAgMS0xLTFWMmg1djVoNXpNOS41IDIuNjIxVjUuNWgyLjg3OUw5LjUgMi42MjF6XCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSl9KX1mdW5jdGlvbiBlTSgpe3JldHVybigwLHkuanN4cykoXCJzdmdcIix7aGVpZ2h0OlwiMTZcIixzdHJva2VMaW5lam9pbjpcInJvdW5kXCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLHdpZHRoOlwiMTZcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwiZ1wiLHtjbGlwUGF0aDpcInVybCgjZmlsZV9yZWFjdF9jbGlwMF84NzJfMzE4MylcIixjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNC41IDEuOTM3ODJDNC43MDEyOSAxLjgyMTYxIDQuOTk0NzIgMS43ODU4IDUuNDEzMTUgMS45MTA1M0M1LjgzMjk4IDIuMDM1NjcgNi4zMzEzOSAyLjMxMDczIDYuODc2MjcgMi43Mzk0OEM3LjAxMTM2IDIuODQ1NzggNy4xNDgwMyAyLjk2MDUyIDcuMjg1NzMgMy4wODMzMUM2Ljg2MjE3IDMuNTM0NDYgNi40NDIzOSA0LjA0MzU4IDYuMDM3NTIgNC42MDA5MkM1LjM1MjQzIDQuNjcyODggNC43MDE2NCA0Ljc4MTg2IDQuMDk5MTYgNC45MjMwOUM0LjA2MTY3IDQuNzQyNDQgNC4wMzA2NCA0LjU2NjcxIDQuMDA2MTIgNC4zOTY1NkMzLjkwNzI1IDMuNzEwMzEgMy45MTgyNSAzLjE0MTE0IDQuMDE5NzkgMi43MTQ5OUM0LjEyMDk5IDIuMjkwMjUgNC4yOTg3MSAyLjA1NDA0IDQuNSAxLjkzNzgyWk03LjQ5NDY2IDEuOTUzNjFDNy42NjIyNSAyLjA4NTQ4IDcuODMwOTIgMi4yMjgwNCA3Ljk5OTk5IDIuMzgwNjdDOC4xNjkwNiAyLjIyODA0IDguMzM3NzMgMi4wODU0OCA4LjUwNTMyIDEuOTUzNjFDOS4xMDkyMSAxLjQ3ODQyIDkuNzE5ODIgMS4xMjU0OSAxMC4zMDEyIDAuOTUyMjAyQzEwLjg4MzkgMC43Nzg0OTYgMTEuNDgzOCAwLjc3MzggMTIgMS4wNzE4QzEyLjUxNjEgMS4zNjk4IDEyLjgxMiAxLjg5MTY5IDEyLjk1MyAyLjQ4MzIyQzEzLjA5MzYgMy4wNzMzMyAxMy4wOTMyIDMuNzc4NTggMTIuOTgzNiA0LjUzOTE3QzEyLjk1MzIgNC43NTAyNCAxMi45MTQxIDQuOTY3NiAxMi44NjY1IDUuMTkwMzRDMTMuMDgzMiA1LjI2MDQ0IDEzLjI5MSA1LjMzNTI0IDEzLjQ4OSA1LjQxNDQ0QzE0LjIwMjUgNS42OTk4MyAxNC44MTM0IDYuMDUyMTcgMTUuMjU0MiA2LjQ2ODk5QzE1LjY5NiA2Ljg4NjggMTYgNy40MDQgMTYgOEMxNiA4LjU5NiAxNS42OTYgOS4xMTMxOSAxNS4yNTQyIDkuNTMxMDFDMTQuODEzNCA5Ljk0NzgzIDE0LjIwMjUgMTAuMzAwMiAxMy40ODkgMTAuNTg1NkMxMy4yOTEgMTAuNjY0OCAxMy4wODMyIDEwLjczOTYgMTIuODY2NSAxMC44MDk3QzEyLjkxNDEgMTEuMDMyNCAxMi45NTMyIDExLjI0OTggMTIuOTgzNyAxMS40NjA4QzEzLjA5MzIgMTIuMjIxNCAxMy4wOTM2IDEyLjkyNjcgMTIuOTUzIDEzLjUxNjhDMTIuODEyIDE0LjEwODMgMTIuNTE2MSAxNC42MzAyIDEyIDE0LjkyODJDMTEuNDgzOSAxNS4yMjYyIDEwLjg4MzkgMTUuMjIxNSAxMC4zMDEyIDE1LjA0NzhDOS43MTk4NCAxNC44NzQ1IDkuMTA5MjMgMTQuNTIxNiA4LjUwNTM0IDE0LjA0NjRDOC4zMzc3NSAxMy45MTQ1IDguMTY5MDYgMTMuNzcxOSA3Ljk5OTk5IDEzLjYxOTNDNy44MzA5MSAxMy43NzE5IDcuNjYyMjMgMTMuOTE0NSA3LjQ5NDY0IDE0LjA0NjRDNi44OTA3NSAxNC41MjE2IDYuMjgwMTQgMTQuODc0NSA1LjY5ODc5IDE1LjA0NzhDNS4xMTYwNSAxNS4yMjE1IDQuNTE2MTMgMTUuMjI2MiAzLjk5OTk4IDE0LjkyODJDMy40ODM4MyAxNC42MzAyIDMuMTg3OTQgMTQuMTA4MyAzLjA0NyAxMy41MTY4QzIuOTA2NCAxMi45MjY3IDIuOTA2NzQgMTIuMjIxNCAzLjAxNjMyIDExLjQ2MDhDMy4wNDY3MyAxMS4yNDk4IDMuMDg1ODYgMTEuMDMyNCAzLjEzMzUxIDEwLjgwOTdDMi45MTY3OSAxMC43Mzk1IDIuNzA5IDEwLjY2NDggMi41MTEgMTAuNTg1NkMxLjc5NzUyIDEwLjMwMDIgMS4xODY1OCA5Ljk0NzgzIDAuNzQ1ODMzIDkuNTMxMDFDMC4zMDQwMjggOS4xMTMxOSAwIDguNTk2IDAgOEMwIDcuNDA0IDAuMzA0MDI4IDYuODg2OCAwLjc0NTgzMyA2LjQ2ODk5QzEuMTg2NTggNi4wNTIxNyAxLjc5NzUyIDUuNjk5ODMgMi41MTEgNS40MTQ0NEMyLjcwOSA1LjMzNTI0IDIuOTE2OCA1LjI2MDQ0IDMuMTMzNTIgNS4xOTAzNEMzLjA4NTg3IDQuOTY3NiAzLjA0Njc1IDQuNzUwMjQgMy4wMTYzNCA0LjUzOTE3QzIuOTA2NzYgMy43Nzg1OCAyLjkwNjQyIDMuMDczMzIgMy4wNDcwMiAyLjQ4MzIxQzMuMTg3OTYgMS44OTE2OSAzLjQ4Mzg1IDEuMzY5OCA0IDEuMDcxOEM0LjUxNjE1IDAuNzczNzk4IDUuMTE2MDcgMC43Nzg0OTUgNS42OTg4MSAwLjk1MjIwMUM2LjI4MDE2IDEuMTI1NDkgNi44OTA3NyAxLjQ3ODQxIDcuNDk0NjYgMS45NTM2MVpNNy4zNjc0NyA0LjUxMDI1QzcuNTc3MzUgNC4yNTE5NCA3Ljc4ODgxIDQuMDA5MjcgNy45OTk5OSAzLjc4MzU2QzguMjExMTcgNC4wMDkyNyA4LjQyMjYzIDQuMjUxOTQgOC42MzI1MSA0LjUxMDI1QzguNDIzNjkgNC41MDM0NiA4LjIxMjc0IDQuNSA4IDQuNUM3Ljc4NzI1IDQuNSA3LjU3NjMgNC41MDM0NSA3LjM2NzQ3IDQuNTEwMjVaTTguNzE0MjUgMy4wODMzMUM5LjEzNzgxIDMuNTM0NDcgOS41NTc1OSA0LjA0MzU4IDkuOTYyNDYgNC42MDA5MkMxMC42NDc1IDQuNjcyODggMTEuMjk4MyA0Ljc4MTg2IDExLjkwMDggNC45MjMwOUMxMS45MzgzIDQuNzQyNDQgMTEuOTY5MyA0LjU2NjcxIDExLjk5MzkgNC4zOTY1N0MxMi4wOTI3IDMuNzEwMzEgMTIuMDgxNyAzLjE0MTE0IDExLjk4MDIgMi43MTQ5OUMxMS44NzkgMi4yOTAyNSAxMS43MDEzIDIuMDU0MDQgMTEuNSAxLjkzNzgyQzExLjI5ODcgMS44MjE2MSAxMS4wMDUzIDEuNzg1OCAxMC41ODY4IDEuOTEwNTNDMTAuMTY3IDIuMDM1NjggOS42Njg1OSAyLjMxMDczIDkuMTIzNzEgMi43Mzk0OEM4Ljk4ODYyIDIuODQ1NzggOC44NTE5NiAyLjk2MDUyIDguNzE0MjUgMy4wODMzMVpNOCA1LjVDOC40ODQzMyA1LjUgOC45NTYzOCA1LjUxODg1IDkuNDExODggNS41NTQ1NkM5LjY3MDU2IDUuOTMxMTggOS45MjI5IDYuMzMwNTYgMTAuMTY1MSA2Ljc1QzEwLjQwNzIgNy4xNjk0NCAxMC42MjY5IDcuNTg3NjYgMTAuODIzNyA3Ljk5OTk4QzEwLjYyNjkgOC40MTIzMiAxMC40MDcyIDguODMwNTUgMTAuMTY1IDkuMjVDOS45MjI4OCA5LjY2OTQ0IDkuNjcwNTMgMTAuMDY4OCA5LjQxMTg1IDEwLjQ0NTRDOC45NTYzNiAxMC40ODEyIDguNDg0MzIgMTAuNSA4IDEwLjVDNy41MTU2NyAxMC41IDcuMDQzNjMgMTAuNDgxMiA2LjU4ODEzIDEwLjQ0NTRDNi4zMjk0NSAxMC4wNjg4IDYuMDc3MSA5LjY2OTQ0IDUuODM0OTQgOS4yNUM1LjU5Mjc3IDguODMwNTUgNS4zNzMwNiA4LjQxMjMyIDUuMTc2MjQgNy45OTk5OEM1LjM3MzA2IDcuNTg3NjUgNS41OTI3NSA3LjE2OTQ0IDUuODM0OTIgNi43NUM2LjA3NzA4IDYuMzMwNTYgNi4zMjk0MiA1LjkzMTE4IDYuNTg4MSA1LjU1NDU2QzcuMDQzNjEgNS41MTg4NCA3LjUxNTY2IDUuNSA4IDUuNVpNMTEuMDMxMSA2LjI1QzExLjEzNzUgNi40MzQyMyAxMS4yMzk5IDYuNjE4NjQgMTEuMzM4NSA2LjgwMjg3QzExLjQ1NzIgNi40OTE5NyAxMS41NjE2IDYuMTg3NTIgMTEuNjUxNSA1Ljg5MTc4QzExLjM1MDUgNS44MjE3NSAxMS4wMzQ2IDUuNzU5OTYgMTAuNzA2IDUuNzA3MzZDMTAuODE2MyA1Ljg4NDggMTAuOTI0NyA2LjA2NTc2IDExLjAzMTEgNi4yNVpNMTEuMDMxMSA5Ljc1QzExLjEzNzQgOS41NjU3NiAxMS4yMzk5IDkuMzgxMzMgMTEuMzM4NSA5LjE5NzA5QzExLjQ1NzIgOS41MDgwMSAxMS41NjE3IDkuODEyNDYgMTEuNjUxNSAxMC4xMDgyQzExLjM1MDUgMTAuMTc4MiAxMS4wMzQ2IDEwLjI0IDEwLjcwNTkgMTAuMjkyNkMxMC44MTYyIDEwLjExNTIgMTAuOTI0NyA5LjkzNDI0IDExLjAzMTEgOS43NVpNMTEuOTI0OSA3Ljk5OTk4QzEyLjIwNTEgOC42MjkyNyAxMi40MzYyIDkuMjQ3MzggMTIuNjE1MSA5LjgzOTc3QzEyLjc5MDMgOS43ODE5MSAxMi45NTggOS43MjA5MiAxMy4xMTc2IDkuNjU3MDhDMTMuNzYxNCA5LjM5OTU4IDE0LjI0ODggOS4xMDU0NyAxNC41NjcxIDguODA0NDZDMTQuODg0MyA4LjUwNDQ1IDE1IDguMjMyNDMgMTUgOEMxNSA3Ljc2NzU3IDE0Ljg4NDMgNy40OTU1NSAxNC41NjcxIDcuMTk1NTRDMTQuMjQ4OCA2Ljg5NDUzIDEzLjc2MTQgNi42MDA0MiAxMy4xMTc2IDYuMzQyOTJDMTIuOTU4IDYuMjc5MDcgMTIuNzkwMyA2LjIxODA4IDEyLjYxNTEgNi4xNjAyMkMxMi40MzYyIDYuNzUyNiAxMi4yMDUxIDcuMzcwNjkgMTEuOTI0OSA3Ljk5OTk4Wk05Ljk2MjQ0IDExLjM5OTFDMTAuNjQ3NSAxMS4zMjcxIDExLjI5ODMgMTEuMjE4MSAxMS45MDA4IDExLjA3NjlDMTEuOTM4MyAxMS4yNTc2IDExLjk2OTQgMTEuNDMzMyAxMS45OTM5IDExLjYwMzRDMTIuMDkyOCAxMi4yODk3IDEyLjA4MTcgMTIuODU4OSAxMS45ODAyIDEzLjI4NUMxMS44NzkgMTMuNzA5OCAxMS43MDEzIDEzLjk0NiAxMS41IDE0LjA2MjJDMTEuMjk4NyAxNC4xNzg0IDExLjAwNTMgMTQuMjE0MiAxMC41ODY4IDE0LjA4OTVDMTAuMTY3IDEzLjk2NDMgOS42Njg2MSAxMy42ODkzIDkuMTIzNzMgMTMuMjYwNUM4Ljk4ODYzIDEzLjE1NDIgOC44NTE5NiAxMy4wMzk1IDguNzE0MjQgMTIuOTE2N0M5LjEzNzggMTIuNDY1NSA5LjU1NzU4IDExLjk1NjQgOS45NjI0NCAxMS4zOTkxWk04LjYzMjQ5IDExLjQ4OThDOC40MjI2MiAxMS43NDgxIDguMjExMTYgMTEuOTkwNyA3Ljk5OTk5IDEyLjIxNjRDNy43ODg4MSAxMS45OTA3IDcuNTc3MzcgMTEuNzQ4MSA3LjM2NzQ5IDExLjQ4OTdDNy41NzYzMSAxMS40OTY1IDcuNzg3MjYgMTEuNSA4IDExLjVDOC4yMTI3MyAxMS41IDguNDIzNjcgMTEuNDk2NSA4LjYzMjQ5IDExLjQ4OThaTTQuOTY4OTEgOS43NUM1LjA3NTI4IDkuOTM0MjQgNS4xODM3NSAxMC4xMTUyIDUuMjk0MDQgMTAuMjkyNkM0Ljk2NTQgMTAuMjQgNC42NDk1MSAxMC4xNzgyIDQuMzQ4NDQgMTAuMTA4MkM0LjQzODMzIDkuODEyNDYgNC41NDI3NiA5LjUwOCA0LjY2MTUyIDkuMTk3MDhDNC43NjAwNSA5LjM4MTMzIDQuODYyNTQgOS41NjU3NSA0Ljk2ODkxIDkuNzVaTTYuMDM3NTQgMTEuMzk5MUM1LjM1MjQ0IDExLjMyNzEgNC43MDE2MyAxMS4yMTgxIDQuMDk5MTQgMTEuMDc2OUM0LjA2MTY1IDExLjI1NzYgNC4wMzA2MiAxMS40MzMzIDQuMDA2MSAxMS42MDM0QzMuOTA3MjMgMTIuMjg5NyAzLjkxODIzIDEyLjg1ODkgNC4wMTk3NyAxMy4yODVDNC4xMjA5NyAxMy43MDk4IDQuMjk4NjkgMTMuOTQ2IDQuNDk5OTggMTQuMDYyMkM0LjcwMTI3IDE0LjE3ODQgNC45OTQ3IDE0LjIxNDIgNS40MTMxMyAxNC4wODk1QzUuODMyOTYgMTMuOTY0MyA2LjMzMTM3IDEzLjY4OTMgNi44NzYyNSAxMy4yNjA1QzcuMDExMzUgMTMuMTU0MiA3LjE0ODAyIDEzLjAzOTUgNy4yODU3MyAxMi45MTY3QzYuODYyMTcgMTIuNDY1NSA2LjQ0MjQgMTEuOTU2NCA2LjAzNzU0IDExLjM5OTFaTTQuMDc1MDcgNy45OTk5OEMzLjc5NDg0IDguNjI5MjcgMy41NjM4MSA5LjI0NzM3IDMuMzg0ODkgOS44Mzk3N0MzLjIwOTY5IDkuNzgxOTEgMy4wNDIgOS43MjA5MiAyLjg4MjM5IDkuNjU3MDhDMi4yMzg2NCA5LjM5OTU4IDEuNzUxMjMgOS4xMDU0NyAxLjQzMjk0IDguODA0NDZDMS4xMTU3MSA4LjUwNDQ1IDEgOC4yMzI0MyAxIDhDMSA3Ljc2NzU3IDEuMTE1NzEgNy40OTU1NSAxLjQzMjk0IDcuMTk1NTRDMS43NTEyMyA2Ljg5NDUzIDIuMjM4NjQgNi42MDA0MiAyLjg4MjM5IDYuMzQyOTJDMy4wNDIgNi4yNzkwNyAzLjIwOTcgNi4yMTgwOCAzLjM4NDkgNi4xNjAyMkMzLjU2MzgzIDYuNzUyNjEgMy43OTQ4NCA3LjM3MDY5IDQuMDc1MDcgNy45OTk5OFpNNC42NjE1MiA2LjgwMjg3QzQuNTQyNzcgNi40OTE5NyA0LjQzODM1IDYuMTg3NTIgNC4zNDg0NiA1Ljg5MTc4QzQuNjQ5NTIgNS44MjE3NSA0Ljk2NTM5IDUuNzU5OTYgNS4yOTQwMiA1LjcwNzM2QzUuMTgzNzMgNS44ODQ4IDUuMDc1MjYgNi4wNjU3NiA0Ljk2ODg5IDYuMjVDNC44NjI1MyA2LjQzNDIzIDQuNzYwMDUgNi42MTg2NCA0LjY2MTUyIDYuODAyODdaTTkuMjUgOEM5LjI1IDguNjkwMzYgOC42OTAzNiA5LjI1IDggOS4yNUM3LjMwOTY0IDkuMjUgNi43NSA4LjY5MDM2IDYuNzUgOEM2Ljc1IDcuMzA5NjUgNy4zMDk2NCA2Ljc1IDggNi43NUM4LjY5MDM2IDYuNzUgOS4yNSA3LjMwOTY1IDkuMjUgOFpcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KX0pLCgwLHkuanN4KShcImRlZnNcIix7Y2hpbGRyZW46KDAseS5qc3gpKFwiY2xpcFBhdGhcIix7aWQ6XCJmaWxlX3JlYWN0X2NsaXAwXzg3Ml8zMTgzXCIsY2hpbGRyZW46KDAseS5qc3gpKFwicmVjdFwiLHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTZcIixmaWxsOlwid2hpdGVcIn0pfSl9KV19KX12YXIgZUk9X193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vZGlzdC9jb21waWxlZC9hbnNlci9pbmRleC5qc1wiKSxlSD1fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZUkpLGVGPV9fd2VicGFja19yZXF1aXJlX18oXCIuL2Rpc3QvY29tcGlsZWQvc3RyaXAtYW5zaS9pbmRleC5qc1wiKSxlVT1fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZUYpO2Z1bmN0aW9uIGVWKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX1mdW5jdGlvbiBlcShlKXt2YXIgbix0PWUuc3RhY2tGcmFtZSxyPWUuY29kZUZyYW1lLG89KDAseC51c2VNZW1vKShmdW5jdGlvbigpe3ZhciBlLG47cmV0dXJuKGZ1bmN0aW9uKGUpe3ZhciBuPWVIKCkuYW5zaVRvSnNvbihlLHtqc29uOiEwLHVzZV9jbGFzc2VzOiEwLHJlbW92ZV9lbXB0eTohMH0pLHQ9W10scj1bXSxvPSEwLGE9ITEsaT12b2lkIDA7dHJ5e2Zvcih2YXIgbCxzPW5bU3ltYm9sLml0ZXJhdG9yXSgpOyEobz0obD1zLm5leHQoKSkuZG9uZSk7bz0hMCl7dmFyIGM9bC52YWx1ZTtpZihcInN0cmluZ1wiPT10eXBlb2YgYy5jb250ZW50JiZjLmNvbnRlbnQuaW5jbHVkZXMoXCJcXG5cIikpZm9yKHZhciB1PWMuY29udGVudC5zcGxpdChcIlxcblwiKSxkPTA7ZDx1Lmxlbmd0aDtkKyspe3ZhciBmPXVbZF07ZiYmci5wdXNoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIG49bnVsbCE9bj9uOnt9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QobikpLmZvckVhY2goZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSksZX0oZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7fSxjKSx7Y29udGVudDpmfSkpLGQ8dS5sZW5ndGgtMSYmKHQucHVzaChyKSxyPVtdKX1lbHNlIHIucHVzaChjKX19Y2F0Y2goZSl7YT0hMCxpPWV9ZmluYWxseXt0cnl7b3x8bnVsbD09cy5yZXR1cm58fHMucmV0dXJuKCl9ZmluYWxseXtpZihhKXRocm93IGl9fXJldHVybiByLmxlbmd0aD4wJiZ0LnB1c2gociksdH0pKChuPShlPXIuc3BsaXQoL1xccj9cXG4vZykpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PS9ePj8gK1xcZCsgK1xcfCBbIF0rLy5leGVjKGVVKCkoZSkpP251bGw6L14+PyArXFxkKyArXFx8ICggKikvLmV4ZWMoZVUoKShlKSl9KS5maWx0ZXIoQm9vbGVhbikubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnBvcCgpfSkucmVkdWNlKGZ1bmN0aW9uKGUsbil7cmV0dXJuIGlzTmFOKGUpP24ubGVuZ3RoOk1hdGgubWluKGUsbi5sZW5ndGgpfSxOYU4pKT4xP2UubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJufih0PWUuaW5kZXhPZihcInxcIikpP2Uuc3Vic3RyaW5nKDAsdCkrZS5zdWJzdHJpbmcodCkucmVwbGFjZShcIl5cXFxcIHtcIi5jb25jYXQobixcIn1cIiksXCJcIik6ZX0pLmpvaW4oXCJcXG5cIik6ZS5qb2luKFwiXFxuXCIpKS5tYXAoZnVuY3Rpb24oZSl7dmFyIG4scixvLGEsaSxsLHMsYyx1O3JldHVybntsaW5lOmUscGFyc2VkTGluZToobj1lLHI9dCwoKG51bGw9PShvPW5bMF0pP3ZvaWQgMDpvLmNvbnRlbnQpPT09XCI+XCJ8fChudWxsPT0oYT1uWzBdKT92b2lkIDA6YS5jb250ZW50KT09PVwiIFwiKSYmKHM9bnVsbD09KGw9blsxXSl8fG51bGw9PSh1PWwuY29udGVudCl8fG51bGw9PShjPXUucmVwbGFjZShcInxcIixcIlwiKSk/dm9pZCAwOmMudHJpbSgpKSx7bGluZU51bWJlcjpzLGlzRXJyb3JlZExpbmU6cz09PShudWxsPT0oaT1yLmxpbmVOdW1iZXIpP3ZvaWQgMDppLnRvU3RyaW5nKCkpfSl9fSl9LFtyLHRdKSxhPWVFKHtmaWxlOnQuZmlsZSxsaW5lTnVtYmVyOnQubGluZU51bWJlcixjb2x1bW46dC5jb2x1bW59KSxpPW51bGw9PXR8fG51bGw9PShuPXQuZmlsZSk/dm9pZCAwOm4uc3BsaXQoXCIuXCIpLnBvcCgpO3JldHVybigwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1jb2RlZnJhbWVcIjohMCxjaGlsZHJlbjpbKDAseS5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTpcImNvZGUtZnJhbWUtaGVhZGVyXCIsY2hpbGRyZW46KDAseS5qc3hzKShcInBcIix7Y2xhc3NOYW1lOlwiY29kZS1mcmFtZS1saW5rXCIsY2hpbGRyZW46WygwLHkuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwiY29kZS1mcmFtZS1pY29uXCIsY2hpbGRyZW46KDAseS5qc3gpKGVULHtsYW5nOml9KX0pLCgwLHkuanN4cykoXCJzcGFuXCIse1wiZGF0YS10ZXh0XCI6ITAsY2hpbGRyZW46W2VTKHQpLFwiIEBcIixcIiBcIiwoMCx5LmpzeCkoZWIse3RleHQ6dC5tZXRob2ROYW1lfSldfSksKDAseS5qc3gpKFwiYnV0dG9uXCIse1wiYXJpYS1sYWJlbFwiOlwiT3BlbiBpbiBlZGl0b3JcIixcImRhdGEtd2l0aC1vcGVuLWluLWVkaXRvci1saW5rLXNvdXJjZS1maWxlXCI6ITAsb25DbGljazphLGNoaWxkcmVuOigwLHkuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwiY29kZS1mcmFtZS1pY29uXCIsXCJkYXRhLWljb25cIjpcInJpZ2h0XCIsY2hpbGRyZW46KDAseS5qc3gpKGV6LHt3aWR0aDoxNixoZWlnaHQ6MTZ9KX0pfSldfSl9KSwoMCx5LmpzeCkoXCJwcmVcIix7Y2xhc3NOYW1lOlwiY29kZS1mcmFtZS1wcmVcIixjaGlsZHJlbjooMCx5LmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwiY29kZS1mcmFtZS1saW5lc1wiLGNoaWxkcmVuOm8ubWFwKGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPWUubGluZSxhPWUucGFyc2VkTGluZSxpPWEubGluZU51bWJlcixsPWEuaXNFcnJvcmVkTGluZSxzPXt9O3JldHVybiBpJiYoc1tcImRhdGEtbmV4dGpzLWNvZGVmcmFtZS1saW5lXCJdPWkpLGwmJihzW1wiZGF0YS1uZXh0anMtY29kZWZyYW1lLWxpbmUtLWVycm9yZWRcIl09ITApLCgwLHkuanN4KShcImRpdlwiLCh0PWVWKHt9LHMpLHI9cj17Y2hpbGRyZW46by5tYXAoZnVuY3Rpb24oZSxuKXtyZXR1cm4oMCx5LmpzeCkoXCJzcGFuXCIse3N0eWxlOmVWKHtjb2xvcjplLmZnP1widmFyKC0tY29sb3ItXCIuY29uY2F0KGUuZmcsXCIpXCIpOnZvaWQgMH0sXCJib2xkXCI9PT1lLmRlY29yYXRpb24/e2ZvbnRXZWlnaHQ6NTAwfTpcIml0YWxpY1wiPT09ZS5kZWNvcmF0aW9uP3tmb250U3R5bGU6XCJpdGFsaWNcIn06dm9pZCAwKSxjaGlsZHJlbjplLmNvbnRlbnR9LFwiZnJhbWUtXCIuY29uY2F0KG4pKX0pfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHIpKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KHIpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpKX0pLHQpLFwibGluZS1cIi5jb25jYXQobikpfSl9KX0pXX0pfWZ1bmN0aW9uIGVXKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn12YXIgZSQ9W1wiW2RhdGEtbmV4dC1tYXJrXVwiLFwiW2RhdGEtaXNzdWVzLW9wZW5dXCIsXCIjbmV4dGpzLWRldi10b29scy1tZW51XCIsXCJbZGF0YS1uZXh0anMtZXJyb3Itb3ZlcmxheS1uYXZdXCIsXCJbZGF0YS1pbmZvLXBvcG92ZXJdXCIsXCJbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtb3ZlcmxheV1cIixcIltkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1mb290ZXJdXCIsXCJbZGF0YS1uZXh0anMtZXJyb3Itb3ZlcmxheS1mb290ZXJdXCJdLGVaPWZ1bmN0aW9uKGUpe3ZhciBuLHQscixvLGEsaSxsLHM9ZS5jaGlsZHJlbixjPWUuY2xhc3NOYW1lLHU9ZS5vbkNsb3NlLGQ9ZVtcImFyaWEtbGFiZWxsZWRieVwiXSxmPWVbXCJhcmlhLWRlc2NyaWJlZGJ5XCJdLHA9KGUuZGlhbG9nUmVzaXplclJlZixmdW5jdGlvbihlLG4pe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHQscixvPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSxuLmluZGV4T2YodCk+PTB8fChvW3RdPWVbdF0pO3JldHVybiBvfShlLG4pO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl0PWFbcl0sIShuLmluZGV4T2YodCk+PTApJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSx0KSYmKG9bdF09ZVt0XSl9cmV0dXJuIG99KGUsW1wiY2hpbGRyZW5cIixcImNsYXNzTmFtZVwiLFwib25DbG9zZVwiLFwiYXJpYS1sYWJlbGxlZGJ5XCIsXCJhcmlhLWRlc2NyaWJlZGJ5XCIsXCJkaWFsb2dSZXNpemVyUmVmXCJdKSksaD14LnVzZVJlZihudWxsKSxnPShuPXgudXNlU3RhdGUoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudC5oYXNGb2N1cygpP1wiZGlhbG9nXCI6dm9pZCAwKSx0PTIsZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0obil8fGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0odD1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2godC52YWx1ZSksYS5sZW5ndGghPT1uKTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0obiwyKXx8ZnVuY3Rpb24oZSxuKXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gZVcoZSxuKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKHQpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gZVcoZSxuKX19KG4sdCl8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCkpLG09Z1swXSx2PWdbMV07cmV0dXJuIHI9aC5jdXJyZW50LG89ZSQsYT1mdW5jdGlvbihlKXtyZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpLG51bGw9PXU/dm9pZCAwOnUoKX0seC51c2VFZmZlY3QoZnVuY3Rpb24oKXtpZihudWxsIT1yJiZudWxsIT1hKXt2YXIgZT1mdW5jdGlvbihlKXshKCFyfHxyLmNvbnRhaW5zKGUudGFyZ2V0KSkmJihvLnNvbWUoZnVuY3Rpb24obil7cmV0dXJuIGUudGFyZ2V0LmNsb3Nlc3Qobil9KXx8YShlKSl9LG49ci5nZXRSb290Tm9kZSgpO3JldHVybiBuLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsZSksbi5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIixlLHtwYXNzaXZlOiExfSksZnVuY3Rpb24oKXtuLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsZSksbi5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIixlKX19fSxbYSxyLG9dKSx4LnVzZUVmZmVjdChmdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKCl7dihkb2N1bWVudC5oYXNGb2N1cygpP1wiZGlhbG9nXCI6dm9pZCAwKX07aWYobnVsbCE9aC5jdXJyZW50KXJldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsZSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsZSksZnVuY3Rpb24oKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsZSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJibHVyXCIsZSl9fSxbXSkseC51c2VFZmZlY3QoZnVuY3Rpb24oKXt2YXIgZSxuLHQ9aC5jdXJyZW50LHI9bnVsbD09dD92b2lkIDA6dC5nZXRSb290Tm9kZSgpLG89KGU9cixudWxsIT0obj1TaGFkb3dSb290KSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmbltTeW1ib2wuaGFzSW5zdGFuY2VdPyEhbltTeW1ib2wuaGFzSW5zdGFuY2VdKGUpOmUgaW5zdGFuY2VvZiBuKT9udWxsPT1yP3ZvaWQgMDpyLmFjdGl2ZUVsZW1lbnQ6bnVsbDtyZXR1cm4gbnVsbD09dHx8dC5mb2N1cygpLGZ1bmN0aW9uKCl7bnVsbD09dHx8dC5ibHVyKCksbnVsbD09b3x8by5mb2N1cygpfX0sW10pLCgwLHkuanN4KShcImRpdlwiLChpPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe3JlZjpoLHRhYkluZGV4Oi0xLFwiZGF0YS1uZXh0anMtZGlhbG9nXCI6ITAscm9sZTptLFwiYXJpYS1sYWJlbGxlZGJ5XCI6ZCxcImFyaWEtZGVzY3JpYmVkYnlcIjpmLFwiYXJpYS1tb2RhbFwiOlwidHJ1ZVwiLGNsYXNzTmFtZTpjLG9uS2V5RG93bjpmdW5jdGlvbihlKXtcIkVzY2FwZVwiPT09ZS5rZXkmJihudWxsPT11fHx1KCkpfX0scCksbD1sPXtjaGlsZHJlbjpzfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhpLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGwpKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KGwpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShpLGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihsLGUpKX0pLGkpKX0sZVk9ZnVuY3Rpb24oZSl7dmFyIG4sdCxyPWUuY2hpbGRyZW4sbz1lLmNsYXNzTmFtZSxhPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLG4uaW5kZXhPZih0KT49MHx8KG9bdF09ZVt0XSk7cmV0dXJuIG99KGUsbik7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSwhKG4uaW5kZXhPZih0KT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHQpJiYob1t0XT1lW3RdKX1yZXR1cm4gb30oZSxbXCJjaGlsZHJlblwiLFwiY2xhc3NOYW1lXCJdKTtyZXR1cm4oMCx5LmpzeCkoXCJkaXZcIiwobj1mdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHtcImRhdGEtbmV4dGpzLWRpYWxvZy1ib2R5XCI6ITAsY2xhc3NOYW1lOm99LGEpLHQ9dD17Y2hpbGRyZW46cn0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKSl9KSxuKSl9LGVYPWZ1bmN0aW9uKGUpe3ZhciBuLHQscj1lLmNoaWxkcmVuLG89ZS5jbGFzc05hbWUsYT1mdW5jdGlvbihlLG4pe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHQscixvPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSxuLmluZGV4T2YodCk+PTB8fChvW3RdPWVbdF0pO3JldHVybiBvfShlLG4pO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl0PWFbcl0sIShuLmluZGV4T2YodCk+PTApJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSx0KSYmKG9bdF09ZVt0XSl9cmV0dXJuIG99KGUsW1wiY2hpbGRyZW5cIixcImNsYXNzTmFtZVwiXSk7cmV0dXJuKDAseS5qc3gpKFwiZGl2XCIsKG49ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7XCJkYXRhLW5leHRqcy1kaWFsb2ctY29udGVudFwiOiEwLGNsYXNzTmFtZTpvfSxhKSx0PXQ9e2NoaWxkcmVuOnJ9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG4sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkpfSksbikpfTtmdW5jdGlvbiBlSyhlKXt2YXIgbix0O3JldHVybigwLHkuanN4KShcImRpdlwiLChuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe1wiZGF0YS1uZXh0anMtZGlhbG9nLWhlYWRlclwiOiEwfSxlKSx0PXQ9e2NoaWxkcmVuOmUuY2hpbGRyZW59LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG4sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkpfSksbikpfWZ1bmN0aW9uIGVRKCl7dmFyIGUsbix0PShlPVtcIlxcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1yb290XSB7XFxuICAgIC0tbmV4dC1kaWFsb2ctcmFkaXVzOiB2YXIoLS1yb3VuZGVkLXhsKTtcXG4gICAgLS1uZXh0LWRpYWxvZy1tYXgtd2lkdGg6IDk2MHB4O1xcbiAgICAtLW5leHQtZGlhbG9nLXJvdy1wYWRkaW5nOiAxNnB4O1xcbiAgICAtLW5leHQtZGlhbG9nLXBhZGRpbmc6IDEycHg7XFxuICAgIC0tbmV4dC1kaWFsb2ctbm90Y2gtaGVpZ2h0OiA0MnB4O1xcbiAgICAtLW5leHQtZGlhbG9nLWJvcmRlci13aWR0aDogMXB4O1xcblxcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgbWF4LWhlaWdodDogY2FsYygxMDAlIC0gNTZweCk7XFxuICAgIG1heC13aWR0aDogdmFyKC0tbmV4dC1kaWFsb2ctbWF4LXdpZHRoKTtcXG4gICAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgc2NhbGU6IDAuOTc7XFxuICAgIG9wYWNpdHk6IDA7XFxuICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IHNjYWxlLCBvcGFjaXR5O1xcbiAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiB2YXIoLS10cmFuc2l0aW9uLWR1cmF0aW9uKTtcXG4gICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLXRpbWluZy1vdmVybGF5KTtcXG5cXG4gICAgJltkYXRhLXJlbmRlcmVkPSd0cnVlJ10ge1xcbiAgICAgIG9wYWNpdHk6IDE7XFxuICAgICAgc2NhbGU6IDE7XFxuICAgIH1cXG5cXG4gICAgW2RhdGEtbmV4dGpzLXNjcm9sbC1mYWRlcl1bZGF0YS1zaWRlPSd0b3AnXSB7XFxuICAgICAgbGVmdDogMXB4O1xcbiAgICAgIHRvcDogY2FsYyhcXG4gICAgICAgIHZhcigtLW5leHQtZGlhbG9nLW5vdGNoLWhlaWdodCkgKyB2YXIoLS1uZXh0LWRpYWxvZy1ib3JkZXItd2lkdGgpXFxuICAgICAgKTtcXG4gICAgICB3aWR0aDogY2FsYygxMDAlIC0gdmFyKC0tbmV4dC1kaWFsb2ctcGFkZGluZykpO1xcbiAgICAgIG9wYWNpdHk6IDA7XFxuICAgIH1cXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kaWFsb2ddIHtcXG4gICAgb3V0bGluZTogMDtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kaWFsb2ddLFxcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZ10gKiB7XFxuICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcXG4gICAgICB3aWR0aDogNnB4O1xcbiAgICAgIGhlaWdodDogNnB4O1xcbiAgICAgIGJvcmRlci1yYWRpdXM6IDAgMCAxcmVtIDFyZW07XFxuICAgICAgbWFyZ2luLWJvdHRvbTogMXJlbTtcXG4gICAgfVxcblxcbiAgICAmOjotd2Via2l0LXNjcm9sbGJhci1idXR0b24ge1xcbiAgICAgIGRpc3BsYXk6IG5vbmU7XFxuICAgIH1cXG5cXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xcbiAgICAgIGJvcmRlci1yYWRpdXM6IDAgMCAxcmVtIDFyZW07XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xcbiAgICB9XFxuXFxuICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcXG4gICAgICBib3JkZXItcmFkaXVzOiAxcmVtO1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWdyYXktNTAwKTtcXG4gICAgfVxcbiAgfVxcblxcbiAgLyogUGxhY2Ugb3ZlcmZsb3c6IGhpZGRlbiBvbiB0aGlzIHNvIHdlIGNhbiBicmVhayBvdXQgZnJvbSBbZGF0YS1uZXh0anMtZGlhbG9nXSAqL1xcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1zaXplcl0ge1xcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgICBib3JkZXItcmFkaXVzOiBpbmhlcml0O1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1iYWNrZHJvcF0ge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IHZhcigtLXRyYW5zaXRpb24tZHVyYXRpb24pIHZhcigtLXRpbWluZy1vdmVybGF5KTtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kaWFsb2ctb3ZlcmxheV0ge1xcbiAgICBtYXJnaW46IDhweDtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kaWFsb2ctb3ZlcmxheV1bZGF0YS1yZW5kZXJlZD0ndHJ1ZSddXFxuICAgIFtkYXRhLW5leHRqcy1kaWFsb2ctYmFja2Ryb3BdIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kaWFsb2ctY29udGVudF0ge1xcbiAgICBib3JkZXI6IG5vbmU7XFxuICAgIG1hcmdpbjogMDtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICBwYWRkaW5nOiB2YXIoLS1uZXh0LWRpYWxvZy1wYWRkaW5nKTtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kaWFsb2ctY29udGVudF0gPiBbZGF0YS1uZXh0anMtZGlhbG9nLWhlYWRlcl0ge1xcbiAgICBmbGV4LXNocmluazogMDtcXG4gICAgbWFyZ2luLWJvdHRvbTogOHB4O1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1jb250ZW50XSA+IFtkYXRhLW5leHRqcy1kaWFsb2ctYm9keV0ge1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIGZsZXg6IDEgMSBhdXRvO1xcbiAgfVxcblxcbiAgQG1lZGlhIChtYXgtaGVpZ2h0OiA4MTJweCkge1xcbiAgICBbZGF0YS1uZXh0anMtZGlhbG9nLW92ZXJsYXldIHtcXG4gICAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMCUgLSAxNXB4KTtcXG4gICAgfVxcbiAgfVxcblxcbiAgQG1lZGlhIChtaW4td2lkdGg6IDU3NnB4KSB7XFxuICAgIFtkYXRhLW5leHRqcy1kaWFsb2ctcm9vdF0ge1xcbiAgICAgIC0tbmV4dC1kaWFsb2ctbWF4LXdpZHRoOiA1NDBweDtcXG4gICAgfVxcbiAgfVxcblxcbiAgQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XFxuICAgIFtkYXRhLW5leHRqcy1kaWFsb2ctcm9vdF0ge1xcbiAgICAgIC0tbmV4dC1kaWFsb2ctbWF4LXdpZHRoOiA3MjBweDtcXG4gICAgfVxcbiAgfVxcblxcbiAgQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XFxuICAgIFtkYXRhLW5leHRqcy1kaWFsb2ctcm9vdF0ge1xcbiAgICAgIC0tbmV4dC1kaWFsb2ctbWF4LXdpZHRoOiA5NjBweDtcXG4gICAgfVxcbiAgfVxcblwiXSxufHwobj1lLnNsaWNlKDApKSxPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUse3Jhdzp7dmFsdWU6T2JqZWN0LmZyZWV6ZShuKX19KSkpO3JldHVybiBlUT1mdW5jdGlvbigpe3JldHVybiB0fSx0fXZhciBlRz1laShlUSgpKSxlSj1fX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS91dGlscy9jeC50c1wiKTtmdW5jdGlvbiBlMChlLG4peyhudWxsPT1ufHxuPmUubGVuZ3RoKSYmKG49ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLHI9QXJyYXkobik7dDxuO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9ZnVuY3Rpb24gZTEoZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfWZ1bmN0aW9uIGUyKGUsbil7cmV0dXJuIG49bnVsbCE9bj9uOnt9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QobikpLmZvckVhY2goZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSksZX1mdW5jdGlvbiBlNChlLG4pe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSwhbnx8YS5sZW5ndGghPT1uKTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0oZSxuKXx8ZnVuY3Rpb24oZSxuKXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gZTAoZSxuKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKHQpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gZTAoZSxuKX19KGUsbil8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9dmFyIGU1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHgudXNlQWN0aW9uU3RhdGU/ZnVuY3Rpb24oZSl7dmFyIG49ZTQoeC51c2VBY3Rpb25TdGF0ZShmdW5jdGlvbihuLHQpe3JldHVyblwicmVzZXRcIj09PXQ/e3N0YXRlOlwiaW5pdGlhbFwifTpcImNvcHlcIj09PXQ/bmF2aWdhdG9yLmNsaXBib2FyZD9uYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChlKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJue3N0YXRlOlwic3VjY2Vzc1wifX0sZnVuY3Rpb24oZSl7cmV0dXJue3N0YXRlOlwiZXJyb3JcIixlcnJvcjplfX0pOntzdGF0ZTpcImVycm9yXCIsZXJyb3I6XCJDb3B5IHRvIGNsaXBib2FyZCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlclwifTpufSx7c3RhdGU6XCJpbml0aWFsXCJ9KSwzKSx0PW5bMF0scj1uWzFdLG89blsyXTtyZXR1cm5bdCxmdW5jdGlvbigpe3guc3RhcnRUcmFuc2l0aW9uKGZ1bmN0aW9uKCl7cihcImNvcHlcIil9KX0seC51c2VDYWxsYmFjayhmdW5jdGlvbigpe3IoXCJyZXNldFwiKX0sW3JdKSxvXX06ZnVuY3Rpb24oZSl7dmFyIG49ZTQoeC51c2VSZWR1Y2VyKGZ1bmN0aW9uKGUsbil7cmV0dXJuXCJyZXNldFwiPT09bi50eXBlP3tzdGF0ZTpcImluaXRpYWxcIn06XCJjb3BpZWRcIj09PW4udHlwZT97c3RhdGU6XCJzdWNjZXNzXCJ9OlwiY29weWluZ1wiPT09bi50eXBlP3tzdGF0ZTpcInBlbmRpbmdcIn06XCJlcnJvclwiPT09bi50eXBlP3tzdGF0ZTpcImVycm9yXCIsZXJyb3I6bi5lcnJvcn06ZX0se3N0YXRlOlwiaW5pdGlhbFwifSksMiksdD1uWzBdLHI9blsxXSxvPXgudXNlQ2FsbGJhY2soZnVuY3Rpb24oKXtyKHt0eXBlOlwicmVzZXRcIn0pfSxbXSksYT1cInBlbmRpbmdcIj09PXQuc3RhdGU7cmV0dXJuW3QsZnVuY3Rpb24oKXthfHwobmF2aWdhdG9yLmNsaXBib2FyZD8ocih7dHlwZTpcImNvcHlpbmdcIn0pLG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGUpLnRoZW4oZnVuY3Rpb24oKXtyKHt0eXBlOlwiY29waWVkXCJ9KX0sZnVuY3Rpb24oZSl7cih7dHlwZTpcImVycm9yXCIsZXJyb3I6ZX0pfSkpOnIoe3R5cGU6XCJlcnJvclwiLGVycm9yOlwiQ29weSB0byBjbGlwYm9hcmQgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXJcIn0pKX0sbyxhXX07ZnVuY3Rpb24gZTMoZSl7dmFyIG49ZS5hY3Rpb25MYWJlbCx0PWUuc3VjY2Vzc0xhYmVsLHI9ZS5jb250ZW50LG89ZS5pY29uLGE9ZS5kaXNhYmxlZCxpPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLG4uaW5kZXhPZih0KT49MHx8KG9bdF09ZVt0XSk7cmV0dXJuIG99KGUsbik7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSwhKG4uaW5kZXhPZih0KT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHQpJiYob1t0XT1lW3RdKX1yZXR1cm4gb30oZSxbXCJhY3Rpb25MYWJlbFwiLFwic3VjY2Vzc0xhYmVsXCIsXCJjb250ZW50XCIsXCJpY29uXCIsXCJkaXNhYmxlZFwiXSksbD1lNChlNShyKSw0KSxzPWxbMF0sYz1sWzFdLHU9bFsyXSxkPWxbM10sZj1cImVycm9yXCI9PT1zLnN0YXRlP3MuZXJyb3I6bnVsbDt4LnVzZUVmZmVjdChmdW5jdGlvbigpe251bGwhPT1mJiZjb25zb2xlLndhcm4oZil9LFtmXSkseC51c2VFZmZlY3QoZnVuY3Rpb24oKXtpZihcInN1Y2Nlc3NcIj09PXMuc3RhdGUpe3ZhciBlPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt1KCl9LDJlMyk7cmV0dXJuIGZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KGUpfX19LFtkLHMuc3RhdGUsdV0pO3ZhciBwPSFuYXZpZ2F0b3IuY2xpcGJvYXJkfHxkfHxhfHwhIWYsaD1cInN1Y2Nlc3NcIj09PXMuc3RhdGU/dDpuLGc9XCJzdWNjZXNzXCI9PT1zLnN0YXRlPygwLHkuanN4KShlOSx7fSk6b3x8KDAseS5qc3gpKGU2LHt3aWR0aDoxNCxoZWlnaHQ6MTQsY2xhc3NOYW1lOlwiZXJyb3Itb3ZlcmxheS10b29sYmFyLWJ1dHRvbi1pY29uXCJ9KTtyZXR1cm4oMCx5LmpzeHMpKFwiYnV0dG9uXCIsZTIoZTEoe30saSkse3R5cGU6XCJidXR0b25cIix0aXRsZTpoLFwiYXJpYS1sYWJlbFwiOmgsXCJhcmlhLWRpc2FibGVkXCI6cCxkaXNhYmxlZDpwLFwiZGF0YS1uZXh0anMtY29weS1idXR0b25cIjohMCxjbGFzc05hbWU6KDAsZUouY3gpKGkuY2xhc3NOYW1lLFwibmV4dGpzLWRhdGEtY29weS1idXR0b25cIixcIm5leHRqcy1kYXRhLWNvcHktYnV0dG9uLS1cIi5jb25jYXQocy5zdGF0ZSkpLG9uQ2xpY2s6ZnVuY3Rpb24oKXtwfHxjKCl9LGNoaWxkcmVuOltnLFwiZXJyb3JcIj09PXMuc3RhdGU/XCIgXCIuY29uY2F0KHMuZXJyb3IpOm51bGxdfSkpfWZ1bmN0aW9uIGU2KGUpe3JldHVybigwLHkuanN4KShcInN2Z1wiLGUyKGUxKHt3aWR0aDpcIjE0XCIsaGVpZ2h0OlwiMTRcIix2aWV3Qm94OlwiMCAwIDE0IDE0XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLHtjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMi40MDYuNDM4Yy0uODQ1IDAtMS41MzEuNjg1LTEuNTMxIDEuNTN2Ni41NjNjMCAuODQ2LjY4NiAxLjUzMSAxLjUzMSAxLjUzMUgzLjkzN1Y4Ljc1SDIuNDA2YS4yMTkuMjE5IDAgMCAxLS4yMTktLjIxOVYxLjk3YzAtLjEyMS4wOTgtLjIxOS4yMi0uMjE5aDQuODEyYy4xMiAwIC4yMTguMDk4LjIxOC4yMTl2LjY1Nkg4Ljc1di0uNjU2YzAtLjg0Ni0uNjg2LTEuNTMyLTEuNTMxLTEuNTMySDIuNDA2em00LjM3NSAzLjVjLS44NDUgMC0xLjUzMS42ODUtMS41MzEgMS41M3Y2LjU2M2MwIC44NDYuNjg2IDEuNTMxIDEuNTMxIDEuNTMxaDQuODEzYy44NDUgMCAxLjUzMS0uNjg1IDEuNTMxLTEuNTNWNS40NjhjMC0uODQ2LS42ODYtMS41MzItMS41MzEtMS41MzJINi43OHptLS4yMTggMS41M2MwLS4xMi4wOTctLjIxOC4yMTgtLjIxOGg0LjgxM2MuMTIgMCAuMjE5LjA5OC4yMTkuMjE5djYuNTYyYzAgLjEyMS0uMDk4LjIxOS0uMjIuMjE5SDYuNzgyYS4yMTkuMjE5IDAgMCAxLS4yMTgtLjIxOVY1LjQ3elwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSkpfWZ1bmN0aW9uIGU5KCl7cmV0dXJuKDAseS5qc3gpKFwic3ZnXCIse2hlaWdodDpcIjE2XCIseGxpbmtUaXRsZTpcImNvcGllZFwiLHZpZXdCb3g6XCIwIDAgMTYgMTZcIix3aWR0aDpcIjE2XCIsc3Ryb2tlOlwiY3VycmVudENvbG9yXCIsZmlsbDpcImN1cnJlbnRDb2xvclwiLGNoaWxkcmVuOigwLHkuanN4KShcInBhdGhcIix7ZDpcIk0xMy43OCA0LjIyYS43NS43NSAwIDAgMSAwIDEuMDZsLTcuMjUgNy4yNWEuNzUuNzUgMCAwIDEtMS4wNiAwTDIuMjIgOS4yOGEuNzUxLjc1MSAwIDAgMSAuMDE4LTEuMDQyLjc1MS43NTEgMCAwIDEgMS4wNDItLjAxOEw2IDEwLjk0bDYuNzItNi43MmEuNzUuNzUgMCAwIDEgMS4wNiAwWlwifSl9KX1mdW5jdGlvbiBlOChlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9ZnVuY3Rpb24gZTcoZSxuKXtyZXR1cm4gbj1udWxsIT1uP246e30sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSxlfXZhciBuZT1mdW5jdGlvbigpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiB3aW5kb3cpcmV0dXJuITE7dmFyIGU9XCJjaHJvbWVcImluIHdpbmRvdyYmd2luZG93LmNocm9tZSxuPXdpbmRvdy5uYXZpZ2F0b3IudmVuZG9yO3JldHVybiBudWxsIT1lJiZcIkdvb2dsZSBJbmMuXCI9PT1ufSgpO2Z1bmN0aW9uIG5uKGUpe3JldHVybigwLHkuanN4cykoXCJzdmdcIixlNyhlOCh7d2lkdGg6XCIxNFwiLGhlaWdodDpcIjE0XCIsdmlld0JveDpcIjAgMCAxNCAxNFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSx7Y2hpbGRyZW46WygwLHkuanN4KShcIm1hc2tcIix7aWQ6XCJub2RlanNfaWNvbl9tYXNrX2FcIixzdHlsZTp7bWFza1R5cGU6XCJsdW1pbmFuY2VcIn0sbWFza1VuaXRzOlwidXNlclNwYWNlT25Vc2VcIix4OlwiMFwiLHk6XCIwXCIsd2lkdGg6XCIxNFwiLGhlaWdodDpcIjE0XCIsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtkOlwiTTYuNjcuMDg5IDEuMjA1IDMuMjU2YS42NjMuNjYzIDAgMCAwLS4zMy41NzN2Ni4zMzljMCAuMjM3LjEyNi40NTUuMzMuNTc0bDUuNDY2IDMuMTdhLjY2LjY2IDAgMCAwIC42NiAwbDUuNDY1LTMuMTdhLjY2NC42NjQgMCAwIDAgLjMyOS0uNTc0VjMuODI5YS42NjMuNjYzIDAgMCAwLS4zMy0uNTczTDcuMzMuMDg5YS42NjMuNjYzIDAgMCAwLS42NjEgMFwiLGZpbGw6XCIjZmZmXCJ9KX0pLCgwLHkuanN4KShcImdcIix7bWFzazpcInVybCgjbm9kZWpzX2ljb25fbWFza19hKVwiLGNoaWxkcmVuOigwLHkuanN4KShcInBhdGhcIix7ZDpcIk0xOC42NDggMi43MTcgMy4yNDgtNC44Ni00LjY0OCAxMS4zMWwxNS40IDcuNTggNy44OTYtMTYuMTc0elwiLGZpbGw6XCJ1cmwoI25vZGVqc19pY29uX2xpbmVhcl9ncmFkaWVudF9iKVwifSl9KSwoMCx5LmpzeCkoXCJtYXNrXCIse2lkOlwibm9kZWpzX2ljb25fbWFza19jXCIsc3R5bGU6e21hc2tUeXBlOlwibHVtaW5hbmNlXCJ9LG1hc2tVbml0czpcInVzZXJTcGFjZU9uVXNlXCIseDpcIjFcIix5OlwiMFwiLHdpZHRoOlwiMTJcIixoZWlnaHQ6XCIxNFwiLGNoaWxkcmVuOigwLHkuanN4KShcInBhdGhcIix7ZDpcIk0xLjAxIDEwLjU3YS42NjMuNjYzIDAgMCAwIC4xOTUuMTdsNC42ODggMi43Mi43ODEuNDVhLjY2LjY2IDAgMCAwIC41MS4wNjNsNS43NjQtMTAuNTk3YS42NTMuNjUzIDAgMCAwLS4xNTMtLjEyMkw5LjIxNiAxLjE4IDcuMzI1LjA4N2EuNjg4LjY4OCAwIDAgMC0uMTcxLS4wN0wxLjAxIDEwLjU3elwiLGZpbGw6XCIjZmZmXCJ9KX0pLCgwLHkuanN4KShcImdcIix7bWFzazpcInVybCgjbm9kZWpzX2ljb25fbWFza19jKVwiLGNoaWxkcmVuOigwLHkuanN4KShcInBhdGhcIix7ZDpcIk0tNS42NDcgNC45NTggNS4yMjYgMTkuNzM0bDE0LjM4LTEwLjY2N0w4LjczNC01LjcxLTUuNjQ3IDQuOTU4elwiLGZpbGw6XCJ1cmwoI25vZGVqc19pY29uX2xpbmVhcl9ncmFkaWVudF9kKVwifSl9KSwoMCx5LmpzeHMpKFwiZ1wiLHtjaGlsZHJlbjpbKDAseS5qc3gpKFwibWFza1wiLHtpZDpcIm5vZGVqc19pY29uX21hc2tfZVwiLHN0eWxlOnttYXNrVHlwZTpcImx1bWluYW5jZVwifSxtYXNrVW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiLHg6XCIxXCIseTpcIjBcIix3aWR0aDpcIjEzXCIsaGVpZ2h0OlwiMTRcIixjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2Q6XCJNNi45MzQuMDA0QS42NjUuNjY1IDAgMCAwIDYuNjcuMDlMMS4yMiAzLjI0N2w1Ljg3NyAxMC43NDZhLjY1NS42NTUgMCAwIDAgLjIzNS0uMDhsNS40NjUtMy4xN2EuNjY1LjY2NSAwIDAgMCAuMzE5LS40NTNMNy4xMjYuMDE1YS42ODQuNjg0IDAgMCAwLS4xODktLjAxXCIsZmlsbDpcIiNmZmZcIn0pfSksKDAseS5qc3gpKFwiZ1wiLHttYXNrOlwidXJsKCNub2RlanNfaWNvbl9tYXNrX2UpXCIsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtkOlwiTTEuMjIuMDAydjEzLjk5MmgxMS44OTRWLjAwMkgxLjIyelwiLGZpbGw6XCJ1cmwoI25vZGVqc19pY29uX2xpbmVhcl9ncmFkaWVudF9mKVwifSl9KV19KSwoMCx5LmpzeHMpKFwiZGVmc1wiLHtjaGlsZHJlbjpbKDAseS5qc3hzKShcImxpbmVhckdyYWRpZW50XCIse2lkOlwibm9kZWpzX2ljb25fbGluZWFyX2dyYWRpZW50X2JcIix4MTpcIjEwLjk0M1wiLHkxOlwiLTEuMDg0XCIseDI6XCIyLjk5N1wiLHkyOlwiMTUuMDYyXCIsZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIsY2hpbGRyZW46WygwLHkuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiLjNcIixzdG9wQ29sb3I6XCIjM0U4NjNEXCJ9KSwoMCx5LmpzeCkoXCJzdG9wXCIse29mZnNldDpcIi41XCIsc3RvcENvbG9yOlwiIzU1OTM0RlwifSksKDAseS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIuOFwiLHN0b3BDb2xvcjpcIiM1QUFENDVcIn0pXX0pLCgwLHkuanN4cykoXCJsaW5lYXJHcmFkaWVudFwiLHtpZDpcIm5vZGVqc19pY29uX2xpbmVhcl9ncmFkaWVudF9kXCIseDE6XCItLjE0NVwiLHkxOlwiMTIuNDMxXCIseDI6XCIxNC4yNzdcIix5MjpcIjEuODE4XCIsZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIsY2hpbGRyZW46WygwLHkuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiLjU3XCIsc3RvcENvbG9yOlwiIzNFODYzRFwifSksKDAseS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIuNzJcIixzdG9wQ29sb3I6XCIjNjE5ODU3XCJ9KSwoMCx5LmpzeCkoXCJzdG9wXCIse29mZnNldDpcIjFcIixzdG9wQ29sb3I6XCIjNzZBQzY0XCJ9KV19KSwoMCx5LmpzeHMpKFwibGluZWFyR3JhZGllbnRcIix7aWQ6XCJub2RlanNfaWNvbl9saW5lYXJfZ3JhZGllbnRfZlwiLHgxOlwiMS4yMjVcIix5MTpcIjYuOTk4XCIseDI6XCIxMy4xMTZcIix5MjpcIjYuOTk4XCIsZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIsY2hpbGRyZW46WygwLHkuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiLjE2XCIsc3RvcENvbG9yOlwiIzZCQkY0N1wifSksKDAseS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIuMzhcIixzdG9wQ29sb3I6XCIjNzlCNDYxXCJ9KSwoMCx5LmpzeCkoXCJzdG9wXCIse29mZnNldDpcIi40N1wiLHN0b3BDb2xvcjpcIiM3NUFDNjRcIn0pLCgwLHkuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiLjdcIixzdG9wQ29sb3I6XCIjNjU5RTVBXCJ9KSwoMCx5LmpzeCkoXCJzdG9wXCIse29mZnNldDpcIi45XCIsc3RvcENvbG9yOlwiIzNFODYzRFwifSldfSldfSldfSkpfWZ1bmN0aW9uIG50KGUpe3JldHVybigwLHkuanN4cykoXCJzdmdcIixlNyhlOCh7d2lkdGg6XCIxNFwiLGhlaWdodDpcIjE0XCIsdmlld0JveDpcIjAgMCAxNCAxNFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSx7Y2hpbGRyZW46WygwLHkuanN4KShcIm1hc2tcIix7aWQ6XCJub2RlanNfaWNvbl9tYXNrX2FcIixzdHlsZTp7bWFza1R5cGU6XCJsdW1pbmFuY2VcIn0sbWFza1VuaXRzOlwidXNlclNwYWNlT25Vc2VcIix4OlwiMFwiLHk6XCIwXCIsd2lkdGg6XCIxNFwiLGhlaWdodDpcIjE0XCIsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtkOlwiTTYuNjcuMDg5IDEuMjA1IDMuMjU2YS42NjMuNjYzIDAgMCAwLS4zMy41NzN2Ni4zMzljMCAuMjM3LjEyNi40NTUuMzMuNTc0bDUuNDY2IDMuMTdhLjY2LjY2IDAgMCAwIC42NiAwbDUuNDY1LTMuMTdhLjY2NC42NjQgMCAwIDAgLjMyOS0uNTc0VjMuODI5YS42NjMuNjYzIDAgMCAwLS4zMy0uNTczTDcuMzMuMDg5YS42NjMuNjYzIDAgMCAwLS42NjEgMFwiLGZpbGw6XCIjZmZmXCJ9KX0pLCgwLHkuanN4KShcImdcIix7bWFzazpcInVybCgjbm9kZWpzX2ljb25fbWFza19hKVwiLGNoaWxkcmVuOigwLHkuanN4KShcInBhdGhcIix7ZDpcIk0xOC42NDggMi43MTcgMy4yNDgtNC44Ni00LjY0NiAxMS4zMWwxNS4zOTkgNy41OCA3Ljg5Ni0xNi4xNzR6XCIsZmlsbDpcInVybCgjbm9kZWpzX2ljb25fbGluZWFyX2dyYWRpZW50X2IpXCJ9KX0pLCgwLHkuanN4KShcIm1hc2tcIix7aWQ6XCJub2RlanNfaWNvbl9tYXNrX2NcIixzdHlsZTp7bWFza1R5cGU6XCJsdW1pbmFuY2VcIn0sbWFza1VuaXRzOlwidXNlclNwYWNlT25Vc2VcIix4OlwiMVwiLHk6XCIwXCIsd2lkdGg6XCIxMlwiLGhlaWdodDpcIjE1XCIsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtkOlwiTTEuMDEgMTAuNTcxYS42Ni42NiAwIDAgMCAuMTk1LjE3Mmw0LjY4OCAyLjcxOC43ODEuNDUxYS42Ni42NiAwIDAgMCAuNTEuMDYzbDUuNzY0LTEwLjU5N2EuNjUzLjY1MyAwIDAgMC0uMTUzLS4xMjJMOS4yMTYgMS4xODEgNy4zMjUuMDlhLjY4OC42ODggMCAwIDAtLjE3MS0uMDdMMS4wMSAxMC41NzJ6XCIsZmlsbDpcIiNmZmZcIn0pfSksKDAseS5qc3gpKFwiZ1wiLHttYXNrOlwidXJsKCNub2RlanNfaWNvbl9tYXNrX2MpXCIsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtkOlwiTS01LjY0NyA0Ljk2IDUuMjI2IDE5LjczNiAxOS42MDYgOS4wNyA4LjczNC01LjcwNy01LjY0NyA0Ljk2elwiLGZpbGw6XCJ1cmwoI25vZGVqc19pY29uX2xpbmVhcl9ncmFkaWVudF9kKVwifSl9KSwoMCx5LmpzeHMpKFwiZ1wiLHtjaGlsZHJlbjpbKDAseS5qc3gpKFwibWFza1wiLHtpZDpcIm5vZGVqc19pY29uX21hc2tfZVwiLHN0eWxlOnttYXNrVHlwZTpcImx1bWluYW5jZVwifSxtYXNrVW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiLHg6XCIxXCIseTpcIjBcIix3aWR0aDpcIjEzXCIsaGVpZ2h0OlwiMTRcIixjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2Q6XCJNNi45MzUuMDAzYS42NjUuNjY1IDAgMCAwLS4yNjQuMDg1bC01LjQ1IDMuMTU4IDUuODc3IDEwLjc0N2EuNjUzLjY1MyAwIDAgMCAuMjM1LS4wODJsNS40NjUtMy4xN2EuNjY1LjY2NSAwIDAgMCAuMzE5LS40NTJMNy4xMjcuMDE0YS42ODQuNjg0IDAgMCAwLS4xODktLjAxXCIsZmlsbDpcIiNmZmZcIn0pfSksKDAseS5qc3gpKFwiZ1wiLHttYXNrOlwidXJsKCNub2RlanNfaWNvbl9tYXNrX2UpXCIsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtkOlwiTTEuMjIyLjAwMXYxMy45OTJoMTEuODkzVjBIMS4yMjJ6XCIsZmlsbDpcInVybCgjbm9kZWpzX2ljb25fbGluZWFyX2dyYWRpZW50X2YpXCJ9KX0pXX0pLCgwLHkuanN4cykoXCJkZWZzXCIse2NoaWxkcmVuOlsoMCx5LmpzeHMpKFwibGluZWFyR3JhZGllbnRcIix7aWQ6XCJub2RlanNfaWNvbl9saW5lYXJfZ3JhZGllbnRfYlwiLHgxOlwiMTAuOTQ0XCIseTE6XCItMS4wODRcIix4MjpcIjIuOTk3XCIseTI6XCIxNS4wNjJcIixncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIuM1wiLHN0b3BDb2xvcjpcIiM2NzY3NjdcIn0pLCgwLHkuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiLjVcIixzdG9wQ29sb3I6XCIjODU4NTg1XCJ9KSwoMCx5LmpzeCkoXCJzdG9wXCIse29mZnNldDpcIi44XCIsc3RvcENvbG9yOlwiIzk4OUE5OFwifSldfSksKDAseS5qc3hzKShcImxpbmVhckdyYWRpZW50XCIse2lkOlwibm9kZWpzX2ljb25fbGluZWFyX2dyYWRpZW50X2RcIix4MTpcIi0uMTQ1XCIseTE6XCIxMi40MzNcIix4MjpcIjE0LjI3N1wiLHkyOlwiMS44MTlcIixncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIuNTdcIixzdG9wQ29sb3I6XCIjNzQ3NDc0XCJ9KSwoMCx5LmpzeCkoXCJzdG9wXCIse29mZnNldDpcIi43MlwiLHN0b3BDb2xvcjpcIiM3MDcwNzBcIn0pLCgwLHkuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiMVwiLHN0b3BDb2xvcjpcIiM5MjkyOTJcIn0pXX0pLCgwLHkuanN4cykoXCJsaW5lYXJHcmFkaWVudFwiLHtpZDpcIm5vZGVqc19pY29uX2xpbmVhcl9ncmFkaWVudF9mXCIseDE6XCIxLjIyNlwiLHkxOlwiNi45OTdcIix4MjpcIjEzLjExN1wiLHkyOlwiNi45OTdcIixncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIuMTZcIixzdG9wQ29sb3I6XCIjODc4Nzg3XCJ9KSwoMCx5LmpzeCkoXCJzdG9wXCIse29mZnNldDpcIi4zOFwiLHN0b3BDb2xvcjpcIiNBOUE5QTlcIn0pLCgwLHkuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiLjQ3XCIsc3RvcENvbG9yOlwiI0E1QTVBNVwifSksKDAseS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIuN1wiLHN0b3BDb2xvcjpcIiM4RjhGOEZcIn0pLCgwLHkuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiLjlcIixzdG9wQ29sb3I6XCIjNjI2MjYyXCJ9KV19KV19KV19KSl9dmFyIG5yPVwiTGVhcm4gbW9yZSBhYm91dCBlbmFibGluZyBOb2RlLmpzIGluc3BlY3RvciBmb3Igc2VydmVyIGNvZGUgd2l0aCBDaHJvbWUgRGV2VG9vbHNcIjtmdW5jdGlvbiBubyhlKXt2YXIgbj1lLmRldnRvb2xzRnJvbnRlbmRVcmx8fFwiXCI7cmV0dXJuIG4mJm5lPygwLHkuanN4KShlMyx7XCJkYXRhLW5leHRqcy1kYXRhLXJ1bnRpbWUtZXJyb3ItY29weS1kZXZ0b29scy11cmxcIjohMCxjbGFzc05hbWU6XCJub2RlanMtaW5zcGVjdG9yLWJ1dHRvblwiLGFjdGlvbkxhYmVsOlwiQ29weSBDaHJvbWUgRGV2VG9vbHMgVVJMXCIsc3VjY2Vzc0xhYmVsOlwiQ29waWVkXCIsY29udGVudDpuLGljb246KDAseS5qc3gpKG5uLHtjbGFzc05hbWU6XCJlcnJvci1vdmVybGF5LXRvb2xiYXItYnV0dG9uLWljb25cIix3aWR0aDoxNCxoZWlnaHQ6MTR9KX0pOigwLHkuanN4KShcImFcIix7dGl0bGU6bnIsXCJhcmlhLWxhYmVsXCI6bnIsY2xhc3NOYW1lOlwibm9kZWpzLWluc3BlY3Rvci1idXR0b25cIixocmVmOlwiaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vY29uZmlndXJpbmcvZGVidWdnaW5nI3NlcnZlci1zaWRlLWNvZGVcIix0YXJnZXQ6XCJfYmxhbmtcIixyZWw6XCJub29wZW5lciBub3JlZmVycmVyXCIsY2hpbGRyZW46KDAseS5qc3gpKG50LHtjbGFzc05hbWU6XCJlcnJvci1vdmVybGF5LXRvb2xiYXItYnV0dG9uLWljb25cIix3aWR0aDoxNCxoZWlnaHQ6MTR9KX0pfWZ1bmN0aW9uIG5hKGUpe3ZhciBuPWUuZXJyb3I7cmV0dXJuKDAseS5qc3gpKGUzLHtcImRhdGEtbmV4dGpzLWRhdGEtcnVudGltZS1lcnJvci1jb3B5LXN0YWNrXCI6ITAsY2xhc3NOYW1lOlwiY29weS1zdGFjay10cmFjZS1idXR0b25cIixhY3Rpb25MYWJlbDpcIkNvcHkgU3RhY2sgVHJhY2VcIixzdWNjZXNzTGFiZWw6XCJTdGFjayBUcmFjZSBDb3BpZWRcIixjb250ZW50Om4uc3RhY2t8fFwiXCIsZGlzYWJsZWQ6IW4uc3RhY2t9KX1mdW5jdGlvbiBuaShlLG4peyhudWxsPT1ufHxuPmUubGVuZ3RoKSYmKG49ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLHI9QXJyYXkobik7dDxuO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9ZnVuY3Rpb24gbmwoZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX1mdW5jdGlvbiBucygpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfWZ1bmN0aW9uIG5jKGUsbil7cmV0dXJuIG5sKGUpfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLCFufHxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShlLG4pfHxuZChlLG4pfHxucygpfWZ1bmN0aW9uIG51KGUpe3JldHVybiBubChlKXx8ZnVuY3Rpb24oZSl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lW1wiQEBpdGVyYXRvclwiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oZSl8fG5kKGUpfHxucygpfWZ1bmN0aW9uIG5kKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIG5pKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIG5pKGUsbil9fXZhciBuZj1cImh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvaHlkcmF0aW9uLW1pc21hdGNoXCIsbnA9XCJodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9yZWFjdC1oeWRyYXRpb24tZXJyb3JcIixuaD1bL15JbiBIVE1MLCAoLis/KSBjYW5ub3QgYmUgYSBjaGlsZCBvZiA8KC4rPyk+XFwuKC4qKVxcblRoaXMgd2lsbCBjYXVzZSBhIGh5ZHJhdGlvbiBlcnJvclxcLiguKikvLC9eSW4gSFRNTCwgKC4rPykgY2Fubm90IGJlIGEgZGVzY2VuZGFudCBvZiA8KC4rPyk+XFwuXFxuVGhpcyB3aWxsIGNhdXNlIGEgaHlkcmF0aW9uIGVycm9yXFwuKC4qKS8sL15JbiBIVE1MLCB0ZXh0IG5vZGVzIGNhbm5vdCBiZSBhIGNoaWxkIG9mIDwoLis/KT5cXC5cXG5UaGlzIHdpbGwgY2F1c2UgYSBoeWRyYXRpb24gZXJyb3JcXC4vLC9eSW4gSFRNTCwgd2hpdGVzcGFjZSB0ZXh0IG5vZGVzIGNhbm5vdCBiZSBhIGNoaWxkIG9mIDwoLis/KT5cXC4gTWFrZSBzdXJlIHlvdSBkb24ndCBoYXZlIGFueSBleHRyYSB3aGl0ZXNwYWNlIGJldHdlZW4gdGFncyBvbiBlYWNoIGxpbmUgb2YgeW91ciBzb3VyY2UgY29kZVxcLlxcblRoaXMgd2lsbCBjYXVzZSBhIGh5ZHJhdGlvbiBlcnJvclxcLi9dO2Z1bmN0aW9uIG5nKGUpe3JldHVybiBuaC5zb21lKGZ1bmN0aW9uKG4pe3JldHVybiBuLnRlc3QoZSl9KX12YXIgbm09W1wiaHR0cHM6Ly9uZXh0anMub3JnXCIsXCJodHRwczovL3JlYWN0LmRldlwiXTtmdW5jdGlvbiBudihlKXtyZXR1cm4gbm0uc29tZShmdW5jdGlvbihuKXtyZXR1cm4gZS5zdGFydHNXaXRoKG4pfSl9ZnVuY3Rpb24gbmIoZSl7dmFyIG49ZnVuY3Rpb24oZSl7dmFyIG4sdCxyLG89KG49ZSx0PW52LHI9QXJyYXkuZnJvbShuLm1hdGNoQWxsKC9odHRwcz86XFwvXFwvW15cXHMvJC4/I10uW15cXHMpJ1wiXSovZ2kpLGZ1bmN0aW9uKGUpe3JldHVybiBlWzBdfSksdD9yLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdChlKX0pOnIpO2lmKDA9PT1vLmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgYT1vWzBdO3JldHVybiBhPT09bmY/bnA6YX0oZS5lcnJvck1lc3NhZ2UpO3JldHVybiBuPygwLHkuanN4KShcImFcIix7dGl0bGU6XCJHbyB0byByZWxhdGVkIGRvY3VtZW50YXRpb25cIixcImFyaWEtbGFiZWxcIjpcIkdvIHRvIHJlbGF0ZWQgZG9jdW1lbnRhdGlvblwiLGNsYXNzTmFtZTpcImRvY3MtbGluay1idXR0b25cIixocmVmOm4sdGFyZ2V0OlwiX2JsYW5rXCIscmVsOlwibm9vcGVuZXIgbm9yZWZlcnJlclwiLGNoaWxkcmVuOigwLHkuanN4KShueSx7Y2xhc3NOYW1lOlwiZXJyb3Itb3ZlcmxheS10b29sYmFyLWJ1dHRvbi1pY29uXCIsd2lkdGg6MTQsaGVpZ2h0OjE0fSl9KTooMCx5LmpzeCkoXCJidXR0b25cIix7dGl0bGU6XCJObyByZWxhdGVkIGRvY3VtZW50YXRpb24gZm91bmRcIixcImFyaWEtbGFiZWxcIjpcIk5vIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBmb3VuZFwiLGNsYXNzTmFtZTpcImRvY3MtbGluay1idXR0b25cIixkaXNhYmxlZDohMCxjaGlsZHJlbjooMCx5LmpzeCkobnkse2NsYXNzTmFtZTpcImVycm9yLW92ZXJsYXktdG9vbGJhci1idXR0b24taWNvblwiLHdpZHRoOjE0LGhlaWdodDoxNH0pfSl9ZnVuY3Rpb24gbnkoZSl7dmFyIG4sdDtyZXR1cm4oMCx5LmpzeCkoXCJzdmdcIiwobj1mdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHt3aWR0aDpcIjE0XCIsaGVpZ2h0OlwiMTRcIix2aWV3Qm94OlwiMCAwIDE0IDE0XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLHQ9dD17Y2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTAgLjg3NWg0LjM3NUM1LjQ0OC44NzUgNi40MDEgMS4zOSA3IDIuMTg3QTMuMjc2IDMuMjc2IDAgMCAxIDkuNjI1Ljg3NUgxNHYxMS4xNTZIOS40Yy0uNTIyIDAtMS4wMjMuMjA4LTEuMzkyLjU3N2wtLjU0NC41NDNoLS45MjhsLS41NDQtLjU0M2MtLjM2OS0uMzctLjg3LS41NzctMS4zOTItLjU3N0gwVi44NzV6bTYuMzQ0IDMuMjgxYTEuOTY5IDEuOTY5IDAgMCAwLTEuOTY5LTEuOTY4SDEuMzEydjguNTNINC42Yy42MjIgMCAxLjIyNS4xNzcgMS43NDQuNTAyVjQuMTU2em0xLjMxMiA3LjA2NFY0LjE1NmMwLTEuMDg3Ljg4Mi0xLjk2OCAxLjk2OS0xLjk2OGgzLjA2M3Y4LjUzSDkuNGMtLjYyMiAwLTEuMjI1LjE3Ny0xLjc0NC41MDJ6XCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSl9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG4sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkpfSksbikpfWZ1bmN0aW9uIG54KGUpe3ZhciBuPWUuZXJyb3IsdD1lLmRlYnVnSW5mbyxyPWUuZmVlZGJhY2tCdXR0b247cmV0dXJuKDAseS5qc3hzKShcInNwYW5cIix7Y2xhc3NOYW1lOlwiZXJyb3Itb3ZlcmxheS10b29sYmFyXCIsY2hpbGRyZW46W3IsKDAseS5qc3gpKG5hLHtlcnJvcjpufSksKDAseS5qc3gpKG5iLHtlcnJvck1lc3NhZ2U6bi5tZXNzYWdlfSksKDAseS5qc3gpKG5vLHtkZXZ0b29sc0Zyb250ZW5kVXJsOm51bGw9PXQ/dm9pZCAwOnQuZGV2dG9vbHNGcm9udGVuZFVybH0pXX0pfWZ1bmN0aW9uIG53KGUpe3ZhciBuLHQ7cmV0dXJuKDAseS5qc3gpKFwic3ZnXCIsKG49ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7d2lkdGg6XCIxNlwiLGhlaWdodDpcIjE2XCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLGNsYXNzTmFtZTpcInRodW1icy11cC1pY29uXCJ9LGUpLHQ9dD17Y2hpbGRyZW46KDAseS5qc3gpKFwiZ1wiLHtpZDpcInRodW1iLXVwLTE2XCIsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtpZDpcIlVuaW9uXCIsZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk02Ljg5NTMxIDIuMjM5NTlDNi43Mjk4NCAyLjEyMTQgNi41IDIuMjM5NjggNi41IDIuNDQzMDNWNS4yNDk4OUM2LjUgNi4yMTYzOSA1LjcxNjUgNi45OTk4OSA0Ljc1IDYuOTk5ODlIMi41VjEzLjQ5OTlIMTIuMTg4NEMxMi43NjIgMTMuNDk5OSAxMy4yNjIgMTMuMTA5NSAxMy40MDExIDEyLjU1MzFMMTQuNDAxMSA4LjU1MzA2QzE0LjU5ODQgNy43NjQxMiAxNC4wMDE3IDYuOTk5ODkgMTMuMTg4NCA2Ljk5OTg5SDkuMjVIOC41VjYuMjQ5ODlWMy41MTQ0NkM4LjUgMy40MzM3MiA4LjQ2MTAxIDMuMzU3OTUgOC4zOTUzMSAzLjMxMTAyTDYuODk1MzEgMi4yMzk1OVpNNSAyLjQ0MzAzQzUgMS4wMTk2MyA2LjYwODkgMC4xOTE2NTYgNy43NjcxNyAxLjAxODk5TDkuMjY3MTcgMi4wOTA0MkM5LjcyNzA2IDIuNDE4OTIgMTAgMi45NDkyOSAxMCAzLjUxNDQ2VjUuNDk5ODlIMTMuMTg4NEMxNC45Nzc1IDUuNDk5ODkgMTYuMjkwMyA3LjE4MTIxIDE1Ljg1NjMgOC45MTY4NkwxNC44NTYzIDEyLjkxNjlDMTQuNTUwMyAxNC4xNDExIDEzLjQ1MDMgMTQuOTk5OSAxMi4xODg0IDE0Ljk5OTlIMS43NUgxVjE0LjI0OTlWNi4yNDk4OVY1LjQ5OTg5SDEuNzVINC43NUM0Ljg4ODA3IDUuNDk5ODkgNSA1LjM4Nzk2IDUgNS4yNDk4OVYyLjQ0MzAzWlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSl9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG4sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkpfSksbikpfWZ1bmN0aW9uIG5qKGUpe3ZhciBuLHQ7cmV0dXJuKDAseS5qc3gpKFwic3ZnXCIsKG49ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7d2lkdGg6XCIxNlwiLGhlaWdodDpcIjE2XCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLGNsYXNzTmFtZTpcInRodW1icy1kb3duLWljb25cIn0sZSksdD10PXtjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNS44OTUzMSAxMi43NjAzQzUuNzI5ODQgMTIuODc4NSA1LjUgMTIuNzYwMiA1LjUgMTIuNTU2OVY5Ljc1QzUuNSA4Ljc4MzUgNC43MTY1IDggMy43NSA4SDEuNVYxLjVIMTEuMTg4NEMxMS43NjIgMS41IDEyLjI2MiAxLjg5MDM3IDEyLjQwMTEgMi40NDY4M0wxMy40MDExIDYuNDQ2ODNDMTMuNTk4NCA3LjIzNTc2IDEzLjAwMTcgOCAxMi4xODg0IDhIOC4yNUg3LjVWOC43NVYxMS40ODU0QzcuNSAxMS41NjYyIDcuNDYxMDEgMTEuNjQxOSA3LjM5NTMxIDExLjY4ODlMNS44OTUzMSAxMi43NjAzWk00IDEyLjU1NjlDNCAxMy45ODAzIDUuNjA4OSAxNC44MDgyIDYuNzY3MTcgMTMuOTgwOUw4LjI2NzE3IDEyLjkwOTVDOC43MjcwNiAxMi41ODEgOSAxMi4wNTA2IDkgMTEuNDg1NFY5LjVIMTIuMTg4NEMxMy45Nzc1IDkuNSAxNS4yOTAzIDcuODE4NjggMTQuODU2MyA2LjA4MzAzTDEzLjg1NjMgMi4wODMwM0MxMy41NTAzIDAuODU4ODE2IDEyLjQ1MDMgMCAxMS4xODg0IDBIMC43NUgwVjAuNzVWOC43NVY5LjVIMC43NUgzLjc1QzMuODg4MDcgOS41IDQgOS42MTE5MyA0IDkuNzVWMTIuNTU2OVpcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKSl9KSxuKSl9ZnVuY3Rpb24gbmsoZSxuKXsobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxyPUFycmF5KG4pO3Q8bjt0Kyspclt0XT1lW3RdO3JldHVybiByfWZ1bmN0aW9uIG5BKGUsbix0LHIsbyxhLGkpe3RyeXt2YXIgbD1lW2FdKGkpLHM9bC52YWx1ZX1jYXRjaChlKXt0KGUpO3JldHVybn1sLmRvbmU/bihzKTpQcm9taXNlLnJlc29sdmUocykudGhlbihyLG8pfWZ1bmN0aW9uIG5PKGUsbix0KXtyZXR1cm4gbiBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se3ZhbHVlOnQsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW25dPXQsZX1mdW5jdGlvbiBuQyhlKXt2YXIgbix0LHI9ZS5lcnJvckNvZGUsbz1lLmNsYXNzTmFtZSxhPShuPSgwLHgudXNlU3RhdGUpKHt9KSx0PTIsZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0obil8fGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0odD1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2godC52YWx1ZSksYS5sZW5ndGghPT1uKTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0obiwyKXx8ZnVuY3Rpb24oZSxuKXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gbmsoZSxuKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKHQpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gbmsoZSxuKX19KG4sdCl8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCkpLGk9YVswXSxsPWFbMV0scz1pW3JdLGM9cHJvY2Vzcy5lbnYuX19ORVhUX1RFTEVNRVRSWV9ESVNBQkxFRCx1PSgwLHgudXNlQ2FsbGJhY2spKGZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybihuPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIHQscixvLGE9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmb1swXSl0aHJvdyBvWzFdO3JldHVybiBvWzFdfSx0cnlzOltdLG9wczpbXX0saT1PYmplY3QuY3JlYXRlKChcImZ1bmN0aW9uXCI9PXR5cGVvZiBJdGVyYXRvcj9JdGVyYXRvcjpPYmplY3QpLnByb3RvdHlwZSk7cmV0dXJuIGkubmV4dD1sKDApLGkudGhyb3c9bCgxKSxpLnJldHVybj1sKDIpLFwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmKGlbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksaTtmdW5jdGlvbiBsKGwpe3JldHVybiBmdW5jdGlvbihzKXt2YXIgYz1bbCxzXTtpZih0KXRocm93IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7Zm9yKDtpJiYoaT0wLGNbMF0mJihhPTApKSxhOyl0cnl7aWYodD0xLHImJihvPTImY1swXT9yLnJldHVybjpjWzBdP3IudGhyb3d8fCgobz1yLnJldHVybikmJm8uY2FsbChyKSwwKTpyLm5leHQpJiYhKG89by5jYWxsKHIsY1sxXSkpLmRvbmUpcmV0dXJuIG87c3dpdGNoKHI9MCxvJiYoYz1bMiZjWzBdLG8udmFsdWVdKSxjWzBdKXtjYXNlIDA6Y2FzZSAxOm89YzticmVhaztjYXNlIDQ6cmV0dXJuIGEubGFiZWwrKyx7dmFsdWU6Y1sxXSxkb25lOiExfTtjYXNlIDU6YS5sYWJlbCsrLHI9Y1sxXSxjPVswXTtjb250aW51ZTtjYXNlIDc6Yz1hLm9wcy5wb3AoKSxhLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKG89KG89YS50cnlzKS5sZW5ndGg+MCYmb1tvLmxlbmd0aC0xXSkmJig2PT09Y1swXXx8Mj09PWNbMF0pKXthPTA7Y29udGludWV9aWYoMz09PWNbMF0mJighb3x8Y1sxXT5vWzBdJiZjWzFdPG9bM10pKXthLmxhYmVsPWNbMV07YnJlYWt9aWYoNj09PWNbMF0mJmEubGFiZWw8b1sxXSl7YS5sYWJlbD1vWzFdLG89YzticmVha31pZihvJiZhLmxhYmVsPG9bMl0pe2EubGFiZWw9b1syXSxhLm9wcy5wdXNoKGMpO2JyZWFrfW9bMl0mJmEub3BzLnBvcCgpLGEudHJ5cy5wb3AoKTtjb250aW51ZX1jPW4uY2FsbChlLGEpfWNhdGNoKGUpe2M9WzYsZV0scj0wfWZpbmFsbHl7dD1vPTB9aWYoNSZjWzBdKXRocm93IGNbMV07cmV0dXJue3ZhbHVlOmNbMF0/Y1sxXTp2b2lkIDAsZG9uZTohMH19fX0odGhpcyxmdW5jdGlvbihuKXtzd2l0Y2gobi5sYWJlbCl7Y2FzZSAwOmwoZnVuY3Rpb24obil7dmFyIHQsbztyZXR1cm4gdD1mdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7bk8oZSxuLHRbbl0pfSl9cmV0dXJuIGV9KHt9LG4pLG89bnVsbCE9KG89bk8oe30scixlKSk/bzp7fSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG8pKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KG8pKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvLGUpKX0pLHR9KSxuLmxhYmVsPTE7Y2FzZSAxOnJldHVybiBuLnRyeXMucHVzaChbMSwzLCw0XSksWzQsZmV0Y2goXCJcIi5jb25jYXQocHJvY2Vzcy5lbnYuX19ORVhUX1JPVVRFUl9CQVNFUEFUSHx8XCJcIixcIi9fX25leHRqc19lcnJvcl9mZWVkYmFjaz9cIikuY29uY2F0KG5ldyBVUkxTZWFyY2hQYXJhbXMoe2Vycm9yQ29kZTpyLHdhc0hlbHBmdWw6ZS50b1N0cmluZygpfSkpKV07Y2FzZSAyOnJldHVybiBuLnNlbnQoKS5va3x8Y29uc29sZS5lcnJvcihcIkZhaWxlZCB0byByZWNvcmQgZmVlZGJhY2sgb24gdGhlIHNlcnZlci5cIiksWzMsNF07Y2FzZSAzOnJldHVybiBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIHJlY29yZCBmZWVkYmFjazpcIixuLnNlbnQoKSksWzMsNF07Y2FzZSA0OnJldHVyblsyXX19KX0sZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyLG8pe3ZhciBhPW4uYXBwbHkoZSx0KTtmdW5jdGlvbiBpKGUpe25BKGEscixvLGksbCxcIm5leHRcIixlKX1mdW5jdGlvbiBsKGUpe25BKGEscixvLGksbCxcInRocm93XCIsZSl9aSh2b2lkIDApfSl9KSgpfSxbcl0pO3JldHVybigwLHkuanN4KShcImRpdlwiLHtjbGFzc05hbWU6KDAsZUouY3gpKFwiZXJyb3ItZmVlZGJhY2tcIixvKSxyb2xlOlwicmVnaW9uXCIsXCJhcmlhLWxhYmVsXCI6XCJFcnJvciBmZWVkYmFja1wiLGNoaWxkcmVuOnZvaWQgMCE9PXM/KDAseS5qc3gpKFwicFwiLHtjbGFzc05hbWU6XCJlcnJvci1mZWVkYmFjay10aGFua3NcIixyb2xlOlwic3RhdHVzXCIsXCJhcmlhLWxpdmVcIjpcInBvbGl0ZVwiLGNoaWxkcmVuOlwiVGhhbmtzIGZvciB5b3VyIGZlZWRiYWNrIVwifSk6KDAseS5qc3hzKSh5LkZyYWdtZW50LHtjaGlsZHJlbjpbKDAseS5qc3gpKFwicFwiLHtjaGlsZHJlbjooMCx5LmpzeCkoXCJhXCIse2hyZWY6XCJodHRwczovL25leHRqcy5vcmcvdGVsZW1ldHJ5I2Vycm9yLWZlZWRiYWNrXCIscmVsOlwibm9vcGVuZXIgbm9yZWZlcnJlclwiLHRhcmdldDpcIl9ibGFua1wiLGNoaWxkcmVuOlwiV2FzIHRoaXMgaGVscGZ1bD9cIn0pfSksKDAseS5qc3gpKFwiYnV0dG9uXCIse1wiYXJpYS1kaXNhYmxlZFwiOmM/XCJ0cnVlXCI6dm9pZCAwLFwiYXJpYS1sYWJlbFwiOlwiTWFyayBhcyBoZWxwZnVsXCIsb25DbGljazpjP3ZvaWQgMDpmdW5jdGlvbigpe3JldHVybiB1KCEwKX0sY2xhc3NOYW1lOigwLGVKLmN4KShcImZlZWRiYWNrLWJ1dHRvblwiLCEwPT09cyYmXCJ2b3RlZFwiKSx0aXRsZTpjP1wiRmVlZGJhY2sgZGlzYWJsZWQgZHVlIHRvIHNldHRpbmcgTkVYVF9URUxFTUVUUllfRElTQUJMRURcIjp2b2lkIDAsdHlwZTpcImJ1dHRvblwiLGNoaWxkcmVuOigwLHkuanN4KShudyx7XCJhcmlhLWhpZGRlblwiOlwidHJ1ZVwifSl9KSwoMCx5LmpzeCkoXCJidXR0b25cIix7XCJhcmlhLWRpc2FibGVkXCI6Yz9cInRydWVcIjp2b2lkIDAsXCJhcmlhLWxhYmVsXCI6XCJNYXJrIGFzIG5vdCBoZWxwZnVsXCIsb25DbGljazpjP3ZvaWQgMDpmdW5jdGlvbigpe3JldHVybiB1KCExKX0sY2xhc3NOYW1lOigwLGVKLmN4KShcImZlZWRiYWNrLWJ1dHRvblwiLCExPT09cyYmXCJ2b3RlZFwiKSx0aXRsZTpjP1wiRmVlZGJhY2sgZGlzYWJsZWQgZHVlIHRvIHNldHRpbmcgTkVYVF9URUxFTUVUUllfRElTQUJMRURcIjp2b2lkIDAsdHlwZTpcImJ1dHRvblwiLGNoaWxkcmVuOigwLHkuanN4KShuaix7XCJhcmlhLWhpZGRlblwiOlwidHJ1ZVwiLHN0eWxlOnt0cmFuc2xhdGU6XCIxcHggMXB4XCJ9fSl9KV19KX0pfWZ1bmN0aW9uIG5TKGUpe3ZhciBuPWUuZXJyb3JDb2RlO3JldHVybigwLHkuanN4KShcImZvb3RlclwiLHtcImRhdGEtbmV4dGpzLWVycm9yLW92ZXJsYXktZm9vdGVyXCI6ITAsY2xhc3NOYW1lOlwiZXJyb3Itb3ZlcmxheS1mb290ZXJcIixjaGlsZHJlbjpuPygwLHkuanN4KShuQyx7Y2xhc3NOYW1lOlwiZXJyb3ItZmVlZGJhY2tcIixlcnJvckNvZGU6bn0pOm51bGx9KX12YXIgbkU9XCJcXG4gIC5lcnJvci1vdmVybGF5LWZvb3RlciB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG5cXG4gICAgZ2FwOiA4cHg7XFxuICAgIHBhZGRpbmc6IDEycHg7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMjAwKTtcXG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG4gIH1cXG5cXG4gIC5lcnJvci1mZWVkYmFjayB7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcblxcbiAgICBwIHtcXG4gICAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTQpO1xcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICAgICAgbWFyZ2luOiAwO1xcbiAgICB9XFxuICB9XFxuXFxuICBcIi5jb25jYXQoXCJcXG4gIC5lcnJvci1mZWVkYmFjayB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGdhcDogOHB4O1xcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS05MDApO1xcbiAgfVxcblxcbiAgLmVycm9yLWZlZWRiYWNrLXRoYW5rcyB7XFxuICAgIGhlaWdodDogdmFyKC0tc2l6ZS0yNCk7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDRweDsgLyogVG8gbWF0Y2ggdGhlIDRweCBpbm5lciBwYWRkaW5nIG9mIHRoZSB0aHVtYnMgdXAgYW5kIGRvd24gaWNvbnMgKi9cXG4gIH1cXG5cXG4gIC5mZWVkYmFjay1idXR0b24ge1xcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xcbiAgICBib3JkZXI6IG5vbmU7XFxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtbWQpO1xcbiAgICB3aWR0aDogdmFyKC0tc2l6ZS0yNCk7XFxuICAgIGhlaWdodDogdmFyKC0tc2l6ZS0yNCk7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxuXFxuICAgICY6Zm9jdXMge1xcbiAgICAgIG91dGxpbmU6IHZhcigtLWZvY3VzLXJpbmcpO1xcbiAgICB9XFxuXFxuICAgICY6aG92ZXIge1xcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktYWxwaGEtMTAwKTtcXG4gICAgfVxcblxcbiAgICAmOmFjdGl2ZSB7XFxuICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS1hbHBoYS0yMDApO1xcbiAgICB9XFxuICB9XFxuXFxuICAuZmVlZGJhY2stYnV0dG9uW2FyaWEtZGlzYWJsZWQ9J3RydWUnXSB7XFxuICAgIG9wYWNpdHk6IDAuNztcXG4gICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG4gIH1cXG5cXG4gIC5mZWVkYmFjay1idXR0b24udm90ZWQge1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LWFscGhhLTIwMCk7XFxuICB9XFxuXFxuICAudGh1bWJzLXVwLWljb24sXFxuICAudGh1bWJzLWRvd24taWNvbiB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTkwMCk7XFxuICAgIHdpZHRoOiB2YXIoLS1zaXplLTE2KTtcXG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplLTE2KTtcXG4gIH1cXG5cIixcIlxcblwiKTtmdW5jdGlvbiBuXyhlLG4peyhudWxsPT1ufHxuPmUubGVuZ3RoKSYmKG49ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLHI9QXJyYXkobik7dDxuO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9ZnVuY3Rpb24gblAoZSxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0odD1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2godC52YWx1ZSksIW58fGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KGUsbil8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIG5fKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIG5fKGUsbil9fShlLG4pfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIG56KGUpe3ZhciBuPWUuZXJyb3JNZXNzYWdlLHQ9blAoKDAseC51c2VTdGF0ZSkoITEpLDIpLHI9dFswXSxvPXRbMV0sYT1uUCgoMCx4LnVzZVN0YXRlKSghMSksMiksaT1hWzBdLGw9YVsxXSxzPSgwLHgudXNlUmVmKShudWxsKTtyZXR1cm4oMCx4LnVzZUxheW91dEVmZmVjdCkoZnVuY3Rpb24oKXtzLmN1cnJlbnQmJmwocy5jdXJyZW50LnNjcm9sbEhlaWdodD4yMDApfSxbbl0pLCgwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwibmV4dGpzX19jb250YWluZXJfZXJyb3JzX3dyYXBwZXJcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwicFwiLHtyZWY6cyxpZDpcIm5leHRqc19fY29udGFpbmVyX2Vycm9yc19kZXNjXCIsY2xhc3NOYW1lOlwibmV4dGpzX19jb250YWluZXJfZXJyb3JzX2Rlc2MgXCIuY29uY2F0KGkmJiFyP1widHJ1bmNhdGVkXCI6XCJcIiksY2hpbGRyZW46bn0pLGkmJiFyJiYoMCx5LmpzeHMpKHkuRnJhZ21lbnQse2NoaWxkcmVuOlsoMCx5LmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwibmV4dGpzX19jb250YWluZXJfZXJyb3JzX2dyYWRpZW50X292ZXJsYXlcIn0pLCgwLHkuanN4KShcImJ1dHRvblwiLHtvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIG8oITApfSxjbGFzc05hbWU6XCJuZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfZXhwYW5kX2J1dHRvblwiLFwiYXJpYS1leHBhbmRlZFwiOnIsXCJhcmlhLWNvbnRyb2xzXCI6XCJuZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfZGVzY1wiLGNoaWxkcmVuOlwiU2hvdyBNb3JlXCJ9KV19KV19KX1mdW5jdGlvbiBuTChlKXt2YXIgbj1lLmVycm9yVHlwZTtyZXR1cm4oMCx5LmpzeCkoXCJzcGFuXCIse2lkOlwibmV4dGpzX19jb250YWluZXJfZXJyb3JzX2xhYmVsXCIsY2xhc3NOYW1lOlwibmV4dGpzX19jb250YWluZXJfZXJyb3JzX2xhYmVsXCIsY2hpbGRyZW46bn0pfWZ1bmN0aW9uIG5UKGUpe3ZhciBuPWUudGl0bGUsdD1lLmNsYXNzTmFtZTtyZXR1cm4oMCx5LmpzeCkoXCJzdmdcIix7d2lkdGg6XCIxNlwiLGhlaWdodDpcIjE2XCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFwiYXJpYS1sYWJlbFwiOm4sY2xhc3NOYW1lOnQsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTkuMjQ5OTYgMTIuMDYwOEw4LjcxOTYzIDExLjUzMDRMNS44OTY0MSA4LjcwNzIyQzUuNTA1ODggOC4zMTY3IDUuNTA1ODggNy42ODM1MyA1Ljg5NjQxIDcuMjkzMDFMOC43MTk2MyA0LjQ2OTc4TDkuMjQ5OTYgMy45Mzk0NUwxMC4zMTA2IDUuMDAwMTFMOS43ODAyOSA1LjUzMDQ0TDcuMzEwNjIgOC4wMDAxMUw5Ljc4MDI5IDEwLjQ2OThMMTAuMzEwNiAxMS4wMDAxTDkuMjQ5OTYgMTIuMDYwOFpcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KX0pfWZ1bmN0aW9uIG5SKGUpe3ZhciBuPWUudGl0bGUsdD1lLmNsYXNzTmFtZTtyZXR1cm4oMCx5LmpzeCkoXCJzdmdcIix7d2lkdGg6XCIxNlwiLGhlaWdodDpcIjE2XCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLGNsYXNzTmFtZTp0LFwiYXJpYS1sYWJlbFwiOm4sY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTYuNzUwMTEgMy45Mzk0NUw3LjI4MDQ0IDQuNDY5NzhMMTAuMTAzNyA3LjI5MzAxQzEwLjQ5NDIgNy42ODM1MyAxMC40OTQyIDguMzE2NyAxMC4xMDM3IDguNzA3MjJMNy4yODA0NCAxMS41MzA0TDYuNzUwMTEgMTIuMDYwOEw1LjY4OTQ1IDExLjAwMDFMNi4yMTk3OCAxMC40Njk4TDguNjg5NDUgOC4wMDAxMUw2LjIxOTc4IDUuNTMwNDRMNS42ODk0NSA1LjAwMDExTDYuNzUwMTEgMy45Mzk0NVpcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KX0pfWZ1bmN0aW9uIG5OKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiBuRChlKXt2YXIgbix0LHI9ZS5ydW50aW1lRXJyb3JzLG89ZS5hY3RpdmVJZHgsYT1lLm9uQWN0aXZlSW5kZXhDaGFuZ2UsaT0oMCx4LnVzZUNhbGxiYWNrKShmdW5jdGlvbigpe3JldHVybigwLHguc3RhcnRUcmFuc2l0aW9uKShmdW5jdGlvbigpe28+MCYmYShNYXRoLm1heCgwLG8tMSkpfSl9LFtvLGFdKSxsPSgwLHgudXNlQ2FsbGJhY2spKGZ1bmN0aW9uKCl7cmV0dXJuKDAseC5zdGFydFRyYW5zaXRpb24pKGZ1bmN0aW9uKCl7bzxyLmxlbmd0aC0xJiZhKE1hdGgubWF4KDAsTWF0aC5taW4oci5sZW5ndGgtMSxvKzEpKSl9KX0sW28sci5sZW5ndGgsYV0pLHM9KDAseC51c2VSZWYpKG51bGwpLGM9KDAseC51c2VSZWYpKG51bGwpLHU9KG49KDAseC51c2VTdGF0ZSkobnVsbCksdD0yLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KG4pfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KG4sMil8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIG5OKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIG5OKGUsbil9fShuLHQpfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpKSxkPXVbMF0sZj11WzFdLHA9KDAseC51c2VDYWxsYmFjaykoZnVuY3Rpb24oZSl7ZihlKX0sW10pO3JldHVybigwLHgudXNlRWZmZWN0KShmdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKGUpe1wiQXJyb3dMZWZ0XCI9PT1lLmtleT8oZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCksaSYmaSgpKTpcIkFycm93UmlnaHRcIj09PWUua2V5JiYoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCksbCYmbCgpKX07aWYobnVsbCE9ZCl7dmFyIG49ZC5nZXRSb290Tm9kZSgpLHQ9c2VsZi5kb2N1bWVudDtyZXR1cm4gbi5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGUpLG4hPT10JiZ0LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsZSksZnVuY3Rpb24oKXtuLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsZSksbiE9PXQmJnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixlKX19fSxbZCxsLGldKSwoMCx4LnVzZUVmZmVjdCkoZnVuY3Rpb24oKXtpZihudWxsIT1kKXt2YXIgZSxuLHQ9ZC5nZXRSb290Tm9kZSgpO2lmKGU9dCxudWxsIT0obj1TaGFkb3dSb290KSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmbltTeW1ib2wuaGFzSW5zdGFuY2VdPyEhbltTeW1ib2wuaGFzSW5zdGFuY2VdKGUpOmUgaW5zdGFuY2VvZiBuKXt2YXIgYT10LmFjdGl2ZUVsZW1lbnQ7MD09PW8/cy5jdXJyZW50JiZhPT09cy5jdXJyZW50JiZzLmN1cnJlbnQuYmx1cigpOm89PT1yLmxlbmd0aC0xJiZjLmN1cnJlbnQmJmE9PT1jLmN1cnJlbnQmJmMuY3VycmVudC5ibHVyKCl9fX0sW2QsbyxyLmxlbmd0aF0pLCgwLHkuanN4cykoXCJuYXZcIix7Y2xhc3NOYW1lOlwiZXJyb3Itb3ZlcmxheS1wYWdpbmF0aW9uIGRpYWxvZy1leGNsdWRlLWNsb3NpbmctZnJvbS1vdXRzaWRlLWNsaWNrXCIscmVmOnAsY2hpbGRyZW46WygwLHkuanN4KShcImJ1dHRvblwiLHtyZWY6cyx0eXBlOlwiYnV0dG9uXCIsZGlzYWJsZWQ6MD09PW8sXCJhcmlhLWRpc2FibGVkXCI6MD09PW8sb25DbGljazppLFwiZGF0YS1uZXh0anMtZGlhbG9nLWVycm9yLXByZXZpb3VzXCI6ITAsY2xhc3NOYW1lOlwiZXJyb3Itb3ZlcmxheS1wYWdpbmF0aW9uLWJ1dHRvblwiLGNoaWxkcmVuOigwLHkuanN4KShuVCx7dGl0bGU6XCJwcmV2aW91c1wiLGNsYXNzTmFtZTpcImVycm9yLW92ZXJsYXktcGFnaW5hdGlvbi1idXR0b24taWNvblwifSl9KSwoMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcImVycm9yLW92ZXJsYXktcGFnaW5hdGlvbi1jb3VudFwiLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwic3BhblwiLHtcImRhdGEtbmV4dGpzLWRpYWxvZy1lcnJvci1pbmRleFwiOm8sY2hpbGRyZW46W28rMSxcIi9cIl19KSwoMCx5LmpzeCkoXCJzcGFuXCIse1wiZGF0YS1uZXh0anMtZGlhbG9nLWhlYWRlci10b3RhbC1jb3VudFwiOiEwLGNoaWxkcmVuOnIubGVuZ3RofHwxfSldfSksKDAseS5qc3gpKFwiYnV0dG9uXCIse3JlZjpjLHR5cGU6XCJidXR0b25cIixkaXNhYmxlZDpvPj1yLmxlbmd0aC0xLFwiYXJpYS1kaXNhYmxlZFwiOm8+PXIubGVuZ3RoLTEsb25DbGljazpsLFwiZGF0YS1uZXh0anMtZGlhbG9nLWVycm9yLW5leHRcIjohMCxjbGFzc05hbWU6XCJlcnJvci1vdmVybGF5LXBhZ2luYXRpb24tYnV0dG9uXCIsY2hpbGRyZW46KDAseS5qc3gpKG5SLHt0aXRsZTpcIm5leHRcIixjbGFzc05hbWU6XCJlcnJvci1vdmVybGF5LXBhZ2luYXRpb24tYnV0dG9uLWljb25cIn0pfSldfSl9ZnVuY3Rpb24gbkIoZSl7dmFyIG49ZS5pbnN0YWxsZWQsdD1lLnN0YWxlbmVzcyxyPWUuZXhwZWN0ZWQsbz1cIlwiLGE9XCJcIixpPVwiXCIsbD1cIk5leHQuanMgXCIuY29uY2F0KG4pO3N3aXRjaCh0KXtjYXNlXCJuZXdlci10aGFuLW5wbVwiOmNhc2VcImZyZXNoXCI6bz1sLGE9XCJMYXRlc3QgYXZhaWxhYmxlIHZlcnNpb24gaXMgZGV0ZWN0ZWQgKFwiLmNvbmNhdChuLFwiKS5cIiksaT1cImZyZXNoXCI7YnJlYWs7Y2FzZVwic3RhbGUtcGF0Y2hcIjpjYXNlXCJzdGFsZS1taW5vclwiOm89XCJcIi5jb25jYXQobCxcIiAoc3RhbGUpXCIpLGE9XCJUaGVyZSBpcyBhIG5ld2VyIHZlcnNpb24gKFwiLmNvbmNhdChyLFwiKSBhdmFpbGFibGUsIHVwZ3JhZGUgcmVjb21tZW5kZWQhIFwiKSxpPVwic3RhbGVcIjticmVhaztjYXNlXCJzdGFsZS1tYWpvclwiOm89XCJcIi5jb25jYXQobCxcIiAob3V0ZGF0ZWQpXCIpLGE9XCJBbiBvdXRkYXRlZCB2ZXJzaW9uIGRldGVjdGVkIChsYXRlc3QgaXMgXCIuY29uY2F0KHIsXCIpLCB1cGdyYWRlIGlzIGhpZ2hseSByZWNvbW1lbmRlZCFcIiksaT1cIm91dGRhdGVkXCI7YnJlYWs7Y2FzZVwic3RhbGUtcHJlcmVsZWFzZVwiOm89XCJcIi5jb25jYXQobCxcIiAoc3RhbGUpXCIpLGE9XCJUaGVyZSBpcyBhIG5ld2VyIGNhbmFyeSB2ZXJzaW9uIChcIi5jb25jYXQocixcIikgYXZhaWxhYmxlLCBwbGVhc2UgdXBncmFkZSEgXCIpLGk9XCJzdGFsZVwiO2JyZWFrO2Nhc2VcInVua25vd25cIjpvPVwiXCIuY29uY2F0KGwsXCIgKHVua25vd24pXCIpLGE9XCJObyBOZXh0LmpzIHZlcnNpb24gZGF0YSB3YXMgZm91bmQuXCIsaT1cInVua25vd25cIn1yZXR1cm57dGV4dDpvLGluZGljYXRvckNsYXNzOmksdGl0bGU6YX19ZnVuY3Rpb24gbk0oZSl7dmFyIG4sdDtyZXR1cm4oMCx5LmpzeCkoXCJzdmdcIiwobj1mdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHt3aWR0aDpcIjE0XCIsaGVpZ2h0OlwiMTRcIix2aWV3Qm94OlwiMCAwIDE0IDE0XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLHQ9dD17Y2hpbGRyZW46KDAseS5qc3gpKFwiY2lyY2xlXCIse2N4OlwiN1wiLGN5OlwiN1wiLHI6XCI1LjVcIixzdHJva2VXaWR0aDpcIjNcIn0pfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpKX0pLG4pKX1mdW5jdGlvbiBuSShlKXt2YXIgbj1lLnZlcnNpb25JbmZvLHQ9ZS5idW5kbGVyTmFtZSxyPW4uc3RhbGVuZXNzLG89bkIobiksYT1vLnRleHQsaT1vLmluZGljYXRvckNsYXNzLGw9by50aXRsZSxzPVwiVHVyYm9wYWNrXCI9PT10O3JldHVybiByLnN0YXJ0c1dpdGgoXCJzdGFsZVwiKT8oMCx5LmpzeHMpKFwiYVwiLHtjbGFzc05hbWU6XCJuZXh0anMtY29udGFpbmVyLWJ1aWxkLWVycm9yLXZlcnNpb24tc3RhdHVzIGRpYWxvZy1leGNsdWRlLWNsb3NpbmctZnJvbS1vdXRzaWRlLWNsaWNrXCIsdGFyZ2V0OlwiX2JsYW5rXCIscmVsOlwibm9vcGVuZXIgbm9yZWZlcnJlclwiLGhyZWY6XCJodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy92ZXJzaW9uLXN0YWxlbmVzc1wiLGNoaWxkcmVuOlsoMCx5LmpzeCkobk0se2NsYXNzTmFtZTooMCxlSi5jeCkoXCJ2ZXJzaW9uLXN0YWxlbmVzcy1pbmRpY2F0b3JcIixpKX0pLCgwLHkuanN4KShcInNwYW5cIix7XCJkYXRhLW5leHRqcy12ZXJzaW9uLWNoZWNrZXJcIjohMCx0aXRsZTpsLGNoaWxkcmVuOmF9KSwoMCx5LmpzeCkoXCJzcGFuXCIse2NsYXNzTmFtZTooMCxlSi5jeCkocyYmXCJ0dXJib3BhY2stdGV4dFwiKSxjaGlsZHJlbjp0fSldfSk6KDAseS5qc3hzKShcInNwYW5cIix7Y2xhc3NOYW1lOlwibmV4dGpzLWNvbnRhaW5lci1idWlsZC1lcnJvci12ZXJzaW9uLXN0YXR1cyBkaWFsb2ctZXhjbHVkZS1jbG9zaW5nLWZyb20tb3V0c2lkZS1jbGlja1wiLGNoaWxkcmVuOlsoMCx5LmpzeCkobk0se2NsYXNzTmFtZTooMCxlSi5jeCkoXCJ2ZXJzaW9uLXN0YWxlbmVzcy1pbmRpY2F0b3JcIixpKX0pLCgwLHkuanN4KShcInNwYW5cIix7XCJkYXRhLW5leHRqcy12ZXJzaW9uLWNoZWNrZXJcIjohMCx0aXRsZTpsLGNoaWxkcmVuOmF9KSwoMCx5LmpzeCkoXCJzcGFuXCIse2NsYXNzTmFtZTooMCxlSi5jeCkocyYmXCJ0dXJib3BhY2stdGV4dFwiKSxjaGlsZHJlbjp0fSldfSl9ZnVuY3Rpb24gbkgoZSl7dmFyIG49ZS5ydW50aW1lRXJyb3JzLHQ9ZS5hY3RpdmVJZHgscj1lLnNldEFjdGl2ZUluZGV4LG89ZS52ZXJzaW9uSW5mbyxhPXByb2Nlc3MuZW52Ll9fTkVYVF9CVU5ETEVSfHxcIldlYnBhY2tcIjtyZXR1cm4oMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtZXJyb3Itb3ZlcmxheS1uYXZcIjohMCxjaGlsZHJlbjpbKDAseS5qc3gpKG5GLHtzaWRlOlwibGVmdFwiLGNoaWxkcmVuOigwLHkuanN4KShuRCx7cnVudGltZUVycm9yczpudWxsIT1uP246W10sYWN0aXZlSWR4Om51bGwhPXQ/dDowLG9uQWN0aXZlSW5kZXhDaGFuZ2U6bnVsbCE9cj9yOmZ1bmN0aW9uKCl7fX0pfSksbyYmKDAseS5qc3gpKG5GLHtzaWRlOlwicmlnaHRcIixjaGlsZHJlbjooMCx5LmpzeCkobkkse3ZlcnNpb25JbmZvOm8sYnVuZGxlck5hbWU6YX0pfSldfSl9ZnVuY3Rpb24gbkYoZSl7dmFyIG49ZS5jaGlsZHJlbix0PWUuc2lkZTtyZXR1cm4oMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcImVycm9yLW92ZXJsYXktbm90Y2hcIixcImRhdGEtc2lkZVwiOnZvaWQgMD09PXQ/XCJsZWZ0XCI6dCxjaGlsZHJlbjpbbiwoMCx5LmpzeCkoblUse30pXX0pfWZ1bmN0aW9uIG5VKCl7cmV0dXJuKDAseS5qc3hzKShcInN2Z1wiLHt3aWR0aDpcIjYwXCIsaGVpZ2h0OlwiNDJcIix2aWV3Qm94OlwiMCAwIDYwIDQyXCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsY2xhc3NOYW1lOlwiZXJyb3Itb3ZlcmxheS1ub3RjaC10YWlsXCIscHJlc2VydmVBc3BlY3RSYXRpbzpcIm5vbmVcIixjaGlsZHJlbjpbKDAseS5qc3hzKShcIm1hc2tcIix7aWQ6XCJlcnJvcl9vdmVybGF5X25hdl9tYXNrMF8yNjY3XzE0Njg3XCIsc3R5bGU6e21hc2tUeXBlOlwiYWxwaGFcIn0sbWFza1VuaXRzOlwidXNlclNwYWNlT25Vc2VcIix4OlwiMFwiLHk6XCItMVwiLHdpZHRoOlwiNjBcIixoZWlnaHQ6XCI0M1wiLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwibWFza1wiLHtpZDpcImVycm9yX292ZXJsYXlfbmF2X3BhdGhfMV9vdXRzaWRlXzFfMjY2N18xNDY4N1wiLG1hc2tVbml0czpcInVzZXJTcGFjZU9uVXNlXCIseDpcIjBcIix5OlwiLTFcIix3aWR0aDpcIjYwXCIsaGVpZ2h0OlwiNDNcIixmaWxsOlwiYmxhY2tcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwicmVjdFwiLHtmaWxsOlwid2hpdGVcIix5OlwiLTFcIix3aWR0aDpcIjYwXCIsaGVpZ2h0OlwiNDNcIn0pLCgwLHkuanN4KShcInBhdGhcIix7ZDpcIk0xIDBMOC4wNzgzIDBDMTUuNzcyIDAgMjIuNzgzNiA0LjQxMzI0IDI2LjExMSAxMS4zNTAxTDM0Ljg4ODkgMjkuNjQ5OEMzOC4yMTY0IDM2LjU4NjggNDUuMjI4IDQxIDUyLjkyMTcgNDFINjBIMUwxIDBaXCJ9KV19KSwoMCx5LmpzeCkoXCJwYXRoXCIse2Q6XCJNMSAwTDguMDc4MyAwQzE1Ljc3MiAwIDIyLjc4MzYgNC40MTMyNCAyNi4xMTEgMTEuMzUwMUwzNC44ODg5IDI5LjY0OThDMzguMjE2NCAzNi41ODY4IDQ1LjIyOCA0MSA1Mi45MjE3IDQxSDYwSDFMMSAwWlwiLGZpbGw6XCJ3aGl0ZVwifSksKDAseS5qc3gpKFwicGF0aFwiLHtkOlwiTTEgMFYtMUgwVjBMMSAwWk0xIDQxSDBWNDJIMVY0MVpNMzQuODg4OSAyOS42NDk4TDMzLjk4NzMgMzAuMDgyM0wzNC44ODg5IDI5LjY0OThaTTI2LjExMSAxMS4zNTAxTDI3LjAxMjcgMTAuOTE3N0wyNi4xMTEgMTEuMzUwMVpNMSAxSDguMDc4M1YtMUgxVjFaTTYwIDQwSDFWNDJINjBWNDBaTTIgNDFWMEwwIDBMMCA0MUgyWk0yNS4yMDk0IDExLjc4MjZMMzMuOTg3MyAzMC4wODIzTDM1Ljc5MDYgMjkuMjE3NEwyNy4wMTI3IDEwLjkxNzdMMjUuMjA5NCAxMS43ODI2Wk01Mi45MjE3IDQySDYwVjQwSDUyLjkyMTdWNDJaTTMzLjk4NzMgMzAuMDgyM0MzNy40ODExIDM3LjM2NjEgNDQuODQzMyA0MiA1Mi45MjE3IDQyVjQwQzQ1LjYxMjcgNDAgMzguOTUxNyAzNS44MDc0IDM1Ljc5MDYgMjkuMjE3NEwzMy45ODczIDMwLjA4MjNaTTguMDc4MyAxQzE1LjM4NzMgMSAyMi4wNDgzIDUuMTkyNTcgMjUuMjA5NCAxMS43ODI2TDI3LjAxMjcgMTAuOTE3N0MyMy41MTg4IDMuNjMzOSAxNi4xNTY3IC0xIDguMDc4MyAtMVYxWlwiLGZpbGw6XCJibGFja1wiLG1hc2s6XCJ1cmwoI2Vycm9yX292ZXJsYXlfbmF2X3BhdGhfMV9vdXRzaWRlXzFfMjY2N18xNDY4NylcIn0pXX0pLCgwLHkuanN4cykoXCJnXCIse21hc2s6XCJ1cmwoI2Vycm9yX292ZXJsYXlfbmF2X21hc2swXzI2NjdfMTQ2ODcpXCIsY2hpbGRyZW46WygwLHkuanN4cykoXCJtYXNrXCIse2lkOlwiZXJyb3Jfb3ZlcmxheV9uYXZfcGF0aF8zX291dHNpZGVfMl8yNjY3XzE0Njg3XCIsbWFza1VuaXRzOlwidXNlclNwYWNlT25Vc2VcIix4OlwiLTFcIix5OlwiMC4wMjQ0MTQxXCIsd2lkdGg6XCI2MFwiLGhlaWdodDpcIjQzXCIsZmlsbDpcImJsYWNrXCIsY2hpbGRyZW46WygwLHkuanN4KShcInJlY3RcIix7ZmlsbDpcIndoaXRlXCIseDpcIi0xXCIseTpcIjAuMDI0NDE0MVwiLHdpZHRoOlwiNjBcIixoZWlnaHQ6XCI0M1wifSksKDAseS5qc3gpKFwicGF0aFwiLHtkOlwiTTAgMS4wMjQ0MUg3LjA3ODNDMTQuNzcyIDEuMDI0NDEgMjEuNzgzNiA1LjQzNzY1IDI1LjExMSAxMi4zNzQ2TDMzLjg4ODkgMzAuNjc0M0MzNy4yMTY0IDM3LjYxMTIgNDQuMjI4IDQyLjAyNDQgNTEuOTIxNyA0Mi4wMjQ0SDU5SDBMMCAxLjAyNDQxWlwifSldfSksKDAseS5qc3gpKFwicGF0aFwiLHtkOlwiTTAgMS4wMjQ0MUg3LjA3ODNDMTQuNzcyIDEuMDI0NDEgMjEuNzgzNiA1LjQzNzY1IDI1LjExMSAxMi4zNzQ2TDMzLjg4ODkgMzAuNjc0M0MzNy4yMTY0IDM3LjYxMTIgNDQuMjI4IDQyLjAyNDQgNTEuOTIxNyA0Mi4wMjQ0SDU5SDBMMCAxLjAyNDQxWlwiLGZpbGw6XCJ2YXIoLS1iYWNrZ3JvdW5kLWNvbG9yKVwifSksKDAseS5qc3gpKFwicGF0aFwiLHtkOlwiTTAgMS4wMjQ0MUwwIDAuMDI0NDE0MUgtMVYxLjAyNDQxSDBaTTAgNDIuMDI0NEgtMVY0My4wMjQ0SDBMMCA0Mi4wMjQ0Wk0zMy44ODg5IDMwLjY3NDNMMzIuOTg3MyAzMS4xMDY4TDMzLjg4ODkgMzAuNjc0M1pNMjUuMTExIDEyLjM3NDZMMjYuMDEyNyAxMS45NDIxTDI1LjExMSAxMi4zNzQ2Wk0wIDIuMDI0NDFINy4wNzgzVjAuMDI0NDE0MUgwTDAgMi4wMjQ0MVpNNTkgNDEuMDI0NEgwTDAgNDMuMDI0NEg1OVY0MS4wMjQ0Wk0xIDQyLjAyNDRMMSAxLjAyNDQxSC0xTC0xIDQyLjAyNDRIMVpNMjQuMjA5NCAxMi44MDcxTDMyLjk4NzMgMzEuMTA2OEwzNC43OTA2IDMwLjI0MThMMjYuMDEyNyAxMS45NDIxTDI0LjIwOTQgMTIuODA3MVpNNTEuOTIxNyA0My4wMjQ0SDU5VjQxLjAyNDRINTEuOTIxN1Y0My4wMjQ0Wk0zMi45ODczIDMxLjEwNjhDMzYuNDgxMSAzOC4zOTA1IDQzLjg0MzMgNDMuMDI0NCA1MS45MjE3IDQzLjAyNDRWNDEuMDI0NEM0NC42MTI3IDQxLjAyNDQgMzcuOTUxNyAzNi44MzE4IDM0Ljc5MDYgMzAuMjQxOEwzMi45ODczIDMxLjEwNjhaTTcuMDc4MyAyLjAyNDQxQzE0LjM4NzMgMi4wMjQ0MSAyMS4wNDgzIDYuMjE2OTkgMjQuMjA5NCAxMi44MDcxTDI2LjAxMjcgMTEuOTQyMUMyMi41MTg4IDQuNjU4MzEgMTUuMTU2NyAwLjAyNDQxNDEgNy4wNzgzIDAuMDI0NDE0MVYyLjAyNDQxWlwiLGZpbGw6XCJ2YXIoLS1zdHJva2UtY29sb3IpXCIsbWFzazpcInVybCgjZXJyb3Jfb3ZlcmxheV9uYXZfcGF0aF8zX291dHNpZGVfMl8yNjY3XzE0Njg3KVwifSldfSldfSl9ZnVuY3Rpb24gblYoZSl7dmFyIG4sdCxyPWUuY2hpbGRyZW4sbz1lLm9uQ2xvc2UsYT1lLmZvb3RlcixpPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLG4uaW5kZXhPZih0KT49MHx8KG9bdF09ZVt0XSk7cmV0dXJuIG99KGUsbik7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSwhKG4uaW5kZXhPZih0KT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHQpJiYob1t0XT1lW3RdKX1yZXR1cm4gb30oZSxbXCJjaGlsZHJlblwiLFwib25DbG9zZVwiLFwiZm9vdGVyXCJdKTtyZXR1cm4oMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcImVycm9yLW92ZXJsYXktZGlhbG9nLWNvbnRhaW5lclwiLGNoaWxkcmVuOlsoMCx5LmpzeCkoZVosKG49ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7XCJhcmlhLWxhYmVsbGVkYnlcIjpcIm5leHRqc19fY29udGFpbmVyX2Vycm9yc19sYWJlbFwiLFwiYXJpYS1kZXNjcmliZWRieVwiOlwibmV4dGpzX19jb250YWluZXJfZXJyb3JzX2Rlc2NcIixjbGFzc05hbWU6XCJlcnJvci1vdmVybGF5LWRpYWxvZy1zY3JvbGxcIixvbkNsb3NlOm99LGkpLHQ9dD17Y2hpbGRyZW46cn0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKSl9KSxuKSksYV19KX1mdW5jdGlvbiBucShlKXt2YXIgbj1lLmNoaWxkcmVuO3JldHVybigwLHkuanN4KShlSyx7Y2xhc3NOYW1lOlwibmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtaGVhZGVyXCIsY2hpbGRyZW46bn0pfWZ1bmN0aW9uIG5XKGUpe3ZhciBuPWUuY2hpbGRyZW47cmV0dXJuKDAseS5qc3gpKGVZLHtjbGFzc05hbWU6XCJuZXh0anMtY29udGFpbmVyLWVycm9ycy1ib2R5XCIsY2hpbGRyZW46bn0pfXZhciBuJD0wLG5aPWZ1bmN0aW9uKGUpe3ZhciByLG8sYT1lLmNsYXNzTmFtZSxpPWUuY2hpbGRyZW4sbD1mdW5jdGlvbihlLG4pe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHQscixvPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSxuLmluZGV4T2YodCk+PTB8fChvW3RdPWVbdF0pO3JldHVybiBvfShlLG4pO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl0PWFbcl0sIShuLmluZGV4T2YodCk+PTApJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSx0KSYmKG9bdF09ZVt0XSl9cmV0dXJuIG99KGUsW1wiY2xhc3NOYW1lXCIsXCJjaGlsZHJlblwiXSk7cmV0dXJuIHgudXNlRWZmZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZighKG4kKys+MCkpe3ZhciBlPXdpbmRvdy5pbm5lcldpZHRoLWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtlPjAmJihuPWRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0LGRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0PVwiXCIuY29uY2F0KGUsXCJweFwiKSksdD1kb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93LGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9XCJoaWRkZW5cIn19KSxmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXswIT09biQmJjA9PS0tbiQmJih2b2lkIDAhPT1uJiYoZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHQ9bixuPXZvaWQgMCksdm9pZCAwIT09dCYmKGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9dCx0PXZvaWQgMCkpfSl9fSxbXSksKDAseS5qc3gpKFwiZGl2XCIsKHI9ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7XCJkYXRhLW5leHRqcy1kaWFsb2ctb3ZlcmxheVwiOiEwLGNsYXNzTmFtZTphfSxsKSxvPW89e2NoaWxkcmVuOml9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHIsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobykpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QobykpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG8sZSkpfSkscikpfTtmdW5jdGlvbiBuWShlKXt2YXIgbix0LHI9ZS5jaGlsZHJlbixvPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLG4uaW5kZXhPZih0KT49MHx8KG9bdF09ZVt0XSk7cmV0dXJuIG99KGUsbik7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSwhKG4uaW5kZXhPZih0KT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHQpJiYob1t0XT1lW3RdKX1yZXR1cm4gb30oZSxbXCJjaGlsZHJlblwiXSk7cmV0dXJuKDAseS5qc3gpKG5aLChuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe30sbyksdD10PXtjaGlsZHJlbjpyfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpKX0pLG4pKX1mdW5jdGlvbiBuWChlKXt2YXIgbj1NYXRoLm1pbihlLmVycm9yQ291bnQtZS5hY3RpdmVJZHgtMSwyKTtyZXR1cm4oMCx5LmpzeCkoXCJkaXZcIix7XCJhcmlhLWhpZGRlblwiOiEwLGNsYXNzTmFtZTpcImVycm9yLW92ZXJsYXktYm90dG9tLXN0YWNrXCIsY2hpbGRyZW46KDAseS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJlcnJvci1vdmVybGF5LWJvdHRvbS1zdGFjay1zdGFja1wiLFwiZGF0YS1zdGFjay1jb3VudFwiOm4sY2hpbGRyZW46WygwLHkuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJlcnJvci1vdmVybGF5LWJvdHRvbS1zdGFjay1sYXllciBlcnJvci1vdmVybGF5LWJvdHRvbS1zdGFjay1sYXllci0xXCIsY2hpbGRyZW46XCIxXCJ9KSwoMCx5LmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZXJyb3Itb3ZlcmxheS1ib3R0b20tc3RhY2stbGF5ZXIgZXJyb3Itb3ZlcmxheS1ib3R0b20tc3RhY2stbGF5ZXItMlwiLGNoaWxkcmVuOlwiMlwifSldfSl9KX1mdW5jdGlvbiBuSyhlKXt2YXIgbj1lLmVudmlyb25tZW50TmFtZTtyZXR1cm4oMCx5LmpzeCkoXCJzcGFuXCIse1wiZGF0YS1uZXh0anMtZW52aXJvbm1lbnQtbmFtZS1sYWJlbFwiOiEwLGNoaWxkcmVuOm59KX12YXIgblE9X193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvY29tcG9uZW50cy9lcnJvcnMvZGV2LXRvb2xzLWluZGljYXRvci91dGlscy50c1wiKSxuRz0oMCx4LmZvcndhcmRSZWYpKGZ1bmN0aW9uKGUsbil7dmFyIHQ9ZS5zdG9wLHI9ZS5ibHVyLG89ZS5zaWRlLGE9ZS5zdHlsZSxpPWUuaGVpZ2h0O3JldHVybigwLHkuanN4KShcImRpdlwiLHtyZWY6bixcImFyaWEtaGlkZGVuXCI6ITAsXCJkYXRhLW5leHRqcy1zY3JvbGwtZmFkZXJcIjohMCxjbGFzc05hbWU6XCJuZXh0anMtc2Nyb2xsLWZhZGVyXCIsXCJkYXRhLXNpZGVcIjpvLHN0eWxlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe1wiLS1zdG9wXCI6dCxcIi0tYmx1clwiOnIsXCItLWhlaWdodFwiOlwiXCIuY29uY2F0KGksXCJweFwiKX0sYSl9KX0pO2Z1bmN0aW9uIG5KKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiBuMChlLG4pe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSwhbnx8YS5sZW5ndGghPT1uKTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0oZSxuKXx8ZnVuY3Rpb24oZSxuKXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gbkooZSxuKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKHQpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gbkooZSxuKX19KGUsbil8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9dmFyIG4xPSgwLHguZm9yd2FyZFJlZikoZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG8sYSxpLGwscyxjLHUsZCxmPWUuY2hpbGRyZW4scD1lLm1lYXN1cmUsaD1mdW5jdGlvbihlLG4pe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHQscixvPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSxuLmluZGV4T2YodCk+PTB8fChvW3RdPWVbdF0pO3JldHVybiBvfShlLG4pO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl0PWFbcl0sIShuLmluZGV4T2YodCk+PTApJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSx0KSYmKG9bdF09ZVt0XSl9cmV0dXJuIG99KGUsW1wiY2hpbGRyZW5cIixcIm1lYXN1cmVcIl0pLGc9KDAseC51c2VSZWYpKG51bGwpLG09bjAoKHQ9ZyxyPXAsYT0obz1uMCgoMCx4LnVzZVN0YXRlKSgwKSwyKSlbMF0saT1vWzFdLHM9KGw9bjAoKDAseC51c2VTdGF0ZSkoITApLDIpKVswXSxjPWxbMV0sKDAseC51c2VFZmZlY3QpKGZ1bmN0aW9uKCl7aWYocil7dmFyIGUsbj10LmN1cnJlbnQ7aWYobil7dmFyIG89bmV3IFJlc2l6ZU9ic2VydmVyKGZ1bmN0aW9uKG4pe3ZhciB0PW4wKG4sMSlbMF0uY29udGVudFJlY3Q7Y2xlYXJUaW1lb3V0KGUpLGU9d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtjKCExKX0sMTAwKSxpKHQuaGVpZ2h0KX0pO3JldHVybiBvLm9ic2VydmUobiksZnVuY3Rpb24oKXtyZXR1cm4gby5kaXNjb25uZWN0KCl9fX19LFtyXSksW2Esc10pLDIpLHY9bVswXSxiPW1bMV07cmV0dXJuKDAseS5qc3gpKFwiZGl2XCIsKHU9ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7fSxoKSxkPWQ9e3JlZjpuLHN0eWxlOntoZWlnaHQ6Yj9cImF1dG9cIjp2LHRyYW5zaXRpb246XCJoZWlnaHQgMjUwbXMgdmFyKC0tdGltaW5nLXN3aWZ0KVwifSxjaGlsZHJlbjooMCx5LmpzeCkoXCJkaXZcIix7cmVmOmcsY2hpbGRyZW46Zn0pfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh1LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGQpKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KGQpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh1LGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihkLGUpKX0pLHUpKX0pO2Z1bmN0aW9uIG4yKGUpe3ZhciBuPWUuZml4ZWQsdD1mdW5jdGlvbihlLG4pe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHQscixvPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSxuLmluZGV4T2YodCk+PTB8fChvW3RdPWVbdF0pO3JldHVybiBvfShlLG4pO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl0PWFbcl0sIShuLmluZGV4T2YodCk+PTApJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSx0KSYmKG9bdF09ZVt0XSl9cmV0dXJuIG99KGUsW1wiZml4ZWRcIl0pO3JldHVybigwLHkuanN4KShcImRpdlwiLGZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe1wiZGF0YS1uZXh0anMtZGlhbG9nLWJhY2tkcm9wXCI6ITAsXCJkYXRhLW5leHRqcy1kaWFsb2ctYmFja2Ryb3AtZml4ZWRcIjohIW58fHZvaWQgMH0sdCkpfWZ1bmN0aW9uIG40KGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiBuNShlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9ZnVuY3Rpb24gbjMoZSxuKXtyZXR1cm4gbj1udWxsIT1uP246e30sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSxlfWZ1bmN0aW9uIG42KGUsbil7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLCFufHxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShlLG4pfHxmdW5jdGlvbihlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBuNChlLG4pO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20odCk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiBuNChlLG4pfX0oZSxuKXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX1mdW5jdGlvbiBuOShlKXt2YXIgbj1lLmVycm9yTWVzc2FnZSx0PWUuZXJyb3JUeXBlLHI9ZS5jaGlsZHJlbixvPWUuZXJyb3JDb2RlLGE9ZS5lcnJvckNvdW50LGk9ZS5lcnJvcixsPWUuZGVidWdJbmZvLHM9ZS5pc0J1aWxkRXJyb3IsYz1lLm9uQ2xvc2UsdT1lLnZlcnNpb25JbmZvLGQ9ZS5ydW50aW1lRXJyb3JzLGY9ZS5hY3RpdmVJZHgscD1lLnNldEFjdGl2ZUluZGV4LGg9ZS5pc1R1cmJvcGFjayxnPWUuZGlhbG9nUmVzaXplclJlZixtPWUucmVuZGVyZWQsdj12b2lkIDA9PT1tfHxtLGI9ZS50cmFuc2l0aW9uRHVyYXRpb25Ncyx3PXtcImRhdGEtcmVuZGVyZWRcIjp2LHN0eWxlOntcIi0tdHJhbnNpdGlvbi1kdXJhdGlvblwiOlwiXCIuY29uY2F0KGIsXCJtc1wiKX19LGo9bjYoeC51c2VTdGF0ZSghIWIpLDIpLGs9alswXSxBPWpbMV0sTz14LnVzZVJlZihudWxsKSxDPSEhbyxTPXgudXNlUmVmKG51bGwpO3JldHVybigwLG5RLlA1KShTLG51bGwsdiksKDAseS5qc3hzKShuWSxuMyhuNSh7fSx3KSx7Y2hpbGRyZW46WygwLHkuanN4KShuMix7Zml4ZWQ6c30pLCgwLHkuanN4cykoXCJkaXZcIixuMyhuNSh7XCJkYXRhLW5leHRqcy1kaWFsb2ctcm9vdFwiOiEwLG9uVHJhbnNpdGlvbkVuZDpmdW5jdGlvbihlKXt2YXIgbj1lLnByb3BlcnR5TmFtZSx0PWUudGFyZ2V0O1wic2NhbGVcIj09PW4mJnQ9PT1TLmN1cnJlbnQmJkEoITEpfSxyZWY6U30sdykse2NoaWxkcmVuOlsoMCx5LmpzeCkobkgse3J1bnRpbWVFcnJvcnM6ZCxhY3RpdmVJZHg6ZixzZXRBY3RpdmVJbmRleDpwLHZlcnNpb25JbmZvOnUsaXNUdXJib3BhY2s6aH0pLCgwLHkuanN4cykoblYse29uQ2xvc2U6YyxkaWFsb2dSZXNpemVyUmVmOmcsXCJkYXRhLWhhcy1mb290ZXJcIjpDLG9uU2Nyb2xsOmZ1bmN0aW9uKGUpe2lmKE8uY3VycmVudCl7dmFyIG4sdCxyPShuPWUuY3VycmVudFRhcmdldC5zY3JvbGxUb3AvMTcsTWF0aC5taW4oTWF0aC5tYXgobiwodD1uNihbMCwxXSwyKSlbMF0pLHRbMV0pKTtPLmN1cnJlbnQuc3R5bGUub3BhY2l0eT1TdHJpbmcocil9fSxmb290ZXI6QyYmKDAseS5qc3gpKG5TLHtlcnJvckNvZGU6b30pLGNoaWxkcmVuOlsoMCx5LmpzeCkobjEse3JlZjpnLG1lYXN1cmU6IWssXCJkYXRhLW5leHRqcy1kaWFsb2ctc2l6ZXJcIjohMCxjaGlsZHJlbjooMCx5LmpzeHMpKGVYLHtjaGlsZHJlbjpbKDAseS5qc3hzKShucSx7Y2hpbGRyZW46WygwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwibmV4dGpzX19jb250YWluZXJfZXJyb3JzX19lcnJvcl90aXRsZVwiLFwiZGF0YS1uZXh0anMtZXJyb3ItY29kZVwiOm8sY2hpbGRyZW46WygwLHkuanN4cykoXCJzcGFuXCIse1wiZGF0YS1uZXh0anMtZXJyb3ItbGFiZWwtZ3JvdXBcIjohMCxjaGlsZHJlbjpbKDAseS5qc3gpKG5MLHtlcnJvclR5cGU6dH0pLGkuZW52aXJvbm1lbnROYW1lJiYoMCx5LmpzeCkobksse2Vudmlyb25tZW50TmFtZTppLmVudmlyb25tZW50TmFtZX0pXX0pLCgwLHkuanN4KShueCx7ZXJyb3I6aSxkZWJ1Z0luZm86bH0pXX0pLCgwLHkuanN4KShueix7ZXJyb3JNZXNzYWdlOm59KV19KSwoMCx5LmpzeCkoblcse2NoaWxkcmVuOnJ9KV19KX0pLCgwLHkuanN4KShuWCx7ZXJyb3JDb3VudDphLGFjdGl2ZUlkeDpudWxsIT1mP2Y6MH0pXX0pLCgwLHkuanN4KShuRyx7cmVmOk8sc2lkZTpcInRvcFwiLHN0b3A6XCI1MCVcIixibHVyOlwiNHB4XCIsaGVpZ2h0OjQ4fSldfSkpXX0pKX12YXIgbjg9XCJcXG4gIFwiLmNvbmNhdChcIlxcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1vdmVybGF5XSB7XFxuICAgIHBhZGRpbmc6IGluaXRpYWw7XFxuICAgIHRvcDogMTB2aDtcXG4gIH1cXG5cIixcIlxcbiAgXCIpLmNvbmNhdChcIlxcbiAgLmVycm9yLW92ZXJsYXktZGlhbG9nLWNvbnRhaW5lciB7XFxuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XFxuICAgIGJvcmRlcjogdmFyKC0tbmV4dC1kaWFsb2ctYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICAgIGJvcmRlci1yYWRpdXM6IDAgMCB2YXIoLS1uZXh0LWRpYWxvZy1yYWRpdXMpIHZhcigtLW5leHQtZGlhbG9nLXJhZGl1cyk7XFxuICAgIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1tZW51KTtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgfVxcblxcbiAgLmVycm9yLW92ZXJsYXktZGlhbG9nLXNjcm9sbCB7XFxuICAgIG92ZXJmbG93LXk6IGF1dG87XFxuICAgIGhlaWdodDogMTAwJTtcXG4gIH1cXG5cIixcIlxcbiAgXCIpLmNvbmNhdChcIlxcbiAgLm5leHRqcy1jb250YWluZXItZXJyb3JzLWhlYWRlciB7XFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIH1cXG4gIC5uZXh0anMtY29udGFpbmVyLWVycm9ycy1oZWFkZXIgPiBoMSB7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0yMCk7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1zaXplLTI0KTtcXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxuICAgIG1hcmdpbjogY2FsYygxNnB4ICogMS41KSAwO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItdGl0bGUtaDEpO1xcbiAgfVxcbiAgLm5leHRqcy1jb250YWluZXItZXJyb3JzLWhlYWRlciBzbWFsbCB7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNCk7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnRzLTEpO1xcbiAgICBtYXJnaW4tbGVmdDogMTZweDtcXG4gIH1cXG4gIC5uZXh0anMtY29udGFpbmVyLWVycm9ycy1oZWFkZXIgc21hbGwgPiBzcGFuIHtcXG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2stbW9ub3NwYWNlKTtcXG4gIH1cXG4gIC5uZXh0anMtY29udGFpbmVyLWVycm9ycy1oZWFkZXIgPiBkaXYgPiBzbWFsbCB7XFxuICAgIG1hcmdpbjogMDtcXG4gICAgbWFyZ2luLXRvcDogNHB4O1xcbiAgfVxcbiAgLm5leHRqcy1jb250YWluZXItZXJyb3JzLWhlYWRlciA+IHAgPiBhIHtcXG4gICAgY29sb3I6IGluaGVyaXQ7XFxuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xcbiAgfVxcbiAgLm5leHRqcy1jb250YWluZXItZXJyb3JzLWhlYWRlclxcbiAgICA+IC5uZXh0anMtY29udGFpbmVyLWJ1aWxkLWVycm9yLXZlcnNpb24tc3RhdHVzIHtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICB0b3A6IDE2cHg7XFxuICAgIHJpZ2h0OiAxNnB4O1xcbiAgfVxcblwiLFwiXFxuICBcIikuY29uY2F0KFwiXCIsXCJcXG5cXG4gIFwiKS5jb25jYXQoXCJcXG4gIFtkYXRhLW5leHRqcy1lcnJvci1vdmVybGF5LW5hdl0ge1xcbiAgICAtLXN0cm9rZS1jb2xvcjogdmFyKC0tY29sb3ItZ3JheS00MDApO1xcbiAgICAtLWJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMTAwKTtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcblxcbiAgICB3aWR0aDogMTAwJTtcXG5cXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICB6LWluZGV4OiAyO1xcbiAgICBvdXRsaW5lOiBub25lO1xcbiAgICB0cmFuc2xhdGU6IHZhcigtLW5leHQtZGlhbG9nLWJvcmRlci13aWR0aCkgdmFyKC0tbmV4dC1kaWFsb2ctYm9yZGVyLXdpZHRoKTtcXG4gICAgbWF4LXdpZHRoOiB2YXIoLS1uZXh0LWRpYWxvZy1tYXgtd2lkdGgpO1xcblxcbiAgICAuZXJyb3Itb3ZlcmxheS1ub3RjaCB7XFxuICAgICAgdHJhbnNsYXRlOiBjYWxjKHZhcigtLW5leHQtZGlhbG9nLWJvcmRlci13aWR0aCkgKiAtMSk7XFxuICAgICAgd2lkdGg6IGF1dG87XFxuICAgICAgaGVpZ2h0OiB2YXIoLS1uZXh0LWRpYWxvZy1ub3RjaC1oZWlnaHQpO1xcbiAgICAgIHBhZGRpbmc6IDEycHg7XFxuICAgICAgYmFja2dyb3VuZDogdmFyKC0tYmFja2dyb3VuZC1jb2xvcik7XFxuICAgICAgYm9yZGVyOiB2YXIoLS1uZXh0LWRpYWxvZy1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLXN0cm9rZS1jb2xvcik7XFxuICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuXFxuICAgICAgJltkYXRhLXNpZGU9J2xlZnQnXSB7XFxuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xcbiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbmV4dC1kaWFsb2ctcmFkaXVzKSAwIDAgMDtcXG5cXG4gICAgICAgIC5lcnJvci1vdmVybGF5LW5vdGNoLXRhaWwge1xcbiAgICAgICAgICByaWdodDogLTU0cHg7XFxuICAgICAgICB9XFxuXFxuICAgICAgICA+ICo6bm90KC5lcnJvci1vdmVybGF5LW5vdGNoLXRhaWwpIHtcXG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiAtMTBweDtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuXFxuICAgICAgJltkYXRhLXNpZGU9J3JpZ2h0J10ge1xcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMCB2YXIoLS1uZXh0LWRpYWxvZy1yYWRpdXMpIDAgMDtcXG5cXG4gICAgICAgIC5lcnJvci1vdmVybGF5LW5vdGNoLXRhaWwge1xcbiAgICAgICAgICBsZWZ0OiAtNTRweDtcXG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGVZKDE4MGRlZyk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICA+ICo6bm90KC5lcnJvci1vdmVybGF5LW5vdGNoLXRhaWwpIHtcXG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IC0xMnB4O1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG5cXG4gICAgICAuZXJyb3Itb3ZlcmxheS1ub3RjaC10YWlsIHtcXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgICAgIHRvcDogY2FsYyh2YXIoLS1uZXh0LWRpYWxvZy1ib3JkZXItd2lkdGgpICogLTEpO1xcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICAgICAgICB6LWluZGV4OiAtMTtcXG4gICAgICAgIGhlaWdodDogY2FsYygxMDAlICsgdmFyKC0tbmV4dC1kaWFsb2ctYm9yZGVyLXdpZHRoKSk7XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXFxuICBAbWVkaWEgKG1heC13aWR0aDogNjAwcHgpIHtcXG4gICAgW2RhdGEtbmV4dGpzLWVycm9yLW92ZXJsYXktbmF2XSB7XFxuICAgICAgYmFja2dyb3VuZDogdmFyKC0tYmFja2dyb3VuZC1jb2xvcik7XFxuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbmV4dC1kaWFsb2ctcmFkaXVzKSB2YXIoLS1uZXh0LWRpYWxvZy1yYWRpdXMpIDAgMDtcXG4gICAgICBib3JkZXI6IHZhcigtLW5leHQtZGlhbG9nLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tc3Ryb2tlLWNvbG9yKTtcXG4gICAgICBib3JkZXItYm90dG9tOiBub25lO1xcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgICAgdHJhbnNsYXRlOiAwIHZhcigtLW5leHQtZGlhbG9nLWJvcmRlci13aWR0aCk7XFxuICAgICAgXFxuICAgICAgLmVycm9yLW92ZXJsYXktbm90Y2gge1xcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcXG4gICAgICAgIGJvcmRlcjogMDtcXG5cXG4gICAgICAgICZbZGF0YS1zaWRlPVxcXCJsZWZ0XFxcIl0sICZbZGF0YS1zaWRlPVxcXCJyaWdodFxcXCJdIHtcXG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIC5lcnJvci1vdmVybGF5LW5vdGNoLXRhaWwge1xcbiAgICAgICAgICBkaXNwbGF5OiBub25lO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiLFwiXFxuICBcIikuY29uY2F0KFwiXFxuICAubmV4dGpzX19jb250YWluZXJfZXJyb3JzX2xhYmVsIHtcXG4gICAgcGFkZGluZzogMnB4IDZweDtcXG4gICAgbWFyZ2luOiAwO1xcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLW1kLTIpO1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1yZWQtMTAwKTtcXG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTEyKTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXJlZC05MDApO1xcbiAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjay1tb25vc3BhY2UpO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tc2l6ZS0yMCk7XFxuICB9XFxuXCIsXCJcXG4gIFwiKS5jb25jYXQoXCJcXG4gIC5uZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfd3JhcHBlciB7XFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIH1cXG5cXG4gIC5uZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfZGVzYyB7XFxuICAgIG1hcmdpbjogMDtcXG4gICAgbWFyZ2luLWxlZnQ6IDRweDtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXJlZC05MDApO1xcbiAgICBmb250LXdlaWdodDogNTAwO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTYpO1xcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMzJweDtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLXNpemUtMjQpO1xcbiAgICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkO1xcbiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XFxuICB9XFxuXFxuICAubmV4dGpzX19jb250YWluZXJfZXJyb3JzX2Rlc2MudHJ1bmNhdGVkIHtcXG4gICAgbWF4LWhlaWdodDogMjAwcHg7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICB9XFxuXFxuICAubmV4dGpzX19jb250YWluZXJfZXJyb3JzX2dyYWRpZW50X292ZXJsYXkge1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIGJvdHRvbTogMDtcXG4gICAgbGVmdDogMDtcXG4gICAgcmlnaHQ6IDA7XFxuICAgIGhlaWdodDogODVweDtcXG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KFxcbiAgICAgIDE4MGRlZyxcXG4gICAgICByZ2JhKDI1MCwgMjUwLCAyNTAsIDApIDAlLFxcbiAgICAgIHZhcigtLWNvbG9yLWJhY2tncm91bmQtMTAwKSAxMDAlXFxuICAgICk7XFxuICB9XFxuXFxuICAubmV4dGpzX19jb250YWluZXJfZXJyb3JzX2V4cGFuZF9idXR0b24ge1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIGJvdHRvbTogMTBweDtcXG4gICAgbGVmdDogNTAlO1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIHBhZGRpbmc6IDZweCA4cHg7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMTAwKTtcXG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS1hbHBoYS00MDApO1xcbiAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcXG4gICAgYm94LXNoYWRvdzpcXG4gICAgICAwcHggMnB4IDJweCB2YXIoLS1jb2xvci1ncmF5LWFscGhhLTEwMCksXFxuICAgICAgMHB4IDhweCA4cHggLThweCB2YXIoLS1jb2xvci1ncmF5LWFscGhhLTEwMCk7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xMyk7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktOTAwKTtcXG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjJzIGVhc2U7XFxuICB9XFxuXFxuICAubmV4dGpzX19jb250YWluZXJfZXJyb3JzX2V4cGFuZF9idXR0b246aG92ZXIge1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LTEwMCk7XFxuICB9XFxuXCIsXCJcXG4gIFwiKS5jb25jYXQoXCJcXG4gIC5lcnJvci1vdmVybGF5LXRvb2xiYXIge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBnYXA6IDZweDtcXG4gIH1cXG5cXG4gIC5ub2RlanMtaW5zcGVjdG9yLWJ1dHRvbixcXG4gIC5jb3B5LXN0YWNrLXRyYWNlLWJ1dHRvbixcXG4gIC5kb2NzLWxpbmstYnV0dG9uIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuXFxuICAgIHdpZHRoOiB2YXIoLS1zaXplLTI4KTtcXG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplLTI4KTtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xcbiAgICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LWFscGhhLTQwMCk7XFxuICAgIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1zbWFsbCk7XFxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtZnVsbCk7XFxuXFxuICAgIHN2ZyB7XFxuICAgICAgd2lkdGg6IHZhcigtLXNpemUtMTQpO1xcbiAgICAgIGhlaWdodDogdmFyKC0tc2l6ZS0xNCk7XFxuICAgIH1cXG5cXG4gICAgJjpmb2N1cyB7XFxuICAgICAgb3V0bGluZTogdmFyKC0tZm9jdXMtcmluZyk7XFxuICAgIH1cXG5cXG4gICAgJjpub3QoOmRpc2FibGVkKTpob3ZlciB7XFxuICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS1hbHBoYS0xMDApO1xcbiAgICB9XFxuXFxuICAgICY6bm90KDpkaXNhYmxlZCk6YWN0aXZlIHtcXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LWFscGhhLTIwMCk7XFxuICAgIH1cXG5cXG4gICAgJjpkaXNhYmxlZCB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDApO1xcbiAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC5lcnJvci1vdmVybGF5LXRvb2xiYXItYnV0dG9uLWljb24ge1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS05MDApO1xcbiAgfVxcblwiLFwiXFxuXFxuICBbZGF0YS1uZXh0anMtZXJyb3ItbGFiZWwtZ3JvdXBdIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgZ2FwOiA4cHg7XFxuICB9XFxuXCIpO2Z1bmN0aW9uIG43KGUpe3ZhciBuLHQscj1lLmZpbGUsbz1lLmxvY2F0aW9uLGE9ZUUoe2ZpbGU6cixsaW5lTnVtYmVyOm51bGwhPShuPW51bGw9PW8/dm9pZCAwOm8ubGluZSk/bjoxLGNvbHVtbjpudWxsIT0odD1udWxsPT1vP3ZvaWQgMDpvLmNvbHVtbik/dDowfSk7cmV0dXJuKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtd2l0aC1vcGVuLWluLWVkaXRvci1saW5rXCI6ITAsXCJkYXRhLXdpdGgtb3Blbi1pbi1lZGl0b3ItbGluay1pbXBvcnQtdHJhY2VcIjohMCxyb2xlOlwibGlua1wiLG9uQ2xpY2s6YSx0aXRsZTpcIkNsaWNrIHRvIG9wZW4gaW4geW91ciBlZGl0b3JcIixjaGlsZHJlbjpbcixvP1wiOlwiLmNvbmNhdChvLmxpbmUsXCI6XCIpLmNvbmNhdChvLmNvbHVtbik6bnVsbCwoMCx5LmpzeHMpKFwic3ZnXCIse3htbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIix2aWV3Qm94OlwiMCAwIDI0IDI0XCIsZmlsbDpcIm5vbmVcIixzdHJva2U6XCJjdXJyZW50Q29sb3JcIixzdHJva2VXaWR0aDpcIjJcIixzdHJva2VMaW5lY2FwOlwicm91bmRcIixzdHJva2VMaW5lam9pbjpcInJvdW5kXCIsY2hpbGRyZW46WygwLHkuanN4KShcInBhdGhcIix7ZDpcIk0xOCAxM3Y2YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmg2XCJ9KSwoMCx5LmpzeCkoXCJwb2x5bGluZVwiLHtwb2ludHM6XCIxNSAzIDIxIDMgMjEgOVwifSksKDAseS5qc3gpKFwibGluZVwiLHt4MTpcIjEwXCIseTE6XCIxNFwiLHgyOlwiMjFcIix5MjpcIjNcIn0pXX0pXX0pfWZ1bmN0aW9uIHRlKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn12YXIgdG49ZnVuY3Rpb24oZSl7dmFyIG4sdCxyLG8sYSxpLGwscyxjLHUsZD1lLmNvbnRlbnQsZj14LnVzZU1lbW8oZnVuY3Rpb24oKXt2YXIgZSxuLHQ7cmV0dXJuIG49ZnVuY3Rpb24oZSl7dmFyIG4sdCxyPWUuc2hpZnQoKTtpZighcilyZXR1cm4gbnVsbDt2YXIgbz0obj1yLnNwbGl0KFwiOlwiLDMpLHQ9MyxmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShuKXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShuLDMpfHxmdW5jdGlvbihlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiB0ZShlLG4pO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20odCk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiB0ZShlLG4pfX0obix0KXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKSksYT1vWzBdLGk9b1sxXSxsPW9bMl0scz1OdW1iZXIoaSksYz1OdW1iZXIobCksdT0hTnVtYmVyLmlzTmFOKHMpJiYhTnVtYmVyLmlzTmFOKGMpO3JldHVybntmaWxlTmFtZTp1P2E6cixsb2NhdGlvbjp1P3tsaW5lOnMsY29sdW1uOmN9OnZvaWQgMH19KGU9ZC5zcGxpdChcIlxcblwiKSksdD1mdW5jdGlvbihlKXtpZihlLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuL1JlYWN0U2VydmVyQ29tcG9uZW50c0Vycm9yOi8udGVzdChlKX0pfHxlLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuL0ltcG9ydCB0cmFjZSBmb3IgcmVxdWVzdGVkIG1vZHVsZTovLnRlc3QoZSl9KSl7Zm9yKHZhciBuPVtdOy8uK1xcLi4rLy50ZXN0KGVbZS5sZW5ndGgtMV0pJiYhZVtlLmxlbmd0aC0xXS5pbmNsdWRlcyhcIjpcIik7KXt2YXIgdD1lLnBvcCgpLnRyaW0oKTtuLnVuc2hpZnQodCl9cmV0dXJuIG59cmV0dXJuW119KGUpLHtmaWxlOm4sc291cmNlOmUuam9pbihcIlxcblwiKSxpbXBvcnRUcmFjZUZpbGVzOnR9fSxbZF0pLHA9Zi5maWxlLGg9Zi5zb3VyY2UsZz1mLmltcG9ydFRyYWNlRmlsZXMsbT14LnVzZU1lbW8oZnVuY3Rpb24oKXtyZXR1cm4gZUgoKS5hbnNpVG9Kc29uKGgse2pzb246ITAsdXNlX2NsYXNzZXM6ITAscmVtb3ZlX2VtcHR5OiEwfSl9LFtoXSksdj1lRSh7ZmlsZTpudWxsPT1wP3ZvaWQgMDpwLmZpbGVOYW1lLGxpbmVOdW1iZXI6bnVsbCE9KGk9bnVsbD09cHx8bnVsbD09KG49cC5sb2NhdGlvbik/dm9pZCAwOm4ubGluZSk/aToxLGNvbHVtbjpudWxsIT0obD1udWxsPT1wfHxudWxsPT0odD1wLmxvY2F0aW9uKT92b2lkIDA6dC5jb2x1bW4pP2w6MH0pLGI9e2ZpbGU6bnVsbCE9KHM9bnVsbD09cD92b2lkIDA6cC5maWxlTmFtZSk/czpudWxsLG1ldGhvZE5hbWU6XCJcIixhcmd1bWVudHM6W10sbGluZU51bWJlcjpudWxsIT0oYz1udWxsPT1wfHxudWxsPT0ocj1wLmxvY2F0aW9uKT92b2lkIDA6ci5saW5lKT9jOm51bGwsY29sdW1uOm51bGwhPSh1PW51bGw9PXB8fG51bGw9PShvPXAubG9jYXRpb24pP3ZvaWQgMDpvLmNvbHVtbik/dTpudWxsfSx3PW51bGw9PWJ8fG51bGw9PShhPWIuZmlsZSk/dm9pZCAwOmEuc3BsaXQoXCIuXCIpLnBvcCgpO3JldHVybigwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1jb2RlZnJhbWVcIjohMCxjaGlsZHJlbjpbKDAseS5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTpcImNvZGUtZnJhbWUtaGVhZGVyXCIsY2hpbGRyZW46KDAseS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJjb2RlLWZyYW1lLWxpbmtcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwic3BhblwiLHtjbGFzc05hbWU6XCJjb2RlLWZyYW1lLWljb25cIixjaGlsZHJlbjooMCx5LmpzeCkoZVQse2xhbmc6d30pfSksKDAseS5qc3gpKFwic3BhblwiLHtcImRhdGEtdGV4dFwiOiEwLGNoaWxkcmVuOmVTKGIpfSksKDAseS5qc3gpKFwiYnV0dG9uXCIse1wiYXJpYS1sYWJlbFwiOlwiT3BlbiBpbiBlZGl0b3JcIixcImRhdGEtd2l0aC1vcGVuLWluLWVkaXRvci1saW5rLXNvdXJjZS1maWxlXCI6ITAsb25DbGljazp2LGNoaWxkcmVuOigwLHkuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwiY29kZS1mcmFtZS1pY29uXCIsXCJkYXRhLWljb25cIjpcInJpZ2h0XCIsY2hpbGRyZW46KDAseS5qc3gpKGV6LHt3aWR0aDoxNixoZWlnaHQ6MTZ9KX0pfSldfSl9KSwoMCx5LmpzeCkoXCJwcmVcIix7Y2xhc3NOYW1lOlwiY29kZS1mcmFtZS1wcmVcIixjaGlsZHJlbjooMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcImNvZGUtZnJhbWUtbGluZXNcIixjaGlsZHJlbjpbbS5tYXAoZnVuY3Rpb24oZSxuKXtyZXR1cm4oMCx5LmpzeCkoXCJzcGFuXCIse3N0eWxlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe2NvbG9yOmUuZmc/XCJ2YXIoLS1jb2xvci1cIi5jb25jYXQoZS5mZyxcIilcIik6dm9pZCAwfSxcImJvbGRcIj09PWUuZGVjb3JhdGlvbj97Zm9udFdlaWdodDo1MDB9OlwiaXRhbGljXCI9PT1lLmRlY29yYXRpb24/e2ZvbnRTdHlsZTpcIml0YWxpY1wifTp2b2lkIDApLGNoaWxkcmVuOigwLHkuanN4KShlYix7dGV4dDplLmNvbnRlbnR9KX0sXCJ0ZXJtaW5hbC1lbnRyeS1cIi5jb25jYXQobikpfSksZy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuKDAseS5qc3gpKG43LHtpc1NvdXJjZUZpbGU6ITEsZmlsZTplfSxlKX0pXX0pfSldfSl9LHR0PWZ1bmN0aW9uKGUpe3ZhciBuPWUuc3BsaXQoXCJcXG5cIik7cmV0dXJuIGVVKCkoblsxXXx8XCJcIikucmVwbGFjZSgvXkVycm9yOiAvLFwiXCIpfSx0cj1mdW5jdGlvbihlKXt2YXIgbix0LHI9ZS5tZXNzYWdlLG89ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz1mdW5jdGlvbihlLG4pe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHQscixvPXt9LGE9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl0PWFbcl0sbi5pbmRleE9mKHQpPj0wfHwob1t0XT1lW3RdKTtyZXR1cm4gb30oZSxuKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLCEobi5pbmRleE9mKHQpPj0wKSYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsdCkmJihvW3RdPWVbdF0pfXJldHVybiBvfShlLFtcIm1lc3NhZ2VcIl0pLGE9KDAseC51c2VDYWxsYmFjaykoZnVuY3Rpb24oKXt9LFtdKSxpPUVycm9yKHIpLGw9KDAseC51c2VNZW1vKShmdW5jdGlvbigpe3JldHVybiB0dChyKXx8XCJGYWlsZWQgdG8gY29tcGlsZVwifSxbcl0pO3JldHVybigwLHkuanN4KShuOSwobj1mdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHtlcnJvclR5cGU6XCJCdWlsZCBFcnJvclwiLGVycm9yTWVzc2FnZTpsLG9uQ2xvc2U6YSxlcnJvcjppfSxvKSx0PXQ9e2NoaWxkcmVuOigwLHkuanN4KSh0bix7Y29udGVudDpyfSl9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG4sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkpfSksbikpfSx0bz1mdW5jdGlvbihlKXt2YXIgbix0PWUuZnJhbWUscj1udWxsIT0obj10Lm9yaWdpbmFsU3RhY2tGcmFtZSk/bjp0LnNvdXJjZVN0YWNrRnJhbWUsbz0hIXQub3JpZ2luYWxDb2RlRnJhbWUsYT1lRShvP3tmaWxlOnIuZmlsZSxsaW5lTnVtYmVyOnIubGluZU51bWJlcixjb2x1bW46ci5jb2x1bW59OnZvaWQgMCksaT1lUyhyKTtyZXR1cm4gaT8oMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtY2FsbC1zdGFjay1mcmFtZVwiOiEwLFwiZGF0YS1uZXh0anMtY2FsbC1zdGFjay1mcmFtZS1uby1zb3VyY2VcIjohbyxcImRhdGEtbmV4dGpzLWNhbGwtc3RhY2stZnJhbWUtaWdub3JlZFwiOnQuaWdub3JlZCxjaGlsZHJlbjpbKDAseS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJjYWxsLXN0YWNrLWZyYW1lLW1ldGhvZC1uYW1lXCIsY2hpbGRyZW46WygwLHkuanN4KShlYix7dGV4dDpyLm1ldGhvZE5hbWV9KSxvJiYoMCx5LmpzeCkoXCJidXR0b25cIix7b25DbGljazphLGNsYXNzTmFtZTpcIm9wZW4taW4tZWRpdG9yLWJ1dHRvblwiLFwiYXJpYS1sYWJlbFwiOlwiT3BlbiBcIi5jb25jYXQoci5tZXRob2ROYW1lLFwiIGluIGVkaXRvclwiKSxjaGlsZHJlbjooMCx5LmpzeCkoZXose3dpZHRoOjE2LGhlaWdodDoxNn0pfSksdC5lcnJvcj8oMCx5LmpzeCkoXCJidXR0b25cIix7Y2xhc3NOYW1lOlwic291cmNlLW1hcHBpbmctZXJyb3ItYnV0dG9uXCIsb25DbGljazpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLmVycm9yKHQucmVhc29uKX0sdGl0bGU6XCJTb3VyY2VtYXBwaW5nIGZhaWxlZC4gQ2xpY2sgdG8gbG9nIGNhdXNlIG9mIGVycm9yLlwiLGNoaWxkcmVuOigwLHkuanN4KShlTCx7d2lkdGg6MTYsaGVpZ2h0OjE2fSl9KTpudWxsXX0pLCgwLHkuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwiY2FsbC1zdGFjay1mcmFtZS1maWxlLXNvdXJjZVwiLFwiZGF0YS1oYXMtc291cmNlXCI6byxjaGlsZHJlbjppfSldfSk6bnVsbH07ZnVuY3Rpb24gdGEoKXtyZXR1cm4oMCx5LmpzeCkoXCJzdmdcIix7d2lkdGg6XCIxNlwiLGhlaWdodDpcIjE2XCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLGNoaWxkcmVuOigwLHkuanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk04LjcwNzIyIDIuMzk2NDFDOC4zMTY3IDIuMDA1ODggNy42ODM1MyAyLjAwNTg4IDcuMjkzMDEgMi4zOTY0MUw0LjQ2OTc4IDUuMjE5NjNMMy45Mzk0NSA1Ljc0OTk2TDUuMDAwMTEgNi44MTA2Mkw1LjUzMDQ0IDYuMjgwMjlMOC4wMDAxMSAzLjgxMDYyTDEwLjQ2OTggNi4yODAyOUwxMS4wMDAxIDYuODEwNjJMMTIuMDYwOCA1Ljc0OTk2TDExLjUzMDQgNS4yMTk2M0w4LjcwNzIyIDIuMzk2NDFaTTUuNTMwNDQgOS43MTk2M0w1LjAwMDExIDkuMTg5M0wzLjkzOTQ1IDEwLjI1TDQuNDY5NzggMTAuNzgwM0w3LjI5MzAxIDEzLjYwMzVDNy42ODM1MyAxMy45OTQgOC4zMTY3IDEzLjk5NCA4LjcwNzIyIDEzLjYwMzVMMTEuNTMwNCAxMC43ODAzTDEyLjA2MDggMTAuMjVMMTEuMDAwMSA5LjE4OTNMMTAuNDY5OCA5LjcxOTYzTDguMDAwMTEgMTIuMTg5M0w1LjUzMDQ0IDkuNzE5NjNaXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSl9KX1mdW5jdGlvbiB0aSgpe3ZhciBlLG4sdD0oZT1bXCJcXG4gIFtkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWNvbnRhaW5lcl0ge1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIG1hcmdpbi10b3A6IDhweDtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWhlYWRlcl0ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIG1pbi1oZWlnaHQ6IHZhcigtLXNpemUtMjgpO1xcbiAgICBwYWRkaW5nOiA4cHggOHB4IDEycHggNHB4O1xcbiAgICB3aWR0aDogMTAwJTtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1jYWxsLXN0YWNrLXRpdGxlXSB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgZ2FwOiA4cHg7XFxuXFxuICAgIG1hcmdpbjogMDtcXG5cXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNik7XFxuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY2FsbC1zdGFjay1jb3VudF0ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG5cXG4gICAgd2lkdGg6IHZhcigtLXNpemUtMjApO1xcbiAgICBoZWlnaHQ6IHZhcigtLXNpemUtMjApO1xcbiAgICBnYXA6IDRweDtcXG5cXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTExKTtcXG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLXNpemUtMTYpO1xcblxcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLWZ1bGwpO1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LTMwMCk7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY2FsbC1zdGFjay1pZ25vcmVkLWxpc3QtdG9nZ2xlLWJ1dHRvbl0ge1xcbiAgICBhbGw6IHVuc2V0O1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBnYXA6IDZweDtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktOTAwKTtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE0KTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLXNpemUtMjApO1xcbiAgICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICAgIHBhZGRpbmc6IDRweCA2cHg7XFxuICAgIG1hcmdpbi1yaWdodDogLTZweDtcXG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAxNTBtcyBlYXNlO1xcblxcbiAgICAmOmhvdmVyIHtcXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LTEwMCk7XFxuICAgIH1cXG5cXG4gICAgJjpmb2N1cyB7XFxuICAgICAgb3V0bGluZTogdmFyKC0tZm9jdXMtcmluZyk7XFxuICAgIH1cXG5cXG4gICAgc3ZnIHtcXG4gICAgICB3aWR0aDogdmFyKC0tc2l6ZS0xNik7XFxuICAgICAgaGVpZ2h0OiB2YXIoLS1zaXplLTE2KTtcXG4gICAgfVxcbiAgfVxcblwiXSxufHwobj1lLnNsaWNlKDApKSxPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUse3Jhdzp7dmFsdWU6T2JqZWN0LmZyZWV6ZShuKX19KSkpO3JldHVybiB0aT1mdW5jdGlvbigpe3JldHVybiB0fSx0fWZ1bmN0aW9uIHRsKGUpe3ZhciBuPWUuZnJhbWVzLHQ9ZS5pc0lnbm9yZUxpc3RPcGVuLHI9ZS5pZ25vcmVkRnJhbWVzVGFsbHksbz1lLm9uVG9nZ2xlSWdub3JlTGlzdDtyZXR1cm4oMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtY2FsbC1zdGFjay1jb250YWluZXJcIjohMCxjaGlsZHJlbjpbKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWNhbGwtc3RhY2staGVhZGVyXCI6ITAsY2hpbGRyZW46WygwLHkuanN4cykoXCJwXCIse1wiZGF0YS1uZXh0anMtY2FsbC1zdGFjay10aXRsZVwiOiEwLGNoaWxkcmVuOltcIkNhbGwgU3RhY2sgXCIsKDAseS5qc3gpKFwic3BhblwiLHtcImRhdGEtbmV4dGpzLWNhbGwtc3RhY2stY291bnRcIjohMCxjaGlsZHJlbjpuLmxlbmd0aH0pXX0pLHI+MCYmKDAseS5qc3hzKShcImJ1dHRvblwiLHtcImRhdGEtbmV4dGpzLWNhbGwtc3RhY2staWdub3JlZC1saXN0LXRvZ2dsZS1idXR0b25cIjp0LG9uQ2xpY2s6byxjaGlsZHJlbjpbXCJcIi5jb25jYXQodD9cIkhpZGVcIjpcIlNob3dcIixcIiBcIikuY29uY2F0KHIsXCIgaWdub3JlLWxpc3RlZCBmcmFtZShzKVwiKSwoMCx5LmpzeCkodGEse30pXX0pXX0pLG4ubWFwKGZ1bmN0aW9uKGUsbil7cmV0dXJuIWUuaWdub3JlZHx8dD8oMCx5LmpzeCkodG8se2ZyYW1lOmV9LG4pOm51bGx9KV19KX12YXIgdHM9ZWkodGkoKSk7ZnVuY3Rpb24gdGMoZSxuKXsobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxyPUFycmF5KG4pO3Q8bjt0Kyspclt0XT1lW3RdO3JldHVybiByfWZ1bmN0aW9uIHR1KGUpe3ZhciBuLHQscj1lLmZyYW1lcyxvPWUuZGlhbG9nUmVzaXplclJlZixhPSgwLHgudXNlUmVmKShOYU4pLGk9KG49KDAseC51c2VTdGF0ZSkoITEpLHQ9MixmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShuKXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShuLDIpfHxmdW5jdGlvbihlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiB0YyhlLG4pO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20odCk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiB0YyhlLG4pfX0obix0KXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKSksbD1pWzBdLHM9aVsxXSxjPSgwLHgudXNlTWVtbykoZnVuY3Rpb24oKXtyZXR1cm4gci5yZWR1Y2UoZnVuY3Rpb24oZSxuKXtyZXR1cm4gZSsgKyEhbi5pZ25vcmVkfSwwKX0sW3JdKTtyZXR1cm4oMCx5LmpzeCkodGwse2ZyYW1lczpyLGlzSWdub3JlTGlzdE9wZW46bCxvblRvZ2dsZUlnbm9yZUxpc3Q6ZnVuY3Rpb24oKXt2YXIgZT1udWxsPT1vP3ZvaWQgMDpvLmN1cnJlbnQ7aWYoZSl7dmFyIG49KG51bGw9PWU/dm9pZCAwOmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLmhlaWdodDthLmN1cnJlbnR8fChhLmN1cnJlbnQ9biksbD8oZS5zdHlsZS5oZWlnaHQ9XCJcIi5jb25jYXQoYS5jdXJyZW50LFwicHhcIiksZS5hZGRFdmVudExpc3RlbmVyKFwidHJhbnNpdGlvbmVuZFwiLGZ1bmN0aW9uIG4oKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsbikscyghMSl9KSk6cyghMCl9fSxpZ25vcmVkRnJhbWVzVGFsbHk6Y30pfWZ1bmN0aW9uIHRkKCl7dmFyIGUsbix0PShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30pLmNvbGxhcHNlZDtyZXR1cm4oMCx5LmpzeCkoXCJzdmdcIiwoZT1mdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHtcImRhdGEtbmV4dGpzLWNhbGwtc3RhY2stY2hldnJvbi1pY29uXCI6ITAsXCJkYXRhLWNvbGxhcHNlZFwiOnQsd2lkdGg6XCIxNlwiLGhlaWdodDpcIjE2XCIsZmlsbDpcIm5vbmVcIn0sXCJib29sZWFuXCI9PXR5cGVvZiB0P3tzdHlsZTp7dHJhbnNmb3JtOnQ/dm9pZCAwOlwicm90YXRlKDkwZGVnKVwifX06e30pLG49bj17Y2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtzdHlsZTp7ZmlsbDpcInZhcigtLWNvbG9yLWZvbnQpXCJ9LGZpbGxSdWxlOlwiZXZlbm9kZFwiLGQ6XCJtNi43NSAzLjk0LjUzLjUzIDIuODI0IDIuODIzYTEgMSAwIDAgMSAwIDEuNDE0TDcuMjggMTEuNTNsLS41My41M0w1LjY5IDExbC41My0uNTNMOC42OSA4IDYuMjIgNS41MyA1LjY5IDVsMS4wNi0xLjA2WlwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSl9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QobikpLmZvckVhY2goZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSksZSkpfWZ1bmN0aW9uIHRmKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiB0cChlLG4pe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSwhbnx8YS5sZW5ndGghPT1uKTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0oZSxuKXx8ZnVuY3Rpb24oZSxuKXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gdGYoZSxuKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKHQpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gdGYoZSxuKX19KGUsbil8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gdGgoZSl7dmFyIG49ZS5yZWFjdE91dHB1dENvbXBvbmVudERpZmYsdD10cCgoMCx4LnVzZVN0YXRlKSghMCksMikscj10WzBdLG89dFsxXSxhPSgwLHgudXNlTWVtbykoZnVuY3Rpb24oKXt2YXIgZT1bXTtyZXR1cm4gbi5zcGxpdChcIlxcblwiKS5mb3JFYWNoKGZ1bmN0aW9uKG4sdCl7dmFyIHIsbyxhPVwiK1wiPT09blswXXx8XCItXCI9PT1uWzBdLGk9XCI+XCI9PT1uWzBdLGw9YXx8aSxzPWw/blswXTpcIlwiLGM9bD9uLmluZGV4T2Yocyk6LTEsdT10cChsP1tuLnNsaWNlKDAsYyksbi5zbGljZShjKzEpXTpbbixcIlwiXSwyKSxkPXVbMF0sZj11WzFdO2E/ZS5wdXNoKCgwLHkuanN4KShcInNwYW5cIix7XCJkYXRhLW5leHRqcy1jb250YWluZXItZXJyb3JzLXBzZXVkby1odG1sLWxpbmVcIjohMCxcImRhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWwtLWRpZmZcIjpcIitcIj09PXM/XCJhZGRcIjpcInJlbW92ZVwiLGNoaWxkcmVuOigwLHkuanN4cykoXCJzcGFuXCIse2NoaWxkcmVuOltkLCgwLHkuanN4KShcInNwYW5cIix7XCJkYXRhLW5leHRqcy1jb250YWluZXItZXJyb3JzLXBzZXVkby1odG1sLWxpbmUtc2lnblwiOiEwLGNoaWxkcmVuOnN9KSxmLFwiXFxuXCJdfSl9LFwiY29tcC1kaWZmXCIrdCkpOmUucHVzaCgoMCx5LmpzeHMpKFwic3BhblwiLChyPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe1wiZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC1saW5lXCI6ITB9LGk/e1wiZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC0tZGlmZlwiOlwiZXJyb3JcIn06dm9pZCAwKSxvPW89e2NoaWxkcmVuOltkLCgwLHkuanN4KShcInNwYW5cIix7XCJkYXRhLW5leHRqcy1jb250YWluZXItZXJyb3JzLXBzZXVkby1odG1sLWxpbmUtc2lnblwiOiEwLGNoaWxkcmVuOnN9KSxmLFwiXFxuXCJdfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhyLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG8pKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KG8pKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvLGUpKX0pLHIpLFwiY29tcC1kaWZmXCIrdCkpfSksZX0sW25dKTtyZXR1cm4oMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbFwiOiEwLFwiZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC1jb2xsYXBzZVwiOnIsY2hpbGRyZW46WygwLHkuanN4KShcImJ1dHRvblwiLHtcImFyaWEtZXhwYW5kZWRcIjohcixcImFyaWEtbGFiZWxcIjpcImNvbXBsZXRlIENvbXBvbmVudCBTdGFja1wiLFwiZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC1jb2xsYXBzZS1idXR0b25cIjohMCxvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIG8oIXIpfSxjaGlsZHJlbjooMCx5LmpzeCkodGQse2NvbGxhcHNlZDpyfSl9KSwoMCx5LmpzeCkoXCJwcmVcIix7Y2xhc3NOYW1lOlwibmV4dGpzX19jb250YWluZXJfZXJyb3JzX19jb21wb25lbnQtc3RhY2tcIixjaGlsZHJlbjooMCx5LmpzeCkoXCJjb2RlXCIse2NoaWxkcmVuOmF9KX0pXX0pfXZhciB0Zz1TeW1ib2wuZm9yKFwiTmV4dGpzRXJyb3JcIik7ZnVuY3Rpb24gdG0oZSl7cmV0dXJuIGVbdGddfHxudWxsfWZ1bmN0aW9uIHR2KGUsbix0LHIsbyxhLGkpe3RyeXt2YXIgbD1lW2FdKGkpLHM9bC52YWx1ZX1jYXRjaChlKXt0KGUpO3JldHVybn1sLmRvbmU/bihzKTpQcm9taXNlLnJlc29sdmUocykudGhlbihyLG8pfWZ1bmN0aW9uIHRiKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXRoaXMsdD1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbyl7dmFyIGE9ZS5hcHBseShuLHQpO2Z1bmN0aW9uIGkoZSl7dHYoYSxyLG8saSxsLFwibmV4dFwiLGUpfWZ1bmN0aW9uIGwoZSl7dHYoYSxyLG8saSxsLFwidGhyb3dcIixlKX1pKHZvaWQgMCl9KX19ZnVuY3Rpb24gdHkoZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfWZ1bmN0aW9uIHR4KGUsbil7cmV0dXJuIG49bnVsbCE9bj9uOnt9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QobikpLmZvckVhY2goZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSksZX1mdW5jdGlvbiB0dyhlLG4pe3ZhciB0LHIsbyxhPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJm9bMF0pdGhyb3cgb1sxXTtyZXR1cm4gb1sxXX0sdHJ5czpbXSxvcHM6W119LGk9T2JqZWN0LmNyZWF0ZSgoXCJmdW5jdGlvblwiPT10eXBlb2YgSXRlcmF0b3I/SXRlcmF0b3I6T2JqZWN0KS5wcm90b3R5cGUpO3JldHVybiBpLm5leHQ9bCgwKSxpLnRocm93PWwoMSksaS5yZXR1cm49bCgyKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJihpW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGk7ZnVuY3Rpb24gbChsKXtyZXR1cm4gZnVuY3Rpb24ocyl7dmFyIGM9W2wsc107aWYodCl0aHJvdyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO2Zvcig7aSYmKGk9MCxjWzBdJiYoYT0wKSksYTspdHJ5e2lmKHQ9MSxyJiYobz0yJmNbMF0/ci5yZXR1cm46Y1swXT9yLnRocm93fHwoKG89ci5yZXR1cm4pJiZvLmNhbGwociksMCk6ci5uZXh0KSYmIShvPW8uY2FsbChyLGNbMV0pKS5kb25lKXJldHVybiBvO3N3aXRjaChyPTAsbyYmKGM9WzImY1swXSxvLnZhbHVlXSksY1swXSl7Y2FzZSAwOmNhc2UgMTpvPWM7YnJlYWs7Y2FzZSA0OnJldHVybiBhLmxhYmVsKysse3ZhbHVlOmNbMV0sZG9uZTohMX07Y2FzZSA1OmEubGFiZWwrKyxyPWNbMV0sYz1bMF07Y29udGludWU7Y2FzZSA3OmM9YS5vcHMucG9wKCksYS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoIShvPShvPWEudHJ5cykubGVuZ3RoPjAmJm9bby5sZW5ndGgtMV0pJiYoNj09PWNbMF18fDI9PT1jWzBdKSl7YT0wO2NvbnRpbnVlfWlmKDM9PT1jWzBdJiYoIW98fGNbMV0+b1swXSYmY1sxXTxvWzNdKSl7YS5sYWJlbD1jWzFdO2JyZWFrfWlmKDY9PT1jWzBdJiZhLmxhYmVsPG9bMV0pe2EubGFiZWw9b1sxXSxvPWM7YnJlYWt9aWYobyYmYS5sYWJlbDxvWzJdKXthLmxhYmVsPW9bMl0sYS5vcHMucHVzaChjKTticmVha31vWzJdJiZhLm9wcy5wb3AoKSxhLnRyeXMucG9wKCk7Y29udGludWV9Yz1uLmNhbGwoZSxhKX1jYXRjaChlKXtjPVs2LGVdLHI9MH1maW5hbGx5e3Q9bz0wfWlmKDUmY1swXSl0aHJvdyBjWzFdO3JldHVybnt2YWx1ZTpjWzBdP2NbMV06dm9pZCAwLGRvbmU6ITB9fX19dmFyIHRqPWZ1bmN0aW9uKGUpe2lmKFwidXNlXCJpbiB4KXt2YXIgbj1lLmZyYW1lcztpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBuKXRocm93IEVycm9yKFwiSW52YXJpYW50OiBmcmFtZXMgbXVzdCBiZSBhIGZ1bmN0aW9uIHdoZW4gdGhlIFJlYWN0IHZlcnNpb24gaGFzIFJlYWN0LnVzZS4gVGhpcyBpcyBhIGJ1ZyBpbiBOZXh0LmpzLlwiKTtyZXR1cm4geC51c2UobigpKX1pZighQXJyYXkuaXNBcnJheShlLmZyYW1lcykpdGhyb3cgRXJyb3IoXCJJbnZhcmlhbnQ6IGZyYW1lcyBtdXN0IGJlIGFuIGFycmF5IHdoZW4gdGhlIFJlYWN0IHZlcnNpb24gZG9lcyBub3QgaGF2ZSBSZWFjdC51c2UuIFRoaXMgaXMgYSBidWcgaW4gTmV4dC5qcy5cIik7cmV0dXJuIGUuZnJhbWVzfTtmdW5jdGlvbiB0ayhlKXt2YXIgbj1lLmVycm9yLHQ9ZS5kaWFsb2dSZXNpemVyUmVmLHI9dGoobiksbz0oMCx4LnVzZU1lbW8pKGZ1bmN0aW9uKCl7dmFyIGUsbj1yLmZpbmRJbmRleChmdW5jdGlvbihlKXtyZXR1cm4hZS5pZ25vcmVkJiYhIWUub3JpZ2luYWxDb2RlRnJhbWUmJiEhZS5vcmlnaW5hbFN0YWNrRnJhbWV9KTtyZXR1cm4gbnVsbCE9KGU9cltuXSk/ZTpudWxsfSxbcl0pO3JldHVybigwLHkuanN4cykoeS5GcmFnbWVudCx7Y2hpbGRyZW46W28mJigwLHkuanN4KShlcSx7c3RhY2tGcmFtZTpvLm9yaWdpbmFsU3RhY2tGcmFtZSxjb2RlRnJhbWU6by5vcmlnaW5hbENvZGVGcmFtZX0pLHIubGVuZ3RoPjAmJigwLHkuanN4KSh0dSx7ZGlhbG9nUmVzaXplclJlZjp0LGZyYW1lczpyfSldfSl9dmFyIHRBPVwiXFxuICBcIi5jb25jYXQoXCJcXG4gIFtkYXRhLW5leHRqcy1jb250YWluZXItZXJyb3JzLXBzZXVkby1odG1sXSB7XFxuICAgIHBhZGRpbmc6IDhweCAwO1xcbiAgICBtYXJnaW46IDhweCAwO1xcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMjAwKTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXN5bnRheC1jb25zdGFudCk7XFxuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrLW1vbm9zcGFjZSk7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xMik7XFxuICAgIGxpbmUtaGVpZ2h0OiAxLjMzZW07IC8qIDE2cHggaW4gMTJweCBmb250IHNpemUgKi9cXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1tZC0yKTtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy1jb250YWluZXItZXJyb3JzLXBzZXVkby1odG1sLWxpbmVdIHtcXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgcGFkZGluZy1sZWZ0OiA0MHB4O1xcbiAgICBsaW5lLWhlaWdodDogY2FsYyg1IC8gMyk7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC0tZGlmZj0nZXJyb3InXSB7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWFtYmVyLTEwMCk7XFxuICAgIGJveC1zaGFkb3c6IDJweCAwIDAgMCB2YXIoLS1jb2xvci1hbWJlci05MDApIGluc2V0O1xcbiAgICBmb250LXdlaWdodDogYm9sZDtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy1jb250YWluZXItZXJyb3JzLXBzZXVkby1odG1sLWNvbGxhcHNlLWJ1dHRvbl0ge1xcbiAgICBhbGw6IHVuc2V0O1xcbiAgICBtYXJnaW4tbGVmdDogMTJweDtcXG4gICAgJjpmb2N1cyB7XFxuICAgICAgb3V0bGluZTogbm9uZTtcXG4gICAgfVxcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWwtLWRpZmY9J2FkZCddIHtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JlZW4tMzAwKTtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy1jb250YWluZXItZXJyb3JzLXBzZXVkby1odG1sLWxpbmUtc2lnbl0ge1xcbiAgICBtYXJnaW4tbGVmdDogY2FsYygyNHB4ICogLTEpO1xcbiAgICBtYXJnaW4tcmlnaHQ6IDI0cHg7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC0tZGlmZj0nYWRkJ11cXG4gICAgW2RhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWwtbGluZS1zaWduXSB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmVlbi05MDApO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWwtLWRpZmY9J3JlbW92ZSddIHtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItcmVkLTMwMCk7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC0tZGlmZj0ncmVtb3ZlJ11cXG4gICAgW2RhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWwtbGluZS1zaWduXSB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1yZWQtOTAwKTtcXG4gICAgbWFyZ2luLWxlZnQ6IGNhbGMoMjRweCAqIC0xKTtcXG4gICAgbWFyZ2luLXJpZ2h0OiAyNHB4O1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWwtLWRpZmY9J2Vycm9yJ11cXG4gICAgW2RhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWwtbGluZS1zaWduXSB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hbWJlci05MDApO1xcbiAgfVxcbiAgXFxuICBbZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC0taGludF0ge1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICAgIGZvbnQtc2l6ZTogMDtcXG4gICAgaGVpZ2h0OiAwO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWwtLXRhZy1hZGphY2VudD0nZmFsc2UnXSB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnRzLTEpO1xcbiAgfVxcbiAgLm5leHRqc19fY29udGFpbmVyX2Vycm9yc19fY29tcG9uZW50LXN0YWNrIHtcXG4gICAgbWFyZ2luOiAwO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWwtY29sbGFwc2U9J3RydWUnXVxcbiAgICAubmV4dGpzX19jb250YWluZXJfZXJyb3JzX19jb21wb25lbnQtc3RhY2tcXG4gICAgY29kZSB7XFxuICAgIG1heC1oZWlnaHQ6IDEyMHB4O1xcbiAgICBtYXNrLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHJnYmEoMCwwLDAsMCkgMCUsYmxhY2sgMTAlKTtcXG4gICAgcGFkZGluZy1ib3R0b206IDQwcHg7XFxuICB9XFxuICAubmV4dGpzX19jb250YWluZXJfZXJyb3JzX19jb21wb25lbnQtc3RhY2sgY29kZSB7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xcbiAgICBzY3JvbGwtc25hcC10eXBlOiB5IG1hbmRhdG9yeTtcXG4gICAgb3ZlcmZsb3cteTogaGlkZGVuO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWwtLWRpZmZdIHtcXG4gICAgc2Nyb2xsLXNuYXAtYWxpZ246IGNlbnRlcjtcXG4gIH1cXG4gIC5lcnJvci1vdmVybGF5LWh5ZHJhdGlvbi1lcnJvci1kaWZmLXBsdXMtaWNvbiB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmVlbi05MDApO1xcbiAgfVxcbiAgLmVycm9yLW92ZXJsYXktaHlkcmF0aW9uLWVycm9yLWRpZmYtbWludXMtaWNvbiB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1yZWQtOTAwKTtcXG4gIH1cXG5cIixcIlxcblwiKTtmdW5jdGlvbiB0TyhlKXtyZXR1cm4gZSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbD9cInN5bWJvbFwiOnR5cGVvZiBlfWZ1bmN0aW9uIHRDKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiB0UyhlKXt2YXIgbix0LHIsbyxhLGk9ZS5ydW50aW1lRXJyb3JzLGw9ZS5nZXRTcXVhc2hlZEh5ZHJhdGlvbkVycm9yRGV0YWlscyxzPShyPSgwLHgudXNlU3RhdGUpKDApLG89MixmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShyKXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShyLDIpfHxmdW5jdGlvbihlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiB0QyhlLG4pO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20odCk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiB0QyhlLG4pfX0ocixvKXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKSksYz1zWzBdLHU9c1sxXSxkPSgwLHgudXNlTWVtbykoZnVuY3Rpb24oKXtyZXR1cm4gMD09PWkubGVuZ3RofSxbaS5sZW5ndGhdKSxmPSgwLHgudXNlTWVtbykoZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gbnVsbCE9KGU9aVtjXSk/ZTpudWxsfSxbYyxpXSkscD0obj1udWxsPT1mP3ZvaWQgMDpmLmVycm9yLHQ9bCwoMCx4LnVzZU1lbW8pKGZ1bmN0aW9uKCl7aWYodm9pZCAwPT09bilyZXR1cm4gdEw7dmFyIGUscixvLGE9dChuKTtpZihudWxsIT09YSlyZXR1cm57aHlkcmF0aW9uV2FybmluZzpudWxsIT0ocj1hLndhcm5pbmcpP3I6bnVsbCxub3RlczpudWxsLHJlYWN0T3V0cHV0Q29tcG9uZW50RGlmZjpudWxsIT0obz1hLnJlYWN0T3V0cHV0Q29tcG9uZW50RGlmZik/bzpudWxsfTtpZighKG5nKChlPW4pLm1lc3NhZ2UpfHwvSHlkcmF0aW9uIGZhaWxlZCBiZWNhdXNlIHRoZSBzZXJ2ZXIgcmVuZGVyZWQgKHRleHR8SFRNTCkgZGlkbid0IG1hdGNoIHRoZSBjbGllbnRcXC4vLnRlc3QoZS5tZXNzYWdlKXx8L0EgdHJlZSBoeWRyYXRlZCBidXQgc29tZSBhdHRyaWJ1dGVzIG9mIHRoZSBzZXJ2ZXIgcmVuZGVyZWQgSFRNTCBkaWRuJ3QgbWF0Y2ggdGhlIGNsaWVudCBwcm9wZXJ0aWVzLi8udGVzdChlLm1lc3NhZ2UpKSlyZXR1cm4gdEw7dmFyIGk9ZnVuY3Rpb24oZSl7dmFyIG49ZS5tZXNzYWdlO2lmKG5nKG4pKXt2YXIgdD1uYyhuLnNwbGl0KFwiXFxuXFxuXCIpLDIpLHI9dFswXSxvPXRbMV0sYT0odm9pZCAwPT09bz9cIlwiOm8pLnRyaW0oKTtyZXR1cm57bWVzc2FnZTpcIlwiPT09YT9uLnRyaW0oKTpyLnRyaW0oKSxkaWZmOmEsbm90ZXM6bnVsbH19dmFyIGk9bmMobi5zcGxpdChcIlwiLmNvbmNhdChuZikpLDIpLGw9aVswXSxzPWlbMV0sYz1sLnRyaW0oKTtpZih2b2lkIDAhPT1zJiZzLmxlbmd0aD4xKXt2YXIgdT1bXTtzLnNwbGl0KFwiXFxuXCIpLmZvckVhY2goZnVuY3Rpb24oZSl7XCJcIiE9PWUudHJpbSgpJiYoZS50cmltKCkuc3RhcnRzV2l0aChcImF0IFwiKXx8dS5wdXNoKGUpKX0pO3ZhciBkPW51KGMuc3BsaXQoXCJcXG5cXG5cIikpLGY9ZFswXSxwPWQuc2xpY2UoMSk7cmV0dXJue21lc3NhZ2U6ZixkaWZmOnUuam9pbihcIlxcblwiKSxub3RlczpwLmpvaW4oXCJcXG5cXG5cIil8fG51bGx9fXZhciBoPW51KGMuc3BsaXQoXCJcXG5cXG5cIikpO3JldHVybnttZXNzYWdlOmhbMF0sZGlmZjpudWxsLG5vdGVzOmguc2xpY2UoMSkuam9pbihcIlxcblxcblwiKX19KG4pLGw9aS5tZXNzYWdlLHM9aS5ub3RlcyxjPWkuZGlmZjtyZXR1cm4gbnVsbD09PWw/dEw6e2h5ZHJhdGlvbldhcm5pbmc6bCxub3RlczpzLHJlYWN0T3V0cHV0Q29tcG9uZW50RGlmZjpjfX0sW24sdF0pKTtpZihkfHwhZilyZXR1cm57aXNMb2FkaW5nOmQsYWN0aXZlSWR4OmMsc2V0QWN0aXZlSW5kZXg6dSxhY3RpdmVFcnJvcjpudWxsLGVycm9yRGV0YWlsczpudWxsLGVycm9yQ29kZTpudWxsLGVycm9yVHlwZTpudWxsLG5vdGVzOm51bGwsaHlkcmF0aW9uV2FybmluZzpudWxsfTt2YXIgaD1mLmVycm9yLGc9KHZvaWQgMD09PShhPWgpP1widW5kZWZpbmVkXCI6dE8oYSkpPT09XCJvYmplY3RcIiYmbnVsbCE9PWEmJlwiX19ORVhUX0VSUk9SX0NPREVcImluIGEmJlwic3RyaW5nXCI9PXR5cGVvZiBhLl9fTkVYVF9FUlJPUl9DT0RFP2EuX19ORVhUX0VSUk9SX0NPREU6KHZvaWQgMD09PWE/XCJ1bmRlZmluZWRcIjp0TyhhKSk9PT1cIm9iamVjdFwiJiZudWxsIT09YSYmXCJkaWdlc3RcImluIGEmJlwic3RyaW5nXCI9PXR5cGVvZiBhLmRpZ2VzdD9hLmRpZ2VzdC5zcGxpdChcIkBcIikuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5zdGFydHNXaXRoKFwiRVwiKX0pOnZvaWQgMCxtPXR6KGgsZi50eXBlKSx2PXAubm90ZXMsYj1wLmh5ZHJhdGlvbldhcm5pbmc7cmV0dXJue2lzTG9hZGluZzpkLGFjdGl2ZUlkeDpjLHNldEFjdGl2ZUluZGV4OnUsYWN0aXZlRXJyb3I6ZixlcnJvckRldGFpbHM6cCxlcnJvckNvZGU6ZyxlcnJvclR5cGU6bSxub3Rlczp2LGh5ZHJhdGlvbldhcm5pbmc6Yn19ZnVuY3Rpb24gdEUoZSl7cmV0dXJuIGUuc3RhcnRzV2l0aChcImh0dHBzOi8vbmV4dGpzLm9yZ1wiKX1mdW5jdGlvbiB0XyhlKXt2YXIgbj1lLm1lc3NhZ2U7cmV0dXJuKDAseS5qc3gpKGViLHt0ZXh0Om4sbWF0Y2hlcjp0RX0pfWZ1bmN0aW9uIHRQKGUpe3ZhciBuPWUuZXJyb3IsdD1cImVudmlyb25tZW50TmFtZVwiaW4gbj9uLmVudmlyb25tZW50TmFtZTpcIlwiLHI9dD9cIlsgXCIuY29uY2F0KHQsXCIgXSBcIik6XCJcIixvPW4ubWVzc2FnZTtyZXR1cm4gby5zdGFydHNXaXRoKHIpJiYobz1vLnNsaWNlKHIubGVuZ3RoKSksKDAseS5qc3gpKHkuRnJhZ21lbnQse2NoaWxkcmVuOigwLHkuanN4KShlYix7dGV4dDpvLG1hdGNoZXI6dEV9KX0pfWZ1bmN0aW9uIHR6KGUsbil7cmV0dXJuXCJyZWNvdmVyYWJsZVwiPT09bj9cIlJlY292ZXJhYmxlIFwiLmNvbmNhdChlLm5hbWUpOlwiY29uc29sZVwiPT09bj9cIkNvbnNvbGUgXCIuY29uY2F0KGUubmFtZSk6XCJSdW50aW1lIFwiLmNvbmNhdChlLm5hbWUpfXZhciB0TD17aHlkcmF0aW9uV2FybmluZzpudWxsLG5vdGVzOm51bGwscmVhY3RPdXRwdXRDb21wb25lbnREaWZmOm51bGx9O2Z1bmN0aW9uIHRUKGUpe3ZhciBuLHQscj1lLmdldFNxdWFzaGVkSHlkcmF0aW9uRXJyb3JEZXRhaWxzLG89ZS5ydW50aW1lRXJyb3JzLGE9ZS5kZWJ1Z0luZm8saT1lLm9uQ2xvc2UsbD1mdW5jdGlvbihlLG4pe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHQscixvPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSxuLmluZGV4T2YodCk+PTB8fChvW3RdPWVbdF0pO3JldHVybiBvfShlLG4pO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl0PWFbcl0sIShuLmluZGV4T2YodCk+PTApJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSx0KSYmKG9bdF09ZVt0XSl9cmV0dXJuIG99KGUsW1wiZ2V0U3F1YXNoZWRIeWRyYXRpb25FcnJvckRldGFpbHNcIixcInJ1bnRpbWVFcnJvcnNcIixcImRlYnVnSW5mb1wiLFwib25DbG9zZVwiXSkscz0oMCx4LnVzZVJlZikobnVsbCksYz10Uyh7cnVudGltZUVycm9yczpvLGdldFNxdWFzaGVkSHlkcmF0aW9uRXJyb3JEZXRhaWxzOnJ9KSx1PWMuaXNMb2FkaW5nLGQ9Yy5lcnJvckNvZGUsZj1jLmVycm9yVHlwZSxwPWMubm90ZXMsaD1jLmh5ZHJhdGlvbldhcm5pbmcsZz1jLmFjdGl2ZUlkeCxtPWMuZXJyb3JEZXRhaWxzLHY9Yy5hY3RpdmVFcnJvcixiPWMuc2V0QWN0aXZlSW5kZXg7aWYodSlyZXR1cm4oMCx5LmpzeCkoblose2NoaWxkcmVuOigwLHkuanN4KShuMix7fSl9KTtpZighdilyZXR1cm4gbnVsbDt2YXIgdz12LmVycm9yLGo9W1wic2VydmVyXCIsXCJlZGdlLXNlcnZlclwiXS5pbmNsdWRlcyh0bSh3KXx8XCJcIik7cmV0dXJuKDAseS5qc3hzKShuOSwobj1mdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHtlcnJvckNvZGU6ZCxlcnJvclR5cGU6ZixlcnJvck1lc3NhZ2U6aD8oMCx5LmpzeCkodF8se21lc3NhZ2U6aH0pOigwLHkuanN4KSh0UCx7ZXJyb3I6d30pLG9uQ2xvc2U6aj92b2lkIDA6aSxkZWJ1Z0luZm86YSxlcnJvcjp3LHJ1bnRpbWVFcnJvcnM6byxhY3RpdmVJZHg6ZyxzZXRBY3RpdmVJbmRleDpiLGRpYWxvZ1Jlc2l6ZXJSZWY6c30sbCksdD10PXtjaGlsZHJlbjpbKDAseS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJlcnJvci1vdmVybGF5LW5vdGVzLWNvbnRhaW5lclwiLGNoaWxkcmVuOltwPygwLHkuanN4KSh5LkZyYWdtZW50LHtjaGlsZHJlbjooMCx5LmpzeCkoXCJwXCIse2lkOlwibmV4dGpzX19jb250YWluZXJfZXJyb3JzX19ub3Rlc1wiLGNsYXNzTmFtZTpcIm5leHRqc19fY29udGFpbmVyX2Vycm9yc19fbm90ZXNcIixjaGlsZHJlbjpwfSl9KTpudWxsLGg/KDAseS5qc3gpKFwicFwiLHtpZDpcIm5leHRqc19fY29udGFpbmVyX2Vycm9yc19fbGlua1wiLGNsYXNzTmFtZTpcIm5leHRqc19fY29udGFpbmVyX2Vycm9yc19fbGlua1wiLGNoaWxkcmVuOigwLHkuanN4KShlYix7dGV4dDpcIlNlZSBtb3JlIGluZm8gaGVyZTogXCIuY29uY2F0KG5wKX0pfSk6bnVsbF19KSxtLnJlYWN0T3V0cHV0Q29tcG9uZW50RGlmZj8oMCx5LmpzeCkodGgse3JlYWN0T3V0cHV0Q29tcG9uZW50RGlmZjptLnJlYWN0T3V0cHV0Q29tcG9uZW50RGlmZnx8XCJcIn0pOm51bGwsKDAseS5qc3gpKHguU3VzcGVuc2Use2ZhbGxiYWNrOigwLHkuanN4KShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWVycm9yLXN1c3BlbmRlZFwiOiEwfSksY2hpbGRyZW46KDAseS5qc3gpKHRrLHtlcnJvcjp2LGRpYWxvZ1Jlc2l6ZXJSZWY6c30sdi5pZC50b1N0cmluZygpKX0pXX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKSl9KSxuKSl9dmFyIHRSPXguZm9yd2FyZFJlZihmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1lLm9uQ2xpY2ssYT1lLmNoaWxkcmVuLGk9ZS5jbGFzc05hbWUsbD1mdW5jdGlvbihlLG4pe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHQscixvPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSxuLmluZGV4T2YodCk+PTB8fChvW3RdPWVbdF0pO3JldHVybiBvfShlLG4pO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl0PWFbcl0sIShuLmluZGV4T2YodCk+PTApJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSx0KSYmKG9bdF09ZVt0XSl9cmV0dXJuIG99KGUsW1wib25DbGlja1wiLFwiY2hpbGRyZW5cIixcImNsYXNzTmFtZVwiXSk7cmV0dXJuKDAseS5qc3gpKFwiZGl2XCIsKHQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7fSxsKSxyPXI9e3JlZjpuLG9uQ2xpY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudGFyZ2V0LmNsb3Nlc3QoXCJhXCIpfHxlLnByZXZlbnREZWZhdWx0KCksbnVsbD09bz92b2lkIDA6bygpfSxjbGFzc05hbWU6KDAsZUouY3gpKFwibmV4dGpzLXRvYXN0XCIsaSksY2hpbGRyZW46YX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhyKSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdChyKSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKSl9KSx0KSl9KTtmdW5jdGlvbiB0TihlLG4peyhudWxsPT1ufHxuPmUubGVuZ3RoKSYmKG49ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLHI9QXJyYXkobik7dDxuO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9ZnVuY3Rpb24gdEQoZSl7dmFyIG4sdCxyPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTo3NTAsbz0obj0oMCx4LnVzZVN0YXRlKSghMSksdD0yLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KG4pfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KG4sMil8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIHROKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIHROKGUsbil9fShuLHQpfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpKSxhPW9bMF0saT1vWzFdLGw9KDAseC51c2VSZWYpKG51bGwpLHM9KDAseC51c2VSZWYpKG51bGwpO3JldHVybigwLHgudXNlRWZmZWN0KShmdW5jdGlvbigpe2lmKHMuY3VycmVudCYmKGNsZWFyVGltZW91dChzLmN1cnJlbnQpLHMuY3VycmVudD1udWxsKSxlKW51bGw9PT1sLmN1cnJlbnQmJihsLmN1cnJlbnQ9RGF0ZS5ub3coKSksaSghMCk7ZWxzZSBpZihudWxsPT09bC5jdXJyZW50KWkoITEpO2Vsc2V7dmFyIG49RGF0ZS5ub3coKS1sLmN1cnJlbnQsdD1yKk1hdGguY2VpbChuL3IpLW47dD4wP3MuY3VycmVudD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aSghMSksbC5jdXJyZW50PW51bGx9LHQpOihpKCExKSxsLmN1cnJlbnQ9bnVsbCl9cmV0dXJuIGZ1bmN0aW9uKCl7cy5jdXJyZW50JiZjbGVhclRpbWVvdXQocy5jdXJyZW50KX19LFtlLHJdKSxhfWZ1bmN0aW9uIHRCKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiB0TShlKXt2YXIgbix0LHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjAsbz0oMCx4LnVzZVJlZikobnVsbCksYT0obj0oMCx4LnVzZVN0YXRlKSghMSksdD0yLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KG4pfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KG4sMil8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIHRCKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIHRCKGUsbil9fShuLHQpfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpKSxpPWFbMF0sbD1hWzFdO3JldHVybigwLHgudXNlRWZmZWN0KShmdW5jdGlvbigpe2lmKGU+MCl7dmFyIG49by5jdXJyZW50P0RhdGUubm93KCktby5jdXJyZW50Oi0xO2lmKG8uY3VycmVudD1EYXRlLm5vdygpLCEobjw9cikpe2woITApO3ZhciB0PXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bCghMSl9LHIpO3JldHVybiBmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0KX19fX0sW2Uscl0pLGl9ZnVuY3Rpb24gdEkoZSxuKXsobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxyPUFycmF5KG4pO3Q8bjt0Kyspclt0XT1lW3RdO3JldHVybiByfWZ1bmN0aW9uIHRIKGUsbil7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLCFufHxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShlLG4pfHxmdW5jdGlvbihlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiB0SShlLG4pO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20odCk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiB0SShlLG4pfX0oZSxuKXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX1mdW5jdGlvbiB0RihlKXt2YXIgbj10SCgoMCx4LnVzZVN0YXRlKSgwKSwyKSx0PW5bMF0scj1uWzFdO3JldHVybigwLHgudXNlRWZmZWN0KShmdW5jdGlvbigpe3ZhciBuPWUuY3VycmVudDtpZihuKXt2YXIgdD1uZXcgUmVzaXplT2JzZXJ2ZXIoZnVuY3Rpb24oZSl7cih0SChlLDEpWzBdLmNvbnRlbnRSZWN0LndpZHRoKX0pO3JldHVybiB0Lm9ic2VydmUobiksZnVuY3Rpb24oKXtyZXR1cm4gdC5kaXNjb25uZWN0KCl9fX0sW2VdKSx0fWZ1bmN0aW9uIHRVKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiB0VihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9ZnVuY3Rpb24gdHEoZSxuKXtyZXR1cm4gbj1udWxsIT1uP246e30sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSxlfWZ1bmN0aW9uIHRXKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLG4uaW5kZXhPZih0KT49MHx8KG9bdF09ZVt0XSk7cmV0dXJuIG99KGUsbik7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSwhKG4uaW5kZXhPZih0KT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHQpJiYob1t0XT1lW3RdKX1yZXR1cm4gb31mdW5jdGlvbiB0JChlLG4pe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSwhbnx8YS5sZW5ndGghPT1uKTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0oZSxuKXx8ZnVuY3Rpb24oZSxuKXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gdFUoZSxuKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKHQpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gdFUoZSxuKX19KGUsbil8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gdFooKXt2YXIgZSxuLHQ9KGU9W1wiXFxuICAgICAgICAgIFtkYXRhLW5leHQtYmFkZ2Utcm9vdF0ge1xcbiAgICAgICAgICAgIC0tdGltaW5nOiBjdWJpYy1iZXppZXIoMC4yMywgMC44OCwgMC4yNiwgMC45Mik7XFxuICAgICAgICAgICAgLS1kdXJhdGlvbi1sb25nOiAyNTBtcztcXG4gICAgICAgICAgICAtLWNvbG9yLW91dGVyLWJvcmRlcjogIzE3MTcxNztcXG4gICAgICAgICAgICAtLWNvbG9yLWlubmVyLWJvcmRlcjogaHNsYSgwLCAwJSwgMTAwJSwgMC4xNCk7XFxuICAgICAgICAgICAgLS1jb2xvci1ob3Zlci1hbHBoYS1zdWJ0bGU6IGhzbGEoMCwgMCUsIDEwMCUsIDAuMTMpO1xcbiAgICAgICAgICAgIC0tY29sb3ItaG92ZXItYWxwaGEtZXJyb3I6IGhzbGEoMCwgMCUsIDEwMCUsIDAuMik7XFxuICAgICAgICAgICAgLS1jb2xvci1ob3Zlci1hbHBoYS1lcnJvci0yOiBoc2xhKDAsIDAlLCAxMDAlLCAwLjI1KTtcXG4gICAgICAgICAgICAtLW1hcmstc2l6ZTogY2FsYyh2YXIoLS1zaXplKSAtIHZhcigtLXNpemUtMikgKiAyKTtcXG5cXG4gICAgICAgICAgICAtLWZvY3VzLWNvbG9yOiB2YXIoLS1jb2xvci1ibHVlLTgwMCk7XFxuICAgICAgICAgICAgLS1mb2N1cy1yaW5nOiAycHggc29saWQgdmFyKC0tZm9jdXMtY29sb3IpO1xcblxcbiAgICAgICAgICAgICY6aGFzKFtkYXRhLW5leHQtYmFkZ2VdW2RhdGEtZXJyb3I9J3RydWUnXSkge1xcbiAgICAgICAgICAgICAgLS1mb2N1cy1jb2xvcjogI2ZmZjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgW2RhdGEtZGlzYWJsZWQtaWNvbl0ge1xcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiA0cHg7XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgW2RhdGEtbmV4dC1iYWRnZV0ge1xcbiAgICAgICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xcbiAgICAgICAgICAgIHdpZHRoOiB2YXIoLS1zaXplKTtcXG4gICAgICAgICAgICBoZWlnaHQ6IHZhcigtLXNpemUpO1xcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjgpO1xcbiAgICAgICAgICAgIGJveC1zaGFkb3c6XFxuICAgICAgICAgICAgICAwIDAgMCAxcHggdmFyKC0tY29sb3Itb3V0ZXItYm9yZGVyKSxcXG4gICAgICAgICAgICAgIGluc2V0IDAgMCAwIDFweCB2YXIoLS1jb2xvci1pbm5lci1ib3JkZXIpLFxcbiAgICAgICAgICAgICAgMHB4IDE2cHggMzJweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC4yNCk7XFxuICAgICAgICAgICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDQ4cHgpO1xcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtZnVsbCk7XFxuICAgICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICAgICAgICAgIHNjYWxlOiAxO1xcbiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgICAgICAgICAgd2lsbC1jaGFuZ2U6IHNjYWxlLCBib3gtc2hhZG93LCB3aWR0aCwgYmFja2dyb3VuZDtcXG4gICAgICAgICAgICB0cmFuc2l0aW9uOlxcbiAgICAgICAgICAgICAgc2NhbGUgdmFyKC0tZHVyYXRpb24tc2hvcnQpIHZhcigtLXRpbWluZyksXFxuICAgICAgICAgICAgICB3aWR0aCB2YXIoLS1kdXJhdGlvbi1sb25nKSB2YXIoLS10aW1pbmcpLFxcbiAgICAgICAgICAgICAgYm94LXNoYWRvdyB2YXIoLS1kdXJhdGlvbi1sb25nKSB2YXIoLS10aW1pbmcpLFxcbiAgICAgICAgICAgICAgYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1zaG9ydCkgZWFzZTtcXG5cXG4gICAgICAgICAgICAmOmFjdGl2ZVtkYXRhLWVycm9yPSdmYWxzZSddIHtcXG4gICAgICAgICAgICAgIHNjYWxlOiAwLjk1O1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAmW2RhdGEtYW5pbWF0ZT0ndHJ1ZSddOm5vdCg6aG92ZXIpIHtcXG4gICAgICAgICAgICAgIHNjYWxlOiAxLjAyO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAmW2RhdGEtZXJyb3I9J2ZhbHNlJ106aGFzKFtkYXRhLW5leHQtbWFya106Zm9jdXMtdmlzaWJsZSkge1xcbiAgICAgICAgICAgICAgb3V0bGluZTogdmFyKC0tZm9jdXMtcmluZyk7XFxuICAgICAgICAgICAgICBvdXRsaW5lLW9mZnNldDogM3B4O1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAmW2RhdGEtZXJyb3I9J3RydWUnXSB7XFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjY2EyYTMwO1xcbiAgICAgICAgICAgICAgLS1jb2xvci1pbm5lci1ib3JkZXI6ICNlNTQ4NGQ7XFxuXFxuICAgICAgICAgICAgICBbZGF0YS1uZXh0LW1hcmtdIHtcXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItaG92ZXItYWxwaGEtZXJyb3IpO1xcbiAgICAgICAgICAgICAgICBvdXRsaW5lLW9mZnNldDogMHB4O1xcblxcbiAgICAgICAgICAgICAgICAmOmZvY3VzLXZpc2libGUge1xcbiAgICAgICAgICAgICAgICAgIG91dGxpbmU6IHZhcigtLWZvY3VzLXJpbmcpO1xcbiAgICAgICAgICAgICAgICAgIG91dGxpbmUtb2Zmc2V0OiAtMXB4O1xcbiAgICAgICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgICAgICY6aG92ZXIge1xcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWhvdmVyLWFscGhhLWVycm9yLTIpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICZbZGF0YS1lcnJvci1leHBhbmRlZD0nZmFsc2UnXVtkYXRhLWVycm9yPSd0cnVlJ10gfiBbZGF0YS1kb3RdIHtcXG4gICAgICAgICAgICAgIHNjYWxlOiAxO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICA+IGRpdiB7XFxuICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBbZGF0YS1pc3N1ZXMtY29sbGFwc2VdOmZvY3VzLXZpc2libGUge1xcbiAgICAgICAgICAgIG91dGxpbmU6IHZhcigtLWZvY3VzLXJpbmcpO1xcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIFtkYXRhLWlzc3Vlc106aGFzKFtkYXRhLWlzc3Vlcy1vcGVuXTpmb2N1cy12aXNpYmxlKSB7XFxuICAgICAgICAgICAgb3V0bGluZTogdmFyKC0tZm9jdXMtcmluZyk7XFxuICAgICAgICAgICAgb3V0bGluZS1vZmZzZXQ6IC0xcHg7XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgW2RhdGEtZG90XSB7XFxuICAgICAgICAgICAgY29udGVudDogJyc7XFxuICAgICAgICAgICAgd2lkdGg6IHZhcigtLXNpemUtOCk7XFxuICAgICAgICAgICAgaGVpZ2h0OiB2YXIoLS1zaXplLTgpO1xcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmY7XFxuICAgICAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IHZhcigtLWNvbG9yLW91dGVyLWJvcmRlcik7XFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgICAgICAgICB0b3A6IDJweDtcXG4gICAgICAgICAgICByaWdodDogMHB4O1xcbiAgICAgICAgICAgIHNjYWxlOiAwO1xcbiAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgICAgICAgICAgIHRyYW5zaXRpb246IHNjYWxlIDIwMG1zIHZhcigtLXRpbWluZyk7XFxuICAgICAgICAgICAgdHJhbnNpdGlvbi1kZWxheTogdmFyKC0tZHVyYXRpb24tc2hvcnQpO1xcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIFtkYXRhLWlzc3Vlc10ge1xcbiAgICAgICAgICAgIC0tcGFkZGluZy1sZWZ0OiA4cHg7XFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICAgICAgICBnYXA6IDJweDtcXG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogOHB4O1xcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDhweDtcXG4gICAgICAgICAgICBoZWlnaHQ6IHZhcigtLXNpemUtMzIpO1xcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMnB4O1xcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtZnVsbCk7XFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1zaG9ydCkgZWFzZTtcXG5cXG4gICAgICAgICAgICAmOmhhcyhbZGF0YS1pc3N1ZXMtb3Blbl06aG92ZXIpIHtcXG4gICAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWhvdmVyLWFscGhhLWVycm9yKTtcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgJjpoYXMoW2RhdGEtaXNzdWVzLWNvbGxhcHNlXSkge1xcbiAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogY2FsYyh2YXIoLS1wYWRkaW5nLWxlZnQpIC8gMik7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIFtkYXRhLWNyb3NzXSB7XFxuICAgICAgICAgICAgICB0cmFuc2xhdGU6IDBweCAtMXB4O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBbZGF0YS1pc3N1ZXMtb3Blbl0ge1xcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xMyk7XFxuICAgICAgICAgICAgY29sb3I6IHdoaXRlO1xcbiAgICAgICAgICAgIHdpZHRoOiBmaXQtY29udGVudDtcXG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICAgICAgICBnYXA6IDJweDtcXG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgICAgICAgIG1hcmdpbjogMDtcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogdmFyKC0tc2l6ZS0zNik7XFxuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gICAgICAgICAgICB6LWluZGV4OiAyO1xcbiAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuXFxuICAgICAgICAgICAgJjpmb2N1cy12aXNpYmxlIHtcXG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIFtkYXRhLWlzc3Vlcy1jb2xsYXBzZV0ge1xcbiAgICAgICAgICAgIHdpZHRoOiB2YXIoLS1zaXplLTI0KTtcXG4gICAgICAgICAgICBoZWlnaHQ6IHZhcigtLXNpemUtMjQpO1xcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtZnVsbCk7XFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1zaG9ydCkgZWFzZTtcXG5cXG4gICAgICAgICAgICAmOmhvdmVyIHtcXG4gICAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWhvdmVyLWFscGhhLWVycm9yKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgW2RhdGEtY3Jvc3NdIHtcXG4gICAgICAgICAgICBjb2xvcjogI2ZmZjtcXG4gICAgICAgICAgICB3aWR0aDogdmFyKC0tc2l6ZS0xMik7XFxuICAgICAgICAgICAgaGVpZ2h0OiB2YXIoLS1zaXplLTEyKTtcXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBbZGF0YS1uZXh0LW1hcmtdIHtcXG4gICAgICAgICAgICB3aWR0aDogdmFyKC0tbWFyay1zaXplKTtcXG4gICAgICAgICAgICBoZWlnaHQ6IHZhcigtLW1hcmstc2l6ZSk7XFxuICAgICAgICAgICAgbWFyZ2luOiAwIDJweDtcXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1mdWxsKTtcXG4gICAgICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIHZhcigtLWR1cmF0aW9uLWxvbmcpIHZhcigtLXRpbWluZyk7XFxuXFxuICAgICAgICAgICAgJjpmb2N1cy12aXNpYmxlIHtcXG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICY6aG92ZXIge1xcbiAgICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItaG92ZXItYWxwaGEtc3VidGxlKTtcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgc3ZnIHtcXG4gICAgICAgICAgICAgIGZsZXgtc2hyaW5rOiAwO1xcbiAgICAgICAgICAgICAgd2lkdGg6IHZhcigtLXNpemUtNDApO1xcbiAgICAgICAgICAgICAgaGVpZ2h0OiB2YXIoLS1zaXplLTQwKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgW2RhdGEtaXNzdWVzLWNvdW50LWFuaW1hdGlvbl0ge1xcbiAgICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7XFxuICAgICAgICAgICAgcGxhY2UtaXRlbXM6IGNlbnRlciBjZW50ZXI7XFxuICAgICAgICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcXG5cXG4gICAgICAgICAgICAmW2RhdGEtYW5pbWF0ZT0nZmFsc2UnXSB7XFxuICAgICAgICAgICAgICBbZGF0YS1pc3N1ZXMtY291bnQtZXhpdF0sXFxuICAgICAgICAgICAgICBbZGF0YS1pc3N1ZXMtY291bnQtZW50ZXJdIHtcXG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwbXM7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgID4gKiB7XFxuICAgICAgICAgICAgICBncmlkLWFyZWE6IDEgLyAxO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBbZGF0YS1pc3N1ZXMtY291bnQtZXhpdF0ge1xcbiAgICAgICAgICAgICAgYW5pbWF0aW9uOiBmYWRlT3V0IDMwMG1zIHZhcigtLXRpbWluZykgZm9yd2FyZHM7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIFtkYXRhLWlzc3Vlcy1jb3VudC1lbnRlcl0ge1xcbiAgICAgICAgICAgICAgYW5pbWF0aW9uOiBmYWRlSW4gMzAwbXMgdmFyKC0tdGltaW5nKSBmb3J3YXJkcztcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgW2RhdGEtaXNzdWVzLWNvdW50LXBsdXJhbF0ge1xcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gICAgICAgICAgICAmW2RhdGEtYW5pbWF0ZT0ndHJ1ZSddIHtcXG4gICAgICAgICAgICAgIGFuaW1hdGlvbjogZmFkZUluIDMwMG1zIHZhcigtLXRpbWluZykgZm9yd2FyZHM7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIC5wYXRoMCB7XFxuICAgICAgICAgICAgYW5pbWF0aW9uOiBkcmF3MCAxLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIC5wYXRoMSB7XFxuICAgICAgICAgICAgYW5pbWF0aW9uOiBkcmF3MSAxLjVzIGVhc2Utb3V0IGluZmluaXRlO1xcbiAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheTogMC4zcztcXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICAucGF1c2VkIHtcXG4gICAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldDogMDtcXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBAa2V5ZnJhbWVzIGZhZGVJbiB7XFxuICAgICAgICAgICAgMCUge1xcbiAgICAgICAgICAgICAgb3BhY2l0eTogMDtcXG4gICAgICAgICAgICAgIGZpbHRlcjogYmx1cigycHgpO1xcbiAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDhweCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIDEwMCUge1xcbiAgICAgICAgICAgICAgb3BhY2l0eTogMTtcXG4gICAgICAgICAgICAgIGZpbHRlcjogYmx1cigwcHgpO1xcbiAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBAa2V5ZnJhbWVzIGZhZGVPdXQge1xcbiAgICAgICAgICAgIDAlIHtcXG4gICAgICAgICAgICAgIG9wYWNpdHk6IDE7XFxuICAgICAgICAgICAgICBmaWx0ZXI6IGJsdXIoMHB4KTtcXG4gICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgMTAwJSB7XFxuICAgICAgICAgICAgICBvcGFjaXR5OiAwO1xcbiAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMnB4KTtcXG4gICAgICAgICAgICAgIGZpbHRlcjogYmx1cigycHgpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBAa2V5ZnJhbWVzIGRyYXcwIHtcXG4gICAgICAgICAgICAwJSxcXG4gICAgICAgICAgICAyNSUge1xcbiAgICAgICAgICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IC0yOS42O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAyNSUsXFxuICAgICAgICAgICAgNTAlIHtcXG4gICAgICAgICAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICA1MCUsXFxuICAgICAgICAgICAgNzUlIHtcXG4gICAgICAgICAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICA3NSUsXFxuICAgICAgICAgICAgMTAwJSB7XFxuICAgICAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldDogMjkuNjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgQGtleWZyYW1lcyBkcmF3MSB7XFxuICAgICAgICAgICAgMCUsXFxuICAgICAgICAgICAgMjAlIHtcXG4gICAgICAgICAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAtMTEuNjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgMjAlLFxcbiAgICAgICAgICAgIDUwJSB7XFxuICAgICAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldDogMDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgNTAlLFxcbiAgICAgICAgICAgIDc1JSB7XFxuICAgICAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldDogMDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgNzUlLFxcbiAgICAgICAgICAgIDEwMCUge1xcbiAgICAgICAgICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDExLjY7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIEBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbikge1xcbiAgICAgICAgICAgIFtkYXRhLWlzc3Vlcy1jb3VudC1leGl0XSxcXG4gICAgICAgICAgICBbZGF0YS1pc3N1ZXMtY291bnQtZW50ZXJdLFxcbiAgICAgICAgICAgIFtkYXRhLWlzc3Vlcy1jb3VudC1wbHVyYWxdIHtcXG4gICAgICAgICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMG1zICFpbXBvcnRhbnQ7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICBcIl0sbnx8KG49ZS5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUobil9fSkpKTtyZXR1cm4gdFo9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sdH12YXIgdFk9KDAseC5mb3J3YXJkUmVmKShmdW5jdGlvbihlLG4pe3ZhciB0PWUuZGlzYWJsZWQscj1lLmlzc3VlQ291bnQsbz1lLmlzRGV2QnVpbGRpbmcsYT1lLmlzRGV2UmVuZGVyaW5nLGk9ZS5pc0J1aWxkRXJyb3IsbD1lLm9uVHJpZ2dlckNsaWNrLHM9ZS50b2dnbGVFcnJvck92ZXJsYXksYz1lLnNjYWxlLHU9dFcoZSxbXCJkaXNhYmxlZFwiLFwiaXNzdWVDb3VudFwiLFwiaXNEZXZCdWlsZGluZ1wiLFwiaXNEZXZSZW5kZXJpbmdcIixcImlzQnVpbGRFcnJvclwiLFwib25UcmlnZ2VyQ2xpY2tcIixcInRvZ2dsZUVycm9yT3ZlcmxheVwiLFwic2NhbGVcIl0pLGQ9cj4wLGY9dCQoKDAseC51c2VTdGF0ZSkoZCksMikscD1mWzBdLGg9ZlsxXSxnPXQkKCgwLHgudXNlU3RhdGUpKCExKSwyKSxtPWdbMF0sdj1nWzFdLGI9dE0ociwxNTApLHc9KDAseC51c2VSZWYpKG51bGwpLGo9KDAseC51c2VSZWYpKG51bGwpLGs9dEYoaiksQT10RChvfHxhKSxPPXB8fHQ7cmV0dXJuKDAseC51c2VFZmZlY3QpKGZ1bmN0aW9uKCl7aChkKX0sW2RdKSwoMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0LWJhZGdlLXJvb3RcIjohMCxzdHlsZTp7XCItLXNpemVcIjpcIlwiLmNvbmNhdCgzNi8odm9pZCAwPT09Yz8xOmMpLFwicHhcIiksXCItLWR1cmF0aW9uLXNob3J0XCI6XCJcIi5jb25jYXQoMTUwLFwibXNcIiksZGlzcGxheTp0JiYoIWR8fG0pP1wibm9uZVwiOlwiYmxvY2tcIn0sY2hpbGRyZW46WygwLHkuanN4KShcInN0eWxlXCIse2NoaWxkcmVuOmVpKHRaKCkpfSksKDAseS5qc3gpKFwiZGl2XCIse1wiZGF0YS1uZXh0LWJhZGdlXCI6ITAsXCJkYXRhLWVycm9yXCI6ZCxcImRhdGEtZXJyb3ItZXhwYW5kZWRcIjpPLFwiZGF0YS1hbmltYXRlXCI6YixzdHlsZTp7d2lkdGg6MD09PWs/XCJhdXRvXCI6a30sY2hpbGRyZW46KDAseS5qc3hzKShcImRpdlwiLHtyZWY6aixjaGlsZHJlbjpbIXQmJigwLHkuanN4KShcImJ1dHRvblwiLHRxKHRWKHtyZWY6ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KGUpLHQ9MDt0PGU7dCsrKW5bdF09YXJndW1lbnRzW3RdO3ZhciByPW4uZmlsdGVyKEJvb2xlYW4pO3JldHVybiByLmxlbmd0aDw9MT9yWzBdfHxudWxsOmZ1bmN0aW9uKGUpe3ZhciBuPSEwLHQ9ITEsbz12b2lkIDA7dHJ5e2Zvcih2YXIgYSxpPXJbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0oYT1pLm5leHQoKSkuZG9uZSk7bj0hMCl7dmFyIGw9YS52YWx1ZTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBsP2woZSk6bCYmKGwuY3VycmVudD1lKX19Y2F0Y2goZSl7dD0hMCxvPWV9ZmluYWxseXt0cnl7bnx8bnVsbD09aS5yZXR1cm58fGkucmV0dXJuKCl9ZmluYWxseXtpZih0KXRocm93IG99fX19KHcsbiksXCJkYXRhLW5leHQtbWFya1wiOiEwLFwiZGF0YS1uZXh0LW1hcmstbG9hZGluZ1wiOkEsb25DbGljazpsfSx1KSx7Y2hpbGRyZW46KDAseS5qc3gpKHRLLHtpc0xvYWRpbmc6QSxpc0RldkJ1aWxkaW5nOm99KX0pKSxPJiYoMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS1pc3N1ZXNcIjohMCxjaGlsZHJlbjpbKDAseS5qc3hzKShcImJ1dHRvblwiLHtcImRhdGEtaXNzdWVzLW9wZW5cIjohMCxcImFyaWEtbGFiZWxcIjpcIk9wZW4gaXNzdWVzIG92ZXJsYXlcIixvbkNsaWNrOnMsY2hpbGRyZW46W3QmJigwLHkuanN4KShcImRpdlwiLHtcImRhdGEtZGlzYWJsZWQtaWNvblwiOiEwLGNoaWxkcmVuOigwLHkuanN4KSh0USx7fSl9KSwoMCx5LmpzeCkodFgse2FuaW1hdGU6YixcImRhdGEtaXNzdWVzLWNvdW50LWFuaW1hdGlvblwiOiEwLGNoaWxkcmVuOnJ9LHIpLFwiIFwiLCgwLHkuanN4cykoXCJkaXZcIix7Y2hpbGRyZW46W1wiSXNzdWVcIixyPjEmJigwLHkuanN4KShcInNwYW5cIix7XCJhcmlhLWhpZGRlblwiOiEwLFwiZGF0YS1pc3N1ZXMtY291bnQtcGx1cmFsXCI6ITAsXCJkYXRhLWFuaW1hdGVcIjpiJiYyPT09cixjaGlsZHJlbjpcInNcIn0pXX0pXX0pLCFpJiYoMCx5LmpzeCkoXCJidXR0b25cIix7XCJkYXRhLWlzc3Vlcy1jb2xsYXBzZVwiOiEwLFwiYXJpYS1sYWJlbFwiOlwiQ29sbGFwc2UgaXNzdWVzIGJhZGdlXCIsb25DbGljazpmdW5jdGlvbigpe3ZhciBlO3Q/dighMCk6aCghMSksbnVsbD09KGU9dy5jdXJyZW50KXx8ZS5mb2N1cygpfSxjaGlsZHJlbjooMCx5LmpzeCkodEcse1wiZGF0YS1jcm9zc1wiOiEwfSl9KV19KV19KX0pLCgwLHkuanN4KShcImRpdlwiLHtcImFyaWEtaGlkZGVuXCI6ITAsXCJkYXRhLWRvdFwiOiEwfSldfSl9KTtmdW5jdGlvbiB0WChlKXt2YXIgbj1lLmNoaWxkcmVuLHQ9ZS5hbmltYXRlLHI9dFcoZSxbXCJjaGlsZHJlblwiLFwiYW5pbWF0ZVwiXSk7cmV0dXJuKDAseS5qc3hzKShcImRpdlwiLHRxKHRWKHt9LHIpLHtcImRhdGEtYW5pbWF0ZVwiOnZvaWQgMD09PXR8fHQsY2hpbGRyZW46WygwLHkuanN4KShcImRpdlwiLHtcImFyaWEtaGlkZGVuXCI6ITAsXCJkYXRhLWlzc3Vlcy1jb3VudC1leGl0XCI6ITAsY2hpbGRyZW46bi0xfSksKDAseS5qc3gpKFwiZGl2XCIse1wiZGF0YS1pc3N1ZXMtY291bnRcIjohMCxcImRhdGEtaXNzdWVzLWNvdW50LWVudGVyXCI6ITAsY2hpbGRyZW46bn0pXX0pKX1mdW5jdGlvbiB0SyhlKXt2YXIgbj1lLmlzTG9hZGluZyx0PWUuaXNEZXZCdWlsZGluZz9cInJnYmEoMjU1LDI1NSwyNTUsMC43KVwiOlwid2hpdGVcIjtyZXR1cm4oMCx5LmpzeHMpKFwic3ZnXCIse3dpZHRoOlwiNDBcIixoZWlnaHQ6XCI0MFwiLHZpZXdCb3g6XCIwIDAgNDAgNDBcIixmaWxsOlwibm9uZVwiLFwiZGF0YS1uZXh0LW1hcmstbG9hZGluZ1wiOm4sY2hpbGRyZW46WygwLHkuanN4cykoXCJnXCIse3RyYW5zZm9ybTpcInRyYW5zbGF0ZSg4LjUsIDEzKVwiLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJwYXRoXCIse2NsYXNzTmFtZTpuP1wicGF0aDBcIjpcInBhdXNlZFwiLGQ6XCJNMTMuMyAxNS4yIEwyLjM0IDEgVjEyLjZcIixmaWxsOlwibm9uZVwiLHN0cm9rZTpcInVybCgjbmV4dF9sb2dvX3BhaW50MF9saW5lYXJfMTM1N18xMDg1MylcIixzdHJva2VXaWR0aDpcIjEuODZcIixtYXNrOlwidXJsKCNuZXh0X2xvZ29fbWFzazApXCIsc3Ryb2tlRGFzaGFycmF5OlwiMjkuNlwiLHN0cm9rZURhc2hvZmZzZXQ6XCIyOS42XCJ9KSwoMCx5LmpzeCkoXCJwYXRoXCIse2NsYXNzTmFtZTpuP1wicGF0aDFcIjpcInBhdXNlZFwiLGQ6XCJNMTEuODI1IDEuNSBWMTMuMVwiLHN0cm9rZVdpZHRoOlwiMS44NlwiLHN0cm9rZTpcInVybCgjbmV4dF9sb2dvX3BhaW50MV9saW5lYXJfMTM1N18xMDg1MylcIixzdHJva2VEYXNoYXJyYXk6XCIxMS42XCIsc3Ryb2tlRGFzaG9mZnNldDpcIjExLjZcIn0pXX0pLCgwLHkuanN4cykoXCJkZWZzXCIse2NoaWxkcmVuOlsoMCx5LmpzeHMpKFwibGluZWFyR3JhZGllbnRcIix7aWQ6XCJuZXh0X2xvZ29fcGFpbnQwX2xpbmVhcl8xMzU3XzEwODUzXCIseDE6XCI5Ljk1NTU1XCIseTE6XCIxMS4xMjI2XCIseDI6XCIxNS40Nzc4XCIseTI6XCIxNy45NjcxXCIsZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIsY2hpbGRyZW46WygwLHkuanN4KShcInN0b3BcIix7c3RvcENvbG9yOnR9KSwoMCx5LmpzeCkoXCJzdG9wXCIse29mZnNldDpcIjAuNjA0MDcyXCIsc3RvcENvbG9yOnQsc3RvcE9wYWNpdHk6XCIwXCJ9KSwoMCx5LmpzeCkoXCJzdG9wXCIse29mZnNldDpcIjFcIixzdG9wQ29sb3I6dCxzdG9wT3BhY2l0eTpcIjBcIn0pXX0pLCgwLHkuanN4cykoXCJsaW5lYXJHcmFkaWVudFwiLHtpZDpcIm5leHRfbG9nb19wYWludDFfbGluZWFyXzEzNTdfMTA4NTNcIix4MTpcIjExLjgyMjJcIix5MTpcIjEuNDAwMzlcIix4MjpcIjExLjc5MVwiLHkyOlwiOS42MjU0MlwiLGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJzdG9wXCIse3N0b3BDb2xvcjp0fSksKDAseS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIxXCIsc3RvcENvbG9yOnQsc3RvcE9wYWNpdHk6XCIwXCJ9KV19KSwoMCx5LmpzeHMpKFwibWFza1wiLHtpZDpcIm5leHRfbG9nb19tYXNrMFwiLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJyZWN0XCIse3dpZHRoOlwiMTAwJVwiLGhlaWdodDpcIjEwMCVcIixmaWxsOlwid2hpdGVcIn0pLCgwLHkuanN4KShcInJlY3RcIix7d2lkdGg6XCI1XCIsaGVpZ2h0OlwiMS41XCIsZmlsbDpcImJsYWNrXCJ9KV19KV19KV19KX1mdW5jdGlvbiB0USgpe3JldHVybigwLHkuanN4KShcInN2Z1wiLHt3aWR0aDpcIjEyXCIsaGVpZ2h0OlwiMTJcIix2aWV3Qm94OlwiMCAwIDEyIDEyXCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTMuOTgwNzEgMS4xMjVMMS4xMjUgMy45ODA3MUwxLjEyNSA4LjAxOTI5TDMuOTgwNzEgMTAuODc1SDguMDE5MjlMMTAuODc1IDguMDE5MjlWMy45ODA3MUw4LjAxOTI5IDEuMTI1SDMuOTgwNzFaTTMuODI1MzggMEMzLjYyNjQ3IDAgMy40MzU3IDAuMDc5MDE3NiAzLjI5NTA1IDAuMjE5NjdMMC4yMTk2NyAzLjI5NTA1QzAuMDc5MDE3NiAzLjQzNTcgMCAzLjYyNjQ3IDAgMy44MjUzOFY4LjE3NDYyQzAgOC4zNzM1MyAwLjA3OTAxNzggOC41NjQzIDAuMjE5NjcgOC43MDQ5NUwzLjI5NTA1IDExLjc4MDNDMy40MzU3IDExLjkyMSAzLjYyNjQ3IDEyIDMuODI1MzggMTJIOC4xNzQ2MkM4LjM3MzUzIDEyIDguNTY0MyAxMS45MjEgOC43MDQ5NSAxMS43ODAzTDExLjc4MDMgOC43MDQ5NUMxMS45MjEgOC41NjQzIDEyIDguMzczNTMgMTIgOC4xNzQ2MlYzLjgyNTM4QzEyIDMuNjI2NDcgMTEuOTIxIDMuNDM1NyAxMS43ODAzIDMuMjk1MDVMOC43MDQ5NSAwLjIxOTY3QzguNTY0MyAwLjA3OTAxNzcgOC4zNzM1MyAwIDguMTc0NjIgMEgzLjgyNTM4Wk02LjU2MjUgMi44MTI1VjMuMzc1VjZWNi41NjI1SDUuNDM3NVY2VjMuMzc1VjIuODEyNUg2LjU2MjVaTTYgOUM2LjQxNDIxIDkgNi43NSA4LjY2NDIxIDYuNzUgOC4yNUM2Ljc1IDcuODM1NzkgNi40MTQyMSA3LjUgNiA3LjVDNS41ODU3OSA3LjUgNS4yNSA3LjgzNTc5IDUuMjUgOC4yNUM1LjI1IDguNjY0MjEgNS41ODU3OSA5IDYgOVpcIixmaWxsOlwiI0VBRUFFQVwifSl9KX1mdW5jdGlvbiB0RyhlKXtyZXR1cm4oMCx5LmpzeCkoXCJzdmdcIix0cSh0Vih7d2lkdGg6XCIxMlwiLGhlaWdodDpcIjEyXCIsdmlld0JveDpcIjAgMCAxNCAxNFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSx7Y2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTMuMDg4ODkgMTEuODM4NEwyLjYyNDg2IDEyLjMwMjRMMS42OTY3OCAxMS4zNzQ0TDIuMTYwODIgMTAuOTEwM0w2LjA3MTc4IDYuOTk5MzdMMi4xNjA4MiAzLjA4ODQxTDEuNjk2NzggMi42MjQzN0wyLjYyNDg2IDEuNjk2MjlMMy4wODg4OSAyLjE2MDMzTDYuOTk5ODYgNi4wNzEyOUwxMC45MTA4IDIuMTYwMzNMMTEuMzc0OSAxLjY5NjI5TDEyLjMwMjkgMi42MjQzN0wxMS44Mzg5IDMuMDg4NDFMNy45Mjc5MyA2Ljk5OTM3TDExLjgzODkgMTAuOTEwM0wxMi4zMDI5IDExLjM3NDRMMTEuMzc0OSAxMi4zMDI0TDEwLjkxMDggMTEuODM4NEw2Ljk5OTg2IDcuOTI3NDRMMy4wODg4OSAxMS44Mzg0WlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSkpfXZhciB0Sj1fX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9ob29rcy91c2UtZGVsYXllZC1yZW5kZXIudHNcIiksdDA9X193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvY29tcG9uZW50cy9lcnJvcnMvZGV2LXRvb2xzLWluZGljYXRvci9kZXYtdG9vbHMtaW5mby9kZXYtdG9vbHMtaW5mby50c3hcIik7ZnVuY3Rpb24gdDEoZSl7dmFyIG4sdDtyZXR1cm4oMCx5LmpzeHMpKHQwLngsKG49ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7dGl0bGU6XCJUdXJib3BhY2tcIixsZWFybk1vcmVMaW5rOlwiaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2FwaS1yZWZlcmVuY2UvdHVyYm9wYWNrXCJ9LGUpLHQ9dD17Y2hpbGRyZW46WygwLHkuanN4cykoXCJhcnRpY2xlXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWFydGljbGVcIixjaGlsZHJlbjpbKDAseS5qc3hzKShcInBcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tcGFyYWdyYXBoXCIsY2hpbGRyZW46W1wiVHVyYm9wYWNrIGlzIGFuIGluY3JlbWVudGFsIGJ1bmRsZXIgb3B0aW1pemVkIGZvciBKYXZhU2NyaXB0IGFuZCBUeXBlU2NyaXB0LCB3cml0dGVuIGluIFJ1c3QsIGFuZCBidWlsdCBpbnRvIE5leHQuanMuIFR1cmJvcGFjayBjYW4gYmUgdXNlZCBpbiBOZXh0LmpzIGluIGJvdGggdGhlXCIsXCIgXCIsKDAseS5qc3gpKFwiY29kZVwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlXCIsY2hpbGRyZW46XCJwYWdlc1wifSksXCIgYW5kXCIsXCIgXCIsKDAseS5qc3gpKFwiY29kZVwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlXCIsY2hpbGRyZW46XCJhcHBcIn0pLFwiIGRpcmVjdG9yaWVzIGZvciBmYXN0ZXIgbG9jYWwgZGV2ZWxvcG1lbnQuXCJdfSksKDAseS5qc3hzKShcInBcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tcGFyYWdyYXBoXCIsY2hpbGRyZW46W1wiVG8gZW5hYmxlIFR1cmJvcGFjaywgdXNlIHRoZVwiLFwiIFwiLCgwLHkuanN4KShcImNvZGVcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZVwiLGNoaWxkcmVuOlwiLS10dXJib3BhY2tcIn0pLFwiIGZsYWcgd2hlbiBydW5uaW5nIHRoZSBOZXh0LmpzIGRldmVsb3BtZW50IHNlcnZlci5cIl19KV19KSwoMCx5LmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZS1ibG9jay1jb250YWluZXJcIixjaGlsZHJlbjooMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGUtYmxvY2tcIixjaGlsZHJlbjpbKDAseS5qc3gpKGUzLHthY3Rpb25MYWJlbDpcIkNvcHkgTmV4dC5qcyBUdXJib3BhY2sgQ29tbWFuZFwiLHN1Y2Nlc3NMYWJlbDpcIk5leHQuanMgVHVyYm9wYWNrIENvbW1hbmQgQ29waWVkXCIsY29udGVudDpcIi0tdHVyYm9wYWNrXCIsY2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29weS1idXR0b25cIn0pLCgwLHkuanN4KShcInByZVwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLXByZVwiLGNoaWxkcmVuOigwLHkuanN4cykoXCJjb2RlXCIse2NoaWxkcmVuOlsoMCx5LmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZS1ibG9jay1saW5lXCIsY2hpbGRyZW46XCIgIFwifSksKDAseS5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGUtYmxvY2stbGluZVwiLGNoaWxkcmVuOlwie1wifSksKDAseS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWxpbmVcIixjaGlsZHJlbjpbXCIgIFwiLCgwLHkuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZS1ibG9jay1qc29uLWtleVwiLGNoaWxkcmVuOidcInNjcmlwdHNcIid9KSxcIjogXCIsXCJ7XCJdfSksKDAseS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWxpbmUgZGV2LXRvb2xzLWluZm8taGlnaGxpZ2h0XCIsY2hpbGRyZW46W1wiICAgIFwiLCgwLHkuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZS1ibG9jay1qc29uLWtleVwiLGNoaWxkcmVuOidcImRldlwiJ30pLFwiOlwiLFwiIFwiLCgwLHkuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZS1ibG9jay1qc29uLXZhbHVlXCIsY2hpbGRyZW46J1wibmV4dCBkZXYgLS10dXJib3BhY2tcIid9KSxcIixcIl19KSwoMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGUtYmxvY2stbGluZVwiLGNoaWxkcmVuOltcIiAgICBcIiwoMCx5LmpzeCkoXCJzcGFuXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGUtYmxvY2stanNvbi1rZXlcIixjaGlsZHJlbjonXCJidWlsZFwiJ30pLFwiOlwiLFwiIFwiLCgwLHkuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZS1ibG9jay1qc29uLXZhbHVlXCIsY2hpbGRyZW46J1wibmV4dCBidWlsZFwiJ30pLFwiLFwiXX0pLCgwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZS1ibG9jay1saW5lXCIsY2hpbGRyZW46W1wiICAgIFwiLCgwLHkuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZS1ibG9jay1qc29uLWtleVwiLGNoaWxkcmVuOidcInN0YXJ0XCInfSksXCI6XCIsXCIgXCIsKDAseS5qc3gpKFwic3BhblwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWpzb24tdmFsdWVcIixjaGlsZHJlbjonXCJuZXh0IHN0YXJ0XCInfSksXCIsXCJdfSksKDAseS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWxpbmVcIixjaGlsZHJlbjpbXCIgICAgXCIsKDAseS5qc3gpKFwic3BhblwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWpzb24ta2V5XCIsY2hpbGRyZW46J1wibGludFwiJ30pLFwiOlwiLFwiIFwiLCgwLHkuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZS1ibG9jay1qc29uLXZhbHVlXCIsY2hpbGRyZW46J1wibmV4dCBsaW50XCInfSldfSksKDAseS5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGUtYmxvY2stbGluZVwiLGNoaWxkcmVuOlwiICB9XCJ9KSwoMCx5LmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZS1ibG9jay1saW5lXCIsY2hpbGRyZW46XCJ9XCJ9KSwoMCx5LmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZS1ibG9jay1saW5lXCIsY2hpbGRyZW46XCIgIFwifSldfSl9KV19KX0pXX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKSl9KSxuKSl9ZnVuY3Rpb24gdDIoZSl7dmFyIG49ZS5yb3V0ZXJUeXBlO3JldHVybigwLHkuanN4cykoXCJhcnRpY2xlXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWFydGljbGVcIixjaGlsZHJlbjpbKDAseS5qc3hzKShcInBcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tcGFyYWdyYXBoXCIsY2hpbGRyZW46W1wiVGhlIHBhdGhcIixcIiBcIiwoMCx5LmpzeCkoXCJjb2RlXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGVcIixjaGlsZHJlbjp3aW5kb3cubG9jYXRpb24ucGF0aG5hbWV9KSxcIiBcIiwnaXMgbWFya2VkIGFzIFwic3RhdGljXCIgc2luY2UgaXQgd2lsbCBiZSBwcmVyZW5kZXJlZCBkdXJpbmcgdGhlIGJ1aWxkIHRpbWUuJ119KSwoMCx5LmpzeHMpKFwicFwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1wYXJhZ3JhcGhcIixjaGlsZHJlbjpbXCJXaXRoIFN0YXRpYyBSZW5kZXJpbmcsIHJvdXRlcyBhcmUgcmVuZGVyZWQgYXQgYnVpbGQgdGltZSwgb3IgaW4gdGhlIGJhY2tncm91bmQgYWZ0ZXJcIixcIiBcIiwoMCx5LmpzeCkoXCJhXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWxpbmtcIixocmVmOlwicGFnZXNcIj09PW4/XCJodHRwczovL25leHRqcy5vcmcvZG9jcy9wYWdlcy9idWlsZGluZy15b3VyLWFwcGxpY2F0aW9uL2RhdGEtZmV0Y2hpbmcvaW5jcmVtZW50YWwtc3RhdGljLXJlZ2VuZXJhdGlvblwiOlwiaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vZGF0YS1mZXRjaGluZy9pbmNyZW1lbnRhbC1zdGF0aWMtcmVnZW5lcmF0aW9uXCIsdGFyZ2V0OlwiX2JsYW5rXCIscmVsOlwibm9vcGVuZXIgbm9yZWZlcnJlclwiLGNoaWxkcmVuOlwiZGF0YSByZXZhbGlkYXRpb25cIn0pLFwiLlwiXX0pLCgwLHkuanN4KShcInBcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tcGFyYWdyYXBoXCIsY2hpbGRyZW46XCJTdGF0aWMgcmVuZGVyaW5nIGlzIHVzZWZ1bCB3aGVuIGEgcm91dGUgaGFzIGRhdGEgdGhhdCBpcyBub3QgcGVyc29uYWxpemVkIHRvIHRoZSB1c2VyIGFuZCBjYW4gYmUga25vd24gYXQgYnVpbGQgdGltZSwgc3VjaCBhcyBhIHN0YXRpYyBibG9nIHBvc3Qgb3IgYSBwcm9kdWN0IHBhZ2UuXCJ9KV19KX1mdW5jdGlvbiB0NChlKXt2YXIgbj1lLnJvdXRlclR5cGU7cmV0dXJuKDAseS5qc3hzKShcImFydGljbGVcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tYXJ0aWNsZVwiLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwicFwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1wYXJhZ3JhcGhcIixjaGlsZHJlbjpbXCJUaGUgcGF0aFwiLFwiIFwiLCgwLHkuanN4KShcImNvZGVcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZVwiLGNoaWxkcmVuOndpbmRvdy5sb2NhdGlvbi5wYXRobmFtZX0pLFwiIFwiLCdpcyBtYXJrZWQgYXMgXCJkeW5hbWljXCIgc2luY2UgaXQgd2lsbCBiZSByZW5kZXJlZCBmb3IgZWFjaCB1c2VyIGF0JyxcIiBcIiwoMCx5LmpzeCkoXCJzdHJvbmdcIix7Y2hpbGRyZW46XCJyZXF1ZXN0IHRpbWVcIn0pLFwiLlwiXX0pLCgwLHkuanN4KShcInBcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tcGFyYWdyYXBoXCIsY2hpbGRyZW46XCJEeW5hbWljIHJlbmRlcmluZyBpcyB1c2VmdWwgd2hlbiBhIHJvdXRlIGhhcyBkYXRhIHRoYXQgaXMgcGVyc29uYWxpemVkIHRvIHRoZSB1c2VyIG9yIGhhcyBpbmZvcm1hdGlvbiB0aGF0IGNhbiBvbmx5IGJlIGtub3duIGF0IHJlcXVlc3QgdGltZSwgc3VjaCBhcyBjb29raWVzIG9yIHRoZSBVUkwncyBzZWFyY2ggcGFyYW1zLlwifSksXCJwYWdlc1wiPT09bj8oMCx5LmpzeHMpKFwicFwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1wYWdyYXBoXCIsY2hpbGRyZW46W1wiRXhwb3J0aW5nIHRoZVwiLFwiIFwiLCgwLHkuanN4KShcImFcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tbGlua1wiLGhyZWY6XCJodHRwczovL25leHRqcy5vcmcvZG9jcy9wYWdlcy9idWlsZGluZy15b3VyLWFwcGxpY2F0aW9uL2RhdGEtZmV0Y2hpbmcvZ2V0LXNlcnZlci1zaWRlLXByb3BzXCIsdGFyZ2V0OlwiX2JsYW5rXCIscmVsOlwibm9vcGVuZXIgbm9yZWZlcnJlclwiLGNoaWxkcmVuOlwiZ2V0U2VydmVyU2lkZVByb3BzXCJ9KSxcIiBcIixcImZ1bmN0aW9uIHdpbGwgb3B0IHRoZSByb3V0ZSBpbnRvIGR5bmFtaWMgcmVuZGVyaW5nLiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGJ5IHRoZSBzZXJ2ZXIgb24gZXZlcnkgcmVxdWVzdC5cIl19KTooMCx5LmpzeHMpKFwicFwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1wYXJhZ3JhcGhcIixjaGlsZHJlbjpbXCJEdXJpbmcgcmVuZGVyaW5nLCBpZiBhXCIsXCIgXCIsKDAseS5qc3gpKFwiYVwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1saW5rXCIsaHJlZjpcImh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9idWlsZGluZy15b3VyLWFwcGxpY2F0aW9uL3JlbmRlcmluZy9zZXJ2ZXItY29tcG9uZW50cyNkeW5hbWljLWFwaXNcIix0YXJnZXQ6XCJfYmxhbmtcIixyZWw6XCJub29wZW5lciBub3JlZmVycmVyXCIsY2hpbGRyZW46XCJEeW5hbWljIEFQSVwifSksXCIgXCIsXCJvciBhXCIsXCIgXCIsKDAseS5qc3gpKFwiYVwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1saW5rXCIsaHJlZjpcImh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9hcGktcmVmZXJlbmNlL2Z1bmN0aW9ucy9mZXRjaFwiLHRhcmdldDpcIl9ibGFua1wiLHJlbDpcIm5vb3BlbmVyIG5vcmVmZXJyZXJcIixjaGlsZHJlbjpcImZldGNoXCJ9KSxcIiBcIixcIm9wdGlvbiBvZlwiLFwiIFwiLCgwLHkuanN4KShcImNvZGVcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZVwiLGNoaWxkcmVuOlwieyBjYWNoZTogJ25vLXN0b3JlJyB9XCJ9KSxcIiBcIixcImlzIGRpc2NvdmVyZWQsIE5leHQuanMgd2lsbCBzd2l0Y2ggdG8gZHluYW1pY2FsbHkgcmVuZGVyaW5nIHRoZSB3aG9sZSByb3V0ZS5cIl19KV19KX12YXIgdDU9e3BhZ2VzOntzdGF0aWM6XCJodHRwczovL25leHRqcy5vcmcvZG9jcy9wYWdlcy9idWlsZGluZy15b3VyLWFwcGxpY2F0aW9uL3JlbmRlcmluZy9zdGF0aWMtc2l0ZS1nZW5lcmF0aW9uXCIsZHluYW1pYzpcImh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL3BhZ2VzL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vcmVuZGVyaW5nL3NlcnZlci1zaWRlLXJlbmRlcmluZ1wifSxhcHA6e3N0YXRpYzpcImh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9idWlsZGluZy15b3VyLWFwcGxpY2F0aW9uL3JlbmRlcmluZy9zZXJ2ZXItY29tcG9uZW50cyNzdGF0aWMtcmVuZGVyaW5nLWRlZmF1bHRcIixkeW5hbWljOlwiaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vcmVuZGVyaW5nL3NlcnZlci1jb21wb25lbnRzI2R5bmFtaWMtcmVuZGVyaW5nXCJ9fTtmdW5jdGlvbiB0MyhlKXt2YXIgbix0LHI9ZS5yb3V0ZVR5cGUsbz1lLnJvdXRlclR5cGUsYT1mdW5jdGlvbihlLG4pe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHQscixvPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSxuLmluZGV4T2YodCk+PTB8fChvW3RdPWVbdF0pO3JldHVybiBvfShlLG4pO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl0PWFbcl0sIShuLmluZGV4T2YodCk+PTApJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSx0KSYmKG9bdF09ZVt0XSl9cmV0dXJuIG99KGUsW1wicm91dGVUeXBlXCIsXCJyb3V0ZXJUeXBlXCJdKSxpPVwiU3RhdGljXCI9PT1yLGw9aT90NVtvXS5zdGF0aWM6dDVbb10uZHluYW1pYztyZXR1cm4oMCx5LmpzeCkodDAueCwobj1mdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHt0aXRsZTpcIlwiLmNvbmNhdChyLFwiIFJvdXRlXCIpLGxlYXJuTW9yZUxpbms6bH0sYSksdD10PXtjaGlsZHJlbjppPygwLHkuanN4KSh0Mix7cm91dGVyVHlwZTpvfSk6KDAseS5qc3gpKHQ0LHtyb3V0ZXJUeXBlOm99KX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKSl9KSxuKSl9ZnVuY3Rpb24gdDYoKXtyZXR1cm4oMCx5LmpzeCkoXCJzdmdcIix7eG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHdpZHRoOlwiMTZcIixoZWlnaHQ6XCIxNlwiLHZpZXdCb3g6XCIwIDAgMjAgMjBcIixmaWxsOlwibm9uZVwiLGNoaWxkcmVuOigwLHkuanN4KShcInBhdGhcIix7ZmlsbDpcImN1cnJlbnRDb2xvclwiLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGQ6XCJtOS43IDMuNzM2LjA0NS0uMjM2aC41MWwuMDQ0LjIzNmEyLjAyNCAyLjAyNCAwIDAgMCAxLjMzNCAxLjUzNmMuMTkuMDY2LjM3NS4xNDMuNTU0LjIzLjYxOC4zMDEgMS4zOTguMjkgMi4wMy0uMTQzbC4xOTktLjEzNi4zNi4zNjEtLjEzNS4xOTlhMi4wMjQgMi4wMjQgMCAwIDAtLjE0MyAyLjAzYy4wODcuMTc5LjE2NC4zNjQuMjMuNTU0LjIyNC42NS43ODMgMS4xOTIgMS41MzYgMS4zMzRsLjIzNi4wNDR2LjUxbC0uMjM2LjA0NGEyLjAyNCAyLjAyNCAwIDAgMC0xLjUzNiAxLjMzNCA0Ljk1IDQuOTUgMCAwIDEtLjIzLjU1NCAyLjAyNCAyLjAyNCAwIDAgMCAuMTQzIDIuMDNsLjEzNi4xOTktLjM2MS4zNi0uMTk5LS4xMzVhMi4wMjQgMi4wMjQgMCAwIDAtMi4wMy0uMTQzYy0uMTc5LjA4Ny0uMzY0LjE2NC0uNTU0LjIzYTIuMDI0IDIuMDI0IDAgMCAwLTEuMzM0IDEuNTM2bC0uMDQ0LjIzNmgtLjUxbC0uMDQ0LS4yMzZhMi4wMjQgMi4wMjQgMCAwIDAtMS4zMzQtMS41MzYgNC45NTIgNC45NTIgMCAwIDEtLjU1NC0uMjMgMi4wMjQgMi4wMjQgMCAwIDAtMi4wMy4xNDNsLS4xOTkuMTM2LS4zNi0uMzYxLjEzNS0uMTk5YTIuMDI0IDIuMDI0IDAgMCAwIC4xNDMtMi4wMyA0Ljk1OCA0Ljk1OCAwIDAgMS0uMjMtLjU1NCAyLjAyNCAyLjAyNCAwIDAgMC0xLjUzNi0xLjMzNGwtLjIzNi0uMDQ0di0uNTFsLjIzNi0uMDQ0YTIuMDI0IDIuMDI0IDAgMCAwIDEuNTM2LTEuMzM0IDQuOTYgNC45NiAwIDAgMSAuMjMtLjU1NCAyLjAyNCAyLjAyNCAwIDAgMC0uMTQzLTIuMDNsLS4xMzYtLjE5OS4zNjEtLjM2LjE5OS4xMzVhMi4wMjQgMi4wMjQgMCAwIDAgMi4wMy4xNDNjLjE3OS0uMDg3LjM2NC0uMTY0LjU1NC0uMjNhMi4wMjQgMi4wMjQgMCAwIDAgMS4zMzQtMS41MzZaTTguNSAyaDNsLjI3NCAxLjQ2Yy4wMzQuMTg1LjE3LjMzMy4zNDguMzk0LjI0OC4wODYuNDkuMTg2LjcyMi4zLjE3LjA4Mi4zNy4wNzQuNTI2LS4wMzNsMS4yMjYtLjgzOSAyLjEyMiAyLjEyMi0uODQgMS4yMjZhLjUyNC41MjQgMCAwIDAtLjAzMi41MjZjLjExNC4yMzMuMjE0LjQ3NC4zLjcyMi4wNjEuMTc3LjIxLjMxNC4zOTQuMzQ4TDE4IDguNXYzbC0xLjQ2LjI3NGEuNTI0LjUyNCAwIDAgMC0uMzk0LjM0OCA2LjQ3IDYuNDcgMCAwIDEtLjMuNzIyLjUyNC41MjQgMCAwIDAgLjAzMy41MjZsLjgzOSAxLjIyNi0yLjEyMiAyLjEyMi0xLjIyNi0uODRhLjUyNC41MjQgMCAwIDAtLjUyNi0uMDMyIDYuNDc3IDYuNDc3IDAgMCAxLS43MjIuMy41MjQuNTI0IDAgMCAwLS4zNDguMzk0TDExLjUgMThoLTNsLS4yNzQtMS40NmEuNTI0LjUyNCAwIDAgMC0uMzQ4LS4zOTQgNi40NzcgNi40NzcgMCAwIDEtLjcyMi0uMy41MjQuNTI0IDAgMCAwLS41MjYuMDMzbC0xLjIyNi44MzktMi4xMjItMi4xMjIuODQtMS4yMjZhLjUyNC41MjQgMCAwIDAgLjAzMi0uNTI2IDYuNDUzIDYuNDUzIDAgMCAxLS4zLS43MjIuNTI0LjUyNCAwIDAgMC0uMzk0LS4zNDhMMiAxMS41di0zbDEuNDYtLjI3NGEuNTI0LjUyNCAwIDAgMCAuMzk0LS4zNDhjLjA4Ni0uMjQ4LjE4Ni0uNDkuMy0uNzIyYS41MjQuNTI0IDAgMCAwLS4wMzMtLjUyNmwtLjgzOS0xLjIyNiAyLjEyMi0yLjEyMiAxLjIyNi44NGEuNTI0LjUyNCAwIDAgMCAuNTI2LjAzMiA2LjQ2IDYuNDYgMCAwIDEgLjcyMi0uMy41MjQuNTI0IDAgMCAwIC4zNDgtLjM5NEw4LjUgMlptMyA4YTEuNSAxLjUgMCAxIDEtMyAwIDEuNSAxLjUgMCAwIDEgMyAwWm0xLjUgMGEzIDMgMCAxIDEtNiAwIDMgMyAwIDAgMSA2IDBaXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KX0pfWZ1bmN0aW9uIHQ5KCl7cmV0dXJuKDAseS5qc3gpKFwic3ZnXCIse3htbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIix3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTZcIixmaWxsOlwibm9uZVwiLGNoaWxkcmVuOigwLHkuanN4KShcInBhdGhcIix7ZmlsbDpcImN1cnJlbnRDb2xvclwiLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGQ6XCJtLjE5MSAyLjA2My41Ni40OTggMTMuNSAxMiAuNTYxLjQ5OC45OTctMS4xMjEtLjU2LS40OTgtMS44MS0xLjYwOCAyLjg4LTMuMzQydi0uOThsLTMuMjA0LTMuNzJDMTAuNjQ1LjkyMyA2LjM2NS42ODYgMy41OTQgMy4wOEwxLjc0OCAxLjQ0IDEuMTg4Ljk0LjE5IDIuMDYzWk0xNC43NjEgOGwtMi40NDIgMi44MzYtMS42NS0xLjQ2NmEzLjAwMSAzLjAwMSAwIDAgMC00LjM0Mi0zLjg2bC0xLjYtMS40MjJhNS4yNTMgNS4yNTMgMCAwIDEgNy4yNTEuNjgyTDE0Ljc2IDhaTTcuNTI2IDYuNTc2bDEuOTQyIDEuNzI3YTEuNDk5IDEuNDk5IDAgMCAwLTEuOTQyLTEuNzI3Wm0tNy44NDUuOTM1IDEuNzIyLTIgMS4xMzcuOTc5TDEuMjQgOGwyLjc4MiAzLjIzQTUuMjUgNS4yNSAwIDAgMCA5LjkgMTIuNzAzbC41NCAxLjRhNi43NTEgNi43NTEgMCAwIDEtNy41NTUtMS44OTJMLS4zMTggOC40OXYtLjk4WlwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSl9KX1mdW5jdGlvbiB0OCgpe3JldHVybigwLHkuanN4cykoXCJzdmdcIix7eG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHdpZHRoOlwiMjBcIixoZWlnaHQ6XCIxNlwiLHZpZXdCb3g6XCIwIDAgMTYgMTZcIixmaWxsOlwibm9uZVwiLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJnXCIse2NsaXBQYXRoOlwidXJsKCNsaWdodF9pY29uX2NsaXBfcGF0aClcIixjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2ZpbGw6XCJjdXJyZW50Q29sb3JcIixmaWxsUnVsZTpcImV2ZW5vZGRcIixkOlwiTTguNzUuNzVWMGgtMS41djJoMS41Vi43NVpNMy4yNiA0LjMybC0uNTMtLjUzLS4zNTQtLjM1My0uNTMtLjUzIDEuMDYtMS4wNjEuNTMuNTMuMzU0LjM1NC41My41My0xLjA2IDEuMDZabTguNDItMS4wNi41My0uNTMuMzUzLS4zNTQuNTMtLjUzIDEuMDYxIDEuMDYtLjUzLjUzLS4zNTQuMzU0LS41My41My0xLjA2LTEuMDZaTTggMTEuMjVhMy4yNSAzLjI1IDAgMSAwIDAtNi41IDMuMjUgMy4yNSAwIDAgMCAwIDYuNVptMCAxLjVhNC43NSA0Ljc1IDAgMSAwIDAtOS41IDQuNzUgNC43NSAwIDAgMCAwIDkuNVptNi01LjVoMnYxLjVoLTJ2LTEuNVptLTEzLjI1IDBIMHYxLjVoMnYtMS41SC43NVptMS42MiA1LjMyLS41My41MyAxLjA2IDEuMDYuNTMtLjUzLjM1NC0uMzUzLjUzLS41My0xLjA2LTEuMDYxLS41My41My0uMzU0LjM1NFptMTAuMiAxLjA2LjUzLjUzIDEuMDYtMS4wNi0uNTMtLjUzLS4zNTQtLjM1NC0uNTMtLjUzLTEuMDYgMS4wNi41My41My4zNTMuMzU0Wk04Ljc1IDE0djJoLTEuNXYtMmgxLjVaXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KX0pLCgwLHkuanN4KShcImRlZnNcIix7Y2hpbGRyZW46KDAseS5qc3gpKFwiY2xpcFBhdGhcIix7aWQ6XCJsaWdodF9pY29uX2NsaXBfcGF0aFwiLGNoaWxkcmVuOigwLHkuanN4KShcInBhdGhcIix7ZmlsbDpcImN1cnJlbnRDb2xvclwiLGQ6XCJNMCAwaDE2djE2SDB6XCJ9KX0pfSldfSl9ZnVuY3Rpb24gdDcoKXtyZXR1cm4oMCx5LmpzeCkoXCJzdmdcIix7XCJkYXRhLXRlc3RpZFwiOlwiZ2Vpc3QtaWNvblwiLGhlaWdodDpcIjE2XCIsc3Ryb2tlTGluZWpvaW46XCJyb3VuZFwiLHZpZXdCb3g6XCIwIDAgMTYgMTZcIix3aWR0aDpcIjE2XCIsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTEuNSA4LjAwMDA1QzEuNSA1LjUzMDg5IDIuOTkxOTggMy40MDkzMiA1LjEyMzQ5IDIuNDg4ODlDNC44ODEzNiAzLjE5ODU4IDQuNzUgMy45NTkzNiA0Ljc1IDQuNzUwMUM0Ljc1IDguNjE2MDkgNy44ODQwMSAxMS43NTAxIDExLjc1IDExLjc1MDFDMTEuODk5NSAxMS43NTAxIDEyLjA0OCAxMS43NDU0IDEyLjE5NTMgMTEuNzM2MUMxMS4wOTU1IDEzLjExNjQgOS40MDA0NyAxNC4wMDAxIDcuNSAxNC4wMDAxQzQuMTg2MjkgMTQuMDAwMSAxLjUgMTEuMzEzOCAxLjUgOC4wMDAwNVpNNi40MTcwNiAwLjU3Nzc1OUMyLjc4Nzg0IDEuMTAzMSAwIDQuMjI1MzYgMCA4LjAwMDA1QzAgMTIuMTQyMiAzLjM1Nzg2IDE1LjUwMDEgNy41IDE1LjUwMDFDMTAuNTc5OCAxNS41MDAxIDEzLjIyNDQgMTMuNjQzOCAxNC4zNzkyIDEwLjk5MjFMMTMuNDU4OCA5Ljk3OTdDMTIuOTIxOCAxMC4xNTUgMTIuMzQ3OCAxMC4yNTAxIDExLjc1IDEwLjI1MDFDOC43MTI0MyAxMC4yNTAxIDYuMjUgNy43ODc2NyA2LjI1IDQuNzUwMUM2LjI1IDMuNjM0MzEgNi41ODE0NiAyLjU5ODIzIDcuMTUxMTEgMS43MzIxN0w2LjQxNzA2IDAuNTc3NzU5Wk0xMy4yNSAxVjEuNzVWMi43NUwxNC4yNSAyLjc1SDE1VjQuMjVIMTQuMjVIMTMuMjVWNS4yNVY2SDExLjc1VjUuMjVWNC4yNUgxMC43NUwxMCA0LjI1VjIuNzVIMTAuNzVMMTEuNzUgMi43NVYxLjc1VjFIMTMuMjVaXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSl9KX1mdW5jdGlvbiByZSgpe3JldHVybigwLHkuanN4KShcInN2Z1wiLHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTZcIixzdHJva2VMaW5lam9pbjpcInJvdW5kXCIsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtmaWxsOlwiY3VycmVudENvbG9yXCIsZmlsbFJ1bGU6XCJldmVub2RkXCIsZDpcIk0wIDJhMSAxIDAgMCAxIDEtMWgxNGExIDEgMCAwIDEgMSAxdjguNWExIDEgMCAwIDEtMSAxSDguNzV2M2gxLjc1VjE2aC01di0xLjVoMS43NXYtM0gxYTEgMSAwIDAgMS0xLTFWMlptMS41LjVWMTBoMTNWMi41aC0xM1pcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pfSl9ZnVuY3Rpb24gcm4oZSxuKXsobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxyPUFycmF5KG4pO3Q8bjt0Kyspclt0XT1lW3RdO3JldHVybiByfWZ1bmN0aW9uIHJ0KGUsbil7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLCFufHxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShlLG4pfHxmdW5jdGlvbihlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBybihlLG4pO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20odCk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiBybihlLG4pfX0oZSxuKXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX12YXIgcnI9cHJvY2Vzcy5lbnYuX19ORVhUX0RFVl9JTkRJQ0FUT1JfUE9TSVRJT058fFwiYm90dG9tLWxlZnRcIixybz1cIl9fbmV4dGpzX2hpZGVfc2hvcnRjdXRcIjtmdW5jdGlvbiByYShlLG4peyhudWxsPT1ufHxuPmUubGVuZ3RoKSYmKG49ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLHI9QXJyYXkobik7dDxuO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9ZnVuY3Rpb24gcmkoZSxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0odD1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2godC52YWx1ZSksIW58fGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KGUsbil8fHJzKGUsbil8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gcmwoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIHJhKGUpfShlKXx8ZnVuY3Rpb24oZSl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lW1wiQEBpdGVyYXRvclwiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oZSl8fHJzKGUpfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX1mdW5jdGlvbiBycyhlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiByYShlLG4pO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20odCk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiByYShlLG4pfX1mdW5jdGlvbiByYygpe3ZhciBlLG4sdD0oZT1bXCJcXG4gIC5zaG9ydGN1dC1yZWNvcmRlciB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICBnYXA6IDhweDtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjay1zYW5zKTtcXG5cXG4gICAgLnNob3J0Y3V0LXJlY29yZGVyLWJ1dHRvbiB7XFxuICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgIGdhcDogNHB4O1xcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCB2YXIoLS1jb2xvci1ncmF5LTUwMCk7XFxuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1sZyk7XFxuICAgICAgcGFkZGluZzogNnB4IDhweDtcXG4gICAgICBmb250LXdlaWdodDogNDAwO1xcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNCk7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDE1MG1zIHZhcigtLXRpbWluZy1zd2lmdCk7XFxuXFxuICAgICAgJltkYXRhLWhhcy1zaG9ydGN1dD0ndHJ1ZSddIHtcXG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktYWxwaGEtNDAwKTtcXG5cXG4gICAgICAgICY6aG92ZXIge1xcbiAgICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLWdyYXktNTAwKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuXFxuICAgICAgJjpob3ZlciB7XFxuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLWdyYXktNjAwKTtcXG4gICAgICB9XFxuXFxuICAgICAgJjo6cGxhY2Vob2xkZXIge1xcbiAgICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktOTAwKTtcXG4gICAgICB9XFxuXFxuICAgICAgJltkYXRhLXByaXN0aW5lPSdmYWxzZSddOjpwbGFjZWhvbGRlciB7XFxuICAgICAgICBjb2xvcjogdHJhbnNwYXJlbnQ7XFxuICAgICAgfVxcblxcbiAgICAgICY6Zm9jdXMtdmlzaWJsZSB7XFxuICAgICAgICBvdXRsaW5lOiB2YXIoLS1mb2N1cy1yaW5nKTtcXG4gICAgICAgIG91dGxpbmUtb2Zmc2V0OiAtMXB4O1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICBrYmQge1xcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2stc2Fucyk7XFxuICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS0yMDApO1xcbiAgICAgIG1pbi13aWR0aDogMjBweDtcXG4gICAgICBoZWlnaHQ6IDIwcHg7XFxuICAgICAgZm9udC1zaXplOiAxNHB4O1xcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG5cXG4gICAgICAmW2RhdGEtc3ltYm9sPSdmYWxzZSddIHtcXG4gICAgICAgIHBhZGRpbmc6IDAgNHB4O1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICAuc2hvcnRjdXQtcmVjb3JkZXItY2xlYXItYnV0dG9uIHtcXG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICAgICAgd2lkdGg6IDIwcHg7XFxuICAgICAgaGVpZ2h0OiAyMHB4O1xcbiAgICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XFxuICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAxNTBtcyB2YXIoLS10aW1pbmctc3dpZnQpO1xcblxcbiAgICAgICY6aG92ZXIge1xcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS0zMDApO1xcbiAgICAgIH1cXG5cXG4gICAgICAmOmZvY3VzLXZpc2libGUge1xcbiAgICAgICAgb3V0bGluZTogdmFyKC0tZm9jdXMtcmluZyk7XFxuICAgICAgfVxcblxcbiAgICAgIHN2ZyB7XFxuICAgICAgICB3aWR0aDogMTRweDtcXG4gICAgICAgIGhlaWdodDogMTRweDtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cXG4gIC5zaG9ydGN1dC1yZWNvcmRlci1rZXlzIHtcXG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBnYXA6IDJweDtcXG4gIH1cXG5cXG4gIC5zaG9ydGN1dC1yZWNvcmRlci10b29sdGlwIHtcXG4gICAgLS1nYXA6IDhweDtcXG4gICAgLS1iYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iYWNrZ3JvdW5kKTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMTAwKTtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE0KTtcXG4gICAgcGFkZGluZzogNHB4IDhweDtcXG4gICAgYm9yZGVyLXJhZGl1czogOHB4O1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIGJvdHRvbTogY2FsYygxMDAlICsgdmFyKC0tZ2FwKSk7XFxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gICAgb3BhY2l0eTogMDtcXG4gICAgc2NhbGU6IDAuOTY7XFxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgICB0cmFuc2l0aW9uOlxcbiAgICAgIG9wYWNpdHkgMTUwbXMgdmFyKC0tdGltaW5nLXN3aWZ0KSxcXG4gICAgICBzY2FsZSAxNTBtcyB2YXIoLS10aW1pbmctc3dpZnQpO1xcblxcbiAgICAmW2RhdGEtc2hvdz0ndHJ1ZSddIHtcXG4gICAgICBvcGFjaXR5OiAxO1xcbiAgICAgIHNjYWxlOiAxO1xcbiAgICB9XFxuXFxuICAgIHN2ZyB7XFxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcXG4gICAgICBib3R0b206IC02cHg7XFxuICAgICAgbGVmdDogNTAlO1xcbiAgICB9XFxuXFxuICAgIC5zaG9ydGN1dC1yZWNvcmRlci1zdGF0dXMge1xcbiAgICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgICBnYXA6IDZweDtcXG4gICAgfVxcblxcbiAgICAuc2hvcnRjdXQtcmVjb3JkZXItc3RhdHVzLWljb24ge1xcbiAgICAgIHdpZHRoOiA3cHg7XFxuICAgICAgaGVpZ2h0OiA3cHg7XFxuICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLXJlZC03MDApO1xcblxcbiAgICAgICZbZGF0YS1zdWNjZXNzPSd0cnVlJ10ge1xcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JlZW4tNzAwKTtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIl0sbnx8KG49ZS5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUobil9fSkpKTtyZXR1cm4gcmM9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sdH12YXIgcnU9W1wiTWV0YVwiLFwiQ29udHJvbFwiLFwiQ3RybFwiLFwiQWx0XCIsXCJPcHRpb25cIixcIlNoaWZ0XCJdO2Z1bmN0aW9uIHJkKGUpe3ZhciBuPWUudmFsdWUsdD1lLm9uQ2hhbmdlLHI9cmkoKDAseC51c2VTdGF0ZSkoITEpLDIpLG89clswXSxhPXJbMV0saT1yaSgoMCx4LnVzZVN0YXRlKShudWxsIT1uP246W10pLDIpLGw9aVswXSxzPWlbMV0sYz1yaSgoMCx4LnVzZVN0YXRlKSghMSksMiksdT1jWzBdLGQ9Y1sxXSxmPSgwLHgudXNlUmVmKShudWxsKSxwPSgwLHgudXNlUmVmKShudWxsKSxoPSEhbnx8bC5sZW5ndGg+MDtmdW5jdGlvbiBnKCl7dmFyIGU7bnVsbD09KGU9cC5jdXJyZW50KXx8ZS5mb2N1cygpLHMoW10pLGQoITEpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXthKCEwKX0pLHQobnVsbCl9ZnVuY3Rpb24gbSgpe3ZhciBlO2YuY3VycmVudCYmY2xlYXJUaW1lb3V0KGYuY3VycmVudCksYSghMCksbnVsbD09KGU9cC5jdXJyZW50KXx8ZS5mb2N1cygpfXJldHVybigwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwic2hvcnRjdXQtcmVjb3JkZXJcIixjaGlsZHJlbjpbKDAseS5qc3hzKShcImJ1dHRvblwiLHtjbGFzc05hbWU6XCJzaG9ydGN1dC1yZWNvcmRlci1idXR0b25cIixyZWY6cCxvbkNsaWNrOm0sb25Gb2N1czptLG9uQmx1cjpmdW5jdGlvbigpe2QoITEpLGEoITEpfSxvbktleURvd246ZnVuY3Rpb24oZSl7ZS50YXJnZXQ9PT1wLmN1cnJlbnQmJlwiVGFiXCIhPT1lLmtleSYmKGYuY3VycmVudCYmY2xlYXJUaW1lb3V0KGYuY3VycmVudCksb3x8YSghMCksMyE9PWwubGVuZ3RoJiYoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCkscyhmdW5jdGlvbih0KXtpZih0LmluY2x1ZGVzKGUua2V5KSlyZXR1cm4gdDtpZighcnUuaW5jbHVkZXMoZS5rZXkpKXt2YXIgcj10LmZpbmRJbmRleChmdW5jdGlvbihlKXtyZXR1cm4hcnUuaW5jbHVkZXMoZSl9KTtpZigtMSE9PXIpe3ZhciBvPXJsKHQpO3JldHVybiBvW3JdPWUua2V5LG4obyksb312YXIgYT1ybCh0KS5jb25jYXQoW2Uua2V5XSk7cmV0dXJuIG4oYSksYX1mb3IodmFyIGk9cmwodCksbD1ydS5pbmRleE9mKGUua2V5KSxzPTAsYz0wO2M8aS5sZW5ndGg7YysrKWlmKHJ1LmluY2x1ZGVzKGlbY10pKXtpZihsPHJ1LmluZGV4T2YoaVtjXSkpe3M9YzticmVha31zPWMrMX1lbHNlIGJyZWFrO3JldHVybiBpLnNwbGljZShzLDAsZS5rZXkpLG4oaSksaX0pKSk7ZnVuY3Rpb24gbihlKXtmLmN1cnJlbnQ9d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtkKCEwKSx0KGUuam9pbihcIitcIikpLGYuY3VycmVudD13aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2EoITEpfSwxZTMpfSwxODApfX0sXCJkYXRhLWhhcy1zaG9ydGN1dFwiOmgsXCJkYXRhLXNob3J0Y3V0LXJlY29yZGVyXCI6XCJ0cnVlXCIsY2hpbGRyZW46W2g/KDAseS5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTpcInNob3J0Y3V0LXJlY29yZGVyLWtleXNcIixjaGlsZHJlbjpsLm1hcChmdW5jdGlvbihlKXtyZXR1cm4oMCx5LmpzeCkocnAse2NoaWxkcmVuOmV9LGUpfSl9KTpcIlJlY29yZCBTaG9ydGN1dFwiLGgmJigwLHkuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJzaG9ydGN1dC1yZWNvcmRlci1jbGVhci1idXR0b25cIixyb2xlOlwiYnV0dG9uXCIsb25DbGljazpnLG9uRm9jdXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCl9LG9uS2V5RG93bjpmdW5jdGlvbihlKXsoXCJFbnRlclwiPT09ZS5rZXl8fFwiIFwiPT09ZS5rZXkpJiYoZygpLGUuc3RvcFByb3BhZ2F0aW9uKCkpfSxcImFyaWEtbGFiZWxcIjpcIkNsZWFyIHNob3J0Y3V0XCIsdGFiSW5kZXg6MCxjaGlsZHJlbjooMCx5LmpzeCkocmcse30pfSldfSksKDAseS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJzaG9ydGN1dC1yZWNvcmRlci10b29sdGlwXCIsXCJkYXRhLXNob3dcIjpvLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcInNob3J0Y3V0LXJlY29yZGVyLXN0YXR1c1wiLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwic2hvcnRjdXQtcmVjb3JkZXItc3RhdHVzLWljb25cIixcImRhdGEtc3VjY2Vzc1wiOnV9KSx1P1wiU2hvcnRjdXQgc2V0XCI6XCJSZWNvcmRpbmdcIl19KSwoMCx5LmpzeCkocmYse30pXX0pXX0pfWZ1bmN0aW9uIHJmKCl7cmV0dXJuKDAseS5qc3gpKFwic3ZnXCIse2ZpbGw6XCJub25lXCIsaGVpZ2h0OlwiNlwiLHZpZXdCb3g6XCIwIDAgMTQgNlwiLHdpZHRoOlwiMTRcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtkOlwiTTEzLjgyODQgMEgwLjE3MTU3QzAuNzAyMDAzIDAgMS4yMTA3MSAwLjIxMDcxNCAxLjU4NTc4IDAuNTg1Nzg3TDUuNTg1NzggNC41ODU3OUM2LjM2NjgzIDUuMzY2ODQgNy42MzMxNiA1LjM2NjgzIDguNDE0MjEgNC41ODU3OUwxMi40MTQyIDAuNTg1Nzg2QzEyLjc4OTMgMC4yMTA3MTQgMTMuMjk4IDAgMTMuODI4NCAwWlwiLGZpbGw6XCJ2YXIoLS1iYWNrZ3JvdW5kKVwifSl9KX1mdW5jdGlvbiBycChlKXt2YXIgbj1lLmNoaWxkcmVuLHQ9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2VcIk1ldGFcIjpyZXR1cm4oMCx5LmpzeCkocmgse30pO2Nhc2VcIkFsdFwiOmNhc2VcIk9wdGlvblwiOnJldHVyblwi4oylXCI7Y2FzZVwiQ29udHJvbFwiOmNhc2VcIkN0cmxcIjpyZXR1cm5cIkN0cmxcIjtjYXNlXCJTaGlmdFwiOnJldHVyblwi4oenXCI7Y2FzZVwiRW50ZXJcIjpyZXR1cm5cIuKPjlwiO2Nhc2VcIkVzY2FwZVwiOmNhc2VcIkVzY1wiOnJldHVyblwiRXNjXCI7Y2FzZVwiIFwiOmNhc2VcIlNwYWNlXCI6Y2FzZVwiU3BhY2ViYXJcIjpyZXR1cm5cIlNwYWNlXCI7Y2FzZVwiQXJyb3dVcFwiOnJldHVyblwi4oaRXCI7Y2FzZVwiQXJyb3dEb3duXCI6cmV0dXJuXCLihpNcIjtjYXNlXCJBcnJvd0xlZnRcIjpyZXR1cm5cIuKGkFwiO2Nhc2VcIkFycm93UmlnaHRcIjpyZXR1cm5cIuKGklwiO2Nhc2VcIlRhYlwiOnJldHVyblwiVGFiXCI7Y2FzZVwiQmFja3NwYWNlXCI6cmV0dXJuXCLijKtcIjtjYXNlXCJEZWxldGVcIjpyZXR1cm5cIuKMplwiO2RlZmF1bHQ6aWYoMT09PW4ubGVuZ3RoKXJldHVybiBuLnRvVXBwZXJDYXNlKCk7cmV0dXJuIG59fShuKSxyPVwic3RyaW5nXCI9PXR5cGVvZiB0JiYxPT09dC5sZW5ndGg7cmV0dXJuKDAseS5qc3gpKFwia2JkXCIse1wiZGF0YS1zeW1ib2xcIjpyLGNoaWxkcmVuOnR9KX1mdW5jdGlvbiByaCgpe3ZhciBlPXJpKCgwLHgudXNlU3RhdGUpKFwiXFx4YTBcIiksMiksbj1lWzBdLHQ9ZVsxXSxyPXJ2KC9eTWFjLyl8fHJ2KC9eaVBob25lLyl8fHJ2KC9eaVBhZC8pfHxydigvXk1hYy8pJiZuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHM+MTtyZXR1cm4oMCx4LnVzZUVmZmVjdCkoZnVuY3Rpb24oKXshMD09PXImJnQoXCLijJhcIiksITE9PT1yJiZ0KFwiQ3RybFwiKX0sW3JdKSwoMCx5LmpzeCkoXCJzcGFuXCIse3N0eWxlOnttaW5XaWR0aDpcIjFlbVwiLGRpc3BsYXk6XCJpbmxpbmUtYmxvY2tcIn0sY2hpbGRyZW46bn0pfWZ1bmN0aW9uIHJnKCl7cmV0dXJuKDAseS5qc3gpKFwic3ZnXCIse2hlaWdodDpcIjE2XCIsc3Ryb2tlTGluZWpvaW46XCJyb3VuZFwiLHZpZXdCb3g6XCIwIDAgMTYgMTZcIix3aWR0aDpcIjE2XCIsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTEyLjQ2OTcgMTMuNTMwM0wxMyAxNC4wNjA3TDE0LjA2MDcgMTNMMTMuNTMwMyAxMi40Njk3TDkuMDYwNjUgNy45OTk5OUwxMy41MzAzIDMuNTMwMzJMMTQuMDYwNyAyLjk5OTk5TDEzIDEuOTM5MzNMMTIuNDY5NyAyLjQ2OTY2TDcuOTk5OTkgNi45MzkzM0wzLjUzMDMyIDIuNDY5NjZMMi45OTk5OSAxLjkzOTMzTDEuOTM5MzMgMi45OTk5OUwyLjQ2OTY2IDMuNTMwMzJMNi45MzkzMyA3Ljk5OTk5TDIuNDY5NjYgMTIuNDY5N0wxLjkzOTMzIDEzTDIuOTk5OTkgMTQuMDYwN0wzLjUzMDMyIDEzLjUzMDNMNy45OTk5OSA5LjA2MDY1TDEyLjQ2OTcgMTMuNTMwM1pcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KX0pfXZhciBybT1laShyYygpKTtmdW5jdGlvbiBydihlKXtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZudWxsIT13aW5kb3cubmF2aWdhdG9yP2UudGVzdCh3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtKTp2b2lkIDB9ZnVuY3Rpb24gcmIoZSxuKXsobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxyPUFycmF5KG4pO3Q8bjt0Kyspclt0XT1lW3RdO3JldHVybiByfWZ1bmN0aW9uIHJ5KGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX1mdW5jdGlvbiByeChlLG4pe3JldHVybiBuPW51bGwhPW4/bjp7fSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KG4pKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pLGV9ZnVuY3Rpb24gcncoZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz1mdW5jdGlvbihlLG4pe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHQscixvPXt9LGE9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl0PWFbcl0sbi5pbmRleE9mKHQpPj0wfHwob1t0XT1lW3RdKTtyZXR1cm4gb30oZSxuKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLCEobi5pbmRleE9mKHQpPj0wKSYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsdCkmJihvW3RdPWVbdF0pfXJldHVybiBvfWZ1bmN0aW9uIHJqKGUsbil7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLCFufHxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShlLG4pfHxmdW5jdGlvbihlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiByYihlLG4pO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20odCk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiByYihlLG4pfX0oZSxuKXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX1mdW5jdGlvbiByaygpe3ZhciBlLG4sdD0oZT1bXCJcXG4gIC5wcmVmZXJlbmNlcy1jb250YWluZXIge1xcbiAgICB3aWR0aDogMTAwJTtcXG4gIH1cXG5cXG4gIEBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgICAucHJlZmVyZW5jZXMtY29udGFpbmVyIHtcXG4gICAgICB3aWR0aDogNDgwcHg7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC5wcmVmZXJlbmNlLXNlY3Rpb246Zmlyc3QtY2hpbGQge1xcbiAgICBwYWRkaW5nLXRvcDogMDtcXG4gIH1cXG5cXG4gIC5wcmVmZXJlbmNlLXNlY3Rpb24ge1xcbiAgICBwYWRkaW5nOiAxMnB4IDA7XFxuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgZ2FwOiAyNHB4O1xcbiAgfVxcblxcbiAgLnByZWZlcmVuY2Utc2VjdGlvbjpsYXN0LWNoaWxkIHtcXG4gICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcXG4gIH1cXG5cXG4gIC5wcmVmZXJlbmNlLWhlYWRlciB7XFxuICAgIG1hcmdpbi1ib3R0b206IDA7XFxuICAgIGZsZXg6IDE7XFxuICB9XFxuXFxuICAucHJlZmVyZW5jZS1oZWFkZXIgbGFiZWwge1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTQpO1xcbiAgICBmb250LXdlaWdodDogNTAwO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gICAgbWFyZ2luOiAwO1xcbiAgfVxcblxcbiAgLnByZWZlcmVuY2UtZGVzY3JpcHRpb24ge1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS05MDApO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTQpO1xcbiAgICBtYXJnaW46IDA7XFxuICB9XFxuXFxuICAuc2VsZWN0LWJ1dHRvbixcXG4gIC5hY3Rpb24tYnV0dG9uIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgZ2FwOiA4cHg7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMTAwKTtcXG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS00MDApO1xcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLWxnKTtcXG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE0KTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICAgIHBhZGRpbmc6IDZweCA4cHg7XFxuICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAxNTBtcyB2YXIoLS10aW1pbmctc3dpZnQpO1xcblxcbiAgICAmOmhvdmVyIHtcXG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLWdyYXktNTAwKTtcXG4gICAgfVxcblxcbiAgICBzdmcge1xcbiAgICAgIHdpZHRoOiAxNHB4O1xcbiAgICAgIGhlaWdodDogMTRweDtcXG4gICAgICBvdmVyZmxvdzogdmlzaWJsZTtcXG4gICAgfVxcbiAgfVxcblxcbiAgLnNlbGVjdC1idXR0b24ge1xcbiAgICAmOmZvY3VzLXdpdGhpbiB7XFxuICAgICAgb3V0bGluZTogdmFyKC0tZm9jdXMtcmluZyk7XFxuICAgICAgb3V0bGluZS1vZmZzZXQ6IC0xcHg7XFxuICAgIH1cXG5cXG4gICAgc2VsZWN0IHtcXG4gICAgICBhbGw6IHVuc2V0O1xcbiAgICB9XFxuXFxuICAgIG9wdGlvbiB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xcbiAgICB9XFxuICB9XFxuXFxuICA6Z2xvYmFsKC5pY29uKSB7XFxuICAgIHdpZHRoOiAxOHB4O1xcbiAgICBoZWlnaHQ6IDE4cHg7XFxuICAgIGNvbG9yOiAjNjY2O1xcbiAgfVxcblwiXSxufHwobj1lLnNsaWNlKDApKSxPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUse3Jhdzp7dmFsdWU6T2JqZWN0LmZyZWV6ZShuKX19KSkpO3JldHVybiByaz1mdW5jdGlvbigpe3JldHVybiB0fSx0fWZ1bmN0aW9uIHJBKGUpe3ZhciBuLHQ9ZS5zZXRQb3NpdGlvbixyPWUucG9zaXRpb24sbz1lLmhpZGUsYT1lLnNjYWxlLGk9ZS5zZXRTY2FsZSxsPWUuaGlkZVNob3J0Y3V0LHM9ZS5zZXRIaWRlU2hvcnRjdXQsYz1ydyhlLFtcInNldFBvc2l0aW9uXCIsXCJwb3NpdGlvblwiLFwiaGlkZVwiLFwic2NhbGVcIixcInNldFNjYWxlXCIsXCJoaWRlU2hvcnRjdXRcIixcInNldEhpZGVTaG9ydGN1dFwiXSksdT1yaigoMCx4LnVzZVN0YXRlKShmdW5jdGlvbigpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBsb2NhbFN0b3JhZ2UpcmV0dXJuXCJzeXN0ZW1cIjt2YXIgZT1sb2NhbFN0b3JhZ2UuZ2V0SXRlbShRKTtyZXR1cm5cImRhcmtcIj09PWV8fFwibGlnaHRcIj09PWU/ZTpcInN5c3RlbVwifSgpKSwyKSxkPXVbMF0sZj11WzFdO2Z1bmN0aW9uIHAoZSl7dmFyIG49XCIvX19uZXh0anNfcmVzdGFydF9kZXZcIjtlJiYobj1cIi9fX25leHRqc19yZXN0YXJ0X2Rldj9pbnZhbGlkYXRlUGVyc2lzdGVudENhY2hlXCIpLGZldGNoKG4se21ldGhvZDpcIlBPU1RcIn0pLnRoZW4oZnVuY3Rpb24oKXt9KX1yZXR1cm4oMCx5LmpzeHMpKHQwLngscngocnkoe3RpdGxlOlwiUHJlZmVyZW5jZXNcIn0sYykse2NoaWxkcmVuOlsoMCx5LmpzeCkoXCJoMlwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1zZWN0aW9uLXRpdGxlXCIsY2hpbGRyZW46XCJHZW5lcmFsXCJ9KSwoMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2VzLWNvbnRhaW5lclwiLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2Utc2VjdGlvblwiLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2UtaGVhZGVyXCIsY2hpbGRyZW46WygwLHkuanN4KShcImxhYmVsXCIse2h0bWxGb3I6XCJ0aGVtZVwiLGNoaWxkcmVuOlwiVGhlbWVcIn0pLCgwLHkuanN4KShcInBcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1kZXNjcmlwdGlvblwiLGNoaWxkcmVuOlwiU2VsZWN0IHlvdXIgdGhlbWUgcHJlZmVyZW5jZS5cIn0pXX0pLCgwLHkuanN4cykock8se2lkOlwidGhlbWVcIixuYW1lOlwidGhlbWVcIixwcmVmaXg6KDAseS5qc3gpKHJDLHt0aGVtZTpkfSksdmFsdWU6ZCxvbkNoYW5nZTpmdW5jdGlvbihlKXt2YXIgbj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwibmV4dGpzLXBvcnRhbFwiKTtpZihuKXtpZihmKGUudGFyZ2V0LnZhbHVlKSxcInN5c3RlbVwiPT09ZS50YXJnZXQudmFsdWUpe24uY2xhc3NMaXN0LnJlbW92ZShcImRhcmtcIiksbi5jbGFzc0xpc3QucmVtb3ZlKFwibGlnaHRcIiksbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oUSk7cmV0dXJufVwiZGFya1wiPT09ZS50YXJnZXQudmFsdWU/KG4uY2xhc3NMaXN0LmFkZChcImRhcmtcIiksbi5jbGFzc0xpc3QucmVtb3ZlKFwibGlnaHRcIiksbG9jYWxTdG9yYWdlLnNldEl0ZW0oUSxcImRhcmtcIikpOihuLmNsYXNzTGlzdC5yZW1vdmUoXCJkYXJrXCIpLG4uY2xhc3NMaXN0LmFkZChcImxpZ2h0XCIpLGxvY2FsU3RvcmFnZS5zZXRJdGVtKFEsXCJsaWdodFwiKSl9fSxjaGlsZHJlbjpbKDAseS5qc3gpKFwib3B0aW9uXCIse3ZhbHVlOlwic3lzdGVtXCIsY2hpbGRyZW46XCJTeXN0ZW1cIn0pLCgwLHkuanN4KShcIm9wdGlvblwiLHt2YWx1ZTpcImxpZ2h0XCIsY2hpbGRyZW46XCJMaWdodFwifSksKDAseS5qc3gpKFwib3B0aW9uXCIse3ZhbHVlOlwiZGFya1wiLGNoaWxkcmVuOlwiRGFya1wifSldfSldfSksKDAseS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJwcmVmZXJlbmNlLXNlY3Rpb25cIixjaGlsZHJlbjpbKDAseS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJwcmVmZXJlbmNlLWhlYWRlclwiLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJsYWJlbFwiLHtodG1sRm9yOlwicG9zaXRpb25cIixjaGlsZHJlbjpcIlBvc2l0aW9uXCJ9KSwoMCx5LmpzeCkoXCJwXCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2UtZGVzY3JpcHRpb25cIixjaGlsZHJlbjpcIkFkanVzdCB0aGUgcGxhY2VtZW50IG9mIHlvdXIgZGV2IHRvb2xzLlwifSldfSksKDAseS5qc3hzKShyTyx7aWQ6XCJwb3NpdGlvblwiLG5hbWU6XCJwb3NpdGlvblwiLHZhbHVlOnIsb25DaGFuZ2U6ZnVuY3Rpb24oZSl7dChlLnRhcmdldC52YWx1ZSksbG9jYWxTdG9yYWdlLnNldEl0ZW0oRyxlLnRhcmdldC52YWx1ZSl9LGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJvcHRpb25cIix7dmFsdWU6XCJib3R0b20tbGVmdFwiLGNoaWxkcmVuOlwiQm90dG9tIExlZnRcIn0pLCgwLHkuanN4KShcIm9wdGlvblwiLHt2YWx1ZTpcImJvdHRvbS1yaWdodFwiLGNoaWxkcmVuOlwiQm90dG9tIFJpZ2h0XCJ9KSwoMCx5LmpzeCkoXCJvcHRpb25cIix7dmFsdWU6XCJ0b3AtbGVmdFwiLGNoaWxkcmVuOlwiVG9wIExlZnRcIn0pLCgwLHkuanN4KShcIm9wdGlvblwiLHt2YWx1ZTpcInRvcC1yaWdodFwiLGNoaWxkcmVuOlwiVG9wIFJpZ2h0XCJ9KV19KV19KSwoMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2Utc2VjdGlvblwiLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2UtaGVhZGVyXCIsY2hpbGRyZW46WygwLHkuanN4KShcImxhYmVsXCIse2h0bWxGb3I6XCJzaXplXCIsY2hpbGRyZW46XCJTaXplXCJ9KSwoMCx5LmpzeCkoXCJwXCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2UtZGVzY3JpcHRpb25cIixjaGlsZHJlbjpcIkFkanVzdCB0aGUgc2l6ZSBvZiB5b3VyIGRldiB0b29scy5cIn0pXX0pLCgwLHkuanN4KShyTyx7aWQ6XCJzaXplXCIsbmFtZTpcInNpemVcIix2YWx1ZTphLG9uQ2hhbmdlOmZ1bmN0aW9uKGUpe2koTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSl9LGNoaWxkcmVuOk9iamVjdC5lbnRyaWVzKFMpLm1hcChmdW5jdGlvbihlKXt2YXIgbj1yaihlLDIpLHQ9blswXSxyPW5bMV07cmV0dXJuKDAseS5qc3gpKFwib3B0aW9uXCIse3ZhbHVlOnIsY2hpbGRyZW46dH0sdCl9KX0pXX0pLCgwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1zZWN0aW9uXCIsY2hpbGRyZW46WygwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1oZWFkZXJcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwibGFiZWxcIix7aWQ6XCJoaWRlLWRldi10b29sc1wiLGNoaWxkcmVuOlwiSGlkZSBEZXYgVG9vbHMgZm9yIHRoaXMgc2Vzc2lvblwifSksKDAseS5qc3gpKFwicFwiLHtjbGFzc05hbWU6XCJwcmVmZXJlbmNlLWRlc2NyaXB0aW9uXCIsY2hpbGRyZW46XCJIaWRlIERldiBUb29scyB1bnRpbCB5b3UgcmVzdGFydCB5b3VyIGRldiBzZXJ2ZXIsIG9yIDEgZGF5LlwifSldfSksKDAseS5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2UtY29udHJvbFwiLGNoaWxkcmVuOigwLHkuanN4cykoXCJidXR0b25cIix7XCJhcmlhLWRlc2NyaWJlZGJ5XCI6XCJoaWRlLWRldi10b29sc1wiLG5hbWU6XCJoaWRlLWRldi10b29sc1wiLFwiZGF0YS1oaWRlLWRldi10b29sc1wiOiEwLGNsYXNzTmFtZTpcImFjdGlvbi1idXR0b25cIixvbkNsaWNrOm8sY2hpbGRyZW46WygwLHkuanN4KSh0OSx7fSksKDAseS5qc3gpKFwic3BhblwiLHtjaGlsZHJlbjpcIkhpZGVcIn0pXX0pfSldfSksKDAseS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJwcmVmZXJlbmNlLXNlY3Rpb25cIixjaGlsZHJlbjpbKDAseS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJwcmVmZXJlbmNlLWhlYWRlclwiLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJsYWJlbFwiLHtpZDpcImhpZGUtZGV2LXRvb2xzXCIsY2hpbGRyZW46XCJIaWRlIERldiBUb29scyBzaG9ydGN1dFwifSksKDAseS5qc3gpKFwicFwiLHtjbGFzc05hbWU6XCJwcmVmZXJlbmNlLWRlc2NyaXB0aW9uXCIsY2hpbGRyZW46XCJTZXQgYSBjdXN0b20ga2V5Ym9hcmQgc2hvcnRjdXQgdG8gdG9nZ2xlIHZpc2liaWxpdHkuXCJ9KV19KSwoMCx5LmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1jb250cm9sXCIsY2hpbGRyZW46KDAseS5qc3gpKHJkLHt2YWx1ZTpudWxsIT0obj1udWxsPT1sP3ZvaWQgMDpsLnNwbGl0KFwiK1wiKSk/bjpudWxsLG9uQ2hhbmdlOnN9KX0pXX0pLCgwLHkuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJwcmVmZXJlbmNlLXNlY3Rpb25cIixjaGlsZHJlbjooMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2UtaGVhZGVyXCIsY2hpbGRyZW46WygwLHkuanN4KShcImxhYmVsXCIse2NoaWxkcmVuOlwiRGlzYWJsZSBEZXYgVG9vbHMgZm9yIHRoaXMgcHJvamVjdFwifSksKDAseS5qc3hzKShcInBcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1kZXNjcmlwdGlvblwiLGNoaWxkcmVuOltcIlRvIGRpc2FibGUgdGhpcyBVSSBjb21wbGV0ZWx5LCBzZXRcIixcIiBcIiwoMCx5LmpzeCkoXCJjb2RlXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGVcIixjaGlsZHJlbjpcImRldkluZGljYXRvcnM6IGZhbHNlXCJ9KSxcIiBcIixcImluIHlvdXIgXCIsKDAseS5qc3gpKFwiY29kZVwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlXCIsY2hpbGRyZW46XCJuZXh0LmNvbmZpZ1wifSksXCIgXCIsXCJmaWxlLlwiXX0pXX0pfSldfSksKDAseS5qc3gpKFwiaDJcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tc2VjdGlvbi10aXRsZVwiLGNoaWxkcmVuOlwiRGV2ZWxvcG1lbnQgU2VydmVyXCJ9KSwoMCx5LmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZXMtY29udGFpbmVyXCIsY2hpbGRyZW46KDAseS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJwcmVmZXJlbmNlLXNlY3Rpb25cIixjaGlsZHJlbjpbKDAseS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJwcmVmZXJlbmNlLWhlYWRlclwiLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJsYWJlbFwiLHtpZDpcInJlc3RhcnQtZGV2LXNlcnZlclwiLGNoaWxkcmVuOlwiUmVzdGFydCBEZXYgU2VydmVyXCJ9KSwoMCx5LmpzeCkoXCJwXCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2UtZGVzY3JpcHRpb25cIixjaGlsZHJlbjpcIlJlc3RhcnRzIHRoZSBkZXZlbG9wbWVudCBzZXJ2ZXIgd2l0aG91dCBuZWVkaW5nIHRvIGxlYXZlIHRoZSBicm93c2VyLlwifSldfSksKDAseS5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2UtY29udHJvbFwiLGNoaWxkcmVuOigwLHkuanN4KShcImJ1dHRvblwiLHtcImFyaWEtZGVzY3JpYmVkYnlcIjpcInJlc3RhcnQtZGV2LXNlcnZlclwiLHRpdGxlOlwiUmVzdGFydHMgdGhlIGRldmVsb3BtZW50IHNlcnZlciB3aXRob3V0IG5lZWRpbmcgdG8gbGVhdmUgdGhlIGJyb3dzZXIuXCIsbmFtZTpcInJlc3RhcnQtZGV2LXNlcnZlclwiLFwiZGF0YS1yZXN0YXJ0LWRldi1zZXJ2ZXJcIjohMCxjbGFzc05hbWU6XCJhY3Rpb24tYnV0dG9uXCIsb25DbGljazpmdW5jdGlvbigpe3JldHVybiBwKCExKX0sY2hpbGRyZW46KDAseS5qc3gpKFwic3BhblwiLHtjaGlsZHJlbjpcIlJlc3RhcnRcIn0pfSl9KV19KX0pLHByb2Nlc3MuZW52Ll9fTkVYVF9CVU5ETEVSX0hBU19QRVJTSVNURU5UX0NBQ0hFPygwLHkuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJwcmVmZXJlbmNlcy1jb250YWluZXJcIixjaGlsZHJlbjooMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2Utc2VjdGlvblwiLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2UtaGVhZGVyXCIsY2hpbGRyZW46WygwLHkuanN4KShcImxhYmVsXCIse2lkOlwicmVzZXQtYnVuZGxlci1jYWNoZVwiLGNoaWxkcmVuOlwiUmVzZXQgQnVuZGxlciBDYWNoZVwifSksKDAseS5qc3gpKFwicFwiLHtjbGFzc05hbWU6XCJwcmVmZXJlbmNlLWRlc2NyaXB0aW9uXCIsY2hpbGRyZW46XCJDbGVhcnMgdGhlIGJ1bmRsZXIgY2FjaGUgYW5kIHJlc3RhcnRzIHRoZSBkZXYgc2VydmVyLiBIZWxwZnVsIGlmIHlvdSBhcmUgc2VlaW5nIHN0YWxlIGVycm9ycyBvciBjaGFuZ2VzIGFyZSBub3QgYXBwZWFyaW5nLlwifSldfSksKDAseS5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2UtY29udHJvbFwiLGNoaWxkcmVuOigwLHkuanN4KShcImJ1dHRvblwiLHtcImFyaWEtZGVzY3JpYmVkYnlcIjpcInJlc2V0LWJ1bmRsZXItY2FjaGVcIix0aXRsZTpcIkNsZWFycyB0aGUgYnVuZGxlciBjYWNoZSBhbmQgcmVzdGFydHMgdGhlIGRldiBzZXJ2ZXIuIEhlbHBmdWwgaWYgeW91IGFyZSBzZWVpbmcgc3RhbGUgZXJyb3JzIG9yIGNoYW5nZXMgYXJlIG5vdCBhcHBlYXJpbmcuXCIsbmFtZTpcInJlc2V0LWJ1bmRsZXItY2FjaGVcIixcImRhdGEtcmVzZXQtYnVuZGxlci1jYWNoZVwiOiEwLGNsYXNzTmFtZTpcImFjdGlvbi1idXR0b25cIixvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHAoITApfSxjaGlsZHJlbjooMCx5LmpzeCkoXCJzcGFuXCIse2NoaWxkcmVuOlwiUmVzZXQgQ2FjaGVcIn0pfSl9KV19KX0pOm51bGxdfSkpfWZ1bmN0aW9uIHJPKGUpe3ZhciBuPWUuY2hpbGRyZW4sdD1lLnByZWZpeCxyPXJ3KGUsW1wiY2hpbGRyZW5cIixcInByZWZpeFwiXSk7cmV0dXJuKDAseS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJzZWxlY3QtYnV0dG9uXCIsY2hpbGRyZW46W3QsKDAseS5qc3gpKFwic2VsZWN0XCIscngocnkoe30scikse2NoaWxkcmVuOm59KSksKDAseS5qc3gpKHJFLHt9KV19KX1mdW5jdGlvbiByQyhlKXtzd2l0Y2goZS50aGVtZSl7Y2FzZVwic3lzdGVtXCI6cmV0dXJuKDAseS5qc3gpKHJlLHt9KTtjYXNlXCJkYXJrXCI6cmV0dXJuKDAseS5qc3gpKHQ3LHt9KTtjYXNlXCJsaWdodFwiOnJldHVybigwLHkuanN4KSh0OCx7fSk7ZGVmYXVsdDpyZXR1cm4gbnVsbH19dmFyIHJTPWVpKHJrKCkpO2Z1bmN0aW9uIHJFKCl7cmV0dXJuKDAseS5qc3gpKFwic3ZnXCIse3dpZHRoOlwiMTZcIixoZWlnaHQ6XCIxNlwiLHZpZXdCb3g6XCIwIDAgMTYgMTZcIixcImFyaWEtaGlkZGVuXCI6ITAsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTE0LjA2MDcgNS40OTk5OUwxMy41MzAzIDYuMDMwMzJMOC43MDcxIDEwLjg1MzVDOC4zMTY1OCAxMS4yNDQxIDcuNjgzNDEgMTEuMjQ0MSA3LjI5Mjg5IDEwLjg1MzVMMi40Njk2NiA2LjAzMDMyTDEuOTM5MzMgNS40OTk5OUwyLjk5OTk5IDQuNDM5MzNMMy41MzAzMiA0Ljk2OTY2TDcuOTk5OTkgOS40MzkzM0wxMi40Njk3IDQuOTY5NjZMMTMgNC40MzkzM0wxNC4wNjA3IDUuNDk5OTlaXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSl9KX1mdW5jdGlvbiByXyhlLG4peyhudWxsPT1ufHxuPmUubGVuZ3RoKSYmKG49ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLHI9QXJyYXkobik7dDxuO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9ZnVuY3Rpb24gclAoZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfWZ1bmN0aW9uIHJ6KGUsbil7cmV0dXJuIG49bnVsbCE9bj9uOnt9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QobikpLmZvckVhY2goZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSksZX1mdW5jdGlvbiByTChlLG4pe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHQscixvPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSxuLmluZGV4T2YodCk+PTB8fChvW3RdPWVbdF0pO3JldHVybiBvfShlLG4pO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl0PWFbcl0sIShuLmluZGV4T2YodCk+PTApJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSx0KSYmKG9bdF09ZVt0XSl9cmV0dXJuIG99ZnVuY3Rpb24gclQoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIHJfKGUpfShlKXx8ZnVuY3Rpb24oZSl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lW1wiQEBpdGVyYXRvclwiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oZSl8fHJSKGUpfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX1mdW5jdGlvbiByUihlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiByXyhlLG4pO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20odCk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiByXyhlLG4pfX1mdW5jdGlvbiByTihlKXt2YXIgbj1lLmNoaWxkcmVuLHQ9ZS5wYWRkaW5nLHI9ZS5wb3NpdGlvbixvPWUuc2V0UG9zaXRpb24sYT1lLm9uRHJhZ1N0YXJ0LGk9ZS5kcmFnSGFuZGxlU2VsZWN0b3IsbD1lLmRpc2FibGVEcmFnLHM9ckwoZSxbXCJjaGlsZHJlblwiLFwicGFkZGluZ1wiLFwicG9zaXRpb25cIixcInNldFBvc2l0aW9uXCIsXCJvbkRyYWdTdGFydFwiLFwiZHJhZ0hhbmRsZVNlbGVjdG9yXCIsXCJkaXNhYmxlRHJhZ1wiXSksYz1mdW5jdGlvbihlKXt2YXIgbj0oMCx4LnVzZVJlZikobnVsbCksdD0oMCx4LnVzZVJlZikoe3N0YXRlOlwiaWRsZVwifSkscj0oMCx4LnVzZVJlZikobnVsbCksbz0oMCx4LnVzZVJlZikoe3g6MCx5OjB9KSxhPSgwLHgudXNlUmVmKSh7eDowLHk6MH0pLGk9KDAseC51c2VSZWYpKDApLGw9KDAseC51c2VSZWYpKFtdKSxzPSgwLHgudXNlQ2FsbGJhY2spKGZ1bmN0aW9uKCl7dmFyIGUsbztcImRyYWdcIj09PXQuY3VycmVudC5zdGF0ZSYmKG51bGw9PShvPW4uY3VycmVudCl8fG8ucmVsZWFzZVBvaW50ZXJDYXB0dXJlKHQuY3VycmVudC5wb2ludGVySWQpKSx0LmN1cnJlbnQ9XCJkcmFnXCI9PT10LmN1cnJlbnQuc3RhdGU/e3N0YXRlOlwiZHJhZy1lbmRcIn06e3N0YXRlOlwiaWRsZVwifSxudWxsIT09ci5jdXJyZW50JiYoci5jdXJyZW50KCksci5jdXJyZW50PW51bGwpLGwuY3VycmVudD1bXSxudWxsPT0oZT1uLmN1cnJlbnQpfHxlLmNsYXNzTGlzdC5yZW1vdmUoXCJkZXYtdG9vbHMtZ3JhYmJpbmdcIil9LFtdKTtmdW5jdGlvbiBjKGUpe24uY3VycmVudCYmKGEuY3VycmVudD1lLG4uY3VycmVudC5zdHlsZS50cmFuc2xhdGU9XCJcIi5jb25jYXQoZS54LFwicHggXCIpLmNvbmNhdChlLnksXCJweFwiKSl9ZnVuY3Rpb24gdShlKXtpZihcImRyYWctZW5kXCI9PT10LmN1cnJlbnQuc3RhdGUpe3ZhciByO2UucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpLHQuY3VycmVudD17c3RhdGU6XCJpZGxlXCJ9LG51bGw9PShyPW4uY3VycmVudCl8fHIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsdSl9fWZ1bmN0aW9uIGQocil7aWYoXCJwcmVzc1wiPT09dC5jdXJyZW50LnN0YXRlKXt2YXIgcyx1LGQsZixwPXIuY2xpZW50WC1vLmN1cnJlbnQueCxoPXIuY2xpZW50WS1vLmN1cnJlbnQueTtNYXRoLnNxcnQocCpwK2gqaCk+PWUudGhyZXNob2xkJiYodC5jdXJyZW50PXtzdGF0ZTpcImRyYWdcIixwb2ludGVySWQ6ci5wb2ludGVySWR9LG51bGw9PSh1PW4uY3VycmVudCl8fHUuc2V0UG9pbnRlckNhcHR1cmUoci5wb2ludGVySWQpLG51bGw9PShkPW4uY3VycmVudCl8fGQuY2xhc3NMaXN0LmFkZChcImRldi10b29scy1ncmFiYmluZ1wiKSxudWxsPT0oZj1lLm9uRHJhZ1N0YXJ0KXx8Zi5jYWxsKGUpKX1pZihcImRyYWdcIj09PXQuY3VycmVudC5zdGF0ZSl7dmFyIGc9e3g6ci5jbGllbnRYLHk6ci5jbGllbnRZfSxtPWcueC1vLmN1cnJlbnQueCx2PWcueS1vLmN1cnJlbnQueTtvLmN1cnJlbnQ9ZyxjKHt4OmEuY3VycmVudC54K20seTphLmN1cnJlbnQueSt2fSk7dmFyIGI9RGF0ZS5ub3coKTtiLWkuY3VycmVudD49MTAmJihsLmN1cnJlbnQ9clQobC5jdXJyZW50LnNsaWNlKC01KSkuY29uY2F0KFt7cG9zaXRpb246Zyx0aW1lc3RhbXA6Yn1dKSksaS5jdXJyZW50PWIsbnVsbD09KHM9ZS5vbkRyYWcpfHxzLmNhbGwoZSxhLmN1cnJlbnQpfX1mdW5jdGlvbiBmKCl7dmFyIG4sdD1mdW5jdGlvbihlKXtpZihlLmxlbmd0aDwyKXJldHVybnt4OjAseTowfTt2YXIgbj1lWzBdLHQ9ZVtlLmxlbmd0aC0xXSxyPXQudGltZXN0YW1wLW4udGltZXN0YW1wO3JldHVybiAwPT09cj97eDowLHk6MH06e3g6MWUzKigodC5wb3NpdGlvbi54LW4ucG9zaXRpb24ueCkvcikseToxZTMqKCh0LnBvc2l0aW9uLnktbi5wb3NpdGlvbi55KS9yKX19KGwuY3VycmVudCk7cygpLG51bGw9PShuPWUub25EcmFnRW5kKXx8bi5jYWxsKGUsYS5jdXJyZW50LHQpfXJldHVybigwLHgudXNlTGF5b3V0RWZmZWN0KShmdW5jdGlvbigpe2UuZGlzYWJsZWQmJnMoKX0sW3MsZS5kaXNhYmxlZF0pLHtyZWY6bixvblBvaW50ZXJEb3duOmZ1bmN0aW9uKGEpe3ZhciBpLGw7MD09PWEuYnV0dG9uJiYobD1hLnRhcmdldCwoIWUuZHJhZ0hhbmRsZVNlbGVjdG9yfHwhbi5jdXJyZW50fHwhbHx8bC5tYXRjaGVzJiZsLm1hdGNoZXMoZS5kcmFnSGFuZGxlU2VsZWN0b3IpKSYmKG8uY3VycmVudD17eDphLmNsaWVudFgseTphLmNsaWVudFl9LHQuY3VycmVudD17c3RhdGU6XCJwcmVzc1wifSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsZCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIixmKSxudWxsIT09ci5jdXJyZW50JiYoci5jdXJyZW50KCksci5jdXJyZW50PW51bGwpLHIuY3VycmVudD1mdW5jdGlvbigpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIixkKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLGYpfSxudWxsPT0oaT1uLmN1cnJlbnQpfHxpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLHUpKSl9LGFuaW1hdGU6ZnVuY3Rpb24odCl7dmFyIHI9bi5jdXJyZW50O251bGwhPT1yJiYoci5zdHlsZS50cmFuc2l0aW9uPVwidHJhbnNsYXRlIDQ5MS4yMm1zIHZhcigtLXRpbWluZy1ib3VuY2UpXCIsci5hZGRFdmVudExpc3RlbmVyKFwidHJhbnNpdGlvbmVuZFwiLGZ1bmN0aW9uIG4obyl7aWYoXCJ0cmFuc2xhdGVcIj09PW8ucHJvcGVydHlOYW1lKXt2YXIgaTtudWxsPT0oaT1lLm9uQW5pbWF0aW9uRW5kKXx8aS5jYWxsKGUsdCksYS5jdXJyZW50PXt4OjAseTowfSxyLnN0eWxlLnRyYW5zaXRpb249XCJcIixyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsbil9fSksYyh0LnRyYW5zbGF0aW9uKSl9fX0oe2Rpc2FibGVkOnZvaWQgMCE9PWwmJmwsdGhyZXNob2xkOjUsb25EcmFnU3RhcnQ6YSxvbkRyYWdFbmQ6ZnVuY3Rpb24oZSxuKXt2YXIgbyxhLGksbCxzLGMsZixwLGgsZyxtLHYsYix5LHgsdyxqLGssQTtpZigwPT09TWF0aC5zcXJ0KGUueCplLngrZS55KmUueSkpe251bGw9PShvPXUuY3VycmVudCl8fG8uc3R5bGUucmVtb3ZlUHJvcGVydHkoXCJ0cmFuc2xhdGVcIik7cmV0dXJufWQoKHk9KGE9e3g6ZS54K3JEKG4ueCkseTplLnkrckQobi55KX0pLngseD1hLnksaj1PYmplY3QuZW50cmllcyh3PShwPTIqdCxoPShudWxsPT0oYz11LmN1cnJlbnQpP3ZvaWQgMDpjLm9mZnNldFdpZHRoKXx8MCxnPShudWxsPT0oZj11LmN1cnJlbnQpP3ZvaWQgMDpmLm9mZnNldEhlaWdodCl8fDAsbT13aW5kb3cuaW5uZXJXaWR0aC1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgse1widG9wLWxlZnRcIjp7eDowLSh2PShsPShpPXIpLmluY2x1ZGVzKFwicmlnaHRcIikscz1pLmluY2x1ZGVzKFwiYm90dG9tXCIpLHt4Omw/d2luZG93LmlubmVyV2lkdGgtbS1wLWg6MCx5OnM/d2luZG93LmlubmVySGVpZ2h0LXAtZzowfSkpLngseTowLXYueX0sXCJ0b3AtcmlnaHRcIjp7eDp3aW5kb3cuaW5uZXJXaWR0aC1tLXAtaC12LngseTowLXYueX0sXCJib3R0b20tbGVmdFwiOnt4OjAtdi54LHk6d2luZG93LmlubmVySGVpZ2h0LXAtZy12Lnl9LFwiYm90dG9tLXJpZ2h0XCI6e3g6d2luZG93LmlubmVyV2lkdGgtbS1wLWgtdi54LHk6d2luZG93LmlubmVySGVpZ2h0LXAtZy12Lnl9fSkpLm1hcChmdW5jdGlvbihlKXt2YXIgbix0LHI9KHQ9MixmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShuPWUpfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KG4sMil8fHJSKG4sdCl8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCkpLG89clswXSxhPXJbMV07cmV0dXJue2tleTpvLGRpc3RhbmNlOk1hdGguc3FydChNYXRoLnBvdyh5LWEueCwyKStNYXRoLnBvdyh4LWEueSwyKSl9fSksaz0oYj1NYXRoKS5taW4uYXBwbHkoYixyVChqLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXN0YW5jZX0pKSksKEE9ai5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRpc3RhbmNlPT09a30pKT97dHJhbnNsYXRpb246d1tBLmtleV0sY29ybmVyOkEua2V5fTp7Y29ybmVyOnIsdHJhbnNsYXRpb246d1tyXX0pKX0sb25BbmltYXRpb25FbmQ6ZnVuY3Rpb24oZSl7dmFyIG49ZS5jb3JuZXI7c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBlO251bGw9PShlPXUuY3VycmVudCl8fGUuc3R5bGUucmVtb3ZlUHJvcGVydHkoXCJ0cmFuc2xhdGVcIiksbyhuKX0pfSxkcmFnSGFuZGxlU2VsZWN0b3I6aX0pLHU9Yy5yZWYsZD1jLmFuaW1hdGUsZj1yTChjLFtcInJlZlwiLFwiYW5pbWF0ZVwiXSk7cmV0dXJuKDAseS5qc3gpKFwiZGl2XCIscnooclAocnooclAoe30scykse3JlZjp1fSksZikse3N0eWxlOnt0b3VjaEFjdGlvbjpcIm5vbmVcIn0sY2hpbGRyZW46bn0pKX1mdW5jdGlvbiByRChlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Ljk5OTtyZXR1cm4gZS8xZTMqbi8oMS1uKX1mdW5jdGlvbiByQihlLG4peyhudWxsPT1ufHxuPmUubGVuZ3RoKSYmKG49ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLHI9QXJyYXkobik7dDxuO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9ZnVuY3Rpb24gck0oZSxuLHQpe3JldHVybiBuIGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7dmFsdWU6dCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbbl09dCxlfWZ1bmN0aW9uIHJJKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXtyTShlLG4sdFtuXSl9KX1yZXR1cm4gZX1mdW5jdGlvbiBySChlLG4pe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHQscixvPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSxuLmluZGV4T2YodCk+PTB8fChvW3RdPWVbdF0pO3JldHVybiBvfShlLG4pO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl0PWFbcl0sIShuLmluZGV4T2YodCk+PTApJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSx0KSYmKG9bdF09ZVt0XSl9cmV0dXJuIG99ZnVuY3Rpb24gckYoZSxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0odD1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2godC52YWx1ZSksIW58fGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KGUsbil8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIHJCKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIHJCKGUsbil9fShlLG4pfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIHJVKGUpe3ZhciBuPWUuc3RhdGUsdD1lLmVycm9yQ291bnQscj1lLmlzQnVpbGRFcnJvcixvPXJIKGUsW1wic3RhdGVcIixcImVycm9yQ291bnRcIixcImlzQnVpbGRFcnJvclwiXSksYT1yRigoMCx4LnVzZVN0YXRlKSghMCksMiksaT1hWzBdLGw9YVsxXTtyZXR1cm4oMCx5LmpzeCkociQsckkoe3JvdXRlclR5cGU6bi5yb3V0ZXJUeXBlLHNlbXZlcjpuLnZlcnNpb25JbmZvLmluc3RhbGxlZCxpc3N1ZUNvdW50OnQsaXNEZXZCdWlsZGluZzpuLmJ1aWxkaW5nSW5kaWNhdG9yLGlzRGV2UmVuZGVyaW5nOm4ucmVuZGVyaW5nSW5kaWNhdG9yLGlzU3RhdGljUm91dGU6bi5zdGF0aWNJbmRpY2F0b3IsaGlkZTpmdW5jdGlvbigpe2woITEpLGZldGNoKFwiL19fbmV4dGpzX2Rpc2FibGVfZGV2X2luZGljYXRvclwiLHttZXRob2Q6XCJQT1NUXCJ9KX0sdG9nZ2xlVmlzaWJpbGl0eTpmdW5jdGlvbigpe2woIWkpfSxpc1R1cmJvcGFjazohIXByb2Nlc3MuZW52LlRVUkJPUEFDSyxkaXNhYmxlZDpuLmRpc2FibGVEZXZJbmRpY2F0b3J8fCFpLGlzQnVpbGRFcnJvcjpyLHBhZ2U6bi5wYWdlfSxvKSl9dmFyIHJWPSgwLHguY3JlYXRlQ29udGV4dCkoe30pLHJxPXtSb290Olwicm9vdFwiLFR1cmJvOlwidHVyYm9cIixSb3V0ZTpcInJvdXRlXCIsUHJlZmVyZW5jZXM6XCJwcmVmZXJlbmNlc1wiLFNlZ21lbnRFeHBsb3JlcjpcInNlZ21lbnQtZXhwbG9yZXJcIn0sclc9cHJvY2Vzcy5lbnYuX19ORVhUX0RFVlRPT0xfU0VHTUVOVF9FWFBMT1JFUj9fX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9jb21wb25lbnRzL2Vycm9ycy9kZXYtdG9vbHMtaW5kaWNhdG9yL2Rldi10b29scy1pbmZvL3NlZ21lbnRzLWV4cGxvcmVyLnRzeFwiKS5XOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9O2Z1bmN0aW9uIHIkKGUpe3ZhciBuLHQscixvLGEsaSxsLHM9ZS5yb3V0ZXJUeXBlLGM9ZS5kaXNhYmxlZCx1PWUuaXNzdWVDb3VudCxkPWUuaXNEZXZCdWlsZGluZyxmPWUuaXNEZXZSZW5kZXJpbmcscD1lLmlzU3RhdGljUm91dGUsaD1lLmlzVHVyYm9wYWNrLGc9ZS5pc0J1aWxkRXJyb3IsbT1lLmhpZGUsdj1lLnRvZ2dsZVZpc2liaWxpdHksYj1lLmRpc3BhdGNoLHc9ZS5zY2FsZSxqPWUuc2V0U2NhbGUsaz1lLnBhZ2UsQT0oMCx4LnVzZVJlZikobnVsbCksTz0oMCx4LnVzZVJlZikobnVsbCksQz0oMCx4LnVzZVJlZikobnVsbCksUz1yRigoMCx4LnVzZVN0YXRlKShudWxsKSwyKSxFPVNbMF0sXz1TWzFdLFA9ckYoKDAseC51c2VTdGF0ZSkoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGxvY2FsU3RvcmFnZSYmbG9jYWxTdG9yYWdlLmdldEl0ZW0oRyk/bG9jYWxTdG9yYWdlLmdldEl0ZW0oRyk6cnIpLDIpLHo9UFswXSxMPVBbMV0sVD1yRigoMCx4LnVzZVN0YXRlKSgtMSksMiksUj1UWzBdLE49VFsxXSxEPXJGKCh0PShuPXJ0KCgwLHgudXNlU3RhdGUpKGZ1bmN0aW9uKCl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGxvY2FsU3RvcmFnZSlyZXR1cm4gbnVsbDt2YXIgZT1sb2NhbFN0b3JhZ2UuZ2V0SXRlbShybyk7cmV0dXJuIGV8fG51bGx9KCkpLDIpKVswXSxyPW5bMV0sW3QsZnVuY3Rpb24oZSl7cihlKSxudWxsPT09ZT9sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShybyk6bG9jYWxTdG9yYWdlLnNldEl0ZW0ocm8sZSl9XSksMiksQj1EWzBdLEk9RFsxXSxGPUU9PT1ycS5Sb290LFU9RT09PXJxLlR1cmJvLFY9RT09PXJxLlJvdXRlLHE9RT09PXJxLlByZWZlcmVuY2VzLFc9RT09PXJxLlNlZ21lbnRFeHBsb3JlciwkPSgwLHRKLk4pKEYse2VudGVyRGVsYXk6MCxleGl0RGVsYXk6blEuSzd9KSxaPSQubW91bnRlZCxZPSQucmVuZGVyZWQ7ZnVuY3Rpb24gWChlKXtpZihcImZpcnN0XCI9PT1lKXJldHVybiB2b2lkIHNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgZSxuPW51bGw9PShlPU8uY3VycmVudCk/dm9pZCAwOmUucXVlcnlTZWxlY3RvckFsbCgnW3JvbGU9XCJtZW51aXRlbVwiXScpO24mJlgoTnVtYmVyKG5bMF0uZ2V0QXR0cmlidXRlKFwiZGF0YS1pbmRleFwiKSkpfSk7aWYoXCJsYXN0XCI9PT1lKXJldHVybiB2b2lkIHNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgZSxuPW51bGw9PShlPU8uY3VycmVudCk/dm9pZCAwOmUucXVlcnlTZWxlY3RvckFsbCgnW3JvbGU9XCJtZW51aXRlbVwiXScpO24mJlgobi5sZW5ndGgtMSl9KTt2YXIgbix0PW51bGw9PShuPU8uY3VycmVudCk/dm9pZCAwOm4ucXVlcnlTZWxlY3RvcignW2RhdGEtaW5kZXg9XCInLmNvbmNhdChlLCdcIl0nKSk7dCYmKE4oZSksbnVsbD09dHx8dC5mb2N1cygpKX1mdW5jdGlvbiBLKCl7XyhycS5Sb290KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7WChSKX0sblEuSzcpfWZ1bmN0aW9uIFEoKXtfKGZ1bmN0aW9uKGUpe3JldHVybiBlPT09cnEuUm9vdD9udWxsOmV9KX0oMCxuUS5QNSkoTyxDLEYpLCgwLG5RLk84KShPLEMsWixRKSxvPUI/ck0oe30sQixmdW5jdGlvbigpe3YoKTt2YXIgZT1BLmN1cnJlbnQ7ZSYmKGUuZGF0YXNldC5oaWRkZW49XCJ0cnVlXCI9PT1lLmRhdGFzZXQuaGlkZGVuP1wiZmFsc2VcIjpcInRydWVcIil9KTp7fSxhPUMsKDAseC51c2VFZmZlY3QpKGZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oZSl7aWYobj1hLCEodD0oMCxuUS52WSkobi5jdXJyZW50KSl8fFwidHJ1ZVwiIT09dC5jb250ZW50RWRpdGFibGUmJlwiSU5QVVRcIiE9PXQudGFnTmFtZSYmXCJURVhUQVJFQVwiIT09dC50YWdOYW1lJiZcIlNFTEVDVFwiIT09dC50YWdOYW1lJiZcInRydWVcIiE9PXQuZGF0YXNldFtcInNob3J0Y3V0LXJlY29yZGVyXCJdfHx0Lmhhc0F0dHJpYnV0ZShcInJlYWRvbmx5XCIpKXt2YXIgbix0LHI9W107ZS5tZXRhS2V5JiZyLnB1c2goXCJNZXRhXCIpLGUuY3RybEtleSYmci5wdXNoKFwiQ29udHJvbFwiKSxlLmFsdEtleSYmci5wdXNoKFwiQWx0XCIpLGUuc2hpZnRLZXkmJnIucHVzaChcIlNoaWZ0XCIpLFwiTWV0YVwiIT09ZS5rZXkmJlwiQ29udHJvbFwiIT09ZS5rZXkmJlwiQWx0XCIhPT1lLmtleSYmXCJTaGlmdFwiIT09ZS5rZXkmJnIucHVzaChlLmtleSk7dmFyIGk9ci5qb2luKFwiK1wiKTtvW2ldJiYoZS5wcmV2ZW50RGVmYXVsdCgpLG9baV0oKSl9fTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsZSksZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsZSl9fSxbb10pLCgwLHgudXNlRWZmZWN0KShmdW5jdGlvbigpe2lmKG51bGw9PT1FKXt2YXIgZT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7TigtMSl9LG5RLks3KTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gY2xlYXJUaW1lb3V0KGUpfX19LFtFXSk7dmFyIEo9ckYoei5zcGxpdChcIi1cIiwyKSwyKSxlZT1KWzBdLGVuPUpbMV0sZXQ9KHJNKGk9e30sZWUsXCJjYWxjKDEwMCUgKyA4cHgpXCIpLHJNKGksZW4sMCksaSk7cmV0dXJuKDAseS5qc3hzKSh0Uix7cmVmOkEsXCJkYXRhLW5leHRqcy10b2FzdFwiOiEwLHN0eWxlOihyTShsPXtcIi0tYW5pbWF0ZS1vdXQtZHVyYXRpb24tbXNcIjpcIlwiLmNvbmNhdChuUS5LNyxcIm1zXCIpLFwiLS1hbmltYXRlLW91dC10aW1pbmctZnVuY3Rpb25cIjpuUS51RCxib3hTaGFkb3c6XCJub25lXCJ9LGVlLFwiXCIuY29uY2F0KDIwLFwicHhcIikpLHJNKGwsZW4sXCJcIi5jb25jYXQoMjAsXCJweFwiKSksbCksY2hpbGRyZW46WygwLHkuanN4KShyTix7cGFkZGluZzoyMCxvbkRyYWdTdGFydDpmdW5jdGlvbigpe3JldHVybiBfKG51bGwpfSxwb3NpdGlvbjp6LHNldFBvc2l0aW9uOmZ1bmN0aW9uKGUpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKEcsZSksTChlKX0sY2hpbGRyZW46KDAseS5qc3gpKHRZLHtyZWY6QyxcImFyaWEtaGFzcG9wdXBcIjpcIm1lbnVcIixcImFyaWEtZXhwYW5kZWRcIjpGLFwiYXJpYS1jb250cm9sc1wiOlwibmV4dGpzLWRldi10b29scy1tZW51XCIsXCJhcmlhLWxhYmVsXCI6XCJcIi5jb25jYXQoRj9cIkNsb3NlXCI6XCJPcGVuXCIsXCIgTmV4dC5qcyBEZXYgVG9vbHNcIiksXCJkYXRhLW5leHRqcy1kZXYtdG9vbHMtYnV0dG9uXCI6ITAsZGlzYWJsZWQ6Yyxpc3N1ZUNvdW50OnUsb25UcmlnZ2VyQ2xpY2s6ZnVuY3Rpb24oKXtFPT09cnEuUm9vdD9fKG51bGwpOihfKHJxLlJvb3QpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtYKFwiZmlyc3RcIil9KSl9LHRvZ2dsZUVycm9yT3ZlcmxheTpmdW5jdGlvbigpe2Ioe3R5cGU6SH0pfSxpc0RldkJ1aWxkaW5nOmQsaXNEZXZSZW5kZXJpbmc6Zixpc0J1aWxkRXJyb3I6ZyxzY2FsZTp3fSl9KSwoMCx5LmpzeCkodDMse2lzT3BlbjpWLGNsb3NlOkssdHJpZ2dlclJlZjpDLHN0eWxlOmV0LHJvdXRlclR5cGU6cyxyb3V0ZVR5cGU6cD9cIlN0YXRpY1wiOlwiRHluYW1pY1wifSksKDAseS5qc3gpKHQxLHtpc09wZW46VSxjbG9zZTpLLHRyaWdnZXJSZWY6QyxzdHlsZTpldH0pLCgwLHkuanN4KShyQSx7aXNPcGVuOnEsY2xvc2U6Syx0cmlnZ2VyUmVmOkMsc3R5bGU6ZXQsaGlkZTpmdW5jdGlvbigpe18obnVsbCksbSgpfSxzZXRQb3NpdGlvbjpMLHBvc2l0aW9uOnosc2NhbGU6dyxzZXRTY2FsZTpqLGhpZGVTaG9ydGN1dDpCLHNldEhpZGVTaG9ydGN1dDpJfSkscHJvY2Vzcy5lbnYuX19ORVhUX0RFVlRPT0xfU0VHTUVOVF9FWFBMT1JFUj8oMCx5LmpzeCkoclcse2lzT3BlbjpXLGNsb3NlOkssdHJpZ2dlclJlZjpDLHN0eWxlOmV0LHJvdXRlclR5cGU6cyxwYWdlOmt9KTpudWxsLFomJigwLHkuanN4KShcImRpdlwiLHtyZWY6TyxpZDpcIm5leHRqcy1kZXYtdG9vbHMtbWVudVwiLHJvbGU6XCJtZW51XCIsZGlyOlwibHRyXCIsXCJhcmlhLW9yaWVudGF0aW9uXCI6XCJ2ZXJ0aWNhbFwiLFwiYXJpYS1sYWJlbFwiOlwiTmV4dC5qcyBEZXYgVG9vbHMgSXRlbXNcIix0YWJJbmRleDotMSxjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5kaWNhdG9yLW1lbnVcIixvbktleURvd246ZnVuY3Rpb24oZSl7c3dpdGNoKGUucHJldmVudERlZmF1bHQoKSxlLmtleSl7Y2FzZVwiQXJyb3dEb3duXCI6WChSKzEpO2JyZWFrO2Nhc2VcIkFycm93VXBcIjpYKFItMSk7YnJlYWs7Y2FzZVwiSG9tZVwiOlgoXCJmaXJzdFwiKTticmVhaztjYXNlXCJFbmRcIjpYKFwibGFzdFwiKX19LFwiZGF0YS1yZW5kZXJlZFwiOlksc3R5bGU6ZXQsY2hpbGRyZW46KDAseS5qc3hzKShyVi5Qcm92aWRlcix7dmFsdWU6e2Nsb3NlTWVudTpRLHNlbGVjdGVkSW5kZXg6UixzZXRTZWxlY3RlZEluZGV4Ok59LGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmRpY2F0b3ItaW5uZXJcIixjaGlsZHJlbjpbdT4wJiYoMCx5LmpzeCkoclkse3RpdGxlOlwiXCIuY29uY2F0KHUsXCIgXCIpLmNvbmNhdCgxPT09dT9cImlzc3VlXCI6XCJpc3N1ZXNcIixcIiBmb3VuZC4gQ2xpY2sgdG8gdmlldyBkZXRhaWxzIGluIHRoZSBkZXYgb3ZlcmxheS5cIiksaW5kZXg6MCxsYWJlbDpcIklzc3Vlc1wiLHZhbHVlOigwLHkuanN4KShyWCx7Y2hpbGRyZW46dX0pLG9uQ2xpY2s6ZnVuY3Rpb24oKXtfKG51bGwpLHU+MCYmYih7dHlwZTpNfSl9fSksKDAseS5qc3gpKHJZLHt0aXRsZTpcIkN1cnJlbnQgcm91dGUgaXMgXCIuY29uY2F0KHA/XCJzdGF0aWNcIjpcImR5bmFtaWNcIixcIi5cIiksbGFiZWw6XCJSb3V0ZVwiLGluZGV4OjEsdmFsdWU6cD9cIlN0YXRpY1wiOlwiRHluYW1pY1wiLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gXyhycS5Sb3V0ZSl9LFwiZGF0YS1uZXh0anMtcm91dGUtdHlwZVwiOnA/XCJzdGF0aWNcIjpcImR5bmFtaWNcIn0pLGg/KDAseS5qc3gpKHJZLHt0aXRsZTpcIlR1cmJvcGFjayBpcyBlbmFibGVkLlwiLGxhYmVsOlwiVHVyYm9wYWNrXCIsdmFsdWU6XCJFbmFibGVkXCJ9KTooMCx5LmpzeCkoclkse2luZGV4OjIsdGl0bGU6XCJMZWFybiBhYm91dCBUdXJib3BhY2sgYW5kIGhvdyB0byBlbmFibGUgaXQgaW4geW91ciBhcHBsaWNhdGlvbi5cIixsYWJlbDpcIlRyeSBUdXJib3BhY2tcIix2YWx1ZTooMCx5LmpzeCkoclose30pLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gXyhycS5UdXJibyl9fSldfSksKDAseS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5kaWNhdG9yLWZvb3RlclwiLGNoaWxkcmVuOlsoMCx5LmpzeCkoclkse1wiZGF0YS1wcmVmZXJlbmNlc1wiOiEwLGxhYmVsOlwiUHJlZmVyZW5jZXNcIix2YWx1ZTooMCx5LmpzeCkodDYse30pLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gXyhycS5QcmVmZXJlbmNlcyl9LGluZGV4Omg/MjozfSkscHJvY2Vzcy5lbnYuX19ORVhUX0RFVlRPT0xfU0VHTUVOVF9FWFBMT1JFUj8oMCx5LmpzeCkoclkse1wiZGF0YS1zZWdtZW50LWV4cGxvcmVyXCI6ITAsbGFiZWw6XCJSb3V0ZSBJbmZvXCIsdmFsdWU6KDAseS5qc3gpKHJaLHt9KSxvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIF8ocnEuU2VnbWVudEV4cGxvcmVyKX0saW5kZXg6aD8zOjR9KTpudWxsXX0pXX0pfSldfSl9ZnVuY3Rpb24gclooKXtyZXR1cm4oMCx5LmpzeCkoXCJzdmdcIix7eG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHdpZHRoOlwiMTZcIixoZWlnaHQ6XCIxNlwiLHZpZXdCb3g6XCIwIDAgMTYgMTZcIixmaWxsOlwibm9uZVwiLGNoaWxkcmVuOigwLHkuanN4KShcInBhdGhcIix7ZmlsbDpcIiM2NjZcIixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTUuNTAwMTEgMS45Mzk0NUw2LjAzMDQ0IDIuNDY5NzhMMTAuODUzNyA3LjI5M0MxMS4yNDQyIDcuNjgzNTMgMTEuMjQ0MiA4LjMxNjY5IDEwLjg1MzcgOC43MDcyMkw2LjAzMDQ0IDEzLjUzMDRMNS41MDAxMSAxNC4wNjA4TDQuNDM5NDUgMTMuMDAwMUw0Ljk2OTc4IDEyLjQ2OThMOS40Mzk0NSA4LjAwMDExTDQuOTY5NzggMy41MzA0NEw0LjQzOTQ1IDMuMDAwMTFMNS41MDAxMSAxLjkzOTQ1WlwifSl9KX1mdW5jdGlvbiByWShlKXt2YXIgbix0LHI9ZS5pbmRleCxvPWUubGFiZWwsYT1lLnZhbHVlLGk9ZS5vbkNsaWNrLGw9ZS5ocmVmLHM9ckgoZSxbXCJpbmRleFwiLFwibGFiZWxcIixcInZhbHVlXCIsXCJvbkNsaWNrXCIsXCJocmVmXCJdKSxjPVwiZnVuY3Rpb25cIj09dHlwZW9mIGl8fFwic3RyaW5nXCI9PXR5cGVvZiBsLHU9KDAseC51c2VDb250ZXh0KShyViksZD11LmNsb3NlTWVudSxmPXUuc2VsZWN0ZWRJbmRleCxwPXUuc2V0U2VsZWN0ZWRJbmRleCxoPWY9PT1yO2Z1bmN0aW9uIGcoKXtjJiYobnVsbD09aXx8aSgpLGQoKSxsJiZ3aW5kb3cub3BlbihsLFwiX2JsYW5rXCIsXCJub29wZW5lciwgbm9yZWZlcnJlclwiKSl9cmV0dXJuKDAseS5qc3hzKShcImRpdlwiLChuPXJJKHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5kaWNhdG9yLWl0ZW1cIixcImRhdGEtaW5kZXhcIjpyLFwiZGF0YS1zZWxlY3RlZFwiOmgsb25DbGljazpnLG9uTW91c2VNb3ZlOmZ1bmN0aW9uKCl7YyYmdm9pZCAwIT09ciYmZiE9PXImJnAocil9LG9uTW91c2VMZWF2ZTpmdW5jdGlvbigpe3JldHVybiBwKC0xKX0sb25LZXlEb3duOmZ1bmN0aW9uKGUpeyhcIkVudGVyXCI9PT1lLmtleXx8XCIgXCI9PT1lLmtleSkmJmcoKX0scm9sZTpjP1wibWVudWl0ZW1cIjp2b2lkIDAsdGFiSW5kZXg6aD8wOi0xfSxzKSx0PXQ9e2NoaWxkcmVuOlsoMCx5LmpzeCkoXCJzcGFuXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmRpY2F0b3ItbGFiZWxcIixjaGlsZHJlbjpvfSksKDAseS5qc3gpKFwic3BhblwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5kaWNhdG9yLXZhbHVlXCIsY2hpbGRyZW46YX0pXX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKSl9KSxuKSl9ZnVuY3Rpb24gclgoZSl7dmFyIG49ZS5jaGlsZHJlbjtyZXR1cm4oMCx5LmpzeHMpKFwic3BhblwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5kaWNhdG9yLWlzc3VlLWNvdW50XCIsXCJkYXRhLWhhcy1pc3N1ZXNcIjpuPjAsY2hpbGRyZW46WygwLHkuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZGljYXRvci1pc3N1ZS1jb3VudC1pbmRpY2F0b3JcIn0pLG5dfSl9ZnVuY3Rpb24gcksoZSl7dmFyIG4sdDtyZXR1cm4oMCx5LmpzeCkoXCJzdmdcIiwobj1mdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHt4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSxlKSx0PXQ9e2NoaWxkcmVuOigwLHkuanN4KShcInBhdGhcIix7ZDpcIk00LjMwOTY5IDguMzc4OTFIMi4zODc4MkMyLjk4MDUgMTAuMzY0NyA0LjgyMTg4IDExLjgxMjQgNy4wMDAxMiAxMS44MTI1QzguODE5NzcgMTEuODEyNCAxMC40MDQzIDEwLjgwMjQgMTEuMjIyOCA5LjMwOTU3TDExLjUzODIgOC43MzQzOEwxMi42ODk2IDkuMzY1MjNMMTIuMzc0MSA5Ljk0MDQzTDEyLjE2ODEgMTAuMjg5MUMxMS4wODE1IDExLjk5MyA5LjE3MzI0IDEzLjEyNDkgNy4wMDAxMiAxMy4xMjVDNC40MjIwNyAxMy4xMjQ5IDIuMjE3NDcgMTEuNTMyMiAxLjMxMzYgOS4yNzczNFYxMS4zNzVIMC4wMDEwOTg2M1Y3LjcyMjY2TDAuMDE0NzcwNSA3LjU4OTg0QzAuMDc2MDMwNCA3LjI5MDg5IDAuMzQwMjc4IDcuMDY2NDEgMC42NTczNDkgNy4wNjY0MUg0LjMwOTY5VjguMzc4OTFaTTcuMDAwMTIgMC44NzVDOS41NzY4NSAwLjg3NTExOCAxMS43ODE5IDIuNDY1NjkgMTIuNjg2NiA0LjcxODc1VjIuNjI1SDEzLjk5OTFWNi4yNzczNEMxMy45OTkxIDYuNjM5NzQgMTMuNzA1MyA2LjkzMzU0IDEzLjM0MjkgNi45MzM1OUg5LjY4OTU4VjUuNjIxMDlIMTEuNjExNUMxMS4wMTg2IDMuNjM1NiA5LjE3ODEzIDIuMTg3NjMgNy4wMDAxMiAyLjE4NzVDNS4xNzEzMSAyLjE4NzU3IDMuNTc5NTkgMy4yMDc3MSAyLjc2NDc3IDQuNzEyODlMMi40NTIyNyA1LjI5MDA0TDEuMjk3OTcgNC42NjUwNEwxLjYxMDQ3IDQuMDg3ODlDMi42NDU0NyAyLjE3NjA1IDQuNjcwNTIgMC44NzUwNjggNy4wMDAxMiAwLjg3NVpcIixmaWxsOlwiI0EzNTIwMFwifSl9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG4sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkpfSksbikpfWZ1bmN0aW9uIHJRKGUpe3JldHVybiBlLnNob3dCdXR0b24/KDAseS5qc3hzKShcImJ1dHRvblwiLHtjbGFzc05hbWU6XCJyZXN0YXJ0LWRldi1zZXJ2ZXItYnV0dG9uXCIsb25DbGljazpmdW5jdGlvbigpe2ZldGNoKFwiL19fbmV4dGpzX3Jlc3RhcnRfZGV2P2ludmFsaWRhdGVQZXJzaXN0ZW50Q2FjaGVcIix7bWV0aG9kOlwiUE9TVFwifSkudGhlbihmdW5jdGlvbigpe30pfSx0aXRsZTpcIkNsZWFycyB0aGUgYnVuZGxlciBjYWNoZSBhbmQgcmVzdGFydHMgdGhlIGRldiBzZXJ2ZXIuIEhlbHBmdWwgaWYgeW91IGFyZSBzZWVpbmcgc3RhbGUgZXJyb3JzIG9yIGNoYW5nZXMgYXJlIG5vdCBhcHBlYXJpbmcuXCIsY2hpbGRyZW46WygwLHkuanN4KShySyx7d2lkdGg6MTQsaGVpZ2h0OjE0fSksXCJDbGVhciBCdW5kbGVyIENhY2hlICYgUmVzdGFydFwiXX0pOm51bGx9ZnVuY3Rpb24gckcoKXt2YXIgZSxuLHQ9KGU9W1wiXFxuICBbZGF0YS1uZXh0anMtdmVyc2lvbi1zdGFsZW5lc3MtaW5kaWNhdG9yPSdmcmVzaCddIHtcXG4gICAgZmlsbDogdmFyKC0tY29sb3ItZ3JlZW4tODAwKTtcXG4gICAgc3Ryb2tlOiB2YXIoLS1jb2xvci1ncmVlbi0zMDApO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLXZlcnNpb24tc3RhbGVuZXNzLWluZGljYXRvcj0nc3RhbGUnXSB7XFxuICAgIGZpbGw6IHZhcigtLWNvbG9yLWFtYmVyLTgwMCk7XFxuICAgIHN0cm9rZTogdmFyKC0tY29sb3ItYW1iZXItMzAwKTtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy12ZXJzaW9uLXN0YWxlbmVzcy1pbmRpY2F0b3I9J291dGRhdGVkJ10ge1xcbiAgICBmaWxsOiB2YXIoLS1jb2xvci1yZWQtODAwKTtcXG4gICAgc3Ryb2tlOiB2YXIoLS1jb2xvci1yZWQtMzAwKTtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy12ZXJzaW9uLXN0YWxlbmVzcy1pbmRpY2F0b3I9J3Vua25vd24nXSB7XFxuICAgIGZpbGw6IHZhcigtLWNvbG9yLWdyYXktODAwKTtcXG4gICAgc3Ryb2tlOiB2YXIoLS1jb2xvci1ncmF5LTMwMCk7XFxuICB9XFxuXCJdLG58fChuPWUuc2xpY2UoMCkpLE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSx7cmF3Ont2YWx1ZTpPYmplY3QuZnJlZXplKG4pfX0pKSk7cmV0dXJuIHJHPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LHR9ZnVuY3Rpb24gckooZSl7dmFyIG49ZS52ZXJzaW9uSW5mbyx0PW4uc3RhbGVuZXNzLHI9bkIobiksbz1yLnRleHQsYT1yLmluZGljYXRvckNsYXNzLGk9ci50aXRsZTtyZXR1cm4gdC5zdGFydHNXaXRoKFwic3RhbGVcIik/KDAseS5qc3hzKShcImFcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1mb290ZXItdGFiXCI6ITAsdGFyZ2V0OlwiX2JsYW5rXCIscmVsOlwibm9vcGVuZXIgbm9yZWZlcnJlclwiLGhyZWY6XCJodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy92ZXJzaW9uLXN0YWxlbmVzc1wiLHRpdGxlOmksY2hpbGRyZW46WygwLHkuanN4KShuTSx7XCJkYXRhLW5leHRqcy12ZXJzaW9uLXN0YWxlbmVzcy1pbmRpY2F0b3JcIjphfSksKDAseS5qc3gpKFwic3BhblwiLHtjaGlsZHJlbjpvfSldfSk6KDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWZvb3Rlci10YWJcIjohMCx0aXRsZTppLGNoaWxkcmVuOlsoMCx5LmpzeCkobk0se1wiZGF0YS1uZXh0anMtdmVyc2lvbi1zdGFsZW5lc3MtaW5kaWNhdG9yXCI6YX0pLCgwLHkuanN4KShcInNwYW5cIix7Y2hpbGRyZW46b30pXX0pfXZhciByMD1laShyRygpKTtmdW5jdGlvbiByMSgpe3ZhciBlLG4sdD0oZT1bXCJcXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1mb290ZXJdIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0yMDApO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICAgIGJvcmRlci1yYWRpdXM6IDAgMCB2YXIoLS1yb3VuZGVkLXhsKSB2YXIoLS1yb3VuZGVkLXhsKTtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWZvb3Rlci10YWItZ3JvdXBdIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1mb290ZXItdGFiXSB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIHBhZGRpbmc6IDEycHg7XFxuICAgIGdhcDogOHB4O1xcbiAgICBhbGlnbi1zZWxmOiBzdHJldGNoO1xcbiAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuXFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTkwMCk7XFxuICAgIGZvbnQtc2l6ZTogMTJweDtcXG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2stbW9ub3NwYWNlKTtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1mb290ZXItdGFiLWJ1bmRsZXItbmFtZT0nVFVSQk9QQUNLJ10ge1xcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoXFxuICAgICAgdG8gcmlnaHQsXFxuICAgICAgdmFyKC0tY29sb3ItdHVyYm9wYWNrLXRleHQtcmVkKSAwJSxcXG4gICAgICB2YXIoLS1jb2xvci10dXJib3BhY2stdGV4dC1ibHVlKSAxMDAlXFxuICAgICk7XFxuICAgIGJhY2tncm91bmQtY2xpcDogdGV4dDtcXG4gICAgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6IHRleHQ7XFxuICAgIC13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIH1cXG5cIl0sbnx8KG49ZS5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUobil9fSkpKTtyZXR1cm4gcjE9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sdH1mdW5jdGlvbiByMihlKXt2YXIgbj1lLnZlcnNpb25JbmZvLHQ9ZS5pc0RyYWdnYWJsZSxyPWUuc2hvd1Jlc3RhcnRTZXJ2ZXJCdXR0b24sbz0ocHJvY2Vzcy5lbnYuX19ORVhUX0JVTkRMRVJ8fFwiV0VCUEFDS1wiKS50b1VwcGVyQ2FzZSgpO3JldHVybigwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1mb290ZXJcIjohMCxcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWRyYWdnYWJsZVwiOnQsY2hpbGRyZW46WygwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1mb290ZXItdGFiLWdyb3VwXCI6ITAsY2hpbGRyZW46WygwLHkuanN4KShySix7dmVyc2lvbkluZm86bn0pLCgwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1mb290ZXItdGFiXCI6ITAsY2hpbGRyZW46WygwLHkuanN4KShcInNwYW5cIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1mb290ZXItdGFiLWJ1bmRsZXItbmFtZVwiOm8sY2hpbGRyZW46b30pLCgwLHkuanN4KShcInNwYW5cIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1mb290ZXItdGFiLWJ1bmRsZXItc3RhdHVzXCI6ITAsY2hpbGRyZW46XCJlbmFibGVkXCJ9KV19KV19KSxyJiYoMCx5LmpzeCkoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1mb290ZXItdGFiLWdyb3VwXCI6ITAsY2hpbGRyZW46KDAseS5qc3gpKHJRLHtzaG93QnV0dG9uOiEwfSl9KV19KX12YXIgcjQ9ZWkocjEoKSk7ZnVuY3Rpb24gcjUoZSl7dmFyIG4sdDtyZXR1cm4oMCx5LmpzeCkoXCJzdmdcIiwobj1mdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTZcIix2aWV3Qm94OlwiMCAwIDE2IDE2XCIsXCJhcmlhLWhpZGRlblwiOiEwfSxlKSx0PXQ9e2NoaWxkcmVuOigwLHkuanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk0xNC4wNjA3IDUuNDk5OTlMMTMuNTMwMyA2LjAzMDMyTDguNzA3MSAxMC44NTM1QzguMzE2NTggMTEuMjQ0MSA3LjY4MzQxIDExLjI0NDEgNy4yOTI4OSAxMC44NTM1TDIuNDY5NjYgNi4wMzAzMkwxLjkzOTMzIDUuNDk5OTlMMi45OTk5OSA0LjQzOTMzTDMuNTMwMzIgNC45Njk2Nkw3Ljk5OTk5IDkuNDM5MzNMMTIuNDY5NyA0Ljk2OTY2TDEzIDQuNDM5MzNMMTQuMDYwNyA1LjQ5OTk5WlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpKX0pLG4pKX1mdW5jdGlvbiByMyhlKXt2YXIgbix0LHI9ZS5jaGlsZHJlbixvPWUucHJlZml4LGE9ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz1mdW5jdGlvbihlLG4pe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHQscixvPXt9LGE9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl0PWFbcl0sbi5pbmRleE9mKHQpPj0wfHwob1t0XT1lW3RdKTtyZXR1cm4gb30oZSxuKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLCEobi5pbmRleE9mKHQpPj0wKSYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsdCkmJihvW3RdPWVbdF0pfXJldHVybiBvfShlLFtcImNoaWxkcmVuXCIsXCJwcmVmaXhcIl0pO3JldHVybigwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1zZWxlY3RcIjohMCxjaGlsZHJlbjpbbywoMCx5LmpzeCkoXCJzZWxlY3RcIiwobj1mdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHt9LGEpLHQ9dD17Y2hpbGRyZW46cn0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKSl9KSxuKSksKDAseS5qc3gpKHI1LHt3aWR0aDoxNixoZWlnaHQ6MTZ9KV19KX1mdW5jdGlvbiByNihlLG4peyhudWxsPT1ufHxuPmUubGVuZ3RoKSYmKG49ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLHI9QXJyYXkobik7dDxuO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9ZnVuY3Rpb24gcjkoZSxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0odD1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2godC52YWx1ZSksIW58fGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KGUsbil8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIHI2KGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIHI2KGUsbil9fShlLG4pfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIHI4KCl7dmFyIGUsbix0PShlPVtcIlxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXNldHRpbmdzXSB7XFxuICAgIHBhZGRpbmc6IDE2cHg7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtc2V0dGluZ3Mtc2VjdGlvbl06Zmlyc3QtY2hpbGQge1xcbiAgICBwYWRkaW5nLXRvcDogMDtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZXR0aW5ncy1zZWN0aW9uXSB7XFxuICAgIHBhZGRpbmc6IDEycHggMDtcXG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBnYXA6IDI0cHg7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtc2V0dGluZ3Mtc2VjdGlvbl06bGFzdC1jaGlsZCB7XFxuICAgIHBhZGRpbmctYm90dG9tOiAwO1xcbiAgICBib3JkZXItYm90dG9tOiBub25lO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXNldHRpbmdzLXNlY3Rpb24taGVhZGVyXSB7XFxuICAgIG1hcmdpbi1ib3R0b206IDA7XFxuICAgIGZsZXg6IDE7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtc2V0dGluZ3Mtc2VjdGlvbi1oZWFkZXJdIGxhYmVsIHtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE0KTtcXG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICAgIG1hcmdpbjogMDtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZXR0aW5ncy1zZWN0aW9uLWRlc2NyaXB0aW9uXSB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTkwMCk7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNCk7XFxuICAgIG1hcmdpbjogMDtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1zZWxlY3RdLFxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXNldHRpbmdzLXNlY3Rpb24tYWN0aW9uLWJ1dHRvbl0ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBnYXA6IDhweDtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtbGcpO1xcbiAgICBmb250LXdlaWdodDogNDAwO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTQpO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gICAgcGFkZGluZzogNnB4IDhweDtcXG5cXG4gICAgJjpob3ZlciB7XFxuICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS0xMDApO1xcbiAgICB9XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtc2VsZWN0XSB7XFxuICAgICY6Zm9jdXMtd2l0aGluIHtcXG4gICAgICBvdXRsaW5lOiB2YXIoLS1mb2N1cy1yaW5nKTtcXG4gICAgfVxcblxcbiAgICBzZWxlY3Qge1xcbiAgICAgIGFsbDogdW5zZXQ7XFxuICAgIH1cXG5cXG4gICAgb3B0aW9uIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIDpnbG9iYWwoLmljb24pIHtcXG4gICAgd2lkdGg6IDE4cHg7XFxuICAgIGhlaWdodDogMThweDtcXG4gICAgY29sb3I6ICM2NjY7XFxuICB9XFxuXCJdLG58fChuPWUuc2xpY2UoMCkpLE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSx7cmF3Ont2YWx1ZTpPYmplY3QuZnJlZXplKG4pfX0pKSk7cmV0dXJuIHI4PWZ1bmN0aW9uKCl7cmV0dXJuIHR9LHR9ZnVuY3Rpb24gcjcoZSl7c3dpdGNoKGUudGhlbWUpe2Nhc2VcInN5c3RlbVwiOnJldHVybigwLHkuanN4KShyZSx7fSk7Y2FzZVwiZGFya1wiOnJldHVybigwLHkuanN4KSh0Nyx7fSk7Y2FzZVwibGlnaHRcIjpyZXR1cm4oMCx5LmpzeCkodDgse30pO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIG9lKGUpe3ZhciBuPWUuZGV2VG9vbHNQb3NpdGlvbix0PWUuc2NhbGUscj1lLmhhbmRsZVBvc2l0aW9uQ2hhbmdlLG89ZS5oYW5kbGVTY2FsZUNoYW5nZSxhPXI5KCgwLHgudXNlU3RhdGUpKGZ1bmN0aW9uKCl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGxvY2FsU3RvcmFnZSlyZXR1cm5cInN5c3RlbVwiO3ZhciBlPWxvY2FsU3RvcmFnZS5nZXRJdGVtKFEpO3JldHVyblwiZGFya1wiPT09ZXx8XCJsaWdodFwiPT09ZT9lOlwic3lzdGVtXCJ9KCkpLDIpLGk9YVswXSxsPWFbMV07ZnVuY3Rpb24gcyhlKXt2YXIgbj1cIi9fX25leHRqc19yZXN0YXJ0X2RldlwiO2UmJihuPVwiL19fbmV4dGpzX3Jlc3RhcnRfZGV2P2ludmFsaWRhdGVQZXJzaXN0ZW50Q2FjaGVcIiksZmV0Y2gobix7bWV0aG9kOlwiUE9TVFwifSkudGhlbihmdW5jdGlvbigpe30pfXJldHVybigwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZXR0aW5nc1wiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtc2V0dGluZ3Mtc2VjdGlvblwiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtc2V0dGluZ3Mtc2VjdGlvbi1oZWFkZXJcIjohMCxjaGlsZHJlbjpbKDAseS5qc3gpKFwibGFiZWxcIix7aHRtbEZvcjpcInRoZW1lXCIsY2hpbGRyZW46XCJUaGVtZVwifSksKDAseS5qc3gpKFwicFwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXNldHRpbmdzLXNlY3Rpb24tZGVzY3JpcHRpb25cIjohMCxjaGlsZHJlbjpcIlNlbGVjdCB5b3VyIHRoZW1lIHByZWZlcmVuY2UuXCJ9KV19KSwoMCx5LmpzeHMpKHIzLHtpZDpcInRoZW1lXCIsbmFtZTpcInRoZW1lXCIscHJlZml4OigwLHkuanN4KShyNyx7dGhlbWU6aX0pLHZhbHVlOmksb25DaGFuZ2U6ZnVuY3Rpb24oZSl7dmFyIG49ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIm5leHRqcy1wb3J0YWxcIik7aWYobil7aWYobChlLnRhcmdldC52YWx1ZSksXCJzeXN0ZW1cIj09PWUudGFyZ2V0LnZhbHVlKXtuLmNsYXNzTGlzdC5yZW1vdmUoXCJkYXJrXCIpLG4uY2xhc3NMaXN0LnJlbW92ZShcImxpZ2h0XCIpLGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFEpO3JldHVybn1cImRhcmtcIj09PWUudGFyZ2V0LnZhbHVlPyhuLmNsYXNzTGlzdC5hZGQoXCJkYXJrXCIpLG4uY2xhc3NMaXN0LnJlbW92ZShcImxpZ2h0XCIpLGxvY2FsU3RvcmFnZS5zZXRJdGVtKFEsXCJkYXJrXCIpKToobi5jbGFzc0xpc3QucmVtb3ZlKFwiZGFya1wiKSxuLmNsYXNzTGlzdC5hZGQoXCJsaWdodFwiKSxsb2NhbFN0b3JhZ2Uuc2V0SXRlbShRLFwibGlnaHRcIikpfX0sY2hpbGRyZW46WygwLHkuanN4KShcIm9wdGlvblwiLHt2YWx1ZTpcInN5c3RlbVwiLGNoaWxkcmVuOlwiU3lzdGVtXCJ9KSwoMCx5LmpzeCkoXCJvcHRpb25cIix7dmFsdWU6XCJsaWdodFwiLGNoaWxkcmVuOlwiTGlnaHRcIn0pLCgwLHkuanN4KShcIm9wdGlvblwiLHt2YWx1ZTpcImRhcmtcIixjaGlsZHJlbjpcIkRhcmtcIn0pXX0pXX0pLCgwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZXR0aW5ncy1zZWN0aW9uXCI6ITAsY2hpbGRyZW46WygwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZXR0aW5ncy1zZWN0aW9uLWhlYWRlclwiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJsYWJlbFwiLHtodG1sRm9yOlwicG9zaXRpb25cIixjaGlsZHJlbjpcIlBvc2l0aW9uXCJ9KSwoMCx5LmpzeCkoXCJwXCIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtc2V0dGluZ3Mtc2VjdGlvbi1kZXNjcmlwdGlvblwiOiEwLGNoaWxkcmVuOlwiQWRqdXN0IHRoZSBwbGFjZW1lbnQgb2YgeW91ciBkZXYgdG9vbHMuXCJ9KV19KSwoMCx5LmpzeHMpKHIzLHtpZDpcInBvc2l0aW9uXCIsbmFtZTpcInBvc2l0aW9uXCIsdmFsdWU6bixvbkNoYW5nZTpyLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJvcHRpb25cIix7dmFsdWU6XCJib3R0b20tbGVmdFwiLGNoaWxkcmVuOlwiQm90dG9tIExlZnRcIn0pLCgwLHkuanN4KShcIm9wdGlvblwiLHt2YWx1ZTpcImJvdHRvbS1yaWdodFwiLGNoaWxkcmVuOlwiQm90dG9tIFJpZ2h0XCJ9KSwoMCx5LmpzeCkoXCJvcHRpb25cIix7dmFsdWU6XCJ0b3AtbGVmdFwiLGNoaWxkcmVuOlwiVG9wIExlZnRcIn0pLCgwLHkuanN4KShcIm9wdGlvblwiLHt2YWx1ZTpcInRvcC1yaWdodFwiLGNoaWxkcmVuOlwiVG9wIFJpZ2h0XCJ9KV19KV19KSwoMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtc2V0dGluZ3Mtc2VjdGlvblwiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtc2V0dGluZ3Mtc2VjdGlvbi1oZWFkZXJcIjohMCxjaGlsZHJlbjpbKDAseS5qc3gpKFwibGFiZWxcIix7aHRtbEZvcjpcInNpemVcIixjaGlsZHJlbjpcIlNpemVcIn0pLCgwLHkuanN4KShcInBcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZXR0aW5ncy1zZWN0aW9uLWRlc2NyaXB0aW9uXCI6ITAsY2hpbGRyZW46XCJBZGp1c3QgdGhlIHNpemUgb2YgeW91ciBkZXYgdG9vbHMuXCJ9KV19KSwoMCx5LmpzeCkocjMse2lkOlwic2l6ZVwiLG5hbWU6XCJzaXplXCIsdmFsdWU6dCxvbkNoYW5nZTpvLGNoaWxkcmVuOk9iamVjdC5lbnRyaWVzKFMpLm1hcChmdW5jdGlvbihlKXt2YXIgbj1yOShlLDIpLHQ9blswXSxyPW5bMV07cmV0dXJuKDAseS5qc3gpKFwib3B0aW9uXCIse3ZhbHVlOnIsY2hpbGRyZW46dH0sdCl9KX0pXX0pLCgwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZXR0aW5ncy1zZWN0aW9uXCI6ITAsY2hpbGRyZW46WygwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZXR0aW5ncy1zZWN0aW9uLWhlYWRlclwiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJsYWJlbFwiLHtpZDpcImhpZGUtZGV2LXRvb2xzXCIsY2hpbGRyZW46XCJIaWRlIERldiBUb29scyBmb3IgdGhpcyBzZXNzaW9uXCJ9KSwoMCx5LmpzeCkoXCJwXCIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtc2V0dGluZ3Mtc2VjdGlvbi1kZXNjcmlwdGlvblwiOiEwLGNoaWxkcmVuOlwiSGlkZSBEZXYgVG9vbHMgdW50aWwgeW91IHJlc3RhcnQgeW91ciBkZXYgc2VydmVyLCBvciAxIGRheS5cIn0pXX0pLCgwLHkuanN4KShcImRpdlwiLHtjaGlsZHJlbjooMCx5LmpzeHMpKFwiYnV0dG9uXCIse1wiYXJpYS1kZXNjcmliZWRieVwiOlwiaGlkZS1kZXYtdG9vbHNcIixuYW1lOlwiaGlkZS1kZXYtdG9vbHNcIixcImRhdGEtaGlkZS1kZXYtdG9vbHNcIjohMCxcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXNldHRpbmdzLXNlY3Rpb24tYWN0aW9uLWJ1dHRvblwiOiEwLG9uQ2xpY2s6ZnVuY3Rpb24oKXtmZXRjaChcIi9fX25leHRqc19kaXNhYmxlX2Rldl9pbmRpY2F0b3JcIix7bWV0aG9kOlwiUE9TVFwifSl9LGNoaWxkcmVuOlsoMCx5LmpzeCkodDkse30pLCgwLHkuanN4KShcInNwYW5cIix7Y2hpbGRyZW46XCJIaWRlXCJ9KV19KX0pXX0pLCgwLHkuanN4KShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXNldHRpbmdzLXNlY3Rpb25cIjohMCxjaGlsZHJlbjooMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtc2V0dGluZ3Mtc2VjdGlvbi1oZWFkZXJcIjohMCxjaGlsZHJlbjpbKDAseS5qc3gpKFwibGFiZWxcIix7Y2hpbGRyZW46XCJEaXNhYmxlIERldiBUb29scyBmb3IgdGhpcyBwcm9qZWN0XCJ9KSwoMCx5LmpzeHMpKFwicFwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXNldHRpbmdzLXNlY3Rpb24tZGVzY3JpcHRpb25cIjohMCxjaGlsZHJlbjpbXCJUbyBkaXNhYmxlIHRoaXMgVUkgY29tcGxldGVseSwgc2V0XCIsXCIgXCIsKDAseS5qc3gpKFwiY29kZVwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlXCIsY2hpbGRyZW46XCJkZXZJbmRpY2F0b3JzOiBmYWxzZVwifSksXCIgaW4geW91ciBcIiwoMCx5LmpzeCkoXCJjb2RlXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGVcIixjaGlsZHJlbjpcIm5leHQuY29uZmlnXCJ9KSxcIiBmaWxlLlwiXX0pXX0pfSksKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXNldHRpbmdzLXNlY3Rpb25cIjohMCxjaGlsZHJlbjpbKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXNldHRpbmdzLXNlY3Rpb24taGVhZGVyXCI6ITAsY2hpbGRyZW46WygwLHkuanN4KShcImxhYmVsXCIse2lkOlwicmVzdGFydC1kZXYtc2VydmVyXCIsY2hpbGRyZW46XCJSZXN0YXJ0IERldiBTZXJ2ZXJcIn0pLCgwLHkuanN4KShcInBcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZXR0aW5ncy1zZWN0aW9uLWRlc2NyaXB0aW9uXCI6ITAsY2hpbGRyZW46XCJSZXN0YXJ0cyB0aGUgZGV2ZWxvcG1lbnQgc2VydmVyIHdpdGhvdXQgbmVlZGluZyB0byBsZWF2ZSB0aGUgYnJvd3Nlci5cIn0pXX0pLCgwLHkuanN4KShcImRpdlwiLHtjaGlsZHJlbjooMCx5LmpzeCkoXCJidXR0b25cIix7XCJhcmlhLWRlc2NyaWJlZGJ5XCI6XCJyZXN0YXJ0LWRldi1zZXJ2ZXJcIix0aXRsZTpcIlJlc3RhcnRzIHRoZSBkZXZlbG9wbWVudCBzZXJ2ZXIgd2l0aG91dCBuZWVkaW5nIHRvIGxlYXZlIHRoZSBicm93c2VyLlwiLG5hbWU6XCJyZXN0YXJ0LWRldi1zZXJ2ZXJcIixcImRhdGEtcmVzdGFydC1kZXYtc2VydmVyXCI6ITAsXCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZXR0aW5ncy1zZWN0aW9uLWFjdGlvbi1idXR0b25cIjohMCxvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHMoITEpfSxjaGlsZHJlbjooMCx5LmpzeCkoXCJzcGFuXCIse2NoaWxkcmVuOlwiUmVzdGFydFwifSl9KX0pXX0pLHByb2Nlc3MuZW52Ll9fTkVYVF9UVVJCT1BBQ0tfUEVSU0lTVEVOVF9DQUNIRT8oMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtc2V0dGluZ3Mtc2VjdGlvblwiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtc2V0dGluZ3Mtc2VjdGlvbi1oZWFkZXJcIjohMCxjaGlsZHJlbjpbKDAseS5qc3gpKFwibGFiZWxcIix7aWQ6XCJyZXNldC1idW5kbGVyLWNhY2hlXCIsY2hpbGRyZW46XCJSZXNldCBCdW5kbGVyIENhY2hlXCJ9KSwoMCx5LmpzeCkoXCJwXCIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtc2V0dGluZ3Mtc2VjdGlvbi1kZXNjcmlwdGlvblwiOiEwLGNoaWxkcmVuOlwiQ2xlYXJzIHRoZSBidW5kbGVyIGNhY2hlIGFuZCByZXN0YXJ0cyB0aGUgZGV2IHNlcnZlci4gSGVscGZ1bCBpZiB5b3UgYXJlIHNlZWluZyBzdGFsZSBlcnJvcnMgb3IgY2hhbmdlcyBhcmUgbm90IGFwcGVhcmluZy5cIn0pXX0pLCgwLHkuanN4KShcImRpdlwiLHtjaGlsZHJlbjooMCx5LmpzeCkoXCJidXR0b25cIix7XCJhcmlhLWRlc2NyaWJlZGJ5XCI6XCJyZXNldC1idW5kbGVyLWNhY2hlXCIsdGl0bGU6XCJDbGVhcnMgdGhlIGJ1bmRsZXIgY2FjaGUgYW5kIHJlc3RhcnRzIHRoZSBkZXYgc2VydmVyLiBIZWxwZnVsIGlmIHlvdSBhcmUgc2VlaW5nIHN0YWxlIGVycm9ycyBvciBjaGFuZ2VzIGFyZSBub3QgYXBwZWFyaW5nLlwiLG5hbWU6XCJyZXNldC1idW5kbGVyLWNhY2hlXCIsXCJkYXRhLXJlc2V0LWJ1bmRsZXItY2FjaGVcIjohMCxcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXNldHRpbmdzLXNlY3Rpb24tYWN0aW9uLWJ1dHRvblwiOiEwLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gcyghMCl9LGNoaWxkcmVuOigwLHkuanN4KShcInNwYW5cIix7Y2hpbGRyZW46XCJSZXNldCBDYWNoZVwifSl9KX0pXX0pOm51bGxdfSl9dmFyIG9uPWVpKHI4KCkpO2Z1bmN0aW9uIG90KCl7dmFyIGUsbix0PShlPVtcIlxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtc2lkZWJhci1mcmFtZS1za2VsZXRvbi1iYXJdIHtcXG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplLTEyKTtcXG4gICAgYm9yZGVyLXJhZGl1czogMTAwcHg7XFxuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudChcXG4gICAgICA5MGRlZyxcXG4gICAgICB2YXIoLS1jb2xvci1ncmF5LTIwMCkgMjUlLFxcbiAgICAgIHZhcigtLWNvbG9yLWdyYXktMTAwKSA1MCUsXFxuICAgICAgdmFyKC0tY29sb3ItZ3JheS0yMDApIDc1JVxcbiAgICApO1xcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDIwMCUgMTAwJTtcXG4gICAgYW5pbWF0aW9uOiBza2VsZXRvbi1zaGltbWVyIDEuNXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtdGFiLWlzc3Vlcy1zaWRlYmFyLWZyYW1lLXNrZWxldG9uLWJhcj0nMSddIHtcXG4gICAgd2lkdGg6IDc1JTtcXG4gICAgbWFyZ2luLWJvdHRvbTogOHB4O1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtc2lkZWJhci1mcmFtZS1za2VsZXRvbi1iYXI9JzInXSB7XFxuICAgIHdpZHRoOiAzNi41JTtcXG4gIH1cXG5cXG4gIEBrZXlmcmFtZXMgc2tlbGV0b24tc2hpbW1lciB7XFxuICAgIDAlIHtcXG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjAwJSAwO1xcbiAgICB9XFxuICAgIDEwMCUge1xcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDIwMCUgMDtcXG4gICAgfVxcbiAgfVxcblxcbiAgLyogUmVzcGVjdCB1c2VyJ3MgbW90aW9uIHByZWZlcmVuY2VzICovXFxuICBAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xcbiAgICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtdGFiLWlzc3Vlcy1zaWRlYmFyLWZyYW1lLXNrZWxldG9uLWJhcj0nMSddLFxcbiAgICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtdGFiLWlzc3Vlcy1zaWRlYmFyLWZyYW1lLXNrZWxldG9uLWJhcj0nMiddIHtcXG4gICAgICBhbmltYXRpb246IG5vbmU7XFxuICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS0yMDApO1xcbiAgICB9XFxuICB9XFxuXCJdLG58fChuPWUuc2xpY2UoMCkpLE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSx7cmF3Ont2YWx1ZTpPYmplY3QuZnJlZXplKG4pfX0pKSk7cmV0dXJuIG90PWZ1bmN0aW9uKCl7cmV0dXJuIHR9LHR9ZnVuY3Rpb24gb3IoKXtyZXR1cm4oMCx5LmpzeHMpKHkuRnJhZ21lbnQse2NoaWxkcmVuOlsoMCx5LmpzeCkoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC10YWItaXNzdWVzLXNpZGViYXItZnJhbWUtc2tlbGV0b24tYmFyXCI6XCIxXCJ9KSwoMCx5LmpzeCkoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC10YWItaXNzdWVzLXNpZGViYXItZnJhbWUtc2tlbGV0b24tYmFyXCI6XCIyXCJ9KV19KX12YXIgb289ZWkob3QoKSk7ZnVuY3Rpb24gb2EoKXt2YXIgZSxuLHQ9KGU9W1wiXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtdGFiLWlzc3Vlcy1zaWRlYmFyXSB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIGdhcDogNHB4O1xcbiAgICBwYWRkaW5nOiA4cHg7XFxuICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG4gICAgb3ZlcmZsb3cteTogYXV0bztcXG4gICAgbWluLWhlaWdodDogMDtcXG5cXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDU3NXB4KSB7XFxuICAgICAgbWF4LXdpZHRoOiAxMTJweDtcXG4gICAgfVxcblxcbiAgICBAbWVkaWEgKG1pbi13aWR0aDogNTc2cHgpIHtcXG4gICAgICBtYXgtd2lkdGg6IDEzOHB4O1xcbiAgICAgIHdpZHRoOiAxMDAlO1xcbiAgICB9XFxuXFxuICAgIEBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xcbiAgICAgIG1heC13aWR0aDogMTcyLjVweDtcXG4gICAgICB3aWR0aDogMTAwJTtcXG4gICAgfVxcblxcbiAgICBAbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcXG4gICAgICBtYXgtd2lkdGg6IDIzMHB4O1xcbiAgICAgIHdpZHRoOiAxMDAlO1xcbiAgICB9XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtdGFiLWlzc3Vlcy1zaWRlYmFyLWZyYW1lXSB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIHBhZGRpbmc6IDEwcHggOHB4O1xcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLWxnKTtcXG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjJzIGVhc2UtaW4tb3V0O1xcblxcbiAgICAmOmhvdmVyIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTIwMCk7XFxuICAgIH1cXG5cXG4gICAgJjphY3RpdmUge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMzAwKTtcXG4gICAgfVxcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtc2lkZWJhci1mcmFtZS1hY3RpdmU9J3RydWUnXSB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwKTtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC10YWItaXNzdWVzLXNpZGViYXItZnJhbWUtZXJyb3ItdHlwZV0ge1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTQpO1xcbiAgICBmb250LXdlaWdodDogNTAwO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tc2l6ZS0yMCk7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtdGFiLWlzc3Vlcy1zaWRlYmFyLWZyYW1lLXNvdXJjZV0ge1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTkwMCk7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xMyk7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1zaXplLTE4KTtcXG4gIH1cXG5cXG4gIC8qIEVsbGlwc2lzIGZvciBsb25nIHN0YWNrIGZyYW1lIHNvdXJjZSBvciBzbWFsbCBkZXZpY2VzLiAqL1xcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtc2lkZWJhci1mcmFtZS1lcnJvci10eXBlXSxcXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC10YWItaXNzdWVzLXNpZGViYXItZnJhbWUtc291cmNlXSB7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgICBtYXgtd2lkdGg6IDEwMCU7XFxuICB9XFxuXCJdLG58fChuPWUuc2xpY2UoMCkpLE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSx7cmF3Ont2YWx1ZTpPYmplY3QuZnJlZXplKG4pfX0pKSk7cmV0dXJuIG9hPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LHR9ZnVuY3Rpb24gb2koZSl7dmFyIG49ZS5ydW50aW1lRXJyb3JzLHQ9ZS5hY3RpdmVJZHgscj1lLnNldEFjdGl2ZUluZGV4O3JldHVybiAwPT09bi5sZW5ndGg/bnVsbDooMCx5LmpzeCkoXCJhc2lkZVwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtc2lkZWJhclwiOiEwLGNoaWxkcmVuOm4ubWFwKGZ1bmN0aW9uKGUsbil7dmFyIG89bj09PXQ7cmV0dXJuKDAseS5qc3gpKG9zLHtydW50aW1lRXJyb3I6ZSxpZHg6bixpc0FjdGl2ZTpvLHNldEFjdGl2ZUluZGV4OnJ9LG4pfSl9KX12YXIgb2w9KDAseC5tZW1vKShmdW5jdGlvbihlKXt2YXIgbj1lLnJ1bnRpbWVFcnJvcix0PXRqKG4pLHI9KDAseC51c2VNZW1vKShmdW5jdGlvbigpe3ZhciBlLG49dC5maW5kSW5kZXgoZnVuY3Rpb24oZSl7cmV0dXJuIWUuaWdub3JlZCYmISFlLm9yaWdpbmFsQ29kZUZyYW1lJiYhIWUub3JpZ2luYWxTdGFja0ZyYW1lfSk7cmV0dXJuIG51bGwhPShlPXRbbl0pP2U6bnVsbH0sW3RdKTtpZighKG51bGw9PXI/dm9pZCAwOnIub3JpZ2luYWxTdGFja0ZyYW1lKSlyZXR1cm4gbnVsbDt2YXIgbz10eihuLmVycm9yLG4udHlwZSksYT1lUyhyLm9yaWdpbmFsU3RhY2tGcmFtZSk7cmV0dXJuKDAseS5qc3hzKSh5LkZyYWdtZW50LHtjaGlsZHJlbjpbKDAseS5qc3gpKFwic3BhblwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtc2lkZWJhci1mcmFtZS1lcnJvci10eXBlXCI6ITAsY2hpbGRyZW46b30pLCgwLHkuanN4KShcInNwYW5cIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC10YWItaXNzdWVzLXNpZGViYXItZnJhbWUtc291cmNlXCI6ITAsY2hpbGRyZW46YX0pXX0pfSksb3M9KDAseC5tZW1vKShmdW5jdGlvbihlKXt2YXIgbj1lLnJ1bnRpbWVFcnJvcix0PWUuaWR4LHI9ZS5pc0FjdGl2ZSxvPWUuc2V0QWN0aXZlSW5kZXg7cmV0dXJuKDAseS5qc3gpKFwiYnV0dG9uXCIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtdGFiLWlzc3Vlcy1zaWRlYmFyLWZyYW1lXCI6ITAsXCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC10YWItaXNzdWVzLXNpZGViYXItZnJhbWUtYWN0aXZlXCI6cixvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIG8odCl9LGNoaWxkcmVuOigwLHkuanN4KSh4LlN1c3BlbnNlLHtmYWxsYmFjazooMCx5LmpzeCkob3Ise30pLGNoaWxkcmVuOigwLHkuanN4KShvbCx7cnVudGltZUVycm9yOm59KX0pfSl9KSxvYz1laShvYSgpKTtmdW5jdGlvbiBvdSgpe3ZhciBlLG4sdD0oZT1bXCJcXG4gIFtkYXRhLW5leHRqcy1jb2RlZnJhbWUtc2tlbGV0b25dIHtcXG4gICAgbWFyZ2luOiA4cHggMDtcXG4gICAgYm9yZGVyLXJhZGl1czogOHB4O1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTIwMCk7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1jb2RlZnJhbWUtc2tlbGV0b24taGVhZGVyXSB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIHBhZGRpbmc6IDEycHg7XFxuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICAgIGJvcmRlci1yYWRpdXM6IDhweCA4cHggMCAwO1xcbiAgICBnYXA6IDZweDtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1jb2RlZnJhbWUtc2tlbGV0b24taWNvbl0ge1xcbiAgICB3aWR0aDogdmFyKC0tc2l6ZS0xNik7XFxuICAgIGhlaWdodDogdmFyKC0tc2l6ZS0xNik7XFxuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcXG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KFxcbiAgICAgIDkwZGVnLFxcbiAgICAgIHZhcigtLWNvbG9yLWdyYXktMjAwKSAyNSUsXFxuICAgICAgdmFyKC0tY29sb3ItZ3JheS0xMDApIDUwJSxcXG4gICAgICB2YXIoLS1jb2xvci1ncmF5LTIwMCkgNzUlXFxuICAgICk7XFxuICAgIGJhY2tncm91bmQtc2l6ZTogMjAwJSAxMDAlO1xcbiAgICBhbmltYXRpb246IHNrZWxldG9uLXNoaW1tZXIgMS41cyBlYXNlLWluLW91dCBpbmZpbml0ZTtcXG4gICAgZmxleC1zaHJpbms6IDA7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY29kZWZyYW1lLXNrZWxldG9uLWhlYWRlci1iYXJdIHtcXG4gICAgd2lkdGg6IDQyLjklO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZS1za2VsZXRvbi1idXR0b25dIHtcXG4gICAgd2lkdGg6IHZhcigtLXNpemUtMTYpO1xcbiAgICBoZWlnaHQ6IHZhcigtLXNpemUtMTYpO1xcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLWZ1bGwpO1xcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoXFxuICAgICAgOTBkZWcsXFxuICAgICAgdmFyKC0tY29sb3ItZ3JheS0yMDApIDI1JSxcXG4gICAgICB2YXIoLS1jb2xvci1ncmF5LTEwMCkgNTAlLFxcbiAgICAgIHZhcigtLWNvbG9yLWdyYXktMjAwKSA3NSVcXG4gICAgKTtcXG4gICAgYmFja2dyb3VuZC1zaXplOiAyMDAlIDEwMCU7XFxuICAgIGFuaW1hdGlvbjogc2tlbGV0b24tc2hpbW1lciAxLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xcbiAgICBmbGV4LXNocmluazogMDtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1jb2RlZnJhbWUtc2tlbGV0b24tY29udGVudF0ge1xcbiAgICBwYWRkaW5nOiAxMnB4O1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZS1za2VsZXRvbi1saW5lXSB7XFxuICAgIGhlaWdodDogdmFyKC0tc2l6ZS0xNik7XFxuICAgIGJvcmRlci1yYWRpdXM6IDEwMHB4O1xcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoXFxuICAgICAgOTBkZWcsXFxuICAgICAgdmFyKC0tY29sb3ItZ3JheS0yMDApIDI1JSxcXG4gICAgICB2YXIoLS1jb2xvci1ncmF5LTEwMCkgNTAlLFxcbiAgICAgIHZhcigtLWNvbG9yLWdyYXktMjAwKSA3NSVcXG4gICAgKTtcXG4gICAgYmFja2dyb3VuZC1zaXplOiAyMDAlIDEwMCU7XFxuICAgIGFuaW1hdGlvbjogc2tlbGV0b24tc2hpbW1lciAxLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xcbiAgICBtYXJnaW4tYm90dG9tOiA4cHg7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY29kZWZyYW1lLXNrZWxldG9uLWxpbmVdOmxhc3QtY2hpbGQge1xcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZS1za2VsZXRvbi1saW5lLTFdIHtcXG4gICAgd2lkdGg6IDMyLjUlO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZS1za2VsZXRvbi1saW5lLTJdIHtcXG4gICAgd2lkdGg6IDU2LjglO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZS1za2VsZXRvbi1saW5lLTNdIHtcXG4gICAgd2lkdGg6IDI5LjYlO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNhbGwtc3RhY2stY29udGFpbmVyXSB7XFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgbWFyZ2luLXRvcDogOHB4O1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNhbGwtc3RhY2stY291bnQtc2tlbGV0b25dIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIHdpZHRoOiB2YXIoLS1zaXplLTIwKTtcXG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplLTIwKTtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1mdWxsKTtcXG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KFxcbiAgICAgIDkwZGVnLFxcbiAgICAgIHZhcigtLWNvbG9yLWdyYXktMjAwKSAyNSUsXFxuICAgICAgdmFyKC0tY29sb3ItZ3JheS0xMDApIDUwJSxcXG4gICAgICB2YXIoLS1jb2xvci1ncmF5LTIwMCkgNzUlXFxuICAgICk7XFxuICAgIGJhY2tncm91bmQtc2l6ZTogMjAwJSAxMDAlO1xcbiAgICBhbmltYXRpb246IHNrZWxldG9uLXNoaW1tZXIgMS41cyBlYXNlLWluLW91dCBpbmZpbml0ZTtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWlnbm9yZWQtbGlzdC10b2dnbGUtYnV0dG9uLXNrZWxldG9uXSB7XFxuICAgIGFsbDogdW5zZXQ7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGJvcmRlci1yYWRpdXM6IDZweDtcXG4gICAgcGFkZGluZzogNHB4IDZweDtcXG4gICAgbWFyZ2luLXJpZ2h0OiAtNnB4O1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNhbGwtc3RhY2stc2tlbGV0b24tYmFyXSB7XFxuICAgIGhlaWdodDogdmFyKC0tc2l6ZS0xMik7XFxuICAgIHdpZHRoOiAxNDhweDtcXG4gICAgYm9yZGVyLXJhZGl1czogMTAwcHg7XFxuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudChcXG4gICAgICA5MGRlZyxcXG4gICAgICB2YXIoLS1jb2xvci1ncmF5LTIwMCkgMjUlLFxcbiAgICAgIHZhcigtLWNvbG9yLWdyYXktMTAwKSA1MCUsXFxuICAgICAgdmFyKC0tY29sb3ItZ3JheS0yMDApIDc1JVxcbiAgICApO1xcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDIwMCUgMTAwJTtcXG4gICAgYW5pbWF0aW9uOiBza2VsZXRvbi1zaGltbWVyIDEuNXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XFxuICB9XFxuXFxuICBAa2V5ZnJhbWVzIHNrZWxldG9uLXNoaW1tZXIge1xcbiAgICAwJSB7XFxuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwMCUgMDtcXG4gICAgfVxcbiAgICAxMDAlIHtcXG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAyMDAlIDA7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC8qIFJlc3BlY3QgdXNlcidzIG1vdGlvbiBwcmVmZXJlbmNlcyAqL1xcbiAgQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcXG4gICAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZS1za2VsZXRvbi1pY29uXSxcXG4gICAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZS1za2VsZXRvbi1oZWFkZXItYmFyXSxcXG4gICAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZS1za2VsZXRvbi1idXR0b25dLFxcbiAgICBbZGF0YS1uZXh0anMtY29kZWZyYW1lLXNrZWxldG9uLWxpbmVdLFxcbiAgICBbZGF0YS1uZXh0anMtY2FsbC1zdGFjay1jb3VudC1za2VsZXRvbl0sXFxuICAgIFtkYXRhLW5leHRqcy1jYWxsLXN0YWNrLXNrZWxldG9uLWJhcl0ge1xcbiAgICAgIGFuaW1hdGlvbjogbm9uZTtcXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LTIwMCk7XFxuICAgIH1cXG4gIH1cXG5cIl0sbnx8KG49ZS5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUobil9fSkpKTtyZXR1cm4gb3U9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sdH1mdW5jdGlvbiBvZCgpe3JldHVybigwLHkuanN4cykoeS5GcmFnbWVudCx7Y2hpbGRyZW46WygwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1jb2RlZnJhbWUtc2tlbGV0b25cIjohMCxjaGlsZHJlbjpbKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWNvZGVmcmFtZS1za2VsZXRvbi1oZWFkZXJcIjohMCxjaGlsZHJlbjpbKDAseS5qc3gpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtY29kZWZyYW1lLXNrZWxldG9uLWljb25cIjohMH0pLCgwLHkuanN4KShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWNvZGVmcmFtZS1za2VsZXRvbi1saW5lXCI6ITAsXCJkYXRhLW5leHRqcy1jb2RlZnJhbWUtc2tlbGV0b24taGVhZGVyLWJhclwiOiEwfSldfSksKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWNvZGVmcmFtZS1za2VsZXRvbi1jb250ZW50XCI6ITAsY2hpbGRyZW46WygwLHkuanN4KShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWNvZGVmcmFtZS1za2VsZXRvbi1saW5lXCI6ITAsXCJkYXRhLW5leHRqcy1jb2RlZnJhbWUtc2tlbGV0b24tbGluZS0xXCI6ITB9KSwoMCx5LmpzeCkoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1jb2RlZnJhbWUtc2tlbGV0b24tbGluZVwiOiEwLFwiZGF0YS1uZXh0anMtY29kZWZyYW1lLXNrZWxldG9uLWxpbmUtMlwiOiEwfSksKDAseS5qc3gpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtY29kZWZyYW1lLXNrZWxldG9uLWxpbmVcIjohMCxcImRhdGEtbmV4dGpzLWNvZGVmcmFtZS1za2VsZXRvbi1saW5lLTNcIjohMH0pXX0pXX0pLCgwLHkuanN4KShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWNhbGwtc3RhY2stY29udGFpbmVyXCI6ITAsY2hpbGRyZW46KDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWNhbGwtc3RhY2staGVhZGVyXCI6ITAsY2hpbGRyZW46WygwLHkuanN4cykoXCJwXCIse1wiZGF0YS1uZXh0anMtY2FsbC1zdGFjay10aXRsZVwiOiEwLGNoaWxkcmVuOltcIkNhbGwgU3RhY2tcIixcIiBcIiwoMCx5LmpzeCkoXCJzcGFuXCIse1wiZGF0YS1uZXh0anMtY2FsbC1zdGFjay1jb3VudFwiOiEwLFwiZGF0YS1uZXh0anMtY2FsbC1zdGFjay1jb3VudC1za2VsZXRvblwiOiEwfSldfSksKDAseS5qc3gpKFwiYnV0dG9uXCIse1wiZGF0YS1uZXh0anMtY2FsbC1zdGFjay1pZ25vcmVkLWxpc3QtdG9nZ2xlLWJ1dHRvblwiOiEwLFwiZGF0YS1uZXh0anMtY2FsbC1zdGFjay1pZ25vcmVkLWxpc3QtdG9nZ2xlLWJ1dHRvbi1za2VsZXRvblwiOiEwLFwiYXJpYS1oaWRkZW5cIjpcInRydWVcIixjaGlsZHJlbjooMCx5LmpzeCkoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1jYWxsLXN0YWNrLXNrZWxldG9uLWJhclwiOiEwfSl9KV19KX0pXX0pfXZhciBvZj1laShvdSgpKTtmdW5jdGlvbiBvcChlLG4peyhudWxsPT1ufHxuPmUubGVuZ3RoKSYmKG49ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLHI9QXJyYXkobik7dDxuO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9ZnVuY3Rpb24gb2goZSxuLHQscixvLGEsaSl7dHJ5e3ZhciBsPWVbYV0oaSkscz1sLnZhbHVlfWNhdGNoKGUpe3QoZSk7cmV0dXJufWwuZG9uZT9uKHMpOlByb21pc2UucmVzb2x2ZShzKS50aGVuKHIsbyl9ZnVuY3Rpb24gb2coZSxuLHQpe3JldHVybiBuIGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7dmFsdWU6dCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbbl09dCxlfWZ1bmN0aW9uIG9tKCl7dmFyIGUsbix0PShlPVtcIlxcbiAgW2RhdGEtbmV4dGpzLWlzc3VlLWZlZWRiYWNrLWJ1dHRvbi1ncm91cF0ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtZnVsbCk7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMTAwKTtcXG4gICAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LXNtYWxsKTtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1pc3N1ZS1mZWVkYmFjay1idXR0b24tZ3JvdXBdIGJ1dHRvbiB7XFxuICAgIGhlaWdodDogMTAwJTtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtaXNzdWUtZmVlZGJhY2stYnV0dG9uLWdyb3VwXSBidXR0b246Zmlyc3QtY2hpbGQge1xcbiAgICBwYWRkaW5nOiA0cHggM3B4IDRweCA1cHg7XFxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtZnVsbCkgMCAwIHZhcigtLXJvdW5kZWQtZnVsbCk7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtaXNzdWUtZmVlZGJhY2stYnV0dG9uLWdyb3VwXSBidXR0b246bGFzdC1jaGlsZCB7XFxuICAgIHBhZGRpbmc6IDRweCA1cHggNHB4IDNweDtcXG4gICAgYm9yZGVyLXJhZGl1czogMCB2YXIoLS1yb3VuZGVkLWZ1bGwpIHZhcigtLXJvdW5kZWQtZnVsbCkgMDtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1pc3N1ZS1mZWVkYmFjay1zZXBhcmF0b3JdIHtcXG4gICAgd2lkdGg6IDFweDtcXG4gICAgaGVpZ2h0OiAxMDAlO1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICB9XFxuXCJdLG58fChuPWUuc2xpY2UoMCkpLE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSx7cmF3Ont2YWx1ZTpPYmplY3QuZnJlZXplKG4pfX0pKSk7cmV0dXJuIG9tPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LHR9ZnVuY3Rpb24gb3YoZSl7dmFyIG4sdCxyPWUuZXJyb3JDb2RlLG89KG49KDAseC51c2VTdGF0ZSkoe30pLHQ9MixmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShuKXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShuLDIpfHxmdW5jdGlvbihlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBvcChlLG4pO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20odCk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiBvcChlLG4pfX0obix0KXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKSksYT1vWzBdLGk9b1sxXSxsPWFbcl0scz1wcm9jZXNzLmVudi5fX05FWFRfVEVMRU1FVFJZX0RJU0FCTEVELGM9KDAseC51c2VDYWxsYmFjaykoZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuKG49ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG8sYT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZvWzBdKXRocm93IG9bMV07cmV0dXJuIG9bMV19LHRyeXM6W10sb3BzOltdfSxpPU9iamVjdC5jcmVhdGUoKFwiZnVuY3Rpb25cIj09dHlwZW9mIEl0ZXJhdG9yP0l0ZXJhdG9yOk9iamVjdCkucHJvdG90eXBlKTtyZXR1cm4gaS5uZXh0PWwoMCksaS50aHJvdz1sKDEpLGkucmV0dXJuPWwoMiksXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiYoaVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxpO2Z1bmN0aW9uIGwobCl7cmV0dXJuIGZ1bmN0aW9uKHMpe3ZhciBjPVtsLHNdO2lmKHQpdGhyb3cgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtmb3IoO2kmJihpPTAsY1swXSYmKGE9MCkpLGE7KXRyeXtpZih0PTEsciYmKG89MiZjWzBdP3IucmV0dXJuOmNbMF0/ci50aHJvd3x8KChvPXIucmV0dXJuKSYmby5jYWxsKHIpLDApOnIubmV4dCkmJiEobz1vLmNhbGwocixjWzFdKSkuZG9uZSlyZXR1cm4gbztzd2l0Y2gocj0wLG8mJihjPVsyJmNbMF0sby52YWx1ZV0pLGNbMF0pe2Nhc2UgMDpjYXNlIDE6bz1jO2JyZWFrO2Nhc2UgNDpyZXR1cm4gYS5sYWJlbCsrLHt2YWx1ZTpjWzFdLGRvbmU6ITF9O2Nhc2UgNTphLmxhYmVsKysscj1jWzFdLGM9WzBdO2NvbnRpbnVlO2Nhc2UgNzpjPWEub3BzLnBvcCgpLGEudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEobz0obz1hLnRyeXMpLmxlbmd0aD4wJiZvW28ubGVuZ3RoLTFdKSYmKDY9PT1jWzBdfHwyPT09Y1swXSkpe2E9MDtjb250aW51ZX1pZigzPT09Y1swXSYmKCFvfHxjWzFdPm9bMF0mJmNbMV08b1szXSkpe2EubGFiZWw9Y1sxXTticmVha31pZig2PT09Y1swXSYmYS5sYWJlbDxvWzFdKXthLmxhYmVsPW9bMV0sbz1jO2JyZWFrfWlmKG8mJmEubGFiZWw8b1syXSl7YS5sYWJlbD1vWzJdLGEub3BzLnB1c2goYyk7YnJlYWt9b1syXSYmYS5vcHMucG9wKCksYS50cnlzLnBvcCgpO2NvbnRpbnVlfWM9bi5jYWxsKGUsYSl9Y2F0Y2goZSl7Yz1bNixlXSxyPTB9ZmluYWxseXt0PW89MH1pZig1JmNbMF0pdGhyb3cgY1sxXTtyZXR1cm57dmFsdWU6Y1swXT9jWzFdOnZvaWQgMCxkb25lOiEwfX19fSh0aGlzLGZ1bmN0aW9uKG4pe3N3aXRjaChuLmxhYmVsKXtjYXNlIDA6aShmdW5jdGlvbihuKXt2YXIgdCxvO3JldHVybiB0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXtvZyhlLG4sdFtuXSl9KX1yZXR1cm4gZX0oe30sbiksbz1udWxsIT0obz1vZyh7fSxyLGUpKT9vOnt9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobykpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QobykpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG8sZSkpfSksdH0pLG4ubGFiZWw9MTtjYXNlIDE6cmV0dXJuIG4udHJ5cy5wdXNoKFsxLDMsLDRdKSxbNCxmZXRjaChcIlwiLmNvbmNhdChwcm9jZXNzLmVudi5fX05FWFRfUk9VVEVSX0JBU0VQQVRIfHxcIlwiLFwiL19fbmV4dGpzX2Vycm9yX2ZlZWRiYWNrP1wiKS5jb25jYXQobmV3IFVSTFNlYXJjaFBhcmFtcyh7ZXJyb3JDb2RlOnIsd2FzSGVscGZ1bDplLnRvU3RyaW5nKCl9KSkpXTtjYXNlIDI6cmV0dXJuIG4uc2VudCgpLm9rfHxjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIHJlY29yZCBmZWVkYmFjayBvbiB0aGUgc2VydmVyLlwiKSxbMyw0XTtjYXNlIDM6cmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gcmVjb3JkIGZlZWRiYWNrOlwiLG4uc2VudCgpKSxbMyw0XTtjYXNlIDQ6cmV0dXJuWzJdfX0pfSxmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbyl7dmFyIGE9bi5hcHBseShlLHQpO2Z1bmN0aW9uIGkoZSl7b2goYSxyLG8saSxsLFwibmV4dFwiLGUpfWZ1bmN0aW9uIGwoZSl7b2goYSxyLG8saSxsLFwidGhyb3dcIixlKX1pKHZvaWQgMCl9KX0pKCl9LFtyXSk7cmV0dXJuKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWlzc3VlLWZlZWRiYWNrLWJ1dHRvbi1ncm91cFwiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJidXR0b25cIix7XCJhcmlhLWRpc2FibGVkXCI6cz9cInRydWVcIjp2b2lkIDAsXCJhcmlhLWxhYmVsXCI6XCJNYXJrIGFzIGhlbHBmdWxcIixvbkNsaWNrOnM/dm9pZCAwOmZ1bmN0aW9uKCl7cmV0dXJuIGMoITApfSxjbGFzc05hbWU6KDAsZUouY3gpKFwiZmVlZGJhY2stYnV0dG9uXCIsITA9PT1sJiZcInZvdGVkXCIpLHRpdGxlOnM/XCJGZWVkYmFjayBkaXNhYmxlZCBkdWUgdG8gc2V0dGluZyBORVhUX1RFTEVNRVRSWV9ESVNBQkxFRFwiOnZvaWQgMCx0eXBlOlwiYnV0dG9uXCIsY2hpbGRyZW46KDAseS5qc3gpKG53LHtcImFyaWEtaGlkZGVuXCI6XCJ0cnVlXCJ9KX0pLCgwLHkuanN4KShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWlzc3VlLWZlZWRiYWNrLXNlcGFyYXRvclwiOiEwfSksKDAseS5qc3gpKFwiYnV0dG9uXCIse1wiYXJpYS1kaXNhYmxlZFwiOnM/XCJ0cnVlXCI6dm9pZCAwLFwiYXJpYS1sYWJlbFwiOlwiTWFyayBhcyBub3QgaGVscGZ1bFwiLG9uQ2xpY2s6cz92b2lkIDA6ZnVuY3Rpb24oKXtyZXR1cm4gYyghMSl9LGNsYXNzTmFtZTooMCxlSi5jeCkoXCJmZWVkYmFjay1idXR0b25cIiwhMT09PWwmJlwidm90ZWRcIiksdGl0bGU6cz9cIkZlZWRiYWNrIGRpc2FibGVkIGR1ZSB0byBzZXR0aW5nIE5FWFRfVEVMRU1FVFJZX0RJU0FCTEVEXCI6dm9pZCAwLHR5cGU6XCJidXR0b25cIixjaGlsZHJlbjooMCx5LmpzeCkobmose1wiYXJpYS1oaWRkZW5cIjpcInRydWVcIixzdHlsZTp7dHJhbnNsYXRlOlwiMXB4IDFweFwifX0pfSldfSl9dmFyIG9iPWVpKG9tKCkpO2Z1bmN0aW9uIG95KCl7dmFyIGUsbix0PShlPVtcIlxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtY29udGVudC1sYXlvdXRdIHtcXG4gICAgZmxleDogMTtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgb3ZlcmZsb3cteTogYXV0bztcXG4gICAgbWluLWhlaWdodDogMDtcXG4gICAgcGFkZGluZzogMTRweDtcXG4gIH1cXG5cIl0sbnx8KG49ZS5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUobil9fSkpKTtyZXR1cm4gb3k9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sdH1mdW5jdGlvbiBveChlKXt2YXIgbj1lLmVycm9yLHQ9ZS5lcnJvclR5cGUscj1lLm1lc3NhZ2Usbz1lLmRlYnVnSW5mbyxhPWUuY2hpbGRyZW4saT1lLmVycm9yQ29kZSxsPWUuZW52aXJvbm1lbnROYW1lO3JldHVybigwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC10YWItaXNzdWVzLWNvbnRlbnQtbGF5b3V0XCI6ITAsY2hpbGRyZW46WygwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwibmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtaGVhZGVyXCIsY2hpbGRyZW46WygwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwibmV4dGpzX19jb250YWluZXJfZXJyb3JzX19lcnJvcl90aXRsZVwiLFwiZGF0YS1uZXh0anMtZXJyb3ItY29kZVwiOmksY2hpbGRyZW46WygwLHkuanN4cykoXCJzcGFuXCIse1wiZGF0YS1uZXh0anMtZXJyb3ItbGFiZWwtZ3JvdXBcIjohMCxjaGlsZHJlbjpbKDAseS5qc3gpKG5MLHtlcnJvclR5cGU6dH0pLGwmJigwLHkuanN4KShuSyx7ZW52aXJvbm1lbnROYW1lOmx9KV19KSwoMCx5LmpzeCkobngse2Vycm9yOm4sZGVidWdJbmZvOm8sZmVlZGJhY2tCdXR0b246aSYmKDAseS5qc3gpKG92LHtlcnJvckNvZGU6aX0pfSldfSksKDAseS5qc3gpKG56LHtlcnJvck1lc3NhZ2U6cn0pXX0pLGFdfSl9dmFyIG93PWVpKG95KCkpO2Z1bmN0aW9uIG9qKGUpe3ZhciBuLHQ7cmV0dXJuKDAseS5qc3gpKFwic3ZnXCIsKG49ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7d2lkdGg6XCIxMlwiLGhlaWdodDpcIjEyXCIsdmlld0JveDpcIjAgMCAxMiAxMlwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxlKSx0PXQ9e2NoaWxkcmVuOigwLHkuanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk0zLjk4MDcxIDEuMTI1TDEuMTI1IDMuOTgwNzFMMS4xMjUgOC4wMTkyOUwzLjk4MDcxIDEwLjg3NUg4LjAxOTI5TDEwLjg3NSA4LjAxOTI5VjMuOTgwNzFMOC4wMTkyOSAxLjEyNUgzLjk4MDcxWk0zLjgyNTM4IDBDMy42MjY0NyAwIDMuNDM1NyAwLjA3OTAxNzYgMy4yOTUwNSAwLjIxOTY3TDAuMjE5NjcgMy4yOTUwNUMwLjA3OTAxNzYgMy40MzU3IDAgMy42MjY0NyAwIDMuODI1MzhWOC4xNzQ2MkMwIDguMzczNTMgMC4wNzkwMTc4IDguNTY0MyAwLjIxOTY3IDguNzA0OTVMMy4yOTUwNSAxMS43ODAzQzMuNDM1NyAxMS45MjEgMy42MjY0NyAxMiAzLjgyNTM4IDEySDguMTc0NjJDOC4zNzM1MyAxMiA4LjU2NDMgMTEuOTIxIDguNzA0OTUgMTEuNzgwM0wxMS43ODAzIDguNzA0OTVDMTEuOTIxIDguNTY0MyAxMiA4LjM3MzUzIDEyIDguMTc0NjJWMy44MjUzOEMxMiAzLjYyNjQ3IDExLjkyMSAzLjQzNTcgMTEuNzgwMyAzLjI5NTA1TDguNzA0OTUgMC4yMTk2N0M4LjU2NDMgMC4wNzkwMTc3IDguMzczNTMgMCA4LjE3NDYyIDBIMy44MjUzOFpNNi41NjI1IDIuODEyNVYzLjM3NVY2VjYuNTYyNUg1LjQzNzVWNlYzLjM3NVYyLjgxMjVINi41NjI1Wk02IDlDNi40MTQyMSA5IDYuNzUgOC42NjQyMSA2Ljc1IDguMjVDNi43NSA3LjgzNTc5IDYuNDE0MjEgNy41IDYgNy41QzUuNTg1NzkgNy41IDUuMjUgNy44MzU3OSA1LjI1IDguMjVDNS4yNSA4LjY2NDIxIDUuNTg1NzkgOSA2IDlaXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSl9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG4sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkpfSksbikpfWZ1bmN0aW9uIG9rKCl7dmFyIGUsbix0PShlPVtcIlxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtZW1wdHldIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZmxleDogMTtcXG4gICAgcGFkZGluZzogMTJweDtcXG4gICAgbWluLWhlaWdodDogMDtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC10YWItaXNzdWVzLWVtcHR5LWNvbnRlbnRdIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgIGZsZXg6IDE7XFxuICAgIGJvcmRlcjogMXB4IGRhc2hlZCB2YXIoLS1jb2xvci1ncmF5LWFscGhhLTUwMCk7XFxuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC10YWItaXNzdWVzLWVtcHR5LWljb25dIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMTZweDtcXG4gICAgcGFkZGluZzogOHB4O1xcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LWFscGhhLTQwMCk7XFxuICAgIGJvcmRlci1yYWRpdXM6IDZweDtcXG5cXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC10YWItaXNzdWVzLWVtcHR5LXRpdGxlXSB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbiAgICBmb250LXNpemU6IDE2cHg7XFxuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC0yMCk7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtdGFiLWlzc3Vlcy1lbXB0eS1zdWJ0aXRsZV0ge1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS05MDApO1xcbiAgICBmb250LXNpemU6IDE0cHg7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodC0yMSk7XFxuICB9XFxuXCJdLG58fChuPWUuc2xpY2UoMCkpLE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSx7cmF3Ont2YWx1ZTpPYmplY3QuZnJlZXplKG4pfX0pKSk7cmV0dXJuIG9rPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LHR9ZnVuY3Rpb24gb0EoKXtyZXR1cm4oMCx5LmpzeCkoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC10YWItaXNzdWVzLWVtcHR5XCI6ITAsY2hpbGRyZW46KDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtZW1wdHktY29udGVudFwiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC10YWItaXNzdWVzLWVtcHR5LWljb25cIjohMCxjaGlsZHJlbjooMCx5LmpzeCkob2ose3dpZHRoOjE2LGhlaWdodDoxNn0pfSksKDAseS5qc3gpKFwiaDNcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC10YWItaXNzdWVzLWVtcHR5LXRpdGxlXCI6ITAsY2hpbGRyZW46XCJObyBJc3N1ZXMgRm91bmRcIn0pLCgwLHkuanN4KShcInBcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC10YWItaXNzdWVzLWVtcHR5LXN1YnRpdGxlXCI6ITAsY2hpbGRyZW46XCJJc3N1ZXMgd2lsbCBhcHBlYXIgaGVyZSB3aGVuIHRoZXkgb2NjdXIuXCJ9KV19KX0pfXZhciBvTz1laShvaygpKTtmdW5jdGlvbiBvQyhlLG4peyhudWxsPT1ufHxuPmUubGVuZ3RoKSYmKG49ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLHI9QXJyYXkobik7dDxuO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9ZnVuY3Rpb24gb1MoKXt2YXIgZSxuLHQ9KGU9W1wiXCJdLG58fChuPWUuc2xpY2UoMCkpLE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSx7cmF3Ont2YWx1ZTpPYmplY3QuZnJlZXplKG4pfX0pKSk7cmV0dXJuIG9TPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LHR9ZnVuY3Rpb24gb0UoZSl7dmFyIG49ZS5ub3Rlcyx0PWUuYnVpbGRFcnJvcixyPWUuaHlkcmF0aW9uV2FybmluZyxvPWUuZXJyb3JEZXRhaWxzLGE9ZS5hY3RpdmVFcnJvcixpPWUuZXJyb3JUeXBlLGw9ZS5kZWJ1Z0luZm8scz1lLmVycm9yQ29kZTtyZXR1cm4gdD8oMCx5LmpzeCkob3ose21lc3NhZ2U6dCxkZWJ1Z0luZm86bH0pOigwLHkuanN4KShvXyx7bm90ZXM6bixoeWRyYXRpb25XYXJuaW5nOnIsZXJyb3JEZXRhaWxzOm8sYWN0aXZlRXJyb3I6YSxlcnJvclR5cGU6aSxkZWJ1Z0luZm86bCxlcnJvckNvZGU6c30pfWZ1bmN0aW9uIG9fKGUpe3ZhciBuPWUubm90ZXMsdD1lLmh5ZHJhdGlvbldhcm5pbmcscj1lLmVycm9yRGV0YWlscyxvPWUuYWN0aXZlRXJyb3IsYT1lLmVycm9yVHlwZSxpPWUuZGVidWdJbmZvLGw9ZS5lcnJvckNvZGU7cmV0dXJuIG8mJmE/KDAseS5qc3hzKShveCx7ZXJyb3I6by5lcnJvcixlcnJvclR5cGU6YSxtZXNzYWdlOm8uZXJyb3IubWVzc2FnZSxkZWJ1Z0luZm86aSxlcnJvckNvZGU6bCxlbnZpcm9ubWVudE5hbWU6by5lcnJvci5lbnZpcm9ubWVudE5hbWUsY2hpbGRyZW46WygwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZXJyb3Itb3ZlcmxheS1ub3Rlcy1jb250YWluZXJcIixjaGlsZHJlbjpbbj8oMCx5LmpzeCkoeS5GcmFnbWVudCx7Y2hpbGRyZW46KDAseS5qc3gpKFwicFwiLHtpZDpcIm5leHRqc19fY29udGFpbmVyX2Vycm9yc19fbm90ZXNcIixjbGFzc05hbWU6XCJuZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfX25vdGVzXCIsY2hpbGRyZW46bn0pfSk6bnVsbCx0PygwLHkuanN4KShcInBcIix7aWQ6XCJuZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfX2xpbmtcIixjbGFzc05hbWU6XCJuZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfX2xpbmtcIixjaGlsZHJlbjooMCx5LmpzeCkoZWIse3RleHQ6XCJTZWUgbW9yZSBpbmZvIGhlcmU6IFwiLmNvbmNhdChucCl9KX0pOm51bGxdfSksKG51bGw9PXI/dm9pZCAwOnIucmVhY3RPdXRwdXRDb21wb25lbnREaWZmKT8oMCx5LmpzeCkodGgse3JlYWN0T3V0cHV0Q29tcG9uZW50RGlmZjpyLnJlYWN0T3V0cHV0Q29tcG9uZW50RGlmZnx8XCJcIn0pOm51bGwsKDAseS5qc3gpKHguU3VzcGVuc2Use2ZhbGxiYWNrOigwLHkuanN4KShvZCx7fSksY2hpbGRyZW46KDAseS5qc3gpKG9QLHtlcnJvcjpvfSxvLmlkLnRvU3RyaW5nKCkpfSldfSk6KDAseS5qc3gpKG9BLHt9KX1mdW5jdGlvbiBvUChlKXt2YXIgbix0LHI9ZS5lcnJvcixvPShuPSgwLHgudXNlU3RhdGUpKCExKSx0PTIsZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0obil8fGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0odD1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2godC52YWx1ZSksYS5sZW5ndGghPT1uKTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0obiwyKXx8ZnVuY3Rpb24oZSxuKXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gb0MoZSxuKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKHQpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gb0MoZSxuKX19KG4sdCl8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCkpLGE9b1swXSxpPW9bMV0sbD10aihyKSxzPSgwLHgudXNlTWVtbykoZnVuY3Rpb24oKXtyZXR1cm4gbC5yZWR1Y2UoZnVuY3Rpb24oZSxuKXtyZXR1cm4gZSsgKyEhbi5pZ25vcmVkfSwwKX0sW2xdKSxjPSgwLHgudXNlTWVtbykoZnVuY3Rpb24oKXt2YXIgZSxuPWwuZmluZEluZGV4KGZ1bmN0aW9uKGUpe3JldHVybiFlLmlnbm9yZWQmJiEhZS5vcmlnaW5hbENvZGVGcmFtZSYmISFlLm9yaWdpbmFsU3RhY2tGcmFtZX0pO3JldHVybiBudWxsIT0oZT1sW25dKT9lOm51bGx9LFtsXSk7cmV0dXJuKDAseS5qc3hzKSh5LkZyYWdtZW50LHtjaGlsZHJlbjpbYyYmYy5vcmlnaW5hbFN0YWNrRnJhbWUmJmMub3JpZ2luYWxDb2RlRnJhbWUmJigwLHkuanN4KShlcSx7c3RhY2tGcmFtZTpjLm9yaWdpbmFsU3RhY2tGcmFtZSxjb2RlRnJhbWU6Yy5vcmlnaW5hbENvZGVGcmFtZX0pLGwubGVuZ3RoPjAmJigwLHkuanN4KSh0bCx7ZnJhbWVzOmwsaXNJZ25vcmVMaXN0T3BlbjphLG9uVG9nZ2xlSWdub3JlTGlzdDpmdW5jdGlvbigpe3JldHVybiBpKCFhKX0saWdub3JlZEZyYW1lc1RhbGx5OnN9KV19KX1mdW5jdGlvbiBveihlKXt2YXIgbj1lLm1lc3NhZ2UsdD1lLmRlYnVnSW5mbyxyPUVycm9yKG4pLG89KDAseC51c2VNZW1vKShmdW5jdGlvbigpe3JldHVybiB0dChuKXx8XCJGYWlsZWQgdG8gY29tcGlsZVwifSxbbl0pO3JldHVybigwLHkuanN4KShveCx7ZXJyb3JUeXBlOlwiQnVpbGQgRXJyb3JcIixlcnJvcjpyLG1lc3NhZ2U6byxkZWJ1Z0luZm86dCxjaGlsZHJlbjooMCx5LmpzeCkodG4se2NvbnRlbnQ6bn0pfSl9dmFyIG9MPWVpKG9TKCkpO2Z1bmN0aW9uIG9UKCl7dmFyIGUsbix0PShlPVtcIlxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXNdIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZmxleDogMTtcXG4gICAgbWluLWhlaWdodDogMDtcXG4gIH1cXG5cIl0sbnx8KG49ZS5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUobil9fSkpKTtyZXR1cm4gb1Q9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sdH1mdW5jdGlvbiBvUihlKXt2YXIgbj1lLmRlYnVnSW5mbyx0PWUucnVudGltZUVycm9ycyxyPWUuZ2V0U3F1YXNoZWRIeWRyYXRpb25FcnJvckRldGFpbHMsbz1lLmJ1aWxkRXJyb3IsYT10Uyh7cnVudGltZUVycm9yczp0LGdldFNxdWFzaGVkSHlkcmF0aW9uRXJyb3JEZXRhaWxzOnJ9KSxpPWEuZXJyb3JDb2RlLGw9YS5lcnJvclR5cGUscz1hLmh5ZHJhdGlvbldhcm5pbmcsYz1hLmFjdGl2ZUVycm9yLHU9YS5hY3RpdmVJZHgsZD1hLnNldEFjdGl2ZUluZGV4LGY9YS5ub3RlcyxwPWEuZXJyb3JEZXRhaWxzO3JldHVybigwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC10YWItaXNzdWVzXCI6ITAsY2hpbGRyZW46W28/bnVsbDooMCx5LmpzeCkob2kse3J1bnRpbWVFcnJvcnM6dCxlcnJvclR5cGU6bCxhY3RpdmVJZHg6dSxzZXRBY3RpdmVJbmRleDpkfSksKDAseS5qc3gpKG9FLHtidWlsZEVycm9yOm8sbm90ZXM6ZixoeWRyYXRpb25XYXJuaW5nOnMsZXJyb3JEZXRhaWxzOnAsYWN0aXZlRXJyb3I6YyxlcnJvclR5cGU6bCxkZWJ1Z0luZm86bixlcnJvckNvZGU6aX0pXX0pfXZhciBvTj1laShvVCgpKSxvRD1wcm9jZXNzLmVudi5fX05FWFRfREVWVE9PTF9TRUdNRU5UX0VYUExPUkVSP19fd2VicGFja19yZXF1aXJlX18oXCIuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L2NvbXBvbmVudHMvb3ZlcnZpZXcvc2VnbWVudC1leHBsb3Jlci50c3hcIikudTpmdW5jdGlvbigpe3JldHVybiBudWxsfTtmdW5jdGlvbiBvQihlKXt2YXIgbj1lLnJvdXRlclR5cGUsdD1lLnBhZ2U7cmV0dXJuKDAseS5qc3gpKG9ELHtpc0FwcFJvdXRlcjpcImFwcFwiPT09bixwYWdlOnR9KX1mdW5jdGlvbiBvTShlKXt2YXIgbj1lLnJvdXRlclR5cGUsdD1lLnBhZ2U7cmV0dXJuKDAseS5qc3gpKG9CLHtyb3V0ZXJUeXBlOm4scGFnZTp0fSl9ZnVuY3Rpb24gb0koZSl7dmFyIG49ZS5hY3RpdmVUYWIsdD1lLmRldlRvb2xzUG9zaXRpb24scj1lLnNjYWxlLG89ZS5yb3V0ZXJUeXBlLGE9ZS5oYW5kbGVQb3NpdGlvbkNoYW5nZSxpPWUuaGFuZGxlU2NhbGVDaGFuZ2UsbD1lLmRlYnVnSW5mbyxzPWUucnVudGltZUVycm9ycyxjPWUuZ2V0U3F1YXNoZWRIeWRyYXRpb25FcnJvckRldGFpbHMsdT1lLmJ1aWxkRXJyb3IsZD1lLnBhZ2U7c3dpdGNoKG4pe2Nhc2VcInNldHRpbmdzXCI6cmV0dXJuKDAseS5qc3gpKG9lLHtkZXZUb29sc1Bvc2l0aW9uOnQsc2NhbGU6cixoYW5kbGVQb3NpdGlvbkNoYW5nZTphLGhhbmRsZVNjYWxlQ2hhbmdlOml9KTtjYXNlXCJyb3V0ZVwiOnJldHVybigwLHkuanN4KShvTSx7cm91dGVyVHlwZTpvLHBhZ2U6ZH0pO2Nhc2VcImlzc3Vlc1wiOnJldHVybigwLHkuanN4KShvUix7ZGVidWdJbmZvOmwscnVudGltZUVycm9yczpzLGdldFNxdWFzaGVkSHlkcmF0aW9uRXJyb3JEZXRhaWxzOmMsYnVpbGRFcnJvcjp1fSk7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gb0goZSl7dmFyIG4sdDtyZXR1cm4oMCx5LmpzeCkoXCJzdmdcIiwobj1mdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHt3aWR0aDpcIjEyXCIsaGVpZ2h0OlwiMTJcIix2aWV3Qm94OlwiMCAwIDE0IDE0XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLHQ9dD17Y2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTMuMDg4ODkgMTEuODM4NEwyLjYyNDg2IDEyLjMwMjRMMS42OTY3OCAxMS4zNzQ0TDIuMTYwODIgMTAuOTEwM0w2LjA3MTc4IDYuOTk5MzdMMi4xNjA4MiAzLjA4ODQxTDEuNjk2NzggMi42MjQzN0wyLjYyNDg2IDEuNjk2MjlMMy4wODg4OSAyLjE2MDMzTDYuOTk5ODYgNi4wNzEyOUwxMC45MTA4IDIuMTYwMzNMMTEuMzc0OSAxLjY5NjI5TDEyLjMwMjkgMi42MjQzN0wxMS44Mzg5IDMuMDg4NDFMNy45Mjc5MyA2Ljk5OTM3TDExLjgzODkgMTAuOTEwM0wxMi4zMDI5IDExLjM3NDRMMTEuMzc0OSAxMi4zMDI0TDEwLjkxMDggMTEuODM4NEw2Ljk5OTg2IDcuOTI3NDRMMy4wODg4OSAxMS44Mzg0WlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpKX0pLG4pKX1mdW5jdGlvbiBvRihlLG4peyhudWxsPT1ufHxuPmUubGVuZ3RoKSYmKG49ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLHI9QXJyYXkobik7dDxuO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9ZnVuY3Rpb24gb1UoZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfWZ1bmN0aW9uIG9WKGUsbil7cmV0dXJuIG49bnVsbCE9bj9uOnt9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QobikpLmZvckVhY2goZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSksZX1mdW5jdGlvbiBvcShlLG4pe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHQscixvPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSxuLmluZGV4T2YodCk+PTB8fChvW3RdPWVbdF0pO3JldHVybiBvfShlLG4pO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl0PWFbcl0sIShuLmluZGV4T2YodCk+PTApJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSx0KSYmKG9bdF09ZVt0XSl9cmV0dXJuIG99ZnVuY3Rpb24gb1coZSxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0odD1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2godC52YWx1ZSksIW58fGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KGUsbil8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIG9GKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIG9GKGUsbil9fShlLG4pfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIG8kKCl7dmFyIGUsbix0PShlPVtcIlxcbiAgICAgICAgICBbZGF0YS1uZXh0LWJhZGdlLXJvb3RdIHtcXG4gICAgICAgICAgICAtLXRpbWluZzogY3ViaWMtYmV6aWVyKDAuMjMsIDAuODgsIDAuMjYsIDAuOTIpO1xcbiAgICAgICAgICAgIC0tZHVyYXRpb24tbG9uZzogMjUwbXM7XFxuICAgICAgICAgICAgLS1jb2xvci1vdXRlci1ib3JkZXI6ICMxNzE3MTc7XFxuICAgICAgICAgICAgLS1jb2xvci1pbm5lci1ib3JkZXI6IGhzbGEoMCwgMCUsIDEwMCUsIDAuMTQpO1xcbiAgICAgICAgICAgIC0tY29sb3ItaG92ZXItYWxwaGEtc3VidGxlOiBoc2xhKDAsIDAlLCAxMDAlLCAwLjEzKTtcXG4gICAgICAgICAgICAtLWNvbG9yLWhvdmVyLWFscGhhLWVycm9yOiBoc2xhKDAsIDAlLCAxMDAlLCAwLjIpO1xcbiAgICAgICAgICAgIC0tY29sb3ItaG92ZXItYWxwaGEtZXJyb3ItMjogaHNsYSgwLCAwJSwgMTAwJSwgMC4yNSk7XFxuICAgICAgICAgICAgLS1tYXJrLXNpemU6IGNhbGModmFyKC0tc2l6ZSkgLSB2YXIoLS1zaXplLTIpICogMik7XFxuXFxuICAgICAgICAgICAgLS1mb2N1cy1jb2xvcjogdmFyKC0tY29sb3ItYmx1ZS04MDApO1xcbiAgICAgICAgICAgIC0tZm9jdXMtcmluZzogMnB4IHNvbGlkIHZhcigtLWZvY3VzLWNvbG9yKTtcXG5cXG4gICAgICAgICAgICAmOmhhcyhbZGF0YS1uZXh0LWJhZGdlXVtkYXRhLWVycm9yPSd0cnVlJ10pIHtcXG4gICAgICAgICAgICAgIC0tZm9jdXMtY29sb3I6ICNmZmY7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIFtkYXRhLWRpc2FibGVkLWljb25dIHtcXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogNHB4O1xcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIFtkYXRhLW5leHQtYmFkZ2VdIHtcXG4gICAgICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcXG4gICAgICAgICAgICB3aWR0aDogdmFyKC0tc2l6ZSk7XFxuICAgICAgICAgICAgaGVpZ2h0OiB2YXIoLS1zaXplKTtcXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC44KTtcXG4gICAgICAgICAgICBib3gtc2hhZG93OlxcbiAgICAgICAgICAgICAgMCAwIDAgMXB4IHZhcigtLWNvbG9yLW91dGVyLWJvcmRlciksXFxuICAgICAgICAgICAgICBpbnNldCAwIDAgMCAxcHggdmFyKC0tY29sb3ItaW5uZXItYm9yZGVyKSxcXG4gICAgICAgICAgICAgIDBweCAxNnB4IDMycHggLThweCByZ2JhKDAsIDAsIDAsIDAuMjQpO1xcbiAgICAgICAgICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig0OHB4KTtcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLWZ1bGwpO1xcbiAgICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgICAgICAgICBzY2FsZTogMTtcXG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgICAgICAgICAgIHdpbGwtY2hhbmdlOiBzY2FsZSwgYm94LXNoYWRvdywgd2lkdGgsIGJhY2tncm91bmQ7XFxuICAgICAgICAgICAgdHJhbnNpdGlvbjpcXG4gICAgICAgICAgICAgIHNjYWxlIHZhcigtLWR1cmF0aW9uLXNob3J0KSB2YXIoLS10aW1pbmcpLFxcbiAgICAgICAgICAgICAgd2lkdGggdmFyKC0tZHVyYXRpb24tbG9uZykgdmFyKC0tdGltaW5nKSxcXG4gICAgICAgICAgICAgIGJveC1zaGFkb3cgdmFyKC0tZHVyYXRpb24tbG9uZykgdmFyKC0tdGltaW5nKSxcXG4gICAgICAgICAgICAgIGJhY2tncm91bmQgdmFyKC0tZHVyYXRpb24tc2hvcnQpIGVhc2U7XFxuXFxuICAgICAgICAgICAgJjphY3RpdmVbZGF0YS1lcnJvcj0nZmFsc2UnXSB7XFxuICAgICAgICAgICAgICBzY2FsZTogMC45NTtcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgJltkYXRhLWFuaW1hdGU9J3RydWUnXTpub3QoOmhvdmVyKSB7XFxuICAgICAgICAgICAgICBzY2FsZTogMS4wMjtcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgJltkYXRhLWVycm9yPSdmYWxzZSddOmhhcyhbZGF0YS1uZXh0LW1hcmtdOmZvY3VzLXZpc2libGUpIHtcXG4gICAgICAgICAgICAgIG91dGxpbmU6IHZhcigtLWZvY3VzLXJpbmcpO1xcbiAgICAgICAgICAgICAgb3V0bGluZS1vZmZzZXQ6IDNweDtcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgJltkYXRhLWVycm9yPSd0cnVlJ10ge1xcbiAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2NhMmEzMDtcXG4gICAgICAgICAgICAgIC0tY29sb3ItaW5uZXItYm9yZGVyOiAjZTU0ODRkO1xcblxcbiAgICAgICAgICAgICAgW2RhdGEtbmV4dC1tYXJrXSB7XFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWhvdmVyLWFscGhhLWVycm9yKTtcXG4gICAgICAgICAgICAgICAgb3V0bGluZS1vZmZzZXQ6IDBweDtcXG5cXG4gICAgICAgICAgICAgICAgJjpmb2N1cy12aXNpYmxlIHtcXG4gICAgICAgICAgICAgICAgICBvdXRsaW5lOiB2YXIoLS1mb2N1cy1yaW5nKTtcXG4gICAgICAgICAgICAgICAgICBvdXRsaW5lLW9mZnNldDogLTFweDtcXG4gICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICAmOmhvdmVyIHtcXG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ob3Zlci1hbHBoYS1lcnJvci0yKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAmW2RhdGEtZXJyb3ItZXhwYW5kZWQ9J2ZhbHNlJ11bZGF0YS1lcnJvcj0ndHJ1ZSddIH4gW2RhdGEtZG90XSB7XFxuICAgICAgICAgICAgICBzY2FsZTogMTtcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgPiBkaXYge1xcbiAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgW2RhdGEtaXNzdWVzLWNvbGxhcHNlXTpmb2N1cy12aXNpYmxlIHtcXG4gICAgICAgICAgICBvdXRsaW5lOiB2YXIoLS1mb2N1cy1yaW5nKTtcXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBbZGF0YS1pc3N1ZXNdOmhhcyhbZGF0YS1pc3N1ZXMtb3Blbl06Zm9jdXMtdmlzaWJsZSkge1xcbiAgICAgICAgICAgIG91dGxpbmU6IHZhcigtLWZvY3VzLXJpbmcpO1xcbiAgICAgICAgICAgIG91dGxpbmUtb2Zmc2V0OiAtMXB4O1xcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIFtkYXRhLWRvdF0ge1xcbiAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xcbiAgICAgICAgICAgIHdpZHRoOiB2YXIoLS1zaXplLTgpO1xcbiAgICAgICAgICAgIGhlaWdodDogdmFyKC0tc2l6ZS04KTtcXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmO1xcbiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCB2YXIoLS1jb2xvci1vdXRlci1ib3JkZXIpO1xcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgICAgICAgICAgdG9wOiAycHg7XFxuICAgICAgICAgICAgcmlnaHQ6IDBweDtcXG4gICAgICAgICAgICBzY2FsZTogMDtcXG4gICAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gICAgICAgICAgICB0cmFuc2l0aW9uOiBzY2FsZSAyMDBtcyB2YXIoLS10aW1pbmcpO1xcbiAgICAgICAgICAgIHRyYW5zaXRpb24tZGVsYXk6IHZhcigtLWR1cmF0aW9uLXNob3J0KTtcXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBbZGF0YS1pc3N1ZXNdIHtcXG4gICAgICAgICAgICAtLXBhZGRpbmctbGVmdDogOHB4O1xcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgICAgICAgICAgZ2FwOiAycHg7XFxuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDhweDtcXG4gICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiA4cHg7XFxuICAgICAgICAgICAgaGVpZ2h0OiB2YXIoLS1zaXplLTMyKTtcXG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDJweDtcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLWZ1bGwpO1xcbiAgICAgICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgdmFyKC0tZHVyYXRpb24tc2hvcnQpIGVhc2U7XFxuXFxuICAgICAgICAgICAgJjpoYXMoW2RhdGEtaXNzdWVzLW9wZW5dOmhvdmVyKSB7XFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ob3Zlci1hbHBoYS1lcnJvcik7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICY6aGFzKFtkYXRhLWlzc3Vlcy1jb2xsYXBzZV0pIHtcXG4gICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IGNhbGModmFyKC0tcGFkZGluZy1sZWZ0KSAvIDIpO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBbZGF0YS1jcm9zc10ge1xcbiAgICAgICAgICAgICAgdHJhbnNsYXRlOiAwcHggLTFweDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgW2RhdGEtaXNzdWVzLW9wZW5dIHtcXG4gICAgICAgICAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTMpO1xcbiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTtcXG4gICAgICAgICAgICB3aWR0aDogZml0LWNvbnRlbnQ7XFxuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgICAgICAgICAgZ2FwOiAycHg7XFxuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgICAgICAgICBtYXJnaW46IDA7XFxuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IHZhcigtLXNpemUtMzYpO1xcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICAgICAgICAgICAgei1pbmRleDogMjtcXG4gICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcblxcbiAgICAgICAgICAgICY6Zm9jdXMtdmlzaWJsZSB7XFxuICAgICAgICAgICAgICBvdXRsaW5lOiAwO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBbZGF0YS1pc3N1ZXMtY29sbGFwc2VdIHtcXG4gICAgICAgICAgICB3aWR0aDogdmFyKC0tc2l6ZS0yNCk7XFxuICAgICAgICAgICAgaGVpZ2h0OiB2YXIoLS1zaXplLTI0KTtcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLWZ1bGwpO1xcbiAgICAgICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgdmFyKC0tZHVyYXRpb24tc2hvcnQpIGVhc2U7XFxuXFxuICAgICAgICAgICAgJjpob3ZlciB7XFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ob3Zlci1hbHBoYS1lcnJvcik7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIFtkYXRhLWNyb3NzXSB7XFxuICAgICAgICAgICAgY29sb3I6ICNmZmY7XFxuICAgICAgICAgICAgd2lkdGg6IHZhcigtLXNpemUtMTIpO1xcbiAgICAgICAgICAgIGhlaWdodDogdmFyKC0tc2l6ZS0xMik7XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgW2RhdGEtbmV4dC1tYXJrXSB7XFxuICAgICAgICAgICAgd2lkdGg6IHZhcigtLW1hcmstc2l6ZSk7XFxuICAgICAgICAgICAgaGVpZ2h0OiB2YXIoLS1tYXJrLXNpemUpO1xcbiAgICAgICAgICAgIG1hcmdpbjogMCAycHg7XFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtZnVsbCk7XFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1sb25nKSB2YXIoLS10aW1pbmcpO1xcblxcbiAgICAgICAgICAgICY6Zm9jdXMtdmlzaWJsZSB7XFxuICAgICAgICAgICAgICBvdXRsaW5lOiAwO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAmOmhvdmVyIHtcXG4gICAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWhvdmVyLWFscGhhLXN1YnRsZSk7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIHN2ZyB7XFxuICAgICAgICAgICAgICBmbGV4LXNocmluazogMDtcXG4gICAgICAgICAgICAgIHdpZHRoOiB2YXIoLS1zaXplLTQwKTtcXG4gICAgICAgICAgICAgIGhlaWdodDogdmFyKC0tc2l6ZS00MCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIFtkYXRhLWlzc3Vlcy1jb3VudC1hbmltYXRpb25dIHtcXG4gICAgICAgICAgICBkaXNwbGF5OiBncmlkO1xcbiAgICAgICAgICAgIHBsYWNlLWl0ZW1zOiBjZW50ZXIgY2VudGVyO1xcbiAgICAgICAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XFxuXFxuICAgICAgICAgICAgJltkYXRhLWFuaW1hdGU9J2ZhbHNlJ10ge1xcbiAgICAgICAgICAgICAgW2RhdGEtaXNzdWVzLWNvdW50LWV4aXRdLFxcbiAgICAgICAgICAgICAgW2RhdGEtaXNzdWVzLWNvdW50LWVudGVyXSB7XFxuICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMG1zO1xcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICA+ICoge1xcbiAgICAgICAgICAgICAgZ3JpZC1hcmVhOiAxIC8gMTtcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgW2RhdGEtaXNzdWVzLWNvdW50LWV4aXRdIHtcXG4gICAgICAgICAgICAgIGFuaW1hdGlvbjogZmFkZU91dCAzMDBtcyB2YXIoLS10aW1pbmcpIGZvcndhcmRzO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBbZGF0YS1pc3N1ZXMtY291bnQtZW50ZXJdIHtcXG4gICAgICAgICAgICAgIGFuaW1hdGlvbjogZmFkZUluIDMwMG1zIHZhcigtLXRpbWluZykgZm9yd2FyZHM7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIFtkYXRhLWlzc3Vlcy1jb3VudC1wbHVyYWxdIHtcXG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICAgICAgICAgICAgJltkYXRhLWFuaW1hdGU9J3RydWUnXSB7XFxuICAgICAgICAgICAgICBhbmltYXRpb246IGZhZGVJbiAzMDBtcyB2YXIoLS10aW1pbmcpIGZvcndhcmRzO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICAucGF0aDAge1xcbiAgICAgICAgICAgIGFuaW1hdGlvbjogZHJhdzAgMS41cyBlYXNlLWluLW91dCBpbmZpbml0ZTtcXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICAucGF0aDEge1xcbiAgICAgICAgICAgIGFuaW1hdGlvbjogZHJhdzEgMS41cyBlYXNlLW91dCBpbmZpbml0ZTtcXG4gICAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IDAuM3M7XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgLnBhdXNlZCB7XFxuICAgICAgICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgQGtleWZyYW1lcyBmYWRlSW4ge1xcbiAgICAgICAgICAgIDAlIHtcXG4gICAgICAgICAgICAgIG9wYWNpdHk6IDA7XFxuICAgICAgICAgICAgICBmaWx0ZXI6IGJsdXIoMnB4KTtcXG4gICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg4cHgpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAxMDAlIHtcXG4gICAgICAgICAgICAgIG9wYWNpdHk6IDE7XFxuICAgICAgICAgICAgICBmaWx0ZXI6IGJsdXIoMHB4KTtcXG4gICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgQGtleWZyYW1lcyBmYWRlT3V0IHtcXG4gICAgICAgICAgICAwJSB7XFxuICAgICAgICAgICAgICBvcGFjaXR5OiAxO1xcbiAgICAgICAgICAgICAgZmlsdGVyOiBibHVyKDBweCk7XFxuICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIDEwMCUge1xcbiAgICAgICAgICAgICAgb3BhY2l0eTogMDtcXG4gICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTJweCk7XFxuICAgICAgICAgICAgICBmaWx0ZXI6IGJsdXIoMnB4KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgQGtleWZyYW1lcyBkcmF3MCB7XFxuICAgICAgICAgICAgMCUsXFxuICAgICAgICAgICAgMjUlIHtcXG4gICAgICAgICAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAtMjkuNjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgMjUlLFxcbiAgICAgICAgICAgIDUwJSB7XFxuICAgICAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldDogMDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgNTAlLFxcbiAgICAgICAgICAgIDc1JSB7XFxuICAgICAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldDogMDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgNzUlLFxcbiAgICAgICAgICAgIDEwMCUge1xcbiAgICAgICAgICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDI5LjY7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIEBrZXlmcmFtZXMgZHJhdzEge1xcbiAgICAgICAgICAgIDAlLFxcbiAgICAgICAgICAgIDIwJSB7XFxuICAgICAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldDogLTExLjY7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIDIwJSxcXG4gICAgICAgICAgICA1MCUge1xcbiAgICAgICAgICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIDUwJSxcXG4gICAgICAgICAgICA3NSUge1xcbiAgICAgICAgICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIDc1JSxcXG4gICAgICAgICAgICAxMDAlIHtcXG4gICAgICAgICAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAxMS42O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb24pIHtcXG4gICAgICAgICAgICBbZGF0YS1pc3N1ZXMtY291bnQtZXhpdF0sXFxuICAgICAgICAgICAgW2RhdGEtaXNzdWVzLWNvdW50LWVudGVyXSxcXG4gICAgICAgICAgICBbZGF0YS1pc3N1ZXMtY291bnQtcGx1cmFsXSB7XFxuICAgICAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IDBtcyAhaW1wb3J0YW50O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgXCJdLG58fChuPWUuc2xpY2UoMCkpLE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSx7cmF3Ont2YWx1ZTpPYmplY3QuZnJlZXplKG4pfX0pKSk7cmV0dXJuIG8kPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LHR9ZnVuY3Rpb24gb1ooZSl7dmFyIG49ZS5kaXNhYmxlZCx0PWUuaXNzdWVDb3VudCxyPWUuaXNEZXZCdWlsZGluZyxvPWUuaXNEZXZSZW5kZXJpbmcsYT1lLmlzQnVpbGRFcnJvcixpPWUub25UcmlnZ2VyQ2xpY2ssbD1lLnRvZ2dsZUVycm9yT3ZlcmxheSxzPWUuc2NhbGUsYz1vcShlLFtcImRpc2FibGVkXCIsXCJpc3N1ZUNvdW50XCIsXCJpc0RldkJ1aWxkaW5nXCIsXCJpc0RldlJlbmRlcmluZ1wiLFwiaXNCdWlsZEVycm9yXCIsXCJvblRyaWdnZXJDbGlja1wiLFwidG9nZ2xlRXJyb3JPdmVybGF5XCIsXCJzY2FsZVwiXSksdT10PjAsZD1vVygoMCx4LnVzZVN0YXRlKSh1KSwyKSxmPWRbMF0scD1kWzFdLGg9b1coKDAseC51c2VTdGF0ZSkoITEpLDIpLGc9aFswXSxtPWhbMV0sdj10TSh0LDE1MCksYj0oMCx4LnVzZVJlZikobnVsbCksdz0oMCx4LnVzZVJlZikobnVsbCksaj10Rih3KSxrPXREKHJ8fG8pLEE9Znx8bjtyZXR1cm4oMCx4LnVzZUVmZmVjdCkoZnVuY3Rpb24oKXtwKHUpfSxbdV0pLCgwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHQtYmFkZ2Utcm9vdFwiOiEwLHN0eWxlOntcIi0tc2l6ZVwiOlwiXCIuY29uY2F0KDM2Lyh2b2lkIDA9PT1zPzE6cyksXCJweFwiKSxcIi0tZHVyYXRpb24tc2hvcnRcIjpcIlwiLmNvbmNhdCgxNTAsXCJtc1wiKSxkaXNwbGF5Om4mJighdXx8Zyk/XCJub25lXCI6XCJibG9ja1wifSxjaGlsZHJlbjpbKDAseS5qc3gpKFwic3R5bGVcIix7Y2hpbGRyZW46ZWkobyQoKSl9KSwoMCx5LmpzeCkoXCJkaXZcIix7XCJkYXRhLW5leHQtYmFkZ2VcIjohMCxcImRhdGEtZXJyb3JcIjp1LFwiZGF0YS1lcnJvci1leHBhbmRlZFwiOkEsXCJkYXRhLWFuaW1hdGVcIjp2LHN0eWxlOnt3aWR0aDowPT09aj9cImF1dG9cIjpqfSxjaGlsZHJlbjooMCx5LmpzeHMpKFwiZGl2XCIse3JlZjp3LGNoaWxkcmVuOlshbiYmKDAseS5qc3gpKFwiYnV0dG9uXCIsb1Yob1Uoe3JlZjpiLFwiZGF0YS1uZXh0LW1hcmtcIjohMCxcImRhdGEtbmV4dC1tYXJrLWxvYWRpbmdcIjprLG9uQ2xpY2s6aX0sYykse2NoaWxkcmVuOigwLHkuanN4KShvWCx7aXNMb2FkaW5nOmssaXNEZXZCdWlsZGluZzpyfSl9KSksQSYmKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtaXNzdWVzXCI6ITAsY2hpbGRyZW46WygwLHkuanN4cykoXCJidXR0b25cIix7XCJkYXRhLWlzc3Vlcy1vcGVuXCI6ITAsXCJhcmlhLWxhYmVsXCI6XCJPcGVuIGlzc3VlcyBvdmVybGF5XCIsb25DbGljazpsLGNoaWxkcmVuOltuJiYoMCx5LmpzeCkoXCJkaXZcIix7XCJkYXRhLWRpc2FibGVkLWljb25cIjohMCxjaGlsZHJlbjooMCx5LmpzeCkob2ose30pfSksKDAseS5qc3gpKG9ZLHthbmltYXRlOnYsXCJkYXRhLWlzc3Vlcy1jb3VudC1hbmltYXRpb25cIjohMCxjaGlsZHJlbjp0fSx0KSxcIiBcIiwoMCx5LmpzeHMpKFwiZGl2XCIse2NoaWxkcmVuOltcIklzc3VlXCIsdD4xJiYoMCx5LmpzeCkoXCJzcGFuXCIse1wiYXJpYS1oaWRkZW5cIjohMCxcImRhdGEtaXNzdWVzLWNvdW50LXBsdXJhbFwiOiEwLFwiZGF0YS1hbmltYXRlXCI6diYmMj09PXQsY2hpbGRyZW46XCJzXCJ9KV19KV19KSwhYSYmKDAseS5qc3gpKFwiYnV0dG9uXCIse1wiZGF0YS1pc3N1ZXMtY29sbGFwc2VcIjohMCxcImFyaWEtbGFiZWxcIjpcIkNvbGxhcHNlIGlzc3VlcyBiYWRnZVwiLG9uQ2xpY2s6ZnVuY3Rpb24oKXt2YXIgZTtuP20oITApOnAoITEpLG51bGw9PShlPWIuY3VycmVudCl8fGUuZm9jdXMoKX0sY2hpbGRyZW46KDAseS5qc3gpKG9ILHtcImRhdGEtY3Jvc3NcIjohMH0pfSldfSldfSl9KSwoMCx5LmpzeCkoXCJkaXZcIix7XCJhcmlhLWhpZGRlblwiOiEwLFwiZGF0YS1kb3RcIjohMH0pXX0pfWZ1bmN0aW9uIG9ZKGUpe3ZhciBuPWUuY2hpbGRyZW4sdD1lLmFuaW1hdGUscj1vcShlLFtcImNoaWxkcmVuXCIsXCJhbmltYXRlXCJdKTtyZXR1cm4oMCx5LmpzeHMpKFwiZGl2XCIsb1Yob1Uoe30scikse1wiZGF0YS1hbmltYXRlXCI6dm9pZCAwPT09dHx8dCxjaGlsZHJlbjpbKDAseS5qc3gpKFwiZGl2XCIse1wiYXJpYS1oaWRkZW5cIjohMCxcImRhdGEtaXNzdWVzLWNvdW50LWV4aXRcIjohMCxjaGlsZHJlbjpuLTF9KSwoMCx5LmpzeCkoXCJkaXZcIix7XCJkYXRhLWlzc3Vlcy1jb3VudFwiOiEwLFwiZGF0YS1pc3N1ZXMtY291bnQtZW50ZXJcIjohMCxjaGlsZHJlbjpufSldfSkpfWZ1bmN0aW9uIG9YKGUpe3ZhciBuPWUuaXNMb2FkaW5nLHQ9ZS5pc0RldkJ1aWxkaW5nP1wicmdiYSgyNTUsMjU1LDI1NSwwLjcpXCI6XCJ3aGl0ZVwiO3JldHVybigwLHkuanN4cykoXCJzdmdcIix7d2lkdGg6XCI0MFwiLGhlaWdodDpcIjQwXCIsdmlld0JveDpcIjAgMCA0MCA0MFwiLGZpbGw6XCJub25lXCIsXCJkYXRhLW5leHQtbWFyay1sb2FkaW5nXCI6bixjaGlsZHJlbjpbKDAseS5qc3hzKShcImdcIix7dHJhbnNmb3JtOlwidHJhbnNsYXRlKDguNSwgMTMpXCIsY2hpbGRyZW46WygwLHkuanN4KShcInBhdGhcIix7Y2xhc3NOYW1lOm4/XCJwYXRoMFwiOlwicGF1c2VkXCIsZDpcIk0xMy4zIDE1LjIgTDIuMzQgMSBWMTIuNlwiLGZpbGw6XCJub25lXCIsc3Ryb2tlOlwidXJsKCNuZXh0X2xvZ29fcGFpbnQwX2xpbmVhcl8xMzU3XzEwODUzKVwiLHN0cm9rZVdpZHRoOlwiMS44NlwiLG1hc2s6XCJ1cmwoI25leHRfbG9nb19tYXNrMClcIixzdHJva2VEYXNoYXJyYXk6XCIyOS42XCIsc3Ryb2tlRGFzaG9mZnNldDpcIjI5LjZcIn0pLCgwLHkuanN4KShcInBhdGhcIix7Y2xhc3NOYW1lOm4/XCJwYXRoMVwiOlwicGF1c2VkXCIsZDpcIk0xMS44MjUgMS41IFYxMy4xXCIsc3Ryb2tlV2lkdGg6XCIxLjg2XCIsc3Ryb2tlOlwidXJsKCNuZXh0X2xvZ29fcGFpbnQxX2xpbmVhcl8xMzU3XzEwODUzKVwiLHN0cm9rZURhc2hhcnJheTpcIjExLjZcIixzdHJva2VEYXNob2Zmc2V0OlwiMTEuNlwifSldfSksKDAseS5qc3hzKShcImRlZnNcIix7Y2hpbGRyZW46WygwLHkuanN4cykoXCJsaW5lYXJHcmFkaWVudFwiLHtpZDpcIm5leHRfbG9nb19wYWludDBfbGluZWFyXzEzNTdfMTA4NTNcIix4MTpcIjkuOTU1NTVcIix5MTpcIjExLjEyMjZcIix4MjpcIjE1LjQ3NzhcIix5MjpcIjE3Ljk2NzFcIixncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwic3RvcFwiLHtzdG9wQ29sb3I6dH0pLCgwLHkuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiMC42MDQwNzJcIixzdG9wQ29sb3I6dCxzdG9wT3BhY2l0eTpcIjBcIn0pLCgwLHkuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiMVwiLHN0b3BDb2xvcjp0LHN0b3BPcGFjaXR5OlwiMFwifSldfSksKDAseS5qc3hzKShcImxpbmVhckdyYWRpZW50XCIse2lkOlwibmV4dF9sb2dvX3BhaW50MV9saW5lYXJfMTM1N18xMDg1M1wiLHgxOlwiMTEuODIyMlwiLHkxOlwiMS40MDAzOVwiLHgyOlwiMTEuNzkxXCIseTI6XCI5LjYyNTQyXCIsZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIsY2hpbGRyZW46WygwLHkuanN4KShcInN0b3BcIix7c3RvcENvbG9yOnR9KSwoMCx5LmpzeCkoXCJzdG9wXCIse29mZnNldDpcIjFcIixzdG9wQ29sb3I6dCxzdG9wT3BhY2l0eTpcIjBcIn0pXX0pLCgwLHkuanN4cykoXCJtYXNrXCIse2lkOlwibmV4dF9sb2dvX21hc2swXCIsY2hpbGRyZW46WygwLHkuanN4KShcInJlY3RcIix7d2lkdGg6XCIxMDAlXCIsaGVpZ2h0OlwiMTAwJVwiLGZpbGw6XCJ3aGl0ZVwifSksKDAseS5qc3gpKFwicmVjdFwiLHt3aWR0aDpcIjVcIixoZWlnaHQ6XCIxLjVcIixmaWxsOlwiYmxhY2tcIn0pXX0pXX0pXX0pfWZ1bmN0aW9uIG9LKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiBvUShlLG4sdCl7cmV0dXJuIG4gaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHt2YWx1ZTp0LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVtuXT10LGV9ZnVuY3Rpb24gb0coZSxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0odD1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2godC52YWx1ZSksIW58fGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KGUsbil8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIG9LKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIG9LKGUsbil9fShlLG4pfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIG9KKGUpe3ZhciBuLHQ9ZS5zdGF0ZSxyPWUuZGlzcGF0Y2gsbz1lLmVycm9yQ291bnQsYT1lLmlzQnVpbGRFcnJvcixpPW9HKCgwLHgudXNlU3RhdGUpKCExKSwyKSxsPWlbMF0scz1pWzFdLGM9b0codC5kZXZUb29sc1Bvc2l0aW9uLnNwbGl0KFwiLVwiLDIpLDIpLHU9Y1swXSxkPWNbMV07cmV0dXJuKDAseS5qc3gpKHRSLHtcImRhdGEtbmV4dGpzLXRvYXN0XCI6ITAsc3R5bGU6KG9RKG49e1wiLS1hbmltYXRlLW91dC1kdXJhdGlvbi1tc1wiOlwiXCIuY29uY2F0KG5RLks3LFwibXNcIiksXCItLWFuaW1hdGUtb3V0LXRpbWluZy1mdW5jdGlvblwiOm5RLnVELGJveFNoYWRvdzpcIm5vbmVcIn0sdSxcIlwiLmNvbmNhdCgyMCxcInB4XCIpKSxvUShuLGQsXCJcIi5jb25jYXQoMjAsXCJweFwiKSksb1EobixcInZpc2liaWxpdHlcIix0LmlzRGV2VG9vbHNQYW5lbE9wZW58fHQuaXNFcnJvck92ZXJsYXlPcGVuP1wiaGlkZGVuXCI6XCJ2aXNpYmxlXCIpLG4pLGNoaWxkcmVuOigwLHkuanN4KShyTix7cGFkZGluZzoyMCxvbkRyYWdTdGFydDpmdW5jdGlvbigpe3JldHVybiBzKCExKX0scG9zaXRpb246dC5kZXZUb29sc1Bvc2l0aW9uLHNldFBvc2l0aW9uOmZ1bmN0aW9uKGUpe3Ioe3R5cGU6WSxkZXZUb29sc1Bvc2l0aW9uOmV9KSxsb2NhbFN0b3JhZ2Uuc2V0SXRlbShHLGUpfSxjaGlsZHJlbjooMCx5LmpzeCkob1ose1wiYXJpYS1oYXNwb3B1cFwiOlwibWVudVwiLFwiYXJpYS1leHBhbmRlZFwiOmwsXCJhcmlhLWNvbnRyb2xzXCI6XCJuZXh0anMtZGV2LXRvb2xzLW1lbnVcIixcImFyaWEtbGFiZWxcIjpcIlwiLmNvbmNhdChsP1wiQ2xvc2VcIjpcIk9wZW5cIixcIiBOZXh0LmpzIERldiBUb29sc1wiKSxcImRhdGEtbmV4dGpzLWRldi10b29scy1idXR0b25cIjohMCxkaXNhYmxlZDp0LmRpc2FibGVEZXZJbmRpY2F0b3IsaXNzdWVDb3VudDpvLG9uVHJpZ2dlckNsaWNrOmZ1bmN0aW9uKCl7cih7dHlwZTpafSl9LHRvZ2dsZUVycm9yT3ZlcmxheTpmdW5jdGlvbigpe3Ioe3R5cGU6TX0pLHIoe3R5cGU6V30pfSxpc0RldkJ1aWxkaW5nOnQuYnVpbGRpbmdJbmRpY2F0b3IsaXNEZXZSZW5kZXJpbmc6dC5yZW5kZXJpbmdJbmRpY2F0b3IsaXNCdWlsZEVycm9yOmEsc2NhbGU6dC5zY2FsZX0pfSl9KX1mdW5jdGlvbiBvMChlKXt2YXIgbix0O3JldHVybigwLHkuanN4KShcInN2Z1wiLChuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe3htbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIix3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTZcIix2aWV3Qm94OlwiMCAwIDE2IDE2XCIsZmlsbDpcIm5vbmVcIn0sZSksdD10PXtjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2Q6XCJNMTUgMTRDMTUgMTQuNTUyMyAxNC41NTIzIDE1IDE0IDE1SDEwVjEzLjVIMTMuNVYxMEgxNVYxNFpNMi41IDEzLjQ5OUg2VjE0Ljk5OUgyQzEuNDQ3NzIgMTQuOTk5IDEgMTQuNTUxMyAxIDEzLjk5OVY5Ljk5OTAySDIuNVYxMy40OTlaTTYgMi41SDIuNVY2SDFWMkMxIDEuNDQ3NzIgMS40NDc3MiAxIDIgMUg2VjIuNVpNMTQgMUMxNC41NTIzIDEgMTUgMS40NDc3MiAxNSAyVjZIMTMuNVYyLjVIMTBWMUgxNFpcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKSl9KSxuKSl9ZnVuY3Rpb24gbzEoZSl7dmFyIG4sdDtyZXR1cm4oMCx5LmpzeCkoXCJzdmdcIiwobj1mdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHt4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsd2lkdGg6XCIxNlwiLGhlaWdodDpcIjE2XCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLGZpbGw6XCJub25lXCJ9LGUpLHQ9dD17Y2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTEgNlY0LjVINC41VjFINlY1QzYgNS41NTIyOCA1LjU1MjI4IDYgNSA2SDFaTTExLjUgMUgxMFY1QzEwIDUuNTUyMjggMTAuNDQ3NyA2IDExIDZIMTVWNC41SDExLjVWMVpNMTUuMDQgMTEuNVYxMEgxMUMxMC40NDc3IDEwIDEwIDEwLjQ0NzcgMTAgMTFWMTVIMTEuNVYxMS41SDE1LjA0Wk00LjUgMTVINlYxMUM2IDEwLjQ0NzcgNS41NTIyOCAxMCA1IDEwSDFWMTEuNUg0LjVWMTVaXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSl9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG4sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkpfSksbikpfWZ1bmN0aW9uIG8yKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn12YXIgbzQ9XCJuZXh0anMtZGV2dG9vbHMtZGltZW5zaW9uc1wiLG81PSgwLHguY3JlYXRlQ29udGV4dCkobnVsbCksbzM9ZnVuY3Rpb24oZSl7dmFyIG49Ljk1KndpbmRvdy5pbm5lcldpZHRoLHQ9Ljk1KndpbmRvdy5pbm5lckhlaWdodDtyZXR1cm57d2lkdGg6TWF0aC5taW4obixNYXRoLm1heChlLm1pbldpZHRoLGUud2lkdGgpKSxoZWlnaHQ6TWF0aC5taW4odCxNYXRoLm1heChlLm1pbkhlaWdodCxlLmhlaWdodCkpfX0sbzY9ZnVuY3Rpb24oKXt2YXIgZT1sb2NhbFN0b3JhZ2UuZ2V0SXRlbShvNCk7aWYoIWUpcmV0dXJuIG51bGw7dHJ5e3ZhciBuLHQ9SlNPTi5wYXJzZShlKTtpZigodm9pZCAwPT09dD9cInVuZGVmaW5lZFwiOihuPXQpJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZuLmNvbnN0cnVjdG9yPT09U3ltYm9sP1wic3ltYm9sXCI6dHlwZW9mIG4pPT1cIm9iamVjdFwiJiZudWxsIT09dCYmXCJudW1iZXJcIj09dHlwZW9mIHQud2lkdGgmJlwibnVtYmVyXCI9PXR5cGVvZiB0LmhlaWdodClyZXR1cm57d2lkdGg6dC53aWR0aCxoZWlnaHQ6dC5oZWlnaHR9O3JldHVybiBudWxsfWNhdGNoKGUpe3JldHVybiBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShvNCksbnVsbH19LG85PWZ1bmN0aW9uKGUpe3ZhciBuLHQscixvLGE9ZS52YWx1ZSxpPWUuY2hpbGRyZW4sbD1udWxsIT0ocj1hLm1pbldpZHRoKT9yOjEwMCxzPW51bGwhPShvPWEubWluSGVpZ2h0KT9vOjgwLGM9KG49KDAseC51c2VTdGF0ZSkobnVsbCksdD0yLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KG4pfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KG4sMil8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIG8yKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIG8yKGUsbil9fShuLHQpfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpKSx1PWNbMF0sZD1jWzFdO3JldHVybigwLHgudXNlTGF5b3V0RWZmZWN0KShmdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKCl7aWYoYS5yZXNpemVSZWYuY3VycmVudCl7dmFyIGU9bzYoKTtpZihlKXt2YXIgbix0LHI9bzMoKG49ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7fSxlKSx0PXQ9e21pbldpZHRoOm51bGwhPWw/bDoxMDAsbWluSGVpZ2h0Om51bGwhPXM/czo4MH0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKSl9KSxuKSksbz1yLmhlaWdodCxpPXIud2lkdGg7YS5yZXNpemVSZWYuY3VycmVudC5zdHlsZS53aWR0aD1cIlwiLmNvbmNhdChpLFwicHhcIiksYS5yZXNpemVSZWYuY3VycmVudC5zdHlsZS5oZWlnaHQ9XCJcIi5jb25jYXQobyxcInB4XCIpfX19O3JldHVybiBlKCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIixlKSxmdW5jdGlvbigpe3JldHVybiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLGUpfX0sW2EucmVzaXplUmVmLGwsc10pLCgwLHkuanN4KShvNS5Qcm92aWRlcix7dmFsdWU6e3Jlc2l6ZVJlZjphLnJlc2l6ZVJlZixtaW5XaWR0aDpsLG1pbkhlaWdodDpzLGRldlRvb2xzUG9zaXRpb246YS5kZXZUb29sc1Bvc2l0aW9uLGRyYWdnaW5nRGlyZWN0aW9uOnUsc2V0RHJhZ2dpbmdEaXJlY3Rpb246ZH0sY2hpbGRyZW46aX0pfSxvOD1mdW5jdGlvbigpe3ZhciBlPSgwLHgudXNlQ29udGV4dCkobzUpO2lmKCFlKXRocm93IEVycm9yKFwidXNlUmVzaXplIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBSZXNpemUgcHJvdmlkZXJcIik7cmV0dXJuIGV9LG83PV9fd2VicGFja19yZXF1aXJlX18oXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvY29tcG9uZW50cy9kZXZ0b29scy1wYW5lbC9yZXNpemUvcmVzaXplLWhhbmRsZS5jc3NcIiksYWU9e307ZnVuY3Rpb24gYW4oZSxuKXsobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxyPUFycmF5KG4pO3Q8bjt0Kyspclt0XT1lW3RdO3JldHVybiByfWFlLnN0eWxlVGFnVHJhbnNmb3JtPWgoKSxhZS5zZXRBdHRyaWJ1dGVzPXUoKSxhZS5pbnNlcnQ9cygpLGFlLmRvbUFQST1pKCksYWUuaW5zZXJ0U3R5bGVFbGVtZW50PWYoKSxvKCkobzcuWixhZSksbzcuWiYmbzcuWi5sb2NhbHMmJm83LloubG9jYWxzO3ZhciBhdD1mdW5jdGlvbihlKXt2YXIgbix0LHI9ZS5kaXJlY3Rpb24sbz1vOCgpLGE9by5yZXNpemVSZWYsaT1vLm1pbldpZHRoLGw9by5taW5IZWlnaHQscz1vLmRldlRvb2xzUG9zaXRpb24sYz1vLmRyYWdnaW5nRGlyZWN0aW9uLHU9by5zZXREcmFnZ2luZ0RpcmVjdGlvbixkPShuPSgwLHgudXNlU3RhdGUpKHt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MH0pLHQ9MixmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShuKXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShuLDIpfHxmdW5jdGlvbihlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBhbihlLG4pO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20odCk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiBhbihlLG4pfX0obix0KXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKSksZj1kWzBdLHA9ZFsxXTtpZigoMCx4LnVzZUxheW91dEVmZmVjdCkoZnVuY3Rpb24oKXtpZihhLmN1cnJlbnQpe3ZhciBlPWEuY3VycmVudCxuPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpO3Aoe3RvcDpwYXJzZUZsb2F0KG4uYm9yZGVyVG9wV2lkdGgpfHwwLHJpZ2h0OnBhcnNlRmxvYXQobi5ib3JkZXJSaWdodFdpZHRoKXx8MCxib3R0b206cGFyc2VGbG9hdChuLmJvcmRlckJvdHRvbVdpZHRoKXx8MCxsZWZ0OnBhcnNlRmxvYXQobi5ib3JkZXJMZWZ0V2lkdGgpfHwwfSl9fSxbYV0pLCEoIXMuc3BsaXQoXCItXCIpLmluY2x1ZGVzKHIpJiYoIXIuaW5jbHVkZXMoXCItXCIpfHxyPT09ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2VcInRvcC1sZWZ0XCI6cmV0dXJuXCJib3R0b20tcmlnaHRcIjtjYXNlXCJ0b3AtcmlnaHRcIjpyZXR1cm5cImJvdHRvbS1sZWZ0XCI7Y2FzZVwiYm90dG9tLWxlZnRcIjpyZXR1cm5cInRvcC1yaWdodFwiO2Nhc2VcImJvdHRvbS1yaWdodFwiOnJldHVyblwidG9wLWxlZnRcIjtkZWZhdWx0OnJldHVybiBudWxsfX0ocykpKSlyZXR1cm4gbnVsbDt2YXIgaD1mLmxlZnQrZi5yaWdodCxnPWYudG9wK2YuYm90dG9tLG09ci5pbmNsdWRlcyhcIi1cIik7cmV0dXJuKDAseS5qc3hzKSh5LkZyYWdtZW50LHtjaGlsZHJlbjpbKDAseS5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTpcInJlc2l6ZS1jb250YWluZXIgXCIuY29uY2F0KHIsXCIgXCIpLmNvbmNhdChjJiZjIT09cj9cIm5vLWhvdmVyXCI6XCJcIiksb25Nb3VzZURvd246ZnVuY3Rpb24oZSl7aWYoZS5wcmV2ZW50RGVmYXVsdCgpLGEuY3VycmVudCl7dShyKTt2YXIgbj1hLmN1cnJlbnQsdD1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89bi5vZmZzZXRMZWZ0LHM9bi5vZmZzZXRUb3AsYz1lLmNsaWVudFgsZD1lLmNsaWVudFksZj1mdW5jdGlvbihlKXt2YXIgYT1hcihyLGUuY2xpZW50WC1jLGUuY2xpZW50WS1kLHQsbyxzLGksbCksdT1hLm5ld1dpZHRoLGY9YS5uZXdIZWlnaHQscD1hLm5ld0xlZnQsaD1hLm5ld1RvcDtuLnN0eWxlLndpZHRoPVwiXCIuY29uY2F0KHUsXCJweFwiKSxuLnN0eWxlLmhlaWdodD1cIlwiLmNvbmNhdChmLFwicHhcIiksKHIuaW5jbHVkZXMoXCJsZWZ0XCIpfHxcImxlZnRcIj09PXIpJiYobi5zdHlsZS5sZWZ0PVwiXCIuY29uY2F0KHAsXCJweFwiKSksKHIuaW5jbHVkZXMoXCJ0b3BcIil8fFwidG9wXCI9PT1yKSYmKG4uc3R5bGUudG9wPVwiXCIuY29uY2F0KGgsXCJweFwiKSl9LHA9ZnVuY3Rpb24oKXt1KG51bGwpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIixmKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLHApO3ZhciBlPWEuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPWUud2lkdGgsdD1lLmhlaWdodDtsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIm5leHRqcy1kZXZ0b29scy1kaW1lbnNpb25zXCIsSlNPTi5zdHJpbmdpZnkoe3dpZHRoOm4saGVpZ2h0OnR9KSl9O2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIixmKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLHApfX19KSwhbSYmKDAseS5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTpcInJlc2l6ZS1saW5lIFwiLmNvbmNhdChyLFwiIFwiKS5jb25jYXQoYz09PXI/XCJkcmFnZ2luZ1wiOlwiXCIpLHN0eWxlOntcIi0tYm9yZGVyLWhvcml6b250YWxcIjpcIlwiLmNvbmNhdChoLFwicHhcIiksXCItLWJvcmRlci12ZXJ0aWNhbFwiOlwiXCIuY29uY2F0KGcsXCJweFwiKSxcIi0tYm9yZGVyLXRvcFwiOlwiXCIuY29uY2F0KGYudG9wLFwicHhcIiksXCItLWJvcmRlci1yaWdodFwiOlwiXCIuY29uY2F0KGYucmlnaHQsXCJweFwiKSxcIi0tYm9yZGVyLWJvdHRvbVwiOlwiXCIuY29uY2F0KGYuYm90dG9tLFwicHhcIiksXCItLWJvcmRlci1sZWZ0XCI6XCJcIi5jb25jYXQoZi5sZWZ0LFwicHhcIil9fSldfSl9LGFyPWZ1bmN0aW9uKGUsbix0LHIsbyxhLGksbCl7dmFyIHM9Ljk1KndpbmRvdy5pbm5lcldpZHRoLGM9Ljk1KndpbmRvdy5pbm5lckhlaWdodDtzd2l0Y2goZSl7Y2FzZVwicmlnaHRcIjpyZXR1cm57bmV3V2lkdGg6TWF0aC5taW4ocyxNYXRoLm1heChpLHIud2lkdGgrbikpLG5ld0hlaWdodDpyLmhlaWdodCxuZXdMZWZ0Om8sbmV3VG9wOmF9O2Nhc2VcImxlZnRcIjp2YXIgdT1NYXRoLm1pbihzLE1hdGgubWF4KGksci53aWR0aC1uKSksZD11LXIud2lkdGg7cmV0dXJue25ld1dpZHRoOnUsbmV3SGVpZ2h0OnIuaGVpZ2h0LG5ld0xlZnQ6by1kLG5ld1RvcDphfTtjYXNlXCJib3R0b21cIjpyZXR1cm57bmV3V2lkdGg6ci53aWR0aCxuZXdIZWlnaHQ6TWF0aC5taW4oYyxNYXRoLm1heChsLHIuaGVpZ2h0K3QpKSxuZXdMZWZ0Om8sbmV3VG9wOmF9O2Nhc2VcInRvcFwiOnZhciBmPU1hdGgubWluKGMsTWF0aC5tYXgobCxyLmhlaWdodC10KSkscD1mLXIuaGVpZ2h0O3JldHVybntuZXdXaWR0aDpyLndpZHRoLG5ld0hlaWdodDpmLG5ld0xlZnQ6byxuZXdUb3A6YS1wfTtjYXNlXCJ0b3AtbGVmdFwiOnZhciBoPU1hdGgubWluKHMsTWF0aC5tYXgoaSxyLndpZHRoLW4pKSxnPU1hdGgubWluKGMsTWF0aC5tYXgobCxyLmhlaWdodC10KSksbT1oLXIud2lkdGgsdj1nLXIuaGVpZ2h0O3JldHVybntuZXdXaWR0aDpoLG5ld0hlaWdodDpnLG5ld0xlZnQ6by1tLG5ld1RvcDphLXZ9O2Nhc2VcInRvcC1yaWdodFwiOnZhciBiPU1hdGgubWluKGMsTWF0aC5tYXgobCxyLmhlaWdodC10KSkseT1iLXIuaGVpZ2h0O3JldHVybntuZXdXaWR0aDpNYXRoLm1pbihzLE1hdGgubWF4KGksci53aWR0aCtuKSksbmV3SGVpZ2h0OmIsbmV3TGVmdDpvLG5ld1RvcDphLXl9O2Nhc2VcImJvdHRvbS1sZWZ0XCI6dmFyIHg9TWF0aC5taW4ocyxNYXRoLm1heChpLHIud2lkdGgtbikpLHc9eC1yLndpZHRoO3JldHVybntuZXdXaWR0aDp4LG5ld0hlaWdodDpNYXRoLm1pbihjLE1hdGgubWF4KGwsci5oZWlnaHQrdCkpLG5ld0xlZnQ6by13LG5ld1RvcDphfTtjYXNlXCJib3R0b20tcmlnaHRcIjpyZXR1cm57bmV3V2lkdGg6TWF0aC5taW4ocyxNYXRoLm1heChpLHIud2lkdGgrbikpLG5ld0hlaWdodDpNYXRoLm1pbihjLE1hdGgubWF4KGwsci5oZWlnaHQrdCkpLG5ld0xlZnQ6byxuZXdUb3A6YX07ZGVmYXVsdDpyZXR1cm4gbnVsbH19O2Z1bmN0aW9uIGFvKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiBhYShlLG4sdCl7cmV0dXJuIG4gaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHt2YWx1ZTp0LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVtuXT10LGV9ZnVuY3Rpb24gYWkoZSxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0odD1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2godC52YWx1ZSksIW58fGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KGUsbil8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIGFvKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIGFvKGUsbil9fShlLG4pfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIGFsKCl7dmFyIGUsbix0PShlPVtcIlxcbiAgLyogVE9ETzogQmV0dGVyIG92ZXJyaWRlIGRpYWxvZyBoZWFkZXIgc3R5bGUuIFRoaXMgY29uZmxpY3RzIHdpdGggaXNzdWVzIHRhYiBjb250ZW50LiAqL1xcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWRpYWxvZy1oZWFkZXJdIHtcXG4gICAgZmxleC1zaHJpbms6IDA7XFxuICAgIG1hcmdpbi1ib3R0b206IDAgIWltcG9ydGFudDtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1kaWFsb2ctY29udGVudF0ge1xcbiAgICBmbGV4OiAxO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgICBtaW4taGVpZ2h0OiAwOyAvLyB3aGF0IGFsbG93cyBjb250ZW50IHRvIG92ZXJmbG93XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtZGlhbG9nLWJvZHldIHtcXG4gICAgZmxleDogMTtcXG4gICAgb3ZlcmZsb3c6IGF1dG87XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtb3ZlcmxheV0ge1xcbiAgICBtYXJnaW46IGF1dG87XFxuICAgIHdpZHRoOiA1MjVweDtcXG4gICAgaGVpZ2h0OiAzNzVweDtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1vdmVybGF5LWJhY2tkcm9wXSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1vdmVybGF5LWJhY2tkcm9wPSd0cnVlJ10ge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWRyYWdnYWJsZV0ge1xcbiAgICAvKiBGb3IgcmVzcG9uc2l2ZW5lc3MgKi9cXG4gICAgd2lkdGg6IDEwMCU7XFxuICAgIGhlaWdodDogMTAwJTtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1kaWFsb2ddIHtcXG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMTAwKTtcXG4gICAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS00MDApO1xcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLXhsKTtcXG4gICAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LWxnKTtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgaGVpZ2h0OiAxMDAlO1xcbiAgICBtaW4td2lkdGg6IDQwMHB4O1xcbiAgICBtaW4taGVpZ2h0OiAzNTBweDtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1oZWFkZXJdIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS00MDApO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWhlYWRlci10YWItZ3JvdXBdIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgcGFkZGluZzogOHB4O1xcbiAgICBnYXA6IDZweDtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1oZWFkZXItdGFiXSB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTkwMCk7XFxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtbWQtMik7XFxuICAgIHBhZGRpbmc6IDRweCAxMnB4O1xcbiAgICBmb250LXNpemU6IDE0cHg7XFxuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMjAwbXMgZWFzZTtcXG5cXG4gICAgJjpob3ZlciB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItZ3JheS0yMDApO1xcbiAgICB9XFxuXFxuICAgICY6YWN0aXZlIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTMwMCk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1oZWFkZXItdGFiPSd0cnVlJ10ge1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDApO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWhlYWRlci10YWItaXNzdWVzLWJhZGdlXSB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICBtYXJnaW4tbGVmdDogOHB4O1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1yZWQtNDAwKTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXJlZC05MDApO1xcbiAgICBmb250LXNpemU6IDExcHg7XFxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtZnVsbCk7XFxuICAgIHBhZGRpbmc6IDJweCA2cHg7XFxuICAgIHdpZHRoOiAyMHB4O1xcbiAgICBoZWlnaHQ6IDIwcHg7XFxuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtaGVhZGVyLWFjdGlvbi1idXR0b24tZ3JvdXBdIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgZ2FwOiA0cHg7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDhweDtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1oZWFkZXItYWN0aW9uLWJ1dHRvbl0ge1xcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gICAgYm9yZGVyOiBub25lO1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICBwYWRkaW5nOiA2cHg7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XFxuICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IGJhY2tncm91bmQtY29sb3IsIGNvbG9yO1xcbiAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAyMDBtcztcXG4gICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2U7XFxuXFxuICAgICY6aG92ZXIge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMjAwKTtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS05MDApO1xcbiAgICB9XFxuXFxuICAgICY6YWN0aXZlIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTMwMCk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1kcmFnZ2FibGU9J3RydWUnXSB7XFxuICAgIGN1cnNvcjogbW92ZTtcXG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICYgPiAqIHtcXG4gICAgICBjdXJzb3I6IGF1dG87XFxuICAgICAgLyogdXNlci1zZWxlY3Q6IGF1dG87IGZvbGxvd3MgdGhlIHBhcmVudCAocGFyZW50IG5vbmUgLT4gY2hpbGQgbm9uZSksIHNvIHJlc2V0IHRoZSBkaXJlY3QgY2hpbGQgdG8gdGV4dCAqL1xcbiAgICAgIHVzZXItc2VsZWN0OiB0ZXh0O1xcbiAgICB9XFxuICB9XFxuXCJdLG58fChuPWUuc2xpY2UoMCkpLE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSx7cmF3Ont2YWx1ZTpPYmplY3QuZnJlZXplKG4pfX0pKSk7cmV0dXJuIGFsPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LHR9ZnVuY3Rpb24gYXMoZSl7dmFyIG4sdCxyLG8sYSxpLGw9ZS5zdGF0ZSxzPWUuZGlzcGF0Y2gsYz1lLmlzc3VlQ291bnQsdT1lLnJ1bnRpbWVFcnJvcnMsZD1lLmdldFNxdWFzaGVkSHlkcmF0aW9uRXJyb3JEZXRhaWxzLGY9YWkoKG49XCJfX25leHRqcy1kZXZ0b29scy1hY3RpdmUtdGFiXCIsdD1cImlzc3Vlc1wiLG89KHI9YWkoKDAseC51c2VTdGF0ZSkoZnVuY3Rpb24oKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2Vzc2lvblN0b3JhZ2Upe3ZhciBlPXNlc3Npb25TdG9yYWdlLmdldEl0ZW0obik7cmV0dXJuIG51bGwhPWU/ZTp0fXJldHVybiB0fSksMikpWzBdLGE9clsxXSwoMCx4LnVzZUVmZmVjdCkoZnVuY3Rpb24oKXtcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2Vzc2lvblN0b3JhZ2UmJnNlc3Npb25TdG9yYWdlLnNldEl0ZW0obixvKX0sW24sb10pLFtvLGFdKSwyKSxwPWZbMF0saD1mWzFdLGc9YWkoKDAseC51c2VTdGF0ZSkoITEpLDIpLG09Z1swXSx2PWdbMV0sYj1haSgoMCx4LnVzZVN0YXRlKSghMSksMiksdz1iWzBdLGo9YlsxXSxrPSgwLHgudXNlUmVmKShudWxsKTtsLmlzRXJyb3JPdmVybGF5T3BlbiE9PXcmJihsLmlzRXJyb3JPdmVybGF5T3BlbiYmKHYoITApLGgoXCJpc3N1ZXNcIikpLGoobC5pc0Vycm9yT3ZlcmxheU9wZW4pKTt2YXIgQT1haShsLmRldlRvb2xzUG9zaXRpb24uc3BsaXQoXCItXCIsMiksMiksTz1BWzBdLEM9QVsxXSxTPWZ1bmN0aW9uKCl7cyh7dHlwZTokfSkscyh7dHlwZTpJfSl9O3JldHVybigwLHkuanN4KShvOSx7dmFsdWU6e3Jlc2l6ZVJlZjprLG1pbldpZHRoOjQwMCxtaW5IZWlnaHQ6MzUwLGRldlRvb2xzUG9zaXRpb246bC5kZXZUb29sc1Bvc2l0aW9ufSxjaGlsZHJlbjooMCx5LmpzeHMpKG5aLHtyZWY6ayxcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLW92ZXJsYXlcIjohMCxzdHlsZTptP3t9OihhYShpPXt9LE8sXCJcIi5jb25jYXQoMjAsXCJweFwiKSksYWEoaSxDLFwiXCIuY29uY2F0KDIwLFwicHhcIikpLGFhKGksXCJ0b3BcIj09PU8/XCJib3R0b21cIjpcInRvcFwiLFwiYXV0b1wiKSxhYShpLFwibGVmdFwiPT09Qz9cInJpZ2h0XCI6XCJsZWZ0XCIsXCJhdXRvXCIpLGkpLGNoaWxkcmVuOlsoMCx5LmpzeCkobjIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtb3ZlcmxheS1iYWNrZHJvcFwiOm0sb25DbGljazpTfSksKDAseS5qc3gpKHJOLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWRyYWdnYWJsZVwiOiEwLHBhZGRpbmc6MjAsb25EcmFnU3RhcnQ6ZnVuY3Rpb24oKXt9LHBvc2l0aW9uOmwuZGV2VG9vbHNQb3NpdGlvbixzZXRQb3NpdGlvbjpmdW5jdGlvbihlKXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbShHLGUpLHMoe3R5cGU6WSxkZXZUb29sc1Bvc2l0aW9uOmV9KX0sZHJhZ0hhbmRsZVNlbGVjdG9yOlwiW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWhlYWRlcl0sIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1mb290ZXJdXCIsZGlzYWJsZURyYWc6bSxjaGlsZHJlbjooMCx5LmpzeHMpKHkuRnJhZ21lbnQse2NoaWxkcmVuOlsoMCx5LmpzeHMpKGVaLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWRpYWxvZ1wiOiEwLFwiYXJpYS1sYWJlbGxlZGJ5XCI6XCJuZXh0anNfX2NvbnRhaW5lcl9kZXZfdG9vbHNfcGFuZWxfbGFiZWxcIixcImFyaWEtZGVzY3JpYmVkYnlcIjpcIm5leHRqc19fY29udGFpbmVyX2Rldl90b29sc19wYW5lbF9kZXNjXCIsb25DbG9zZTpTLGNoaWxkcmVuOlsoMCx5LmpzeHMpKGVYLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWRpYWxvZy1jb250ZW50XCI6ITAsY2hpbGRyZW46WygwLHkuanN4KShlSyx7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1kaWFsb2ctaGVhZGVyXCI6ITAsY2hpbGRyZW46KDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWhlYWRlclwiOiEwLFwiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtZHJhZ2dhYmxlXCI6IW0sY2hpbGRyZW46WygwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1oZWFkZXItdGFiLWdyb3VwXCI6ITAsY2hpbGRyZW46WygwLHkuanN4cykoXCJidXR0b25cIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1oZWFkZXItdGFiXCI6XCJpc3N1ZXNcIj09PXAsb25DbGljazpmdW5jdGlvbigpe3JldHVybiBoKFwiaXNzdWVzXCIpfSxjaGlsZHJlbjpbXCJJc3N1ZXNcIixjPjA/KDAseS5qc3gpKFwic3BhblwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWhlYWRlci10YWItaXNzdWVzLWJhZGdlXCI6ITAsY2hpbGRyZW46Y30pOm51bGxdfSksKDAseS5qc3gpKFwiYnV0dG9uXCIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtaGVhZGVyLXRhYlwiOlwicm91dGVcIj09PXAsb25DbGljazpmdW5jdGlvbigpe3JldHVybiBoKFwicm91dGVcIil9LGNoaWxkcmVuOlwiUm91dGUgSW5mb1wifSksKDAseS5qc3gpKFwiYnV0dG9uXCIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtaGVhZGVyLXRhYlwiOlwic2V0dGluZ3NcIj09PXAsb25DbGljazpmdW5jdGlvbigpe3JldHVybiBoKFwic2V0dGluZ3NcIil9LGNoaWxkcmVuOlwiU2V0dGluZ3NcIn0pXX0pLCgwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1oZWFkZXItYWN0aW9uLWJ1dHRvbi1ncm91cFwiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJidXR0b25cIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1oZWFkZXItYWN0aW9uLWJ1dHRvblwiOiEwLG9uQ2xpY2s6ZnVuY3Rpb24oKXt2KGZ1bmN0aW9uKGUpe3JldHVybiFlfSkscyh7dHlwZTpJfSl9LGNoaWxkcmVuOm0/KDAseS5qc3gpKG8xLHt3aWR0aDoxNixoZWlnaHQ6MTZ9KTooMCx5LmpzeCkobzAse3dpZHRoOjE2LGhlaWdodDoxNn0pfSksKDAseS5qc3gpKFwiYnV0dG9uXCIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtaGVhZGVyLWFjdGlvbi1idXR0b25cIjohMCxvbkNsaWNrOlMsY2hpbGRyZW46KDAseS5qc3gpKG9ILHt3aWR0aDoxNixoZWlnaHQ6MTZ9KX0pXX0pXX0pfSksKDAseS5qc3gpKGVZLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWRpYWxvZy1ib2R5XCI6ITAsY2hpbGRyZW46KDAseS5qc3gpKG9JLHtwYWdlOmwucGFnZSxhY3RpdmVUYWI6cCxkZXZUb29sc1Bvc2l0aW9uOmwuZGV2VG9vbHNQb3NpdGlvbixzY2FsZTpsLnNjYWxlLHJvdXRlclR5cGU6bC5yb3V0ZXJUeXBlLGhhbmRsZVBvc2l0aW9uQ2hhbmdlOmZ1bmN0aW9uKGUpe3Moe3R5cGU6WSxkZXZUb29sc1Bvc2l0aW9uOmUudGFyZ2V0LnZhbHVlfSksbG9jYWxTdG9yYWdlLnNldEl0ZW0oRyxlLnRhcmdldC52YWx1ZSl9LGhhbmRsZVNjYWxlQ2hhbmdlOmZ1bmN0aW9uKGUpe3Moe3R5cGU6WCxzY2FsZTpOdW1iZXIoZS50YXJnZXQudmFsdWUpfSksbG9jYWxTdG9yYWdlLnNldEl0ZW0oSixlLnRhcmdldC52YWx1ZSl9LGRlYnVnSW5mbzpsLmRlYnVnSW5mbyxydW50aW1lRXJyb3JzOnUsZ2V0U3F1YXNoZWRIeWRyYXRpb25FcnJvckRldGFpbHM6ZCxidWlsZEVycm9yOmwuYnVpbGRFcnJvcn0pfSldfSksKDAseS5qc3gpKHIyLHt2ZXJzaW9uSW5mbzpsLnZlcnNpb25JbmZvLGlzRHJhZ2dhYmxlOiFtLHNob3dSZXN0YXJ0U2VydmVyQnV0dG9uOmwuc2hvd1Jlc3RhcnRTZXJ2ZXJCdXR0b259KV19KSwhbSYmKDAseS5qc3hzKSh5LkZyYWdtZW50LHtjaGlsZHJlbjpbKDAseS5qc3gpKGF0LHtkaXJlY3Rpb246XCJ0b3BcIn0pLCgwLHkuanN4KShhdCx7ZGlyZWN0aW9uOlwicmlnaHRcIn0pLCgwLHkuanN4KShhdCx7ZGlyZWN0aW9uOlwiYm90dG9tXCJ9KSwoMCx5LmpzeCkoYXQse2RpcmVjdGlvbjpcImxlZnRcIn0pLCgwLHkuanN4KShhdCx7ZGlyZWN0aW9uOlwidG9wLWxlZnRcIn0pLCgwLHkuanN4KShhdCx7ZGlyZWN0aW9uOlwidG9wLXJpZ2h0XCJ9KSwoMCx5LmpzeCkoYXQse2RpcmVjdGlvbjpcImJvdHRvbS1sZWZ0XCJ9KSwoMCx5LmpzeCkoYXQse2RpcmVjdGlvbjpcImJvdHRvbS1yaWdodFwifSldfSldfSl9KV19KX0pfXZhciBhYz1laShhbCgpKTtmdW5jdGlvbiBhdSgpe3ZhciBlLG4sdD0oZT1bXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgXCJdLG58fChuPWUuc2xpY2UoMCkpLE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSx7cmF3Ont2YWx1ZTpPYmplY3QuZnJlZXplKG4pfX0pKSk7cmV0dXJuIGF1PWZ1bmN0aW9uKCl7cmV0dXJuIHR9LHR9ZnVuY3Rpb24gYWQoKXtyZXR1cm4oMCx5LmpzeCkoXCJzdHlsZVwiLHtjaGlsZHJlbjplaShhdSgpLFwiXFxuICAubmV4dGpzLWRhdGEtY29weS1idXR0b24ge1xcbiAgICBjb2xvcjogaW5oZXJpdDtcXG5cXG4gICAgc3ZnIHtcXG4gICAgICB3aWR0aDogdmFyKC0tc2l6ZS0xNik7XFxuICAgICAgaGVpZ2h0OiB2YXIoLS1zaXplLTE2KTtcXG4gICAgfVxcbiAgfVxcbiAgLm5leHRqcy1kYXRhLWNvcHktYnV0dG9uOmRpc2FibGVkIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDApO1xcbiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbiAgfVxcbiAgLm5leHRqcy1kYXRhLWNvcHktYnV0dG9uLS1pbml0aWFsOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcXG4gICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgfVxcbiAgLm5leHRqcy1kYXRhLWNvcHktYnV0dG9uLS1lcnJvcjpub3QoOmRpc2FibGVkKSxcXG4gIC5uZXh0anMtZGF0YS1jb3B5LWJ1dHRvbi0tZXJyb3I6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItYW5zaS1yZWQpO1xcbiAgfVxcbiAgLm5leHRqcy1kYXRhLWNvcHktYnV0dG9uLS1zdWNjZXNzOm5vdCg6ZGlzYWJsZWQpIHtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWFuc2ktZ3JlZW4pO1xcbiAgfVxcblwiLCdcXG4gIFtkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWZyYW1lLW5vLXNvdXJjZV0ge1xcbiAgICBwYWRkaW5nOiA2cHggOHB4O1xcbiAgICBtYXJnaW4tYm90dG9tOiA0cHg7XFxuXFxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtbGcpO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNhbGwtc3RhY2stZnJhbWUtbm8tc291cmNlXTpsYXN0LWNoaWxkIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWZyYW1lLWlnbm9yZWQ9XCJ0cnVlXCJdIHtcXG4gICAgb3BhY2l0eTogMC42O1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNhbGwtc3RhY2stZnJhbWVdIHtcXG4gICAgdXNlci1zZWxlY3Q6IHRleHQ7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcblxcbiAgICB1c2VyLXNlbGVjdDogdGV4dDtcXG4gICAgLXdlYmtpdC11c2VyLXNlbGVjdDogdGV4dDtcXG4gICAgLW1vei11c2VyLXNlbGVjdDogdGV4dDtcXG4gICAgLW1zLXVzZXItc2VsZWN0OiB0ZXh0O1xcblxcbiAgICBwYWRkaW5nOiA2cHggOHB4O1xcblxcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLWxnKTtcXG4gIH1cXG5cXG4gIC5jYWxsLXN0YWNrLWZyYW1lLW1ldGhvZC1uYW1lIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgZ2FwOiA0cHg7XFxuXFxuICAgIG1hcmdpbi1ib3R0b206IDRweDtcXG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2stbW9ub3NwYWNlKTtcXG5cXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNCk7XFxuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1zaXplLTIwKTtcXG5cXG4gICAgc3ZnIHtcXG4gICAgICB3aWR0aDogdmFyKC0tc2l6ZS0xNnB4KTtcXG4gICAgICBoZWlnaHQ6IHZhcigtLXNpemUtMTZweCk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC5vcGVuLWluLWVkaXRvci1idXR0b24sIC5zb3VyY2UtbWFwcGluZy1lcnJvci1idXR0b24ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1mdWxsKTtcXG4gICAgcGFkZGluZzogNHB4O1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZm9udCk7XFxuXFxuICAgIHN2ZyB7XFxuICAgICAgd2lkdGg6IHZhcigtLXNpemUtMTYpO1xcbiAgICAgIGhlaWdodDogdmFyKC0tc2l6ZS0xNik7XFxuICAgIH1cXG5cXG4gICAgJjpmb2N1cy12aXNpYmxlIHtcXG4gICAgICBvdXRsaW5lOiB2YXIoLS1mb2N1cy1yaW5nKTtcXG4gICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcXG4gICAgfVxcblxcbiAgICAmOmhvdmVyIHtcXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LTEwMCk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC5jYWxsLXN0YWNrLWZyYW1lLWZpbGUtc291cmNlIHtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktOTAwKTtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE0KTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLXNpemUtMjApO1xcbiAgfVxcbicsdHMsXCJcXG4gIFtkYXRhLW5leHRqcy1lbnZpcm9ubWVudC1uYW1lLWxhYmVsXSB7XFxuICAgIHBhZGRpbmc6IDJweCA2cHg7XFxuICAgIG1hcmdpbjogMDtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1tZC0yKTtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS0xMDApO1xcbiAgICBmb250LXdlaWdodDogNjAwO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTIpO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS05MDApO1xcbiAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjay1tb25vc3BhY2UpO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tc2l6ZS0yMCk7XFxuICB9XFxuXCIsXCJcXG4gIFtkYXRhLW5leHRqcy1kaWFsb2ctb3ZlcmxheV0ge1xcbiAgICBwb3NpdGlvbjogZml4ZWQ7XFxuICAgIHRvcDogMDtcXG4gICAgcmlnaHQ6IDA7XFxuICAgIGJvdHRvbTogMDtcXG4gICAgbGVmdDogMDtcXG4gICAgLyogc2Vjb25kYXJ5IHotaW5kZXgsIC0xIHRoYW4gdG9hc3Qgei1pbmRleCAqL1xcbiAgICB6LWluZGV4OiAyMTQ3NDgzNjQ2O1xcblxcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIHBhZGRpbmc6IDEwdmggMTVweCAwO1xcbiAgfVxcblxcbiAgQG1lZGlhIChtYXgtaGVpZ2h0OiA4MTJweCkge1xcbiAgICBbZGF0YS1uZXh0anMtZGlhbG9nLW92ZXJsYXldIHtcXG4gICAgICBwYWRkaW5nOiAxNXB4IDE1cHggMDtcXG4gICAgfVxcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1iYWNrZHJvcF0ge1xcbiAgICBwb3NpdGlvbjogZml4ZWQ7XFxuICAgIHRvcDogMDtcXG4gICAgcmlnaHQ6IDA7XFxuICAgIGJvdHRvbTogMDtcXG4gICAgbGVmdDogMDtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYmFja2Ryb3ApO1xcbiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7XFxuICAgIHBvaW50ZXItZXZlbnRzOiBhbGw7XFxuICAgIHotaW5kZXg6IC0xO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1iYWNrZHJvcC1maXhlZF0ge1xcbiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cig4cHgpO1xcbiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoOHB4KTtcXG4gIH1cXG5cIixlRyxuOCxuRSxcIlxcbiAgLmVycm9yLW92ZXJsYXktYm90dG9tLXN0YWNrLWxheWVyIHtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICAgIGhlaWdodDogdmFyKC0tc3RhY2stbGF5ZXItaGVpZ2h0KTtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQteGwpO1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTIwMCk7XFxuICAgIHRyYW5zaXRpb246XFxuICAgICAgdHJhbnNsYXRlIDM1MG1zIHZhcigtLXRpbWluZy1zd2lmdCksXFxuICAgICAgYm94LXNoYWRvdyAzNTBtcyB2YXIoLS10aW1pbmctc3dpZnQpO1xcbiAgfVxcblxcbiAgLmVycm9yLW92ZXJsYXktYm90dG9tLXN0YWNrLWxheWVyLTEge1xcbiAgICB3aWR0aDogY2FsYygxMDAlIC0gdmFyKC0tc2l6ZS0yNCkpO1xcbiAgfVxcblxcbiAgLmVycm9yLW92ZXJsYXktYm90dG9tLXN0YWNrLWxheWVyLTIge1xcbiAgICB3aWR0aDogY2FsYygxMDAlIC0gdmFyKC0tc2l6ZS00OCkpO1xcbiAgICB6LWluZGV4OiAtMTtcXG4gIH1cXG5cXG4gIC5lcnJvci1vdmVybGF5LWJvdHRvbS1zdGFjayB7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIGJvdHRvbTogLTFweDtcXG4gICAgaGVpZ2h0OiAwO1xcbiAgICBvdmVyZmxvdzogdmlzaWJsZTtcXG4gIH1cXG5cXG4gIC5lcnJvci1vdmVybGF5LWJvdHRvbS1zdGFjay1zdGFjayB7XFxuICAgIC0tc3RhY2stbGF5ZXItaGVpZ2h0OiA0NHB4O1xcbiAgICAtLXN0YWNrLWxheWVyLWhlaWdodC1oYWxmOiBjYWxjKHZhcigtLXN0YWNrLWxheWVyLWhlaWdodCkgLyAyKTtcXG4gICAgLS1zdGFjay1sYXllci10cmltOiAxM3B4O1xcbiAgICAtLXNoYWRvdzogMHB4IDAuOTI1cHggMC45MjVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjAyKSxcXG4gICAgICAwcHggMy43cHggNy40cHggLTMuN3B4IHJnYmEoMCwgMCwgMCwgMC4wNCksXFxuICAgICAgMHB4IDE0LjhweCAyMi4ycHggLTcuNHB4IHJnYmEoMCwgMCwgMCwgMC4wNik7XFxuXFxuICAgIGRpc3BsYXk6IGdyaWQ7XFxuICAgIHBsYWNlLWl0ZW1zOiBjZW50ZXIgY2VudGVyO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgcG9zaXRpb246IGZpeGVkO1xcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgICB6LWluZGV4OiAtMTtcXG4gICAgbWF4LXdpZHRoOiB2YXIoLS1uZXh0LWRpYWxvZy1tYXgtd2lkdGgpO1xcblxcbiAgICAuZXJyb3Itb3ZlcmxheS1ib3R0b20tc3RhY2stbGF5ZXIge1xcbiAgICAgIGdyaWQtYXJlYTogMSAvIDE7XFxuICAgICAgLyogSGlkZSAqL1xcbiAgICAgIHRyYW5zbGF0ZTogMCBjYWxjKHZhcigtLXN0YWNrLWxheWVyLWhlaWdodCkgKiAtMSk7XFxuICAgIH1cXG5cXG4gICAgJltkYXRhLXN0YWNrLWNvdW50PScxJ10sXFxuICAgICZbZGF0YS1zdGFjay1jb3VudD0nMiddIHtcXG4gICAgICAuZXJyb3Itb3ZlcmxheS1ib3R0b20tc3RhY2stbGF5ZXItMSB7XFxuICAgICAgICB0cmFuc2xhdGU6IDBcXG4gICAgICAgICAgY2FsYyh2YXIoLS1zdGFjay1sYXllci1oZWlnaHQtaGFsZikgKiAtMSAtIHZhcigtLXN0YWNrLWxheWVyLXRyaW0pKTtcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgJltkYXRhLXN0YWNrLWNvdW50PScyJ10ge1xcbiAgICAgIC5lcnJvci1vdmVybGF5LWJvdHRvbS1zdGFjay1sYXllci0yIHtcXG4gICAgICAgIHRyYW5zbGF0ZTogMCBjYWxjKHZhcigtLXN0YWNrLWxheWVyLXRyaW0pICogLTEgKiAyKTtcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgLyogT25seSB0aGUgYm90dG9tIHN0YWNrIHNob3VsZCBoYXZlIHRoZSBzaGFkb3cgKi9cXG4gICAgJltkYXRhLXN0YWNrLWNvdW50PScxJ10gLmVycm9yLW92ZXJsYXktYm90dG9tLXN0YWNrLWxheWVyLTEge1xcbiAgICAgIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdyk7XFxuICAgIH1cXG5cXG4gICAgJltkYXRhLXN0YWNrLWNvdW50PScyJ10ge1xcbiAgICAgIC5lcnJvci1vdmVybGF5LWJvdHRvbS1zdGFjay1sYXllci0yIHtcXG4gICAgICAgIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdyk7XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIsXCJcXG4gIC5lcnJvci1vdmVybGF5LXBhZ2luYXRpb24ge1xcbiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGdhcDogOHB4O1xcbiAgICB3aWR0aDogZml0LWNvbnRlbnQ7XFxuICB9XFxuXFxuICAuZXJyb3Itb3ZlcmxheS1wYWdpbmF0aW9uLWNvdW50IHtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktOTAwKTtcXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTQpO1xcbiAgICBmb250LXdlaWdodDogNTAwO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tc2l6ZS0xNik7XFxuICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XFxuICB9XFxuXFxuICAuZXJyb3Itb3ZlcmxheS1wYWdpbmF0aW9uLWJ1dHRvbiB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcblxcbiAgICB3aWR0aDogdmFyKC0tc2l6ZS0yNCk7XFxuICAgIGhlaWdodDogdmFyKC0tc2l6ZS0yNCk7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktMzAwKTtcXG4gICAgZmxleC1zaHJpbms6IDA7XFxuXFxuICAgIGJvcmRlcjogbm9uZTtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1mdWxsKTtcXG5cXG4gICAgc3ZnIHtcXG4gICAgICB3aWR0aDogdmFyKC0tc2l6ZS0xNik7XFxuICAgICAgaGVpZ2h0OiB2YXIoLS1zaXplLTE2KTtcXG4gICAgfVxcblxcbiAgICAmOmZvY3VzLXZpc2libGUge1xcbiAgICAgIG91dGxpbmU6IHZhcigtLWZvY3VzLXJpbmcpO1xcbiAgICB9XFxuXFxuICAgICY6bm90KDpkaXNhYmxlZCk6YWN0aXZlIHtcXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LTUwMCk7XFxuICAgIH1cXG5cXG4gICAgJjpkaXNhYmxlZCB7XFxuICAgICAgb3BhY2l0eTogMC41O1xcbiAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC5lcnJvci1vdmVybGF5LXBhZ2luYXRpb24tYnV0dG9uLWljb24ge1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gIH1cXG5cIiwnXFxuICBbZGF0YS1uZXh0anMtY29kZWZyYW1lXSB7XFxuICAgIC0tY29kZS1mcmFtZS1wYWRkaW5nOiAxMnB4O1xcbiAgICAtLWNvZGUtZnJhbWUtbGluZS1oZWlnaHQ6IHZhcigtLXNpemUtMTYpO1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTIwMCk7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcXG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS00MDApO1xcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XFxuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrLW1vbm9zcGFjZSk7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xMik7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1jb2RlLWZyYW1lLWxpbmUtaGVpZ2h0KTtcXG4gICAgbWFyZ2luOiA4cHggMDtcXG5cXG4gICAgc3ZnIHtcXG4gICAgICB3aWR0aDogdmFyKC0tc2l6ZS0xNik7XFxuICAgICAgaGVpZ2h0OiB2YXIoLS1zaXplLTE2KTtcXG4gICAgfVxcbiAgfVxcblxcbiAgLmNvZGUtZnJhbWUtbGluayxcXG4gIC5jb2RlLWZyYW1lLXByZSB7XFxuICAgIHBhZGRpbmc6IHZhcigtLWNvZGUtZnJhbWUtcGFkZGluZyk7XFxuICB9XFxuXFxuICAuY29kZS1mcmFtZS1saW5rIHN2ZyB7XFxuICAgIGZsZXgtc2hyaW5rOiAwO1xcbiAgfVxcblxcbiAgLmNvZGUtZnJhbWUtbGluZXMge1xcbiAgICBtaW4td2lkdGg6IG1heC1jb250ZW50O1xcbiAgfVxcblxcbiAgLmNvZGUtZnJhbWUtbGluayBbZGF0YS10ZXh0XSB7XFxuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xcbiAgICBtYXJnaW46IGF1dG8gNnB4O1xcbiAgfVxcblxcbiAgLmNvZGUtZnJhbWUtaGVhZGVyIHtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMTAwbXMgZWFzZS1vdXQ7XFxuICAgIGJvcmRlci1yYWRpdXM6IDhweCA4cHggMCAwO1xcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS00MDApO1xcbiAgfVxcblxcbiAgW2RhdGEtd2l0aC1vcGVuLWluLWVkaXRvci1saW5rLXNvdXJjZS1maWxlXSB7XFxuICAgIHBhZGRpbmc6IDRweDtcXG4gICAgbWFyZ2luOiAtNHB4IDAgLTRweCBhdXRvO1xcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLWZ1bGwpO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG5cXG4gICAgJjpmb2N1cy12aXNpYmxlIHtcXG4gICAgICBvdXRsaW5lOiB2YXIoLS1mb2N1cy1yaW5nKTtcXG4gICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcXG4gICAgfVxcblxcbiAgICAmOmhvdmVyIHtcXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LTEwMCk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1jb2RlZnJhbWVdOjpzZWxlY3Rpb24sXFxuICBbZGF0YS1uZXh0anMtY29kZWZyYW1lXSAqOjpzZWxlY3Rpb24ge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1hbnNpLXNlbGVjdGlvbik7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY29kZWZyYW1lXSAqOm5vdChhKSB7XFxuICAgIGNvbG9yOiBpbmhlcml0O1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2stbW9ub3NwYWNlKTtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1jb2RlZnJhbWUtbGluZV1bZGF0YS1uZXh0anMtY29kZWZyYW1lLWxpbmUtLWVycm9yZWQ9XCJ0cnVlXCJdIHtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICBpc29sYXRpb246IGlzb2xhdGU7XFxuXFxuICAgID4gc3BhbiB7IFxcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgICB6LWluZGV4OiAxO1xcbiAgICB9XFxuXFxuICAgICY6OmFmdGVyIHtcXG4gICAgICBjb250ZW50OiBcIlwiO1xcbiAgICAgIHdpZHRoOiBjYWxjKDEwMCUgKyB2YXIoLS1jb2RlLWZyYW1lLXBhZGRpbmcpICogMik7XFxuICAgICAgaGVpZ2h0OiB2YXIoLS1jb2RlLWZyYW1lLWxpbmUtaGVpZ2h0KTtcXG4gICAgICBsZWZ0OiBjYWxjKC0xICogdmFyKC0tY29kZS1mcmFtZS1wYWRkaW5nKSk7XFxuICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItcmVkLTIwMCk7XFxuICAgICAgYm94LXNoYWRvdzogMnB4IDAgMCAwIHZhcigtLWNvbG9yLXJlZC05MDApIGluc2V0O1xcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgfVxcbiAgfVxcblxcblxcbiAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZV0gPiAqIHtcXG4gICAgbWFyZ2luOiAwO1xcbiAgfVxcblxcbiAgLmNvZGUtZnJhbWUtbGluayB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIG1hcmdpbjogMDtcXG4gICAgb3V0bGluZTogMDtcXG4gIH1cXG4gIC5jb2RlLWZyYW1lLWxpbmsgW2RhdGEtaWNvbj1cXCdyaWdodFxcJ10ge1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1jb2RlZnJhbWVdIGRpdiA+IHByZSB7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1jb2RlZnJhbWVdIHN2ZyB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTkwMCk7XFxuICB9XFxuJyxcIlxcbiAgW2RhdGEtbmV4dGpzLXRlcm1pbmFsXTo6c2VsZWN0aW9uLFxcbiAgW2RhdGEtbmV4dGpzLXRlcm1pbmFsXSAqOjpzZWxlY3Rpb24ge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1hbnNpLXNlbGVjdGlvbik7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtdGVybWluYWxdICoge1xcbiAgICBjb2xvcjogaW5oZXJpdDtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrLW1vbm9zcGFjZSk7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtdGVybWluYWxdID4gZGl2ID4gcCB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICBtYXJnaW46IDA7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtdGVybWluYWxdID4gZGl2ID4gcDpob3ZlciB7XFxuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy10ZXJtaW5hbF0gZGl2ID4gcHJlIHtcXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgfVxcblwiLFwiXFxuICBbZGF0YS13aXRoLW9wZW4taW4tZWRpdG9yLWxpbmtdIHN2ZyB7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgICBoZWlnaHQ6IHZhcigtLXNpemUtMTQpO1xcbiAgICBtYXJnaW4tbGVmdDogOHB4O1xcbiAgfVxcbiAgW2RhdGEtd2l0aC1vcGVuLWluLWVkaXRvci1saW5rXSB7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gIH1cXG4gIFtkYXRhLXdpdGgtb3Blbi1pbi1lZGl0b3ItbGlua106aG92ZXIge1xcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSBkb3R0ZWQ7XFxuICB9XFxuICBbZGF0YS13aXRoLW9wZW4taW4tZWRpdG9yLWxpbmstaW1wb3J0LXRyYWNlXSB7XFxuICAgIG1hcmdpbi1sZWZ0OiAxNnB4O1xcbiAgfVxcblwiLFwiXCIsXCJcXG4gIC5uZXh0anMtZXJyb3Itd2l0aC1zdGF0aWMge1xcbiAgICBib3R0b206IGNhbGMoMTZweCAqIDQuNSk7XFxuICB9XFxuICBwLm5leHRqc19fY29udGFpbmVyX2Vycm9yc19fbGluayB7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNCk7XFxuICB9XFxuICBwLm5leHRqc19fY29udGFpbmVyX2Vycm9yc19fbm90ZXMge1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3Itc3RhY2stbm90ZXMpO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTQpO1xcbiAgICBsaW5lLWhlaWdodDogMS41O1xcbiAgfVxcbiAgLm5leHRqcy1jb250YWluZXItZXJyb3JzLWJvZHkgPiBoMjpub3QoOmZpcnN0LWNoaWxkKSB7XFxuICAgIG1hcmdpbi10b3A6IGNhbGMoMTZweCArIDhweCk7XFxuICB9XFxuICAubmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtYm9keSA+IGgyIHtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXRpdGxlLWNvbG9yKTtcXG4gICAgbWFyZ2luLWJvdHRvbTogOHB4O1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMjApO1xcbiAgfVxcbiAgLm5leHRqcy10b2FzdC1lcnJvcnMtcGFyZW50IHtcXG4gICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBlYXNlO1xcbiAgfVxcbiAgLm5leHRqcy10b2FzdC1lcnJvcnMtcGFyZW50OmhvdmVyIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjEpO1xcbiAgfVxcbiAgLm5leHRqcy10b2FzdC1lcnJvcnMge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxuICB9XFxuICAubmV4dGpzLXRvYXN0LWVycm9ycyA+IHN2ZyB7XFxuICAgIG1hcmdpbi1yaWdodDogOHB4O1xcbiAgfVxcbiAgLm5leHRqcy10b2FzdC1oaWRlLWJ1dHRvbiB7XFxuICAgIG1hcmdpbi1sZWZ0OiAyNHB4O1xcbiAgICBib3JkZXI6IG5vbmU7XFxuICAgIGJhY2tncm91bmQ6IG5vbmU7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hbnNpLWJyaWdodC13aGl0ZSk7XFxuICAgIHBhZGRpbmc6IDA7XFxuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4yNXMgZWFzZTtcXG4gICAgb3BhY2l0eTogMC43O1xcbiAgfVxcbiAgLm5leHRqcy10b2FzdC1oaWRlLWJ1dHRvbjpob3ZlciB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxuICAubmV4dGpzX19jb250YWluZXJfZXJyb3JzX19lcnJvcl90aXRsZSB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gICAgbWFyZ2luLWJvdHRvbTogMTRweDtcXG4gIH1cXG4gIC5lcnJvci1vdmVybGF5LW5vdGVzLWNvbnRhaW5lciB7XFxuICAgIG1hcmdpbjogOHB4IDJweDtcXG4gIH1cXG4gIC5lcnJvci1vdmVybGF5LW5vdGVzLWNvbnRhaW5lciBwIHtcXG4gICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xcbiAgfVxcblwiLHRBLFwiXFxuICAubmV4dGpzLWNvbnRhaW5lci1idWlsZC1lcnJvci12ZXJzaW9uLXN0YXR1cyB7XFxuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgZ2FwOiA0cHg7XFxuXFxuICAgIGhlaWdodDogdmFyKC0tc2l6ZS0yNik7XFxuICAgIHBhZGRpbmc6IDZweCA4cHggNnB4IDZweDtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xcbiAgICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LWFscGhhLTQwMCk7XFxuICAgIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1zbWFsbCk7XFxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtZnVsbCk7XFxuXFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTkwMCk7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xMik7XFxuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1zaXplLTE2KTtcXG4gIH1cXG5cXG4gIGEubmV4dGpzLWNvbnRhaW5lci1idWlsZC1lcnJvci12ZXJzaW9uLXN0YXR1cyB7XFxuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktOTAwKTtcXG5cXG4gICAgJjpob3ZlciB7XFxuICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS0xMDApO1xcbiAgICB9XFxuXFxuICAgICY6Zm9jdXMge1xcbiAgICAgIG91dGxpbmU6IHZhcigtLWZvY3VzLXJpbmcpO1xcbiAgICB9XFxuICB9XFxuXFxuICAudmVyc2lvbi1zdGFsZW5lc3MtaW5kaWNhdG9yLmZyZXNoIHtcXG4gICAgZmlsbDogdmFyKC0tY29sb3ItZ3JlZW4tODAwKTtcXG4gICAgc3Ryb2tlOiB2YXIoLS1jb2xvci1ncmVlbi0zMDApO1xcbiAgfVxcbiAgLnZlcnNpb24tc3RhbGVuZXNzLWluZGljYXRvci5zdGFsZSB7XFxuICAgIGZpbGw6IHZhcigtLWNvbG9yLWFtYmVyLTgwMCk7XFxuICAgIHN0cm9rZTogdmFyKC0tY29sb3ItYW1iZXItMzAwKTtcXG4gIH1cXG4gIC52ZXJzaW9uLXN0YWxlbmVzcy1pbmRpY2F0b3Iub3V0ZGF0ZWQge1xcbiAgICBmaWxsOiB2YXIoLS1jb2xvci1yZWQtODAwKTtcXG4gICAgc3Ryb2tlOiB2YXIoLS1jb2xvci1yZWQtMzAwKTtcXG4gIH1cXG4gIC52ZXJzaW9uLXN0YWxlbmVzcy1pbmRpY2F0b3IudW5rbm93biB7XFxuICAgIGZpbGw6IHZhcigtLWNvbG9yLWdyYXktODAwKTtcXG4gICAgc3Ryb2tlOiB2YXIoLS1jb2xvci1ncmF5LTMwMCk7XFxuICB9XFxuXFxuICAubmV4dGpzLWNvbnRhaW5lci1idWlsZC1lcnJvci12ZXJzaW9uLXN0YXR1cyA+IC50dXJib3BhY2stdGV4dCB7XFxuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudChcXG4gICAgICB0byByaWdodCxcXG4gICAgICB2YXIoLS1jb2xvci10dXJib3BhY2stdGV4dC1yZWQpIDAlLFxcbiAgICAgIHZhcigtLWNvbG9yLXR1cmJvcGFjay10ZXh0LWJsdWUpIDEwMCVcXG4gICAgKTtcXG4gICAgYmFja2dyb3VuZC1jbGlwOiB0ZXh0O1xcbiAgICAtd2Via2l0LWJhY2tncm91bmQtY2xpcDogdGV4dDtcXG4gICAgLXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgfVxcblwiLFwiXFxuICAucmVzdGFydC1kZXYtc2VydmVyLWJ1dHRvbiB7XFxuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgZ2FwOiA0cHg7XFxuICAgIG1hcmdpbjogMCAxMnB4O1xcblxcbiAgICBoZWlnaHQ6IHZhcigtLXNpemUtMjYpO1xcbiAgICBwYWRkaW5nOiA2cHggOHB4IDZweCA2cHg7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWFtYmVyLTEwMCk7XFxuICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktYWxwaGEtNDAwKTtcXG4gICAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LXNtYWxsKTtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1mdWxsKTtcXG5cXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWFtYmVyLTkwMCk7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xMik7XFxuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1zaXplLTE2KTtcXG4gIH1cXG5cIixcIlxcbiAgW2RhdGEtbmV4dGpzLXRvYXN0XSB7XFxuICAgICZbZGF0YS1oaWRkZW49J3RydWUnXSB7XFxuICAgICAgZGlzcGxheTogbm9uZTtcXG4gICAgfVxcbiAgfVxcblxcbiAgLmRldi10b29scy1pbmRpY2F0b3ItbWVudSB7XFxuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LWFscGhhLTQwMCk7XFxuICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XFxuICAgIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1tZW51KTtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC14bCk7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2stc2Fucyk7XFxuICAgIHotaW5kZXg6IDM7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgIG9wYWNpdHk6IDA7XFxuICAgIG91dGxpbmU6IDA7XFxuICAgIG1pbi13aWR0aDogMjQ4cHg7XFxuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgdmFyKC0tYW5pbWF0ZS1vdXQtZHVyYXRpb24tbXMpXFxuICAgICAgdmFyKC0tYW5pbWF0ZS1vdXQtdGltaW5nLWZ1bmN0aW9uKTtcXG5cXG4gICAgJltkYXRhLXJlbmRlcmVkPSd0cnVlJ10ge1xcbiAgICAgIG9wYWNpdHk6IDE7XFxuICAgICAgc2NhbGU6IDE7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5kaWNhdG9yLWlubmVyIHtcXG4gICAgcGFkZGluZzogNnB4O1xcbiAgICB3aWR0aDogMTAwJTtcXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5kaWNhdG9yLWl0ZW0ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBwYWRkaW5nOiA4cHggNnB4O1xcbiAgICBoZWlnaHQ6IHZhcigtLXNpemUtMzYpO1xcbiAgICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZSAhaW1wb3J0YW50O1xcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG5cXG4gICAgc3ZnIHtcXG4gICAgICB3aWR0aDogdmFyKC0tc2l6ZS0xNik7XFxuICAgICAgaGVpZ2h0OiB2YXIoLS1zaXplLTE2KTtcXG4gICAgfVxcblxcbiAgICAmOmZvY3VzLXZpc2libGUge1xcbiAgICAgIG91dGxpbmU6IDA7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5kaWNhdG9yLWZvb3RlciB7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMjAwKTtcXG4gICAgcGFkZGluZzogNnB4O1xcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS00MDApO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5kaWNhdG9yLWl0ZW1bZGF0YS1zZWxlY3RlZD0ndHJ1ZSddIHtcXG4gICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTIwMCk7XFxuICB9XFxuXFxuICAuZGV2LXRvb2xzLWluZGljYXRvci1sYWJlbCB7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNCk7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1zaXplLTIwKTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICB9XFxuXFxuICAuZGV2LXRvb2xzLWluZGljYXRvci12YWx1ZSB7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNCk7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1zaXplLTIwKTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktOTAwKTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICB9XFxuXFxuICAuZGV2LXRvb2xzLWluZGljYXRvci1pc3N1ZS1jb3VudCB7XFxuICAgIC0tY29sb3ItcHJpbWFyeTogdmFyKC0tY29sb3ItZ3JheS04MDApO1xcbiAgICAtLWNvbG9yLXNlY29uZGFyeTogdmFyKC0tY29sb3ItZ3JheS0xMDApO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgZ2FwOiA4cHg7XFxuICAgIG1pbi13aWR0aDogdmFyKC0tc2l6ZS00MCk7XFxuICAgIGhlaWdodDogdmFyKC0tc2l6ZS0yNCk7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMTAwKTtcXG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS1hbHBoYS00MDApO1xcbiAgICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xcbiAgICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctc21hbGwpO1xcbiAgICBwYWRkaW5nOiAycHg7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbiAgICBib3JkZXItcmFkaXVzOiAxMjhweDtcXG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTEzKTtcXG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcXG5cXG4gICAgJltkYXRhLWhhcy1pc3N1ZXM9J3RydWUnXSB7XFxuICAgICAgLS1jb2xvci1wcmltYXJ5OiB2YXIoLS1jb2xvci1yZWQtODAwKTtcXG4gICAgICAtLWNvbG9yLXNlY29uZGFyeTogdmFyKC0tY29sb3ItcmVkLTEwMCk7XFxuICAgIH1cXG5cXG4gICAgLmRldi10b29scy1pbmRpY2F0b3ItaXNzdWUtY291bnQtaW5kaWNhdG9yIHtcXG4gICAgICB3aWR0aDogdmFyKC0tc2l6ZS04KTtcXG4gICAgICBoZWlnaHQ6IHZhcigtLXNpemUtOCk7XFxuICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItcHJpbWFyeSk7XFxuICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHZhcigtLWNvbG9yLXNlY29uZGFyeSk7XFxuICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgICB9XFxuICB9XFxuXFxuICAuZGV2LXRvb2xzLWluZGljYXRvci1zaG9ydGN1dCB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGdhcDogNHB4O1xcblxcbiAgICBrYmQge1xcbiAgICAgIHdpZHRoOiB2YXIoLS1zaXplLTIwKTtcXG4gICAgICBoZWlnaHQ6IHZhcigtLXNpemUtMjApO1xcbiAgICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLW1kKTtcXG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2stc2Fucyk7XFxuICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gICAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTIpO1xcbiAgICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1zaXplLTE2KTtcXG4gICAgfVxcbiAgfVxcblxcbiAgLmRldi10b29scy1ncmFiYmluZyB7XFxuICAgIGN1cnNvcjogZ3JhYmJpbmc7XFxuXFxuICAgID4gKiB7XFxuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICAgIH1cXG4gIH1cXG5cIix0MC5nLFwiXFxuICAuZGV2LXRvb2xzLWluZm8tY29kZSB7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrLW1vbm9zcGFjZSk7XFxuICAgIHBhZGRpbmc6IDJweCA0cHg7XFxuICAgIG1hcmdpbjogMDtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTEzKTtcXG4gICAgd2hpdGUtc3BhY2U6IGJyZWFrLXNwYWNlcztcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1tZC0yKTtcXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWNvbnRhaW5lciB7XFxuICAgIHBhZGRpbmc6IDZweDtcXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrIHtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTIwMCk7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktYWxwaGEtNDAwKTtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1tZC0yKTtcXG4gICAgbWluLXdpZHRoOiAzMjZweDtcXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLXByZSB7XFxuICAgIG1hcmdpbjogMDtcXG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2stbW9ub3NwYWNlKTtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTEyKTtcXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5mby1jb3B5LWJ1dHRvbiB7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG5cXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIHJpZ2h0OiA4cHg7XFxuICAgIHRvcDogOHB4O1xcbiAgICBwYWRkaW5nOiA0cHg7XFxuICAgIGhlaWdodDogdmFyKC0tc2l6ZS0yNCk7XFxuICAgIHdpZHRoOiB2YXIoLS1zaXplLTI0KTtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1tZC0yKTtcXG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS1hbHBoYS00MDApO1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICB9XFxuXFxuICAuZGV2LXRvb2xzLWluZm8tY29kZS1ibG9jay1saW5lIHtcXG4gICAgZGlzcGxheTogYmxvY2s7XFxuICAgIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICAgIHBhZGRpbmc6IDAgMTZweDtcXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWxpbmUuZGV2LXRvb2xzLWluZm8taGlnaGxpZ2h0IHtcXG4gICAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCB2YXIoLS1jb2xvci1ibHVlLTkwMCk7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJsdWUtNDAwKTtcXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWpzb24ta2V5IHtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXN5bnRheC1rZXl3b3JkKTtcXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWpzb24tdmFsdWUge1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3Itc3ludGF4LWxpbmspO1xcbiAgfVxcblwiLFwiXCIsclMsJ1xcbiAgLm5leHRqcy1zY3JvbGwtZmFkZXIge1xcbiAgICAtLWJsdXI6IDFweDtcXG4gICAgLS1zdG9wOiAyNSU7XFxuICAgIC0taGVpZ2h0OiAxNTBweDtcXG4gICAgLS1jb2xvci1iZzogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICAgIGhlaWdodDogdmFyKC0taGVpZ2h0KTtcXG4gICAgbGVmdDogMDtcXG4gICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKHZhcigtLWJsdXIpKTtcXG5cXG4gICAgJltkYXRhLXNpZGU9XCJ0b3BcIl0ge1xcbiAgICAgIHRvcDogMDtcXG4gICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gdG9wLCB0cmFuc3BhcmVudCwgdmFyKC0tY29sb3ItYmcpKTtcXG4gICAgICBtYXNrLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCB2YXIoLS1jb2xvci1iZykgdmFyKC0tc3RvcCksIHRyYW5zcGFyZW50KTtcXG4gICAgfVxcbiAgfVxcbicsYWMscjQscjAsb24sb04sb08sb2Msb28sb0wsb3csb2Isb2Yscm0pfSl9ZnVuY3Rpb24gYWYoKXt2YXIgZSxuLHQ9KGU9W1wiXFxuICAgICAgICA6aG9zdCB7XFxuICAgICAgICAgIGFsbDogaW5pdGlhbDtcXG5cXG4gICAgICAgICAgLyogdGhlIGRpcmVjdGlvbiBwcm9wZXJ0eSBpcyBub3QgcmVzZXQgYnkgJ2FsbCcgKi9cXG4gICAgICAgICAgZGlyZWN0aW9uOiBsdHI7XFxuICAgICAgICB9XFxuXFxuICAgICAgICAvKiFcXG4gICAgICAgICAqIEJvb3RzdHJhcCBSZWJvb3QgdjQuNC4xIChodHRwczovL2dldGJvb3RzdHJhcC5jb20vKVxcbiAgICAgICAgICogQ29weXJpZ2h0IDIwMTEtMjAxOSBUaGUgQm9vdHN0cmFwIEF1dGhvcnNcXG4gICAgICAgICAqIENvcHlyaWdodCAyMDExLTIwMTkgVHdpdHRlciwgSW5jLlxcbiAgICAgICAgICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSlcXG4gICAgICAgICAqIEZvcmtlZCBmcm9tIE5vcm1hbGl6ZS5jc3MsIGxpY2Vuc2VkIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL25lY29sYXMvbm9ybWFsaXplLmNzcy9ibG9iL21hc3Rlci9MSUNFTlNFLm1kKVxcbiAgICAgICAgICovXFxuICAgICAgICAqLFxcbiAgICAgICAgKjo6YmVmb3JlLFxcbiAgICAgICAgKjo6YWZ0ZXIge1xcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgOmhvc3Qge1xcbiAgICAgICAgICBmb250LWZhbWlseTogc2Fucy1zZXJpZjtcXG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTU7XFxuICAgICAgICAgIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTtcXG4gICAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgYXJ0aWNsZSxcXG4gICAgICAgIGFzaWRlLFxcbiAgICAgICAgZmlnY2FwdGlvbixcXG4gICAgICAgIGZpZ3VyZSxcXG4gICAgICAgIGZvb3RlcixcXG4gICAgICAgIGhlYWRlcixcXG4gICAgICAgIGhncm91cCxcXG4gICAgICAgIG1haW4sXFxuICAgICAgICBuYXYsXFxuICAgICAgICBzZWN0aW9uIHtcXG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XFxuICAgICAgICB9XFxuXFxuICAgICAgICA6aG9zdCB7XFxuICAgICAgICAgIG1hcmdpbjogMDtcXG4gICAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgUm9ib3RvLFxcbiAgICAgICAgICAgICdIZWx2ZXRpY2EgTmV1ZScsIEFyaWFsLCAnTm90byBTYW5zJywgc2Fucy1zZXJpZixcXG4gICAgICAgICAgICAnQXBwbGUgQ29sb3IgRW1vamknLCAnU2Vnb2UgVUkgRW1vamknLCAnU2Vnb2UgVUkgU3ltYm9sJyxcXG4gICAgICAgICAgICAnTm90byBDb2xvciBFbW9qaSc7XFxuICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDtcXG4gICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTtcXG4gICAgICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWZvbnQpO1xcbiAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgOmhvc3Q6bm90KGJ1dHRvbikge1xcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgW3RhYmluZGV4PSctMSddOmZvY3VzOm5vdCg6Zm9jdXMtdmlzaWJsZSkge1xcbiAgICAgICAgICBvdXRsaW5lOiAwICFpbXBvcnRhbnQ7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBociB7XFxuICAgICAgICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xcbiAgICAgICAgICBoZWlnaHQ6IDA7XFxuICAgICAgICAgIG92ZXJmbG93OiB2aXNpYmxlO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgaDEsXFxuICAgICAgICBoMixcXG4gICAgICAgIGgzLFxcbiAgICAgICAgaDQsXFxuICAgICAgICBoNSxcXG4gICAgICAgIGg2IHtcXG4gICAgICAgICAgbWFyZ2luLXRvcDogMDtcXG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4O1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgcCB7XFxuICAgICAgICAgIG1hcmdpbi10b3A6IDA7XFxuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBhYmJyW3RpdGxlXSxcXG4gICAgICAgIGFiYnJbZGF0YS1vcmlnaW5hbC10aXRsZV0ge1xcbiAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcXG4gICAgICAgICAgLXdlYmtpdC10ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSBkb3R0ZWQ7XFxuICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDtcXG4gICAgICAgICAgY3Vyc29yOiBoZWxwO1xcbiAgICAgICAgICBib3JkZXItYm90dG9tOiAwO1xcbiAgICAgICAgICAtd2Via2l0LXRleHQtZGVjb3JhdGlvbi1za2lwLWluazogbm9uZTtcXG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uLXNraXAtaW5rOiBub25lO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgYWRkcmVzcyB7XFxuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XFxuICAgICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG4gICAgICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBvbCxcXG4gICAgICAgIHVsLFxcbiAgICAgICAgZGwge1xcbiAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgb2wgb2wsXFxuICAgICAgICB1bCB1bCxcXG4gICAgICAgIG9sIHVsLFxcbiAgICAgICAgdWwgb2wge1xcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZHQge1xcbiAgICAgICAgICBmb250LXdlaWdodDogNzAwO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZGQge1xcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7XFxuICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgYmxvY2txdW90ZSB7XFxuICAgICAgICAgIG1hcmdpbjogMCAwIDE2cHg7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBiLFxcbiAgICAgICAgc3Ryb25nIHtcXG4gICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGRlcjtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHNtYWxsIHtcXG4gICAgICAgICAgZm9udC1zaXplOiA4MCU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBzdWIsXFxuICAgICAgICBzdXAge1xcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgICAgICAgIGZvbnQtc2l6ZTogNzUlO1xcbiAgICAgICAgICBsaW5lLWhlaWdodDogMDtcXG4gICAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgc3ViIHtcXG4gICAgICAgICAgYm90dG9tOiAtMC4yNWVtO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgc3VwIHtcXG4gICAgICAgICAgdG9wOiAtMC41ZW07XFxuICAgICAgICB9XFxuXFxuICAgICAgICBhIHtcXG4gICAgICAgICAgY29sb3I6ICMwMDdiZmY7XFxuICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBhOmhvdmVyIHtcXG4gICAgICAgICAgY29sb3I6ICMwMDU2YjM7XFxuICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgYTpub3QoW2hyZWZdKSB7XFxuICAgICAgICAgIGNvbG9yOiBpbmhlcml0O1xcbiAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBhOm5vdChbaHJlZl0pOmhvdmVyIHtcXG4gICAgICAgICAgY29sb3I6IGluaGVyaXQ7XFxuICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHByZSxcXG4gICAgICAgIGNvZGUsXFxuICAgICAgICBrYmQsXFxuICAgICAgICBzYW1wIHtcXG4gICAgICAgICAgZm9udC1mYW1pbHk6IFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcyxcXG4gICAgICAgICAgICAnTGliZXJhdGlvbiBNb25vJywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlO1xcbiAgICAgICAgICBmb250LXNpemU6IDFlbTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHByZSB7XFxuICAgICAgICAgIG1hcmdpbi10b3A6IDA7XFxuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XFxuICAgICAgICAgIG92ZXJmbG93OiBhdXRvO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZmlndXJlIHtcXG4gICAgICAgICAgbWFyZ2luOiAwIDAgMTZweDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGltZyB7XFxuICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxuICAgICAgICAgIGJvcmRlci1zdHlsZTogbm9uZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHN2ZyB7XFxuICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICB0YWJsZSB7XFxuICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBjYXB0aW9uIHtcXG4gICAgICAgICAgcGFkZGluZy10b3A6IDEycHg7XFxuICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAxMnB4O1xcbiAgICAgICAgICBjb2xvcjogIzZjNzU3ZDtcXG4gICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcXG4gICAgICAgICAgY2FwdGlvbi1zaWRlOiBib3R0b207XFxuICAgICAgICB9XFxuXFxuICAgICAgICB0aCB7XFxuICAgICAgICAgIHRleHQtYWxpZ246IGluaGVyaXQ7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBsYWJlbCB7XFxuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4O1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgYnV0dG9uIHtcXG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcXG4gICAgICAgICAgYm9yZGVyOiAwO1xcbiAgICAgICAgICBwYWRkaW5nOiAwO1xcbiAgICAgICAgICBtYXJnaW46IDA7XFxuICAgICAgICAgIGJhY2tncm91bmQ6IG5vbmU7XFxuICAgICAgICAgIGFwcGVhcmFuY2U6IG5vbmU7XFxuICAgICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGJ1dHRvbjpmb2N1cyB7XFxuICAgICAgICAgIG91dGxpbmU6IDFweCBkb3R0ZWQ7XFxuICAgICAgICAgIG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGJ1dHRvbjpmb2N1czpub3QoOmZvY3VzLXZpc2libGUpIHtcXG4gICAgICAgICAgb3V0bGluZTogbm9uZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGlucHV0LFxcbiAgICAgICAgYnV0dG9uLFxcbiAgICAgICAgc2VsZWN0LFxcbiAgICAgICAgb3B0Z3JvdXAsXFxuICAgICAgICB0ZXh0YXJlYSB7XFxuICAgICAgICAgIG1hcmdpbjogMDtcXG4gICAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XFxuICAgICAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcXG4gICAgICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBidXR0b24sXFxuICAgICAgICBpbnB1dCB7XFxuICAgICAgICAgIG92ZXJmbG93OiB2aXNpYmxlO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgYnV0dG9uLFxcbiAgICAgICAgc2VsZWN0IHtcXG4gICAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBzZWxlY3Qge1xcbiAgICAgICAgICB3b3JkLXdyYXA6IG5vcm1hbDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGJ1dHRvbixcXG4gICAgICAgIFt0eXBlPSdidXR0b24nXSxcXG4gICAgICAgIFt0eXBlPSdyZXNldCddLFxcbiAgICAgICAgW3R5cGU9J3N1Ym1pdCddIHtcXG4gICAgICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247XFxuICAgICAgICB9XFxuXFxuICAgICAgICBidXR0b246bm90KDpkaXNhYmxlZCksXFxuICAgICAgICBbdHlwZT0nYnV0dG9uJ106bm90KDpkaXNhYmxlZCksXFxuICAgICAgICBbdHlwZT0ncmVzZXQnXTpub3QoOmRpc2FibGVkKSxcXG4gICAgICAgIFt0eXBlPSdzdWJtaXQnXTpub3QoOmRpc2FibGVkKSB7XFxuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixcXG4gICAgICAgIFt0eXBlPSdidXR0b24nXTo6LW1vei1mb2N1cy1pbm5lcixcXG4gICAgICAgIFt0eXBlPSdyZXNldCddOjotbW96LWZvY3VzLWlubmVyLFxcbiAgICAgICAgW3R5cGU9J3N1Ym1pdCddOjotbW96LWZvY3VzLWlubmVyIHtcXG4gICAgICAgICAgcGFkZGluZzogMDtcXG4gICAgICAgICAgYm9yZGVyLXN0eWxlOiBub25lO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgaW5wdXRbdHlwZT0ncmFkaW8nXSxcXG4gICAgICAgIGlucHV0W3R5cGU9J2NoZWNrYm94J10ge1xcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgICAgICAgICBwYWRkaW5nOiAwO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgaW5wdXRbdHlwZT0nZGF0ZSddLFxcbiAgICAgICAgaW5wdXRbdHlwZT0ndGltZSddLFxcbiAgICAgICAgaW5wdXRbdHlwZT0nZGF0ZXRpbWUtbG9jYWwnXSxcXG4gICAgICAgIGlucHV0W3R5cGU9J21vbnRoJ10ge1xcbiAgICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IGxpc3Rib3g7XFxuICAgICAgICB9XFxuXFxuICAgICAgICB0ZXh0YXJlYSB7XFxuICAgICAgICAgIG92ZXJmbG93OiBhdXRvO1xcbiAgICAgICAgICByZXNpemU6IHZlcnRpY2FsO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZmllbGRzZXQge1xcbiAgICAgICAgICBtaW4td2lkdGg6IDA7XFxuICAgICAgICAgIHBhZGRpbmc6IDA7XFxuICAgICAgICAgIG1hcmdpbjogMDtcXG4gICAgICAgICAgYm9yZGVyOiAwO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgbGVnZW5kIHtcXG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XFxuICAgICAgICAgIHdpZHRoOiAxMDAlO1xcbiAgICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XFxuICAgICAgICAgIHBhZGRpbmc6IDA7XFxuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDhweDtcXG4gICAgICAgICAgZm9udC1zaXplOiAyNHB4O1xcbiAgICAgICAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG4gICAgICAgICAgY29sb3I6IGluaGVyaXQ7XFxuICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBwcm9ncmVzcyB7XFxuICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIFt0eXBlPSdudW1iZXInXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcXG4gICAgICAgIFt0eXBlPSdudW1iZXInXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XFxuICAgICAgICAgIGhlaWdodDogYXV0bztcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIFt0eXBlPSdzZWFyY2gnXSB7XFxuICAgICAgICAgIG91dGxpbmUtb2Zmc2V0OiAtMnB4O1xcbiAgICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBbdHlwZT0nc2VhcmNoJ106Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24ge1xcbiAgICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICA6Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uIHtcXG4gICAgICAgICAgZm9udDogaW5oZXJpdDtcXG4gICAgICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247XFxuICAgICAgICB9XFxuXFxuICAgICAgICBvdXRwdXQge1xcbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBzdW1tYXJ5IHtcXG4gICAgICAgICAgZGlzcGxheTogbGlzdC1pdGVtO1xcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgICAgICB9XFxuXFxuICAgICAgICB0ZW1wbGF0ZSB7XFxuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBbaGlkZGVuXSB7XFxuICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG4gICAgICAgIH1cXG4gICAgICBcIl0sbnx8KG49ZS5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUobil9fSkpKTtyZXR1cm4gYWY9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sdH1mdW5jdGlvbiBhcCgpe3JldHVybigwLHkuanN4KShcInN0eWxlXCIse2NoaWxkcmVuOmVpKGFmKCkpfSl9ZnVuY3Rpb24gYWgoKXt2YXIgZSxuLHQ9KGU9WydcXG4gICAgICAgIDpob3N0IHtcXG4gICAgICAgICAgLyogXFxuICAgICAgICAgICAqIENBVVRJT046IFRISVMgSVMgQSBXT1JLQVJPVU5EIVxcbiAgICAgICAgICAgKiBGb3Igbm93LCB3ZSB1c2UgQGJhYmVsL2NvZGUtZnJhbWUgdG8gcGFyc2UgdGhlIGNvZGUgZnJhbWUgd2hpY2ggZG9lcyBub3Qgc3VwcG9ydCBvcHRpb24gdG8gY2hhbmdlIHRoZSBjb2xvci5cXG4gICAgICAgICAgICogeC1yZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9iYWJlbC9iYWJlbC9ibG9iL2VmYTUyMzI0ZmY4MzViNzk0YzQ4MDgwZjE0ODc3YjZjYWYzMmNkMTUvcGFja2FnZXMvYmFiZWwtY29kZS1mcmFtZS9zcmMvZGVmcy50cyNMNDAtTDU0XFxuICAgICAgICAgICAqIFNvLCB3ZSBkbyBhIHdvcmthcm91bmQgbWFwcGluZyB0byBjaGFuZ2UgdGhlIGNvbG9yIG1hdGNoaW5nIHRoZSB0aGVtZS5cXG4gICAgICAgICAgICpcXG4gICAgICAgICAgICogRm9yIGV4YW1wbGUsIGluIEBiYWJlbC9jb2RlLWZyYW1lLCB0aGUgXCJrZXl3b3JkXCIgaXMgbWFwcGVkIHRvIEFOU0kgXCJjeWFuXCIuXFxuICAgICAgICAgICAqIFdlIHdhbnQgdGhlIFwia2V5d29yZFwiIHRvIHVzZSB0aGUgXCJzeW50YXgta2V5d29yZFwiIGNvbG9yIGluIHRoZSB0aGVtZS5cXG4gICAgICAgICAgICogU28sIHdlIG1hcCB0aGUgXCJjeWFuXCIgdG8gdGhlIFwic3ludGF4LWtleXdvcmRcIiBpbiB0aGUgdGhlbWUuXFxuICAgICAgICAgICAqL1xcbiAgICAgICAgICAvKiBjeWFuOiBrZXl3b3JkICovXFxuICAgICAgICAgIC0tY29sb3ItYW5zaS1jeWFuOiB2YXIoLS1jb2xvci1zeW50YXgta2V5d29yZCk7XFxuICAgICAgICAgIC8qIHllbGxvdzogY2FwaXRhbGl6ZWQsIGpzeElkZW50aWZpZXIsIHB1bmN0dWF0aW9uICovXFxuICAgICAgICAgIC0tY29sb3ItYW5zaS15ZWxsb3c6IHZhcigtLWNvbG9yLXN5bnRheC1mdW5jdGlvbik7XFxuICAgICAgICAgIC8qIG1hZ2VudGE6IG51bWJlciwgcmVnZXggKi9cXG4gICAgICAgICAgLS1jb2xvci1hbnNpLW1hZ2VudGE6IHZhcigtLWNvbG9yLXN5bnRheC1rZXl3b3JkKTtcXG4gICAgICAgICAgLyogZ3JlZW46IHN0cmluZyAqL1xcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktZ3JlZW46IHZhcigtLWNvbG9yLXN5bnRheC1zdHJpbmcpO1xcbiAgICAgICAgICAvKiBncmF5IChicmlnaHQgYmxhY2spOiBjb21tZW50LCBndXR0ZXIgKi9cXG4gICAgICAgICAgLS1jb2xvci1hbnNpLWJyaWdodC1ibGFjazogdmFyKC0tY29sb3Itc3ludGF4LWNvbW1lbnQpO1xcblxcbiAgICAgICAgICAvKiBBbnNpIC0gVGVtcG9yYXJ5ICovXFxuICAgICAgICAgIC0tY29sb3ItYW5zaS1zZWxlY3Rpb246IHZhcigtLWNvbG9yLWdyYXktYWxwaGEtMzAwKTtcXG4gICAgICAgICAgLS1jb2xvci1hbnNpLWJnOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTIwMCk7XFxuICAgICAgICAgIC0tY29sb3ItYW5zaS1mZzogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG5cXG4gICAgICAgICAgLS1jb2xvci1hbnNpLXdoaXRlOiB2YXIoLS1jb2xvci1ncmF5LTcwMCk7XFxuICAgICAgICAgIC0tY29sb3ItYW5zaS1ibGFjazogdmFyKC0tY29sb3ItZ3JheS0yMDApO1xcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktYmx1ZTogdmFyKC0tY29sb3ItYmx1ZS03MDApO1xcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktcmVkOiB2YXIoLS1jb2xvci1yZWQtNzAwKTtcXG4gICAgICAgICAgLS1jb2xvci1hbnNpLWJyaWdodC13aGl0ZTogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gICAgICAgICAgLS1jb2xvci1hbnNpLWJyaWdodC1ibHVlOiB2YXIoLS1jb2xvci1ibHVlLTgwMCk7XFxuICAgICAgICAgIC0tY29sb3ItYW5zaS1icmlnaHQtY3lhbjogdmFyKC0tY29sb3ItYmx1ZS04MDApO1xcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktYnJpZ2h0LWdyZWVuOiB2YXIoLS1jb2xvci1ncmVlbi04MDApO1xcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktYnJpZ2h0LW1hZ2VudGE6IHZhcigtLWNvbG9yLWJsdWUtODAwKTtcXG4gICAgICAgICAgLS1jb2xvci1hbnNpLWJyaWdodC1yZWQ6IHZhcigtLWNvbG9yLXJlZC04MDApO1xcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktYnJpZ2h0LXllbGxvdzogdmFyKC0tY29sb3ItYW1iZXItOTAwKTtcXG5cXG4gICAgICAgICAgLyogQmFja2dyb3VuZCBMaWdodCAqL1xcbiAgICAgICAgICAtLWNvbG9yLWJhY2tncm91bmQtMTAwOiAjZmZmZmZmO1xcbiAgICAgICAgICAtLWNvbG9yLWJhY2tncm91bmQtMjAwOiAjZmFmYWZhO1xcblxcbiAgICAgICAgICAvKiBTeW50YXggTGlnaHQgKi9cXG4gICAgICAgICAgLS1jb2xvci1zeW50YXgtY29tbWVudDogIzU0NTQ1NDtcXG4gICAgICAgICAgLS1jb2xvci1zeW50YXgtY29uc3RhbnQ6ICMxNzE3MTc7XFxuICAgICAgICAgIC0tY29sb3Itc3ludGF4LWZ1bmN0aW9uOiAjMDA1NGFkO1xcbiAgICAgICAgICAtLWNvbG9yLXN5bnRheC1rZXl3b3JkOiAjYTUxODUwO1xcbiAgICAgICAgICAtLWNvbG9yLXN5bnRheC1saW5rOiAjMDY2MDU2O1xcbiAgICAgICAgICAtLWNvbG9yLXN5bnRheC1wYXJhbWV0ZXI6ICM4ZjNlMDA7XFxuICAgICAgICAgIC0tY29sb3Itc3ludGF4LXB1bmN0dWF0aW9uOiAjMTcxNzE3O1xcbiAgICAgICAgICAtLWNvbG9yLXN5bnRheC1zdHJpbmc6ICMwMzYxNTc7XFxuICAgICAgICAgIC0tY29sb3Itc3ludGF4LXN0cmluZy1leHByZXNzaW9uOiAjMDY2MDU2O1xcblxcbiAgICAgICAgICAvKiBHcmF5IFNjYWxlIExpZ2h0ICovXFxuICAgICAgICAgIC0tY29sb3ItZ3JheS0xMDA6ICNmMmYyZjI7XFxuICAgICAgICAgIC0tY29sb3ItZ3JheS0yMDA6ICNlYmViZWI7XFxuICAgICAgICAgIC0tY29sb3ItZ3JheS0zMDA6ICNlNmU2ZTY7XFxuICAgICAgICAgIC0tY29sb3ItZ3JheS00MDA6ICNlYWVhZWE7XFxuICAgICAgICAgIC0tY29sb3ItZ3JheS01MDA6ICNjOWM5Yzk7XFxuICAgICAgICAgIC0tY29sb3ItZ3JheS02MDA6ICNhOGE4YTg7XFxuICAgICAgICAgIC0tY29sb3ItZ3JheS03MDA6ICM4ZjhmOGY7XFxuICAgICAgICAgIC0tY29sb3ItZ3JheS04MDA6ICM3ZDdkN2Q7XFxuICAgICAgICAgIC0tY29sb3ItZ3JheS05MDA6ICM2NjY2NjY7XFxuICAgICAgICAgIC0tY29sb3ItZ3JheS0xMDAwOiAjMTcxNzE3O1xcblxcbiAgICAgICAgICAvKiBHcmF5IEFscGhhIFNjYWxlIExpZ2h0ICovXFxuICAgICAgICAgIC0tY29sb3ItZ3JheS1hbHBoYS0xMDA6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XFxuICAgICAgICAgIC0tY29sb3ItZ3JheS1hbHBoYS0yMDA6IHJnYmEoMCwgMCwgMCwgMC4wODEpO1xcbiAgICAgICAgICAtLWNvbG9yLWdyYXktYWxwaGEtMzAwOiByZ2JhKDAsIDAsIDAsIDAuMSk7XFxuICAgICAgICAgIC0tY29sb3ItZ3JheS1hbHBoYS00MDA6IHJnYmEoMCwgMCwgMCwgMC4wOCk7XFxuICAgICAgICAgIC0tY29sb3ItZ3JheS1hbHBoYS01MDA6IHJnYmEoMCwgMCwgMCwgMC4yMSk7XFxuICAgICAgICAgIC0tY29sb3ItZ3JheS1hbHBoYS02MDA6IHJnYmEoMCwgMCwgMCwgMC4zNCk7XFxuICAgICAgICAgIC0tY29sb3ItZ3JheS1hbHBoYS03MDA6IHJnYmEoMCwgMCwgMCwgMC40NCk7XFxuICAgICAgICAgIC0tY29sb3ItZ3JheS1hbHBoYS04MDA6IHJnYmEoMCwgMCwgMCwgMC41MSk7XFxuICAgICAgICAgIC0tY29sb3ItZ3JheS1hbHBoYS05MDA6IHJnYmEoMCwgMCwgMCwgMC42MDUpO1xcbiAgICAgICAgICAtLWNvbG9yLWdyYXktYWxwaGEtMTAwMDogcmdiYSgwLCAwLCAwLCAwLjkxKTtcXG5cXG4gICAgICAgICAgLyogQmx1ZSBTY2FsZSBMaWdodCAqL1xcbiAgICAgICAgICAtLWNvbG9yLWJsdWUtMTAwOiAjZjBmN2ZmO1xcbiAgICAgICAgICAtLWNvbG9yLWJsdWUtMjAwOiAjZWRmNmZmO1xcbiAgICAgICAgICAtLWNvbG9yLWJsdWUtMzAwOiAjZTFmMGZmO1xcbiAgICAgICAgICAtLWNvbG9yLWJsdWUtNDAwOiAjY2RlN2ZmO1xcbiAgICAgICAgICAtLWNvbG9yLWJsdWUtNTAwOiAjOTljZWZmO1xcbiAgICAgICAgICAtLWNvbG9yLWJsdWUtNjAwOiAjNTJhZWZmO1xcbiAgICAgICAgICAtLWNvbG9yLWJsdWUtNzAwOiAjMDA3MGYzO1xcbiAgICAgICAgICAtLWNvbG9yLWJsdWUtODAwOiAjMDA2MGQxO1xcbiAgICAgICAgICAtLWNvbG9yLWJsdWUtOTAwOiAjMDA2N2Q2O1xcbiAgICAgICAgICAtLWNvbG9yLWJsdWUtMTAwMDogIzAwMjVhZDtcXG5cXG4gICAgICAgICAgLyogUmVkIFNjYWxlIExpZ2h0ICovXFxuICAgICAgICAgIC0tY29sb3ItcmVkLTEwMDogI2ZmZjBmMDtcXG4gICAgICAgICAgLS1jb2xvci1yZWQtMjAwOiAjZmZlYmViO1xcbiAgICAgICAgICAtLWNvbG9yLXJlZC0zMDA6ICNmZmU1ZTU7XFxuICAgICAgICAgIC0tY29sb3ItcmVkLTQwMDogI2ZkZDhkODtcXG4gICAgICAgICAgLS1jb2xvci1yZWQtNTAwOiAjZjhiYWJhO1xcbiAgICAgICAgICAtLWNvbG9yLXJlZC02MDA6ICNmODcyNzQ7XFxuICAgICAgICAgIC0tY29sb3ItcmVkLTcwMDogI2U1NDg0ZDtcXG4gICAgICAgICAgLS1jb2xvci1yZWQtODAwOiAjZGEzMDM2O1xcbiAgICAgICAgICAtLWNvbG9yLXJlZC05MDA6ICNjYTJhMzA7XFxuICAgICAgICAgIC0tY29sb3ItcmVkLTEwMDA6ICMzODEzMTY7XFxuXFxuICAgICAgICAgIC8qIEFtYmVyIFNjYWxlIExpZ2h0ICovXFxuICAgICAgICAgIC0tY29sb3ItYW1iZXItMTAwOiAjZmZmNmU1O1xcbiAgICAgICAgICAtLWNvbG9yLWFtYmVyLTIwMDogI2ZmZjRkNTtcXG4gICAgICAgICAgLS1jb2xvci1hbWJlci0zMDA6ICNmZWYwY2Q7XFxuICAgICAgICAgIC0tY29sb3ItYW1iZXItNDAwOiAjZmZkZGJmO1xcbiAgICAgICAgICAtLWNvbG9yLWFtYmVyLTUwMDogI2ZmYzk2YjtcXG4gICAgICAgICAgLS1jb2xvci1hbWJlci02MDA6ICNmNWIwNDc7XFxuICAgICAgICAgIC0tY29sb3ItYW1iZXItNzAwOiAjZmZiMjI0O1xcbiAgICAgICAgICAtLWNvbG9yLWFtYmVyLTgwMDogI2ZmOTkwYTtcXG4gICAgICAgICAgLS1jb2xvci1hbWJlci05MDA6ICNhMzUyMDA7XFxuICAgICAgICAgIC0tY29sb3ItYW1iZXItMTAwMDogIzRlMjAwOTtcXG5cXG4gICAgICAgICAgLyogR3JlZW4gU2NhbGUgTGlnaHQgKi9cXG4gICAgICAgICAgLS1jb2xvci1ncmVlbi0xMDA6ICNlZmZiZWY7XFxuICAgICAgICAgIC0tY29sb3ItZ3JlZW4tMjAwOiAjZWFmYWVhO1xcbiAgICAgICAgICAtLWNvbG9yLWdyZWVuLTMwMDogI2RjZjZkYztcXG4gICAgICAgICAgLS1jb2xvci1ncmVlbi00MDA6ICNjOGYxYzk7XFxuICAgICAgICAgIC0tY29sb3ItZ3JlZW4tNTAwOiAjOTllNTlmO1xcbiAgICAgICAgICAtLWNvbG9yLWdyZWVuLTYwMDogIzZjZGE3NjtcXG4gICAgICAgICAgLS1jb2xvci1ncmVlbi03MDA6ICM0NmE3NTg7XFxuICAgICAgICAgIC0tY29sb3ItZ3JlZW4tODAwOiAjMzg4ZTRhO1xcbiAgICAgICAgICAtLWNvbG9yLWdyZWVuLTkwMDogIzI5N2MzYjtcXG4gICAgICAgICAgLS1jb2xvci1ncmVlbi0xMDAwOiAjMTgzMTFlO1xcblxcbiAgICAgICAgICAvKiBUdXJib3BhY2sgTGlnaHQgLSBUZW1wb3JhcnkgKi9cXG4gICAgICAgICAgLS1jb2xvci10dXJib3BhY2stdGV4dC1yZWQ6ICNmZjFlNTY7XFxuICAgICAgICAgIC0tY29sb3ItdHVyYm9wYWNrLXRleHQtYmx1ZTogIzAwOTZmZjtcXG4gICAgICAgICAgLS1jb2xvci10dXJib3BhY2stYm9yZGVyLXJlZDogI2YwYWRiZTtcXG4gICAgICAgICAgLS1jb2xvci10dXJib3BhY2stYm9yZGVyLWJsdWU6ICNhZGNjZWE7XFxuICAgICAgICAgIC0tY29sb3ItdHVyYm9wYWNrLWJhY2tncm91bmQtcmVkOiAjZmZmN2Y5O1xcbiAgICAgICAgICAtLWNvbG9yLXR1cmJvcGFjay1iYWNrZ3JvdW5kLWJsdWU6ICNmNmZiZmY7XFxuICAgICAgICB9XFxuICAgICAgJ10sbnx8KG49ZS5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUobil9fSkpKTtyZXR1cm4gYWg9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sdH1mdW5jdGlvbiBhZygpe3JldHVybigwLHkuanN4KShcInN0eWxlXCIse2NoaWxkcmVuOmVpKGFoKCkpfSl9ZnVuY3Rpb24gYW0oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfWZ1bmN0aW9uIGF2KGUsbil7cmV0dXJuIG49bnVsbCE9bj9uOnt9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QobikpLmZvckVhY2goZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSksZX1mdW5jdGlvbiBhYihlKXt2YXIgbj1lLnN0YXRlLHQ9ZS5kaXNwYXRjaCxyPWUuZ2V0U3F1YXNoZWRIeWRyYXRpb25FcnJvckRldGFpbHMsbz1lLnJ1bnRpbWVFcnJvcnMsYT1lLmVycm9yQ291bnQsaT0hIXByb2Nlc3MuZW52LlRVUkJPUEFDSyxsPSgwLHRKLk4pKG4uaXNFcnJvck92ZXJsYXlPcGVuLHtleGl0RGVsYXk6MjAwfSkscz1sLm1vdW50ZWQsYz17cmVuZGVyZWQ6bC5yZW5kZXJlZCx0cmFuc2l0aW9uRHVyYXRpb25NczoyMDAsaXNUdXJib3BhY2s6aSx2ZXJzaW9uSW5mbzpuLnZlcnNpb25JbmZvLGVycm9yQ291bnQ6YX07cmV0dXJuIG51bGwhPT1uLmJ1aWxkRXJyb3I/KDAseS5qc3gpKHRyLGF2KGFtKHt9LGMpLHttZXNzYWdlOm4uYnVpbGRFcnJvcixyZW5kZXJlZDohMH0pKTpvLmxlbmd0aCYmcz8oMCx5LmpzeCkodFQsYXYoYW0oe30sYykse2RlYnVnSW5mbzpuLmRlYnVnSW5mbyxnZXRTcXVhc2hlZEh5ZHJhdGlvbkVycm9yRGV0YWlsczpyLHJ1bnRpbWVFcnJvcnM6byxvbkNsb3NlOmZ1bmN0aW9uKCl7dCh7dHlwZTpJfSl9fSkpOigwLHkuanN4KSh4LlN1c3BlbnNlLHt9KX1mdW5jdGlvbiBheShlLG4peyhudWxsPT1ufHxuPmUubGVuZ3RoKSYmKG49ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLHI9QXJyYXkobik7dDxuO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9ZnVuY3Rpb24gYXgoZSxuLHQpe3JldHVybiBuIGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7dmFsdWU6dCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbbl09dCxlfWZ1bmN0aW9uIGF3KGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXtheChlLG4sdFtuXSl9KX1yZXR1cm4gZX1mdW5jdGlvbiBhaihlLG4pe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSwhbnx8YS5sZW5ndGghPT1uKTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0oZSxuKXx8ZnVuY3Rpb24oZSxuKXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gYXkoZSxuKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKHQpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gYXkoZSxuKX19KGUsbil8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9dmFyIGFrPWZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YXRlLmJ1aWxkRXJyb3I/KDAseS5qc3gpKGFPLGF3KHt9LGUpKTooMCx5LmpzeCkoYUEsYXcoe30sZSkpfSxhQT1mdW5jdGlvbihlKXt2YXIgbix0LHIsbz1lLmNoaWxkcmVuLGE9ZS5zdGF0ZSxpPWUuaXNBcHBEaXIsbD1lLmRpc3BhdGNoLHM9YS5lcnJvcnMsYz1haigoMCx4LnVzZVN0YXRlKSh7fSksMiksdT1jWzBdLGQ9Y1sxXSxmPWFqKCgwLHgudXNlTWVtbykoZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sbj1udWxsLHQ9MDt0PHMubGVuZ3RoOysrdCl7dmFyIHI9c1t0XSxvPXIuaWQ7aWYobyBpbiB1KXtlLnB1c2godVtvXSk7Y29udGludWV9bj1yO2JyZWFrfXJldHVybltlLG5dfSxbcyx1XSksMikscD1mWzBdLGg9ZlsxXTtyZXR1cm4gdD0obj17ZXJyb3JzOnMsZGlzcGF0Y2g6bH0pLmVycm9ycyxyPW4uZGlzcGF0Y2gsKDAseC51c2VFZmZlY3QpKGZ1bmN0aW9uKCl7dmFyIGUsbixvPShudWxsPT0oZT1wcm9jZXNzLmVudi5fX05FWFRfQlVORExFUik/dm9pZCAwOmUudG9VcHBlckNhc2UoKSk9PT1cIlRVUkJPUEFDS1wiJiZwcm9jZXNzLmVudi5fX05FWFRfQlVORExFUl9IQVNfUEVSU0lTVEVOVF9DQUNIRSxhPW51bGw9PShuPXRbMF0pP3ZvaWQgMDpuLmVycm9yO2lmKG8mJmEpe3ZhciBpPVwiX19uZXh0X2Vycm9yX292ZXJsYXk6XCIuY29uY2F0KHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSxcIjpcIikuY29uY2F0KGEubWVzc2FnZSk7cih7dHlwZTpLLHNob3dSZXN0YXJ0U2VydmVyQnV0dG9uOlwiMVwiPT09c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShpKX0pO3ZhciBsPWZ1bmN0aW9uKCl7c2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShpLFwiMVwiKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsbCksZnVuY3Rpb24oKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLGwpfX1yKHt0eXBlOkssc2hvd1Jlc3RhcnRTZXJ2ZXJCdXR0b246ITF9KX0sW3Qscl0pLCgwLHgudXNlRWZmZWN0KShmdW5jdGlvbigpe2lmKG51bGwhPWgpe3ZhciBlLG4sdD0hMDtyZXR1cm4oZT1oLG49aSx0YihmdW5jdGlvbigpe3ZhciB0LHIsbyxhLGk7cmV0dXJuIHR3KHRoaXMsZnVuY3Rpb24obCl7c3dpdGNoKGwubGFiZWwpe2Nhc2UgMDp2YXIgcyxjO2lmKHQ9e2lkOmUuaWQscnVudGltZTohMCxlcnJvcjplLmVycm9yLHR5cGU6ZS50eXBlfSwhKFwidXNlXCJpbiB4KSlyZXR1cm5bMywxXTtyZXR1cm4gcj10eCh0eSh7fSx0KSx7ZnJhbWVzOihjPShzPWZ1bmN0aW9uKCl7cmV0dXJuIHRiKGZ1bmN0aW9uKCl7cmV0dXJuIHR3KHRoaXMsZnVuY3Rpb24odCl7c3dpdGNoKHQubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCxlQyhlLmZyYW1lcyx0bShlLmVycm9yKSxuKV07Y2FzZSAxOnJldHVyblsyLHQuc2VudCgpXX19KX0pKCl9KSgpLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KX0pLHZvaWQgMCE9PWUuY29tcG9uZW50U3RhY2tGcmFtZXMmJihyLmNvbXBvbmVudFN0YWNrRnJhbWVzPWUuY29tcG9uZW50U3RhY2tGcmFtZXMpLFsyLHJdO2Nhc2UgMTpyZXR1cm4gYT1bdHkoe30sdCldLGk9e30sWzQsZUMoZS5mcmFtZXMsdG0oZS5lcnJvciksbildO2Nhc2UgMjpyZXR1cm4gbz10eC5hcHBseSh2b2lkIDAsYS5jb25jYXQoWyhpLmZyYW1lcz1sLnNlbnQoKSxpKV0pKSx2b2lkIDAhPT1lLmNvbXBvbmVudFN0YWNrRnJhbWVzJiYoby5jb21wb25lbnRTdGFja0ZyYW1lcz1lLmNvbXBvbmVudFN0YWNrRnJhbWVzKSxbMixvXTtjYXNlIDM6cmV0dXJuWzJdfX0pfSkoKSkudGhlbihmdW5jdGlvbihlKXt0JiZkKGZ1bmN0aW9uKG4pe3ZhciB0LHI7cmV0dXJuIHQ9YXcoe30sbikscj1udWxsIT0ocj1heCh7fSxlLmlkLGUpKT9yOnt9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMocikpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QocikpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkpfSksdH0pfSksZnVuY3Rpb24oKXt0PSExfX19LFtoLGldKSxvKHtydW50aW1lRXJyb3JzOnAsdG90YWxFcnJvckNvdW50OnMubGVuZ3RofSl9LGFPPWZ1bmN0aW9uKGUpe3JldHVybigwLGUuY2hpbGRyZW4pKHtydW50aW1lRXJyb3JzOltdLHRvdGFsRXJyb3JDb3VudDoxfSl9O2Z1bmN0aW9uIGFDKCl7dmFyIGUsbix0PShlPVtcIlxcbiAgICAgIDpob3N0KC5kYXJrKSB7XFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICB9XFxuXFxuICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykge1xcbiAgICAgICAgOmhvc3QoOm5vdCgubGlnaHQpKSB7XFxuICAgICAgICAgIFwiLFwiXFxuICAgICAgICAgIFwiLFwiXFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICBcIl0sbnx8KG49ZS5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUobil9fSkpKTtyZXR1cm4gYUM9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sdH12YXIgYVM9XCJcXG4gIC8qIEJhY2tncm91bmQgRGFyayAqL1xcbiAgLS1jb2xvci1iYWNrZ3JvdW5kLTEwMDogIzBhMGEwYTtcXG4gIC0tY29sb3ItYmFja2dyb3VuZC0yMDA6ICMwMDAwMDA7XFxuXFxuICAvKiBTeW50YXggRGFyayAqL1xcbiAgLS1jb2xvci1zeW50YXgtY29tbWVudDogI2EwYTBhMDtcXG4gIC0tY29sb3Itc3ludGF4LWNvbnN0YW50OiAjZWRlZGVkO1xcbiAgLS1jb2xvci1zeW50YXgtZnVuY3Rpb246ICM1MmE5ZmY7XFxuICAtLWNvbG9yLXN5bnRheC1rZXl3b3JkOiAjZjc2ZTk5O1xcbiAgLS1jb2xvci1zeW50YXgtbGluazogIzBhYzViMjtcXG4gIC0tY29sb3Itc3ludGF4LXBhcmFtZXRlcjogI2YxYTEwZDtcXG4gIC0tY29sb3Itc3ludGF4LXB1bmN0dWF0aW9uOiAjZWRlZGVkO1xcbiAgLS1jb2xvci1zeW50YXgtc3RyaW5nOiAjMGFjNWIyO1xcbiAgLS1jb2xvci1zeW50YXgtc3RyaW5nLWV4cHJlc3Npb246ICMwYWM1YjI7XFxuXFxuICAvKiBHcmF5IFNjYWxlIERhcmsgKi9cXG4gIC0tY29sb3ItZ3JheS0xMDA6ICMxYTFhMWE7XFxuICAtLWNvbG9yLWdyYXktMjAwOiAjMWYxZjFmO1xcbiAgLS1jb2xvci1ncmF5LTMwMDogIzI5MjkyOTtcXG4gIC0tY29sb3ItZ3JheS00MDA6ICMyZTJlMmU7XFxuICAtLWNvbG9yLWdyYXktNTAwOiAjNDU0NTQ1O1xcbiAgLS1jb2xvci1ncmF5LTYwMDogIzg3ODc4NztcXG4gIC0tY29sb3ItZ3JheS03MDA6ICM4ZjhmOGY7XFxuICAtLWNvbG9yLWdyYXktODAwOiAjN2Q3ZDdkO1xcbiAgLS1jb2xvci1ncmF5LTkwMDogI2EwYTBhMDtcXG4gIC0tY29sb3ItZ3JheS0xMDAwOiAjZWRlZGVkO1xcblxcbiAgLyogR3JheSBBbHBoYSBTY2FsZSBEYXJrICovXFxuICAtLWNvbG9yLWdyYXktYWxwaGEtMTAwOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDY2KTtcXG4gIC0tY29sb3ItZ3JheS1hbHBoYS0yMDA6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wODcpO1xcbiAgLS1jb2xvci1ncmF5LWFscGhhLTMwMDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyNSk7XFxuICAtLWNvbG9yLWdyYXktYWxwaGEtNDAwOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQ1KTtcXG4gIC0tY29sb3ItZ3JheS1hbHBoYS01MDA6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yMzkpO1xcbiAgLS1jb2xvci1ncmF5LWFscGhhLTYwMDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUwNik7XFxuICAtLWNvbG9yLWdyYXktYWxwaGEtNzAwOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTQpO1xcbiAgLS1jb2xvci1ncmF5LWFscGhhLTgwMDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQ3KTtcXG4gIC0tY29sb3ItZ3JheS1hbHBoYS05MDA6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42MSk7XFxuICAtLWNvbG9yLWdyYXktYWxwaGEtMTAwMDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkyMyk7XFxuXFxuICAvKiBCbHVlIFNjYWxlIERhcmsgKi9cXG4gIC0tY29sb3ItYmx1ZS0xMDA6ICMwZjFiMmQ7XFxuICAtLWNvbG9yLWJsdWUtMjAwOiAjMTAyNDNlO1xcbiAgLS1jb2xvci1ibHVlLTMwMDogIzBmMzA1ODtcXG4gIC0tY29sb3ItYmx1ZS00MDA6ICMwZDM4Njg7XFxuICAtLWNvbG9yLWJsdWUtNTAwOiAjMGE0NDgxO1xcbiAgLS1jb2xvci1ibHVlLTYwMDogIzAwOTFmZjtcXG4gIC0tY29sb3ItYmx1ZS03MDA6ICMwMDcwZjM7XFxuICAtLWNvbG9yLWJsdWUtODAwOiAjMDA2MGQxO1xcbiAgLS1jb2xvci1ibHVlLTkwMDogIzUyYTlmZjtcXG4gIC0tY29sb3ItYmx1ZS0xMDAwOiAjZWFmNmZmO1xcblxcbiAgLyogUmVkIFNjYWxlIERhcmsgKi9cXG4gIC0tY29sb3ItcmVkLTEwMDogIzJhMTMxNDtcXG4gIC0tY29sb3ItcmVkLTIwMDogIzNkMTcxOTtcXG4gIC0tY29sb3ItcmVkLTMwMDogIzU1MWExZTtcXG4gIC0tY29sb3ItcmVkLTQwMDogIzY3MWUyMjtcXG4gIC0tY29sb3ItcmVkLTUwMDogIzgyMjAyNTtcXG4gIC0tY29sb3ItcmVkLTYwMDogI2U1NDg0ZDtcXG4gIC0tY29sb3ItcmVkLTcwMDogI2U1NDg0ZDtcXG4gIC0tY29sb3ItcmVkLTgwMDogI2RhMzAzNjtcXG4gIC0tY29sb3ItcmVkLTkwMDogI2ZmNjM2OTtcXG4gIC0tY29sb3ItcmVkLTEwMDA6ICNmZmVjZWU7XFxuXFxuICAvKiBBbWJlciBTY2FsZSBEYXJrICovXFxuICAtLWNvbG9yLWFtYmVyLTEwMDogIzI3MTcwMDtcXG4gIC0tY29sb3ItYW1iZXItMjAwOiAjMzQxYzAwO1xcbiAgLS1jb2xvci1hbWJlci0zMDA6ICM0YTI5MDA7XFxuICAtLWNvbG9yLWFtYmVyLTQwMDogIzU3MzMwMDtcXG4gIC0tY29sb3ItYW1iZXItNTAwOiAjNjkzZjA1O1xcbiAgLS1jb2xvci1hbWJlci02MDA6ICNlNzljMTM7XFxuICAtLWNvbG9yLWFtYmVyLTcwMDogI2ZmYjIyNDtcXG4gIC0tY29sb3ItYW1iZXItODAwOiAjZmY5OTBhO1xcbiAgLS1jb2xvci1hbWJlci05MDA6ICNmMWExMGQ7XFxuICAtLWNvbG9yLWFtYmVyLTEwMDA6ICNmZWYzZGQ7XFxuXFxuICAvKiBHcmVlbiBTY2FsZSBEYXJrICovXFxuICAtLWNvbG9yLWdyZWVuLTEwMDogIzBiMjIxMTtcXG4gIC0tY29sb3ItZ3JlZW4tMjAwOiAjMGYyYzE3O1xcbiAgLS1jb2xvci1ncmVlbi0zMDA6ICMxMTM1MWI7XFxuICAtLWNvbG9yLWdyZWVuLTQwMDogIzBjNDYxYjtcXG4gIC0tY29sb3ItZ3JlZW4tNTAwOiAjMTI2NDI3O1xcbiAgLS1jb2xvci1ncmVlbi02MDA6ICMxYTkzMzg7XFxuICAtLWNvbG9yLWdyZWVuLTcwMDogIzQ2YTc1ODtcXG4gIC0tY29sb3ItZ3JlZW4tODAwOiAjMzg4ZTRhO1xcbiAgLS1jb2xvci1ncmVlbi05MDA6ICM2M2MxNzQ7XFxuICAtLWNvbG9yLWdyZWVuLTEwMDA6ICNlNWZiZWI7XFxuXFxuICAvKiBUdXJib3BhY2sgRGFyayAtIFRlbXBvcmFyeSAqL1xcbiAgLS1jb2xvci10dXJib3BhY2stdGV4dC1yZWQ6ICNmZjZkOTI7XFxuICAtLWNvbG9yLXR1cmJvcGFjay10ZXh0LWJsdWU6ICM0NWIyZmY7XFxuICAtLWNvbG9yLXR1cmJvcGFjay1ib3JkZXItcmVkOiAjNmUyOTNiO1xcbiAgLS1jb2xvci10dXJib3BhY2stYm9yZGVyLWJsdWU6ICMyODRmODA7XFxuICAtLWNvbG9yLXR1cmJvcGFjay1iYWNrZ3JvdW5kLXJlZDogIzI1MGQxMjtcXG4gIC0tY29sb3ItdHVyYm9wYWNrLWJhY2tncm91bmQtYmx1ZTogIzBhMTcyMztcXG5cIixhRT1cIlxcbiAgLS1jb2xvci1mb250OiB3aGl0ZTtcXG4gIC0tY29sb3ItYmFja2Ryb3A6IHJnYmEoMCwgMCwgMCwgMC44KTtcXG4gIC0tY29sb3ItYm9yZGVyLXNoYWRvdzogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0NSk7XFxuXFxuICAtLWNvbG9yLXRpdGxlLWNvbG9yOiAjZmFmYWZhO1xcbiAgLS1jb2xvci1zdGFjay1ub3RlczogI2E5YTlhOTtcXG5cIjtmdW5jdGlvbiBhXygpe3JldHVybigwLHkuanN4KShcInN0eWxlXCIse2NoaWxkcmVuOmVpKGFDKCksYUUsYVMsYUUsYVMpfSl9ZnVuY3Rpb24gYVAoZSxuKXsobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxyPUFycmF5KG4pO3Q8bjt0Kyspclt0XT1lW3RdO3JldHVybiByfWZ1bmN0aW9uIGF6KGUsbil7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLCFufHxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShlLG4pfHxmdW5jdGlvbihlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBhUChlLG4pO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20odCk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiBhUChlLG4pfX0oZSxuKXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX1mdW5jdGlvbiBhTChlKXt2YXIgbix0LHIsbz1lLnN0YXRlLGE9ZS5kaXNwYXRjaCxpPWUuZ2V0U3F1YXNoZWRIeWRyYXRpb25FcnJvckRldGFpbHMsbD1heigodD0obj1ydCgoMCx4LnVzZVN0YXRlKShcInVuZGVmaW5lZFwiIT10eXBlb2YgbG9jYWxTdG9yYWdlJiZsb2NhbFN0b3JhZ2UuZ2V0SXRlbShKKT9OdW1iZXIobG9jYWxTdG9yYWdlLmdldEl0ZW0oSikpOlMuTWVkaXVtKSwyKSlbMF0scj1uWzFdLFt0LGZ1bmN0aW9uKGUpe3IoZSksbG9jYWxTdG9yYWdlLnNldEl0ZW0oSixTdHJpbmcoZSkpfV0pLDIpLHM9bFswXSxjPWxbMV0sdT1heigoMCx4LnVzZVN0YXRlKSghMSksMiksZD11WzBdLGY9dVsxXSxwPW51bGwhPT1vLmJ1aWxkRXJyb3I7cmV0dXJuIHByb2Nlc3MuZW52Ll9fTkVYVF9ERVZUT09MX05FV19QQU5FTF9VSSYmcCE9PWQmJihwJiYoYSh7dHlwZTpXfSksYSh7dHlwZTpNfSkpLGYocCkpLCgwLHkuanN4cykoZWQse2NoaWxkcmVuOlsoMCx5LmpzeCkoYXAse30pLCgwLHkuanN4KShlcCx7c2NhbGU6cHJvY2Vzcy5lbnYuX19ORVhUX0RFVlRPT0xfTkVXX1BBTkVMX1VJP28uc2NhbGU6c30pLCgwLHkuanN4KShhZyx7fSksKDAseS5qc3gpKGFkLHt9KSwoMCx5LmpzeCkoYV8se30pLCgwLHkuanN4KShhayx7c3RhdGU6byxkaXNwYXRjaDphLGlzQXBwRGlyOiEwLGNoaWxkcmVuOmZ1bmN0aW9uKGUpe3ZhciBuPWUucnVudGltZUVycm9ycyx0PWUudG90YWxFcnJvckNvdW50O3JldHVybigwLHkuanN4KSh5LkZyYWdtZW50LHtjaGlsZHJlbjpvLnNob3dJbmRpY2F0b3ImJihwcm9jZXNzLmVudi5fX05FWFRfREVWVE9PTF9ORVdfUEFORUxfVUk/KDAseS5qc3hzKSh5LkZyYWdtZW50LHtjaGlsZHJlbjpbKDAseS5qc3gpKG9KLHtzdGF0ZTpvLGRpc3BhdGNoOmEsZXJyb3JDb3VudDp0LGlzQnVpbGRFcnJvcjpwfSksKG8uaXNEZXZUb29sc1BhbmVsT3Blbnx8by5pc0Vycm9yT3ZlcmxheU9wZW4pJiYoMCx5LmpzeCkoYXMse3N0YXRlOm8sZGlzcGF0Y2g6YSxpc3N1ZUNvdW50OnQscnVudGltZUVycm9yczpuLGdldFNxdWFzaGVkSHlkcmF0aW9uRXJyb3JEZXRhaWxzOml9KV19KTooMCx5LmpzeHMpKHkuRnJhZ21lbnQse2NoaWxkcmVuOlsoMCx5LmpzeCkoclUse3NjYWxlOnMsc2V0U2NhbGU6YyxzdGF0ZTpvLGRpc3BhdGNoOmEsZXJyb3JDb3VudDp0LGlzQnVpbGRFcnJvcjpwfSksKDAseS5qc3gpKGFiLHtzdGF0ZTpvLGRpc3BhdGNoOmEsZ2V0U3F1YXNoZWRIeWRyYXRpb25FcnJvckRldGFpbHM6aSxydW50aW1lRXJyb3JzOm4sZXJyb3JDb3VudDp0fSldfSkpfSl9fSldfSl9dmFyIGFUPV9fd2VicGFja19yZXF1aXJlX18oXCIuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L3NlZ21lbnQtZXhwbG9yZXItdHJpZS50c1wiKTtmdW5jdGlvbiBhUihlLG4peyhudWxsPT1ufHxuPmUubGVuZ3RoKSYmKG49ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLHI9QXJyYXkobik7dDxuO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9ZnVuY3Rpb24gYU4oZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGFSKGUpfShlKXx8ZnVuY3Rpb24oZSl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9ZVtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1lW1wiQEBpdGVyYXRvclwiXSlyZXR1cm4gQXJyYXkuZnJvbShlKX0oZSl8fGFEKGUpfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX1mdW5jdGlvbiBhRChlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBhUihlLG4pO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20odCk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiBhUihlLG4pfX12YXIgYUI9bnVsbCxhTT1bXTtmdW5jdGlvbiBhSShlKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCx0PUFycmF5KG4pLHI9MDtyPG47cisrKXRbcl09YXJndW1lbnRzW3JdO2FCP2UuYXBwbHkodm9pZCAwLFthQl0uY29uY2F0KGFOKHQpKSk6YU0ucHVzaChmdW5jdGlvbihuKXtlLmFwcGx5KHZvaWQgMCxbbl0uY29uY2F0KGFOKHQpKSl9KX19dmFyIGFIPXtvbkJ1aWxkT2s6YUkoZnVuY3Rpb24oZSl7ZSh7dHlwZTpffSl9KSxvbkJ1aWxkRXJyb3I6YUkoZnVuY3Rpb24oZSxuKXtlKHt0eXBlOlAsbWVzc2FnZTpufSl9KSxvbkJlZm9yZVJlZnJlc2g6YUkoZnVuY3Rpb24oZSl7ZSh7dHlwZTp6fSl9KSxvblJlZnJlc2g6YUkoZnVuY3Rpb24oZSl7ZSh7dHlwZTpMfSl9KSxvblZlcnNpb25JbmZvOmFJKGZ1bmN0aW9uKGUsbil7ZSh7dHlwZTpULHZlcnNpb25JbmZvOm59KX0pLG9uU3RhdGljSW5kaWNhdG9yOmFJKGZ1bmN0aW9uKGUsbil7ZSh7dHlwZTpFLHN0YXRpY0luZGljYXRvcjpufSl9KSxvbkRlYnVnSW5mbzphSShmdW5jdGlvbihlLG4pe2Uoe3R5cGU6RCxkZWJ1Z0luZm86bn0pfSksb25EZXZJbmRpY2F0b3I6YUkoZnVuY3Rpb24oZSxuKXtlKHt0eXBlOkIsZGV2SW5kaWNhdG9yOm59KX0pLG9uVW5oYW5kbGVkRXJyb3I6YUkoZnVuY3Rpb24oZSxuKXtlKHt0eXBlOlIscmVhc29uOm59KX0pLG9uVW5oYW5kbGVkUmVqZWN0aW9uOmFJKGZ1bmN0aW9uKGUsbil7ZSh7dHlwZTpOLHJlYXNvbjpufSl9KSxvcGVuRXJyb3JPdmVybGF5OmFJKGZ1bmN0aW9uKGUpe2Uoe3R5cGU6TX0pfSksY2xvc2VFcnJvck92ZXJsYXk6YUkoZnVuY3Rpb24oZSl7ZSh7dHlwZTpJfSl9KSx0b2dnbGVFcnJvck92ZXJsYXk6YUkoZnVuY3Rpb24oZSl7ZSh7dHlwZTpIfSl9KSxidWlsZGluZ0luZGljYXRvckhpZGU6YUkoZnVuY3Rpb24oZSl7ZSh7dHlwZTpVfSl9KSxidWlsZGluZ0luZGljYXRvclNob3c6YUkoZnVuY3Rpb24oZSl7ZSh7dHlwZTpGfSl9KSxyZW5kZXJpbmdJbmRpY2F0b3JIaWRlOmFJKGZ1bmN0aW9uKGUpe2Uoe3R5cGU6cX0pfSkscmVuZGVyaW5nSW5kaWNhdG9yU2hvdzphSShmdW5jdGlvbihlKXtlKHt0eXBlOlZ9KX0pLHNlZ21lbnRFeHBsb3Jlck5vZGVBZGQ6YUkoZnVuY3Rpb24oZSxuKXsoMCxhVC50aCkobil9KSxzZWdtZW50RXhwbG9yZXJOb2RlUmVtb3ZlOmFJKGZ1bmN0aW9uKGUsbil7KDAsYVQuX2MpKG4pfSksc2VnbWVudEV4cGxvcmVyVXBkYXRlUm91dGVTdGF0ZTphSShmdW5jdGlvbihlLG4pe2Uoe3R5cGU6ZWUscGFnZTpufSl9KX07ZnVuY3Rpb24gYUYoZSl7dmFyIG4sdCxyPWUuZ2V0Q29tcG9uZW50U3RhY2ssbz1lLmdldE93bmVyU3RhY2ssYT1lLmdldFNxdWFzaGVkSHlkcmF0aW9uRXJyb3JEZXRhaWxzLGk9ZS5pc1JlY292ZXJhYmxlRXJyb3IsbD0obj1mdW5jdGlvbihlLG4sdCxyKXt2YXIgbztmdW5jdGlvbiBhKGUsbyxhKXt2YXIgaSxsPW4oYSkscz12b2lkIDA9PT1sP3ZvaWQgMDpmdW5jdGlvbihlKXt2YXIgbj1bXSx0PSEwLHI9ITEsbz12b2lkIDA7dHJ5e2Zvcih2YXIgYSxpPWUudHJpbSgpLnNwbGl0KFwiXFxuXCIpW1N5bWJvbC5pdGVyYXRvcl0oKTshKHQ9KGE9aS5uZXh0KCkpLmRvbmUpO3Q9ITApe3ZhciBsPWEudmFsdWUscz0vYXQgKFteIF0rKSggXFwoKC4qKVxcKSk/Ly5leGVjKGwpO2lmKG51bGw9PXM/dm9pZCAwOnNbMV0pe3ZhciBjPXNbMV0sdT1zWzNdO2lmKCF1KXtuLnB1c2goe2Nhbk9wZW5JbkVkaXRvcjohMSxjb21wb25lbnQ6Y30pO2NvbnRpbnVlfWlmKG51bGw9PXU/dm9pZCAwOnUuaW5jbHVkZXMoXCJuZXh0L2Rpc3RcIikpYnJlYWs7dmFyIGQ9ZnVuY3Rpb24oZSl7dmFyIG4sdCxyLG8sYT0ocj1lKS5zdGFydHNXaXRoKFwiZmlsZTovL1wiKT9cImZpbGVcIjpyLmluY2x1ZGVzKFwid2VicGFjay1pbnRlcm5hbDovL1wiKT9cIndlYnBhY2staW50ZXJuYWxcIjpyLnN0YXJ0c1dpdGgoXCJodHRwOi8vXCIpfHxyLnN0YXJ0c1dpdGgoXCJodHRwczovL1wiKT9cImh0dHBcIjpyLnN0YXJ0c1dpdGgoXCIvL1wiKT9cInByb3RvY29sLXJlbGF0aXZlXCI6XCJ1bmtub3duXCIsaT1udWxsPT1lP3ZvaWQgMDplLnJlcGxhY2UoL14od2VicGFjay1pbnRlcm5hbDpcXC9cXC9cXC98ZmlsZTpcXC9cXC8pKFxcKC4qXFwpXFwvKT8vLFwiXCIpLGw9KG49bnVsbCE9KG89bnVsbD09aT92b2lkIDA6aS5tYXRjaCgvXiguKyk6KFxcZCspOihcXGQrKS8pKT9vOltdLHQ9NCxmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShuKXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShuLDQpfHxmdW5jdGlvbihlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiB3KGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIHcoZSxuKX19KG4sdCl8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCkpLHM9bFsxXSxjPWxbMl0sdT1sWzNdO3N3aXRjaChhKXtjYXNlXCJmaWxlXCI6Y2FzZVwid2VicGFjay1pbnRlcm5hbFwiOnJldHVybntjYW5PcGVuSW5FZGl0b3I6ITAsZmlsZTpzLGxpbmVOdW1iZXI6Yz9OdW1iZXIoYyk6dm9pZCAwLGNvbHVtbjp1P051bWJlcih1KTp2b2lkIDB9O2RlZmF1bHQ6cmV0dXJue2Nhbk9wZW5JbkVkaXRvcjohMX19fSh1KTtuLnB1c2goZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7Y29tcG9uZW50OmN9LGQpKX19fWNhdGNoKGUpe3I9ITAsbz1lfWZpbmFsbHl7dHJ5e3R8fG51bGw9PWkucmV0dXJufHxpLnJldHVybigpfWZpbmFsbHl7aWYocil0aHJvdyBvfX1yZXR1cm4gbn0obCksYz10KGEpLHU9ZnVuY3Rpb24oZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnByb2Nlc3MuZW52Ll9fTkVYVF9ESVNUX0RJUjtyZXR1cm4gZT8oZT1lLnNwbGl0KFwiXFxuXCIpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5pbmNsdWRlcyhcIihldmFsIFwiKSYmKGU9ZS5yZXBsYWNlKC9ldmFsIGNvZGUvZyxcImV2YWxcIikucmVwbGFjZSgvXFwoZXZhbCBhdCBbXigpXSogXFwoLyxcIihmaWxlOi8vXCIpLnJlcGxhY2UoL1xcKSwuKiQvZyxcIilcIikpLGV9KS5qb2luKFwiXFxuXCIpLCgwLGoucGFyc2UpKGUpLm1hcChmdW5jdGlvbihlKXt0cnl7dmFyIHQ9bmV3IFVSTChlLmZpbGUpLHI9ay5leGVjKHQucGF0aG5hbWUpO2lmKHIpe3ZhciBvLGE9bnVsbD09bnx8bnVsbD09KG89bi5yZXBsYWNlKC9cXFxcL2csXCIvXCIpKT92b2lkIDA6by5yZXBsYWNlKC9cXC8kLyxcIlwiKTthJiYoZS5maWxlPVwiZmlsZTovL1wiK2EuY29uY2F0KHIucG9wKCkpK3Quc2VhcmNoKX19Y2F0Y2goZSl7fXJldHVybiBlfSkpOltdfSgoYS5zdGFja3x8XCJcIikrKGN8fFwiXCIpKSxkPXtpZDpvLGVycm9yOmEsZnJhbWVzOnUsY29tcG9uZW50U3RhY2tGcmFtZXM6cyx0eXBlOnIoYSk/XCJyZWNvdmVyYWJsZVwiOihpPWEpJiZcIk5FWFRfQ09OU09MRV9FUlJPUlwiPT09aVtBXT9cImNvbnNvbGVcIjpcInJ1bnRpbWVcIn0sZj1lLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5lcnJvci5zdGFjayE9PWQuZXJyb3Iuc3RhY2smJmV0KGUuZXJyb3Iuc3RhY2spIT09ZXQoZC5lcnJvci5zdGFjayl8fHQoZS5lcnJvcikhPT10KGQuZXJyb3IpfSk7cmV0dXJuIGYubGVuZ3RoPT09ZS5sZW5ndGg/KGYucHVzaChkKSxmKTplfXJldHVybigwLHgudXNlUmVkdWNlcikoZnVuY3Rpb24oZSxuKXtzd2l0Y2gobi50eXBlKXtjYXNlIEQ6cmV0dXJuIEMoTyh7fSxlKSx7ZGVidWdJbmZvOm4uZGVidWdJbmZvfSk7Y2FzZSBFOnJldHVybiBDKE8oe30sZSkse3N0YXRpY0luZGljYXRvcjpuLnN0YXRpY0luZGljYXRvcn0pO2Nhc2UgXzpyZXR1cm4gQyhPKHt9LGUpLHtidWlsZEVycm9yOm51bGx9KTtjYXNlIFA6cmV0dXJuIEMoTyh7fSxlKSx7YnVpbGRFcnJvcjpuLm1lc3NhZ2V9KTtjYXNlIHo6cmV0dXJuIEMoTyh7fSxlKSx7cmVmcmVzaFN0YXRlOnt0eXBlOlwicGVuZGluZ1wiLGVycm9yczpbXX19KTtjYXNlIEw6cmV0dXJuIEMoTyh7fSxlKSx7YnVpbGRFcnJvcjpudWxsLGVycm9yczpcInBlbmRpbmdcIj09PWUucmVmcmVzaFN0YXRlLnR5cGU/ZS5yZWZyZXNoU3RhdGUuZXJyb3JzOltdLHJlZnJlc2hTdGF0ZTp7dHlwZTpcImlkbGVcIn19KTtjYXNlIFI6Y2FzZSBOOnN3aXRjaChlLnJlZnJlc2hTdGF0ZS50eXBlKXtjYXNlXCJpZGxlXCI6cmV0dXJuIEMoTyh7fSxlKSx7bmV4dElkOmUubmV4dElkKzEsZXJyb3JzOmEoZS5lcnJvcnMsZS5uZXh0SWQsbi5yZWFzb24pfSk7Y2FzZVwicGVuZGluZ1wiOnJldHVybiBDKE8oe30sZSkse25leHRJZDplLm5leHRJZCsxLHJlZnJlc2hTdGF0ZTpDKE8oe30sZS5yZWZyZXNoU3RhdGUpLHtlcnJvcnM6YShlLmVycm9ycyxlLm5leHRJZCxuLnJlYXNvbil9KX0pO2RlZmF1bHQ6cmV0dXJuIGV9Y2FzZSBUOnJldHVybiBDKE8oe30sZSkse3ZlcnNpb25JbmZvOm4udmVyc2lvbkluZm99KTtjYXNlIEI6cmV0dXJuIEMoTyh7fSxlKSx7c2hvd0luZGljYXRvcjohMCxkaXNhYmxlRGV2SW5kaWNhdG9yOmVyfHwhIW4uZGV2SW5kaWNhdG9yLmRpc2FibGVkVW50aWx9KTtjYXNlIE06cmV0dXJuIEMoTyh7fSxlKSx7aXNFcnJvck92ZXJsYXlPcGVuOiEwfSk7Y2FzZSBJOnJldHVybiBDKE8oe30sZSkse2lzRXJyb3JPdmVybGF5T3BlbjohMX0pO2Nhc2UgSDpyZXR1cm4gQyhPKHt9LGUpLHtpc0Vycm9yT3ZlcmxheU9wZW46IWUuaXNFcnJvck92ZXJsYXlPcGVufSk7Y2FzZSBGOnJldHVybiBDKE8oe30sZSkse2J1aWxkaW5nSW5kaWNhdG9yOiEwfSk7Y2FzZSBVOnJldHVybiBDKE8oe30sZSkse2J1aWxkaW5nSW5kaWNhdG9yOiExfSk7Y2FzZSBWOnJldHVybiBDKE8oe30sZSkse3JlbmRlcmluZ0luZGljYXRvcjohMH0pO2Nhc2UgcTpyZXR1cm4gQyhPKHt9LGUpLHtyZW5kZXJpbmdJbmRpY2F0b3I6ITF9KTtjYXNlIFc6cmV0dXJuIEMoTyh7fSxlKSx7aXNEZXZUb29sc1BhbmVsT3BlbjohMH0pO2Nhc2UgJDpyZXR1cm4gQyhPKHt9LGUpLHtpc0RldlRvb2xzUGFuZWxPcGVuOiExfSk7Y2FzZSBaOnJldHVybiBDKE8oe30sZSkse2lzRGV2VG9vbHNQYW5lbE9wZW46IWUuaXNEZXZUb29sc1BhbmVsT3Blbn0pO2Nhc2UgWTpyZXR1cm4gQyhPKHt9LGUpLHtkZXZUb29sc1Bvc2l0aW9uOm4uZGV2VG9vbHNQb3NpdGlvbn0pO2Nhc2UgWDpyZXR1cm4gQyhPKHt9LGUpLHtzY2FsZTpuLnNjYWxlfSk7Y2FzZSBlZTpyZXR1cm4gQyhPKHt9LGUpLHtwYWdlOm4ucGFnZX0pO2Nhc2UgSzpyZXR1cm4gQyhPKHt9LGUpLHtzaG93UmVzdGFydFNlcnZlckJ1dHRvbjpuLnNob3dSZXN0YXJ0U2VydmVyQnV0dG9ufSk7ZGVmYXVsdDpyZXR1cm4gZX19LChvPWUsQyhPKHt9LGVvKSx7aXNFcnJvck92ZXJsYXlPcGVuOlwicGFnZXNcIj09PW8scm91dGVyVHlwZTpvfSkpKX0oZS5yb3V0ZXJUeXBlLHIsbyxpKSx0PTIsZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0obil8fGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0odD1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2godC52YWx1ZSksYS5sZW5ndGghPT1uKTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0obiwyKXx8YUQobix0KXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKSkscz1sWzBdLGM9bFsxXTtyZXR1cm4oMCx4LnVzZUluc2VydGlvbkVmZmVjdCkoZnVuY3Rpb24oKXthQj1jO3ZhciBlPXNldFRpbWVvdXQoZnVuY3Rpb24oKXshZnVuY3Rpb24oZSl7dHJ5e3ZhciBuPSEwLHQ9ITEscj12b2lkIDA7dHJ5e2Zvcih2YXIgbyxhPWFNW1N5bWJvbC5pdGVyYXRvcl0oKTshKG49KG89YS5uZXh0KCkpLmRvbmUpO249ITApKDAsby52YWx1ZSkoZSl9Y2F0Y2goZSl7dD0hMCxyPWV9ZmluYWxseXt0cnl7bnx8bnVsbD09YS5yZXR1cm58fGEucmV0dXJuKCl9ZmluYWxseXtpZih0KXRocm93IHJ9fX1maW5hbGx5e2FNLmxlbmd0aD0wfX0oYyl9KTtyZXR1cm4gZnVuY3Rpb24oKXthQj1udWxsLGNsZWFyVGltZW91dChlKX19LFtdKSwoMCx5LmpzeHMpKHkuRnJhZ21lbnQse2NoaWxkcmVuOlsoMCx5LmpzeCkoZXMse30pLCgwLHkuanN4KShhTCx7c3RhdGU6cyxkaXNwYXRjaDpjLGdldFNxdWFzaGVkSHlkcmF0aW9uRXJyb3JEZXRhaWxzOmF9KV19KX12YXIgYVU9ITEsYVY9ITE7ZnVuY3Rpb24gYXEoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBhVyhlLG4sdCl7aWYoYVUpdGhyb3cgRXJyb3IoXCJOZXh0IERldlRvb2xzOiBQYWdlcyBEZXYgT3ZlcmxheSBpcyBhbHJlYWR5IG1vdW50ZWQuIFRoaXMgaXMgYSBidWcgaW4gTmV4dC5qc1wiKTtpZighYVYpe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7ci5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIixyLnN0eWxlLnBvc2l0aW9uPVwiYWJzb2x1dGVcIixyLnNldEF0dHJpYnV0ZShcImRhdGEtbmV4dGpzLWRldi1vdmVybGF5XCIsXCJ0cnVlXCIpO3ZhciBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJuZXh0anMtcG9ydGFsXCIpO3IuYXBwZW5kQ2hpbGQobyksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyKTt2YXIgYT0oMCxlYS5jcmVhdGVSb290KShvLHtpZGVudGlmaWVyUHJlZml4OlwibmR0LVwifSk7KDAseC5zdGFydFRyYW5zaXRpb24pKGZ1bmN0aW9uKCl7YS5yZW5kZXIoKDAseS5qc3gpKGFGLHtnZXRDb21wb25lbnRTdGFjazplLGdldE93bmVyU3RhY2s6bixnZXRTcXVhc2hlZEh5ZHJhdGlvbkVycm9yRGV0YWlsczphcSxpc1JlY292ZXJhYmxlRXJyb3I6dCxyb3V0ZXJUeXBlOlwiYXBwXCJ9KSl9KSxhVj0hMH19ZnVuY3Rpb24gYSQoZSxuLHQscil7aWYoYVYpdGhyb3cgRXJyb3IoXCJOZXh0IERldlRvb2xzOiBBcHAgRGV2IE92ZXJsYXkgaXMgYWxyZWFkeSBtb3VudGVkLiBUaGlzIGlzIGEgYnVnIGluIE5leHQuanNcIik7aWYoIWFVKXt2YXIgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibmV4dGpzLXBvcnRhbFwiKTtvLnN0eWxlLnBvc2l0aW9uPVwiYWJzb2x1dGVcIixuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihlKXt2YXIgbj0hMCx0PSExLHI9dm9pZCAwO3RyeXtmb3IodmFyIGEsaT1lW1N5bWJvbC5pdGVyYXRvcl0oKTshKG49KGE9aS5uZXh0KCkpLmRvbmUpO249ITApe3ZhciBsPWEudmFsdWU7aWYoXCJjaGlsZExpc3RcIj09PWwudHlwZSl7dmFyIHM9ITAsYz0hMSx1PXZvaWQgMDt0cnl7Zm9yKHZhciBkLGY9bC5yZW1vdmVkTm9kZXNbU3ltYm9sLml0ZXJhdG9yXSgpOyEocz0oZD1mLm5leHQoKSkuZG9uZSk7cz0hMClkLnZhbHVlPT09byYmZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvKX1jYXRjaChlKXtjPSEwLHU9ZX1maW5hbGx5e3RyeXtzfHxudWxsPT1mLnJldHVybnx8Zi5yZXR1cm4oKX1maW5hbGx5e2lmKGMpdGhyb3cgdX19fX19Y2F0Y2goZSl7dD0hMCxyPWV9ZmluYWxseXt0cnl7bnx8bnVsbD09aS5yZXR1cm58fGkucmV0dXJuKCl9ZmluYWxseXtpZih0KXRocm93IHJ9fX0pLm9ic2VydmUoZG9jdW1lbnQuYm9keSx7Y2hpbGRMaXN0OiEwfSksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvKTt2YXIgYT0oMCxlYS5jcmVhdGVSb290KShvKTsoMCx4LnN0YXJ0VHJhbnNpdGlvbikoZnVuY3Rpb24oKXthLnJlbmRlcigoMCx5LmpzeCkoYUYse2dldENvbXBvbmVudFN0YWNrOmUsZ2V0T3duZXJTdGFjazpuLGdldFNxdWFzaGVkSHlkcmF0aW9uRXJyb3JEZXRhaWxzOnQsaXNSZWNvdmVyYWJsZUVycm9yOnIscm91dGVyVHlwZTpcInBhZ2VzXCJ9KSl9KSxhVT0hMH19fSkoKSxleHBvcnRzLmRpc3BhdGNoZXI9X193ZWJwYWNrX2V4cG9ydHNfXy5kaXNwYXRjaGVyLGV4cG9ydHMucmVuZGVyQXBwRGV2T3ZlcmxheT1fX3dlYnBhY2tfZXhwb3J0c19fLnJlbmRlckFwcERldk92ZXJsYXksZXhwb3J0cy5yZW5kZXJQYWdlc0Rldk92ZXJsYXk9X193ZWJwYWNrX2V4cG9ydHNfXy5yZW5kZXJQYWdlc0Rldk92ZXJsYXksX193ZWJwYWNrX2V4cG9ydHNfXyktMT09PVtcImRpc3BhdGNoZXJcIixcInJlbmRlckFwcERldk92ZXJsYXlcIixcInJlbmRlclBhZ2VzRGV2T3ZlcmxheVwiXS5pbmRleE9mKF9fd2VicGFja19pX18pJiYoZXhwb3J0c1tfX3dlYnBhY2tfaV9fXT1fX3dlYnBhY2tfZXhwb3J0c19fW19fd2VicGFja19pX19dKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cyxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/next-devtools/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/process/browser.js":
|
||
/*!************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/process/browser.js ***!
|
||
\************************************************************/
|
||
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
||
|
||
eval(__webpack_require__.ts("var __dirname = \"/\";\n(function(){var e={229:function(e){var t=e.exports={};var r;var n;function defaultSetTimout(){throw new Error(\"setTimeout has not been defined\")}function defaultClearTimeout(){throw new Error(\"clearTimeout has not been defined\")}(function(){try{if(typeof setTimeout===\"function\"){r=setTimeout}else{r=defaultSetTimout}}catch(e){r=defaultSetTimout}try{if(typeof clearTimeout===\"function\"){n=clearTimeout}else{n=defaultClearTimeout}}catch(e){n=defaultClearTimeout}})();function runTimeout(e){if(r===setTimeout){return setTimeout(e,0)}if((r===defaultSetTimout||!r)&&setTimeout){r=setTimeout;return setTimeout(e,0)}try{return r(e,0)}catch(t){try{return r.call(null,e,0)}catch(t){return r.call(this,e,0)}}}function runClearTimeout(e){if(n===clearTimeout){return clearTimeout(e)}if((n===defaultClearTimeout||!n)&&clearTimeout){n=clearTimeout;return clearTimeout(e)}try{return n(e)}catch(t){try{return n.call(null,e)}catch(t){return n.call(this,e)}}}var i=[];var o=false;var u;var a=-1;function cleanUpNextTick(){if(!o||!u){return}o=false;if(u.length){i=u.concat(i)}else{a=-1}if(i.length){drainQueue()}}function drainQueue(){if(o){return}var e=runTimeout(cleanUpNextTick);o=true;var t=i.length;while(t){u=i;i=[];while(++a<t){if(u){u[a].run()}}a=-1;t=i.length}u=null;o=false;runClearTimeout(e)}t.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1){for(var r=1;r<arguments.length;r++){t[r-1]=arguments[r]}}i.push(new Item(e,t));if(i.length===1&&!o){runTimeout(drainQueue)}};function Item(e,t){this.fun=e;this.array=t}Item.prototype.run=function(){this.fun.apply(null,this.array)};t.title=\"browser\";t.browser=true;t.env={};t.argv=[];t.version=\"\";t.versions={};function noop(){}t.on=noop;t.addListener=noop;t.once=noop;t.off=noop;t.removeListener=noop;t.removeAllListeners=noop;t.emit=noop;t.prependListener=noop;t.prependOnceListener=noop;t.listeners=function(e){return[]};t.binding=function(e){throw new Error(\"process.binding is not supported\")};t.cwd=function(){return\"/\"};t.chdir=function(e){throw new Error(\"process.chdir is not supported\")};t.umask=function(){return 0}}};var t={};function __nccwpck_require__(r){var n=t[r];if(n!==undefined){return n.exports}var i=t[r]={exports:{}};var o=true;try{e[r](i,i.exports,__nccwpck_require__);o=false}finally{if(o)delete t[r]}return i.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var r=__nccwpck_require__(229);module.exports=r})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcHJvY2Vzcy9icm93c2VyLmpzIiwibWFwcGluZ3MiOiI7QUFBQSxZQUFZLE9BQU8sZ0JBQWdCLG1CQUFtQixNQUFNLE1BQU0sNEJBQTRCLG1EQUFtRCwrQkFBK0IscURBQXFELFlBQVksSUFBSSxtQ0FBbUMsYUFBYSxLQUFLLG9CQUFvQixTQUFTLG1CQUFtQixJQUFJLHFDQUFxQyxlQUFlLEtBQUssdUJBQXVCLFNBQVMsdUJBQXVCLElBQUksdUJBQXVCLG1CQUFtQix1QkFBdUIsMkNBQTJDLGFBQWEsdUJBQXVCLElBQUksY0FBYyxTQUFTLElBQUksd0JBQXdCLFNBQVMsMEJBQTBCLDRCQUE0QixxQkFBcUIsdUJBQXVCLGdEQUFnRCxlQUFlLHVCQUF1QixJQUFJLFlBQVksU0FBUyxJQUFJLHNCQUFzQixTQUFTLHdCQUF3QixTQUFTLFlBQVksTUFBTSxTQUFTLDJCQUEyQixXQUFXLE9BQU8sUUFBUSxhQUFhLGNBQWMsS0FBSyxLQUFLLGFBQWEsY0FBYyxzQkFBc0IsTUFBTSxPQUFPLGtDQUFrQyxPQUFPLGVBQWUsU0FBUyxJQUFJLEtBQUssYUFBYSxNQUFNLFlBQVksS0FBSyxXQUFXLE9BQU8sUUFBUSxtQkFBbUIsdUJBQXVCLG9DQUFvQyx1QkFBdUIsWUFBWSxtQkFBbUIsS0FBSyxxQkFBcUIsc0JBQXNCLHFCQUFxQix5QkFBeUIsbUJBQW1CLFdBQVcsYUFBYSw4QkFBOEIsaUNBQWlDLGtCQUFrQixlQUFlLFNBQVMsVUFBVSxhQUFhLGNBQWMsaUJBQWlCLFVBQVUsbUJBQW1CLFlBQVksV0FBVyxzQkFBc0IsMEJBQTBCLFlBQVksdUJBQXVCLDJCQUEyQix3QkFBd0IsVUFBVSxzQkFBc0IscURBQXFELGlCQUFpQixXQUFXLG9CQUFvQixtREFBbUQsbUJBQW1CLFlBQVksU0FBUyxnQ0FBZ0MsV0FBVyxrQkFBa0IsaUJBQWlCLFlBQVksWUFBWSxXQUFXLElBQUksc0NBQXNDLFFBQVEsUUFBUSxpQkFBaUIsaUJBQWlCLG1FQUFtRSxTQUFTLEtBQUssK0JBQStCLGlCQUFpQiIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvRG9jdW1lbnRzL0Rldi9iaW9oYXphcmQtdmZ4LTEvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9wcm9jZXNzL2Jyb3dzZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7dmFyIGU9ezIyOTpmdW5jdGlvbihlKXt2YXIgdD1lLmV4cG9ydHM9e307dmFyIHI7dmFyIG47ZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpe3Rocm93IG5ldyBFcnJvcihcInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWRcIil9ZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCgpe3Rocm93IG5ldyBFcnJvcihcImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZFwiKX0oZnVuY3Rpb24oKXt0cnl7aWYodHlwZW9mIHNldFRpbWVvdXQ9PT1cImZ1bmN0aW9uXCIpe3I9c2V0VGltZW91dH1lbHNle3I9ZGVmYXVsdFNldFRpbW91dH19Y2F0Y2goZSl7cj1kZWZhdWx0U2V0VGltb3V0fXRyeXtpZih0eXBlb2YgY2xlYXJUaW1lb3V0PT09XCJmdW5jdGlvblwiKXtuPWNsZWFyVGltZW91dH1lbHNle249ZGVmYXVsdENsZWFyVGltZW91dH19Y2F0Y2goZSl7bj1kZWZhdWx0Q2xlYXJUaW1lb3V0fX0pKCk7ZnVuY3Rpb24gcnVuVGltZW91dChlKXtpZihyPT09c2V0VGltZW91dCl7cmV0dXJuIHNldFRpbWVvdXQoZSwwKX1pZigocj09PWRlZmF1bHRTZXRUaW1vdXR8fCFyKSYmc2V0VGltZW91dCl7cj1zZXRUaW1lb3V0O3JldHVybiBzZXRUaW1lb3V0KGUsMCl9dHJ5e3JldHVybiByKGUsMCl9Y2F0Y2godCl7dHJ5e3JldHVybiByLmNhbGwobnVsbCxlLDApfWNhdGNoKHQpe3JldHVybiByLmNhbGwodGhpcyxlLDApfX19ZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KGUpe2lmKG49PT1jbGVhclRpbWVvdXQpe3JldHVybiBjbGVhclRpbWVvdXQoZSl9aWYoKG49PT1kZWZhdWx0Q2xlYXJUaW1lb3V0fHwhbikmJmNsZWFyVGltZW91dCl7bj1jbGVhclRpbWVvdXQ7cmV0dXJuIGNsZWFyVGltZW91dChlKX10cnl7cmV0dXJuIG4oZSl9Y2F0Y2godCl7dHJ5e3JldHVybiBuLmNhbGwobnVsbCxlKX1jYXRjaCh0KXtyZXR1cm4gbi5jYWxsKHRoaXMsZSl9fX12YXIgaT1bXTt2YXIgbz1mYWxzZTt2YXIgdTt2YXIgYT0tMTtmdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKXtpZighb3x8IXUpe3JldHVybn1vPWZhbHNlO2lmKHUubGVuZ3RoKXtpPXUuY29uY2F0KGkpfWVsc2V7YT0tMX1pZihpLmxlbmd0aCl7ZHJhaW5RdWV1ZSgpfX1mdW5jdGlvbiBkcmFpblF1ZXVlKCl7aWYobyl7cmV0dXJufXZhciBlPXJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtvPXRydWU7dmFyIHQ9aS5sZW5ndGg7d2hpbGUodCl7dT1pO2k9W107d2hpbGUoKythPHQpe2lmKHUpe3VbYV0ucnVuKCl9fWE9LTE7dD1pLmxlbmd0aH11PW51bGw7bz1mYWxzZTtydW5DbGVhclRpbWVvdXQoZSl9dC5uZXh0VGljaz1mdW5jdGlvbihlKXt2YXIgdD1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpe2Zvcih2YXIgcj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspe3Rbci0xXT1hcmd1bWVudHNbcl19fWkucHVzaChuZXcgSXRlbShlLHQpKTtpZihpLmxlbmd0aD09PTEmJiFvKXtydW5UaW1lb3V0KGRyYWluUXVldWUpfX07ZnVuY3Rpb24gSXRlbShlLHQpe3RoaXMuZnVuPWU7dGhpcy5hcnJheT10fUl0ZW0ucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9O3QudGl0bGU9XCJicm93c2VyXCI7dC5icm93c2VyPXRydWU7dC5lbnY9e307dC5hcmd2PVtdO3QudmVyc2lvbj1cIlwiO3QudmVyc2lvbnM9e307ZnVuY3Rpb24gbm9vcCgpe310Lm9uPW5vb3A7dC5hZGRMaXN0ZW5lcj1ub29wO3Qub25jZT1ub29wO3Qub2ZmPW5vb3A7dC5yZW1vdmVMaXN0ZW5lcj1ub29wO3QucmVtb3ZlQWxsTGlzdGVuZXJzPW5vb3A7dC5lbWl0PW5vb3A7dC5wcmVwZW5kTGlzdGVuZXI9bm9vcDt0LnByZXBlbmRPbmNlTGlzdGVuZXI9bm9vcDt0Lmxpc3RlbmVycz1mdW5jdGlvbihlKXtyZXR1cm5bXX07dC5iaW5kaW5nPWZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcihcInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkXCIpfTt0LmN3ZD1mdW5jdGlvbigpe3JldHVyblwiL1wifTt0LmNoZGlyPWZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcihcInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZFwiKX07dC51bWFzaz1mdW5jdGlvbigpe3JldHVybiAwfX19O3ZhciB0PXt9O2Z1bmN0aW9uIF9fbmNjd3Bja19yZXF1aXJlX18ocil7dmFyIG49dFtyXTtpZihuIT09dW5kZWZpbmVkKXtyZXR1cm4gbi5leHBvcnRzfXZhciBpPXRbcl09e2V4cG9ydHM6e319O3ZhciBvPXRydWU7dHJ5e2Vbcl0oaSxpLmV4cG9ydHMsX19uY2N3cGNrX3JlcXVpcmVfXyk7bz1mYWxzZX1maW5hbGx5e2lmKG8pZGVsZXRlIHRbcl19cmV0dXJuIGkuZXhwb3J0c31pZih0eXBlb2YgX19uY2N3cGNrX3JlcXVpcmVfXyE9PVwidW5kZWZpbmVkXCIpX19uY2N3cGNrX3JlcXVpcmVfXy5hYj1fX2Rpcm5hbWUrXCIvXCI7dmFyIHI9X19uY2N3cGNrX3JlcXVpcmVfXygyMjkpO21vZHVsZS5leHBvcnRzPXJ9KSgpOyJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/process/browser.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom-client.development.js":
|
||
/*!***************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/react-dom/cjs/react-dom-client.development.js ***!
|
||
\***************************************************************************************/
|
||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/**\n * @license React\n * react-dom-client.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n\n true &&\n (function () {\n function findHook(fiber, id) {\n for (fiber = fiber.memoizedState; null !== fiber && 0 < id; )\n (fiber = fiber.next), id--;\n return fiber;\n }\n function copyWithSetImpl(obj, path, index, value) {\n if (index >= path.length) return value;\n var key = path[index],\n updated = isArrayImpl(obj) ? obj.slice() : assign({}, obj);\n updated[key] = copyWithSetImpl(obj[key], path, index + 1, value);\n return updated;\n }\n function copyWithRename(obj, oldPath, newPath) {\n if (oldPath.length !== newPath.length)\n console.warn(\"copyWithRename() expects paths of the same length\");\n else {\n for (var i = 0; i < newPath.length - 1; i++)\n if (oldPath[i] !== newPath[i]) {\n console.warn(\n \"copyWithRename() expects paths to be the same except for the deepest key\"\n );\n return;\n }\n return copyWithRenameImpl(obj, oldPath, newPath, 0);\n }\n }\n function copyWithRenameImpl(obj, oldPath, newPath, index) {\n var oldKey = oldPath[index],\n updated = isArrayImpl(obj) ? obj.slice() : assign({}, obj);\n index + 1 === oldPath.length\n ? ((updated[newPath[index]] = updated[oldKey]),\n isArrayImpl(updated)\n ? updated.splice(oldKey, 1)\n : delete updated[oldKey])\n : (updated[oldKey] = copyWithRenameImpl(\n obj[oldKey],\n oldPath,\n newPath,\n index + 1\n ));\n return updated;\n }\n function copyWithDeleteImpl(obj, path, index) {\n var key = path[index],\n updated = isArrayImpl(obj) ? obj.slice() : assign({}, obj);\n if (index + 1 === path.length)\n return (\n isArrayImpl(updated) ? updated.splice(key, 1) : delete updated[key],\n updated\n );\n updated[key] = copyWithDeleteImpl(obj[key], path, index + 1);\n return updated;\n }\n function shouldSuspendImpl() {\n return !1;\n }\n function shouldErrorImpl() {\n return null;\n }\n function warnInvalidHookAccess() {\n console.error(\n \"Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. You can only call Hooks at the top level of your React function. For more information, see https://react.dev/link/rules-of-hooks\"\n );\n }\n function warnInvalidContextAccess() {\n console.error(\n \"Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo().\"\n );\n }\n function noop() {}\n function warnForMissingKey() {}\n function setToSortedString(set) {\n var array = [];\n set.forEach(function (value) {\n array.push(value);\n });\n return array.sort().join(\", \");\n }\n function createFiber(tag, pendingProps, key, mode) {\n return new FiberNode(tag, pendingProps, key, mode);\n }\n function scheduleRoot(root, element) {\n root.context === emptyContextObject &&\n (updateContainerImpl(root.current, 2, element, root, null, null),\n flushSyncWork$1());\n }\n function scheduleRefresh(root, update) {\n if (null !== resolveFamily) {\n var staleFamilies = update.staleFamilies;\n update = update.updatedFamilies;\n flushPendingEffects();\n scheduleFibersWithFamiliesRecursively(\n root.current,\n update,\n staleFamilies\n );\n flushSyncWork$1();\n }\n }\n function setRefreshHandler(handler) {\n resolveFamily = handler;\n }\n function isValidContainer(node) {\n return !(\n !node ||\n (1 !== node.nodeType && 9 !== node.nodeType && 11 !== node.nodeType)\n );\n }\n function getNearestMountedFiber(fiber) {\n var node = fiber,\n nearestMounted = fiber;\n if (fiber.alternate) for (; node.return; ) node = node.return;\n else {\n fiber = node;\n do\n (node = fiber),\n 0 !== (node.flags & 4098) && (nearestMounted = node.return),\n (fiber = node.return);\n while (fiber);\n }\n return 3 === node.tag ? nearestMounted : null;\n }\n function getSuspenseInstanceFromFiber(fiber) {\n if (13 === fiber.tag) {\n var suspenseState = fiber.memoizedState;\n null === suspenseState &&\n ((fiber = fiber.alternate),\n null !== fiber && (suspenseState = fiber.memoizedState));\n if (null !== suspenseState) return suspenseState.dehydrated;\n }\n return null;\n }\n function getActivityInstanceFromFiber(fiber) {\n if (31 === fiber.tag) {\n var activityState = fiber.memoizedState;\n null === activityState &&\n ((fiber = fiber.alternate),\n null !== fiber && (activityState = fiber.memoizedState));\n if (null !== activityState) return activityState.dehydrated;\n }\n return null;\n }\n function assertIsMounted(fiber) {\n if (getNearestMountedFiber(fiber) !== fiber)\n throw Error(\"Unable to find node on an unmounted component.\");\n }\n function findCurrentFiberUsingSlowPath(fiber) {\n var alternate = fiber.alternate;\n if (!alternate) {\n alternate = getNearestMountedFiber(fiber);\n if (null === alternate)\n throw Error(\"Unable to find node on an unmounted component.\");\n return alternate !== fiber ? null : fiber;\n }\n for (var a = fiber, b = alternate; ; ) {\n var parentA = a.return;\n if (null === parentA) break;\n var parentB = parentA.alternate;\n if (null === parentB) {\n b = parentA.return;\n if (null !== b) {\n a = b;\n continue;\n }\n break;\n }\n if (parentA.child === parentB.child) {\n for (parentB = parentA.child; parentB; ) {\n if (parentB === a) return assertIsMounted(parentA), fiber;\n if (parentB === b) return assertIsMounted(parentA), alternate;\n parentB = parentB.sibling;\n }\n throw Error(\"Unable to find node on an unmounted component.\");\n }\n if (a.return !== b.return) (a = parentA), (b = parentB);\n else {\n for (var didFindChild = !1, _child = parentA.child; _child; ) {\n if (_child === a) {\n didFindChild = !0;\n a = parentA;\n b = parentB;\n break;\n }\n if (_child === b) {\n didFindChild = !0;\n b = parentA;\n a = parentB;\n break;\n }\n _child = _child.sibling;\n }\n if (!didFindChild) {\n for (_child = parentB.child; _child; ) {\n if (_child === a) {\n didFindChild = !0;\n a = parentB;\n b = parentA;\n break;\n }\n if (_child === b) {\n didFindChild = !0;\n b = parentB;\n a = parentA;\n break;\n }\n _child = _child.sibling;\n }\n if (!didFindChild)\n throw Error(\n \"Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue.\"\n );\n }\n }\n if (a.alternate !== b)\n throw Error(\n \"Return fibers should always be each others' alternates. This error is likely caused by a bug in React. Please file an issue.\"\n );\n }\n if (3 !== a.tag)\n throw Error(\"Unable to find node on an unmounted component.\");\n return a.stateNode.current === a ? fiber : alternate;\n }\n function findCurrentHostFiberImpl(node) {\n var tag = node.tag;\n if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return node;\n for (node = node.child; null !== node; ) {\n tag = findCurrentHostFiberImpl(node);\n if (null !== tag) return tag;\n node = node.sibling;\n }\n return null;\n }\n function getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable)\n return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n }\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function getComponentNameFromOwner(owner) {\n return \"number\" === typeof owner.tag\n ? getComponentNameFromFiber(owner)\n : \"string\" === typeof owner.name\n ? owner.name\n : null;\n }\n function getComponentNameFromFiber(fiber) {\n var type = fiber.type;\n switch (fiber.tag) {\n case 31:\n return \"Activity\";\n case 24:\n return \"Cache\";\n case 9:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case 10:\n return type.displayName || \"Context\";\n case 18:\n return \"DehydratedFragment\";\n case 11:\n return (\n (fiber = type.render),\n (fiber = fiber.displayName || fiber.name || \"\"),\n type.displayName ||\n (\"\" !== fiber ? \"ForwardRef(\" + fiber + \")\" : \"ForwardRef\")\n );\n case 7:\n return \"Fragment\";\n case 26:\n case 27:\n case 5:\n return type;\n case 4:\n return \"Portal\";\n case 3:\n return \"Root\";\n case 6:\n return \"Text\";\n case 16:\n return getComponentNameFromType(type);\n case 8:\n return type === REACT_STRICT_MODE_TYPE ? \"StrictMode\" : \"Mode\";\n case 22:\n return \"Offscreen\";\n case 12:\n return \"Profiler\";\n case 21:\n return \"Scope\";\n case 13:\n return \"Suspense\";\n case 19:\n return \"SuspenseList\";\n case 25:\n return \"TracingMarker\";\n case 1:\n case 0:\n case 14:\n case 15:\n if (\"function\" === typeof type)\n return type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n break;\n case 29:\n type = fiber._debugInfo;\n if (null != type)\n for (var i = type.length - 1; 0 <= i; i--)\n if (\"string\" === typeof type[i].name) return type[i].name;\n if (null !== fiber.return)\n return getComponentNameFromFiber(fiber.return);\n }\n return null;\n }\n function createCursor(defaultValue) {\n return { current: defaultValue };\n }\n function pop(cursor, fiber) {\n 0 > index$jscomp$0\n ? console.error(\"Unexpected pop.\")\n : (fiber !== fiberStack[index$jscomp$0] &&\n console.error(\"Unexpected Fiber popped.\"),\n (cursor.current = valueStack[index$jscomp$0]),\n (valueStack[index$jscomp$0] = null),\n (fiberStack[index$jscomp$0] = null),\n index$jscomp$0--);\n }\n function push(cursor, value, fiber) {\n index$jscomp$0++;\n valueStack[index$jscomp$0] = cursor.current;\n fiberStack[index$jscomp$0] = fiber;\n cursor.current = value;\n }\n function requiredContext(c) {\n null === c &&\n console.error(\n \"Expected host context to exist. This error is likely caused by a bug in React. Please file an issue.\"\n );\n return c;\n }\n function pushHostContainer(fiber, nextRootInstance) {\n push(rootInstanceStackCursor, nextRootInstance, fiber);\n push(contextFiberStackCursor, fiber, fiber);\n push(contextStackCursor, null, fiber);\n var nextRootContext = nextRootInstance.nodeType;\n switch (nextRootContext) {\n case 9:\n case 11:\n nextRootContext = 9 === nextRootContext ? \"#document\" : \"#fragment\";\n nextRootInstance = (nextRootInstance =\n nextRootInstance.documentElement)\n ? (nextRootInstance = nextRootInstance.namespaceURI)\n ? getOwnHostContext(nextRootInstance)\n : HostContextNamespaceNone\n : HostContextNamespaceNone;\n break;\n default:\n if (\n ((nextRootContext = nextRootInstance.tagName),\n (nextRootInstance = nextRootInstance.namespaceURI))\n )\n (nextRootInstance = getOwnHostContext(nextRootInstance)),\n (nextRootInstance = getChildHostContextProd(\n nextRootInstance,\n nextRootContext\n ));\n else\n switch (nextRootContext) {\n case \"svg\":\n nextRootInstance = HostContextNamespaceSvg;\n break;\n case \"math\":\n nextRootInstance = HostContextNamespaceMath;\n break;\n default:\n nextRootInstance = HostContextNamespaceNone;\n }\n }\n nextRootContext = nextRootContext.toLowerCase();\n nextRootContext = updatedAncestorInfoDev(null, nextRootContext);\n nextRootContext = {\n context: nextRootInstance,\n ancestorInfo: nextRootContext\n };\n pop(contextStackCursor, fiber);\n push(contextStackCursor, nextRootContext, fiber);\n }\n function popHostContainer(fiber) {\n pop(contextStackCursor, fiber);\n pop(contextFiberStackCursor, fiber);\n pop(rootInstanceStackCursor, fiber);\n }\n function getHostContext() {\n return requiredContext(contextStackCursor.current);\n }\n function pushHostContext(fiber) {\n null !== fiber.memoizedState &&\n push(hostTransitionProviderCursor, fiber, fiber);\n var context = requiredContext(contextStackCursor.current);\n var type = fiber.type;\n var nextContext = getChildHostContextProd(context.context, type);\n type = updatedAncestorInfoDev(context.ancestorInfo, type);\n nextContext = { context: nextContext, ancestorInfo: type };\n context !== nextContext &&\n (push(contextFiberStackCursor, fiber, fiber),\n push(contextStackCursor, nextContext, fiber));\n }\n function popHostContext(fiber) {\n contextFiberStackCursor.current === fiber &&\n (pop(contextStackCursor, fiber), pop(contextFiberStackCursor, fiber));\n hostTransitionProviderCursor.current === fiber &&\n (pop(hostTransitionProviderCursor, fiber),\n (HostTransitionContext._currentValue = NotPendingTransition));\n }\n function disabledLog() {}\n function disableLogs() {\n if (0 === disabledDepth) {\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd;\n var props = {\n configurable: !0,\n enumerable: !0,\n value: disabledLog,\n writable: !0\n };\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n }\n disabledDepth++;\n }\n function reenableLogs() {\n disabledDepth--;\n if (0 === disabledDepth) {\n var props = { configurable: !0, enumerable: !0, writable: !0 };\n Object.defineProperties(console, {\n log: assign({}, props, { value: prevLog }),\n info: assign({}, props, { value: prevInfo }),\n warn: assign({}, props, { value: prevWarn }),\n error: assign({}, props, { value: prevError }),\n group: assign({}, props, { value: prevGroup }),\n groupCollapsed: assign({}, props, { value: prevGroupCollapsed }),\n groupEnd: assign({}, props, { value: prevGroupEnd })\n });\n }\n 0 > disabledDepth &&\n console.error(\n \"disabledDepth fell below zero. This is a bug in React. Please file an issue.\"\n );\n }\n function formatOwnerStack(error) {\n var prevPrepareStackTrace = Error.prepareStackTrace;\n Error.prepareStackTrace = void 0;\n error = error.stack;\n Error.prepareStackTrace = prevPrepareStackTrace;\n error.startsWith(\"Error: react-stack-top-frame\\n\") &&\n (error = error.slice(29));\n prevPrepareStackTrace = error.indexOf(\"\\n\");\n -1 !== prevPrepareStackTrace &&\n (error = error.slice(prevPrepareStackTrace + 1));\n prevPrepareStackTrace = error.indexOf(\"react_stack_bottom_frame\");\n -1 !== prevPrepareStackTrace &&\n (prevPrepareStackTrace = error.lastIndexOf(\n \"\\n\",\n prevPrepareStackTrace\n ));\n if (-1 !== prevPrepareStackTrace)\n error = error.slice(0, prevPrepareStackTrace);\n else return \"\";\n return error;\n }\n function describeBuiltInComponentFrame(name) {\n if (void 0 === prefix)\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = (match && match[1]) || \"\";\n suffix =\n -1 < x.stack.indexOf(\"\\n at\")\n ? \" (<anonymous>)\"\n : -1 < x.stack.indexOf(\"@\")\n ? \"@unknown:0:0\"\n : \"\";\n }\n return \"\\n\" + prefix + name + suffix;\n }\n function describeNativeComponentFrame(fn, construct) {\n if (!fn || reentry) return \"\";\n var frame = componentFrameCache.get(fn);\n if (void 0 !== frame) return frame;\n reentry = !0;\n frame = Error.prepareStackTrace;\n Error.prepareStackTrace = void 0;\n var previousDispatcher = null;\n previousDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = null;\n disableLogs();\n try {\n var RunInRootFrame = {\n DetermineComponentFrameRoot: function () {\n try {\n if (construct) {\n var Fake = function () {\n throw Error();\n };\n Object.defineProperty(Fake.prototype, \"props\", {\n set: function () {\n throw Error();\n }\n });\n if (\"object\" === typeof Reflect && Reflect.construct) {\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n var control = x;\n }\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x$0) {\n control = x$0;\n }\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x$1) {\n control = x$1;\n }\n (Fake = fn()) &&\n \"function\" === typeof Fake.catch &&\n Fake.catch(function () {});\n }\n } catch (sample) {\n if (sample && control && \"string\" === typeof sample.stack)\n return [sample.stack, control.stack];\n }\n return [null, null];\n }\n };\n RunInRootFrame.DetermineComponentFrameRoot.displayName =\n \"DetermineComponentFrameRoot\";\n var namePropDescriptor = Object.getOwnPropertyDescriptor(\n RunInRootFrame.DetermineComponentFrameRoot,\n \"name\"\n );\n namePropDescriptor &&\n namePropDescriptor.configurable &&\n Object.defineProperty(\n RunInRootFrame.DetermineComponentFrameRoot,\n \"name\",\n { value: \"DetermineComponentFrameRoot\" }\n );\n var _RunInRootFrame$Deter =\n RunInRootFrame.DetermineComponentFrameRoot(),\n sampleStack = _RunInRootFrame$Deter[0],\n controlStack = _RunInRootFrame$Deter[1];\n if (sampleStack && controlStack) {\n var sampleLines = sampleStack.split(\"\\n\"),\n controlLines = controlStack.split(\"\\n\");\n for (\n _RunInRootFrame$Deter = namePropDescriptor = 0;\n namePropDescriptor < sampleLines.length &&\n !sampleLines[namePropDescriptor].includes(\n \"DetermineComponentFrameRoot\"\n );\n\n )\n namePropDescriptor++;\n for (\n ;\n _RunInRootFrame$Deter < controlLines.length &&\n !controlLines[_RunInRootFrame$Deter].includes(\n \"DetermineComponentFrameRoot\"\n );\n\n )\n _RunInRootFrame$Deter++;\n if (\n namePropDescriptor === sampleLines.length ||\n _RunInRootFrame$Deter === controlLines.length\n )\n for (\n namePropDescriptor = sampleLines.length - 1,\n _RunInRootFrame$Deter = controlLines.length - 1;\n 1 <= namePropDescriptor &&\n 0 <= _RunInRootFrame$Deter &&\n sampleLines[namePropDescriptor] !==\n controlLines[_RunInRootFrame$Deter];\n\n )\n _RunInRootFrame$Deter--;\n for (\n ;\n 1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter;\n namePropDescriptor--, _RunInRootFrame$Deter--\n )\n if (\n sampleLines[namePropDescriptor] !==\n controlLines[_RunInRootFrame$Deter]\n ) {\n if (1 !== namePropDescriptor || 1 !== _RunInRootFrame$Deter) {\n do\n if (\n (namePropDescriptor--,\n _RunInRootFrame$Deter--,\n 0 > _RunInRootFrame$Deter ||\n sampleLines[namePropDescriptor] !==\n controlLines[_RunInRootFrame$Deter])\n ) {\n var _frame =\n \"\\n\" +\n sampleLines[namePropDescriptor].replace(\n \" at new \",\n \" at \"\n );\n fn.displayName &&\n _frame.includes(\"<anonymous>\") &&\n (_frame = _frame.replace(\"<anonymous>\", fn.displayName));\n \"function\" === typeof fn &&\n componentFrameCache.set(fn, _frame);\n return _frame;\n }\n while (1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter);\n }\n break;\n }\n }\n } finally {\n (reentry = !1),\n (ReactSharedInternals.H = previousDispatcher),\n reenableLogs(),\n (Error.prepareStackTrace = frame);\n }\n sampleLines = (sampleLines = fn ? fn.displayName || fn.name : \"\")\n ? describeBuiltInComponentFrame(sampleLines)\n : \"\";\n \"function\" === typeof fn && componentFrameCache.set(fn, sampleLines);\n return sampleLines;\n }\n function describeFiber(fiber, childFiber) {\n switch (fiber.tag) {\n case 26:\n case 27:\n case 5:\n return describeBuiltInComponentFrame(fiber.type);\n case 16:\n return describeBuiltInComponentFrame(\"Lazy\");\n case 13:\n return fiber.child !== childFiber && null !== childFiber\n ? describeBuiltInComponentFrame(\"Suspense Fallback\")\n : describeBuiltInComponentFrame(\"Suspense\");\n case 19:\n return describeBuiltInComponentFrame(\"SuspenseList\");\n case 0:\n case 15:\n return describeNativeComponentFrame(fiber.type, !1);\n case 11:\n return describeNativeComponentFrame(fiber.type.render, !1);\n case 1:\n return describeNativeComponentFrame(fiber.type, !0);\n case 31:\n return describeBuiltInComponentFrame(\"Activity\");\n default:\n return \"\";\n }\n }\n function getStackByFiberInDevAndProd(workInProgress) {\n try {\n var info = \"\",\n previous = null;\n do {\n info += describeFiber(workInProgress, previous);\n var debugInfo = workInProgress._debugInfo;\n if (debugInfo)\n for (var i = debugInfo.length - 1; 0 <= i; i--) {\n var entry = debugInfo[i];\n if (\"string\" === typeof entry.name) {\n var JSCompiler_temp_const = info;\n a: {\n var name = entry.name,\n env = entry.env,\n location = entry.debugLocation;\n if (null != location) {\n var childStack = formatOwnerStack(location),\n idx = childStack.lastIndexOf(\"\\n\"),\n lastLine =\n -1 === idx ? childStack : childStack.slice(idx + 1);\n if (-1 !== lastLine.indexOf(name)) {\n var JSCompiler_inline_result = \"\\n\" + lastLine;\n break a;\n }\n }\n JSCompiler_inline_result = describeBuiltInComponentFrame(\n name + (env ? \" [\" + env + \"]\" : \"\")\n );\n }\n info = JSCompiler_temp_const + JSCompiler_inline_result;\n }\n }\n previous = workInProgress;\n workInProgress = workInProgress.return;\n } while (workInProgress);\n return info;\n } catch (x) {\n return \"\\nError generating stack: \" + x.message + \"\\n\" + x.stack;\n }\n }\n function describeFunctionComponentFrameWithoutLineNumber(fn) {\n return (fn = fn ? fn.displayName || fn.name : \"\")\n ? describeBuiltInComponentFrame(fn)\n : \"\";\n }\n function getCurrentFiberOwnerNameInDevOrNull() {\n if (null === current) return null;\n var owner = current._debugOwner;\n return null != owner ? getComponentNameFromOwner(owner) : null;\n }\n function getCurrentFiberStackInDev() {\n if (null === current) return \"\";\n var workInProgress = current;\n try {\n var info = \"\";\n 6 === workInProgress.tag && (workInProgress = workInProgress.return);\n switch (workInProgress.tag) {\n case 26:\n case 27:\n case 5:\n info += describeBuiltInComponentFrame(workInProgress.type);\n break;\n case 13:\n info += describeBuiltInComponentFrame(\"Suspense\");\n break;\n case 19:\n info += describeBuiltInComponentFrame(\"SuspenseList\");\n break;\n case 31:\n info += describeBuiltInComponentFrame(\"Activity\");\n break;\n case 30:\n case 0:\n case 15:\n case 1:\n workInProgress._debugOwner ||\n \"\" !== info ||\n (info += describeFunctionComponentFrameWithoutLineNumber(\n workInProgress.type\n ));\n break;\n case 11:\n workInProgress._debugOwner ||\n \"\" !== info ||\n (info += describeFunctionComponentFrameWithoutLineNumber(\n workInProgress.type.render\n ));\n }\n for (; workInProgress; )\n if (\"number\" === typeof workInProgress.tag) {\n var fiber = workInProgress;\n workInProgress = fiber._debugOwner;\n var debugStack = fiber._debugStack;\n workInProgress &&\n debugStack &&\n (\"string\" !== typeof debugStack &&\n (fiber._debugStack = debugStack = formatOwnerStack(debugStack)),\n \"\" !== debugStack && (info += \"\\n\" + debugStack));\n } else if (null != workInProgress.debugStack) {\n var ownerStack = workInProgress.debugStack;\n (workInProgress = workInProgress.owner) &&\n ownerStack &&\n (info += \"\\n\" + formatOwnerStack(ownerStack));\n } else break;\n var JSCompiler_inline_result = info;\n } catch (x) {\n JSCompiler_inline_result =\n \"\\nError generating stack: \" + x.message + \"\\n\" + x.stack;\n }\n return JSCompiler_inline_result;\n }\n function runWithFiberInDEV(fiber, callback, arg0, arg1, arg2, arg3, arg4) {\n var previousFiber = current;\n setCurrentFiber(fiber);\n try {\n return null !== fiber && fiber._debugTask\n ? fiber._debugTask.run(\n callback.bind(null, arg0, arg1, arg2, arg3, arg4)\n )\n : callback(arg0, arg1, arg2, arg3, arg4);\n } finally {\n setCurrentFiber(previousFiber);\n }\n throw Error(\n \"runWithFiberInDEV should never be called in production. This is a bug in React.\"\n );\n }\n function setCurrentFiber(fiber) {\n ReactSharedInternals.getCurrentStack =\n null === fiber ? null : getCurrentFiberStackInDev;\n isRendering = !1;\n current = fiber;\n }\n function typeName(value) {\n return (\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\"\n );\n }\n function willCoercionThrow(value) {\n try {\n return testStringCoercion(value), !1;\n } catch (e) {\n return !0;\n }\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkAttributeStringCoercion(value, attributeName) {\n if (willCoercionThrow(value))\n return (\n console.error(\n \"The provided `%s` attribute is an unsupported type %s. This value must be coerced to a string before using it here.\",\n attributeName,\n typeName(value)\n ),\n testStringCoercion(value)\n );\n }\n function checkCSSPropertyStringCoercion(value, propName) {\n if (willCoercionThrow(value))\n return (\n console.error(\n \"The provided `%s` CSS property is an unsupported type %s. This value must be coerced to a string before using it here.\",\n propName,\n typeName(value)\n ),\n testStringCoercion(value)\n );\n }\n function checkFormFieldValueStringCoercion(value) {\n if (willCoercionThrow(value))\n return (\n console.error(\n \"Form field values (value, checked, defaultValue, or defaultChecked props) must be strings, not %s. This value must be coerced to a string before using it here.\",\n typeName(value)\n ),\n testStringCoercion(value)\n );\n }\n function injectInternals(internals) {\n if (\"undefined\" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) return !1;\n var hook = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n if (hook.isDisabled) return !0;\n if (!hook.supportsFiber)\n return (\n console.error(\n \"The installed version of React DevTools is too old and will not work with the current version of React. Please update React DevTools. https://react.dev/link/react-devtools\"\n ),\n !0\n );\n try {\n (rendererID = hook.inject(internals)), (injectedHook = hook);\n } catch (err) {\n console.error(\"React instrumentation encountered an error: %s.\", err);\n }\n return hook.checkDCE ? !0 : !1;\n }\n function setIsStrictModeForDevtools(newIsStrictMode) {\n \"function\" === typeof log$1 &&\n unstable_setDisableYieldValue(newIsStrictMode);\n if (injectedHook && \"function\" === typeof injectedHook.setStrictMode)\n try {\n injectedHook.setStrictMode(rendererID, newIsStrictMode);\n } catch (err) {\n hasLoggedError ||\n ((hasLoggedError = !0),\n console.error(\n \"React instrumentation encountered an error: %s\",\n err\n ));\n }\n }\n function injectProfilingHooks(profilingHooks) {\n injectedProfilingHooks = profilingHooks;\n }\n function markCommitStopped() {\n null !== injectedProfilingHooks &&\n \"function\" === typeof injectedProfilingHooks.markCommitStopped &&\n injectedProfilingHooks.markCommitStopped();\n }\n function markComponentRenderStarted(fiber) {\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentRenderStarted &&\n injectedProfilingHooks.markComponentRenderStarted(fiber);\n }\n function markComponentRenderStopped() {\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentRenderStopped &&\n injectedProfilingHooks.markComponentRenderStopped();\n }\n function markRenderStarted(lanes) {\n null !== injectedProfilingHooks &&\n \"function\" === typeof injectedProfilingHooks.markRenderStarted &&\n injectedProfilingHooks.markRenderStarted(lanes);\n }\n function markRenderStopped() {\n null !== injectedProfilingHooks &&\n \"function\" === typeof injectedProfilingHooks.markRenderStopped &&\n injectedProfilingHooks.markRenderStopped();\n }\n function markStateUpdateScheduled(fiber, lane) {\n null !== injectedProfilingHooks &&\n \"function\" === typeof injectedProfilingHooks.markStateUpdateScheduled &&\n injectedProfilingHooks.markStateUpdateScheduled(fiber, lane);\n }\n function clz32Fallback(x) {\n x >>>= 0;\n return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;\n }\n function getLabelForLane(lane) {\n if (lane & 1) return \"SyncHydrationLane\";\n if (lane & 2) return \"Sync\";\n if (lane & 4) return \"InputContinuousHydration\";\n if (lane & 8) return \"InputContinuous\";\n if (lane & 16) return \"DefaultHydration\";\n if (lane & 32) return \"Default\";\n if (lane & 128) return \"TransitionHydration\";\n if (lane & 4194048) return \"Transition\";\n if (lane & 62914560) return \"Retry\";\n if (lane & 67108864) return \"SelectiveHydration\";\n if (lane & 134217728) return \"IdleHydration\";\n if (lane & 268435456) return \"Idle\";\n if (lane & 536870912) return \"Offscreen\";\n if (lane & 1073741824) return \"Deferred\";\n }\n function getHighestPriorityLanes(lanes) {\n var pendingSyncLanes = lanes & 42;\n if (0 !== pendingSyncLanes) return pendingSyncLanes;\n switch (lanes & -lanes) {\n case 1:\n return 1;\n case 2:\n return 2;\n case 4:\n return 4;\n case 8:\n return 8;\n case 16:\n return 16;\n case 32:\n return 32;\n case 64:\n return 64;\n case 128:\n return 128;\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n return lanes & 4194048;\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n return lanes & 62914560;\n case 67108864:\n return 67108864;\n case 134217728:\n return 134217728;\n case 268435456:\n return 268435456;\n case 536870912:\n return 536870912;\n case 1073741824:\n return 0;\n default:\n return (\n console.error(\n \"Should have found matching lanes. This is a bug in React.\"\n ),\n lanes\n );\n }\n }\n function getNextLanes(root, wipLanes, rootHasPendingCommit) {\n var pendingLanes = root.pendingLanes;\n if (0 === pendingLanes) return 0;\n var nextLanes = 0,\n suspendedLanes = root.suspendedLanes,\n pingedLanes = root.pingedLanes;\n root = root.warmLanes;\n var nonIdlePendingLanes = pendingLanes & 134217727;\n 0 !== nonIdlePendingLanes\n ? ((pendingLanes = nonIdlePendingLanes & ~suspendedLanes),\n 0 !== pendingLanes\n ? (nextLanes = getHighestPriorityLanes(pendingLanes))\n : ((pingedLanes &= nonIdlePendingLanes),\n 0 !== pingedLanes\n ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n : rootHasPendingCommit ||\n ((rootHasPendingCommit = nonIdlePendingLanes & ~root),\n 0 !== rootHasPendingCommit &&\n (nextLanes =\n getHighestPriorityLanes(rootHasPendingCommit)))))\n : ((nonIdlePendingLanes = pendingLanes & ~suspendedLanes),\n 0 !== nonIdlePendingLanes\n ? (nextLanes = getHighestPriorityLanes(nonIdlePendingLanes))\n : 0 !== pingedLanes\n ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n : rootHasPendingCommit ||\n ((rootHasPendingCommit = pendingLanes & ~root),\n 0 !== rootHasPendingCommit &&\n (nextLanes = getHighestPriorityLanes(rootHasPendingCommit))));\n return 0 === nextLanes\n ? 0\n : 0 !== wipLanes &&\n wipLanes !== nextLanes &&\n 0 === (wipLanes & suspendedLanes) &&\n ((suspendedLanes = nextLanes & -nextLanes),\n (rootHasPendingCommit = wipLanes & -wipLanes),\n suspendedLanes >= rootHasPendingCommit ||\n (32 === suspendedLanes && 0 !== (rootHasPendingCommit & 4194048)))\n ? wipLanes\n : nextLanes;\n }\n function checkIfRootIsPrerendering(root, renderLanes) {\n return (\n 0 ===\n (root.pendingLanes &\n ~(root.suspendedLanes & ~root.pingedLanes) &\n renderLanes)\n );\n }\n function computeExpirationTime(lane, currentTime) {\n switch (lane) {\n case 1:\n case 2:\n case 4:\n case 8:\n case 64:\n return currentTime + 250;\n case 16:\n case 32:\n case 128:\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n return currentTime + 5e3;\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n return -1;\n case 67108864:\n case 134217728:\n case 268435456:\n case 536870912:\n case 1073741824:\n return -1;\n default:\n return (\n console.error(\n \"Should have found matching lanes. This is a bug in React.\"\n ),\n -1\n );\n }\n }\n function claimNextTransitionLane() {\n var lane = nextTransitionLane;\n nextTransitionLane <<= 1;\n 0 === (nextTransitionLane & 4194048) && (nextTransitionLane = 256);\n return lane;\n }\n function claimNextRetryLane() {\n var lane = nextRetryLane;\n nextRetryLane <<= 1;\n 0 === (nextRetryLane & 62914560) && (nextRetryLane = 4194304);\n return lane;\n }\n function createLaneMap(initial) {\n for (var laneMap = [], i = 0; 31 > i; i++) laneMap.push(initial);\n return laneMap;\n }\n function markRootUpdated$1(root, updateLane) {\n root.pendingLanes |= updateLane;\n 268435456 !== updateLane &&\n ((root.suspendedLanes = 0),\n (root.pingedLanes = 0),\n (root.warmLanes = 0));\n }\n function markRootFinished(\n root,\n finishedLanes,\n remainingLanes,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes\n ) {\n var previouslyPendingLanes = root.pendingLanes;\n root.pendingLanes = remainingLanes;\n root.suspendedLanes = 0;\n root.pingedLanes = 0;\n root.warmLanes = 0;\n root.expiredLanes &= remainingLanes;\n root.entangledLanes &= remainingLanes;\n root.errorRecoveryDisabledLanes &= remainingLanes;\n root.shellSuspendCounter = 0;\n var entanglements = root.entanglements,\n expirationTimes = root.expirationTimes,\n hiddenUpdates = root.hiddenUpdates;\n for (\n remainingLanes = previouslyPendingLanes & ~remainingLanes;\n 0 < remainingLanes;\n\n ) {\n var index = 31 - clz32(remainingLanes),\n lane = 1 << index;\n entanglements[index] = 0;\n expirationTimes[index] = -1;\n var hiddenUpdatesForLane = hiddenUpdates[index];\n if (null !== hiddenUpdatesForLane)\n for (\n hiddenUpdates[index] = null, index = 0;\n index < hiddenUpdatesForLane.length;\n index++\n ) {\n var update = hiddenUpdatesForLane[index];\n null !== update && (update.lane &= -536870913);\n }\n remainingLanes &= ~lane;\n }\n 0 !== spawnedLane && markSpawnedDeferredLane(root, spawnedLane, 0);\n 0 !== suspendedRetryLanes &&\n 0 === updatedLanes &&\n 0 !== root.tag &&\n (root.suspendedLanes |=\n suspendedRetryLanes & ~(previouslyPendingLanes & ~finishedLanes));\n }\n function markSpawnedDeferredLane(root, spawnedLane, entangledLanes) {\n root.pendingLanes |= spawnedLane;\n root.suspendedLanes &= ~spawnedLane;\n var spawnedLaneIndex = 31 - clz32(spawnedLane);\n root.entangledLanes |= spawnedLane;\n root.entanglements[spawnedLaneIndex] =\n root.entanglements[spawnedLaneIndex] |\n 1073741824 |\n (entangledLanes & 4194090);\n }\n function markRootEntangled(root, entangledLanes) {\n var rootEntangledLanes = (root.entangledLanes |= entangledLanes);\n for (root = root.entanglements; rootEntangledLanes; ) {\n var index = 31 - clz32(rootEntangledLanes),\n lane = 1 << index;\n (lane & entangledLanes) | (root[index] & entangledLanes) &&\n (root[index] |= entangledLanes);\n rootEntangledLanes &= ~lane;\n }\n }\n function getBumpedLaneForHydration(root, renderLanes) {\n var renderLane = renderLanes & -renderLanes;\n renderLane =\n 0 !== (renderLane & 42)\n ? 1\n : getBumpedLaneForHydrationByLane(renderLane);\n return 0 !== (renderLane & (root.suspendedLanes | renderLanes))\n ? 0\n : renderLane;\n }\n function getBumpedLaneForHydrationByLane(lane) {\n switch (lane) {\n case 2:\n lane = 1;\n break;\n case 8:\n lane = 4;\n break;\n case 32:\n lane = 16;\n break;\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n lane = 128;\n break;\n case 268435456:\n lane = 134217728;\n break;\n default:\n lane = 0;\n }\n return lane;\n }\n function addFiberToLanesMap(root, fiber, lanes) {\n if (isDevToolsPresent)\n for (root = root.pendingUpdatersLaneMap; 0 < lanes; ) {\n var index = 31 - clz32(lanes),\n lane = 1 << index;\n root[index].add(fiber);\n lanes &= ~lane;\n }\n }\n function movePendingFibersToMemoized(root, lanes) {\n if (isDevToolsPresent)\n for (\n var pendingUpdatersLaneMap = root.pendingUpdatersLaneMap,\n memoizedUpdaters = root.memoizedUpdaters;\n 0 < lanes;\n\n ) {\n var index = 31 - clz32(lanes);\n root = 1 << index;\n index = pendingUpdatersLaneMap[index];\n 0 < index.size &&\n (index.forEach(function (fiber) {\n var alternate = fiber.alternate;\n (null !== alternate && memoizedUpdaters.has(alternate)) ||\n memoizedUpdaters.add(fiber);\n }),\n index.clear());\n lanes &= ~root;\n }\n }\n function lanesToEventPriority(lanes) {\n lanes &= -lanes;\n return 0 !== DiscreteEventPriority && DiscreteEventPriority < lanes\n ? 0 !== ContinuousEventPriority && ContinuousEventPriority < lanes\n ? 0 !== (lanes & 134217727)\n ? DefaultEventPriority\n : IdleEventPriority\n : ContinuousEventPriority\n : DiscreteEventPriority;\n }\n function resolveUpdatePriority() {\n var updatePriority = ReactDOMSharedInternals.p;\n if (0 !== updatePriority) return updatePriority;\n updatePriority = window.event;\n return void 0 === updatePriority\n ? DefaultEventPriority\n : getEventPriority(updatePriority.type);\n }\n function runWithPriority(priority, fn) {\n var previousPriority = ReactDOMSharedInternals.p;\n try {\n return (ReactDOMSharedInternals.p = priority), fn();\n } finally {\n ReactDOMSharedInternals.p = previousPriority;\n }\n }\n function detachDeletedInstance(node) {\n delete node[internalInstanceKey];\n delete node[internalPropsKey];\n delete node[internalEventHandlersKey];\n delete node[internalEventHandlerListenersKey];\n delete node[internalEventHandlesSetKey];\n }\n function getClosestInstanceFromNode(targetNode) {\n var targetInst = targetNode[internalInstanceKey];\n if (targetInst) return targetInst;\n for (var parentNode = targetNode.parentNode; parentNode; ) {\n if (\n (targetInst =\n parentNode[internalContainerInstanceKey] ||\n parentNode[internalInstanceKey])\n ) {\n parentNode = targetInst.alternate;\n if (\n null !== targetInst.child ||\n (null !== parentNode && null !== parentNode.child)\n )\n for (\n targetNode = getParentHydrationBoundary(targetNode);\n null !== targetNode;\n\n ) {\n if ((parentNode = targetNode[internalInstanceKey]))\n return parentNode;\n targetNode = getParentHydrationBoundary(targetNode);\n }\n return targetInst;\n }\n targetNode = parentNode;\n parentNode = targetNode.parentNode;\n }\n return null;\n }\n function getInstanceFromNode(node) {\n if (\n (node = node[internalInstanceKey] || node[internalContainerInstanceKey])\n ) {\n var tag = node.tag;\n if (\n 5 === tag ||\n 6 === tag ||\n 13 === tag ||\n 31 === tag ||\n 26 === tag ||\n 27 === tag ||\n 3 === tag\n )\n return node;\n }\n return null;\n }\n function getNodeFromInstance(inst) {\n var tag = inst.tag;\n if (5 === tag || 26 === tag || 27 === tag || 6 === tag)\n return inst.stateNode;\n throw Error(\"getNodeFromInstance: Invalid argument.\");\n }\n function getResourcesFromRoot(root) {\n var resources = root[internalRootNodeResourcesKey];\n resources ||\n (resources = root[internalRootNodeResourcesKey] =\n { hoistableStyles: new Map(), hoistableScripts: new Map() });\n return resources;\n }\n function markNodeAsHoistable(node) {\n node[internalHoistableMarker] = !0;\n }\n function registerTwoPhaseEvent(registrationName, dependencies) {\n registerDirectEvent(registrationName, dependencies);\n registerDirectEvent(registrationName + \"Capture\", dependencies);\n }\n function registerDirectEvent(registrationName, dependencies) {\n registrationNameDependencies[registrationName] &&\n console.error(\n \"EventRegistry: More than one plugin attempted to publish the same registration name, `%s`.\",\n registrationName\n );\n registrationNameDependencies[registrationName] = dependencies;\n var lowerCasedName = registrationName.toLowerCase();\n possibleRegistrationNames[lowerCasedName] = registrationName;\n \"onDoubleClick\" === registrationName &&\n (possibleRegistrationNames.ondblclick = registrationName);\n for (\n registrationName = 0;\n registrationName < dependencies.length;\n registrationName++\n )\n allNativeEvents.add(dependencies[registrationName]);\n }\n function checkControlledValueProps(tagName, props) {\n hasReadOnlyValue[props.type] ||\n props.onChange ||\n props.onInput ||\n props.readOnly ||\n props.disabled ||\n null == props.value ||\n (\"select\" === tagName\n ? console.error(\n \"You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set `onChange`.\"\n )\n : console.error(\n \"You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`.\"\n ));\n props.onChange ||\n props.readOnly ||\n props.disabled ||\n null == props.checked ||\n console.error(\n \"You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`.\"\n );\n }\n function isAttributeNameSafe(attributeName) {\n if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))\n return !0;\n if (hasOwnProperty.call(illegalAttributeNameCache, attributeName))\n return !1;\n if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))\n return (validatedAttributeNameCache[attributeName] = !0);\n illegalAttributeNameCache[attributeName] = !0;\n console.error(\"Invalid attribute name: `%s`\", attributeName);\n return !1;\n }\n function getValueForAttributeOnCustomComponent(node, name, expected) {\n if (isAttributeNameSafe(name)) {\n if (!node.hasAttribute(name)) {\n switch (typeof expected) {\n case \"symbol\":\n case \"object\":\n return expected;\n case \"function\":\n return expected;\n case \"boolean\":\n if (!1 === expected) return expected;\n }\n return void 0 === expected ? void 0 : null;\n }\n node = node.getAttribute(name);\n if (\"\" === node && !0 === expected) return !0;\n checkAttributeStringCoercion(expected, name);\n return node === \"\" + expected ? expected : node;\n }\n }\n function setValueForAttribute(node, name, value) {\n if (isAttributeNameSafe(name))\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n node.removeAttribute(name);\n return;\n case \"boolean\":\n var prefix = name.toLowerCase().slice(0, 5);\n if (\"data-\" !== prefix && \"aria-\" !== prefix) {\n node.removeAttribute(name);\n return;\n }\n }\n checkAttributeStringCoercion(value, name);\n node.setAttribute(name, \"\" + value);\n }\n }\n function setValueForKnownAttribute(node, name, value) {\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n node.removeAttribute(name);\n return;\n }\n checkAttributeStringCoercion(value, name);\n node.setAttribute(name, \"\" + value);\n }\n }\n function setValueForNamespacedAttribute(node, namespace, name, value) {\n if (null === value) node.removeAttribute(name);\n else {\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n node.removeAttribute(name);\n return;\n }\n checkAttributeStringCoercion(value, name);\n node.setAttributeNS(namespace, name, \"\" + value);\n }\n }\n function getToStringValue(value) {\n switch (typeof value) {\n case \"bigint\":\n case \"boolean\":\n case \"number\":\n case \"string\":\n case \"undefined\":\n return value;\n case \"object\":\n return checkFormFieldValueStringCoercion(value), value;\n default:\n return \"\";\n }\n }\n function isCheckable(elem) {\n var type = elem.type;\n return (\n (elem = elem.nodeName) &&\n \"input\" === elem.toLowerCase() &&\n (\"checkbox\" === type || \"radio\" === type)\n );\n }\n function trackValueOnNode(node, valueField, currentValue) {\n var descriptor = Object.getOwnPropertyDescriptor(\n node.constructor.prototype,\n valueField\n );\n if (\n !node.hasOwnProperty(valueField) &&\n \"undefined\" !== typeof descriptor &&\n \"function\" === typeof descriptor.get &&\n \"function\" === typeof descriptor.set\n ) {\n var get = descriptor.get,\n set = descriptor.set;\n Object.defineProperty(node, valueField, {\n configurable: !0,\n get: function () {\n return get.call(this);\n },\n set: function (value) {\n checkFormFieldValueStringCoercion(value);\n currentValue = \"\" + value;\n set.call(this, value);\n }\n });\n Object.defineProperty(node, valueField, {\n enumerable: descriptor.enumerable\n });\n return {\n getValue: function () {\n return currentValue;\n },\n setValue: function (value) {\n checkFormFieldValueStringCoercion(value);\n currentValue = \"\" + value;\n },\n stopTracking: function () {\n node._valueTracker = null;\n delete node[valueField];\n }\n };\n }\n }\n function track(node) {\n if (!node._valueTracker) {\n var valueField = isCheckable(node) ? \"checked\" : \"value\";\n node._valueTracker = trackValueOnNode(\n node,\n valueField,\n \"\" + node[valueField]\n );\n }\n }\n function updateValueIfChanged(node) {\n if (!node) return !1;\n var tracker = node._valueTracker;\n if (!tracker) return !0;\n var lastValue = tracker.getValue();\n var value = \"\";\n node &&\n (value = isCheckable(node)\n ? node.checked\n ? \"true\"\n : \"false\"\n : node.value);\n node = value;\n return node !== lastValue ? (tracker.setValue(node), !0) : !1;\n }\n function getActiveElement(doc) {\n doc = doc || (\"undefined\" !== typeof document ? document : void 0);\n if (\"undefined\" === typeof doc) return null;\n try {\n return doc.activeElement || doc.body;\n } catch (e) {\n return doc.body;\n }\n }\n function escapeSelectorAttributeValueInsideDoubleQuotes(value) {\n return value.replace(\n escapeSelectorAttributeValueInsideDoubleQuotesRegex,\n function (ch) {\n return \"\\\\\" + ch.charCodeAt(0).toString(16) + \" \";\n }\n );\n }\n function validateInputProps(element, props) {\n void 0 === props.checked ||\n void 0 === props.defaultChecked ||\n didWarnCheckedDefaultChecked ||\n (console.error(\n \"%s contains an input of type %s with both checked and defaultChecked props. Input elements must be either controlled or uncontrolled (specify either the checked prop, or the defaultChecked prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components\",\n getCurrentFiberOwnerNameInDevOrNull() || \"A component\",\n props.type\n ),\n (didWarnCheckedDefaultChecked = !0));\n void 0 === props.value ||\n void 0 === props.defaultValue ||\n didWarnValueDefaultValue$1 ||\n (console.error(\n \"%s contains an input of type %s with both value and defaultValue props. Input elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components\",\n getCurrentFiberOwnerNameInDevOrNull() || \"A component\",\n props.type\n ),\n (didWarnValueDefaultValue$1 = !0));\n }\n function updateInput(\n element,\n value,\n defaultValue,\n lastDefaultValue,\n checked,\n defaultChecked,\n type,\n name\n ) {\n element.name = \"\";\n null != type &&\n \"function\" !== typeof type &&\n \"symbol\" !== typeof type &&\n \"boolean\" !== typeof type\n ? (checkAttributeStringCoercion(type, \"type\"), (element.type = type))\n : element.removeAttribute(\"type\");\n if (null != value)\n if (\"number\" === type) {\n if ((0 === value && \"\" === element.value) || element.value != value)\n element.value = \"\" + getToStringValue(value);\n } else\n element.value !== \"\" + getToStringValue(value) &&\n (element.value = \"\" + getToStringValue(value));\n else\n (\"submit\" !== type && \"reset\" !== type) ||\n element.removeAttribute(\"value\");\n null != value\n ? setDefaultValue(element, type, getToStringValue(value))\n : null != defaultValue\n ? setDefaultValue(element, type, getToStringValue(defaultValue))\n : null != lastDefaultValue && element.removeAttribute(\"value\");\n null == checked &&\n null != defaultChecked &&\n (element.defaultChecked = !!defaultChecked);\n null != checked &&\n (element.checked =\n checked &&\n \"function\" !== typeof checked &&\n \"symbol\" !== typeof checked);\n null != name &&\n \"function\" !== typeof name &&\n \"symbol\" !== typeof name &&\n \"boolean\" !== typeof name\n ? (checkAttributeStringCoercion(name, \"name\"),\n (element.name = \"\" + getToStringValue(name)))\n : element.removeAttribute(\"name\");\n }\n function initInput(\n element,\n value,\n defaultValue,\n checked,\n defaultChecked,\n type,\n name,\n isHydrating\n ) {\n null != type &&\n \"function\" !== typeof type &&\n \"symbol\" !== typeof type &&\n \"boolean\" !== typeof type &&\n (checkAttributeStringCoercion(type, \"type\"), (element.type = type));\n if (null != value || null != defaultValue) {\n if (\n !(\n (\"submit\" !== type && \"reset\" !== type) ||\n (void 0 !== value && null !== value)\n )\n ) {\n track(element);\n return;\n }\n defaultValue =\n null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n value = null != value ? \"\" + getToStringValue(value) : defaultValue;\n isHydrating || value === element.value || (element.value = value);\n element.defaultValue = value;\n }\n checked = null != checked ? checked : defaultChecked;\n checked =\n \"function\" !== typeof checked &&\n \"symbol\" !== typeof checked &&\n !!checked;\n element.checked = isHydrating ? element.checked : !!checked;\n element.defaultChecked = !!checked;\n null != name &&\n \"function\" !== typeof name &&\n \"symbol\" !== typeof name &&\n \"boolean\" !== typeof name &&\n (checkAttributeStringCoercion(name, \"name\"), (element.name = name));\n track(element);\n }\n function setDefaultValue(node, type, value) {\n (\"number\" === type && getActiveElement(node.ownerDocument) === node) ||\n node.defaultValue === \"\" + value ||\n (node.defaultValue = \"\" + value);\n }\n function validateOptionProps(element, props) {\n null == props.value &&\n (\"object\" === typeof props.children && null !== props.children\n ? React.Children.forEach(props.children, function (child) {\n null == child ||\n \"string\" === typeof child ||\n \"number\" === typeof child ||\n \"bigint\" === typeof child ||\n didWarnInvalidChild ||\n ((didWarnInvalidChild = !0),\n console.error(\n \"Cannot infer the option value of complex children. Pass a `value` prop or use a plain string as children to <option>.\"\n ));\n })\n : null == props.dangerouslySetInnerHTML ||\n didWarnInvalidInnerHTML ||\n ((didWarnInvalidInnerHTML = !0),\n console.error(\n \"Pass a `value` prop if you set dangerouslyInnerHTML so React knows which value should be selected.\"\n )));\n null == props.selected ||\n didWarnSelectedSetOnOption ||\n (console.error(\n \"Use the `defaultValue` or `value` props on <select> instead of setting `selected` on <option>.\"\n ),\n (didWarnSelectedSetOnOption = !0));\n }\n function getDeclarationErrorAddendum() {\n var ownerName = getCurrentFiberOwnerNameInDevOrNull();\n return ownerName\n ? \"\\n\\nCheck the render method of `\" + ownerName + \"`.\"\n : \"\";\n }\n function updateOptions(node, multiple, propValue, setDefaultSelected) {\n node = node.options;\n if (multiple) {\n multiple = {};\n for (var i = 0; i < propValue.length; i++)\n multiple[\"$\" + propValue[i]] = !0;\n for (propValue = 0; propValue < node.length; propValue++)\n (i = multiple.hasOwnProperty(\"$\" + node[propValue].value)),\n node[propValue].selected !== i && (node[propValue].selected = i),\n i && setDefaultSelected && (node[propValue].defaultSelected = !0);\n } else {\n propValue = \"\" + getToStringValue(propValue);\n multiple = null;\n for (i = 0; i < node.length; i++) {\n if (node[i].value === propValue) {\n node[i].selected = !0;\n setDefaultSelected && (node[i].defaultSelected = !0);\n return;\n }\n null !== multiple || node[i].disabled || (multiple = node[i]);\n }\n null !== multiple && (multiple.selected = !0);\n }\n }\n function validateSelectProps(element, props) {\n for (element = 0; element < valuePropNames.length; element++) {\n var propName = valuePropNames[element];\n if (null != props[propName]) {\n var propNameIsArray = isArrayImpl(props[propName]);\n props.multiple && !propNameIsArray\n ? console.error(\n \"The `%s` prop supplied to <select> must be an array if `multiple` is true.%s\",\n propName,\n getDeclarationErrorAddendum()\n )\n : !props.multiple &&\n propNameIsArray &&\n console.error(\n \"The `%s` prop supplied to <select> must be a scalar value if `multiple` is false.%s\",\n propName,\n getDeclarationErrorAddendum()\n );\n }\n }\n void 0 === props.value ||\n void 0 === props.defaultValue ||\n didWarnValueDefaultValue ||\n (console.error(\n \"Select elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled select element and remove one of these props. More info: https://react.dev/link/controlled-components\"\n ),\n (didWarnValueDefaultValue = !0));\n }\n function validateTextareaProps(element, props) {\n void 0 === props.value ||\n void 0 === props.defaultValue ||\n didWarnValDefaultVal ||\n (console.error(\n \"%s contains a textarea with both value and defaultValue props. Textarea elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled textarea and remove one of these props. More info: https://react.dev/link/controlled-components\",\n getCurrentFiberOwnerNameInDevOrNull() || \"A component\"\n ),\n (didWarnValDefaultVal = !0));\n null != props.children &&\n null == props.value &&\n console.error(\n \"Use the `defaultValue` or `value` props instead of setting children on <textarea>.\"\n );\n }\n function updateTextarea(element, value, defaultValue) {\n if (\n null != value &&\n ((value = \"\" + getToStringValue(value)),\n value !== element.value && (element.value = value),\n null == defaultValue)\n ) {\n element.defaultValue !== value && (element.defaultValue = value);\n return;\n }\n element.defaultValue =\n null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n }\n function initTextarea(element, value, defaultValue, children) {\n if (null == value) {\n if (null != children) {\n if (null != defaultValue)\n throw Error(\n \"If you supply `defaultValue` on a <textarea>, do not pass children.\"\n );\n if (isArrayImpl(children)) {\n if (1 < children.length)\n throw Error(\"<textarea> can only have at most one child.\");\n children = children[0];\n }\n defaultValue = children;\n }\n null == defaultValue && (defaultValue = \"\");\n value = defaultValue;\n }\n defaultValue = getToStringValue(value);\n element.defaultValue = defaultValue;\n children = element.textContent;\n children === defaultValue &&\n \"\" !== children &&\n null !== children &&\n (element.value = children);\n track(element);\n }\n function findNotableNode(node, indent) {\n return void 0 === node.serverProps &&\n 0 === node.serverTail.length &&\n 1 === node.children.length &&\n 3 < node.distanceFromLeaf &&\n node.distanceFromLeaf > 15 - indent\n ? findNotableNode(node.children[0], indent)\n : node;\n }\n function indentation(indent) {\n return \" \" + \" \".repeat(indent);\n }\n function added(indent) {\n return \"+ \" + \" \".repeat(indent);\n }\n function removed(indent) {\n return \"- \" + \" \".repeat(indent);\n }\n function describeFiberType(fiber) {\n switch (fiber.tag) {\n case 26:\n case 27:\n case 5:\n return fiber.type;\n case 16:\n return \"Lazy\";\n case 31:\n return \"Activity\";\n case 13:\n return \"Suspense\";\n case 19:\n return \"SuspenseList\";\n case 0:\n case 15:\n return (fiber = fiber.type), fiber.displayName || fiber.name || null;\n case 11:\n return (\n (fiber = fiber.type.render), fiber.displayName || fiber.name || null\n );\n case 1:\n return (fiber = fiber.type), fiber.displayName || fiber.name || null;\n default:\n return null;\n }\n }\n function describeTextNode(content, maxLength) {\n return needsEscaping.test(content)\n ? ((content = JSON.stringify(content)),\n content.length > maxLength - 2\n ? 8 > maxLength\n ? '{\"...\"}'\n : \"{\" + content.slice(0, maxLength - 7) + '...\"}'\n : \"{\" + content + \"}\")\n : content.length > maxLength\n ? 5 > maxLength\n ? '{\"...\"}'\n : content.slice(0, maxLength - 3) + \"...\"\n : content;\n }\n function describeTextDiff(clientText, serverProps, indent) {\n var maxLength = 120 - 2 * indent;\n if (null === serverProps)\n return added(indent) + describeTextNode(clientText, maxLength) + \"\\n\";\n if (\"string\" === typeof serverProps) {\n for (\n var firstDiff = 0;\n firstDiff < serverProps.length &&\n firstDiff < clientText.length &&\n serverProps.charCodeAt(firstDiff) ===\n clientText.charCodeAt(firstDiff);\n firstDiff++\n );\n firstDiff > maxLength - 8 &&\n 10 < firstDiff &&\n ((clientText = \"...\" + clientText.slice(firstDiff - 8)),\n (serverProps = \"...\" + serverProps.slice(firstDiff - 8)));\n return (\n added(indent) +\n describeTextNode(clientText, maxLength) +\n \"\\n\" +\n removed(indent) +\n describeTextNode(serverProps, maxLength) +\n \"\\n\"\n );\n }\n return (\n indentation(indent) + describeTextNode(clientText, maxLength) + \"\\n\"\n );\n }\n function objectName(object) {\n return Object.prototype.toString\n .call(object)\n .replace(/^\\[object (.*)\\]$/, function (m, p0) {\n return p0;\n });\n }\n function describeValue(value, maxLength) {\n switch (typeof value) {\n case \"string\":\n return (\n (value = JSON.stringify(value)),\n value.length > maxLength\n ? 5 > maxLength\n ? '\"...\"'\n : value.slice(0, maxLength - 4) + '...\"'\n : value\n );\n case \"object\":\n if (null === value) return \"null\";\n if (isArrayImpl(value)) return \"[...]\";\n if (value.$$typeof === REACT_ELEMENT_TYPE)\n return (maxLength = getComponentNameFromType(value.type))\n ? \"<\" + maxLength + \">\"\n : \"<...>\";\n var name = objectName(value);\n if (\"Object\" === name) {\n name = \"\";\n maxLength -= 2;\n for (var propName in value)\n if (value.hasOwnProperty(propName)) {\n var jsonPropName = JSON.stringify(propName);\n jsonPropName !== '\"' + propName + '\"' &&\n (propName = jsonPropName);\n maxLength -= propName.length - 2;\n jsonPropName = describeValue(\n value[propName],\n 15 > maxLength ? maxLength : 15\n );\n maxLength -= jsonPropName.length;\n if (0 > maxLength) {\n name += \"\" === name ? \"...\" : \", ...\";\n break;\n }\n name +=\n (\"\" === name ? \"\" : \",\") + propName + \":\" + jsonPropName;\n }\n return \"{\" + name + \"}\";\n }\n return name;\n case \"function\":\n return (maxLength = value.displayName || value.name)\n ? \"function \" + maxLength\n : \"function\";\n default:\n return String(value);\n }\n }\n function describePropValue(value, maxLength) {\n return \"string\" !== typeof value || needsEscaping.test(value)\n ? \"{\" + describeValue(value, maxLength - 2) + \"}\"\n : value.length > maxLength - 2\n ? 5 > maxLength\n ? '\"...\"'\n : '\"' + value.slice(0, maxLength - 5) + '...\"'\n : '\"' + value + '\"';\n }\n function describeExpandedElement(type, props, rowPrefix) {\n var remainingRowLength = 120 - rowPrefix.length - type.length,\n properties = [],\n propName;\n for (propName in props)\n if (props.hasOwnProperty(propName) && \"children\" !== propName) {\n var propValue = describePropValue(\n props[propName],\n 120 - rowPrefix.length - propName.length - 1\n );\n remainingRowLength -= propName.length + propValue.length + 2;\n properties.push(propName + \"=\" + propValue);\n }\n return 0 === properties.length\n ? rowPrefix + \"<\" + type + \">\\n\"\n : 0 < remainingRowLength\n ? rowPrefix + \"<\" + type + \" \" + properties.join(\" \") + \">\\n\"\n : rowPrefix +\n \"<\" +\n type +\n \"\\n\" +\n rowPrefix +\n \" \" +\n properties.join(\"\\n\" + rowPrefix + \" \") +\n \"\\n\" +\n rowPrefix +\n \">\\n\";\n }\n function describePropertiesDiff(clientObject, serverObject, indent) {\n var properties = \"\",\n remainingServerProperties = assign({}, serverObject),\n propName;\n for (propName in clientObject)\n if (clientObject.hasOwnProperty(propName)) {\n delete remainingServerProperties[propName];\n var maxLength = 120 - 2 * indent - propName.length - 2,\n clientPropValue = describeValue(clientObject[propName], maxLength);\n serverObject.hasOwnProperty(propName)\n ? ((maxLength = describeValue(serverObject[propName], maxLength)),\n (properties +=\n added(indent) + propName + \": \" + clientPropValue + \"\\n\"),\n (properties +=\n removed(indent) + propName + \": \" + maxLength + \"\\n\"))\n : (properties +=\n added(indent) + propName + \": \" + clientPropValue + \"\\n\");\n }\n for (var _propName in remainingServerProperties)\n remainingServerProperties.hasOwnProperty(_propName) &&\n ((clientObject = describeValue(\n remainingServerProperties[_propName],\n 120 - 2 * indent - _propName.length - 2\n )),\n (properties +=\n removed(indent) + _propName + \": \" + clientObject + \"\\n\"));\n return properties;\n }\n function describeElementDiff(type, clientProps, serverProps, indent) {\n var content = \"\",\n serverPropNames = new Map();\n for (propName$jscomp$0 in serverProps)\n serverProps.hasOwnProperty(propName$jscomp$0) &&\n serverPropNames.set(\n propName$jscomp$0.toLowerCase(),\n propName$jscomp$0\n );\n if (1 === serverPropNames.size && serverPropNames.has(\"children\"))\n content += describeExpandedElement(\n type,\n clientProps,\n indentation(indent)\n );\n else {\n for (var _propName2 in clientProps)\n if (\n clientProps.hasOwnProperty(_propName2) &&\n \"children\" !== _propName2\n ) {\n var maxLength$jscomp$0 =\n 120 - 2 * (indent + 1) - _propName2.length - 1,\n serverPropName = serverPropNames.get(_propName2.toLowerCase());\n if (void 0 !== serverPropName) {\n serverPropNames.delete(_propName2.toLowerCase());\n var propName$jscomp$0 = clientProps[_propName2];\n serverPropName = serverProps[serverPropName];\n var clientPropValue = describePropValue(\n propName$jscomp$0,\n maxLength$jscomp$0\n );\n maxLength$jscomp$0 = describePropValue(\n serverPropName,\n maxLength$jscomp$0\n );\n \"object\" === typeof propName$jscomp$0 &&\n null !== propName$jscomp$0 &&\n \"object\" === typeof serverPropName &&\n null !== serverPropName &&\n \"Object\" === objectName(propName$jscomp$0) &&\n \"Object\" === objectName(serverPropName) &&\n (2 < Object.keys(propName$jscomp$0).length ||\n 2 < Object.keys(serverPropName).length ||\n -1 < clientPropValue.indexOf(\"...\") ||\n -1 < maxLength$jscomp$0.indexOf(\"...\"))\n ? (content +=\n indentation(indent + 1) +\n _propName2 +\n \"={{\\n\" +\n describePropertiesDiff(\n propName$jscomp$0,\n serverPropName,\n indent + 2\n ) +\n indentation(indent + 1) +\n \"}}\\n\")\n : ((content +=\n added(indent + 1) +\n _propName2 +\n \"=\" +\n clientPropValue +\n \"\\n\"),\n (content +=\n removed(indent + 1) +\n _propName2 +\n \"=\" +\n maxLength$jscomp$0 +\n \"\\n\"));\n } else\n content +=\n indentation(indent + 1) +\n _propName2 +\n \"=\" +\n describePropValue(clientProps[_propName2], maxLength$jscomp$0) +\n \"\\n\";\n }\n serverPropNames.forEach(function (propName) {\n if (\"children\" !== propName) {\n var maxLength = 120 - 2 * (indent + 1) - propName.length - 1;\n content +=\n removed(indent + 1) +\n propName +\n \"=\" +\n describePropValue(serverProps[propName], maxLength) +\n \"\\n\";\n }\n });\n content =\n \"\" === content\n ? indentation(indent) + \"<\" + type + \">\\n\"\n : indentation(indent) +\n \"<\" +\n type +\n \"\\n\" +\n content +\n indentation(indent) +\n \">\\n\";\n }\n type = serverProps.children;\n clientProps = clientProps.children;\n if (\n \"string\" === typeof type ||\n \"number\" === typeof type ||\n \"bigint\" === typeof type\n ) {\n serverPropNames = \"\";\n if (\n \"string\" === typeof clientProps ||\n \"number\" === typeof clientProps ||\n \"bigint\" === typeof clientProps\n )\n serverPropNames = \"\" + clientProps;\n content += describeTextDiff(serverPropNames, \"\" + type, indent + 1);\n } else if (\n \"string\" === typeof clientProps ||\n \"number\" === typeof clientProps ||\n \"bigint\" === typeof clientProps\n )\n content =\n null == type\n ? content + describeTextDiff(\"\" + clientProps, null, indent + 1)\n : content + describeTextDiff(\"\" + clientProps, void 0, indent + 1);\n return content;\n }\n function describeSiblingFiber(fiber, indent) {\n var type = describeFiberType(fiber);\n if (null === type) {\n type = \"\";\n for (fiber = fiber.child; fiber; )\n (type += describeSiblingFiber(fiber, indent)),\n (fiber = fiber.sibling);\n return type;\n }\n return indentation(indent) + \"<\" + type + \">\\n\";\n }\n function describeNode(node, indent) {\n var skipToNode = findNotableNode(node, indent);\n if (\n skipToNode !== node &&\n (1 !== node.children.length || node.children[0] !== skipToNode)\n )\n return (\n indentation(indent) + \"...\\n\" + describeNode(skipToNode, indent + 1)\n );\n skipToNode = \"\";\n var debugInfo = node.fiber._debugInfo;\n if (debugInfo)\n for (var i = 0; i < debugInfo.length; i++) {\n var serverComponentName = debugInfo[i].name;\n \"string\" === typeof serverComponentName &&\n ((skipToNode +=\n indentation(indent) + \"<\" + serverComponentName + \">\\n\"),\n indent++);\n }\n debugInfo = \"\";\n i = node.fiber.pendingProps;\n if (6 === node.fiber.tag)\n (debugInfo = describeTextDiff(i, node.serverProps, indent)), indent++;\n else if (\n ((serverComponentName = describeFiberType(node.fiber)),\n null !== serverComponentName)\n )\n if (void 0 === node.serverProps) {\n debugInfo = indent;\n var maxLength = 120 - 2 * debugInfo - serverComponentName.length - 2,\n content = \"\";\n for (propName in i)\n if (i.hasOwnProperty(propName) && \"children\" !== propName) {\n var propValue = describePropValue(i[propName], 15);\n maxLength -= propName.length + propValue.length + 2;\n if (0 > maxLength) {\n content += \" ...\";\n break;\n }\n content += \" \" + propName + \"=\" + propValue;\n }\n debugInfo =\n indentation(debugInfo) +\n \"<\" +\n serverComponentName +\n content +\n \">\\n\";\n indent++;\n } else\n null === node.serverProps\n ? ((debugInfo = describeExpandedElement(\n serverComponentName,\n i,\n added(indent)\n )),\n indent++)\n : \"string\" === typeof node.serverProps\n ? console.error(\n \"Should not have matched a non HostText fiber to a Text node. This is a bug in React.\"\n )\n : ((debugInfo = describeElementDiff(\n serverComponentName,\n i,\n node.serverProps,\n indent\n )),\n indent++);\n var propName = \"\";\n i = node.fiber.child;\n for (\n serverComponentName = 0;\n i && serverComponentName < node.children.length;\n\n )\n (maxLength = node.children[serverComponentName]),\n maxLength.fiber === i\n ? ((propName += describeNode(maxLength, indent)),\n serverComponentName++)\n : (propName += describeSiblingFiber(i, indent)),\n (i = i.sibling);\n i &&\n 0 < node.children.length &&\n (propName += indentation(indent) + \"...\\n\");\n i = node.serverTail;\n null === node.serverProps && indent--;\n for (node = 0; node < i.length; node++)\n (serverComponentName = i[node]),\n (propName =\n \"string\" === typeof serverComponentName\n ? propName +\n (removed(indent) +\n describeTextNode(serverComponentName, 120 - 2 * indent) +\n \"\\n\")\n : propName +\n describeExpandedElement(\n serverComponentName.type,\n serverComponentName.props,\n removed(indent)\n ));\n return skipToNode + debugInfo + propName;\n }\n function describeDiff(rootNode) {\n try {\n return \"\\n\\n\" + describeNode(rootNode, 0);\n } catch (x) {\n return \"\";\n }\n }\n function describeAncestors(ancestor, child, props) {\n for (var fiber = child, node = null, distanceFromLeaf = 0; fiber; )\n fiber === ancestor && (distanceFromLeaf = 0),\n (node = {\n fiber: fiber,\n children: null !== node ? [node] : [],\n serverProps:\n fiber === child ? props : fiber === ancestor ? null : void 0,\n serverTail: [],\n distanceFromLeaf: distanceFromLeaf\n }),\n distanceFromLeaf++,\n (fiber = fiber.return);\n return null !== node ? describeDiff(node).replaceAll(/^[+-]/gm, \">\") : \"\";\n }\n function updatedAncestorInfoDev(oldInfo, tag) {\n var ancestorInfo = assign({}, oldInfo || emptyAncestorInfoDev),\n info = { tag: tag };\n -1 !== inScopeTags.indexOf(tag) &&\n ((ancestorInfo.aTagInScope = null),\n (ancestorInfo.buttonTagInScope = null),\n (ancestorInfo.nobrTagInScope = null));\n -1 !== buttonScopeTags.indexOf(tag) &&\n (ancestorInfo.pTagInButtonScope = null);\n -1 !== specialTags.indexOf(tag) &&\n \"address\" !== tag &&\n \"div\" !== tag &&\n \"p\" !== tag &&\n ((ancestorInfo.listItemTagAutoclosing = null),\n (ancestorInfo.dlItemTagAutoclosing = null));\n ancestorInfo.current = info;\n \"form\" === tag && (ancestorInfo.formTag = info);\n \"a\" === tag && (ancestorInfo.aTagInScope = info);\n \"button\" === tag && (ancestorInfo.buttonTagInScope = info);\n \"nobr\" === tag && (ancestorInfo.nobrTagInScope = info);\n \"p\" === tag && (ancestorInfo.pTagInButtonScope = info);\n \"li\" === tag && (ancestorInfo.listItemTagAutoclosing = info);\n if (\"dd\" === tag || \"dt\" === tag)\n ancestorInfo.dlItemTagAutoclosing = info;\n \"#document\" === tag || \"html\" === tag\n ? (ancestorInfo.containerTagInScope = null)\n : ancestorInfo.containerTagInScope ||\n (ancestorInfo.containerTagInScope = info);\n null !== oldInfo ||\n (\"#document\" !== tag && \"html\" !== tag && \"body\" !== tag)\n ? !0 === ancestorInfo.implicitRootScope &&\n (ancestorInfo.implicitRootScope = !1)\n : (ancestorInfo.implicitRootScope = !0);\n return ancestorInfo;\n }\n function isTagValidWithParent(tag, parentTag, implicitRootScope) {\n switch (parentTag) {\n case \"select\":\n return (\n \"hr\" === tag ||\n \"option\" === tag ||\n \"optgroup\" === tag ||\n \"script\" === tag ||\n \"template\" === tag ||\n \"#text\" === tag\n );\n case \"optgroup\":\n return \"option\" === tag || \"#text\" === tag;\n case \"option\":\n return \"#text\" === tag;\n case \"tr\":\n return (\n \"th\" === tag ||\n \"td\" === tag ||\n \"style\" === tag ||\n \"script\" === tag ||\n \"template\" === tag\n );\n case \"tbody\":\n case \"thead\":\n case \"tfoot\":\n return (\n \"tr\" === tag ||\n \"style\" === tag ||\n \"script\" === tag ||\n \"template\" === tag\n );\n case \"colgroup\":\n return \"col\" === tag || \"template\" === tag;\n case \"table\":\n return (\n \"caption\" === tag ||\n \"colgroup\" === tag ||\n \"tbody\" === tag ||\n \"tfoot\" === tag ||\n \"thead\" === tag ||\n \"style\" === tag ||\n \"script\" === tag ||\n \"template\" === tag\n );\n case \"head\":\n return (\n \"base\" === tag ||\n \"basefont\" === tag ||\n \"bgsound\" === tag ||\n \"link\" === tag ||\n \"meta\" === tag ||\n \"title\" === tag ||\n \"noscript\" === tag ||\n \"noframes\" === tag ||\n \"style\" === tag ||\n \"script\" === tag ||\n \"template\" === tag\n );\n case \"html\":\n if (implicitRootScope) break;\n return \"head\" === tag || \"body\" === tag || \"frameset\" === tag;\n case \"frameset\":\n return \"frame\" === tag;\n case \"#document\":\n if (!implicitRootScope) return \"html\" === tag;\n }\n switch (tag) {\n case \"h1\":\n case \"h2\":\n case \"h3\":\n case \"h4\":\n case \"h5\":\n case \"h6\":\n return (\n \"h1\" !== parentTag &&\n \"h2\" !== parentTag &&\n \"h3\" !== parentTag &&\n \"h4\" !== parentTag &&\n \"h5\" !== parentTag &&\n \"h6\" !== parentTag\n );\n case \"rp\":\n case \"rt\":\n return -1 === impliedEndTags.indexOf(parentTag);\n case \"caption\":\n case \"col\":\n case \"colgroup\":\n case \"frameset\":\n case \"frame\":\n case \"tbody\":\n case \"td\":\n case \"tfoot\":\n case \"th\":\n case \"thead\":\n case \"tr\":\n return null == parentTag;\n case \"head\":\n return implicitRootScope || null === parentTag;\n case \"html\":\n return (\n (implicitRootScope && \"#document\" === parentTag) ||\n null === parentTag\n );\n case \"body\":\n return (\n (implicitRootScope &&\n (\"#document\" === parentTag || \"html\" === parentTag)) ||\n null === parentTag\n );\n }\n return !0;\n }\n function findInvalidAncestorForTag(tag, ancestorInfo) {\n switch (tag) {\n case \"address\":\n case \"article\":\n case \"aside\":\n case \"blockquote\":\n case \"center\":\n case \"details\":\n case \"dialog\":\n case \"dir\":\n case \"div\":\n case \"dl\":\n case \"fieldset\":\n case \"figcaption\":\n case \"figure\":\n case \"footer\":\n case \"header\":\n case \"hgroup\":\n case \"main\":\n case \"menu\":\n case \"nav\":\n case \"ol\":\n case \"p\":\n case \"section\":\n case \"summary\":\n case \"ul\":\n case \"pre\":\n case \"listing\":\n case \"table\":\n case \"hr\":\n case \"xmp\":\n case \"h1\":\n case \"h2\":\n case \"h3\":\n case \"h4\":\n case \"h5\":\n case \"h6\":\n return ancestorInfo.pTagInButtonScope;\n case \"form\":\n return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope;\n case \"li\":\n return ancestorInfo.listItemTagAutoclosing;\n case \"dd\":\n case \"dt\":\n return ancestorInfo.dlItemTagAutoclosing;\n case \"button\":\n return ancestorInfo.buttonTagInScope;\n case \"a\":\n return ancestorInfo.aTagInScope;\n case \"nobr\":\n return ancestorInfo.nobrTagInScope;\n }\n return null;\n }\n function findAncestor(parent, tagName) {\n for (; parent; ) {\n switch (parent.tag) {\n case 5:\n case 26:\n case 27:\n if (parent.type === tagName) return parent;\n }\n parent = parent.return;\n }\n return null;\n }\n function validateDOMNesting(childTag, ancestorInfo) {\n ancestorInfo = ancestorInfo || emptyAncestorInfoDev;\n var parentInfo = ancestorInfo.current;\n ancestorInfo = (parentInfo = isTagValidWithParent(\n childTag,\n parentInfo && parentInfo.tag,\n ancestorInfo.implicitRootScope\n )\n ? null\n : parentInfo)\n ? null\n : findInvalidAncestorForTag(childTag, ancestorInfo);\n ancestorInfo = parentInfo || ancestorInfo;\n if (!ancestorInfo) return !0;\n var ancestorTag = ancestorInfo.tag;\n ancestorInfo = String(!!parentInfo) + \"|\" + childTag + \"|\" + ancestorTag;\n if (didWarn[ancestorInfo]) return !1;\n didWarn[ancestorInfo] = !0;\n var ancestor = (ancestorInfo = current)\n ? findAncestor(ancestorInfo.return, ancestorTag)\n : null,\n ancestorDescription =\n null !== ancestorInfo && null !== ancestor\n ? describeAncestors(ancestor, ancestorInfo, null)\n : \"\",\n tagDisplayName = \"<\" + childTag + \">\";\n parentInfo\n ? ((parentInfo = \"\"),\n \"table\" === ancestorTag &&\n \"tr\" === childTag &&\n (parentInfo +=\n \" Add a <tbody>, <thead> or <tfoot> to your code to match the DOM tree generated by the browser.\"),\n console.error(\n \"In HTML, %s cannot be a child of <%s>.%s\\nThis will cause a hydration error.%s\",\n tagDisplayName,\n ancestorTag,\n parentInfo,\n ancestorDescription\n ))\n : console.error(\n \"In HTML, %s cannot be a descendant of <%s>.\\nThis will cause a hydration error.%s\",\n tagDisplayName,\n ancestorTag,\n ancestorDescription\n );\n ancestorInfo &&\n ((childTag = ancestorInfo.return),\n null === ancestor ||\n null === childTag ||\n (ancestor === childTag &&\n childTag._debugOwner === ancestorInfo._debugOwner) ||\n runWithFiberInDEV(ancestor, function () {\n console.error(\n \"<%s> cannot contain a nested %s.\\nSee this log for the ancestor stack trace.\",\n ancestorTag,\n tagDisplayName\n );\n }));\n return !1;\n }\n function validateTextNesting(childText, parentTag, implicitRootScope) {\n if (implicitRootScope || isTagValidWithParent(\"#text\", parentTag, !1))\n return !0;\n implicitRootScope = \"#text|\" + parentTag;\n if (didWarn[implicitRootScope]) return !1;\n didWarn[implicitRootScope] = !0;\n var ancestor = (implicitRootScope = current)\n ? findAncestor(implicitRootScope, parentTag)\n : null;\n implicitRootScope =\n null !== implicitRootScope && null !== ancestor\n ? describeAncestors(\n ancestor,\n implicitRootScope,\n 6 !== implicitRootScope.tag ? { children: null } : null\n )\n : \"\";\n /\\S/.test(childText)\n ? console.error(\n \"In HTML, text nodes cannot be a child of <%s>.\\nThis will cause a hydration error.%s\",\n parentTag,\n implicitRootScope\n )\n : console.error(\n \"In HTML, whitespace text nodes cannot be a child of <%s>. Make sure you don't have any extra whitespace between tags on each line of your source code.\\nThis will cause a hydration error.%s\",\n parentTag,\n implicitRootScope\n );\n return !1;\n }\n function setTextContent(node, text) {\n if (text) {\n var firstChild = node.firstChild;\n if (\n firstChild &&\n firstChild === node.lastChild &&\n 3 === firstChild.nodeType\n ) {\n firstChild.nodeValue = text;\n return;\n }\n }\n node.textContent = text;\n }\n function camelize(string) {\n return string.replace(hyphenPattern, function (_, character) {\n return character.toUpperCase();\n });\n }\n function setValueForStyle(style, styleName, value) {\n var isCustomProperty = 0 === styleName.indexOf(\"--\");\n isCustomProperty ||\n (-1 < styleName.indexOf(\"-\")\n ? (warnedStyleNames.hasOwnProperty(styleName) &&\n warnedStyleNames[styleName]) ||\n ((warnedStyleNames[styleName] = !0),\n console.error(\n \"Unsupported style property %s. Did you mean %s?\",\n styleName,\n camelize(styleName.replace(msPattern, \"ms-\"))\n ))\n : badVendoredStyleNamePattern.test(styleName)\n ? (warnedStyleNames.hasOwnProperty(styleName) &&\n warnedStyleNames[styleName]) ||\n ((warnedStyleNames[styleName] = !0),\n console.error(\n \"Unsupported vendor-prefixed style property %s. Did you mean %s?\",\n styleName,\n styleName.charAt(0).toUpperCase() + styleName.slice(1)\n ))\n : !badStyleValueWithSemicolonPattern.test(value) ||\n (warnedStyleValues.hasOwnProperty(value) &&\n warnedStyleValues[value]) ||\n ((warnedStyleValues[value] = !0),\n console.error(\n 'Style property values shouldn\\'t contain a semicolon. Try \"%s: %s\" instead.',\n styleName,\n value.replace(badStyleValueWithSemicolonPattern, \"\")\n )),\n \"number\" === typeof value &&\n (isNaN(value)\n ? warnedForNaNValue ||\n ((warnedForNaNValue = !0),\n console.error(\n \"`NaN` is an invalid value for the `%s` css style property.\",\n styleName\n ))\n : isFinite(value) ||\n warnedForInfinityValue ||\n ((warnedForInfinityValue = !0),\n console.error(\n \"`Infinity` is an invalid value for the `%s` css style property.\",\n styleName\n ))));\n null == value || \"boolean\" === typeof value || \"\" === value\n ? isCustomProperty\n ? style.setProperty(styleName, \"\")\n : \"float\" === styleName\n ? (style.cssFloat = \"\")\n : (style[styleName] = \"\")\n : isCustomProperty\n ? style.setProperty(styleName, value)\n : \"number\" !== typeof value ||\n 0 === value ||\n unitlessNumbers.has(styleName)\n ? \"float\" === styleName\n ? (style.cssFloat = value)\n : (checkCSSPropertyStringCoercion(value, styleName),\n (style[styleName] = (\"\" + value).trim()))\n : (style[styleName] = value + \"px\");\n }\n function setValueForStyles(node, styles, prevStyles) {\n if (null != styles && \"object\" !== typeof styles)\n throw Error(\n \"The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX.\"\n );\n styles && Object.freeze(styles);\n node = node.style;\n if (null != prevStyles) {\n if (styles) {\n var expandedUpdates = {};\n if (prevStyles)\n for (var key in prevStyles)\n if (prevStyles.hasOwnProperty(key) && !styles.hasOwnProperty(key))\n for (\n var longhands = shorthandToLonghand[key] || [key], i = 0;\n i < longhands.length;\n i++\n )\n expandedUpdates[longhands[i]] = key;\n for (var _key in styles)\n if (\n styles.hasOwnProperty(_key) &&\n (!prevStyles || prevStyles[_key] !== styles[_key])\n )\n for (\n key = shorthandToLonghand[_key] || [_key], longhands = 0;\n longhands < key.length;\n longhands++\n )\n expandedUpdates[key[longhands]] = _key;\n _key = {};\n for (var key$jscomp$0 in styles)\n for (\n key = shorthandToLonghand[key$jscomp$0] || [key$jscomp$0],\n longhands = 0;\n longhands < key.length;\n longhands++\n )\n _key[key[longhands]] = key$jscomp$0;\n key$jscomp$0 = {};\n for (var _key2 in expandedUpdates)\n if (\n ((key = expandedUpdates[_key2]),\n (longhands = _key[_key2]) &&\n key !== longhands &&\n ((i = key + \",\" + longhands), !key$jscomp$0[i]))\n ) {\n key$jscomp$0[i] = !0;\n i = console;\n var value = styles[key];\n i.error.call(\n i,\n \"%s a style property during rerender (%s) when a conflicting property is set (%s) can lead to styling bugs. To avoid this, don't mix shorthand and non-shorthand properties for the same value; instead, replace the shorthand with separate values.\",\n null == value || \"boolean\" === typeof value || \"\" === value\n ? \"Removing\"\n : \"Updating\",\n key,\n longhands\n );\n }\n }\n for (var styleName in prevStyles)\n !prevStyles.hasOwnProperty(styleName) ||\n (null != styles && styles.hasOwnProperty(styleName)) ||\n (0 === styleName.indexOf(\"--\")\n ? node.setProperty(styleName, \"\")\n : \"float\" === styleName\n ? (node.cssFloat = \"\")\n : (node[styleName] = \"\"));\n for (var _styleName in styles)\n (_key2 = styles[_styleName]),\n styles.hasOwnProperty(_styleName) &&\n prevStyles[_styleName] !== _key2 &&\n setValueForStyle(node, _styleName, _key2);\n } else\n for (expandedUpdates in styles)\n styles.hasOwnProperty(expandedUpdates) &&\n setValueForStyle(node, expandedUpdates, styles[expandedUpdates]);\n }\n function isCustomElement(tagName) {\n if (-1 === tagName.indexOf(\"-\")) return !1;\n switch (tagName) {\n case \"annotation-xml\":\n case \"color-profile\":\n case \"font-face\":\n case \"font-face-src\":\n case \"font-face-uri\":\n case \"font-face-format\":\n case \"font-face-name\":\n case \"missing-glyph\":\n return !1;\n default:\n return !0;\n }\n }\n function getAttributeAlias(name) {\n return aliases.get(name) || name;\n }\n function validateProperty$1(tagName, name) {\n if (\n hasOwnProperty.call(warnedProperties$1, name) &&\n warnedProperties$1[name]\n )\n return !0;\n if (rARIACamel$1.test(name)) {\n tagName = \"aria-\" + name.slice(4).toLowerCase();\n tagName = ariaProperties.hasOwnProperty(tagName) ? tagName : null;\n if (null == tagName)\n return (\n console.error(\n \"Invalid ARIA attribute `%s`. ARIA attributes follow the pattern aria-* and must be lowercase.\",\n name\n ),\n (warnedProperties$1[name] = !0)\n );\n if (name !== tagName)\n return (\n console.error(\n \"Invalid ARIA attribute `%s`. Did you mean `%s`?\",\n name,\n tagName\n ),\n (warnedProperties$1[name] = !0)\n );\n }\n if (rARIA$1.test(name)) {\n tagName = name.toLowerCase();\n tagName = ariaProperties.hasOwnProperty(tagName) ? tagName : null;\n if (null == tagName) return (warnedProperties$1[name] = !0), !1;\n name !== tagName &&\n (console.error(\n \"Unknown ARIA attribute `%s`. Did you mean `%s`?\",\n name,\n tagName\n ),\n (warnedProperties$1[name] = !0));\n }\n return !0;\n }\n function validateProperties$2(type, props) {\n var invalidProps = [],\n key;\n for (key in props)\n validateProperty$1(type, key) || invalidProps.push(key);\n props = invalidProps\n .map(function (prop) {\n return \"`\" + prop + \"`\";\n })\n .join(\", \");\n 1 === invalidProps.length\n ? console.error(\n \"Invalid aria prop %s on <%s> tag. For details, see https://react.dev/link/invalid-aria-props\",\n props,\n type\n )\n : 1 < invalidProps.length &&\n console.error(\n \"Invalid aria props %s on <%s> tag. For details, see https://react.dev/link/invalid-aria-props\",\n props,\n type\n );\n }\n function validateProperty(tagName, name, value, eventRegistry) {\n if (hasOwnProperty.call(warnedProperties, name) && warnedProperties[name])\n return !0;\n var lowerCasedName = name.toLowerCase();\n if (\"onfocusin\" === lowerCasedName || \"onfocusout\" === lowerCasedName)\n return (\n console.error(\n \"React uses onFocus and onBlur instead of onFocusIn and onFocusOut. All React events are normalized to bubble, so onFocusIn and onFocusOut are not needed/supported by React.\"\n ),\n (warnedProperties[name] = !0)\n );\n if (\n \"function\" === typeof value &&\n ((\"form\" === tagName && \"action\" === name) ||\n (\"input\" === tagName && \"formAction\" === name) ||\n (\"button\" === tagName && \"formAction\" === name))\n )\n return !0;\n if (null != eventRegistry) {\n tagName = eventRegistry.possibleRegistrationNames;\n if (eventRegistry.registrationNameDependencies.hasOwnProperty(name))\n return !0;\n eventRegistry = tagName.hasOwnProperty(lowerCasedName)\n ? tagName[lowerCasedName]\n : null;\n if (null != eventRegistry)\n return (\n console.error(\n \"Invalid event handler property `%s`. Did you mean `%s`?\",\n name,\n eventRegistry\n ),\n (warnedProperties[name] = !0)\n );\n if (EVENT_NAME_REGEX.test(name))\n return (\n console.error(\n \"Unknown event handler property `%s`. It will be ignored.\",\n name\n ),\n (warnedProperties[name] = !0)\n );\n } else if (EVENT_NAME_REGEX.test(name))\n return (\n INVALID_EVENT_NAME_REGEX.test(name) &&\n console.error(\n \"Invalid event handler property `%s`. React events use the camelCase naming convention, for example `onClick`.\",\n name\n ),\n (warnedProperties[name] = !0)\n );\n if (rARIA.test(name) || rARIACamel.test(name)) return !0;\n if (\"innerhtml\" === lowerCasedName)\n return (\n console.error(\n \"Directly setting property `innerHTML` is not permitted. For more information, lookup documentation on `dangerouslySetInnerHTML`.\"\n ),\n (warnedProperties[name] = !0)\n );\n if (\"aria\" === lowerCasedName)\n return (\n console.error(\n \"The `aria` attribute is reserved for future use in React. Pass individual `aria-` attributes instead.\"\n ),\n (warnedProperties[name] = !0)\n );\n if (\n \"is\" === lowerCasedName &&\n null !== value &&\n void 0 !== value &&\n \"string\" !== typeof value\n )\n return (\n console.error(\n \"Received a `%s` for a string attribute `is`. If this is expected, cast the value to a string.\",\n typeof value\n ),\n (warnedProperties[name] = !0)\n );\n if (\"number\" === typeof value && isNaN(value))\n return (\n console.error(\n \"Received NaN for the `%s` attribute. If this is expected, cast the value to a string.\",\n name\n ),\n (warnedProperties[name] = !0)\n );\n if (possibleStandardNames.hasOwnProperty(lowerCasedName)) {\n if (\n ((lowerCasedName = possibleStandardNames[lowerCasedName]),\n lowerCasedName !== name)\n )\n return (\n console.error(\n \"Invalid DOM property `%s`. Did you mean `%s`?\",\n name,\n lowerCasedName\n ),\n (warnedProperties[name] = !0)\n );\n } else if (name !== lowerCasedName)\n return (\n console.error(\n \"React does not recognize the `%s` prop on a DOM element. If you intentionally want it to appear in the DOM as a custom attribute, spell it as lowercase `%s` instead. If you accidentally passed it from a parent component, remove it from the DOM element.\",\n name,\n lowerCasedName\n ),\n (warnedProperties[name] = !0)\n );\n switch (name) {\n case \"dangerouslySetInnerHTML\":\n case \"children\":\n case \"style\":\n case \"suppressContentEditableWarning\":\n case \"suppressHydrationWarning\":\n case \"defaultValue\":\n case \"defaultChecked\":\n case \"innerHTML\":\n case \"ref\":\n return !0;\n case \"innerText\":\n case \"textContent\":\n return !0;\n }\n switch (typeof value) {\n case \"boolean\":\n switch (name) {\n case \"autoFocus\":\n case \"checked\":\n case \"multiple\":\n case \"muted\":\n case \"selected\":\n case \"contentEditable\":\n case \"spellCheck\":\n case \"draggable\":\n case \"value\":\n case \"autoReverse\":\n case \"externalResourcesRequired\":\n case \"focusable\":\n case \"preserveAlpha\":\n case \"allowFullScreen\":\n case \"async\":\n case \"autoPlay\":\n case \"controls\":\n case \"default\":\n case \"defer\":\n case \"disabled\":\n case \"disablePictureInPicture\":\n case \"disableRemotePlayback\":\n case \"formNoValidate\":\n case \"hidden\":\n case \"loop\":\n case \"noModule\":\n case \"noValidate\":\n case \"open\":\n case \"playsInline\":\n case \"readOnly\":\n case \"required\":\n case \"reversed\":\n case \"scoped\":\n case \"seamless\":\n case \"itemScope\":\n case \"capture\":\n case \"download\":\n case \"inert\":\n return !0;\n default:\n lowerCasedName = name.toLowerCase().slice(0, 5);\n if (\"data-\" === lowerCasedName || \"aria-\" === lowerCasedName)\n return !0;\n value\n ? console.error(\n 'Received `%s` for a non-boolean attribute `%s`.\\n\\nIf you want to write it to the DOM, pass a string instead: %s=\"%s\" or %s={value.toString()}.',\n value,\n name,\n name,\n value,\n name\n )\n : console.error(\n 'Received `%s` for a non-boolean attribute `%s`.\\n\\nIf you want to write it to the DOM, pass a string instead: %s=\"%s\" or %s={value.toString()}.\\n\\nIf you used to conditionally omit it with %s={condition && value}, pass %s={condition ? value : undefined} instead.',\n value,\n name,\n name,\n value,\n name,\n name,\n name\n );\n return (warnedProperties[name] = !0);\n }\n case \"function\":\n case \"symbol\":\n return (warnedProperties[name] = !0), !1;\n case \"string\":\n if (\"false\" === value || \"true\" === value) {\n switch (name) {\n case \"checked\":\n case \"selected\":\n case \"multiple\":\n case \"muted\":\n case \"allowFullScreen\":\n case \"async\":\n case \"autoPlay\":\n case \"controls\":\n case \"default\":\n case \"defer\":\n case \"disabled\":\n case \"disablePictureInPicture\":\n case \"disableRemotePlayback\":\n case \"formNoValidate\":\n case \"hidden\":\n case \"loop\":\n case \"noModule\":\n case \"noValidate\":\n case \"open\":\n case \"playsInline\":\n case \"readOnly\":\n case \"required\":\n case \"reversed\":\n case \"scoped\":\n case \"seamless\":\n case \"itemScope\":\n case \"inert\":\n break;\n default:\n return !0;\n }\n console.error(\n \"Received the string `%s` for the boolean attribute `%s`. %s Did you mean %s={%s}?\",\n value,\n name,\n \"false\" === value\n ? \"The browser will interpret it as a truthy value.\"\n : 'Although this works, it will not work as expected if you pass the string \"false\".',\n name,\n value\n );\n warnedProperties[name] = !0;\n }\n }\n return !0;\n }\n function warnUnknownProperties(type, props, eventRegistry) {\n var unknownProps = [],\n key;\n for (key in props)\n validateProperty(type, key, props[key], eventRegistry) ||\n unknownProps.push(key);\n props = unknownProps\n .map(function (prop) {\n return \"`\" + prop + \"`\";\n })\n .join(\", \");\n 1 === unknownProps.length\n ? console.error(\n \"Invalid value for prop %s on <%s> tag. Either remove it from the element, or pass a string or number value to keep it in the DOM. For details, see https://react.dev/link/attribute-behavior \",\n props,\n type\n )\n : 1 < unknownProps.length &&\n console.error(\n \"Invalid values for props %s on <%s> tag. Either remove them from the element, or pass a string or number value to keep them in the DOM. For details, see https://react.dev/link/attribute-behavior \",\n props,\n type\n );\n }\n function sanitizeURL(url) {\n return isJavaScriptProtocol.test(\"\" + url)\n ? \"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')\"\n : url;\n }\n function noop$1() {}\n function getEventTarget(nativeEvent) {\n nativeEvent = nativeEvent.target || nativeEvent.srcElement || window;\n nativeEvent.correspondingUseElement &&\n (nativeEvent = nativeEvent.correspondingUseElement);\n return 3 === nativeEvent.nodeType ? nativeEvent.parentNode : nativeEvent;\n }\n function restoreStateOfTarget(target) {\n var internalInstance = getInstanceFromNode(target);\n if (internalInstance && (target = internalInstance.stateNode)) {\n var props = target[internalPropsKey] || null;\n a: switch (\n ((target = internalInstance.stateNode), internalInstance.type)\n ) {\n case \"input\":\n updateInput(\n target,\n props.value,\n props.defaultValue,\n props.defaultValue,\n props.checked,\n props.defaultChecked,\n props.type,\n props.name\n );\n internalInstance = props.name;\n if (\"radio\" === props.type && null != internalInstance) {\n for (props = target; props.parentNode; ) props = props.parentNode;\n checkAttributeStringCoercion(internalInstance, \"name\");\n props = props.querySelectorAll(\n 'input[name=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(\n \"\" + internalInstance\n ) +\n '\"][type=\"radio\"]'\n );\n for (\n internalInstance = 0;\n internalInstance < props.length;\n internalInstance++\n ) {\n var otherNode = props[internalInstance];\n if (otherNode !== target && otherNode.form === target.form) {\n var otherProps = otherNode[internalPropsKey] || null;\n if (!otherProps)\n throw Error(\n \"ReactDOMInput: Mixing React and non-React radio inputs with the same `name` is not supported.\"\n );\n updateInput(\n otherNode,\n otherProps.value,\n otherProps.defaultValue,\n otherProps.defaultValue,\n otherProps.checked,\n otherProps.defaultChecked,\n otherProps.type,\n otherProps.name\n );\n }\n }\n for (\n internalInstance = 0;\n internalInstance < props.length;\n internalInstance++\n )\n (otherNode = props[internalInstance]),\n otherNode.form === target.form &&\n updateValueIfChanged(otherNode);\n }\n break a;\n case \"textarea\":\n updateTextarea(target, props.value, props.defaultValue);\n break a;\n case \"select\":\n (internalInstance = props.value),\n null != internalInstance &&\n updateOptions(target, !!props.multiple, internalInstance, !1);\n }\n }\n }\n function batchedUpdates$1(fn, a, b) {\n if (isInsideEventHandler) return fn(a, b);\n isInsideEventHandler = !0;\n try {\n var JSCompiler_inline_result = fn(a);\n return JSCompiler_inline_result;\n } finally {\n if (\n ((isInsideEventHandler = !1),\n null !== restoreTarget || null !== restoreQueue)\n )\n if (\n (flushSyncWork$1(),\n restoreTarget &&\n ((a = restoreTarget),\n (fn = restoreQueue),\n (restoreQueue = restoreTarget = null),\n restoreStateOfTarget(a),\n fn))\n )\n for (a = 0; a < fn.length; a++) restoreStateOfTarget(fn[a]);\n }\n }\n function getListener(inst, registrationName) {\n var stateNode = inst.stateNode;\n if (null === stateNode) return null;\n var props = stateNode[internalPropsKey] || null;\n if (null === props) return null;\n stateNode = props[registrationName];\n a: switch (registrationName) {\n case \"onClick\":\n case \"onClickCapture\":\n case \"onDoubleClick\":\n case \"onDoubleClickCapture\":\n case \"onMouseDown\":\n case \"onMouseDownCapture\":\n case \"onMouseMove\":\n case \"onMouseMoveCapture\":\n case \"onMouseUp\":\n case \"onMouseUpCapture\":\n case \"onMouseEnter\":\n (props = !props.disabled) ||\n ((inst = inst.type),\n (props = !(\n \"button\" === inst ||\n \"input\" === inst ||\n \"select\" === inst ||\n \"textarea\" === inst\n )));\n inst = !props;\n break a;\n default:\n inst = !1;\n }\n if (inst) return null;\n if (stateNode && \"function\" !== typeof stateNode)\n throw Error(\n \"Expected `\" +\n registrationName +\n \"` listener to be a function, instead got a value of `\" +\n typeof stateNode +\n \"` type.\"\n );\n return stateNode;\n }\n function getData() {\n if (fallbackText) return fallbackText;\n var start,\n startValue = startText,\n startLength = startValue.length,\n end,\n endValue = \"value\" in root ? root.value : root.textContent,\n endLength = endValue.length;\n for (\n start = 0;\n start < startLength && startValue[start] === endValue[start];\n start++\n );\n var minEnd = startLength - start;\n for (\n end = 1;\n end <= minEnd &&\n startValue[startLength - end] === endValue[endLength - end];\n end++\n );\n return (fallbackText = endValue.slice(start, 1 < end ? 1 - end : void 0));\n }\n function getEventCharCode(nativeEvent) {\n var keyCode = nativeEvent.keyCode;\n \"charCode\" in nativeEvent\n ? ((nativeEvent = nativeEvent.charCode),\n 0 === nativeEvent && 13 === keyCode && (nativeEvent = 13))\n : (nativeEvent = keyCode);\n 10 === nativeEvent && (nativeEvent = 13);\n return 32 <= nativeEvent || 13 === nativeEvent ? nativeEvent : 0;\n }\n function functionThatReturnsTrue() {\n return !0;\n }\n function functionThatReturnsFalse() {\n return !1;\n }\n function createSyntheticEvent(Interface) {\n function SyntheticBaseEvent(\n reactName,\n reactEventType,\n targetInst,\n nativeEvent,\n nativeEventTarget\n ) {\n this._reactName = reactName;\n this._targetInst = targetInst;\n this.type = reactEventType;\n this.nativeEvent = nativeEvent;\n this.target = nativeEventTarget;\n this.currentTarget = null;\n for (var propName in Interface)\n Interface.hasOwnProperty(propName) &&\n ((reactName = Interface[propName]),\n (this[propName] = reactName\n ? reactName(nativeEvent)\n : nativeEvent[propName]));\n this.isDefaultPrevented = (\n null != nativeEvent.defaultPrevented\n ? nativeEvent.defaultPrevented\n : !1 === nativeEvent.returnValue\n )\n ? functionThatReturnsTrue\n : functionThatReturnsFalse;\n this.isPropagationStopped = functionThatReturnsFalse;\n return this;\n }\n assign(SyntheticBaseEvent.prototype, {\n preventDefault: function () {\n this.defaultPrevented = !0;\n var event = this.nativeEvent;\n event &&\n (event.preventDefault\n ? event.preventDefault()\n : \"unknown\" !== typeof event.returnValue &&\n (event.returnValue = !1),\n (this.isDefaultPrevented = functionThatReturnsTrue));\n },\n stopPropagation: function () {\n var event = this.nativeEvent;\n event &&\n (event.stopPropagation\n ? event.stopPropagation()\n : \"unknown\" !== typeof event.cancelBubble &&\n (event.cancelBubble = !0),\n (this.isPropagationStopped = functionThatReturnsTrue));\n },\n persist: function () {},\n isPersistent: functionThatReturnsTrue\n });\n return SyntheticBaseEvent;\n }\n function modifierStateGetter(keyArg) {\n var nativeEvent = this.nativeEvent;\n return nativeEvent.getModifierState\n ? nativeEvent.getModifierState(keyArg)\n : (keyArg = modifierKeyToProp[keyArg])\n ? !!nativeEvent[keyArg]\n : !1;\n }\n function getEventModifierState() {\n return modifierStateGetter;\n }\n function isFallbackCompositionEnd(domEventName, nativeEvent) {\n switch (domEventName) {\n case \"keyup\":\n return -1 !== END_KEYCODES.indexOf(nativeEvent.keyCode);\n case \"keydown\":\n return nativeEvent.keyCode !== START_KEYCODE;\n case \"keypress\":\n case \"mousedown\":\n case \"focusout\":\n return !0;\n default:\n return !1;\n }\n }\n function getDataFromCustomEvent(nativeEvent) {\n nativeEvent = nativeEvent.detail;\n return \"object\" === typeof nativeEvent && \"data\" in nativeEvent\n ? nativeEvent.data\n : null;\n }\n function getNativeBeforeInputChars(domEventName, nativeEvent) {\n switch (domEventName) {\n case \"compositionend\":\n return getDataFromCustomEvent(nativeEvent);\n case \"keypress\":\n if (nativeEvent.which !== SPACEBAR_CODE) return null;\n hasSpaceKeypress = !0;\n return SPACEBAR_CHAR;\n case \"textInput\":\n return (\n (domEventName = nativeEvent.data),\n domEventName === SPACEBAR_CHAR && hasSpaceKeypress\n ? null\n : domEventName\n );\n default:\n return null;\n }\n }\n function getFallbackBeforeInputChars(domEventName, nativeEvent) {\n if (isComposing)\n return \"compositionend\" === domEventName ||\n (!canUseCompositionEvent &&\n isFallbackCompositionEnd(domEventName, nativeEvent))\n ? ((domEventName = getData()),\n (fallbackText = startText = root = null),\n (isComposing = !1),\n domEventName)\n : null;\n switch (domEventName) {\n case \"paste\":\n return null;\n case \"keypress\":\n if (\n !(\n nativeEvent.ctrlKey ||\n nativeEvent.altKey ||\n nativeEvent.metaKey\n ) ||\n (nativeEvent.ctrlKey && nativeEvent.altKey)\n ) {\n if (nativeEvent.char && 1 < nativeEvent.char.length)\n return nativeEvent.char;\n if (nativeEvent.which)\n return String.fromCharCode(nativeEvent.which);\n }\n return null;\n case \"compositionend\":\n return useFallbackCompositionData && \"ko\" !== nativeEvent.locale\n ? null\n : nativeEvent.data;\n default:\n return null;\n }\n }\n function isTextInputElement(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return \"input\" === nodeName\n ? !!supportedInputTypes[elem.type]\n : \"textarea\" === nodeName\n ? !0\n : !1;\n }\n function isEventSupported(eventNameSuffix) {\n if (!canUseDOM) return !1;\n eventNameSuffix = \"on\" + eventNameSuffix;\n var isSupported = eventNameSuffix in document;\n isSupported ||\n ((isSupported = document.createElement(\"div\")),\n isSupported.setAttribute(eventNameSuffix, \"return;\"),\n (isSupported = \"function\" === typeof isSupported[eventNameSuffix]));\n return isSupported;\n }\n function createAndAccumulateChangeEvent(\n dispatchQueue,\n inst,\n nativeEvent,\n target\n ) {\n restoreTarget\n ? restoreQueue\n ? restoreQueue.push(target)\n : (restoreQueue = [target])\n : (restoreTarget = target);\n inst = accumulateTwoPhaseListeners(inst, \"onChange\");\n 0 < inst.length &&\n ((nativeEvent = new SyntheticEvent(\n \"onChange\",\n \"change\",\n null,\n nativeEvent,\n target\n )),\n dispatchQueue.push({ event: nativeEvent, listeners: inst }));\n }\n function runEventInBatch(dispatchQueue) {\n processDispatchQueue(dispatchQueue, 0);\n }\n function getInstIfValueChanged(targetInst) {\n var targetNode = getNodeFromInstance(targetInst);\n if (updateValueIfChanged(targetNode)) return targetInst;\n }\n function getTargetInstForChangeEvent(domEventName, targetInst) {\n if (\"change\" === domEventName) return targetInst;\n }\n function stopWatchingForValueChange() {\n activeElement$1 &&\n (activeElement$1.detachEvent(\"onpropertychange\", handlePropertyChange),\n (activeElementInst$1 = activeElement$1 = null));\n }\n function handlePropertyChange(nativeEvent) {\n if (\n \"value\" === nativeEvent.propertyName &&\n getInstIfValueChanged(activeElementInst$1)\n ) {\n var dispatchQueue = [];\n createAndAccumulateChangeEvent(\n dispatchQueue,\n activeElementInst$1,\n nativeEvent,\n getEventTarget(nativeEvent)\n );\n batchedUpdates$1(runEventInBatch, dispatchQueue);\n }\n }\n function handleEventsForInputEventPolyfill(\n domEventName,\n target,\n targetInst\n ) {\n \"focusin\" === domEventName\n ? (stopWatchingForValueChange(),\n (activeElement$1 = target),\n (activeElementInst$1 = targetInst),\n activeElement$1.attachEvent(\"onpropertychange\", handlePropertyChange))\n : \"focusout\" === domEventName && stopWatchingForValueChange();\n }\n function getTargetInstForInputEventPolyfill(domEventName) {\n if (\n \"selectionchange\" === domEventName ||\n \"keyup\" === domEventName ||\n \"keydown\" === domEventName\n )\n return getInstIfValueChanged(activeElementInst$1);\n }\n function getTargetInstForClickEvent(domEventName, targetInst) {\n if (\"click\" === domEventName) return getInstIfValueChanged(targetInst);\n }\n function getTargetInstForInputOrChangeEvent(domEventName, targetInst) {\n if (\"input\" === domEventName || \"change\" === domEventName)\n return getInstIfValueChanged(targetInst);\n }\n function is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n }\n function shallowEqual(objA, objB) {\n if (objectIs(objA, objB)) return !0;\n if (\n \"object\" !== typeof objA ||\n null === objA ||\n \"object\" !== typeof objB ||\n null === objB\n )\n return !1;\n var keysA = Object.keys(objA),\n keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) return !1;\n for (keysB = 0; keysB < keysA.length; keysB++) {\n var currentKey = keysA[keysB];\n if (\n !hasOwnProperty.call(objB, currentKey) ||\n !objectIs(objA[currentKey], objB[currentKey])\n )\n return !1;\n }\n return !0;\n }\n function getLeafNode(node) {\n for (; node && node.firstChild; ) node = node.firstChild;\n return node;\n }\n function getNodeForCharacterOffset(root, offset) {\n var node = getLeafNode(root);\n root = 0;\n for (var nodeEnd; node; ) {\n if (3 === node.nodeType) {\n nodeEnd = root + node.textContent.length;\n if (root <= offset && nodeEnd >= offset)\n return { node: node, offset: offset - root };\n root = nodeEnd;\n }\n a: {\n for (; node; ) {\n if (node.nextSibling) {\n node = node.nextSibling;\n break a;\n }\n node = node.parentNode;\n }\n node = void 0;\n }\n node = getLeafNode(node);\n }\n }\n function containsNode(outerNode, innerNode) {\n return outerNode && innerNode\n ? outerNode === innerNode\n ? !0\n : outerNode && 3 === outerNode.nodeType\n ? !1\n : innerNode && 3 === innerNode.nodeType\n ? containsNode(outerNode, innerNode.parentNode)\n : \"contains\" in outerNode\n ? outerNode.contains(innerNode)\n : outerNode.compareDocumentPosition\n ? !!(outerNode.compareDocumentPosition(innerNode) & 16)\n : !1\n : !1;\n }\n function getActiveElementDeep(containerInfo) {\n containerInfo =\n null != containerInfo &&\n null != containerInfo.ownerDocument &&\n null != containerInfo.ownerDocument.defaultView\n ? containerInfo.ownerDocument.defaultView\n : window;\n for (\n var element = getActiveElement(containerInfo.document);\n element instanceof containerInfo.HTMLIFrameElement;\n\n ) {\n try {\n var JSCompiler_inline_result =\n \"string\" === typeof element.contentWindow.location.href;\n } catch (err) {\n JSCompiler_inline_result = !1;\n }\n if (JSCompiler_inline_result) containerInfo = element.contentWindow;\n else break;\n element = getActiveElement(containerInfo.document);\n }\n return element;\n }\n function hasSelectionCapabilities(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return (\n nodeName &&\n ((\"input\" === nodeName &&\n (\"text\" === elem.type ||\n \"search\" === elem.type ||\n \"tel\" === elem.type ||\n \"url\" === elem.type ||\n \"password\" === elem.type)) ||\n \"textarea\" === nodeName ||\n \"true\" === elem.contentEditable)\n );\n }\n function constructSelectEvent(\n dispatchQueue,\n nativeEvent,\n nativeEventTarget\n ) {\n var doc =\n nativeEventTarget.window === nativeEventTarget\n ? nativeEventTarget.document\n : 9 === nativeEventTarget.nodeType\n ? nativeEventTarget\n : nativeEventTarget.ownerDocument;\n mouseDown ||\n null == activeElement ||\n activeElement !== getActiveElement(doc) ||\n ((doc = activeElement),\n \"selectionStart\" in doc && hasSelectionCapabilities(doc)\n ? (doc = { start: doc.selectionStart, end: doc.selectionEnd })\n : ((doc = (\n (doc.ownerDocument && doc.ownerDocument.defaultView) ||\n window\n ).getSelection()),\n (doc = {\n anchorNode: doc.anchorNode,\n anchorOffset: doc.anchorOffset,\n focusNode: doc.focusNode,\n focusOffset: doc.focusOffset\n })),\n (lastSelection && shallowEqual(lastSelection, doc)) ||\n ((lastSelection = doc),\n (doc = accumulateTwoPhaseListeners(activeElementInst, \"onSelect\")),\n 0 < doc.length &&\n ((nativeEvent = new SyntheticEvent(\n \"onSelect\",\n \"select\",\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({ event: nativeEvent, listeners: doc }),\n (nativeEvent.target = activeElement))));\n }\n function makePrefixMap(styleProp, eventName) {\n var prefixes = {};\n prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n prefixes[\"Webkit\" + styleProp] = \"webkit\" + eventName;\n prefixes[\"Moz\" + styleProp] = \"moz\" + eventName;\n return prefixes;\n }\n function getVendorPrefixedEventName(eventName) {\n if (prefixedEventNames[eventName]) return prefixedEventNames[eventName];\n if (!vendorPrefixes[eventName]) return eventName;\n var prefixMap = vendorPrefixes[eventName],\n styleProp;\n for (styleProp in prefixMap)\n if (prefixMap.hasOwnProperty(styleProp) && styleProp in style)\n return (prefixedEventNames[eventName] = prefixMap[styleProp]);\n return eventName;\n }\n function registerSimpleEvent(domEventName, reactName) {\n topLevelEventsToReactNames.set(domEventName, reactName);\n registerTwoPhaseEvent(reactName, [domEventName]);\n }\n function finishQueueingConcurrentUpdates() {\n for (\n var endIndex = concurrentQueuesIndex,\n i = (concurrentlyUpdatedLanes = concurrentQueuesIndex = 0);\n i < endIndex;\n\n ) {\n var fiber = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var queue = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var update = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var lane = concurrentQueues[i];\n concurrentQueues[i++] = null;\n if (null !== queue && null !== update) {\n var pending = queue.pending;\n null === pending\n ? (update.next = update)\n : ((update.next = pending.next), (pending.next = update));\n queue.pending = update;\n }\n 0 !== lane && markUpdateLaneFromFiberToRoot(fiber, update, lane);\n }\n }\n function enqueueUpdate$1(fiber, queue, update, lane) {\n concurrentQueues[concurrentQueuesIndex++] = fiber;\n concurrentQueues[concurrentQueuesIndex++] = queue;\n concurrentQueues[concurrentQueuesIndex++] = update;\n concurrentQueues[concurrentQueuesIndex++] = lane;\n concurrentlyUpdatedLanes |= lane;\n fiber.lanes |= lane;\n fiber = fiber.alternate;\n null !== fiber && (fiber.lanes |= lane);\n }\n function enqueueConcurrentHookUpdate(fiber, queue, update, lane) {\n enqueueUpdate$1(fiber, queue, update, lane);\n return getRootForUpdatedFiber(fiber);\n }\n function enqueueConcurrentRenderForLane(fiber, lane) {\n enqueueUpdate$1(fiber, null, null, lane);\n return getRootForUpdatedFiber(fiber);\n }\n function markUpdateLaneFromFiberToRoot(sourceFiber, update, lane) {\n sourceFiber.lanes |= lane;\n var alternate = sourceFiber.alternate;\n null !== alternate && (alternate.lanes |= lane);\n for (var isHidden = !1, parent = sourceFiber.return; null !== parent; )\n (parent.childLanes |= lane),\n (alternate = parent.alternate),\n null !== alternate && (alternate.childLanes |= lane),\n 22 === parent.tag &&\n ((sourceFiber = parent.stateNode),\n null === sourceFiber ||\n sourceFiber._visibility & OffscreenVisible ||\n (isHidden = !0)),\n (sourceFiber = parent),\n (parent = parent.return);\n return 3 === sourceFiber.tag\n ? ((parent = sourceFiber.stateNode),\n isHidden &&\n null !== update &&\n ((isHidden = 31 - clz32(lane)),\n (sourceFiber = parent.hiddenUpdates),\n (alternate = sourceFiber[isHidden]),\n null === alternate\n ? (sourceFiber[isHidden] = [update])\n : alternate.push(update),\n (update.lane = lane | 536870912)),\n parent)\n : null;\n }\n function getRootForUpdatedFiber(sourceFiber) {\n if (nestedUpdateCount > NESTED_UPDATE_LIMIT)\n throw (\n ((nestedPassiveUpdateCount = nestedUpdateCount = 0),\n (rootWithPassiveNestedUpdates = rootWithNestedUpdates = null),\n Error(\n \"Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops.\"\n ))\n );\n nestedPassiveUpdateCount > NESTED_PASSIVE_UPDATE_LIMIT &&\n ((nestedPassiveUpdateCount = 0),\n (rootWithPassiveNestedUpdates = null),\n console.error(\n \"Maximum update depth exceeded. This can happen when a component calls setState inside useEffect, but useEffect either doesn't have a dependency array, or one of the dependencies changes on every render.\"\n ));\n null === sourceFiber.alternate &&\n 0 !== (sourceFiber.flags & 4098) &&\n warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber);\n for (var node = sourceFiber, parent = node.return; null !== parent; )\n null === node.alternate &&\n 0 !== (node.flags & 4098) &&\n warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber),\n (node = parent),\n (parent = node.return);\n return 3 === node.tag ? node.stateNode : null;\n }\n function resolveFunctionForHotReloading(type) {\n if (null === resolveFamily) return type;\n var family = resolveFamily(type);\n return void 0 === family ? type : family.current;\n }\n function resolveForwardRefForHotReloading(type) {\n if (null === resolveFamily) return type;\n var family = resolveFamily(type);\n return void 0 === family\n ? null !== type &&\n void 0 !== type &&\n \"function\" === typeof type.render &&\n ((family = resolveFunctionForHotReloading(type.render)),\n type.render !== family)\n ? ((family = { $$typeof: REACT_FORWARD_REF_TYPE, render: family }),\n void 0 !== type.displayName &&\n (family.displayName = type.displayName),\n family)\n : type\n : family.current;\n }\n function isCompatibleFamilyForHotReloading(fiber, element) {\n if (null === resolveFamily) return !1;\n var prevType = fiber.elementType;\n element = element.type;\n var needsCompareFamilies = !1,\n $$typeofNextType =\n \"object\" === typeof element && null !== element\n ? element.$$typeof\n : null;\n switch (fiber.tag) {\n case 1:\n \"function\" === typeof element && (needsCompareFamilies = !0);\n break;\n case 0:\n \"function\" === typeof element\n ? (needsCompareFamilies = !0)\n : $$typeofNextType === REACT_LAZY_TYPE &&\n (needsCompareFamilies = !0);\n break;\n case 11:\n $$typeofNextType === REACT_FORWARD_REF_TYPE\n ? (needsCompareFamilies = !0)\n : $$typeofNextType === REACT_LAZY_TYPE &&\n (needsCompareFamilies = !0);\n break;\n case 14:\n case 15:\n $$typeofNextType === REACT_MEMO_TYPE\n ? (needsCompareFamilies = !0)\n : $$typeofNextType === REACT_LAZY_TYPE &&\n (needsCompareFamilies = !0);\n break;\n default:\n return !1;\n }\n return needsCompareFamilies &&\n ((fiber = resolveFamily(prevType)),\n void 0 !== fiber && fiber === resolveFamily(element))\n ? !0\n : !1;\n }\n function markFailedErrorBoundaryForHotReloading(fiber) {\n null !== resolveFamily &&\n \"function\" === typeof WeakSet &&\n (null === failedBoundaries && (failedBoundaries = new WeakSet()),\n failedBoundaries.add(fiber));\n }\n function scheduleFibersWithFamiliesRecursively(\n fiber,\n updatedFamilies,\n staleFamilies\n ) {\n var alternate = fiber.alternate,\n child = fiber.child,\n sibling = fiber.sibling,\n tag = fiber.tag,\n type = fiber.type,\n candidateType = null;\n switch (tag) {\n case 0:\n case 15:\n case 1:\n candidateType = type;\n break;\n case 11:\n candidateType = type.render;\n }\n if (null === resolveFamily)\n throw Error(\"Expected resolveFamily to be set during hot reload.\");\n var needsRender = !1;\n type = !1;\n null !== candidateType &&\n ((candidateType = resolveFamily(candidateType)),\n void 0 !== candidateType &&\n (staleFamilies.has(candidateType)\n ? (type = !0)\n : updatedFamilies.has(candidateType) &&\n (1 === tag ? (type = !0) : (needsRender = !0))));\n null !== failedBoundaries &&\n (failedBoundaries.has(fiber) ||\n (null !== alternate && failedBoundaries.has(alternate))) &&\n (type = !0);\n type && (fiber._debugNeedsRemount = !0);\n if (type || needsRender)\n (alternate = enqueueConcurrentRenderForLane(fiber, 2)),\n null !== alternate && scheduleUpdateOnFiber(alternate, fiber, 2);\n null === child ||\n type ||\n scheduleFibersWithFamiliesRecursively(\n child,\n updatedFamilies,\n staleFamilies\n );\n null !== sibling &&\n scheduleFibersWithFamiliesRecursively(\n sibling,\n updatedFamilies,\n staleFamilies\n );\n }\n function FiberNode(tag, pendingProps, key, mode) {\n this.tag = tag;\n this.key = key;\n this.sibling =\n this.child =\n this.return =\n this.stateNode =\n this.type =\n this.elementType =\n null;\n this.index = 0;\n this.refCleanup = this.ref = null;\n this.pendingProps = pendingProps;\n this.dependencies =\n this.memoizedState =\n this.updateQueue =\n this.memoizedProps =\n null;\n this.mode = mode;\n this.subtreeFlags = this.flags = 0;\n this.deletions = null;\n this.childLanes = this.lanes = 0;\n this.alternate = null;\n this.actualDuration = -0;\n this.actualStartTime = -1.1;\n this.treeBaseDuration = this.selfBaseDuration = -0;\n this._debugTask =\n this._debugStack =\n this._debugOwner =\n this._debugInfo =\n null;\n this._debugNeedsRemount = !1;\n this._debugHookTypes = null;\n hasBadMapPolyfill ||\n \"function\" !== typeof Object.preventExtensions ||\n Object.preventExtensions(this);\n }\n function shouldConstruct(Component) {\n Component = Component.prototype;\n return !(!Component || !Component.isReactComponent);\n }\n function createWorkInProgress(current, pendingProps) {\n var workInProgress = current.alternate;\n null === workInProgress\n ? ((workInProgress = createFiber(\n current.tag,\n pendingProps,\n current.key,\n current.mode\n )),\n (workInProgress.elementType = current.elementType),\n (workInProgress.type = current.type),\n (workInProgress.stateNode = current.stateNode),\n (workInProgress._debugOwner = current._debugOwner),\n (workInProgress._debugStack = current._debugStack),\n (workInProgress._debugTask = current._debugTask),\n (workInProgress._debugHookTypes = current._debugHookTypes),\n (workInProgress.alternate = current),\n (current.alternate = workInProgress))\n : ((workInProgress.pendingProps = pendingProps),\n (workInProgress.type = current.type),\n (workInProgress.flags = 0),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.deletions = null),\n (workInProgress.actualDuration = -0),\n (workInProgress.actualStartTime = -1.1));\n workInProgress.flags = current.flags & 65011712;\n workInProgress.childLanes = current.childLanes;\n workInProgress.lanes = current.lanes;\n workInProgress.child = current.child;\n workInProgress.memoizedProps = current.memoizedProps;\n workInProgress.memoizedState = current.memoizedState;\n workInProgress.updateQueue = current.updateQueue;\n pendingProps = current.dependencies;\n workInProgress.dependencies =\n null === pendingProps\n ? null\n : {\n lanes: pendingProps.lanes,\n firstContext: pendingProps.firstContext,\n _debugThenableState: pendingProps._debugThenableState\n };\n workInProgress.sibling = current.sibling;\n workInProgress.index = current.index;\n workInProgress.ref = current.ref;\n workInProgress.refCleanup = current.refCleanup;\n workInProgress.selfBaseDuration = current.selfBaseDuration;\n workInProgress.treeBaseDuration = current.treeBaseDuration;\n workInProgress._debugInfo = current._debugInfo;\n workInProgress._debugNeedsRemount = current._debugNeedsRemount;\n switch (workInProgress.tag) {\n case 0:\n case 15:\n workInProgress.type = resolveFunctionForHotReloading(current.type);\n break;\n case 1:\n workInProgress.type = resolveFunctionForHotReloading(current.type);\n break;\n case 11:\n workInProgress.type = resolveForwardRefForHotReloading(current.type);\n }\n return workInProgress;\n }\n function resetWorkInProgress(workInProgress, renderLanes) {\n workInProgress.flags &= 65011714;\n var current = workInProgress.alternate;\n null === current\n ? ((workInProgress.childLanes = 0),\n (workInProgress.lanes = renderLanes),\n (workInProgress.child = null),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.memoizedProps = null),\n (workInProgress.memoizedState = null),\n (workInProgress.updateQueue = null),\n (workInProgress.dependencies = null),\n (workInProgress.stateNode = null),\n (workInProgress.selfBaseDuration = 0),\n (workInProgress.treeBaseDuration = 0))\n : ((workInProgress.childLanes = current.childLanes),\n (workInProgress.lanes = current.lanes),\n (workInProgress.child = current.child),\n (workInProgress.subtreeFlags = 0),\n (workInProgress.deletions = null),\n (workInProgress.memoizedProps = current.memoizedProps),\n (workInProgress.memoizedState = current.memoizedState),\n (workInProgress.updateQueue = current.updateQueue),\n (workInProgress.type = current.type),\n (renderLanes = current.dependencies),\n (workInProgress.dependencies =\n null === renderLanes\n ? null\n : {\n lanes: renderLanes.lanes,\n firstContext: renderLanes.firstContext,\n _debugThenableState: renderLanes._debugThenableState\n }),\n (workInProgress.selfBaseDuration = current.selfBaseDuration),\n (workInProgress.treeBaseDuration = current.treeBaseDuration));\n return workInProgress;\n }\n function createFiberFromTypeAndProps(\n type,\n key,\n pendingProps,\n owner,\n mode,\n lanes\n ) {\n var fiberTag = 0,\n resolvedType = type;\n if (\"function\" === typeof type)\n shouldConstruct(type) && (fiberTag = 1),\n (resolvedType = resolveFunctionForHotReloading(resolvedType));\n else if (\"string\" === typeof type)\n (fiberTag = getHostContext()),\n (fiberTag = isHostHoistableType(type, pendingProps, fiberTag)\n ? 26\n : \"html\" === type || \"head\" === type || \"body\" === type\n ? 27\n : 5);\n else\n a: switch (type) {\n case REACT_ACTIVITY_TYPE:\n return (\n (key = createFiber(31, pendingProps, key, mode)),\n (key.elementType = REACT_ACTIVITY_TYPE),\n (key.lanes = lanes),\n key\n );\n case REACT_FRAGMENT_TYPE:\n return createFiberFromFragment(\n pendingProps.children,\n mode,\n lanes,\n key\n );\n case REACT_STRICT_MODE_TYPE:\n fiberTag = 8;\n mode |= StrictLegacyMode;\n mode |= StrictEffectsMode;\n break;\n case REACT_PROFILER_TYPE:\n return (\n (type = pendingProps),\n (owner = mode),\n \"string\" !== typeof type.id &&\n console.error(\n 'Profiler must specify an \"id\" of type `string` as a prop. Received the type `%s` instead.',\n typeof type.id\n ),\n (key = createFiber(12, type, key, owner | ProfileMode)),\n (key.elementType = REACT_PROFILER_TYPE),\n (key.lanes = lanes),\n (key.stateNode = { effectDuration: 0, passiveEffectDuration: 0 }),\n key\n );\n case REACT_SUSPENSE_TYPE:\n return (\n (key = createFiber(13, pendingProps, key, mode)),\n (key.elementType = REACT_SUSPENSE_TYPE),\n (key.lanes = lanes),\n key\n );\n case REACT_SUSPENSE_LIST_TYPE:\n return (\n (key = createFiber(19, pendingProps, key, mode)),\n (key.elementType = REACT_SUSPENSE_LIST_TYPE),\n (key.lanes = lanes),\n key\n );\n default:\n if (\"object\" === typeof type && null !== type)\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n fiberTag = 10;\n break a;\n case REACT_CONSUMER_TYPE:\n fiberTag = 9;\n break a;\n case REACT_FORWARD_REF_TYPE:\n fiberTag = 11;\n resolvedType = resolveForwardRefForHotReloading(resolvedType);\n break a;\n case REACT_MEMO_TYPE:\n fiberTag = 14;\n break a;\n case REACT_LAZY_TYPE:\n fiberTag = 16;\n resolvedType = null;\n break a;\n }\n resolvedType = \"\";\n if (\n void 0 === type ||\n (\"object\" === typeof type &&\n null !== type &&\n 0 === Object.keys(type).length)\n )\n resolvedType +=\n \" You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\";\n null === type\n ? (pendingProps = \"null\")\n : isArrayImpl(type)\n ? (pendingProps = \"array\")\n : void 0 !== type && type.$$typeof === REACT_ELEMENT_TYPE\n ? ((pendingProps =\n \"<\" +\n (getComponentNameFromType(type.type) || \"Unknown\") +\n \" />\"),\n (resolvedType =\n \" Did you accidentally export a JSX literal instead of a component?\"))\n : (pendingProps = typeof type);\n (fiberTag = owner ? getComponentNameFromOwner(owner) : null) &&\n (resolvedType +=\n \"\\n\\nCheck the render method of `\" + fiberTag + \"`.\");\n fiberTag = 29;\n pendingProps = Error(\n \"Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: \" +\n (pendingProps + \".\" + resolvedType)\n );\n resolvedType = null;\n }\n key = createFiber(fiberTag, pendingProps, key, mode);\n key.elementType = type;\n key.type = resolvedType;\n key.lanes = lanes;\n key._debugOwner = owner;\n return key;\n }\n function createFiberFromElement(element, mode, lanes) {\n mode = createFiberFromTypeAndProps(\n element.type,\n element.key,\n element.props,\n element._owner,\n mode,\n lanes\n );\n mode._debugOwner = element._owner;\n mode._debugStack = element._debugStack;\n mode._debugTask = element._debugTask;\n return mode;\n }\n function createFiberFromFragment(elements, mode, lanes, key) {\n elements = createFiber(7, elements, key, mode);\n elements.lanes = lanes;\n return elements;\n }\n function createFiberFromText(content, mode, lanes) {\n content = createFiber(6, content, null, mode);\n content.lanes = lanes;\n return content;\n }\n function createFiberFromDehydratedFragment(dehydratedNode) {\n var fiber = createFiber(18, null, null, NoMode);\n fiber.stateNode = dehydratedNode;\n return fiber;\n }\n function createFiberFromPortal(portal, mode, lanes) {\n mode = createFiber(\n 4,\n null !== portal.children ? portal.children : [],\n portal.key,\n mode\n );\n mode.lanes = lanes;\n mode.stateNode = {\n containerInfo: portal.containerInfo,\n pendingChildren: null,\n implementation: portal.implementation\n };\n return mode;\n }\n function createCapturedValueAtFiber(value, source) {\n if (\"object\" === typeof value && null !== value) {\n var existing = CapturedStacks.get(value);\n if (void 0 !== existing) return existing;\n source = {\n value: value,\n source: source,\n stack: getStackByFiberInDevAndProd(source)\n };\n CapturedStacks.set(value, source);\n return source;\n }\n return {\n value: value,\n source: source,\n stack: getStackByFiberInDevAndProd(source)\n };\n }\n function pushTreeFork(workInProgress, totalChildren) {\n warnIfNotHydrating();\n forkStack[forkStackIndex++] = treeForkCount;\n forkStack[forkStackIndex++] = treeForkProvider;\n treeForkProvider = workInProgress;\n treeForkCount = totalChildren;\n }\n function pushTreeId(workInProgress, totalChildren, index) {\n warnIfNotHydrating();\n idStack[idStackIndex++] = treeContextId;\n idStack[idStackIndex++] = treeContextOverflow;\n idStack[idStackIndex++] = treeContextProvider;\n treeContextProvider = workInProgress;\n var baseIdWithLeadingBit = treeContextId;\n workInProgress = treeContextOverflow;\n var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;\n baseIdWithLeadingBit &= ~(1 << baseLength);\n index += 1;\n var length = 32 - clz32(totalChildren) + baseLength;\n if (30 < length) {\n var numberOfOverflowBits = baseLength - (baseLength % 5);\n length = (\n baseIdWithLeadingBit &\n ((1 << numberOfOverflowBits) - 1)\n ).toString(32);\n baseIdWithLeadingBit >>= numberOfOverflowBits;\n baseLength -= numberOfOverflowBits;\n treeContextId =\n (1 << (32 - clz32(totalChildren) + baseLength)) |\n (index << baseLength) |\n baseIdWithLeadingBit;\n treeContextOverflow = length + workInProgress;\n } else\n (treeContextId =\n (1 << length) | (index << baseLength) | baseIdWithLeadingBit),\n (treeContextOverflow = workInProgress);\n }\n function pushMaterializedTreeId(workInProgress) {\n warnIfNotHydrating();\n null !== workInProgress.return &&\n (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0));\n }\n function popTreeContext(workInProgress) {\n for (; workInProgress === treeForkProvider; )\n (treeForkProvider = forkStack[--forkStackIndex]),\n (forkStack[forkStackIndex] = null),\n (treeForkCount = forkStack[--forkStackIndex]),\n (forkStack[forkStackIndex] = null);\n for (; workInProgress === treeContextProvider; )\n (treeContextProvider = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null),\n (treeContextOverflow = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null),\n (treeContextId = idStack[--idStackIndex]),\n (idStack[idStackIndex] = null);\n }\n function getSuspendedTreeContext() {\n warnIfNotHydrating();\n return null !== treeContextProvider\n ? { id: treeContextId, overflow: treeContextOverflow }\n : null;\n }\n function restoreSuspendedTreeContext(workInProgress, suspendedContext) {\n warnIfNotHydrating();\n idStack[idStackIndex++] = treeContextId;\n idStack[idStackIndex++] = treeContextOverflow;\n idStack[idStackIndex++] = treeContextProvider;\n treeContextId = suspendedContext.id;\n treeContextOverflow = suspendedContext.overflow;\n treeContextProvider = workInProgress;\n }\n function warnIfNotHydrating() {\n isHydrating ||\n console.error(\n \"Expected to be hydrating. This is a bug in React. Please file an issue.\"\n );\n }\n function buildHydrationDiffNode(fiber, distanceFromLeaf) {\n if (null === fiber.return) {\n if (null === hydrationDiffRootDEV)\n hydrationDiffRootDEV = {\n fiber: fiber,\n children: [],\n serverProps: void 0,\n serverTail: [],\n distanceFromLeaf: distanceFromLeaf\n };\n else {\n if (hydrationDiffRootDEV.fiber !== fiber)\n throw Error(\n \"Saw multiple hydration diff roots in a pass. This is a bug in React.\"\n );\n hydrationDiffRootDEV.distanceFromLeaf > distanceFromLeaf &&\n (hydrationDiffRootDEV.distanceFromLeaf = distanceFromLeaf);\n }\n return hydrationDiffRootDEV;\n }\n var siblings = buildHydrationDiffNode(\n fiber.return,\n distanceFromLeaf + 1\n ).children;\n if (0 < siblings.length && siblings[siblings.length - 1].fiber === fiber)\n return (\n (siblings = siblings[siblings.length - 1]),\n siblings.distanceFromLeaf > distanceFromLeaf &&\n (siblings.distanceFromLeaf = distanceFromLeaf),\n siblings\n );\n distanceFromLeaf = {\n fiber: fiber,\n children: [],\n serverProps: void 0,\n serverTail: [],\n distanceFromLeaf: distanceFromLeaf\n };\n siblings.push(distanceFromLeaf);\n return distanceFromLeaf;\n }\n function warnIfHydrating() {\n isHydrating &&\n console.error(\n \"We should not be hydrating here. This is a bug in React. Please file a bug.\"\n );\n }\n function warnNonHydratedInstance(fiber, rejectedCandidate) {\n didSuspendOrErrorDEV ||\n ((fiber = buildHydrationDiffNode(fiber, 0)),\n (fiber.serverProps = null),\n null !== rejectedCandidate &&\n ((rejectedCandidate =\n describeHydratableInstanceForDevWarnings(rejectedCandidate)),\n fiber.serverTail.push(rejectedCandidate)));\n }\n function throwOnHydrationMismatch(fiber) {\n var fromText =\n 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : !1,\n diff = \"\",\n diffRoot = hydrationDiffRootDEV;\n null !== diffRoot &&\n ((hydrationDiffRootDEV = null), (diff = describeDiff(diffRoot)));\n queueHydrationError(\n createCapturedValueAtFiber(\n Error(\n \"Hydration failed because the server rendered \" +\n (fromText ? \"text\" : \"HTML\") +\n \" didn't match the client. As a result this tree will be regenerated on the client. This can happen if a SSR-ed Client Component used:\\n\\n- A server/client branch `if (typeof window !== 'undefined')`.\\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called.\\n- Date formatting in a user's locale which doesn't match the server.\\n- External changing data without sending a snapshot of it along with the HTML.\\n- Invalid HTML tag nesting.\\n\\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\\n\\nhttps://react.dev/link/hydration-mismatch\" +\n diff\n ),\n fiber\n )\n );\n throw HydrationMismatchException;\n }\n function prepareToHydrateHostInstance(fiber) {\n var didHydrate = fiber.stateNode;\n var type = fiber.type,\n props = fiber.memoizedProps;\n didHydrate[internalInstanceKey] = fiber;\n didHydrate[internalPropsKey] = props;\n validatePropertiesInDevelopment(type, props);\n switch (type) {\n case \"dialog\":\n listenToNonDelegatedEvent(\"cancel\", didHydrate);\n listenToNonDelegatedEvent(\"close\", didHydrate);\n break;\n case \"iframe\":\n case \"object\":\n case \"embed\":\n listenToNonDelegatedEvent(\"load\", didHydrate);\n break;\n case \"video\":\n case \"audio\":\n for (type = 0; type < mediaEventTypes.length; type++)\n listenToNonDelegatedEvent(mediaEventTypes[type], didHydrate);\n break;\n case \"source\":\n listenToNonDelegatedEvent(\"error\", didHydrate);\n break;\n case \"img\":\n case \"image\":\n case \"link\":\n listenToNonDelegatedEvent(\"error\", didHydrate);\n listenToNonDelegatedEvent(\"load\", didHydrate);\n break;\n case \"details\":\n listenToNonDelegatedEvent(\"toggle\", didHydrate);\n break;\n case \"input\":\n checkControlledValueProps(\"input\", props);\n listenToNonDelegatedEvent(\"invalid\", didHydrate);\n validateInputProps(didHydrate, props);\n initInput(\n didHydrate,\n props.value,\n props.defaultValue,\n props.checked,\n props.defaultChecked,\n props.type,\n props.name,\n !0\n );\n break;\n case \"option\":\n validateOptionProps(didHydrate, props);\n break;\n case \"select\":\n checkControlledValueProps(\"select\", props);\n listenToNonDelegatedEvent(\"invalid\", didHydrate);\n validateSelectProps(didHydrate, props);\n break;\n case \"textarea\":\n checkControlledValueProps(\"textarea\", props),\n listenToNonDelegatedEvent(\"invalid\", didHydrate),\n validateTextareaProps(didHydrate, props),\n initTextarea(\n didHydrate,\n props.value,\n props.defaultValue,\n props.children\n );\n }\n type = props.children;\n (\"string\" !== typeof type &&\n \"number\" !== typeof type &&\n \"bigint\" !== typeof type) ||\n didHydrate.textContent === \"\" + type ||\n !0 === props.suppressHydrationWarning ||\n checkForUnmatchedText(didHydrate.textContent, type)\n ? (null != props.popover &&\n (listenToNonDelegatedEvent(\"beforetoggle\", didHydrate),\n listenToNonDelegatedEvent(\"toggle\", didHydrate)),\n null != props.onScroll &&\n listenToNonDelegatedEvent(\"scroll\", didHydrate),\n null != props.onScrollEnd &&\n listenToNonDelegatedEvent(\"scrollend\", didHydrate),\n null != props.onClick && (didHydrate.onclick = noop$1),\n (didHydrate = !0))\n : (didHydrate = !1);\n didHydrate || throwOnHydrationMismatch(fiber, !0);\n }\n function popToNextHostParent(fiber) {\n for (hydrationParentFiber = fiber.return; hydrationParentFiber; )\n switch (hydrationParentFiber.tag) {\n case 5:\n case 31:\n case 13:\n rootOrSingletonContext = !1;\n return;\n case 27:\n case 3:\n rootOrSingletonContext = !0;\n return;\n default:\n hydrationParentFiber = hydrationParentFiber.return;\n }\n }\n function popHydrationState(fiber) {\n if (fiber !== hydrationParentFiber) return !1;\n if (!isHydrating)\n return popToNextHostParent(fiber), (isHydrating = !0), !1;\n var tag = fiber.tag,\n JSCompiler_temp;\n if ((JSCompiler_temp = 3 !== tag && 27 !== tag)) {\n if ((JSCompiler_temp = 5 === tag))\n (JSCompiler_temp = fiber.type),\n (JSCompiler_temp =\n !(\"form\" !== JSCompiler_temp && \"button\" !== JSCompiler_temp) ||\n shouldSetTextContent(fiber.type, fiber.memoizedProps));\n JSCompiler_temp = !JSCompiler_temp;\n }\n if (JSCompiler_temp && nextHydratableInstance) {\n for (JSCompiler_temp = nextHydratableInstance; JSCompiler_temp; ) {\n var diffNode = buildHydrationDiffNode(fiber, 0),\n description =\n describeHydratableInstanceForDevWarnings(JSCompiler_temp);\n diffNode.serverTail.push(description);\n JSCompiler_temp =\n \"Suspense\" === description.type\n ? getNextHydratableInstanceAfterHydrationBoundary(JSCompiler_temp)\n : getNextHydratable(JSCompiler_temp.nextSibling);\n }\n throwOnHydrationMismatch(fiber);\n }\n popToNextHostParent(fiber);\n if (13 === tag) {\n fiber = fiber.memoizedState;\n fiber = null !== fiber ? fiber.dehydrated : null;\n if (!fiber)\n throw Error(\n \"Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue.\"\n );\n nextHydratableInstance =\n getNextHydratableInstanceAfterHydrationBoundary(fiber);\n } else if (31 === tag) {\n fiber = fiber.memoizedState;\n fiber = null !== fiber ? fiber.dehydrated : null;\n if (!fiber)\n throw Error(\n \"Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue.\"\n );\n nextHydratableInstance =\n getNextHydratableInstanceAfterHydrationBoundary(fiber);\n } else\n 27 === tag\n ? ((tag = nextHydratableInstance),\n isSingletonScope(fiber.type)\n ? ((fiber = previousHydratableOnEnteringScopedSingleton),\n (previousHydratableOnEnteringScopedSingleton = null),\n (nextHydratableInstance = fiber))\n : (nextHydratableInstance = tag))\n : (nextHydratableInstance = hydrationParentFiber\n ? getNextHydratable(fiber.stateNode.nextSibling)\n : null);\n return !0;\n }\n function resetHydrationState() {\n nextHydratableInstance = hydrationParentFiber = null;\n didSuspendOrErrorDEV = isHydrating = !1;\n }\n function upgradeHydrationErrorsToRecoverable() {\n var queuedErrors = hydrationErrors;\n null !== queuedErrors &&\n (null === workInProgressRootRecoverableErrors\n ? (workInProgressRootRecoverableErrors = queuedErrors)\n : workInProgressRootRecoverableErrors.push.apply(\n workInProgressRootRecoverableErrors,\n queuedErrors\n ),\n (hydrationErrors = null));\n return queuedErrors;\n }\n function queueHydrationError(error) {\n null === hydrationErrors\n ? (hydrationErrors = [error])\n : hydrationErrors.push(error);\n }\n function emitPendingHydrationWarnings() {\n var diffRoot = hydrationDiffRootDEV;\n if (null !== diffRoot) {\n hydrationDiffRootDEV = null;\n for (var diff = describeDiff(diffRoot); 0 < diffRoot.children.length; )\n diffRoot = diffRoot.children[0];\n runWithFiberInDEV(diffRoot.fiber, function () {\n console.error(\n \"A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR-ed Client Component used:\\n\\n- A server/client branch `if (typeof window !== 'undefined')`.\\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called.\\n- Date formatting in a user's locale which doesn't match the server.\\n- External changing data without sending a snapshot of it along with the HTML.\\n- Invalid HTML tag nesting.\\n\\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\\n\\n%s%s\",\n \"https://react.dev/link/hydration-mismatch\",\n diff\n );\n });\n }\n }\n function resetContextDependencies() {\n lastContextDependency = currentlyRenderingFiber$1 = null;\n isDisallowedContextReadInDEV = !1;\n }\n function pushProvider(providerFiber, context, nextValue) {\n push(valueCursor, context._currentValue, providerFiber);\n context._currentValue = nextValue;\n push(rendererCursorDEV, context._currentRenderer, providerFiber);\n void 0 !== context._currentRenderer &&\n null !== context._currentRenderer &&\n context._currentRenderer !== rendererSigil &&\n console.error(\n \"Detected multiple renderers concurrently rendering the same context provider. This is currently unsupported.\"\n );\n context._currentRenderer = rendererSigil;\n }\n function popProvider(context, providerFiber) {\n context._currentValue = valueCursor.current;\n var currentRenderer = rendererCursorDEV.current;\n pop(rendererCursorDEV, providerFiber);\n context._currentRenderer = currentRenderer;\n pop(valueCursor, providerFiber);\n }\n function scheduleContextWorkOnParentPath(\n parent,\n renderLanes,\n propagationRoot\n ) {\n for (; null !== parent; ) {\n var alternate = parent.alternate;\n (parent.childLanes & renderLanes) !== renderLanes\n ? ((parent.childLanes |= renderLanes),\n null !== alternate && (alternate.childLanes |= renderLanes))\n : null !== alternate &&\n (alternate.childLanes & renderLanes) !== renderLanes &&\n (alternate.childLanes |= renderLanes);\n if (parent === propagationRoot) break;\n parent = parent.return;\n }\n parent !== propagationRoot &&\n console.error(\n \"Expected to find the propagation root when scheduling context work. This error is likely caused by a bug in React. Please file an issue.\"\n );\n }\n function propagateContextChanges(\n workInProgress,\n contexts,\n renderLanes,\n forcePropagateEntireTree\n ) {\n var fiber = workInProgress.child;\n null !== fiber && (fiber.return = workInProgress);\n for (; null !== fiber; ) {\n var list = fiber.dependencies;\n if (null !== list) {\n var nextFiber = fiber.child;\n list = list.firstContext;\n a: for (; null !== list; ) {\n var dependency = list;\n list = fiber;\n for (var i = 0; i < contexts.length; i++)\n if (dependency.context === contexts[i]) {\n list.lanes |= renderLanes;\n dependency = list.alternate;\n null !== dependency && (dependency.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(\n list.return,\n renderLanes,\n workInProgress\n );\n forcePropagateEntireTree || (nextFiber = null);\n break a;\n }\n list = dependency.next;\n }\n } else if (18 === fiber.tag) {\n nextFiber = fiber.return;\n if (null === nextFiber)\n throw Error(\n \"We just came from a parent so we must have had a parent. This is a bug in React.\"\n );\n nextFiber.lanes |= renderLanes;\n list = nextFiber.alternate;\n null !== list && (list.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(\n nextFiber,\n renderLanes,\n workInProgress\n );\n nextFiber = null;\n } else nextFiber = fiber.child;\n if (null !== nextFiber) nextFiber.return = fiber;\n else\n for (nextFiber = fiber; null !== nextFiber; ) {\n if (nextFiber === workInProgress) {\n nextFiber = null;\n break;\n }\n fiber = nextFiber.sibling;\n if (null !== fiber) {\n fiber.return = nextFiber.return;\n nextFiber = fiber;\n break;\n }\n nextFiber = nextFiber.return;\n }\n fiber = nextFiber;\n }\n }\n function propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n forcePropagateEntireTree\n ) {\n current = null;\n for (\n var parent = workInProgress, isInsidePropagationBailout = !1;\n null !== parent;\n\n ) {\n if (!isInsidePropagationBailout)\n if (0 !== (parent.flags & 524288)) isInsidePropagationBailout = !0;\n else if (0 !== (parent.flags & 262144)) break;\n if (10 === parent.tag) {\n var currentParent = parent.alternate;\n if (null === currentParent)\n throw Error(\"Should have a current fiber. This is a bug in React.\");\n currentParent = currentParent.memoizedProps;\n if (null !== currentParent) {\n var context = parent.type;\n objectIs(parent.pendingProps.value, currentParent.value) ||\n (null !== current\n ? current.push(context)\n : (current = [context]));\n }\n } else if (parent === hostTransitionProviderCursor.current) {\n currentParent = parent.alternate;\n if (null === currentParent)\n throw Error(\"Should have a current fiber. This is a bug in React.\");\n currentParent.memoizedState.memoizedState !==\n parent.memoizedState.memoizedState &&\n (null !== current\n ? current.push(HostTransitionContext)\n : (current = [HostTransitionContext]));\n }\n parent = parent.return;\n }\n null !== current &&\n propagateContextChanges(\n workInProgress,\n current,\n renderLanes,\n forcePropagateEntireTree\n );\n workInProgress.flags |= 262144;\n }\n function checkIfContextChanged(currentDependencies) {\n for (\n currentDependencies = currentDependencies.firstContext;\n null !== currentDependencies;\n\n ) {\n if (\n !objectIs(\n currentDependencies.context._currentValue,\n currentDependencies.memoizedValue\n )\n )\n return !0;\n currentDependencies = currentDependencies.next;\n }\n return !1;\n }\n function prepareToReadContext(workInProgress) {\n currentlyRenderingFiber$1 = workInProgress;\n lastContextDependency = null;\n workInProgress = workInProgress.dependencies;\n null !== workInProgress && (workInProgress.firstContext = null);\n }\n function readContext(context) {\n isDisallowedContextReadInDEV &&\n console.error(\n \"Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo().\"\n );\n return readContextForConsumer(currentlyRenderingFiber$1, context);\n }\n function readContextDuringReconciliation(consumer, context) {\n null === currentlyRenderingFiber$1 && prepareToReadContext(consumer);\n return readContextForConsumer(consumer, context);\n }\n function readContextForConsumer(consumer, context) {\n var value = context._currentValue;\n context = { context: context, memoizedValue: value, next: null };\n if (null === lastContextDependency) {\n if (null === consumer)\n throw Error(\n \"Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo().\"\n );\n lastContextDependency = context;\n consumer.dependencies = {\n lanes: 0,\n firstContext: context,\n _debugThenableState: null\n };\n consumer.flags |= 524288;\n } else lastContextDependency = lastContextDependency.next = context;\n return value;\n }\n function createCache() {\n return {\n controller: new AbortControllerLocal(),\n data: new Map(),\n refCount: 0\n };\n }\n function retainCache(cache) {\n cache.controller.signal.aborted &&\n console.warn(\n \"A cache instance was retained after it was already freed. This likely indicates a bug in React.\"\n );\n cache.refCount++;\n }\n function releaseCache(cache) {\n cache.refCount--;\n 0 > cache.refCount &&\n console.warn(\n \"A cache instance was released after it was already freed. This likely indicates a bug in React.\"\n );\n 0 === cache.refCount &&\n scheduleCallback$2(NormalPriority, function () {\n cache.controller.abort();\n });\n }\n function pushNestedEffectDurations() {\n var prevEffectDuration = profilerEffectDuration;\n profilerEffectDuration = 0;\n return prevEffectDuration;\n }\n function popNestedEffectDurations(prevEffectDuration) {\n var elapsedTime = profilerEffectDuration;\n profilerEffectDuration = prevEffectDuration;\n return elapsedTime;\n }\n function bubbleNestedEffectDurations(prevEffectDuration) {\n var elapsedTime = profilerEffectDuration;\n profilerEffectDuration += prevEffectDuration;\n return elapsedTime;\n }\n function pushComponentEffectStart() {\n var prevEffectStart = componentEffectStartTime;\n componentEffectStartTime = -1.1;\n return prevEffectStart;\n }\n function popComponentEffectStart(prevEffectStart) {\n 0 <= prevEffectStart && (componentEffectStartTime = prevEffectStart);\n }\n function startProfilerTimer(fiber) {\n profilerStartTime = now();\n 0 > fiber.actualStartTime && (fiber.actualStartTime = profilerStartTime);\n }\n function stopProfilerTimerIfRunningAndRecordDuration(fiber) {\n if (0 <= profilerStartTime) {\n var elapsedTime = now() - profilerStartTime;\n fiber.actualDuration += elapsedTime;\n fiber.selfBaseDuration = elapsedTime;\n profilerStartTime = -1;\n }\n }\n function stopProfilerTimerIfRunningAndRecordIncompleteDuration(fiber) {\n if (0 <= profilerStartTime) {\n var elapsedTime = now() - profilerStartTime;\n fiber.actualDuration += elapsedTime;\n profilerStartTime = -1;\n }\n }\n function recordEffectDuration() {\n if (0 <= profilerStartTime) {\n var elapsedTime = now() - profilerStartTime;\n profilerStartTime = -1;\n profilerEffectDuration += elapsedTime;\n }\n }\n function startEffectTimer() {\n profilerStartTime = now();\n 0 > componentEffectStartTime &&\n (componentEffectStartTime = profilerStartTime);\n }\n function transferActualDuration(fiber) {\n for (var child = fiber.child; child; )\n (fiber.actualDuration += child.actualDuration), (child = child.sibling);\n }\n function entangleAsyncAction(transition, thenable) {\n if (null === currentEntangledListeners) {\n var entangledListeners = (currentEntangledListeners = []);\n currentEntangledPendingCount = 0;\n currentEntangledLane = requestTransitionLane();\n currentEntangledActionThenable = {\n status: \"pending\",\n value: void 0,\n then: function (resolve) {\n entangledListeners.push(resolve);\n }\n };\n }\n currentEntangledPendingCount++;\n thenable.then(pingEngtangledActionScope, pingEngtangledActionScope);\n return thenable;\n }\n function pingEngtangledActionScope() {\n if (\n 0 === --currentEntangledPendingCount &&\n null !== currentEntangledListeners\n ) {\n null !== currentEntangledActionThenable &&\n (currentEntangledActionThenable.status = \"fulfilled\");\n var listeners = currentEntangledListeners;\n currentEntangledListeners = null;\n currentEntangledLane = 0;\n currentEntangledActionThenable = null;\n for (var i = 0; i < listeners.length; i++) (0, listeners[i])();\n }\n }\n function chainThenableValue(thenable, result) {\n var listeners = [],\n thenableWithOverride = {\n status: \"pending\",\n value: null,\n reason: null,\n then: function (resolve) {\n listeners.push(resolve);\n }\n };\n thenable.then(\n function () {\n thenableWithOverride.status = \"fulfilled\";\n thenableWithOverride.value = result;\n for (var i = 0; i < listeners.length; i++) (0, listeners[i])(result);\n },\n function (error) {\n thenableWithOverride.status = \"rejected\";\n thenableWithOverride.reason = error;\n for (error = 0; error < listeners.length; error++)\n (0, listeners[error])(void 0);\n }\n );\n return thenableWithOverride;\n }\n function peekCacheFromPool() {\n var cacheResumedFromPreviousRender = resumedCache.current;\n return null !== cacheResumedFromPreviousRender\n ? cacheResumedFromPreviousRender\n : workInProgressRoot.pooledCache;\n }\n function pushTransition(offscreenWorkInProgress, prevCachePool) {\n null === prevCachePool\n ? push(resumedCache, resumedCache.current, offscreenWorkInProgress)\n : push(resumedCache, prevCachePool.pool, offscreenWorkInProgress);\n }\n function getSuspendedCache() {\n var cacheFromPool = peekCacheFromPool();\n return null === cacheFromPool\n ? null\n : { parent: CacheContext._currentValue, pool: cacheFromPool };\n }\n function createThenableState() {\n return { didWarnAboutUncachedPromise: !1, thenables: [] };\n }\n function isThenableResolved(thenable) {\n thenable = thenable.status;\n return \"fulfilled\" === thenable || \"rejected\" === thenable;\n }\n function trackUsedThenable(thenableState, thenable, index) {\n null !== ReactSharedInternals.actQueue &&\n (ReactSharedInternals.didUsePromise = !0);\n var trackedThenables = thenableState.thenables;\n index = trackedThenables[index];\n void 0 === index\n ? trackedThenables.push(thenable)\n : index !== thenable &&\n (thenableState.didWarnAboutUncachedPromise ||\n ((thenableState.didWarnAboutUncachedPromise = !0),\n console.error(\n \"A component was suspended by an uncached promise. Creating promises inside a Client Component or hook is not yet supported, except via a Suspense-compatible library or framework.\"\n )),\n thenable.then(noop$1, noop$1),\n (thenable = index));\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw (\n ((thenableState = thenable.reason),\n checkIfUseWrappedInAsyncCatch(thenableState),\n thenableState)\n );\n default:\n if (\"string\" === typeof thenable.status)\n thenable.then(noop$1, noop$1);\n else {\n thenableState = workInProgressRoot;\n if (\n null !== thenableState &&\n 100 < thenableState.shellSuspendCounter\n )\n throw Error(\n \"An unknown Component is an async Client Component. Only Server Components can be async at the moment. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server.\"\n );\n thenableState = thenable;\n thenableState.status = \"pending\";\n thenableState.then(\n function (fulfilledValue) {\n if (\"pending\" === thenable.status) {\n var fulfilledThenable = thenable;\n fulfilledThenable.status = \"fulfilled\";\n fulfilledThenable.value = fulfilledValue;\n }\n },\n function (error) {\n if (\"pending\" === thenable.status) {\n var rejectedThenable = thenable;\n rejectedThenable.status = \"rejected\";\n rejectedThenable.reason = error;\n }\n }\n );\n }\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw (\n ((thenableState = thenable.reason),\n checkIfUseWrappedInAsyncCatch(thenableState),\n thenableState)\n );\n }\n suspendedThenable = thenable;\n needsToResetSuspendedThenableDEV = !0;\n throw SuspenseException;\n }\n }\n function getSuspendedThenable() {\n if (null === suspendedThenable)\n throw Error(\n \"Expected a suspended thenable. This is a bug in React. Please file an issue.\"\n );\n var thenable = suspendedThenable;\n suspendedThenable = null;\n needsToResetSuspendedThenableDEV = !1;\n return thenable;\n }\n function checkIfUseWrappedInAsyncCatch(rejectedReason) {\n if (\n rejectedReason === SuspenseException ||\n rejectedReason === SuspenseActionException\n )\n throw Error(\n \"Hooks are not supported inside an async component. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server.\"\n );\n }\n function pushDebugInfo(debugInfo) {\n var previousDebugInfo = currentDebugInfo;\n null != debugInfo &&\n (currentDebugInfo =\n null === previousDebugInfo\n ? debugInfo\n : previousDebugInfo.concat(debugInfo));\n return previousDebugInfo;\n }\n function validateFragmentProps(element, fiber, returnFiber) {\n for (var keys = Object.keys(element.props), i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (\"children\" !== key && \"key\" !== key) {\n null === fiber &&\n ((fiber = createFiberFromElement(element, returnFiber.mode, 0)),\n (fiber._debugInfo = currentDebugInfo),\n (fiber.return = returnFiber));\n runWithFiberInDEV(\n fiber,\n function (erroredKey) {\n console.error(\n \"Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.\",\n erroredKey\n );\n },\n key\n );\n break;\n }\n }\n }\n function unwrapThenable(thenable) {\n var index = thenableIndexCounter$1;\n thenableIndexCounter$1 += 1;\n null === thenableState$1 && (thenableState$1 = createThenableState());\n return trackUsedThenable(thenableState$1, thenable, index);\n }\n function coerceRef(workInProgress, element) {\n element = element.props.ref;\n workInProgress.ref = void 0 !== element ? element : null;\n }\n function throwOnInvalidObjectType(returnFiber, newChild) {\n if (newChild.$$typeof === REACT_LEGACY_ELEMENT_TYPE)\n throw Error(\n 'A React Element from an older version of React was rendered. This is not supported. It can happen if:\\n- Multiple copies of the \"react\" package is used.\\n- A library pre-bundled an old copy of \"react\" or \"react/jsx-runtime\".\\n- A compiler tries to \"inline\" JSX instead of using the runtime.'\n );\n returnFiber = Object.prototype.toString.call(newChild);\n throw Error(\n \"Objects are not valid as a React child (found: \" +\n (\"[object Object]\" === returnFiber\n ? \"object with keys {\" + Object.keys(newChild).join(\", \") + \"}\"\n : returnFiber) +\n \"). If you meant to render a collection of children, use an array instead.\"\n );\n }\n function warnOnFunctionType(returnFiber, invalidChild) {\n var parentName = getComponentNameFromFiber(returnFiber) || \"Component\";\n ownerHasFunctionTypeWarning[parentName] ||\n ((ownerHasFunctionTypeWarning[parentName] = !0),\n (invalidChild =\n invalidChild.displayName || invalidChild.name || \"Component\"),\n 3 === returnFiber.tag\n ? console.error(\n \"Functions are not valid as a React child. This may happen if you return %s instead of <%s /> from render. Or maybe you meant to call this function rather than return it.\\n root.render(%s)\",\n invalidChild,\n invalidChild,\n invalidChild\n )\n : console.error(\n \"Functions are not valid as a React child. This may happen if you return %s instead of <%s /> from render. Or maybe you meant to call this function rather than return it.\\n <%s>{%s}</%s>\",\n invalidChild,\n invalidChild,\n parentName,\n invalidChild,\n parentName\n ));\n }\n function warnOnSymbolType(returnFiber, invalidChild) {\n var parentName = getComponentNameFromFiber(returnFiber) || \"Component\";\n ownerHasSymbolTypeWarning[parentName] ||\n ((ownerHasSymbolTypeWarning[parentName] = !0),\n (invalidChild = String(invalidChild)),\n 3 === returnFiber.tag\n ? console.error(\n \"Symbols are not valid as a React child.\\n root.render(%s)\",\n invalidChild\n )\n : console.error(\n \"Symbols are not valid as a React child.\\n <%s>%s</%s>\",\n parentName,\n invalidChild,\n parentName\n ));\n }\n function createChildReconciler(shouldTrackSideEffects) {\n function deleteChild(returnFiber, childToDelete) {\n if (shouldTrackSideEffects) {\n var deletions = returnFiber.deletions;\n null === deletions\n ? ((returnFiber.deletions = [childToDelete]),\n (returnFiber.flags |= 16))\n : deletions.push(childToDelete);\n }\n }\n function deleteRemainingChildren(returnFiber, currentFirstChild) {\n if (!shouldTrackSideEffects) return null;\n for (; null !== currentFirstChild; )\n deleteChild(returnFiber, currentFirstChild),\n (currentFirstChild = currentFirstChild.sibling);\n return null;\n }\n function mapRemainingChildren(currentFirstChild) {\n for (var existingChildren = new Map(); null !== currentFirstChild; )\n null !== currentFirstChild.key\n ? existingChildren.set(currentFirstChild.key, currentFirstChild)\n : existingChildren.set(currentFirstChild.index, currentFirstChild),\n (currentFirstChild = currentFirstChild.sibling);\n return existingChildren;\n }\n function useFiber(fiber, pendingProps) {\n fiber = createWorkInProgress(fiber, pendingProps);\n fiber.index = 0;\n fiber.sibling = null;\n return fiber;\n }\n function placeChild(newFiber, lastPlacedIndex, newIndex) {\n newFiber.index = newIndex;\n if (!shouldTrackSideEffects)\n return (newFiber.flags |= 1048576), lastPlacedIndex;\n newIndex = newFiber.alternate;\n if (null !== newIndex)\n return (\n (newIndex = newIndex.index),\n newIndex < lastPlacedIndex\n ? ((newFiber.flags |= 67108866), lastPlacedIndex)\n : newIndex\n );\n newFiber.flags |= 67108866;\n return lastPlacedIndex;\n }\n function placeSingleChild(newFiber) {\n shouldTrackSideEffects &&\n null === newFiber.alternate &&\n (newFiber.flags |= 67108866);\n return newFiber;\n }\n function updateTextNode(returnFiber, current, textContent, lanes) {\n if (null === current || 6 !== current.tag)\n return (\n (current = createFiberFromText(\n textContent,\n returnFiber.mode,\n lanes\n )),\n (current.return = returnFiber),\n (current._debugOwner = returnFiber),\n (current._debugTask = returnFiber._debugTask),\n (current._debugInfo = currentDebugInfo),\n current\n );\n current = useFiber(current, textContent);\n current.return = returnFiber;\n current._debugInfo = currentDebugInfo;\n return current;\n }\n function updateElement(returnFiber, current, element, lanes) {\n var elementType = element.type;\n if (elementType === REACT_FRAGMENT_TYPE)\n return (\n (current = updateFragment(\n returnFiber,\n current,\n element.props.children,\n lanes,\n element.key\n )),\n validateFragmentProps(element, current, returnFiber),\n current\n );\n if (\n null !== current &&\n (current.elementType === elementType ||\n isCompatibleFamilyForHotReloading(current, element) ||\n (\"object\" === typeof elementType &&\n null !== elementType &&\n elementType.$$typeof === REACT_LAZY_TYPE &&\n callLazyInitInDEV(elementType) === current.type))\n )\n return (\n (current = useFiber(current, element.props)),\n coerceRef(current, element),\n (current.return = returnFiber),\n (current._debugOwner = element._owner),\n (current._debugInfo = currentDebugInfo),\n current\n );\n current = createFiberFromElement(element, returnFiber.mode, lanes);\n coerceRef(current, element);\n current.return = returnFiber;\n current._debugInfo = currentDebugInfo;\n return current;\n }\n function updatePortal(returnFiber, current, portal, lanes) {\n if (\n null === current ||\n 4 !== current.tag ||\n current.stateNode.containerInfo !== portal.containerInfo ||\n current.stateNode.implementation !== portal.implementation\n )\n return (\n (current = createFiberFromPortal(portal, returnFiber.mode, lanes)),\n (current.return = returnFiber),\n (current._debugInfo = currentDebugInfo),\n current\n );\n current = useFiber(current, portal.children || []);\n current.return = returnFiber;\n current._debugInfo = currentDebugInfo;\n return current;\n }\n function updateFragment(returnFiber, current, fragment, lanes, key) {\n if (null === current || 7 !== current.tag)\n return (\n (current = createFiberFromFragment(\n fragment,\n returnFiber.mode,\n lanes,\n key\n )),\n (current.return = returnFiber),\n (current._debugOwner = returnFiber),\n (current._debugTask = returnFiber._debugTask),\n (current._debugInfo = currentDebugInfo),\n current\n );\n current = useFiber(current, fragment);\n current.return = returnFiber;\n current._debugInfo = currentDebugInfo;\n return current;\n }\n function createChild(returnFiber, newChild, lanes) {\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return (\n (newChild = createFiberFromText(\n \"\" + newChild,\n returnFiber.mode,\n lanes\n )),\n (newChild.return = returnFiber),\n (newChild._debugOwner = returnFiber),\n (newChild._debugTask = returnFiber._debugTask),\n (newChild._debugInfo = currentDebugInfo),\n newChild\n );\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return (\n (lanes = createFiberFromElement(\n newChild,\n returnFiber.mode,\n lanes\n )),\n coerceRef(lanes, newChild),\n (lanes.return = returnFiber),\n (returnFiber = pushDebugInfo(newChild._debugInfo)),\n (lanes._debugInfo = currentDebugInfo),\n (currentDebugInfo = returnFiber),\n lanes\n );\n case REACT_PORTAL_TYPE:\n return (\n (newChild = createFiberFromPortal(\n newChild,\n returnFiber.mode,\n lanes\n )),\n (newChild.return = returnFiber),\n (newChild._debugInfo = currentDebugInfo),\n newChild\n );\n case REACT_LAZY_TYPE:\n var _prevDebugInfo = pushDebugInfo(newChild._debugInfo);\n newChild = callLazyInitInDEV(newChild);\n returnFiber = createChild(returnFiber, newChild, lanes);\n currentDebugInfo = _prevDebugInfo;\n return returnFiber;\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return (\n (lanes = createFiberFromFragment(\n newChild,\n returnFiber.mode,\n lanes,\n null\n )),\n (lanes.return = returnFiber),\n (lanes._debugOwner = returnFiber),\n (lanes._debugTask = returnFiber._debugTask),\n (returnFiber = pushDebugInfo(newChild._debugInfo)),\n (lanes._debugInfo = currentDebugInfo),\n (currentDebugInfo = returnFiber),\n lanes\n );\n if (\"function\" === typeof newChild.then)\n return (\n (_prevDebugInfo = pushDebugInfo(newChild._debugInfo)),\n (returnFiber = createChild(\n returnFiber,\n unwrapThenable(newChild),\n lanes\n )),\n (currentDebugInfo = _prevDebugInfo),\n returnFiber\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return createChild(\n returnFiber,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n \"function\" === typeof newChild &&\n warnOnFunctionType(returnFiber, newChild);\n \"symbol\" === typeof newChild && warnOnSymbolType(returnFiber, newChild);\n return null;\n }\n function updateSlot(returnFiber, oldFiber, newChild, lanes) {\n var key = null !== oldFiber ? oldFiber.key : null;\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return null !== key\n ? null\n : updateTextNode(returnFiber, oldFiber, \"\" + newChild, lanes);\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return newChild.key === key\n ? ((key = pushDebugInfo(newChild._debugInfo)),\n (returnFiber = updateElement(\n returnFiber,\n oldFiber,\n newChild,\n lanes\n )),\n (currentDebugInfo = key),\n returnFiber)\n : null;\n case REACT_PORTAL_TYPE:\n return newChild.key === key\n ? updatePortal(returnFiber, oldFiber, newChild, lanes)\n : null;\n case REACT_LAZY_TYPE:\n return (\n (key = pushDebugInfo(newChild._debugInfo)),\n (newChild = callLazyInitInDEV(newChild)),\n (returnFiber = updateSlot(\n returnFiber,\n oldFiber,\n newChild,\n lanes\n )),\n (currentDebugInfo = key),\n returnFiber\n );\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild)) {\n if (null !== key) return null;\n key = pushDebugInfo(newChild._debugInfo);\n returnFiber = updateFragment(\n returnFiber,\n oldFiber,\n newChild,\n lanes,\n null\n );\n currentDebugInfo = key;\n return returnFiber;\n }\n if (\"function\" === typeof newChild.then)\n return (\n (key = pushDebugInfo(newChild._debugInfo)),\n (returnFiber = updateSlot(\n returnFiber,\n oldFiber,\n unwrapThenable(newChild),\n lanes\n )),\n (currentDebugInfo = key),\n returnFiber\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return updateSlot(\n returnFiber,\n oldFiber,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n \"function\" === typeof newChild &&\n warnOnFunctionType(returnFiber, newChild);\n \"symbol\" === typeof newChild && warnOnSymbolType(returnFiber, newChild);\n return null;\n }\n function updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n newChild,\n lanes\n ) {\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return (\n (existingChildren = existingChildren.get(newIdx) || null),\n updateTextNode(returnFiber, existingChildren, \"\" + newChild, lanes)\n );\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return (\n (newIdx =\n existingChildren.get(\n null === newChild.key ? newIdx : newChild.key\n ) || null),\n (existingChildren = pushDebugInfo(newChild._debugInfo)),\n (returnFiber = updateElement(\n returnFiber,\n newIdx,\n newChild,\n lanes\n )),\n (currentDebugInfo = existingChildren),\n returnFiber\n );\n case REACT_PORTAL_TYPE:\n return (\n (existingChildren =\n existingChildren.get(\n null === newChild.key ? newIdx : newChild.key\n ) || null),\n updatePortal(returnFiber, existingChildren, newChild, lanes)\n );\n case REACT_LAZY_TYPE:\n var _prevDebugInfo7 = pushDebugInfo(newChild._debugInfo);\n newChild = callLazyInitInDEV(newChild);\n returnFiber = updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n newChild,\n lanes\n );\n currentDebugInfo = _prevDebugInfo7;\n return returnFiber;\n }\n if (isArrayImpl(newChild) || getIteratorFn(newChild))\n return (\n (newIdx = existingChildren.get(newIdx) || null),\n (existingChildren = pushDebugInfo(newChild._debugInfo)),\n (returnFiber = updateFragment(\n returnFiber,\n newIdx,\n newChild,\n lanes,\n null\n )),\n (currentDebugInfo = existingChildren),\n returnFiber\n );\n if (\"function\" === typeof newChild.then)\n return (\n (_prevDebugInfo7 = pushDebugInfo(newChild._debugInfo)),\n (returnFiber = updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n unwrapThenable(newChild),\n lanes\n )),\n (currentDebugInfo = _prevDebugInfo7),\n returnFiber\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return updateFromMap(\n existingChildren,\n returnFiber,\n newIdx,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n \"function\" === typeof newChild &&\n warnOnFunctionType(returnFiber, newChild);\n \"symbol\" === typeof newChild && warnOnSymbolType(returnFiber, newChild);\n return null;\n }\n function warnOnInvalidKey(returnFiber, workInProgress, child, knownKeys) {\n if (\"object\" !== typeof child || null === child) return knownKeys;\n switch (child.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n warnForMissingKey(returnFiber, workInProgress, child);\n var key = child.key;\n if (\"string\" !== typeof key) break;\n if (null === knownKeys) {\n knownKeys = new Set();\n knownKeys.add(key);\n break;\n }\n if (!knownKeys.has(key)) {\n knownKeys.add(key);\n break;\n }\n runWithFiberInDEV(workInProgress, function () {\n console.error(\n \"Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted \\u2014 the behavior is unsupported and could change in a future version.\",\n key\n );\n });\n break;\n case REACT_LAZY_TYPE:\n (child = callLazyInitInDEV(child)),\n warnOnInvalidKey(returnFiber, workInProgress, child, knownKeys);\n }\n return knownKeys;\n }\n function reconcileChildrenArray(\n returnFiber,\n currentFirstChild,\n newChildren,\n lanes\n ) {\n for (\n var knownKeys = null,\n resultingFirstChild = null,\n previousNewFiber = null,\n oldFiber = currentFirstChild,\n newIdx = (currentFirstChild = 0),\n nextOldFiber = null;\n null !== oldFiber && newIdx < newChildren.length;\n newIdx++\n ) {\n oldFiber.index > newIdx\n ? ((nextOldFiber = oldFiber), (oldFiber = null))\n : (nextOldFiber = oldFiber.sibling);\n var newFiber = updateSlot(\n returnFiber,\n oldFiber,\n newChildren[newIdx],\n lanes\n );\n if (null === newFiber) {\n null === oldFiber && (oldFiber = nextOldFiber);\n break;\n }\n knownKeys = warnOnInvalidKey(\n returnFiber,\n newFiber,\n newChildren[newIdx],\n knownKeys\n );\n shouldTrackSideEffects &&\n oldFiber &&\n null === newFiber.alternate &&\n deleteChild(returnFiber, oldFiber);\n currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n null === previousNewFiber\n ? (resultingFirstChild = newFiber)\n : (previousNewFiber.sibling = newFiber);\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n if (newIdx === newChildren.length)\n return (\n deleteRemainingChildren(returnFiber, oldFiber),\n isHydrating && pushTreeFork(returnFiber, newIdx),\n resultingFirstChild\n );\n if (null === oldFiber) {\n for (; newIdx < newChildren.length; newIdx++)\n (oldFiber = createChild(returnFiber, newChildren[newIdx], lanes)),\n null !== oldFiber &&\n ((knownKeys = warnOnInvalidKey(\n returnFiber,\n oldFiber,\n newChildren[newIdx],\n knownKeys\n )),\n (currentFirstChild = placeChild(\n oldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = oldFiber)\n : (previousNewFiber.sibling = oldFiber),\n (previousNewFiber = oldFiber));\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n for (\n oldFiber = mapRemainingChildren(oldFiber);\n newIdx < newChildren.length;\n newIdx++\n )\n (nextOldFiber = updateFromMap(\n oldFiber,\n returnFiber,\n newIdx,\n newChildren[newIdx],\n lanes\n )),\n null !== nextOldFiber &&\n ((knownKeys = warnOnInvalidKey(\n returnFiber,\n nextOldFiber,\n newChildren[newIdx],\n knownKeys\n )),\n shouldTrackSideEffects &&\n null !== nextOldFiber.alternate &&\n oldFiber.delete(\n null === nextOldFiber.key ? newIdx : nextOldFiber.key\n ),\n (currentFirstChild = placeChild(\n nextOldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = nextOldFiber)\n : (previousNewFiber.sibling = nextOldFiber),\n (previousNewFiber = nextOldFiber));\n shouldTrackSideEffects &&\n oldFiber.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n function reconcileChildrenIterator(\n returnFiber,\n currentFirstChild,\n newChildren,\n lanes\n ) {\n if (null == newChildren)\n throw Error(\"An iterable object provided no iterator.\");\n for (\n var resultingFirstChild = null,\n previousNewFiber = null,\n oldFiber = currentFirstChild,\n newIdx = (currentFirstChild = 0),\n nextOldFiber = null,\n knownKeys = null,\n step = newChildren.next();\n null !== oldFiber && !step.done;\n newIdx++, step = newChildren.next()\n ) {\n oldFiber.index > newIdx\n ? ((nextOldFiber = oldFiber), (oldFiber = null))\n : (nextOldFiber = oldFiber.sibling);\n var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);\n if (null === newFiber) {\n null === oldFiber && (oldFiber = nextOldFiber);\n break;\n }\n knownKeys = warnOnInvalidKey(\n returnFiber,\n newFiber,\n step.value,\n knownKeys\n );\n shouldTrackSideEffects &&\n oldFiber &&\n null === newFiber.alternate &&\n deleteChild(returnFiber, oldFiber);\n currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n null === previousNewFiber\n ? (resultingFirstChild = newFiber)\n : (previousNewFiber.sibling = newFiber);\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n if (step.done)\n return (\n deleteRemainingChildren(returnFiber, oldFiber),\n isHydrating && pushTreeFork(returnFiber, newIdx),\n resultingFirstChild\n );\n if (null === oldFiber) {\n for (; !step.done; newIdx++, step = newChildren.next())\n (oldFiber = createChild(returnFiber, step.value, lanes)),\n null !== oldFiber &&\n ((knownKeys = warnOnInvalidKey(\n returnFiber,\n oldFiber,\n step.value,\n knownKeys\n )),\n (currentFirstChild = placeChild(\n oldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = oldFiber)\n : (previousNewFiber.sibling = oldFiber),\n (previousNewFiber = oldFiber));\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n for (\n oldFiber = mapRemainingChildren(oldFiber);\n !step.done;\n newIdx++, step = newChildren.next()\n )\n (nextOldFiber = updateFromMap(\n oldFiber,\n returnFiber,\n newIdx,\n step.value,\n lanes\n )),\n null !== nextOldFiber &&\n ((knownKeys = warnOnInvalidKey(\n returnFiber,\n nextOldFiber,\n step.value,\n knownKeys\n )),\n shouldTrackSideEffects &&\n null !== nextOldFiber.alternate &&\n oldFiber.delete(\n null === nextOldFiber.key ? newIdx : nextOldFiber.key\n ),\n (currentFirstChild = placeChild(\n nextOldFiber,\n currentFirstChild,\n newIdx\n )),\n null === previousNewFiber\n ? (resultingFirstChild = nextOldFiber)\n : (previousNewFiber.sibling = nextOldFiber),\n (previousNewFiber = nextOldFiber));\n shouldTrackSideEffects &&\n oldFiber.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n isHydrating && pushTreeFork(returnFiber, newIdx);\n return resultingFirstChild;\n }\n function reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n ) {\n \"object\" === typeof newChild &&\n null !== newChild &&\n newChild.type === REACT_FRAGMENT_TYPE &&\n null === newChild.key &&\n (validateFragmentProps(newChild, null, returnFiber),\n (newChild = newChild.props.children));\n if (\"object\" === typeof newChild && null !== newChild) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n var prevDebugInfo = pushDebugInfo(newChild._debugInfo);\n a: {\n for (var key = newChild.key; null !== currentFirstChild; ) {\n if (currentFirstChild.key === key) {\n key = newChild.type;\n if (key === REACT_FRAGMENT_TYPE) {\n if (7 === currentFirstChild.tag) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(\n currentFirstChild,\n newChild.props.children\n );\n lanes.return = returnFiber;\n lanes._debugOwner = newChild._owner;\n lanes._debugInfo = currentDebugInfo;\n validateFragmentProps(newChild, lanes, returnFiber);\n returnFiber = lanes;\n break a;\n }\n } else if (\n currentFirstChild.elementType === key ||\n isCompatibleFamilyForHotReloading(\n currentFirstChild,\n newChild\n ) ||\n (\"object\" === typeof key &&\n null !== key &&\n key.$$typeof === REACT_LAZY_TYPE &&\n callLazyInitInDEV(key) === currentFirstChild.type)\n ) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(currentFirstChild, newChild.props);\n coerceRef(lanes, newChild);\n lanes.return = returnFiber;\n lanes._debugOwner = newChild._owner;\n lanes._debugInfo = currentDebugInfo;\n returnFiber = lanes;\n break a;\n }\n deleteRemainingChildren(returnFiber, currentFirstChild);\n break;\n } else deleteChild(returnFiber, currentFirstChild);\n currentFirstChild = currentFirstChild.sibling;\n }\n newChild.type === REACT_FRAGMENT_TYPE\n ? ((lanes = createFiberFromFragment(\n newChild.props.children,\n returnFiber.mode,\n lanes,\n newChild.key\n )),\n (lanes.return = returnFiber),\n (lanes._debugOwner = returnFiber),\n (lanes._debugTask = returnFiber._debugTask),\n (lanes._debugInfo = currentDebugInfo),\n validateFragmentProps(newChild, lanes, returnFiber),\n (returnFiber = lanes))\n : ((lanes = createFiberFromElement(\n newChild,\n returnFiber.mode,\n lanes\n )),\n coerceRef(lanes, newChild),\n (lanes.return = returnFiber),\n (lanes._debugInfo = currentDebugInfo),\n (returnFiber = lanes));\n }\n returnFiber = placeSingleChild(returnFiber);\n currentDebugInfo = prevDebugInfo;\n return returnFiber;\n case REACT_PORTAL_TYPE:\n a: {\n prevDebugInfo = newChild;\n for (\n newChild = prevDebugInfo.key;\n null !== currentFirstChild;\n\n ) {\n if (currentFirstChild.key === newChild)\n if (\n 4 === currentFirstChild.tag &&\n currentFirstChild.stateNode.containerInfo ===\n prevDebugInfo.containerInfo &&\n currentFirstChild.stateNode.implementation ===\n prevDebugInfo.implementation\n ) {\n deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n );\n lanes = useFiber(\n currentFirstChild,\n prevDebugInfo.children || []\n );\n lanes.return = returnFiber;\n returnFiber = lanes;\n break a;\n } else {\n deleteRemainingChildren(returnFiber, currentFirstChild);\n break;\n }\n else deleteChild(returnFiber, currentFirstChild);\n currentFirstChild = currentFirstChild.sibling;\n }\n lanes = createFiberFromPortal(\n prevDebugInfo,\n returnFiber.mode,\n lanes\n );\n lanes.return = returnFiber;\n returnFiber = lanes;\n }\n return placeSingleChild(returnFiber);\n case REACT_LAZY_TYPE:\n return (\n (prevDebugInfo = pushDebugInfo(newChild._debugInfo)),\n (newChild = callLazyInitInDEV(newChild)),\n (returnFiber = reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n )),\n (currentDebugInfo = prevDebugInfo),\n returnFiber\n );\n }\n if (isArrayImpl(newChild))\n return (\n (prevDebugInfo = pushDebugInfo(newChild._debugInfo)),\n (returnFiber = reconcileChildrenArray(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n )),\n (currentDebugInfo = prevDebugInfo),\n returnFiber\n );\n if (getIteratorFn(newChild)) {\n prevDebugInfo = pushDebugInfo(newChild._debugInfo);\n key = getIteratorFn(newChild);\n if (\"function\" !== typeof key)\n throw Error(\n \"An object is not an iterable. This error is likely caused by a bug in React. Please file an issue.\"\n );\n var newChildren = key.call(newChild);\n if (newChildren === newChild) {\n if (\n 0 !== returnFiber.tag ||\n \"[object GeneratorFunction]\" !==\n Object.prototype.toString.call(returnFiber.type) ||\n \"[object Generator]\" !==\n Object.prototype.toString.call(newChildren)\n )\n didWarnAboutGenerators ||\n console.error(\n \"Using Iterators as children is unsupported and will likely yield unexpected results because enumerating a generator mutates it. You may convert it to an array with `Array.from()` or the `[...spread]` operator before rendering. You can also use an Iterable that can iterate multiple times over the same items.\"\n ),\n (didWarnAboutGenerators = !0);\n } else\n newChild.entries !== key ||\n didWarnAboutMaps ||\n (console.error(\n \"Using Maps as children is not supported. Use an array of keyed ReactElements instead.\"\n ),\n (didWarnAboutMaps = !0));\n returnFiber = reconcileChildrenIterator(\n returnFiber,\n currentFirstChild,\n newChildren,\n lanes\n );\n currentDebugInfo = prevDebugInfo;\n return returnFiber;\n }\n if (\"function\" === typeof newChild.then)\n return (\n (prevDebugInfo = pushDebugInfo(newChild._debugInfo)),\n (returnFiber = reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n unwrapThenable(newChild),\n lanes\n )),\n (currentDebugInfo = prevDebugInfo),\n returnFiber\n );\n if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n return reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n readContextDuringReconciliation(returnFiber, newChild),\n lanes\n );\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n if (\n (\"string\" === typeof newChild && \"\" !== newChild) ||\n \"number\" === typeof newChild ||\n \"bigint\" === typeof newChild\n )\n return (\n (prevDebugInfo = \"\" + newChild),\n null !== currentFirstChild && 6 === currentFirstChild.tag\n ? (deleteRemainingChildren(\n returnFiber,\n currentFirstChild.sibling\n ),\n (lanes = useFiber(currentFirstChild, prevDebugInfo)),\n (lanes.return = returnFiber),\n (returnFiber = lanes))\n : (deleteRemainingChildren(returnFiber, currentFirstChild),\n (lanes = createFiberFromText(\n prevDebugInfo,\n returnFiber.mode,\n lanes\n )),\n (lanes.return = returnFiber),\n (lanes._debugOwner = returnFiber),\n (lanes._debugTask = returnFiber._debugTask),\n (lanes._debugInfo = currentDebugInfo),\n (returnFiber = lanes)),\n placeSingleChild(returnFiber)\n );\n \"function\" === typeof newChild &&\n warnOnFunctionType(returnFiber, newChild);\n \"symbol\" === typeof newChild && warnOnSymbolType(returnFiber, newChild);\n return deleteRemainingChildren(returnFiber, currentFirstChild);\n }\n return function (returnFiber, currentFirstChild, newChild, lanes) {\n var prevDebugInfo = currentDebugInfo;\n currentDebugInfo = null;\n try {\n thenableIndexCounter$1 = 0;\n var firstChildFiber = reconcileChildFibersImpl(\n returnFiber,\n currentFirstChild,\n newChild,\n lanes\n );\n thenableState$1 = null;\n return firstChildFiber;\n } catch (x) {\n if (x === SuspenseException || x === SuspenseActionException) throw x;\n var fiber = createFiber(29, x, null, returnFiber.mode);\n fiber.lanes = lanes;\n fiber.return = returnFiber;\n var debugInfo = (fiber._debugInfo = currentDebugInfo);\n fiber._debugOwner = returnFiber._debugOwner;\n fiber._debugTask = returnFiber._debugTask;\n if (null != debugInfo)\n for (var i = debugInfo.length - 1; 0 <= i; i--)\n if (\"string\" === typeof debugInfo[i].stack) {\n fiber._debugOwner = debugInfo[i];\n fiber._debugTask = debugInfo[i].debugTask;\n break;\n }\n return fiber;\n } finally {\n currentDebugInfo = prevDebugInfo;\n }\n };\n }\n function validateSuspenseListNestedChild(childSlot, index) {\n var isAnArray = isArrayImpl(childSlot);\n childSlot = !isAnArray && \"function\" === typeof getIteratorFn(childSlot);\n return isAnArray || childSlot\n ? ((isAnArray = isAnArray ? \"array\" : \"iterable\"),\n console.error(\n \"A nested %s was passed to row #%s in <SuspenseList />. Wrap it in an additional SuspenseList to configure its revealOrder: <SuspenseList revealOrder=...> ... <SuspenseList revealOrder=...>{%s}</SuspenseList> ... </SuspenseList>\",\n isAnArray,\n index,\n isAnArray\n ),\n !1)\n : !0;\n }\n function initializeUpdateQueue(fiber) {\n fiber.updateQueue = {\n baseState: fiber.memoizedState,\n firstBaseUpdate: null,\n lastBaseUpdate: null,\n shared: { pending: null, lanes: 0, hiddenCallbacks: null },\n callbacks: null\n };\n }\n function cloneUpdateQueue(current, workInProgress) {\n current = current.updateQueue;\n workInProgress.updateQueue === current &&\n (workInProgress.updateQueue = {\n baseState: current.baseState,\n firstBaseUpdate: current.firstBaseUpdate,\n lastBaseUpdate: current.lastBaseUpdate,\n shared: current.shared,\n callbacks: null\n });\n }\n function createUpdate(lane) {\n return {\n lane: lane,\n tag: UpdateState,\n payload: null,\n callback: null,\n next: null\n };\n }\n function enqueueUpdate(fiber, update, lane) {\n var updateQueue = fiber.updateQueue;\n if (null === updateQueue) return null;\n updateQueue = updateQueue.shared;\n if (\n currentlyProcessingQueue === updateQueue &&\n !didWarnUpdateInsideUpdate\n ) {\n var componentName = getComponentNameFromFiber(fiber);\n console.error(\n \"An update (setState, replaceState, or forceUpdate) was scheduled from inside an update function. Update functions should be pure, with zero side-effects. Consider using componentDidUpdate or a callback.\\n\\nPlease update the following component: %s\",\n componentName\n );\n didWarnUpdateInsideUpdate = !0;\n }\n if ((executionContext & RenderContext) !== NoContext)\n return (\n (componentName = updateQueue.pending),\n null === componentName\n ? (update.next = update)\n : ((update.next = componentName.next),\n (componentName.next = update)),\n (updateQueue.pending = update),\n (update = getRootForUpdatedFiber(fiber)),\n markUpdateLaneFromFiberToRoot(fiber, null, lane),\n update\n );\n enqueueUpdate$1(fiber, updateQueue, update, lane);\n return getRootForUpdatedFiber(fiber);\n }\n function entangleTransitions(root, fiber, lane) {\n fiber = fiber.updateQueue;\n if (null !== fiber && ((fiber = fiber.shared), 0 !== (lane & 4194048))) {\n var queueLanes = fiber.lanes;\n queueLanes &= root.pendingLanes;\n lane |= queueLanes;\n fiber.lanes = lane;\n markRootEntangled(root, lane);\n }\n }\n function enqueueCapturedUpdate(workInProgress, capturedUpdate) {\n var queue = workInProgress.updateQueue,\n current = workInProgress.alternate;\n if (\n null !== current &&\n ((current = current.updateQueue), queue === current)\n ) {\n var newFirst = null,\n newLast = null;\n queue = queue.firstBaseUpdate;\n if (null !== queue) {\n do {\n var clone = {\n lane: queue.lane,\n tag: queue.tag,\n payload: queue.payload,\n callback: null,\n next: null\n };\n null === newLast\n ? (newFirst = newLast = clone)\n : (newLast = newLast.next = clone);\n queue = queue.next;\n } while (null !== queue);\n null === newLast\n ? (newFirst = newLast = capturedUpdate)\n : (newLast = newLast.next = capturedUpdate);\n } else newFirst = newLast = capturedUpdate;\n queue = {\n baseState: current.baseState,\n firstBaseUpdate: newFirst,\n lastBaseUpdate: newLast,\n shared: current.shared,\n callbacks: current.callbacks\n };\n workInProgress.updateQueue = queue;\n return;\n }\n workInProgress = queue.lastBaseUpdate;\n null === workInProgress\n ? (queue.firstBaseUpdate = capturedUpdate)\n : (workInProgress.next = capturedUpdate);\n queue.lastBaseUpdate = capturedUpdate;\n }\n function suspendIfUpdateReadFromEntangledAsyncAction() {\n if (didReadFromEntangledAsyncAction) {\n var entangledActionThenable = currentEntangledActionThenable;\n if (null !== entangledActionThenable) throw entangledActionThenable;\n }\n }\n function processUpdateQueue(\n workInProgress,\n props,\n instance$jscomp$0,\n renderLanes\n ) {\n didReadFromEntangledAsyncAction = !1;\n var queue = workInProgress.updateQueue;\n hasForceUpdate = !1;\n currentlyProcessingQueue = queue.shared;\n var firstBaseUpdate = queue.firstBaseUpdate,\n lastBaseUpdate = queue.lastBaseUpdate,\n pendingQueue = queue.shared.pending;\n if (null !== pendingQueue) {\n queue.shared.pending = null;\n var lastPendingUpdate = pendingQueue,\n firstPendingUpdate = lastPendingUpdate.next;\n lastPendingUpdate.next = null;\n null === lastBaseUpdate\n ? (firstBaseUpdate = firstPendingUpdate)\n : (lastBaseUpdate.next = firstPendingUpdate);\n lastBaseUpdate = lastPendingUpdate;\n var current = workInProgress.alternate;\n null !== current &&\n ((current = current.updateQueue),\n (pendingQueue = current.lastBaseUpdate),\n pendingQueue !== lastBaseUpdate &&\n (null === pendingQueue\n ? (current.firstBaseUpdate = firstPendingUpdate)\n : (pendingQueue.next = firstPendingUpdate),\n (current.lastBaseUpdate = lastPendingUpdate)));\n }\n if (null !== firstBaseUpdate) {\n var newState = queue.baseState;\n lastBaseUpdate = 0;\n current = firstPendingUpdate = lastPendingUpdate = null;\n pendingQueue = firstBaseUpdate;\n do {\n var updateLane = pendingQueue.lane & -536870913,\n isHiddenUpdate = updateLane !== pendingQueue.lane;\n if (\n isHiddenUpdate\n ? (workInProgressRootRenderLanes & updateLane) === updateLane\n : (renderLanes & updateLane) === updateLane\n ) {\n 0 !== updateLane &&\n updateLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction = !0);\n null !== current &&\n (current = current.next =\n {\n lane: 0,\n tag: pendingQueue.tag,\n payload: pendingQueue.payload,\n callback: null,\n next: null\n });\n a: {\n updateLane = workInProgress;\n var partialState = pendingQueue;\n var nextProps = props,\n instance = instance$jscomp$0;\n switch (partialState.tag) {\n case ReplaceState:\n partialState = partialState.payload;\n if (\"function\" === typeof partialState) {\n isDisallowedContextReadInDEV = !0;\n var nextState = partialState.call(\n instance,\n newState,\n nextProps\n );\n if (updateLane.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(!0);\n try {\n partialState.call(instance, newState, nextProps);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n isDisallowedContextReadInDEV = !1;\n newState = nextState;\n break a;\n }\n newState = partialState;\n break a;\n case CaptureUpdate:\n updateLane.flags = (updateLane.flags & -65537) | 128;\n case UpdateState:\n nextState = partialState.payload;\n if (\"function\" === typeof nextState) {\n isDisallowedContextReadInDEV = !0;\n partialState = nextState.call(\n instance,\n newState,\n nextProps\n );\n if (updateLane.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(!0);\n try {\n nextState.call(instance, newState, nextProps);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n isDisallowedContextReadInDEV = !1;\n } else partialState = nextState;\n if (null === partialState || void 0 === partialState) break a;\n newState = assign({}, newState, partialState);\n break a;\n case ForceUpdate:\n hasForceUpdate = !0;\n }\n }\n updateLane = pendingQueue.callback;\n null !== updateLane &&\n ((workInProgress.flags |= 64),\n isHiddenUpdate && (workInProgress.flags |= 8192),\n (isHiddenUpdate = queue.callbacks),\n null === isHiddenUpdate\n ? (queue.callbacks = [updateLane])\n : isHiddenUpdate.push(updateLane));\n } else\n (isHiddenUpdate = {\n lane: updateLane,\n tag: pendingQueue.tag,\n payload: pendingQueue.payload,\n callback: pendingQueue.callback,\n next: null\n }),\n null === current\n ? ((firstPendingUpdate = current = isHiddenUpdate),\n (lastPendingUpdate = newState))\n : (current = current.next = isHiddenUpdate),\n (lastBaseUpdate |= updateLane);\n pendingQueue = pendingQueue.next;\n if (null === pendingQueue)\n if (((pendingQueue = queue.shared.pending), null === pendingQueue))\n break;\n else\n (isHiddenUpdate = pendingQueue),\n (pendingQueue = isHiddenUpdate.next),\n (isHiddenUpdate.next = null),\n (queue.lastBaseUpdate = isHiddenUpdate),\n (queue.shared.pending = null);\n } while (1);\n null === current && (lastPendingUpdate = newState);\n queue.baseState = lastPendingUpdate;\n queue.firstBaseUpdate = firstPendingUpdate;\n queue.lastBaseUpdate = current;\n null === firstBaseUpdate && (queue.shared.lanes = 0);\n workInProgressRootSkippedLanes |= lastBaseUpdate;\n workInProgress.lanes = lastBaseUpdate;\n workInProgress.memoizedState = newState;\n }\n currentlyProcessingQueue = null;\n }\n function callCallback(callback, context) {\n if (\"function\" !== typeof callback)\n throw Error(\n \"Invalid argument passed as callback. Expected a function. Instead received: \" +\n callback\n );\n callback.call(context);\n }\n function commitHiddenCallbacks(updateQueue, context) {\n var hiddenCallbacks = updateQueue.shared.hiddenCallbacks;\n if (null !== hiddenCallbacks)\n for (\n updateQueue.shared.hiddenCallbacks = null, updateQueue = 0;\n updateQueue < hiddenCallbacks.length;\n updateQueue++\n )\n callCallback(hiddenCallbacks[updateQueue], context);\n }\n function commitCallbacks(updateQueue, context) {\n var callbacks = updateQueue.callbacks;\n if (null !== callbacks)\n for (\n updateQueue.callbacks = null, updateQueue = 0;\n updateQueue < callbacks.length;\n updateQueue++\n )\n callCallback(callbacks[updateQueue], context);\n }\n function pushHiddenContext(fiber, context) {\n var prevEntangledRenderLanes = entangledRenderLanes;\n push(prevEntangledRenderLanesCursor, prevEntangledRenderLanes, fiber);\n push(currentTreeHiddenStackCursor, context, fiber);\n entangledRenderLanes = prevEntangledRenderLanes | context.baseLanes;\n }\n function reuseHiddenContextOnStack(fiber) {\n push(prevEntangledRenderLanesCursor, entangledRenderLanes, fiber);\n push(\n currentTreeHiddenStackCursor,\n currentTreeHiddenStackCursor.current,\n fiber\n );\n }\n function popHiddenContext(fiber) {\n entangledRenderLanes = prevEntangledRenderLanesCursor.current;\n pop(currentTreeHiddenStackCursor, fiber);\n pop(prevEntangledRenderLanesCursor, fiber);\n }\n function pushPrimaryTreeSuspenseHandler(handler) {\n var current = handler.alternate;\n push(\n suspenseStackCursor,\n suspenseStackCursor.current & SubtreeSuspenseContextMask,\n handler\n );\n push(suspenseHandlerStackCursor, handler, handler);\n null === shellBoundary &&\n (null === current || null !== currentTreeHiddenStackCursor.current\n ? (shellBoundary = handler)\n : null !== current.memoizedState && (shellBoundary = handler));\n }\n function pushDehydratedActivitySuspenseHandler(fiber) {\n push(suspenseStackCursor, suspenseStackCursor.current, fiber);\n push(suspenseHandlerStackCursor, fiber, fiber);\n null === shellBoundary && (shellBoundary = fiber);\n }\n function pushOffscreenSuspenseHandler(fiber) {\n 22 === fiber.tag\n ? (push(suspenseStackCursor, suspenseStackCursor.current, fiber),\n push(suspenseHandlerStackCursor, fiber, fiber),\n null === shellBoundary && (shellBoundary = fiber))\n : reuseSuspenseHandlerOnStack(fiber);\n }\n function reuseSuspenseHandlerOnStack(fiber) {\n push(suspenseStackCursor, suspenseStackCursor.current, fiber);\n push(\n suspenseHandlerStackCursor,\n suspenseHandlerStackCursor.current,\n fiber\n );\n }\n function popSuspenseHandler(fiber) {\n pop(suspenseHandlerStackCursor, fiber);\n shellBoundary === fiber && (shellBoundary = null);\n pop(suspenseStackCursor, fiber);\n }\n function findFirstSuspended(row) {\n for (var node = row; null !== node; ) {\n if (13 === node.tag) {\n var state = node.memoizedState;\n if (\n null !== state &&\n ((state = state.dehydrated),\n null === state ||\n isSuspenseInstancePending(state) ||\n isSuspenseInstanceFallback(state))\n )\n return node;\n } else if (\n 19 === node.tag &&\n (\"forwards\" === node.memoizedProps.revealOrder ||\n \"backwards\" === node.memoizedProps.revealOrder ||\n \"unstable_legacy-backwards\" === node.memoizedProps.revealOrder ||\n \"together\" === node.memoizedProps.revealOrder)\n ) {\n if (0 !== (node.flags & 128)) return node;\n } else if (null !== node.child) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n if (node === row) break;\n for (; null === node.sibling; ) {\n if (null === node.return || node.return === row) return null;\n node = node.return;\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n return null;\n }\n function mountHookTypesDev() {\n var hookName = currentHookNameInDev;\n null === hookTypesDev\n ? (hookTypesDev = [hookName])\n : hookTypesDev.push(hookName);\n }\n function updateHookTypesDev() {\n var hookName = currentHookNameInDev;\n if (\n null !== hookTypesDev &&\n (hookTypesUpdateIndexDev++,\n hookTypesDev[hookTypesUpdateIndexDev] !== hookName)\n ) {\n var componentName = getComponentNameFromFiber(currentlyRenderingFiber);\n if (\n !didWarnAboutMismatchedHooksForComponent.has(componentName) &&\n (didWarnAboutMismatchedHooksForComponent.add(componentName),\n null !== hookTypesDev)\n ) {\n for (var table = \"\", i = 0; i <= hookTypesUpdateIndexDev; i++) {\n var oldHookName = hookTypesDev[i],\n newHookName =\n i === hookTypesUpdateIndexDev ? hookName : oldHookName;\n for (\n oldHookName = i + 1 + \". \" + oldHookName;\n 30 > oldHookName.length;\n\n )\n oldHookName += \" \";\n oldHookName += newHookName + \"\\n\";\n table += oldHookName;\n }\n console.error(\n \"React has detected a change in the order of Hooks called by %s. This will lead to bugs and errors if not fixed. For more information, read the Rules of Hooks: https://react.dev/link/rules-of-hooks\\n\\n Previous render Next render\\n ------------------------------------------------------\\n%s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n\",\n componentName,\n table\n );\n }\n }\n }\n function checkDepsAreArrayDev(deps) {\n void 0 === deps ||\n null === deps ||\n isArrayImpl(deps) ||\n console.error(\n \"%s received a final argument that is not an array (instead, received `%s`). When specified, the final argument must be an array.\",\n currentHookNameInDev,\n typeof deps\n );\n }\n function warnOnUseFormStateInDev() {\n var componentName = getComponentNameFromFiber(currentlyRenderingFiber);\n didWarnAboutUseFormState.has(componentName) ||\n (didWarnAboutUseFormState.add(componentName),\n console.error(\n \"ReactDOM.useFormState has been renamed to React.useActionState. Please update %s to use React.useActionState.\",\n componentName\n ));\n }\n function throwInvalidHookError() {\n throw Error(\n \"Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.\"\n );\n }\n function areHookInputsEqual(nextDeps, prevDeps) {\n if (ignorePreviousDependencies) return !1;\n if (null === prevDeps)\n return (\n console.error(\n \"%s received a final argument during this render, but not during the previous render. Even though the final argument is optional, its type cannot change between renders.\",\n currentHookNameInDev\n ),\n !1\n );\n nextDeps.length !== prevDeps.length &&\n console.error(\n \"The final argument passed to %s changed size between renders. The order and size of this array must remain constant.\\n\\nPrevious: %s\\nIncoming: %s\",\n currentHookNameInDev,\n \"[\" + prevDeps.join(\", \") + \"]\",\n \"[\" + nextDeps.join(\", \") + \"]\"\n );\n for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++)\n if (!objectIs(nextDeps[i], prevDeps[i])) return !1;\n return !0;\n }\n function renderWithHooks(\n current,\n workInProgress,\n Component,\n props,\n secondArg,\n nextRenderLanes\n ) {\n renderLanes = nextRenderLanes;\n currentlyRenderingFiber = workInProgress;\n hookTypesDev = null !== current ? current._debugHookTypes : null;\n hookTypesUpdateIndexDev = -1;\n ignorePreviousDependencies =\n null !== current && current.type !== workInProgress.type;\n if (\n \"[object AsyncFunction]\" ===\n Object.prototype.toString.call(Component) ||\n \"[object AsyncGeneratorFunction]\" ===\n Object.prototype.toString.call(Component)\n )\n (nextRenderLanes = getComponentNameFromFiber(currentlyRenderingFiber)),\n didWarnAboutAsyncClientComponent.has(nextRenderLanes) ||\n (didWarnAboutAsyncClientComponent.add(nextRenderLanes),\n console.error(\n \"%s is an async Client Component. Only Server Components can be async at the moment. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server.\",\n null === nextRenderLanes\n ? \"An unknown Component\"\n : \"<\" + nextRenderLanes + \">\"\n ));\n workInProgress.memoizedState = null;\n workInProgress.updateQueue = null;\n workInProgress.lanes = 0;\n ReactSharedInternals.H =\n null !== current && null !== current.memoizedState\n ? HooksDispatcherOnUpdateInDEV\n : null !== hookTypesDev\n ? HooksDispatcherOnMountWithHookTypesInDEV\n : HooksDispatcherOnMountInDEV;\n shouldDoubleInvokeUserFnsInHooksDEV = nextRenderLanes =\n (workInProgress.mode & StrictLegacyMode) !== NoMode;\n var children = callComponentInDEV(Component, props, secondArg);\n shouldDoubleInvokeUserFnsInHooksDEV = !1;\n didScheduleRenderPhaseUpdateDuringThisPass &&\n (children = renderWithHooksAgain(\n workInProgress,\n Component,\n props,\n secondArg\n ));\n if (nextRenderLanes) {\n setIsStrictModeForDevtools(!0);\n try {\n children = renderWithHooksAgain(\n workInProgress,\n Component,\n props,\n secondArg\n );\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n finishRenderingHooks(current, workInProgress);\n return children;\n }\n function finishRenderingHooks(current, workInProgress) {\n workInProgress._debugHookTypes = hookTypesDev;\n null === workInProgress.dependencies\n ? null !== thenableState &&\n (workInProgress.dependencies = {\n lanes: 0,\n firstContext: null,\n _debugThenableState: thenableState\n })\n : (workInProgress.dependencies._debugThenableState = thenableState);\n ReactSharedInternals.H = ContextOnlyDispatcher;\n var didRenderTooFewHooks =\n null !== currentHook && null !== currentHook.next;\n renderLanes = 0;\n hookTypesDev =\n currentHookNameInDev =\n workInProgressHook =\n currentHook =\n currentlyRenderingFiber =\n null;\n hookTypesUpdateIndexDev = -1;\n null !== current &&\n (current.flags & 65011712) !== (workInProgress.flags & 65011712) &&\n console.error(\n \"Internal React error: Expected static flag was missing. Please notify the React team.\"\n );\n didScheduleRenderPhaseUpdate = !1;\n thenableIndexCounter = 0;\n thenableState = null;\n if (didRenderTooFewHooks)\n throw Error(\n \"Rendered fewer hooks than expected. This may be caused by an accidental early return statement.\"\n );\n null === current ||\n didReceiveUpdate ||\n ((current = current.dependencies),\n null !== current &&\n checkIfContextChanged(current) &&\n (didReceiveUpdate = !0));\n needsToResetSuspendedThenableDEV\n ? ((needsToResetSuspendedThenableDEV = !1), (current = !0))\n : (current = !1);\n current &&\n ((workInProgress =\n getComponentNameFromFiber(workInProgress) || \"Unknown\"),\n didWarnAboutUseWrappedInTryCatch.has(workInProgress) ||\n didWarnAboutAsyncClientComponent.has(workInProgress) ||\n (didWarnAboutUseWrappedInTryCatch.add(workInProgress),\n console.error(\n \"`use` was called from inside a try/catch block. This is not allowed and can lead to unexpected behavior. To handle errors triggered by `use`, wrap your component in a error boundary.\"\n )));\n }\n function renderWithHooksAgain(workInProgress, Component, props, secondArg) {\n currentlyRenderingFiber = workInProgress;\n var numberOfReRenders = 0;\n do {\n didScheduleRenderPhaseUpdateDuringThisPass && (thenableState = null);\n thenableIndexCounter = 0;\n didScheduleRenderPhaseUpdateDuringThisPass = !1;\n if (numberOfReRenders >= RE_RENDER_LIMIT)\n throw Error(\n \"Too many re-renders. React limits the number of renders to prevent an infinite loop.\"\n );\n numberOfReRenders += 1;\n ignorePreviousDependencies = !1;\n workInProgressHook = currentHook = null;\n if (null != workInProgress.updateQueue) {\n var children = workInProgress.updateQueue;\n children.lastEffect = null;\n children.events = null;\n children.stores = null;\n null != children.memoCache && (children.memoCache.index = 0);\n }\n hookTypesUpdateIndexDev = -1;\n ReactSharedInternals.H = HooksDispatcherOnRerenderInDEV;\n children = callComponentInDEV(Component, props, secondArg);\n } while (didScheduleRenderPhaseUpdateDuringThisPass);\n return children;\n }\n function TransitionAwareHostComponent() {\n var dispatcher = ReactSharedInternals.H,\n maybeThenable = dispatcher.useState()[0];\n maybeThenable =\n \"function\" === typeof maybeThenable.then\n ? useThenable(maybeThenable)\n : maybeThenable;\n dispatcher = dispatcher.useState()[0];\n (null !== currentHook ? currentHook.memoizedState : null) !==\n dispatcher && (currentlyRenderingFiber.flags |= 1024);\n return maybeThenable;\n }\n function checkDidRenderIdHook() {\n var didRenderIdHook = 0 !== localIdCounter;\n localIdCounter = 0;\n return didRenderIdHook;\n }\n function bailoutHooks(current, workInProgress, lanes) {\n workInProgress.updateQueue = current.updateQueue;\n workInProgress.flags =\n (workInProgress.mode & StrictEffectsMode) !== NoMode\n ? workInProgress.flags & -402655237\n : workInProgress.flags & -2053;\n current.lanes &= ~lanes;\n }\n function resetHooksOnUnwind(workInProgress) {\n if (didScheduleRenderPhaseUpdate) {\n for (\n workInProgress = workInProgress.memoizedState;\n null !== workInProgress;\n\n ) {\n var queue = workInProgress.queue;\n null !== queue && (queue.pending = null);\n workInProgress = workInProgress.next;\n }\n didScheduleRenderPhaseUpdate = !1;\n }\n renderLanes = 0;\n hookTypesDev =\n workInProgressHook =\n currentHook =\n currentlyRenderingFiber =\n null;\n hookTypesUpdateIndexDev = -1;\n currentHookNameInDev = null;\n didScheduleRenderPhaseUpdateDuringThisPass = !1;\n thenableIndexCounter = localIdCounter = 0;\n thenableState = null;\n }\n function mountWorkInProgressHook() {\n var hook = {\n memoizedState: null,\n baseState: null,\n baseQueue: null,\n queue: null,\n next: null\n };\n null === workInProgressHook\n ? (currentlyRenderingFiber.memoizedState = workInProgressHook = hook)\n : (workInProgressHook = workInProgressHook.next = hook);\n return workInProgressHook;\n }\n function updateWorkInProgressHook() {\n if (null === currentHook) {\n var nextCurrentHook = currentlyRenderingFiber.alternate;\n nextCurrentHook =\n null !== nextCurrentHook ? nextCurrentHook.memoizedState : null;\n } else nextCurrentHook = currentHook.next;\n var nextWorkInProgressHook =\n null === workInProgressHook\n ? currentlyRenderingFiber.memoizedState\n : workInProgressHook.next;\n if (null !== nextWorkInProgressHook)\n (workInProgressHook = nextWorkInProgressHook),\n (currentHook = nextCurrentHook);\n else {\n if (null === nextCurrentHook) {\n if (null === currentlyRenderingFiber.alternate)\n throw Error(\n \"Update hook called on initial render. This is likely a bug in React. Please file an issue.\"\n );\n throw Error(\"Rendered more hooks than during the previous render.\");\n }\n currentHook = nextCurrentHook;\n nextCurrentHook = {\n memoizedState: currentHook.memoizedState,\n baseState: currentHook.baseState,\n baseQueue: currentHook.baseQueue,\n queue: currentHook.queue,\n next: null\n };\n null === workInProgressHook\n ? (currentlyRenderingFiber.memoizedState = workInProgressHook =\n nextCurrentHook)\n : (workInProgressHook = workInProgressHook.next = nextCurrentHook);\n }\n return workInProgressHook;\n }\n function createFunctionComponentUpdateQueue() {\n return { lastEffect: null, events: null, stores: null, memoCache: null };\n }\n function useThenable(thenable) {\n var index = thenableIndexCounter;\n thenableIndexCounter += 1;\n null === thenableState && (thenableState = createThenableState());\n thenable = trackUsedThenable(thenableState, thenable, index);\n index = currentlyRenderingFiber;\n null ===\n (null === workInProgressHook\n ? index.memoizedState\n : workInProgressHook.next) &&\n ((index = index.alternate),\n (ReactSharedInternals.H =\n null !== index && null !== index.memoizedState\n ? HooksDispatcherOnUpdateInDEV\n : HooksDispatcherOnMountInDEV));\n return thenable;\n }\n function use(usable) {\n if (null !== usable && \"object\" === typeof usable) {\n if (\"function\" === typeof usable.then) return useThenable(usable);\n if (usable.$$typeof === REACT_CONTEXT_TYPE) return readContext(usable);\n }\n throw Error(\"An unsupported type was passed to use(): \" + String(usable));\n }\n function useMemoCache(size) {\n var memoCache = null,\n updateQueue = currentlyRenderingFiber.updateQueue;\n null !== updateQueue && (memoCache = updateQueue.memoCache);\n if (null == memoCache) {\n var current = currentlyRenderingFiber.alternate;\n null !== current &&\n ((current = current.updateQueue),\n null !== current &&\n ((current = current.memoCache),\n null != current &&\n (memoCache = {\n data: current.data.map(function (array) {\n return array.slice();\n }),\n index: 0\n })));\n }\n null == memoCache && (memoCache = { data: [], index: 0 });\n null === updateQueue &&\n ((updateQueue = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = updateQueue));\n updateQueue.memoCache = memoCache;\n updateQueue = memoCache.data[memoCache.index];\n if (void 0 === updateQueue || ignorePreviousDependencies)\n for (\n updateQueue = memoCache.data[memoCache.index] = Array(size),\n current = 0;\n current < size;\n current++\n )\n updateQueue[current] = REACT_MEMO_CACHE_SENTINEL;\n else\n updateQueue.length !== size &&\n console.error(\n \"Expected a constant size argument for each invocation of useMemoCache. The previous cache was allocated with size %s but size %s was requested.\",\n updateQueue.length,\n size\n );\n memoCache.index++;\n return updateQueue;\n }\n function basicStateReducer(state, action) {\n return \"function\" === typeof action ? action(state) : action;\n }\n function mountReducer(reducer, initialArg, init) {\n var hook = mountWorkInProgressHook();\n if (void 0 !== init) {\n var initialState = init(initialArg);\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n init(initialArg);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n } else initialState = initialArg;\n hook.memoizedState = hook.baseState = initialState;\n reducer = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: reducer,\n lastRenderedState: initialState\n };\n hook.queue = reducer;\n reducer = reducer.dispatch = dispatchReducerAction.bind(\n null,\n currentlyRenderingFiber,\n reducer\n );\n return [hook.memoizedState, reducer];\n }\n function updateReducer(reducer) {\n var hook = updateWorkInProgressHook();\n return updateReducerImpl(hook, currentHook, reducer);\n }\n function updateReducerImpl(hook, current, reducer) {\n var queue = hook.queue;\n if (null === queue)\n throw Error(\n \"Should have a queue. You are likely calling Hooks conditionally, which is not allowed. (https://react.dev/link/invalid-hook-call)\"\n );\n queue.lastRenderedReducer = reducer;\n var baseQueue = hook.baseQueue,\n pendingQueue = queue.pending;\n if (null !== pendingQueue) {\n if (null !== baseQueue) {\n var baseFirst = baseQueue.next;\n baseQueue.next = pendingQueue.next;\n pendingQueue.next = baseFirst;\n }\n current.baseQueue !== baseQueue &&\n console.error(\n \"Internal error: Expected work-in-progress queue to be a clone. This is a bug in React.\"\n );\n current.baseQueue = baseQueue = pendingQueue;\n queue.pending = null;\n }\n pendingQueue = hook.baseState;\n if (null === baseQueue) hook.memoizedState = pendingQueue;\n else {\n current = baseQueue.next;\n var newBaseQueueFirst = (baseFirst = null),\n newBaseQueueLast = null,\n update = current,\n didReadFromEntangledAsyncAction = !1;\n do {\n var updateLane = update.lane & -536870913;\n if (\n updateLane !== update.lane\n ? (workInProgressRootRenderLanes & updateLane) === updateLane\n : (renderLanes & updateLane) === updateLane\n ) {\n var revertLane = update.revertLane;\n if (0 === revertLane)\n null !== newBaseQueueLast &&\n (newBaseQueueLast = newBaseQueueLast.next =\n {\n lane: 0,\n revertLane: 0,\n gesture: null,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n updateLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction = !0);\n else if ((renderLanes & revertLane) === revertLane) {\n update = update.next;\n revertLane === currentEntangledLane &&\n (didReadFromEntangledAsyncAction = !0);\n continue;\n } else\n (updateLane = {\n lane: 0,\n revertLane: update.revertLane,\n gesture: null,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n null === newBaseQueueLast\n ? ((newBaseQueueFirst = newBaseQueueLast = updateLane),\n (baseFirst = pendingQueue))\n : (newBaseQueueLast = newBaseQueueLast.next = updateLane),\n (currentlyRenderingFiber.lanes |= revertLane),\n (workInProgressRootSkippedLanes |= revertLane);\n updateLane = update.action;\n shouldDoubleInvokeUserFnsInHooksDEV &&\n reducer(pendingQueue, updateLane);\n pendingQueue = update.hasEagerState\n ? update.eagerState\n : reducer(pendingQueue, updateLane);\n } else\n (revertLane = {\n lane: updateLane,\n revertLane: update.revertLane,\n gesture: update.gesture,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n }),\n null === newBaseQueueLast\n ? ((newBaseQueueFirst = newBaseQueueLast = revertLane),\n (baseFirst = pendingQueue))\n : (newBaseQueueLast = newBaseQueueLast.next = revertLane),\n (currentlyRenderingFiber.lanes |= updateLane),\n (workInProgressRootSkippedLanes |= updateLane);\n update = update.next;\n } while (null !== update && update !== current);\n null === newBaseQueueLast\n ? (baseFirst = pendingQueue)\n : (newBaseQueueLast.next = newBaseQueueFirst);\n if (\n !objectIs(pendingQueue, hook.memoizedState) &&\n ((didReceiveUpdate = !0),\n didReadFromEntangledAsyncAction &&\n ((reducer = currentEntangledActionThenable), null !== reducer))\n )\n throw reducer;\n hook.memoizedState = pendingQueue;\n hook.baseState = baseFirst;\n hook.baseQueue = newBaseQueueLast;\n queue.lastRenderedState = pendingQueue;\n }\n null === baseQueue && (queue.lanes = 0);\n return [hook.memoizedState, queue.dispatch];\n }\n function rerenderReducer(reducer) {\n var hook = updateWorkInProgressHook(),\n queue = hook.queue;\n if (null === queue)\n throw Error(\n \"Should have a queue. You are likely calling Hooks conditionally, which is not allowed. (https://react.dev/link/invalid-hook-call)\"\n );\n queue.lastRenderedReducer = reducer;\n var dispatch = queue.dispatch,\n lastRenderPhaseUpdate = queue.pending,\n newState = hook.memoizedState;\n if (null !== lastRenderPhaseUpdate) {\n queue.pending = null;\n var update = (lastRenderPhaseUpdate = lastRenderPhaseUpdate.next);\n do\n (newState = reducer(newState, update.action)), (update = update.next);\n while (update !== lastRenderPhaseUpdate);\n objectIs(newState, hook.memoizedState) || (didReceiveUpdate = !0);\n hook.memoizedState = newState;\n null === hook.baseQueue && (hook.baseState = newState);\n queue.lastRenderedState = newState;\n }\n return [newState, dispatch];\n }\n function mountSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n var fiber = currentlyRenderingFiber,\n hook = mountWorkInProgressHook();\n if (isHydrating) {\n if (void 0 === getServerSnapshot)\n throw Error(\n \"Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering.\"\n );\n var nextSnapshot = getServerSnapshot();\n didWarnUncachedGetSnapshot ||\n nextSnapshot === getServerSnapshot() ||\n (console.error(\n \"The result of getServerSnapshot should be cached to avoid an infinite loop\"\n ),\n (didWarnUncachedGetSnapshot = !0));\n } else {\n nextSnapshot = getSnapshot();\n didWarnUncachedGetSnapshot ||\n ((getServerSnapshot = getSnapshot()),\n objectIs(nextSnapshot, getServerSnapshot) ||\n (console.error(\n \"The result of getSnapshot should be cached to avoid an infinite loop\"\n ),\n (didWarnUncachedGetSnapshot = !0)));\n if (null === workInProgressRoot)\n throw Error(\n \"Expected a work-in-progress root. This is a bug in React. Please file an issue.\"\n );\n 0 !== (workInProgressRootRenderLanes & 124) ||\n pushStoreConsistencyCheck(fiber, getSnapshot, nextSnapshot);\n }\n hook.memoizedState = nextSnapshot;\n getServerSnapshot = { value: nextSnapshot, getSnapshot: getSnapshot };\n hook.queue = getServerSnapshot;\n mountEffect(\n subscribeToStore.bind(null, fiber, getServerSnapshot, subscribe),\n [subscribe]\n );\n fiber.flags |= 2048;\n pushSimpleEffect(\n HasEffect | Passive,\n { destroy: void 0 },\n updateStoreInstance.bind(\n null,\n fiber,\n getServerSnapshot,\n nextSnapshot,\n getSnapshot\n ),\n null\n );\n return nextSnapshot;\n }\n function updateSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n var fiber = currentlyRenderingFiber,\n hook = updateWorkInProgressHook(),\n isHydrating$jscomp$0 = isHydrating;\n if (isHydrating$jscomp$0) {\n if (void 0 === getServerSnapshot)\n throw Error(\n \"Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering.\"\n );\n getServerSnapshot = getServerSnapshot();\n } else if (\n ((getServerSnapshot = getSnapshot()), !didWarnUncachedGetSnapshot)\n ) {\n var cachedSnapshot = getSnapshot();\n objectIs(getServerSnapshot, cachedSnapshot) ||\n (console.error(\n \"The result of getSnapshot should be cached to avoid an infinite loop\"\n ),\n (didWarnUncachedGetSnapshot = !0));\n }\n if (\n (cachedSnapshot = !objectIs(\n (currentHook || hook).memoizedState,\n getServerSnapshot\n ))\n )\n (hook.memoizedState = getServerSnapshot), (didReceiveUpdate = !0);\n hook = hook.queue;\n var create = subscribeToStore.bind(null, fiber, hook, subscribe);\n updateEffectImpl(2048, Passive, create, [subscribe]);\n if (\n hook.getSnapshot !== getSnapshot ||\n cachedSnapshot ||\n (null !== workInProgressHook &&\n workInProgressHook.memoizedState.tag & HasEffect)\n ) {\n fiber.flags |= 2048;\n pushSimpleEffect(\n HasEffect | Passive,\n { destroy: void 0 },\n updateStoreInstance.bind(\n null,\n fiber,\n hook,\n getServerSnapshot,\n getSnapshot\n ),\n null\n );\n if (null === workInProgressRoot)\n throw Error(\n \"Expected a work-in-progress root. This is a bug in React. Please file an issue.\"\n );\n isHydrating$jscomp$0 ||\n 0 !== (renderLanes & 124) ||\n pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n }\n return getServerSnapshot;\n }\n function pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) {\n fiber.flags |= 16384;\n fiber = { getSnapshot: getSnapshot, value: renderedSnapshot };\n getSnapshot = currentlyRenderingFiber.updateQueue;\n null === getSnapshot\n ? ((getSnapshot = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = getSnapshot),\n (getSnapshot.stores = [fiber]))\n : ((renderedSnapshot = getSnapshot.stores),\n null === renderedSnapshot\n ? (getSnapshot.stores = [fiber])\n : renderedSnapshot.push(fiber));\n }\n function updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) {\n inst.value = nextSnapshot;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n }\n function subscribeToStore(fiber, inst, subscribe) {\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n });\n }\n function checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n }\n function forceStoreRerender(fiber) {\n var root = enqueueConcurrentRenderForLane(fiber, 2);\n null !== root && scheduleUpdateOnFiber(root, fiber, 2);\n }\n function mountStateImpl(initialState) {\n var hook = mountWorkInProgressHook();\n if (\"function\" === typeof initialState) {\n var initialStateInitializer = initialState;\n initialState = initialStateInitializer();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n initialStateInitializer();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n }\n hook.memoizedState = hook.baseState = initialState;\n hook.queue = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: initialState\n };\n return hook;\n }\n function mountState(initialState) {\n initialState = mountStateImpl(initialState);\n var queue = initialState.queue,\n dispatch = dispatchSetState.bind(null, currentlyRenderingFiber, queue);\n queue.dispatch = dispatch;\n return [initialState.memoizedState, dispatch];\n }\n function mountOptimistic(passthrough) {\n var hook = mountWorkInProgressHook();\n hook.memoizedState = hook.baseState = passthrough;\n var queue = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: null,\n lastRenderedState: null\n };\n hook.queue = queue;\n hook = dispatchOptimisticSetState.bind(\n null,\n currentlyRenderingFiber,\n !0,\n queue\n );\n queue.dispatch = hook;\n return [passthrough, hook];\n }\n function updateOptimistic(passthrough, reducer) {\n var hook = updateWorkInProgressHook();\n return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n }\n function updateOptimisticImpl(hook, current, passthrough, reducer) {\n hook.baseState = passthrough;\n return updateReducerImpl(\n hook,\n currentHook,\n \"function\" === typeof reducer ? reducer : basicStateReducer\n );\n }\n function rerenderOptimistic(passthrough, reducer) {\n var hook = updateWorkInProgressHook();\n if (null !== currentHook)\n return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n hook.baseState = passthrough;\n return [passthrough, hook.queue.dispatch];\n }\n function dispatchActionState(\n fiber,\n actionQueue,\n setPendingState,\n setState,\n payload\n ) {\n if (isRenderPhaseUpdate(fiber))\n throw Error(\"Cannot update form state while rendering.\");\n fiber = actionQueue.action;\n if (null !== fiber) {\n var actionNode = {\n payload: payload,\n action: fiber,\n next: null,\n isTransition: !0,\n status: \"pending\",\n value: null,\n reason: null,\n listeners: [],\n then: function (listener) {\n actionNode.listeners.push(listener);\n }\n };\n null !== ReactSharedInternals.T\n ? setPendingState(!0)\n : (actionNode.isTransition = !1);\n setState(actionNode);\n setPendingState = actionQueue.pending;\n null === setPendingState\n ? ((actionNode.next = actionQueue.pending = actionNode),\n runActionStateAction(actionQueue, actionNode))\n : ((actionNode.next = setPendingState.next),\n (actionQueue.pending = setPendingState.next = actionNode));\n }\n }\n function runActionStateAction(actionQueue, node) {\n var action = node.action,\n payload = node.payload,\n prevState = actionQueue.state;\n if (node.isTransition) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n currentTransition._updatedFibers = new Set();\n ReactSharedInternals.T = currentTransition;\n try {\n var returnValue = action(prevState, payload),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n handleActionReturnValue(actionQueue, node, returnValue);\n } catch (error) {\n onActionError(actionQueue, node, error);\n } finally {\n null !== prevTransition &&\n null !== currentTransition.types &&\n (null !== prevTransition.types &&\n prevTransition.types !== currentTransition.types &&\n console.error(\n \"We expected inner Transitions to have transferred the outer types set and that you cannot add to the outer Transition while inside the inner.This is a bug in React.\"\n ),\n (prevTransition.types = currentTransition.types)),\n (ReactSharedInternals.T = prevTransition),\n null === prevTransition &&\n currentTransition._updatedFibers &&\n ((actionQueue = currentTransition._updatedFibers.size),\n currentTransition._updatedFibers.clear(),\n 10 < actionQueue &&\n console.warn(\n \"Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table.\"\n ));\n }\n } else\n try {\n (currentTransition = action(prevState, payload)),\n handleActionReturnValue(actionQueue, node, currentTransition);\n } catch (error$4) {\n onActionError(actionQueue, node, error$4);\n }\n }\n function handleActionReturnValue(actionQueue, node, returnValue) {\n null !== returnValue &&\n \"object\" === typeof returnValue &&\n \"function\" === typeof returnValue.then\n ? (ReactSharedInternals.asyncTransitions++,\n returnValue.then(releaseAsyncTransition, releaseAsyncTransition),\n returnValue.then(\n function (nextState) {\n onActionSuccess(actionQueue, node, nextState);\n },\n function (error) {\n return onActionError(actionQueue, node, error);\n }\n ),\n node.isTransition ||\n console.error(\n \"An async function with useActionState was called outside of a transition. This is likely not what you intended (for example, isPending will not update correctly). Either call the returned function inside startTransition, or pass it to an `action` or `formAction` prop.\"\n ))\n : onActionSuccess(actionQueue, node, returnValue);\n }\n function onActionSuccess(actionQueue, actionNode, nextState) {\n actionNode.status = \"fulfilled\";\n actionNode.value = nextState;\n notifyActionListeners(actionNode);\n actionQueue.state = nextState;\n actionNode = actionQueue.pending;\n null !== actionNode &&\n ((nextState = actionNode.next),\n nextState === actionNode\n ? (actionQueue.pending = null)\n : ((nextState = nextState.next),\n (actionNode.next = nextState),\n runActionStateAction(actionQueue, nextState)));\n }\n function onActionError(actionQueue, actionNode, error) {\n var last = actionQueue.pending;\n actionQueue.pending = null;\n if (null !== last) {\n last = last.next;\n do\n (actionNode.status = \"rejected\"),\n (actionNode.reason = error),\n notifyActionListeners(actionNode),\n (actionNode = actionNode.next);\n while (actionNode !== last);\n }\n actionQueue.action = null;\n }\n function notifyActionListeners(actionNode) {\n actionNode = actionNode.listeners;\n for (var i = 0; i < actionNode.length; i++) (0, actionNode[i])();\n }\n function actionStateReducer(oldState, newState) {\n return newState;\n }\n function mountActionState(action, initialStateProp) {\n if (isHydrating) {\n var ssrFormState = workInProgressRoot.formState;\n if (null !== ssrFormState) {\n a: {\n var isMatching = currentlyRenderingFiber;\n if (isHydrating) {\n if (nextHydratableInstance) {\n b: {\n var markerInstance = nextHydratableInstance;\n for (\n var inRootOrSingleton = rootOrSingletonContext;\n 8 !== markerInstance.nodeType;\n\n ) {\n if (!inRootOrSingleton) {\n markerInstance = null;\n break b;\n }\n markerInstance = getNextHydratable(\n markerInstance.nextSibling\n );\n if (null === markerInstance) {\n markerInstance = null;\n break b;\n }\n }\n inRootOrSingleton = markerInstance.data;\n markerInstance =\n inRootOrSingleton === FORM_STATE_IS_MATCHING ||\n inRootOrSingleton === FORM_STATE_IS_NOT_MATCHING\n ? markerInstance\n : null;\n }\n if (markerInstance) {\n nextHydratableInstance = getNextHydratable(\n markerInstance.nextSibling\n );\n isMatching = markerInstance.data === FORM_STATE_IS_MATCHING;\n break a;\n }\n }\n throwOnHydrationMismatch(isMatching);\n }\n isMatching = !1;\n }\n isMatching && (initialStateProp = ssrFormState[0]);\n }\n }\n ssrFormState = mountWorkInProgressHook();\n ssrFormState.memoizedState = ssrFormState.baseState = initialStateProp;\n isMatching = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: actionStateReducer,\n lastRenderedState: initialStateProp\n };\n ssrFormState.queue = isMatching;\n ssrFormState = dispatchSetState.bind(\n null,\n currentlyRenderingFiber,\n isMatching\n );\n isMatching.dispatch = ssrFormState;\n isMatching = mountStateImpl(!1);\n inRootOrSingleton = dispatchOptimisticSetState.bind(\n null,\n currentlyRenderingFiber,\n !1,\n isMatching.queue\n );\n isMatching = mountWorkInProgressHook();\n markerInstance = {\n state: initialStateProp,\n dispatch: null,\n action: action,\n pending: null\n };\n isMatching.queue = markerInstance;\n ssrFormState = dispatchActionState.bind(\n null,\n currentlyRenderingFiber,\n markerInstance,\n inRootOrSingleton,\n ssrFormState\n );\n markerInstance.dispatch = ssrFormState;\n isMatching.memoizedState = action;\n return [initialStateProp, ssrFormState, !1];\n }\n function updateActionState(action) {\n var stateHook = updateWorkInProgressHook();\n return updateActionStateImpl(stateHook, currentHook, action);\n }\n function updateActionStateImpl(stateHook, currentStateHook, action) {\n currentStateHook = updateReducerImpl(\n stateHook,\n currentStateHook,\n actionStateReducer\n )[0];\n stateHook = updateReducer(basicStateReducer)[0];\n if (\n \"object\" === typeof currentStateHook &&\n null !== currentStateHook &&\n \"function\" === typeof currentStateHook.then\n )\n try {\n var state = useThenable(currentStateHook);\n } catch (x) {\n if (x === SuspenseException) throw SuspenseActionException;\n throw x;\n }\n else state = currentStateHook;\n currentStateHook = updateWorkInProgressHook();\n var actionQueue = currentStateHook.queue,\n dispatch = actionQueue.dispatch;\n action !== currentStateHook.memoizedState &&\n ((currentlyRenderingFiber.flags |= 2048),\n pushSimpleEffect(\n HasEffect | Passive,\n { destroy: void 0 },\n actionStateActionEffect.bind(null, actionQueue, action),\n null\n ));\n return [state, dispatch, stateHook];\n }\n function actionStateActionEffect(actionQueue, action) {\n actionQueue.action = action;\n }\n function rerenderActionState(action) {\n var stateHook = updateWorkInProgressHook(),\n currentStateHook = currentHook;\n if (null !== currentStateHook)\n return updateActionStateImpl(stateHook, currentStateHook, action);\n updateWorkInProgressHook();\n stateHook = stateHook.memoizedState;\n currentStateHook = updateWorkInProgressHook();\n var dispatch = currentStateHook.queue.dispatch;\n currentStateHook.memoizedState = action;\n return [stateHook, dispatch, !1];\n }\n function pushSimpleEffect(tag, inst, create, deps) {\n tag = { tag: tag, create: create, deps: deps, inst: inst, next: null };\n inst = currentlyRenderingFiber.updateQueue;\n null === inst &&\n ((inst = createFunctionComponentUpdateQueue()),\n (currentlyRenderingFiber.updateQueue = inst));\n create = inst.lastEffect;\n null === create\n ? (inst.lastEffect = tag.next = tag)\n : ((deps = create.next),\n (create.next = tag),\n (tag.next = deps),\n (inst.lastEffect = tag));\n return tag;\n }\n function mountRef(initialValue) {\n var hook = mountWorkInProgressHook();\n initialValue = { current: initialValue };\n return (hook.memoizedState = initialValue);\n }\n function mountEffectImpl(fiberFlags, hookFlags, create, deps) {\n var hook = mountWorkInProgressHook();\n currentlyRenderingFiber.flags |= fiberFlags;\n hook.memoizedState = pushSimpleEffect(\n HasEffect | hookFlags,\n { destroy: void 0 },\n create,\n void 0 === deps ? null : deps\n );\n }\n function updateEffectImpl(fiberFlags, hookFlags, create, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var inst = hook.memoizedState.inst;\n null !== currentHook &&\n null !== deps &&\n areHookInputsEqual(deps, currentHook.memoizedState.deps)\n ? (hook.memoizedState = pushSimpleEffect(hookFlags, inst, create, deps))\n : ((currentlyRenderingFiber.flags |= fiberFlags),\n (hook.memoizedState = pushSimpleEffect(\n HasEffect | hookFlags,\n inst,\n create,\n deps\n )));\n }\n function mountEffect(create, deps) {\n (currentlyRenderingFiber.mode & StrictEffectsMode) !== NoMode\n ? mountEffectImpl(276826112, Passive, create, deps)\n : mountEffectImpl(8390656, Passive, create, deps);\n }\n function mountLayoutEffect(create, deps) {\n var fiberFlags = 4194308;\n (currentlyRenderingFiber.mode & StrictEffectsMode) !== NoMode &&\n (fiberFlags |= 134217728);\n return mountEffectImpl(fiberFlags, Layout, create, deps);\n }\n function imperativeHandleEffect(create, ref) {\n if (\"function\" === typeof ref) {\n create = create();\n var refCleanup = ref(create);\n return function () {\n \"function\" === typeof refCleanup ? refCleanup() : ref(null);\n };\n }\n if (null !== ref && void 0 !== ref)\n return (\n ref.hasOwnProperty(\"current\") ||\n console.error(\n \"Expected useImperativeHandle() first argument to either be a ref callback or React.createRef() object. Instead received: %s.\",\n \"an object with keys {\" + Object.keys(ref).join(\", \") + \"}\"\n ),\n (create = create()),\n (ref.current = create),\n function () {\n ref.current = null;\n }\n );\n }\n function mountImperativeHandle(ref, create, deps) {\n \"function\" !== typeof create &&\n console.error(\n \"Expected useImperativeHandle() second argument to be a function that creates a handle. Instead received: %s.\",\n null !== create ? typeof create : \"null\"\n );\n deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n var fiberFlags = 4194308;\n (currentlyRenderingFiber.mode & StrictEffectsMode) !== NoMode &&\n (fiberFlags |= 134217728);\n mountEffectImpl(\n fiberFlags,\n Layout,\n imperativeHandleEffect.bind(null, create, ref),\n deps\n );\n }\n function updateImperativeHandle(ref, create, deps) {\n \"function\" !== typeof create &&\n console.error(\n \"Expected useImperativeHandle() second argument to be a function that creates a handle. Instead received: %s.\",\n null !== create ? typeof create : \"null\"\n );\n deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n updateEffectImpl(\n 4,\n Layout,\n imperativeHandleEffect.bind(null, create, ref),\n deps\n );\n }\n function mountCallback(callback, deps) {\n mountWorkInProgressHook().memoizedState = [\n callback,\n void 0 === deps ? null : deps\n ];\n return callback;\n }\n function updateCallback(callback, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var prevState = hook.memoizedState;\n if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n return prevState[0];\n hook.memoizedState = [callback, deps];\n return callback;\n }\n function mountMemo(nextCreate, deps) {\n var hook = mountWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var nextValue = nextCreate();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n nextCreate();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n hook.memoizedState = [nextValue, deps];\n return nextValue;\n }\n function updateMemo(nextCreate, deps) {\n var hook = updateWorkInProgressHook();\n deps = void 0 === deps ? null : deps;\n var prevState = hook.memoizedState;\n if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n return prevState[0];\n prevState = nextCreate();\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n setIsStrictModeForDevtools(!0);\n try {\n nextCreate();\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n hook.memoizedState = [prevState, deps];\n return prevState;\n }\n function mountDeferredValue(value, initialValue) {\n var hook = mountWorkInProgressHook();\n return mountDeferredValueImpl(hook, value, initialValue);\n }\n function updateDeferredValue(value, initialValue) {\n var hook = updateWorkInProgressHook();\n return updateDeferredValueImpl(\n hook,\n currentHook.memoizedState,\n value,\n initialValue\n );\n }\n function rerenderDeferredValue(value, initialValue) {\n var hook = updateWorkInProgressHook();\n return null === currentHook\n ? mountDeferredValueImpl(hook, value, initialValue)\n : updateDeferredValueImpl(\n hook,\n currentHook.memoizedState,\n value,\n initialValue\n );\n }\n function mountDeferredValueImpl(hook, value, initialValue) {\n if (void 0 === initialValue || 0 !== (renderLanes & 1073741824))\n return (hook.memoizedState = value);\n hook.memoizedState = initialValue;\n hook = requestDeferredLane();\n currentlyRenderingFiber.lanes |= hook;\n workInProgressRootSkippedLanes |= hook;\n return initialValue;\n }\n function updateDeferredValueImpl(hook, prevValue, value, initialValue) {\n if (objectIs(value, prevValue)) return value;\n if (null !== currentTreeHiddenStackCursor.current)\n return (\n (hook = mountDeferredValueImpl(hook, value, initialValue)),\n objectIs(hook, prevValue) || (didReceiveUpdate = !0),\n hook\n );\n if (0 === (renderLanes & 42) || 0 !== (renderLanes & 1073741824))\n return (didReceiveUpdate = !0), (hook.memoizedState = value);\n hook = requestDeferredLane();\n currentlyRenderingFiber.lanes |= hook;\n workInProgressRootSkippedLanes |= hook;\n return prevValue;\n }\n function releaseAsyncTransition() {\n ReactSharedInternals.asyncTransitions--;\n }\n function startTransition(\n fiber,\n queue,\n pendingState,\n finishedState,\n callback\n ) {\n var previousPriority = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p =\n 0 !== previousPriority && previousPriority < ContinuousEventPriority\n ? previousPriority\n : ContinuousEventPriority;\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n currentTransition._updatedFibers = new Set();\n ReactSharedInternals.T = currentTransition;\n dispatchOptimisticSetState(fiber, !1, queue, pendingState);\n try {\n var returnValue = callback(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n if (\n null !== returnValue &&\n \"object\" === typeof returnValue &&\n \"function\" === typeof returnValue.then\n ) {\n ReactSharedInternals.asyncTransitions++;\n returnValue.then(releaseAsyncTransition, releaseAsyncTransition);\n var thenableForFinishedState = chainThenableValue(\n returnValue,\n finishedState\n );\n dispatchSetStateInternal(\n fiber,\n queue,\n thenableForFinishedState,\n requestUpdateLane(fiber)\n );\n } else\n dispatchSetStateInternal(\n fiber,\n queue,\n finishedState,\n requestUpdateLane(fiber)\n );\n } catch (error) {\n dispatchSetStateInternal(\n fiber,\n queue,\n { then: function () {}, status: \"rejected\", reason: error },\n requestUpdateLane(fiber)\n );\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n null !== prevTransition &&\n null !== currentTransition.types &&\n (null !== prevTransition.types &&\n prevTransition.types !== currentTransition.types &&\n console.error(\n \"We expected inner Transitions to have transferred the outer types set and that you cannot add to the outer Transition while inside the inner.This is a bug in React.\"\n ),\n (prevTransition.types = currentTransition.types)),\n (ReactSharedInternals.T = prevTransition),\n null === prevTransition &&\n currentTransition._updatedFibers &&\n ((fiber = currentTransition._updatedFibers.size),\n currentTransition._updatedFibers.clear(),\n 10 < fiber &&\n console.warn(\n \"Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table.\"\n ));\n }\n }\n function startHostTransition(formFiber, pendingState, action, formData) {\n if (5 !== formFiber.tag)\n throw Error(\n \"Expected the form instance to be a HostComponent. This is a bug in React.\"\n );\n var queue = ensureFormComponentIsStateful(formFiber).queue;\n startTransition(\n formFiber,\n queue,\n pendingState,\n NotPendingTransition,\n null === action\n ? noop\n : function () {\n requestFormReset$1(formFiber);\n return action(formData);\n }\n );\n }\n function ensureFormComponentIsStateful(formFiber) {\n var existingStateHook = formFiber.memoizedState;\n if (null !== existingStateHook) return existingStateHook;\n existingStateHook = {\n memoizedState: NotPendingTransition,\n baseState: NotPendingTransition,\n baseQueue: null,\n queue: {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: NotPendingTransition\n },\n next: null\n };\n var initialResetState = {};\n existingStateHook.next = {\n memoizedState: initialResetState,\n baseState: initialResetState,\n baseQueue: null,\n queue: {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: initialResetState\n },\n next: null\n };\n formFiber.memoizedState = existingStateHook;\n formFiber = formFiber.alternate;\n null !== formFiber && (formFiber.memoizedState = existingStateHook);\n return existingStateHook;\n }\n function requestFormReset$1(formFiber) {\n null === ReactSharedInternals.T &&\n console.error(\n \"requestFormReset was called outside a transition or action. To fix, move to an action, or wrap with startTransition.\"\n );\n var stateHook = ensureFormComponentIsStateful(formFiber);\n null === stateHook.next &&\n (stateHook = formFiber.alternate.memoizedState);\n dispatchSetStateInternal(\n formFiber,\n stateHook.next.queue,\n {},\n requestUpdateLane(formFiber)\n );\n }\n function mountTransition() {\n var stateHook = mountStateImpl(!1);\n stateHook = startTransition.bind(\n null,\n currentlyRenderingFiber,\n stateHook.queue,\n !0,\n !1\n );\n mountWorkInProgressHook().memoizedState = stateHook;\n return [!1, stateHook];\n }\n function updateTransition() {\n var booleanOrThenable = updateReducer(basicStateReducer)[0],\n start = updateWorkInProgressHook().memoizedState;\n return [\n \"boolean\" === typeof booleanOrThenable\n ? booleanOrThenable\n : useThenable(booleanOrThenable),\n start\n ];\n }\n function rerenderTransition() {\n var booleanOrThenable = rerenderReducer(basicStateReducer)[0],\n start = updateWorkInProgressHook().memoizedState;\n return [\n \"boolean\" === typeof booleanOrThenable\n ? booleanOrThenable\n : useThenable(booleanOrThenable),\n start\n ];\n }\n function useHostTransitionStatus() {\n return readContext(HostTransitionContext);\n }\n function mountId() {\n var hook = mountWorkInProgressHook(),\n identifierPrefix = workInProgressRoot.identifierPrefix;\n if (isHydrating) {\n var treeId = treeContextOverflow;\n var idWithLeadingBit = treeContextId;\n treeId =\n (\n idWithLeadingBit & ~(1 << (32 - clz32(idWithLeadingBit) - 1))\n ).toString(32) + treeId;\n identifierPrefix = \"_\" + identifierPrefix + \"R_\" + treeId;\n treeId = localIdCounter++;\n 0 < treeId && (identifierPrefix += \"H\" + treeId.toString(32));\n identifierPrefix += \"_\";\n } else\n (treeId = globalClientIdCounter++),\n (identifierPrefix =\n \"_\" + identifierPrefix + \"r_\" + treeId.toString(32) + \"_\");\n return (hook.memoizedState = identifierPrefix);\n }\n function mountRefresh() {\n return (mountWorkInProgressHook().memoizedState = refreshCache.bind(\n null,\n currentlyRenderingFiber\n ));\n }\n function refreshCache(fiber, seedKey) {\n for (var provider = fiber.return; null !== provider; ) {\n switch (provider.tag) {\n case 24:\n case 3:\n var lane = requestUpdateLane(provider);\n fiber = createUpdate(lane);\n var root = enqueueUpdate(provider, fiber, lane);\n null !== root &&\n (scheduleUpdateOnFiber(root, provider, lane),\n entangleTransitions(root, provider, lane));\n provider = createCache();\n null !== seedKey &&\n void 0 !== seedKey &&\n null !== root &&\n console.error(\n \"The seed argument is not enabled outside experimental channels.\"\n );\n fiber.payload = { cache: provider };\n return;\n }\n provider = provider.return;\n }\n }\n function dispatchReducerAction(fiber, queue, action) {\n var args = arguments;\n \"function\" === typeof args[3] &&\n console.error(\n \"State updates from the useState() and useReducer() Hooks don't support the second callback argument. To execute a side effect after rendering, declare it in the component body with useEffect().\"\n );\n args = requestUpdateLane(fiber);\n var update = {\n lane: args,\n revertLane: 0,\n gesture: null,\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n isRenderPhaseUpdate(fiber)\n ? enqueueRenderPhaseUpdate(queue, update)\n : ((update = enqueueConcurrentHookUpdate(fiber, queue, update, args)),\n null !== update &&\n (scheduleUpdateOnFiber(update, fiber, args),\n entangleTransitionUpdate(update, queue, args)));\n markStateUpdateScheduled(fiber, args);\n }\n function dispatchSetState(fiber, queue, action) {\n var args = arguments;\n \"function\" === typeof args[3] &&\n console.error(\n \"State updates from the useState() and useReducer() Hooks don't support the second callback argument. To execute a side effect after rendering, declare it in the component body with useEffect().\"\n );\n args = requestUpdateLane(fiber);\n dispatchSetStateInternal(fiber, queue, action, args);\n markStateUpdateScheduled(fiber, args);\n }\n function dispatchSetStateInternal(fiber, queue, action, lane) {\n var update = {\n lane: lane,\n revertLane: 0,\n gesture: null,\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, update);\n else {\n var alternate = fiber.alternate;\n if (\n 0 === fiber.lanes &&\n (null === alternate || 0 === alternate.lanes) &&\n ((alternate = queue.lastRenderedReducer), null !== alternate)\n ) {\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n var currentState = queue.lastRenderedState,\n eagerState = alternate(currentState, action);\n update.hasEagerState = !0;\n update.eagerState = eagerState;\n if (objectIs(eagerState, currentState))\n return (\n enqueueUpdate$1(fiber, queue, update, 0),\n null === workInProgressRoot &&\n finishQueueingConcurrentUpdates(),\n !1\n );\n } catch (error) {\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n }\n action = enqueueConcurrentHookUpdate(fiber, queue, update, lane);\n if (null !== action)\n return (\n scheduleUpdateOnFiber(action, fiber, lane),\n entangleTransitionUpdate(action, queue, lane),\n !0\n );\n }\n return !1;\n }\n function dispatchOptimisticSetState(\n fiber,\n throwIfDuringRender,\n queue,\n action\n ) {\n null === ReactSharedInternals.T &&\n 0 === currentEntangledLane &&\n console.error(\n \"An optimistic state update occurred outside a transition or action. To fix, move the update to an action, or wrap with startTransition.\"\n );\n action = {\n lane: 2,\n revertLane: requestTransitionLane(),\n gesture: null,\n action: action,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n if (isRenderPhaseUpdate(fiber)) {\n if (throwIfDuringRender)\n throw Error(\"Cannot update optimistic state while rendering.\");\n console.error(\"Cannot call startTransition while rendering.\");\n } else\n (throwIfDuringRender = enqueueConcurrentHookUpdate(\n fiber,\n queue,\n action,\n 2\n )),\n null !== throwIfDuringRender &&\n scheduleUpdateOnFiber(throwIfDuringRender, fiber, 2);\n markStateUpdateScheduled(fiber, 2);\n }\n function isRenderPhaseUpdate(fiber) {\n var alternate = fiber.alternate;\n return (\n fiber === currentlyRenderingFiber ||\n (null !== alternate && alternate === currentlyRenderingFiber)\n );\n }\n function enqueueRenderPhaseUpdate(queue, update) {\n didScheduleRenderPhaseUpdateDuringThisPass =\n didScheduleRenderPhaseUpdate = !0;\n var pending = queue.pending;\n null === pending\n ? (update.next = update)\n : ((update.next = pending.next), (pending.next = update));\n queue.pending = update;\n }\n function entangleTransitionUpdate(root, queue, lane) {\n if (0 !== (lane & 4194048)) {\n var queueLanes = queue.lanes;\n queueLanes &= root.pendingLanes;\n lane |= queueLanes;\n queue.lanes = lane;\n markRootEntangled(root, lane);\n }\n }\n function warnOnInvalidCallback(callback) {\n if (null !== callback && \"function\" !== typeof callback) {\n var key = String(callback);\n didWarnOnInvalidCallback.has(key) ||\n (didWarnOnInvalidCallback.add(key),\n console.error(\n \"Expected the last optional `callback` argument to be a function. Instead received: %s.\",\n callback\n ));\n }\n }\n function applyDerivedStateFromProps(\n workInProgress,\n ctor,\n getDerivedStateFromProps,\n nextProps\n ) {\n var prevState = workInProgress.memoizedState,\n partialState = getDerivedStateFromProps(nextProps, prevState);\n if (workInProgress.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(!0);\n try {\n partialState = getDerivedStateFromProps(nextProps, prevState);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n void 0 === partialState &&\n ((ctor = getComponentNameFromType(ctor) || \"Component\"),\n didWarnAboutUndefinedDerivedState.has(ctor) ||\n (didWarnAboutUndefinedDerivedState.add(ctor),\n console.error(\n \"%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. You have returned undefined.\",\n ctor\n )));\n prevState =\n null === partialState || void 0 === partialState\n ? prevState\n : assign({}, prevState, partialState);\n workInProgress.memoizedState = prevState;\n 0 === workInProgress.lanes &&\n (workInProgress.updateQueue.baseState = prevState);\n }\n function checkShouldComponentUpdate(\n workInProgress,\n ctor,\n oldProps,\n newProps,\n oldState,\n newState,\n nextContext\n ) {\n var instance = workInProgress.stateNode;\n if (\"function\" === typeof instance.shouldComponentUpdate) {\n oldProps = instance.shouldComponentUpdate(\n newProps,\n newState,\n nextContext\n );\n if (workInProgress.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(!0);\n try {\n oldProps = instance.shouldComponentUpdate(\n newProps,\n newState,\n nextContext\n );\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n void 0 === oldProps &&\n console.error(\n \"%s.shouldComponentUpdate(): Returned undefined instead of a boolean value. Make sure to return true or false.\",\n getComponentNameFromType(ctor) || \"Component\"\n );\n return oldProps;\n }\n return ctor.prototype && ctor.prototype.isPureReactComponent\n ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState)\n : !0;\n }\n function callComponentWillReceiveProps(\n workInProgress,\n instance,\n newProps,\n nextContext\n ) {\n var oldState = instance.state;\n \"function\" === typeof instance.componentWillReceiveProps &&\n instance.componentWillReceiveProps(newProps, nextContext);\n \"function\" === typeof instance.UNSAFE_componentWillReceiveProps &&\n instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);\n instance.state !== oldState &&\n ((workInProgress =\n getComponentNameFromFiber(workInProgress) || \"Component\"),\n didWarnAboutStateAssignmentForComponent.has(workInProgress) ||\n (didWarnAboutStateAssignmentForComponent.add(workInProgress),\n console.error(\n \"%s.componentWillReceiveProps(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.\",\n workInProgress\n )),\n classComponentUpdater.enqueueReplaceState(\n instance,\n instance.state,\n null\n ));\n }\n function resolveClassComponentProps(Component, baseProps) {\n var newProps = baseProps;\n if (\"ref\" in baseProps) {\n newProps = {};\n for (var propName in baseProps)\n \"ref\" !== propName && (newProps[propName] = baseProps[propName]);\n }\n if ((Component = Component.defaultProps)) {\n newProps === baseProps && (newProps = assign({}, newProps));\n for (var _propName in Component)\n void 0 === newProps[_propName] &&\n (newProps[_propName] = Component[_propName]);\n }\n return newProps;\n }\n function defaultOnUncaughtError(error) {\n reportGlobalError(error);\n console.warn(\n \"%s\\n\\n%s\\n\",\n componentName\n ? \"An error occurred in the <\" + componentName + \"> component.\"\n : \"An error occurred in one of your React components.\",\n \"Consider adding an error boundary to your tree to customize error handling behavior.\\nVisit https://react.dev/link/error-boundaries to learn more about error boundaries.\"\n );\n }\n function defaultOnCaughtError(error) {\n var componentNameMessage = componentName\n ? \"The above error occurred in the <\" + componentName + \"> component.\"\n : \"The above error occurred in one of your React components.\",\n recreateMessage =\n \"React will try to recreate this component tree from scratch using the error boundary you provided, \" +\n ((errorBoundaryName || \"Anonymous\") + \".\");\n if (\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.environmentName\n ) {\n var JSCompiler_inline_result = error.environmentName;\n error = [\n \"%o\\n\\n%s\\n\\n%s\\n\",\n error,\n componentNameMessage,\n recreateMessage\n ].slice(0);\n \"string\" === typeof error[0]\n ? error.splice(\n 0,\n 1,\n badgeFormat + error[0],\n badgeStyle,\n pad + JSCompiler_inline_result + pad,\n resetStyle\n )\n : error.splice(\n 0,\n 0,\n badgeFormat,\n badgeStyle,\n pad + JSCompiler_inline_result + pad,\n resetStyle\n );\n error.unshift(console);\n JSCompiler_inline_result = bind.apply(console.error, error);\n JSCompiler_inline_result();\n } else\n console.error(\n \"%o\\n\\n%s\\n\\n%s\\n\",\n error,\n componentNameMessage,\n recreateMessage\n );\n }\n function defaultOnRecoverableError(error) {\n reportGlobalError(error);\n }\n function logUncaughtError(root, errorInfo) {\n try {\n componentName = errorInfo.source\n ? getComponentNameFromFiber(errorInfo.source)\n : null;\n errorBoundaryName = null;\n var error = errorInfo.value;\n if (null !== ReactSharedInternals.actQueue)\n ReactSharedInternals.thrownErrors.push(error);\n else {\n var onUncaughtError = root.onUncaughtError;\n onUncaughtError(error, { componentStack: errorInfo.stack });\n }\n } catch (e$5) {\n setTimeout(function () {\n throw e$5;\n });\n }\n }\n function logCaughtError(root, boundary, errorInfo) {\n try {\n componentName = errorInfo.source\n ? getComponentNameFromFiber(errorInfo.source)\n : null;\n errorBoundaryName = getComponentNameFromFiber(boundary);\n var onCaughtError = root.onCaughtError;\n onCaughtError(errorInfo.value, {\n componentStack: errorInfo.stack,\n errorBoundary: 1 === boundary.tag ? boundary.stateNode : null\n });\n } catch (e$6) {\n setTimeout(function () {\n throw e$6;\n });\n }\n }\n function createRootErrorUpdate(root, errorInfo, lane) {\n lane = createUpdate(lane);\n lane.tag = CaptureUpdate;\n lane.payload = { element: null };\n lane.callback = function () {\n runWithFiberInDEV(errorInfo.source, logUncaughtError, root, errorInfo);\n };\n return lane;\n }\n function createClassErrorUpdate(lane) {\n lane = createUpdate(lane);\n lane.tag = CaptureUpdate;\n return lane;\n }\n function initializeClassErrorUpdate(update, root, fiber, errorInfo) {\n var getDerivedStateFromError = fiber.type.getDerivedStateFromError;\n if (\"function\" === typeof getDerivedStateFromError) {\n var error = errorInfo.value;\n update.payload = function () {\n return getDerivedStateFromError(error);\n };\n update.callback = function () {\n markFailedErrorBoundaryForHotReloading(fiber);\n runWithFiberInDEV(\n errorInfo.source,\n logCaughtError,\n root,\n fiber,\n errorInfo\n );\n };\n }\n var inst = fiber.stateNode;\n null !== inst &&\n \"function\" === typeof inst.componentDidCatch &&\n (update.callback = function () {\n markFailedErrorBoundaryForHotReloading(fiber);\n runWithFiberInDEV(\n errorInfo.source,\n logCaughtError,\n root,\n fiber,\n errorInfo\n );\n \"function\" !== typeof getDerivedStateFromError &&\n (null === legacyErrorBoundariesThatAlreadyFailed\n ? (legacyErrorBoundariesThatAlreadyFailed = new Set([this]))\n : legacyErrorBoundariesThatAlreadyFailed.add(this));\n callComponentDidCatchInDEV(this, errorInfo);\n \"function\" === typeof getDerivedStateFromError ||\n (0 === (fiber.lanes & 2) &&\n console.error(\n \"%s: Error boundaries should implement getDerivedStateFromError(). In that method, return a state update to display an error message or fallback UI.\",\n getComponentNameFromFiber(fiber) || \"Unknown\"\n ));\n });\n }\n function throwException(\n root,\n returnFiber,\n sourceFiber,\n value,\n rootRenderLanes\n ) {\n sourceFiber.flags |= 32768;\n isDevToolsPresent && restorePendingUpdaters(root, rootRenderLanes);\n if (\n null !== value &&\n \"object\" === typeof value &&\n \"function\" === typeof value.then\n ) {\n returnFiber = sourceFiber.alternate;\n null !== returnFiber &&\n propagateParentContextChanges(\n returnFiber,\n sourceFiber,\n rootRenderLanes,\n !0\n );\n isHydrating && (didSuspendOrErrorDEV = !0);\n sourceFiber = suspenseHandlerStackCursor.current;\n if (null !== sourceFiber) {\n switch (sourceFiber.tag) {\n case 31:\n case 13:\n return (\n null === shellBoundary\n ? renderDidSuspendDelayIfPossible()\n : null === sourceFiber.alternate &&\n workInProgressRootExitStatus === RootInProgress &&\n (workInProgressRootExitStatus = RootSuspended),\n (sourceFiber.flags &= -257),\n (sourceFiber.flags |= 65536),\n (sourceFiber.lanes = rootRenderLanes),\n value === noopSuspenseyCommitThenable\n ? (sourceFiber.flags |= 16384)\n : ((returnFiber = sourceFiber.updateQueue),\n null === returnFiber\n ? (sourceFiber.updateQueue = new Set([value]))\n : returnFiber.add(value),\n attachPingListener(root, value, rootRenderLanes)),\n !1\n );\n case 22:\n return (\n (sourceFiber.flags |= 65536),\n value === noopSuspenseyCommitThenable\n ? (sourceFiber.flags |= 16384)\n : ((returnFiber = sourceFiber.updateQueue),\n null === returnFiber\n ? ((returnFiber = {\n transitions: null,\n markerInstances: null,\n retryQueue: new Set([value])\n }),\n (sourceFiber.updateQueue = returnFiber))\n : ((sourceFiber = returnFiber.retryQueue),\n null === sourceFiber\n ? (returnFiber.retryQueue = new Set([value]))\n : sourceFiber.add(value)),\n attachPingListener(root, value, rootRenderLanes)),\n !1\n );\n }\n throw Error(\n \"Unexpected Suspense handler tag (\" +\n sourceFiber.tag +\n \"). This is a bug in React.\"\n );\n }\n attachPingListener(root, value, rootRenderLanes);\n renderDidSuspendDelayIfPossible();\n return !1;\n }\n if (isHydrating)\n return (\n (didSuspendOrErrorDEV = !0),\n (returnFiber = suspenseHandlerStackCursor.current),\n null !== returnFiber\n ? (0 === (returnFiber.flags & 65536) && (returnFiber.flags |= 256),\n (returnFiber.flags |= 65536),\n (returnFiber.lanes = rootRenderLanes),\n value !== HydrationMismatchException &&\n queueHydrationError(\n createCapturedValueAtFiber(\n Error(\n \"There was an error while hydrating but React was able to recover by instead client rendering from the nearest Suspense boundary.\",\n { cause: value }\n ),\n sourceFiber\n )\n ))\n : (value !== HydrationMismatchException &&\n queueHydrationError(\n createCapturedValueAtFiber(\n Error(\n \"There was an error while hydrating but React was able to recover by instead client rendering the entire root.\",\n { cause: value }\n ),\n sourceFiber\n )\n ),\n (root = root.current.alternate),\n (root.flags |= 65536),\n (rootRenderLanes &= -rootRenderLanes),\n (root.lanes |= rootRenderLanes),\n (value = createCapturedValueAtFiber(value, sourceFiber)),\n (rootRenderLanes = createRootErrorUpdate(\n root.stateNode,\n value,\n rootRenderLanes\n )),\n enqueueCapturedUpdate(root, rootRenderLanes),\n workInProgressRootExitStatus !== RootSuspendedWithDelay &&\n (workInProgressRootExitStatus = RootErrored)),\n !1\n );\n var error = createCapturedValueAtFiber(\n Error(\n \"There was an error during concurrent rendering but React was able to recover by instead synchronously rendering the entire root.\",\n { cause: value }\n ),\n sourceFiber\n );\n null === workInProgressRootConcurrentErrors\n ? (workInProgressRootConcurrentErrors = [error])\n : workInProgressRootConcurrentErrors.push(error);\n workInProgressRootExitStatus !== RootSuspendedWithDelay &&\n (workInProgressRootExitStatus = RootErrored);\n if (null === returnFiber) return !0;\n value = createCapturedValueAtFiber(value, sourceFiber);\n sourceFiber = returnFiber;\n do {\n switch (sourceFiber.tag) {\n case 3:\n return (\n (sourceFiber.flags |= 65536),\n (root = rootRenderLanes & -rootRenderLanes),\n (sourceFiber.lanes |= root),\n (root = createRootErrorUpdate(\n sourceFiber.stateNode,\n value,\n root\n )),\n enqueueCapturedUpdate(sourceFiber, root),\n !1\n );\n case 1:\n if (\n ((returnFiber = sourceFiber.type),\n (error = sourceFiber.stateNode),\n 0 === (sourceFiber.flags & 128) &&\n (\"function\" === typeof returnFiber.getDerivedStateFromError ||\n (null !== error &&\n \"function\" === typeof error.componentDidCatch &&\n (null === legacyErrorBoundariesThatAlreadyFailed ||\n !legacyErrorBoundariesThatAlreadyFailed.has(error)))))\n )\n return (\n (sourceFiber.flags |= 65536),\n (rootRenderLanes &= -rootRenderLanes),\n (sourceFiber.lanes |= rootRenderLanes),\n (rootRenderLanes = createClassErrorUpdate(rootRenderLanes)),\n initializeClassErrorUpdate(\n rootRenderLanes,\n root,\n sourceFiber,\n value\n ),\n enqueueCapturedUpdate(sourceFiber, rootRenderLanes),\n !1\n );\n }\n sourceFiber = sourceFiber.return;\n } while (null !== sourceFiber);\n return !1;\n }\n function reconcileChildren(\n current,\n workInProgress,\n nextChildren,\n renderLanes\n ) {\n workInProgress.child =\n null === current\n ? mountChildFibers(workInProgress, null, nextChildren, renderLanes)\n : reconcileChildFibers(\n workInProgress,\n current.child,\n nextChildren,\n renderLanes\n );\n }\n function updateForwardRef(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n ) {\n Component = Component.render;\n var ref = workInProgress.ref;\n if (\"ref\" in nextProps) {\n var propsWithoutRef = {};\n for (var key in nextProps)\n \"ref\" !== key && (propsWithoutRef[key] = nextProps[key]);\n } else propsWithoutRef = nextProps;\n prepareToReadContext(workInProgress);\n markComponentRenderStarted(workInProgress);\n nextProps = renderWithHooks(\n current,\n workInProgress,\n Component,\n propsWithoutRef,\n ref,\n renderLanes\n );\n key = checkDidRenderIdHook();\n markComponentRenderStopped();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && key && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n return workInProgress.child;\n }\n function updateMemoComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n ) {\n if (null === current) {\n var type = Component.type;\n if (\n \"function\" === typeof type &&\n !shouldConstruct(type) &&\n void 0 === type.defaultProps &&\n null === Component.compare\n )\n return (\n (Component = resolveFunctionForHotReloading(type)),\n (workInProgress.tag = 15),\n (workInProgress.type = Component),\n validateFunctionComponentInDev(workInProgress, type),\n updateSimpleMemoComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n )\n );\n current = createFiberFromTypeAndProps(\n Component.type,\n null,\n nextProps,\n workInProgress,\n workInProgress.mode,\n renderLanes\n );\n current.ref = workInProgress.ref;\n current.return = workInProgress;\n return (workInProgress.child = current);\n }\n type = current.child;\n if (!checkScheduledUpdateOrContext(current, renderLanes)) {\n var prevProps = type.memoizedProps;\n Component = Component.compare;\n Component = null !== Component ? Component : shallowEqual;\n if (\n Component(prevProps, nextProps) &&\n current.ref === workInProgress.ref\n )\n return bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n }\n workInProgress.flags |= 1;\n current = createWorkInProgress(type, nextProps);\n current.ref = workInProgress.ref;\n current.return = workInProgress;\n return (workInProgress.child = current);\n }\n function updateSimpleMemoComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n ) {\n if (null !== current) {\n var prevProps = current.memoizedProps;\n if (\n shallowEqual(prevProps, nextProps) &&\n current.ref === workInProgress.ref &&\n workInProgress.type === current.type\n )\n if (\n ((didReceiveUpdate = !1),\n (workInProgress.pendingProps = nextProps = prevProps),\n checkScheduledUpdateOrContext(current, renderLanes))\n )\n 0 !== (current.flags & 131072) && (didReceiveUpdate = !0);\n else\n return (\n (workInProgress.lanes = current.lanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n }\n return updateFunctionComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n );\n }\n function updateOffscreenComponent(\n current,\n workInProgress,\n renderLanes,\n nextProps\n ) {\n var nextChildren = nextProps.children,\n prevState = null !== current ? current.memoizedState : null;\n if (\"hidden\" === nextProps.mode) {\n if (0 !== (workInProgress.flags & 128)) {\n nextProps =\n null !== prevState\n ? prevState.baseLanes | renderLanes\n : renderLanes;\n if (null !== current) {\n nextChildren = workInProgress.child = current.child;\n for (prevState = 0; null !== nextChildren; )\n (prevState =\n prevState | nextChildren.lanes | nextChildren.childLanes),\n (nextChildren = nextChildren.sibling);\n workInProgress.childLanes = prevState & ~nextProps;\n } else (workInProgress.childLanes = 0), (workInProgress.child = null);\n return deferHiddenOffscreenComponent(\n current,\n workInProgress,\n nextProps,\n renderLanes\n );\n }\n if (0 !== (renderLanes & 536870912))\n (workInProgress.memoizedState = { baseLanes: 0, cachePool: null }),\n null !== current &&\n pushTransition(\n workInProgress,\n null !== prevState ? prevState.cachePool : null\n ),\n null !== prevState\n ? pushHiddenContext(workInProgress, prevState)\n : reuseHiddenContextOnStack(workInProgress),\n pushOffscreenSuspenseHandler(workInProgress);\n else\n return (\n (workInProgress.lanes = workInProgress.childLanes = 536870912),\n deferHiddenOffscreenComponent(\n current,\n workInProgress,\n null !== prevState\n ? prevState.baseLanes | renderLanes\n : renderLanes,\n renderLanes\n )\n );\n } else\n null !== prevState\n ? (pushTransition(workInProgress, prevState.cachePool),\n pushHiddenContext(workInProgress, prevState),\n reuseSuspenseHandlerOnStack(workInProgress),\n (workInProgress.memoizedState = null))\n : (null !== current && pushTransition(workInProgress, null),\n reuseHiddenContextOnStack(workInProgress),\n reuseSuspenseHandlerOnStack(workInProgress));\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n }\n function deferHiddenOffscreenComponent(\n current,\n workInProgress,\n nextBaseLanes,\n renderLanes\n ) {\n var JSCompiler_inline_result = peekCacheFromPool();\n JSCompiler_inline_result =\n null === JSCompiler_inline_result\n ? null\n : {\n parent: CacheContext._currentValue,\n pool: JSCompiler_inline_result\n };\n workInProgress.memoizedState = {\n baseLanes: nextBaseLanes,\n cachePool: JSCompiler_inline_result\n };\n null !== current && pushTransition(workInProgress, null);\n reuseHiddenContextOnStack(workInProgress);\n pushOffscreenSuspenseHandler(workInProgress);\n null !== current &&\n propagateParentContextChanges(current, workInProgress, renderLanes, !0);\n return null;\n }\n function mountActivityChildren(workInProgress, nextProps) {\n var hiddenProp = nextProps.hidden;\n void 0 !== hiddenProp &&\n console.error(\n '<Activity> doesn\\'t accept a hidden prop. Use mode=\"hidden\" instead.\\n- <Activity %s>\\n+ <Activity %s>',\n !0 === hiddenProp\n ? \"hidden\"\n : !1 === hiddenProp\n ? \"hidden={false}\"\n : \"hidden={...}\",\n hiddenProp ? 'mode=\"hidden\"' : 'mode=\"visible\"'\n );\n nextProps = mountWorkInProgressOffscreenFiber(\n { mode: nextProps.mode, children: nextProps.children },\n workInProgress.mode\n );\n nextProps.ref = workInProgress.ref;\n workInProgress.child = nextProps;\n nextProps.return = workInProgress;\n return nextProps;\n }\n function retryActivityComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n ) {\n reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n current = mountActivityChildren(\n workInProgress,\n workInProgress.pendingProps\n );\n current.flags |= 2;\n popSuspenseHandler(workInProgress);\n workInProgress.memoizedState = null;\n return current;\n }\n function markRef(current, workInProgress) {\n var ref = workInProgress.ref;\n if (null === ref)\n null !== current &&\n null !== current.ref &&\n (workInProgress.flags |= 4194816);\n else {\n if (\"function\" !== typeof ref && \"object\" !== typeof ref)\n throw Error(\n \"Expected ref to be a function, an object returned by React.createRef(), or undefined/null.\"\n );\n if (null === current || current.ref !== ref)\n workInProgress.flags |= 4194816;\n }\n }\n function updateFunctionComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n ) {\n if (\n Component.prototype &&\n \"function\" === typeof Component.prototype.render\n ) {\n var componentName = getComponentNameFromType(Component) || \"Unknown\";\n didWarnAboutBadClass[componentName] ||\n (console.error(\n \"The <%s /> component appears to have a render method, but doesn't extend React.Component. This is likely to cause errors. Change %s to extend React.Component instead.\",\n componentName,\n componentName\n ),\n (didWarnAboutBadClass[componentName] = !0));\n }\n workInProgress.mode & StrictLegacyMode &&\n ReactStrictModeWarnings.recordLegacyContextWarning(\n workInProgress,\n null\n );\n null === current &&\n (validateFunctionComponentInDev(workInProgress, workInProgress.type),\n Component.contextTypes &&\n ((componentName = getComponentNameFromType(Component) || \"Unknown\"),\n didWarnAboutContextTypes[componentName] ||\n ((didWarnAboutContextTypes[componentName] = !0),\n console.error(\n \"%s uses the legacy contextTypes API which was removed in React 19. Use React.createContext() with React.useContext() instead. (https://react.dev/link/legacy-context)\",\n componentName\n ))));\n prepareToReadContext(workInProgress);\n markComponentRenderStarted(workInProgress);\n Component = renderWithHooks(\n current,\n workInProgress,\n Component,\n nextProps,\n void 0,\n renderLanes\n );\n nextProps = checkDidRenderIdHook();\n markComponentRenderStopped();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && nextProps && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, Component, renderLanes);\n return workInProgress.child;\n }\n function replayFunctionComponent(\n current,\n workInProgress,\n nextProps,\n Component,\n secondArg,\n renderLanes\n ) {\n prepareToReadContext(workInProgress);\n markComponentRenderStarted(workInProgress);\n hookTypesUpdateIndexDev = -1;\n ignorePreviousDependencies =\n null !== current && current.type !== workInProgress.type;\n workInProgress.updateQueue = null;\n nextProps = renderWithHooksAgain(\n workInProgress,\n Component,\n nextProps,\n secondArg\n );\n finishRenderingHooks(current, workInProgress);\n Component = checkDidRenderIdHook();\n markComponentRenderStopped();\n if (null !== current && !didReceiveUpdate)\n return (\n bailoutHooks(current, workInProgress, renderLanes),\n bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n );\n isHydrating && Component && pushMaterializedTreeId(workInProgress);\n workInProgress.flags |= 1;\n reconcileChildren(current, workInProgress, nextProps, renderLanes);\n return workInProgress.child;\n }\n function updateClassComponent(\n current,\n workInProgress,\n Component,\n nextProps,\n renderLanes\n ) {\n switch (shouldErrorImpl(workInProgress)) {\n case !1:\n var _instance = workInProgress.stateNode,\n state = new workInProgress.type(\n workInProgress.memoizedProps,\n _instance.context\n ).state;\n _instance.updater.enqueueSetState(_instance, state, null);\n break;\n case !0:\n workInProgress.flags |= 128;\n workInProgress.flags |= 65536;\n _instance = Error(\"Simulated error coming from DevTools\");\n var lane = renderLanes & -renderLanes;\n workInProgress.lanes |= lane;\n state = workInProgressRoot;\n if (null === state)\n throw Error(\n \"Expected a work-in-progress root. This is a bug in React. Please file an issue.\"\n );\n lane = createClassErrorUpdate(lane);\n initializeClassErrorUpdate(\n lane,\n state,\n workInProgress,\n createCapturedValueAtFiber(_instance, workInProgress)\n );\n enqueueCapturedUpdate(workInProgress, lane);\n }\n prepareToReadContext(workInProgress);\n if (null === workInProgress.stateNode) {\n state = emptyContextObject;\n _instance = Component.contextType;\n \"contextType\" in Component &&\n null !== _instance &&\n (void 0 === _instance || _instance.$$typeof !== REACT_CONTEXT_TYPE) &&\n !didWarnAboutInvalidateContextType.has(Component) &&\n (didWarnAboutInvalidateContextType.add(Component),\n (lane =\n void 0 === _instance\n ? \" However, it is set to undefined. This can be caused by a typo or by mixing up named and default imports. This can also happen due to a circular dependency, so try moving the createContext() call to a separate file.\"\n : \"object\" !== typeof _instance\n ? \" However, it is set to a \" + typeof _instance + \".\"\n : _instance.$$typeof === REACT_CONSUMER_TYPE\n ? \" Did you accidentally pass the Context.Consumer instead?\"\n : \" However, it is set to an object with keys {\" +\n Object.keys(_instance).join(\", \") +\n \"}.\"),\n console.error(\n \"%s defines an invalid contextType. contextType should point to the Context object returned by React.createContext().%s\",\n getComponentNameFromType(Component) || \"Component\",\n lane\n ));\n \"object\" === typeof _instance &&\n null !== _instance &&\n (state = readContext(_instance));\n _instance = new Component(nextProps, state);\n if (workInProgress.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(!0);\n try {\n _instance = new Component(nextProps, state);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n state = workInProgress.memoizedState =\n null !== _instance.state && void 0 !== _instance.state\n ? _instance.state\n : null;\n _instance.updater = classComponentUpdater;\n workInProgress.stateNode = _instance;\n _instance._reactInternals = workInProgress;\n _instance._reactInternalInstance = fakeInternalInstance;\n \"function\" === typeof Component.getDerivedStateFromProps &&\n null === state &&\n ((state = getComponentNameFromType(Component) || \"Component\"),\n didWarnAboutUninitializedState.has(state) ||\n (didWarnAboutUninitializedState.add(state),\n console.error(\n \"`%s` uses `getDerivedStateFromProps` but its initial state is %s. This is not recommended. Instead, define the initial state by assigning an object to `this.state` in the constructor of `%s`. This ensures that `getDerivedStateFromProps` arguments have a consistent shape.\",\n state,\n null === _instance.state ? \"null\" : \"undefined\",\n state\n )));\n if (\n \"function\" === typeof Component.getDerivedStateFromProps ||\n \"function\" === typeof _instance.getSnapshotBeforeUpdate\n ) {\n var foundWillUpdateName = (lane = state = null);\n \"function\" === typeof _instance.componentWillMount &&\n !0 !== _instance.componentWillMount.__suppressDeprecationWarning\n ? (state = \"componentWillMount\")\n : \"function\" === typeof _instance.UNSAFE_componentWillMount &&\n (state = \"UNSAFE_componentWillMount\");\n \"function\" === typeof _instance.componentWillReceiveProps &&\n !0 !==\n _instance.componentWillReceiveProps.__suppressDeprecationWarning\n ? (lane = \"componentWillReceiveProps\")\n : \"function\" ===\n typeof _instance.UNSAFE_componentWillReceiveProps &&\n (lane = \"UNSAFE_componentWillReceiveProps\");\n \"function\" === typeof _instance.componentWillUpdate &&\n !0 !== _instance.componentWillUpdate.__suppressDeprecationWarning\n ? (foundWillUpdateName = \"componentWillUpdate\")\n : \"function\" === typeof _instance.UNSAFE_componentWillUpdate &&\n (foundWillUpdateName = \"UNSAFE_componentWillUpdate\");\n if (null !== state || null !== lane || null !== foundWillUpdateName) {\n _instance = getComponentNameFromType(Component) || \"Component\";\n var newApiName =\n \"function\" === typeof Component.getDerivedStateFromProps\n ? \"getDerivedStateFromProps()\"\n : \"getSnapshotBeforeUpdate()\";\n didWarnAboutLegacyLifecyclesAndDerivedState.has(_instance) ||\n (didWarnAboutLegacyLifecyclesAndDerivedState.add(_instance),\n console.error(\n \"Unsafe legacy lifecycles will not be called for components using new component APIs.\\n\\n%s uses %s but also contains the following legacy lifecycles:%s%s%s\\n\\nThe above lifecycles should be removed. Learn more about this warning here:\\nhttps://react.dev/link/unsafe-component-lifecycles\",\n _instance,\n newApiName,\n null !== state ? \"\\n \" + state : \"\",\n null !== lane ? \"\\n \" + lane : \"\",\n null !== foundWillUpdateName ? \"\\n \" + foundWillUpdateName : \"\"\n ));\n }\n }\n _instance = workInProgress.stateNode;\n state = getComponentNameFromType(Component) || \"Component\";\n _instance.render ||\n (Component.prototype &&\n \"function\" === typeof Component.prototype.render\n ? console.error(\n \"No `render` method found on the %s instance: did you accidentally return an object from the constructor?\",\n state\n )\n : console.error(\n \"No `render` method found on the %s instance: you may have forgotten to define `render`.\",\n state\n ));\n !_instance.getInitialState ||\n _instance.getInitialState.isReactClassApproved ||\n _instance.state ||\n console.error(\n \"getInitialState was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Did you mean to define a state property instead?\",\n state\n );\n _instance.getDefaultProps &&\n !_instance.getDefaultProps.isReactClassApproved &&\n console.error(\n \"getDefaultProps was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Use a static property to define defaultProps instead.\",\n state\n );\n _instance.contextType &&\n console.error(\n \"contextType was defined as an instance property on %s. Use a static property to define contextType instead.\",\n state\n );\n Component.childContextTypes &&\n !didWarnAboutChildContextTypes.has(Component) &&\n (didWarnAboutChildContextTypes.add(Component),\n console.error(\n \"%s uses the legacy childContextTypes API which was removed in React 19. Use React.createContext() instead. (https://react.dev/link/legacy-context)\",\n state\n ));\n Component.contextTypes &&\n !didWarnAboutContextTypes$1.has(Component) &&\n (didWarnAboutContextTypes$1.add(Component),\n console.error(\n \"%s uses the legacy contextTypes API which was removed in React 19. Use React.createContext() with static contextType instead. (https://react.dev/link/legacy-context)\",\n state\n ));\n \"function\" === typeof _instance.componentShouldUpdate &&\n console.error(\n \"%s has a method called componentShouldUpdate(). Did you mean shouldComponentUpdate()? The name is phrased as a question because the function is expected to return a value.\",\n state\n );\n Component.prototype &&\n Component.prototype.isPureReactComponent &&\n \"undefined\" !== typeof _instance.shouldComponentUpdate &&\n console.error(\n \"%s has a method called shouldComponentUpdate(). shouldComponentUpdate should not be used when extending React.PureComponent. Please extend React.Component if shouldComponentUpdate is used.\",\n getComponentNameFromType(Component) || \"A pure component\"\n );\n \"function\" === typeof _instance.componentDidUnmount &&\n console.error(\n \"%s has a method called componentDidUnmount(). But there is no such lifecycle method. Did you mean componentWillUnmount()?\",\n state\n );\n \"function\" === typeof _instance.componentDidReceiveProps &&\n console.error(\n \"%s has a method called componentDidReceiveProps(). But there is no such lifecycle method. If you meant to update the state in response to changing props, use componentWillReceiveProps(). If you meant to fetch data or run side-effects or mutations after React has updated the UI, use componentDidUpdate().\",\n state\n );\n \"function\" === typeof _instance.componentWillRecieveProps &&\n console.error(\n \"%s has a method called componentWillRecieveProps(). Did you mean componentWillReceiveProps()?\",\n state\n );\n \"function\" === typeof _instance.UNSAFE_componentWillRecieveProps &&\n console.error(\n \"%s has a method called UNSAFE_componentWillRecieveProps(). Did you mean UNSAFE_componentWillReceiveProps()?\",\n state\n );\n lane = _instance.props !== nextProps;\n void 0 !== _instance.props &&\n lane &&\n console.error(\n \"When calling super() in `%s`, make sure to pass up the same props that your component's constructor was passed.\",\n state\n );\n _instance.defaultProps &&\n console.error(\n \"Setting defaultProps as an instance property on %s is not supported and will be ignored. Instead, define defaultProps as a static property on %s.\",\n state,\n state\n );\n \"function\" !== typeof _instance.getSnapshotBeforeUpdate ||\n \"function\" === typeof _instance.componentDidUpdate ||\n didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.has(Component) ||\n (didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.add(Component),\n console.error(\n \"%s: getSnapshotBeforeUpdate() should be used with componentDidUpdate(). This component defines getSnapshotBeforeUpdate() only.\",\n getComponentNameFromType(Component)\n ));\n \"function\" === typeof _instance.getDerivedStateFromProps &&\n console.error(\n \"%s: getDerivedStateFromProps() is defined as an instance method and will be ignored. Instead, declare it as a static method.\",\n state\n );\n \"function\" === typeof _instance.getDerivedStateFromError &&\n console.error(\n \"%s: getDerivedStateFromError() is defined as an instance method and will be ignored. Instead, declare it as a static method.\",\n state\n );\n \"function\" === typeof Component.getSnapshotBeforeUpdate &&\n console.error(\n \"%s: getSnapshotBeforeUpdate() is defined as a static method and will be ignored. Instead, declare it as an instance method.\",\n state\n );\n (lane = _instance.state) &&\n (\"object\" !== typeof lane || isArrayImpl(lane)) &&\n console.error(\"%s.state: must be set to an object or null\", state);\n \"function\" === typeof _instance.getChildContext &&\n \"object\" !== typeof Component.childContextTypes &&\n console.error(\n \"%s.getChildContext(): childContextTypes must be defined in order to use getChildContext().\",\n state\n );\n _instance = workInProgress.stateNode;\n _instance.props = nextProps;\n _instance.state = workInProgress.memoizedState;\n _instance.refs = {};\n initializeUpdateQueue(workInProgress);\n state = Component.contextType;\n _instance.context =\n \"object\" === typeof state && null !== state\n ? readContext(state)\n : emptyContextObject;\n _instance.state === nextProps &&\n ((state = getComponentNameFromType(Component) || \"Component\"),\n didWarnAboutDirectlyAssigningPropsToState.has(state) ||\n (didWarnAboutDirectlyAssigningPropsToState.add(state),\n console.error(\n \"%s: It is not recommended to assign props directly to state because updates to props won't be reflected in state. In most cases, it is better to use props directly.\",\n state\n )));\n workInProgress.mode & StrictLegacyMode &&\n ReactStrictModeWarnings.recordLegacyContextWarning(\n workInProgress,\n _instance\n );\n ReactStrictModeWarnings.recordUnsafeLifecycleWarnings(\n workInProgress,\n _instance\n );\n _instance.state = workInProgress.memoizedState;\n state = Component.getDerivedStateFromProps;\n \"function\" === typeof state &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n state,\n nextProps\n ),\n (_instance.state = workInProgress.memoizedState));\n \"function\" === typeof Component.getDerivedStateFromProps ||\n \"function\" === typeof _instance.getSnapshotBeforeUpdate ||\n (\"function\" !== typeof _instance.UNSAFE_componentWillMount &&\n \"function\" !== typeof _instance.componentWillMount) ||\n ((state = _instance.state),\n \"function\" === typeof _instance.componentWillMount &&\n _instance.componentWillMount(),\n \"function\" === typeof _instance.UNSAFE_componentWillMount &&\n _instance.UNSAFE_componentWillMount(),\n state !== _instance.state &&\n (console.error(\n \"%s.componentWillMount(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.\",\n getComponentNameFromFiber(workInProgress) || \"Component\"\n ),\n classComponentUpdater.enqueueReplaceState(\n _instance,\n _instance.state,\n null\n )),\n processUpdateQueue(workInProgress, nextProps, _instance, renderLanes),\n suspendIfUpdateReadFromEntangledAsyncAction(),\n (_instance.state = workInProgress.memoizedState));\n \"function\" === typeof _instance.componentDidMount &&\n (workInProgress.flags |= 4194308);\n (workInProgress.mode & StrictEffectsMode) !== NoMode &&\n (workInProgress.flags |= 134217728);\n _instance = !0;\n } else if (null === current) {\n _instance = workInProgress.stateNode;\n var unresolvedOldProps = workInProgress.memoizedProps;\n lane = resolveClassComponentProps(Component, unresolvedOldProps);\n _instance.props = lane;\n var oldContext = _instance.context;\n foundWillUpdateName = Component.contextType;\n state = emptyContextObject;\n \"object\" === typeof foundWillUpdateName &&\n null !== foundWillUpdateName &&\n (state = readContext(foundWillUpdateName));\n newApiName = Component.getDerivedStateFromProps;\n foundWillUpdateName =\n \"function\" === typeof newApiName ||\n \"function\" === typeof _instance.getSnapshotBeforeUpdate;\n unresolvedOldProps = workInProgress.pendingProps !== unresolvedOldProps;\n foundWillUpdateName ||\n (\"function\" !== typeof _instance.UNSAFE_componentWillReceiveProps &&\n \"function\" !== typeof _instance.componentWillReceiveProps) ||\n ((unresolvedOldProps || oldContext !== state) &&\n callComponentWillReceiveProps(\n workInProgress,\n _instance,\n nextProps,\n state\n ));\n hasForceUpdate = !1;\n var oldState = workInProgress.memoizedState;\n _instance.state = oldState;\n processUpdateQueue(workInProgress, nextProps, _instance, renderLanes);\n suspendIfUpdateReadFromEntangledAsyncAction();\n oldContext = workInProgress.memoizedState;\n unresolvedOldProps || oldState !== oldContext || hasForceUpdate\n ? (\"function\" === typeof newApiName &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n newApiName,\n nextProps\n ),\n (oldContext = workInProgress.memoizedState)),\n (lane =\n hasForceUpdate ||\n checkShouldComponentUpdate(\n workInProgress,\n Component,\n lane,\n nextProps,\n oldState,\n oldContext,\n state\n ))\n ? (foundWillUpdateName ||\n (\"function\" !== typeof _instance.UNSAFE_componentWillMount &&\n \"function\" !== typeof _instance.componentWillMount) ||\n (\"function\" === typeof _instance.componentWillMount &&\n _instance.componentWillMount(),\n \"function\" === typeof _instance.UNSAFE_componentWillMount &&\n _instance.UNSAFE_componentWillMount()),\n \"function\" === typeof _instance.componentDidMount &&\n (workInProgress.flags |= 4194308),\n (workInProgress.mode & StrictEffectsMode) !== NoMode &&\n (workInProgress.flags |= 134217728))\n : (\"function\" === typeof _instance.componentDidMount &&\n (workInProgress.flags |= 4194308),\n (workInProgress.mode & StrictEffectsMode) !== NoMode &&\n (workInProgress.flags |= 134217728),\n (workInProgress.memoizedProps = nextProps),\n (workInProgress.memoizedState = oldContext)),\n (_instance.props = nextProps),\n (_instance.state = oldContext),\n (_instance.context = state),\n (_instance = lane))\n : (\"function\" === typeof _instance.componentDidMount &&\n (workInProgress.flags |= 4194308),\n (workInProgress.mode & StrictEffectsMode) !== NoMode &&\n (workInProgress.flags |= 134217728),\n (_instance = !1));\n } else {\n _instance = workInProgress.stateNode;\n cloneUpdateQueue(current, workInProgress);\n state = workInProgress.memoizedProps;\n foundWillUpdateName = resolveClassComponentProps(Component, state);\n _instance.props = foundWillUpdateName;\n newApiName = workInProgress.pendingProps;\n oldState = _instance.context;\n oldContext = Component.contextType;\n lane = emptyContextObject;\n \"object\" === typeof oldContext &&\n null !== oldContext &&\n (lane = readContext(oldContext));\n unresolvedOldProps = Component.getDerivedStateFromProps;\n (oldContext =\n \"function\" === typeof unresolvedOldProps ||\n \"function\" === typeof _instance.getSnapshotBeforeUpdate) ||\n (\"function\" !== typeof _instance.UNSAFE_componentWillReceiveProps &&\n \"function\" !== typeof _instance.componentWillReceiveProps) ||\n ((state !== newApiName || oldState !== lane) &&\n callComponentWillReceiveProps(\n workInProgress,\n _instance,\n nextProps,\n lane\n ));\n hasForceUpdate = !1;\n oldState = workInProgress.memoizedState;\n _instance.state = oldState;\n processUpdateQueue(workInProgress, nextProps, _instance, renderLanes);\n suspendIfUpdateReadFromEntangledAsyncAction();\n var newState = workInProgress.memoizedState;\n state !== newApiName ||\n oldState !== newState ||\n hasForceUpdate ||\n (null !== current &&\n null !== current.dependencies &&\n checkIfContextChanged(current.dependencies))\n ? (\"function\" === typeof unresolvedOldProps &&\n (applyDerivedStateFromProps(\n workInProgress,\n Component,\n unresolvedOldProps,\n nextProps\n ),\n (newState = workInProgress.memoizedState)),\n (foundWillUpdateName =\n hasForceUpdate ||\n checkShouldComponentUpdate(\n workInProgress,\n Component,\n foundWillUpdateName,\n nextProps,\n oldState,\n newState,\n lane\n ) ||\n (null !== current &&\n null !== current.dependencies &&\n checkIfContextChanged(current.dependencies)))\n ? (oldContext ||\n (\"function\" !== typeof _instance.UNSAFE_componentWillUpdate &&\n \"function\" !== typeof _instance.componentWillUpdate) ||\n (\"function\" === typeof _instance.componentWillUpdate &&\n _instance.componentWillUpdate(nextProps, newState, lane),\n \"function\" === typeof _instance.UNSAFE_componentWillUpdate &&\n _instance.UNSAFE_componentWillUpdate(\n nextProps,\n newState,\n lane\n )),\n \"function\" === typeof _instance.componentDidUpdate &&\n (workInProgress.flags |= 4),\n \"function\" === typeof _instance.getSnapshotBeforeUpdate &&\n (workInProgress.flags |= 1024))\n : (\"function\" !== typeof _instance.componentDidUpdate ||\n (state === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 4),\n \"function\" !== typeof _instance.getSnapshotBeforeUpdate ||\n (state === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 1024),\n (workInProgress.memoizedProps = nextProps),\n (workInProgress.memoizedState = newState)),\n (_instance.props = nextProps),\n (_instance.state = newState),\n (_instance.context = lane),\n (_instance = foundWillUpdateName))\n : (\"function\" !== typeof _instance.componentDidUpdate ||\n (state === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 4),\n \"function\" !== typeof _instance.getSnapshotBeforeUpdate ||\n (state === current.memoizedProps &&\n oldState === current.memoizedState) ||\n (workInProgress.flags |= 1024),\n (_instance = !1));\n }\n lane = _instance;\n markRef(current, workInProgress);\n state = 0 !== (workInProgress.flags & 128);\n if (lane || state) {\n lane = workInProgress.stateNode;\n setCurrentFiber(workInProgress);\n if (state && \"function\" !== typeof Component.getDerivedStateFromError)\n (Component = null), (profilerStartTime = -1);\n else {\n markComponentRenderStarted(workInProgress);\n Component = callRenderInDEV(lane);\n if (workInProgress.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(!0);\n try {\n callRenderInDEV(lane);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n markComponentRenderStopped();\n }\n workInProgress.flags |= 1;\n null !== current && state\n ? ((workInProgress.child = reconcileChildFibers(\n workInProgress,\n current.child,\n null,\n renderLanes\n )),\n (workInProgress.child = reconcileChildFibers(\n workInProgress,\n null,\n Component,\n renderLanes\n )))\n : reconcileChildren(current, workInProgress, Component, renderLanes);\n workInProgress.memoizedState = lane.state;\n current = workInProgress.child;\n } else\n current = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n renderLanes = workInProgress.stateNode;\n _instance &&\n renderLanes.props !== nextProps &&\n (didWarnAboutReassigningProps ||\n console.error(\n \"It looks like %s is reassigning its own `this.props` while rendering. This is not supported and can lead to confusing bugs.\",\n getComponentNameFromFiber(workInProgress) || \"a component\"\n ),\n (didWarnAboutReassigningProps = !0));\n return current;\n }\n function mountHostRootWithoutHydrating(\n current,\n workInProgress,\n nextChildren,\n renderLanes\n ) {\n resetHydrationState();\n workInProgress.flags |= 256;\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n }\n function validateFunctionComponentInDev(workInProgress, Component) {\n Component &&\n Component.childContextTypes &&\n console.error(\n \"childContextTypes cannot be defined on a function component.\\n %s.childContextTypes = ...\",\n Component.displayName || Component.name || \"Component\"\n );\n \"function\" === typeof Component.getDerivedStateFromProps &&\n ((workInProgress = getComponentNameFromType(Component) || \"Unknown\"),\n didWarnAboutGetDerivedStateOnFunctionComponent[workInProgress] ||\n (console.error(\n \"%s: Function components do not support getDerivedStateFromProps.\",\n workInProgress\n ),\n (didWarnAboutGetDerivedStateOnFunctionComponent[workInProgress] =\n !0)));\n \"object\" === typeof Component.contextType &&\n null !== Component.contextType &&\n ((Component = getComponentNameFromType(Component) || \"Unknown\"),\n didWarnAboutContextTypeOnFunctionComponent[Component] ||\n (console.error(\n \"%s: Function components do not support contextType.\",\n Component\n ),\n (didWarnAboutContextTypeOnFunctionComponent[Component] = !0)));\n }\n function mountSuspenseOffscreenState(renderLanes) {\n return { baseLanes: renderLanes, cachePool: getSuspendedCache() };\n }\n function getRemainingWorkInPrimaryTree(\n current,\n primaryTreeDidDefer,\n renderLanes\n ) {\n current = null !== current ? current.childLanes & ~renderLanes : 0;\n primaryTreeDidDefer && (current |= workInProgressDeferredLane);\n return current;\n }\n function updateSuspenseComponent(current, workInProgress, renderLanes) {\n var JSCompiler_object_inline_digest_2551;\n var JSCompiler_object_inline_stack_2552 = workInProgress.pendingProps;\n shouldSuspendImpl(workInProgress) && (workInProgress.flags |= 128);\n var JSCompiler_object_inline_message_2550 = !1;\n var didSuspend = 0 !== (workInProgress.flags & 128);\n (JSCompiler_object_inline_digest_2551 = didSuspend) ||\n (JSCompiler_object_inline_digest_2551 =\n null !== current && null === current.memoizedState\n ? !1\n : 0 !== (suspenseStackCursor.current & ForceSuspenseFallback));\n JSCompiler_object_inline_digest_2551 &&\n ((JSCompiler_object_inline_message_2550 = !0),\n (workInProgress.flags &= -129));\n JSCompiler_object_inline_digest_2551 = 0 !== (workInProgress.flags & 32);\n workInProgress.flags &= -33;\n if (null === current) {\n if (isHydrating) {\n JSCompiler_object_inline_message_2550\n ? pushPrimaryTreeSuspenseHandler(workInProgress)\n : reuseSuspenseHandlerOnStack(workInProgress);\n (current = nextHydratableInstance)\n ? ((renderLanes = canHydrateHydrationBoundary(\n current,\n rootOrSingletonContext\n )),\n (renderLanes =\n null !== renderLanes && renderLanes.data !== ACTIVITY_START_DATA\n ? renderLanes\n : null),\n null !== renderLanes &&\n ((JSCompiler_object_inline_digest_2551 = {\n dehydrated: renderLanes,\n treeContext: getSuspendedTreeContext(),\n retryLane: 536870912,\n hydrationErrors: null\n }),\n (workInProgress.memoizedState =\n JSCompiler_object_inline_digest_2551),\n (JSCompiler_object_inline_digest_2551 =\n createFiberFromDehydratedFragment(renderLanes)),\n (JSCompiler_object_inline_digest_2551.return = workInProgress),\n (workInProgress.child = JSCompiler_object_inline_digest_2551),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = null)))\n : (renderLanes = null);\n if (null === renderLanes)\n throw (\n (warnNonHydratedInstance(workInProgress, current),\n throwOnHydrationMismatch(workInProgress))\n );\n isSuspenseInstanceFallback(renderLanes)\n ? (workInProgress.lanes = 32)\n : (workInProgress.lanes = 536870912);\n return null;\n }\n var nextPrimaryChildren = JSCompiler_object_inline_stack_2552.children;\n JSCompiler_object_inline_stack_2552 =\n JSCompiler_object_inline_stack_2552.fallback;\n if (JSCompiler_object_inline_message_2550) {\n reuseSuspenseHandlerOnStack(workInProgress);\n var mode = workInProgress.mode;\n nextPrimaryChildren = mountWorkInProgressOffscreenFiber(\n { mode: \"hidden\", children: nextPrimaryChildren },\n mode\n );\n JSCompiler_object_inline_stack_2552 = createFiberFromFragment(\n JSCompiler_object_inline_stack_2552,\n mode,\n renderLanes,\n null\n );\n nextPrimaryChildren.return = workInProgress;\n JSCompiler_object_inline_stack_2552.return = workInProgress;\n nextPrimaryChildren.sibling = JSCompiler_object_inline_stack_2552;\n workInProgress.child = nextPrimaryChildren;\n nextPrimaryChildren = workInProgress.child;\n nextPrimaryChildren.memoizedState =\n mountSuspenseOffscreenState(renderLanes);\n nextPrimaryChildren.childLanes = getRemainingWorkInPrimaryTree(\n current,\n JSCompiler_object_inline_digest_2551,\n renderLanes\n );\n workInProgress.memoizedState = SUSPENDED_MARKER;\n return JSCompiler_object_inline_stack_2552;\n }\n pushPrimaryTreeSuspenseHandler(workInProgress);\n return mountSuspensePrimaryChildren(\n workInProgress,\n nextPrimaryChildren\n );\n }\n var prevState = current.memoizedState;\n if (null !== prevState) {\n var JSCompiler_object_inline_componentStack_2553 = prevState.dehydrated;\n if (null !== JSCompiler_object_inline_componentStack_2553) {\n if (didSuspend)\n workInProgress.flags & 256\n ? (pushPrimaryTreeSuspenseHandler(workInProgress),\n (workInProgress.flags &= -257),\n (workInProgress = retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n )))\n : null !== workInProgress.memoizedState\n ? (reuseSuspenseHandlerOnStack(workInProgress),\n (workInProgress.child = current.child),\n (workInProgress.flags |= 128),\n (workInProgress = null))\n : (reuseSuspenseHandlerOnStack(workInProgress),\n (nextPrimaryChildren =\n JSCompiler_object_inline_stack_2552.fallback),\n (mode = workInProgress.mode),\n (JSCompiler_object_inline_stack_2552 =\n mountWorkInProgressOffscreenFiber(\n {\n mode: \"visible\",\n children: JSCompiler_object_inline_stack_2552.children\n },\n mode\n )),\n (nextPrimaryChildren = createFiberFromFragment(\n nextPrimaryChildren,\n mode,\n renderLanes,\n null\n )),\n (nextPrimaryChildren.flags |= 2),\n (JSCompiler_object_inline_stack_2552.return = workInProgress),\n (nextPrimaryChildren.return = workInProgress),\n (JSCompiler_object_inline_stack_2552.sibling =\n nextPrimaryChildren),\n (workInProgress.child = JSCompiler_object_inline_stack_2552),\n reconcileChildFibers(\n workInProgress,\n current.child,\n null,\n renderLanes\n ),\n (JSCompiler_object_inline_stack_2552 = workInProgress.child),\n (JSCompiler_object_inline_stack_2552.memoizedState =\n mountSuspenseOffscreenState(renderLanes)),\n (JSCompiler_object_inline_stack_2552.childLanes =\n getRemainingWorkInPrimaryTree(\n current,\n JSCompiler_object_inline_digest_2551,\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n (workInProgress = nextPrimaryChildren));\n else if (\n (pushPrimaryTreeSuspenseHandler(workInProgress),\n warnIfHydrating(),\n isSuspenseInstanceFallback(\n JSCompiler_object_inline_componentStack_2553\n ))\n ) {\n JSCompiler_object_inline_digest_2551 =\n JSCompiler_object_inline_componentStack_2553.nextSibling &&\n JSCompiler_object_inline_componentStack_2553.nextSibling.dataset;\n if (JSCompiler_object_inline_digest_2551) {\n nextPrimaryChildren = JSCompiler_object_inline_digest_2551.dgst;\n var message = JSCompiler_object_inline_digest_2551.msg;\n mode = JSCompiler_object_inline_digest_2551.stck;\n var componentStack = JSCompiler_object_inline_digest_2551.cstck;\n }\n JSCompiler_object_inline_message_2550 = message;\n JSCompiler_object_inline_digest_2551 = nextPrimaryChildren;\n JSCompiler_object_inline_stack_2552 = mode;\n JSCompiler_object_inline_componentStack_2553 = componentStack;\n nextPrimaryChildren = JSCompiler_object_inline_message_2550;\n mode = JSCompiler_object_inline_componentStack_2553;\n nextPrimaryChildren = nextPrimaryChildren\n ? Error(nextPrimaryChildren)\n : Error(\n \"The server could not finish this Suspense boundary, likely due to an error during server rendering. Switched to client rendering.\"\n );\n nextPrimaryChildren.stack =\n JSCompiler_object_inline_stack_2552 || \"\";\n nextPrimaryChildren.digest = JSCompiler_object_inline_digest_2551;\n JSCompiler_object_inline_digest_2551 =\n void 0 === mode ? null : mode;\n JSCompiler_object_inline_stack_2552 = {\n value: nextPrimaryChildren,\n source: null,\n stack: JSCompiler_object_inline_digest_2551\n };\n \"string\" === typeof JSCompiler_object_inline_digest_2551 &&\n CapturedStacks.set(\n nextPrimaryChildren,\n JSCompiler_object_inline_stack_2552\n );\n queueHydrationError(JSCompiler_object_inline_stack_2552);\n workInProgress = retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n } else if (\n (didReceiveUpdate ||\n propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n !1\n ),\n (JSCompiler_object_inline_digest_2551 =\n 0 !== (renderLanes & current.childLanes)),\n didReceiveUpdate || JSCompiler_object_inline_digest_2551)\n ) {\n JSCompiler_object_inline_digest_2551 = workInProgressRoot;\n if (\n null !== JSCompiler_object_inline_digest_2551 &&\n ((JSCompiler_object_inline_stack_2552 = getBumpedLaneForHydration(\n JSCompiler_object_inline_digest_2551,\n renderLanes\n )),\n 0 !== JSCompiler_object_inline_stack_2552 &&\n JSCompiler_object_inline_stack_2552 !== prevState.retryLane)\n )\n throw (\n ((prevState.retryLane = JSCompiler_object_inline_stack_2552),\n enqueueConcurrentRenderForLane(\n current,\n JSCompiler_object_inline_stack_2552\n ),\n scheduleUpdateOnFiber(\n JSCompiler_object_inline_digest_2551,\n current,\n JSCompiler_object_inline_stack_2552\n ),\n SelectiveHydrationException)\n );\n isSuspenseInstancePending(\n JSCompiler_object_inline_componentStack_2553\n ) || renderDidSuspendDelayIfPossible();\n workInProgress = retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n } else\n isSuspenseInstancePending(\n JSCompiler_object_inline_componentStack_2553\n )\n ? ((workInProgress.flags |= 192),\n (workInProgress.child = current.child),\n (workInProgress = null))\n : ((current = prevState.treeContext),\n (nextHydratableInstance = getNextHydratable(\n JSCompiler_object_inline_componentStack_2553.nextSibling\n )),\n (hydrationParentFiber = workInProgress),\n (isHydrating = !0),\n (hydrationErrors = null),\n (didSuspendOrErrorDEV = !1),\n (hydrationDiffRootDEV = null),\n (rootOrSingletonContext = !1),\n null !== current &&\n restoreSuspendedTreeContext(workInProgress, current),\n (workInProgress = mountSuspensePrimaryChildren(\n workInProgress,\n JSCompiler_object_inline_stack_2552.children\n )),\n (workInProgress.flags |= 4096));\n return workInProgress;\n }\n }\n if (JSCompiler_object_inline_message_2550)\n return (\n reuseSuspenseHandlerOnStack(workInProgress),\n (nextPrimaryChildren = JSCompiler_object_inline_stack_2552.fallback),\n (mode = workInProgress.mode),\n (componentStack = current.child),\n (JSCompiler_object_inline_componentStack_2553 =\n componentStack.sibling),\n (JSCompiler_object_inline_stack_2552 = createWorkInProgress(\n componentStack,\n {\n mode: \"hidden\",\n children: JSCompiler_object_inline_stack_2552.children\n }\n )),\n (JSCompiler_object_inline_stack_2552.subtreeFlags =\n componentStack.subtreeFlags & 65011712),\n null !== JSCompiler_object_inline_componentStack_2553\n ? (nextPrimaryChildren = createWorkInProgress(\n JSCompiler_object_inline_componentStack_2553,\n nextPrimaryChildren\n ))\n : ((nextPrimaryChildren = createFiberFromFragment(\n nextPrimaryChildren,\n mode,\n renderLanes,\n null\n )),\n (nextPrimaryChildren.flags |= 2)),\n (nextPrimaryChildren.return = workInProgress),\n (JSCompiler_object_inline_stack_2552.return = workInProgress),\n (JSCompiler_object_inline_stack_2552.sibling = nextPrimaryChildren),\n (workInProgress.child = JSCompiler_object_inline_stack_2552),\n (JSCompiler_object_inline_stack_2552 = nextPrimaryChildren),\n (nextPrimaryChildren = workInProgress.child),\n (mode = current.child.memoizedState),\n null === mode\n ? (mode = mountSuspenseOffscreenState(renderLanes))\n : ((componentStack = mode.cachePool),\n null !== componentStack\n ? ((JSCompiler_object_inline_componentStack_2553 =\n CacheContext._currentValue),\n (componentStack =\n componentStack.parent !==\n JSCompiler_object_inline_componentStack_2553\n ? {\n parent: JSCompiler_object_inline_componentStack_2553,\n pool: JSCompiler_object_inline_componentStack_2553\n }\n : componentStack))\n : (componentStack = getSuspendedCache()),\n (mode = {\n baseLanes: mode.baseLanes | renderLanes,\n cachePool: componentStack\n })),\n (nextPrimaryChildren.memoizedState = mode),\n (nextPrimaryChildren.childLanes = getRemainingWorkInPrimaryTree(\n current,\n JSCompiler_object_inline_digest_2551,\n renderLanes\n )),\n (workInProgress.memoizedState = SUSPENDED_MARKER),\n JSCompiler_object_inline_stack_2552\n );\n pushPrimaryTreeSuspenseHandler(workInProgress);\n renderLanes = current.child;\n current = renderLanes.sibling;\n renderLanes = createWorkInProgress(renderLanes, {\n mode: \"visible\",\n children: JSCompiler_object_inline_stack_2552.children\n });\n renderLanes.return = workInProgress;\n renderLanes.sibling = null;\n null !== current &&\n ((JSCompiler_object_inline_digest_2551 = workInProgress.deletions),\n null === JSCompiler_object_inline_digest_2551\n ? ((workInProgress.deletions = [current]),\n (workInProgress.flags |= 16))\n : JSCompiler_object_inline_digest_2551.push(current));\n workInProgress.child = renderLanes;\n workInProgress.memoizedState = null;\n return renderLanes;\n }\n function mountSuspensePrimaryChildren(workInProgress, primaryChildren) {\n primaryChildren = mountWorkInProgressOffscreenFiber(\n { mode: \"visible\", children: primaryChildren },\n workInProgress.mode\n );\n primaryChildren.return = workInProgress;\n return (workInProgress.child = primaryChildren);\n }\n function mountWorkInProgressOffscreenFiber(offscreenProps, mode) {\n offscreenProps = createFiber(22, offscreenProps, null, mode);\n offscreenProps.lanes = 0;\n offscreenProps.stateNode = {\n _visibility: OffscreenVisible,\n _pendingMarkers: null,\n _retryCache: null,\n _transitions: null\n };\n return offscreenProps;\n }\n function retrySuspenseComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n ) {\n reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n current = mountSuspensePrimaryChildren(\n workInProgress,\n workInProgress.pendingProps.children\n );\n current.flags |= 2;\n workInProgress.memoizedState = null;\n return current;\n }\n function scheduleSuspenseWorkOnFiber(fiber, renderLanes, propagationRoot) {\n fiber.lanes |= renderLanes;\n var alternate = fiber.alternate;\n null !== alternate && (alternate.lanes |= renderLanes);\n scheduleContextWorkOnParentPath(\n fiber.return,\n renderLanes,\n propagationRoot\n );\n }\n function initSuspenseListRenderState(\n workInProgress,\n isBackwards,\n tail,\n lastContentRow,\n tailMode,\n treeForkCount\n ) {\n var renderState = workInProgress.memoizedState;\n null === renderState\n ? (workInProgress.memoizedState = {\n isBackwards: isBackwards,\n rendering: null,\n renderingStartTime: 0,\n last: lastContentRow,\n tail: tail,\n tailMode: tailMode,\n treeForkCount: treeForkCount\n })\n : ((renderState.isBackwards = isBackwards),\n (renderState.rendering = null),\n (renderState.renderingStartTime = 0),\n (renderState.last = lastContentRow),\n (renderState.tail = tail),\n (renderState.tailMode = tailMode),\n (renderState.treeForkCount = treeForkCount));\n }\n function updateSuspenseListComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps,\n revealOrder = nextProps.revealOrder,\n tailMode = nextProps.tail,\n newChildren = nextProps.children,\n suspenseContext = suspenseStackCursor.current;\n (nextProps = 0 !== (suspenseContext & ForceSuspenseFallback))\n ? ((suspenseContext =\n (suspenseContext & SubtreeSuspenseContextMask) |\n ForceSuspenseFallback),\n (workInProgress.flags |= 128))\n : (suspenseContext &= SubtreeSuspenseContextMask);\n push(suspenseStackCursor, suspenseContext, workInProgress);\n suspenseContext = null == revealOrder ? \"null\" : revealOrder;\n if (\n \"forwards\" !== revealOrder &&\n \"unstable_legacy-backwards\" !== revealOrder &&\n \"together\" !== revealOrder &&\n \"independent\" !== revealOrder &&\n !didWarnAboutRevealOrder[suspenseContext]\n )\n if (\n ((didWarnAboutRevealOrder[suspenseContext] = !0), null == revealOrder)\n )\n console.error(\n 'The default for the <SuspenseList revealOrder=\"...\"> prop is changing. To be future compatible you must explictly specify either \"independent\" (the current default), \"together\", \"forwards\" or \"legacy_unstable-backwards\".'\n );\n else if (\"backwards\" === revealOrder)\n console.error(\n 'The rendering order of <SuspenseList revealOrder=\"backwards\"> is changing. To be future compatible you must specify revealOrder=\"legacy_unstable-backwards\" instead.'\n );\n else if (\"string\" === typeof revealOrder)\n switch (revealOrder.toLowerCase()) {\n case \"together\":\n case \"forwards\":\n case \"backwards\":\n case \"independent\":\n console.error(\n '\"%s\" is not a valid value for revealOrder on <SuspenseList />. Use lowercase \"%s\" instead.',\n revealOrder,\n revealOrder.toLowerCase()\n );\n break;\n case \"forward\":\n case \"backward\":\n console.error(\n '\"%s\" is not a valid value for revealOrder on <SuspenseList />. React uses the -s suffix in the spelling. Use \"%ss\" instead.',\n revealOrder,\n revealOrder.toLowerCase()\n );\n break;\n default:\n console.error(\n '\"%s\" is not a supported revealOrder on <SuspenseList />. Did you mean \"independent\", \"together\", \"forwards\" or \"backwards\"?',\n revealOrder\n );\n }\n else\n console.error(\n '%s is not a supported value for revealOrder on <SuspenseList />. Did you mean \"independent\", \"together\", \"forwards\" or \"backwards\"?',\n revealOrder\n );\n suspenseContext = null == tailMode ? \"null\" : tailMode;\n if (!didWarnAboutTailOptions[suspenseContext])\n if (null == tailMode) {\n if (\n \"forwards\" === revealOrder ||\n \"backwards\" === revealOrder ||\n \"unstable_legacy-backwards\" === revealOrder\n )\n (didWarnAboutTailOptions[suspenseContext] = !0),\n console.error(\n 'The default for the <SuspenseList tail=\"...\"> prop is changing. To be future compatible you must explictly specify either \"visible\" (the current default), \"collapsed\" or \"hidden\".'\n );\n } else\n \"visible\" !== tailMode &&\n \"collapsed\" !== tailMode &&\n \"hidden\" !== tailMode\n ? ((didWarnAboutTailOptions[suspenseContext] = !0),\n console.error(\n '\"%s\" is not a supported value for tail on <SuspenseList />. Did you mean \"visible\", \"collapsed\" or \"hidden\"?',\n tailMode\n ))\n : \"forwards\" !== revealOrder &&\n \"backwards\" !== revealOrder &&\n \"unstable_legacy-backwards\" !== revealOrder &&\n ((didWarnAboutTailOptions[suspenseContext] = !0),\n console.error(\n '<SuspenseList tail=\"%s\" /> is only valid if revealOrder is \"forwards\" or \"backwards\". Did you mean to specify revealOrder=\"forwards\"?',\n tailMode\n ));\n a: if (\n (\"forwards\" === revealOrder ||\n \"backwards\" === revealOrder ||\n \"unstable_legacy-backwards\" === revealOrder) &&\n void 0 !== newChildren &&\n null !== newChildren &&\n !1 !== newChildren\n )\n if (isArrayImpl(newChildren))\n for (\n suspenseContext = 0;\n suspenseContext < newChildren.length;\n suspenseContext++\n ) {\n if (\n !validateSuspenseListNestedChild(\n newChildren[suspenseContext],\n suspenseContext\n )\n )\n break a;\n }\n else if (\n ((suspenseContext = getIteratorFn(newChildren)),\n \"function\" === typeof suspenseContext)\n ) {\n if ((suspenseContext = suspenseContext.call(newChildren)))\n for (\n var step = suspenseContext.next(), _i = 0;\n !step.done;\n step = suspenseContext.next()\n ) {\n if (!validateSuspenseListNestedChild(step.value, _i)) break a;\n _i++;\n }\n } else\n console.error(\n 'A single row was passed to a <SuspenseList revealOrder=\"%s\" />. This is not useful since it needs multiple rows. Did you mean to pass multiple children or an array?',\n revealOrder\n );\n reconcileChildren(current, workInProgress, newChildren, renderLanes);\n isHydrating\n ? (warnIfNotHydrating(), (newChildren = treeForkCount))\n : (newChildren = 0);\n if (!nextProps && null !== current && 0 !== (current.flags & 128))\n a: for (current = workInProgress.child; null !== current; ) {\n if (13 === current.tag)\n null !== current.memoizedState &&\n scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n else if (19 === current.tag)\n scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n else if (null !== current.child) {\n current.child.return = current;\n current = current.child;\n continue;\n }\n if (current === workInProgress) break a;\n for (; null === current.sibling; ) {\n if (null === current.return || current.return === workInProgress)\n break a;\n current = current.return;\n }\n current.sibling.return = current.return;\n current = current.sibling;\n }\n switch (revealOrder) {\n case \"forwards\":\n renderLanes = workInProgress.child;\n for (revealOrder = null; null !== renderLanes; )\n (current = renderLanes.alternate),\n null !== current &&\n null === findFirstSuspended(current) &&\n (revealOrder = renderLanes),\n (renderLanes = renderLanes.sibling);\n renderLanes = revealOrder;\n null === renderLanes\n ? ((revealOrder = workInProgress.child),\n (workInProgress.child = null))\n : ((revealOrder = renderLanes.sibling),\n (renderLanes.sibling = null));\n initSuspenseListRenderState(\n workInProgress,\n !1,\n revealOrder,\n renderLanes,\n tailMode,\n newChildren\n );\n break;\n case \"backwards\":\n case \"unstable_legacy-backwards\":\n renderLanes = null;\n revealOrder = workInProgress.child;\n for (workInProgress.child = null; null !== revealOrder; ) {\n current = revealOrder.alternate;\n if (null !== current && null === findFirstSuspended(current)) {\n workInProgress.child = revealOrder;\n break;\n }\n current = revealOrder.sibling;\n revealOrder.sibling = renderLanes;\n renderLanes = revealOrder;\n revealOrder = current;\n }\n initSuspenseListRenderState(\n workInProgress,\n !0,\n renderLanes,\n null,\n tailMode,\n newChildren\n );\n break;\n case \"together\":\n initSuspenseListRenderState(\n workInProgress,\n !1,\n null,\n null,\n void 0,\n newChildren\n );\n break;\n default:\n workInProgress.memoizedState = null;\n }\n return workInProgress.child;\n }\n function bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n ) {\n null !== current && (workInProgress.dependencies = current.dependencies);\n profilerStartTime = -1;\n workInProgressRootSkippedLanes |= workInProgress.lanes;\n if (0 === (renderLanes & workInProgress.childLanes))\n if (null !== current) {\n if (\n (propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n !1\n ),\n 0 === (renderLanes & workInProgress.childLanes))\n )\n return null;\n } else return null;\n if (null !== current && workInProgress.child !== current.child)\n throw Error(\"Resuming work not yet implemented.\");\n if (null !== workInProgress.child) {\n current = workInProgress.child;\n renderLanes = createWorkInProgress(current, current.pendingProps);\n workInProgress.child = renderLanes;\n for (renderLanes.return = workInProgress; null !== current.sibling; )\n (current = current.sibling),\n (renderLanes = renderLanes.sibling =\n createWorkInProgress(current, current.pendingProps)),\n (renderLanes.return = workInProgress);\n renderLanes.sibling = null;\n }\n return workInProgress.child;\n }\n function checkScheduledUpdateOrContext(current, renderLanes) {\n if (0 !== (current.lanes & renderLanes)) return !0;\n current = current.dependencies;\n return null !== current && checkIfContextChanged(current) ? !0 : !1;\n }\n function attemptEarlyBailoutIfNoScheduledUpdate(\n current,\n workInProgress,\n renderLanes\n ) {\n switch (workInProgress.tag) {\n case 3:\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n );\n pushProvider(\n workInProgress,\n CacheContext,\n current.memoizedState.cache\n );\n resetHydrationState();\n break;\n case 27:\n case 5:\n pushHostContext(workInProgress);\n break;\n case 4:\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n );\n break;\n case 10:\n pushProvider(\n workInProgress,\n workInProgress.type,\n workInProgress.memoizedProps.value\n );\n break;\n case 12:\n 0 !== (renderLanes & workInProgress.childLanes) &&\n (workInProgress.flags |= 4);\n workInProgress.flags |= 2048;\n var stateNode = workInProgress.stateNode;\n stateNode.effectDuration = -0;\n stateNode.passiveEffectDuration = -0;\n break;\n case 31:\n if (null !== workInProgress.memoizedState)\n return (\n (workInProgress.flags |= 128),\n pushDehydratedActivitySuspenseHandler(workInProgress),\n null\n );\n break;\n case 13:\n stateNode = workInProgress.memoizedState;\n if (null !== stateNode) {\n if (null !== stateNode.dehydrated)\n return (\n pushPrimaryTreeSuspenseHandler(workInProgress),\n (workInProgress.flags |= 128),\n null\n );\n if (0 !== (renderLanes & workInProgress.child.childLanes))\n return updateSuspenseComponent(\n current,\n workInProgress,\n renderLanes\n );\n pushPrimaryTreeSuspenseHandler(workInProgress);\n current = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n return null !== current ? current.sibling : null;\n }\n pushPrimaryTreeSuspenseHandler(workInProgress);\n break;\n case 19:\n var didSuspendBefore = 0 !== (current.flags & 128);\n stateNode = 0 !== (renderLanes & workInProgress.childLanes);\n stateNode ||\n (propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n !1\n ),\n (stateNode = 0 !== (renderLanes & workInProgress.childLanes)));\n if (didSuspendBefore) {\n if (stateNode)\n return updateSuspenseListComponent(\n current,\n workInProgress,\n renderLanes\n );\n workInProgress.flags |= 128;\n }\n didSuspendBefore = workInProgress.memoizedState;\n null !== didSuspendBefore &&\n ((didSuspendBefore.rendering = null),\n (didSuspendBefore.tail = null),\n (didSuspendBefore.lastEffect = null));\n push(\n suspenseStackCursor,\n suspenseStackCursor.current,\n workInProgress\n );\n if (stateNode) break;\n else return null;\n case 22:\n return (\n (workInProgress.lanes = 0),\n updateOffscreenComponent(\n current,\n workInProgress,\n renderLanes,\n workInProgress.pendingProps\n )\n );\n case 24:\n pushProvider(\n workInProgress,\n CacheContext,\n current.memoizedState.cache\n );\n }\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n }\n function beginWork(current, workInProgress, renderLanes) {\n if (workInProgress._debugNeedsRemount && null !== current) {\n renderLanes = createFiberFromTypeAndProps(\n workInProgress.type,\n workInProgress.key,\n workInProgress.pendingProps,\n workInProgress._debugOwner || null,\n workInProgress.mode,\n workInProgress.lanes\n );\n renderLanes._debugStack = workInProgress._debugStack;\n renderLanes._debugTask = workInProgress._debugTask;\n var returnFiber = workInProgress.return;\n if (null === returnFiber) throw Error(\"Cannot swap the root fiber.\");\n current.alternate = null;\n workInProgress.alternate = null;\n renderLanes.index = workInProgress.index;\n renderLanes.sibling = workInProgress.sibling;\n renderLanes.return = workInProgress.return;\n renderLanes.ref = workInProgress.ref;\n renderLanes._debugInfo = workInProgress._debugInfo;\n if (workInProgress === returnFiber.child)\n returnFiber.child = renderLanes;\n else {\n var prevSibling = returnFiber.child;\n if (null === prevSibling)\n throw Error(\"Expected parent to have a child.\");\n for (; prevSibling.sibling !== workInProgress; )\n if (((prevSibling = prevSibling.sibling), null === prevSibling))\n throw Error(\"Expected to find the previous sibling.\");\n prevSibling.sibling = renderLanes;\n }\n workInProgress = returnFiber.deletions;\n null === workInProgress\n ? ((returnFiber.deletions = [current]), (returnFiber.flags |= 16))\n : workInProgress.push(current);\n renderLanes.flags |= 2;\n return renderLanes;\n }\n if (null !== current)\n if (\n current.memoizedProps !== workInProgress.pendingProps ||\n workInProgress.type !== current.type\n )\n didReceiveUpdate = !0;\n else {\n if (\n !checkScheduledUpdateOrContext(current, renderLanes) &&\n 0 === (workInProgress.flags & 128)\n )\n return (\n (didReceiveUpdate = !1),\n attemptEarlyBailoutIfNoScheduledUpdate(\n current,\n workInProgress,\n renderLanes\n )\n );\n didReceiveUpdate = 0 !== (current.flags & 131072) ? !0 : !1;\n }\n else {\n didReceiveUpdate = !1;\n if ((returnFiber = isHydrating))\n warnIfNotHydrating(),\n (returnFiber = 0 !== (workInProgress.flags & 1048576));\n returnFiber &&\n ((returnFiber = workInProgress.index),\n warnIfNotHydrating(),\n pushTreeId(workInProgress, treeForkCount, returnFiber));\n }\n workInProgress.lanes = 0;\n switch (workInProgress.tag) {\n case 16:\n a: if (\n ((returnFiber = workInProgress.pendingProps),\n (current = callLazyInitInDEV(workInProgress.elementType)),\n (workInProgress.type = current),\n \"function\" === typeof current)\n )\n shouldConstruct(current)\n ? ((returnFiber = resolveClassComponentProps(\n current,\n returnFiber\n )),\n (workInProgress.tag = 1),\n (workInProgress.type = current =\n resolveFunctionForHotReloading(current)),\n (workInProgress = updateClassComponent(\n null,\n workInProgress,\n current,\n returnFiber,\n renderLanes\n )))\n : ((workInProgress.tag = 0),\n validateFunctionComponentInDev(workInProgress, current),\n (workInProgress.type = current =\n resolveFunctionForHotReloading(current)),\n (workInProgress = updateFunctionComponent(\n null,\n workInProgress,\n current,\n returnFiber,\n renderLanes\n )));\n else {\n if (void 0 !== current && null !== current)\n if (\n ((prevSibling = current.$$typeof),\n prevSibling === REACT_FORWARD_REF_TYPE)\n ) {\n workInProgress.tag = 11;\n workInProgress.type = current =\n resolveForwardRefForHotReloading(current);\n workInProgress = updateForwardRef(\n null,\n workInProgress,\n current,\n returnFiber,\n renderLanes\n );\n break a;\n } else if (prevSibling === REACT_MEMO_TYPE) {\n workInProgress.tag = 14;\n workInProgress = updateMemoComponent(\n null,\n workInProgress,\n current,\n returnFiber,\n renderLanes\n );\n break a;\n }\n workInProgress = \"\";\n null !== current &&\n \"object\" === typeof current &&\n current.$$typeof === REACT_LAZY_TYPE &&\n (workInProgress =\n \" Did you wrap a component in React.lazy() more than once?\");\n renderLanes = getComponentNameFromType(current) || current;\n throw Error(\n \"Element type is invalid. Received a promise that resolves to: \" +\n renderLanes +\n \". Lazy element type must resolve to a class or function.\" +\n workInProgress\n );\n }\n return workInProgress;\n case 0:\n return updateFunctionComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 1:\n return (\n (returnFiber = workInProgress.type),\n (prevSibling = resolveClassComponentProps(\n returnFiber,\n workInProgress.pendingProps\n )),\n updateClassComponent(\n current,\n workInProgress,\n returnFiber,\n prevSibling,\n renderLanes\n )\n );\n case 3:\n a: {\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n );\n if (null === current)\n throw Error(\n \"Should have a current fiber. This is a bug in React.\"\n );\n returnFiber = workInProgress.pendingProps;\n var prevState = workInProgress.memoizedState;\n prevSibling = prevState.element;\n cloneUpdateQueue(current, workInProgress);\n processUpdateQueue(workInProgress, returnFiber, null, renderLanes);\n var nextState = workInProgress.memoizedState;\n returnFiber = nextState.cache;\n pushProvider(workInProgress, CacheContext, returnFiber);\n returnFiber !== prevState.cache &&\n propagateContextChanges(\n workInProgress,\n [CacheContext],\n renderLanes,\n !0\n );\n suspendIfUpdateReadFromEntangledAsyncAction();\n returnFiber = nextState.element;\n if (prevState.isDehydrated)\n if (\n ((prevState = {\n element: returnFiber,\n isDehydrated: !1,\n cache: nextState.cache\n }),\n (workInProgress.updateQueue.baseState = prevState),\n (workInProgress.memoizedState = prevState),\n workInProgress.flags & 256)\n ) {\n workInProgress = mountHostRootWithoutHydrating(\n current,\n workInProgress,\n returnFiber,\n renderLanes\n );\n break a;\n } else if (returnFiber !== prevSibling) {\n prevSibling = createCapturedValueAtFiber(\n Error(\n \"This root received an early update, before anything was able hydrate. Switched the entire root to client rendering.\"\n ),\n workInProgress\n );\n queueHydrationError(prevSibling);\n workInProgress = mountHostRootWithoutHydrating(\n current,\n workInProgress,\n returnFiber,\n renderLanes\n );\n break a;\n } else {\n current = workInProgress.stateNode.containerInfo;\n switch (current.nodeType) {\n case 9:\n current = current.body;\n break;\n default:\n current =\n \"HTML\" === current.nodeName\n ? current.ownerDocument.body\n : current;\n }\n nextHydratableInstance = getNextHydratable(current.firstChild);\n hydrationParentFiber = workInProgress;\n isHydrating = !0;\n hydrationErrors = null;\n didSuspendOrErrorDEV = !1;\n hydrationDiffRootDEV = null;\n rootOrSingletonContext = !0;\n renderLanes = mountChildFibers(\n workInProgress,\n null,\n returnFiber,\n renderLanes\n );\n for (workInProgress.child = renderLanes; renderLanes; )\n (renderLanes.flags = (renderLanes.flags & -3) | 4096),\n (renderLanes = renderLanes.sibling);\n }\n else {\n resetHydrationState();\n if (returnFiber === prevSibling) {\n workInProgress = bailoutOnAlreadyFinishedWork(\n current,\n workInProgress,\n renderLanes\n );\n break a;\n }\n reconcileChildren(\n current,\n workInProgress,\n returnFiber,\n renderLanes\n );\n }\n workInProgress = workInProgress.child;\n }\n return workInProgress;\n case 26:\n return (\n markRef(current, workInProgress),\n null === current\n ? (renderLanes = getResource(\n workInProgress.type,\n null,\n workInProgress.pendingProps,\n null\n ))\n ? (workInProgress.memoizedState = renderLanes)\n : isHydrating ||\n ((renderLanes = workInProgress.type),\n (current = workInProgress.pendingProps),\n (returnFiber = requiredContext(\n rootInstanceStackCursor.current\n )),\n (returnFiber =\n getOwnerDocumentFromRootContainer(\n returnFiber\n ).createElement(renderLanes)),\n (returnFiber[internalInstanceKey] = workInProgress),\n (returnFiber[internalPropsKey] = current),\n setInitialProperties(returnFiber, renderLanes, current),\n markNodeAsHoistable(returnFiber),\n (workInProgress.stateNode = returnFiber))\n : (workInProgress.memoizedState = getResource(\n workInProgress.type,\n current.memoizedProps,\n workInProgress.pendingProps,\n current.memoizedState\n )),\n null\n );\n case 27:\n return (\n pushHostContext(workInProgress),\n null === current &&\n isHydrating &&\n ((returnFiber = requiredContext(rootInstanceStackCursor.current)),\n (prevSibling = getHostContext()),\n (returnFiber = workInProgress.stateNode =\n resolveSingletonInstance(\n workInProgress.type,\n workInProgress.pendingProps,\n returnFiber,\n prevSibling,\n !1\n )),\n didSuspendOrErrorDEV ||\n ((prevSibling = diffHydratedProperties(\n returnFiber,\n workInProgress.type,\n workInProgress.pendingProps,\n prevSibling\n )),\n null !== prevSibling &&\n (buildHydrationDiffNode(workInProgress, 0).serverProps =\n prevSibling)),\n (hydrationParentFiber = workInProgress),\n (rootOrSingletonContext = !0),\n (prevSibling = nextHydratableInstance),\n isSingletonScope(workInProgress.type)\n ? ((previousHydratableOnEnteringScopedSingleton = prevSibling),\n (nextHydratableInstance = getNextHydratable(\n returnFiber.firstChild\n )))\n : (nextHydratableInstance = prevSibling)),\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n markRef(current, workInProgress),\n null === current && (workInProgress.flags |= 4194304),\n workInProgress.child\n );\n case 5:\n return (\n null === current &&\n isHydrating &&\n ((prevState = getHostContext()),\n (returnFiber = validateDOMNesting(\n workInProgress.type,\n prevState.ancestorInfo\n )),\n (prevSibling = nextHydratableInstance),\n (nextState = !prevSibling) ||\n ((nextState = canHydrateInstance(\n prevSibling,\n workInProgress.type,\n workInProgress.pendingProps,\n rootOrSingletonContext\n )),\n null !== nextState\n ? ((workInProgress.stateNode = nextState),\n didSuspendOrErrorDEV ||\n ((prevState = diffHydratedProperties(\n nextState,\n workInProgress.type,\n workInProgress.pendingProps,\n prevState\n )),\n null !== prevState &&\n (buildHydrationDiffNode(workInProgress, 0).serverProps =\n prevState)),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = getNextHydratable(\n nextState.firstChild\n )),\n (rootOrSingletonContext = !1),\n (prevState = !0))\n : (prevState = !1),\n (nextState = !prevState)),\n nextState &&\n (returnFiber &&\n warnNonHydratedInstance(workInProgress, prevSibling),\n throwOnHydrationMismatch(workInProgress))),\n pushHostContext(workInProgress),\n (prevSibling = workInProgress.type),\n (prevState = workInProgress.pendingProps),\n (nextState = null !== current ? current.memoizedProps : null),\n (returnFiber = prevState.children),\n shouldSetTextContent(prevSibling, prevState)\n ? (returnFiber = null)\n : null !== nextState &&\n shouldSetTextContent(prevSibling, nextState) &&\n (workInProgress.flags |= 32),\n null !== workInProgress.memoizedState &&\n ((prevSibling = renderWithHooks(\n current,\n workInProgress,\n TransitionAwareHostComponent,\n null,\n null,\n renderLanes\n )),\n (HostTransitionContext._currentValue = prevSibling)),\n markRef(current, workInProgress),\n reconcileChildren(\n current,\n workInProgress,\n returnFiber,\n renderLanes\n ),\n workInProgress.child\n );\n case 6:\n return (\n null === current &&\n isHydrating &&\n ((renderLanes = workInProgress.pendingProps),\n (current = getHostContext()),\n (returnFiber = current.ancestorInfo.current),\n (renderLanes =\n null != returnFiber\n ? validateTextNesting(\n renderLanes,\n returnFiber.tag,\n current.ancestorInfo.implicitRootScope\n )\n : !0),\n (current = nextHydratableInstance),\n (returnFiber = !current) ||\n ((returnFiber = canHydrateTextInstance(\n current,\n workInProgress.pendingProps,\n rootOrSingletonContext\n )),\n null !== returnFiber\n ? ((workInProgress.stateNode = returnFiber),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = null),\n (returnFiber = !0))\n : (returnFiber = !1),\n (returnFiber = !returnFiber)),\n returnFiber &&\n (renderLanes &&\n warnNonHydratedInstance(workInProgress, current),\n throwOnHydrationMismatch(workInProgress))),\n null\n );\n case 13:\n return updateSuspenseComponent(current, workInProgress, renderLanes);\n case 4:\n return (\n pushHostContainer(\n workInProgress,\n workInProgress.stateNode.containerInfo\n ),\n (returnFiber = workInProgress.pendingProps),\n null === current\n ? (workInProgress.child = reconcileChildFibers(\n workInProgress,\n null,\n returnFiber,\n renderLanes\n ))\n : reconcileChildren(\n current,\n workInProgress,\n returnFiber,\n renderLanes\n ),\n workInProgress.child\n );\n case 11:\n return updateForwardRef(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 7:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps,\n renderLanes\n ),\n workInProgress.child\n );\n case 8:\n return (\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 12:\n return (\n (workInProgress.flags |= 4),\n (workInProgress.flags |= 2048),\n (returnFiber = workInProgress.stateNode),\n (returnFiber.effectDuration = -0),\n (returnFiber.passiveEffectDuration = -0),\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 10:\n return (\n (returnFiber = workInProgress.type),\n (prevSibling = workInProgress.pendingProps),\n (prevState = prevSibling.value),\n \"value\" in prevSibling ||\n hasWarnedAboutUsingNoValuePropOnContextProvider ||\n ((hasWarnedAboutUsingNoValuePropOnContextProvider = !0),\n console.error(\n \"The `value` prop is required for the `<Context.Provider>`. Did you misspell it or forget to pass it?\"\n )),\n pushProvider(workInProgress, returnFiber, prevState),\n reconcileChildren(\n current,\n workInProgress,\n prevSibling.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 9:\n return (\n (prevSibling = workInProgress.type._context),\n (returnFiber = workInProgress.pendingProps.children),\n \"function\" !== typeof returnFiber &&\n console.error(\n \"A context consumer was rendered with multiple children, or a child that isn't a function. A context consumer expects a single child that is a function. If you did pass a function, make sure there is no trailing or leading whitespace around it.\"\n ),\n prepareToReadContext(workInProgress),\n (prevSibling = readContext(prevSibling)),\n markComponentRenderStarted(workInProgress),\n (returnFiber = callComponentInDEV(\n returnFiber,\n prevSibling,\n void 0\n )),\n markComponentRenderStopped(),\n (workInProgress.flags |= 1),\n reconcileChildren(\n current,\n workInProgress,\n returnFiber,\n renderLanes\n ),\n workInProgress.child\n );\n case 14:\n return updateMemoComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 15:\n return updateSimpleMemoComponent(\n current,\n workInProgress,\n workInProgress.type,\n workInProgress.pendingProps,\n renderLanes\n );\n case 19:\n return updateSuspenseListComponent(\n current,\n workInProgress,\n renderLanes\n );\n case 31:\n prevSibling = workInProgress.pendingProps;\n nextState = 0 !== (workInProgress.flags & 128);\n workInProgress.flags &= -129;\n if (null === current)\n if (isHydrating) {\n if (\"hidden\" === prevSibling.mode)\n mountActivityChildren(workInProgress, prevSibling);\n else if (\n (pushDehydratedActivitySuspenseHandler(workInProgress),\n (renderLanes = nextHydratableInstance)\n ? ((current = canHydrateHydrationBoundary(\n renderLanes,\n rootOrSingletonContext\n )),\n (current =\n null !== current && current.data === ACTIVITY_START_DATA\n ? current\n : null),\n null !== current &&\n ((returnFiber = {\n dehydrated: current,\n treeContext: getSuspendedTreeContext(),\n retryLane: 536870912,\n hydrationErrors: null\n }),\n (workInProgress.memoizedState = returnFiber),\n (returnFiber =\n createFiberFromDehydratedFragment(current)),\n (returnFiber.return = workInProgress),\n (workInProgress.child = returnFiber),\n (hydrationParentFiber = workInProgress),\n (nextHydratableInstance = null)))\n : (current = null),\n null === current)\n )\n throw (\n (warnNonHydratedInstance(workInProgress, renderLanes),\n throwOnHydrationMismatch(workInProgress))\n );\n workInProgress.lanes = 536870912;\n workInProgress = null;\n } else\n workInProgress = mountActivityChildren(\n workInProgress,\n prevSibling\n );\n else if (\n ((returnFiber = current.memoizedState), null !== returnFiber)\n )\n if (\n ((prevState = returnFiber.dehydrated),\n pushDehydratedActivitySuspenseHandler(workInProgress),\n nextState)\n )\n if (workInProgress.flags & 256)\n (workInProgress.flags &= -257),\n (workInProgress = retryActivityComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n ));\n else if (null !== workInProgress.memoizedState)\n (workInProgress.child = current.child),\n (workInProgress.flags |= 128),\n (workInProgress = null);\n else\n throw Error(\n \"Client rendering an Activity suspended it again. This is a bug in React.\"\n );\n else if (\n (warnIfHydrating(),\n didReceiveUpdate ||\n propagateParentContextChanges(\n current,\n workInProgress,\n renderLanes,\n !1\n ),\n (nextState = 0 !== (renderLanes & current.childLanes)),\n didReceiveUpdate || nextState)\n ) {\n prevSibling = workInProgressRoot;\n if (\n null !== prevSibling &&\n ((prevState = getBumpedLaneForHydration(\n prevSibling,\n renderLanes\n )),\n 0 !== prevState && prevState !== returnFiber.retryLane)\n )\n throw (\n ((returnFiber.retryLane = prevState),\n enqueueConcurrentRenderForLane(current, prevState),\n scheduleUpdateOnFiber(prevSibling, current, prevState),\n SelectiveHydrationException)\n );\n renderDidSuspendDelayIfPossible();\n workInProgress = retryActivityComponentWithoutHydrating(\n current,\n workInProgress,\n renderLanes\n );\n } else\n (renderLanes = returnFiber.treeContext),\n (nextHydratableInstance = getNextHydratable(\n prevState.nextSibling\n )),\n (hydrationParentFiber = workInProgress),\n (isHydrating = !0),\n (hydrationErrors = null),\n (didSuspendOrErrorDEV = !1),\n (hydrationDiffRootDEV = null),\n (rootOrSingletonContext = !1),\n null !== renderLanes &&\n restoreSuspendedTreeContext(workInProgress, renderLanes),\n (workInProgress = mountActivityChildren(\n workInProgress,\n prevSibling\n )),\n (workInProgress.flags |= 4096);\n else\n (renderLanes = createWorkInProgress(current.child, {\n mode: prevSibling.mode,\n children: prevSibling.children\n })),\n (renderLanes.ref = workInProgress.ref),\n (workInProgress.child = renderLanes),\n (renderLanes.return = workInProgress),\n (workInProgress = renderLanes);\n return workInProgress;\n case 22:\n return updateOffscreenComponent(\n current,\n workInProgress,\n renderLanes,\n workInProgress.pendingProps\n );\n case 24:\n return (\n prepareToReadContext(workInProgress),\n (returnFiber = readContext(CacheContext)),\n null === current\n ? ((prevSibling = peekCacheFromPool()),\n null === prevSibling &&\n ((prevSibling = workInProgressRoot),\n (prevState = createCache()),\n (prevSibling.pooledCache = prevState),\n retainCache(prevState),\n null !== prevState &&\n (prevSibling.pooledCacheLanes |= renderLanes),\n (prevSibling = prevState)),\n (workInProgress.memoizedState = {\n parent: returnFiber,\n cache: prevSibling\n }),\n initializeUpdateQueue(workInProgress),\n pushProvider(workInProgress, CacheContext, prevSibling))\n : (0 !== (current.lanes & renderLanes) &&\n (cloneUpdateQueue(current, workInProgress),\n processUpdateQueue(workInProgress, null, null, renderLanes),\n suspendIfUpdateReadFromEntangledAsyncAction()),\n (prevSibling = current.memoizedState),\n (prevState = workInProgress.memoizedState),\n prevSibling.parent !== returnFiber\n ? ((prevSibling = {\n parent: returnFiber,\n cache: returnFiber\n }),\n (workInProgress.memoizedState = prevSibling),\n 0 === workInProgress.lanes &&\n (workInProgress.memoizedState =\n workInProgress.updateQueue.baseState =\n prevSibling),\n pushProvider(workInProgress, CacheContext, returnFiber))\n : ((returnFiber = prevState.cache),\n pushProvider(workInProgress, CacheContext, returnFiber),\n returnFiber !== prevSibling.cache &&\n propagateContextChanges(\n workInProgress,\n [CacheContext],\n renderLanes,\n !0\n ))),\n reconcileChildren(\n current,\n workInProgress,\n workInProgress.pendingProps.children,\n renderLanes\n ),\n workInProgress.child\n );\n case 29:\n throw workInProgress.pendingProps;\n }\n throw Error(\n \"Unknown unit of work tag (\" +\n workInProgress.tag +\n \"). This error is likely caused by a bug in React. Please file an issue.\"\n );\n }\n function markUpdate(workInProgress) {\n workInProgress.flags |= 4;\n }\n function preloadInstanceAndSuspendIfNeeded(\n workInProgress,\n type,\n oldProps,\n newProps,\n renderLanes\n ) {\n if ((type = (workInProgress.mode & SuspenseyImagesMode) !== NoMode))\n type = !1;\n if (type) {\n if (\n ((workInProgress.flags |= 16777216),\n (renderLanes & 335544128) === renderLanes)\n )\n if (workInProgress.stateNode.complete) workInProgress.flags |= 8192;\n else if (shouldRemainOnPreviousScreen()) workInProgress.flags |= 8192;\n else\n throw (\n ((suspendedThenable = noopSuspenseyCommitThenable),\n SuspenseyCommitException)\n );\n } else workInProgress.flags &= -16777217;\n }\n function preloadResourceAndSuspendIfNeeded(workInProgress, resource) {\n if (\n \"stylesheet\" !== resource.type ||\n (resource.state.loading & Inserted) !== NotLoaded\n )\n workInProgress.flags &= -16777217;\n else if (((workInProgress.flags |= 16777216), !preloadResource(resource)))\n if (shouldRemainOnPreviousScreen()) workInProgress.flags |= 8192;\n else\n throw (\n ((suspendedThenable = noopSuspenseyCommitThenable),\n SuspenseyCommitException)\n );\n }\n function scheduleRetryEffect(workInProgress, retryQueue) {\n null !== retryQueue && (workInProgress.flags |= 4);\n workInProgress.flags & 16384 &&\n ((retryQueue =\n 22 !== workInProgress.tag ? claimNextRetryLane() : 536870912),\n (workInProgress.lanes |= retryQueue),\n (workInProgressSuspendedRetryLanes |= retryQueue));\n }\n function cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {\n if (!isHydrating)\n switch (renderState.tailMode) {\n case \"hidden\":\n hasRenderedATailFallback = renderState.tail;\n for (var lastTailNode = null; null !== hasRenderedATailFallback; )\n null !== hasRenderedATailFallback.alternate &&\n (lastTailNode = hasRenderedATailFallback),\n (hasRenderedATailFallback = hasRenderedATailFallback.sibling);\n null === lastTailNode\n ? (renderState.tail = null)\n : (lastTailNode.sibling = null);\n break;\n case \"collapsed\":\n lastTailNode = renderState.tail;\n for (var _lastTailNode = null; null !== lastTailNode; )\n null !== lastTailNode.alternate && (_lastTailNode = lastTailNode),\n (lastTailNode = lastTailNode.sibling);\n null === _lastTailNode\n ? hasRenderedATailFallback || null === renderState.tail\n ? (renderState.tail = null)\n : (renderState.tail.sibling = null)\n : (_lastTailNode.sibling = null);\n }\n }\n function bubbleProperties(completedWork) {\n var didBailout =\n null !== completedWork.alternate &&\n completedWork.alternate.child === completedWork.child,\n newChildLanes = 0,\n subtreeFlags = 0;\n if (didBailout)\n if ((completedWork.mode & ProfileMode) !== NoMode) {\n for (\n var _treeBaseDuration = completedWork.selfBaseDuration,\n _child2 = completedWork.child;\n null !== _child2;\n\n )\n (newChildLanes |= _child2.lanes | _child2.childLanes),\n (subtreeFlags |= _child2.subtreeFlags & 65011712),\n (subtreeFlags |= _child2.flags & 65011712),\n (_treeBaseDuration += _child2.treeBaseDuration),\n (_child2 = _child2.sibling);\n completedWork.treeBaseDuration = _treeBaseDuration;\n } else\n for (\n _treeBaseDuration = completedWork.child;\n null !== _treeBaseDuration;\n\n )\n (newChildLanes |=\n _treeBaseDuration.lanes | _treeBaseDuration.childLanes),\n (subtreeFlags |= _treeBaseDuration.subtreeFlags & 65011712),\n (subtreeFlags |= _treeBaseDuration.flags & 65011712),\n (_treeBaseDuration.return = completedWork),\n (_treeBaseDuration = _treeBaseDuration.sibling);\n else if ((completedWork.mode & ProfileMode) !== NoMode) {\n _treeBaseDuration = completedWork.actualDuration;\n _child2 = completedWork.selfBaseDuration;\n for (var child = completedWork.child; null !== child; )\n (newChildLanes |= child.lanes | child.childLanes),\n (subtreeFlags |= child.subtreeFlags),\n (subtreeFlags |= child.flags),\n (_treeBaseDuration += child.actualDuration),\n (_child2 += child.treeBaseDuration),\n (child = child.sibling);\n completedWork.actualDuration = _treeBaseDuration;\n completedWork.treeBaseDuration = _child2;\n } else\n for (\n _treeBaseDuration = completedWork.child;\n null !== _treeBaseDuration;\n\n )\n (newChildLanes |=\n _treeBaseDuration.lanes | _treeBaseDuration.childLanes),\n (subtreeFlags |= _treeBaseDuration.subtreeFlags),\n (subtreeFlags |= _treeBaseDuration.flags),\n (_treeBaseDuration.return = completedWork),\n (_treeBaseDuration = _treeBaseDuration.sibling);\n completedWork.subtreeFlags |= subtreeFlags;\n completedWork.childLanes = newChildLanes;\n return didBailout;\n }\n function completeWork(current, workInProgress, renderLanes) {\n var newProps = workInProgress.pendingProps;\n popTreeContext(workInProgress);\n switch (workInProgress.tag) {\n case 16:\n case 15:\n case 0:\n case 11:\n case 7:\n case 8:\n case 12:\n case 9:\n case 14:\n return bubbleProperties(workInProgress), null;\n case 1:\n return bubbleProperties(workInProgress), null;\n case 3:\n renderLanes = workInProgress.stateNode;\n newProps = null;\n null !== current && (newProps = current.memoizedState.cache);\n workInProgress.memoizedState.cache !== newProps &&\n (workInProgress.flags |= 2048);\n popProvider(CacheContext, workInProgress);\n popHostContainer(workInProgress);\n renderLanes.pendingContext &&\n ((renderLanes.context = renderLanes.pendingContext),\n (renderLanes.pendingContext = null));\n if (null === current || null === current.child)\n popHydrationState(workInProgress)\n ? (emitPendingHydrationWarnings(), markUpdate(workInProgress))\n : null === current ||\n (current.memoizedState.isDehydrated &&\n 0 === (workInProgress.flags & 256)) ||\n ((workInProgress.flags |= 1024),\n upgradeHydrationErrorsToRecoverable());\n bubbleProperties(workInProgress);\n return null;\n case 26:\n var type = workInProgress.type,\n nextResource = workInProgress.memoizedState;\n null === current\n ? (markUpdate(workInProgress),\n null !== nextResource\n ? (bubbleProperties(workInProgress),\n preloadResourceAndSuspendIfNeeded(\n workInProgress,\n nextResource\n ))\n : (bubbleProperties(workInProgress),\n preloadInstanceAndSuspendIfNeeded(\n workInProgress,\n type,\n null,\n newProps,\n renderLanes\n )))\n : nextResource\n ? nextResource !== current.memoizedState\n ? (markUpdate(workInProgress),\n bubbleProperties(workInProgress),\n preloadResourceAndSuspendIfNeeded(\n workInProgress,\n nextResource\n ))\n : (bubbleProperties(workInProgress),\n (workInProgress.flags &= -16777217))\n : ((current = current.memoizedProps),\n current !== newProps && markUpdate(workInProgress),\n bubbleProperties(workInProgress),\n preloadInstanceAndSuspendIfNeeded(\n workInProgress,\n type,\n current,\n newProps,\n renderLanes\n ));\n return null;\n case 27:\n popHostContext(workInProgress);\n renderLanes = requiredContext(rootInstanceStackCursor.current);\n type = workInProgress.type;\n if (null !== current && null != workInProgress.stateNode)\n current.memoizedProps !== newProps && markUpdate(workInProgress);\n else {\n if (!newProps) {\n if (null === workInProgress.stateNode)\n throw Error(\n \"We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.\"\n );\n bubbleProperties(workInProgress);\n return null;\n }\n current = getHostContext();\n popHydrationState(workInProgress)\n ? prepareToHydrateHostInstance(workInProgress, current)\n : ((current = resolveSingletonInstance(\n type,\n newProps,\n renderLanes,\n current,\n !0\n )),\n (workInProgress.stateNode = current),\n markUpdate(workInProgress));\n }\n bubbleProperties(workInProgress);\n return null;\n case 5:\n popHostContext(workInProgress);\n type = workInProgress.type;\n if (null !== current && null != workInProgress.stateNode)\n current.memoizedProps !== newProps && markUpdate(workInProgress);\n else {\n if (!newProps) {\n if (null === workInProgress.stateNode)\n throw Error(\n \"We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.\"\n );\n bubbleProperties(workInProgress);\n return null;\n }\n var _currentHostContext = getHostContext();\n if (popHydrationState(workInProgress))\n prepareToHydrateHostInstance(workInProgress, _currentHostContext);\n else {\n nextResource = requiredContext(rootInstanceStackCursor.current);\n validateDOMNesting(type, _currentHostContext.ancestorInfo);\n _currentHostContext = _currentHostContext.context;\n nextResource = getOwnerDocumentFromRootContainer(nextResource);\n switch (_currentHostContext) {\n case HostContextNamespaceSvg:\n nextResource = nextResource.createElementNS(\n SVG_NAMESPACE,\n type\n );\n break;\n case HostContextNamespaceMath:\n nextResource = nextResource.createElementNS(\n MATH_NAMESPACE,\n type\n );\n break;\n default:\n switch (type) {\n case \"svg\":\n nextResource = nextResource.createElementNS(\n SVG_NAMESPACE,\n type\n );\n break;\n case \"math\":\n nextResource = nextResource.createElementNS(\n MATH_NAMESPACE,\n type\n );\n break;\n case \"script\":\n nextResource = nextResource.createElement(\"div\");\n nextResource.innerHTML = \"<script>\\x3c/script>\";\n nextResource = nextResource.removeChild(\n nextResource.firstChild\n );\n break;\n case \"select\":\n nextResource =\n \"string\" === typeof newProps.is\n ? nextResource.createElement(\"select\", {\n is: newProps.is\n })\n : nextResource.createElement(\"select\");\n newProps.multiple\n ? (nextResource.multiple = !0)\n : newProps.size && (nextResource.size = newProps.size);\n break;\n default:\n (nextResource =\n \"string\" === typeof newProps.is\n ? nextResource.createElement(type, {\n is: newProps.is\n })\n : nextResource.createElement(type)),\n -1 === type.indexOf(\"-\") &&\n (type !== type.toLowerCase() &&\n console.error(\n \"<%s /> is using incorrect casing. Use PascalCase for React components, or lowercase for HTML elements.\",\n type\n ),\n \"[object HTMLUnknownElement]\" !==\n Object.prototype.toString.call(nextResource) ||\n hasOwnProperty.call(warnedUnknownTags, type) ||\n ((warnedUnknownTags[type] = !0),\n console.error(\n \"The tag <%s> is unrecognized in this browser. If you meant to render a React component, start its name with an uppercase letter.\",\n type\n )));\n }\n }\n nextResource[internalInstanceKey] = workInProgress;\n nextResource[internalPropsKey] = newProps;\n a: for (\n _currentHostContext = workInProgress.child;\n null !== _currentHostContext;\n\n ) {\n if (\n 5 === _currentHostContext.tag ||\n 6 === _currentHostContext.tag\n )\n nextResource.appendChild(_currentHostContext.stateNode);\n else if (\n 4 !== _currentHostContext.tag &&\n 27 !== _currentHostContext.tag &&\n null !== _currentHostContext.child\n ) {\n _currentHostContext.child.return = _currentHostContext;\n _currentHostContext = _currentHostContext.child;\n continue;\n }\n if (_currentHostContext === workInProgress) break a;\n for (; null === _currentHostContext.sibling; ) {\n if (\n null === _currentHostContext.return ||\n _currentHostContext.return === workInProgress\n )\n break a;\n _currentHostContext = _currentHostContext.return;\n }\n _currentHostContext.sibling.return = _currentHostContext.return;\n _currentHostContext = _currentHostContext.sibling;\n }\n workInProgress.stateNode = nextResource;\n a: switch (\n (setInitialProperties(nextResource, type, newProps), type)\n ) {\n case \"button\":\n case \"input\":\n case \"select\":\n case \"textarea\":\n newProps = !!newProps.autoFocus;\n break a;\n case \"img\":\n newProps = !0;\n break a;\n default:\n newProps = !1;\n }\n newProps && markUpdate(workInProgress);\n }\n }\n bubbleProperties(workInProgress);\n preloadInstanceAndSuspendIfNeeded(\n workInProgress,\n workInProgress.type,\n null === current ? null : current.memoizedProps,\n workInProgress.pendingProps,\n renderLanes\n );\n return null;\n case 6:\n if (current && null != workInProgress.stateNode)\n current.memoizedProps !== newProps && markUpdate(workInProgress);\n else {\n if (\n \"string\" !== typeof newProps &&\n null === workInProgress.stateNode\n )\n throw Error(\n \"We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.\"\n );\n current = requiredContext(rootInstanceStackCursor.current);\n renderLanes = getHostContext();\n if (popHydrationState(workInProgress)) {\n current = workInProgress.stateNode;\n renderLanes = workInProgress.memoizedProps;\n type = !didSuspendOrErrorDEV;\n newProps = null;\n nextResource = hydrationParentFiber;\n if (null !== nextResource)\n switch (nextResource.tag) {\n case 3:\n type &&\n ((type = diffHydratedTextForDevWarnings(\n current,\n renderLanes,\n newProps\n )),\n null !== type &&\n (buildHydrationDiffNode(workInProgress, 0).serverProps =\n type));\n break;\n case 27:\n case 5:\n (newProps = nextResource.memoizedProps),\n type &&\n ((type = diffHydratedTextForDevWarnings(\n current,\n renderLanes,\n newProps\n )),\n null !== type &&\n (buildHydrationDiffNode(\n workInProgress,\n 0\n ).serverProps = type));\n }\n current[internalInstanceKey] = workInProgress;\n current =\n current.nodeValue === renderLanes ||\n (null !== newProps &&\n !0 === newProps.suppressHydrationWarning) ||\n checkForUnmatchedText(current.nodeValue, renderLanes)\n ? !0\n : !1;\n current || throwOnHydrationMismatch(workInProgress, !0);\n } else\n (type = renderLanes.ancestorInfo.current),\n null != type &&\n validateTextNesting(\n newProps,\n type.tag,\n renderLanes.ancestorInfo.implicitRootScope\n ),\n (current =\n getOwnerDocumentFromRootContainer(current).createTextNode(\n newProps\n )),\n (current[internalInstanceKey] = workInProgress),\n (workInProgress.stateNode = current);\n }\n bubbleProperties(workInProgress);\n return null;\n case 31:\n renderLanes = workInProgress.memoizedState;\n if (null === current || null !== current.memoizedState) {\n newProps = popHydrationState(workInProgress);\n if (null !== renderLanes) {\n if (null === current) {\n if (!newProps)\n throw Error(\n \"A dehydrated suspense component was completed without a hydrated node. This is probably a bug in React.\"\n );\n current = workInProgress.memoizedState;\n current = null !== current ? current.dehydrated : null;\n if (!current)\n throw Error(\n \"Expected to have a hydrated activity instance. This error is likely caused by a bug in React. Please file an issue.\"\n );\n current[internalInstanceKey] = workInProgress;\n bubbleProperties(workInProgress);\n (workInProgress.mode & ProfileMode) !== NoMode &&\n null !== renderLanes &&\n ((current = workInProgress.child),\n null !== current &&\n (workInProgress.treeBaseDuration -=\n current.treeBaseDuration));\n } else\n emitPendingHydrationWarnings(),\n resetHydrationState(),\n 0 === (workInProgress.flags & 128) &&\n (renderLanes = workInProgress.memoizedState = null),\n (workInProgress.flags |= 4),\n bubbleProperties(workInProgress),\n (workInProgress.mode & ProfileMode) !== NoMode &&\n null !== renderLanes &&\n ((current = workInProgress.child),\n null !== current &&\n (workInProgress.treeBaseDuration -=\n current.treeBaseDuration));\n current = !1;\n } else\n (renderLanes = upgradeHydrationErrorsToRecoverable()),\n null !== current &&\n null !== current.memoizedState &&\n (current.memoizedState.hydrationErrors = renderLanes),\n (current = !0);\n if (!current) {\n if (workInProgress.flags & 256)\n return popSuspenseHandler(workInProgress), workInProgress;\n popSuspenseHandler(workInProgress);\n return null;\n }\n if (0 !== (workInProgress.flags & 128))\n throw Error(\n \"Client rendering an Activity suspended it again. This is a bug in React.\"\n );\n }\n bubbleProperties(workInProgress);\n return null;\n case 13:\n newProps = workInProgress.memoizedState;\n if (\n null === current ||\n (null !== current.memoizedState &&\n null !== current.memoizedState.dehydrated)\n ) {\n type = newProps;\n nextResource = popHydrationState(workInProgress);\n if (null !== type && null !== type.dehydrated) {\n if (null === current) {\n if (!nextResource)\n throw Error(\n \"A dehydrated suspense component was completed without a hydrated node. This is probably a bug in React.\"\n );\n nextResource = workInProgress.memoizedState;\n nextResource =\n null !== nextResource ? nextResource.dehydrated : null;\n if (!nextResource)\n throw Error(\n \"Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue.\"\n );\n nextResource[internalInstanceKey] = workInProgress;\n bubbleProperties(workInProgress);\n (workInProgress.mode & ProfileMode) !== NoMode &&\n null !== type &&\n ((type = workInProgress.child),\n null !== type &&\n (workInProgress.treeBaseDuration -= type.treeBaseDuration));\n } else\n emitPendingHydrationWarnings(),\n resetHydrationState(),\n 0 === (workInProgress.flags & 128) &&\n (type = workInProgress.memoizedState = null),\n (workInProgress.flags |= 4),\n bubbleProperties(workInProgress),\n (workInProgress.mode & ProfileMode) !== NoMode &&\n null !== type &&\n ((type = workInProgress.child),\n null !== type &&\n (workInProgress.treeBaseDuration -=\n type.treeBaseDuration));\n type = !1;\n } else\n (type = upgradeHydrationErrorsToRecoverable()),\n null !== current &&\n null !== current.memoizedState &&\n (current.memoizedState.hydrationErrors = type),\n (type = !0);\n if (!type) {\n if (workInProgress.flags & 256)\n return popSuspenseHandler(workInProgress), workInProgress;\n popSuspenseHandler(workInProgress);\n return null;\n }\n }\n popSuspenseHandler(workInProgress);\n if (0 !== (workInProgress.flags & 128))\n return (\n (workInProgress.lanes = renderLanes),\n (workInProgress.mode & ProfileMode) !== NoMode &&\n transferActualDuration(workInProgress),\n workInProgress\n );\n renderLanes = null !== newProps;\n current = null !== current && null !== current.memoizedState;\n renderLanes &&\n ((newProps = workInProgress.child),\n (type = null),\n null !== newProps.alternate &&\n null !== newProps.alternate.memoizedState &&\n null !== newProps.alternate.memoizedState.cachePool &&\n (type = newProps.alternate.memoizedState.cachePool.pool),\n (nextResource = null),\n null !== newProps.memoizedState &&\n null !== newProps.memoizedState.cachePool &&\n (nextResource = newProps.memoizedState.cachePool.pool),\n nextResource !== type && (newProps.flags |= 2048));\n renderLanes !== current &&\n renderLanes &&\n (workInProgress.child.flags |= 8192);\n scheduleRetryEffect(workInProgress, workInProgress.updateQueue);\n bubbleProperties(workInProgress);\n (workInProgress.mode & ProfileMode) !== NoMode &&\n renderLanes &&\n ((current = workInProgress.child),\n null !== current &&\n (workInProgress.treeBaseDuration -= current.treeBaseDuration));\n return null;\n case 4:\n return (\n popHostContainer(workInProgress),\n null === current &&\n listenToAllSupportedEvents(\n workInProgress.stateNode.containerInfo\n ),\n bubbleProperties(workInProgress),\n null\n );\n case 10:\n return (\n popProvider(workInProgress.type, workInProgress),\n bubbleProperties(workInProgress),\n null\n );\n case 19:\n pop(suspenseStackCursor, workInProgress);\n newProps = workInProgress.memoizedState;\n if (null === newProps) return bubbleProperties(workInProgress), null;\n type = 0 !== (workInProgress.flags & 128);\n nextResource = newProps.rendering;\n if (null === nextResource)\n if (type) cutOffTailIfNeeded(newProps, !1);\n else {\n if (\n workInProgressRootExitStatus !== RootInProgress ||\n (null !== current && 0 !== (current.flags & 128))\n )\n for (current = workInProgress.child; null !== current; ) {\n nextResource = findFirstSuspended(current);\n if (null !== nextResource) {\n workInProgress.flags |= 128;\n cutOffTailIfNeeded(newProps, !1);\n current = nextResource.updateQueue;\n workInProgress.updateQueue = current;\n scheduleRetryEffect(workInProgress, current);\n workInProgress.subtreeFlags = 0;\n current = renderLanes;\n for (\n renderLanes = workInProgress.child;\n null !== renderLanes;\n\n )\n resetWorkInProgress(renderLanes, current),\n (renderLanes = renderLanes.sibling);\n push(\n suspenseStackCursor,\n (suspenseStackCursor.current &\n SubtreeSuspenseContextMask) |\n ForceSuspenseFallback,\n workInProgress\n );\n isHydrating &&\n pushTreeFork(workInProgress, newProps.treeForkCount);\n return workInProgress.child;\n }\n current = current.sibling;\n }\n null !== newProps.tail &&\n now$1() > workInProgressRootRenderTargetTime &&\n ((workInProgress.flags |= 128),\n (type = !0),\n cutOffTailIfNeeded(newProps, !1),\n (workInProgress.lanes = 4194304));\n }\n else {\n if (!type)\n if (\n ((current = findFirstSuspended(nextResource)), null !== current)\n ) {\n if (\n ((workInProgress.flags |= 128),\n (type = !0),\n (current = current.updateQueue),\n (workInProgress.updateQueue = current),\n scheduleRetryEffect(workInProgress, current),\n cutOffTailIfNeeded(newProps, !0),\n null === newProps.tail &&\n \"hidden\" === newProps.tailMode &&\n !nextResource.alternate &&\n !isHydrating)\n )\n return bubbleProperties(workInProgress), null;\n } else\n 2 * now$1() - newProps.renderingStartTime >\n workInProgressRootRenderTargetTime &&\n 536870912 !== renderLanes &&\n ((workInProgress.flags |= 128),\n (type = !0),\n cutOffTailIfNeeded(newProps, !1),\n (workInProgress.lanes = 4194304));\n newProps.isBackwards\n ? ((nextResource.sibling = workInProgress.child),\n (workInProgress.child = nextResource))\n : ((current = newProps.last),\n null !== current\n ? (current.sibling = nextResource)\n : (workInProgress.child = nextResource),\n (newProps.last = nextResource));\n }\n if (null !== newProps.tail)\n return (\n (current = newProps.tail),\n (newProps.rendering = current),\n (newProps.tail = current.sibling),\n (newProps.renderingStartTime = now$1()),\n (current.sibling = null),\n (renderLanes = suspenseStackCursor.current),\n (renderLanes = type\n ? (renderLanes & SubtreeSuspenseContextMask) |\n ForceSuspenseFallback\n : renderLanes & SubtreeSuspenseContextMask),\n push(suspenseStackCursor, renderLanes, workInProgress),\n isHydrating &&\n pushTreeFork(workInProgress, newProps.treeForkCount),\n current\n );\n bubbleProperties(workInProgress);\n return null;\n case 22:\n case 23:\n return (\n popSuspenseHandler(workInProgress),\n popHiddenContext(workInProgress),\n (newProps = null !== workInProgress.memoizedState),\n null !== current\n ? (null !== current.memoizedState) !== newProps &&\n (workInProgress.flags |= 8192)\n : newProps && (workInProgress.flags |= 8192),\n newProps\n ? 0 !== (renderLanes & 536870912) &&\n 0 === (workInProgress.flags & 128) &&\n (bubbleProperties(workInProgress),\n workInProgress.subtreeFlags & 6 &&\n (workInProgress.flags |= 8192))\n : bubbleProperties(workInProgress),\n (renderLanes = workInProgress.updateQueue),\n null !== renderLanes &&\n scheduleRetryEffect(workInProgress, renderLanes.retryQueue),\n (renderLanes = null),\n null !== current &&\n null !== current.memoizedState &&\n null !== current.memoizedState.cachePool &&\n (renderLanes = current.memoizedState.cachePool.pool),\n (newProps = null),\n null !== workInProgress.memoizedState &&\n null !== workInProgress.memoizedState.cachePool &&\n (newProps = workInProgress.memoizedState.cachePool.pool),\n newProps !== renderLanes && (workInProgress.flags |= 2048),\n null !== current && pop(resumedCache, workInProgress),\n null\n );\n case 24:\n return (\n (renderLanes = null),\n null !== current && (renderLanes = current.memoizedState.cache),\n workInProgress.memoizedState.cache !== renderLanes &&\n (workInProgress.flags |= 2048),\n popProvider(CacheContext, workInProgress),\n bubbleProperties(workInProgress),\n null\n );\n case 25:\n return null;\n case 30:\n return null;\n }\n throw Error(\n \"Unknown unit of work tag (\" +\n workInProgress.tag +\n \"). This error is likely caused by a bug in React. Please file an issue.\"\n );\n }\n function unwindWork(current, workInProgress) {\n popTreeContext(workInProgress);\n switch (workInProgress.tag) {\n case 1:\n return (\n (current = workInProgress.flags),\n current & 65536\n ? ((workInProgress.flags = (current & -65537) | 128),\n (workInProgress.mode & ProfileMode) !== NoMode &&\n transferActualDuration(workInProgress),\n workInProgress)\n : null\n );\n case 3:\n return (\n popProvider(CacheContext, workInProgress),\n popHostContainer(workInProgress),\n (current = workInProgress.flags),\n 0 !== (current & 65536) && 0 === (current & 128)\n ? ((workInProgress.flags = (current & -65537) | 128),\n workInProgress)\n : null\n );\n case 26:\n case 27:\n case 5:\n return popHostContext(workInProgress), null;\n case 31:\n if (null !== workInProgress.memoizedState) {\n popSuspenseHandler(workInProgress);\n if (null === workInProgress.alternate)\n throw Error(\n \"Threw in newly mounted dehydrated component. This is likely a bug in React. Please file an issue.\"\n );\n resetHydrationState();\n }\n current = workInProgress.flags;\n return current & 65536\n ? ((workInProgress.flags = (current & -65537) | 128),\n (workInProgress.mode & ProfileMode) !== NoMode &&\n transferActualDuration(workInProgress),\n workInProgress)\n : null;\n case 13:\n popSuspenseHandler(workInProgress);\n current = workInProgress.memoizedState;\n if (null !== current && null !== current.dehydrated) {\n if (null === workInProgress.alternate)\n throw Error(\n \"Threw in newly mounted dehydrated component. This is likely a bug in React. Please file an issue.\"\n );\n resetHydrationState();\n }\n current = workInProgress.flags;\n return current & 65536\n ? ((workInProgress.flags = (current & -65537) | 128),\n (workInProgress.mode & ProfileMode) !== NoMode &&\n transferActualDuration(workInProgress),\n workInProgress)\n : null;\n case 19:\n return pop(suspenseStackCursor, workInProgress), null;\n case 4:\n return popHostContainer(workInProgress), null;\n case 10:\n return popProvider(workInProgress.type, workInProgress), null;\n case 22:\n case 23:\n return (\n popSuspenseHandler(workInProgress),\n popHiddenContext(workInProgress),\n null !== current && pop(resumedCache, workInProgress),\n (current = workInProgress.flags),\n current & 65536\n ? ((workInProgress.flags = (current & -65537) | 128),\n (workInProgress.mode & ProfileMode) !== NoMode &&\n transferActualDuration(workInProgress),\n workInProgress)\n : null\n );\n case 24:\n return popProvider(CacheContext, workInProgress), null;\n case 25:\n return null;\n default:\n return null;\n }\n }\n function unwindInterruptedWork(current, interruptedWork) {\n popTreeContext(interruptedWork);\n switch (interruptedWork.tag) {\n case 3:\n popProvider(CacheContext, interruptedWork);\n popHostContainer(interruptedWork);\n break;\n case 26:\n case 27:\n case 5:\n popHostContext(interruptedWork);\n break;\n case 4:\n popHostContainer(interruptedWork);\n break;\n case 31:\n null !== interruptedWork.memoizedState &&\n popSuspenseHandler(interruptedWork);\n break;\n case 13:\n popSuspenseHandler(interruptedWork);\n break;\n case 19:\n pop(suspenseStackCursor, interruptedWork);\n break;\n case 10:\n popProvider(interruptedWork.type, interruptedWork);\n break;\n case 22:\n case 23:\n popSuspenseHandler(interruptedWork);\n popHiddenContext(interruptedWork);\n null !== current && pop(resumedCache, interruptedWork);\n break;\n case 24:\n popProvider(CacheContext, interruptedWork);\n }\n }\n function shouldProfile(current) {\n return (current.mode & ProfileMode) !== NoMode;\n }\n function commitHookLayoutEffects(finishedWork, hookFlags) {\n shouldProfile(finishedWork)\n ? (startEffectTimer(),\n commitHookEffectListMount(hookFlags, finishedWork),\n recordEffectDuration())\n : commitHookEffectListMount(hookFlags, finishedWork);\n }\n function commitHookLayoutUnmountEffects(\n finishedWork,\n nearestMountedAncestor,\n hookFlags\n ) {\n shouldProfile(finishedWork)\n ? (startEffectTimer(),\n commitHookEffectListUnmount(\n hookFlags,\n finishedWork,\n nearestMountedAncestor\n ),\n recordEffectDuration())\n : commitHookEffectListUnmount(\n hookFlags,\n finishedWork,\n nearestMountedAncestor\n );\n }\n function commitHookEffectListMount(flags, finishedWork) {\n try {\n var updateQueue = finishedWork.updateQueue,\n lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n if (null !== lastEffect) {\n var firstEffect = lastEffect.next;\n updateQueue = firstEffect;\n do {\n if (\n (updateQueue.tag & flags) === flags &&\n ((flags & Passive) !== NoFlags\n ? null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentPassiveEffectMountStarted &&\n injectedProfilingHooks.markComponentPassiveEffectMountStarted(\n finishedWork\n )\n : (flags & Layout) !== NoFlags &&\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentLayoutEffectMountStarted &&\n injectedProfilingHooks.markComponentLayoutEffectMountStarted(\n finishedWork\n ),\n (lastEffect = void 0),\n (flags & Insertion) !== NoFlags &&\n (isRunningInsertionEffect = !0),\n (lastEffect = runWithFiberInDEV(\n finishedWork,\n callCreateInDEV,\n updateQueue\n )),\n (flags & Insertion) !== NoFlags &&\n (isRunningInsertionEffect = !1),\n (flags & Passive) !== NoFlags\n ? null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentPassiveEffectMountStopped &&\n injectedProfilingHooks.markComponentPassiveEffectMountStopped()\n : (flags & Layout) !== NoFlags &&\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentLayoutEffectMountStopped &&\n injectedProfilingHooks.markComponentLayoutEffectMountStopped(),\n void 0 !== lastEffect && \"function\" !== typeof lastEffect)\n ) {\n var hookName = void 0;\n hookName =\n 0 !== (updateQueue.tag & Layout)\n ? \"useLayoutEffect\"\n : 0 !== (updateQueue.tag & Insertion)\n ? \"useInsertionEffect\"\n : \"useEffect\";\n var addendum = void 0;\n addendum =\n null === lastEffect\n ? \" You returned null. If your effect does not require clean up, return undefined (or nothing).\"\n : \"function\" === typeof lastEffect.then\n ? \"\\n\\nIt looks like you wrote \" +\n hookName +\n \"(async () => ...) or returned a Promise. Instead, write the async function inside your effect and call it immediately:\\n\\n\" +\n hookName +\n \"(() => {\\n async function fetchData() {\\n // You can await here\\n const response = await MyAPI.getData(someId);\\n // ...\\n }\\n fetchData();\\n}, [someId]); // Or [] if effect doesn't need props or state\\n\\nLearn more about data fetching with Hooks: https://react.dev/link/hooks-data-fetching\"\n : \" You returned: \" + lastEffect;\n runWithFiberInDEV(\n finishedWork,\n function (n, a) {\n console.error(\n \"%s must not return anything besides a function, which is used for clean-up.%s\",\n n,\n a\n );\n },\n hookName,\n addendum\n );\n }\n updateQueue = updateQueue.next;\n } while (updateQueue !== firstEffect);\n }\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n function commitHookEffectListUnmount(\n flags,\n finishedWork,\n nearestMountedAncestor\n ) {\n try {\n var updateQueue = finishedWork.updateQueue,\n lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n if (null !== lastEffect) {\n var firstEffect = lastEffect.next;\n updateQueue = firstEffect;\n do {\n if ((updateQueue.tag & flags) === flags) {\n var inst = updateQueue.inst,\n destroy = inst.destroy;\n void 0 !== destroy &&\n ((inst.destroy = void 0),\n (flags & Passive) !== NoFlags\n ? null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentPassiveEffectUnmountStarted &&\n injectedProfilingHooks.markComponentPassiveEffectUnmountStarted(\n finishedWork\n )\n : (flags & Layout) !== NoFlags &&\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentLayoutEffectUnmountStarted &&\n injectedProfilingHooks.markComponentLayoutEffectUnmountStarted(\n finishedWork\n ),\n (flags & Insertion) !== NoFlags &&\n (isRunningInsertionEffect = !0),\n (lastEffect = finishedWork),\n runWithFiberInDEV(\n lastEffect,\n callDestroyInDEV,\n lastEffect,\n nearestMountedAncestor,\n destroy\n ),\n (flags & Insertion) !== NoFlags &&\n (isRunningInsertionEffect = !1),\n (flags & Passive) !== NoFlags\n ? null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentPassiveEffectUnmountStopped &&\n injectedProfilingHooks.markComponentPassiveEffectUnmountStopped()\n : (flags & Layout) !== NoFlags &&\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentLayoutEffectUnmountStopped &&\n injectedProfilingHooks.markComponentLayoutEffectUnmountStopped());\n }\n updateQueue = updateQueue.next;\n } while (updateQueue !== firstEffect);\n }\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n function commitHookPassiveMountEffects(finishedWork, hookFlags) {\n shouldProfile(finishedWork)\n ? (startEffectTimer(),\n commitHookEffectListMount(hookFlags, finishedWork),\n recordEffectDuration())\n : commitHookEffectListMount(hookFlags, finishedWork);\n }\n function commitHookPassiveUnmountEffects(\n finishedWork,\n nearestMountedAncestor,\n hookFlags\n ) {\n shouldProfile(finishedWork)\n ? (startEffectTimer(),\n commitHookEffectListUnmount(\n hookFlags,\n finishedWork,\n nearestMountedAncestor\n ),\n recordEffectDuration())\n : commitHookEffectListUnmount(\n hookFlags,\n finishedWork,\n nearestMountedAncestor\n );\n }\n function commitClassCallbacks(finishedWork) {\n var updateQueue = finishedWork.updateQueue;\n if (null !== updateQueue) {\n var instance = finishedWork.stateNode;\n finishedWork.type.defaultProps ||\n \"ref\" in finishedWork.memoizedProps ||\n didWarnAboutReassigningProps ||\n (instance.props !== finishedWork.memoizedProps &&\n console.error(\n \"Expected %s props to match memoized props before processing the update queue. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.\",\n getComponentNameFromFiber(finishedWork) || \"instance\"\n ),\n instance.state !== finishedWork.memoizedState &&\n console.error(\n \"Expected %s state to match memoized state before processing the update queue. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.\",\n getComponentNameFromFiber(finishedWork) || \"instance\"\n ));\n try {\n runWithFiberInDEV(\n finishedWork,\n commitCallbacks,\n updateQueue,\n instance\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n }\n function callGetSnapshotBeforeUpdates(instance, prevProps, prevState) {\n return instance.getSnapshotBeforeUpdate(prevProps, prevState);\n }\n function commitClassSnapshot(finishedWork, current) {\n var prevProps = current.memoizedProps,\n prevState = current.memoizedState;\n current = finishedWork.stateNode;\n finishedWork.type.defaultProps ||\n \"ref\" in finishedWork.memoizedProps ||\n didWarnAboutReassigningProps ||\n (current.props !== finishedWork.memoizedProps &&\n console.error(\n \"Expected %s props to match memoized props before getSnapshotBeforeUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.\",\n getComponentNameFromFiber(finishedWork) || \"instance\"\n ),\n current.state !== finishedWork.memoizedState &&\n console.error(\n \"Expected %s state to match memoized state before getSnapshotBeforeUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.\",\n getComponentNameFromFiber(finishedWork) || \"instance\"\n ));\n try {\n var resolvedPrevProps = resolveClassComponentProps(\n finishedWork.type,\n prevProps\n );\n var snapshot = runWithFiberInDEV(\n finishedWork,\n callGetSnapshotBeforeUpdates,\n current,\n resolvedPrevProps,\n prevState\n );\n prevProps = didWarnAboutUndefinedSnapshotBeforeUpdate;\n void 0 !== snapshot ||\n prevProps.has(finishedWork.type) ||\n (prevProps.add(finishedWork.type),\n runWithFiberInDEV(finishedWork, function () {\n console.error(\n \"%s.getSnapshotBeforeUpdate(): A snapshot value (or null) must be returned. You have returned undefined.\",\n getComponentNameFromFiber(finishedWork)\n );\n }));\n current.__reactInternalSnapshotBeforeUpdate = snapshot;\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n function safelyCallComponentWillUnmount(\n current,\n nearestMountedAncestor,\n instance\n ) {\n instance.props = resolveClassComponentProps(\n current.type,\n current.memoizedProps\n );\n instance.state = current.memoizedState;\n shouldProfile(current)\n ? (startEffectTimer(),\n runWithFiberInDEV(\n current,\n callComponentWillUnmountInDEV,\n current,\n nearestMountedAncestor,\n instance\n ),\n recordEffectDuration())\n : runWithFiberInDEV(\n current,\n callComponentWillUnmountInDEV,\n current,\n nearestMountedAncestor,\n instance\n );\n }\n function commitAttachRef(finishedWork) {\n var ref = finishedWork.ref;\n if (null !== ref) {\n switch (finishedWork.tag) {\n case 26:\n case 27:\n case 5:\n var instanceToUse = finishedWork.stateNode;\n break;\n case 30:\n instanceToUse = finishedWork.stateNode;\n break;\n default:\n instanceToUse = finishedWork.stateNode;\n }\n if (\"function\" === typeof ref)\n if (shouldProfile(finishedWork))\n try {\n startEffectTimer(),\n (finishedWork.refCleanup = ref(instanceToUse));\n } finally {\n recordEffectDuration();\n }\n else finishedWork.refCleanup = ref(instanceToUse);\n else\n \"string\" === typeof ref\n ? console.error(\"String refs are no longer supported.\")\n : ref.hasOwnProperty(\"current\") ||\n console.error(\n \"Unexpected ref object provided for %s. Use either a ref-setter function or React.createRef().\",\n getComponentNameFromFiber(finishedWork)\n ),\n (ref.current = instanceToUse);\n }\n }\n function safelyAttachRef(current, nearestMountedAncestor) {\n try {\n runWithFiberInDEV(current, commitAttachRef, current);\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n }\n }\n function safelyDetachRef(current, nearestMountedAncestor) {\n var ref = current.ref,\n refCleanup = current.refCleanup;\n if (null !== ref)\n if (\"function\" === typeof refCleanup)\n try {\n if (shouldProfile(current))\n try {\n startEffectTimer(), runWithFiberInDEV(current, refCleanup);\n } finally {\n recordEffectDuration(current);\n }\n else runWithFiberInDEV(current, refCleanup);\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n } finally {\n (current.refCleanup = null),\n (current = current.alternate),\n null != current && (current.refCleanup = null);\n }\n else if (\"function\" === typeof ref)\n try {\n if (shouldProfile(current))\n try {\n startEffectTimer(), runWithFiberInDEV(current, ref, null);\n } finally {\n recordEffectDuration(current);\n }\n else runWithFiberInDEV(current, ref, null);\n } catch (error$7) {\n captureCommitPhaseError(current, nearestMountedAncestor, error$7);\n }\n else ref.current = null;\n }\n function commitProfiler(\n finishedWork,\n current,\n commitStartTime,\n effectDuration\n ) {\n var _finishedWork$memoize = finishedWork.memoizedProps,\n id = _finishedWork$memoize.id,\n onCommit = _finishedWork$memoize.onCommit;\n _finishedWork$memoize = _finishedWork$memoize.onRender;\n current = null === current ? \"mount\" : \"update\";\n currentUpdateIsNested && (current = \"nested-update\");\n \"function\" === typeof _finishedWork$memoize &&\n _finishedWork$memoize(\n id,\n current,\n finishedWork.actualDuration,\n finishedWork.treeBaseDuration,\n finishedWork.actualStartTime,\n commitStartTime\n );\n \"function\" === typeof onCommit &&\n onCommit(id, current, effectDuration, commitStartTime);\n }\n function commitProfilerPostCommitImpl(\n finishedWork,\n current,\n commitStartTime,\n passiveEffectDuration\n ) {\n var _finishedWork$memoize2 = finishedWork.memoizedProps;\n finishedWork = _finishedWork$memoize2.id;\n _finishedWork$memoize2 = _finishedWork$memoize2.onPostCommit;\n current = null === current ? \"mount\" : \"update\";\n currentUpdateIsNested && (current = \"nested-update\");\n \"function\" === typeof _finishedWork$memoize2 &&\n _finishedWork$memoize2(\n finishedWork,\n current,\n passiveEffectDuration,\n commitStartTime\n );\n }\n function commitHostMount(finishedWork) {\n var type = finishedWork.type,\n props = finishedWork.memoizedProps,\n instance = finishedWork.stateNode;\n try {\n runWithFiberInDEV(\n finishedWork,\n commitMount,\n instance,\n type,\n props,\n finishedWork\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n function commitHostUpdate(finishedWork, newProps, oldProps) {\n try {\n runWithFiberInDEV(\n finishedWork,\n commitUpdate,\n finishedWork.stateNode,\n finishedWork.type,\n oldProps,\n newProps,\n finishedWork\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n function isHostParent(fiber) {\n return (\n 5 === fiber.tag ||\n 3 === fiber.tag ||\n 26 === fiber.tag ||\n (27 === fiber.tag && isSingletonScope(fiber.type)) ||\n 4 === fiber.tag\n );\n }\n function getHostSibling(fiber) {\n a: for (;;) {\n for (; null === fiber.sibling; ) {\n if (null === fiber.return || isHostParent(fiber.return)) return null;\n fiber = fiber.return;\n }\n fiber.sibling.return = fiber.return;\n for (\n fiber = fiber.sibling;\n 5 !== fiber.tag && 6 !== fiber.tag && 18 !== fiber.tag;\n\n ) {\n if (27 === fiber.tag && isSingletonScope(fiber.type)) continue a;\n if (fiber.flags & 2) continue a;\n if (null === fiber.child || 4 === fiber.tag) continue a;\n else (fiber.child.return = fiber), (fiber = fiber.child);\n }\n if (!(fiber.flags & 2)) return fiber.stateNode;\n }\n }\n function insertOrAppendPlacementNodeIntoContainer(node, before, parent) {\n var tag = node.tag;\n if (5 === tag || 6 === tag)\n (node = node.stateNode),\n before\n ? (warnForReactChildrenConflict(parent),\n (9 === parent.nodeType\n ? parent.body\n : \"HTML\" === parent.nodeName\n ? parent.ownerDocument.body\n : parent\n ).insertBefore(node, before))\n : (warnForReactChildrenConflict(parent),\n (before =\n 9 === parent.nodeType\n ? parent.body\n : \"HTML\" === parent.nodeName\n ? parent.ownerDocument.body\n : parent),\n before.appendChild(node),\n (parent = parent._reactRootContainer),\n (null !== parent && void 0 !== parent) ||\n null !== before.onclick ||\n (before.onclick = noop$1));\n else if (\n 4 !== tag &&\n (27 === tag &&\n isSingletonScope(node.type) &&\n ((parent = node.stateNode), (before = null)),\n (node = node.child),\n null !== node)\n )\n for (\n insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n node = node.sibling;\n null !== node;\n\n )\n insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n (node = node.sibling);\n }\n function insertOrAppendPlacementNode(node, before, parent) {\n var tag = node.tag;\n if (5 === tag || 6 === tag)\n (node = node.stateNode),\n before ? parent.insertBefore(node, before) : parent.appendChild(node);\n else if (\n 4 !== tag &&\n (27 === tag && isSingletonScope(node.type) && (parent = node.stateNode),\n (node = node.child),\n null !== node)\n )\n for (\n insertOrAppendPlacementNode(node, before, parent),\n node = node.sibling;\n null !== node;\n\n )\n insertOrAppendPlacementNode(node, before, parent),\n (node = node.sibling);\n }\n function commitPlacement(finishedWork) {\n for (\n var hostParentFiber, parentFiber = finishedWork.return;\n null !== parentFiber;\n\n ) {\n if (isHostParent(parentFiber)) {\n hostParentFiber = parentFiber;\n break;\n }\n parentFiber = parentFiber.return;\n }\n if (null == hostParentFiber)\n throw Error(\n \"Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.\"\n );\n switch (hostParentFiber.tag) {\n case 27:\n hostParentFiber = hostParentFiber.stateNode;\n parentFiber = getHostSibling(finishedWork);\n insertOrAppendPlacementNode(\n finishedWork,\n parentFiber,\n hostParentFiber\n );\n break;\n case 5:\n parentFiber = hostParentFiber.stateNode;\n hostParentFiber.flags & 32 &&\n (resetTextContent(parentFiber), (hostParentFiber.flags &= -33));\n hostParentFiber = getHostSibling(finishedWork);\n insertOrAppendPlacementNode(\n finishedWork,\n hostParentFiber,\n parentFiber\n );\n break;\n case 3:\n case 4:\n hostParentFiber = hostParentFiber.stateNode.containerInfo;\n parentFiber = getHostSibling(finishedWork);\n insertOrAppendPlacementNodeIntoContainer(\n finishedWork,\n parentFiber,\n hostParentFiber\n );\n break;\n default:\n throw Error(\n \"Invalid host parent fiber. This error is likely caused by a bug in React. Please file an issue.\"\n );\n }\n }\n function commitHostSingletonAcquisition(finishedWork) {\n var singleton = finishedWork.stateNode,\n props = finishedWork.memoizedProps;\n try {\n runWithFiberInDEV(\n finishedWork,\n acquireSingletonInstance,\n finishedWork.type,\n props,\n singleton,\n finishedWork\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n function commitBeforeMutationEffects(root, firstChild) {\n root = root.containerInfo;\n eventsEnabled = _enabled;\n root = getActiveElementDeep(root);\n if (hasSelectionCapabilities(root)) {\n if (\"selectionStart\" in root)\n var JSCompiler_temp = {\n start: root.selectionStart,\n end: root.selectionEnd\n };\n else\n a: {\n JSCompiler_temp =\n ((JSCompiler_temp = root.ownerDocument) &&\n JSCompiler_temp.defaultView) ||\n window;\n var selection =\n JSCompiler_temp.getSelection && JSCompiler_temp.getSelection();\n if (selection && 0 !== selection.rangeCount) {\n JSCompiler_temp = selection.anchorNode;\n var anchorOffset = selection.anchorOffset,\n focusNode = selection.focusNode;\n selection = selection.focusOffset;\n try {\n JSCompiler_temp.nodeType, focusNode.nodeType;\n } catch (e$2) {\n JSCompiler_temp = null;\n break a;\n }\n var length = 0,\n start = -1,\n end = -1,\n indexWithinAnchor = 0,\n indexWithinFocus = 0,\n node = root,\n parentNode = null;\n b: for (;;) {\n for (var next; ; ) {\n node !== JSCompiler_temp ||\n (0 !== anchorOffset && 3 !== node.nodeType) ||\n (start = length + anchorOffset);\n node !== focusNode ||\n (0 !== selection && 3 !== node.nodeType) ||\n (end = length + selection);\n 3 === node.nodeType && (length += node.nodeValue.length);\n if (null === (next = node.firstChild)) break;\n parentNode = node;\n node = next;\n }\n for (;;) {\n if (node === root) break b;\n parentNode === JSCompiler_temp &&\n ++indexWithinAnchor === anchorOffset &&\n (start = length);\n parentNode === focusNode &&\n ++indexWithinFocus === selection &&\n (end = length);\n if (null !== (next = node.nextSibling)) break;\n node = parentNode;\n parentNode = node.parentNode;\n }\n node = next;\n }\n JSCompiler_temp =\n -1 === start || -1 === end ? null : { start: start, end: end };\n } else JSCompiler_temp = null;\n }\n JSCompiler_temp = JSCompiler_temp || { start: 0, end: 0 };\n } else JSCompiler_temp = null;\n selectionInformation = {\n focusedElem: root,\n selectionRange: JSCompiler_temp\n };\n _enabled = !1;\n for (nextEffect = firstChild; null !== nextEffect; )\n if (\n ((firstChild = nextEffect),\n (root = firstChild.child),\n 0 !== (firstChild.subtreeFlags & 1024) && null !== root)\n )\n (root.return = firstChild), (nextEffect = root);\n else\n for (; null !== nextEffect; ) {\n root = firstChild = nextEffect;\n JSCompiler_temp = root.alternate;\n anchorOffset = root.flags;\n switch (root.tag) {\n case 0:\n break;\n case 11:\n case 15:\n break;\n case 1:\n 0 !== (anchorOffset & 1024) &&\n null !== JSCompiler_temp &&\n commitClassSnapshot(root, JSCompiler_temp);\n break;\n case 3:\n if (0 !== (anchorOffset & 1024))\n if (\n ((root = root.stateNode.containerInfo),\n (JSCompiler_temp = root.nodeType),\n 9 === JSCompiler_temp)\n )\n clearContainerSparingly(root);\n else if (1 === JSCompiler_temp)\n switch (root.nodeName) {\n case \"HEAD\":\n case \"HTML\":\n case \"BODY\":\n clearContainerSparingly(root);\n break;\n default:\n root.textContent = \"\";\n }\n break;\n case 5:\n case 26:\n case 27:\n case 6:\n case 4:\n case 17:\n break;\n default:\n if (0 !== (anchorOffset & 1024))\n throw Error(\n \"This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.\"\n );\n }\n root = firstChild.sibling;\n if (null !== root) {\n root.return = firstChild.return;\n nextEffect = root;\n break;\n }\n nextEffect = firstChild.return;\n }\n }\n function commitLayoutEffectOnFiber(finishedRoot, current, finishedWork) {\n var prevEffectStart = pushComponentEffectStart(),\n flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n flags & 4 &&\n commitHookLayoutEffects(finishedWork, Layout | HasEffect);\n break;\n case 1:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n if (flags & 4)\n if (((finishedRoot = finishedWork.stateNode), null === current))\n finishedWork.type.defaultProps ||\n \"ref\" in finishedWork.memoizedProps ||\n didWarnAboutReassigningProps ||\n (finishedRoot.props !== finishedWork.memoizedProps &&\n console.error(\n \"Expected %s props to match memoized props before componentDidMount. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.\",\n getComponentNameFromFiber(finishedWork) || \"instance\"\n ),\n finishedRoot.state !== finishedWork.memoizedState &&\n console.error(\n \"Expected %s state to match memoized state before componentDidMount. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.\",\n getComponentNameFromFiber(finishedWork) || \"instance\"\n )),\n shouldProfile(finishedWork)\n ? (startEffectTimer(),\n runWithFiberInDEV(\n finishedWork,\n callComponentDidMountInDEV,\n finishedWork,\n finishedRoot\n ),\n recordEffectDuration())\n : runWithFiberInDEV(\n finishedWork,\n callComponentDidMountInDEV,\n finishedWork,\n finishedRoot\n );\n else {\n var prevProps = resolveClassComponentProps(\n finishedWork.type,\n current.memoizedProps\n );\n current = current.memoizedState;\n finishedWork.type.defaultProps ||\n \"ref\" in finishedWork.memoizedProps ||\n didWarnAboutReassigningProps ||\n (finishedRoot.props !== finishedWork.memoizedProps &&\n console.error(\n \"Expected %s props to match memoized props before componentDidUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.\",\n getComponentNameFromFiber(finishedWork) || \"instance\"\n ),\n finishedRoot.state !== finishedWork.memoizedState &&\n console.error(\n \"Expected %s state to match memoized state before componentDidUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.\",\n getComponentNameFromFiber(finishedWork) || \"instance\"\n ));\n shouldProfile(finishedWork)\n ? (startEffectTimer(),\n runWithFiberInDEV(\n finishedWork,\n callComponentDidUpdateInDEV,\n finishedWork,\n finishedRoot,\n prevProps,\n current,\n finishedRoot.__reactInternalSnapshotBeforeUpdate\n ),\n recordEffectDuration())\n : runWithFiberInDEV(\n finishedWork,\n callComponentDidUpdateInDEV,\n finishedWork,\n finishedRoot,\n prevProps,\n current,\n finishedRoot.__reactInternalSnapshotBeforeUpdate\n );\n }\n flags & 64 && commitClassCallbacks(finishedWork);\n flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 3:\n current = pushNestedEffectDurations();\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n if (\n flags & 64 &&\n ((flags = finishedWork.updateQueue), null !== flags)\n ) {\n prevProps = null;\n if (null !== finishedWork.child)\n switch (finishedWork.child.tag) {\n case 27:\n case 5:\n prevProps = finishedWork.child.stateNode;\n break;\n case 1:\n prevProps = finishedWork.child.stateNode;\n }\n try {\n runWithFiberInDEV(\n finishedWork,\n commitCallbacks,\n flags,\n prevProps\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n finishedRoot.effectDuration += popNestedEffectDurations(current);\n break;\n case 27:\n null === current &&\n flags & 4 &&\n commitHostSingletonAcquisition(finishedWork);\n case 26:\n case 5:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n if (null === current)\n if (flags & 4) commitHostMount(finishedWork);\n else if (flags & 64) {\n finishedRoot = finishedWork.type;\n current = finishedWork.memoizedProps;\n prevProps = finishedWork.stateNode;\n try {\n runWithFiberInDEV(\n finishedWork,\n commitHydratedInstance,\n prevProps,\n finishedRoot,\n current,\n finishedWork\n );\n } catch (error) {\n captureCommitPhaseError(\n finishedWork,\n finishedWork.return,\n error\n );\n }\n }\n flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 12:\n if (flags & 4) {\n flags = pushNestedEffectDurations();\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n finishedRoot = finishedWork.stateNode;\n finishedRoot.effectDuration += bubbleNestedEffectDurations(flags);\n try {\n runWithFiberInDEV(\n finishedWork,\n commitProfiler,\n finishedWork,\n current,\n commitStartTime,\n finishedRoot.effectDuration\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n } else recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n break;\n case 31:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n flags & 4 &&\n commitActivityHydrationCallbacks(finishedRoot, finishedWork);\n break;\n case 13:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n flags & 4 &&\n commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n flags & 64 &&\n ((finishedRoot = finishedWork.memoizedState),\n null !== finishedRoot &&\n ((finishedRoot = finishedRoot.dehydrated),\n null !== finishedRoot &&\n ((finishedWork = retryDehydratedSuspenseBoundary.bind(\n null,\n finishedWork\n )),\n registerSuspenseInstanceRetry(finishedRoot, finishedWork))));\n break;\n case 22:\n flags =\n null !== finishedWork.memoizedState || offscreenSubtreeIsHidden;\n if (!flags) {\n current =\n (null !== current && null !== current.memoizedState) ||\n offscreenSubtreeWasHidden;\n prevProps = offscreenSubtreeIsHidden;\n var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n offscreenSubtreeIsHidden = flags;\n (offscreenSubtreeWasHidden = current) &&\n !prevOffscreenSubtreeWasHidden\n ? recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n 0 !== (finishedWork.subtreeFlags & 8772)\n )\n : recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n offscreenSubtreeIsHidden = prevProps;\n offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n }\n break;\n case 30:\n break;\n default:\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n }\n popComponentEffectStart(prevEffectStart);\n }\n function detachFiberAfterEffects(fiber) {\n var alternate = fiber.alternate;\n null !== alternate &&\n ((fiber.alternate = null), detachFiberAfterEffects(alternate));\n fiber.child = null;\n fiber.deletions = null;\n fiber.sibling = null;\n 5 === fiber.tag &&\n ((alternate = fiber.stateNode),\n null !== alternate && detachDeletedInstance(alternate));\n fiber.stateNode = null;\n fiber._debugOwner = null;\n fiber.return = null;\n fiber.dependencies = null;\n fiber.memoizedProps = null;\n fiber.memoizedState = null;\n fiber.pendingProps = null;\n fiber.stateNode = null;\n fiber.updateQueue = null;\n }\n function recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n parent\n ) {\n for (parent = parent.child; null !== parent; )\n commitDeletionEffectsOnFiber(\n finishedRoot,\n nearestMountedAncestor,\n parent\n ),\n (parent = parent.sibling);\n }\n function commitDeletionEffectsOnFiber(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n ) {\n if (\n injectedHook &&\n \"function\" === typeof injectedHook.onCommitFiberUnmount\n )\n try {\n injectedHook.onCommitFiberUnmount(rendererID, deletedFiber);\n } catch (err) {\n hasLoggedError ||\n ((hasLoggedError = !0),\n console.error(\n \"React instrumentation encountered an error: %s\",\n err\n ));\n }\n var prevEffectStart = pushComponentEffectStart();\n switch (deletedFiber.tag) {\n case 26:\n offscreenSubtreeWasHidden ||\n safelyDetachRef(deletedFiber, nearestMountedAncestor);\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n deletedFiber.memoizedState\n ? deletedFiber.memoizedState.count--\n : deletedFiber.stateNode &&\n ((deletedFiber = deletedFiber.stateNode),\n deletedFiber.parentNode.removeChild(deletedFiber));\n break;\n case 27:\n offscreenSubtreeWasHidden ||\n safelyDetachRef(deletedFiber, nearestMountedAncestor);\n var prevHostParent = hostParent,\n prevHostParentIsContainer = hostParentIsContainer;\n isSingletonScope(deletedFiber.type) &&\n ((hostParent = deletedFiber.stateNode),\n (hostParentIsContainer = !1));\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n runWithFiberInDEV(\n deletedFiber,\n releaseSingletonInstance,\n deletedFiber.stateNode\n );\n hostParent = prevHostParent;\n hostParentIsContainer = prevHostParentIsContainer;\n break;\n case 5:\n offscreenSubtreeWasHidden ||\n safelyDetachRef(deletedFiber, nearestMountedAncestor);\n case 6:\n prevHostParent = hostParent;\n prevHostParentIsContainer = hostParentIsContainer;\n hostParent = null;\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n hostParent = prevHostParent;\n hostParentIsContainer = prevHostParentIsContainer;\n if (null !== hostParent)\n if (hostParentIsContainer)\n try {\n runWithFiberInDEV(\n deletedFiber,\n removeChildFromContainer,\n hostParent,\n deletedFiber.stateNode\n );\n } catch (error) {\n captureCommitPhaseError(\n deletedFiber,\n nearestMountedAncestor,\n error\n );\n }\n else\n try {\n runWithFiberInDEV(\n deletedFiber,\n removeChild,\n hostParent,\n deletedFiber.stateNode\n );\n } catch (error) {\n captureCommitPhaseError(\n deletedFiber,\n nearestMountedAncestor,\n error\n );\n }\n break;\n case 18:\n null !== hostParent &&\n (hostParentIsContainer\n ? ((finishedRoot = hostParent),\n clearHydrationBoundary(\n 9 === finishedRoot.nodeType\n ? finishedRoot.body\n : \"HTML\" === finishedRoot.nodeName\n ? finishedRoot.ownerDocument.body\n : finishedRoot,\n deletedFiber.stateNode\n ),\n retryIfBlockedOn(finishedRoot))\n : clearHydrationBoundary(hostParent, deletedFiber.stateNode));\n break;\n case 4:\n prevHostParent = hostParent;\n prevHostParentIsContainer = hostParentIsContainer;\n hostParent = deletedFiber.stateNode.containerInfo;\n hostParentIsContainer = !0;\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n hostParent = prevHostParent;\n hostParentIsContainer = prevHostParentIsContainer;\n break;\n case 0:\n case 11:\n case 14:\n case 15:\n offscreenSubtreeWasHidden ||\n commitHookEffectListUnmount(\n Insertion,\n deletedFiber,\n nearestMountedAncestor\n );\n offscreenSubtreeWasHidden ||\n commitHookLayoutUnmountEffects(\n deletedFiber,\n nearestMountedAncestor,\n Layout\n );\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n break;\n case 1:\n offscreenSubtreeWasHidden ||\n (safelyDetachRef(deletedFiber, nearestMountedAncestor),\n (prevHostParent = deletedFiber.stateNode),\n \"function\" === typeof prevHostParent.componentWillUnmount &&\n safelyCallComponentWillUnmount(\n deletedFiber,\n nearestMountedAncestor,\n prevHostParent\n ));\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n break;\n case 21:\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n break;\n case 22:\n offscreenSubtreeWasHidden =\n (prevHostParent = offscreenSubtreeWasHidden) ||\n null !== deletedFiber.memoizedState;\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n offscreenSubtreeWasHidden = prevHostParent;\n break;\n default:\n recursivelyTraverseDeletionEffects(\n finishedRoot,\n nearestMountedAncestor,\n deletedFiber\n );\n }\n popComponentEffectStart(prevEffectStart);\n }\n function commitActivityHydrationCallbacks(finishedRoot, finishedWork) {\n if (\n null === finishedWork.memoizedState &&\n ((finishedRoot = finishedWork.alternate),\n null !== finishedRoot &&\n ((finishedRoot = finishedRoot.memoizedState), null !== finishedRoot))\n ) {\n finishedRoot = finishedRoot.dehydrated;\n try {\n runWithFiberInDEV(\n finishedWork,\n commitHydratedActivityInstance,\n finishedRoot\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n }\n function commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) {\n if (\n null === finishedWork.memoizedState &&\n ((finishedRoot = finishedWork.alternate),\n null !== finishedRoot &&\n ((finishedRoot = finishedRoot.memoizedState),\n null !== finishedRoot &&\n ((finishedRoot = finishedRoot.dehydrated), null !== finishedRoot)))\n )\n try {\n runWithFiberInDEV(\n finishedWork,\n commitHydratedSuspenseInstance,\n finishedRoot\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n function getRetryCache(finishedWork) {\n switch (finishedWork.tag) {\n case 31:\n case 13:\n case 19:\n var retryCache = finishedWork.stateNode;\n null === retryCache &&\n (retryCache = finishedWork.stateNode = new PossiblyWeakSet());\n return retryCache;\n case 22:\n return (\n (finishedWork = finishedWork.stateNode),\n (retryCache = finishedWork._retryCache),\n null === retryCache &&\n (retryCache = finishedWork._retryCache = new PossiblyWeakSet()),\n retryCache\n );\n default:\n throw Error(\n \"Unexpected Suspense handler tag (\" +\n finishedWork.tag +\n \"). This is a bug in React.\"\n );\n }\n }\n function attachSuspenseRetryListeners(finishedWork, wakeables) {\n var retryCache = getRetryCache(finishedWork);\n wakeables.forEach(function (wakeable) {\n var retry = resolveRetryWakeable.bind(null, finishedWork, wakeable);\n if (!retryCache.has(wakeable)) {\n retryCache.add(wakeable);\n if (isDevToolsPresent)\n if (null !== inProgressLanes && null !== inProgressRoot)\n restorePendingUpdaters(inProgressRoot, inProgressLanes);\n else\n throw Error(\n \"Expected finished root and lanes to be set. This is a bug in React.\"\n );\n wakeable.then(retry, retry);\n }\n });\n }\n function recursivelyTraverseMutationEffects(root$jscomp$0, parentFiber) {\n var deletions = parentFiber.deletions;\n if (null !== deletions)\n for (var i = 0; i < deletions.length; i++) {\n var root = root$jscomp$0,\n returnFiber = parentFiber,\n deletedFiber = deletions[i],\n prevEffectStart = pushComponentEffectStart(),\n parent = returnFiber;\n a: for (; null !== parent; ) {\n switch (parent.tag) {\n case 27:\n if (isSingletonScope(parent.type)) {\n hostParent = parent.stateNode;\n hostParentIsContainer = !1;\n break a;\n }\n break;\n case 5:\n hostParent = parent.stateNode;\n hostParentIsContainer = !1;\n break a;\n case 3:\n case 4:\n hostParent = parent.stateNode.containerInfo;\n hostParentIsContainer = !0;\n break a;\n }\n parent = parent.return;\n }\n if (null === hostParent)\n throw Error(\n \"Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.\"\n );\n commitDeletionEffectsOnFiber(root, returnFiber, deletedFiber);\n hostParent = null;\n hostParentIsContainer = !1;\n popComponentEffectStart(prevEffectStart);\n root = deletedFiber;\n returnFiber = root.alternate;\n null !== returnFiber && (returnFiber.return = null);\n root.return = null;\n }\n if (parentFiber.subtreeFlags & 13878)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n commitMutationEffectsOnFiber(parentFiber, root$jscomp$0),\n (parentFiber = parentFiber.sibling);\n }\n function commitMutationEffectsOnFiber(finishedWork, root) {\n var prevEffectStart = pushComponentEffectStart(),\n current = finishedWork.alternate,\n flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 14:\n case 15:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 4 &&\n (commitHookEffectListUnmount(\n Insertion | HasEffect,\n finishedWork,\n finishedWork.return\n ),\n commitHookEffectListMount(Insertion | HasEffect, finishedWork),\n commitHookLayoutUnmountEffects(\n finishedWork,\n finishedWork.return,\n Layout | HasEffect\n ));\n break;\n case 1:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 512 &&\n (offscreenSubtreeWasHidden ||\n null === current ||\n safelyDetachRef(current, current.return));\n flags & 64 &&\n offscreenSubtreeIsHidden &&\n ((finishedWork = finishedWork.updateQueue),\n null !== finishedWork &&\n ((flags = finishedWork.callbacks),\n null !== flags &&\n ((current = finishedWork.shared.hiddenCallbacks),\n (finishedWork.shared.hiddenCallbacks =\n null === current ? flags : current.concat(flags)))));\n break;\n case 26:\n var hoistableRoot = currentHoistableRoot;\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 512 &&\n (offscreenSubtreeWasHidden ||\n null === current ||\n safelyDetachRef(current, current.return));\n if (flags & 4) {\n var currentResource =\n null !== current ? current.memoizedState : null;\n flags = finishedWork.memoizedState;\n if (null === current)\n if (null === flags)\n if (null === finishedWork.stateNode) {\n a: {\n flags = finishedWork.type;\n current = finishedWork.memoizedProps;\n hoistableRoot =\n hoistableRoot.ownerDocument || hoistableRoot;\n b: switch (flags) {\n case \"title\":\n currentResource =\n hoistableRoot.getElementsByTagName(\"title\")[0];\n if (\n !currentResource ||\n currentResource[internalHoistableMarker] ||\n currentResource[internalInstanceKey] ||\n currentResource.namespaceURI === SVG_NAMESPACE ||\n currentResource.hasAttribute(\"itemprop\")\n )\n (currentResource =\n hoistableRoot.createElement(flags)),\n hoistableRoot.head.insertBefore(\n currentResource,\n hoistableRoot.querySelector(\"head > title\")\n );\n setInitialProperties(currentResource, flags, current);\n currentResource[internalInstanceKey] = finishedWork;\n markNodeAsHoistable(currentResource);\n flags = currentResource;\n break a;\n case \"link\":\n var maybeNodes = getHydratableHoistableCache(\n \"link\",\n \"href\",\n hoistableRoot\n ).get(flags + (current.href || \"\"));\n if (maybeNodes)\n for (var i = 0; i < maybeNodes.length; i++)\n if (\n ((currentResource = maybeNodes[i]),\n currentResource.getAttribute(\"href\") ===\n (null == current.href || \"\" === current.href\n ? null\n : current.href) &&\n currentResource.getAttribute(\"rel\") ===\n (null == current.rel ? null : current.rel) &&\n currentResource.getAttribute(\"title\") ===\n (null == current.title\n ? null\n : current.title) &&\n currentResource.getAttribute(\"crossorigin\") ===\n (null == current.crossOrigin\n ? null\n : current.crossOrigin))\n ) {\n maybeNodes.splice(i, 1);\n break b;\n }\n currentResource = hoistableRoot.createElement(flags);\n setInitialProperties(currentResource, flags, current);\n hoistableRoot.head.appendChild(currentResource);\n break;\n case \"meta\":\n if (\n (maybeNodes = getHydratableHoistableCache(\n \"meta\",\n \"content\",\n hoistableRoot\n ).get(flags + (current.content || \"\")))\n )\n for (i = 0; i < maybeNodes.length; i++)\n if (\n ((currentResource = maybeNodes[i]),\n checkAttributeStringCoercion(\n current.content,\n \"content\"\n ),\n currentResource.getAttribute(\"content\") ===\n (null == current.content\n ? null\n : \"\" + current.content) &&\n currentResource.getAttribute(\"name\") ===\n (null == current.name\n ? null\n : current.name) &&\n currentResource.getAttribute(\"property\") ===\n (null == current.property\n ? null\n : current.property) &&\n currentResource.getAttribute(\"http-equiv\") ===\n (null == current.httpEquiv\n ? null\n : current.httpEquiv) &&\n currentResource.getAttribute(\"charset\") ===\n (null == current.charSet\n ? null\n : current.charSet))\n ) {\n maybeNodes.splice(i, 1);\n break b;\n }\n currentResource = hoistableRoot.createElement(flags);\n setInitialProperties(currentResource, flags, current);\n hoistableRoot.head.appendChild(currentResource);\n break;\n default:\n throw Error(\n 'getNodesForType encountered a type it did not expect: \"' +\n flags +\n '\". This is a bug in React.'\n );\n }\n currentResource[internalInstanceKey] = finishedWork;\n markNodeAsHoistable(currentResource);\n flags = currentResource;\n }\n finishedWork.stateNode = flags;\n } else\n mountHoistable(\n hoistableRoot,\n finishedWork.type,\n finishedWork.stateNode\n );\n else\n finishedWork.stateNode = acquireResource(\n hoistableRoot,\n flags,\n finishedWork.memoizedProps\n );\n else\n currentResource !== flags\n ? (null === currentResource\n ? null !== current.stateNode &&\n ((current = current.stateNode),\n current.parentNode.removeChild(current))\n : currentResource.count--,\n null === flags\n ? mountHoistable(\n hoistableRoot,\n finishedWork.type,\n finishedWork.stateNode\n )\n : acquireResource(\n hoistableRoot,\n flags,\n finishedWork.memoizedProps\n ))\n : null === flags &&\n null !== finishedWork.stateNode &&\n commitHostUpdate(\n finishedWork,\n finishedWork.memoizedProps,\n current.memoizedProps\n );\n }\n break;\n case 27:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 512 &&\n (offscreenSubtreeWasHidden ||\n null === current ||\n safelyDetachRef(current, current.return));\n null !== current &&\n flags & 4 &&\n commitHostUpdate(\n finishedWork,\n finishedWork.memoizedProps,\n current.memoizedProps\n );\n break;\n case 5:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 512 &&\n (offscreenSubtreeWasHidden ||\n null === current ||\n safelyDetachRef(current, current.return));\n if (finishedWork.flags & 32) {\n hoistableRoot = finishedWork.stateNode;\n try {\n runWithFiberInDEV(finishedWork, resetTextContent, hoistableRoot);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n flags & 4 &&\n null != finishedWork.stateNode &&\n ((hoistableRoot = finishedWork.memoizedProps),\n commitHostUpdate(\n finishedWork,\n hoistableRoot,\n null !== current ? current.memoizedProps : hoistableRoot\n ));\n flags & 1024 &&\n ((needsFormReset = !0),\n \"form\" !== finishedWork.type &&\n console.error(\n \"Unexpected host component type. Expected a form. This is a bug in React.\"\n ));\n break;\n case 6:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n if (flags & 4) {\n if (null === finishedWork.stateNode)\n throw Error(\n \"This should have a text node initialized. This error is likely caused by a bug in React. Please file an issue.\"\n );\n flags = finishedWork.memoizedProps;\n current = null !== current ? current.memoizedProps : flags;\n hoistableRoot = finishedWork.stateNode;\n try {\n runWithFiberInDEV(\n finishedWork,\n commitTextUpdate,\n hoistableRoot,\n current,\n flags\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n break;\n case 3:\n hoistableRoot = pushNestedEffectDurations();\n tagCaches = null;\n currentResource = currentHoistableRoot;\n currentHoistableRoot = getHoistableRoot(root.containerInfo);\n recursivelyTraverseMutationEffects(root, finishedWork);\n currentHoistableRoot = currentResource;\n commitReconciliationEffects(finishedWork);\n if (\n flags & 4 &&\n null !== current &&\n current.memoizedState.isDehydrated\n )\n try {\n runWithFiberInDEV(\n finishedWork,\n commitHydratedContainer,\n root.containerInfo\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n needsFormReset &&\n ((needsFormReset = !1), recursivelyResetForms(finishedWork));\n root.effectDuration += popNestedEffectDurations(hoistableRoot);\n break;\n case 4:\n flags = currentHoistableRoot;\n currentHoistableRoot = getHoistableRoot(\n finishedWork.stateNode.containerInfo\n );\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n currentHoistableRoot = flags;\n break;\n case 12:\n flags = pushNestedEffectDurations();\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n finishedWork.stateNode.effectDuration +=\n bubbleNestedEffectDurations(flags);\n break;\n case 31:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 4 &&\n ((flags = finishedWork.updateQueue),\n null !== flags &&\n ((finishedWork.updateQueue = null),\n attachSuspenseRetryListeners(finishedWork, flags)));\n break;\n case 13:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n finishedWork.child.flags & 8192 &&\n (null !== finishedWork.memoizedState) !==\n (null !== current && null !== current.memoizedState) &&\n (globalMostRecentFallbackTime = now$1());\n flags & 4 &&\n ((flags = finishedWork.updateQueue),\n null !== flags &&\n ((finishedWork.updateQueue = null),\n attachSuspenseRetryListeners(finishedWork, flags)));\n break;\n case 22:\n hoistableRoot = null !== finishedWork.memoizedState;\n var wasHidden = null !== current && null !== current.memoizedState,\n prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden,\n prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n offscreenSubtreeIsHidden =\n prevOffscreenSubtreeIsHidden || hoistableRoot;\n offscreenSubtreeWasHidden =\n prevOffscreenSubtreeWasHidden || wasHidden;\n recursivelyTraverseMutationEffects(root, finishedWork);\n offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden;\n commitReconciliationEffects(finishedWork);\n if (flags & 8192)\n a: for (\n root = finishedWork.stateNode,\n root._visibility = hoistableRoot\n ? root._visibility & ~OffscreenVisible\n : root._visibility | OffscreenVisible,\n hoistableRoot &&\n (null === current ||\n wasHidden ||\n offscreenSubtreeIsHidden ||\n offscreenSubtreeWasHidden ||\n recursivelyTraverseDisappearLayoutEffects(finishedWork)),\n current = null,\n root = finishedWork;\n ;\n\n ) {\n if (5 === root.tag || 26 === root.tag) {\n if (null === current) {\n wasHidden = current = root;\n try {\n (currentResource = wasHidden.stateNode),\n hoistableRoot\n ? runWithFiberInDEV(\n wasHidden,\n hideInstance,\n currentResource\n )\n : runWithFiberInDEV(\n wasHidden,\n unhideInstance,\n wasHidden.stateNode,\n wasHidden.memoizedProps\n );\n } catch (error) {\n captureCommitPhaseError(wasHidden, wasHidden.return, error);\n }\n }\n } else if (6 === root.tag) {\n if (null === current) {\n wasHidden = root;\n try {\n (maybeNodes = wasHidden.stateNode),\n hoistableRoot\n ? runWithFiberInDEV(\n wasHidden,\n hideTextInstance,\n maybeNodes\n )\n : runWithFiberInDEV(\n wasHidden,\n unhideTextInstance,\n maybeNodes,\n wasHidden.memoizedProps\n );\n } catch (error) {\n captureCommitPhaseError(wasHidden, wasHidden.return, error);\n }\n }\n } else if (18 === root.tag) {\n if (null === current) {\n wasHidden = root;\n try {\n (i = wasHidden.stateNode),\n hoistableRoot\n ? runWithFiberInDEV(\n wasHidden,\n hideDehydratedBoundary,\n i\n )\n : runWithFiberInDEV(\n wasHidden,\n unhideDehydratedBoundary,\n wasHidden.stateNode\n );\n } catch (error) {\n captureCommitPhaseError(wasHidden, wasHidden.return, error);\n }\n }\n } else if (\n ((22 !== root.tag && 23 !== root.tag) ||\n null === root.memoizedState ||\n root === finishedWork) &&\n null !== root.child\n ) {\n root.child.return = root;\n root = root.child;\n continue;\n }\n if (root === finishedWork) break a;\n for (; null === root.sibling; ) {\n if (null === root.return || root.return === finishedWork)\n break a;\n current === root && (current = null);\n root = root.return;\n }\n current === root && (current = null);\n root.sibling.return = root.return;\n root = root.sibling;\n }\n flags & 4 &&\n ((flags = finishedWork.updateQueue),\n null !== flags &&\n ((current = flags.retryQueue),\n null !== current &&\n ((flags.retryQueue = null),\n attachSuspenseRetryListeners(finishedWork, current))));\n break;\n case 19:\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n flags & 4 &&\n ((flags = finishedWork.updateQueue),\n null !== flags &&\n ((finishedWork.updateQueue = null),\n attachSuspenseRetryListeners(finishedWork, flags)));\n break;\n case 30:\n break;\n case 21:\n break;\n default:\n recursivelyTraverseMutationEffects(root, finishedWork),\n commitReconciliationEffects(finishedWork);\n }\n popComponentEffectStart(prevEffectStart);\n }\n function commitReconciliationEffects(finishedWork) {\n var flags = finishedWork.flags;\n if (flags & 2) {\n try {\n runWithFiberInDEV(finishedWork, commitPlacement, finishedWork);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n finishedWork.flags &= -3;\n }\n flags & 4096 && (finishedWork.flags &= -4097);\n }\n function recursivelyResetForms(parentFiber) {\n if (parentFiber.subtreeFlags & 1024)\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n var fiber = parentFiber;\n recursivelyResetForms(fiber);\n 5 === fiber.tag && fiber.flags & 1024 && fiber.stateNode.reset();\n parentFiber = parentFiber.sibling;\n }\n }\n function recursivelyTraverseLayoutEffects(root, parentFiber) {\n if (parentFiber.subtreeFlags & 8772)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n commitLayoutEffectOnFiber(root, parentFiber.alternate, parentFiber),\n (parentFiber = parentFiber.sibling);\n }\n function disappearLayoutEffects(finishedWork) {\n var prevEffectStart = pushComponentEffectStart();\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 14:\n case 15:\n commitHookLayoutUnmountEffects(\n finishedWork,\n finishedWork.return,\n Layout\n );\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n case 1:\n safelyDetachRef(finishedWork, finishedWork.return);\n var instance = finishedWork.stateNode;\n \"function\" === typeof instance.componentWillUnmount &&\n safelyCallComponentWillUnmount(\n finishedWork,\n finishedWork.return,\n instance\n );\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n case 27:\n runWithFiberInDEV(\n finishedWork,\n releaseSingletonInstance,\n finishedWork.stateNode\n );\n case 26:\n case 5:\n safelyDetachRef(finishedWork, finishedWork.return);\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n case 22:\n null === finishedWork.memoizedState &&\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n case 30:\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n default:\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n }\n popComponentEffectStart(prevEffectStart);\n }\n function recursivelyTraverseDisappearLayoutEffects(parentFiber) {\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n disappearLayoutEffects(parentFiber),\n (parentFiber = parentFiber.sibling);\n }\n function reappearLayoutEffects(\n finishedRoot,\n current,\n finishedWork,\n includeWorkInProgressEffects\n ) {\n var prevEffectStart = pushComponentEffectStart(),\n flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n commitHookLayoutEffects(finishedWork, Layout);\n break;\n case 1:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n current = finishedWork.stateNode;\n \"function\" === typeof current.componentDidMount &&\n runWithFiberInDEV(\n finishedWork,\n callComponentDidMountInDEV,\n finishedWork,\n current\n );\n current = finishedWork.updateQueue;\n if (null !== current) {\n finishedRoot = finishedWork.stateNode;\n try {\n runWithFiberInDEV(\n finishedWork,\n commitHiddenCallbacks,\n current,\n finishedRoot\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n includeWorkInProgressEffects &&\n flags & 64 &&\n commitClassCallbacks(finishedWork);\n safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 27:\n commitHostSingletonAcquisition(finishedWork);\n case 26:\n case 5:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n includeWorkInProgressEffects &&\n null === current &&\n flags & 4 &&\n commitHostMount(finishedWork);\n safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 12:\n if (includeWorkInProgressEffects && flags & 4) {\n flags = pushNestedEffectDurations();\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n includeWorkInProgressEffects = finishedWork.stateNode;\n includeWorkInProgressEffects.effectDuration +=\n bubbleNestedEffectDurations(flags);\n try {\n runWithFiberInDEV(\n finishedWork,\n commitProfiler,\n finishedWork,\n current,\n commitStartTime,\n includeWorkInProgressEffects.effectDuration\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n } else\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n break;\n case 31:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n includeWorkInProgressEffects &&\n flags & 4 &&\n commitActivityHydrationCallbacks(finishedRoot, finishedWork);\n break;\n case 13:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n includeWorkInProgressEffects &&\n flags & 4 &&\n commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n break;\n case 22:\n null === finishedWork.memoizedState &&\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n safelyAttachRef(finishedWork, finishedWork.return);\n break;\n case 30:\n break;\n default:\n recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n finishedWork,\n includeWorkInProgressEffects\n );\n }\n popComponentEffectStart(prevEffectStart);\n }\n function recursivelyTraverseReappearLayoutEffects(\n finishedRoot,\n parentFiber,\n includeWorkInProgressEffects\n ) {\n includeWorkInProgressEffects =\n includeWorkInProgressEffects && 0 !== (parentFiber.subtreeFlags & 8772);\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n reappearLayoutEffects(\n finishedRoot,\n parentFiber.alternate,\n parentFiber,\n includeWorkInProgressEffects\n ),\n (parentFiber = parentFiber.sibling);\n }\n function commitOffscreenPassiveMountEffects(current, finishedWork) {\n var previousCache = null;\n null !== current &&\n null !== current.memoizedState &&\n null !== current.memoizedState.cachePool &&\n (previousCache = current.memoizedState.cachePool.pool);\n current = null;\n null !== finishedWork.memoizedState &&\n null !== finishedWork.memoizedState.cachePool &&\n (current = finishedWork.memoizedState.cachePool.pool);\n current !== previousCache &&\n (null != current && retainCache(current),\n null != previousCache && releaseCache(previousCache));\n }\n function commitCachePassiveMountEffect(current, finishedWork) {\n current = null;\n null !== finishedWork.alternate &&\n (current = finishedWork.alternate.memoizedState.cache);\n finishedWork = finishedWork.memoizedState.cache;\n finishedWork !== current &&\n (retainCache(finishedWork), null != current && releaseCache(current));\n }\n function recursivelyTraversePassiveMountEffects(\n root,\n parentFiber,\n committedLanes,\n committedTransitions\n ) {\n if (parentFiber.subtreeFlags & 10256)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n commitPassiveMountOnFiber(\n root,\n parentFiber,\n committedLanes,\n committedTransitions\n ),\n (parentFiber = parentFiber.sibling);\n }\n function commitPassiveMountOnFiber(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n ) {\n var prevEffectStart = pushComponentEffectStart(),\n flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n flags & 2048 &&\n commitHookPassiveMountEffects(finishedWork, Passive | HasEffect);\n break;\n case 1:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n break;\n case 3:\n var prevProfilerEffectDuration = pushNestedEffectDurations();\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n flags & 2048 &&\n ((committedLanes = null),\n null !== finishedWork.alternate &&\n (committedLanes = finishedWork.alternate.memoizedState.cache),\n (finishedWork = finishedWork.memoizedState.cache),\n finishedWork !== committedLanes &&\n (retainCache(finishedWork),\n null != committedLanes && releaseCache(committedLanes)));\n finishedRoot.passiveEffectDuration += popNestedEffectDurations(\n prevProfilerEffectDuration\n );\n break;\n case 12:\n if (flags & 2048) {\n flags = pushNestedEffectDurations();\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n finishedRoot = finishedWork.stateNode;\n finishedRoot.passiveEffectDuration +=\n bubbleNestedEffectDurations(flags);\n try {\n runWithFiberInDEV(\n finishedWork,\n commitProfilerPostCommitImpl,\n finishedWork,\n finishedWork.alternate,\n commitStartTime,\n finishedRoot.passiveEffectDuration\n );\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n } else\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n break;\n case 31:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n break;\n case 13:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n break;\n case 23:\n break;\n case 22:\n prevProfilerEffectDuration = finishedWork.stateNode;\n var _current = finishedWork.alternate;\n null !== finishedWork.memoizedState\n ? prevProfilerEffectDuration._visibility &\n OffscreenPassiveEffectsConnected\n ? recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n )\n : recursivelyTraverseAtomicPassiveEffects(\n finishedRoot,\n finishedWork\n )\n : prevProfilerEffectDuration._visibility &\n OffscreenPassiveEffectsConnected\n ? recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n )\n : ((prevProfilerEffectDuration._visibility |=\n OffscreenPassiveEffectsConnected),\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n 0 !== (finishedWork.subtreeFlags & 10256)\n ));\n flags & 2048 &&\n commitOffscreenPassiveMountEffects(_current, finishedWork);\n break;\n case 24:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n flags & 2048 &&\n commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n break;\n default:\n recursivelyTraversePassiveMountEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions\n );\n }\n popComponentEffectStart(prevEffectStart);\n }\n function recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n parentFiber,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n ) {\n includeWorkInProgressEffects =\n includeWorkInProgressEffects &&\n 0 !== (parentFiber.subtreeFlags & 10256);\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n reconnectPassiveEffects(\n finishedRoot,\n parentFiber,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n ),\n (parentFiber = parentFiber.sibling);\n }\n function reconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n ) {\n var prevEffectStart = pushComponentEffectStart(),\n flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n );\n commitHookPassiveMountEffects(finishedWork, Passive);\n break;\n case 23:\n break;\n case 22:\n var _instance2 = finishedWork.stateNode;\n null !== finishedWork.memoizedState\n ? _instance2._visibility & OffscreenPassiveEffectsConnected\n ? recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n )\n : recursivelyTraverseAtomicPassiveEffects(\n finishedRoot,\n finishedWork\n )\n : ((_instance2._visibility |= OffscreenPassiveEffectsConnected),\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n ));\n includeWorkInProgressEffects &&\n flags & 2048 &&\n commitOffscreenPassiveMountEffects(\n finishedWork.alternate,\n finishedWork\n );\n break;\n case 24:\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n );\n includeWorkInProgressEffects &&\n flags & 2048 &&\n commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n break;\n default:\n recursivelyTraverseReconnectPassiveEffects(\n finishedRoot,\n finishedWork,\n committedLanes,\n committedTransitions,\n includeWorkInProgressEffects\n );\n }\n popComponentEffectStart(prevEffectStart);\n }\n function recursivelyTraverseAtomicPassiveEffects(\n finishedRoot$jscomp$0,\n parentFiber\n ) {\n if (parentFiber.subtreeFlags & 10256)\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n var finishedRoot = finishedRoot$jscomp$0,\n finishedWork = parentFiber,\n flags = finishedWork.flags;\n switch (finishedWork.tag) {\n case 22:\n recursivelyTraverseAtomicPassiveEffects(\n finishedRoot,\n finishedWork\n );\n flags & 2048 &&\n commitOffscreenPassiveMountEffects(\n finishedWork.alternate,\n finishedWork\n );\n break;\n case 24:\n recursivelyTraverseAtomicPassiveEffects(\n finishedRoot,\n finishedWork\n );\n flags & 2048 &&\n commitCachePassiveMountEffect(\n finishedWork.alternate,\n finishedWork\n );\n break;\n default:\n recursivelyTraverseAtomicPassiveEffects(\n finishedRoot,\n finishedWork\n );\n }\n parentFiber = parentFiber.sibling;\n }\n }\n function recursivelyAccumulateSuspenseyCommit(parentFiber) {\n if (parentFiber.subtreeFlags & suspenseyCommitFlag)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n accumulateSuspenseyCommitOnFiber(parentFiber),\n (parentFiber = parentFiber.sibling);\n }\n function accumulateSuspenseyCommitOnFiber(fiber) {\n switch (fiber.tag) {\n case 26:\n recursivelyAccumulateSuspenseyCommit(fiber);\n fiber.flags & suspenseyCommitFlag &&\n null !== fiber.memoizedState &&\n suspendResource(\n currentHoistableRoot,\n fiber.memoizedState,\n fiber.memoizedProps\n );\n break;\n case 5:\n recursivelyAccumulateSuspenseyCommit(fiber);\n break;\n case 3:\n case 4:\n var previousHoistableRoot = currentHoistableRoot;\n currentHoistableRoot = getHoistableRoot(\n fiber.stateNode.containerInfo\n );\n recursivelyAccumulateSuspenseyCommit(fiber);\n currentHoistableRoot = previousHoistableRoot;\n break;\n case 22:\n null === fiber.memoizedState &&\n ((previousHoistableRoot = fiber.alternate),\n null !== previousHoistableRoot &&\n null !== previousHoistableRoot.memoizedState\n ? ((previousHoistableRoot = suspenseyCommitFlag),\n (suspenseyCommitFlag = 16777216),\n recursivelyAccumulateSuspenseyCommit(fiber),\n (suspenseyCommitFlag = previousHoistableRoot))\n : recursivelyAccumulateSuspenseyCommit(fiber));\n break;\n default:\n recursivelyAccumulateSuspenseyCommit(fiber);\n }\n }\n function detachAlternateSiblings(parentFiber) {\n var previousFiber = parentFiber.alternate;\n if (\n null !== previousFiber &&\n ((parentFiber = previousFiber.child), null !== parentFiber)\n ) {\n previousFiber.child = null;\n do\n (previousFiber = parentFiber.sibling),\n (parentFiber.sibling = null),\n (parentFiber = previousFiber);\n while (null !== parentFiber);\n }\n }\n function recursivelyTraversePassiveUnmountEffects(parentFiber) {\n var deletions = parentFiber.deletions;\n if (0 !== (parentFiber.flags & 16)) {\n if (null !== deletions)\n for (var i = 0; i < deletions.length; i++) {\n var childToDelete = deletions[i],\n prevEffectStart = pushComponentEffectStart();\n nextEffect = childToDelete;\n commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n childToDelete,\n parentFiber\n );\n popComponentEffectStart(prevEffectStart);\n }\n detachAlternateSiblings(parentFiber);\n }\n if (parentFiber.subtreeFlags & 10256)\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n commitPassiveUnmountOnFiber(parentFiber),\n (parentFiber = parentFiber.sibling);\n }\n function commitPassiveUnmountOnFiber(finishedWork) {\n var prevEffectStart = pushComponentEffectStart();\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n recursivelyTraversePassiveUnmountEffects(finishedWork);\n finishedWork.flags & 2048 &&\n commitHookPassiveUnmountEffects(\n finishedWork,\n finishedWork.return,\n Passive | HasEffect\n );\n break;\n case 3:\n var prevProfilerEffectDuration = pushNestedEffectDurations();\n recursivelyTraversePassiveUnmountEffects(finishedWork);\n finishedWork.stateNode.passiveEffectDuration +=\n popNestedEffectDurations(prevProfilerEffectDuration);\n break;\n case 12:\n prevProfilerEffectDuration = pushNestedEffectDurations();\n recursivelyTraversePassiveUnmountEffects(finishedWork);\n finishedWork.stateNode.passiveEffectDuration +=\n bubbleNestedEffectDurations(prevProfilerEffectDuration);\n break;\n case 22:\n prevProfilerEffectDuration = finishedWork.stateNode;\n null !== finishedWork.memoizedState &&\n prevProfilerEffectDuration._visibility &\n OffscreenPassiveEffectsConnected &&\n (null === finishedWork.return || 13 !== finishedWork.return.tag)\n ? ((prevProfilerEffectDuration._visibility &=\n ~OffscreenPassiveEffectsConnected),\n recursivelyTraverseDisconnectPassiveEffects(finishedWork))\n : recursivelyTraversePassiveUnmountEffects(finishedWork);\n break;\n default:\n recursivelyTraversePassiveUnmountEffects(finishedWork);\n }\n popComponentEffectStart(prevEffectStart);\n }\n function recursivelyTraverseDisconnectPassiveEffects(parentFiber) {\n var deletions = parentFiber.deletions;\n if (0 !== (parentFiber.flags & 16)) {\n if (null !== deletions)\n for (var i = 0; i < deletions.length; i++) {\n var childToDelete = deletions[i],\n prevEffectStart = pushComponentEffectStart();\n nextEffect = childToDelete;\n commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n childToDelete,\n parentFiber\n );\n popComponentEffectStart(prevEffectStart);\n }\n detachAlternateSiblings(parentFiber);\n }\n for (parentFiber = parentFiber.child; null !== parentFiber; )\n disconnectPassiveEffect(parentFiber),\n (parentFiber = parentFiber.sibling);\n }\n function disconnectPassiveEffect(finishedWork) {\n var prevEffectStart = pushComponentEffectStart();\n switch (finishedWork.tag) {\n case 0:\n case 11:\n case 15:\n commitHookPassiveUnmountEffects(\n finishedWork,\n finishedWork.return,\n Passive\n );\n recursivelyTraverseDisconnectPassiveEffects(finishedWork);\n break;\n case 22:\n var instance = finishedWork.stateNode;\n instance._visibility & OffscreenPassiveEffectsConnected &&\n ((instance._visibility &= ~OffscreenPassiveEffectsConnected),\n recursivelyTraverseDisconnectPassiveEffects(finishedWork));\n break;\n default:\n recursivelyTraverseDisconnectPassiveEffects(finishedWork);\n }\n popComponentEffectStart(prevEffectStart);\n }\n function commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n deletedSubtreeRoot,\n nearestMountedAncestor$jscomp$0\n ) {\n for (; null !== nextEffect; ) {\n var fiber = nextEffect,\n current = fiber,\n nearestMountedAncestor = nearestMountedAncestor$jscomp$0,\n prevEffectStart = pushComponentEffectStart();\n switch (current.tag) {\n case 0:\n case 11:\n case 15:\n commitHookPassiveUnmountEffects(\n current,\n nearestMountedAncestor,\n Passive\n );\n break;\n case 23:\n case 22:\n null !== current.memoizedState &&\n null !== current.memoizedState.cachePool &&\n ((current = current.memoizedState.cachePool.pool),\n null != current && retainCache(current));\n break;\n case 24:\n releaseCache(current.memoizedState.cache);\n }\n popComponentEffectStart(prevEffectStart);\n prevEffectStart = fiber.child;\n if (null !== prevEffectStart)\n (prevEffectStart.return = fiber), (nextEffect = prevEffectStart);\n else\n a: for (fiber = deletedSubtreeRoot; null !== nextEffect; ) {\n prevEffectStart = nextEffect;\n current = prevEffectStart.sibling;\n nearestMountedAncestor = prevEffectStart.return;\n detachFiberAfterEffects(prevEffectStart);\n if (prevEffectStart === fiber) {\n nextEffect = null;\n break a;\n }\n if (null !== current) {\n current.return = nearestMountedAncestor;\n nextEffect = current;\n break a;\n }\n nextEffect = nearestMountedAncestor;\n }\n }\n }\n function onCommitRoot() {\n commitHooks.forEach(function (commitHook) {\n return commitHook();\n });\n }\n function isConcurrentActEnvironment() {\n var isReactActEnvironmentGlobal =\n \"undefined\" !== typeof IS_REACT_ACT_ENVIRONMENT\n ? IS_REACT_ACT_ENVIRONMENT\n : void 0;\n isReactActEnvironmentGlobal ||\n null === ReactSharedInternals.actQueue ||\n console.error(\n \"The current testing environment is not configured to support act(...)\"\n );\n return isReactActEnvironmentGlobal;\n }\n function requestUpdateLane(fiber) {\n if (\n (executionContext & RenderContext) !== NoContext &&\n 0 !== workInProgressRootRenderLanes\n )\n return workInProgressRootRenderLanes & -workInProgressRootRenderLanes;\n var transition = ReactSharedInternals.T;\n return null !== transition\n ? (transition._updatedFibers || (transition._updatedFibers = new Set()),\n transition._updatedFibers.add(fiber),\n requestTransitionLane())\n : resolveUpdatePriority();\n }\n function requestDeferredLane() {\n 0 === workInProgressDeferredLane &&\n (workInProgressDeferredLane =\n 0 === (workInProgressRootRenderLanes & 536870912) || isHydrating\n ? claimNextTransitionLane()\n : 536870912);\n var suspenseHandler = suspenseHandlerStackCursor.current;\n null !== suspenseHandler && (suspenseHandler.flags |= 32);\n return workInProgressDeferredLane;\n }\n function scheduleUpdateOnFiber(root, fiber, lane) {\n isRunningInsertionEffect &&\n console.error(\"useInsertionEffect must not schedule updates.\");\n isFlushingPassiveEffects && (didScheduleUpdateDuringPassiveEffects = !0);\n if (\n (root === workInProgressRoot &&\n (workInProgressSuspendedReason === SuspendedOnData ||\n workInProgressSuspendedReason === SuspendedOnAction)) ||\n null !== root.cancelPendingCommit\n )\n prepareFreshStack(root, 0),\n markRootSuspended(\n root,\n workInProgressRootRenderLanes,\n workInProgressDeferredLane,\n !1\n );\n markRootUpdated$1(root, lane);\n if (\n (executionContext & RenderContext) !== NoContext &&\n root === workInProgressRoot\n ) {\n if (isRendering)\n switch (fiber.tag) {\n case 0:\n case 11:\n case 15:\n root =\n (workInProgress && getComponentNameFromFiber(workInProgress)) ||\n \"Unknown\";\n didWarnAboutUpdateInRenderForAnotherComponent.has(root) ||\n (didWarnAboutUpdateInRenderForAnotherComponent.add(root),\n (fiber = getComponentNameFromFiber(fiber) || \"Unknown\"),\n console.error(\n \"Cannot update a component (`%s`) while rendering a different component (`%s`). To locate the bad setState() call inside `%s`, follow the stack trace as described in https://react.dev/link/setstate-in-render\",\n fiber,\n root,\n root\n ));\n break;\n case 1:\n didWarnAboutUpdateInRender ||\n (console.error(\n \"Cannot update during an existing state transition (such as within `render`). Render methods should be a pure function of props and state.\"\n ),\n (didWarnAboutUpdateInRender = !0));\n }\n } else\n isDevToolsPresent && addFiberToLanesMap(root, fiber, lane),\n warnIfUpdatesNotWrappedWithActDEV(fiber),\n root === workInProgressRoot &&\n ((executionContext & RenderContext) === NoContext &&\n (workInProgressRootInterleavedUpdatedLanes |= lane),\n workInProgressRootExitStatus === RootSuspendedWithDelay &&\n markRootSuspended(\n root,\n workInProgressRootRenderLanes,\n workInProgressDeferredLane,\n !1\n )),\n ensureRootIsScheduled(root);\n }\n function performWorkOnRoot(root, lanes, forceSync) {\n if ((executionContext & (RenderContext | CommitContext)) !== NoContext)\n throw Error(\"Should not already be working.\");\n var shouldTimeSlice =\n (!forceSync &&\n 0 === (lanes & 124) &&\n 0 === (lanes & root.expiredLanes)) ||\n checkIfRootIsPrerendering(root, lanes),\n exitStatus = shouldTimeSlice\n ? renderRootConcurrent(root, lanes)\n : renderRootSync(root, lanes, !0),\n renderWasConcurrent = shouldTimeSlice;\n do {\n if (exitStatus === RootInProgress) {\n workInProgressRootIsPrerendering &&\n !shouldTimeSlice &&\n markRootSuspended(root, lanes, 0, !1);\n break;\n } else {\n forceSync = root.current.alternate;\n if (\n renderWasConcurrent &&\n !isRenderConsistentWithExternalStores(forceSync)\n ) {\n exitStatus = renderRootSync(root, lanes, !1);\n renderWasConcurrent = !1;\n continue;\n }\n if (exitStatus === RootErrored) {\n renderWasConcurrent = lanes;\n if (root.errorRecoveryDisabledLanes & renderWasConcurrent)\n var errorRetryLanes = 0;\n else\n (errorRetryLanes = root.pendingLanes & -536870913),\n (errorRetryLanes =\n 0 !== errorRetryLanes\n ? errorRetryLanes\n : errorRetryLanes & 536870912\n ? 536870912\n : 0);\n if (0 !== errorRetryLanes) {\n lanes = errorRetryLanes;\n a: {\n exitStatus = root;\n var errorRetryLanes$jscomp$0 = errorRetryLanes;\n errorRetryLanes = workInProgressRootConcurrentErrors;\n var wasRootDehydrated =\n exitStatus.current.memoizedState.isDehydrated;\n wasRootDehydrated &&\n (prepareFreshStack(\n exitStatus,\n errorRetryLanes$jscomp$0\n ).flags |= 256);\n errorRetryLanes$jscomp$0 = renderRootSync(\n exitStatus,\n errorRetryLanes$jscomp$0,\n !1\n );\n if (errorRetryLanes$jscomp$0 !== RootErrored) {\n if (\n workInProgressRootDidAttachPingListener &&\n !wasRootDehydrated\n ) {\n exitStatus.errorRecoveryDisabledLanes |=\n renderWasConcurrent;\n workInProgressRootInterleavedUpdatedLanes |=\n renderWasConcurrent;\n exitStatus = RootSuspendedWithDelay;\n break a;\n }\n exitStatus = workInProgressRootRecoverableErrors;\n workInProgressRootRecoverableErrors = errorRetryLanes;\n null !== exitStatus &&\n (null === workInProgressRootRecoverableErrors\n ? (workInProgressRootRecoverableErrors = exitStatus)\n : workInProgressRootRecoverableErrors.push.apply(\n workInProgressRootRecoverableErrors,\n exitStatus\n ));\n }\n exitStatus = errorRetryLanes$jscomp$0;\n }\n renderWasConcurrent = !1;\n if (exitStatus !== RootErrored) continue;\n }\n }\n if (exitStatus === RootFatalErrored) {\n prepareFreshStack(root, 0);\n markRootSuspended(root, lanes, 0, !0);\n break;\n }\n a: {\n shouldTimeSlice = root;\n switch (exitStatus) {\n case RootInProgress:\n case RootFatalErrored:\n throw Error(\"Root did not complete. This is a bug in React.\");\n case RootSuspendedWithDelay:\n if ((lanes & 4194048) !== lanes) break;\n case RootSuspendedAtTheShell:\n markRootSuspended(\n shouldTimeSlice,\n lanes,\n workInProgressDeferredLane,\n !workInProgressRootDidSkipSuspendedSiblings\n );\n break a;\n case RootErrored:\n workInProgressRootRecoverableErrors = null;\n break;\n case RootSuspended:\n case RootCompleted:\n break;\n default:\n throw Error(\"Unknown root exit status.\");\n }\n if (null !== ReactSharedInternals.actQueue)\n commitRoot(\n shouldTimeSlice,\n forceSync,\n lanes,\n workInProgressRootRecoverableErrors,\n workInProgressTransitions,\n workInProgressRootDidIncludeRecursiveRenderUpdate,\n workInProgressDeferredLane,\n workInProgressRootInterleavedUpdatedLanes,\n workInProgressSuspendedRetryLanes\n );\n else {\n if (\n (lanes & 62914560) === lanes &&\n ((renderWasConcurrent =\n globalMostRecentFallbackTime +\n FALLBACK_THROTTLE_MS -\n now$1()),\n 10 < renderWasConcurrent)\n ) {\n markRootSuspended(\n shouldTimeSlice,\n lanes,\n workInProgressDeferredLane,\n !workInProgressRootDidSkipSuspendedSiblings\n );\n if (0 !== getNextLanes(shouldTimeSlice, 0, !0)) break a;\n shouldTimeSlice.timeoutHandle = scheduleTimeout(\n commitRootWhenReady.bind(\n null,\n shouldTimeSlice,\n forceSync,\n workInProgressRootRecoverableErrors,\n workInProgressTransitions,\n workInProgressRootDidIncludeRecursiveRenderUpdate,\n lanes,\n workInProgressDeferredLane,\n workInProgressRootInterleavedUpdatedLanes,\n workInProgressSuspendedRetryLanes,\n workInProgressRootDidSkipSuspendedSiblings,\n exitStatus,\n THROTTLED_COMMIT,\n renderStartTime,\n 0\n ),\n renderWasConcurrent\n );\n break a;\n }\n commitRootWhenReady(\n shouldTimeSlice,\n forceSync,\n workInProgressRootRecoverableErrors,\n workInProgressTransitions,\n workInProgressRootDidIncludeRecursiveRenderUpdate,\n lanes,\n workInProgressDeferredLane,\n workInProgressRootInterleavedUpdatedLanes,\n workInProgressSuspendedRetryLanes,\n workInProgressRootDidSkipSuspendedSiblings,\n exitStatus,\n IMMEDIATE_COMMIT,\n renderStartTime,\n 0\n );\n }\n }\n }\n break;\n } while (1);\n ensureRootIsScheduled(root);\n }\n function commitRootWhenReady(\n root,\n finishedWork,\n recoverableErrors,\n transitions,\n didIncludeRenderPhaseUpdate,\n lanes,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes,\n didSkipSuspendedSiblings,\n exitStatus,\n suspendedCommitReason,\n completedRenderStartTime,\n completedRenderEndTime\n ) {\n root.timeoutHandle = noTimeout;\n suspendedCommitReason = finishedWork.subtreeFlags;\n if (\n suspendedCommitReason & 8192 ||\n 16785408 === (suspendedCommitReason & 16785408)\n )\n if (\n ((suspendedState = {\n stylesheets: null,\n count: 0,\n unsuspend: noop$1\n }),\n accumulateSuspenseyCommitOnFiber(finishedWork),\n (suspendedCommitReason = waitForCommitToBeReady()),\n null !== suspendedCommitReason)\n ) {\n root.cancelPendingCommit = suspendedCommitReason(\n commitRoot.bind(\n null,\n root,\n finishedWork,\n lanes,\n recoverableErrors,\n transitions,\n didIncludeRenderPhaseUpdate,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes,\n exitStatus,\n SUSPENDED_COMMIT,\n completedRenderStartTime,\n completedRenderEndTime\n )\n );\n markRootSuspended(\n root,\n lanes,\n spawnedLane,\n !didSkipSuspendedSiblings\n );\n return;\n }\n commitRoot(\n root,\n finishedWork,\n lanes,\n recoverableErrors,\n transitions,\n didIncludeRenderPhaseUpdate,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes\n );\n }\n function isRenderConsistentWithExternalStores(finishedWork) {\n for (var node = finishedWork; ; ) {\n var tag = node.tag;\n if (\n (0 === tag || 11 === tag || 15 === tag) &&\n node.flags & 16384 &&\n ((tag = node.updateQueue),\n null !== tag && ((tag = tag.stores), null !== tag))\n )\n for (var i = 0; i < tag.length; i++) {\n var check = tag[i],\n getSnapshot = check.getSnapshot;\n check = check.value;\n try {\n if (!objectIs(getSnapshot(), check)) return !1;\n } catch (error) {\n return !1;\n }\n }\n tag = node.child;\n if (node.subtreeFlags & 16384 && null !== tag)\n (tag.return = node), (node = tag);\n else {\n if (node === finishedWork) break;\n for (; null === node.sibling; ) {\n if (null === node.return || node.return === finishedWork) return !0;\n node = node.return;\n }\n node.sibling.return = node.return;\n node = node.sibling;\n }\n }\n return !0;\n }\n function markRootSuspended(\n root,\n suspendedLanes,\n spawnedLane,\n didAttemptEntireTree\n ) {\n suspendedLanes &= ~workInProgressRootPingedLanes;\n suspendedLanes &= ~workInProgressRootInterleavedUpdatedLanes;\n root.suspendedLanes |= suspendedLanes;\n root.pingedLanes &= ~suspendedLanes;\n didAttemptEntireTree && (root.warmLanes |= suspendedLanes);\n didAttemptEntireTree = root.expirationTimes;\n for (var lanes = suspendedLanes; 0 < lanes; ) {\n var index = 31 - clz32(lanes),\n lane = 1 << index;\n didAttemptEntireTree[index] = -1;\n lanes &= ~lane;\n }\n 0 !== spawnedLane &&\n markSpawnedDeferredLane(root, spawnedLane, suspendedLanes);\n }\n function flushSyncWork$1() {\n return (executionContext & (RenderContext | CommitContext)) === NoContext\n ? (flushSyncWorkAcrossRoots_impl(0, !1), !1)\n : !0;\n }\n function resetWorkInProgressStack() {\n if (null !== workInProgress) {\n if (workInProgressSuspendedReason === NotSuspended)\n var interruptedWork = workInProgress.return;\n else\n (interruptedWork = workInProgress),\n resetContextDependencies(),\n resetHooksOnUnwind(interruptedWork),\n (thenableState$1 = null),\n (thenableIndexCounter$1 = 0),\n (interruptedWork = workInProgress);\n for (; null !== interruptedWork; )\n unwindInterruptedWork(interruptedWork.alternate, interruptedWork),\n (interruptedWork = interruptedWork.return);\n workInProgress = null;\n }\n }\n function prepareFreshStack(root, lanes) {\n var timeoutHandle = root.timeoutHandle;\n timeoutHandle !== noTimeout &&\n ((root.timeoutHandle = noTimeout), cancelTimeout(timeoutHandle));\n timeoutHandle = root.cancelPendingCommit;\n null !== timeoutHandle &&\n ((root.cancelPendingCommit = null), timeoutHandle());\n resetWorkInProgressStack();\n workInProgressRoot = root;\n workInProgress = timeoutHandle = createWorkInProgress(root.current, null);\n workInProgressRootRenderLanes = lanes;\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n workInProgressRootDidSkipSuspendedSiblings = !1;\n workInProgressRootIsPrerendering = checkIfRootIsPrerendering(root, lanes);\n workInProgressRootDidAttachPingListener = !1;\n workInProgressRootExitStatus = RootInProgress;\n workInProgressSuspendedRetryLanes =\n workInProgressDeferredLane =\n workInProgressRootPingedLanes =\n workInProgressRootInterleavedUpdatedLanes =\n workInProgressRootSkippedLanes =\n 0;\n workInProgressRootRecoverableErrors = workInProgressRootConcurrentErrors =\n null;\n workInProgressRootDidIncludeRecursiveRenderUpdate = !1;\n 0 !== (lanes & 8) && (lanes |= lanes & 32);\n var allEntangledLanes = root.entangledLanes;\n if (0 !== allEntangledLanes)\n for (\n root = root.entanglements, allEntangledLanes &= lanes;\n 0 < allEntangledLanes;\n\n ) {\n var index = 31 - clz32(allEntangledLanes),\n lane = 1 << index;\n lanes |= root[index];\n allEntangledLanes &= ~lane;\n }\n entangledRenderLanes = lanes;\n finishQueueingConcurrentUpdates();\n lanes = getCurrentTime();\n 1e3 < lanes - lastResetTime &&\n ((ReactSharedInternals.recentlyCreatedOwnerStacks = 0),\n (lastResetTime = lanes));\n ReactStrictModeWarnings.discardPendingWarnings();\n return timeoutHandle;\n }\n function handleThrow(root, thrownValue) {\n currentlyRenderingFiber = null;\n ReactSharedInternals.H = ContextOnlyDispatcher;\n ReactSharedInternals.getCurrentStack = null;\n isRendering = !1;\n current = null;\n thrownValue === SuspenseException ||\n thrownValue === SuspenseActionException\n ? ((thrownValue = getSuspendedThenable()),\n (workInProgressSuspendedReason = SuspendedOnImmediate))\n : thrownValue === SuspenseyCommitException\n ? ((thrownValue = getSuspendedThenable()),\n (workInProgressSuspendedReason = SuspendedOnInstance))\n : (workInProgressSuspendedReason =\n thrownValue === SelectiveHydrationException\n ? SuspendedOnHydration\n : null !== thrownValue &&\n \"object\" === typeof thrownValue &&\n \"function\" === typeof thrownValue.then\n ? SuspendedOnDeprecatedThrowPromise\n : SuspendedOnError);\n workInProgressThrownValue = thrownValue;\n var erroredWork = workInProgress;\n if (null === erroredWork)\n (workInProgressRootExitStatus = RootFatalErrored),\n logUncaughtError(\n root,\n createCapturedValueAtFiber(thrownValue, root.current)\n );\n else\n switch (\n (erroredWork.mode & ProfileMode &&\n stopProfilerTimerIfRunningAndRecordDuration(erroredWork),\n markComponentRenderStopped(),\n workInProgressSuspendedReason)\n ) {\n case SuspendedOnError:\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentErrored &&\n injectedProfilingHooks.markComponentErrored(\n erroredWork,\n thrownValue,\n workInProgressRootRenderLanes\n );\n break;\n case SuspendedOnData:\n case SuspendedOnAction:\n case SuspendedOnImmediate:\n case SuspendedOnDeprecatedThrowPromise:\n case SuspendedAndReadyToContinue:\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markComponentSuspended &&\n injectedProfilingHooks.markComponentSuspended(\n erroredWork,\n thrownValue,\n workInProgressRootRenderLanes\n );\n }\n }\n function shouldRemainOnPreviousScreen() {\n var handler = suspenseHandlerStackCursor.current;\n return null === handler\n ? !0\n : (workInProgressRootRenderLanes & 4194048) ===\n workInProgressRootRenderLanes\n ? null === shellBoundary\n ? !0\n : !1\n : (workInProgressRootRenderLanes & 62914560) ===\n workInProgressRootRenderLanes ||\n 0 !== (workInProgressRootRenderLanes & 536870912)\n ? handler === shellBoundary\n : !1;\n }\n function pushDispatcher() {\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = ContextOnlyDispatcher;\n return null === prevDispatcher ? ContextOnlyDispatcher : prevDispatcher;\n }\n function pushAsyncDispatcher() {\n var prevAsyncDispatcher = ReactSharedInternals.A;\n ReactSharedInternals.A = DefaultAsyncDispatcher;\n return prevAsyncDispatcher;\n }\n function renderDidSuspendDelayIfPossible() {\n workInProgressRootExitStatus = RootSuspendedWithDelay;\n workInProgressRootDidSkipSuspendedSiblings ||\n ((workInProgressRootRenderLanes & 4194048) !==\n workInProgressRootRenderLanes &&\n null !== suspenseHandlerStackCursor.current) ||\n (workInProgressRootIsPrerendering = !0);\n (0 === (workInProgressRootSkippedLanes & 134217727) &&\n 0 === (workInProgressRootInterleavedUpdatedLanes & 134217727)) ||\n null === workInProgressRoot ||\n markRootSuspended(\n workInProgressRoot,\n workInProgressRootRenderLanes,\n workInProgressDeferredLane,\n !1\n );\n }\n function renderRootSync(root, lanes, shouldYieldForPrerendering) {\n var prevExecutionContext = executionContext;\n executionContext |= RenderContext;\n var prevDispatcher = pushDispatcher(),\n prevAsyncDispatcher = pushAsyncDispatcher();\n if (\n workInProgressRoot !== root ||\n workInProgressRootRenderLanes !== lanes\n ) {\n if (isDevToolsPresent) {\n var memoizedUpdaters = root.memoizedUpdaters;\n 0 < memoizedUpdaters.size &&\n (restorePendingUpdaters(root, workInProgressRootRenderLanes),\n memoizedUpdaters.clear());\n movePendingFibersToMemoized(root, lanes);\n }\n workInProgressTransitions = null;\n prepareFreshStack(root, lanes);\n }\n markRenderStarted(lanes);\n lanes = !1;\n memoizedUpdaters = workInProgressRootExitStatus;\n a: do\n try {\n if (\n workInProgressSuspendedReason !== NotSuspended &&\n null !== workInProgress\n ) {\n var unitOfWork = workInProgress,\n thrownValue = workInProgressThrownValue;\n switch (workInProgressSuspendedReason) {\n case SuspendedOnHydration:\n resetWorkInProgressStack();\n memoizedUpdaters = RootSuspendedAtTheShell;\n break a;\n case SuspendedOnImmediate:\n case SuspendedOnData:\n case SuspendedOnAction:\n case SuspendedOnDeprecatedThrowPromise:\n null === suspenseHandlerStackCursor.current && (lanes = !0);\n var reason = workInProgressSuspendedReason;\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n if (\n shouldYieldForPrerendering &&\n workInProgressRootIsPrerendering\n ) {\n memoizedUpdaters = RootInProgress;\n break a;\n }\n break;\n default:\n (reason = workInProgressSuspendedReason),\n (workInProgressSuspendedReason = NotSuspended),\n (workInProgressThrownValue = null),\n throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n }\n }\n workLoopSync();\n memoizedUpdaters = workInProgressRootExitStatus;\n break;\n } catch (thrownValue$8) {\n handleThrow(root, thrownValue$8);\n }\n while (1);\n lanes && root.shellSuspendCounter++;\n resetContextDependencies();\n executionContext = prevExecutionContext;\n ReactSharedInternals.H = prevDispatcher;\n ReactSharedInternals.A = prevAsyncDispatcher;\n markRenderStopped();\n null === workInProgress &&\n ((workInProgressRoot = null),\n (workInProgressRootRenderLanes = 0),\n finishQueueingConcurrentUpdates());\n return memoizedUpdaters;\n }\n function workLoopSync() {\n for (; null !== workInProgress; ) performUnitOfWork(workInProgress);\n }\n function renderRootConcurrent(root, lanes) {\n var prevExecutionContext = executionContext;\n executionContext |= RenderContext;\n var prevDispatcher = pushDispatcher(),\n prevAsyncDispatcher = pushAsyncDispatcher();\n if (\n workInProgressRoot !== root ||\n workInProgressRootRenderLanes !== lanes\n ) {\n if (isDevToolsPresent) {\n var memoizedUpdaters = root.memoizedUpdaters;\n 0 < memoizedUpdaters.size &&\n (restorePendingUpdaters(root, workInProgressRootRenderLanes),\n memoizedUpdaters.clear());\n movePendingFibersToMemoized(root, lanes);\n }\n workInProgressTransitions = null;\n workInProgressRootRenderTargetTime = now$1() + RENDER_TIMEOUT_MS;\n prepareFreshStack(root, lanes);\n } else\n workInProgressRootIsPrerendering = checkIfRootIsPrerendering(\n root,\n lanes\n );\n markRenderStarted(lanes);\n a: do\n try {\n if (\n workInProgressSuspendedReason !== NotSuspended &&\n null !== workInProgress\n )\n b: switch (\n ((lanes = workInProgress),\n (memoizedUpdaters = workInProgressThrownValue),\n workInProgressSuspendedReason)\n ) {\n case SuspendedOnError:\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(\n root,\n lanes,\n memoizedUpdaters,\n SuspendedOnError\n );\n break;\n case SuspendedOnData:\n case SuspendedOnAction:\n if (isThenableResolved(memoizedUpdaters)) {\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n replaySuspendedUnitOfWork(lanes);\n break;\n }\n lanes = function () {\n (workInProgressSuspendedReason !== SuspendedOnData &&\n workInProgressSuspendedReason !== SuspendedOnAction) ||\n workInProgressRoot !== root ||\n (workInProgressSuspendedReason =\n SuspendedAndReadyToContinue);\n ensureRootIsScheduled(root);\n };\n memoizedUpdaters.then(lanes, lanes);\n break a;\n case SuspendedOnImmediate:\n workInProgressSuspendedReason = SuspendedAndReadyToContinue;\n break a;\n case SuspendedOnInstance:\n workInProgressSuspendedReason =\n SuspendedOnInstanceAndReadyToContinue;\n break a;\n case SuspendedAndReadyToContinue:\n isThenableResolved(memoizedUpdaters)\n ? ((workInProgressSuspendedReason = NotSuspended),\n (workInProgressThrownValue = null),\n replaySuspendedUnitOfWork(lanes))\n : ((workInProgressSuspendedReason = NotSuspended),\n (workInProgressThrownValue = null),\n throwAndUnwindWorkLoop(\n root,\n lanes,\n memoizedUpdaters,\n SuspendedAndReadyToContinue\n ));\n break;\n case SuspendedOnInstanceAndReadyToContinue:\n var resource = null;\n switch (workInProgress.tag) {\n case 26:\n resource = workInProgress.memoizedState;\n case 5:\n case 27:\n var hostFiber = workInProgress;\n if (\n resource\n ? preloadResource(resource)\n : hostFiber.stateNode.complete\n ) {\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n var sibling = hostFiber.sibling;\n if (null !== sibling) workInProgress = sibling;\n else {\n var returnFiber = hostFiber.return;\n null !== returnFiber\n ? ((workInProgress = returnFiber),\n completeUnitOfWork(returnFiber))\n : (workInProgress = null);\n }\n break b;\n }\n break;\n default:\n console.error(\n \"Unexpected type of fiber triggered a suspensey commit. This is a bug in React.\"\n );\n }\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(\n root,\n lanes,\n memoizedUpdaters,\n SuspendedOnInstanceAndReadyToContinue\n );\n break;\n case SuspendedOnDeprecatedThrowPromise:\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(\n root,\n lanes,\n memoizedUpdaters,\n SuspendedOnDeprecatedThrowPromise\n );\n break;\n case SuspendedOnHydration:\n resetWorkInProgressStack();\n workInProgressRootExitStatus = RootSuspendedAtTheShell;\n break a;\n default:\n throw Error(\n \"Unexpected SuspendedReason. This is a bug in React.\"\n );\n }\n null !== ReactSharedInternals.actQueue\n ? workLoopSync()\n : workLoopConcurrentByScheduler();\n break;\n } catch (thrownValue$9) {\n handleThrow(root, thrownValue$9);\n }\n while (1);\n resetContextDependencies();\n ReactSharedInternals.H = prevDispatcher;\n ReactSharedInternals.A = prevAsyncDispatcher;\n executionContext = prevExecutionContext;\n if (null !== workInProgress)\n return (\n null !== injectedProfilingHooks &&\n \"function\" === typeof injectedProfilingHooks.markRenderYielded &&\n injectedProfilingHooks.markRenderYielded(),\n RootInProgress\n );\n markRenderStopped();\n workInProgressRoot = null;\n workInProgressRootRenderLanes = 0;\n finishQueueingConcurrentUpdates();\n return workInProgressRootExitStatus;\n }\n function workLoopConcurrentByScheduler() {\n for (; null !== workInProgress && !shouldYield(); )\n performUnitOfWork(workInProgress);\n }\n function performUnitOfWork(unitOfWork) {\n var current = unitOfWork.alternate;\n (unitOfWork.mode & ProfileMode) !== NoMode\n ? (startProfilerTimer(unitOfWork),\n (current = runWithFiberInDEV(\n unitOfWork,\n beginWork,\n current,\n unitOfWork,\n entangledRenderLanes\n )),\n stopProfilerTimerIfRunningAndRecordDuration(unitOfWork))\n : (current = runWithFiberInDEV(\n unitOfWork,\n beginWork,\n current,\n unitOfWork,\n entangledRenderLanes\n ));\n unitOfWork.memoizedProps = unitOfWork.pendingProps;\n null === current\n ? completeUnitOfWork(unitOfWork)\n : (workInProgress = current);\n }\n function replaySuspendedUnitOfWork(unitOfWork) {\n var next = runWithFiberInDEV(unitOfWork, replayBeginWork, unitOfWork);\n unitOfWork.memoizedProps = unitOfWork.pendingProps;\n null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n }\n function replayBeginWork(unitOfWork) {\n var current = unitOfWork.alternate,\n isProfilingMode = (unitOfWork.mode & ProfileMode) !== NoMode;\n isProfilingMode && startProfilerTimer(unitOfWork);\n switch (unitOfWork.tag) {\n case 15:\n case 0:\n current = replayFunctionComponent(\n current,\n unitOfWork,\n unitOfWork.pendingProps,\n unitOfWork.type,\n void 0,\n workInProgressRootRenderLanes\n );\n break;\n case 11:\n current = replayFunctionComponent(\n current,\n unitOfWork,\n unitOfWork.pendingProps,\n unitOfWork.type.render,\n unitOfWork.ref,\n workInProgressRootRenderLanes\n );\n break;\n case 5:\n resetHooksOnUnwind(unitOfWork);\n default:\n unwindInterruptedWork(current, unitOfWork),\n (unitOfWork = workInProgress =\n resetWorkInProgress(unitOfWork, entangledRenderLanes)),\n (current = beginWork(current, unitOfWork, entangledRenderLanes));\n }\n isProfilingMode &&\n stopProfilerTimerIfRunningAndRecordDuration(unitOfWork);\n return current;\n }\n function throwAndUnwindWorkLoop(\n root,\n unitOfWork,\n thrownValue,\n suspendedReason\n ) {\n resetContextDependencies();\n resetHooksOnUnwind(unitOfWork);\n thenableState$1 = null;\n thenableIndexCounter$1 = 0;\n var returnFiber = unitOfWork.return;\n try {\n if (\n throwException(\n root,\n returnFiber,\n unitOfWork,\n thrownValue,\n workInProgressRootRenderLanes\n )\n ) {\n workInProgressRootExitStatus = RootFatalErrored;\n logUncaughtError(\n root,\n createCapturedValueAtFiber(thrownValue, root.current)\n );\n workInProgress = null;\n return;\n }\n } catch (error) {\n if (null !== returnFiber) throw ((workInProgress = returnFiber), error);\n workInProgressRootExitStatus = RootFatalErrored;\n logUncaughtError(\n root,\n createCapturedValueAtFiber(thrownValue, root.current)\n );\n workInProgress = null;\n return;\n }\n if (unitOfWork.flags & 32768) {\n if (isHydrating || suspendedReason === SuspendedOnError) root = !0;\n else if (\n workInProgressRootIsPrerendering ||\n 0 !== (workInProgressRootRenderLanes & 536870912)\n )\n root = !1;\n else if (\n ((workInProgressRootDidSkipSuspendedSiblings = root = !0),\n suspendedReason === SuspendedOnData ||\n suspendedReason === SuspendedOnAction ||\n suspendedReason === SuspendedOnImmediate ||\n suspendedReason === SuspendedOnDeprecatedThrowPromise)\n )\n (suspendedReason = suspenseHandlerStackCursor.current),\n null !== suspendedReason &&\n 13 === suspendedReason.tag &&\n (suspendedReason.flags |= 16384);\n unwindUnitOfWork(unitOfWork, root);\n } else completeUnitOfWork(unitOfWork);\n }\n function completeUnitOfWork(unitOfWork) {\n var completedWork = unitOfWork;\n do {\n if (0 !== (completedWork.flags & 32768)) {\n unwindUnitOfWork(\n completedWork,\n workInProgressRootDidSkipSuspendedSiblings\n );\n return;\n }\n var current = completedWork.alternate;\n unitOfWork = completedWork.return;\n startProfilerTimer(completedWork);\n current = runWithFiberInDEV(\n completedWork,\n completeWork,\n current,\n completedWork,\n entangledRenderLanes\n );\n (completedWork.mode & ProfileMode) !== NoMode &&\n stopProfilerTimerIfRunningAndRecordIncompleteDuration(completedWork);\n if (null !== current) {\n workInProgress = current;\n return;\n }\n completedWork = completedWork.sibling;\n if (null !== completedWork) {\n workInProgress = completedWork;\n return;\n }\n workInProgress = completedWork = unitOfWork;\n } while (null !== completedWork);\n workInProgressRootExitStatus === RootInProgress &&\n (workInProgressRootExitStatus = RootCompleted);\n }\n function unwindUnitOfWork(unitOfWork, skipSiblings) {\n do {\n var next = unwindWork(unitOfWork.alternate, unitOfWork);\n if (null !== next) {\n next.flags &= 32767;\n workInProgress = next;\n return;\n }\n if ((unitOfWork.mode & ProfileMode) !== NoMode) {\n stopProfilerTimerIfRunningAndRecordIncompleteDuration(unitOfWork);\n next = unitOfWork.actualDuration;\n for (var child = unitOfWork.child; null !== child; )\n (next += child.actualDuration), (child = child.sibling);\n unitOfWork.actualDuration = next;\n }\n next = unitOfWork.return;\n null !== next &&\n ((next.flags |= 32768),\n (next.subtreeFlags = 0),\n (next.deletions = null));\n if (\n !skipSiblings &&\n ((unitOfWork = unitOfWork.sibling), null !== unitOfWork)\n ) {\n workInProgress = unitOfWork;\n return;\n }\n workInProgress = unitOfWork = next;\n } while (null !== unitOfWork);\n workInProgressRootExitStatus = RootSuspendedAtTheShell;\n workInProgress = null;\n }\n function commitRoot(\n root,\n finishedWork,\n lanes,\n recoverableErrors,\n transitions,\n didIncludeRenderPhaseUpdate,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes\n ) {\n root.cancelPendingCommit = null;\n do flushPendingEffects();\n while (pendingEffectsStatus !== NO_PENDING_EFFECTS);\n ReactStrictModeWarnings.flushLegacyContextWarning();\n ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings();\n if ((executionContext & (RenderContext | CommitContext)) !== NoContext)\n throw Error(\"Should not already be working.\");\n null !== injectedProfilingHooks &&\n \"function\" === typeof injectedProfilingHooks.markCommitStarted &&\n injectedProfilingHooks.markCommitStarted(lanes);\n if (null === finishedWork) markCommitStopped();\n else {\n 0 === lanes &&\n console.error(\n \"finishedLanes should not be empty during a commit. This is a bug in React.\"\n );\n if (finishedWork === root.current)\n throw Error(\n \"Cannot commit the same tree as before. This error is likely caused by a bug in React. Please file an issue.\"\n );\n didIncludeRenderPhaseUpdate =\n finishedWork.lanes | finishedWork.childLanes;\n didIncludeRenderPhaseUpdate |= concurrentlyUpdatedLanes;\n markRootFinished(\n root,\n lanes,\n didIncludeRenderPhaseUpdate,\n spawnedLane,\n updatedLanes,\n suspendedRetryLanes\n );\n root === workInProgressRoot &&\n ((workInProgress = workInProgressRoot = null),\n (workInProgressRootRenderLanes = 0));\n pendingFinishedWork = finishedWork;\n pendingEffectsRoot = root;\n pendingEffectsLanes = lanes;\n pendingEffectsRemainingLanes = didIncludeRenderPhaseUpdate;\n pendingPassiveTransitions = transitions;\n pendingRecoverableErrors = recoverableErrors;\n 0 !== (finishedWork.subtreeFlags & 10256) ||\n 0 !== (finishedWork.flags & 10256)\n ? ((root.callbackNode = null),\n (root.callbackPriority = 0),\n scheduleCallback$1(NormalPriority$1, function () {\n flushPassiveEffects(!0);\n return null;\n }))\n : ((root.callbackNode = null), (root.callbackPriority = 0));\n commitStartTime = now();\n recoverableErrors = 0 !== (finishedWork.flags & 13878);\n if (0 !== (finishedWork.subtreeFlags & 13878) || recoverableErrors) {\n recoverableErrors = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n transitions = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p = DiscreteEventPriority;\n spawnedLane = executionContext;\n executionContext |= CommitContext;\n try {\n commitBeforeMutationEffects(root, finishedWork, lanes);\n } finally {\n (executionContext = spawnedLane),\n (ReactDOMSharedInternals.p = transitions),\n (ReactSharedInternals.T = recoverableErrors);\n }\n }\n pendingEffectsStatus = PENDING_MUTATION_PHASE;\n flushMutationEffects();\n flushLayoutEffects();\n flushSpawnedWork();\n }\n }\n function flushMutationEffects() {\n if (pendingEffectsStatus === PENDING_MUTATION_PHASE) {\n pendingEffectsStatus = NO_PENDING_EFFECTS;\n var root = pendingEffectsRoot,\n finishedWork = pendingFinishedWork,\n lanes = pendingEffectsLanes,\n rootMutationHasEffect = 0 !== (finishedWork.flags & 13878);\n if (\n 0 !== (finishedWork.subtreeFlags & 13878) ||\n rootMutationHasEffect\n ) {\n rootMutationHasEffect = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n var previousPriority = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p = DiscreteEventPriority;\n var prevExecutionContext = executionContext;\n executionContext |= CommitContext;\n try {\n inProgressLanes = lanes;\n inProgressRoot = root;\n componentEffectStartTime = -1.1;\n commitMutationEffectsOnFiber(finishedWork, root);\n inProgressRoot = inProgressLanes = null;\n lanes = selectionInformation;\n var curFocusedElem = getActiveElementDeep(root.containerInfo),\n priorFocusedElem = lanes.focusedElem,\n priorSelectionRange = lanes.selectionRange;\n if (\n curFocusedElem !== priorFocusedElem &&\n priorFocusedElem &&\n priorFocusedElem.ownerDocument &&\n containsNode(\n priorFocusedElem.ownerDocument.documentElement,\n priorFocusedElem\n )\n ) {\n if (\n null !== priorSelectionRange &&\n hasSelectionCapabilities(priorFocusedElem)\n ) {\n var start = priorSelectionRange.start,\n end = priorSelectionRange.end;\n void 0 === end && (end = start);\n if (\"selectionStart\" in priorFocusedElem)\n (priorFocusedElem.selectionStart = start),\n (priorFocusedElem.selectionEnd = Math.min(\n end,\n priorFocusedElem.value.length\n ));\n else {\n var doc = priorFocusedElem.ownerDocument || document,\n win = (doc && doc.defaultView) || window;\n if (win.getSelection) {\n var selection = win.getSelection(),\n length = priorFocusedElem.textContent.length,\n start$jscomp$0 = Math.min(\n priorSelectionRange.start,\n length\n ),\n end$jscomp$0 =\n void 0 === priorSelectionRange.end\n ? start$jscomp$0\n : Math.min(priorSelectionRange.end, length);\n !selection.extend &&\n start$jscomp$0 > end$jscomp$0 &&\n ((curFocusedElem = end$jscomp$0),\n (end$jscomp$0 = start$jscomp$0),\n (start$jscomp$0 = curFocusedElem));\n var startMarker = getNodeForCharacterOffset(\n priorFocusedElem,\n start$jscomp$0\n ),\n endMarker = getNodeForCharacterOffset(\n priorFocusedElem,\n end$jscomp$0\n );\n if (\n startMarker &&\n endMarker &&\n (1 !== selection.rangeCount ||\n selection.anchorNode !== startMarker.node ||\n selection.anchorOffset !== startMarker.offset ||\n selection.focusNode !== endMarker.node ||\n selection.focusOffset !== endMarker.offset)\n ) {\n var range = doc.createRange();\n range.setStart(startMarker.node, startMarker.offset);\n selection.removeAllRanges();\n start$jscomp$0 > end$jscomp$0\n ? (selection.addRange(range),\n selection.extend(endMarker.node, endMarker.offset))\n : (range.setEnd(endMarker.node, endMarker.offset),\n selection.addRange(range));\n }\n }\n }\n }\n doc = [];\n for (\n selection = priorFocusedElem;\n (selection = selection.parentNode);\n\n )\n 1 === selection.nodeType &&\n doc.push({\n element: selection,\n left: selection.scrollLeft,\n top: selection.scrollTop\n });\n \"function\" === typeof priorFocusedElem.focus &&\n priorFocusedElem.focus();\n for (\n priorFocusedElem = 0;\n priorFocusedElem < doc.length;\n priorFocusedElem++\n ) {\n var info = doc[priorFocusedElem];\n info.element.scrollLeft = info.left;\n info.element.scrollTop = info.top;\n }\n }\n _enabled = !!eventsEnabled;\n selectionInformation = eventsEnabled = null;\n } finally {\n (executionContext = prevExecutionContext),\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = rootMutationHasEffect);\n }\n }\n root.current = finishedWork;\n pendingEffectsStatus = PENDING_LAYOUT_PHASE;\n }\n }\n function flushLayoutEffects() {\n if (pendingEffectsStatus === PENDING_LAYOUT_PHASE) {\n pendingEffectsStatus = NO_PENDING_EFFECTS;\n var root = pendingEffectsRoot,\n finishedWork = pendingFinishedWork,\n lanes = pendingEffectsLanes,\n rootHasLayoutEffect = 0 !== (finishedWork.flags & 8772);\n if (0 !== (finishedWork.subtreeFlags & 8772) || rootHasLayoutEffect) {\n rootHasLayoutEffect = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n var _previousPriority = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p = DiscreteEventPriority;\n var _prevExecutionContext = executionContext;\n executionContext |= CommitContext;\n try {\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markLayoutEffectsStarted &&\n injectedProfilingHooks.markLayoutEffectsStarted(lanes),\n (inProgressLanes = lanes),\n (inProgressRoot = root),\n (componentEffectStartTime = -1.1),\n commitLayoutEffectOnFiber(\n root,\n finishedWork.alternate,\n finishedWork\n ),\n (inProgressRoot = inProgressLanes = null),\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markLayoutEffectsStopped &&\n injectedProfilingHooks.markLayoutEffectsStopped();\n } finally {\n (executionContext = _prevExecutionContext),\n (ReactDOMSharedInternals.p = _previousPriority),\n (ReactSharedInternals.T = rootHasLayoutEffect);\n }\n }\n pendingEffectsStatus = PENDING_AFTER_MUTATION_PHASE;\n }\n }\n function flushSpawnedWork() {\n if (\n pendingEffectsStatus === PENDING_SPAWNED_WORK ||\n pendingEffectsStatus === PENDING_AFTER_MUTATION_PHASE\n ) {\n pendingEffectsStatus = NO_PENDING_EFFECTS;\n requestPaint();\n var root = pendingEffectsRoot,\n finishedWork = pendingFinishedWork,\n lanes = pendingEffectsLanes,\n recoverableErrors = pendingRecoverableErrors,\n rootDidHavePassiveEffects =\n 0 !== (finishedWork.subtreeFlags & 10256) ||\n 0 !== (finishedWork.flags & 10256);\n rootDidHavePassiveEffects\n ? (pendingEffectsStatus = PENDING_PASSIVE_PHASE)\n : ((pendingEffectsStatus = NO_PENDING_EFFECTS),\n (pendingFinishedWork = pendingEffectsRoot = null),\n releaseRootPooledCache(root, root.pendingLanes),\n (nestedPassiveUpdateCount = 0),\n (rootWithPassiveNestedUpdates = null));\n var remainingLanes = root.pendingLanes;\n 0 === remainingLanes && (legacyErrorBoundariesThatAlreadyFailed = null);\n rootDidHavePassiveEffects || commitDoubleInvokeEffectsInDEV(root);\n rootDidHavePassiveEffects = lanesToEventPriority(lanes);\n finishedWork = finishedWork.stateNode;\n if (\n injectedHook &&\n \"function\" === typeof injectedHook.onCommitFiberRoot\n )\n try {\n var didError = 128 === (finishedWork.current.flags & 128);\n switch (rootDidHavePassiveEffects) {\n case DiscreteEventPriority:\n var schedulerPriority = ImmediatePriority;\n break;\n case ContinuousEventPriority:\n schedulerPriority = UserBlockingPriority;\n break;\n case DefaultEventPriority:\n schedulerPriority = NormalPriority$1;\n break;\n case IdleEventPriority:\n schedulerPriority = IdlePriority;\n break;\n default:\n schedulerPriority = NormalPriority$1;\n }\n injectedHook.onCommitFiberRoot(\n rendererID,\n finishedWork,\n schedulerPriority,\n didError\n );\n } catch (err) {\n hasLoggedError ||\n ((hasLoggedError = !0),\n console.error(\n \"React instrumentation encountered an error: %s\",\n err\n ));\n }\n isDevToolsPresent && root.memoizedUpdaters.clear();\n onCommitRoot();\n if (null !== recoverableErrors) {\n didError = ReactSharedInternals.T;\n schedulerPriority = ReactDOMSharedInternals.p;\n ReactDOMSharedInternals.p = DiscreteEventPriority;\n ReactSharedInternals.T = null;\n try {\n var onRecoverableError = root.onRecoverableError;\n for (\n finishedWork = 0;\n finishedWork < recoverableErrors.length;\n finishedWork++\n ) {\n var recoverableError = recoverableErrors[finishedWork],\n errorInfo = makeErrorInfo(recoverableError.stack);\n runWithFiberInDEV(\n recoverableError.source,\n onRecoverableError,\n recoverableError.value,\n errorInfo\n );\n }\n } finally {\n (ReactSharedInternals.T = didError),\n (ReactDOMSharedInternals.p = schedulerPriority);\n }\n }\n 0 !== (pendingEffectsLanes & 3) && flushPendingEffects();\n ensureRootIsScheduled(root);\n remainingLanes = root.pendingLanes;\n 0 !== (lanes & 4194090) && 0 !== (remainingLanes & 42)\n ? ((nestedUpdateScheduled = !0),\n root === rootWithNestedUpdates\n ? nestedUpdateCount++\n : ((nestedUpdateCount = 0), (rootWithNestedUpdates = root)))\n : (nestedUpdateCount = 0);\n flushSyncWorkAcrossRoots_impl(0, !1);\n markCommitStopped();\n }\n }\n function makeErrorInfo(componentStack) {\n componentStack = { componentStack: componentStack };\n Object.defineProperty(componentStack, \"digest\", {\n get: function () {\n console.error(\n 'You are accessing \"digest\" from the errorInfo object passed to onRecoverableError. This property is no longer provided as part of errorInfo but can be accessed as a property of the Error instance itself.'\n );\n }\n });\n return componentStack;\n }\n function releaseRootPooledCache(root, remainingLanes) {\n 0 === (root.pooledCacheLanes &= remainingLanes) &&\n ((remainingLanes = root.pooledCache),\n null != remainingLanes &&\n ((root.pooledCache = null), releaseCache(remainingLanes)));\n }\n function flushPendingEffects(wasDelayedCommit) {\n flushMutationEffects();\n flushLayoutEffects();\n flushSpawnedWork();\n return flushPassiveEffects(wasDelayedCommit);\n }\n function flushPassiveEffects() {\n if (pendingEffectsStatus !== PENDING_PASSIVE_PHASE) return !1;\n var root = pendingEffectsRoot,\n remainingLanes = pendingEffectsRemainingLanes;\n pendingEffectsRemainingLanes = 0;\n var renderPriority = lanesToEventPriority(pendingEffectsLanes),\n priority =\n 0 === DefaultEventPriority || DefaultEventPriority > renderPriority\n ? DefaultEventPriority\n : renderPriority;\n renderPriority = ReactSharedInternals.T;\n var previousPriority = ReactDOMSharedInternals.p;\n try {\n ReactDOMSharedInternals.p = priority;\n ReactSharedInternals.T = null;\n priority = pendingPassiveTransitions;\n pendingPassiveTransitions = null;\n var root$jscomp$0 = pendingEffectsRoot,\n lanes = pendingEffectsLanes;\n pendingEffectsStatus = NO_PENDING_EFFECTS;\n pendingFinishedWork = pendingEffectsRoot = null;\n pendingEffectsLanes = 0;\n if ((executionContext & (RenderContext | CommitContext)) !== NoContext)\n throw Error(\"Cannot flush passive effects while already rendering.\");\n isFlushingPassiveEffects = !0;\n didScheduleUpdateDuringPassiveEffects = !1;\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markPassiveEffectsStarted &&\n injectedProfilingHooks.markPassiveEffectsStarted(lanes);\n var prevExecutionContext = executionContext;\n executionContext |= CommitContext;\n var finishedWork = root$jscomp$0.current;\n componentEffectStartTime = -1.1;\n commitPassiveUnmountOnFiber(finishedWork);\n var finishedWork$jscomp$0 = root$jscomp$0.current;\n componentEffectStartTime = -1.1;\n commitPassiveMountOnFiber(\n root$jscomp$0,\n finishedWork$jscomp$0,\n lanes,\n priority\n );\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markPassiveEffectsStopped &&\n injectedProfilingHooks.markPassiveEffectsStopped();\n commitDoubleInvokeEffectsInDEV(root$jscomp$0);\n executionContext = prevExecutionContext;\n flushSyncWorkAcrossRoots_impl(0, !1);\n didScheduleUpdateDuringPassiveEffects\n ? root$jscomp$0 === rootWithPassiveNestedUpdates\n ? nestedPassiveUpdateCount++\n : ((nestedPassiveUpdateCount = 0),\n (rootWithPassiveNestedUpdates = root$jscomp$0))\n : (nestedPassiveUpdateCount = 0);\n didScheduleUpdateDuringPassiveEffects = isFlushingPassiveEffects = !1;\n if (\n injectedHook &&\n \"function\" === typeof injectedHook.onPostCommitFiberRoot\n )\n try {\n injectedHook.onPostCommitFiberRoot(rendererID, root$jscomp$0);\n } catch (err) {\n hasLoggedError ||\n ((hasLoggedError = !0),\n console.error(\n \"React instrumentation encountered an error: %s\",\n err\n ));\n }\n var stateNode = root$jscomp$0.current.stateNode;\n stateNode.effectDuration = 0;\n stateNode.passiveEffectDuration = 0;\n return !0;\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = renderPriority),\n releaseRootPooledCache(root, remainingLanes);\n }\n }\n function captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {\n sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n sourceFiber = createRootErrorUpdate(rootFiber.stateNode, sourceFiber, 2);\n rootFiber = enqueueUpdate(rootFiber, sourceFiber, 2);\n null !== rootFiber &&\n (markRootUpdated$1(rootFiber, 2), ensureRootIsScheduled(rootFiber));\n }\n function captureCommitPhaseError(\n sourceFiber,\n nearestMountedAncestor,\n error\n ) {\n isRunningInsertionEffect = !1;\n if (3 === sourceFiber.tag)\n captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error);\n else {\n for (; null !== nearestMountedAncestor; ) {\n if (3 === nearestMountedAncestor.tag) {\n captureCommitPhaseErrorOnRoot(\n nearestMountedAncestor,\n sourceFiber,\n error\n );\n return;\n }\n if (1 === nearestMountedAncestor.tag) {\n var instance = nearestMountedAncestor.stateNode;\n if (\n \"function\" ===\n typeof nearestMountedAncestor.type.getDerivedStateFromError ||\n (\"function\" === typeof instance.componentDidCatch &&\n (null === legacyErrorBoundariesThatAlreadyFailed ||\n !legacyErrorBoundariesThatAlreadyFailed.has(instance)))\n ) {\n sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n error = createClassErrorUpdate(2);\n instance = enqueueUpdate(nearestMountedAncestor, error, 2);\n null !== instance &&\n (initializeClassErrorUpdate(\n error,\n instance,\n nearestMountedAncestor,\n sourceFiber\n ),\n markRootUpdated$1(instance, 2),\n ensureRootIsScheduled(instance));\n return;\n }\n }\n nearestMountedAncestor = nearestMountedAncestor.return;\n }\n console.error(\n \"Internal React error: Attempted to capture a commit phase error inside a detached tree. This indicates a bug in React. Potential causes include deleting the same fiber more than once, committing an already-finished tree, or an inconsistent return pointer.\\n\\nError message:\\n\\n%s\",\n error\n );\n }\n }\n function attachPingListener(root, wakeable, lanes) {\n var pingCache = root.pingCache;\n if (null === pingCache) {\n pingCache = root.pingCache = new PossiblyWeakMap();\n var threadIDs = new Set();\n pingCache.set(wakeable, threadIDs);\n } else\n (threadIDs = pingCache.get(wakeable)),\n void 0 === threadIDs &&\n ((threadIDs = new Set()), pingCache.set(wakeable, threadIDs));\n threadIDs.has(lanes) ||\n ((workInProgressRootDidAttachPingListener = !0),\n threadIDs.add(lanes),\n (pingCache = pingSuspendedRoot.bind(null, root, wakeable, lanes)),\n isDevToolsPresent && restorePendingUpdaters(root, lanes),\n wakeable.then(pingCache, pingCache));\n }\n function pingSuspendedRoot(root, wakeable, pingedLanes) {\n var pingCache = root.pingCache;\n null !== pingCache && pingCache.delete(wakeable);\n root.pingedLanes |= root.suspendedLanes & pingedLanes;\n root.warmLanes &= ~pingedLanes;\n isConcurrentActEnvironment() &&\n null === ReactSharedInternals.actQueue &&\n console.error(\n \"A suspended resource finished loading inside a test, but the event was not wrapped in act(...).\\n\\nWhen testing, code that resolves suspended data should be wrapped into act(...):\\n\\nact(() => {\\n /* finish loading suspended data */\\n});\\n/* assert on the output */\\n\\nThis ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act\"\n );\n workInProgressRoot === root &&\n (workInProgressRootRenderLanes & pingedLanes) === pingedLanes &&\n (workInProgressRootExitStatus === RootSuspendedWithDelay ||\n (workInProgressRootExitStatus === RootSuspended &&\n (workInProgressRootRenderLanes & 62914560) ===\n workInProgressRootRenderLanes &&\n now$1() - globalMostRecentFallbackTime < FALLBACK_THROTTLE_MS)\n ? (executionContext & RenderContext) === NoContext &&\n prepareFreshStack(root, 0)\n : (workInProgressRootPingedLanes |= pingedLanes),\n workInProgressSuspendedRetryLanes === workInProgressRootRenderLanes &&\n (workInProgressSuspendedRetryLanes = 0));\n ensureRootIsScheduled(root);\n }\n function retryTimedOutBoundary(boundaryFiber, retryLane) {\n 0 === retryLane && (retryLane = claimNextRetryLane());\n boundaryFiber = enqueueConcurrentRenderForLane(boundaryFiber, retryLane);\n null !== boundaryFiber &&\n (markRootUpdated$1(boundaryFiber, retryLane),\n ensureRootIsScheduled(boundaryFiber));\n }\n function retryDehydratedSuspenseBoundary(boundaryFiber) {\n var suspenseState = boundaryFiber.memoizedState,\n retryLane = 0;\n null !== suspenseState && (retryLane = suspenseState.retryLane);\n retryTimedOutBoundary(boundaryFiber, retryLane);\n }\n function resolveRetryWakeable(boundaryFiber, wakeable) {\n var retryLane = 0;\n switch (boundaryFiber.tag) {\n case 31:\n case 13:\n var retryCache = boundaryFiber.stateNode;\n var suspenseState = boundaryFiber.memoizedState;\n null !== suspenseState && (retryLane = suspenseState.retryLane);\n break;\n case 19:\n retryCache = boundaryFiber.stateNode;\n break;\n case 22:\n retryCache = boundaryFiber.stateNode._retryCache;\n break;\n default:\n throw Error(\n \"Pinged unknown suspense boundary type. This is probably a bug in React.\"\n );\n }\n null !== retryCache && retryCache.delete(wakeable);\n retryTimedOutBoundary(boundaryFiber, retryLane);\n }\n function recursivelyTraverseAndDoubleInvokeEffectsInDEV(\n root$jscomp$0,\n parentFiber,\n isInStrictMode\n ) {\n if (0 !== (parentFiber.subtreeFlags & 67117056))\n for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n var root = root$jscomp$0,\n fiber = parentFiber,\n isStrictModeFiber = fiber.type === REACT_STRICT_MODE_TYPE;\n isStrictModeFiber = isInStrictMode || isStrictModeFiber;\n 22 !== fiber.tag\n ? fiber.flags & 67108864\n ? isStrictModeFiber &&\n runWithFiberInDEV(\n fiber,\n doubleInvokeEffectsOnFiber,\n root,\n fiber\n )\n : recursivelyTraverseAndDoubleInvokeEffectsInDEV(\n root,\n fiber,\n isStrictModeFiber\n )\n : null === fiber.memoizedState &&\n (isStrictModeFiber && fiber.flags & 8192\n ? runWithFiberInDEV(\n fiber,\n doubleInvokeEffectsOnFiber,\n root,\n fiber\n )\n : fiber.subtreeFlags & 67108864 &&\n runWithFiberInDEV(\n fiber,\n recursivelyTraverseAndDoubleInvokeEffectsInDEV,\n root,\n fiber,\n isStrictModeFiber\n ));\n parentFiber = parentFiber.sibling;\n }\n }\n function doubleInvokeEffectsOnFiber(root, fiber) {\n setIsStrictModeForDevtools(!0);\n try {\n disappearLayoutEffects(fiber),\n disconnectPassiveEffect(fiber),\n reappearLayoutEffects(root, fiber.alternate, fiber, !1),\n reconnectPassiveEffects(root, fiber, 0, null, !1, 0);\n } finally {\n setIsStrictModeForDevtools(!1);\n }\n }\n function commitDoubleInvokeEffectsInDEV(root) {\n var doubleInvokeEffects = !0;\n root.current.mode & (StrictLegacyMode | StrictEffectsMode) ||\n (doubleInvokeEffects = !1);\n recursivelyTraverseAndDoubleInvokeEffectsInDEV(\n root,\n root.current,\n doubleInvokeEffects\n );\n }\n function warnAboutUpdateOnNotYetMountedFiberInDEV(fiber) {\n if ((executionContext & RenderContext) === NoContext) {\n var tag = fiber.tag;\n if (\n 3 === tag ||\n 1 === tag ||\n 0 === tag ||\n 11 === tag ||\n 14 === tag ||\n 15 === tag\n ) {\n tag = getComponentNameFromFiber(fiber) || \"ReactComponent\";\n if (null !== didWarnStateUpdateForNotYetMountedComponent) {\n if (didWarnStateUpdateForNotYetMountedComponent.has(tag)) return;\n didWarnStateUpdateForNotYetMountedComponent.add(tag);\n } else didWarnStateUpdateForNotYetMountedComponent = new Set([tag]);\n runWithFiberInDEV(fiber, function () {\n console.error(\n \"Can't perform a React state update on a component that hasn't mounted yet. This indicates that you have a side-effect in your render function that asynchronously tries to update the component. Move this work to useEffect instead.\"\n );\n });\n }\n }\n }\n function restorePendingUpdaters(root, lanes) {\n isDevToolsPresent &&\n root.memoizedUpdaters.forEach(function (schedulingFiber) {\n addFiberToLanesMap(root, schedulingFiber, lanes);\n });\n }\n function scheduleCallback$1(priorityLevel, callback) {\n var actQueue = ReactSharedInternals.actQueue;\n return null !== actQueue\n ? (actQueue.push(callback), fakeActCallbackNode$1)\n : scheduleCallback$3(priorityLevel, callback);\n }\n function warnIfUpdatesNotWrappedWithActDEV(fiber) {\n isConcurrentActEnvironment() &&\n null === ReactSharedInternals.actQueue &&\n runWithFiberInDEV(fiber, function () {\n console.error(\n \"An update to %s inside a test was not wrapped in act(...).\\n\\nWhen testing, code that causes React state updates should be wrapped into act(...):\\n\\nact(() => {\\n /* fire events that update state */\\n});\\n/* assert on the output */\\n\\nThis ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act\",\n getComponentNameFromFiber(fiber)\n );\n });\n }\n function ensureRootIsScheduled(root) {\n root !== lastScheduledRoot &&\n null === root.next &&\n (null === lastScheduledRoot\n ? (firstScheduledRoot = lastScheduledRoot = root)\n : (lastScheduledRoot = lastScheduledRoot.next = root));\n mightHavePendingSyncWork = !0;\n null !== ReactSharedInternals.actQueue\n ? didScheduleMicrotask_act ||\n ((didScheduleMicrotask_act = !0), scheduleImmediateRootScheduleTask())\n : didScheduleMicrotask ||\n ((didScheduleMicrotask = !0), scheduleImmediateRootScheduleTask());\n }\n function flushSyncWorkAcrossRoots_impl(syncTransitionLanes, onlyLegacy) {\n if (!isFlushingWork && mightHavePendingSyncWork) {\n isFlushingWork = !0;\n do {\n var didPerformSomeWork = !1;\n for (var root = firstScheduledRoot; null !== root; ) {\n if (!onlyLegacy)\n if (0 !== syncTransitionLanes) {\n var pendingLanes = root.pendingLanes;\n if (0 === pendingLanes) var nextLanes = 0;\n else {\n var suspendedLanes = root.suspendedLanes,\n pingedLanes = root.pingedLanes;\n nextLanes =\n (1 << (31 - clz32(42 | syncTransitionLanes) + 1)) - 1;\n nextLanes &= pendingLanes & ~(suspendedLanes & ~pingedLanes);\n nextLanes =\n nextLanes & 201326741\n ? (nextLanes & 201326741) | 1\n : nextLanes\n ? nextLanes | 2\n : 0;\n }\n 0 !== nextLanes &&\n ((didPerformSomeWork = !0),\n performSyncWorkOnRoot(root, nextLanes));\n } else\n (nextLanes = workInProgressRootRenderLanes),\n (nextLanes = getNextLanes(\n root,\n root === workInProgressRoot ? nextLanes : 0,\n null !== root.cancelPendingCommit ||\n root.timeoutHandle !== noTimeout\n )),\n 0 === (nextLanes & 3) ||\n checkIfRootIsPrerendering(root, nextLanes) ||\n ((didPerformSomeWork = !0),\n performSyncWorkOnRoot(root, nextLanes));\n root = root.next;\n }\n } while (didPerformSomeWork);\n isFlushingWork = !1;\n }\n }\n function processRootScheduleInImmediateTask() {\n processRootScheduleInMicrotask();\n }\n function processRootScheduleInMicrotask() {\n mightHavePendingSyncWork =\n didScheduleMicrotask_act =\n didScheduleMicrotask =\n !1;\n var syncTransitionLanes = 0;\n 0 !== currentEventTransitionLane &&\n shouldAttemptEagerTransition() &&\n (syncTransitionLanes = currentEventTransitionLane);\n for (\n var currentTime = now$1(), prev = null, root = firstScheduledRoot;\n null !== root;\n\n ) {\n var next = root.next,\n nextLanes = scheduleTaskForRootDuringMicrotask(root, currentTime);\n if (0 === nextLanes)\n (root.next = null),\n null === prev ? (firstScheduledRoot = next) : (prev.next = next),\n null === next && (lastScheduledRoot = prev);\n else if (\n ((prev = root), 0 !== syncTransitionLanes || 0 !== (nextLanes & 3))\n )\n mightHavePendingSyncWork = !0;\n root = next;\n }\n (pendingEffectsStatus !== NO_PENDING_EFFECTS &&\n pendingEffectsStatus !== PENDING_PASSIVE_PHASE) ||\n flushSyncWorkAcrossRoots_impl(syncTransitionLanes, !1);\n 0 !== currentEventTransitionLane && (currentEventTransitionLane = 0);\n }\n function scheduleTaskForRootDuringMicrotask(root, currentTime) {\n for (\n var suspendedLanes = root.suspendedLanes,\n pingedLanes = root.pingedLanes,\n expirationTimes = root.expirationTimes,\n lanes = root.pendingLanes & -62914561;\n 0 < lanes;\n\n ) {\n var index = 31 - clz32(lanes),\n lane = 1 << index,\n expirationTime = expirationTimes[index];\n if (-1 === expirationTime) {\n if (0 === (lane & suspendedLanes) || 0 !== (lane & pingedLanes))\n expirationTimes[index] = computeExpirationTime(lane, currentTime);\n } else expirationTime <= currentTime && (root.expiredLanes |= lane);\n lanes &= ~lane;\n }\n currentTime = workInProgressRoot;\n suspendedLanes = workInProgressRootRenderLanes;\n suspendedLanes = getNextLanes(\n root,\n root === currentTime ? suspendedLanes : 0,\n null !== root.cancelPendingCommit || root.timeoutHandle !== noTimeout\n );\n pingedLanes = root.callbackNode;\n if (\n 0 === suspendedLanes ||\n (root === currentTime &&\n (workInProgressSuspendedReason === SuspendedOnData ||\n workInProgressSuspendedReason === SuspendedOnAction)) ||\n null !== root.cancelPendingCommit\n )\n return (\n null !== pingedLanes && cancelCallback(pingedLanes),\n (root.callbackNode = null),\n (root.callbackPriority = 0)\n );\n if (\n 0 === (suspendedLanes & 3) ||\n checkIfRootIsPrerendering(root, suspendedLanes)\n ) {\n currentTime = suspendedLanes & -suspendedLanes;\n if (\n currentTime !== root.callbackPriority ||\n (null !== ReactSharedInternals.actQueue &&\n pingedLanes !== fakeActCallbackNode)\n )\n cancelCallback(pingedLanes);\n else return currentTime;\n switch (lanesToEventPriority(suspendedLanes)) {\n case DiscreteEventPriority:\n case ContinuousEventPriority:\n suspendedLanes = UserBlockingPriority;\n break;\n case DefaultEventPriority:\n suspendedLanes = NormalPriority$1;\n break;\n case IdleEventPriority:\n suspendedLanes = IdlePriority;\n break;\n default:\n suspendedLanes = NormalPriority$1;\n }\n pingedLanes = performWorkOnRootViaSchedulerTask.bind(null, root);\n null !== ReactSharedInternals.actQueue\n ? (ReactSharedInternals.actQueue.push(pingedLanes),\n (suspendedLanes = fakeActCallbackNode))\n : (suspendedLanes = scheduleCallback$3(suspendedLanes, pingedLanes));\n root.callbackPriority = currentTime;\n root.callbackNode = suspendedLanes;\n return currentTime;\n }\n null !== pingedLanes && cancelCallback(pingedLanes);\n root.callbackPriority = 2;\n root.callbackNode = null;\n return 2;\n }\n function performWorkOnRootViaSchedulerTask(root, didTimeout) {\n nestedUpdateScheduled = currentUpdateIsNested = !1;\n if (\n pendingEffectsStatus !== NO_PENDING_EFFECTS &&\n pendingEffectsStatus !== PENDING_PASSIVE_PHASE\n )\n return (root.callbackNode = null), (root.callbackPriority = 0), null;\n var originalCallbackNode = root.callbackNode;\n if (flushPendingEffects(!0) && root.callbackNode !== originalCallbackNode)\n return null;\n var workInProgressRootRenderLanes$jscomp$0 =\n workInProgressRootRenderLanes;\n workInProgressRootRenderLanes$jscomp$0 = getNextLanes(\n root,\n root === workInProgressRoot\n ? workInProgressRootRenderLanes$jscomp$0\n : 0,\n null !== root.cancelPendingCommit || root.timeoutHandle !== noTimeout\n );\n if (0 === workInProgressRootRenderLanes$jscomp$0) return null;\n performWorkOnRoot(\n root,\n workInProgressRootRenderLanes$jscomp$0,\n didTimeout\n );\n scheduleTaskForRootDuringMicrotask(root, now$1());\n return null != root.callbackNode &&\n root.callbackNode === originalCallbackNode\n ? performWorkOnRootViaSchedulerTask.bind(null, root)\n : null;\n }\n function performSyncWorkOnRoot(root, lanes) {\n if (flushPendingEffects()) return null;\n currentUpdateIsNested = nestedUpdateScheduled;\n nestedUpdateScheduled = !1;\n performWorkOnRoot(root, lanes, !0);\n }\n function cancelCallback(callbackNode) {\n callbackNode !== fakeActCallbackNode &&\n null !== callbackNode &&\n cancelCallback$1(callbackNode);\n }\n function scheduleImmediateRootScheduleTask() {\n null !== ReactSharedInternals.actQueue &&\n ReactSharedInternals.actQueue.push(function () {\n processRootScheduleInMicrotask();\n return null;\n });\n scheduleMicrotask(function () {\n (executionContext & (RenderContext | CommitContext)) !== NoContext\n ? scheduleCallback$3(\n ImmediatePriority,\n processRootScheduleInImmediateTask\n )\n : processRootScheduleInMicrotask();\n });\n }\n function requestTransitionLane() {\n if (0 === currentEventTransitionLane) {\n var actionScopeLane = currentEntangledLane;\n currentEventTransitionLane =\n 0 !== actionScopeLane ? actionScopeLane : claimNextTransitionLane();\n }\n return currentEventTransitionLane;\n }\n function coerceFormActionProp(actionProp) {\n if (\n null == actionProp ||\n \"symbol\" === typeof actionProp ||\n \"boolean\" === typeof actionProp\n )\n return null;\n if (\"function\" === typeof actionProp) return actionProp;\n checkAttributeStringCoercion(actionProp, \"action\");\n return sanitizeURL(\"\" + actionProp);\n }\n function createFormDataWithSubmitter(form, submitter) {\n var temp = submitter.ownerDocument.createElement(\"input\");\n temp.name = submitter.name;\n temp.value = submitter.value;\n form.id && temp.setAttribute(\"form\", form.id);\n submitter.parentNode.insertBefore(temp, submitter);\n form = new FormData(form);\n temp.parentNode.removeChild(temp);\n return form;\n }\n function extractEvents$1(\n dispatchQueue,\n domEventName,\n maybeTargetInst,\n nativeEvent,\n nativeEventTarget\n ) {\n if (\n \"submit\" === domEventName &&\n maybeTargetInst &&\n maybeTargetInst.stateNode === nativeEventTarget\n ) {\n var action = coerceFormActionProp(\n (nativeEventTarget[internalPropsKey] || null).action\n ),\n submitter = nativeEvent.submitter;\n submitter &&\n ((domEventName = (domEventName = submitter[internalPropsKey] || null)\n ? coerceFormActionProp(domEventName.formAction)\n : submitter.getAttribute(\"formAction\")),\n null !== domEventName &&\n ((action = domEventName), (submitter = null)));\n var event = new SyntheticEvent(\n \"action\",\n \"action\",\n null,\n nativeEvent,\n nativeEventTarget\n );\n dispatchQueue.push({\n event: event,\n listeners: [\n {\n instance: null,\n listener: function () {\n if (nativeEvent.defaultPrevented) {\n if (0 !== currentEventTransitionLane) {\n var formData = submitter\n ? createFormDataWithSubmitter(\n nativeEventTarget,\n submitter\n )\n : new FormData(nativeEventTarget),\n pendingState = {\n pending: !0,\n data: formData,\n method: nativeEventTarget.method,\n action: action\n };\n Object.freeze(pendingState);\n startHostTransition(\n maybeTargetInst,\n pendingState,\n null,\n formData\n );\n }\n } else\n \"function\" === typeof action &&\n (event.preventDefault(),\n (formData = submitter\n ? createFormDataWithSubmitter(\n nativeEventTarget,\n submitter\n )\n : new FormData(nativeEventTarget)),\n (pendingState = {\n pending: !0,\n data: formData,\n method: nativeEventTarget.method,\n action: action\n }),\n Object.freeze(pendingState),\n startHostTransition(\n maybeTargetInst,\n pendingState,\n action,\n formData\n ));\n },\n currentTarget: nativeEventTarget\n }\n ]\n });\n }\n }\n function executeDispatch(event, listener, currentTarget) {\n event.currentTarget = currentTarget;\n try {\n listener(event);\n } catch (error) {\n reportGlobalError(error);\n }\n event.currentTarget = null;\n }\n function processDispatchQueue(dispatchQueue, eventSystemFlags) {\n eventSystemFlags = 0 !== (eventSystemFlags & 4);\n for (var i = 0; i < dispatchQueue.length; i++) {\n var _dispatchQueue$i = dispatchQueue[i];\n a: {\n var previousInstance = void 0,\n event = _dispatchQueue$i.event;\n _dispatchQueue$i = _dispatchQueue$i.listeners;\n if (eventSystemFlags)\n for (\n var i$jscomp$0 = _dispatchQueue$i.length - 1;\n 0 <= i$jscomp$0;\n i$jscomp$0--\n ) {\n var _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0],\n instance = _dispatchListeners$i.instance,\n currentTarget = _dispatchListeners$i.currentTarget;\n _dispatchListeners$i = _dispatchListeners$i.listener;\n if (instance !== previousInstance && event.isPropagationStopped())\n break a;\n null !== instance\n ? runWithFiberInDEV(\n instance,\n executeDispatch,\n event,\n _dispatchListeners$i,\n currentTarget\n )\n : executeDispatch(event, _dispatchListeners$i, currentTarget);\n previousInstance = instance;\n }\n else\n for (\n i$jscomp$0 = 0;\n i$jscomp$0 < _dispatchQueue$i.length;\n i$jscomp$0++\n ) {\n _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0];\n instance = _dispatchListeners$i.instance;\n currentTarget = _dispatchListeners$i.currentTarget;\n _dispatchListeners$i = _dispatchListeners$i.listener;\n if (instance !== previousInstance && event.isPropagationStopped())\n break a;\n null !== instance\n ? runWithFiberInDEV(\n instance,\n executeDispatch,\n event,\n _dispatchListeners$i,\n currentTarget\n )\n : executeDispatch(event, _dispatchListeners$i, currentTarget);\n previousInstance = instance;\n }\n }\n }\n }\n function listenToNonDelegatedEvent(domEventName, targetElement) {\n nonDelegatedEvents.has(domEventName) ||\n console.error(\n 'Did not expect a listenToNonDelegatedEvent() call for \"%s\". This is a bug in React. Please file an issue.',\n domEventName\n );\n var listenerSet = targetElement[internalEventHandlersKey];\n void 0 === listenerSet &&\n (listenerSet = targetElement[internalEventHandlersKey] = new Set());\n var listenerSetKey = domEventName + \"__bubble\";\n listenerSet.has(listenerSetKey) ||\n (addTrappedEventListener(targetElement, domEventName, 2, !1),\n listenerSet.add(listenerSetKey));\n }\n function listenToNativeEvent(domEventName, isCapturePhaseListener, target) {\n nonDelegatedEvents.has(domEventName) &&\n !isCapturePhaseListener &&\n console.error(\n 'Did not expect a listenToNativeEvent() call for \"%s\" in the bubble phase. This is a bug in React. Please file an issue.',\n domEventName\n );\n var eventSystemFlags = 0;\n isCapturePhaseListener && (eventSystemFlags |= 4);\n addTrappedEventListener(\n target,\n domEventName,\n eventSystemFlags,\n isCapturePhaseListener\n );\n }\n function listenToAllSupportedEvents(rootContainerElement) {\n if (!rootContainerElement[listeningMarker]) {\n rootContainerElement[listeningMarker] = !0;\n allNativeEvents.forEach(function (domEventName) {\n \"selectionchange\" !== domEventName &&\n (nonDelegatedEvents.has(domEventName) ||\n listenToNativeEvent(domEventName, !1, rootContainerElement),\n listenToNativeEvent(domEventName, !0, rootContainerElement));\n });\n var ownerDocument =\n 9 === rootContainerElement.nodeType\n ? rootContainerElement\n : rootContainerElement.ownerDocument;\n null === ownerDocument ||\n ownerDocument[listeningMarker] ||\n ((ownerDocument[listeningMarker] = !0),\n listenToNativeEvent(\"selectionchange\", !1, ownerDocument));\n }\n }\n function addTrappedEventListener(\n targetContainer,\n domEventName,\n eventSystemFlags,\n isCapturePhaseListener\n ) {\n switch (getEventPriority(domEventName)) {\n case DiscreteEventPriority:\n var listenerWrapper = dispatchDiscreteEvent;\n break;\n case ContinuousEventPriority:\n listenerWrapper = dispatchContinuousEvent;\n break;\n default:\n listenerWrapper = dispatchEvent;\n }\n eventSystemFlags = listenerWrapper.bind(\n null,\n domEventName,\n eventSystemFlags,\n targetContainer\n );\n listenerWrapper = void 0;\n !passiveBrowserEventsSupported ||\n (\"touchstart\" !== domEventName &&\n \"touchmove\" !== domEventName &&\n \"wheel\" !== domEventName) ||\n (listenerWrapper = !0);\n isCapturePhaseListener\n ? void 0 !== listenerWrapper\n ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n capture: !0,\n passive: listenerWrapper\n })\n : targetContainer.addEventListener(domEventName, eventSystemFlags, !0)\n : void 0 !== listenerWrapper\n ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n passive: listenerWrapper\n })\n : targetContainer.addEventListener(\n domEventName,\n eventSystemFlags,\n !1\n );\n }\n function dispatchEventForPluginEventSystem(\n domEventName,\n eventSystemFlags,\n nativeEvent,\n targetInst$jscomp$0,\n targetContainer\n ) {\n var ancestorInst = targetInst$jscomp$0;\n if (\n 0 === (eventSystemFlags & 1) &&\n 0 === (eventSystemFlags & 2) &&\n null !== targetInst$jscomp$0\n )\n a: for (;;) {\n if (null === targetInst$jscomp$0) return;\n var nodeTag = targetInst$jscomp$0.tag;\n if (3 === nodeTag || 4 === nodeTag) {\n var container = targetInst$jscomp$0.stateNode.containerInfo;\n if (container === targetContainer) break;\n if (4 === nodeTag)\n for (nodeTag = targetInst$jscomp$0.return; null !== nodeTag; ) {\n var grandTag = nodeTag.tag;\n if (\n (3 === grandTag || 4 === grandTag) &&\n nodeTag.stateNode.containerInfo === targetContainer\n )\n return;\n nodeTag = nodeTag.return;\n }\n for (; null !== container; ) {\n nodeTag = getClosestInstanceFromNode(container);\n if (null === nodeTag) return;\n grandTag = nodeTag.tag;\n if (\n 5 === grandTag ||\n 6 === grandTag ||\n 26 === grandTag ||\n 27 === grandTag\n ) {\n targetInst$jscomp$0 = ancestorInst = nodeTag;\n continue a;\n }\n container = container.parentNode;\n }\n }\n targetInst$jscomp$0 = targetInst$jscomp$0.return;\n }\n batchedUpdates$1(function () {\n var targetInst = ancestorInst,\n nativeEventTarget = getEventTarget(nativeEvent),\n dispatchQueue = [];\n a: {\n var reactName = topLevelEventsToReactNames.get(domEventName);\n if (void 0 !== reactName) {\n var SyntheticEventCtor = SyntheticEvent,\n reactEventType = domEventName;\n switch (domEventName) {\n case \"keypress\":\n if (0 === getEventCharCode(nativeEvent)) break a;\n case \"keydown\":\n case \"keyup\":\n SyntheticEventCtor = SyntheticKeyboardEvent;\n break;\n case \"focusin\":\n reactEventType = \"focus\";\n SyntheticEventCtor = SyntheticFocusEvent;\n break;\n case \"focusout\":\n reactEventType = \"blur\";\n SyntheticEventCtor = SyntheticFocusEvent;\n break;\n case \"beforeblur\":\n case \"afterblur\":\n SyntheticEventCtor = SyntheticFocusEvent;\n break;\n case \"click\":\n if (2 === nativeEvent.button) break a;\n case \"auxclick\":\n case \"dblclick\":\n case \"mousedown\":\n case \"mousemove\":\n case \"mouseup\":\n case \"mouseout\":\n case \"mouseover\":\n case \"contextmenu\":\n SyntheticEventCtor = SyntheticMouseEvent;\n break;\n case \"drag\":\n case \"dragend\":\n case \"dragenter\":\n case \"dragexit\":\n case \"dragleave\":\n case \"dragover\":\n case \"dragstart\":\n case \"drop\":\n SyntheticEventCtor = SyntheticDragEvent;\n break;\n case \"touchcancel\":\n case \"touchend\":\n case \"touchmove\":\n case \"touchstart\":\n SyntheticEventCtor = SyntheticTouchEvent;\n break;\n case ANIMATION_END:\n case ANIMATION_ITERATION:\n case ANIMATION_START:\n SyntheticEventCtor = SyntheticAnimationEvent;\n break;\n case TRANSITION_END:\n SyntheticEventCtor = SyntheticTransitionEvent;\n break;\n case \"scroll\":\n case \"scrollend\":\n SyntheticEventCtor = SyntheticUIEvent;\n break;\n case \"wheel\":\n SyntheticEventCtor = SyntheticWheelEvent;\n break;\n case \"copy\":\n case \"cut\":\n case \"paste\":\n SyntheticEventCtor = SyntheticClipboardEvent;\n break;\n case \"gotpointercapture\":\n case \"lostpointercapture\":\n case \"pointercancel\":\n case \"pointerdown\":\n case \"pointermove\":\n case \"pointerout\":\n case \"pointerover\":\n case \"pointerup\":\n SyntheticEventCtor = SyntheticPointerEvent;\n break;\n case \"toggle\":\n case \"beforetoggle\":\n SyntheticEventCtor = SyntheticToggleEvent;\n }\n var inCapturePhase = 0 !== (eventSystemFlags & 4),\n accumulateTargetOnly =\n !inCapturePhase &&\n (\"scroll\" === domEventName || \"scrollend\" === domEventName),\n reactEventName = inCapturePhase\n ? null !== reactName\n ? reactName + \"Capture\"\n : null\n : reactName;\n inCapturePhase = [];\n for (\n var instance = targetInst, lastHostComponent;\n null !== instance;\n\n ) {\n var _instance2 = instance;\n lastHostComponent = _instance2.stateNode;\n _instance2 = _instance2.tag;\n (5 !== _instance2 && 26 !== _instance2 && 27 !== _instance2) ||\n null === lastHostComponent ||\n null === reactEventName ||\n ((_instance2 = getListener(instance, reactEventName)),\n null != _instance2 &&\n inCapturePhase.push(\n createDispatchListener(\n instance,\n _instance2,\n lastHostComponent\n )\n ));\n if (accumulateTargetOnly) break;\n instance = instance.return;\n }\n 0 < inCapturePhase.length &&\n ((reactName = new SyntheticEventCtor(\n reactName,\n reactEventType,\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({\n event: reactName,\n listeners: inCapturePhase\n }));\n }\n }\n if (0 === (eventSystemFlags & 7)) {\n a: {\n reactName =\n \"mouseover\" === domEventName || \"pointerover\" === domEventName;\n SyntheticEventCtor =\n \"mouseout\" === domEventName || \"pointerout\" === domEventName;\n if (\n reactName &&\n nativeEvent !== currentReplayingEvent &&\n (reactEventType =\n nativeEvent.relatedTarget || nativeEvent.fromElement) &&\n (getClosestInstanceFromNode(reactEventType) ||\n reactEventType[internalContainerInstanceKey])\n )\n break a;\n if (SyntheticEventCtor || reactName) {\n reactName =\n nativeEventTarget.window === nativeEventTarget\n ? nativeEventTarget\n : (reactName = nativeEventTarget.ownerDocument)\n ? reactName.defaultView || reactName.parentWindow\n : window;\n if (SyntheticEventCtor) {\n if (\n ((reactEventType =\n nativeEvent.relatedTarget || nativeEvent.toElement),\n (SyntheticEventCtor = targetInst),\n (reactEventType = reactEventType\n ? getClosestInstanceFromNode(reactEventType)\n : null),\n null !== reactEventType &&\n ((accumulateTargetOnly =\n getNearestMountedFiber(reactEventType)),\n (inCapturePhase = reactEventType.tag),\n reactEventType !== accumulateTargetOnly ||\n (5 !== inCapturePhase &&\n 27 !== inCapturePhase &&\n 6 !== inCapturePhase)))\n )\n reactEventType = null;\n } else (SyntheticEventCtor = null), (reactEventType = targetInst);\n if (SyntheticEventCtor !== reactEventType) {\n inCapturePhase = SyntheticMouseEvent;\n _instance2 = \"onMouseLeave\";\n reactEventName = \"onMouseEnter\";\n instance = \"mouse\";\n if (\n \"pointerout\" === domEventName ||\n \"pointerover\" === domEventName\n )\n (inCapturePhase = SyntheticPointerEvent),\n (_instance2 = \"onPointerLeave\"),\n (reactEventName = \"onPointerEnter\"),\n (instance = \"pointer\");\n accumulateTargetOnly =\n null == SyntheticEventCtor\n ? reactName\n : getNodeFromInstance(SyntheticEventCtor);\n lastHostComponent =\n null == reactEventType\n ? reactName\n : getNodeFromInstance(reactEventType);\n reactName = new inCapturePhase(\n _instance2,\n instance + \"leave\",\n SyntheticEventCtor,\n nativeEvent,\n nativeEventTarget\n );\n reactName.target = accumulateTargetOnly;\n reactName.relatedTarget = lastHostComponent;\n _instance2 = null;\n getClosestInstanceFromNode(nativeEventTarget) === targetInst &&\n ((inCapturePhase = new inCapturePhase(\n reactEventName,\n instance + \"enter\",\n reactEventType,\n nativeEvent,\n nativeEventTarget\n )),\n (inCapturePhase.target = lastHostComponent),\n (inCapturePhase.relatedTarget = accumulateTargetOnly),\n (_instance2 = inCapturePhase));\n accumulateTargetOnly = _instance2;\n if (SyntheticEventCtor && reactEventType)\n b: {\n inCapturePhase = getParent;\n reactEventName = SyntheticEventCtor;\n instance = reactEventType;\n lastHostComponent = 0;\n for (\n _instance2 = reactEventName;\n _instance2;\n _instance2 = inCapturePhase(_instance2)\n )\n lastHostComponent++;\n _instance2 = 0;\n for (\n var tempB = instance;\n tempB;\n tempB = inCapturePhase(tempB)\n )\n _instance2++;\n for (; 0 < lastHostComponent - _instance2; )\n (reactEventName = inCapturePhase(reactEventName)),\n lastHostComponent--;\n for (; 0 < _instance2 - lastHostComponent; )\n (instance = inCapturePhase(instance)), _instance2--;\n for (; lastHostComponent--; ) {\n if (\n reactEventName === instance ||\n (null !== instance &&\n reactEventName === instance.alternate)\n ) {\n inCapturePhase = reactEventName;\n break b;\n }\n reactEventName = inCapturePhase(reactEventName);\n instance = inCapturePhase(instance);\n }\n inCapturePhase = null;\n }\n else inCapturePhase = null;\n null !== SyntheticEventCtor &&\n accumulateEnterLeaveListenersForEvent(\n dispatchQueue,\n reactName,\n SyntheticEventCtor,\n inCapturePhase,\n !1\n );\n null !== reactEventType &&\n null !== accumulateTargetOnly &&\n accumulateEnterLeaveListenersForEvent(\n dispatchQueue,\n accumulateTargetOnly,\n reactEventType,\n inCapturePhase,\n !0\n );\n }\n }\n }\n a: {\n reactName = targetInst ? getNodeFromInstance(targetInst) : window;\n SyntheticEventCtor =\n reactName.nodeName && reactName.nodeName.toLowerCase();\n if (\n \"select\" === SyntheticEventCtor ||\n (\"input\" === SyntheticEventCtor && \"file\" === reactName.type)\n )\n var getTargetInstFunc = getTargetInstForChangeEvent;\n else if (isTextInputElement(reactName))\n if (isInputEventSupported)\n getTargetInstFunc = getTargetInstForInputOrChangeEvent;\n else {\n getTargetInstFunc = getTargetInstForInputEventPolyfill;\n var handleEventFunc = handleEventsForInputEventPolyfill;\n }\n else\n (SyntheticEventCtor = reactName.nodeName),\n !SyntheticEventCtor ||\n \"input\" !== SyntheticEventCtor.toLowerCase() ||\n (\"checkbox\" !== reactName.type && \"radio\" !== reactName.type)\n ? targetInst &&\n isCustomElement(targetInst.elementType) &&\n (getTargetInstFunc = getTargetInstForChangeEvent)\n : (getTargetInstFunc = getTargetInstForClickEvent);\n if (\n getTargetInstFunc &&\n (getTargetInstFunc = getTargetInstFunc(domEventName, targetInst))\n ) {\n createAndAccumulateChangeEvent(\n dispatchQueue,\n getTargetInstFunc,\n nativeEvent,\n nativeEventTarget\n );\n break a;\n }\n handleEventFunc &&\n handleEventFunc(domEventName, reactName, targetInst);\n \"focusout\" === domEventName &&\n targetInst &&\n \"number\" === reactName.type &&\n null != targetInst.memoizedProps.value &&\n setDefaultValue(reactName, \"number\", reactName.value);\n }\n handleEventFunc = targetInst\n ? getNodeFromInstance(targetInst)\n : window;\n switch (domEventName) {\n case \"focusin\":\n if (\n isTextInputElement(handleEventFunc) ||\n \"true\" === handleEventFunc.contentEditable\n )\n (activeElement = handleEventFunc),\n (activeElementInst = targetInst),\n (lastSelection = null);\n break;\n case \"focusout\":\n lastSelection = activeElementInst = activeElement = null;\n break;\n case \"mousedown\":\n mouseDown = !0;\n break;\n case \"contextmenu\":\n case \"mouseup\":\n case \"dragend\":\n mouseDown = !1;\n constructSelectEvent(\n dispatchQueue,\n nativeEvent,\n nativeEventTarget\n );\n break;\n case \"selectionchange\":\n if (skipSelectionChangeEvent) break;\n case \"keydown\":\n case \"keyup\":\n constructSelectEvent(\n dispatchQueue,\n nativeEvent,\n nativeEventTarget\n );\n }\n var fallbackData;\n if (canUseCompositionEvent)\n b: {\n switch (domEventName) {\n case \"compositionstart\":\n var eventType = \"onCompositionStart\";\n break b;\n case \"compositionend\":\n eventType = \"onCompositionEnd\";\n break b;\n case \"compositionupdate\":\n eventType = \"onCompositionUpdate\";\n break b;\n }\n eventType = void 0;\n }\n else\n isComposing\n ? isFallbackCompositionEnd(domEventName, nativeEvent) &&\n (eventType = \"onCompositionEnd\")\n : \"keydown\" === domEventName &&\n nativeEvent.keyCode === START_KEYCODE &&\n (eventType = \"onCompositionStart\");\n eventType &&\n (useFallbackCompositionData &&\n \"ko\" !== nativeEvent.locale &&\n (isComposing || \"onCompositionStart\" !== eventType\n ? \"onCompositionEnd\" === eventType &&\n isComposing &&\n (fallbackData = getData())\n : ((root = nativeEventTarget),\n (startText = \"value\" in root ? root.value : root.textContent),\n (isComposing = !0))),\n (handleEventFunc = accumulateTwoPhaseListeners(\n targetInst,\n eventType\n )),\n 0 < handleEventFunc.length &&\n ((eventType = new SyntheticCompositionEvent(\n eventType,\n domEventName,\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({\n event: eventType,\n listeners: handleEventFunc\n }),\n fallbackData\n ? (eventType.data = fallbackData)\n : ((fallbackData = getDataFromCustomEvent(nativeEvent)),\n null !== fallbackData && (eventType.data = fallbackData))));\n if (\n (fallbackData = canUseTextInputEvent\n ? getNativeBeforeInputChars(domEventName, nativeEvent)\n : getFallbackBeforeInputChars(domEventName, nativeEvent))\n )\n (eventType = accumulateTwoPhaseListeners(\n targetInst,\n \"onBeforeInput\"\n )),\n 0 < eventType.length &&\n ((handleEventFunc = new SyntheticInputEvent(\n \"onBeforeInput\",\n \"beforeinput\",\n null,\n nativeEvent,\n nativeEventTarget\n )),\n dispatchQueue.push({\n event: handleEventFunc,\n listeners: eventType\n }),\n (handleEventFunc.data = fallbackData));\n extractEvents$1(\n dispatchQueue,\n domEventName,\n targetInst,\n nativeEvent,\n nativeEventTarget\n );\n }\n processDispatchQueue(dispatchQueue, eventSystemFlags);\n });\n }\n function createDispatchListener(instance, listener, currentTarget) {\n return {\n instance: instance,\n listener: listener,\n currentTarget: currentTarget\n };\n }\n function accumulateTwoPhaseListeners(targetFiber, reactName) {\n for (\n var captureName = reactName + \"Capture\", listeners = [];\n null !== targetFiber;\n\n ) {\n var _instance3 = targetFiber,\n stateNode = _instance3.stateNode;\n _instance3 = _instance3.tag;\n (5 !== _instance3 && 26 !== _instance3 && 27 !== _instance3) ||\n null === stateNode ||\n ((_instance3 = getListener(targetFiber, captureName)),\n null != _instance3 &&\n listeners.unshift(\n createDispatchListener(targetFiber, _instance3, stateNode)\n ),\n (_instance3 = getListener(targetFiber, reactName)),\n null != _instance3 &&\n listeners.push(\n createDispatchListener(targetFiber, _instance3, stateNode)\n ));\n if (3 === targetFiber.tag) return listeners;\n targetFiber = targetFiber.return;\n }\n return [];\n }\n function getParent(inst) {\n if (null === inst) return null;\n do inst = inst.return;\n while (inst && 5 !== inst.tag && 27 !== inst.tag);\n return inst ? inst : null;\n }\n function accumulateEnterLeaveListenersForEvent(\n dispatchQueue,\n event,\n target,\n common,\n inCapturePhase\n ) {\n for (\n var registrationName = event._reactName, listeners = [];\n null !== target && target !== common;\n\n ) {\n var _instance4 = target,\n alternate = _instance4.alternate,\n stateNode = _instance4.stateNode;\n _instance4 = _instance4.tag;\n if (null !== alternate && alternate === common) break;\n (5 !== _instance4 && 26 !== _instance4 && 27 !== _instance4) ||\n null === stateNode ||\n ((alternate = stateNode),\n inCapturePhase\n ? ((stateNode = getListener(target, registrationName)),\n null != stateNode &&\n listeners.unshift(\n createDispatchListener(target, stateNode, alternate)\n ))\n : inCapturePhase ||\n ((stateNode = getListener(target, registrationName)),\n null != stateNode &&\n listeners.push(\n createDispatchListener(target, stateNode, alternate)\n )));\n target = target.return;\n }\n 0 !== listeners.length &&\n dispatchQueue.push({ event: event, listeners: listeners });\n }\n function validatePropertiesInDevelopment(type, props) {\n validateProperties$2(type, props);\n (\"input\" !== type && \"textarea\" !== type && \"select\" !== type) ||\n null == props ||\n null !== props.value ||\n didWarnValueNull ||\n ((didWarnValueNull = !0),\n \"select\" === type && props.multiple\n ? console.error(\n \"`value` prop on `%s` should not be null. Consider using an empty array when `multiple` is set to `true` to clear the component or `undefined` for uncontrolled components.\",\n type\n )\n : console.error(\n \"`value` prop on `%s` should not be null. Consider using an empty string to clear the component or `undefined` for uncontrolled components.\",\n type\n ));\n var eventRegistry = {\n registrationNameDependencies: registrationNameDependencies,\n possibleRegistrationNames: possibleRegistrationNames\n };\n isCustomElement(type) ||\n \"string\" === typeof props.is ||\n warnUnknownProperties(type, props, eventRegistry);\n props.contentEditable &&\n !props.suppressContentEditableWarning &&\n null != props.children &&\n console.error(\n \"A component is `contentEditable` and contains `children` managed by React. It is now your responsibility to guarantee that none of those nodes are unexpectedly modified or duplicated. This is probably not intentional.\"\n );\n }\n function warnForPropDifference(\n propName,\n serverValue,\n clientValue,\n serverDifferences\n ) {\n serverValue !== clientValue &&\n ((clientValue = normalizeMarkupForTextOrAttribute(clientValue)),\n normalizeMarkupForTextOrAttribute(serverValue) !== clientValue &&\n (serverDifferences[propName] = serverValue));\n }\n function warnForExtraAttributes(\n domElement,\n attributeNames,\n serverDifferences\n ) {\n attributeNames.forEach(function (attributeName) {\n serverDifferences[getPropNameFromAttributeName(attributeName)] =\n \"style\" === attributeName\n ? getStylesObjectFromElement(domElement)\n : domElement.getAttribute(attributeName);\n });\n }\n function warnForInvalidEventListener(registrationName, listener) {\n !1 === listener\n ? console.error(\n \"Expected `%s` listener to be a function, instead got `false`.\\n\\nIf you used to conditionally omit it with %s={condition && value}, pass %s={condition ? value : undefined} instead.\",\n registrationName,\n registrationName,\n registrationName\n )\n : console.error(\n \"Expected `%s` listener to be a function, instead got a value of `%s` type.\",\n registrationName,\n typeof listener\n );\n }\n function normalizeHTML(parent, html) {\n parent =\n parent.namespaceURI === MATH_NAMESPACE ||\n parent.namespaceURI === SVG_NAMESPACE\n ? parent.ownerDocument.createElementNS(\n parent.namespaceURI,\n parent.tagName\n )\n : parent.ownerDocument.createElement(parent.tagName);\n parent.innerHTML = html;\n return parent.innerHTML;\n }\n function normalizeMarkupForTextOrAttribute(markup) {\n willCoercionThrow(markup) &&\n (console.error(\n \"The provided HTML markup uses a value of unsupported type %s. This value must be coerced to a string before using it here.\",\n typeName(markup)\n ),\n testStringCoercion(markup));\n return (\"string\" === typeof markup ? markup : \"\" + markup)\n .replace(NORMALIZE_NEWLINES_REGEX, \"\\n\")\n .replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, \"\");\n }\n function checkForUnmatchedText(serverText, clientText) {\n clientText = normalizeMarkupForTextOrAttribute(clientText);\n return normalizeMarkupForTextOrAttribute(serverText) === clientText\n ? !0\n : !1;\n }\n function setProp(domElement, tag, key, value, props, prevValue) {\n switch (key) {\n case \"children\":\n if (\"string\" === typeof value)\n validateTextNesting(value, tag, !1),\n \"body\" === tag ||\n (\"textarea\" === tag && \"\" === value) ||\n setTextContent(domElement, value);\n else if (\"number\" === typeof value || \"bigint\" === typeof value)\n validateTextNesting(\"\" + value, tag, !1),\n \"body\" !== tag && setTextContent(domElement, \"\" + value);\n break;\n case \"className\":\n setValueForKnownAttribute(domElement, \"class\", value);\n break;\n case \"tabIndex\":\n setValueForKnownAttribute(domElement, \"tabindex\", value);\n break;\n case \"dir\":\n case \"role\":\n case \"viewBox\":\n case \"width\":\n case \"height\":\n setValueForKnownAttribute(domElement, key, value);\n break;\n case \"style\":\n setValueForStyles(domElement, value, prevValue);\n break;\n case \"data\":\n if (\"object\" !== tag) {\n setValueForKnownAttribute(domElement, \"data\", value);\n break;\n }\n case \"src\":\n case \"href\":\n if (\"\" === value && (\"a\" !== tag || \"href\" !== key)) {\n \"src\" === key\n ? console.error(\n 'An empty string (\"\") was passed to the %s attribute. This may cause the browser to download the whole page again over the network. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',\n key,\n key\n )\n : console.error(\n 'An empty string (\"\") was passed to the %s attribute. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',\n key,\n key\n );\n domElement.removeAttribute(key);\n break;\n }\n if (\n null == value ||\n \"function\" === typeof value ||\n \"symbol\" === typeof value ||\n \"boolean\" === typeof value\n ) {\n domElement.removeAttribute(key);\n break;\n }\n checkAttributeStringCoercion(value, key);\n value = sanitizeURL(\"\" + value);\n domElement.setAttribute(key, value);\n break;\n case \"action\":\n case \"formAction\":\n null != value &&\n (\"form\" === tag\n ? \"formAction\" === key\n ? console.error(\n \"You can only pass the formAction prop to <input> or <button>. Use the action prop on <form>.\"\n )\n : \"function\" === typeof value &&\n ((null == props.encType && null == props.method) ||\n didWarnFormActionMethod ||\n ((didWarnFormActionMethod = !0),\n console.error(\n \"Cannot specify a encType or method for a form that specifies a function as the action. React provides those automatically. They will get overridden.\"\n )),\n null == props.target ||\n didWarnFormActionTarget ||\n ((didWarnFormActionTarget = !0),\n console.error(\n \"Cannot specify a target for a form that specifies a function as the action. The function will always be executed in the same window.\"\n )))\n : \"input\" === tag || \"button\" === tag\n ? \"action\" === key\n ? console.error(\n \"You can only pass the action prop to <form>. Use the formAction prop on <input> or <button>.\"\n )\n : \"input\" !== tag ||\n \"submit\" === props.type ||\n \"image\" === props.type ||\n didWarnFormActionType\n ? \"button\" !== tag ||\n null == props.type ||\n \"submit\" === props.type ||\n didWarnFormActionType\n ? \"function\" === typeof value &&\n (null == props.name ||\n didWarnFormActionName ||\n ((didWarnFormActionName = !0),\n console.error(\n 'Cannot specify a \"name\" prop for a button that specifies a function as a formAction. React needs it to encode which action should be invoked. It will get overridden.'\n )),\n (null == props.formEncType &&\n null == props.formMethod) ||\n didWarnFormActionMethod ||\n ((didWarnFormActionMethod = !0),\n console.error(\n \"Cannot specify a formEncType or formMethod for a button that specifies a function as a formAction. React provides those automatically. They will get overridden.\"\n )),\n null == props.formTarget ||\n didWarnFormActionTarget ||\n ((didWarnFormActionTarget = !0),\n console.error(\n \"Cannot specify a formTarget for a button that specifies a function as a formAction. The function will always be executed in the same window.\"\n )))\n : ((didWarnFormActionType = !0),\n console.error(\n 'A button can only specify a formAction along with type=\"submit\" or no type.'\n ))\n : ((didWarnFormActionType = !0),\n console.error(\n 'An input can only specify a formAction along with type=\"submit\" or type=\"image\".'\n ))\n : \"action\" === key\n ? console.error(\n \"You can only pass the action prop to <form>.\"\n )\n : console.error(\n \"You can only pass the formAction prop to <input> or <button>.\"\n ));\n if (\"function\" === typeof value) {\n domElement.setAttribute(\n key,\n \"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')\"\n );\n break;\n } else\n \"function\" === typeof prevValue &&\n (\"formAction\" === key\n ? (\"input\" !== tag &&\n setProp(domElement, tag, \"name\", props.name, props, null),\n setProp(\n domElement,\n tag,\n \"formEncType\",\n props.formEncType,\n props,\n null\n ),\n setProp(\n domElement,\n tag,\n \"formMethod\",\n props.formMethod,\n props,\n null\n ),\n setProp(\n domElement,\n tag,\n \"formTarget\",\n props.formTarget,\n props,\n null\n ))\n : (setProp(\n domElement,\n tag,\n \"encType\",\n props.encType,\n props,\n null\n ),\n setProp(domElement, tag, \"method\", props.method, props, null),\n setProp(\n domElement,\n tag,\n \"target\",\n props.target,\n props,\n null\n )));\n if (\n null == value ||\n \"symbol\" === typeof value ||\n \"boolean\" === typeof value\n ) {\n domElement.removeAttribute(key);\n break;\n }\n checkAttributeStringCoercion(value, key);\n value = sanitizeURL(\"\" + value);\n domElement.setAttribute(key, value);\n break;\n case \"onClick\":\n null != value &&\n (\"function\" !== typeof value &&\n warnForInvalidEventListener(key, value),\n (domElement.onclick = noop$1));\n break;\n case \"onScroll\":\n null != value &&\n (\"function\" !== typeof value &&\n warnForInvalidEventListener(key, value),\n listenToNonDelegatedEvent(\"scroll\", domElement));\n break;\n case \"onScrollEnd\":\n null != value &&\n (\"function\" !== typeof value &&\n warnForInvalidEventListener(key, value),\n listenToNonDelegatedEvent(\"scrollend\", domElement));\n break;\n case \"dangerouslySetInnerHTML\":\n if (null != value) {\n if (\"object\" !== typeof value || !(\"__html\" in value))\n throw Error(\n \"`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information.\"\n );\n key = value.__html;\n if (null != key) {\n if (null != props.children)\n throw Error(\n \"Can only set one of `children` or `props.dangerouslySetInnerHTML`.\"\n );\n domElement.innerHTML = key;\n }\n }\n break;\n case \"multiple\":\n domElement.multiple =\n value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n break;\n case \"muted\":\n domElement.muted =\n value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n break;\n case \"suppressContentEditableWarning\":\n case \"suppressHydrationWarning\":\n case \"defaultValue\":\n case \"defaultChecked\":\n case \"innerHTML\":\n case \"ref\":\n break;\n case \"autoFocus\":\n break;\n case \"xlinkHref\":\n if (\n null == value ||\n \"function\" === typeof value ||\n \"boolean\" === typeof value ||\n \"symbol\" === typeof value\n ) {\n domElement.removeAttribute(\"xlink:href\");\n break;\n }\n checkAttributeStringCoercion(value, key);\n key = sanitizeURL(\"\" + value);\n domElement.setAttributeNS(xlinkNamespace, \"xlink:href\", key);\n break;\n case \"contentEditable\":\n case \"spellCheck\":\n case \"draggable\":\n case \"value\":\n case \"autoReverse\":\n case \"externalResourcesRequired\":\n case \"focusable\":\n case \"preserveAlpha\":\n null != value &&\n \"function\" !== typeof value &&\n \"symbol\" !== typeof value\n ? (checkAttributeStringCoercion(value, key),\n domElement.setAttribute(key, \"\" + value))\n : domElement.removeAttribute(key);\n break;\n case \"inert\":\n \"\" !== value ||\n didWarnForNewBooleanPropsWithEmptyValue[key] ||\n ((didWarnForNewBooleanPropsWithEmptyValue[key] = !0),\n console.error(\n \"Received an empty string for a boolean attribute `%s`. This will treat the attribute as if it were false. Either pass `false` to silence this warning, or pass `true` if you used an empty string in earlier versions of React to indicate this attribute is true.\",\n key\n ));\n case \"allowFullScreen\":\n case \"async\":\n case \"autoPlay\":\n case \"controls\":\n case \"default\":\n case \"defer\":\n case \"disabled\":\n case \"disablePictureInPicture\":\n case \"disableRemotePlayback\":\n case \"formNoValidate\":\n case \"hidden\":\n case \"loop\":\n case \"noModule\":\n case \"noValidate\":\n case \"open\":\n case \"playsInline\":\n case \"readOnly\":\n case \"required\":\n case \"reversed\":\n case \"scoped\":\n case \"seamless\":\n case \"itemScope\":\n value && \"function\" !== typeof value && \"symbol\" !== typeof value\n ? domElement.setAttribute(key, \"\")\n : domElement.removeAttribute(key);\n break;\n case \"capture\":\n case \"download\":\n !0 === value\n ? domElement.setAttribute(key, \"\")\n : !1 !== value &&\n null != value &&\n \"function\" !== typeof value &&\n \"symbol\" !== typeof value\n ? (checkAttributeStringCoercion(value, key),\n domElement.setAttribute(key, value))\n : domElement.removeAttribute(key);\n break;\n case \"cols\":\n case \"rows\":\n case \"size\":\n case \"span\":\n null != value &&\n \"function\" !== typeof value &&\n \"symbol\" !== typeof value &&\n !isNaN(value) &&\n 1 <= value\n ? (checkAttributeStringCoercion(value, key),\n domElement.setAttribute(key, value))\n : domElement.removeAttribute(key);\n break;\n case \"rowSpan\":\n case \"start\":\n null == value ||\n \"function\" === typeof value ||\n \"symbol\" === typeof value ||\n isNaN(value)\n ? domElement.removeAttribute(key)\n : (checkAttributeStringCoercion(value, key),\n domElement.setAttribute(key, value));\n break;\n case \"popover\":\n listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n listenToNonDelegatedEvent(\"toggle\", domElement);\n setValueForAttribute(domElement, \"popover\", value);\n break;\n case \"xlinkActuate\":\n setValueForNamespacedAttribute(\n domElement,\n xlinkNamespace,\n \"xlink:actuate\",\n value\n );\n break;\n case \"xlinkArcrole\":\n setValueForNamespacedAttribute(\n domElement,\n xlinkNamespace,\n \"xlink:arcrole\",\n value\n );\n break;\n case \"xlinkRole\":\n setValueForNamespacedAttribute(\n domElement,\n xlinkNamespace,\n \"xlink:role\",\n value\n );\n break;\n case \"xlinkShow\":\n setValueForNamespacedAttribute(\n domElement,\n xlinkNamespace,\n \"xlink:show\",\n value\n );\n break;\n case \"xlinkTitle\":\n setValueForNamespacedAttribute(\n domElement,\n xlinkNamespace,\n \"xlink:title\",\n value\n );\n break;\n case \"xlinkType\":\n setValueForNamespacedAttribute(\n domElement,\n xlinkNamespace,\n \"xlink:type\",\n value\n );\n break;\n case \"xmlBase\":\n setValueForNamespacedAttribute(\n domElement,\n xmlNamespace,\n \"xml:base\",\n value\n );\n break;\n case \"xmlLang\":\n setValueForNamespacedAttribute(\n domElement,\n xmlNamespace,\n \"xml:lang\",\n value\n );\n break;\n case \"xmlSpace\":\n setValueForNamespacedAttribute(\n domElement,\n xmlNamespace,\n \"xml:space\",\n value\n );\n break;\n case \"is\":\n null != prevValue &&\n console.error(\n 'Cannot update the \"is\" prop after it has been initialized.'\n );\n setValueForAttribute(domElement, \"is\", value);\n break;\n case \"innerText\":\n case \"textContent\":\n break;\n case \"popoverTarget\":\n didWarnPopoverTargetObject ||\n null == value ||\n \"object\" !== typeof value ||\n ((didWarnPopoverTargetObject = !0),\n console.error(\n \"The `popoverTarget` prop expects the ID of an Element as a string. Received %s instead.\",\n value\n ));\n default:\n !(2 < key.length) ||\n (\"o\" !== key[0] && \"O\" !== key[0]) ||\n (\"n\" !== key[1] && \"N\" !== key[1])\n ? ((key = getAttributeAlias(key)),\n setValueForAttribute(domElement, key, value))\n : registrationNameDependencies.hasOwnProperty(key) &&\n null != value &&\n \"function\" !== typeof value &&\n warnForInvalidEventListener(key, value);\n }\n }\n function setPropOnCustomElement(\n domElement,\n tag,\n key,\n value,\n props,\n prevValue\n ) {\n switch (key) {\n case \"style\":\n setValueForStyles(domElement, value, prevValue);\n break;\n case \"dangerouslySetInnerHTML\":\n if (null != value) {\n if (\"object\" !== typeof value || !(\"__html\" in value))\n throw Error(\n \"`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information.\"\n );\n key = value.__html;\n if (null != key) {\n if (null != props.children)\n throw Error(\n \"Can only set one of `children` or `props.dangerouslySetInnerHTML`.\"\n );\n domElement.innerHTML = key;\n }\n }\n break;\n case \"children\":\n \"string\" === typeof value\n ? setTextContent(domElement, value)\n : (\"number\" === typeof value || \"bigint\" === typeof value) &&\n setTextContent(domElement, \"\" + value);\n break;\n case \"onScroll\":\n null != value &&\n (\"function\" !== typeof value &&\n warnForInvalidEventListener(key, value),\n listenToNonDelegatedEvent(\"scroll\", domElement));\n break;\n case \"onScrollEnd\":\n null != value &&\n (\"function\" !== typeof value &&\n warnForInvalidEventListener(key, value),\n listenToNonDelegatedEvent(\"scrollend\", domElement));\n break;\n case \"onClick\":\n null != value &&\n (\"function\" !== typeof value &&\n warnForInvalidEventListener(key, value),\n (domElement.onclick = noop$1));\n break;\n case \"suppressContentEditableWarning\":\n case \"suppressHydrationWarning\":\n case \"innerHTML\":\n case \"ref\":\n break;\n case \"innerText\":\n case \"textContent\":\n break;\n default:\n if (registrationNameDependencies.hasOwnProperty(key))\n null != value &&\n \"function\" !== typeof value &&\n warnForInvalidEventListener(key, value);\n else\n a: {\n if (\n \"o\" === key[0] &&\n \"n\" === key[1] &&\n ((props = key.endsWith(\"Capture\")),\n (tag = key.slice(2, props ? key.length - 7 : void 0)),\n (prevValue = domElement[internalPropsKey] || null),\n (prevValue = null != prevValue ? prevValue[key] : null),\n \"function\" === typeof prevValue &&\n domElement.removeEventListener(tag, prevValue, props),\n \"function\" === typeof value)\n ) {\n \"function\" !== typeof prevValue &&\n null !== prevValue &&\n (key in domElement\n ? (domElement[key] = null)\n : domElement.hasAttribute(key) &&\n domElement.removeAttribute(key));\n domElement.addEventListener(tag, value, props);\n break a;\n }\n key in domElement\n ? (domElement[key] = value)\n : !0 === value\n ? domElement.setAttribute(key, \"\")\n : setValueForAttribute(domElement, key, value);\n }\n }\n }\n function setInitialProperties(domElement, tag, props) {\n validatePropertiesInDevelopment(tag, props);\n switch (tag) {\n case \"div\":\n case \"span\":\n case \"svg\":\n case \"path\":\n case \"a\":\n case \"g\":\n case \"p\":\n case \"li\":\n break;\n case \"img\":\n listenToNonDelegatedEvent(\"error\", domElement);\n listenToNonDelegatedEvent(\"load\", domElement);\n var hasSrc = !1,\n hasSrcSet = !1,\n propKey;\n for (propKey in props)\n if (props.hasOwnProperty(propKey)) {\n var propValue = props[propKey];\n if (null != propValue)\n switch (propKey) {\n case \"src\":\n hasSrc = !0;\n break;\n case \"srcSet\":\n hasSrcSet = !0;\n break;\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n throw Error(\n tag +\n \" is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.\"\n );\n default:\n setProp(domElement, tag, propKey, propValue, props, null);\n }\n }\n hasSrcSet &&\n setProp(domElement, tag, \"srcSet\", props.srcSet, props, null);\n hasSrc && setProp(domElement, tag, \"src\", props.src, props, null);\n return;\n case \"input\":\n checkControlledValueProps(\"input\", props);\n listenToNonDelegatedEvent(\"invalid\", domElement);\n var defaultValue = (propKey = propValue = hasSrcSet = null),\n checked = null,\n defaultChecked = null;\n for (hasSrc in props)\n if (props.hasOwnProperty(hasSrc)) {\n var _propValue = props[hasSrc];\n if (null != _propValue)\n switch (hasSrc) {\n case \"name\":\n hasSrcSet = _propValue;\n break;\n case \"type\":\n propValue = _propValue;\n break;\n case \"checked\":\n checked = _propValue;\n break;\n case \"defaultChecked\":\n defaultChecked = _propValue;\n break;\n case \"value\":\n propKey = _propValue;\n break;\n case \"defaultValue\":\n defaultValue = _propValue;\n break;\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n if (null != _propValue)\n throw Error(\n tag +\n \" is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.\"\n );\n break;\n default:\n setProp(domElement, tag, hasSrc, _propValue, props, null);\n }\n }\n validateInputProps(domElement, props);\n initInput(\n domElement,\n propKey,\n defaultValue,\n checked,\n defaultChecked,\n propValue,\n hasSrcSet,\n !1\n );\n return;\n case \"select\":\n checkControlledValueProps(\"select\", props);\n listenToNonDelegatedEvent(\"invalid\", domElement);\n hasSrc = propValue = propKey = null;\n for (hasSrcSet in props)\n if (\n props.hasOwnProperty(hasSrcSet) &&\n ((defaultValue = props[hasSrcSet]), null != defaultValue)\n )\n switch (hasSrcSet) {\n case \"value\":\n propKey = defaultValue;\n break;\n case \"defaultValue\":\n propValue = defaultValue;\n break;\n case \"multiple\":\n hasSrc = defaultValue;\n default:\n setProp(\n domElement,\n tag,\n hasSrcSet,\n defaultValue,\n props,\n null\n );\n }\n validateSelectProps(domElement, props);\n tag = propKey;\n props = propValue;\n domElement.multiple = !!hasSrc;\n null != tag\n ? updateOptions(domElement, !!hasSrc, tag, !1)\n : null != props && updateOptions(domElement, !!hasSrc, props, !0);\n return;\n case \"textarea\":\n checkControlledValueProps(\"textarea\", props);\n listenToNonDelegatedEvent(\"invalid\", domElement);\n propKey = hasSrcSet = hasSrc = null;\n for (propValue in props)\n if (\n props.hasOwnProperty(propValue) &&\n ((defaultValue = props[propValue]), null != defaultValue)\n )\n switch (propValue) {\n case \"value\":\n hasSrc = defaultValue;\n break;\n case \"defaultValue\":\n hasSrcSet = defaultValue;\n break;\n case \"children\":\n propKey = defaultValue;\n break;\n case \"dangerouslySetInnerHTML\":\n if (null != defaultValue)\n throw Error(\n \"`dangerouslySetInnerHTML` does not make sense on <textarea>.\"\n );\n break;\n default:\n setProp(\n domElement,\n tag,\n propValue,\n defaultValue,\n props,\n null\n );\n }\n validateTextareaProps(domElement, props);\n initTextarea(domElement, hasSrc, hasSrcSet, propKey);\n return;\n case \"option\":\n validateOptionProps(domElement, props);\n for (checked in props)\n if (\n props.hasOwnProperty(checked) &&\n ((hasSrc = props[checked]), null != hasSrc)\n )\n switch (checked) {\n case \"selected\":\n domElement.selected =\n hasSrc &&\n \"function\" !== typeof hasSrc &&\n \"symbol\" !== typeof hasSrc;\n break;\n default:\n setProp(domElement, tag, checked, hasSrc, props, null);\n }\n return;\n case \"dialog\":\n listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n listenToNonDelegatedEvent(\"toggle\", domElement);\n listenToNonDelegatedEvent(\"cancel\", domElement);\n listenToNonDelegatedEvent(\"close\", domElement);\n break;\n case \"iframe\":\n case \"object\":\n listenToNonDelegatedEvent(\"load\", domElement);\n break;\n case \"video\":\n case \"audio\":\n for (hasSrc = 0; hasSrc < mediaEventTypes.length; hasSrc++)\n listenToNonDelegatedEvent(mediaEventTypes[hasSrc], domElement);\n break;\n case \"image\":\n listenToNonDelegatedEvent(\"error\", domElement);\n listenToNonDelegatedEvent(\"load\", domElement);\n break;\n case \"details\":\n listenToNonDelegatedEvent(\"toggle\", domElement);\n break;\n case \"embed\":\n case \"source\":\n case \"link\":\n listenToNonDelegatedEvent(\"error\", domElement),\n listenToNonDelegatedEvent(\"load\", domElement);\n case \"area\":\n case \"base\":\n case \"br\":\n case \"col\":\n case \"hr\":\n case \"keygen\":\n case \"meta\":\n case \"param\":\n case \"track\":\n case \"wbr\":\n case \"menuitem\":\n for (defaultChecked in props)\n if (\n props.hasOwnProperty(defaultChecked) &&\n ((hasSrc = props[defaultChecked]), null != hasSrc)\n )\n switch (defaultChecked) {\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n throw Error(\n tag +\n \" is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.\"\n );\n default:\n setProp(domElement, tag, defaultChecked, hasSrc, props, null);\n }\n return;\n default:\n if (isCustomElement(tag)) {\n for (_propValue in props)\n props.hasOwnProperty(_propValue) &&\n ((hasSrc = props[_propValue]),\n void 0 !== hasSrc &&\n setPropOnCustomElement(\n domElement,\n tag,\n _propValue,\n hasSrc,\n props,\n void 0\n ));\n return;\n }\n }\n for (defaultValue in props)\n props.hasOwnProperty(defaultValue) &&\n ((hasSrc = props[defaultValue]),\n null != hasSrc &&\n setProp(domElement, tag, defaultValue, hasSrc, props, null));\n }\n function updateProperties(domElement, tag, lastProps, nextProps) {\n validatePropertiesInDevelopment(tag, nextProps);\n switch (tag) {\n case \"div\":\n case \"span\":\n case \"svg\":\n case \"path\":\n case \"a\":\n case \"g\":\n case \"p\":\n case \"li\":\n break;\n case \"input\":\n var name = null,\n type = null,\n value = null,\n defaultValue = null,\n lastDefaultValue = null,\n checked = null,\n defaultChecked = null;\n for (propKey in lastProps) {\n var lastProp = lastProps[propKey];\n if (lastProps.hasOwnProperty(propKey) && null != lastProp)\n switch (propKey) {\n case \"checked\":\n break;\n case \"value\":\n break;\n case \"defaultValue\":\n lastDefaultValue = lastProp;\n default:\n nextProps.hasOwnProperty(propKey) ||\n setProp(\n domElement,\n tag,\n propKey,\n null,\n nextProps,\n lastProp\n );\n }\n }\n for (var _propKey8 in nextProps) {\n var propKey = nextProps[_propKey8];\n lastProp = lastProps[_propKey8];\n if (\n nextProps.hasOwnProperty(_propKey8) &&\n (null != propKey || null != lastProp)\n )\n switch (_propKey8) {\n case \"type\":\n type = propKey;\n break;\n case \"name\":\n name = propKey;\n break;\n case \"checked\":\n checked = propKey;\n break;\n case \"defaultChecked\":\n defaultChecked = propKey;\n break;\n case \"value\":\n value = propKey;\n break;\n case \"defaultValue\":\n defaultValue = propKey;\n break;\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n if (null != propKey)\n throw Error(\n tag +\n \" is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.\"\n );\n break;\n default:\n propKey !== lastProp &&\n setProp(\n domElement,\n tag,\n _propKey8,\n propKey,\n nextProps,\n lastProp\n );\n }\n }\n tag =\n \"checkbox\" === lastProps.type || \"radio\" === lastProps.type\n ? null != lastProps.checked\n : null != lastProps.value;\n nextProps =\n \"checkbox\" === nextProps.type || \"radio\" === nextProps.type\n ? null != nextProps.checked\n : null != nextProps.value;\n tag ||\n !nextProps ||\n didWarnUncontrolledToControlled ||\n (console.error(\n \"A component is changing an uncontrolled input to be controlled. This is likely caused by the value changing from undefined to a defined value, which should not happen. Decide between using a controlled or uncontrolled input element for the lifetime of the component. More info: https://react.dev/link/controlled-components\"\n ),\n (didWarnUncontrolledToControlled = !0));\n !tag ||\n nextProps ||\n didWarnControlledToUncontrolled ||\n (console.error(\n \"A component is changing a controlled input to be uncontrolled. This is likely caused by the value changing from a defined to undefined, which should not happen. Decide between using a controlled or uncontrolled input element for the lifetime of the component. More info: https://react.dev/link/controlled-components\"\n ),\n (didWarnControlledToUncontrolled = !0));\n updateInput(\n domElement,\n value,\n defaultValue,\n lastDefaultValue,\n checked,\n defaultChecked,\n type,\n name\n );\n return;\n case \"select\":\n propKey = value = defaultValue = _propKey8 = null;\n for (type in lastProps)\n if (\n ((lastDefaultValue = lastProps[type]),\n lastProps.hasOwnProperty(type) && null != lastDefaultValue)\n )\n switch (type) {\n case \"value\":\n break;\n case \"multiple\":\n propKey = lastDefaultValue;\n default:\n nextProps.hasOwnProperty(type) ||\n setProp(\n domElement,\n tag,\n type,\n null,\n nextProps,\n lastDefaultValue\n );\n }\n for (name in nextProps)\n if (\n ((type = nextProps[name]),\n (lastDefaultValue = lastProps[name]),\n nextProps.hasOwnProperty(name) &&\n (null != type || null != lastDefaultValue))\n )\n switch (name) {\n case \"value\":\n _propKey8 = type;\n break;\n case \"defaultValue\":\n defaultValue = type;\n break;\n case \"multiple\":\n value = type;\n default:\n type !== lastDefaultValue &&\n setProp(\n domElement,\n tag,\n name,\n type,\n nextProps,\n lastDefaultValue\n );\n }\n nextProps = defaultValue;\n tag = value;\n lastProps = propKey;\n null != _propKey8\n ? updateOptions(domElement, !!tag, _propKey8, !1)\n : !!lastProps !== !!tag &&\n (null != nextProps\n ? updateOptions(domElement, !!tag, nextProps, !0)\n : updateOptions(domElement, !!tag, tag ? [] : \"\", !1));\n return;\n case \"textarea\":\n propKey = _propKey8 = null;\n for (defaultValue in lastProps)\n if (\n ((name = lastProps[defaultValue]),\n lastProps.hasOwnProperty(defaultValue) &&\n null != name &&\n !nextProps.hasOwnProperty(defaultValue))\n )\n switch (defaultValue) {\n case \"value\":\n break;\n case \"children\":\n break;\n default:\n setProp(domElement, tag, defaultValue, null, nextProps, name);\n }\n for (value in nextProps)\n if (\n ((name = nextProps[value]),\n (type = lastProps[value]),\n nextProps.hasOwnProperty(value) && (null != name || null != type))\n )\n switch (value) {\n case \"value\":\n _propKey8 = name;\n break;\n case \"defaultValue\":\n propKey = name;\n break;\n case \"children\":\n break;\n case \"dangerouslySetInnerHTML\":\n if (null != name)\n throw Error(\n \"`dangerouslySetInnerHTML` does not make sense on <textarea>.\"\n );\n break;\n default:\n name !== type &&\n setProp(domElement, tag, value, name, nextProps, type);\n }\n updateTextarea(domElement, _propKey8, propKey);\n return;\n case \"option\":\n for (var _propKey13 in lastProps)\n if (\n ((_propKey8 = lastProps[_propKey13]),\n lastProps.hasOwnProperty(_propKey13) &&\n null != _propKey8 &&\n !nextProps.hasOwnProperty(_propKey13))\n )\n switch (_propKey13) {\n case \"selected\":\n domElement.selected = !1;\n break;\n default:\n setProp(\n domElement,\n tag,\n _propKey13,\n null,\n nextProps,\n _propKey8\n );\n }\n for (lastDefaultValue in nextProps)\n if (\n ((_propKey8 = nextProps[lastDefaultValue]),\n (propKey = lastProps[lastDefaultValue]),\n nextProps.hasOwnProperty(lastDefaultValue) &&\n _propKey8 !== propKey &&\n (null != _propKey8 || null != propKey))\n )\n switch (lastDefaultValue) {\n case \"selected\":\n domElement.selected =\n _propKey8 &&\n \"function\" !== typeof _propKey8 &&\n \"symbol\" !== typeof _propKey8;\n break;\n default:\n setProp(\n domElement,\n tag,\n lastDefaultValue,\n _propKey8,\n nextProps,\n propKey\n );\n }\n return;\n case \"img\":\n case \"link\":\n case \"area\":\n case \"base\":\n case \"br\":\n case \"col\":\n case \"embed\":\n case \"hr\":\n case \"keygen\":\n case \"meta\":\n case \"param\":\n case \"source\":\n case \"track\":\n case \"wbr\":\n case \"menuitem\":\n for (var _propKey15 in lastProps)\n (_propKey8 = lastProps[_propKey15]),\n lastProps.hasOwnProperty(_propKey15) &&\n null != _propKey8 &&\n !nextProps.hasOwnProperty(_propKey15) &&\n setProp(\n domElement,\n tag,\n _propKey15,\n null,\n nextProps,\n _propKey8\n );\n for (checked in nextProps)\n if (\n ((_propKey8 = nextProps[checked]),\n (propKey = lastProps[checked]),\n nextProps.hasOwnProperty(checked) &&\n _propKey8 !== propKey &&\n (null != _propKey8 || null != propKey))\n )\n switch (checked) {\n case \"children\":\n case \"dangerouslySetInnerHTML\":\n if (null != _propKey8)\n throw Error(\n tag +\n \" is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.\"\n );\n break;\n default:\n setProp(\n domElement,\n tag,\n checked,\n _propKey8,\n nextProps,\n propKey\n );\n }\n return;\n default:\n if (isCustomElement(tag)) {\n for (var _propKey17 in lastProps)\n (_propKey8 = lastProps[_propKey17]),\n lastProps.hasOwnProperty(_propKey17) &&\n void 0 !== _propKey8 &&\n !nextProps.hasOwnProperty(_propKey17) &&\n setPropOnCustomElement(\n domElement,\n tag,\n _propKey17,\n void 0,\n nextProps,\n _propKey8\n );\n for (defaultChecked in nextProps)\n (_propKey8 = nextProps[defaultChecked]),\n (propKey = lastProps[defaultChecked]),\n !nextProps.hasOwnProperty(defaultChecked) ||\n _propKey8 === propKey ||\n (void 0 === _propKey8 && void 0 === propKey) ||\n setPropOnCustomElement(\n domElement,\n tag,\n defaultChecked,\n _propKey8,\n nextProps,\n propKey\n );\n return;\n }\n }\n for (var _propKey19 in lastProps)\n (_propKey8 = lastProps[_propKey19]),\n lastProps.hasOwnProperty(_propKey19) &&\n null != _propKey8 &&\n !nextProps.hasOwnProperty(_propKey19) &&\n setProp(domElement, tag, _propKey19, null, nextProps, _propKey8);\n for (lastProp in nextProps)\n (_propKey8 = nextProps[lastProp]),\n (propKey = lastProps[lastProp]),\n !nextProps.hasOwnProperty(lastProp) ||\n _propKey8 === propKey ||\n (null == _propKey8 && null == propKey) ||\n setProp(domElement, tag, lastProp, _propKey8, nextProps, propKey);\n }\n function getPropNameFromAttributeName(attrName) {\n switch (attrName) {\n case \"class\":\n return \"className\";\n case \"for\":\n return \"htmlFor\";\n default:\n return attrName;\n }\n }\n function getStylesObjectFromElement(domElement) {\n var serverValueInObjectForm = {};\n domElement = domElement.style;\n for (var i = 0; i < domElement.length; i++) {\n var styleName = domElement[i];\n serverValueInObjectForm[styleName] =\n domElement.getPropertyValue(styleName);\n }\n return serverValueInObjectForm;\n }\n function diffHydratedStyles(domElement, value$jscomp$0, serverDifferences) {\n if (null != value$jscomp$0 && \"object\" !== typeof value$jscomp$0)\n console.error(\n \"The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX.\"\n );\n else {\n var clientValue;\n var delimiter = (clientValue = \"\"),\n styleName;\n for (styleName in value$jscomp$0)\n if (value$jscomp$0.hasOwnProperty(styleName)) {\n var value = value$jscomp$0[styleName];\n null != value &&\n \"boolean\" !== typeof value &&\n \"\" !== value &&\n (0 === styleName.indexOf(\"--\")\n ? (checkCSSPropertyStringCoercion(value, styleName),\n (clientValue +=\n delimiter + styleName + \":\" + (\"\" + value).trim()))\n : \"number\" !== typeof value ||\n 0 === value ||\n unitlessNumbers.has(styleName)\n ? (checkCSSPropertyStringCoercion(value, styleName),\n (clientValue +=\n delimiter +\n styleName\n .replace(uppercasePattern, \"-$1\")\n .toLowerCase()\n .replace(msPattern$1, \"-ms-\") +\n \":\" +\n (\"\" + value).trim()))\n : (clientValue +=\n delimiter +\n styleName\n .replace(uppercasePattern, \"-$1\")\n .toLowerCase()\n .replace(msPattern$1, \"-ms-\") +\n \":\" +\n value +\n \"px\"),\n (delimiter = \";\"));\n }\n clientValue = clientValue || null;\n value$jscomp$0 = domElement.getAttribute(\"style\");\n value$jscomp$0 !== clientValue &&\n ((clientValue = normalizeMarkupForTextOrAttribute(clientValue)),\n normalizeMarkupForTextOrAttribute(value$jscomp$0) !== clientValue &&\n (serverDifferences.style = getStylesObjectFromElement(domElement)));\n }\n }\n function hydrateAttribute(\n domElement,\n propKey,\n attributeName,\n value,\n extraAttributes,\n serverDifferences\n ) {\n extraAttributes.delete(attributeName);\n domElement = domElement.getAttribute(attributeName);\n if (null === domElement)\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n return;\n }\n else if (null != value)\n switch (typeof value) {\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n break;\n default:\n if (\n (checkAttributeStringCoercion(value, propKey),\n domElement === \"\" + value)\n )\n return;\n }\n warnForPropDifference(propKey, domElement, value, serverDifferences);\n }\n function hydrateBooleanAttribute(\n domElement,\n propKey,\n attributeName,\n value,\n extraAttributes,\n serverDifferences\n ) {\n extraAttributes.delete(attributeName);\n domElement = domElement.getAttribute(attributeName);\n if (null === domElement) {\n switch (typeof value) {\n case \"function\":\n case \"symbol\":\n return;\n }\n if (!value) return;\n } else\n switch (typeof value) {\n case \"function\":\n case \"symbol\":\n break;\n default:\n if (value) return;\n }\n warnForPropDifference(propKey, domElement, value, serverDifferences);\n }\n function hydrateBooleanishAttribute(\n domElement,\n propKey,\n attributeName,\n value,\n extraAttributes,\n serverDifferences\n ) {\n extraAttributes.delete(attributeName);\n domElement = domElement.getAttribute(attributeName);\n if (null === domElement)\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n return;\n }\n else if (null != value)\n switch (typeof value) {\n case \"function\":\n case \"symbol\":\n break;\n default:\n if (\n (checkAttributeStringCoercion(value, attributeName),\n domElement === \"\" + value)\n )\n return;\n }\n warnForPropDifference(propKey, domElement, value, serverDifferences);\n }\n function hydrateNumericAttribute(\n domElement,\n propKey,\n attributeName,\n value,\n extraAttributes,\n serverDifferences\n ) {\n extraAttributes.delete(attributeName);\n domElement = domElement.getAttribute(attributeName);\n if (null === domElement)\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n return;\n default:\n if (isNaN(value)) return;\n }\n else if (null != value)\n switch (typeof value) {\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n break;\n default:\n if (\n !isNaN(value) &&\n (checkAttributeStringCoercion(value, propKey),\n domElement === \"\" + value)\n )\n return;\n }\n warnForPropDifference(propKey, domElement, value, serverDifferences);\n }\n function hydrateSanitizedAttribute(\n domElement,\n propKey,\n attributeName,\n value,\n extraAttributes,\n serverDifferences\n ) {\n extraAttributes.delete(attributeName);\n domElement = domElement.getAttribute(attributeName);\n if (null === domElement)\n switch (typeof value) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n return;\n }\n else if (null != value)\n switch (typeof value) {\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n break;\n default:\n if (\n (checkAttributeStringCoercion(value, propKey),\n (attributeName = sanitizeURL(\"\" + value)),\n domElement === attributeName)\n )\n return;\n }\n warnForPropDifference(propKey, domElement, value, serverDifferences);\n }\n function diffHydratedProperties(domElement, tag, props, hostContext) {\n for (\n var serverDifferences = {},\n extraAttributes = new Set(),\n attributes = domElement.attributes,\n i = 0;\n i < attributes.length;\n i++\n )\n switch (attributes[i].name.toLowerCase()) {\n case \"value\":\n break;\n case \"checked\":\n break;\n case \"selected\":\n break;\n default:\n extraAttributes.add(attributes[i].name);\n }\n if (isCustomElement(tag))\n for (var propKey in props) {\n if (props.hasOwnProperty(propKey)) {\n var value = props[propKey];\n if (null != value)\n if (registrationNameDependencies.hasOwnProperty(propKey))\n \"function\" !== typeof value &&\n warnForInvalidEventListener(propKey, value);\n else if (!0 !== props.suppressHydrationWarning)\n switch (propKey) {\n case \"children\":\n (\"string\" !== typeof value && \"number\" !== typeof value) ||\n warnForPropDifference(\n \"children\",\n domElement.textContent,\n value,\n serverDifferences\n );\n continue;\n case \"suppressContentEditableWarning\":\n case \"suppressHydrationWarning\":\n case \"defaultValue\":\n case \"defaultChecked\":\n case \"innerHTML\":\n case \"ref\":\n continue;\n case \"dangerouslySetInnerHTML\":\n attributes = domElement.innerHTML;\n value = value ? value.__html : void 0;\n null != value &&\n ((value = normalizeHTML(domElement, value)),\n warnForPropDifference(\n propKey,\n attributes,\n value,\n serverDifferences\n ));\n continue;\n case \"style\":\n extraAttributes.delete(propKey);\n diffHydratedStyles(domElement, value, serverDifferences);\n continue;\n case \"offsetParent\":\n case \"offsetTop\":\n case \"offsetLeft\":\n case \"offsetWidth\":\n case \"offsetHeight\":\n case \"isContentEditable\":\n case \"outerText\":\n case \"outerHTML\":\n extraAttributes.delete(propKey.toLowerCase());\n console.error(\n \"Assignment to read-only property will result in a no-op: `%s`\",\n propKey\n );\n continue;\n case \"className\":\n extraAttributes.delete(\"class\");\n attributes = getValueForAttributeOnCustomComponent(\n domElement,\n \"class\",\n value\n );\n warnForPropDifference(\n \"className\",\n attributes,\n value,\n serverDifferences\n );\n continue;\n default:\n hostContext.context === HostContextNamespaceNone &&\n \"svg\" !== tag &&\n \"math\" !== tag\n ? extraAttributes.delete(propKey.toLowerCase())\n : extraAttributes.delete(propKey),\n (attributes = getValueForAttributeOnCustomComponent(\n domElement,\n propKey,\n value\n )),\n warnForPropDifference(\n propKey,\n attributes,\n value,\n serverDifferences\n );\n }\n }\n }\n else\n for (value in props)\n if (\n props.hasOwnProperty(value) &&\n ((propKey = props[value]), null != propKey)\n )\n if (registrationNameDependencies.hasOwnProperty(value))\n \"function\" !== typeof propKey &&\n warnForInvalidEventListener(value, propKey);\n else if (!0 !== props.suppressHydrationWarning)\n switch (value) {\n case \"children\":\n (\"string\" !== typeof propKey &&\n \"number\" !== typeof propKey) ||\n warnForPropDifference(\n \"children\",\n domElement.textContent,\n propKey,\n serverDifferences\n );\n continue;\n case \"suppressContentEditableWarning\":\n case \"suppressHydrationWarning\":\n case \"value\":\n case \"checked\":\n case \"selected\":\n case \"defaultValue\":\n case \"defaultChecked\":\n case \"innerHTML\":\n case \"ref\":\n continue;\n case \"dangerouslySetInnerHTML\":\n attributes = domElement.innerHTML;\n propKey = propKey ? propKey.__html : void 0;\n null != propKey &&\n ((propKey = normalizeHTML(domElement, propKey)),\n attributes !== propKey &&\n (serverDifferences[value] = { __html: attributes }));\n continue;\n case \"className\":\n hydrateAttribute(\n domElement,\n value,\n \"class\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"tabIndex\":\n hydrateAttribute(\n domElement,\n value,\n \"tabindex\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"style\":\n extraAttributes.delete(value);\n diffHydratedStyles(domElement, propKey, serverDifferences);\n continue;\n case \"multiple\":\n extraAttributes.delete(value);\n warnForPropDifference(\n value,\n domElement.multiple,\n propKey,\n serverDifferences\n );\n continue;\n case \"muted\":\n extraAttributes.delete(value);\n warnForPropDifference(\n value,\n domElement.muted,\n propKey,\n serverDifferences\n );\n continue;\n case \"autoFocus\":\n extraAttributes.delete(\"autofocus\");\n warnForPropDifference(\n value,\n domElement.autofocus,\n propKey,\n serverDifferences\n );\n continue;\n case \"data\":\n if (\"object\" !== tag) {\n extraAttributes.delete(value);\n attributes = domElement.getAttribute(\"data\");\n warnForPropDifference(\n value,\n attributes,\n propKey,\n serverDifferences\n );\n continue;\n }\n case \"src\":\n case \"href\":\n if (\n !(\n \"\" !== propKey ||\n (\"a\" === tag && \"href\" === value) ||\n (\"object\" === tag && \"data\" === value)\n )\n ) {\n \"src\" === value\n ? console.error(\n 'An empty string (\"\") was passed to the %s attribute. This may cause the browser to download the whole page again over the network. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',\n value,\n value\n )\n : console.error(\n 'An empty string (\"\") was passed to the %s attribute. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',\n value,\n value\n );\n continue;\n }\n hydrateSanitizedAttribute(\n domElement,\n value,\n value,\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"action\":\n case \"formAction\":\n attributes = domElement.getAttribute(value);\n if (\"function\" === typeof propKey) {\n extraAttributes.delete(value.toLowerCase());\n \"formAction\" === value\n ? (extraAttributes.delete(\"name\"),\n extraAttributes.delete(\"formenctype\"),\n extraAttributes.delete(\"formmethod\"),\n extraAttributes.delete(\"formtarget\"))\n : (extraAttributes.delete(\"enctype\"),\n extraAttributes.delete(\"method\"),\n extraAttributes.delete(\"target\"));\n continue;\n } else if (attributes === EXPECTED_FORM_ACTION_URL) {\n extraAttributes.delete(value.toLowerCase());\n warnForPropDifference(\n value,\n \"function\",\n propKey,\n serverDifferences\n );\n continue;\n }\n hydrateSanitizedAttribute(\n domElement,\n value,\n value.toLowerCase(),\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xlinkHref\":\n hydrateSanitizedAttribute(\n domElement,\n value,\n \"xlink:href\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"contentEditable\":\n hydrateBooleanishAttribute(\n domElement,\n value,\n \"contenteditable\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"spellCheck\":\n hydrateBooleanishAttribute(\n domElement,\n value,\n \"spellcheck\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"draggable\":\n case \"autoReverse\":\n case \"externalResourcesRequired\":\n case \"focusable\":\n case \"preserveAlpha\":\n hydrateBooleanishAttribute(\n domElement,\n value,\n value,\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"allowFullScreen\":\n case \"async\":\n case \"autoPlay\":\n case \"controls\":\n case \"default\":\n case \"defer\":\n case \"disabled\":\n case \"disablePictureInPicture\":\n case \"disableRemotePlayback\":\n case \"formNoValidate\":\n case \"hidden\":\n case \"loop\":\n case \"noModule\":\n case \"noValidate\":\n case \"open\":\n case \"playsInline\":\n case \"readOnly\":\n case \"required\":\n case \"reversed\":\n case \"scoped\":\n case \"seamless\":\n case \"itemScope\":\n hydrateBooleanAttribute(\n domElement,\n value,\n value.toLowerCase(),\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"capture\":\n case \"download\":\n a: {\n i = domElement;\n var attributeName = (attributes = value),\n serverDifferences$jscomp$0 = serverDifferences;\n extraAttributes.delete(attributeName);\n i = i.getAttribute(attributeName);\n if (null === i)\n switch (typeof propKey) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n break a;\n default:\n if (!1 === propKey) break a;\n }\n else if (null != propKey)\n switch (typeof propKey) {\n case \"function\":\n case \"symbol\":\n break;\n case \"boolean\":\n if (!0 === propKey && \"\" === i) break a;\n break;\n default:\n if (\n (checkAttributeStringCoercion(propKey, attributes),\n i === \"\" + propKey)\n )\n break a;\n }\n warnForPropDifference(\n attributes,\n i,\n propKey,\n serverDifferences$jscomp$0\n );\n }\n continue;\n case \"cols\":\n case \"rows\":\n case \"size\":\n case \"span\":\n a: {\n i = domElement;\n attributeName = attributes = value;\n serverDifferences$jscomp$0 = serverDifferences;\n extraAttributes.delete(attributeName);\n i = i.getAttribute(attributeName);\n if (null === i)\n switch (typeof propKey) {\n case \"undefined\":\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n break a;\n default:\n if (isNaN(propKey) || 1 > propKey) break a;\n }\n else if (null != propKey)\n switch (typeof propKey) {\n case \"function\":\n case \"symbol\":\n case \"boolean\":\n break;\n default:\n if (\n !(isNaN(propKey) || 1 > propKey) &&\n (checkAttributeStringCoercion(propKey, attributes),\n i === \"\" + propKey)\n )\n break a;\n }\n warnForPropDifference(\n attributes,\n i,\n propKey,\n serverDifferences$jscomp$0\n );\n }\n continue;\n case \"rowSpan\":\n hydrateNumericAttribute(\n domElement,\n value,\n \"rowspan\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"start\":\n hydrateNumericAttribute(\n domElement,\n value,\n value,\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xHeight\":\n hydrateAttribute(\n domElement,\n value,\n \"x-height\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xlinkActuate\":\n hydrateAttribute(\n domElement,\n value,\n \"xlink:actuate\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xlinkArcrole\":\n hydrateAttribute(\n domElement,\n value,\n \"xlink:arcrole\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xlinkRole\":\n hydrateAttribute(\n domElement,\n value,\n \"xlink:role\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xlinkShow\":\n hydrateAttribute(\n domElement,\n value,\n \"xlink:show\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xlinkTitle\":\n hydrateAttribute(\n domElement,\n value,\n \"xlink:title\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xlinkType\":\n hydrateAttribute(\n domElement,\n value,\n \"xlink:type\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xmlBase\":\n hydrateAttribute(\n domElement,\n value,\n \"xml:base\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xmlLang\":\n hydrateAttribute(\n domElement,\n value,\n \"xml:lang\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"xmlSpace\":\n hydrateAttribute(\n domElement,\n value,\n \"xml:space\",\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n case \"inert\":\n \"\" !== propKey ||\n didWarnForNewBooleanPropsWithEmptyValue[value] ||\n ((didWarnForNewBooleanPropsWithEmptyValue[value] = !0),\n console.error(\n \"Received an empty string for a boolean attribute `%s`. This will treat the attribute as if it were false. Either pass `false` to silence this warning, or pass `true` if you used an empty string in earlier versions of React to indicate this attribute is true.\",\n value\n ));\n hydrateBooleanAttribute(\n domElement,\n value,\n value,\n propKey,\n extraAttributes,\n serverDifferences\n );\n continue;\n default:\n if (\n !(2 < value.length) ||\n (\"o\" !== value[0] && \"O\" !== value[0]) ||\n (\"n\" !== value[1] && \"N\" !== value[1])\n ) {\n i = getAttributeAlias(value);\n attributes = !1;\n hostContext.context === HostContextNamespaceNone &&\n \"svg\" !== tag &&\n \"math\" !== tag\n ? extraAttributes.delete(i.toLowerCase())\n : ((attributeName = value.toLowerCase()),\n (attributeName = possibleStandardNames.hasOwnProperty(\n attributeName\n )\n ? possibleStandardNames[attributeName] || null\n : null),\n null !== attributeName &&\n attributeName !== value &&\n ((attributes = !0),\n extraAttributes.delete(attributeName)),\n extraAttributes.delete(i));\n a: if (\n ((attributeName = domElement),\n (serverDifferences$jscomp$0 = i),\n (i = propKey),\n isAttributeNameSafe(serverDifferences$jscomp$0))\n )\n if (\n attributeName.hasAttribute(serverDifferences$jscomp$0)\n )\n (attributeName = attributeName.getAttribute(\n serverDifferences$jscomp$0\n )),\n checkAttributeStringCoercion(\n i,\n serverDifferences$jscomp$0\n ),\n (i = attributeName === \"\" + i ? i : attributeName);\n else {\n switch (typeof i) {\n case \"function\":\n case \"symbol\":\n break a;\n case \"boolean\":\n if (\n ((attributeName = serverDifferences$jscomp$0\n .toLowerCase()\n .slice(0, 5)),\n \"data-\" !== attributeName &&\n \"aria-\" !== attributeName)\n )\n break a;\n }\n i = void 0 === i ? void 0 : null;\n }\n else i = void 0;\n attributes ||\n warnForPropDifference(\n value,\n i,\n propKey,\n serverDifferences\n );\n }\n }\n 0 < extraAttributes.size &&\n !0 !== props.suppressHydrationWarning &&\n warnForExtraAttributes(domElement, extraAttributes, serverDifferences);\n return 0 === Object.keys(serverDifferences).length\n ? null\n : serverDifferences;\n }\n function propNamesListJoin(list, combinator) {\n switch (list.length) {\n case 0:\n return \"\";\n case 1:\n return list[0];\n case 2:\n return list[0] + \" \" + combinator + \" \" + list[1];\n default:\n return (\n list.slice(0, -1).join(\", \") +\n \", \" +\n combinator +\n \" \" +\n list[list.length - 1]\n );\n }\n }\n function getOwnerDocumentFromRootContainer(rootContainerElement) {\n return 9 === rootContainerElement.nodeType\n ? rootContainerElement\n : rootContainerElement.ownerDocument;\n }\n function getOwnHostContext(namespaceURI) {\n switch (namespaceURI) {\n case SVG_NAMESPACE:\n return HostContextNamespaceSvg;\n case MATH_NAMESPACE:\n return HostContextNamespaceMath;\n default:\n return HostContextNamespaceNone;\n }\n }\n function getChildHostContextProd(parentNamespace, type) {\n if (parentNamespace === HostContextNamespaceNone)\n switch (type) {\n case \"svg\":\n return HostContextNamespaceSvg;\n case \"math\":\n return HostContextNamespaceMath;\n default:\n return HostContextNamespaceNone;\n }\n return parentNamespace === HostContextNamespaceSvg &&\n \"foreignObject\" === type\n ? HostContextNamespaceNone\n : parentNamespace;\n }\n function shouldSetTextContent(type, props) {\n return (\n \"textarea\" === type ||\n \"noscript\" === type ||\n \"string\" === typeof props.children ||\n \"number\" === typeof props.children ||\n \"bigint\" === typeof props.children ||\n (\"object\" === typeof props.dangerouslySetInnerHTML &&\n null !== props.dangerouslySetInnerHTML &&\n null != props.dangerouslySetInnerHTML.__html)\n );\n }\n function shouldAttemptEagerTransition() {\n var event = window.event;\n if (event && \"popstate\" === event.type) {\n if (event === currentPopstateTransitionEvent) return !1;\n currentPopstateTransitionEvent = event;\n return !0;\n }\n currentPopstateTransitionEvent = null;\n return !1;\n }\n function handleErrorInNextTick(error) {\n setTimeout(function () {\n throw error;\n });\n }\n function commitMount(domElement, type, newProps) {\n switch (type) {\n case \"button\":\n case \"input\":\n case \"select\":\n case \"textarea\":\n newProps.autoFocus && domElement.focus();\n break;\n case \"img\":\n newProps.src\n ? (domElement.src = newProps.src)\n : newProps.srcSet && (domElement.srcset = newProps.srcSet);\n }\n }\n function commitHydratedInstance() {}\n function commitUpdate(domElement, type, oldProps, newProps) {\n updateProperties(domElement, type, oldProps, newProps);\n domElement[internalPropsKey] = newProps;\n }\n function resetTextContent(domElement) {\n setTextContent(domElement, \"\");\n }\n function commitTextUpdate(textInstance, oldText, newText) {\n textInstance.nodeValue = newText;\n }\n function warnForReactChildrenConflict(container) {\n if (!container.__reactWarnedAboutChildrenConflict) {\n var props = container[internalPropsKey] || null;\n if (null !== props) {\n var fiber = getInstanceFromNode(container);\n null !== fiber &&\n (\"string\" === typeof props.children ||\n \"number\" === typeof props.children\n ? ((container.__reactWarnedAboutChildrenConflict = !0),\n runWithFiberInDEV(fiber, function () {\n console.error(\n 'Cannot use a ref on a React element as a container to `createRoot` or `createPortal` if that element also sets \"children\" text content using React. It should be a leaf with no children. Otherwise it\\'s ambiguous which children should be used.'\n );\n }))\n : null != props.dangerouslySetInnerHTML &&\n ((container.__reactWarnedAboutChildrenConflict = !0),\n runWithFiberInDEV(fiber, function () {\n console.error(\n 'Cannot use a ref on a React element as a container to `createRoot` or `createPortal` if that element also sets \"dangerouslySetInnerHTML\" using React. It should be a leaf with no children. Otherwise it\\'s ambiguous which children should be used.'\n );\n })));\n }\n }\n }\n function isSingletonScope(type) {\n return \"head\" === type;\n }\n function removeChild(parentInstance, child) {\n parentInstance.removeChild(child);\n }\n function removeChildFromContainer(container, child) {\n (9 === container.nodeType\n ? container.body\n : \"HTML\" === container.nodeName\n ? container.ownerDocument.body\n : container\n ).removeChild(child);\n }\n function clearHydrationBoundary(parentInstance, hydrationInstance) {\n var node = hydrationInstance,\n depth = 0;\n do {\n var nextNode = node.nextSibling;\n parentInstance.removeChild(node);\n if (nextNode && 8 === nextNode.nodeType)\n if (\n ((node = nextNode.data),\n node === SUSPENSE_END_DATA || node === ACTIVITY_END_DATA)\n ) {\n if (0 === depth) {\n parentInstance.removeChild(nextNode);\n retryIfBlockedOn(hydrationInstance);\n return;\n }\n depth--;\n } else if (\n node === SUSPENSE_START_DATA ||\n node === SUSPENSE_PENDING_START_DATA ||\n node === SUSPENSE_QUEUED_START_DATA ||\n node === SUSPENSE_FALLBACK_START_DATA ||\n node === ACTIVITY_START_DATA\n )\n depth++;\n else if (node === PREAMBLE_CONTRIBUTION_HTML)\n releaseSingletonInstance(\n parentInstance.ownerDocument.documentElement\n );\n else if (node === PREAMBLE_CONTRIBUTION_HEAD) {\n node = parentInstance.ownerDocument.head;\n releaseSingletonInstance(node);\n for (var node$jscomp$0 = node.firstChild; node$jscomp$0; ) {\n var nextNode$jscomp$0 = node$jscomp$0.nextSibling,\n nodeName = node$jscomp$0.nodeName;\n node$jscomp$0[internalHoistableMarker] ||\n \"SCRIPT\" === nodeName ||\n \"STYLE\" === nodeName ||\n (\"LINK\" === nodeName &&\n \"stylesheet\" === node$jscomp$0.rel.toLowerCase()) ||\n node.removeChild(node$jscomp$0);\n node$jscomp$0 = nextNode$jscomp$0;\n }\n } else\n node === PREAMBLE_CONTRIBUTION_BODY &&\n releaseSingletonInstance(parentInstance.ownerDocument.body);\n node = nextNode;\n } while (node);\n retryIfBlockedOn(hydrationInstance);\n }\n function hideOrUnhideDehydratedBoundary(suspenseInstance, isHidden) {\n var node = suspenseInstance;\n suspenseInstance = 0;\n do {\n var nextNode = node.nextSibling;\n 1 === node.nodeType\n ? isHidden\n ? ((node._stashedDisplay = node.style.display),\n (node.style.display = \"none\"))\n : ((node.style.display = node._stashedDisplay || \"\"),\n \"\" === node.getAttribute(\"style\") &&\n node.removeAttribute(\"style\"))\n : 3 === node.nodeType &&\n (isHidden\n ? ((node._stashedText = node.nodeValue), (node.nodeValue = \"\"))\n : (node.nodeValue = node._stashedText || \"\"));\n if (nextNode && 8 === nextNode.nodeType)\n if (((node = nextNode.data), node === SUSPENSE_END_DATA))\n if (0 === suspenseInstance) break;\n else suspenseInstance--;\n else\n (node !== SUSPENSE_START_DATA &&\n node !== SUSPENSE_PENDING_START_DATA &&\n node !== SUSPENSE_QUEUED_START_DATA &&\n node !== SUSPENSE_FALLBACK_START_DATA) ||\n suspenseInstance++;\n node = nextNode;\n } while (node);\n }\n function hideDehydratedBoundary(suspenseInstance) {\n hideOrUnhideDehydratedBoundary(suspenseInstance, !0);\n }\n function hideInstance(instance) {\n instance = instance.style;\n \"function\" === typeof instance.setProperty\n ? instance.setProperty(\"display\", \"none\", \"important\")\n : (instance.display = \"none\");\n }\n function hideTextInstance(textInstance) {\n textInstance.nodeValue = \"\";\n }\n function unhideDehydratedBoundary(dehydratedInstance) {\n hideOrUnhideDehydratedBoundary(dehydratedInstance, !1);\n }\n function unhideInstance(instance, props) {\n props = props[STYLE];\n props =\n void 0 !== props && null !== props && props.hasOwnProperty(\"display\")\n ? props.display\n : null;\n instance.style.display =\n null == props || \"boolean\" === typeof props ? \"\" : (\"\" + props).trim();\n }\n function unhideTextInstance(textInstance, text) {\n textInstance.nodeValue = text;\n }\n function clearContainerSparingly(container) {\n var nextNode = container.firstChild;\n nextNode && 10 === nextNode.nodeType && (nextNode = nextNode.nextSibling);\n for (; nextNode; ) {\n var node = nextNode;\n nextNode = nextNode.nextSibling;\n switch (node.nodeName) {\n case \"HTML\":\n case \"HEAD\":\n case \"BODY\":\n clearContainerSparingly(node);\n detachDeletedInstance(node);\n continue;\n case \"SCRIPT\":\n case \"STYLE\":\n continue;\n case \"LINK\":\n if (\"stylesheet\" === node.rel.toLowerCase()) continue;\n }\n container.removeChild(node);\n }\n }\n function canHydrateInstance(instance, type, props, inRootOrSingleton) {\n for (; 1 === instance.nodeType; ) {\n var anyProps = props;\n if (instance.nodeName.toLowerCase() !== type.toLowerCase()) {\n if (\n !inRootOrSingleton &&\n (\"INPUT\" !== instance.nodeName || \"hidden\" !== instance.type)\n )\n break;\n } else if (!inRootOrSingleton)\n if (\"input\" === type && \"hidden\" === instance.type) {\n checkAttributeStringCoercion(anyProps.name, \"name\");\n var name = null == anyProps.name ? null : \"\" + anyProps.name;\n if (\n \"hidden\" === anyProps.type &&\n instance.getAttribute(\"name\") === name\n )\n return instance;\n } else return instance;\n else if (!instance[internalHoistableMarker])\n switch (type) {\n case \"meta\":\n if (!instance.hasAttribute(\"itemprop\")) break;\n return instance;\n case \"link\":\n name = instance.getAttribute(\"rel\");\n if (\n \"stylesheet\" === name &&\n instance.hasAttribute(\"data-precedence\")\n )\n break;\n else if (\n name !== anyProps.rel ||\n instance.getAttribute(\"href\") !==\n (null == anyProps.href || \"\" === anyProps.href\n ? null\n : anyProps.href) ||\n instance.getAttribute(\"crossorigin\") !==\n (null == anyProps.crossOrigin\n ? null\n : anyProps.crossOrigin) ||\n instance.getAttribute(\"title\") !==\n (null == anyProps.title ? null : anyProps.title)\n )\n break;\n return instance;\n case \"style\":\n if (instance.hasAttribute(\"data-precedence\")) break;\n return instance;\n case \"script\":\n name = instance.getAttribute(\"src\");\n if (\n (name !== (null == anyProps.src ? null : anyProps.src) ||\n instance.getAttribute(\"type\") !==\n (null == anyProps.type ? null : anyProps.type) ||\n instance.getAttribute(\"crossorigin\") !==\n (null == anyProps.crossOrigin\n ? null\n : anyProps.crossOrigin)) &&\n name &&\n instance.hasAttribute(\"async\") &&\n !instance.hasAttribute(\"itemprop\")\n )\n break;\n return instance;\n default:\n return instance;\n }\n instance = getNextHydratable(instance.nextSibling);\n if (null === instance) break;\n }\n return null;\n }\n function canHydrateTextInstance(instance, text, inRootOrSingleton) {\n if (\"\" === text) return null;\n for (; 3 !== instance.nodeType; ) {\n if (\n (1 !== instance.nodeType ||\n \"INPUT\" !== instance.nodeName ||\n \"hidden\" !== instance.type) &&\n !inRootOrSingleton\n )\n return null;\n instance = getNextHydratable(instance.nextSibling);\n if (null === instance) return null;\n }\n return instance;\n }\n function canHydrateHydrationBoundary(instance, inRootOrSingleton) {\n for (; 8 !== instance.nodeType; ) {\n if (!inRootOrSingleton) return null;\n instance = getNextHydratable(instance.nextSibling);\n if (null === instance) return null;\n }\n return instance;\n }\n function isSuspenseInstancePending(instance) {\n return (\n instance.data === SUSPENSE_PENDING_START_DATA ||\n instance.data === SUSPENSE_QUEUED_START_DATA\n );\n }\n function isSuspenseInstanceFallback(instance) {\n return (\n instance.data === SUSPENSE_FALLBACK_START_DATA ||\n (instance.data === SUSPENSE_PENDING_START_DATA &&\n instance.ownerDocument.readyState !== DOCUMENT_READY_STATE_LOADING)\n );\n }\n function registerSuspenseInstanceRetry(instance, callback) {\n var ownerDocument = instance.ownerDocument;\n if (instance.data === SUSPENSE_QUEUED_START_DATA)\n instance._reactRetry = callback;\n else if (\n instance.data !== SUSPENSE_PENDING_START_DATA ||\n ownerDocument.readyState !== DOCUMENT_READY_STATE_LOADING\n )\n callback();\n else {\n var listener = function () {\n callback();\n ownerDocument.removeEventListener(\"DOMContentLoaded\", listener);\n };\n ownerDocument.addEventListener(\"DOMContentLoaded\", listener);\n instance._reactRetry = listener;\n }\n }\n function getNextHydratable(node) {\n for (; null != node; node = node.nextSibling) {\n var nodeType = node.nodeType;\n if (1 === nodeType || 3 === nodeType) break;\n if (8 === nodeType) {\n nodeType = node.data;\n if (\n nodeType === SUSPENSE_START_DATA ||\n nodeType === SUSPENSE_FALLBACK_START_DATA ||\n nodeType === SUSPENSE_PENDING_START_DATA ||\n nodeType === SUSPENSE_QUEUED_START_DATA ||\n nodeType === ACTIVITY_START_DATA ||\n nodeType === FORM_STATE_IS_MATCHING ||\n nodeType === FORM_STATE_IS_NOT_MATCHING\n )\n break;\n if (nodeType === SUSPENSE_END_DATA || nodeType === ACTIVITY_END_DATA)\n return null;\n }\n }\n return node;\n }\n function describeHydratableInstanceForDevWarnings(instance) {\n if (1 === instance.nodeType) {\n for (\n var JSCompiler_temp_const = instance.nodeName.toLowerCase(),\n serverDifferences = {},\n attributes = instance.attributes,\n i = 0;\n i < attributes.length;\n i++\n ) {\n var attr = attributes[i];\n serverDifferences[getPropNameFromAttributeName(attr.name)] =\n \"style\" === attr.name.toLowerCase()\n ? getStylesObjectFromElement(instance)\n : attr.value;\n }\n return { type: JSCompiler_temp_const, props: serverDifferences };\n }\n return 8 === instance.nodeType\n ? instance.data === ACTIVITY_START_DATA\n ? { type: \"Activity\", props: {} }\n : { type: \"Suspense\", props: {} }\n : instance.nodeValue;\n }\n function diffHydratedTextForDevWarnings(textInstance, text, parentProps) {\n return null === parentProps ||\n !0 !== parentProps[SUPPRESS_HYDRATION_WARNING]\n ? (textInstance.nodeValue === text\n ? (textInstance = null)\n : ((text = normalizeMarkupForTextOrAttribute(text)),\n (textInstance =\n normalizeMarkupForTextOrAttribute(textInstance.nodeValue) ===\n text\n ? null\n : textInstance.nodeValue)),\n textInstance)\n : null;\n }\n function getNextHydratableInstanceAfterHydrationBoundary(\n hydrationInstance\n ) {\n hydrationInstance = hydrationInstance.nextSibling;\n for (var depth = 0; hydrationInstance; ) {\n if (8 === hydrationInstance.nodeType) {\n var data = hydrationInstance.data;\n if (data === SUSPENSE_END_DATA || data === ACTIVITY_END_DATA) {\n if (0 === depth)\n return getNextHydratable(hydrationInstance.nextSibling);\n depth--;\n } else\n (data !== SUSPENSE_START_DATA &&\n data !== SUSPENSE_FALLBACK_START_DATA &&\n data !== SUSPENSE_PENDING_START_DATA &&\n data !== SUSPENSE_QUEUED_START_DATA &&\n data !== ACTIVITY_START_DATA) ||\n depth++;\n }\n hydrationInstance = hydrationInstance.nextSibling;\n }\n return null;\n }\n function getParentHydrationBoundary(targetInstance) {\n targetInstance = targetInstance.previousSibling;\n for (var depth = 0; targetInstance; ) {\n if (8 === targetInstance.nodeType) {\n var data = targetInstance.data;\n if (\n data === SUSPENSE_START_DATA ||\n data === SUSPENSE_FALLBACK_START_DATA ||\n data === SUSPENSE_PENDING_START_DATA ||\n data === SUSPENSE_QUEUED_START_DATA ||\n data === ACTIVITY_START_DATA\n ) {\n if (0 === depth) return targetInstance;\n depth--;\n } else\n (data !== SUSPENSE_END_DATA && data !== ACTIVITY_END_DATA) ||\n depth++;\n }\n targetInstance = targetInstance.previousSibling;\n }\n return null;\n }\n function commitHydratedContainer(container) {\n retryIfBlockedOn(container);\n }\n function commitHydratedActivityInstance(activityInstance) {\n retryIfBlockedOn(activityInstance);\n }\n function commitHydratedSuspenseInstance(suspenseInstance) {\n retryIfBlockedOn(suspenseInstance);\n }\n function resolveSingletonInstance(\n type,\n props,\n rootContainerInstance,\n hostContext,\n validateDOMNestingDev\n ) {\n validateDOMNestingDev &&\n validateDOMNesting(type, hostContext.ancestorInfo);\n props = getOwnerDocumentFromRootContainer(rootContainerInstance);\n switch (type) {\n case \"html\":\n type = props.documentElement;\n if (!type)\n throw Error(\n \"React expected an <html> element (document.documentElement) to exist in the Document but one was not found. React never removes the documentElement for any Document it renders into so the cause is likely in some other script running on this page.\"\n );\n return type;\n case \"head\":\n type = props.head;\n if (!type)\n throw Error(\n \"React expected a <head> element (document.head) to exist in the Document but one was not found. React never removes the head for any Document it renders into so the cause is likely in some other script running on this page.\"\n );\n return type;\n case \"body\":\n type = props.body;\n if (!type)\n throw Error(\n \"React expected a <body> element (document.body) to exist in the Document but one was not found. React never removes the body for any Document it renders into so the cause is likely in some other script running on this page.\"\n );\n return type;\n default:\n throw Error(\n \"resolveSingletonInstance was called with an element type that is not supported. This is a bug in React.\"\n );\n }\n }\n function acquireSingletonInstance(\n type,\n props,\n instance,\n internalInstanceHandle\n ) {\n if (\n !instance[internalContainerInstanceKey] &&\n getInstanceFromNode(instance)\n ) {\n var tagName = instance.tagName.toLowerCase();\n console.error(\n \"You are mounting a new %s component when a previous one has not first unmounted. It is an error to render more than one %s component at a time and attributes and children of these components will likely fail in unpredictable ways. Please only render a single instance of <%s> and if you need to mount a new one, ensure any previous ones have unmounted first.\",\n tagName,\n tagName,\n tagName\n );\n }\n switch (type) {\n case \"html\":\n case \"head\":\n case \"body\":\n break;\n default:\n console.error(\n \"acquireSingletonInstance was called with an element type that is not supported. This is a bug in React.\"\n );\n }\n for (tagName = instance.attributes; tagName.length; )\n instance.removeAttributeNode(tagName[0]);\n setInitialProperties(instance, type, props);\n instance[internalInstanceKey] = internalInstanceHandle;\n instance[internalPropsKey] = props;\n }\n function releaseSingletonInstance(instance) {\n for (var attributes = instance.attributes; attributes.length; )\n instance.removeAttributeNode(attributes[0]);\n detachDeletedInstance(instance);\n }\n function getHoistableRoot(container) {\n return \"function\" === typeof container.getRootNode\n ? container.getRootNode()\n : 9 === container.nodeType\n ? container\n : container.ownerDocument;\n }\n function preconnectAs(rel, href, crossOrigin) {\n var ownerDocument = globalDocument;\n if (ownerDocument && \"string\" === typeof href && href) {\n var limitedEscapedHref =\n escapeSelectorAttributeValueInsideDoubleQuotes(href);\n limitedEscapedHref =\n 'link[rel=\"' + rel + '\"][href=\"' + limitedEscapedHref + '\"]';\n \"string\" === typeof crossOrigin &&\n (limitedEscapedHref += '[crossorigin=\"' + crossOrigin + '\"]');\n preconnectsSet.has(limitedEscapedHref) ||\n (preconnectsSet.add(limitedEscapedHref),\n (rel = { rel: rel, crossOrigin: crossOrigin, href: href }),\n null === ownerDocument.querySelector(limitedEscapedHref) &&\n ((href = ownerDocument.createElement(\"link\")),\n setInitialProperties(href, \"link\", rel),\n markNodeAsHoistable(href),\n ownerDocument.head.appendChild(href)));\n }\n }\n function getResource(type, currentProps, pendingProps, currentResource) {\n var resourceRoot = (resourceRoot = rootInstanceStackCursor.current)\n ? getHoistableRoot(resourceRoot)\n : null;\n if (!resourceRoot)\n throw Error(\n '\"resourceRoot\" was expected to exist. This is a bug in React.'\n );\n switch (type) {\n case \"meta\":\n case \"title\":\n return null;\n case \"style\":\n return \"string\" === typeof pendingProps.precedence &&\n \"string\" === typeof pendingProps.href\n ? ((pendingProps = getStyleKey(pendingProps.href)),\n (currentProps =\n getResourcesFromRoot(resourceRoot).hoistableStyles),\n (currentResource = currentProps.get(pendingProps)),\n currentResource ||\n ((currentResource = {\n type: \"style\",\n instance: null,\n count: 0,\n state: null\n }),\n currentProps.set(pendingProps, currentResource)),\n currentResource)\n : { type: \"void\", instance: null, count: 0, state: null };\n case \"link\":\n if (\n \"stylesheet\" === pendingProps.rel &&\n \"string\" === typeof pendingProps.href &&\n \"string\" === typeof pendingProps.precedence\n ) {\n type = getStyleKey(pendingProps.href);\n var _styles = getResourcesFromRoot(resourceRoot).hoistableStyles,\n _resource = _styles.get(type);\n if (\n !_resource &&\n ((resourceRoot = resourceRoot.ownerDocument || resourceRoot),\n (_resource = {\n type: \"stylesheet\",\n instance: null,\n count: 0,\n state: { loading: NotLoaded, preload: null }\n }),\n _styles.set(type, _resource),\n (_styles = resourceRoot.querySelector(\n getStylesheetSelectorFromKey(type)\n )) &&\n !_styles._p &&\n ((_resource.instance = _styles),\n (_resource.state.loading = Loaded | Inserted)),\n !preloadPropsMap.has(type))\n ) {\n var preloadProps = {\n rel: \"preload\",\n as: \"style\",\n href: pendingProps.href,\n crossOrigin: pendingProps.crossOrigin,\n integrity: pendingProps.integrity,\n media: pendingProps.media,\n hrefLang: pendingProps.hrefLang,\n referrerPolicy: pendingProps.referrerPolicy\n };\n preloadPropsMap.set(type, preloadProps);\n _styles ||\n preloadStylesheet(\n resourceRoot,\n type,\n preloadProps,\n _resource.state\n );\n }\n if (currentProps && null === currentResource)\n throw (\n ((pendingProps =\n \"\\n\\n - \" +\n describeLinkForResourceErrorDEV(currentProps) +\n \"\\n + \" +\n describeLinkForResourceErrorDEV(pendingProps)),\n Error(\n \"Expected <link> not to update to be updated to a stylesheet with precedence. Check the `rel`, `href`, and `precedence` props of this component. Alternatively, check whether two different <link> components render in the same slot or share the same key.\" +\n pendingProps\n ))\n );\n return _resource;\n }\n if (currentProps && null !== currentResource)\n throw (\n ((pendingProps =\n \"\\n\\n - \" +\n describeLinkForResourceErrorDEV(currentProps) +\n \"\\n + \" +\n describeLinkForResourceErrorDEV(pendingProps)),\n Error(\n \"Expected stylesheet with precedence to not be updated to a different kind of <link>. Check the `rel`, `href`, and `precedence` props of this component. Alternatively, check whether two different <link> components render in the same slot or share the same key.\" +\n pendingProps\n ))\n );\n return null;\n case \"script\":\n return (\n (currentProps = pendingProps.async),\n (pendingProps = pendingProps.src),\n \"string\" === typeof pendingProps &&\n currentProps &&\n \"function\" !== typeof currentProps &&\n \"symbol\" !== typeof currentProps\n ? ((pendingProps = getScriptKey(pendingProps)),\n (currentProps =\n getResourcesFromRoot(resourceRoot).hoistableScripts),\n (currentResource = currentProps.get(pendingProps)),\n currentResource ||\n ((currentResource = {\n type: \"script\",\n instance: null,\n count: 0,\n state: null\n }),\n currentProps.set(pendingProps, currentResource)),\n currentResource)\n : { type: \"void\", instance: null, count: 0, state: null }\n );\n default:\n throw Error(\n 'getResource encountered a type it did not expect: \"' +\n type +\n '\". this is a bug in React.'\n );\n }\n }\n function describeLinkForResourceErrorDEV(props) {\n var describedProps = 0,\n description = \"<link\";\n \"string\" === typeof props.rel\n ? (describedProps++, (description += ' rel=\"' + props.rel + '\"'))\n : hasOwnProperty.call(props, \"rel\") &&\n (describedProps++,\n (description +=\n ' rel=\"' +\n (null === props.rel ? \"null\" : \"invalid type \" + typeof props.rel) +\n '\"'));\n \"string\" === typeof props.href\n ? (describedProps++, (description += ' href=\"' + props.href + '\"'))\n : hasOwnProperty.call(props, \"href\") &&\n (describedProps++,\n (description +=\n ' href=\"' +\n (null === props.href\n ? \"null\"\n : \"invalid type \" + typeof props.href) +\n '\"'));\n \"string\" === typeof props.precedence\n ? (describedProps++,\n (description += ' precedence=\"' + props.precedence + '\"'))\n : hasOwnProperty.call(props, \"precedence\") &&\n (describedProps++,\n (description +=\n \" precedence={\" +\n (null === props.precedence\n ? \"null\"\n : \"invalid type \" + typeof props.precedence) +\n \"}\"));\n Object.getOwnPropertyNames(props).length > describedProps &&\n (description += \" ...\");\n return description + \" />\";\n }\n function getStyleKey(href) {\n return (\n 'href=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(href) + '\"'\n );\n }\n function getStylesheetSelectorFromKey(key) {\n return 'link[rel=\"stylesheet\"][' + key + \"]\";\n }\n function stylesheetPropsFromRawProps(rawProps) {\n return assign({}, rawProps, {\n \"data-precedence\": rawProps.precedence,\n precedence: null\n });\n }\n function preloadStylesheet(ownerDocument, key, preloadProps, state) {\n ownerDocument.querySelector(\n 'link[rel=\"preload\"][as=\"style\"][' + key + \"]\"\n )\n ? (state.loading = Loaded)\n : ((key = ownerDocument.createElement(\"link\")),\n (state.preload = key),\n key.addEventListener(\"load\", function () {\n return (state.loading |= Loaded);\n }),\n key.addEventListener(\"error\", function () {\n return (state.loading |= Errored);\n }),\n setInitialProperties(key, \"link\", preloadProps),\n markNodeAsHoistable(key),\n ownerDocument.head.appendChild(key));\n }\n function getScriptKey(src) {\n return (\n '[src=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(src) + '\"]'\n );\n }\n function getScriptSelectorFromKey(key) {\n return \"script[async]\" + key;\n }\n function acquireResource(hoistableRoot, resource, props) {\n resource.count++;\n if (null === resource.instance)\n switch (resource.type) {\n case \"style\":\n var instance = hoistableRoot.querySelector(\n 'style[data-href~=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(props.href) +\n '\"]'\n );\n if (instance)\n return (\n (resource.instance = instance),\n markNodeAsHoistable(instance),\n instance\n );\n var styleProps = assign({}, props, {\n \"data-href\": props.href,\n \"data-precedence\": props.precedence,\n href: null,\n precedence: null\n });\n instance = (\n hoistableRoot.ownerDocument || hoistableRoot\n ).createElement(\"style\");\n markNodeAsHoistable(instance);\n setInitialProperties(instance, \"style\", styleProps);\n insertStylesheet(instance, props.precedence, hoistableRoot);\n return (resource.instance = instance);\n case \"stylesheet\":\n styleProps = getStyleKey(props.href);\n var _instance = hoistableRoot.querySelector(\n getStylesheetSelectorFromKey(styleProps)\n );\n if (_instance)\n return (\n (resource.state.loading |= Inserted),\n (resource.instance = _instance),\n markNodeAsHoistable(_instance),\n _instance\n );\n instance = stylesheetPropsFromRawProps(props);\n (styleProps = preloadPropsMap.get(styleProps)) &&\n adoptPreloadPropsForStylesheet(instance, styleProps);\n _instance = (\n hoistableRoot.ownerDocument || hoistableRoot\n ).createElement(\"link\");\n markNodeAsHoistable(_instance);\n var linkInstance = _instance;\n linkInstance._p = new Promise(function (resolve, reject) {\n linkInstance.onload = resolve;\n linkInstance.onerror = reject;\n });\n setInitialProperties(_instance, \"link\", instance);\n resource.state.loading |= Inserted;\n insertStylesheet(_instance, props.precedence, hoistableRoot);\n return (resource.instance = _instance);\n case \"script\":\n _instance = getScriptKey(props.src);\n if (\n (styleProps = hoistableRoot.querySelector(\n getScriptSelectorFromKey(_instance)\n ))\n )\n return (\n (resource.instance = styleProps),\n markNodeAsHoistable(styleProps),\n styleProps\n );\n instance = props;\n if ((styleProps = preloadPropsMap.get(_instance)))\n (instance = assign({}, props)),\n adoptPreloadPropsForScript(instance, styleProps);\n hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n styleProps = hoistableRoot.createElement(\"script\");\n markNodeAsHoistable(styleProps);\n setInitialProperties(styleProps, \"link\", instance);\n hoistableRoot.head.appendChild(styleProps);\n return (resource.instance = styleProps);\n case \"void\":\n return null;\n default:\n throw Error(\n 'acquireResource encountered a resource type it did not expect: \"' +\n resource.type +\n '\". this is a bug in React.'\n );\n }\n else\n \"stylesheet\" === resource.type &&\n (resource.state.loading & Inserted) === NotLoaded &&\n ((instance = resource.instance),\n (resource.state.loading |= Inserted),\n insertStylesheet(instance, props.precedence, hoistableRoot));\n return resource.instance;\n }\n function insertStylesheet(instance, precedence, root) {\n for (\n var nodes = root.querySelectorAll(\n 'link[rel=\"stylesheet\"][data-precedence],style[data-precedence]'\n ),\n last = nodes.length ? nodes[nodes.length - 1] : null,\n prior = last,\n i = 0;\n i < nodes.length;\n i++\n ) {\n var node = nodes[i];\n if (node.dataset.precedence === precedence) prior = node;\n else if (prior !== last) break;\n }\n prior\n ? prior.parentNode.insertBefore(instance, prior.nextSibling)\n : ((precedence = 9 === root.nodeType ? root.head : root),\n precedence.insertBefore(instance, precedence.firstChild));\n }\n function adoptPreloadPropsForStylesheet(stylesheetProps, preloadProps) {\n null == stylesheetProps.crossOrigin &&\n (stylesheetProps.crossOrigin = preloadProps.crossOrigin);\n null == stylesheetProps.referrerPolicy &&\n (stylesheetProps.referrerPolicy = preloadProps.referrerPolicy);\n null == stylesheetProps.title &&\n (stylesheetProps.title = preloadProps.title);\n }\n function adoptPreloadPropsForScript(scriptProps, preloadProps) {\n null == scriptProps.crossOrigin &&\n (scriptProps.crossOrigin = preloadProps.crossOrigin);\n null == scriptProps.referrerPolicy &&\n (scriptProps.referrerPolicy = preloadProps.referrerPolicy);\n null == scriptProps.integrity &&\n (scriptProps.integrity = preloadProps.integrity);\n }\n function getHydratableHoistableCache(type, keyAttribute, ownerDocument) {\n if (null === tagCaches) {\n var cache = new Map();\n var caches = (tagCaches = new Map());\n caches.set(ownerDocument, cache);\n } else\n (caches = tagCaches),\n (cache = caches.get(ownerDocument)),\n cache || ((cache = new Map()), caches.set(ownerDocument, cache));\n if (cache.has(type)) return cache;\n cache.set(type, null);\n ownerDocument = ownerDocument.getElementsByTagName(type);\n for (caches = 0; caches < ownerDocument.length; caches++) {\n var node = ownerDocument[caches];\n if (\n !(\n node[internalHoistableMarker] ||\n node[internalInstanceKey] ||\n (\"link\" === type && \"stylesheet\" === node.getAttribute(\"rel\"))\n ) &&\n node.namespaceURI !== SVG_NAMESPACE\n ) {\n var nodeKey = node.getAttribute(keyAttribute) || \"\";\n nodeKey = type + nodeKey;\n var existing = cache.get(nodeKey);\n existing ? existing.push(node) : cache.set(nodeKey, [node]);\n }\n }\n return cache;\n }\n function mountHoistable(hoistableRoot, type, instance) {\n hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n hoistableRoot.head.insertBefore(\n instance,\n \"title\" === type ? hoistableRoot.querySelector(\"head > title\") : null\n );\n }\n function isHostHoistableType(type, props, hostContext) {\n var outsideHostContainerContext =\n !hostContext.ancestorInfo.containerTagInScope;\n if (\n hostContext.context === HostContextNamespaceSvg ||\n null != props.itemProp\n )\n return (\n !outsideHostContainerContext ||\n null == props.itemProp ||\n (\"meta\" !== type &&\n \"title\" !== type &&\n \"style\" !== type &&\n \"link\" !== type &&\n \"script\" !== type) ||\n console.error(\n \"Cannot render a <%s> outside the main document if it has an `itemProp` prop. `itemProp` suggests the tag belongs to an `itemScope` which can appear anywhere in the DOM. If you were intending for React to hoist this <%s> remove the `itemProp` prop. Otherwise, try moving this tag into the <head> or <body> of the Document.\",\n type,\n type\n ),\n !1\n );\n switch (type) {\n case \"meta\":\n case \"title\":\n return !0;\n case \"style\":\n if (\n \"string\" !== typeof props.precedence ||\n \"string\" !== typeof props.href ||\n \"\" === props.href\n ) {\n outsideHostContainerContext &&\n console.error(\n 'Cannot render a <style> outside the main document without knowing its precedence and a unique href key. React can hoist and deduplicate <style> tags if you provide a `precedence` prop along with an `href` prop that does not conflict with the `href` values used in any other hoisted <style> or <link rel=\"stylesheet\" ...> tags. Note that hoisting <style> tags is considered an advanced feature that most will not use directly. Consider moving the <style> tag to the <head> or consider adding a `precedence=\"default\"` and `href=\"some unique resource identifier\"`.'\n );\n break;\n }\n return !0;\n case \"link\":\n if (\n \"string\" !== typeof props.rel ||\n \"string\" !== typeof props.href ||\n \"\" === props.href ||\n props.onLoad ||\n props.onError\n ) {\n if (\n \"stylesheet\" === props.rel &&\n \"string\" === typeof props.precedence\n ) {\n type = props.href;\n var onError = props.onError,\n disabled = props.disabled;\n hostContext = [];\n props.onLoad && hostContext.push(\"`onLoad`\");\n onError && hostContext.push(\"`onError`\");\n null != disabled && hostContext.push(\"`disabled`\");\n onError = propNamesListJoin(hostContext, \"and\");\n onError += 1 === hostContext.length ? \" prop\" : \" props\";\n disabled =\n 1 === hostContext.length ? \"an \" + onError : \"the \" + onError;\n hostContext.length &&\n console.error(\n 'React encountered a <link rel=\"stylesheet\" href=\"%s\" ... /> with a `precedence` prop that also included %s. The presence of loading and error handlers indicates an intent to manage the stylesheet loading state from your from your Component code and React will not hoist or deduplicate this stylesheet. If your intent was to have React hoist and deduplciate this stylesheet using the `precedence` prop remove the %s, otherwise remove the `precedence` prop.',\n type,\n disabled,\n onError\n );\n }\n outsideHostContainerContext &&\n (\"string\" !== typeof props.rel ||\n \"string\" !== typeof props.href ||\n \"\" === props.href\n ? console.error(\n \"Cannot render a <link> outside the main document without a `rel` and `href` prop. Try adding a `rel` and/or `href` prop to this <link> or moving the link into the <head> tag\"\n )\n : (props.onError || props.onLoad) &&\n console.error(\n \"Cannot render a <link> with onLoad or onError listeners outside the main document. Try removing onLoad={...} and onError={...} or moving it into the root <head> tag or somewhere in the <body>.\"\n ));\n break;\n }\n switch (props.rel) {\n case \"stylesheet\":\n return (\n (type = props.precedence),\n (props = props.disabled),\n \"string\" !== typeof type &&\n outsideHostContainerContext &&\n console.error(\n 'Cannot render a <link rel=\"stylesheet\" /> outside the main document without knowing its precedence. Consider adding precedence=\"default\" or moving it into the root <head> tag.'\n ),\n \"string\" === typeof type && null == props\n );\n default:\n return !0;\n }\n case \"script\":\n type =\n props.async &&\n \"function\" !== typeof props.async &&\n \"symbol\" !== typeof props.async;\n if (\n !type ||\n props.onLoad ||\n props.onError ||\n !props.src ||\n \"string\" !== typeof props.src\n ) {\n outsideHostContainerContext &&\n (type\n ? props.onLoad || props.onError\n ? console.error(\n \"Cannot render a <script> with onLoad or onError listeners outside the main document. Try removing onLoad={...} and onError={...} or moving it into the root <head> tag or somewhere in the <body>.\"\n )\n : console.error(\n \"Cannot render a <script> outside the main document without `async={true}` and a non-empty `src` prop. Ensure there is a valid `src` and either make the script async or move it into the root <head> tag or somewhere in the <body>.\"\n )\n : console.error(\n 'Cannot render a sync or defer <script> outside the main document without knowing its order. Try adding async=\"\" or moving it into the root <head> tag.'\n ));\n break;\n }\n return !0;\n case \"noscript\":\n case \"template\":\n outsideHostContainerContext &&\n console.error(\n \"Cannot render <%s> outside the main document. Try moving it into the root <head> tag.\",\n type\n );\n }\n return !1;\n }\n function preloadResource(resource) {\n return \"stylesheet\" === resource.type &&\n (resource.state.loading & Settled) === NotLoaded\n ? !1\n : !0;\n }\n function suspendResource(hoistableRoot, resource, props) {\n if (null === suspendedState)\n throw Error(\n \"Internal React Error: suspendedState null when it was expected to exists. Please report this as a React bug.\"\n );\n var state = suspendedState;\n if (\n \"stylesheet\" === resource.type &&\n (\"string\" !== typeof props.media ||\n !1 !== matchMedia(props.media).matches) &&\n (resource.state.loading & Inserted) === NotLoaded\n ) {\n if (null === resource.instance) {\n var key = getStyleKey(props.href),\n instance = hoistableRoot.querySelector(\n getStylesheetSelectorFromKey(key)\n );\n if (instance) {\n hoistableRoot = instance._p;\n null !== hoistableRoot &&\n \"object\" === typeof hoistableRoot &&\n \"function\" === typeof hoistableRoot.then &&\n (state.count++,\n (state = onUnsuspend.bind(state)),\n hoistableRoot.then(state, state));\n resource.state.loading |= Inserted;\n resource.instance = instance;\n markNodeAsHoistable(instance);\n return;\n }\n instance = hoistableRoot.ownerDocument || hoistableRoot;\n props = stylesheetPropsFromRawProps(props);\n (key = preloadPropsMap.get(key)) &&\n adoptPreloadPropsForStylesheet(props, key);\n instance = instance.createElement(\"link\");\n markNodeAsHoistable(instance);\n var linkInstance = instance;\n linkInstance._p = new Promise(function (resolve, reject) {\n linkInstance.onload = resolve;\n linkInstance.onerror = reject;\n });\n setInitialProperties(instance, \"link\", props);\n resource.instance = instance;\n }\n null === state.stylesheets && (state.stylesheets = new Map());\n state.stylesheets.set(resource, hoistableRoot);\n (hoistableRoot = resource.state.preload) &&\n (resource.state.loading & Settled) === NotLoaded &&\n (state.count++,\n (resource = onUnsuspend.bind(state)),\n hoistableRoot.addEventListener(\"load\", resource),\n hoistableRoot.addEventListener(\"error\", resource));\n }\n }\n function waitForCommitToBeReady() {\n if (null === suspendedState)\n throw Error(\n \"Internal React Error: suspendedState null when it was expected to exists. Please report this as a React bug.\"\n );\n var state = suspendedState;\n state.stylesheets &&\n 0 === state.count &&\n insertSuspendedStylesheets(state, state.stylesheets);\n return 0 < state.count\n ? function (commit) {\n var stylesheetTimer = setTimeout(function () {\n state.stylesheets &&\n insertSuspendedStylesheets(state, state.stylesheets);\n if (state.unsuspend) {\n var unsuspend = state.unsuspend;\n state.unsuspend = null;\n unsuspend();\n }\n }, 6e4);\n state.unsuspend = commit;\n return function () {\n state.unsuspend = null;\n clearTimeout(stylesheetTimer);\n };\n }\n : null;\n }\n function onUnsuspend() {\n this.count--;\n if (0 === this.count)\n if (this.stylesheets)\n insertSuspendedStylesheets(this, this.stylesheets);\n else if (this.unsuspend) {\n var unsuspend = this.unsuspend;\n this.unsuspend = null;\n unsuspend();\n }\n }\n function insertSuspendedStylesheets(state, resources) {\n state.stylesheets = null;\n null !== state.unsuspend &&\n (state.count++,\n (precedencesByRoot = new Map()),\n resources.forEach(insertStylesheetIntoRoot, state),\n (precedencesByRoot = null),\n onUnsuspend.call(state));\n }\n function insertStylesheetIntoRoot(root, resource) {\n if (!(resource.state.loading & Inserted)) {\n var precedences = precedencesByRoot.get(root);\n if (precedences) var last = precedences.get(LAST_PRECEDENCE);\n else {\n precedences = new Map();\n precedencesByRoot.set(root, precedences);\n for (\n var nodes = root.querySelectorAll(\n \"link[data-precedence],style[data-precedence]\"\n ),\n i = 0;\n i < nodes.length;\n i++\n ) {\n var node = nodes[i];\n if (\n \"LINK\" === node.nodeName ||\n \"not all\" !== node.getAttribute(\"media\")\n )\n precedences.set(node.dataset.precedence, node), (last = node);\n }\n last && precedences.set(LAST_PRECEDENCE, last);\n }\n nodes = resource.instance;\n node = nodes.getAttribute(\"data-precedence\");\n i = precedences.get(node) || last;\n i === last && precedences.set(LAST_PRECEDENCE, nodes);\n precedences.set(node, nodes);\n this.count++;\n last = onUnsuspend.bind(this);\n nodes.addEventListener(\"load\", last);\n nodes.addEventListener(\"error\", last);\n i\n ? i.parentNode.insertBefore(nodes, i.nextSibling)\n : ((root = 9 === root.nodeType ? root.head : root),\n root.insertBefore(nodes, root.firstChild));\n resource.state.loading |= Inserted;\n }\n }\n function FiberRootNode(\n containerInfo,\n tag,\n hydrate,\n identifierPrefix,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n onDefaultTransitionIndicator,\n formState\n ) {\n this.tag = 1;\n this.containerInfo = containerInfo;\n this.pingCache = this.current = this.pendingChildren = null;\n this.timeoutHandle = noTimeout;\n this.callbackNode =\n this.next =\n this.pendingContext =\n this.context =\n this.cancelPendingCommit =\n null;\n this.callbackPriority = 0;\n this.expirationTimes = createLaneMap(-1);\n this.entangledLanes =\n this.shellSuspendCounter =\n this.errorRecoveryDisabledLanes =\n this.expiredLanes =\n this.warmLanes =\n this.pingedLanes =\n this.suspendedLanes =\n this.pendingLanes =\n 0;\n this.entanglements = createLaneMap(0);\n this.hiddenUpdates = createLaneMap(null);\n this.identifierPrefix = identifierPrefix;\n this.onUncaughtError = onUncaughtError;\n this.onCaughtError = onCaughtError;\n this.onRecoverableError = onRecoverableError;\n this.pooledCache = null;\n this.pooledCacheLanes = 0;\n this.formState = formState;\n this.incompleteTransitions = new Map();\n this.passiveEffectDuration = this.effectDuration = -0;\n this.memoizedUpdaters = new Set();\n containerInfo = this.pendingUpdatersLaneMap = [];\n for (tag = 0; 31 > tag; tag++) containerInfo.push(new Set());\n this._debugRootType = hydrate ? \"hydrateRoot()\" : \"createRoot()\";\n }\n function createFiberRoot(\n containerInfo,\n tag,\n hydrate,\n initialChildren,\n hydrationCallbacks,\n isStrictMode,\n identifierPrefix,\n formState,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n onDefaultTransitionIndicator\n ) {\n containerInfo = new FiberRootNode(\n containerInfo,\n tag,\n hydrate,\n identifierPrefix,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n onDefaultTransitionIndicator,\n formState\n );\n tag = ConcurrentMode;\n !0 === isStrictMode && (tag |= StrictLegacyMode | StrictEffectsMode);\n isDevToolsPresent && (tag |= ProfileMode);\n isStrictMode = createFiber(3, null, null, tag);\n containerInfo.current = isStrictMode;\n isStrictMode.stateNode = containerInfo;\n tag = createCache();\n retainCache(tag);\n containerInfo.pooledCache = tag;\n retainCache(tag);\n isStrictMode.memoizedState = {\n element: initialChildren,\n isDehydrated: hydrate,\n cache: tag\n };\n initializeUpdateQueue(isStrictMode);\n return containerInfo;\n }\n function getContextForSubtree(parentComponent) {\n if (!parentComponent) return emptyContextObject;\n parentComponent = emptyContextObject;\n return parentComponent;\n }\n function updateContainerImpl(\n rootFiber,\n lane,\n element,\n container,\n parentComponent,\n callback\n ) {\n if (\n injectedHook &&\n \"function\" === typeof injectedHook.onScheduleFiberRoot\n )\n try {\n injectedHook.onScheduleFiberRoot(rendererID, container, element);\n } catch (err) {\n hasLoggedError ||\n ((hasLoggedError = !0),\n console.error(\n \"React instrumentation encountered an error: %s\",\n err\n ));\n }\n null !== injectedProfilingHooks &&\n \"function\" === typeof injectedProfilingHooks.markRenderScheduled &&\n injectedProfilingHooks.markRenderScheduled(lane);\n parentComponent = getContextForSubtree(parentComponent);\n null === container.context\n ? (container.context = parentComponent)\n : (container.pendingContext = parentComponent);\n isRendering &&\n null !== current &&\n !didWarnAboutNestedUpdates &&\n ((didWarnAboutNestedUpdates = !0),\n console.error(\n \"Render methods should be a pure function of props and state; triggering nested component updates from render is not allowed. If necessary, trigger nested updates in componentDidUpdate.\\n\\nCheck the render method of %s.\",\n getComponentNameFromFiber(current) || \"Unknown\"\n ));\n container = createUpdate(lane);\n container.payload = { element: element };\n callback = void 0 === callback ? null : callback;\n null !== callback &&\n (\"function\" !== typeof callback &&\n console.error(\n \"Expected the last optional `callback` argument to be a function. Instead received: %s.\",\n callback\n ),\n (container.callback = callback));\n element = enqueueUpdate(rootFiber, container, lane);\n null !== element &&\n (scheduleUpdateOnFiber(element, rootFiber, lane),\n entangleTransitions(element, rootFiber, lane));\n }\n function markRetryLaneImpl(fiber, retryLane) {\n fiber = fiber.memoizedState;\n if (null !== fiber && null !== fiber.dehydrated) {\n var a = fiber.retryLane;\n fiber.retryLane = 0 !== a && a < retryLane ? a : retryLane;\n }\n }\n function markRetryLaneIfNotHydrated(fiber, retryLane) {\n markRetryLaneImpl(fiber, retryLane);\n (fiber = fiber.alternate) && markRetryLaneImpl(fiber, retryLane);\n }\n function attemptContinuousHydration(fiber) {\n if (13 === fiber.tag || 31 === fiber.tag) {\n var root = enqueueConcurrentRenderForLane(fiber, 67108864);\n null !== root && scheduleUpdateOnFiber(root, fiber, 67108864);\n markRetryLaneIfNotHydrated(fiber, 67108864);\n }\n }\n function attemptHydrationAtCurrentPriority(fiber) {\n if (13 === fiber.tag || 31 === fiber.tag) {\n var lane = requestUpdateLane(fiber);\n lane = getBumpedLaneForHydrationByLane(lane);\n var root = enqueueConcurrentRenderForLane(fiber, lane);\n null !== root && scheduleUpdateOnFiber(root, fiber, lane);\n markRetryLaneIfNotHydrated(fiber, lane);\n }\n }\n function getCurrentFiberForDevTools() {\n return current;\n }\n function getLaneLabelMap() {\n for (var map = new Map(), lane = 1, index = 0; 31 > index; index++) {\n var label = getLabelForLane(lane);\n map.set(lane, label);\n lane *= 2;\n }\n return map;\n }\n function dispatchDiscreteEvent(\n domEventName,\n eventSystemFlags,\n container,\n nativeEvent\n ) {\n var prevTransition = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n var previousPriority = ReactDOMSharedInternals.p;\n try {\n (ReactDOMSharedInternals.p = DiscreteEventPriority),\n dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = prevTransition);\n }\n }\n function dispatchContinuousEvent(\n domEventName,\n eventSystemFlags,\n container,\n nativeEvent\n ) {\n var prevTransition = ReactSharedInternals.T;\n ReactSharedInternals.T = null;\n var previousPriority = ReactDOMSharedInternals.p;\n try {\n (ReactDOMSharedInternals.p = ContinuousEventPriority),\n dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n } finally {\n (ReactDOMSharedInternals.p = previousPriority),\n (ReactSharedInternals.T = prevTransition);\n }\n }\n function dispatchEvent(\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n ) {\n if (_enabled) {\n var blockedOn = findInstanceBlockingEvent(nativeEvent);\n if (null === blockedOn)\n dispatchEventForPluginEventSystem(\n domEventName,\n eventSystemFlags,\n nativeEvent,\n return_targetInst,\n targetContainer\n ),\n clearIfContinuousEvent(domEventName, nativeEvent);\n else if (\n queueIfContinuousEvent(\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )\n )\n nativeEvent.stopPropagation();\n else if (\n (clearIfContinuousEvent(domEventName, nativeEvent),\n eventSystemFlags & 4 &&\n -1 < discreteReplayableEvents.indexOf(domEventName))\n ) {\n for (; null !== blockedOn; ) {\n var fiber = getInstanceFromNode(blockedOn);\n if (null !== fiber)\n switch (fiber.tag) {\n case 3:\n fiber = fiber.stateNode;\n if (fiber.current.memoizedState.isDehydrated) {\n var lanes = getHighestPriorityLanes(fiber.pendingLanes);\n if (0 !== lanes) {\n var root = fiber;\n root.pendingLanes |= 2;\n for (root.entangledLanes |= 2; lanes; ) {\n var lane = 1 << (31 - clz32(lanes));\n root.entanglements[1] |= lane;\n lanes &= ~lane;\n }\n ensureRootIsScheduled(fiber);\n (executionContext & (RenderContext | CommitContext)) ===\n NoContext &&\n ((workInProgressRootRenderTargetTime =\n now$1() + RENDER_TIMEOUT_MS),\n flushSyncWorkAcrossRoots_impl(0, !1));\n }\n }\n break;\n case 31:\n case 13:\n (root = enqueueConcurrentRenderForLane(fiber, 2)),\n null !== root && scheduleUpdateOnFiber(root, fiber, 2),\n flushSyncWork$1(),\n markRetryLaneIfNotHydrated(fiber, 2);\n }\n fiber = findInstanceBlockingEvent(nativeEvent);\n null === fiber &&\n dispatchEventForPluginEventSystem(\n domEventName,\n eventSystemFlags,\n nativeEvent,\n return_targetInst,\n targetContainer\n );\n if (fiber === blockedOn) break;\n blockedOn = fiber;\n }\n null !== blockedOn && nativeEvent.stopPropagation();\n } else\n dispatchEventForPluginEventSystem(\n domEventName,\n eventSystemFlags,\n nativeEvent,\n null,\n targetContainer\n );\n }\n }\n function findInstanceBlockingEvent(nativeEvent) {\n nativeEvent = getEventTarget(nativeEvent);\n return findInstanceBlockingTarget(nativeEvent);\n }\n function findInstanceBlockingTarget(targetNode) {\n return_targetInst = null;\n targetNode = getClosestInstanceFromNode(targetNode);\n if (null !== targetNode) {\n var nearestMounted = getNearestMountedFiber(targetNode);\n if (null === nearestMounted) targetNode = null;\n else {\n var tag = nearestMounted.tag;\n if (13 === tag) {\n targetNode = getSuspenseInstanceFromFiber(nearestMounted);\n if (null !== targetNode) return targetNode;\n targetNode = null;\n } else if (31 === tag) {\n targetNode = getActivityInstanceFromFiber(nearestMounted);\n if (null !== targetNode) return targetNode;\n targetNode = null;\n } else if (3 === tag) {\n if (nearestMounted.stateNode.current.memoizedState.isDehydrated)\n return 3 === nearestMounted.tag\n ? nearestMounted.stateNode.containerInfo\n : null;\n targetNode = null;\n } else nearestMounted !== targetNode && (targetNode = null);\n }\n }\n return_targetInst = targetNode;\n return null;\n }\n function getEventPriority(domEventName) {\n switch (domEventName) {\n case \"beforetoggle\":\n case \"cancel\":\n case \"click\":\n case \"close\":\n case \"contextmenu\":\n case \"copy\":\n case \"cut\":\n case \"auxclick\":\n case \"dblclick\":\n case \"dragend\":\n case \"dragstart\":\n case \"drop\":\n case \"focusin\":\n case \"focusout\":\n case \"input\":\n case \"invalid\":\n case \"keydown\":\n case \"keypress\":\n case \"keyup\":\n case \"mousedown\":\n case \"mouseup\":\n case \"paste\":\n case \"pause\":\n case \"play\":\n case \"pointercancel\":\n case \"pointerdown\":\n case \"pointerup\":\n case \"ratechange\":\n case \"reset\":\n case \"resize\":\n case \"seeked\":\n case \"submit\":\n case \"toggle\":\n case \"touchcancel\":\n case \"touchend\":\n case \"touchstart\":\n case \"volumechange\":\n case \"change\":\n case \"selectionchange\":\n case \"textInput\":\n case \"compositionstart\":\n case \"compositionend\":\n case \"compositionupdate\":\n case \"beforeblur\":\n case \"afterblur\":\n case \"beforeinput\":\n case \"blur\":\n case \"fullscreenchange\":\n case \"focus\":\n case \"hashchange\":\n case \"popstate\":\n case \"select\":\n case \"selectstart\":\n return DiscreteEventPriority;\n case \"drag\":\n case \"dragenter\":\n case \"dragexit\":\n case \"dragleave\":\n case \"dragover\":\n case \"mousemove\":\n case \"mouseout\":\n case \"mouseover\":\n case \"pointermove\":\n case \"pointerout\":\n case \"pointerover\":\n case \"scroll\":\n case \"touchmove\":\n case \"wheel\":\n case \"mouseenter\":\n case \"mouseleave\":\n case \"pointerenter\":\n case \"pointerleave\":\n return ContinuousEventPriority;\n case \"message\":\n switch (getCurrentPriorityLevel()) {\n case ImmediatePriority:\n return DiscreteEventPriority;\n case UserBlockingPriority:\n return ContinuousEventPriority;\n case NormalPriority$1:\n case LowPriority:\n return DefaultEventPriority;\n case IdlePriority:\n return IdleEventPriority;\n default:\n return DefaultEventPriority;\n }\n default:\n return DefaultEventPriority;\n }\n }\n function clearIfContinuousEvent(domEventName, nativeEvent) {\n switch (domEventName) {\n case \"focusin\":\n case \"focusout\":\n queuedFocus = null;\n break;\n case \"dragenter\":\n case \"dragleave\":\n queuedDrag = null;\n break;\n case \"mouseover\":\n case \"mouseout\":\n queuedMouse = null;\n break;\n case \"pointerover\":\n case \"pointerout\":\n queuedPointers.delete(nativeEvent.pointerId);\n break;\n case \"gotpointercapture\":\n case \"lostpointercapture\":\n queuedPointerCaptures.delete(nativeEvent.pointerId);\n }\n }\n function accumulateOrCreateContinuousQueuedReplayableEvent(\n existingQueuedEvent,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n ) {\n if (\n null === existingQueuedEvent ||\n existingQueuedEvent.nativeEvent !== nativeEvent\n )\n return (\n (existingQueuedEvent = {\n blockedOn: blockedOn,\n domEventName: domEventName,\n eventSystemFlags: eventSystemFlags,\n nativeEvent: nativeEvent,\n targetContainers: [targetContainer]\n }),\n null !== blockedOn &&\n ((blockedOn = getInstanceFromNode(blockedOn)),\n null !== blockedOn && attemptContinuousHydration(blockedOn)),\n existingQueuedEvent\n );\n existingQueuedEvent.eventSystemFlags |= eventSystemFlags;\n blockedOn = existingQueuedEvent.targetContainers;\n null !== targetContainer &&\n -1 === blockedOn.indexOf(targetContainer) &&\n blockedOn.push(targetContainer);\n return existingQueuedEvent;\n }\n function queueIfContinuousEvent(\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n ) {\n switch (domEventName) {\n case \"focusin\":\n return (\n (queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedFocus,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )),\n !0\n );\n case \"dragenter\":\n return (\n (queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedDrag,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )),\n !0\n );\n case \"mouseover\":\n return (\n (queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedMouse,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )),\n !0\n );\n case \"pointerover\":\n var pointerId = nativeEvent.pointerId;\n queuedPointers.set(\n pointerId,\n accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedPointers.get(pointerId) || null,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )\n );\n return !0;\n case \"gotpointercapture\":\n return (\n (pointerId = nativeEvent.pointerId),\n queuedPointerCaptures.set(\n pointerId,\n accumulateOrCreateContinuousQueuedReplayableEvent(\n queuedPointerCaptures.get(pointerId) || null,\n blockedOn,\n domEventName,\n eventSystemFlags,\n targetContainer,\n nativeEvent\n )\n ),\n !0\n );\n }\n return !1;\n }\n function attemptExplicitHydrationTarget(queuedTarget) {\n var targetInst = getClosestInstanceFromNode(queuedTarget.target);\n if (null !== targetInst) {\n var nearestMounted = getNearestMountedFiber(targetInst);\n if (null !== nearestMounted)\n if (((targetInst = nearestMounted.tag), 13 === targetInst)) {\n if (\n ((targetInst = getSuspenseInstanceFromFiber(nearestMounted)),\n null !== targetInst)\n ) {\n queuedTarget.blockedOn = targetInst;\n runWithPriority(queuedTarget.priority, function () {\n attemptHydrationAtCurrentPriority(nearestMounted);\n });\n return;\n }\n } else if (31 === targetInst) {\n if (\n ((targetInst = getActivityInstanceFromFiber(nearestMounted)),\n null !== targetInst)\n ) {\n queuedTarget.blockedOn = targetInst;\n runWithPriority(queuedTarget.priority, function () {\n attemptHydrationAtCurrentPriority(nearestMounted);\n });\n return;\n }\n } else if (\n 3 === targetInst &&\n nearestMounted.stateNode.current.memoizedState.isDehydrated\n ) {\n queuedTarget.blockedOn =\n 3 === nearestMounted.tag\n ? nearestMounted.stateNode.containerInfo\n : null;\n return;\n }\n }\n queuedTarget.blockedOn = null;\n }\n function attemptReplayContinuousQueuedEvent(queuedEvent) {\n if (null !== queuedEvent.blockedOn) return !1;\n for (\n var targetContainers = queuedEvent.targetContainers;\n 0 < targetContainers.length;\n\n ) {\n var nextBlockedOn = findInstanceBlockingEvent(queuedEvent.nativeEvent);\n if (null === nextBlockedOn) {\n nextBlockedOn = queuedEvent.nativeEvent;\n var nativeEventClone = new nextBlockedOn.constructor(\n nextBlockedOn.type,\n nextBlockedOn\n ),\n event = nativeEventClone;\n null !== currentReplayingEvent &&\n console.error(\n \"Expected currently replaying event to be null. This error is likely caused by a bug in React. Please file an issue.\"\n );\n currentReplayingEvent = event;\n nextBlockedOn.target.dispatchEvent(nativeEventClone);\n null === currentReplayingEvent &&\n console.error(\n \"Expected currently replaying event to not be null. This error is likely caused by a bug in React. Please file an issue.\"\n );\n currentReplayingEvent = null;\n } else\n return (\n (targetContainers = getInstanceFromNode(nextBlockedOn)),\n null !== targetContainers &&\n attemptContinuousHydration(targetContainers),\n (queuedEvent.blockedOn = nextBlockedOn),\n !1\n );\n targetContainers.shift();\n }\n return !0;\n }\n function attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) {\n attemptReplayContinuousQueuedEvent(queuedEvent) && map.delete(key);\n }\n function replayUnblockedEvents() {\n hasScheduledReplayAttempt = !1;\n null !== queuedFocus &&\n attemptReplayContinuousQueuedEvent(queuedFocus) &&\n (queuedFocus = null);\n null !== queuedDrag &&\n attemptReplayContinuousQueuedEvent(queuedDrag) &&\n (queuedDrag = null);\n null !== queuedMouse &&\n attemptReplayContinuousQueuedEvent(queuedMouse) &&\n (queuedMouse = null);\n queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap);\n queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap);\n }\n function scheduleCallbackIfUnblocked(queuedEvent, unblocked) {\n queuedEvent.blockedOn === unblocked &&\n ((queuedEvent.blockedOn = null),\n hasScheduledReplayAttempt ||\n ((hasScheduledReplayAttempt = !0),\n Scheduler.unstable_scheduleCallback(\n Scheduler.unstable_NormalPriority,\n replayUnblockedEvents\n )));\n }\n function scheduleReplayQueueIfNeeded(formReplayingQueue) {\n lastScheduledReplayQueue !== formReplayingQueue &&\n ((lastScheduledReplayQueue = formReplayingQueue),\n Scheduler.unstable_scheduleCallback(\n Scheduler.unstable_NormalPriority,\n function () {\n lastScheduledReplayQueue === formReplayingQueue &&\n (lastScheduledReplayQueue = null);\n for (var i = 0; i < formReplayingQueue.length; i += 3) {\n var form = formReplayingQueue[i],\n submitterOrAction = formReplayingQueue[i + 1],\n formData = formReplayingQueue[i + 2];\n if (\"function\" !== typeof submitterOrAction)\n if (\n null === findInstanceBlockingTarget(submitterOrAction || form)\n )\n continue;\n else break;\n var formInst = getInstanceFromNode(form);\n null !== formInst &&\n (formReplayingQueue.splice(i, 3),\n (i -= 3),\n (form = {\n pending: !0,\n data: formData,\n method: form.method,\n action: submitterOrAction\n }),\n Object.freeze(form),\n startHostTransition(\n formInst,\n form,\n submitterOrAction,\n formData\n ));\n }\n }\n ));\n }\n function retryIfBlockedOn(unblocked) {\n function unblock(queuedEvent) {\n return scheduleCallbackIfUnblocked(queuedEvent, unblocked);\n }\n null !== queuedFocus &&\n scheduleCallbackIfUnblocked(queuedFocus, unblocked);\n null !== queuedDrag && scheduleCallbackIfUnblocked(queuedDrag, unblocked);\n null !== queuedMouse &&\n scheduleCallbackIfUnblocked(queuedMouse, unblocked);\n queuedPointers.forEach(unblock);\n queuedPointerCaptures.forEach(unblock);\n for (var i = 0; i < queuedExplicitHydrationTargets.length; i++) {\n var queuedTarget = queuedExplicitHydrationTargets[i];\n queuedTarget.blockedOn === unblocked && (queuedTarget.blockedOn = null);\n }\n for (\n ;\n 0 < queuedExplicitHydrationTargets.length &&\n ((i = queuedExplicitHydrationTargets[0]), null === i.blockedOn);\n\n )\n attemptExplicitHydrationTarget(i),\n null === i.blockedOn && queuedExplicitHydrationTargets.shift();\n i = (unblocked.ownerDocument || unblocked).$$reactFormReplay;\n if (null != i)\n for (queuedTarget = 0; queuedTarget < i.length; queuedTarget += 3) {\n var form = i[queuedTarget],\n submitterOrAction = i[queuedTarget + 1],\n formProps = form[internalPropsKey] || null;\n if (\"function\" === typeof submitterOrAction)\n formProps || scheduleReplayQueueIfNeeded(i);\n else if (formProps) {\n var action = null;\n if (\n submitterOrAction &&\n submitterOrAction.hasAttribute(\"formAction\")\n )\n if (\n ((form = submitterOrAction),\n (formProps = submitterOrAction[internalPropsKey] || null))\n )\n action = formProps.formAction;\n else {\n if (null !== findInstanceBlockingTarget(form)) continue;\n }\n else action = formProps.action;\n \"function\" === typeof action\n ? (i[queuedTarget + 1] = action)\n : (i.splice(queuedTarget, 3), (queuedTarget -= 3));\n scheduleReplayQueueIfNeeded(i);\n }\n }\n }\n function defaultOnDefaultTransitionIndicator() {\n function handleNavigate(event) {\n event.canIntercept &&\n \"react-transition\" === event.info &&\n event.intercept({\n handler: function () {\n return new Promise(function (resolve) {\n return (pendingResolve = resolve);\n });\n },\n focusReset: \"manual\",\n scroll: \"manual\"\n });\n }\n function handleNavigateComplete() {\n null !== pendingResolve && (pendingResolve(), (pendingResolve = null));\n isCancelled || setTimeout(startFakeNavigation, 20);\n }\n function startFakeNavigation() {\n if (!isCancelled && !navigation.transition) {\n var currentEntry = navigation.currentEntry;\n currentEntry &&\n null != currentEntry.url &&\n navigation.navigate(currentEntry.url, {\n state: currentEntry.getState(),\n info: \"react-transition\",\n history: \"replace\"\n });\n }\n }\n if (\"object\" === typeof navigation) {\n var isCancelled = !1,\n pendingResolve = null;\n navigation.addEventListener(\"navigate\", handleNavigate);\n navigation.addEventListener(\"navigatesuccess\", handleNavigateComplete);\n navigation.addEventListener(\"navigateerror\", handleNavigateComplete);\n setTimeout(startFakeNavigation, 100);\n return function () {\n isCancelled = !0;\n navigation.removeEventListener(\"navigate\", handleNavigate);\n navigation.removeEventListener(\n \"navigatesuccess\",\n handleNavigateComplete\n );\n navigation.removeEventListener(\n \"navigateerror\",\n handleNavigateComplete\n );\n null !== pendingResolve &&\n (pendingResolve(), (pendingResolve = null));\n };\n }\n }\n function ReactDOMRoot(internalRoot) {\n this._internalRoot = internalRoot;\n }\n function ReactDOMHydrationRoot(internalRoot) {\n this._internalRoot = internalRoot;\n }\n function warnIfReactDOMContainerInDEV(container) {\n container[internalContainerInstanceKey] &&\n (container._reactRootContainer\n ? console.error(\n \"You are calling ReactDOMClient.createRoot() on a container that was previously passed to ReactDOM.render(). This is not supported.\"\n )\n : console.error(\n \"You are calling ReactDOMClient.createRoot() on a container that has already been passed to createRoot() before. Instead, call root.render() on the existing root instead if you want to update it.\"\n ));\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var Scheduler = __webpack_require__(/*! next/dist/compiled/scheduler */ \"(app-pages-browser)/./node_modules/next/dist/compiled/scheduler/index.js\"),\n React = __webpack_require__(/*! next/dist/compiled/react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"),\n ReactDOM = __webpack_require__(/*! next/dist/compiled/react-dom */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react-dom/index.js\"),\n assign = Object.assign,\n REACT_LEGACY_ELEMENT_TYPE = Symbol.for(\"react.element\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\n Symbol.for(\"react.scope\");\n var REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\");\n Symbol.for(\"react.legacy_hidden\");\n Symbol.for(\"react.tracing_marker\");\n var REACT_MEMO_CACHE_SENTINEL = Symbol.for(\"react.memo_cache_sentinel\");\n Symbol.for(\"react.view_transition\");\n var MAYBE_ITERATOR_SYMBOL = Symbol.iterator,\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n isArrayImpl = Array.isArray,\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n ReactDOMSharedInternals =\n ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n NotPending = Object.freeze({\n pending: !1,\n data: null,\n method: null,\n action: null\n }),\n valueStack = [];\n var fiberStack = [];\n var index$jscomp$0 = -1,\n contextStackCursor = createCursor(null),\n contextFiberStackCursor = createCursor(null),\n rootInstanceStackCursor = createCursor(null),\n hostTransitionProviderCursor = createCursor(null),\n disabledDepth = 0,\n prevLog,\n prevInfo,\n prevWarn,\n prevError,\n prevGroup,\n prevGroupCollapsed,\n prevGroupEnd;\n disabledLog.__reactDisabledLog = !0;\n var prefix,\n suffix,\n reentry = !1;\n var componentFrameCache = new (\n \"function\" === typeof WeakMap ? WeakMap : Map\n )();\n var current = null,\n isRendering = !1,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n scheduleCallback$3 = Scheduler.unstable_scheduleCallback,\n cancelCallback$1 = Scheduler.unstable_cancelCallback,\n shouldYield = Scheduler.unstable_shouldYield,\n requestPaint = Scheduler.unstable_requestPaint,\n now$1 = Scheduler.unstable_now,\n getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel,\n ImmediatePriority = Scheduler.unstable_ImmediatePriority,\n UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,\n NormalPriority$1 = Scheduler.unstable_NormalPriority,\n LowPriority = Scheduler.unstable_LowPriority,\n IdlePriority = Scheduler.unstable_IdlePriority,\n log$1 = Scheduler.log,\n unstable_setDisableYieldValue = Scheduler.unstable_setDisableYieldValue,\n rendererID = null,\n injectedHook = null,\n injectedProfilingHooks = null,\n hasLoggedError = !1,\n isDevToolsPresent = \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__,\n clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,\n log = Math.log,\n LN2 = Math.LN2,\n nextTransitionLane = 256,\n nextRetryLane = 4194304,\n DiscreteEventPriority = 2,\n ContinuousEventPriority = 8,\n DefaultEventPriority = 32,\n IdleEventPriority = 268435456,\n randomKey = Math.random().toString(36).slice(2),\n internalInstanceKey = \"__reactFiber$\" + randomKey,\n internalPropsKey = \"__reactProps$\" + randomKey,\n internalContainerInstanceKey = \"__reactContainer$\" + randomKey,\n internalEventHandlersKey = \"__reactEvents$\" + randomKey,\n internalEventHandlerListenersKey = \"__reactListeners$\" + randomKey,\n internalEventHandlesSetKey = \"__reactHandles$\" + randomKey,\n internalRootNodeResourcesKey = \"__reactResources$\" + randomKey,\n internalHoistableMarker = \"__reactMarker$\" + randomKey,\n allNativeEvents = new Set(),\n registrationNameDependencies = {},\n possibleRegistrationNames = {},\n hasReadOnlyValue = {\n button: !0,\n checkbox: !0,\n image: !0,\n hidden: !0,\n radio: !0,\n reset: !0,\n submit: !0\n },\n VALID_ATTRIBUTE_NAME_REGEX = RegExp(\n \"^[:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD][:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n ),\n illegalAttributeNameCache = {},\n validatedAttributeNameCache = {},\n escapeSelectorAttributeValueInsideDoubleQuotesRegex = /[\\n\"\\\\]/g,\n didWarnValueDefaultValue$1 = !1,\n didWarnCheckedDefaultChecked = !1,\n didWarnSelectedSetOnOption = !1,\n didWarnInvalidChild = !1,\n didWarnInvalidInnerHTML = !1;\n var didWarnValueDefaultValue = !1;\n var valuePropNames = [\"value\", \"defaultValue\"],\n didWarnValDefaultVal = !1,\n needsEscaping = /[\"'&<>\\n\\t]|^\\s|\\s$/,\n specialTags =\n \"address applet area article aside base basefont bgsound blockquote body br button caption center col colgroup dd details dir div dl dt embed fieldset figcaption figure footer form frame frameset h1 h2 h3 h4 h5 h6 head header hgroup hr html iframe img input isindex li link listing main marquee menu menuitem meta nav noembed noframes noscript object ol p param plaintext pre script section select source style summary table tbody td template textarea tfoot th thead title tr track ul wbr xmp\".split(\n \" \"\n ),\n inScopeTags =\n \"applet caption html table td th marquee object template foreignObject desc title\".split(\n \" \"\n ),\n buttonScopeTags = inScopeTags.concat([\"button\"]),\n impliedEndTags = \"dd dt li option optgroup p rp rt\".split(\" \"),\n emptyAncestorInfoDev = {\n current: null,\n formTag: null,\n aTagInScope: null,\n buttonTagInScope: null,\n nobrTagInScope: null,\n pTagInButtonScope: null,\n listItemTagAutoclosing: null,\n dlItemTagAutoclosing: null,\n containerTagInScope: null,\n implicitRootScope: !1\n },\n didWarn = {},\n shorthandToLonghand = {\n animation:\n \"animationDelay animationDirection animationDuration animationFillMode animationIterationCount animationName animationPlayState animationTimingFunction\".split(\n \" \"\n ),\n background:\n \"backgroundAttachment backgroundClip backgroundColor backgroundImage backgroundOrigin backgroundPositionX backgroundPositionY backgroundRepeat backgroundSize\".split(\n \" \"\n ),\n backgroundPosition: [\"backgroundPositionX\", \"backgroundPositionY\"],\n border:\n \"borderBottomColor borderBottomStyle borderBottomWidth borderImageOutset borderImageRepeat borderImageSlice borderImageSource borderImageWidth borderLeftColor borderLeftStyle borderLeftWidth borderRightColor borderRightStyle borderRightWidth borderTopColor borderTopStyle borderTopWidth\".split(\n \" \"\n ),\n borderBlockEnd: [\n \"borderBlockEndColor\",\n \"borderBlockEndStyle\",\n \"borderBlockEndWidth\"\n ],\n borderBlockStart: [\n \"borderBlockStartColor\",\n \"borderBlockStartStyle\",\n \"borderBlockStartWidth\"\n ],\n borderBottom: [\n \"borderBottomColor\",\n \"borderBottomStyle\",\n \"borderBottomWidth\"\n ],\n borderColor: [\n \"borderBottomColor\",\n \"borderLeftColor\",\n \"borderRightColor\",\n \"borderTopColor\"\n ],\n borderImage: [\n \"borderImageOutset\",\n \"borderImageRepeat\",\n \"borderImageSlice\",\n \"borderImageSource\",\n \"borderImageWidth\"\n ],\n borderInlineEnd: [\n \"borderInlineEndColor\",\n \"borderInlineEndStyle\",\n \"borderInlineEndWidth\"\n ],\n borderInlineStart: [\n \"borderInlineStartColor\",\n \"borderInlineStartStyle\",\n \"borderInlineStartWidth\"\n ],\n borderLeft: [\"borderLeftColor\", \"borderLeftStyle\", \"borderLeftWidth\"],\n borderRadius: [\n \"borderBottomLeftRadius\",\n \"borderBottomRightRadius\",\n \"borderTopLeftRadius\",\n \"borderTopRightRadius\"\n ],\n borderRight: [\n \"borderRightColor\",\n \"borderRightStyle\",\n \"borderRightWidth\"\n ],\n borderStyle: [\n \"borderBottomStyle\",\n \"borderLeftStyle\",\n \"borderRightStyle\",\n \"borderTopStyle\"\n ],\n borderTop: [\"borderTopColor\", \"borderTopStyle\", \"borderTopWidth\"],\n borderWidth: [\n \"borderBottomWidth\",\n \"borderLeftWidth\",\n \"borderRightWidth\",\n \"borderTopWidth\"\n ],\n columnRule: [\"columnRuleColor\", \"columnRuleStyle\", \"columnRuleWidth\"],\n columns: [\"columnCount\", \"columnWidth\"],\n flex: [\"flexBasis\", \"flexGrow\", \"flexShrink\"],\n flexFlow: [\"flexDirection\", \"flexWrap\"],\n font: \"fontFamily fontFeatureSettings fontKerning fontLanguageOverride fontSize fontSizeAdjust fontStretch fontStyle fontVariant fontVariantAlternates fontVariantCaps fontVariantEastAsian fontVariantLigatures fontVariantNumeric fontVariantPosition fontWeight lineHeight\".split(\n \" \"\n ),\n fontVariant:\n \"fontVariantAlternates fontVariantCaps fontVariantEastAsian fontVariantLigatures fontVariantNumeric fontVariantPosition\".split(\n \" \"\n ),\n gap: [\"columnGap\", \"rowGap\"],\n grid: \"gridAutoColumns gridAutoFlow gridAutoRows gridTemplateAreas gridTemplateColumns gridTemplateRows\".split(\n \" \"\n ),\n gridArea: [\n \"gridColumnEnd\",\n \"gridColumnStart\",\n \"gridRowEnd\",\n \"gridRowStart\"\n ],\n gridColumn: [\"gridColumnEnd\", \"gridColumnStart\"],\n gridColumnGap: [\"columnGap\"],\n gridGap: [\"columnGap\", \"rowGap\"],\n gridRow: [\"gridRowEnd\", \"gridRowStart\"],\n gridRowGap: [\"rowGap\"],\n gridTemplate: [\n \"gridTemplateAreas\",\n \"gridTemplateColumns\",\n \"gridTemplateRows\"\n ],\n listStyle: [\"listStyleImage\", \"listStylePosition\", \"listStyleType\"],\n margin: [\"marginBottom\", \"marginLeft\", \"marginRight\", \"marginTop\"],\n marker: [\"markerEnd\", \"markerMid\", \"markerStart\"],\n mask: \"maskClip maskComposite maskImage maskMode maskOrigin maskPositionX maskPositionY maskRepeat maskSize\".split(\n \" \"\n ),\n maskPosition: [\"maskPositionX\", \"maskPositionY\"],\n outline: [\"outlineColor\", \"outlineStyle\", \"outlineWidth\"],\n overflow: [\"overflowX\", \"overflowY\"],\n padding: [\"paddingBottom\", \"paddingLeft\", \"paddingRight\", \"paddingTop\"],\n placeContent: [\"alignContent\", \"justifyContent\"],\n placeItems: [\"alignItems\", \"justifyItems\"],\n placeSelf: [\"alignSelf\", \"justifySelf\"],\n textDecoration: [\n \"textDecorationColor\",\n \"textDecorationLine\",\n \"textDecorationStyle\"\n ],\n textEmphasis: [\"textEmphasisColor\", \"textEmphasisStyle\"],\n transition: [\n \"transitionDelay\",\n \"transitionDuration\",\n \"transitionProperty\",\n \"transitionTimingFunction\"\n ],\n wordWrap: [\"overflowWrap\"]\n },\n uppercasePattern = /([A-Z])/g,\n msPattern$1 = /^ms-/,\n badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/,\n msPattern = /^-ms-/,\n hyphenPattern = /-(.)/g,\n badStyleValueWithSemicolonPattern = /;\\s*$/,\n warnedStyleNames = {},\n warnedStyleValues = {},\n warnedForNaNValue = !1,\n warnedForInfinityValue = !1,\n unitlessNumbers = new Set(\n \"animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp\".split(\n \" \"\n )\n ),\n MATH_NAMESPACE = \"http://www.w3.org/1998/Math/MathML\",\n SVG_NAMESPACE = \"http://www.w3.org/2000/svg\",\n aliases = new Map([\n [\"acceptCharset\", \"accept-charset\"],\n [\"htmlFor\", \"for\"],\n [\"httpEquiv\", \"http-equiv\"],\n [\"crossOrigin\", \"crossorigin\"],\n [\"accentHeight\", \"accent-height\"],\n [\"alignmentBaseline\", \"alignment-baseline\"],\n [\"arabicForm\", \"arabic-form\"],\n [\"baselineShift\", \"baseline-shift\"],\n [\"capHeight\", \"cap-height\"],\n [\"clipPath\", \"clip-path\"],\n [\"clipRule\", \"clip-rule\"],\n [\"colorInterpolation\", \"color-interpolation\"],\n [\"colorInterpolationFilters\", \"color-interpolation-filters\"],\n [\"colorProfile\", \"color-profile\"],\n [\"colorRendering\", \"color-rendering\"],\n [\"dominantBaseline\", \"dominant-baseline\"],\n [\"enableBackground\", \"enable-background\"],\n [\"fillOpacity\", \"fill-opacity\"],\n [\"fillRule\", \"fill-rule\"],\n [\"floodColor\", \"flood-color\"],\n [\"floodOpacity\", \"flood-opacity\"],\n [\"fontFamily\", \"font-family\"],\n [\"fontSize\", \"font-size\"],\n [\"fontSizeAdjust\", \"font-size-adjust\"],\n [\"fontStretch\", \"font-stretch\"],\n [\"fontStyle\", \"font-style\"],\n [\"fontVariant\", \"font-variant\"],\n [\"fontWeight\", \"font-weight\"],\n [\"glyphName\", \"glyph-name\"],\n [\"glyphOrientationHorizontal\", \"glyph-orientation-horizontal\"],\n [\"glyphOrientationVertical\", \"glyph-orientation-vertical\"],\n [\"horizAdvX\", \"horiz-adv-x\"],\n [\"horizOriginX\", \"horiz-origin-x\"],\n [\"imageRendering\", \"image-rendering\"],\n [\"letterSpacing\", \"letter-spacing\"],\n [\"lightingColor\", \"lighting-color\"],\n [\"markerEnd\", \"marker-end\"],\n [\"markerMid\", \"marker-mid\"],\n [\"markerStart\", \"marker-start\"],\n [\"overlinePosition\", \"overline-position\"],\n [\"overlineThickness\", \"overline-thickness\"],\n [\"paintOrder\", \"paint-order\"],\n [\"panose-1\", \"panose-1\"],\n [\"pointerEvents\", \"pointer-events\"],\n [\"renderingIntent\", \"rendering-intent\"],\n [\"shapeRendering\", \"shape-rendering\"],\n [\"stopColor\", \"stop-color\"],\n [\"stopOpacity\", \"stop-opacity\"],\n [\"strikethroughPosition\", \"strikethrough-position\"],\n [\"strikethroughThickness\", \"strikethrough-thickness\"],\n [\"strokeDasharray\", \"stroke-dasharray\"],\n [\"strokeDashoffset\", \"stroke-dashoffset\"],\n [\"strokeLinecap\", \"stroke-linecap\"],\n [\"strokeLinejoin\", \"stroke-linejoin\"],\n [\"strokeMiterlimit\", \"stroke-miterlimit\"],\n [\"strokeOpacity\", \"stroke-opacity\"],\n [\"strokeWidth\", \"stroke-width\"],\n [\"textAnchor\", \"text-anchor\"],\n [\"textDecoration\", \"text-decoration\"],\n [\"textRendering\", \"text-rendering\"],\n [\"transformOrigin\", \"transform-origin\"],\n [\"underlinePosition\", \"underline-position\"],\n [\"underlineThickness\", \"underline-thickness\"],\n [\"unicodeBidi\", \"unicode-bidi\"],\n [\"unicodeRange\", \"unicode-range\"],\n [\"unitsPerEm\", \"units-per-em\"],\n [\"vAlphabetic\", \"v-alphabetic\"],\n [\"vHanging\", \"v-hanging\"],\n [\"vIdeographic\", \"v-ideographic\"],\n [\"vMathematical\", \"v-mathematical\"],\n [\"vectorEffect\", \"vector-effect\"],\n [\"vertAdvY\", \"vert-adv-y\"],\n [\"vertOriginX\", \"vert-origin-x\"],\n [\"vertOriginY\", \"vert-origin-y\"],\n [\"wordSpacing\", \"word-spacing\"],\n [\"writingMode\", \"writing-mode\"],\n [\"xmlnsXlink\", \"xmlns:xlink\"],\n [\"xHeight\", \"x-height\"]\n ]),\n possibleStandardNames = {\n accept: \"accept\",\n acceptcharset: \"acceptCharset\",\n \"accept-charset\": \"acceptCharset\",\n accesskey: \"accessKey\",\n action: \"action\",\n allowfullscreen: \"allowFullScreen\",\n alt: \"alt\",\n as: \"as\",\n async: \"async\",\n autocapitalize: \"autoCapitalize\",\n autocomplete: \"autoComplete\",\n autocorrect: \"autoCorrect\",\n autofocus: \"autoFocus\",\n autoplay: \"autoPlay\",\n autosave: \"autoSave\",\n capture: \"capture\",\n cellpadding: \"cellPadding\",\n cellspacing: \"cellSpacing\",\n challenge: \"challenge\",\n charset: \"charSet\",\n checked: \"checked\",\n children: \"children\",\n cite: \"cite\",\n class: \"className\",\n classid: \"classID\",\n classname: \"className\",\n cols: \"cols\",\n colspan: \"colSpan\",\n content: \"content\",\n contenteditable: \"contentEditable\",\n contextmenu: \"contextMenu\",\n controls: \"controls\",\n controlslist: \"controlsList\",\n coords: \"coords\",\n crossorigin: \"crossOrigin\",\n dangerouslysetinnerhtml: \"dangerouslySetInnerHTML\",\n data: \"data\",\n datetime: \"dateTime\",\n default: \"default\",\n defaultchecked: \"defaultChecked\",\n defaultvalue: \"defaultValue\",\n defer: \"defer\",\n dir: \"dir\",\n disabled: \"disabled\",\n disablepictureinpicture: \"disablePictureInPicture\",\n disableremoteplayback: \"disableRemotePlayback\",\n download: \"download\",\n draggable: \"draggable\",\n enctype: \"encType\",\n enterkeyhint: \"enterKeyHint\",\n fetchpriority: \"fetchPriority\",\n for: \"htmlFor\",\n form: \"form\",\n formmethod: \"formMethod\",\n formaction: \"formAction\",\n formenctype: \"formEncType\",\n formnovalidate: \"formNoValidate\",\n formtarget: \"formTarget\",\n frameborder: \"frameBorder\",\n headers: \"headers\",\n height: \"height\",\n hidden: \"hidden\",\n high: \"high\",\n href: \"href\",\n hreflang: \"hrefLang\",\n htmlfor: \"htmlFor\",\n httpequiv: \"httpEquiv\",\n \"http-equiv\": \"httpEquiv\",\n icon: \"icon\",\n id: \"id\",\n imagesizes: \"imageSizes\",\n imagesrcset: \"imageSrcSet\",\n inert: \"inert\",\n innerhtml: \"innerHTML\",\n inputmode: \"inputMode\",\n integrity: \"integrity\",\n is: \"is\",\n itemid: \"itemID\",\n itemprop: \"itemProp\",\n itemref: \"itemRef\",\n itemscope: \"itemScope\",\n itemtype: \"itemType\",\n keyparams: \"keyParams\",\n keytype: \"keyType\",\n kind: \"kind\",\n label: \"label\",\n lang: \"lang\",\n list: \"list\",\n loop: \"loop\",\n low: \"low\",\n manifest: \"manifest\",\n marginwidth: \"marginWidth\",\n marginheight: \"marginHeight\",\n max: \"max\",\n maxlength: \"maxLength\",\n media: \"media\",\n mediagroup: \"mediaGroup\",\n method: \"method\",\n min: \"min\",\n minlength: \"minLength\",\n multiple: \"multiple\",\n muted: \"muted\",\n name: \"name\",\n nomodule: \"noModule\",\n nonce: \"nonce\",\n novalidate: \"noValidate\",\n open: \"open\",\n optimum: \"optimum\",\n pattern: \"pattern\",\n placeholder: \"placeholder\",\n playsinline: \"playsInline\",\n poster: \"poster\",\n preload: \"preload\",\n profile: \"profile\",\n radiogroup: \"radioGroup\",\n readonly: \"readOnly\",\n referrerpolicy: \"referrerPolicy\",\n rel: \"rel\",\n required: \"required\",\n reversed: \"reversed\",\n role: \"role\",\n rows: \"rows\",\n rowspan: \"rowSpan\",\n sandbox: \"sandbox\",\n scope: \"scope\",\n scoped: \"scoped\",\n scrolling: \"scrolling\",\n seamless: \"seamless\",\n selected: \"selected\",\n shape: \"shape\",\n size: \"size\",\n sizes: \"sizes\",\n span: \"span\",\n spellcheck: \"spellCheck\",\n src: \"src\",\n srcdoc: \"srcDoc\",\n srclang: \"srcLang\",\n srcset: \"srcSet\",\n start: \"start\",\n step: \"step\",\n style: \"style\",\n summary: \"summary\",\n tabindex: \"tabIndex\",\n target: \"target\",\n title: \"title\",\n type: \"type\",\n usemap: \"useMap\",\n value: \"value\",\n width: \"width\",\n wmode: \"wmode\",\n wrap: \"wrap\",\n about: \"about\",\n accentheight: \"accentHeight\",\n \"accent-height\": \"accentHeight\",\n accumulate: \"accumulate\",\n additive: \"additive\",\n alignmentbaseline: \"alignmentBaseline\",\n \"alignment-baseline\": \"alignmentBaseline\",\n allowreorder: \"allowReorder\",\n alphabetic: \"alphabetic\",\n amplitude: \"amplitude\",\n arabicform: \"arabicForm\",\n \"arabic-form\": \"arabicForm\",\n ascent: \"ascent\",\n attributename: \"attributeName\",\n attributetype: \"attributeType\",\n autoreverse: \"autoReverse\",\n azimuth: \"azimuth\",\n basefrequency: \"baseFrequency\",\n baselineshift: \"baselineShift\",\n \"baseline-shift\": \"baselineShift\",\n baseprofile: \"baseProfile\",\n bbox: \"bbox\",\n begin: \"begin\",\n bias: \"bias\",\n by: \"by\",\n calcmode: \"calcMode\",\n capheight: \"capHeight\",\n \"cap-height\": \"capHeight\",\n clip: \"clip\",\n clippath: \"clipPath\",\n \"clip-path\": \"clipPath\",\n clippathunits: \"clipPathUnits\",\n cliprule: \"clipRule\",\n \"clip-rule\": \"clipRule\",\n color: \"color\",\n colorinterpolation: \"colorInterpolation\",\n \"color-interpolation\": \"colorInterpolation\",\n colorinterpolationfilters: \"colorInterpolationFilters\",\n \"color-interpolation-filters\": \"colorInterpolationFilters\",\n colorprofile: \"colorProfile\",\n \"color-profile\": \"colorProfile\",\n colorrendering: \"colorRendering\",\n \"color-rendering\": \"colorRendering\",\n contentscripttype: \"contentScriptType\",\n contentstyletype: \"contentStyleType\",\n cursor: \"cursor\",\n cx: \"cx\",\n cy: \"cy\",\n d: \"d\",\n datatype: \"datatype\",\n decelerate: \"decelerate\",\n descent: \"descent\",\n diffuseconstant: \"diffuseConstant\",\n direction: \"direction\",\n display: \"display\",\n divisor: \"divisor\",\n dominantbaseline: \"dominantBaseline\",\n \"dominant-baseline\": \"dominantBaseline\",\n dur: \"dur\",\n dx: \"dx\",\n dy: \"dy\",\n edgemode: \"edgeMode\",\n elevation: \"elevation\",\n enablebackground: \"enableBackground\",\n \"enable-background\": \"enableBackground\",\n end: \"end\",\n exponent: \"exponent\",\n externalresourcesrequired: \"externalResourcesRequired\",\n fill: \"fill\",\n fillopacity: \"fillOpacity\",\n \"fill-opacity\": \"fillOpacity\",\n fillrule: \"fillRule\",\n \"fill-rule\": \"fillRule\",\n filter: \"filter\",\n filterres: \"filterRes\",\n filterunits: \"filterUnits\",\n floodopacity: \"floodOpacity\",\n \"flood-opacity\": \"floodOpacity\",\n floodcolor: \"floodColor\",\n \"flood-color\": \"floodColor\",\n focusable: \"focusable\",\n fontfamily: \"fontFamily\",\n \"font-family\": \"fontFamily\",\n fontsize: \"fontSize\",\n \"font-size\": \"fontSize\",\n fontsizeadjust: \"fontSizeAdjust\",\n \"font-size-adjust\": \"fontSizeAdjust\",\n fontstretch: \"fontStretch\",\n \"font-stretch\": \"fontStretch\",\n fontstyle: \"fontStyle\",\n \"font-style\": \"fontStyle\",\n fontvariant: \"fontVariant\",\n \"font-variant\": \"fontVariant\",\n fontweight: \"fontWeight\",\n \"font-weight\": \"fontWeight\",\n format: \"format\",\n from: \"from\",\n fx: \"fx\",\n fy: \"fy\",\n g1: \"g1\",\n g2: \"g2\",\n glyphname: \"glyphName\",\n \"glyph-name\": \"glyphName\",\n glyphorientationhorizontal: \"glyphOrientationHorizontal\",\n \"glyph-orientation-horizontal\": \"glyphOrientationHorizontal\",\n glyphorientationvertical: \"glyphOrientationVertical\",\n \"glyph-orientation-vertical\": \"glyphOrientationVertical\",\n glyphref: \"glyphRef\",\n gradienttransform: \"gradientTransform\",\n gradientunits: \"gradientUnits\",\n hanging: \"hanging\",\n horizadvx: \"horizAdvX\",\n \"horiz-adv-x\": \"horizAdvX\",\n horizoriginx: \"horizOriginX\",\n \"horiz-origin-x\": \"horizOriginX\",\n ideographic: \"ideographic\",\n imagerendering: \"imageRendering\",\n \"image-rendering\": \"imageRendering\",\n in2: \"in2\",\n in: \"in\",\n inlist: \"inlist\",\n intercept: \"intercept\",\n k1: \"k1\",\n k2: \"k2\",\n k3: \"k3\",\n k4: \"k4\",\n k: \"k\",\n kernelmatrix: \"kernelMatrix\",\n kernelunitlength: \"kernelUnitLength\",\n kerning: \"kerning\",\n keypoints: \"keyPoints\",\n keysplines: \"keySplines\",\n keytimes: \"keyTimes\",\n lengthadjust: \"lengthAdjust\",\n letterspacing: \"letterSpacing\",\n \"letter-spacing\": \"letterSpacing\",\n lightingcolor: \"lightingColor\",\n \"lighting-color\": \"lightingColor\",\n limitingconeangle: \"limitingConeAngle\",\n local: \"local\",\n markerend: \"markerEnd\",\n \"marker-end\": \"markerEnd\",\n markerheight: \"markerHeight\",\n markermid: \"markerMid\",\n \"marker-mid\": \"markerMid\",\n markerstart: \"markerStart\",\n \"marker-start\": \"markerStart\",\n markerunits: \"markerUnits\",\n markerwidth: \"markerWidth\",\n mask: \"mask\",\n maskcontentunits: \"maskContentUnits\",\n maskunits: \"maskUnits\",\n mathematical: \"mathematical\",\n mode: \"mode\",\n numoctaves: \"numOctaves\",\n offset: \"offset\",\n opacity: \"opacity\",\n operator: \"operator\",\n order: \"order\",\n orient: \"orient\",\n orientation: \"orientation\",\n origin: \"origin\",\n overflow: \"overflow\",\n overlineposition: \"overlinePosition\",\n \"overline-position\": \"overlinePosition\",\n overlinethickness: \"overlineThickness\",\n \"overline-thickness\": \"overlineThickness\",\n paintorder: \"paintOrder\",\n \"paint-order\": \"paintOrder\",\n panose1: \"panose1\",\n \"panose-1\": \"panose1\",\n pathlength: \"pathLength\",\n patterncontentunits: \"patternContentUnits\",\n patterntransform: \"patternTransform\",\n patternunits: \"patternUnits\",\n pointerevents: \"pointerEvents\",\n \"pointer-events\": \"pointerEvents\",\n points: \"points\",\n pointsatx: \"pointsAtX\",\n pointsaty: \"pointsAtY\",\n pointsatz: \"pointsAtZ\",\n popover: \"popover\",\n popovertarget: \"popoverTarget\",\n popovertargetaction: \"popoverTargetAction\",\n prefix: \"prefix\",\n preservealpha: \"preserveAlpha\",\n preserveaspectratio: \"preserveAspectRatio\",\n primitiveunits: \"primitiveUnits\",\n property: \"property\",\n r: \"r\",\n radius: \"radius\",\n refx: \"refX\",\n refy: \"refY\",\n renderingintent: \"renderingIntent\",\n \"rendering-intent\": \"renderingIntent\",\n repeatcount: \"repeatCount\",\n repeatdur: \"repeatDur\",\n requiredextensions: \"requiredExtensions\",\n requiredfeatures: \"requiredFeatures\",\n resource: \"resource\",\n restart: \"restart\",\n result: \"result\",\n results: \"results\",\n rotate: \"rotate\",\n rx: \"rx\",\n ry: \"ry\",\n scale: \"scale\",\n security: \"security\",\n seed: \"seed\",\n shaperendering: \"shapeRendering\",\n \"shape-rendering\": \"shapeRendering\",\n slope: \"slope\",\n spacing: \"spacing\",\n specularconstant: \"specularConstant\",\n specularexponent: \"specularExponent\",\n speed: \"speed\",\n spreadmethod: \"spreadMethod\",\n startoffset: \"startOffset\",\n stddeviation: \"stdDeviation\",\n stemh: \"stemh\",\n stemv: \"stemv\",\n stitchtiles: \"stitchTiles\",\n stopcolor: \"stopColor\",\n \"stop-color\": \"stopColor\",\n stopopacity: \"stopOpacity\",\n \"stop-opacity\": \"stopOpacity\",\n strikethroughposition: \"strikethroughPosition\",\n \"strikethrough-position\": \"strikethroughPosition\",\n strikethroughthickness: \"strikethroughThickness\",\n \"strikethrough-thickness\": \"strikethroughThickness\",\n string: \"string\",\n stroke: \"stroke\",\n strokedasharray: \"strokeDasharray\",\n \"stroke-dasharray\": \"strokeDasharray\",\n strokedashoffset: \"strokeDashoffset\",\n \"stroke-dashoffset\": \"strokeDashoffset\",\n strokelinecap: \"strokeLinecap\",\n \"stroke-linecap\": \"strokeLinecap\",\n strokelinejoin: \"strokeLinejoin\",\n \"stroke-linejoin\": \"strokeLinejoin\",\n strokemiterlimit: \"strokeMiterlimit\",\n \"stroke-miterlimit\": \"strokeMiterlimit\",\n strokewidth: \"strokeWidth\",\n \"stroke-width\": \"strokeWidth\",\n strokeopacity: \"strokeOpacity\",\n \"stroke-opacity\": \"strokeOpacity\",\n suppresscontenteditablewarning: \"suppressContentEditableWarning\",\n suppresshydrationwarning: \"suppressHydrationWarning\",\n surfacescale: \"surfaceScale\",\n systemlanguage: \"systemLanguage\",\n tablevalues: \"tableValues\",\n targetx: \"targetX\",\n targety: \"targetY\",\n textanchor: \"textAnchor\",\n \"text-anchor\": \"textAnchor\",\n textdecoration: \"textDecoration\",\n \"text-decoration\": \"textDecoration\",\n textlength: \"textLength\",\n textrendering: \"textRendering\",\n \"text-rendering\": \"textRendering\",\n to: \"to\",\n transform: \"transform\",\n transformorigin: \"transformOrigin\",\n \"transform-origin\": \"transformOrigin\",\n typeof: \"typeof\",\n u1: \"u1\",\n u2: \"u2\",\n underlineposition: \"underlinePosition\",\n \"underline-position\": \"underlinePosition\",\n underlinethickness: \"underlineThickness\",\n \"underline-thickness\": \"underlineThickness\",\n unicode: \"unicode\",\n unicodebidi: \"unicodeBidi\",\n \"unicode-bidi\": \"unicodeBidi\",\n unicoderange: \"unicodeRange\",\n \"unicode-range\": \"unicodeRange\",\n unitsperem: \"unitsPerEm\",\n \"units-per-em\": \"unitsPerEm\",\n unselectable: \"unselectable\",\n valphabetic: \"vAlphabetic\",\n \"v-alphabetic\": \"vAlphabetic\",\n values: \"values\",\n vectoreffect: \"vectorEffect\",\n \"vector-effect\": \"vectorEffect\",\n version: \"version\",\n vertadvy: \"vertAdvY\",\n \"vert-adv-y\": \"vertAdvY\",\n vertoriginx: \"vertOriginX\",\n \"vert-origin-x\": \"vertOriginX\",\n vertoriginy: \"vertOriginY\",\n \"vert-origin-y\": \"vertOriginY\",\n vhanging: \"vHanging\",\n \"v-hanging\": \"vHanging\",\n videographic: \"vIdeographic\",\n \"v-ideographic\": \"vIdeographic\",\n viewbox: \"viewBox\",\n viewtarget: \"viewTarget\",\n visibility: \"visibility\",\n vmathematical: \"vMathematical\",\n \"v-mathematical\": \"vMathematical\",\n vocab: \"vocab\",\n widths: \"widths\",\n wordspacing: \"wordSpacing\",\n \"word-spacing\": \"wordSpacing\",\n writingmode: \"writingMode\",\n \"writing-mode\": \"writingMode\",\n x1: \"x1\",\n x2: \"x2\",\n x: \"x\",\n xchannelselector: \"xChannelSelector\",\n xheight: \"xHeight\",\n \"x-height\": \"xHeight\",\n xlinkactuate: \"xlinkActuate\",\n \"xlink:actuate\": \"xlinkActuate\",\n xlinkarcrole: \"xlinkArcrole\",\n \"xlink:arcrole\": \"xlinkArcrole\",\n xlinkhref: \"xlinkHref\",\n \"xlink:href\": \"xlinkHref\",\n xlinkrole: \"xlinkRole\",\n \"xlink:role\": \"xlinkRole\",\n xlinkshow: \"xlinkShow\",\n \"xlink:show\": \"xlinkShow\",\n xlinktitle: \"xlinkTitle\",\n \"xlink:title\": \"xlinkTitle\",\n xlinktype: \"xlinkType\",\n \"xlink:type\": \"xlinkType\",\n xmlbase: \"xmlBase\",\n \"xml:base\": \"xmlBase\",\n xmllang: \"xmlLang\",\n \"xml:lang\": \"xmlLang\",\n xmlns: \"xmlns\",\n \"xml:space\": \"xmlSpace\",\n xmlnsxlink: \"xmlnsXlink\",\n \"xmlns:xlink\": \"xmlnsXlink\",\n xmlspace: \"xmlSpace\",\n y1: \"y1\",\n y2: \"y2\",\n y: \"y\",\n ychannelselector: \"yChannelSelector\",\n z: \"z\",\n zoomandpan: \"zoomAndPan\"\n },\n ariaProperties = {\n \"aria-current\": 0,\n \"aria-description\": 0,\n \"aria-details\": 0,\n \"aria-disabled\": 0,\n \"aria-hidden\": 0,\n \"aria-invalid\": 0,\n \"aria-keyshortcuts\": 0,\n \"aria-label\": 0,\n \"aria-roledescription\": 0,\n \"aria-autocomplete\": 0,\n \"aria-checked\": 0,\n \"aria-expanded\": 0,\n \"aria-haspopup\": 0,\n \"aria-level\": 0,\n \"aria-modal\": 0,\n \"aria-multiline\": 0,\n \"aria-multiselectable\": 0,\n \"aria-orientation\": 0,\n \"aria-placeholder\": 0,\n \"aria-pressed\": 0,\n \"aria-readonly\": 0,\n \"aria-required\": 0,\n \"aria-selected\": 0,\n \"aria-sort\": 0,\n \"aria-valuemax\": 0,\n \"aria-valuemin\": 0,\n \"aria-valuenow\": 0,\n \"aria-valuetext\": 0,\n \"aria-atomic\": 0,\n \"aria-busy\": 0,\n \"aria-live\": 0,\n \"aria-relevant\": 0,\n \"aria-dropeffect\": 0,\n \"aria-grabbed\": 0,\n \"aria-activedescendant\": 0,\n \"aria-colcount\": 0,\n \"aria-colindex\": 0,\n \"aria-colspan\": 0,\n \"aria-controls\": 0,\n \"aria-describedby\": 0,\n \"aria-errormessage\": 0,\n \"aria-flowto\": 0,\n \"aria-labelledby\": 0,\n \"aria-owns\": 0,\n \"aria-posinset\": 0,\n \"aria-rowcount\": 0,\n \"aria-rowindex\": 0,\n \"aria-rowspan\": 0,\n \"aria-setsize\": 0\n },\n warnedProperties$1 = {},\n rARIA$1 = RegExp(\n \"^(aria)-[:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n ),\n rARIACamel$1 = RegExp(\n \"^(aria)[A-Z][:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n ),\n didWarnValueNull = !1,\n warnedProperties = {},\n EVENT_NAME_REGEX = /^on./,\n INVALID_EVENT_NAME_REGEX = /^on[^A-Z]/,\n rARIA = RegExp(\n \"^(aria)-[:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n ),\n rARIACamel = RegExp(\n \"^(aria)[A-Z][:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n ),\n isJavaScriptProtocol =\n /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*:/i,\n currentReplayingEvent = null,\n restoreTarget = null,\n restoreQueue = null,\n isInsideEventHandler = !1,\n canUseDOM = !(\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ),\n passiveBrowserEventsSupported = !1;\n if (canUseDOM)\n try {\n var options$jscomp$0 = {};\n Object.defineProperty(options$jscomp$0, \"passive\", {\n get: function () {\n passiveBrowserEventsSupported = !0;\n }\n });\n window.addEventListener(\"test\", options$jscomp$0, options$jscomp$0);\n window.removeEventListener(\"test\", options$jscomp$0, options$jscomp$0);\n } catch (e) {\n passiveBrowserEventsSupported = !1;\n }\n var root = null,\n startText = null,\n fallbackText = null,\n EventInterface = {\n eventPhase: 0,\n bubbles: 0,\n cancelable: 0,\n timeStamp: function (event) {\n return event.timeStamp || Date.now();\n },\n defaultPrevented: 0,\n isTrusted: 0\n },\n SyntheticEvent = createSyntheticEvent(EventInterface),\n UIEventInterface = assign({}, EventInterface, { view: 0, detail: 0 }),\n SyntheticUIEvent = createSyntheticEvent(UIEventInterface),\n lastMovementX,\n lastMovementY,\n lastMouseEvent,\n MouseEventInterface = assign({}, UIEventInterface, {\n screenX: 0,\n screenY: 0,\n clientX: 0,\n clientY: 0,\n pageX: 0,\n pageY: 0,\n ctrlKey: 0,\n shiftKey: 0,\n altKey: 0,\n metaKey: 0,\n getModifierState: getEventModifierState,\n button: 0,\n buttons: 0,\n relatedTarget: function (event) {\n return void 0 === event.relatedTarget\n ? event.fromElement === event.srcElement\n ? event.toElement\n : event.fromElement\n : event.relatedTarget;\n },\n movementX: function (event) {\n if (\"movementX\" in event) return event.movementX;\n event !== lastMouseEvent &&\n (lastMouseEvent && \"mousemove\" === event.type\n ? ((lastMovementX = event.screenX - lastMouseEvent.screenX),\n (lastMovementY = event.screenY - lastMouseEvent.screenY))\n : (lastMovementY = lastMovementX = 0),\n (lastMouseEvent = event));\n return lastMovementX;\n },\n movementY: function (event) {\n return \"movementY\" in event ? event.movementY : lastMovementY;\n }\n }),\n SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface),\n DragEventInterface = assign({}, MouseEventInterface, { dataTransfer: 0 }),\n SyntheticDragEvent = createSyntheticEvent(DragEventInterface),\n FocusEventInterface = assign({}, UIEventInterface, { relatedTarget: 0 }),\n SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface),\n AnimationEventInterface = assign({}, EventInterface, {\n animationName: 0,\n elapsedTime: 0,\n pseudoElement: 0\n }),\n SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface),\n ClipboardEventInterface = assign({}, EventInterface, {\n clipboardData: function (event) {\n return \"clipboardData\" in event\n ? event.clipboardData\n : window.clipboardData;\n }\n }),\n SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface),\n CompositionEventInterface = assign({}, EventInterface, { data: 0 }),\n SyntheticCompositionEvent = createSyntheticEvent(\n CompositionEventInterface\n ),\n SyntheticInputEvent = SyntheticCompositionEvent,\n normalizeKey = {\n Esc: \"Escape\",\n Spacebar: \" \",\n Left: \"ArrowLeft\",\n Up: \"ArrowUp\",\n Right: \"ArrowRight\",\n Down: \"ArrowDown\",\n Del: \"Delete\",\n Win: \"OS\",\n Menu: \"ContextMenu\",\n Apps: \"ContextMenu\",\n Scroll: \"ScrollLock\",\n MozPrintableKey: \"Unidentified\"\n },\n translateToKey = {\n 8: \"Backspace\",\n 9: \"Tab\",\n 12: \"Clear\",\n 13: \"Enter\",\n 16: \"Shift\",\n 17: \"Control\",\n 18: \"Alt\",\n 19: \"Pause\",\n 20: \"CapsLock\",\n 27: \"Escape\",\n 32: \" \",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"ArrowLeft\",\n 38: \"ArrowUp\",\n 39: \"ArrowRight\",\n 40: \"ArrowDown\",\n 45: \"Insert\",\n 46: \"Delete\",\n 112: \"F1\",\n 113: \"F2\",\n 114: \"F3\",\n 115: \"F4\",\n 116: \"F5\",\n 117: \"F6\",\n 118: \"F7\",\n 119: \"F8\",\n 120: \"F9\",\n 121: \"F10\",\n 122: \"F11\",\n 123: \"F12\",\n 144: \"NumLock\",\n 145: \"ScrollLock\",\n 224: \"Meta\"\n },\n modifierKeyToProp = {\n Alt: \"altKey\",\n Control: \"ctrlKey\",\n Meta: \"metaKey\",\n Shift: \"shiftKey\"\n },\n KeyboardEventInterface = assign({}, UIEventInterface, {\n key: function (nativeEvent) {\n if (nativeEvent.key) {\n var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n if (\"Unidentified\" !== key) return key;\n }\n return \"keypress\" === nativeEvent.type\n ? ((nativeEvent = getEventCharCode(nativeEvent)),\n 13 === nativeEvent ? \"Enter\" : String.fromCharCode(nativeEvent))\n : \"keydown\" === nativeEvent.type || \"keyup\" === nativeEvent.type\n ? translateToKey[nativeEvent.keyCode] || \"Unidentified\"\n : \"\";\n },\n code: 0,\n location: 0,\n ctrlKey: 0,\n shiftKey: 0,\n altKey: 0,\n metaKey: 0,\n repeat: 0,\n locale: 0,\n getModifierState: getEventModifierState,\n charCode: function (event) {\n return \"keypress\" === event.type ? getEventCharCode(event) : 0;\n },\n keyCode: function (event) {\n return \"keydown\" === event.type || \"keyup\" === event.type\n ? event.keyCode\n : 0;\n },\n which: function (event) {\n return \"keypress\" === event.type\n ? getEventCharCode(event)\n : \"keydown\" === event.type || \"keyup\" === event.type\n ? event.keyCode\n : 0;\n }\n }),\n SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface),\n PointerEventInterface = assign({}, MouseEventInterface, {\n pointerId: 0,\n width: 0,\n height: 0,\n pressure: 0,\n tangentialPressure: 0,\n tiltX: 0,\n tiltY: 0,\n twist: 0,\n pointerType: 0,\n isPrimary: 0\n }),\n SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface),\n TouchEventInterface = assign({}, UIEventInterface, {\n touches: 0,\n targetTouches: 0,\n changedTouches: 0,\n altKey: 0,\n metaKey: 0,\n ctrlKey: 0,\n shiftKey: 0,\n getModifierState: getEventModifierState\n }),\n SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface),\n TransitionEventInterface = assign({}, EventInterface, {\n propertyName: 0,\n elapsedTime: 0,\n pseudoElement: 0\n }),\n SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface),\n WheelEventInterface = assign({}, MouseEventInterface, {\n deltaX: function (event) {\n return \"deltaX\" in event\n ? event.deltaX\n : \"wheelDeltaX\" in event\n ? -event.wheelDeltaX\n : 0;\n },\n deltaY: function (event) {\n return \"deltaY\" in event\n ? event.deltaY\n : \"wheelDeltaY\" in event\n ? -event.wheelDeltaY\n : \"wheelDelta\" in event\n ? -event.wheelDelta\n : 0;\n },\n deltaZ: 0,\n deltaMode: 0\n }),\n SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface),\n ToggleEventInterface = assign({}, EventInterface, {\n newState: 0,\n oldState: 0\n }),\n SyntheticToggleEvent = createSyntheticEvent(ToggleEventInterface),\n END_KEYCODES = [9, 13, 27, 32],\n START_KEYCODE = 229,\n canUseCompositionEvent = canUseDOM && \"CompositionEvent\" in window,\n documentMode = null;\n canUseDOM &&\n \"documentMode\" in document &&\n (documentMode = document.documentMode);\n var canUseTextInputEvent =\n canUseDOM && \"TextEvent\" in window && !documentMode,\n useFallbackCompositionData =\n canUseDOM &&\n (!canUseCompositionEvent ||\n (documentMode && 8 < documentMode && 11 >= documentMode)),\n SPACEBAR_CODE = 32,\n SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE),\n hasSpaceKeypress = !1,\n isComposing = !1,\n supportedInputTypes = {\n color: !0,\n date: !0,\n datetime: !0,\n \"datetime-local\": !0,\n email: !0,\n month: !0,\n number: !0,\n password: !0,\n range: !0,\n search: !0,\n tel: !0,\n text: !0,\n time: !0,\n url: !0,\n week: !0\n },\n activeElement$1 = null,\n activeElementInst$1 = null,\n isInputEventSupported = !1;\n canUseDOM &&\n (isInputEventSupported =\n isEventSupported(\"input\") &&\n (!document.documentMode || 9 < document.documentMode));\n var objectIs = \"function\" === typeof Object.is ? Object.is : is,\n skipSelectionChangeEvent =\n canUseDOM && \"documentMode\" in document && 11 >= document.documentMode,\n activeElement = null,\n activeElementInst = null,\n lastSelection = null,\n mouseDown = !1,\n vendorPrefixes = {\n animationend: makePrefixMap(\"Animation\", \"AnimationEnd\"),\n animationiteration: makePrefixMap(\"Animation\", \"AnimationIteration\"),\n animationstart: makePrefixMap(\"Animation\", \"AnimationStart\"),\n transitionrun: makePrefixMap(\"Transition\", \"TransitionRun\"),\n transitionstart: makePrefixMap(\"Transition\", \"TransitionStart\"),\n transitioncancel: makePrefixMap(\"Transition\", \"TransitionCancel\"),\n transitionend: makePrefixMap(\"Transition\", \"TransitionEnd\")\n },\n prefixedEventNames = {},\n style = {};\n canUseDOM &&\n ((style = document.createElement(\"div\").style),\n \"AnimationEvent\" in window ||\n (delete vendorPrefixes.animationend.animation,\n delete vendorPrefixes.animationiteration.animation,\n delete vendorPrefixes.animationstart.animation),\n \"TransitionEvent\" in window ||\n delete vendorPrefixes.transitionend.transition);\n var ANIMATION_END = getVendorPrefixedEventName(\"animationend\"),\n ANIMATION_ITERATION = getVendorPrefixedEventName(\"animationiteration\"),\n ANIMATION_START = getVendorPrefixedEventName(\"animationstart\"),\n TRANSITION_RUN = getVendorPrefixedEventName(\"transitionrun\"),\n TRANSITION_START = getVendorPrefixedEventName(\"transitionstart\"),\n TRANSITION_CANCEL = getVendorPrefixedEventName(\"transitioncancel\"),\n TRANSITION_END = getVendorPrefixedEventName(\"transitionend\"),\n topLevelEventsToReactNames = new Map(),\n simpleEventPluginEvents =\n \"abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel\".split(\n \" \"\n );\n simpleEventPluginEvents.push(\"scrollEnd\");\n var lastResetTime = 0;\n if (\n \"object\" === typeof performance &&\n \"function\" === typeof performance.now\n ) {\n var localPerformance = performance;\n var getCurrentTime = function () {\n return localPerformance.now();\n };\n } else {\n var localDate = Date;\n getCurrentTime = function () {\n return localDate.now();\n };\n }\n var reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n },\n OffscreenVisible = 1,\n OffscreenPassiveEffectsConnected = 2,\n concurrentQueues = [],\n concurrentQueuesIndex = 0,\n concurrentlyUpdatedLanes = 0,\n emptyContextObject = {};\n Object.freeze(emptyContextObject);\n var resolveFamily = null,\n failedBoundaries = null,\n NoMode = 0,\n ConcurrentMode = 1,\n ProfileMode = 2,\n StrictLegacyMode = 8,\n StrictEffectsMode = 16,\n SuspenseyImagesMode = 32;\n var hasBadMapPolyfill = !1;\n try {\n var nonExtensibleObject = Object.preventExtensions({});\n new Map([[nonExtensibleObject, null]]);\n new Set([nonExtensibleObject]);\n } catch (e$3) {\n hasBadMapPolyfill = !0;\n }\n var CapturedStacks = new WeakMap(),\n forkStack = [],\n forkStackIndex = 0,\n treeForkProvider = null,\n treeForkCount = 0,\n idStack = [],\n idStackIndex = 0,\n treeContextProvider = null,\n treeContextId = 1,\n treeContextOverflow = \"\",\n hydrationParentFiber = null,\n nextHydratableInstance = null,\n isHydrating = !1,\n didSuspendOrErrorDEV = !1,\n hydrationDiffRootDEV = null,\n hydrationErrors = null,\n rootOrSingletonContext = !1,\n HydrationMismatchException = Error(\n \"Hydration Mismatch Exception: This is not a real error, and should not leak into userspace. If you're seeing this, it's likely a bug in React.\"\n ),\n valueCursor = createCursor(null);\n var rendererCursorDEV = createCursor(null);\n var rendererSigil = {};\n var currentlyRenderingFiber$1 = null,\n lastContextDependency = null,\n isDisallowedContextReadInDEV = !1,\n AbortControllerLocal =\n \"undefined\" !== typeof AbortController\n ? AbortController\n : function () {\n var listeners = [],\n signal = (this.signal = {\n aborted: !1,\n addEventListener: function (type, listener) {\n listeners.push(listener);\n }\n });\n this.abort = function () {\n signal.aborted = !0;\n listeners.forEach(function (listener) {\n return listener();\n });\n };\n },\n scheduleCallback$2 = Scheduler.unstable_scheduleCallback,\n NormalPriority = Scheduler.unstable_NormalPriority,\n CacheContext = {\n $$typeof: REACT_CONTEXT_TYPE,\n Consumer: null,\n Provider: null,\n _currentValue: null,\n _currentValue2: null,\n _threadCount: 0,\n _currentRenderer: null,\n _currentRenderer2: null\n },\n now = Scheduler.unstable_now,\n renderStartTime = -0,\n commitStartTime = -0,\n profilerStartTime = -1.1,\n profilerEffectDuration = -0,\n componentEffectStartTime = -1.1,\n currentUpdateIsNested = !1,\n nestedUpdateScheduled = !1,\n currentEntangledListeners = null,\n currentEntangledPendingCount = 0,\n currentEntangledLane = 0,\n currentEntangledActionThenable = null,\n prevOnStartTransitionFinish = ReactSharedInternals.S;\n ReactSharedInternals.S = function (transition, returnValue) {\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n entangleAsyncAction(transition, returnValue);\n null !== prevOnStartTransitionFinish &&\n prevOnStartTransitionFinish(transition, returnValue);\n };\n var resumedCache = createCursor(null),\n ReactStrictModeWarnings = {\n recordUnsafeLifecycleWarnings: function () {},\n flushPendingUnsafeLifecycleWarnings: function () {},\n recordLegacyContextWarning: function () {},\n flushLegacyContextWarning: function () {},\n discardPendingWarnings: function () {}\n },\n pendingComponentWillMountWarnings = [],\n pendingUNSAFE_ComponentWillMountWarnings = [],\n pendingComponentWillReceivePropsWarnings = [],\n pendingUNSAFE_ComponentWillReceivePropsWarnings = [],\n pendingComponentWillUpdateWarnings = [],\n pendingUNSAFE_ComponentWillUpdateWarnings = [],\n didWarnAboutUnsafeLifecycles = new Set();\n ReactStrictModeWarnings.recordUnsafeLifecycleWarnings = function (\n fiber,\n instance\n ) {\n didWarnAboutUnsafeLifecycles.has(fiber.type) ||\n (\"function\" === typeof instance.componentWillMount &&\n !0 !== instance.componentWillMount.__suppressDeprecationWarning &&\n pendingComponentWillMountWarnings.push(fiber),\n fiber.mode & StrictLegacyMode &&\n \"function\" === typeof instance.UNSAFE_componentWillMount &&\n pendingUNSAFE_ComponentWillMountWarnings.push(fiber),\n \"function\" === typeof instance.componentWillReceiveProps &&\n !0 !==\n instance.componentWillReceiveProps.__suppressDeprecationWarning &&\n pendingComponentWillReceivePropsWarnings.push(fiber),\n fiber.mode & StrictLegacyMode &&\n \"function\" === typeof instance.UNSAFE_componentWillReceiveProps &&\n pendingUNSAFE_ComponentWillReceivePropsWarnings.push(fiber),\n \"function\" === typeof instance.componentWillUpdate &&\n !0 !== instance.componentWillUpdate.__suppressDeprecationWarning &&\n pendingComponentWillUpdateWarnings.push(fiber),\n fiber.mode & StrictLegacyMode &&\n \"function\" === typeof instance.UNSAFE_componentWillUpdate &&\n pendingUNSAFE_ComponentWillUpdateWarnings.push(fiber));\n };\n ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings = function () {\n var componentWillMountUniqueNames = new Set();\n 0 < pendingComponentWillMountWarnings.length &&\n (pendingComponentWillMountWarnings.forEach(function (fiber) {\n componentWillMountUniqueNames.add(\n getComponentNameFromFiber(fiber) || \"Component\"\n );\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n }),\n (pendingComponentWillMountWarnings = []));\n var UNSAFE_componentWillMountUniqueNames = new Set();\n 0 < pendingUNSAFE_ComponentWillMountWarnings.length &&\n (pendingUNSAFE_ComponentWillMountWarnings.forEach(function (fiber) {\n UNSAFE_componentWillMountUniqueNames.add(\n getComponentNameFromFiber(fiber) || \"Component\"\n );\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n }),\n (pendingUNSAFE_ComponentWillMountWarnings = []));\n var componentWillReceivePropsUniqueNames = new Set();\n 0 < pendingComponentWillReceivePropsWarnings.length &&\n (pendingComponentWillReceivePropsWarnings.forEach(function (fiber) {\n componentWillReceivePropsUniqueNames.add(\n getComponentNameFromFiber(fiber) || \"Component\"\n );\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n }),\n (pendingComponentWillReceivePropsWarnings = []));\n var UNSAFE_componentWillReceivePropsUniqueNames = new Set();\n 0 < pendingUNSAFE_ComponentWillReceivePropsWarnings.length &&\n (pendingUNSAFE_ComponentWillReceivePropsWarnings.forEach(\n function (fiber) {\n UNSAFE_componentWillReceivePropsUniqueNames.add(\n getComponentNameFromFiber(fiber) || \"Component\"\n );\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n }\n ),\n (pendingUNSAFE_ComponentWillReceivePropsWarnings = []));\n var componentWillUpdateUniqueNames = new Set();\n 0 < pendingComponentWillUpdateWarnings.length &&\n (pendingComponentWillUpdateWarnings.forEach(function (fiber) {\n componentWillUpdateUniqueNames.add(\n getComponentNameFromFiber(fiber) || \"Component\"\n );\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n }),\n (pendingComponentWillUpdateWarnings = []));\n var UNSAFE_componentWillUpdateUniqueNames = new Set();\n 0 < pendingUNSAFE_ComponentWillUpdateWarnings.length &&\n (pendingUNSAFE_ComponentWillUpdateWarnings.forEach(function (fiber) {\n UNSAFE_componentWillUpdateUniqueNames.add(\n getComponentNameFromFiber(fiber) || \"Component\"\n );\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n }),\n (pendingUNSAFE_ComponentWillUpdateWarnings = []));\n if (0 < UNSAFE_componentWillMountUniqueNames.size) {\n var sortedNames = setToSortedString(\n UNSAFE_componentWillMountUniqueNames\n );\n console.error(\n \"Using UNSAFE_componentWillMount in strict mode is not recommended and may indicate bugs in your code. See https://react.dev/link/unsafe-component-lifecycles for details.\\n\\n* Move code with side effects to componentDidMount, and set initial state in the constructor.\\n\\nPlease update the following components: %s\",\n sortedNames\n );\n }\n 0 < UNSAFE_componentWillReceivePropsUniqueNames.size &&\n ((sortedNames = setToSortedString(\n UNSAFE_componentWillReceivePropsUniqueNames\n )),\n console.error(\n \"Using UNSAFE_componentWillReceiveProps in strict mode is not recommended and may indicate bugs in your code. See https://react.dev/link/unsafe-component-lifecycles for details.\\n\\n* Move data fetching code or side effects to componentDidUpdate.\\n* If you're updating state whenever props change, refactor your code to use memoization techniques or move it to static getDerivedStateFromProps. Learn more at: https://react.dev/link/derived-state\\n\\nPlease update the following components: %s\",\n sortedNames\n ));\n 0 < UNSAFE_componentWillUpdateUniqueNames.size &&\n ((sortedNames = setToSortedString(\n UNSAFE_componentWillUpdateUniqueNames\n )),\n console.error(\n \"Using UNSAFE_componentWillUpdate in strict mode is not recommended and may indicate bugs in your code. See https://react.dev/link/unsafe-component-lifecycles for details.\\n\\n* Move data fetching code or side effects to componentDidUpdate.\\n\\nPlease update the following components: %s\",\n sortedNames\n ));\n 0 < componentWillMountUniqueNames.size &&\n ((sortedNames = setToSortedString(componentWillMountUniqueNames)),\n console.warn(\n \"componentWillMount has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.\\n\\n* Move code with side effects to componentDidMount, and set initial state in the constructor.\\n* Rename componentWillMount to UNSAFE_componentWillMount to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run `npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n\\nPlease update the following components: %s\",\n sortedNames\n ));\n 0 < componentWillReceivePropsUniqueNames.size &&\n ((sortedNames = setToSortedString(\n componentWillReceivePropsUniqueNames\n )),\n console.warn(\n \"componentWillReceiveProps has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.\\n\\n* Move data fetching code or side effects to componentDidUpdate.\\n* If you're updating state whenever props change, refactor your code to use memoization techniques or move it to static getDerivedStateFromProps. Learn more at: https://react.dev/link/derived-state\\n* Rename componentWillReceiveProps to UNSAFE_componentWillReceiveProps to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run `npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n\\nPlease update the following components: %s\",\n sortedNames\n ));\n 0 < componentWillUpdateUniqueNames.size &&\n ((sortedNames = setToSortedString(componentWillUpdateUniqueNames)),\n console.warn(\n \"componentWillUpdate has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.\\n\\n* Move data fetching code or side effects to componentDidUpdate.\\n* Rename componentWillUpdate to UNSAFE_componentWillUpdate to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run `npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n\\nPlease update the following components: %s\",\n sortedNames\n ));\n };\n var pendingLegacyContextWarning = new Map(),\n didWarnAboutLegacyContext = new Set();\n ReactStrictModeWarnings.recordLegacyContextWarning = function (\n fiber,\n instance\n ) {\n var strictRoot = null;\n for (var node = fiber; null !== node; )\n node.mode & StrictLegacyMode && (strictRoot = node),\n (node = node.return);\n null === strictRoot\n ? console.error(\n \"Expected to find a StrictMode component in a strict mode tree. This error is likely caused by a bug in React. Please file an issue.\"\n )\n : !didWarnAboutLegacyContext.has(fiber.type) &&\n ((node = pendingLegacyContextWarning.get(strictRoot)),\n null != fiber.type.contextTypes ||\n null != fiber.type.childContextTypes ||\n (null !== instance &&\n \"function\" === typeof instance.getChildContext)) &&\n (void 0 === node &&\n ((node = []), pendingLegacyContextWarning.set(strictRoot, node)),\n node.push(fiber));\n };\n ReactStrictModeWarnings.flushLegacyContextWarning = function () {\n pendingLegacyContextWarning.forEach(function (fiberArray) {\n if (0 !== fiberArray.length) {\n var firstFiber = fiberArray[0],\n uniqueNames = new Set();\n fiberArray.forEach(function (fiber) {\n uniqueNames.add(getComponentNameFromFiber(fiber) || \"Component\");\n didWarnAboutLegacyContext.add(fiber.type);\n });\n var sortedNames = setToSortedString(uniqueNames);\n runWithFiberInDEV(firstFiber, function () {\n console.error(\n \"Legacy context API has been detected within a strict-mode tree.\\n\\nThe old API will be supported in all 16.x releases, but applications using it should migrate to the new version.\\n\\nPlease update the following components: %s\\n\\nLearn more about this warning here: https://react.dev/link/legacy-context\",\n sortedNames\n );\n });\n }\n });\n };\n ReactStrictModeWarnings.discardPendingWarnings = function () {\n pendingComponentWillMountWarnings = [];\n pendingUNSAFE_ComponentWillMountWarnings = [];\n pendingComponentWillReceivePropsWarnings = [];\n pendingUNSAFE_ComponentWillReceivePropsWarnings = [];\n pendingComponentWillUpdateWarnings = [];\n pendingUNSAFE_ComponentWillUpdateWarnings = [];\n pendingLegacyContextWarning = new Map();\n };\n var SuspenseException = Error(\n \"Suspense Exception: This is not a real error! It's an implementation detail of `use` to interrupt the current render. You must either rethrow it immediately, or move the `use` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\\n\\nTo handle async errors, wrap your component in an error boundary, or call the promise's `.catch` method and pass the result to `use`.\"\n ),\n SuspenseyCommitException = Error(\n \"Suspense Exception: This is not a real error, and should not leak into userspace. If you're seeing this, it's likely a bug in React.\"\n ),\n SuspenseActionException = Error(\n \"Suspense Exception: This is not a real error! It's an implementation detail of `useActionState` to interrupt the current render. You must either rethrow it immediately, or move the `useActionState` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\\n\\nTo handle async errors, wrap your component in an error boundary.\"\n ),\n noopSuspenseyCommitThenable = {\n then: function () {\n console.error(\n 'Internal React error: A listener was unexpectedly attached to a \"noop\" thenable. This is a bug in React. Please file an issue.'\n );\n }\n },\n suspendedThenable = null,\n needsToResetSuspendedThenableDEV = !1,\n callComponent = {\n react_stack_bottom_frame: function (Component, props, secondArg) {\n var wasRendering = isRendering;\n isRendering = !0;\n try {\n return Component(props, secondArg);\n } finally {\n isRendering = wasRendering;\n }\n }\n },\n callComponentInDEV =\n callComponent.react_stack_bottom_frame.bind(callComponent),\n callRender = {\n react_stack_bottom_frame: function (instance) {\n var wasRendering = isRendering;\n isRendering = !0;\n try {\n return instance.render();\n } finally {\n isRendering = wasRendering;\n }\n }\n },\n callRenderInDEV = callRender.react_stack_bottom_frame.bind(callRender),\n callComponentDidMount = {\n react_stack_bottom_frame: function (finishedWork, instance) {\n try {\n instance.componentDidMount();\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n },\n callComponentDidMountInDEV =\n callComponentDidMount.react_stack_bottom_frame.bind(\n callComponentDidMount\n ),\n callComponentDidUpdate = {\n react_stack_bottom_frame: function (\n finishedWork,\n instance,\n prevProps,\n prevState,\n snapshot\n ) {\n try {\n instance.componentDidUpdate(prevProps, prevState, snapshot);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n },\n callComponentDidUpdateInDEV =\n callComponentDidUpdate.react_stack_bottom_frame.bind(\n callComponentDidUpdate\n ),\n callComponentDidCatch = {\n react_stack_bottom_frame: function (instance, errorInfo) {\n var stack = errorInfo.stack;\n instance.componentDidCatch(errorInfo.value, {\n componentStack: null !== stack ? stack : \"\"\n });\n }\n },\n callComponentDidCatchInDEV =\n callComponentDidCatch.react_stack_bottom_frame.bind(\n callComponentDidCatch\n ),\n callComponentWillUnmount = {\n react_stack_bottom_frame: function (\n current,\n nearestMountedAncestor,\n instance\n ) {\n try {\n instance.componentWillUnmount();\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n }\n }\n },\n callComponentWillUnmountInDEV =\n callComponentWillUnmount.react_stack_bottom_frame.bind(\n callComponentWillUnmount\n ),\n callCreate = {\n react_stack_bottom_frame: function (effect) {\n var create = effect.create;\n effect = effect.inst;\n create = create();\n return (effect.destroy = create);\n }\n },\n callCreateInDEV = callCreate.react_stack_bottom_frame.bind(callCreate),\n callDestroy = {\n react_stack_bottom_frame: function (\n current,\n nearestMountedAncestor,\n destroy\n ) {\n try {\n destroy();\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n }\n }\n },\n callDestroyInDEV = callDestroy.react_stack_bottom_frame.bind(callDestroy),\n callLazyInit = {\n react_stack_bottom_frame: function (lazy) {\n var init = lazy._init;\n return init(lazy._payload);\n }\n },\n callLazyInitInDEV =\n callLazyInit.react_stack_bottom_frame.bind(callLazyInit),\n thenableState$1 = null,\n thenableIndexCounter$1 = 0,\n currentDebugInfo = null,\n didWarnAboutMaps;\n var didWarnAboutGenerators = (didWarnAboutMaps = !1);\n var ownerHasKeyUseWarning = {};\n var ownerHasFunctionTypeWarning = {};\n var ownerHasSymbolTypeWarning = {};\n warnForMissingKey = function (returnFiber, workInProgress, child) {\n if (\n null !== child &&\n \"object\" === typeof child &&\n child._store &&\n ((!child._store.validated && null == child.key) ||\n 2 === child._store.validated)\n ) {\n if (\"object\" !== typeof child._store)\n throw Error(\n \"React Component in warnForMissingKey should have a _store. This error is likely caused by a bug in React. Please file an issue.\"\n );\n child._store.validated = 1;\n var componentName = getComponentNameFromFiber(returnFiber),\n componentKey = componentName || \"null\";\n if (!ownerHasKeyUseWarning[componentKey]) {\n ownerHasKeyUseWarning[componentKey] = !0;\n child = child._owner;\n returnFiber = returnFiber._debugOwner;\n var currentComponentErrorInfo = \"\";\n returnFiber &&\n \"number\" === typeof returnFiber.tag &&\n (componentKey = getComponentNameFromFiber(returnFiber)) &&\n (currentComponentErrorInfo =\n \"\\n\\nCheck the render method of `\" + componentKey + \"`.\");\n currentComponentErrorInfo ||\n (componentName &&\n (currentComponentErrorInfo =\n \"\\n\\nCheck the top-level render call using <\" +\n componentName +\n \">.\"));\n var childOwnerAppendix = \"\";\n null != child &&\n returnFiber !== child &&\n ((componentName = null),\n \"number\" === typeof child.tag\n ? (componentName = getComponentNameFromFiber(child))\n : \"string\" === typeof child.name && (componentName = child.name),\n componentName &&\n (childOwnerAppendix =\n \" It was passed a child from \" + componentName + \".\"));\n runWithFiberInDEV(workInProgress, function () {\n console.error(\n 'Each child in a list should have a unique \"key\" prop.%s%s See https://react.dev/link/warning-keys for more information.',\n currentComponentErrorInfo,\n childOwnerAppendix\n );\n });\n }\n }\n };\n var reconcileChildFibers = createChildReconciler(!0),\n mountChildFibers = createChildReconciler(!1),\n UpdateState = 0,\n ReplaceState = 1,\n ForceUpdate = 2,\n CaptureUpdate = 3,\n hasForceUpdate = !1;\n var didWarnUpdateInsideUpdate = !1;\n var currentlyProcessingQueue = null;\n var didReadFromEntangledAsyncAction = !1,\n currentTreeHiddenStackCursor = createCursor(null),\n prevEntangledRenderLanesCursor = createCursor(0),\n suspenseHandlerStackCursor = createCursor(null),\n shellBoundary = null,\n SubtreeSuspenseContextMask = 1,\n ForceSuspenseFallback = 2,\n suspenseStackCursor = createCursor(0),\n NoFlags = 0,\n HasEffect = 1,\n Insertion = 2,\n Layout = 4,\n Passive = 8,\n didWarnUncachedGetSnapshot;\n var didWarnAboutMismatchedHooksForComponent = new Set();\n var didWarnAboutUseWrappedInTryCatch = new Set();\n var didWarnAboutAsyncClientComponent = new Set();\n var didWarnAboutUseFormState = new Set();\n var renderLanes = 0,\n currentlyRenderingFiber = null,\n currentHook = null,\n workInProgressHook = null,\n didScheduleRenderPhaseUpdate = !1,\n didScheduleRenderPhaseUpdateDuringThisPass = !1,\n shouldDoubleInvokeUserFnsInHooksDEV = !1,\n localIdCounter = 0,\n thenableIndexCounter = 0,\n thenableState = null,\n globalClientIdCounter = 0,\n RE_RENDER_LIMIT = 25,\n currentHookNameInDev = null,\n hookTypesDev = null,\n hookTypesUpdateIndexDev = -1,\n ignorePreviousDependencies = !1,\n ContextOnlyDispatcher = {\n readContext: readContext,\n use: use,\n useCallback: throwInvalidHookError,\n useContext: throwInvalidHookError,\n useEffect: throwInvalidHookError,\n useImperativeHandle: throwInvalidHookError,\n useLayoutEffect: throwInvalidHookError,\n useInsertionEffect: throwInvalidHookError,\n useMemo: throwInvalidHookError,\n useReducer: throwInvalidHookError,\n useRef: throwInvalidHookError,\n useState: throwInvalidHookError,\n useDebugValue: throwInvalidHookError,\n useDeferredValue: throwInvalidHookError,\n useTransition: throwInvalidHookError,\n useSyncExternalStore: throwInvalidHookError,\n useId: throwInvalidHookError,\n useHostTransitionStatus: throwInvalidHookError,\n useFormState: throwInvalidHookError,\n useActionState: throwInvalidHookError,\n useOptimistic: throwInvalidHookError,\n useMemoCache: throwInvalidHookError,\n useCacheRefresh: throwInvalidHookError\n },\n HooksDispatcherOnMountInDEV = null,\n HooksDispatcherOnMountWithHookTypesInDEV = null,\n HooksDispatcherOnUpdateInDEV = null,\n HooksDispatcherOnRerenderInDEV = null,\n InvalidNestedHooksDispatcherOnMountInDEV = null,\n InvalidNestedHooksDispatcherOnUpdateInDEV = null,\n InvalidNestedHooksDispatcherOnRerenderInDEV = null;\n HooksDispatcherOnMountInDEV = {\n readContext: function (context) {\n return readContext(context);\n },\n use: use,\n useCallback: function (callback, deps) {\n currentHookNameInDev = \"useCallback\";\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n return mountCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = \"useContext\";\n mountHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = \"useEffect\";\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n return mountEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = \"useImperativeHandle\";\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n return mountImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = \"useInsertionEffect\";\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n mountEffectImpl(4, Insertion, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = \"useLayoutEffect\";\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n return mountLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = \"useMemo\";\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountMemo(create, deps);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = \"useReducer\";\n mountHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountReducer(reducer, initialArg, init);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = \"useRef\";\n mountHookTypesDev();\n return mountRef(initialValue);\n },\n useState: function (initialState) {\n currentHookNameInDev = \"useState\";\n mountHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountState(initialState);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useDebugValue: function () {\n currentHookNameInDev = \"useDebugValue\";\n mountHookTypesDev();\n },\n useDeferredValue: function (value, initialValue) {\n currentHookNameInDev = \"useDeferredValue\";\n mountHookTypesDev();\n return mountDeferredValue(value, initialValue);\n },\n useTransition: function () {\n currentHookNameInDev = \"useTransition\";\n mountHookTypesDev();\n return mountTransition();\n },\n useSyncExternalStore: function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n currentHookNameInDev = \"useSyncExternalStore\";\n mountHookTypesDev();\n return mountSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n },\n useId: function () {\n currentHookNameInDev = \"useId\";\n mountHookTypesDev();\n return mountId();\n },\n useFormState: function (action, initialState) {\n currentHookNameInDev = \"useFormState\";\n mountHookTypesDev();\n warnOnUseFormStateInDev();\n return mountActionState(action, initialState);\n },\n useActionState: function (action, initialState) {\n currentHookNameInDev = \"useActionState\";\n mountHookTypesDev();\n return mountActionState(action, initialState);\n },\n useOptimistic: function (passthrough) {\n currentHookNameInDev = \"useOptimistic\";\n mountHookTypesDev();\n return mountOptimistic(passthrough);\n },\n useHostTransitionStatus: useHostTransitionStatus,\n useMemoCache: useMemoCache,\n useCacheRefresh: function () {\n currentHookNameInDev = \"useCacheRefresh\";\n mountHookTypesDev();\n return mountRefresh();\n }\n };\n HooksDispatcherOnMountWithHookTypesInDEV = {\n readContext: function (context) {\n return readContext(context);\n },\n use: use,\n useCallback: function (callback, deps) {\n currentHookNameInDev = \"useCallback\";\n updateHookTypesDev();\n return mountCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = \"useContext\";\n updateHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = \"useEffect\";\n updateHookTypesDev();\n return mountEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = \"useImperativeHandle\";\n updateHookTypesDev();\n return mountImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = \"useInsertionEffect\";\n updateHookTypesDev();\n mountEffectImpl(4, Insertion, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = \"useLayoutEffect\";\n updateHookTypesDev();\n return mountLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = \"useMemo\";\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountMemo(create, deps);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = \"useReducer\";\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountReducer(reducer, initialArg, init);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = \"useRef\";\n updateHookTypesDev();\n return mountRef(initialValue);\n },\n useState: function (initialState) {\n currentHookNameInDev = \"useState\";\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountState(initialState);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useDebugValue: function () {\n currentHookNameInDev = \"useDebugValue\";\n updateHookTypesDev();\n },\n useDeferredValue: function (value, initialValue) {\n currentHookNameInDev = \"useDeferredValue\";\n updateHookTypesDev();\n return mountDeferredValue(value, initialValue);\n },\n useTransition: function () {\n currentHookNameInDev = \"useTransition\";\n updateHookTypesDev();\n return mountTransition();\n },\n useSyncExternalStore: function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n currentHookNameInDev = \"useSyncExternalStore\";\n updateHookTypesDev();\n return mountSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n },\n useId: function () {\n currentHookNameInDev = \"useId\";\n updateHookTypesDev();\n return mountId();\n },\n useActionState: function (action, initialState) {\n currentHookNameInDev = \"useActionState\";\n updateHookTypesDev();\n return mountActionState(action, initialState);\n },\n useFormState: function (action, initialState) {\n currentHookNameInDev = \"useFormState\";\n updateHookTypesDev();\n warnOnUseFormStateInDev();\n return mountActionState(action, initialState);\n },\n useOptimistic: function (passthrough) {\n currentHookNameInDev = \"useOptimistic\";\n updateHookTypesDev();\n return mountOptimistic(passthrough);\n },\n useHostTransitionStatus: useHostTransitionStatus,\n useMemoCache: useMemoCache,\n useCacheRefresh: function () {\n currentHookNameInDev = \"useCacheRefresh\";\n updateHookTypesDev();\n return mountRefresh();\n }\n };\n HooksDispatcherOnUpdateInDEV = {\n readContext: function (context) {\n return readContext(context);\n },\n use: use,\n useCallback: function (callback, deps) {\n currentHookNameInDev = \"useCallback\";\n updateHookTypesDev();\n return updateCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = \"useContext\";\n updateHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = \"useEffect\";\n updateHookTypesDev();\n updateEffectImpl(2048, Passive, create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = \"useImperativeHandle\";\n updateHookTypesDev();\n return updateImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = \"useInsertionEffect\";\n updateHookTypesDev();\n return updateEffectImpl(4, Insertion, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = \"useLayoutEffect\";\n updateHookTypesDev();\n return updateEffectImpl(4, Layout, create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = \"useMemo\";\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return updateMemo(create, deps);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = \"useReducer\";\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return updateReducer(reducer, initialArg, init);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useRef: function () {\n currentHookNameInDev = \"useRef\";\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n },\n useState: function () {\n currentHookNameInDev = \"useState\";\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return updateReducer(basicStateReducer);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useDebugValue: function () {\n currentHookNameInDev = \"useDebugValue\";\n updateHookTypesDev();\n },\n useDeferredValue: function (value, initialValue) {\n currentHookNameInDev = \"useDeferredValue\";\n updateHookTypesDev();\n return updateDeferredValue(value, initialValue);\n },\n useTransition: function () {\n currentHookNameInDev = \"useTransition\";\n updateHookTypesDev();\n return updateTransition();\n },\n useSyncExternalStore: function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n currentHookNameInDev = \"useSyncExternalStore\";\n updateHookTypesDev();\n return updateSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n },\n useId: function () {\n currentHookNameInDev = \"useId\";\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n },\n useFormState: function (action) {\n currentHookNameInDev = \"useFormState\";\n updateHookTypesDev();\n warnOnUseFormStateInDev();\n return updateActionState(action);\n },\n useActionState: function (action) {\n currentHookNameInDev = \"useActionState\";\n updateHookTypesDev();\n return updateActionState(action);\n },\n useOptimistic: function (passthrough, reducer) {\n currentHookNameInDev = \"useOptimistic\";\n updateHookTypesDev();\n return updateOptimistic(passthrough, reducer);\n },\n useHostTransitionStatus: useHostTransitionStatus,\n useMemoCache: useMemoCache,\n useCacheRefresh: function () {\n currentHookNameInDev = \"useCacheRefresh\";\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n }\n };\n HooksDispatcherOnRerenderInDEV = {\n readContext: function (context) {\n return readContext(context);\n },\n use: use,\n useCallback: function (callback, deps) {\n currentHookNameInDev = \"useCallback\";\n updateHookTypesDev();\n return updateCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = \"useContext\";\n updateHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = \"useEffect\";\n updateHookTypesDev();\n updateEffectImpl(2048, Passive, create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = \"useImperativeHandle\";\n updateHookTypesDev();\n return updateImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = \"useInsertionEffect\";\n updateHookTypesDev();\n return updateEffectImpl(4, Insertion, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = \"useLayoutEffect\";\n updateHookTypesDev();\n return updateEffectImpl(4, Layout, create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = \"useMemo\";\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnRerenderInDEV;\n try {\n return updateMemo(create, deps);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = \"useReducer\";\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnRerenderInDEV;\n try {\n return rerenderReducer(reducer, initialArg, init);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useRef: function () {\n currentHookNameInDev = \"useRef\";\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n },\n useState: function () {\n currentHookNameInDev = \"useState\";\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnRerenderInDEV;\n try {\n return rerenderReducer(basicStateReducer);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useDebugValue: function () {\n currentHookNameInDev = \"useDebugValue\";\n updateHookTypesDev();\n },\n useDeferredValue: function (value, initialValue) {\n currentHookNameInDev = \"useDeferredValue\";\n updateHookTypesDev();\n return rerenderDeferredValue(value, initialValue);\n },\n useTransition: function () {\n currentHookNameInDev = \"useTransition\";\n updateHookTypesDev();\n return rerenderTransition();\n },\n useSyncExternalStore: function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n currentHookNameInDev = \"useSyncExternalStore\";\n updateHookTypesDev();\n return updateSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n },\n useId: function () {\n currentHookNameInDev = \"useId\";\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n },\n useFormState: function (action) {\n currentHookNameInDev = \"useFormState\";\n updateHookTypesDev();\n warnOnUseFormStateInDev();\n return rerenderActionState(action);\n },\n useActionState: function (action) {\n currentHookNameInDev = \"useActionState\";\n updateHookTypesDev();\n return rerenderActionState(action);\n },\n useOptimistic: function (passthrough, reducer) {\n currentHookNameInDev = \"useOptimistic\";\n updateHookTypesDev();\n return rerenderOptimistic(passthrough, reducer);\n },\n useHostTransitionStatus: useHostTransitionStatus,\n useMemoCache: useMemoCache,\n useCacheRefresh: function () {\n currentHookNameInDev = \"useCacheRefresh\";\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n }\n };\n InvalidNestedHooksDispatcherOnMountInDEV = {\n readContext: function (context) {\n warnInvalidContextAccess();\n return readContext(context);\n },\n use: function (usable) {\n warnInvalidHookAccess();\n return use(usable);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = \"useCallback\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = \"useContext\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = \"useEffect\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = \"useImperativeHandle\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = \"useInsertionEffect\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n mountEffectImpl(4, Insertion, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = \"useLayoutEffect\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = \"useMemo\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountMemo(create, deps);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = \"useReducer\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountReducer(reducer, initialArg, init);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = \"useRef\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountRef(initialValue);\n },\n useState: function (initialState) {\n currentHookNameInDev = \"useState\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n try {\n return mountState(initialState);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useDebugValue: function () {\n currentHookNameInDev = \"useDebugValue\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n },\n useDeferredValue: function (value, initialValue) {\n currentHookNameInDev = \"useDeferredValue\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountDeferredValue(value, initialValue);\n },\n useTransition: function () {\n currentHookNameInDev = \"useTransition\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountTransition();\n },\n useSyncExternalStore: function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n currentHookNameInDev = \"useSyncExternalStore\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n },\n useId: function () {\n currentHookNameInDev = \"useId\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountId();\n },\n useFormState: function (action, initialState) {\n currentHookNameInDev = \"useFormState\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountActionState(action, initialState);\n },\n useActionState: function (action, initialState) {\n currentHookNameInDev = \"useActionState\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountActionState(action, initialState);\n },\n useOptimistic: function (passthrough) {\n currentHookNameInDev = \"useOptimistic\";\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountOptimistic(passthrough);\n },\n useMemoCache: function (size) {\n warnInvalidHookAccess();\n return useMemoCache(size);\n },\n useHostTransitionStatus: useHostTransitionStatus,\n useCacheRefresh: function () {\n currentHookNameInDev = \"useCacheRefresh\";\n mountHookTypesDev();\n return mountRefresh();\n }\n };\n InvalidNestedHooksDispatcherOnUpdateInDEV = {\n readContext: function (context) {\n warnInvalidContextAccess();\n return readContext(context);\n },\n use: function (usable) {\n warnInvalidHookAccess();\n return use(usable);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = \"useCallback\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = \"useContext\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = \"useEffect\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n updateEffectImpl(2048, Passive, create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = \"useImperativeHandle\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = \"useInsertionEffect\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateEffectImpl(4, Insertion, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = \"useLayoutEffect\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateEffectImpl(4, Layout, create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = \"useMemo\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return updateMemo(create, deps);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = \"useReducer\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return updateReducer(reducer, initialArg, init);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useRef: function () {\n currentHookNameInDev = \"useRef\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n },\n useState: function () {\n currentHookNameInDev = \"useState\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return updateReducer(basicStateReducer);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useDebugValue: function () {\n currentHookNameInDev = \"useDebugValue\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n },\n useDeferredValue: function (value, initialValue) {\n currentHookNameInDev = \"useDeferredValue\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateDeferredValue(value, initialValue);\n },\n useTransition: function () {\n currentHookNameInDev = \"useTransition\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateTransition();\n },\n useSyncExternalStore: function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n currentHookNameInDev = \"useSyncExternalStore\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n },\n useId: function () {\n currentHookNameInDev = \"useId\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n },\n useFormState: function (action) {\n currentHookNameInDev = \"useFormState\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateActionState(action);\n },\n useActionState: function (action) {\n currentHookNameInDev = \"useActionState\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateActionState(action);\n },\n useOptimistic: function (passthrough, reducer) {\n currentHookNameInDev = \"useOptimistic\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateOptimistic(passthrough, reducer);\n },\n useMemoCache: function (size) {\n warnInvalidHookAccess();\n return useMemoCache(size);\n },\n useHostTransitionStatus: useHostTransitionStatus,\n useCacheRefresh: function () {\n currentHookNameInDev = \"useCacheRefresh\";\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n }\n };\n InvalidNestedHooksDispatcherOnRerenderInDEV = {\n readContext: function (context) {\n warnInvalidContextAccess();\n return readContext(context);\n },\n use: function (usable) {\n warnInvalidHookAccess();\n return use(usable);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = \"useCallback\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = \"useContext\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = \"useEffect\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n updateEffectImpl(2048, Passive, create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = \"useImperativeHandle\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = \"useInsertionEffect\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateEffectImpl(4, Insertion, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = \"useLayoutEffect\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateEffectImpl(4, Layout, create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = \"useMemo\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return updateMemo(create, deps);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = \"useReducer\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return rerenderReducer(reducer, initialArg, init);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useRef: function () {\n currentHookNameInDev = \"useRef\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n },\n useState: function () {\n currentHookNameInDev = \"useState\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactSharedInternals.H;\n ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n try {\n return rerenderReducer(basicStateReducer);\n } finally {\n ReactSharedInternals.H = prevDispatcher;\n }\n },\n useDebugValue: function () {\n currentHookNameInDev = \"useDebugValue\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n },\n useDeferredValue: function (value, initialValue) {\n currentHookNameInDev = \"useDeferredValue\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return rerenderDeferredValue(value, initialValue);\n },\n useTransition: function () {\n currentHookNameInDev = \"useTransition\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return rerenderTransition();\n },\n useSyncExternalStore: function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n currentHookNameInDev = \"useSyncExternalStore\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n },\n useId: function () {\n currentHookNameInDev = \"useId\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n },\n useFormState: function (action) {\n currentHookNameInDev = \"useFormState\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return rerenderActionState(action);\n },\n useActionState: function (action) {\n currentHookNameInDev = \"useActionState\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return rerenderActionState(action);\n },\n useOptimistic: function (passthrough, reducer) {\n currentHookNameInDev = \"useOptimistic\";\n warnInvalidHookAccess();\n updateHookTypesDev();\n return rerenderOptimistic(passthrough, reducer);\n },\n useMemoCache: function (size) {\n warnInvalidHookAccess();\n return useMemoCache(size);\n },\n useHostTransitionStatus: useHostTransitionStatus,\n useCacheRefresh: function () {\n currentHookNameInDev = \"useCacheRefresh\";\n updateHookTypesDev();\n return updateWorkInProgressHook().memoizedState;\n }\n };\n var fakeInternalInstance = {};\n var didWarnAboutStateAssignmentForComponent = new Set();\n var didWarnAboutUninitializedState = new Set();\n var didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate = new Set();\n var didWarnAboutLegacyLifecyclesAndDerivedState = new Set();\n var didWarnAboutDirectlyAssigningPropsToState = new Set();\n var didWarnAboutUndefinedDerivedState = new Set();\n var didWarnAboutContextTypes$1 = new Set();\n var didWarnAboutChildContextTypes = new Set();\n var didWarnAboutInvalidateContextType = new Set();\n var didWarnOnInvalidCallback = new Set();\n Object.freeze(fakeInternalInstance);\n var classComponentUpdater = {\n enqueueSetState: function (inst, payload, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(inst),\n update = createUpdate(lane);\n update.payload = payload;\n void 0 !== callback &&\n null !== callback &&\n (warnOnInvalidCallback(callback), (update.callback = callback));\n payload = enqueueUpdate(inst, update, lane);\n null !== payload &&\n (scheduleUpdateOnFiber(payload, inst, lane),\n entangleTransitions(payload, inst, lane));\n markStateUpdateScheduled(inst, lane);\n },\n enqueueReplaceState: function (inst, payload, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(inst),\n update = createUpdate(lane);\n update.tag = ReplaceState;\n update.payload = payload;\n void 0 !== callback &&\n null !== callback &&\n (warnOnInvalidCallback(callback), (update.callback = callback));\n payload = enqueueUpdate(inst, update, lane);\n null !== payload &&\n (scheduleUpdateOnFiber(payload, inst, lane),\n entangleTransitions(payload, inst, lane));\n markStateUpdateScheduled(inst, lane);\n },\n enqueueForceUpdate: function (inst, callback) {\n inst = inst._reactInternals;\n var lane = requestUpdateLane(inst),\n update = createUpdate(lane);\n update.tag = ForceUpdate;\n void 0 !== callback &&\n null !== callback &&\n (warnOnInvalidCallback(callback), (update.callback = callback));\n callback = enqueueUpdate(inst, update, lane);\n null !== callback &&\n (scheduleUpdateOnFiber(callback, inst, lane),\n entangleTransitions(callback, inst, lane));\n null !== injectedProfilingHooks &&\n \"function\" ===\n typeof injectedProfilingHooks.markForceUpdateScheduled &&\n injectedProfilingHooks.markForceUpdateScheduled(inst, lane);\n }\n },\n componentName = null,\n errorBoundaryName = null,\n SelectiveHydrationException = Error(\n \"This is not a real error. It's an implementation detail of React's selective hydration feature. If this leaks into userspace, it's a bug in React. Please file an issue.\"\n ),\n didReceiveUpdate = !1;\n var didWarnAboutBadClass = {};\n var didWarnAboutContextTypeOnFunctionComponent = {};\n var didWarnAboutContextTypes = {};\n var didWarnAboutGetDerivedStateOnFunctionComponent = {};\n var didWarnAboutReassigningProps = !1;\n var didWarnAboutRevealOrder = {};\n var didWarnAboutTailOptions = {};\n var SUSPENDED_MARKER = {\n dehydrated: null,\n treeContext: null,\n retryLane: 0,\n hydrationErrors: null\n },\n hasWarnedAboutUsingNoValuePropOnContextProvider = !1,\n didWarnAboutUndefinedSnapshotBeforeUpdate = null;\n didWarnAboutUndefinedSnapshotBeforeUpdate = new Set();\n var offscreenSubtreeIsHidden = !1,\n offscreenSubtreeWasHidden = !1,\n needsFormReset = !1,\n PossiblyWeakSet = \"function\" === typeof WeakSet ? WeakSet : Set,\n nextEffect = null,\n inProgressLanes = null,\n inProgressRoot = null,\n hostParent = null,\n hostParentIsContainer = !1,\n currentHoistableRoot = null,\n suspenseyCommitFlag = 8192,\n DefaultAsyncDispatcher = {\n getCacheForType: function (resourceType) {\n var cache = readContext(CacheContext),\n cacheForType = cache.data.get(resourceType);\n void 0 === cacheForType &&\n ((cacheForType = resourceType()),\n cache.data.set(resourceType, cacheForType));\n return cacheForType;\n },\n cacheSignal: function () {\n return readContext(CacheContext).controller.signal;\n },\n getOwner: function () {\n return current;\n }\n };\n if (\"function\" === typeof Symbol && Symbol.for) {\n var symbolFor = Symbol.for;\n symbolFor(\"selector.component\");\n symbolFor(\"selector.has_pseudo_class\");\n symbolFor(\"selector.role\");\n symbolFor(\"selector.test_id\");\n symbolFor(\"selector.text\");\n }\n var commitHooks = [],\n PossiblyWeakMap = \"function\" === typeof WeakMap ? WeakMap : Map,\n NoContext = 0,\n RenderContext = 2,\n CommitContext = 4,\n RootInProgress = 0,\n RootFatalErrored = 1,\n RootErrored = 2,\n RootSuspended = 3,\n RootSuspendedWithDelay = 4,\n RootSuspendedAtTheShell = 6,\n RootCompleted = 5,\n executionContext = NoContext,\n workInProgressRoot = null,\n workInProgress = null,\n workInProgressRootRenderLanes = 0,\n NotSuspended = 0,\n SuspendedOnError = 1,\n SuspendedOnData = 2,\n SuspendedOnImmediate = 3,\n SuspendedOnInstance = 4,\n SuspendedOnInstanceAndReadyToContinue = 5,\n SuspendedOnDeprecatedThrowPromise = 6,\n SuspendedAndReadyToContinue = 7,\n SuspendedOnHydration = 8,\n SuspendedOnAction = 9,\n workInProgressSuspendedReason = NotSuspended,\n workInProgressThrownValue = null,\n workInProgressRootDidSkipSuspendedSiblings = !1,\n workInProgressRootIsPrerendering = !1,\n workInProgressRootDidAttachPingListener = !1,\n entangledRenderLanes = 0,\n workInProgressRootExitStatus = RootInProgress,\n workInProgressRootSkippedLanes = 0,\n workInProgressRootInterleavedUpdatedLanes = 0,\n workInProgressRootPingedLanes = 0,\n workInProgressDeferredLane = 0,\n workInProgressSuspendedRetryLanes = 0,\n workInProgressRootConcurrentErrors = null,\n workInProgressRootRecoverableErrors = null,\n workInProgressRootDidIncludeRecursiveRenderUpdate = !1,\n globalMostRecentFallbackTime = 0,\n FALLBACK_THROTTLE_MS = 300,\n workInProgressRootRenderTargetTime = Infinity,\n RENDER_TIMEOUT_MS = 500,\n workInProgressTransitions = null,\n legacyErrorBoundariesThatAlreadyFailed = null,\n IMMEDIATE_COMMIT = 0,\n SUSPENDED_COMMIT = 1,\n THROTTLED_COMMIT = 2,\n NO_PENDING_EFFECTS = 0,\n PENDING_MUTATION_PHASE = 1,\n PENDING_LAYOUT_PHASE = 2,\n PENDING_AFTER_MUTATION_PHASE = 3,\n PENDING_SPAWNED_WORK = 4,\n PENDING_PASSIVE_PHASE = 5,\n pendingEffectsStatus = 0,\n pendingEffectsRoot = null,\n pendingFinishedWork = null,\n pendingEffectsLanes = 0,\n pendingEffectsRemainingLanes = 0,\n pendingPassiveTransitions = null,\n pendingRecoverableErrors = null,\n NESTED_UPDATE_LIMIT = 50,\n nestedUpdateCount = 0,\n rootWithNestedUpdates = null,\n isFlushingPassiveEffects = !1,\n didScheduleUpdateDuringPassiveEffects = !1,\n NESTED_PASSIVE_UPDATE_LIMIT = 50,\n nestedPassiveUpdateCount = 0,\n rootWithPassiveNestedUpdates = null,\n isRunningInsertionEffect = !1,\n didWarnStateUpdateForNotYetMountedComponent = null,\n didWarnAboutUpdateInRender = !1;\n var didWarnAboutUpdateInRenderForAnotherComponent = new Set();\n var fakeActCallbackNode$1 = {},\n firstScheduledRoot = null,\n lastScheduledRoot = null,\n didScheduleMicrotask = !1,\n didScheduleMicrotask_act = !1,\n mightHavePendingSyncWork = !1,\n isFlushingWork = !1,\n currentEventTransitionLane = 0,\n fakeActCallbackNode = {};\n (function () {\n for (var i = 0; i < simpleEventPluginEvents.length; i++) {\n var eventName = simpleEventPluginEvents[i],\n domEventName = eventName.toLowerCase();\n eventName = eventName[0].toUpperCase() + eventName.slice(1);\n registerSimpleEvent(domEventName, \"on\" + eventName);\n }\n registerSimpleEvent(ANIMATION_END, \"onAnimationEnd\");\n registerSimpleEvent(ANIMATION_ITERATION, \"onAnimationIteration\");\n registerSimpleEvent(ANIMATION_START, \"onAnimationStart\");\n registerSimpleEvent(\"dblclick\", \"onDoubleClick\");\n registerSimpleEvent(\"focusin\", \"onFocus\");\n registerSimpleEvent(\"focusout\", \"onBlur\");\n registerSimpleEvent(TRANSITION_RUN, \"onTransitionRun\");\n registerSimpleEvent(TRANSITION_START, \"onTransitionStart\");\n registerSimpleEvent(TRANSITION_CANCEL, \"onTransitionCancel\");\n registerSimpleEvent(TRANSITION_END, \"onTransitionEnd\");\n })();\n registerDirectEvent(\"onMouseEnter\", [\"mouseout\", \"mouseover\"]);\n registerDirectEvent(\"onMouseLeave\", [\"mouseout\", \"mouseover\"]);\n registerDirectEvent(\"onPointerEnter\", [\"pointerout\", \"pointerover\"]);\n registerDirectEvent(\"onPointerLeave\", [\"pointerout\", \"pointerover\"]);\n registerTwoPhaseEvent(\n \"onChange\",\n \"change click focusin focusout input keydown keyup selectionchange\".split(\n \" \"\n )\n );\n registerTwoPhaseEvent(\n \"onSelect\",\n \"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\n \" \"\n )\n );\n registerTwoPhaseEvent(\"onBeforeInput\", [\n \"compositionend\",\n \"keypress\",\n \"textInput\",\n \"paste\"\n ]);\n registerTwoPhaseEvent(\n \"onCompositionEnd\",\n \"compositionend focusout keydown keypress keyup mousedown\".split(\" \")\n );\n registerTwoPhaseEvent(\n \"onCompositionStart\",\n \"compositionstart focusout keydown keypress keyup mousedown\".split(\" \")\n );\n registerTwoPhaseEvent(\n \"onCompositionUpdate\",\n \"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \")\n );\n var mediaEventTypes =\n \"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting\".split(\n \" \"\n ),\n nonDelegatedEvents = new Set(\n \"beforetoggle cancel close invalid load scroll scrollend toggle\"\n .split(\" \")\n .concat(mediaEventTypes)\n ),\n listeningMarker = \"_reactListening\" + Math.random().toString(36).slice(2),\n didWarnControlledToUncontrolled = !1,\n didWarnUncontrolledToControlled = !1,\n didWarnFormActionType = !1,\n didWarnFormActionName = !1,\n didWarnFormActionTarget = !1,\n didWarnFormActionMethod = !1,\n didWarnPopoverTargetObject = !1;\n var didWarnForNewBooleanPropsWithEmptyValue = {};\n var NORMALIZE_NEWLINES_REGEX = /\\r\\n?/g,\n NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\\u0000|\\uFFFD/g,\n xlinkNamespace = \"http://www.w3.org/1999/xlink\",\n xmlNamespace = \"http://www.w3.org/XML/1998/namespace\",\n EXPECTED_FORM_ACTION_URL =\n \"javascript:throw new Error('React form unexpectedly submitted.')\",\n SUPPRESS_HYDRATION_WARNING = \"suppressHydrationWarning\",\n ACTIVITY_START_DATA = \"&\",\n ACTIVITY_END_DATA = \"/&\",\n SUSPENSE_START_DATA = \"$\",\n SUSPENSE_END_DATA = \"/$\",\n SUSPENSE_PENDING_START_DATA = \"$?\",\n SUSPENSE_QUEUED_START_DATA = \"$~\",\n SUSPENSE_FALLBACK_START_DATA = \"$!\",\n PREAMBLE_CONTRIBUTION_HTML = \"html\",\n PREAMBLE_CONTRIBUTION_BODY = \"body\",\n PREAMBLE_CONTRIBUTION_HEAD = \"head\",\n FORM_STATE_IS_MATCHING = \"F!\",\n FORM_STATE_IS_NOT_MATCHING = \"F\",\n DOCUMENT_READY_STATE_LOADING = \"loading\",\n STYLE = \"style\",\n HostContextNamespaceNone = 0,\n HostContextNamespaceSvg = 1,\n HostContextNamespaceMath = 2,\n eventsEnabled = null,\n selectionInformation = null,\n warnedUnknownTags = { dialog: !0, webview: !0 },\n currentPopstateTransitionEvent = null,\n scheduleTimeout = \"function\" === typeof setTimeout ? setTimeout : void 0,\n cancelTimeout =\n \"function\" === typeof clearTimeout ? clearTimeout : void 0,\n noTimeout = -1,\n localPromise = \"function\" === typeof Promise ? Promise : void 0,\n scheduleMicrotask =\n \"function\" === typeof queueMicrotask\n ? queueMicrotask\n : \"undefined\" !== typeof localPromise\n ? function (callback) {\n return localPromise\n .resolve(null)\n .then(callback)\n .catch(handleErrorInNextTick);\n }\n : scheduleTimeout,\n previousHydratableOnEnteringScopedSingleton = null,\n NotLoaded = 0,\n Loaded = 1,\n Errored = 2,\n Settled = 3,\n Inserted = 4,\n preloadPropsMap = new Map(),\n preconnectsSet = new Set(),\n previousDispatcher = ReactDOMSharedInternals.d;\n ReactDOMSharedInternals.d = {\n f: function () {\n var previousWasRendering = previousDispatcher.f(),\n wasRendering = flushSyncWork$1();\n return previousWasRendering || wasRendering;\n },\n r: function (form) {\n var formInst = getInstanceFromNode(form);\n null !== formInst && 5 === formInst.tag && \"form\" === formInst.type\n ? requestFormReset$1(formInst)\n : previousDispatcher.r(form);\n },\n D: function (href) {\n previousDispatcher.D(href);\n preconnectAs(\"dns-prefetch\", href, null);\n },\n C: function (href, crossOrigin) {\n previousDispatcher.C(href, crossOrigin);\n preconnectAs(\"preconnect\", href, crossOrigin);\n },\n L: function (href, as, options) {\n previousDispatcher.L(href, as, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && href && as) {\n var preloadSelector =\n 'link[rel=\"preload\"][as=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n '\"]';\n \"image\" === as\n ? options && options.imageSrcSet\n ? ((preloadSelector +=\n '[imagesrcset=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(\n options.imageSrcSet\n ) +\n '\"]'),\n \"string\" === typeof options.imageSizes &&\n (preloadSelector +=\n '[imagesizes=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(\n options.imageSizes\n ) +\n '\"]'))\n : (preloadSelector +=\n '[href=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n '\"]')\n : (preloadSelector +=\n '[href=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n '\"]');\n var key = preloadSelector;\n switch (as) {\n case \"style\":\n key = getStyleKey(href);\n break;\n case \"script\":\n key = getScriptKey(href);\n }\n preloadPropsMap.has(key) ||\n ((href = assign(\n {\n rel: \"preload\",\n href:\n \"image\" === as && options && options.imageSrcSet\n ? void 0\n : href,\n as: as\n },\n options\n )),\n preloadPropsMap.set(key, href),\n null !== ownerDocument.querySelector(preloadSelector) ||\n (\"style\" === as &&\n ownerDocument.querySelector(\n getStylesheetSelectorFromKey(key)\n )) ||\n (\"script\" === as &&\n ownerDocument.querySelector(getScriptSelectorFromKey(key))) ||\n ((as = ownerDocument.createElement(\"link\")),\n setInitialProperties(as, \"link\", href),\n markNodeAsHoistable(as),\n ownerDocument.head.appendChild(as)));\n }\n },\n m: function (href, options) {\n previousDispatcher.m(href, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && href) {\n var as =\n options && \"string\" === typeof options.as ? options.as : \"script\",\n preloadSelector =\n 'link[rel=\"modulepreload\"][as=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n '\"][href=\"' +\n escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n '\"]',\n key = preloadSelector;\n switch (as) {\n case \"audioworklet\":\n case \"paintworklet\":\n case \"serviceworker\":\n case \"sharedworker\":\n case \"worker\":\n case \"script\":\n key = getScriptKey(href);\n }\n if (\n !preloadPropsMap.has(key) &&\n ((href = assign({ rel: \"modulepreload\", href: href }, options)),\n preloadPropsMap.set(key, href),\n null === ownerDocument.querySelector(preloadSelector))\n ) {\n switch (as) {\n case \"audioworklet\":\n case \"paintworklet\":\n case \"serviceworker\":\n case \"sharedworker\":\n case \"worker\":\n case \"script\":\n if (ownerDocument.querySelector(getScriptSelectorFromKey(key)))\n return;\n }\n as = ownerDocument.createElement(\"link\");\n setInitialProperties(as, \"link\", href);\n markNodeAsHoistable(as);\n ownerDocument.head.appendChild(as);\n }\n }\n },\n X: function (src, options) {\n previousDispatcher.X(src, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && src) {\n var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n key = getScriptKey(src),\n resource = scripts.get(key);\n resource ||\n ((resource = ownerDocument.querySelector(\n getScriptSelectorFromKey(key)\n )),\n resource ||\n ((src = assign({ src: src, async: !0 }, options)),\n (options = preloadPropsMap.get(key)) &&\n adoptPreloadPropsForScript(src, options),\n (resource = ownerDocument.createElement(\"script\")),\n markNodeAsHoistable(resource),\n setInitialProperties(resource, \"link\", src),\n ownerDocument.head.appendChild(resource)),\n (resource = {\n type: \"script\",\n instance: resource,\n count: 1,\n state: null\n }),\n scripts.set(key, resource));\n }\n },\n S: function (href, precedence, options) {\n previousDispatcher.S(href, precedence, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && href) {\n var styles = getResourcesFromRoot(ownerDocument).hoistableStyles,\n key = getStyleKey(href);\n precedence = precedence || \"default\";\n var resource = styles.get(key);\n if (!resource) {\n var state = { loading: NotLoaded, preload: null };\n if (\n (resource = ownerDocument.querySelector(\n getStylesheetSelectorFromKey(key)\n ))\n )\n state.loading = Loaded | Inserted;\n else {\n href = assign(\n {\n rel: \"stylesheet\",\n href: href,\n \"data-precedence\": precedence\n },\n options\n );\n (options = preloadPropsMap.get(key)) &&\n adoptPreloadPropsForStylesheet(href, options);\n var link = (resource = ownerDocument.createElement(\"link\"));\n markNodeAsHoistable(link);\n setInitialProperties(link, \"link\", href);\n link._p = new Promise(function (resolve, reject) {\n link.onload = resolve;\n link.onerror = reject;\n });\n link.addEventListener(\"load\", function () {\n state.loading |= Loaded;\n });\n link.addEventListener(\"error\", function () {\n state.loading |= Errored;\n });\n state.loading |= Inserted;\n insertStylesheet(resource, precedence, ownerDocument);\n }\n resource = {\n type: \"stylesheet\",\n instance: resource,\n count: 1,\n state: state\n };\n styles.set(key, resource);\n }\n }\n },\n M: function (src, options) {\n previousDispatcher.M(src, options);\n var ownerDocument = globalDocument;\n if (ownerDocument && src) {\n var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n key = getScriptKey(src),\n resource = scripts.get(key);\n resource ||\n ((resource = ownerDocument.querySelector(\n getScriptSelectorFromKey(key)\n )),\n resource ||\n ((src = assign({ src: src, async: !0, type: \"module\" }, options)),\n (options = preloadPropsMap.get(key)) &&\n adoptPreloadPropsForScript(src, options),\n (resource = ownerDocument.createElement(\"script\")),\n markNodeAsHoistable(resource),\n setInitialProperties(resource, \"link\", src),\n ownerDocument.head.appendChild(resource)),\n (resource = {\n type: \"script\",\n instance: resource,\n count: 1,\n state: null\n }),\n scripts.set(key, resource));\n }\n }\n };\n var globalDocument = \"undefined\" === typeof document ? null : document,\n tagCaches = null,\n suspendedState = null,\n LAST_PRECEDENCE = null,\n precedencesByRoot = null,\n NotPendingTransition = NotPending,\n HostTransitionContext = {\n $$typeof: REACT_CONTEXT_TYPE,\n Provider: null,\n Consumer: null,\n _currentValue: NotPendingTransition,\n _currentValue2: NotPendingTransition,\n _threadCount: 0\n },\n badgeFormat = \"%c%s%c \",\n badgeStyle =\n \"background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px\",\n resetStyle = \"\",\n pad = \" \",\n bind = Function.prototype.bind;\n var didWarnAboutNestedUpdates = !1;\n var overrideHookState = null,\n overrideHookStateDeletePath = null,\n overrideHookStateRenamePath = null,\n overrideProps = null,\n overridePropsDeletePath = null,\n overridePropsRenamePath = null,\n scheduleUpdate = null,\n setErrorHandler = null,\n setSuspenseHandler = null;\n overrideHookState = function (fiber, id, path, value) {\n id = findHook(fiber, id);\n null !== id &&\n ((path = copyWithSetImpl(id.memoizedState, path, 0, value)),\n (id.memoizedState = path),\n (id.baseState = path),\n (fiber.memoizedProps = assign({}, fiber.memoizedProps)),\n (path = enqueueConcurrentRenderForLane(fiber, 2)),\n null !== path && scheduleUpdateOnFiber(path, fiber, 2));\n };\n overrideHookStateDeletePath = function (fiber, id, path) {\n id = findHook(fiber, id);\n null !== id &&\n ((path = copyWithDeleteImpl(id.memoizedState, path, 0)),\n (id.memoizedState = path),\n (id.baseState = path),\n (fiber.memoizedProps = assign({}, fiber.memoizedProps)),\n (path = enqueueConcurrentRenderForLane(fiber, 2)),\n null !== path && scheduleUpdateOnFiber(path, fiber, 2));\n };\n overrideHookStateRenamePath = function (fiber, id, oldPath, newPath) {\n id = findHook(fiber, id);\n null !== id &&\n ((oldPath = copyWithRename(id.memoizedState, oldPath, newPath)),\n (id.memoizedState = oldPath),\n (id.baseState = oldPath),\n (fiber.memoizedProps = assign({}, fiber.memoizedProps)),\n (oldPath = enqueueConcurrentRenderForLane(fiber, 2)),\n null !== oldPath && scheduleUpdateOnFiber(oldPath, fiber, 2));\n };\n overrideProps = function (fiber, path, value) {\n fiber.pendingProps = copyWithSetImpl(fiber.memoizedProps, path, 0, value);\n fiber.alternate && (fiber.alternate.pendingProps = fiber.pendingProps);\n path = enqueueConcurrentRenderForLane(fiber, 2);\n null !== path && scheduleUpdateOnFiber(path, fiber, 2);\n };\n overridePropsDeletePath = function (fiber, path) {\n fiber.pendingProps = copyWithDeleteImpl(fiber.memoizedProps, path, 0);\n fiber.alternate && (fiber.alternate.pendingProps = fiber.pendingProps);\n path = enqueueConcurrentRenderForLane(fiber, 2);\n null !== path && scheduleUpdateOnFiber(path, fiber, 2);\n };\n overridePropsRenamePath = function (fiber, oldPath, newPath) {\n fiber.pendingProps = copyWithRename(\n fiber.memoizedProps,\n oldPath,\n newPath\n );\n fiber.alternate && (fiber.alternate.pendingProps = fiber.pendingProps);\n oldPath = enqueueConcurrentRenderForLane(fiber, 2);\n null !== oldPath && scheduleUpdateOnFiber(oldPath, fiber, 2);\n };\n scheduleUpdate = function (fiber) {\n var root = enqueueConcurrentRenderForLane(fiber, 2);\n null !== root && scheduleUpdateOnFiber(root, fiber, 2);\n };\n setErrorHandler = function (newShouldErrorImpl) {\n shouldErrorImpl = newShouldErrorImpl;\n };\n setSuspenseHandler = function (newShouldSuspendImpl) {\n shouldSuspendImpl = newShouldSuspendImpl;\n };\n var _enabled = !0,\n return_targetInst = null,\n hasScheduledReplayAttempt = !1,\n queuedFocus = null,\n queuedDrag = null,\n queuedMouse = null,\n queuedPointers = new Map(),\n queuedPointerCaptures = new Map(),\n queuedExplicitHydrationTargets = [],\n discreteReplayableEvents =\n \"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset\".split(\n \" \"\n ),\n lastScheduledReplayQueue = null;\n ReactDOMHydrationRoot.prototype.render = ReactDOMRoot.prototype.render =\n function (children) {\n var root = this._internalRoot;\n if (null === root) throw Error(\"Cannot update an unmounted root.\");\n var args = arguments;\n \"function\" === typeof args[1]\n ? console.error(\n \"does not support the second callback argument. To execute a side effect after rendering, declare it in a component body with useEffect().\"\n )\n : isValidContainer(args[1])\n ? console.error(\n \"You passed a container to the second argument of root.render(...). You don't need to pass it again since you already passed it to create the root.\"\n )\n : \"undefined\" !== typeof args[1] &&\n console.error(\n \"You passed a second argument to root.render(...) but it only accepts one argument.\"\n );\n args = children;\n var current = root.current,\n lane = requestUpdateLane(current);\n updateContainerImpl(current, lane, args, root, null, null);\n };\n ReactDOMHydrationRoot.prototype.unmount = ReactDOMRoot.prototype.unmount =\n function () {\n var args = arguments;\n \"function\" === typeof args[0] &&\n console.error(\n \"does not support a callback argument. To execute a side effect after rendering, declare it in a component body with useEffect().\"\n );\n args = this._internalRoot;\n if (null !== args) {\n this._internalRoot = null;\n var container = args.containerInfo;\n (executionContext & (RenderContext | CommitContext)) !== NoContext &&\n console.error(\n \"Attempted to synchronously unmount a root while React was already rendering. React cannot finish unmounting the root until the current render has completed, which may lead to a race condition.\"\n );\n updateContainerImpl(args.current, 2, null, args, null, null);\n flushSyncWork$1();\n container[internalContainerInstanceKey] = null;\n }\n };\n ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (\n target\n ) {\n if (target) {\n var updatePriority = resolveUpdatePriority();\n target = { blockedOn: null, target: target, priority: updatePriority };\n for (\n var i = 0;\n i < queuedExplicitHydrationTargets.length &&\n 0 !== updatePriority &&\n updatePriority < queuedExplicitHydrationTargets[i].priority;\n i++\n );\n queuedExplicitHydrationTargets.splice(i, 0, target);\n 0 === i && attemptExplicitHydrationTarget(target);\n }\n };\n (function () {\n var isomorphicReactPackageVersion = React.version;\n if (\"19.2.0-canary-97cdd5d3-20250710\" !== isomorphicReactPackageVersion)\n throw Error(\n 'Incompatible React versions: The \"react\" and \"react-dom\" packages must have the exact same version. Instead got:\\n - react: ' +\n (isomorphicReactPackageVersion +\n \"\\n - react-dom: 19.2.0-canary-97cdd5d3-20250710\\nLearn more: https://react.dev/warnings/version-mismatch\")\n );\n })();\n (\"function\" === typeof Map &&\n null != Map.prototype &&\n \"function\" === typeof Map.prototype.forEach &&\n \"function\" === typeof Set &&\n null != Set.prototype &&\n \"function\" === typeof Set.prototype.clear &&\n \"function\" === typeof Set.prototype.forEach) ||\n console.error(\n \"React depends on Map and Set built-in types. Make sure that you load a polyfill in older browsers. https://react.dev/link/react-polyfills\"\n );\n ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {\n var fiber = componentOrElement._reactInternals;\n if (void 0 === fiber) {\n if (\"function\" === typeof componentOrElement.render)\n throw Error(\"Unable to find node on an unmounted component.\");\n componentOrElement = Object.keys(componentOrElement).join(\",\");\n throw Error(\n \"Argument appears to not be a ReactComponent. Keys: \" +\n componentOrElement\n );\n }\n componentOrElement = findCurrentFiberUsingSlowPath(fiber);\n componentOrElement =\n null !== componentOrElement\n ? findCurrentHostFiberImpl(componentOrElement)\n : null;\n componentOrElement =\n null === componentOrElement ? null : componentOrElement.stateNode;\n return componentOrElement;\n };\n if (\n !(function () {\n var internals = {\n bundleType: 1,\n version: \"19.2.0-canary-97cdd5d3-20250710\",\n rendererPackageName: \"react-dom\",\n currentDispatcherRef: ReactSharedInternals,\n reconcilerVersion: \"19.2.0-canary-97cdd5d3-20250710\"\n };\n internals.overrideHookState = overrideHookState;\n internals.overrideHookStateDeletePath = overrideHookStateDeletePath;\n internals.overrideHookStateRenamePath = overrideHookStateRenamePath;\n internals.overrideProps = overrideProps;\n internals.overridePropsDeletePath = overridePropsDeletePath;\n internals.overridePropsRenamePath = overridePropsRenamePath;\n internals.scheduleUpdate = scheduleUpdate;\n internals.setErrorHandler = setErrorHandler;\n internals.setSuspenseHandler = setSuspenseHandler;\n internals.scheduleRefresh = scheduleRefresh;\n internals.scheduleRoot = scheduleRoot;\n internals.setRefreshHandler = setRefreshHandler;\n internals.getCurrentFiber = getCurrentFiberForDevTools;\n internals.getLaneLabelMap = getLaneLabelMap;\n internals.injectProfilingHooks = injectProfilingHooks;\n return injectInternals(internals);\n })() &&\n canUseDOM &&\n window.top === window.self &&\n ((-1 < navigator.userAgent.indexOf(\"Chrome\") &&\n -1 === navigator.userAgent.indexOf(\"Edge\")) ||\n -1 < navigator.userAgent.indexOf(\"Firefox\"))\n ) {\n var protocol = window.location.protocol;\n /^(https?|file):$/.test(protocol) &&\n console.info(\n \"%cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools\" +\n (\"file:\" === protocol\n ? \"\\nYou might need to use a local HTTP server (instead of file://): https://react.dev/link/react-devtools-faq\"\n : \"\"),\n \"font-weight:bold\"\n );\n }\n exports.createRoot = function (container, options) {\n if (!isValidContainer(container))\n throw Error(\"Target container is not a DOM element.\");\n warnIfReactDOMContainerInDEV(container);\n var isStrictMode = !1,\n identifierPrefix = \"\",\n onUncaughtError = defaultOnUncaughtError,\n onCaughtError = defaultOnCaughtError,\n onRecoverableError = defaultOnRecoverableError;\n null !== options &&\n void 0 !== options &&\n (options.hydrate\n ? console.warn(\n \"hydrate through createRoot is deprecated. Use ReactDOMClient.hydrateRoot(container, <App />) instead.\"\n )\n : \"object\" === typeof options &&\n null !== options &&\n options.$$typeof === REACT_ELEMENT_TYPE &&\n console.error(\n \"You passed a JSX element to createRoot. You probably meant to call root.render instead. Example usage:\\n\\n let root = createRoot(domContainer);\\n root.render(<App />);\"\n ),\n !0 === options.unstable_strictMode && (isStrictMode = !0),\n void 0 !== options.identifierPrefix &&\n (identifierPrefix = options.identifierPrefix),\n void 0 !== options.onUncaughtError &&\n (onUncaughtError = options.onUncaughtError),\n void 0 !== options.onCaughtError &&\n (onCaughtError = options.onCaughtError),\n void 0 !== options.onRecoverableError &&\n (onRecoverableError = options.onRecoverableError));\n options = createFiberRoot(\n container,\n 1,\n !1,\n null,\n null,\n isStrictMode,\n identifierPrefix,\n null,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n defaultOnDefaultTransitionIndicator\n );\n container[internalContainerInstanceKey] = options.current;\n listenToAllSupportedEvents(container);\n return new ReactDOMRoot(options);\n };\n exports.hydrateRoot = function (container, initialChildren, options) {\n if (!isValidContainer(container))\n throw Error(\"Target container is not a DOM element.\");\n warnIfReactDOMContainerInDEV(container);\n void 0 === initialChildren &&\n console.error(\n \"Must provide initial children as second argument to hydrateRoot. Example usage: hydrateRoot(domContainer, <App />)\"\n );\n var isStrictMode = !1,\n identifierPrefix = \"\",\n onUncaughtError = defaultOnUncaughtError,\n onCaughtError = defaultOnCaughtError,\n onRecoverableError = defaultOnRecoverableError,\n formState = null;\n null !== options &&\n void 0 !== options &&\n (!0 === options.unstable_strictMode && (isStrictMode = !0),\n void 0 !== options.identifierPrefix &&\n (identifierPrefix = options.identifierPrefix),\n void 0 !== options.onUncaughtError &&\n (onUncaughtError = options.onUncaughtError),\n void 0 !== options.onCaughtError &&\n (onCaughtError = options.onCaughtError),\n void 0 !== options.onRecoverableError &&\n (onRecoverableError = options.onRecoverableError),\n void 0 !== options.formState && (formState = options.formState));\n initialChildren = createFiberRoot(\n container,\n 1,\n !0,\n initialChildren,\n null != options ? options : null,\n isStrictMode,\n identifierPrefix,\n formState,\n onUncaughtError,\n onCaughtError,\n onRecoverableError,\n defaultOnDefaultTransitionIndicator\n );\n initialChildren.context = getContextForSubtree(null);\n options = initialChildren.current;\n isStrictMode = requestUpdateLane(options);\n isStrictMode = getBumpedLaneForHydrationByLane(isStrictMode);\n identifierPrefix = createUpdate(isStrictMode);\n identifierPrefix.callback = null;\n enqueueUpdate(options, identifierPrefix, isStrictMode);\n options = isStrictMode;\n initialChildren.current.lanes = options;\n markRootUpdated$1(initialChildren, options);\n ensureRootIsScheduled(initialChildren);\n container[internalContainerInstanceKey] = initialChildren.current;\n listenToAllSupportedEvents(container);\n return new ReactDOMHydrationRoot(initialChildren);\n };\n exports.version = \"19.2.0-canary-97cdd5d3-20250710\";\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QtZG9tL2Nqcy9yZWFjdC1kb20tY2xpZW50LmRldmVsb3BtZW50LmpzIiwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ2E7QUFDYixLQUFxQztBQUNyQztBQUNBO0FBQ0Esd0NBQXdDLDBCQUEwQjtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBNEQ7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isd0JBQXdCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBNEQ7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNERBQTREO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLGFBQWE7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxTQUFTO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4REFBOEQsUUFBUTtBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsUUFBUTtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLGVBQWU7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsUUFBUTtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0Esd0JBQXdCLFdBQVcsZ0JBQWdCO0FBQ25ELHlCQUF5QixXQUFXLGlCQUFpQjtBQUNyRCx5QkFBeUIsV0FBVyxpQkFBaUI7QUFDckQsMEJBQTBCLFdBQVcsa0JBQWtCO0FBQ3ZELDBCQUEwQixXQUFXLGtCQUFrQjtBQUN2RCxtQ0FBbUMsV0FBVywyQkFBMkI7QUFDekUsNkJBQTZCLFdBQVcscUJBQXFCO0FBQzdELFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQztBQUMzQztBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDLFFBQVE7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGdCQUFnQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsUUFBUTtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxvQkFBb0I7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQsV0FBVztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQsWUFBWTtBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVkseURBQXlEO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHNCQUFzQjtBQUM5QztBQUNBLDRCQUE0Qix5QkFBeUI7QUFDckQ7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxvQkFBb0IsaUJBQWlCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUNBQWlDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE1BQU07QUFDeEIsa0JBQWtCLDRDQUE0QztBQUM5RCxnQkFBZ0IsZ0JBQWdCO0FBQ2hDO0FBQ0E7QUFDQSxnQkFBZ0IsTUFBTTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsYUFBYTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLDRDQUE0QztBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLE9BQU87QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHNCQUFzQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLGlCQUFpQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRUFBaUUsT0FBTztBQUN4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEMsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsaUJBQWlCO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0hBQWtILDhCQUE4QjtBQUNoSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnTkFBZ047QUFDaE47QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0pBQWtKLGlCQUFpQjtBQUNuSztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtKQUFrSixpQkFBaUIsbURBQW1ELG1CQUFtQixXQUFXLCtCQUErQjtBQUNuUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0RkFBNEYsR0FBRztBQUMvRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxrQkFBa0I7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsZUFBZTtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULCtCQUErQjtBQUMvQjtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQ7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixxQ0FBcUM7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0Isc0JBQXNCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx5QkFBeUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixNQUFNO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixrREFBa0Q7QUFDdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsb0NBQW9DO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyREFBMkQsaUJBQWlCO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RCxpQkFBaUI7QUFDMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLGtEQUFrRDtBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsNkNBQTZDO0FBQzlFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxxQ0FBcUM7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHdDQUF3QztBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QiwrQkFBK0I7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxzQkFBc0I7QUFDdEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RCxpQkFBaUI7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0QsOEJBQThCO0FBQzlFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsaUJBQWlCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGdCQUFnQjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixlQUFlO0FBQ25DO0FBQ0E7QUFDQSw0QkFBNEIscUJBQXFCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0Esa0NBQWtDLG9CQUFvQjtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsT0FBTztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isc0JBQXNCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLHNCQUFzQjtBQUNoRCxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLDBCQUEwQjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlELGlCQUFpQjtBQUMxRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyx5Q0FBeUM7QUFDMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaU1BQWlNLEdBQUc7QUFDcE07QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw0QkFBNEI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyw0QkFBNEI7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsNkJBQTZCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFlBQVk7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLDRCQUE0QjtBQUN6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0MsUUFBUTtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwTUFBME0sR0FBRztBQUM3TTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsZ0RBQWdEO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLGVBQWU7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsdUJBQXVCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyw4QkFBOEI7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQiw0Q0FBNEM7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGVBQWU7QUFDZjtBQUNBLDBDQUEwQyxvQkFBb0I7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxpQkFBaUI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLGlCQUFpQjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQix1QkFBdUI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLGlCQUFpQjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxpQkFBaUI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxvQ0FBb0M7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxZQUFZLG9CQUFvQixxQ0FBcUM7QUFDckU7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLG1CQUFtQjtBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RDtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsaUNBQWlDO0FBQ3BFO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULFFBQVE7QUFDUjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsdUJBQXVCO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsK0JBQStCO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLE1BQU07QUFDL0IseUJBQXlCLElBQUk7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsVUFBVSxvREFBb0Q7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlFQUFpRTtBQUNqRTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsK0NBQStDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDRDQUE0QztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELGtCQUFrQjtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLDBCQUEwQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxzQkFBc0I7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLHNCQUFzQjtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtELDBCQUEwQjtBQUM1RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLHdDQUF3QztBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RCxhQUFhO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsbUNBQW1DO0FBQzdFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyx1QkFBdUI7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxnQkFBZ0I7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixzQ0FBc0M7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFELGtCQUFrQjtBQUN2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsZ0NBQWdDLDhFQUE4RSxpQkFBaUIsZ0JBQWdCLEdBQUcsYUFBYTtBQUM5TDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEIsZUFBZSx3QkFBd0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0Q7QUFDdEQsY0FBYztBQUNkO0FBQ0EsK0NBQStDO0FBQy9DLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLHFCQUFxQjtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixxQkFBcUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxpQkFBaUI7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHNCQUFzQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxzQkFBc0I7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLHVCQUF1QjtBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLHVCQUF1QjtBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLHVCQUF1QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsc0JBQXNCO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsc0JBQXNCO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLHNCQUFzQjtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsc0JBQXNCO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLHNCQUFzQjtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxzQkFBc0I7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsc0JBQXNCO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLHNCQUFzQjtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsc0JBQXNCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxzQkFBc0I7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsc0JBQXNCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsc0JBQXNCO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxxQkFBcUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxxQkFBcUI7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLGdCQUFnQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsdUJBQXVCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxXQUFXO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsMEJBQTBCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEseUJBQXlCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsMkNBQTJDO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsZ0JBQWdCO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUNBQWlDO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZNQUE2TSwwQ0FBMEMsRUFBRTtBQUN6UDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsc0JBQXNCO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNktBQTZLLDBDQUEwQyxFQUFFO0FBQ3pOO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsZUFBZTtBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsMEJBQTBCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlELGtCQUFrQjtBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLG9CQUFvQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLG9DQUFvQztBQUMvRDtBQUNBO0FBQ0EsMkJBQTJCLG9DQUFvQztBQUMvRDtBQUNBLDJCQUEyQixxQkFBcUI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsb0NBQW9DO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEhBQTRILG1CQUFtQixXQUFXLCtCQUErQjtBQUN6TDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1RUFBdUUsWUFBWTtBQUNuRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVFQUF1RSxZQUFZO0FBQ25GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsaUNBQWlDO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsdUJBQXVCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtIQUFrSCw4QkFBOEI7QUFDaEo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRCxvQkFBb0I7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRCxlQUFlO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxVQUFVO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx5QkFBeUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx5QkFBeUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHlCQUF5QjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxjQUFjO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixtQkFBbUI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLGdCQUFnQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsK0JBQStCO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkhBQTZILEtBQUssYUFBYSxLQUFLO0FBQ3BKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUlBQWlJLEtBQUssYUFBYSxLQUFLO0FBQ3hKO0FBQ0E7QUFDQSwwRkFBMEYsS0FBSztBQUMvRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFVBQVU7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3RUFBd0U7QUFDeEU7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQsWUFBWTtBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCxPQUFPO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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Q0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQztBQUNwQyxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1Asa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QztBQUM1QywyQkFBMkI7QUFDM0IsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxrQ0FBa0Msb0JBQW9CLG9CQUFvQjtBQUMxRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0Esb0NBQW9DLHlCQUF5QixpQkFBaUI7QUFDOUU7QUFDQSxxQ0FBcUMsc0JBQXNCLGtCQUFrQjtBQUM3RTtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLDJDQUEyQyxvQkFBb0IsU0FBUztBQUN4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1Asd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLHVDQUF1QztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxnQkFBZ0I7QUFDaEIsb0NBQW9DLE9BQU87QUFDM0Msc0NBQXNDLE9BQU87QUFDN0M7QUFDQSxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRDtBQUMzRDtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFEO0FBQ3JELDJEQUEyRDtBQUMzRCxrREFBa0Q7QUFDbEQsaURBQWlEO0FBQ2pEO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixlQUFlO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0Isb0NBQW9DO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIseUJBQXlCO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixrQ0FBa0M7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLHFCQUFxQjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixxQ0FBcUM7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSw2QkFBNkIsZ0VBQWdFLGVBQWUsb0NBQW9DO0FBQ2hKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxrQkFBa0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0pBQStKLHlCQUF5QjtBQUN4TDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksbUJBQW1CO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksZUFBZTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUciLCJzb3VyY2VzIjpbIi9ob21lL05pY2hvbGFpL0RvY3VtZW50cy9EZXYvYmlvaGF6YXJkLXZmeC0xL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QtZG9tL2Nqcy9yZWFjdC1kb20tY2xpZW50LmRldmVsb3BtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHJlYWN0LWRvbS1jbGllbnQuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbi8qXG4gTW9kZXJuaXpyIDMuMC4wcHJlIChDdXN0b20gQnVpbGQpIHwgTUlUXG4qL1xuXCJ1c2Ugc3RyaWN0XCI7XG5cInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgJiZcbiAgKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBmaW5kSG9vayhmaWJlciwgaWQpIHtcbiAgICAgIGZvciAoZmliZXIgPSBmaWJlci5tZW1vaXplZFN0YXRlOyBudWxsICE9PSBmaWJlciAmJiAwIDwgaWQ7IClcbiAgICAgICAgKGZpYmVyID0gZmliZXIubmV4dCksIGlkLS07XG4gICAgICByZXR1cm4gZmliZXI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvcHlXaXRoU2V0SW1wbChvYmosIHBhdGgsIGluZGV4LCB2YWx1ZSkge1xuICAgICAgaWYgKGluZGV4ID49IHBhdGgubGVuZ3RoKSByZXR1cm4gdmFsdWU7XG4gICAgICB2YXIga2V5ID0gcGF0aFtpbmRleF0sXG4gICAgICAgIHVwZGF0ZWQgPSBpc0FycmF5SW1wbChvYmopID8gb2JqLnNsaWNlKCkgOiBhc3NpZ24oe30sIG9iaik7XG4gICAgICB1cGRhdGVkW2tleV0gPSBjb3B5V2l0aFNldEltcGwob2JqW2tleV0sIHBhdGgsIGluZGV4ICsgMSwgdmFsdWUpO1xuICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvcHlXaXRoUmVuYW1lKG9iaiwgb2xkUGF0aCwgbmV3UGF0aCkge1xuICAgICAgaWYgKG9sZFBhdGgubGVuZ3RoICE9PSBuZXdQYXRoLmxlbmd0aClcbiAgICAgICAgY29uc29sZS53YXJuKFwiY29weVdpdGhSZW5hbWUoKSBleHBlY3RzIHBhdGhzIG9mIHRoZSBzYW1lIGxlbmd0aFwiKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld1BhdGgubGVuZ3RoIC0gMTsgaSsrKVxuICAgICAgICAgIGlmIChvbGRQYXRoW2ldICE9PSBuZXdQYXRoW2ldKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgIFwiY29weVdpdGhSZW5hbWUoKSBleHBlY3RzIHBhdGhzIHRvIGJlIHRoZSBzYW1lIGV4Y2VwdCBmb3IgdGhlIGRlZXBlc3Qga2V5XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29weVdpdGhSZW5hbWVJbXBsKG9iaiwgb2xkUGF0aCwgbmV3UGF0aCwgMCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvcHlXaXRoUmVuYW1lSW1wbChvYmosIG9sZFBhdGgsIG5ld1BhdGgsIGluZGV4KSB7XG4gICAgICB2YXIgb2xkS2V5ID0gb2xkUGF0aFtpbmRleF0sXG4gICAgICAgIHVwZGF0ZWQgPSBpc0FycmF5SW1wbChvYmopID8gb2JqLnNsaWNlKCkgOiBhc3NpZ24oe30sIG9iaik7XG4gICAgICBpbmRleCArIDEgPT09IG9sZFBhdGgubGVuZ3RoXG4gICAgICAgID8gKCh1cGRhdGVkW25ld1BhdGhbaW5kZXhdXSA9IHVwZGF0ZWRbb2xkS2V5XSksXG4gICAgICAgICAgaXNBcnJheUltcGwodXBkYXRlZClcbiAgICAgICAgICAgID8gdXBkYXRlZC5zcGxpY2Uob2xkS2V5LCAxKVxuICAgICAgICAgICAgOiBkZWxldGUgdXBkYXRlZFtvbGRLZXldKVxuICAgICAgICA6ICh1cGRhdGVkW29sZEtleV0gPSBjb3B5V2l0aFJlbmFtZUltcGwoXG4gICAgICAgICAgICBvYmpbb2xkS2V5XSxcbiAgICAgICAgICAgIG9sZFBhdGgsXG4gICAgICAgICAgICBuZXdQYXRoLFxuICAgICAgICAgICAgaW5kZXggKyAxXG4gICAgICAgICAgKSk7XG4gICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29weVdpdGhEZWxldGVJbXBsKG9iaiwgcGF0aCwgaW5kZXgpIHtcbiAgICAgIHZhciBrZXkgPSBwYXRoW2luZGV4XSxcbiAgICAgICAgdXBkYXRlZCA9IGlzQXJyYXlJbXBsKG9iaikgPyBvYmouc2xpY2UoKSA6IGFzc2lnbih7fSwgb2JqKTtcbiAgICAgIGlmIChpbmRleCArIDEgPT09IHBhdGgubGVuZ3RoKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGlzQXJyYXlJbXBsKHVwZGF0ZWQpID8gdXBkYXRlZC5zcGxpY2Uoa2V5LCAxKSA6IGRlbGV0ZSB1cGRhdGVkW2tleV0sXG4gICAgICAgICAgdXBkYXRlZFxuICAgICAgICApO1xuICAgICAgdXBkYXRlZFtrZXldID0gY29weVdpdGhEZWxldGVJbXBsKG9ialtrZXldLCBwYXRoLCBpbmRleCArIDEpO1xuICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNob3VsZFN1c3BlbmRJbXBsKCkge1xuICAgICAgcmV0dXJuICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzaG91bGRFcnJvckltcGwoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2FybkludmFsaWRIb29rQWNjZXNzKCkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCJEbyBub3QgY2FsbCBIb29rcyBpbnNpZGUgdXNlRWZmZWN0KC4uLiksIHVzZU1lbW8oLi4uKSwgb3Igb3RoZXIgYnVpbHQtaW4gSG9va3MuIFlvdSBjYW4gb25seSBjYWxsIEhvb2tzIGF0IHRoZSB0b3AgbGV2ZWwgb2YgeW91ciBSZWFjdCBmdW5jdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwczovL3JlYWN0LmRldi9saW5rL3J1bGVzLW9mLWhvb2tzXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhcm5JbnZhbGlkQ29udGV4dEFjY2VzcygpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIFwiQ29udGV4dCBjYW4gb25seSBiZSByZWFkIHdoaWxlIFJlYWN0IGlzIHJlbmRlcmluZy4gSW4gY2xhc3NlcywgeW91IGNhbiByZWFkIGl0IGluIHRoZSByZW5kZXIgbWV0aG9kIG9yIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gSW4gZnVuY3Rpb24gY29tcG9uZW50cywgeW91IGNhbiByZWFkIGl0IGRpcmVjdGx5IGluIHRoZSBmdW5jdGlvbiBib2R5LCBidXQgbm90IGluc2lkZSBIb29rcyBsaWtlIHVzZVJlZHVjZXIoKSBvciB1c2VNZW1vKCkuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vb3AoKSB7fVxuICAgIGZ1bmN0aW9uIHdhcm5Gb3JNaXNzaW5nS2V5KCkge31cbiAgICBmdW5jdGlvbiBzZXRUb1NvcnRlZFN0cmluZyhzZXQpIHtcbiAgICAgIHZhciBhcnJheSA9IFtdO1xuICAgICAgc2V0LmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGFycmF5LnB1c2godmFsdWUpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYXJyYXkuc29ydCgpLmpvaW4oXCIsIFwiKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRmliZXIodGFnLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSkge1xuICAgICAgcmV0dXJuIG5ldyBGaWJlck5vZGUodGFnLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNjaGVkdWxlUm9vdChyb290LCBlbGVtZW50KSB7XG4gICAgICByb290LmNvbnRleHQgPT09IGVtcHR5Q29udGV4dE9iamVjdCAmJlxuICAgICAgICAodXBkYXRlQ29udGFpbmVySW1wbChyb290LmN1cnJlbnQsIDIsIGVsZW1lbnQsIHJvb3QsIG51bGwsIG51bGwpLFxuICAgICAgICBmbHVzaFN5bmNXb3JrJDEoKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNjaGVkdWxlUmVmcmVzaChyb290LCB1cGRhdGUpIHtcbiAgICAgIGlmIChudWxsICE9PSByZXNvbHZlRmFtaWx5KSB7XG4gICAgICAgIHZhciBzdGFsZUZhbWlsaWVzID0gdXBkYXRlLnN0YWxlRmFtaWxpZXM7XG4gICAgICAgIHVwZGF0ZSA9IHVwZGF0ZS51cGRhdGVkRmFtaWxpZXM7XG4gICAgICAgIGZsdXNoUGVuZGluZ0VmZmVjdHMoKTtcbiAgICAgICAgc2NoZWR1bGVGaWJlcnNXaXRoRmFtaWxpZXNSZWN1cnNpdmVseShcbiAgICAgICAgICByb290LmN1cnJlbnQsXG4gICAgICAgICAgdXBkYXRlLFxuICAgICAgICAgIHN0YWxlRmFtaWxpZXNcbiAgICAgICAgKTtcbiAgICAgICAgZmx1c2hTeW5jV29yayQxKCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNldFJlZnJlc2hIYW5kbGVyKGhhbmRsZXIpIHtcbiAgICAgIHJlc29sdmVGYW1pbHkgPSBoYW5kbGVyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc1ZhbGlkQ29udGFpbmVyKG5vZGUpIHtcbiAgICAgIHJldHVybiAhKFxuICAgICAgICAhbm9kZSB8fFxuICAgICAgICAoMSAhPT0gbm9kZS5ub2RlVHlwZSAmJiA5ICE9PSBub2RlLm5vZGVUeXBlICYmIDExICE9PSBub2RlLm5vZGVUeXBlKVxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcikge1xuICAgICAgdmFyIG5vZGUgPSBmaWJlcixcbiAgICAgICAgbmVhcmVzdE1vdW50ZWQgPSBmaWJlcjtcbiAgICAgIGlmIChmaWJlci5hbHRlcm5hdGUpIGZvciAoOyBub2RlLnJldHVybjsgKSBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICBlbHNlIHtcbiAgICAgICAgZmliZXIgPSBub2RlO1xuICAgICAgICBkb1xuICAgICAgICAgIChub2RlID0gZmliZXIpLFxuICAgICAgICAgICAgMCAhPT0gKG5vZGUuZmxhZ3MgJiA0MDk4KSAmJiAobmVhcmVzdE1vdW50ZWQgPSBub2RlLnJldHVybiksXG4gICAgICAgICAgICAoZmliZXIgPSBub2RlLnJldHVybik7XG4gICAgICAgIHdoaWxlIChmaWJlcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gMyA9PT0gbm9kZS50YWcgPyBuZWFyZXN0TW91bnRlZCA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFN1c3BlbnNlSW5zdGFuY2VGcm9tRmliZXIoZmliZXIpIHtcbiAgICAgIGlmICgxMyA9PT0gZmliZXIudGFnKSB7XG4gICAgICAgIHZhciBzdXNwZW5zZVN0YXRlID0gZmliZXIubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgbnVsbCA9PT0gc3VzcGVuc2VTdGF0ZSAmJlxuICAgICAgICAgICgoZmliZXIgPSBmaWJlci5hbHRlcm5hdGUpLFxuICAgICAgICAgIG51bGwgIT09IGZpYmVyICYmIChzdXNwZW5zZVN0YXRlID0gZmliZXIubWVtb2l6ZWRTdGF0ZSkpO1xuICAgICAgICBpZiAobnVsbCAhPT0gc3VzcGVuc2VTdGF0ZSkgcmV0dXJuIHN1c3BlbnNlU3RhdGUuZGVoeWRyYXRlZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRBY3Rpdml0eUluc3RhbmNlRnJvbUZpYmVyKGZpYmVyKSB7XG4gICAgICBpZiAoMzEgPT09IGZpYmVyLnRhZykge1xuICAgICAgICB2YXIgYWN0aXZpdHlTdGF0ZSA9IGZpYmVyLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIG51bGwgPT09IGFjdGl2aXR5U3RhdGUgJiZcbiAgICAgICAgICAoKGZpYmVyID0gZmliZXIuYWx0ZXJuYXRlKSxcbiAgICAgICAgICBudWxsICE9PSBmaWJlciAmJiAoYWN0aXZpdHlTdGF0ZSA9IGZpYmVyLm1lbW9pemVkU3RhdGUpKTtcbiAgICAgICAgaWYgKG51bGwgIT09IGFjdGl2aXR5U3RhdGUpIHJldHVybiBhY3Rpdml0eVN0YXRlLmRlaHlkcmF0ZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gYXNzZXJ0SXNNb3VudGVkKGZpYmVyKSB7XG4gICAgICBpZiAoZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcikgIT09IGZpYmVyKVxuICAgICAgICB0aHJvdyBFcnJvcihcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoKGZpYmVyKSB7XG4gICAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuICAgICAgaWYgKCFhbHRlcm5hdGUpIHtcbiAgICAgICAgYWx0ZXJuYXRlID0gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcik7XG4gICAgICAgIGlmIChudWxsID09PSBhbHRlcm5hdGUpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXCIpO1xuICAgICAgICByZXR1cm4gYWx0ZXJuYXRlICE9PSBmaWJlciA/IG51bGwgOiBmaWJlcjtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGEgPSBmaWJlciwgYiA9IGFsdGVybmF0ZTsgOyApIHtcbiAgICAgICAgdmFyIHBhcmVudEEgPSBhLnJldHVybjtcbiAgICAgICAgaWYgKG51bGwgPT09IHBhcmVudEEpIGJyZWFrO1xuICAgICAgICB2YXIgcGFyZW50QiA9IHBhcmVudEEuYWx0ZXJuYXRlO1xuICAgICAgICBpZiAobnVsbCA9PT0gcGFyZW50Qikge1xuICAgICAgICAgIGIgPSBwYXJlbnRBLnJldHVybjtcbiAgICAgICAgICBpZiAobnVsbCAhPT0gYikge1xuICAgICAgICAgICAgYSA9IGI7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcmVudEEuY2hpbGQgPT09IHBhcmVudEIuY2hpbGQpIHtcbiAgICAgICAgICBmb3IgKHBhcmVudEIgPSBwYXJlbnRBLmNoaWxkOyBwYXJlbnRCOyApIHtcbiAgICAgICAgICAgIGlmIChwYXJlbnRCID09PSBhKSByZXR1cm4gYXNzZXJ0SXNNb3VudGVkKHBhcmVudEEpLCBmaWJlcjtcbiAgICAgICAgICAgIGlmIChwYXJlbnRCID09PSBiKSByZXR1cm4gYXNzZXJ0SXNNb3VudGVkKHBhcmVudEEpLCBhbHRlcm5hdGU7XG4gICAgICAgICAgICBwYXJlbnRCID0gcGFyZW50Qi5zaWJsaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBFcnJvcihcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGEucmV0dXJuICE9PSBiLnJldHVybikgKGEgPSBwYXJlbnRBKSwgKGIgPSBwYXJlbnRCKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZm9yICh2YXIgZGlkRmluZENoaWxkID0gITEsIF9jaGlsZCA9IHBhcmVudEEuY2hpbGQ7IF9jaGlsZDsgKSB7XG4gICAgICAgICAgICBpZiAoX2NoaWxkID09PSBhKSB7XG4gICAgICAgICAgICAgIGRpZEZpbmRDaGlsZCA9ICEwO1xuICAgICAgICAgICAgICBhID0gcGFyZW50QTtcbiAgICAgICAgICAgICAgYiA9IHBhcmVudEI7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKF9jaGlsZCA9PT0gYikge1xuICAgICAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSAhMDtcbiAgICAgICAgICAgICAgYiA9IHBhcmVudEE7XG4gICAgICAgICAgICAgIGEgPSBwYXJlbnRCO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9jaGlsZCA9IF9jaGlsZC5zaWJsaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWRpZEZpbmRDaGlsZCkge1xuICAgICAgICAgICAgZm9yIChfY2hpbGQgPSBwYXJlbnRCLmNoaWxkOyBfY2hpbGQ7ICkge1xuICAgICAgICAgICAgICBpZiAoX2NoaWxkID09PSBhKSB7XG4gICAgICAgICAgICAgICAgZGlkRmluZENoaWxkID0gITA7XG4gICAgICAgICAgICAgICAgYSA9IHBhcmVudEI7XG4gICAgICAgICAgICAgICAgYiA9IHBhcmVudEE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKF9jaGlsZCA9PT0gYikge1xuICAgICAgICAgICAgICAgIGRpZEZpbmRDaGlsZCA9ICEwO1xuICAgICAgICAgICAgICAgIGIgPSBwYXJlbnRCO1xuICAgICAgICAgICAgICAgIGEgPSBwYXJlbnRBO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF9jaGlsZCA9IF9jaGlsZC5zaWJsaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFkaWRGaW5kQ2hpbGQpXG4gICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiQ2hpbGQgd2FzIG5vdCBmb3VuZCBpbiBlaXRoZXIgcGFyZW50IHNldC4gVGhpcyBpbmRpY2F0ZXMgYSBidWcgaW4gUmVhY3QgcmVsYXRlZCB0byB0aGUgcmV0dXJuIHBvaW50ZXIuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChhLmFsdGVybmF0ZSAhPT0gYilcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIFwiUmV0dXJuIGZpYmVycyBzaG91bGQgYWx3YXlzIGJlIGVhY2ggb3RoZXJzJyBhbHRlcm5hdGVzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICgzICE9PSBhLnRhZylcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXCIpO1xuICAgICAgcmV0dXJuIGEuc3RhdGVOb2RlLmN1cnJlbnQgPT09IGEgPyBmaWJlciA6IGFsdGVybmF0ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZEN1cnJlbnRIb3N0RmliZXJJbXBsKG5vZGUpIHtcbiAgICAgIHZhciB0YWcgPSBub2RlLnRhZztcbiAgICAgIGlmICg1ID09PSB0YWcgfHwgMjYgPT09IHRhZyB8fCAyNyA9PT0gdGFnIHx8IDYgPT09IHRhZykgcmV0dXJuIG5vZGU7XG4gICAgICBmb3IgKG5vZGUgPSBub2RlLmNoaWxkOyBudWxsICE9PSBub2RlOyApIHtcbiAgICAgICAgdGFnID0gZmluZEN1cnJlbnRIb3N0RmliZXJJbXBsKG5vZGUpO1xuICAgICAgICBpZiAobnVsbCAhPT0gdGFnKSByZXR1cm4gdGFnO1xuICAgICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICAgICAgaWYgKG51bGwgPT09IG1heWJlSXRlcmFibGUgfHwgXCJvYmplY3RcIiAhPT0gdHlwZW9mIG1heWJlSXRlcmFibGUpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgbWF5YmVJdGVyYWJsZSA9XG4gICAgICAgIChNQVlCRV9JVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtNQVlCRV9JVEVSQVRPUl9TWU1CT0xdKSB8fFxuICAgICAgICBtYXliZUl0ZXJhYmxlW1wiQEBpdGVyYXRvclwiXTtcbiAgICAgIHJldHVybiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBtYXliZUl0ZXJhYmxlID8gbWF5YmVJdGVyYWJsZSA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKSB7XG4gICAgICBpZiAobnVsbCA9PSB0eXBlKSByZXR1cm4gbnVsbDtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0eXBlKVxuICAgICAgICByZXR1cm4gdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRVxuICAgICAgICAgID8gbnVsbFxuICAgICAgICAgIDogdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgICAgIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgdHlwZSkgcmV0dXJuIHR5cGU7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIkZyYWdtZW50XCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJQcm9maWxlclwiO1xuICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiU3RyaWN0TW9kZVwiO1xuICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiU3VzcGVuc2VcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiU3VzcGVuc2VMaXN0XCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfQUNUSVZJVFlfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJBY3Rpdml0eVwiO1xuICAgICAgfVxuICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiB0eXBlKVxuICAgICAgICBzd2l0Y2ggKFxuICAgICAgICAgIChcIm51bWJlclwiID09PSB0eXBlb2YgdHlwZS50YWcgJiZcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKCkuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB0eXBlLiQkdHlwZW9mKVxuICAgICAgICApIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIFwiUG9ydGFsXCI7XG4gICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCBcIkNvbnRleHRcIjtcbiAgICAgICAgICBjYXNlIFJFQUNUX0NPTlNVTUVSX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gKHR5cGUuX2NvbnRleHQuZGlzcGxheU5hbWUgfHwgXCJDb250ZXh0XCIpICsgXCIuQ29uc3VtZXJcIjtcbiAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICB2YXIgaW5uZXJUeXBlID0gdHlwZS5yZW5kZXI7XG4gICAgICAgICAgICB0eXBlID0gdHlwZS5kaXNwbGF5TmFtZTtcbiAgICAgICAgICAgIHR5cGUgfHxcbiAgICAgICAgICAgICAgKCh0eXBlID0gaW5uZXJUeXBlLmRpc3BsYXlOYW1lIHx8IGlubmVyVHlwZS5uYW1lIHx8IFwiXCIpLFxuICAgICAgICAgICAgICAodHlwZSA9IFwiXCIgIT09IHR5cGUgPyBcIkZvcndhcmRSZWYoXCIgKyB0eXBlICsgXCIpXCIgOiBcIkZvcndhcmRSZWZcIikpO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAoaW5uZXJUeXBlID0gdHlwZS5kaXNwbGF5TmFtZSB8fCBudWxsKSxcbiAgICAgICAgICAgICAgbnVsbCAhPT0gaW5uZXJUeXBlXG4gICAgICAgICAgICAgICAgPyBpbm5lclR5cGVcbiAgICAgICAgICAgICAgICA6IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlLnR5cGUpIHx8IFwiTWVtb1wiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgaW5uZXJUeXBlID0gdHlwZS5fcGF5bG9hZDtcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlLl9pbml0O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKGlubmVyVHlwZSkpO1xuICAgICAgICAgICAgfSBjYXRjaCAoeCkge31cbiAgICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldENvbXBvbmVudE5hbWVGcm9tT3duZXIob3duZXIpIHtcbiAgICAgIHJldHVybiBcIm51bWJlclwiID09PSB0eXBlb2Ygb3duZXIudGFnXG4gICAgICAgID8gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihvd25lcilcbiAgICAgICAgOiBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3duZXIubmFtZVxuICAgICAgICAgID8gb3duZXIubmFtZVxuICAgICAgICAgIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcikge1xuICAgICAgdmFyIHR5cGUgPSBmaWJlci50eXBlO1xuICAgICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICByZXR1cm4gXCJBY3Rpdml0eVwiO1xuICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgIHJldHVybiBcIkNhY2hlXCI7XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICByZXR1cm4gKHR5cGUuX2NvbnRleHQuZGlzcGxheU5hbWUgfHwgXCJDb250ZXh0XCIpICsgXCIuQ29uc3VtZXJcIjtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCBcIkNvbnRleHRcIjtcbiAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICByZXR1cm4gXCJEZWh5ZHJhdGVkRnJhZ21lbnRcIjtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGZpYmVyID0gdHlwZS5yZW5kZXIpLFxuICAgICAgICAgICAgKGZpYmVyID0gZmliZXIuZGlzcGxheU5hbWUgfHwgZmliZXIubmFtZSB8fCBcIlwiKSxcbiAgICAgICAgICAgIHR5cGUuZGlzcGxheU5hbWUgfHxcbiAgICAgICAgICAgICAgKFwiXCIgIT09IGZpYmVyID8gXCJGb3J3YXJkUmVmKFwiICsgZmliZXIgKyBcIilcIiA6IFwiRm9yd2FyZFJlZlwiKVxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICByZXR1cm4gXCJGcmFnbWVudFwiO1xuICAgICAgICBjYXNlIDI2OlxuICAgICAgICBjYXNlIDI3OlxuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gXCJQb3J0YWxcIjtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBcIlJvb3RcIjtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiBcIlRleHRcIjtcbiAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpO1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgcmV0dXJuIHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPyBcIlN0cmljdE1vZGVcIiA6IFwiTW9kZVwiO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIHJldHVybiBcIk9mZnNjcmVlblwiO1xuICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgIHJldHVybiBcIlByb2ZpbGVyXCI7XG4gICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgcmV0dXJuIFwiU2NvcGVcIjtcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICByZXR1cm4gXCJTdXNwZW5zZVwiO1xuICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlTGlzdFwiO1xuICAgICAgICBjYXNlIDI1OlxuICAgICAgICAgIHJldHVybiBcIlRyYWNpbmdNYXJrZXJcIjtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTQ6XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHR5cGUpXG4gICAgICAgICAgICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgICAgICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHR5cGUpIHJldHVybiB0eXBlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI5OlxuICAgICAgICAgIHR5cGUgPSBmaWJlci5fZGVidWdJbmZvO1xuICAgICAgICAgIGlmIChudWxsICE9IHR5cGUpXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gdHlwZS5sZW5ndGggLSAxOyAwIDw9IGk7IGktLSlcbiAgICAgICAgICAgICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiB0eXBlW2ldLm5hbWUpIHJldHVybiB0eXBlW2ldLm5hbWU7XG4gICAgICAgICAgaWYgKG51bGwgIT09IGZpYmVyLnJldHVybilcbiAgICAgICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyLnJldHVybik7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQ3Vyc29yKGRlZmF1bHRWYWx1ZSkge1xuICAgICAgcmV0dXJuIHsgY3VycmVudDogZGVmYXVsdFZhbHVlIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcChjdXJzb3IsIGZpYmVyKSB7XG4gICAgICAwID4gaW5kZXgkanNjb21wJDBcbiAgICAgICAgPyBjb25zb2xlLmVycm9yKFwiVW5leHBlY3RlZCBwb3AuXCIpXG4gICAgICAgIDogKGZpYmVyICE9PSBmaWJlclN0YWNrW2luZGV4JGpzY29tcCQwXSAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlVuZXhwZWN0ZWQgRmliZXIgcG9wcGVkLlwiKSxcbiAgICAgICAgICAoY3Vyc29yLmN1cnJlbnQgPSB2YWx1ZVN0YWNrW2luZGV4JGpzY29tcCQwXSksXG4gICAgICAgICAgKHZhbHVlU3RhY2tbaW5kZXgkanNjb21wJDBdID0gbnVsbCksXG4gICAgICAgICAgKGZpYmVyU3RhY2tbaW5kZXgkanNjb21wJDBdID0gbnVsbCksXG4gICAgICAgICAgaW5kZXgkanNjb21wJDAtLSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2goY3Vyc29yLCB2YWx1ZSwgZmliZXIpIHtcbiAgICAgIGluZGV4JGpzY29tcCQwKys7XG4gICAgICB2YWx1ZVN0YWNrW2luZGV4JGpzY29tcCQwXSA9IGN1cnNvci5jdXJyZW50O1xuICAgICAgZmliZXJTdGFja1tpbmRleCRqc2NvbXAkMF0gPSBmaWJlcjtcbiAgICAgIGN1cnNvci5jdXJyZW50ID0gdmFsdWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcXVpcmVkQ29udGV4dChjKSB7XG4gICAgICBudWxsID09PSBjICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJFeHBlY3RlZCBob3N0IGNvbnRleHQgdG8gZXhpc3QuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiBjO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoSG9zdENvbnRhaW5lcihmaWJlciwgbmV4dFJvb3RJbnN0YW5jZSkge1xuICAgICAgcHVzaChyb290SW5zdGFuY2VTdGFja0N1cnNvciwgbmV4dFJvb3RJbnN0YW5jZSwgZmliZXIpO1xuICAgICAgcHVzaChjb250ZXh0RmliZXJTdGFja0N1cnNvciwgZmliZXIsIGZpYmVyKTtcbiAgICAgIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yLCBudWxsLCBmaWJlcik7XG4gICAgICB2YXIgbmV4dFJvb3RDb250ZXh0ID0gbmV4dFJvb3RJbnN0YW5jZS5ub2RlVHlwZTtcbiAgICAgIHN3aXRjaCAobmV4dFJvb3RDb250ZXh0KSB7XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICBuZXh0Um9vdENvbnRleHQgPSA5ID09PSBuZXh0Um9vdENvbnRleHQgPyBcIiNkb2N1bWVudFwiIDogXCIjZnJhZ21lbnRcIjtcbiAgICAgICAgICBuZXh0Um9vdEluc3RhbmNlID0gKG5leHRSb290SW5zdGFuY2UgPVxuICAgICAgICAgICAgbmV4dFJvb3RJbnN0YW5jZS5kb2N1bWVudEVsZW1lbnQpXG4gICAgICAgICAgICA/IChuZXh0Um9vdEluc3RhbmNlID0gbmV4dFJvb3RJbnN0YW5jZS5uYW1lc3BhY2VVUkkpXG4gICAgICAgICAgICAgID8gZ2V0T3duSG9zdENvbnRleHQobmV4dFJvb3RJbnN0YW5jZSlcbiAgICAgICAgICAgICAgOiBIb3N0Q29udGV4dE5hbWVzcGFjZU5vbmVcbiAgICAgICAgICAgIDogSG9zdENvbnRleHROYW1lc3BhY2VOb25lO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICgobmV4dFJvb3RDb250ZXh0ID0gbmV4dFJvb3RJbnN0YW5jZS50YWdOYW1lKSxcbiAgICAgICAgICAgIChuZXh0Um9vdEluc3RhbmNlID0gbmV4dFJvb3RJbnN0YW5jZS5uYW1lc3BhY2VVUkkpKVxuICAgICAgICAgIClcbiAgICAgICAgICAgIChuZXh0Um9vdEluc3RhbmNlID0gZ2V0T3duSG9zdENvbnRleHQobmV4dFJvb3RJbnN0YW5jZSkpLFxuICAgICAgICAgICAgICAobmV4dFJvb3RJbnN0YW5jZSA9IGdldENoaWxkSG9zdENvbnRleHRQcm9kKFxuICAgICAgICAgICAgICAgIG5leHRSb290SW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgbmV4dFJvb3RDb250ZXh0XG4gICAgICAgICAgICAgICkpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHN3aXRjaCAobmV4dFJvb3RDb250ZXh0KSB7XG4gICAgICAgICAgICAgIGNhc2UgXCJzdmdcIjpcbiAgICAgICAgICAgICAgICBuZXh0Um9vdEluc3RhbmNlID0gSG9zdENvbnRleHROYW1lc3BhY2VTdmc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJtYXRoXCI6XG4gICAgICAgICAgICAgICAgbmV4dFJvb3RJbnN0YW5jZSA9IEhvc3RDb250ZXh0TmFtZXNwYWNlTWF0aDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBuZXh0Um9vdEluc3RhbmNlID0gSG9zdENvbnRleHROYW1lc3BhY2VOb25lO1xuICAgICAgICAgICAgfVxuICAgICAgfVxuICAgICAgbmV4dFJvb3RDb250ZXh0ID0gbmV4dFJvb3RDb250ZXh0LnRvTG93ZXJDYXNlKCk7XG4gICAgICBuZXh0Um9vdENvbnRleHQgPSB1cGRhdGVkQW5jZXN0b3JJbmZvRGV2KG51bGwsIG5leHRSb290Q29udGV4dCk7XG4gICAgICBuZXh0Um9vdENvbnRleHQgPSB7XG4gICAgICAgIGNvbnRleHQ6IG5leHRSb290SW5zdGFuY2UsXG4gICAgICAgIGFuY2VzdG9ySW5mbzogbmV4dFJvb3RDb250ZXh0XG4gICAgICB9O1xuICAgICAgcG9wKGNvbnRleHRTdGFja0N1cnNvciwgZmliZXIpO1xuICAgICAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IsIG5leHRSb290Q29udGV4dCwgZmliZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwb3BIb3N0Q29udGFpbmVyKGZpYmVyKSB7XG4gICAgICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gICAgICBwb3AoY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgICAgIHBvcChyb290SW5zdGFuY2VTdGFja0N1cnNvciwgZmliZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRIb3N0Q29udGV4dCgpIHtcbiAgICAgIHJldHVybiByZXF1aXJlZENvbnRleHQoY29udGV4dFN0YWNrQ3Vyc29yLmN1cnJlbnQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoSG9zdENvbnRleHQoZmliZXIpIHtcbiAgICAgIG51bGwgIT09IGZpYmVyLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgcHVzaChob3N0VHJhbnNpdGlvblByb3ZpZGVyQ3Vyc29yLCBmaWJlciwgZmliZXIpO1xuICAgICAgdmFyIGNvbnRleHQgPSByZXF1aXJlZENvbnRleHQoY29udGV4dFN0YWNrQ3Vyc29yLmN1cnJlbnQpO1xuICAgICAgdmFyIHR5cGUgPSBmaWJlci50eXBlO1xuICAgICAgdmFyIG5leHRDb250ZXh0ID0gZ2V0Q2hpbGRIb3N0Q29udGV4dFByb2QoY29udGV4dC5jb250ZXh0LCB0eXBlKTtcbiAgICAgIHR5cGUgPSB1cGRhdGVkQW5jZXN0b3JJbmZvRGV2KGNvbnRleHQuYW5jZXN0b3JJbmZvLCB0eXBlKTtcbiAgICAgIG5leHRDb250ZXh0ID0geyBjb250ZXh0OiBuZXh0Q29udGV4dCwgYW5jZXN0b3JJbmZvOiB0eXBlIH07XG4gICAgICBjb250ZXh0ICE9PSBuZXh0Q29udGV4dCAmJlxuICAgICAgICAocHVzaChjb250ZXh0RmliZXJTdGFja0N1cnNvciwgZmliZXIsIGZpYmVyKSxcbiAgICAgICAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IsIG5leHRDb250ZXh0LCBmaWJlcikpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwb3BIb3N0Q29udGV4dChmaWJlcikge1xuICAgICAgY29udGV4dEZpYmVyU3RhY2tDdXJzb3IuY3VycmVudCA9PT0gZmliZXIgJiZcbiAgICAgICAgKHBvcChjb250ZXh0U3RhY2tDdXJzb3IsIGZpYmVyKSwgcG9wKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLCBmaWJlcikpO1xuICAgICAgaG9zdFRyYW5zaXRpb25Qcm92aWRlckN1cnNvci5jdXJyZW50ID09PSBmaWJlciAmJlxuICAgICAgICAocG9wKGhvc3RUcmFuc2l0aW9uUHJvdmlkZXJDdXJzb3IsIGZpYmVyKSxcbiAgICAgICAgKEhvc3RUcmFuc2l0aW9uQ29udGV4dC5fY3VycmVudFZhbHVlID0gTm90UGVuZGluZ1RyYW5zaXRpb24pKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGlzYWJsZWRMb2coKSB7fVxuICAgIGZ1bmN0aW9uIGRpc2FibGVMb2dzKCkge1xuICAgICAgaWYgKDAgPT09IGRpc2FibGVkRGVwdGgpIHtcbiAgICAgICAgcHJldkxvZyA9IGNvbnNvbGUubG9nO1xuICAgICAgICBwcmV2SW5mbyA9IGNvbnNvbGUuaW5mbztcbiAgICAgICAgcHJldldhcm4gPSBjb25zb2xlLndhcm47XG4gICAgICAgIHByZXZFcnJvciA9IGNvbnNvbGUuZXJyb3I7XG4gICAgICAgIHByZXZHcm91cCA9IGNvbnNvbGUuZ3JvdXA7XG4gICAgICAgIHByZXZHcm91cENvbGxhcHNlZCA9IGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQ7XG4gICAgICAgIHByZXZHcm91cEVuZCA9IGNvbnNvbGUuZ3JvdXBFbmQ7XG4gICAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgICAgIGVudW1lcmFibGU6ICEwLFxuICAgICAgICAgIHZhbHVlOiBkaXNhYmxlZExvZyxcbiAgICAgICAgICB3cml0YWJsZTogITBcbiAgICAgICAgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICAgIGluZm86IHByb3BzLFxuICAgICAgICAgIGxvZzogcHJvcHMsXG4gICAgICAgICAgd2FybjogcHJvcHMsXG4gICAgICAgICAgZXJyb3I6IHByb3BzLFxuICAgICAgICAgIGdyb3VwOiBwcm9wcyxcbiAgICAgICAgICBncm91cENvbGxhcHNlZDogcHJvcHMsXG4gICAgICAgICAgZ3JvdXBFbmQ6IHByb3BzXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZGlzYWJsZWREZXB0aCsrO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWVuYWJsZUxvZ3MoKSB7XG4gICAgICBkaXNhYmxlZERlcHRoLS07XG4gICAgICBpZiAoMCA9PT0gZGlzYWJsZWREZXB0aCkge1xuICAgICAgICB2YXIgcHJvcHMgPSB7IGNvbmZpZ3VyYWJsZTogITAsIGVudW1lcmFibGU6ICEwLCB3cml0YWJsZTogITAgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICAgIGxvZzogYXNzaWduKHt9LCBwcm9wcywgeyB2YWx1ZTogcHJldkxvZyB9KSxcbiAgICAgICAgICBpbmZvOiBhc3NpZ24oe30sIHByb3BzLCB7IHZhbHVlOiBwcmV2SW5mbyB9KSxcbiAgICAgICAgICB3YXJuOiBhc3NpZ24oe30sIHByb3BzLCB7IHZhbHVlOiBwcmV2V2FybiB9KSxcbiAgICAgICAgICBlcnJvcjogYXNzaWduKHt9LCBwcm9wcywgeyB2YWx1ZTogcHJldkVycm9yIH0pLFxuICAgICAgICAgIGdyb3VwOiBhc3NpZ24oe30sIHByb3BzLCB7IHZhbHVlOiBwcmV2R3JvdXAgfSksXG4gICAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IGFzc2lnbih7fSwgcHJvcHMsIHsgdmFsdWU6IHByZXZHcm91cENvbGxhcHNlZCB9KSxcbiAgICAgICAgICBncm91cEVuZDogYXNzaWduKHt9LCBwcm9wcywgeyB2YWx1ZTogcHJldkdyb3VwRW5kIH0pXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgMCA+IGRpc2FibGVkRGVwdGggJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcImRpc2FibGVkRGVwdGggZmVsbCBiZWxvdyB6ZXJvLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmb3JtYXRPd25lclN0YWNrKGVycm9yKSB7XG4gICAgICB2YXIgcHJldlByZXBhcmVTdGFja1RyYWNlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7XG4gICAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHZvaWQgMDtcbiAgICAgIGVycm9yID0gZXJyb3Iuc3RhY2s7XG4gICAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHByZXZQcmVwYXJlU3RhY2tUcmFjZTtcbiAgICAgIGVycm9yLnN0YXJ0c1dpdGgoXCJFcnJvcjogcmVhY3Qtc3RhY2stdG9wLWZyYW1lXFxuXCIpICYmXG4gICAgICAgIChlcnJvciA9IGVycm9yLnNsaWNlKDI5KSk7XG4gICAgICBwcmV2UHJlcGFyZVN0YWNrVHJhY2UgPSBlcnJvci5pbmRleE9mKFwiXFxuXCIpO1xuICAgICAgLTEgIT09IHByZXZQcmVwYXJlU3RhY2tUcmFjZSAmJlxuICAgICAgICAoZXJyb3IgPSBlcnJvci5zbGljZShwcmV2UHJlcGFyZVN0YWNrVHJhY2UgKyAxKSk7XG4gICAgICBwcmV2UHJlcGFyZVN0YWNrVHJhY2UgPSBlcnJvci5pbmRleE9mKFwicmVhY3Rfc3RhY2tfYm90dG9tX2ZyYW1lXCIpO1xuICAgICAgLTEgIT09IHByZXZQcmVwYXJlU3RhY2tUcmFjZSAmJlxuICAgICAgICAocHJldlByZXBhcmVTdGFja1RyYWNlID0gZXJyb3IubGFzdEluZGV4T2YoXG4gICAgICAgICAgXCJcXG5cIixcbiAgICAgICAgICBwcmV2UHJlcGFyZVN0YWNrVHJhY2VcbiAgICAgICAgKSk7XG4gICAgICBpZiAoLTEgIT09IHByZXZQcmVwYXJlU3RhY2tUcmFjZSlcbiAgICAgICAgZXJyb3IgPSBlcnJvci5zbGljZSgwLCBwcmV2UHJlcGFyZVN0YWNrVHJhY2UpO1xuICAgICAgZWxzZSByZXR1cm4gXCJcIjtcbiAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSkge1xuICAgICAgaWYgKHZvaWQgMCA9PT0gcHJlZml4KVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICB2YXIgbWF0Y2ggPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO1xuICAgICAgICAgIHByZWZpeCA9IChtYXRjaCAmJiBtYXRjaFsxXSkgfHwgXCJcIjtcbiAgICAgICAgICBzdWZmaXggPVxuICAgICAgICAgICAgLTEgPCB4LnN0YWNrLmluZGV4T2YoXCJcXG4gICAgYXRcIilcbiAgICAgICAgICAgICAgPyBcIiAoPGFub255bW91cz4pXCJcbiAgICAgICAgICAgICAgOiAtMSA8IHguc3RhY2suaW5kZXhPZihcIkBcIilcbiAgICAgICAgICAgICAgICA/IFwiQHVua25vd246MDowXCJcbiAgICAgICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgIH1cbiAgICAgIHJldHVybiBcIlxcblwiICsgcHJlZml4ICsgbmFtZSArIHN1ZmZpeDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgY29uc3RydWN0KSB7XG4gICAgICBpZiAoIWZuIHx8IHJlZW50cnkpIHJldHVybiBcIlwiO1xuICAgICAgdmFyIGZyYW1lID0gY29tcG9uZW50RnJhbWVDYWNoZS5nZXQoZm4pO1xuICAgICAgaWYgKHZvaWQgMCAhPT0gZnJhbWUpIHJldHVybiBmcmFtZTtcbiAgICAgIHJlZW50cnkgPSAhMDtcbiAgICAgIGZyYW1lID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7XG4gICAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHZvaWQgMDtcbiAgICAgIHZhciBwcmV2aW91c0Rpc3BhdGNoZXIgPSBudWxsO1xuICAgICAgcHJldmlvdXNEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBudWxsO1xuICAgICAgZGlzYWJsZUxvZ3MoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBSdW5JblJvb3RGcmFtZSA9IHtcbiAgICAgICAgICBEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGlmIChjb25zdHJ1Y3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgRmFrZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmFrZS5wcm90b3R5cGUsIFwicHJvcHNcIiwge1xuICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiBSZWZsZWN0ICYmIFJlZmxlY3QuY29uc3RydWN0KSB7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChGYWtlLCBbXSk7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250cm9sID0geDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KGZuLCBbXSwgRmFrZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIEZha2UuY2FsbCgpO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoeCQwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2wgPSB4JDA7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBmbi5jYWxsKEZha2UucHJvdG90eXBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoeCQxKSB7XG4gICAgICAgICAgICAgICAgICBjb250cm9sID0geCQxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAoRmFrZSA9IGZuKCkpICYmXG4gICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBGYWtlLmNhdGNoICYmXG4gICAgICAgICAgICAgICAgICBGYWtlLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoc2FtcGxlKSB7XG4gICAgICAgICAgICAgIGlmIChzYW1wbGUgJiYgY29udHJvbCAmJiBcInN0cmluZ1wiID09PSB0eXBlb2Ygc2FtcGxlLnN0YWNrKVxuICAgICAgICAgICAgICAgIHJldHVybiBbc2FtcGxlLnN0YWNrLCBjb250cm9sLnN0YWNrXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbbnVsbCwgbnVsbF07XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QuZGlzcGxheU5hbWUgPVxuICAgICAgICAgIFwiRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290XCI7XG4gICAgICAgIHZhciBuYW1lUHJvcERlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICAgIFJ1bkluUm9vdEZyYW1lLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCxcbiAgICAgICAgICBcIm5hbWVcIlxuICAgICAgICApO1xuICAgICAgICBuYW1lUHJvcERlc2NyaXB0b3IgJiZcbiAgICAgICAgICBuYW1lUHJvcERlc2NyaXB0b3IuY29uZmlndXJhYmxlICYmXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICAgICAgUnVuSW5Sb290RnJhbWUuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290LFxuICAgICAgICAgICAgXCJuYW1lXCIsXG4gICAgICAgICAgICB7IHZhbHVlOiBcIkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdFwiIH1cbiAgICAgICAgICApO1xuICAgICAgICB2YXIgX1J1bkluUm9vdEZyYW1lJERldGVyID1cbiAgICAgICAgICAgIFJ1bkluUm9vdEZyYW1lLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCgpLFxuICAgICAgICAgIHNhbXBsZVN0YWNrID0gX1J1bkluUm9vdEZyYW1lJERldGVyWzBdLFxuICAgICAgICAgIGNvbnRyb2xTdGFjayA9IF9SdW5JblJvb3RGcmFtZSREZXRlclsxXTtcbiAgICAgICAgaWYgKHNhbXBsZVN0YWNrICYmIGNvbnRyb2xTdGFjaykge1xuICAgICAgICAgIHZhciBzYW1wbGVMaW5lcyA9IHNhbXBsZVN0YWNrLnNwbGl0KFwiXFxuXCIpLFxuICAgICAgICAgICAgY29udHJvbExpbmVzID0gY29udHJvbFN0YWNrLnNwbGl0KFwiXFxuXCIpO1xuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgPSBuYW1lUHJvcERlc2NyaXB0b3IgPSAwO1xuICAgICAgICAgICAgbmFtZVByb3BEZXNjcmlwdG9yIDwgc2FtcGxlTGluZXMubGVuZ3RoICYmXG4gICAgICAgICAgICAhc2FtcGxlTGluZXNbbmFtZVByb3BEZXNjcmlwdG9yXS5pbmNsdWRlcyhcbiAgICAgICAgICAgICAgXCJEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3RcIlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIClcbiAgICAgICAgICAgIG5hbWVQcm9wRGVzY3JpcHRvcisrO1xuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICA7XG4gICAgICAgICAgICBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgPCBjb250cm9sTGluZXMubGVuZ3RoICYmXG4gICAgICAgICAgICAhY29udHJvbExpbmVzW19SdW5JblJvb3RGcmFtZSREZXRlcl0uaW5jbHVkZXMoXG4gICAgICAgICAgICAgIFwiRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290XCJcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICApXG4gICAgICAgICAgICBfUnVuSW5Sb290RnJhbWUkRGV0ZXIrKztcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBuYW1lUHJvcERlc2NyaXB0b3IgPT09IHNhbXBsZUxpbmVzLmxlbmd0aCB8fFxuICAgICAgICAgICAgX1J1bkluUm9vdEZyYW1lJERldGVyID09PSBjb250cm9sTGluZXMubGVuZ3RoXG4gICAgICAgICAgKVxuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgbmFtZVByb3BEZXNjcmlwdG9yID0gc2FtcGxlTGluZXMubGVuZ3RoIC0gMSxcbiAgICAgICAgICAgICAgICBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgPSBjb250cm9sTGluZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgMSA8PSBuYW1lUHJvcERlc2NyaXB0b3IgJiZcbiAgICAgICAgICAgICAgMCA8PSBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgJiZcbiAgICAgICAgICAgICAgc2FtcGxlTGluZXNbbmFtZVByb3BEZXNjcmlwdG9yXSAhPT1cbiAgICAgICAgICAgICAgICBjb250cm9sTGluZXNbX1J1bkluUm9vdEZyYW1lJERldGVyXTtcblxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBfUnVuSW5Sb290RnJhbWUkRGV0ZXItLTtcbiAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgO1xuICAgICAgICAgICAgMSA8PSBuYW1lUHJvcERlc2NyaXB0b3IgJiYgMCA8PSBfUnVuSW5Sb290RnJhbWUkRGV0ZXI7XG4gICAgICAgICAgICBuYW1lUHJvcERlc2NyaXB0b3ItLSwgX1J1bkluUm9vdEZyYW1lJERldGVyLS1cbiAgICAgICAgICApXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHNhbXBsZUxpbmVzW25hbWVQcm9wRGVzY3JpcHRvcl0gIT09XG4gICAgICAgICAgICAgIGNvbnRyb2xMaW5lc1tfUnVuSW5Sb290RnJhbWUkRGV0ZXJdXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaWYgKDEgIT09IG5hbWVQcm9wRGVzY3JpcHRvciB8fCAxICE9PSBfUnVuSW5Sb290RnJhbWUkRGV0ZXIpIHtcbiAgICAgICAgICAgICAgICBkb1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAobmFtZVByb3BEZXNjcmlwdG9yLS0sXG4gICAgICAgICAgICAgICAgICAgIF9SdW5JblJvb3RGcmFtZSREZXRlci0tLFxuICAgICAgICAgICAgICAgICAgICAwID4gX1J1bkluUm9vdEZyYW1lJERldGVyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgc2FtcGxlTGluZXNbbmFtZVByb3BEZXNjcmlwdG9yXSAhPT1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xMaW5lc1tfUnVuSW5Sb290RnJhbWUkRGV0ZXJdKVxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfZnJhbWUgPVxuICAgICAgICAgICAgICAgICAgICAgIFwiXFxuXCIgK1xuICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZUxpbmVzW25hbWVQcm9wRGVzY3JpcHRvcl0ucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiIGF0IG5ldyBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiIGF0IFwiXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgZm4uZGlzcGxheU5hbWUgJiZcbiAgICAgICAgICAgICAgICAgICAgICBfZnJhbWUuaW5jbHVkZXMoXCI8YW5vbnltb3VzPlwiKSAmJlxuICAgICAgICAgICAgICAgICAgICAgIChfZnJhbWUgPSBfZnJhbWUucmVwbGFjZShcIjxhbm9ueW1vdXM+XCIsIGZuLmRpc3BsYXlOYW1lKSk7XG4gICAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGZuICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIF9mcmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfZnJhbWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgd2hpbGUgKDEgPD0gbmFtZVByb3BEZXNjcmlwdG9yICYmIDAgPD0gX1J1bkluUm9vdEZyYW1lJERldGVyKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgKHJlZW50cnkgPSAhMSksXG4gICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2aW91c0Rpc3BhdGNoZXIpLFxuICAgICAgICAgIHJlZW5hYmxlTG9ncygpLFxuICAgICAgICAgIChFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IGZyYW1lKTtcbiAgICAgIH1cbiAgICAgIHNhbXBsZUxpbmVzID0gKHNhbXBsZUxpbmVzID0gZm4gPyBmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lIDogXCJcIilcbiAgICAgICAgPyBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShzYW1wbGVMaW5lcylcbiAgICAgICAgOiBcIlwiO1xuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgZm4gJiYgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIHNhbXBsZUxpbmVzKTtcbiAgICAgIHJldHVybiBzYW1wbGVMaW5lcztcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVGaWJlcihmaWJlciwgY2hpbGRGaWJlcikge1xuICAgICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShmaWJlci50eXBlKTtcbiAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoXCJMYXp5XCIpO1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIHJldHVybiBmaWJlci5jaGlsZCAhPT0gY2hpbGRGaWJlciAmJiBudWxsICE9PSBjaGlsZEZpYmVyXG4gICAgICAgICAgICA/IGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKFwiU3VzcGVuc2UgRmFsbGJhY2tcIilcbiAgICAgICAgICAgIDogZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoXCJTdXNwZW5zZVwiKTtcbiAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoXCJTdXNwZW5zZUxpc3RcIik7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmaWJlci50eXBlLCAhMSk7XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZS5yZW5kZXIsICExKTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUsICEwKTtcbiAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoXCJBY3Rpdml0eVwiKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0U3RhY2tCeUZpYmVySW5EZXZBbmRQcm9kKHdvcmtJblByb2dyZXNzKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgaW5mbyA9IFwiXCIsXG4gICAgICAgICAgcHJldmlvdXMgPSBudWxsO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgaW5mbyArPSBkZXNjcmliZUZpYmVyKHdvcmtJblByb2dyZXNzLCBwcmV2aW91cyk7XG4gICAgICAgICAgdmFyIGRlYnVnSW5mbyA9IHdvcmtJblByb2dyZXNzLl9kZWJ1Z0luZm87XG4gICAgICAgICAgaWYgKGRlYnVnSW5mbylcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBkZWJ1Z0luZm8ubGVuZ3RoIC0gMTsgMCA8PSBpOyBpLS0pIHtcbiAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gZGVidWdJbmZvW2ldO1xuICAgICAgICAgICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGVudHJ5Lm5hbWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgSlNDb21waWxlcl90ZW1wX2NvbnN0ID0gaW5mbztcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGVudHJ5Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGVudiA9IGVudHJ5LmVudixcbiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gPSBlbnRyeS5kZWJ1Z0xvY2F0aW9uO1xuICAgICAgICAgICAgICAgICAgaWYgKG51bGwgIT0gbG9jYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkU3RhY2sgPSBmb3JtYXRPd25lclN0YWNrKGxvY2F0aW9uKSxcbiAgICAgICAgICAgICAgICAgICAgICBpZHggPSBjaGlsZFN0YWNrLmxhc3RJbmRleE9mKFwiXFxuXCIpLFxuICAgICAgICAgICAgICAgICAgICAgIGxhc3RMaW5lID1cbiAgICAgICAgICAgICAgICAgICAgICAgIC0xID09PSBpZHggPyBjaGlsZFN0YWNrIDogY2hpbGRTdGFjay5zbGljZShpZHggKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKC0xICE9PSBsYXN0TGluZS5pbmRleE9mKG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IFwiXFxuXCIgKyBsYXN0TGluZTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShcbiAgICAgICAgICAgICAgICAgICAgbmFtZSArIChlbnYgPyBcIiBbXCIgKyBlbnYgKyBcIl1cIiA6IFwiXCIpXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpbmZvID0gSlNDb21waWxlcl90ZW1wX2NvbnN0ICsgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgcHJldmlvdXMgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IHdvcmtJblByb2dyZXNzLnJldHVybjtcbiAgICAgICAgfSB3aGlsZSAod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICByZXR1cm4gaW5mbztcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgcmV0dXJuIFwiXFxuRXJyb3IgZ2VuZXJhdGluZyBzdGFjazogXCIgKyB4Lm1lc3NhZ2UgKyBcIlxcblwiICsgeC5zdGFjaztcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lV2l0aG91dExpbmVOdW1iZXIoZm4pIHtcbiAgICAgIHJldHVybiAoZm4gPSBmbiA/IGZuLmRpc3BsYXlOYW1lIHx8IGZuLm5hbWUgOiBcIlwiKVxuICAgICAgICA/IGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKGZuKVxuICAgICAgICA6IFwiXCI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCkge1xuICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnQpIHJldHVybiBudWxsO1xuICAgICAgdmFyIG93bmVyID0gY3VycmVudC5fZGVidWdPd25lcjtcbiAgICAgIHJldHVybiBudWxsICE9IG93bmVyID8gZ2V0Q29tcG9uZW50TmFtZUZyb21Pd25lcihvd25lcikgOiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRDdXJyZW50RmliZXJTdGFja0luRGV2KCkge1xuICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnQpIHJldHVybiBcIlwiO1xuICAgICAgdmFyIHdvcmtJblByb2dyZXNzID0gY3VycmVudDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBpbmZvID0gXCJcIjtcbiAgICAgICAgNiA9PT0gd29ya0luUHJvZ3Jlc3MudGFnICYmICh3b3JrSW5Qcm9ncmVzcyA9IHdvcmtJblByb2dyZXNzLnJldHVybik7XG4gICAgICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIGluZm8gKz0gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUod29ya0luUHJvZ3Jlc3MudHlwZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgaW5mbyArPSBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShcIlN1c3BlbnNlXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICAgIGluZm8gKz0gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoXCJTdXNwZW5zZUxpc3RcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgICAgaW5mbyArPSBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShcIkFjdGl2aXR5XCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdPd25lciB8fFxuICAgICAgICAgICAgICBcIlwiICE9PSBpbmZvIHx8XG4gICAgICAgICAgICAgIChpbmZvICs9IGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZVdpdGhvdXRMaW5lTnVtYmVyKFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGVcbiAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnT3duZXIgfHxcbiAgICAgICAgICAgICAgXCJcIiAhPT0gaW5mbyB8fFxuICAgICAgICAgICAgICAoaW5mbyArPSBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWVXaXRob3V0TGluZU51bWJlcihcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlLnJlbmRlclxuICAgICAgICAgICAgICApKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKDsgd29ya0luUHJvZ3Jlc3M7IClcbiAgICAgICAgICBpZiAoXCJudW1iZXJcIiA9PT0gdHlwZW9mIHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgICAgICAgICAgdmFyIGZpYmVyID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IGZpYmVyLl9kZWJ1Z093bmVyO1xuICAgICAgICAgICAgdmFyIGRlYnVnU3RhY2sgPSBmaWJlci5fZGVidWdTdGFjaztcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzICYmXG4gICAgICAgICAgICAgIGRlYnVnU3RhY2sgJiZcbiAgICAgICAgICAgICAgKFwic3RyaW5nXCIgIT09IHR5cGVvZiBkZWJ1Z1N0YWNrICYmXG4gICAgICAgICAgICAgICAgKGZpYmVyLl9kZWJ1Z1N0YWNrID0gZGVidWdTdGFjayA9IGZvcm1hdE93bmVyU3RhY2soZGVidWdTdGFjaykpLFxuICAgICAgICAgICAgICBcIlwiICE9PSBkZWJ1Z1N0YWNrICYmIChpbmZvICs9IFwiXFxuXCIgKyBkZWJ1Z1N0YWNrKSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChudWxsICE9IHdvcmtJblByb2dyZXNzLmRlYnVnU3RhY2spIHtcbiAgICAgICAgICAgIHZhciBvd25lclN0YWNrID0gd29ya0luUHJvZ3Jlc3MuZGVidWdTdGFjaztcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcyA9IHdvcmtJblByb2dyZXNzLm93bmVyKSAmJlxuICAgICAgICAgICAgICBvd25lclN0YWNrICYmXG4gICAgICAgICAgICAgIChpbmZvICs9IFwiXFxuXCIgKyBmb3JtYXRPd25lclN0YWNrKG93bmVyU3RhY2spKTtcbiAgICAgICAgICB9IGVsc2UgYnJlYWs7XG4gICAgICAgIHZhciBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSBpbmZvO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPVxuICAgICAgICAgIFwiXFxuRXJyb3IgZ2VuZXJhdGluZyBzdGFjazogXCIgKyB4Lm1lc3NhZ2UgKyBcIlxcblwiICsgeC5zdGFjaztcbiAgICAgIH1cbiAgICAgIHJldHVybiBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJ1bldpdGhGaWJlckluREVWKGZpYmVyLCBjYWxsYmFjaywgYXJnMCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCkge1xuICAgICAgdmFyIHByZXZpb3VzRmliZXIgPSBjdXJyZW50O1xuICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBudWxsICE9PSBmaWJlciAmJiBmaWJlci5fZGVidWdUYXNrXG4gICAgICAgICAgPyBmaWJlci5fZGVidWdUYXNrLnJ1bihcbiAgICAgICAgICAgICAgY2FsbGJhY2suYmluZChudWxsLCBhcmcwLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogY2FsbGJhY2soYXJnMCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzZXRDdXJyZW50RmliZXIocHJldmlvdXNGaWJlcik7XG4gICAgICB9XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgXCJydW5XaXRoRmliZXJJbkRFViBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIGluIHByb2R1Y3Rpb24uIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNldEN1cnJlbnRGaWJlcihmaWJlcikge1xuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuZ2V0Q3VycmVudFN0YWNrID1cbiAgICAgICAgbnVsbCA9PT0gZmliZXIgPyBudWxsIDogZ2V0Q3VycmVudEZpYmVyU3RhY2tJbkRldjtcbiAgICAgIGlzUmVuZGVyaW5nID0gITE7XG4gICAgICBjdXJyZW50ID0gZmliZXI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHR5cGVOYW1lKHZhbHVlKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgU3ltYm9sICYmXG4gICAgICAgICAgU3ltYm9sLnRvU3RyaW5nVGFnICYmXG4gICAgICAgICAgdmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXSkgfHxcbiAgICAgICAgdmFsdWUuY29uc3RydWN0b3IubmFtZSB8fFxuICAgICAgICBcIk9iamVjdFwiXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3aWxsQ29lcmNpb25UaHJvdyh2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSksICExO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gITA7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIFwiXCIgKyB2YWx1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih2YWx1ZSwgYXR0cmlidXRlTmFtZSkge1xuICAgICAgaWYgKHdpbGxDb2VyY2lvblRocm93KHZhbHVlKSlcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJUaGUgcHJvdmlkZWQgYCVzYCBhdHRyaWJ1dGUgaXMgYW4gdW5zdXBwb3J0ZWQgdHlwZSAlcy4gVGhpcyB2YWx1ZSBtdXN0IGJlIGNvZXJjZWQgdG8gYSBzdHJpbmcgYmVmb3JlIHVzaW5nIGl0IGhlcmUuXCIsXG4gICAgICAgICAgICBhdHRyaWJ1dGVOYW1lLFxuICAgICAgICAgICAgdHlwZU5hbWUodmFsdWUpXG4gICAgICAgICAgKSxcbiAgICAgICAgICB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpXG4gICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrQ1NTUHJvcGVydHlTdHJpbmdDb2VyY2lvbih2YWx1ZSwgcHJvcE5hbWUpIHtcbiAgICAgIGlmICh3aWxsQ29lcmNpb25UaHJvdyh2YWx1ZSkpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiVGhlIHByb3ZpZGVkIGAlc2AgQ1NTIHByb3BlcnR5IGlzIGFuIHVuc3VwcG9ydGVkIHR5cGUgJXMuIFRoaXMgdmFsdWUgbXVzdCBiZSBjb2VyY2VkIHRvIGEgc3RyaW5nIGJlZm9yZSB1c2luZyBpdCBoZXJlLlwiLFxuICAgICAgICAgICAgcHJvcE5hbWUsXG4gICAgICAgICAgICB0eXBlTmFtZSh2YWx1ZSlcbiAgICAgICAgICApLFxuICAgICAgICAgIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSlcbiAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tGb3JtRmllbGRWYWx1ZVN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XG4gICAgICBpZiAod2lsbENvZXJjaW9uVGhyb3codmFsdWUpKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkZvcm0gZmllbGQgdmFsdWVzICh2YWx1ZSwgY2hlY2tlZCwgZGVmYXVsdFZhbHVlLCBvciBkZWZhdWx0Q2hlY2tlZCBwcm9wcykgbXVzdCBiZSBzdHJpbmdzLCBub3QgJXMuIFRoaXMgdmFsdWUgbXVzdCBiZSBjb2VyY2VkIHRvIGEgc3RyaW5nIGJlZm9yZSB1c2luZyBpdCBoZXJlLlwiLFxuICAgICAgICAgICAgdHlwZU5hbWUodmFsdWUpXG4gICAgICAgICAgKSxcbiAgICAgICAgICB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpXG4gICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluamVjdEludGVybmFscyhpbnRlcm5hbHMpIHtcbiAgICAgIGlmIChcInVuZGVmaW5lZFwiID09PSB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fKSByZXR1cm4gITE7XG4gICAgICB2YXIgaG9vayA9IF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcbiAgICAgIGlmIChob29rLmlzRGlzYWJsZWQpIHJldHVybiAhMDtcbiAgICAgIGlmICghaG9vay5zdXBwb3J0c0ZpYmVyKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIlRoZSBpbnN0YWxsZWQgdmVyc2lvbiBvZiBSZWFjdCBEZXZUb29scyBpcyB0b28gb2xkIGFuZCB3aWxsIG5vdCB3b3JrIHdpdGggdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBSZWFjdC4gUGxlYXNlIHVwZGF0ZSBSZWFjdCBEZXZUb29scy4gaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9yZWFjdC1kZXZ0b29sc1wiXG4gICAgICAgICAgKSxcbiAgICAgICAgICAhMFxuICAgICAgICApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgKHJlbmRlcmVySUQgPSBob29rLmluamVjdChpbnRlcm5hbHMpKSwgKGluamVjdGVkSG9vayA9IGhvb2spO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJSZWFjdCBpbnN0cnVtZW50YXRpb24gZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzLlwiLCBlcnIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhvb2suY2hlY2tEQ0UgPyAhMCA6ICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyhuZXdJc1N0cmljdE1vZGUpIHtcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGxvZyQxICYmXG4gICAgICAgIHVuc3RhYmxlX3NldERpc2FibGVZaWVsZFZhbHVlKG5ld0lzU3RyaWN0TW9kZSk7XG4gICAgICBpZiAoaW5qZWN0ZWRIb29rICYmIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluamVjdGVkSG9vay5zZXRTdHJpY3RNb2RlKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGluamVjdGVkSG9vay5zZXRTdHJpY3RNb2RlKHJlbmRlcmVySUQsIG5ld0lzU3RyaWN0TW9kZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGhhc0xvZ2dlZEVycm9yIHx8XG4gICAgICAgICAgICAoKGhhc0xvZ2dlZEVycm9yID0gITApLFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJSZWFjdCBpbnN0cnVtZW50YXRpb24gZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzXCIsXG4gICAgICAgICAgICAgIGVyclxuICAgICAgICAgICAgKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaW5qZWN0UHJvZmlsaW5nSG9va3MocHJvZmlsaW5nSG9va3MpIHtcbiAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MgPSBwcm9maWxpbmdIb29rcztcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya0NvbW1pdFN0b3BwZWQoKSB7XG4gICAgICBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbW1pdFN0b3BwZWQgJiZcbiAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tbWl0U3RvcHBlZCgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrQ29tcG9uZW50UmVuZGVyU3RhcnRlZChmaWJlcikge1xuICAgICAgbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgICAgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudFJlbmRlclN0YXJ0ZWQgJiZcbiAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50UmVuZGVyU3RhcnRlZChmaWJlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcmtDb21wb25lbnRSZW5kZXJTdG9wcGVkKCkge1xuICAgICAgbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgICAgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudFJlbmRlclN0b3BwZWQgJiZcbiAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50UmVuZGVyU3RvcHBlZCgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrUmVuZGVyU3RhcnRlZChsYW5lcykge1xuICAgICAgbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtSZW5kZXJTdGFydGVkICYmXG4gICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1JlbmRlclN0YXJ0ZWQobGFuZXMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrUmVuZGVyU3RvcHBlZCgpIHtcbiAgICAgIG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrUmVuZGVyU3RvcHBlZCAmJlxuICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtSZW5kZXJTdG9wcGVkKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcmtTdGF0ZVVwZGF0ZVNjaGVkdWxlZChmaWJlciwgbGFuZSkge1xuICAgICAgbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtTdGF0ZVVwZGF0ZVNjaGVkdWxlZCAmJlxuICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtTdGF0ZVVwZGF0ZVNjaGVkdWxlZChmaWJlciwgbGFuZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNsejMyRmFsbGJhY2soeCkge1xuICAgICAgeCA+Pj49IDA7XG4gICAgICByZXR1cm4gMCA9PT0geCA/IDMyIDogKDMxIC0gKChsb2coeCkgLyBMTjIpIHwgMCkpIHwgMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0TGFiZWxGb3JMYW5lKGxhbmUpIHtcbiAgICAgIGlmIChsYW5lICYgMSkgcmV0dXJuIFwiU3luY0h5ZHJhdGlvbkxhbmVcIjtcbiAgICAgIGlmIChsYW5lICYgMikgcmV0dXJuIFwiU3luY1wiO1xuICAgICAgaWYgKGxhbmUgJiA0KSByZXR1cm4gXCJJbnB1dENvbnRpbnVvdXNIeWRyYXRpb25cIjtcbiAgICAgIGlmIChsYW5lICYgOCkgcmV0dXJuIFwiSW5wdXRDb250aW51b3VzXCI7XG4gICAgICBpZiAobGFuZSAmIDE2KSByZXR1cm4gXCJEZWZhdWx0SHlkcmF0aW9uXCI7XG4gICAgICBpZiAobGFuZSAmIDMyKSByZXR1cm4gXCJEZWZhdWx0XCI7XG4gICAgICBpZiAobGFuZSAmIDEyOCkgcmV0dXJuIFwiVHJhbnNpdGlvbkh5ZHJhdGlvblwiO1xuICAgICAgaWYgKGxhbmUgJiA0MTk0MDQ4KSByZXR1cm4gXCJUcmFuc2l0aW9uXCI7XG4gICAgICBpZiAobGFuZSAmIDYyOTE0NTYwKSByZXR1cm4gXCJSZXRyeVwiO1xuICAgICAgaWYgKGxhbmUgJiA2NzEwODg2NCkgcmV0dXJuIFwiU2VsZWN0aXZlSHlkcmF0aW9uXCI7XG4gICAgICBpZiAobGFuZSAmIDEzNDIxNzcyOCkgcmV0dXJuIFwiSWRsZUh5ZHJhdGlvblwiO1xuICAgICAgaWYgKGxhbmUgJiAyNjg0MzU0NTYpIHJldHVybiBcIklkbGVcIjtcbiAgICAgIGlmIChsYW5lICYgNTM2ODcwOTEyKSByZXR1cm4gXCJPZmZzY3JlZW5cIjtcbiAgICAgIGlmIChsYW5lICYgMTA3Mzc0MTgyNCkgcmV0dXJuIFwiRGVmZXJyZWRcIjtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMobGFuZXMpIHtcbiAgICAgIHZhciBwZW5kaW5nU3luY0xhbmVzID0gbGFuZXMgJiA0MjtcbiAgICAgIGlmICgwICE9PSBwZW5kaW5nU3luY0xhbmVzKSByZXR1cm4gcGVuZGluZ1N5bmNMYW5lcztcbiAgICAgIHN3aXRjaCAobGFuZXMgJiAtbGFuZXMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgcmV0dXJuIDI7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gNDtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiA4O1xuICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgIHJldHVybiAxNjtcbiAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICByZXR1cm4gMzI7XG4gICAgICAgIGNhc2UgNjQ6XG4gICAgICAgICAgcmV0dXJuIDY0O1xuICAgICAgICBjYXNlIDEyODpcbiAgICAgICAgICByZXR1cm4gMTI4O1xuICAgICAgICBjYXNlIDI1NjpcbiAgICAgICAgY2FzZSA1MTI6XG4gICAgICAgIGNhc2UgMTAyNDpcbiAgICAgICAgY2FzZSAyMDQ4OlxuICAgICAgICBjYXNlIDQwOTY6XG4gICAgICAgIGNhc2UgODE5MjpcbiAgICAgICAgY2FzZSAxNjM4NDpcbiAgICAgICAgY2FzZSAzMjc2ODpcbiAgICAgICAgY2FzZSA2NTUzNjpcbiAgICAgICAgY2FzZSAxMzEwNzI6XG4gICAgICAgIGNhc2UgMjYyMTQ0OlxuICAgICAgICBjYXNlIDUyNDI4ODpcbiAgICAgICAgY2FzZSAxMDQ4NTc2OlxuICAgICAgICBjYXNlIDIwOTcxNTI6XG4gICAgICAgICAgcmV0dXJuIGxhbmVzICYgNDE5NDA0ODtcbiAgICAgICAgY2FzZSA0MTk0MzA0OlxuICAgICAgICBjYXNlIDgzODg2MDg6XG4gICAgICAgIGNhc2UgMTY3NzcyMTY6XG4gICAgICAgIGNhc2UgMzM1NTQ0MzI6XG4gICAgICAgICAgcmV0dXJuIGxhbmVzICYgNjI5MTQ1NjA7XG4gICAgICAgIGNhc2UgNjcxMDg4NjQ6XG4gICAgICAgICAgcmV0dXJuIDY3MTA4ODY0O1xuICAgICAgICBjYXNlIDEzNDIxNzcyODpcbiAgICAgICAgICByZXR1cm4gMTM0MjE3NzI4O1xuICAgICAgICBjYXNlIDI2ODQzNTQ1NjpcbiAgICAgICAgICByZXR1cm4gMjY4NDM1NDU2O1xuICAgICAgICBjYXNlIDUzNjg3MDkxMjpcbiAgICAgICAgICByZXR1cm4gNTM2ODcwOTEyO1xuICAgICAgICBjYXNlIDEwNzM3NDE4MjQ6XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiU2hvdWxkIGhhdmUgZm91bmQgbWF0Y2hpbmcgbGFuZXMuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldE5leHRMYW5lcyhyb290LCB3aXBMYW5lcywgcm9vdEhhc1BlbmRpbmdDb21taXQpIHtcbiAgICAgIHZhciBwZW5kaW5nTGFuZXMgPSByb290LnBlbmRpbmdMYW5lcztcbiAgICAgIGlmICgwID09PSBwZW5kaW5nTGFuZXMpIHJldHVybiAwO1xuICAgICAgdmFyIG5leHRMYW5lcyA9IDAsXG4gICAgICAgIHN1c3BlbmRlZExhbmVzID0gcm9vdC5zdXNwZW5kZWRMYW5lcyxcbiAgICAgICAgcGluZ2VkTGFuZXMgPSByb290LnBpbmdlZExhbmVzO1xuICAgICAgcm9vdCA9IHJvb3Qud2FybUxhbmVzO1xuICAgICAgdmFyIG5vbklkbGVQZW5kaW5nTGFuZXMgPSBwZW5kaW5nTGFuZXMgJiAxMzQyMTc3Mjc7XG4gICAgICAwICE9PSBub25JZGxlUGVuZGluZ0xhbmVzXG4gICAgICAgID8gKChwZW5kaW5nTGFuZXMgPSBub25JZGxlUGVuZGluZ0xhbmVzICYgfnN1c3BlbmRlZExhbmVzKSxcbiAgICAgICAgICAwICE9PSBwZW5kaW5nTGFuZXNcbiAgICAgICAgICAgID8gKG5leHRMYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKHBlbmRpbmdMYW5lcykpXG4gICAgICAgICAgICA6ICgocGluZ2VkTGFuZXMgJj0gbm9uSWRsZVBlbmRpbmdMYW5lcyksXG4gICAgICAgICAgICAgIDAgIT09IHBpbmdlZExhbmVzXG4gICAgICAgICAgICAgICAgPyAobmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMocGluZ2VkTGFuZXMpKVxuICAgICAgICAgICAgICAgIDogcm9vdEhhc1BlbmRpbmdDb21taXQgfHxcbiAgICAgICAgICAgICAgICAgICgocm9vdEhhc1BlbmRpbmdDb21taXQgPSBub25JZGxlUGVuZGluZ0xhbmVzICYgfnJvb3QpLFxuICAgICAgICAgICAgICAgICAgMCAhPT0gcm9vdEhhc1BlbmRpbmdDb21taXQgJiZcbiAgICAgICAgICAgICAgICAgICAgKG5leHRMYW5lcyA9XG4gICAgICAgICAgICAgICAgICAgICAgZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMocm9vdEhhc1BlbmRpbmdDb21taXQpKSkpKVxuICAgICAgICA6ICgobm9uSWRsZVBlbmRpbmdMYW5lcyA9IHBlbmRpbmdMYW5lcyAmIH5zdXNwZW5kZWRMYW5lcyksXG4gICAgICAgICAgMCAhPT0gbm9uSWRsZVBlbmRpbmdMYW5lc1xuICAgICAgICAgICAgPyAobmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMobm9uSWRsZVBlbmRpbmdMYW5lcykpXG4gICAgICAgICAgICA6IDAgIT09IHBpbmdlZExhbmVzXG4gICAgICAgICAgICAgID8gKG5leHRMYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKHBpbmdlZExhbmVzKSlcbiAgICAgICAgICAgICAgOiByb290SGFzUGVuZGluZ0NvbW1pdCB8fFxuICAgICAgICAgICAgICAgICgocm9vdEhhc1BlbmRpbmdDb21taXQgPSBwZW5kaW5nTGFuZXMgJiB+cm9vdCksXG4gICAgICAgICAgICAgICAgMCAhPT0gcm9vdEhhc1BlbmRpbmdDb21taXQgJiZcbiAgICAgICAgICAgICAgICAgIChuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhyb290SGFzUGVuZGluZ0NvbW1pdCkpKSk7XG4gICAgICByZXR1cm4gMCA9PT0gbmV4dExhbmVzXG4gICAgICAgID8gMFxuICAgICAgICA6IDAgIT09IHdpcExhbmVzICYmXG4gICAgICAgICAgICB3aXBMYW5lcyAhPT0gbmV4dExhbmVzICYmXG4gICAgICAgICAgICAwID09PSAod2lwTGFuZXMgJiBzdXNwZW5kZWRMYW5lcykgJiZcbiAgICAgICAgICAgICgoc3VzcGVuZGVkTGFuZXMgPSBuZXh0TGFuZXMgJiAtbmV4dExhbmVzKSxcbiAgICAgICAgICAgIChyb290SGFzUGVuZGluZ0NvbW1pdCA9IHdpcExhbmVzICYgLXdpcExhbmVzKSxcbiAgICAgICAgICAgIHN1c3BlbmRlZExhbmVzID49IHJvb3RIYXNQZW5kaW5nQ29tbWl0IHx8XG4gICAgICAgICAgICAgICgzMiA9PT0gc3VzcGVuZGVkTGFuZXMgJiYgMCAhPT0gKHJvb3RIYXNQZW5kaW5nQ29tbWl0ICYgNDE5NDA0OCkpKVxuICAgICAgICAgID8gd2lwTGFuZXNcbiAgICAgICAgICA6IG5leHRMYW5lcztcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tJZlJvb3RJc1ByZXJlbmRlcmluZyhyb290LCByZW5kZXJMYW5lcykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgMCA9PT1cbiAgICAgICAgKHJvb3QucGVuZGluZ0xhbmVzICZcbiAgICAgICAgICB+KHJvb3Quc3VzcGVuZGVkTGFuZXMgJiB+cm9vdC5waW5nZWRMYW5lcykgJlxuICAgICAgICAgIHJlbmRlckxhbmVzKVxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tcHV0ZUV4cGlyYXRpb25UaW1lKGxhbmUsIGN1cnJlbnRUaW1lKSB7XG4gICAgICBzd2l0Y2ggKGxhbmUpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICBjYXNlIDI6XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICBjYXNlIDY0OlxuICAgICAgICAgIHJldHVybiBjdXJyZW50VGltZSArIDI1MDtcbiAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgY2FzZSAxMjg6XG4gICAgICAgIGNhc2UgMjU2OlxuICAgICAgICBjYXNlIDUxMjpcbiAgICAgICAgY2FzZSAxMDI0OlxuICAgICAgICBjYXNlIDIwNDg6XG4gICAgICAgIGNhc2UgNDA5NjpcbiAgICAgICAgY2FzZSA4MTkyOlxuICAgICAgICBjYXNlIDE2Mzg0OlxuICAgICAgICBjYXNlIDMyNzY4OlxuICAgICAgICBjYXNlIDY1NTM2OlxuICAgICAgICBjYXNlIDEzMTA3MjpcbiAgICAgICAgY2FzZSAyNjIxNDQ6XG4gICAgICAgIGNhc2UgNTI0Mjg4OlxuICAgICAgICBjYXNlIDEwNDg1NzY6XG4gICAgICAgIGNhc2UgMjA5NzE1MjpcbiAgICAgICAgICByZXR1cm4gY3VycmVudFRpbWUgKyA1ZTM7XG4gICAgICAgIGNhc2UgNDE5NDMwNDpcbiAgICAgICAgY2FzZSA4Mzg4NjA4OlxuICAgICAgICBjYXNlIDE2Nzc3MjE2OlxuICAgICAgICBjYXNlIDMzNTU0NDMyOlxuICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgY2FzZSA2NzEwODg2NDpcbiAgICAgICAgY2FzZSAxMzQyMTc3Mjg6XG4gICAgICAgIGNhc2UgMjY4NDM1NDU2OlxuICAgICAgICBjYXNlIDUzNjg3MDkxMjpcbiAgICAgICAgY2FzZSAxMDczNzQxODI0OlxuICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJTaG91bGQgaGF2ZSBmb3VuZCBtYXRjaGluZyBsYW5lcy4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIC0xXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY2xhaW1OZXh0VHJhbnNpdGlvbkxhbmUoKSB7XG4gICAgICB2YXIgbGFuZSA9IG5leHRUcmFuc2l0aW9uTGFuZTtcbiAgICAgIG5leHRUcmFuc2l0aW9uTGFuZSA8PD0gMTtcbiAgICAgIDAgPT09IChuZXh0VHJhbnNpdGlvbkxhbmUgJiA0MTk0MDQ4KSAmJiAobmV4dFRyYW5zaXRpb25MYW5lID0gMjU2KTtcbiAgICAgIHJldHVybiBsYW5lO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjbGFpbU5leHRSZXRyeUxhbmUoKSB7XG4gICAgICB2YXIgbGFuZSA9IG5leHRSZXRyeUxhbmU7XG4gICAgICBuZXh0UmV0cnlMYW5lIDw8PSAxO1xuICAgICAgMCA9PT0gKG5leHRSZXRyeUxhbmUgJiA2MjkxNDU2MCkgJiYgKG5leHRSZXRyeUxhbmUgPSA0MTk0MzA0KTtcbiAgICAgIHJldHVybiBsYW5lO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVMYW5lTWFwKGluaXRpYWwpIHtcbiAgICAgIGZvciAodmFyIGxhbmVNYXAgPSBbXSwgaSA9IDA7IDMxID4gaTsgaSsrKSBsYW5lTWFwLnB1c2goaW5pdGlhbCk7XG4gICAgICByZXR1cm4gbGFuZU1hcDtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya1Jvb3RVcGRhdGVkJDEocm9vdCwgdXBkYXRlTGFuZSkge1xuICAgICAgcm9vdC5wZW5kaW5nTGFuZXMgfD0gdXBkYXRlTGFuZTtcbiAgICAgIDI2ODQzNTQ1NiAhPT0gdXBkYXRlTGFuZSAmJlxuICAgICAgICAoKHJvb3Quc3VzcGVuZGVkTGFuZXMgPSAwKSxcbiAgICAgICAgKHJvb3QucGluZ2VkTGFuZXMgPSAwKSxcbiAgICAgICAgKHJvb3Qud2FybUxhbmVzID0gMCkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrUm9vdEZpbmlzaGVkKFxuICAgICAgcm9vdCxcbiAgICAgIGZpbmlzaGVkTGFuZXMsXG4gICAgICByZW1haW5pbmdMYW5lcyxcbiAgICAgIHNwYXduZWRMYW5lLFxuICAgICAgdXBkYXRlZExhbmVzLFxuICAgICAgc3VzcGVuZGVkUmV0cnlMYW5lc1xuICAgICkge1xuICAgICAgdmFyIHByZXZpb3VzbHlQZW5kaW5nTGFuZXMgPSByb290LnBlbmRpbmdMYW5lcztcbiAgICAgIHJvb3QucGVuZGluZ0xhbmVzID0gcmVtYWluaW5nTGFuZXM7XG4gICAgICByb290LnN1c3BlbmRlZExhbmVzID0gMDtcbiAgICAgIHJvb3QucGluZ2VkTGFuZXMgPSAwO1xuICAgICAgcm9vdC53YXJtTGFuZXMgPSAwO1xuICAgICAgcm9vdC5leHBpcmVkTGFuZXMgJj0gcmVtYWluaW5nTGFuZXM7XG4gICAgICByb290LmVudGFuZ2xlZExhbmVzICY9IHJlbWFpbmluZ0xhbmVzO1xuICAgICAgcm9vdC5lcnJvclJlY292ZXJ5RGlzYWJsZWRMYW5lcyAmPSByZW1haW5pbmdMYW5lcztcbiAgICAgIHJvb3Quc2hlbGxTdXNwZW5kQ291bnRlciA9IDA7XG4gICAgICB2YXIgZW50YW5nbGVtZW50cyA9IHJvb3QuZW50YW5nbGVtZW50cyxcbiAgICAgICAgZXhwaXJhdGlvblRpbWVzID0gcm9vdC5leHBpcmF0aW9uVGltZXMsXG4gICAgICAgIGhpZGRlblVwZGF0ZXMgPSByb290LmhpZGRlblVwZGF0ZXM7XG4gICAgICBmb3IgKFxuICAgICAgICByZW1haW5pbmdMYW5lcyA9IHByZXZpb3VzbHlQZW5kaW5nTGFuZXMgJiB+cmVtYWluaW5nTGFuZXM7XG4gICAgICAgIDAgPCByZW1haW5pbmdMYW5lcztcblxuICAgICAgKSB7XG4gICAgICAgIHZhciBpbmRleCA9IDMxIC0gY2x6MzIocmVtYWluaW5nTGFuZXMpLFxuICAgICAgICAgIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgICAgICBlbnRhbmdsZW1lbnRzW2luZGV4XSA9IDA7XG4gICAgICAgIGV4cGlyYXRpb25UaW1lc1tpbmRleF0gPSAtMTtcbiAgICAgICAgdmFyIGhpZGRlblVwZGF0ZXNGb3JMYW5lID0gaGlkZGVuVXBkYXRlc1tpbmRleF07XG4gICAgICAgIGlmIChudWxsICE9PSBoaWRkZW5VcGRhdGVzRm9yTGFuZSlcbiAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgaGlkZGVuVXBkYXRlc1tpbmRleF0gPSBudWxsLCBpbmRleCA9IDA7XG4gICAgICAgICAgICBpbmRleCA8IGhpZGRlblVwZGF0ZXNGb3JMYW5lLmxlbmd0aDtcbiAgICAgICAgICAgIGluZGV4KytcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHZhciB1cGRhdGUgPSBoaWRkZW5VcGRhdGVzRm9yTGFuZVtpbmRleF07XG4gICAgICAgICAgICBudWxsICE9PSB1cGRhdGUgJiYgKHVwZGF0ZS5sYW5lICY9IC01MzY4NzA5MTMpO1xuICAgICAgICAgIH1cbiAgICAgICAgcmVtYWluaW5nTGFuZXMgJj0gfmxhbmU7XG4gICAgICB9XG4gICAgICAwICE9PSBzcGF3bmVkTGFuZSAmJiBtYXJrU3Bhd25lZERlZmVycmVkTGFuZShyb290LCBzcGF3bmVkTGFuZSwgMCk7XG4gICAgICAwICE9PSBzdXNwZW5kZWRSZXRyeUxhbmVzICYmXG4gICAgICAgIDAgPT09IHVwZGF0ZWRMYW5lcyAmJlxuICAgICAgICAwICE9PSByb290LnRhZyAmJlxuICAgICAgICAocm9vdC5zdXNwZW5kZWRMYW5lcyB8PVxuICAgICAgICAgIHN1c3BlbmRlZFJldHJ5TGFuZXMgJiB+KHByZXZpb3VzbHlQZW5kaW5nTGFuZXMgJiB+ZmluaXNoZWRMYW5lcykpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrU3Bhd25lZERlZmVycmVkTGFuZShyb290LCBzcGF3bmVkTGFuZSwgZW50YW5nbGVkTGFuZXMpIHtcbiAgICAgIHJvb3QucGVuZGluZ0xhbmVzIHw9IHNwYXduZWRMYW5lO1xuICAgICAgcm9vdC5zdXNwZW5kZWRMYW5lcyAmPSB+c3Bhd25lZExhbmU7XG4gICAgICB2YXIgc3Bhd25lZExhbmVJbmRleCA9IDMxIC0gY2x6MzIoc3Bhd25lZExhbmUpO1xuICAgICAgcm9vdC5lbnRhbmdsZWRMYW5lcyB8PSBzcGF3bmVkTGFuZTtcbiAgICAgIHJvb3QuZW50YW5nbGVtZW50c1tzcGF3bmVkTGFuZUluZGV4XSA9XG4gICAgICAgIHJvb3QuZW50YW5nbGVtZW50c1tzcGF3bmVkTGFuZUluZGV4XSB8XG4gICAgICAgIDEwNzM3NDE4MjQgfFxuICAgICAgICAoZW50YW5nbGVkTGFuZXMgJiA0MTk0MDkwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya1Jvb3RFbnRhbmdsZWQocm9vdCwgZW50YW5nbGVkTGFuZXMpIHtcbiAgICAgIHZhciByb290RW50YW5nbGVkTGFuZXMgPSAocm9vdC5lbnRhbmdsZWRMYW5lcyB8PSBlbnRhbmdsZWRMYW5lcyk7XG4gICAgICBmb3IgKHJvb3QgPSByb290LmVudGFuZ2xlbWVudHM7IHJvb3RFbnRhbmdsZWRMYW5lczsgKSB7XG4gICAgICAgIHZhciBpbmRleCA9IDMxIC0gY2x6MzIocm9vdEVudGFuZ2xlZExhbmVzKSxcbiAgICAgICAgICBsYW5lID0gMSA8PCBpbmRleDtcbiAgICAgICAgKGxhbmUgJiBlbnRhbmdsZWRMYW5lcykgfCAocm9vdFtpbmRleF0gJiBlbnRhbmdsZWRMYW5lcykgJiZcbiAgICAgICAgICAocm9vdFtpbmRleF0gfD0gZW50YW5nbGVkTGFuZXMpO1xuICAgICAgICByb290RW50YW5nbGVkTGFuZXMgJj0gfmxhbmU7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEJ1bXBlZExhbmVGb3JIeWRyYXRpb24ocm9vdCwgcmVuZGVyTGFuZXMpIHtcbiAgICAgIHZhciByZW5kZXJMYW5lID0gcmVuZGVyTGFuZXMgJiAtcmVuZGVyTGFuZXM7XG4gICAgICByZW5kZXJMYW5lID1cbiAgICAgICAgMCAhPT0gKHJlbmRlckxhbmUgJiA0MilcbiAgICAgICAgICA/IDFcbiAgICAgICAgICA6IGdldEJ1bXBlZExhbmVGb3JIeWRyYXRpb25CeUxhbmUocmVuZGVyTGFuZSk7XG4gICAgICByZXR1cm4gMCAhPT0gKHJlbmRlckxhbmUgJiAocm9vdC5zdXNwZW5kZWRMYW5lcyB8IHJlbmRlckxhbmVzKSlcbiAgICAgICAgPyAwXG4gICAgICAgIDogcmVuZGVyTGFuZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0QnVtcGVkTGFuZUZvckh5ZHJhdGlvbkJ5TGFuZShsYW5lKSB7XG4gICAgICBzd2l0Y2ggKGxhbmUpIHtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGxhbmUgPSAxO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgbGFuZSA9IDQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgbGFuZSA9IDE2O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI1NjpcbiAgICAgICAgY2FzZSA1MTI6XG4gICAgICAgIGNhc2UgMTAyNDpcbiAgICAgICAgY2FzZSAyMDQ4OlxuICAgICAgICBjYXNlIDQwOTY6XG4gICAgICAgIGNhc2UgODE5MjpcbiAgICAgICAgY2FzZSAxNjM4NDpcbiAgICAgICAgY2FzZSAzMjc2ODpcbiAgICAgICAgY2FzZSA2NTUzNjpcbiAgICAgICAgY2FzZSAxMzEwNzI6XG4gICAgICAgIGNhc2UgMjYyMTQ0OlxuICAgICAgICBjYXNlIDUyNDI4ODpcbiAgICAgICAgY2FzZSAxMDQ4NTc2OlxuICAgICAgICBjYXNlIDIwOTcxNTI6XG4gICAgICAgIGNhc2UgNDE5NDMwNDpcbiAgICAgICAgY2FzZSA4Mzg4NjA4OlxuICAgICAgICBjYXNlIDE2Nzc3MjE2OlxuICAgICAgICBjYXNlIDMzNTU0NDMyOlxuICAgICAgICAgIGxhbmUgPSAxMjg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjY4NDM1NDU2OlxuICAgICAgICAgIGxhbmUgPSAxMzQyMTc3Mjg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgbGFuZSA9IDA7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGFuZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWRkRmliZXJUb0xhbmVzTWFwKHJvb3QsIGZpYmVyLCBsYW5lcykge1xuICAgICAgaWYgKGlzRGV2VG9vbHNQcmVzZW50KVxuICAgICAgICBmb3IgKHJvb3QgPSByb290LnBlbmRpbmdVcGRhdGVyc0xhbmVNYXA7IDAgPCBsYW5lczsgKSB7XG4gICAgICAgICAgdmFyIGluZGV4ID0gMzEgLSBjbHozMihsYW5lcyksXG4gICAgICAgICAgICBsYW5lID0gMSA8PCBpbmRleDtcbiAgICAgICAgICByb290W2luZGV4XS5hZGQoZmliZXIpO1xuICAgICAgICAgIGxhbmVzICY9IH5sYW5lO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdmVQZW5kaW5nRmliZXJzVG9NZW1vaXplZChyb290LCBsYW5lcykge1xuICAgICAgaWYgKGlzRGV2VG9vbHNQcmVzZW50KVxuICAgICAgICBmb3IgKFxuICAgICAgICAgIHZhciBwZW5kaW5nVXBkYXRlcnNMYW5lTWFwID0gcm9vdC5wZW5kaW5nVXBkYXRlcnNMYW5lTWFwLFxuICAgICAgICAgICAgbWVtb2l6ZWRVcGRhdGVycyA9IHJvb3QubWVtb2l6ZWRVcGRhdGVycztcbiAgICAgICAgICAwIDwgbGFuZXM7XG5cbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFyIGluZGV4ID0gMzEgLSBjbHozMihsYW5lcyk7XG4gICAgICAgICAgcm9vdCA9IDEgPDwgaW5kZXg7XG4gICAgICAgICAgaW5kZXggPSBwZW5kaW5nVXBkYXRlcnNMYW5lTWFwW2luZGV4XTtcbiAgICAgICAgICAwIDwgaW5kZXguc2l6ZSAmJlxuICAgICAgICAgICAgKGluZGV4LmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgICAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG4gICAgICAgICAgICAgIChudWxsICE9PSBhbHRlcm5hdGUgJiYgbWVtb2l6ZWRVcGRhdGVycy5oYXMoYWx0ZXJuYXRlKSkgfHxcbiAgICAgICAgICAgICAgICBtZW1vaXplZFVwZGF0ZXJzLmFkZChmaWJlcik7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGluZGV4LmNsZWFyKCkpO1xuICAgICAgICAgIGxhbmVzICY9IH5yb290O1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGxhbmVzVG9FdmVudFByaW9yaXR5KGxhbmVzKSB7XG4gICAgICBsYW5lcyAmPSAtbGFuZXM7XG4gICAgICByZXR1cm4gMCAhPT0gRGlzY3JldGVFdmVudFByaW9yaXR5ICYmIERpc2NyZXRlRXZlbnRQcmlvcml0eSA8IGxhbmVzXG4gICAgICAgID8gMCAhPT0gQ29udGludW91c0V2ZW50UHJpb3JpdHkgJiYgQ29udGludW91c0V2ZW50UHJpb3JpdHkgPCBsYW5lc1xuICAgICAgICAgID8gMCAhPT0gKGxhbmVzICYgMTM0MjE3NzI3KVxuICAgICAgICAgICAgPyBEZWZhdWx0RXZlbnRQcmlvcml0eVxuICAgICAgICAgICAgOiBJZGxlRXZlbnRQcmlvcml0eVxuICAgICAgICAgIDogQ29udGludW91c0V2ZW50UHJpb3JpdHlcbiAgICAgICAgOiBEaXNjcmV0ZUV2ZW50UHJpb3JpdHk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc29sdmVVcGRhdGVQcmlvcml0eSgpIHtcbiAgICAgIHZhciB1cGRhdGVQcmlvcml0eSA9IFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnA7XG4gICAgICBpZiAoMCAhPT0gdXBkYXRlUHJpb3JpdHkpIHJldHVybiB1cGRhdGVQcmlvcml0eTtcbiAgICAgIHVwZGF0ZVByaW9yaXR5ID0gd2luZG93LmV2ZW50O1xuICAgICAgcmV0dXJuIHZvaWQgMCA9PT0gdXBkYXRlUHJpb3JpdHlcbiAgICAgICAgPyBEZWZhdWx0RXZlbnRQcmlvcml0eVxuICAgICAgICA6IGdldEV2ZW50UHJpb3JpdHkodXBkYXRlUHJpb3JpdHkudHlwZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJ1bldpdGhQcmlvcml0eShwcmlvcml0eSwgZm4pIHtcbiAgICAgIHZhciBwcmV2aW91c1ByaW9yaXR5ID0gUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiAoUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucCA9IHByaW9yaXR5KSwgZm4oKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnAgPSBwcmV2aW91c1ByaW9yaXR5O1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBkZXRhY2hEZWxldGVkSW5zdGFuY2Uobm9kZSkge1xuICAgICAgZGVsZXRlIG5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV07XG4gICAgICBkZWxldGUgbm9kZVtpbnRlcm5hbFByb3BzS2V5XTtcbiAgICAgIGRlbGV0ZSBub2RlW2ludGVybmFsRXZlbnRIYW5kbGVyc0tleV07XG4gICAgICBkZWxldGUgbm9kZVtpbnRlcm5hbEV2ZW50SGFuZGxlckxpc3RlbmVyc0tleV07XG4gICAgICBkZWxldGUgbm9kZVtpbnRlcm5hbEV2ZW50SGFuZGxlc1NldEtleV07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHRhcmdldE5vZGUpIHtcbiAgICAgIHZhciB0YXJnZXRJbnN0ID0gdGFyZ2V0Tm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XTtcbiAgICAgIGlmICh0YXJnZXRJbnN0KSByZXR1cm4gdGFyZ2V0SW5zdDtcbiAgICAgIGZvciAodmFyIHBhcmVudE5vZGUgPSB0YXJnZXROb2RlLnBhcmVudE5vZGU7IHBhcmVudE5vZGU7ICkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKHRhcmdldEluc3QgPVxuICAgICAgICAgICAgcGFyZW50Tm9kZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSB8fFxuICAgICAgICAgICAgcGFyZW50Tm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgcGFyZW50Tm9kZSA9IHRhcmdldEluc3QuYWx0ZXJuYXRlO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG51bGwgIT09IHRhcmdldEluc3QuY2hpbGQgfHxcbiAgICAgICAgICAgIChudWxsICE9PSBwYXJlbnROb2RlICYmIG51bGwgIT09IHBhcmVudE5vZGUuY2hpbGQpXG4gICAgICAgICAgKVxuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgdGFyZ2V0Tm9kZSA9IGdldFBhcmVudEh5ZHJhdGlvbkJvdW5kYXJ5KHRhcmdldE5vZGUpO1xuICAgICAgICAgICAgICBudWxsICE9PSB0YXJnZXROb2RlO1xuXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaWYgKChwYXJlbnROb2RlID0gdGFyZ2V0Tm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudE5vZGU7XG4gICAgICAgICAgICAgIHRhcmdldE5vZGUgPSBnZXRQYXJlbnRIeWRyYXRpb25Cb3VuZGFyeSh0YXJnZXROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGFyZ2V0SW5zdDtcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXROb2RlID0gcGFyZW50Tm9kZTtcbiAgICAgICAgcGFyZW50Tm9kZSA9IHRhcmdldE5vZGUucGFyZW50Tm9kZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRJbnN0YW5jZUZyb21Ob2RlKG5vZGUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKG5vZGUgPSBub2RlW2ludGVybmFsSW5zdGFuY2VLZXldIHx8IG5vZGVbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV0pXG4gICAgICApIHtcbiAgICAgICAgdmFyIHRhZyA9IG5vZGUudGFnO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgNSA9PT0gdGFnIHx8XG4gICAgICAgICAgNiA9PT0gdGFnIHx8XG4gICAgICAgICAgMTMgPT09IHRhZyB8fFxuICAgICAgICAgIDMxID09PSB0YWcgfHxcbiAgICAgICAgICAyNiA9PT0gdGFnIHx8XG4gICAgICAgICAgMjcgPT09IHRhZyB8fFxuICAgICAgICAgIDMgPT09IHRhZ1xuICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Tm9kZUZyb21JbnN0YW5jZShpbnN0KSB7XG4gICAgICB2YXIgdGFnID0gaW5zdC50YWc7XG4gICAgICBpZiAoNSA9PT0gdGFnIHx8IDI2ID09PSB0YWcgfHwgMjcgPT09IHRhZyB8fCA2ID09PSB0YWcpXG4gICAgICAgIHJldHVybiBpbnN0LnN0YXRlTm9kZTtcbiAgICAgIHRocm93IEVycm9yKFwiZ2V0Tm9kZUZyb21JbnN0YW5jZTogSW52YWxpZCBhcmd1bWVudC5cIik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFJlc291cmNlc0Zyb21Sb290KHJvb3QpIHtcbiAgICAgIHZhciByZXNvdXJjZXMgPSByb290W2ludGVybmFsUm9vdE5vZGVSZXNvdXJjZXNLZXldO1xuICAgICAgcmVzb3VyY2VzIHx8XG4gICAgICAgIChyZXNvdXJjZXMgPSByb290W2ludGVybmFsUm9vdE5vZGVSZXNvdXJjZXNLZXldID1cbiAgICAgICAgICB7IGhvaXN0YWJsZVN0eWxlczogbmV3IE1hcCgpLCBob2lzdGFibGVTY3JpcHRzOiBuZXcgTWFwKCkgfSk7XG4gICAgICByZXR1cm4gcmVzb3VyY2VzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrTm9kZUFzSG9pc3RhYmxlKG5vZGUpIHtcbiAgICAgIG5vZGVbaW50ZXJuYWxIb2lzdGFibGVNYXJrZXJdID0gITA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlZ2lzdGVyVHdvUGhhc2VFdmVudChyZWdpc3RyYXRpb25OYW1lLCBkZXBlbmRlbmNpZXMpIHtcbiAgICAgIHJlZ2lzdGVyRGlyZWN0RXZlbnQocmVnaXN0cmF0aW9uTmFtZSwgZGVwZW5kZW5jaWVzKTtcbiAgICAgIHJlZ2lzdGVyRGlyZWN0RXZlbnQocmVnaXN0cmF0aW9uTmFtZSArIFwiQ2FwdHVyZVwiLCBkZXBlbmRlbmNpZXMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWdpc3RlckRpcmVjdEV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUsIGRlcGVuZGVuY2llcykge1xuICAgICAgcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llc1tyZWdpc3RyYXRpb25OYW1lXSAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiRXZlbnRSZWdpc3RyeTogTW9yZSB0aGFuIG9uZSBwbHVnaW4gYXR0ZW1wdGVkIHRvIHB1Ymxpc2ggdGhlIHNhbWUgcmVnaXN0cmF0aW9uIG5hbWUsIGAlc2AuXCIsXG4gICAgICAgICAgcmVnaXN0cmF0aW9uTmFtZVxuICAgICAgICApO1xuICAgICAgcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llc1tyZWdpc3RyYXRpb25OYW1lXSA9IGRlcGVuZGVuY2llcztcbiAgICAgIHZhciBsb3dlckNhc2VkTmFtZSA9IHJlZ2lzdHJhdGlvbk5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXNbbG93ZXJDYXNlZE5hbWVdID0gcmVnaXN0cmF0aW9uTmFtZTtcbiAgICAgIFwib25Eb3VibGVDbGlja1wiID09PSByZWdpc3RyYXRpb25OYW1lICYmXG4gICAgICAgIChwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzLm9uZGJsY2xpY2sgPSByZWdpc3RyYXRpb25OYW1lKTtcbiAgICAgIGZvciAoXG4gICAgICAgIHJlZ2lzdHJhdGlvbk5hbWUgPSAwO1xuICAgICAgICByZWdpc3RyYXRpb25OYW1lIDwgZGVwZW5kZW5jaWVzLmxlbmd0aDtcbiAgICAgICAgcmVnaXN0cmF0aW9uTmFtZSsrXG4gICAgICApXG4gICAgICAgIGFsbE5hdGl2ZUV2ZW50cy5hZGQoZGVwZW5kZW5jaWVzW3JlZ2lzdHJhdGlvbk5hbWVdKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tDb250cm9sbGVkVmFsdWVQcm9wcyh0YWdOYW1lLCBwcm9wcykge1xuICAgICAgaGFzUmVhZE9ubHlWYWx1ZVtwcm9wcy50eXBlXSB8fFxuICAgICAgICBwcm9wcy5vbkNoYW5nZSB8fFxuICAgICAgICBwcm9wcy5vbklucHV0IHx8XG4gICAgICAgIHByb3BzLnJlYWRPbmx5IHx8XG4gICAgICAgIHByb3BzLmRpc2FibGVkIHx8XG4gICAgICAgIG51bGwgPT0gcHJvcHMudmFsdWUgfHxcbiAgICAgICAgKFwic2VsZWN0XCIgPT09IHRhZ05hbWVcbiAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiWW91IHByb3ZpZGVkIGEgYHZhbHVlYCBwcm9wIHRvIGEgZm9ybSBmaWVsZCB3aXRob3V0IGFuIGBvbkNoYW5nZWAgaGFuZGxlci4gVGhpcyB3aWxsIHJlbmRlciBhIHJlYWQtb25seSBmaWVsZC4gSWYgdGhlIGZpZWxkIHNob3VsZCBiZSBtdXRhYmxlIHVzZSBgZGVmYXVsdFZhbHVlYC4gT3RoZXJ3aXNlLCBzZXQgYG9uQ2hhbmdlYC5cIlxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJZb3UgcHJvdmlkZWQgYSBgdmFsdWVgIHByb3AgdG8gYSBmb3JtIGZpZWxkIHdpdGhvdXQgYW4gYG9uQ2hhbmdlYCBoYW5kbGVyLiBUaGlzIHdpbGwgcmVuZGVyIGEgcmVhZC1vbmx5IGZpZWxkLiBJZiB0aGUgZmllbGQgc2hvdWxkIGJlIG11dGFibGUgdXNlIGBkZWZhdWx0VmFsdWVgLiBPdGhlcndpc2UsIHNldCBlaXRoZXIgYG9uQ2hhbmdlYCBvciBgcmVhZE9ubHlgLlwiXG4gICAgICAgICAgICApKTtcbiAgICAgIHByb3BzLm9uQ2hhbmdlIHx8XG4gICAgICAgIHByb3BzLnJlYWRPbmx5IHx8XG4gICAgICAgIHByb3BzLmRpc2FibGVkIHx8XG4gICAgICAgIG51bGwgPT0gcHJvcHMuY2hlY2tlZCB8fFxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiWW91IHByb3ZpZGVkIGEgYGNoZWNrZWRgIHByb3AgdG8gYSBmb3JtIGZpZWxkIHdpdGhvdXQgYW4gYG9uQ2hhbmdlYCBoYW5kbGVyLiBUaGlzIHdpbGwgcmVuZGVyIGEgcmVhZC1vbmx5IGZpZWxkLiBJZiB0aGUgZmllbGQgc2hvdWxkIGJlIG11dGFibGUgdXNlIGBkZWZhdWx0Q2hlY2tlZGAuIE90aGVyd2lzZSwgc2V0IGVpdGhlciBgb25DaGFuZ2VgIG9yIGByZWFkT25seWAuXCJcbiAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNBdHRyaWJ1dGVOYW1lU2FmZShhdHRyaWJ1dGVOYW1lKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh2YWxpZGF0ZWRBdHRyaWJ1dGVOYW1lQ2FjaGUsIGF0dHJpYnV0ZU5hbWUpKVxuICAgICAgICByZXR1cm4gITA7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChpbGxlZ2FsQXR0cmlidXRlTmFtZUNhY2hlLCBhdHRyaWJ1dGVOYW1lKSlcbiAgICAgICAgcmV0dXJuICExO1xuICAgICAgaWYgKFZBTElEX0FUVFJJQlVURV9OQU1FX1JFR0VYLnRlc3QoYXR0cmlidXRlTmFtZSkpXG4gICAgICAgIHJldHVybiAodmFsaWRhdGVkQXR0cmlidXRlTmFtZUNhY2hlW2F0dHJpYnV0ZU5hbWVdID0gITApO1xuICAgICAgaWxsZWdhbEF0dHJpYnV0ZU5hbWVDYWNoZVthdHRyaWJ1dGVOYW1lXSA9ICEwO1xuICAgICAgY29uc29sZS5lcnJvcihcIkludmFsaWQgYXR0cmlidXRlIG5hbWU6IGAlc2BcIiwgYXR0cmlidXRlTmFtZSk7XG4gICAgICByZXR1cm4gITE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFZhbHVlRm9yQXR0cmlidXRlT25DdXN0b21Db21wb25lbnQobm9kZSwgbmFtZSwgZXhwZWN0ZWQpIHtcbiAgICAgIGlmIChpc0F0dHJpYnV0ZU5hbWVTYWZlKG5hbWUpKSB7XG4gICAgICAgIGlmICghbm9kZS5oYXNBdHRyaWJ1dGUobmFtZSkpIHtcbiAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBleHBlY3RlZCkge1xuICAgICAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgICByZXR1cm4gZXhwZWN0ZWQ7XG4gICAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgICAgaWYgKCExID09PSBleHBlY3RlZCkgcmV0dXJuIGV4cGVjdGVkO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdm9pZCAwID09PSBleHBlY3RlZCA/IHZvaWQgMCA6IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZSA9IG5vZGUuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICAgICAgICBpZiAoXCJcIiA9PT0gbm9kZSAmJiAhMCA9PT0gZXhwZWN0ZWQpIHJldHVybiAhMDtcbiAgICAgICAgY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbihleHBlY3RlZCwgbmFtZSk7XG4gICAgICAgIHJldHVybiBub2RlID09PSBcIlwiICsgZXhwZWN0ZWQgPyBleHBlY3RlZCA6IG5vZGU7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNldFZhbHVlRm9yQXR0cmlidXRlKG5vZGUsIG5hbWUsIHZhbHVlKSB7XG4gICAgICBpZiAoaXNBdHRyaWJ1dGVOYW1lU2FmZShuYW1lKSlcbiAgICAgICAgaWYgKG51bGwgPT09IHZhbHVlKSBub2RlLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgICAgdmFyIHByZWZpeCA9IG5hbWUudG9Mb3dlckNhc2UoKS5zbGljZSgwLCA1KTtcbiAgICAgICAgICAgICAgaWYgKFwiZGF0YS1cIiAhPT0gcHJlZml4ICYmIFwiYXJpYS1cIiAhPT0gcHJlZml4KSB7XG4gICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odmFsdWUsIG5hbWUpO1xuICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKG5hbWUsIFwiXCIgKyB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0VmFsdWVGb3JLbm93bkF0dHJpYnV0ZShub2RlLCBuYW1lLCB2YWx1ZSkge1xuICAgICAgaWYgKG51bGwgPT09IHZhbHVlKSBub2RlLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odmFsdWUsIG5hbWUpO1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShuYW1lLCBcIlwiICsgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzZXRWYWx1ZUZvck5hbWVzcGFjZWRBdHRyaWJ1dGUobm9kZSwgbmFtZXNwYWNlLCBuYW1lLCB2YWx1ZSkge1xuICAgICAgaWYgKG51bGwgPT09IHZhbHVlKSBub2RlLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odmFsdWUsIG5hbWUpO1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZU5TKG5hbWVzcGFjZSwgbmFtZSwgXCJcIiArIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0VG9TdHJpbmdWYWx1ZSh2YWx1ZSkge1xuICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgY2FzZSBcImJpZ2ludFwiOlxuICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgIHJldHVybiBjaGVja0Zvcm1GaWVsZFZhbHVlU3RyaW5nQ29lcmNpb24odmFsdWUpLCB2YWx1ZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaXNDaGVja2FibGUoZWxlbSkge1xuICAgICAgdmFyIHR5cGUgPSBlbGVtLnR5cGU7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAoZWxlbSA9IGVsZW0ubm9kZU5hbWUpICYmXG4gICAgICAgIFwiaW5wdXRcIiA9PT0gZWxlbS50b0xvd2VyQ2FzZSgpICYmXG4gICAgICAgIChcImNoZWNrYm94XCIgPT09IHR5cGUgfHwgXCJyYWRpb1wiID09PSB0eXBlKVxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdHJhY2tWYWx1ZU9uTm9kZShub2RlLCB2YWx1ZUZpZWxkLCBjdXJyZW50VmFsdWUpIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICAgICAgbm9kZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsXG4gICAgICAgIHZhbHVlRmllbGRcbiAgICAgICk7XG4gICAgICBpZiAoXG4gICAgICAgICFub2RlLmhhc093blByb3BlcnR5KHZhbHVlRmllbGQpICYmXG4gICAgICAgIFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiBkZXNjcmlwdG9yICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGRlc2NyaXB0b3Iuc2V0XG4gICAgICApIHtcbiAgICAgICAgdmFyIGdldCA9IGRlc2NyaXB0b3IuZ2V0LFxuICAgICAgICAgIHNldCA9IGRlc2NyaXB0b3Iuc2V0O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobm9kZSwgdmFsdWVGaWVsZCwge1xuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0LmNhbGwodGhpcyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgY2hlY2tGb3JtRmllbGRWYWx1ZVN0cmluZ0NvZXJjaW9uKHZhbHVlKTtcbiAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IFwiXCIgKyB2YWx1ZTtcbiAgICAgICAgICAgIHNldC5jYWxsKHRoaXMsIHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobm9kZSwgdmFsdWVGaWVsZCwge1xuICAgICAgICAgIGVudW1lcmFibGU6IGRlc2NyaXB0b3IuZW51bWVyYWJsZVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBnZXRWYWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNldFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGNoZWNrRm9ybUZpZWxkVmFsdWVTdHJpbmdDb2VyY2lvbih2YWx1ZSk7XG4gICAgICAgICAgICBjdXJyZW50VmFsdWUgPSBcIlwiICsgdmFsdWU7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdG9wVHJhY2tpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIG5vZGUuX3ZhbHVlVHJhY2tlciA9IG51bGw7XG4gICAgICAgICAgICBkZWxldGUgbm9kZVt2YWx1ZUZpZWxkXTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRyYWNrKG5vZGUpIHtcbiAgICAgIGlmICghbm9kZS5fdmFsdWVUcmFja2VyKSB7XG4gICAgICAgIHZhciB2YWx1ZUZpZWxkID0gaXNDaGVja2FibGUobm9kZSkgPyBcImNoZWNrZWRcIiA6IFwidmFsdWVcIjtcbiAgICAgICAgbm9kZS5fdmFsdWVUcmFja2VyID0gdHJhY2tWYWx1ZU9uTm9kZShcbiAgICAgICAgICBub2RlLFxuICAgICAgICAgIHZhbHVlRmllbGQsXG4gICAgICAgICAgXCJcIiArIG5vZGVbdmFsdWVGaWVsZF1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlVmFsdWVJZkNoYW5nZWQobm9kZSkge1xuICAgICAgaWYgKCFub2RlKSByZXR1cm4gITE7XG4gICAgICB2YXIgdHJhY2tlciA9IG5vZGUuX3ZhbHVlVHJhY2tlcjtcbiAgICAgIGlmICghdHJhY2tlcikgcmV0dXJuICEwO1xuICAgICAgdmFyIGxhc3RWYWx1ZSA9IHRyYWNrZXIuZ2V0VmFsdWUoKTtcbiAgICAgIHZhciB2YWx1ZSA9IFwiXCI7XG4gICAgICBub2RlICYmXG4gICAgICAgICh2YWx1ZSA9IGlzQ2hlY2thYmxlKG5vZGUpXG4gICAgICAgICAgPyBub2RlLmNoZWNrZWRcbiAgICAgICAgICAgID8gXCJ0cnVlXCJcbiAgICAgICAgICAgIDogXCJmYWxzZVwiXG4gICAgICAgICAgOiBub2RlLnZhbHVlKTtcbiAgICAgIG5vZGUgPSB2YWx1ZTtcbiAgICAgIHJldHVybiBub2RlICE9PSBsYXN0VmFsdWUgPyAodHJhY2tlci5zZXRWYWx1ZShub2RlKSwgITApIDogITE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEFjdGl2ZUVsZW1lbnQoZG9jKSB7XG4gICAgICBkb2MgPSBkb2MgfHwgKFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiBkb2N1bWVudCA/IGRvY3VtZW50IDogdm9pZCAwKTtcbiAgICAgIGlmIChcInVuZGVmaW5lZFwiID09PSB0eXBlb2YgZG9jKSByZXR1cm4gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBkb2MuYWN0aXZlRWxlbWVudCB8fCBkb2MuYm9keTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGRvYy5ib2R5O1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBlc2NhcGVTZWxlY3RvckF0dHJpYnV0ZVZhbHVlSW5zaWRlRG91YmxlUXVvdGVzKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUucmVwbGFjZShcbiAgICAgICAgZXNjYXBlU2VsZWN0b3JBdHRyaWJ1dGVWYWx1ZUluc2lkZURvdWJsZVF1b3Rlc1JlZ2V4LFxuICAgICAgICBmdW5jdGlvbiAoY2gpIHtcbiAgICAgICAgICByZXR1cm4gXCJcXFxcXCIgKyBjaC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSArIFwiIFwiO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUlucHV0UHJvcHMoZWxlbWVudCwgcHJvcHMpIHtcbiAgICAgIHZvaWQgMCA9PT0gcHJvcHMuY2hlY2tlZCB8fFxuICAgICAgICB2b2lkIDAgPT09IHByb3BzLmRlZmF1bHRDaGVja2VkIHx8XG4gICAgICAgIGRpZFdhcm5DaGVja2VkRGVmYXVsdENoZWNrZWQgfHxcbiAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCIlcyBjb250YWlucyBhbiBpbnB1dCBvZiB0eXBlICVzIHdpdGggYm90aCBjaGVja2VkIGFuZCBkZWZhdWx0Q2hlY2tlZCBwcm9wcy4gSW5wdXQgZWxlbWVudHMgbXVzdCBiZSBlaXRoZXIgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgKHNwZWNpZnkgZWl0aGVyIHRoZSBjaGVja2VkIHByb3AsIG9yIHRoZSBkZWZhdWx0Q2hlY2tlZCBwcm9wLCBidXQgbm90IGJvdGgpLiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIGlucHV0IGVsZW1lbnQgYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHNcIixcbiAgICAgICAgICBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpIHx8IFwiQSBjb21wb25lbnRcIixcbiAgICAgICAgICBwcm9wcy50eXBlXG4gICAgICAgICksXG4gICAgICAgIChkaWRXYXJuQ2hlY2tlZERlZmF1bHRDaGVja2VkID0gITApKTtcbiAgICAgIHZvaWQgMCA9PT0gcHJvcHMudmFsdWUgfHxcbiAgICAgICAgdm9pZCAwID09PSBwcm9wcy5kZWZhdWx0VmFsdWUgfHxcbiAgICAgICAgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDEgfHxcbiAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCIlcyBjb250YWlucyBhbiBpbnB1dCBvZiB0eXBlICVzIHdpdGggYm90aCB2YWx1ZSBhbmQgZGVmYXVsdFZhbHVlIHByb3BzLiBJbnB1dCBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAoc3BlY2lmeSBlaXRoZXIgdGhlIHZhbHVlIHByb3AsIG9yIHRoZSBkZWZhdWx0VmFsdWUgcHJvcCwgYnV0IG5vdCBib3RoKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCBlbGVtZW50IGFuZCByZW1vdmUgb25lIG9mIHRoZXNlIHByb3BzLiBNb3JlIGluZm86IGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzXCIsXG4gICAgICAgICAgZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKSB8fCBcIkEgY29tcG9uZW50XCIsXG4gICAgICAgICAgcHJvcHMudHlwZVxuICAgICAgICApLFxuICAgICAgICAoZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDEgPSAhMCkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVJbnB1dChcbiAgICAgIGVsZW1lbnQsXG4gICAgICB2YWx1ZSxcbiAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgIGxhc3REZWZhdWx0VmFsdWUsXG4gICAgICBjaGVja2VkLFxuICAgICAgZGVmYXVsdENoZWNrZWQsXG4gICAgICB0eXBlLFxuICAgICAgbmFtZVxuICAgICkge1xuICAgICAgZWxlbWVudC5uYW1lID0gXCJcIjtcbiAgICAgIG51bGwgIT0gdHlwZSAmJlxuICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgdHlwZSAmJlxuICAgICAgXCJzeW1ib2xcIiAhPT0gdHlwZW9mIHR5cGUgJiZcbiAgICAgIFwiYm9vbGVhblwiICE9PSB0eXBlb2YgdHlwZVxuICAgICAgICA/IChjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKHR5cGUsIFwidHlwZVwiKSwgKGVsZW1lbnQudHlwZSA9IHR5cGUpKVxuICAgICAgICA6IGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKFwidHlwZVwiKTtcbiAgICAgIGlmIChudWxsICE9IHZhbHVlKVxuICAgICAgICBpZiAoXCJudW1iZXJcIiA9PT0gdHlwZSkge1xuICAgICAgICAgIGlmICgoMCA9PT0gdmFsdWUgJiYgXCJcIiA9PT0gZWxlbWVudC52YWx1ZSkgfHwgZWxlbWVudC52YWx1ZSAhPSB2YWx1ZSlcbiAgICAgICAgICAgIGVsZW1lbnQudmFsdWUgPSBcIlwiICsgZ2V0VG9TdHJpbmdWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIGVsZW1lbnQudmFsdWUgIT09IFwiXCIgKyBnZXRUb1N0cmluZ1ZhbHVlKHZhbHVlKSAmJlxuICAgICAgICAgICAgKGVsZW1lbnQudmFsdWUgPSBcIlwiICsgZ2V0VG9TdHJpbmdWYWx1ZSh2YWx1ZSkpO1xuICAgICAgZWxzZVxuICAgICAgICAoXCJzdWJtaXRcIiAhPT0gdHlwZSAmJiBcInJlc2V0XCIgIT09IHR5cGUpIHx8XG4gICAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoXCJ2YWx1ZVwiKTtcbiAgICAgIG51bGwgIT0gdmFsdWVcbiAgICAgICAgPyBzZXREZWZhdWx0VmFsdWUoZWxlbWVudCwgdHlwZSwgZ2V0VG9TdHJpbmdWYWx1ZSh2YWx1ZSkpXG4gICAgICAgIDogbnVsbCAhPSBkZWZhdWx0VmFsdWVcbiAgICAgICAgICA/IHNldERlZmF1bHRWYWx1ZShlbGVtZW50LCB0eXBlLCBnZXRUb1N0cmluZ1ZhbHVlKGRlZmF1bHRWYWx1ZSkpXG4gICAgICAgICAgOiBudWxsICE9IGxhc3REZWZhdWx0VmFsdWUgJiYgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoXCJ2YWx1ZVwiKTtcbiAgICAgIG51bGwgPT0gY2hlY2tlZCAmJlxuICAgICAgICBudWxsICE9IGRlZmF1bHRDaGVja2VkICYmXG4gICAgICAgIChlbGVtZW50LmRlZmF1bHRDaGVja2VkID0gISFkZWZhdWx0Q2hlY2tlZCk7XG4gICAgICBudWxsICE9IGNoZWNrZWQgJiZcbiAgICAgICAgKGVsZW1lbnQuY2hlY2tlZCA9XG4gICAgICAgICAgY2hlY2tlZCAmJlxuICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGNoZWNrZWQgJiZcbiAgICAgICAgICBcInN5bWJvbFwiICE9PSB0eXBlb2YgY2hlY2tlZCk7XG4gICAgICBudWxsICE9IG5hbWUgJiZcbiAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIG5hbWUgJiZcbiAgICAgIFwic3ltYm9sXCIgIT09IHR5cGVvZiBuYW1lICYmXG4gICAgICBcImJvb2xlYW5cIiAhPT0gdHlwZW9mIG5hbWVcbiAgICAgICAgPyAoY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbihuYW1lLCBcIm5hbWVcIiksXG4gICAgICAgICAgKGVsZW1lbnQubmFtZSA9IFwiXCIgKyBnZXRUb1N0cmluZ1ZhbHVlKG5hbWUpKSlcbiAgICAgICAgOiBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShcIm5hbWVcIik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluaXRJbnB1dChcbiAgICAgIGVsZW1lbnQsXG4gICAgICB2YWx1ZSxcbiAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgIGNoZWNrZWQsXG4gICAgICBkZWZhdWx0Q2hlY2tlZCxcbiAgICAgIHR5cGUsXG4gICAgICBuYW1lLFxuICAgICAgaXNIeWRyYXRpbmdcbiAgICApIHtcbiAgICAgIG51bGwgIT0gdHlwZSAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiB0eXBlICYmXG4gICAgICAgIFwic3ltYm9sXCIgIT09IHR5cGVvZiB0eXBlICYmXG4gICAgICAgIFwiYm9vbGVhblwiICE9PSB0eXBlb2YgdHlwZSAmJlxuICAgICAgICAoY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih0eXBlLCBcInR5cGVcIiksIChlbGVtZW50LnR5cGUgPSB0eXBlKSk7XG4gICAgICBpZiAobnVsbCAhPSB2YWx1ZSB8fCBudWxsICE9IGRlZmF1bHRWYWx1ZSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIShcbiAgICAgICAgICAgIChcInN1Ym1pdFwiICE9PSB0eXBlICYmIFwicmVzZXRcIiAhPT0gdHlwZSkgfHxcbiAgICAgICAgICAgICh2b2lkIDAgIT09IHZhbHVlICYmIG51bGwgIT09IHZhbHVlKVxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgdHJhY2soZWxlbWVudCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9XG4gICAgICAgICAgbnVsbCAhPSBkZWZhdWx0VmFsdWUgPyBcIlwiICsgZ2V0VG9TdHJpbmdWYWx1ZShkZWZhdWx0VmFsdWUpIDogXCJcIjtcbiAgICAgICAgdmFsdWUgPSBudWxsICE9IHZhbHVlID8gXCJcIiArIGdldFRvU3RyaW5nVmFsdWUodmFsdWUpIDogZGVmYXVsdFZhbHVlO1xuICAgICAgICBpc0h5ZHJhdGluZyB8fCB2YWx1ZSA9PT0gZWxlbWVudC52YWx1ZSB8fCAoZWxlbWVudC52YWx1ZSA9IHZhbHVlKTtcbiAgICAgICAgZWxlbWVudC5kZWZhdWx0VmFsdWUgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGNoZWNrZWQgPSBudWxsICE9IGNoZWNrZWQgPyBjaGVja2VkIDogZGVmYXVsdENoZWNrZWQ7XG4gICAgICBjaGVja2VkID1cbiAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgY2hlY2tlZCAmJlxuICAgICAgICBcInN5bWJvbFwiICE9PSB0eXBlb2YgY2hlY2tlZCAmJlxuICAgICAgICAhIWNoZWNrZWQ7XG4gICAgICBlbGVtZW50LmNoZWNrZWQgPSBpc0h5ZHJhdGluZyA/IGVsZW1lbnQuY2hlY2tlZCA6ICEhY2hlY2tlZDtcbiAgICAgIGVsZW1lbnQuZGVmYXVsdENoZWNrZWQgPSAhIWNoZWNrZWQ7XG4gICAgICBudWxsICE9IG5hbWUgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgbmFtZSAmJlxuICAgICAgICBcInN5bWJvbFwiICE9PSB0eXBlb2YgbmFtZSAmJlxuICAgICAgICBcImJvb2xlYW5cIiAhPT0gdHlwZW9mIG5hbWUgJiZcbiAgICAgICAgKGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24obmFtZSwgXCJuYW1lXCIpLCAoZWxlbWVudC5uYW1lID0gbmFtZSkpO1xuICAgICAgdHJhY2soZWxlbWVudCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNldERlZmF1bHRWYWx1ZShub2RlLCB0eXBlLCB2YWx1ZSkge1xuICAgICAgKFwibnVtYmVyXCIgPT09IHR5cGUgJiYgZ2V0QWN0aXZlRWxlbWVudChub2RlLm93bmVyRG9jdW1lbnQpID09PSBub2RlKSB8fFxuICAgICAgICBub2RlLmRlZmF1bHRWYWx1ZSA9PT0gXCJcIiArIHZhbHVlIHx8XG4gICAgICAgIChub2RlLmRlZmF1bHRWYWx1ZSA9IFwiXCIgKyB2YWx1ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlT3B0aW9uUHJvcHMoZWxlbWVudCwgcHJvcHMpIHtcbiAgICAgIG51bGwgPT0gcHJvcHMudmFsdWUgJiZcbiAgICAgICAgKFwib2JqZWN0XCIgPT09IHR5cGVvZiBwcm9wcy5jaGlsZHJlbiAmJiBudWxsICE9PSBwcm9wcy5jaGlsZHJlblxuICAgICAgICAgID8gUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChwcm9wcy5jaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgICAgICAgIG51bGwgPT0gY2hpbGQgfHxcbiAgICAgICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgY2hpbGQgfHxcbiAgICAgICAgICAgICAgICBcIm51bWJlclwiID09PSB0eXBlb2YgY2hpbGQgfHxcbiAgICAgICAgICAgICAgICBcImJpZ2ludFwiID09PSB0eXBlb2YgY2hpbGQgfHxcbiAgICAgICAgICAgICAgICBkaWRXYXJuSW52YWxpZENoaWxkIHx8XG4gICAgICAgICAgICAgICAgKChkaWRXYXJuSW52YWxpZENoaWxkID0gITApLFxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICBcIkNhbm5vdCBpbmZlciB0aGUgb3B0aW9uIHZhbHVlIG9mIGNvbXBsZXggY2hpbGRyZW4uIFBhc3MgYSBgdmFsdWVgIHByb3Agb3IgdXNlIGEgcGxhaW4gc3RyaW5nIGFzIGNoaWxkcmVuIHRvIDxvcHRpb24+LlwiXG4gICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogbnVsbCA9PSBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCB8fFxuICAgICAgICAgICAgZGlkV2FybkludmFsaWRJbm5lckhUTUwgfHxcbiAgICAgICAgICAgICgoZGlkV2FybkludmFsaWRJbm5lckhUTUwgPSAhMCksXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlBhc3MgYSBgdmFsdWVgIHByb3AgaWYgeW91IHNldCBkYW5nZXJvdXNseUlubmVySFRNTCBzbyBSZWFjdCBrbm93cyB3aGljaCB2YWx1ZSBzaG91bGQgYmUgc2VsZWN0ZWQuXCJcbiAgICAgICAgICAgICkpKTtcbiAgICAgIG51bGwgPT0gcHJvcHMuc2VsZWN0ZWQgfHxcbiAgICAgICAgZGlkV2FyblNlbGVjdGVkU2V0T25PcHRpb24gfHxcbiAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJVc2UgdGhlIGBkZWZhdWx0VmFsdWVgIG9yIGB2YWx1ZWAgcHJvcHMgb24gPHNlbGVjdD4gaW5zdGVhZCBvZiBzZXR0aW5nIGBzZWxlY3RlZGAgb24gPG9wdGlvbj4uXCJcbiAgICAgICAgKSxcbiAgICAgICAgKGRpZFdhcm5TZWxlY3RlZFNldE9uT3B0aW9uID0gITApKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkge1xuICAgICAgdmFyIG93bmVyTmFtZSA9IGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCk7XG4gICAgICByZXR1cm4gb3duZXJOYW1lXG4gICAgICAgID8gXCJcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgXCIgKyBvd25lck5hbWUgKyBcImAuXCJcbiAgICAgICAgOiBcIlwiO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVPcHRpb25zKG5vZGUsIG11bHRpcGxlLCBwcm9wVmFsdWUsIHNldERlZmF1bHRTZWxlY3RlZCkge1xuICAgICAgbm9kZSA9IG5vZGUub3B0aW9ucztcbiAgICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgICBtdWx0aXBsZSA9IHt9O1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BWYWx1ZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICBtdWx0aXBsZVtcIiRcIiArIHByb3BWYWx1ZVtpXV0gPSAhMDtcbiAgICAgICAgZm9yIChwcm9wVmFsdWUgPSAwOyBwcm9wVmFsdWUgPCBub2RlLmxlbmd0aDsgcHJvcFZhbHVlKyspXG4gICAgICAgICAgKGkgPSBtdWx0aXBsZS5oYXNPd25Qcm9wZXJ0eShcIiRcIiArIG5vZGVbcHJvcFZhbHVlXS52YWx1ZSkpLFxuICAgICAgICAgICAgbm9kZVtwcm9wVmFsdWVdLnNlbGVjdGVkICE9PSBpICYmIChub2RlW3Byb3BWYWx1ZV0uc2VsZWN0ZWQgPSBpKSxcbiAgICAgICAgICAgIGkgJiYgc2V0RGVmYXVsdFNlbGVjdGVkICYmIChub2RlW3Byb3BWYWx1ZV0uZGVmYXVsdFNlbGVjdGVkID0gITApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvcFZhbHVlID0gXCJcIiArIGdldFRvU3RyaW5nVmFsdWUocHJvcFZhbHVlKTtcbiAgICAgICAgbXVsdGlwbGUgPSBudWxsO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbm9kZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChub2RlW2ldLnZhbHVlID09PSBwcm9wVmFsdWUpIHtcbiAgICAgICAgICAgIG5vZGVbaV0uc2VsZWN0ZWQgPSAhMDtcbiAgICAgICAgICAgIHNldERlZmF1bHRTZWxlY3RlZCAmJiAobm9kZVtpXS5kZWZhdWx0U2VsZWN0ZWQgPSAhMCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIG51bGwgIT09IG11bHRpcGxlIHx8IG5vZGVbaV0uZGlzYWJsZWQgfHwgKG11bHRpcGxlID0gbm9kZVtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgbnVsbCAhPT0gbXVsdGlwbGUgJiYgKG11bHRpcGxlLnNlbGVjdGVkID0gITApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZVNlbGVjdFByb3BzKGVsZW1lbnQsIHByb3BzKSB7XG4gICAgICBmb3IgKGVsZW1lbnQgPSAwOyBlbGVtZW50IDwgdmFsdWVQcm9wTmFtZXMubGVuZ3RoOyBlbGVtZW50KyspIHtcbiAgICAgICAgdmFyIHByb3BOYW1lID0gdmFsdWVQcm9wTmFtZXNbZWxlbWVudF07XG4gICAgICAgIGlmIChudWxsICE9IHByb3BzW3Byb3BOYW1lXSkge1xuICAgICAgICAgIHZhciBwcm9wTmFtZUlzQXJyYXkgPSBpc0FycmF5SW1wbChwcm9wc1twcm9wTmFtZV0pO1xuICAgICAgICAgIHByb3BzLm11bHRpcGxlICYmICFwcm9wTmFtZUlzQXJyYXlcbiAgICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIlRoZSBgJXNgIHByb3Agc3VwcGxpZWQgdG8gPHNlbGVjdD4gbXVzdCBiZSBhbiBhcnJheSBpZiBgbXVsdGlwbGVgIGlzIHRydWUuJXNcIixcbiAgICAgICAgICAgICAgICBwcm9wTmFtZSxcbiAgICAgICAgICAgICAgICBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6ICFwcm9wcy5tdWx0aXBsZSAmJlxuICAgICAgICAgICAgICBwcm9wTmFtZUlzQXJyYXkgJiZcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIlRoZSBgJXNgIHByb3Agc3VwcGxpZWQgdG8gPHNlbGVjdD4gbXVzdCBiZSBhIHNjYWxhciB2YWx1ZSBpZiBgbXVsdGlwbGVgIGlzIGZhbHNlLiVzXCIsXG4gICAgICAgICAgICAgICAgcHJvcE5hbWUsXG4gICAgICAgICAgICAgICAgZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdm9pZCAwID09PSBwcm9wcy52YWx1ZSB8fFxuICAgICAgICB2b2lkIDAgPT09IHByb3BzLmRlZmF1bHRWYWx1ZSB8fFxuICAgICAgICBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUgfHxcbiAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJTZWxlY3QgZWxlbWVudHMgbXVzdCBiZSBlaXRoZXIgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgKHNwZWNpZnkgZWl0aGVyIHRoZSB2YWx1ZSBwcm9wLCBvciB0aGUgZGVmYXVsdFZhbHVlIHByb3AsIGJ1dCBub3QgYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgc2VsZWN0IGVsZW1lbnQgYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHNcIlxuICAgICAgICApLFxuICAgICAgICAoZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlID0gITApKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVUZXh0YXJlYVByb3BzKGVsZW1lbnQsIHByb3BzKSB7XG4gICAgICB2b2lkIDAgPT09IHByb3BzLnZhbHVlIHx8XG4gICAgICAgIHZvaWQgMCA9PT0gcHJvcHMuZGVmYXVsdFZhbHVlIHx8XG4gICAgICAgIGRpZFdhcm5WYWxEZWZhdWx0VmFsIHx8XG4gICAgICAgIChjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiJXMgY29udGFpbnMgYSB0ZXh0YXJlYSB3aXRoIGJvdGggdmFsdWUgYW5kIGRlZmF1bHRWYWx1ZSBwcm9wcy4gVGV4dGFyZWEgZWxlbWVudHMgbXVzdCBiZSBlaXRoZXIgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgKHNwZWNpZnkgZWl0aGVyIHRoZSB2YWx1ZSBwcm9wLCBvciB0aGUgZGVmYXVsdFZhbHVlIHByb3AsIGJ1dCBub3QgYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgdGV4dGFyZWEgYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHNcIixcbiAgICAgICAgICBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpIHx8IFwiQSBjb21wb25lbnRcIlxuICAgICAgICApLFxuICAgICAgICAoZGlkV2FyblZhbERlZmF1bHRWYWwgPSAhMCkpO1xuICAgICAgbnVsbCAhPSBwcm9wcy5jaGlsZHJlbiAmJlxuICAgICAgICBudWxsID09IHByb3BzLnZhbHVlICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJVc2UgdGhlIGBkZWZhdWx0VmFsdWVgIG9yIGB2YWx1ZWAgcHJvcHMgaW5zdGVhZCBvZiBzZXR0aW5nIGNoaWxkcmVuIG9uIDx0ZXh0YXJlYT4uXCJcbiAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlVGV4dGFyZWEoZWxlbWVudCwgdmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xuICAgICAgaWYgKFxuICAgICAgICBudWxsICE9IHZhbHVlICYmXG4gICAgICAgICgodmFsdWUgPSBcIlwiICsgZ2V0VG9TdHJpbmdWYWx1ZSh2YWx1ZSkpLFxuICAgICAgICB2YWx1ZSAhPT0gZWxlbWVudC52YWx1ZSAmJiAoZWxlbWVudC52YWx1ZSA9IHZhbHVlKSxcbiAgICAgICAgbnVsbCA9PSBkZWZhdWx0VmFsdWUpXG4gICAgICApIHtcbiAgICAgICAgZWxlbWVudC5kZWZhdWx0VmFsdWUgIT09IHZhbHVlICYmIChlbGVtZW50LmRlZmF1bHRWYWx1ZSA9IHZhbHVlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZWxlbWVudC5kZWZhdWx0VmFsdWUgPVxuICAgICAgICBudWxsICE9IGRlZmF1bHRWYWx1ZSA/IFwiXCIgKyBnZXRUb1N0cmluZ1ZhbHVlKGRlZmF1bHRWYWx1ZSkgOiBcIlwiO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbml0VGV4dGFyZWEoZWxlbWVudCwgdmFsdWUsIGRlZmF1bHRWYWx1ZSwgY2hpbGRyZW4pIHtcbiAgICAgIGlmIChudWxsID09IHZhbHVlKSB7XG4gICAgICAgIGlmIChudWxsICE9IGNoaWxkcmVuKSB7XG4gICAgICAgICAgaWYgKG51bGwgIT0gZGVmYXVsdFZhbHVlKVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgIFwiSWYgeW91IHN1cHBseSBgZGVmYXVsdFZhbHVlYCBvbiBhIDx0ZXh0YXJlYT4sIGRvIG5vdCBwYXNzIGNoaWxkcmVuLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGlmIChpc0FycmF5SW1wbChjaGlsZHJlbikpIHtcbiAgICAgICAgICAgIGlmICgxIDwgY2hpbGRyZW4ubGVuZ3RoKVxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIjx0ZXh0YXJlYT4gY2FuIG9ubHkgaGF2ZSBhdCBtb3N0IG9uZSBjaGlsZC5cIik7XG4gICAgICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuWzBdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBjaGlsZHJlbjtcbiAgICAgICAgfVxuICAgICAgICBudWxsID09IGRlZmF1bHRWYWx1ZSAmJiAoZGVmYXVsdFZhbHVlID0gXCJcIik7XG4gICAgICAgIHZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuICAgICAgZGVmYXVsdFZhbHVlID0gZ2V0VG9TdHJpbmdWYWx1ZSh2YWx1ZSk7XG4gICAgICBlbGVtZW50LmRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgIGNoaWxkcmVuID0gZWxlbWVudC50ZXh0Q29udGVudDtcbiAgICAgIGNoaWxkcmVuID09PSBkZWZhdWx0VmFsdWUgJiZcbiAgICAgICAgXCJcIiAhPT0gY2hpbGRyZW4gJiZcbiAgICAgICAgbnVsbCAhPT0gY2hpbGRyZW4gJiZcbiAgICAgICAgKGVsZW1lbnQudmFsdWUgPSBjaGlsZHJlbik7XG4gICAgICB0cmFjayhlbGVtZW50KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZE5vdGFibGVOb2RlKG5vZGUsIGluZGVudCkge1xuICAgICAgcmV0dXJuIHZvaWQgMCA9PT0gbm9kZS5zZXJ2ZXJQcm9wcyAmJlxuICAgICAgICAwID09PSBub2RlLnNlcnZlclRhaWwubGVuZ3RoICYmXG4gICAgICAgIDEgPT09IG5vZGUuY2hpbGRyZW4ubGVuZ3RoICYmXG4gICAgICAgIDMgPCBub2RlLmRpc3RhbmNlRnJvbUxlYWYgJiZcbiAgICAgICAgbm9kZS5kaXN0YW5jZUZyb21MZWFmID4gMTUgLSBpbmRlbnRcbiAgICAgICAgPyBmaW5kTm90YWJsZU5vZGUobm9kZS5jaGlsZHJlblswXSwgaW5kZW50KVxuICAgICAgICA6IG5vZGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluZGVudGF0aW9uKGluZGVudCkge1xuICAgICAgcmV0dXJuIFwiICBcIiArIFwiICBcIi5yZXBlYXQoaW5kZW50KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWRkZWQoaW5kZW50KSB7XG4gICAgICByZXR1cm4gXCIrIFwiICsgXCIgIFwiLnJlcGVhdChpbmRlbnQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZW1vdmVkKGluZGVudCkge1xuICAgICAgcmV0dXJuIFwiLSBcIiArIFwiICBcIi5yZXBlYXQoaW5kZW50KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVGaWJlclR5cGUoZmliZXIpIHtcbiAgICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICAgIGNhc2UgMjY6XG4gICAgICAgIGNhc2UgMjc6XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZXR1cm4gZmliZXIudHlwZTtcbiAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICByZXR1cm4gXCJMYXp5XCI7XG4gICAgICAgIGNhc2UgMzE6XG4gICAgICAgICAgcmV0dXJuIFwiQWN0aXZpdHlcIjtcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICByZXR1cm4gXCJTdXNwZW5zZVwiO1xuICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlTGlzdFwiO1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgcmV0dXJuIChmaWJlciA9IGZpYmVyLnR5cGUpLCBmaWJlci5kaXNwbGF5TmFtZSB8fCBmaWJlci5uYW1lIHx8IG51bGw7XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChmaWJlciA9IGZpYmVyLnR5cGUucmVuZGVyKSwgZmliZXIuZGlzcGxheU5hbWUgfHwgZmliZXIubmFtZSB8fCBudWxsXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiAoZmliZXIgPSBmaWJlci50eXBlKSwgZmliZXIuZGlzcGxheU5hbWUgfHwgZmliZXIubmFtZSB8fCBudWxsO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZVRleHROb2RlKGNvbnRlbnQsIG1heExlbmd0aCkge1xuICAgICAgcmV0dXJuIG5lZWRzRXNjYXBpbmcudGVzdChjb250ZW50KVxuICAgICAgICA/ICgoY29udGVudCA9IEpTT04uc3RyaW5naWZ5KGNvbnRlbnQpKSxcbiAgICAgICAgICBjb250ZW50Lmxlbmd0aCA+IG1heExlbmd0aCAtIDJcbiAgICAgICAgICAgID8gOCA+IG1heExlbmd0aFxuICAgICAgICAgICAgICA/ICd7XCIuLi5cIn0nXG4gICAgICAgICAgICAgIDogXCJ7XCIgKyBjb250ZW50LnNsaWNlKDAsIG1heExlbmd0aCAtIDcpICsgJy4uLlwifSdcbiAgICAgICAgICAgIDogXCJ7XCIgKyBjb250ZW50ICsgXCJ9XCIpXG4gICAgICAgIDogY29udGVudC5sZW5ndGggPiBtYXhMZW5ndGhcbiAgICAgICAgICA/IDUgPiBtYXhMZW5ndGhcbiAgICAgICAgICAgID8gJ3tcIi4uLlwifSdcbiAgICAgICAgICAgIDogY29udGVudC5zbGljZSgwLCBtYXhMZW5ndGggLSAzKSArIFwiLi4uXCJcbiAgICAgICAgICA6IGNvbnRlbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlVGV4dERpZmYoY2xpZW50VGV4dCwgc2VydmVyUHJvcHMsIGluZGVudCkge1xuICAgICAgdmFyIG1heExlbmd0aCA9IDEyMCAtIDIgKiBpbmRlbnQ7XG4gICAgICBpZiAobnVsbCA9PT0gc2VydmVyUHJvcHMpXG4gICAgICAgIHJldHVybiBhZGRlZChpbmRlbnQpICsgZGVzY3JpYmVUZXh0Tm9kZShjbGllbnRUZXh0LCBtYXhMZW5ndGgpICsgXCJcXG5cIjtcbiAgICAgIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2Ygc2VydmVyUHJvcHMpIHtcbiAgICAgICAgZm9yIChcbiAgICAgICAgICB2YXIgZmlyc3REaWZmID0gMDtcbiAgICAgICAgICBmaXJzdERpZmYgPCBzZXJ2ZXJQcm9wcy5sZW5ndGggJiZcbiAgICAgICAgICBmaXJzdERpZmYgPCBjbGllbnRUZXh0Lmxlbmd0aCAmJlxuICAgICAgICAgIHNlcnZlclByb3BzLmNoYXJDb2RlQXQoZmlyc3REaWZmKSA9PT1cbiAgICAgICAgICAgIGNsaWVudFRleHQuY2hhckNvZGVBdChmaXJzdERpZmYpO1xuICAgICAgICAgIGZpcnN0RGlmZisrXG4gICAgICAgICk7XG4gICAgICAgIGZpcnN0RGlmZiA+IG1heExlbmd0aCAtIDggJiZcbiAgICAgICAgICAxMCA8IGZpcnN0RGlmZiAmJlxuICAgICAgICAgICgoY2xpZW50VGV4dCA9IFwiLi4uXCIgKyBjbGllbnRUZXh0LnNsaWNlKGZpcnN0RGlmZiAtIDgpKSxcbiAgICAgICAgICAoc2VydmVyUHJvcHMgPSBcIi4uLlwiICsgc2VydmVyUHJvcHMuc2xpY2UoZmlyc3REaWZmIC0gOCkpKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBhZGRlZChpbmRlbnQpICtcbiAgICAgICAgICBkZXNjcmliZVRleHROb2RlKGNsaWVudFRleHQsIG1heExlbmd0aCkgK1xuICAgICAgICAgIFwiXFxuXCIgK1xuICAgICAgICAgIHJlbW92ZWQoaW5kZW50KSArXG4gICAgICAgICAgZGVzY3JpYmVUZXh0Tm9kZShzZXJ2ZXJQcm9wcywgbWF4TGVuZ3RoKSArXG4gICAgICAgICAgXCJcXG5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgaW5kZW50YXRpb24oaW5kZW50KSArIGRlc2NyaWJlVGV4dE5vZGUoY2xpZW50VGV4dCwgbWF4TGVuZ3RoKSArIFwiXFxuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG9iamVjdE5hbWUob2JqZWN0KSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ1xuICAgICAgICAuY2FsbChvYmplY3QpXG4gICAgICAgIC5yZXBsYWNlKC9eXFxbb2JqZWN0ICguKilcXF0kLywgZnVuY3Rpb24gKG0sIHAwKSB7XG4gICAgICAgICAgcmV0dXJuIHAwO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVWYWx1ZSh2YWx1ZSwgbWF4TGVuZ3RoKSB7XG4gICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICh2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKSksXG4gICAgICAgICAgICB2YWx1ZS5sZW5ndGggPiBtYXhMZW5ndGhcbiAgICAgICAgICAgICAgPyA1ID4gbWF4TGVuZ3RoXG4gICAgICAgICAgICAgICAgPyAnXCIuLi5cIidcbiAgICAgICAgICAgICAgICA6IHZhbHVlLnNsaWNlKDAsIG1heExlbmd0aCAtIDQpICsgJy4uLlwiJ1xuICAgICAgICAgICAgICA6IHZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgIGlmIChudWxsID09PSB2YWx1ZSkgcmV0dXJuIFwibnVsbFwiO1xuICAgICAgICAgIGlmIChpc0FycmF5SW1wbCh2YWx1ZSkpIHJldHVybiBcIlsuLi5dXCI7XG4gICAgICAgICAgaWYgKHZhbHVlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEUpXG4gICAgICAgICAgICByZXR1cm4gKG1heExlbmd0aCA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh2YWx1ZS50eXBlKSlcbiAgICAgICAgICAgICAgPyBcIjxcIiArIG1heExlbmd0aCArIFwiPlwiXG4gICAgICAgICAgICAgIDogXCI8Li4uPlwiO1xuICAgICAgICAgIHZhciBuYW1lID0gb2JqZWN0TmFtZSh2YWx1ZSk7XG4gICAgICAgICAgaWYgKFwiT2JqZWN0XCIgPT09IG5hbWUpIHtcbiAgICAgICAgICAgIG5hbWUgPSBcIlwiO1xuICAgICAgICAgICAgbWF4TGVuZ3RoIC09IDI7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiB2YWx1ZSlcbiAgICAgICAgICAgICAgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICAgICAgICAgIHZhciBqc29uUHJvcE5hbWUgPSBKU09OLnN0cmluZ2lmeShwcm9wTmFtZSk7XG4gICAgICAgICAgICAgICAganNvblByb3BOYW1lICE9PSAnXCInICsgcHJvcE5hbWUgKyAnXCInICYmXG4gICAgICAgICAgICAgICAgICAocHJvcE5hbWUgPSBqc29uUHJvcE5hbWUpO1xuICAgICAgICAgICAgICAgIG1heExlbmd0aCAtPSBwcm9wTmFtZS5sZW5ndGggLSAyO1xuICAgICAgICAgICAgICAgIGpzb25Qcm9wTmFtZSA9IGRlc2NyaWJlVmFsdWUoXG4gICAgICAgICAgICAgICAgICB2YWx1ZVtwcm9wTmFtZV0sXG4gICAgICAgICAgICAgICAgICAxNSA+IG1heExlbmd0aCA/IG1heExlbmd0aCA6IDE1XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBtYXhMZW5ndGggLT0ganNvblByb3BOYW1lLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBpZiAoMCA+IG1heExlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgbmFtZSArPSBcIlwiID09PSBuYW1lID8gXCIuLi5cIiA6IFwiLCAuLi5cIjtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuYW1lICs9XG4gICAgICAgICAgICAgICAgICAoXCJcIiA9PT0gbmFtZSA/IFwiXCIgOiBcIixcIikgKyBwcm9wTmFtZSArIFwiOlwiICsganNvblByb3BOYW1lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gXCJ7XCIgKyBuYW1lICsgXCJ9XCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuYW1lO1xuICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICByZXR1cm4gKG1heExlbmd0aCA9IHZhbHVlLmRpc3BsYXlOYW1lIHx8IHZhbHVlLm5hbWUpXG4gICAgICAgICAgICA/IFwiZnVuY3Rpb24gXCIgKyBtYXhMZW5ndGhcbiAgICAgICAgICAgIDogXCJmdW5jdGlvblwiO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZVByb3BWYWx1ZSh2YWx1ZSwgbWF4TGVuZ3RoKSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIiAhPT0gdHlwZW9mIHZhbHVlIHx8IG5lZWRzRXNjYXBpbmcudGVzdCh2YWx1ZSlcbiAgICAgICAgPyBcIntcIiArIGRlc2NyaWJlVmFsdWUodmFsdWUsIG1heExlbmd0aCAtIDIpICsgXCJ9XCJcbiAgICAgICAgOiB2YWx1ZS5sZW5ndGggPiBtYXhMZW5ndGggLSAyXG4gICAgICAgICAgPyA1ID4gbWF4TGVuZ3RoXG4gICAgICAgICAgICA/ICdcIi4uLlwiJ1xuICAgICAgICAgICAgOiAnXCInICsgdmFsdWUuc2xpY2UoMCwgbWF4TGVuZ3RoIC0gNSkgKyAnLi4uXCInXG4gICAgICAgICAgOiAnXCInICsgdmFsdWUgKyAnXCInO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZUV4cGFuZGVkRWxlbWVudCh0eXBlLCBwcm9wcywgcm93UHJlZml4KSB7XG4gICAgICB2YXIgcmVtYWluaW5nUm93TGVuZ3RoID0gMTIwIC0gcm93UHJlZml4Lmxlbmd0aCAtIHR5cGUubGVuZ3RoLFxuICAgICAgICBwcm9wZXJ0aWVzID0gW10sXG4gICAgICAgIHByb3BOYW1lO1xuICAgICAgZm9yIChwcm9wTmFtZSBpbiBwcm9wcylcbiAgICAgICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KHByb3BOYW1lKSAmJiBcImNoaWxkcmVuXCIgIT09IHByb3BOYW1lKSB7XG4gICAgICAgICAgdmFyIHByb3BWYWx1ZSA9IGRlc2NyaWJlUHJvcFZhbHVlKFxuICAgICAgICAgICAgcHJvcHNbcHJvcE5hbWVdLFxuICAgICAgICAgICAgMTIwIC0gcm93UHJlZml4Lmxlbmd0aCAtIHByb3BOYW1lLmxlbmd0aCAtIDFcbiAgICAgICAgICApO1xuICAgICAgICAgIHJlbWFpbmluZ1Jvd0xlbmd0aCAtPSBwcm9wTmFtZS5sZW5ndGggKyBwcm9wVmFsdWUubGVuZ3RoICsgMjtcbiAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2gocHJvcE5hbWUgKyBcIj1cIiArIHByb3BWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIHJldHVybiAwID09PSBwcm9wZXJ0aWVzLmxlbmd0aFxuICAgICAgICA/IHJvd1ByZWZpeCArIFwiPFwiICsgdHlwZSArIFwiPlxcblwiXG4gICAgICAgIDogMCA8IHJlbWFpbmluZ1Jvd0xlbmd0aFxuICAgICAgICAgID8gcm93UHJlZml4ICsgXCI8XCIgKyB0eXBlICsgXCIgXCIgKyBwcm9wZXJ0aWVzLmpvaW4oXCIgXCIpICsgXCI+XFxuXCJcbiAgICAgICAgICA6IHJvd1ByZWZpeCArXG4gICAgICAgICAgICBcIjxcIiArXG4gICAgICAgICAgICB0eXBlICtcbiAgICAgICAgICAgIFwiXFxuXCIgK1xuICAgICAgICAgICAgcm93UHJlZml4ICtcbiAgICAgICAgICAgIFwiICBcIiArXG4gICAgICAgICAgICBwcm9wZXJ0aWVzLmpvaW4oXCJcXG5cIiArIHJvd1ByZWZpeCArIFwiICBcIikgK1xuICAgICAgICAgICAgXCJcXG5cIiArXG4gICAgICAgICAgICByb3dQcmVmaXggK1xuICAgICAgICAgICAgXCI+XFxuXCI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlUHJvcGVydGllc0RpZmYoY2xpZW50T2JqZWN0LCBzZXJ2ZXJPYmplY3QsIGluZGVudCkge1xuICAgICAgdmFyIHByb3BlcnRpZXMgPSBcIlwiLFxuICAgICAgICByZW1haW5pbmdTZXJ2ZXJQcm9wZXJ0aWVzID0gYXNzaWduKHt9LCBzZXJ2ZXJPYmplY3QpLFxuICAgICAgICBwcm9wTmFtZTtcbiAgICAgIGZvciAocHJvcE5hbWUgaW4gY2xpZW50T2JqZWN0KVxuICAgICAgICBpZiAoY2xpZW50T2JqZWN0Lmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICAgIGRlbGV0ZSByZW1haW5pbmdTZXJ2ZXJQcm9wZXJ0aWVzW3Byb3BOYW1lXTtcbiAgICAgICAgICB2YXIgbWF4TGVuZ3RoID0gMTIwIC0gMiAqIGluZGVudCAtIHByb3BOYW1lLmxlbmd0aCAtIDIsXG4gICAgICAgICAgICBjbGllbnRQcm9wVmFsdWUgPSBkZXNjcmliZVZhbHVlKGNsaWVudE9iamVjdFtwcm9wTmFtZV0sIG1heExlbmd0aCk7XG4gICAgICAgICAgc2VydmVyT2JqZWN0Lmhhc093blByb3BlcnR5KHByb3BOYW1lKVxuICAgICAgICAgICAgPyAoKG1heExlbmd0aCA9IGRlc2NyaWJlVmFsdWUoc2VydmVyT2JqZWN0W3Byb3BOYW1lXSwgbWF4TGVuZ3RoKSksXG4gICAgICAgICAgICAgIChwcm9wZXJ0aWVzICs9XG4gICAgICAgICAgICAgICAgYWRkZWQoaW5kZW50KSArIHByb3BOYW1lICsgXCI6IFwiICsgY2xpZW50UHJvcFZhbHVlICsgXCJcXG5cIiksXG4gICAgICAgICAgICAgIChwcm9wZXJ0aWVzICs9XG4gICAgICAgICAgICAgICAgcmVtb3ZlZChpbmRlbnQpICsgcHJvcE5hbWUgKyBcIjogXCIgKyBtYXhMZW5ndGggKyBcIlxcblwiKSlcbiAgICAgICAgICAgIDogKHByb3BlcnRpZXMgKz1cbiAgICAgICAgICAgICAgICBhZGRlZChpbmRlbnQpICsgcHJvcE5hbWUgKyBcIjogXCIgKyBjbGllbnRQcm9wVmFsdWUgKyBcIlxcblwiKTtcbiAgICAgICAgfVxuICAgICAgZm9yICh2YXIgX3Byb3BOYW1lIGluIHJlbWFpbmluZ1NlcnZlclByb3BlcnRpZXMpXG4gICAgICAgIHJlbWFpbmluZ1NlcnZlclByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoX3Byb3BOYW1lKSAmJlxuICAgICAgICAgICgoY2xpZW50T2JqZWN0ID0gZGVzY3JpYmVWYWx1ZShcbiAgICAgICAgICAgIHJlbWFpbmluZ1NlcnZlclByb3BlcnRpZXNbX3Byb3BOYW1lXSxcbiAgICAgICAgICAgIDEyMCAtIDIgKiBpbmRlbnQgLSBfcHJvcE5hbWUubGVuZ3RoIC0gMlxuICAgICAgICAgICkpLFxuICAgICAgICAgIChwcm9wZXJ0aWVzICs9XG4gICAgICAgICAgICByZW1vdmVkKGluZGVudCkgKyBfcHJvcE5hbWUgKyBcIjogXCIgKyBjbGllbnRPYmplY3QgKyBcIlxcblwiKSk7XG4gICAgICByZXR1cm4gcHJvcGVydGllcztcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVFbGVtZW50RGlmZih0eXBlLCBjbGllbnRQcm9wcywgc2VydmVyUHJvcHMsIGluZGVudCkge1xuICAgICAgdmFyIGNvbnRlbnQgPSBcIlwiLFxuICAgICAgICBzZXJ2ZXJQcm9wTmFtZXMgPSBuZXcgTWFwKCk7XG4gICAgICBmb3IgKHByb3BOYW1lJGpzY29tcCQwIGluIHNlcnZlclByb3BzKVxuICAgICAgICBzZXJ2ZXJQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSRqc2NvbXAkMCkgJiZcbiAgICAgICAgICBzZXJ2ZXJQcm9wTmFtZXMuc2V0KFxuICAgICAgICAgICAgcHJvcE5hbWUkanNjb21wJDAudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgIHByb3BOYW1lJGpzY29tcCQwXG4gICAgICAgICAgKTtcbiAgICAgIGlmICgxID09PSBzZXJ2ZXJQcm9wTmFtZXMuc2l6ZSAmJiBzZXJ2ZXJQcm9wTmFtZXMuaGFzKFwiY2hpbGRyZW5cIikpXG4gICAgICAgIGNvbnRlbnQgKz0gZGVzY3JpYmVFeHBhbmRlZEVsZW1lbnQoXG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICBjbGllbnRQcm9wcyxcbiAgICAgICAgICBpbmRlbnRhdGlvbihpbmRlbnQpXG4gICAgICAgICk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgX3Byb3BOYW1lMiBpbiBjbGllbnRQcm9wcylcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjbGllbnRQcm9wcy5oYXNPd25Qcm9wZXJ0eShfcHJvcE5hbWUyKSAmJlxuICAgICAgICAgICAgXCJjaGlsZHJlblwiICE9PSBfcHJvcE5hbWUyXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB2YXIgbWF4TGVuZ3RoJGpzY29tcCQwID1cbiAgICAgICAgICAgICAgICAxMjAgLSAyICogKGluZGVudCArIDEpIC0gX3Byb3BOYW1lMi5sZW5ndGggLSAxLFxuICAgICAgICAgICAgICBzZXJ2ZXJQcm9wTmFtZSA9IHNlcnZlclByb3BOYW1lcy5nZXQoX3Byb3BOYW1lMi50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgIGlmICh2b2lkIDAgIT09IHNlcnZlclByb3BOYW1lKSB7XG4gICAgICAgICAgICAgIHNlcnZlclByb3BOYW1lcy5kZWxldGUoX3Byb3BOYW1lMi50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgdmFyIHByb3BOYW1lJGpzY29tcCQwID0gY2xpZW50UHJvcHNbX3Byb3BOYW1lMl07XG4gICAgICAgICAgICAgIHNlcnZlclByb3BOYW1lID0gc2VydmVyUHJvcHNbc2VydmVyUHJvcE5hbWVdO1xuICAgICAgICAgICAgICB2YXIgY2xpZW50UHJvcFZhbHVlID0gZGVzY3JpYmVQcm9wVmFsdWUoXG4gICAgICAgICAgICAgICAgcHJvcE5hbWUkanNjb21wJDAsXG4gICAgICAgICAgICAgICAgbWF4TGVuZ3RoJGpzY29tcCQwXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIG1heExlbmd0aCRqc2NvbXAkMCA9IGRlc2NyaWJlUHJvcFZhbHVlKFxuICAgICAgICAgICAgICAgIHNlcnZlclByb3BOYW1lLFxuICAgICAgICAgICAgICAgIG1heExlbmd0aCRqc2NvbXAkMFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgcHJvcE5hbWUkanNjb21wJDAgJiZcbiAgICAgICAgICAgICAgbnVsbCAhPT0gcHJvcE5hbWUkanNjb21wJDAgJiZcbiAgICAgICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHNlcnZlclByb3BOYW1lICYmXG4gICAgICAgICAgICAgIG51bGwgIT09IHNlcnZlclByb3BOYW1lICYmXG4gICAgICAgICAgICAgIFwiT2JqZWN0XCIgPT09IG9iamVjdE5hbWUocHJvcE5hbWUkanNjb21wJDApICYmXG4gICAgICAgICAgICAgIFwiT2JqZWN0XCIgPT09IG9iamVjdE5hbWUoc2VydmVyUHJvcE5hbWUpICYmXG4gICAgICAgICAgICAgICgyIDwgT2JqZWN0LmtleXMocHJvcE5hbWUkanNjb21wJDApLmxlbmd0aCB8fFxuICAgICAgICAgICAgICAgIDIgPCBPYmplY3Qua2V5cyhzZXJ2ZXJQcm9wTmFtZSkubGVuZ3RoIHx8XG4gICAgICAgICAgICAgICAgLTEgPCBjbGllbnRQcm9wVmFsdWUuaW5kZXhPZihcIi4uLlwiKSB8fFxuICAgICAgICAgICAgICAgIC0xIDwgbWF4TGVuZ3RoJGpzY29tcCQwLmluZGV4T2YoXCIuLi5cIikpXG4gICAgICAgICAgICAgICAgPyAoY29udGVudCArPVxuICAgICAgICAgICAgICAgICAgICBpbmRlbnRhdGlvbihpbmRlbnQgKyAxKSArXG4gICAgICAgICAgICAgICAgICAgIF9wcm9wTmFtZTIgK1xuICAgICAgICAgICAgICAgICAgICBcIj17e1xcblwiICtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpYmVQcm9wZXJ0aWVzRGlmZihcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wTmFtZSRqc2NvbXAkMCxcbiAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJQcm9wTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKyAyXG4gICAgICAgICAgICAgICAgICAgICkgK1xuICAgICAgICAgICAgICAgICAgICBpbmRlbnRhdGlvbihpbmRlbnQgKyAxKSArXG4gICAgICAgICAgICAgICAgICAgIFwifX1cXG5cIilcbiAgICAgICAgICAgICAgICA6ICgoY29udGVudCArPVxuICAgICAgICAgICAgICAgICAgICBhZGRlZChpbmRlbnQgKyAxKSArXG4gICAgICAgICAgICAgICAgICAgIF9wcm9wTmFtZTIgK1xuICAgICAgICAgICAgICAgICAgICBcIj1cIiArXG4gICAgICAgICAgICAgICAgICAgIGNsaWVudFByb3BWYWx1ZSArXG4gICAgICAgICAgICAgICAgICAgIFwiXFxuXCIpLFxuICAgICAgICAgICAgICAgICAgKGNvbnRlbnQgKz1cbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZChpbmRlbnQgKyAxKSArXG4gICAgICAgICAgICAgICAgICAgIF9wcm9wTmFtZTIgK1xuICAgICAgICAgICAgICAgICAgICBcIj1cIiArXG4gICAgICAgICAgICAgICAgICAgIG1heExlbmd0aCRqc2NvbXAkMCArXG4gICAgICAgICAgICAgICAgICAgIFwiXFxuXCIpKTtcbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICBjb250ZW50ICs9XG4gICAgICAgICAgICAgICAgaW5kZW50YXRpb24oaW5kZW50ICsgMSkgK1xuICAgICAgICAgICAgICAgIF9wcm9wTmFtZTIgK1xuICAgICAgICAgICAgICAgIFwiPVwiICtcbiAgICAgICAgICAgICAgICBkZXNjcmliZVByb3BWYWx1ZShjbGllbnRQcm9wc1tfcHJvcE5hbWUyXSwgbWF4TGVuZ3RoJGpzY29tcCQwKSArXG4gICAgICAgICAgICAgICAgXCJcXG5cIjtcbiAgICAgICAgICB9XG4gICAgICAgIHNlcnZlclByb3BOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wTmFtZSkge1xuICAgICAgICAgIGlmIChcImNoaWxkcmVuXCIgIT09IHByb3BOYW1lKSB7XG4gICAgICAgICAgICB2YXIgbWF4TGVuZ3RoID0gMTIwIC0gMiAqIChpbmRlbnQgKyAxKSAtIHByb3BOYW1lLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICBjb250ZW50ICs9XG4gICAgICAgICAgICAgIHJlbW92ZWQoaW5kZW50ICsgMSkgK1xuICAgICAgICAgICAgICBwcm9wTmFtZSArXG4gICAgICAgICAgICAgIFwiPVwiICtcbiAgICAgICAgICAgICAgZGVzY3JpYmVQcm9wVmFsdWUoc2VydmVyUHJvcHNbcHJvcE5hbWVdLCBtYXhMZW5ndGgpICtcbiAgICAgICAgICAgICAgXCJcXG5cIjtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb250ZW50ID1cbiAgICAgICAgICBcIlwiID09PSBjb250ZW50XG4gICAgICAgICAgICA/IGluZGVudGF0aW9uKGluZGVudCkgKyBcIjxcIiArIHR5cGUgKyBcIj5cXG5cIlxuICAgICAgICAgICAgOiBpbmRlbnRhdGlvbihpbmRlbnQpICtcbiAgICAgICAgICAgICAgXCI8XCIgK1xuICAgICAgICAgICAgICB0eXBlICtcbiAgICAgICAgICAgICAgXCJcXG5cIiArXG4gICAgICAgICAgICAgIGNvbnRlbnQgK1xuICAgICAgICAgICAgICBpbmRlbnRhdGlvbihpbmRlbnQpICtcbiAgICAgICAgICAgICAgXCI+XFxuXCI7XG4gICAgICB9XG4gICAgICB0eXBlID0gc2VydmVyUHJvcHMuY2hpbGRyZW47XG4gICAgICBjbGllbnRQcm9wcyA9IGNsaWVudFByb3BzLmNoaWxkcmVuO1xuICAgICAgaWYgKFxuICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgdHlwZSB8fFxuICAgICAgICBcIm51bWJlclwiID09PSB0eXBlb2YgdHlwZSB8fFxuICAgICAgICBcImJpZ2ludFwiID09PSB0eXBlb2YgdHlwZVxuICAgICAgKSB7XG4gICAgICAgIHNlcnZlclByb3BOYW1lcyA9IFwiXCI7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgY2xpZW50UHJvcHMgfHxcbiAgICAgICAgICBcIm51bWJlclwiID09PSB0eXBlb2YgY2xpZW50UHJvcHMgfHxcbiAgICAgICAgICBcImJpZ2ludFwiID09PSB0eXBlb2YgY2xpZW50UHJvcHNcbiAgICAgICAgKVxuICAgICAgICAgIHNlcnZlclByb3BOYW1lcyA9IFwiXCIgKyBjbGllbnRQcm9wcztcbiAgICAgICAgY29udGVudCArPSBkZXNjcmliZVRleHREaWZmKHNlcnZlclByb3BOYW1lcywgXCJcIiArIHR5cGUsIGluZGVudCArIDEpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGNsaWVudFByb3BzIHx8XG4gICAgICAgIFwibnVtYmVyXCIgPT09IHR5cGVvZiBjbGllbnRQcm9wcyB8fFxuICAgICAgICBcImJpZ2ludFwiID09PSB0eXBlb2YgY2xpZW50UHJvcHNcbiAgICAgIClcbiAgICAgICAgY29udGVudCA9XG4gICAgICAgICAgbnVsbCA9PSB0eXBlXG4gICAgICAgICAgICA/IGNvbnRlbnQgKyBkZXNjcmliZVRleHREaWZmKFwiXCIgKyBjbGllbnRQcm9wcywgbnVsbCwgaW5kZW50ICsgMSlcbiAgICAgICAgICAgIDogY29udGVudCArIGRlc2NyaWJlVGV4dERpZmYoXCJcIiArIGNsaWVudFByb3BzLCB2b2lkIDAsIGluZGVudCArIDEpO1xuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlU2libGluZ0ZpYmVyKGZpYmVyLCBpbmRlbnQpIHtcbiAgICAgIHZhciB0eXBlID0gZGVzY3JpYmVGaWJlclR5cGUoZmliZXIpO1xuICAgICAgaWYgKG51bGwgPT09IHR5cGUpIHtcbiAgICAgICAgdHlwZSA9IFwiXCI7XG4gICAgICAgIGZvciAoZmliZXIgPSBmaWJlci5jaGlsZDsgZmliZXI7IClcbiAgICAgICAgICAodHlwZSArPSBkZXNjcmliZVNpYmxpbmdGaWJlcihmaWJlciwgaW5kZW50KSksXG4gICAgICAgICAgICAoZmliZXIgPSBmaWJlci5zaWJsaW5nKTtcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gaW5kZW50YXRpb24oaW5kZW50KSArIFwiPFwiICsgdHlwZSArIFwiPlxcblwiO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZU5vZGUobm9kZSwgaW5kZW50KSB7XG4gICAgICB2YXIgc2tpcFRvTm9kZSA9IGZpbmROb3RhYmxlTm9kZShub2RlLCBpbmRlbnQpO1xuICAgICAgaWYgKFxuICAgICAgICBza2lwVG9Ob2RlICE9PSBub2RlICYmXG4gICAgICAgICgxICE9PSBub2RlLmNoaWxkcmVuLmxlbmd0aCB8fCBub2RlLmNoaWxkcmVuWzBdICE9PSBza2lwVG9Ob2RlKVxuICAgICAgKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGluZGVudGF0aW9uKGluZGVudCkgKyBcIi4uLlxcblwiICsgZGVzY3JpYmVOb2RlKHNraXBUb05vZGUsIGluZGVudCArIDEpXG4gICAgICAgICk7XG4gICAgICBza2lwVG9Ob2RlID0gXCJcIjtcbiAgICAgIHZhciBkZWJ1Z0luZm8gPSBub2RlLmZpYmVyLl9kZWJ1Z0luZm87XG4gICAgICBpZiAoZGVidWdJbmZvKVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlYnVnSW5mby5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBzZXJ2ZXJDb21wb25lbnROYW1lID0gZGVidWdJbmZvW2ldLm5hbWU7XG4gICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHNlcnZlckNvbXBvbmVudE5hbWUgJiZcbiAgICAgICAgICAgICgoc2tpcFRvTm9kZSArPVxuICAgICAgICAgICAgICBpbmRlbnRhdGlvbihpbmRlbnQpICsgXCI8XCIgKyBzZXJ2ZXJDb21wb25lbnROYW1lICsgXCI+XFxuXCIpLFxuICAgICAgICAgICAgaW5kZW50KyspO1xuICAgICAgICB9XG4gICAgICBkZWJ1Z0luZm8gPSBcIlwiO1xuICAgICAgaSA9IG5vZGUuZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgaWYgKDYgPT09IG5vZGUuZmliZXIudGFnKVxuICAgICAgICAoZGVidWdJbmZvID0gZGVzY3JpYmVUZXh0RGlmZihpLCBub2RlLnNlcnZlclByb3BzLCBpbmRlbnQpKSwgaW5kZW50Kys7XG4gICAgICBlbHNlIGlmIChcbiAgICAgICAgKChzZXJ2ZXJDb21wb25lbnROYW1lID0gZGVzY3JpYmVGaWJlclR5cGUobm9kZS5maWJlcikpLFxuICAgICAgICBudWxsICE9PSBzZXJ2ZXJDb21wb25lbnROYW1lKVxuICAgICAgKVxuICAgICAgICBpZiAodm9pZCAwID09PSBub2RlLnNlcnZlclByb3BzKSB7XG4gICAgICAgICAgZGVidWdJbmZvID0gaW5kZW50O1xuICAgICAgICAgIHZhciBtYXhMZW5ndGggPSAxMjAgLSAyICogZGVidWdJbmZvIC0gc2VydmVyQ29tcG9uZW50TmFtZS5sZW5ndGggLSAyLFxuICAgICAgICAgICAgY29udGVudCA9IFwiXCI7XG4gICAgICAgICAgZm9yIChwcm9wTmFtZSBpbiBpKVxuICAgICAgICAgICAgaWYgKGkuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpICYmIFwiY2hpbGRyZW5cIiAhPT0gcHJvcE5hbWUpIHtcbiAgICAgICAgICAgICAgdmFyIHByb3BWYWx1ZSA9IGRlc2NyaWJlUHJvcFZhbHVlKGlbcHJvcE5hbWVdLCAxNSk7XG4gICAgICAgICAgICAgIG1heExlbmd0aCAtPSBwcm9wTmFtZS5sZW5ndGggKyBwcm9wVmFsdWUubGVuZ3RoICsgMjtcbiAgICAgICAgICAgICAgaWYgKDAgPiBtYXhMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb250ZW50ICs9IFwiIC4uLlwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnRlbnQgKz0gXCIgXCIgKyBwcm9wTmFtZSArIFwiPVwiICsgcHJvcFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIGRlYnVnSW5mbyA9XG4gICAgICAgICAgICBpbmRlbnRhdGlvbihkZWJ1Z0luZm8pICtcbiAgICAgICAgICAgIFwiPFwiICtcbiAgICAgICAgICAgIHNlcnZlckNvbXBvbmVudE5hbWUgK1xuICAgICAgICAgICAgY29udGVudCArXG4gICAgICAgICAgICBcIj5cXG5cIjtcbiAgICAgICAgICBpbmRlbnQrKztcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgbnVsbCA9PT0gbm9kZS5zZXJ2ZXJQcm9wc1xuICAgICAgICAgICAgPyAoKGRlYnVnSW5mbyA9IGRlc2NyaWJlRXhwYW5kZWRFbGVtZW50KFxuICAgICAgICAgICAgICAgIHNlcnZlckNvbXBvbmVudE5hbWUsXG4gICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICBhZGRlZChpbmRlbnQpXG4gICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICBpbmRlbnQrKylcbiAgICAgICAgICAgIDogXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG5vZGUuc2VydmVyUHJvcHNcbiAgICAgICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgXCJTaG91bGQgbm90IGhhdmUgbWF0Y2hlZCBhIG5vbiBIb3N0VGV4dCBmaWJlciB0byBhIFRleHQgbm9kZS4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiAoKGRlYnVnSW5mbyA9IGRlc2NyaWJlRWxlbWVudERpZmYoXG4gICAgICAgICAgICAgICAgICBzZXJ2ZXJDb21wb25lbnROYW1lLFxuICAgICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICAgIG5vZGUuc2VydmVyUHJvcHMsXG4gICAgICAgICAgICAgICAgICBpbmRlbnRcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICBpbmRlbnQrKyk7XG4gICAgICB2YXIgcHJvcE5hbWUgPSBcIlwiO1xuICAgICAgaSA9IG5vZGUuZmliZXIuY2hpbGQ7XG4gICAgICBmb3IgKFxuICAgICAgICBzZXJ2ZXJDb21wb25lbnROYW1lID0gMDtcbiAgICAgICAgaSAmJiBzZXJ2ZXJDb21wb25lbnROYW1lIDwgbm9kZS5jaGlsZHJlbi5sZW5ndGg7XG5cbiAgICAgIClcbiAgICAgICAgKG1heExlbmd0aCA9IG5vZGUuY2hpbGRyZW5bc2VydmVyQ29tcG9uZW50TmFtZV0pLFxuICAgICAgICAgIG1heExlbmd0aC5maWJlciA9PT0gaVxuICAgICAgICAgICAgPyAoKHByb3BOYW1lICs9IGRlc2NyaWJlTm9kZShtYXhMZW5ndGgsIGluZGVudCkpLFxuICAgICAgICAgICAgICBzZXJ2ZXJDb21wb25lbnROYW1lKyspXG4gICAgICAgICAgICA6IChwcm9wTmFtZSArPSBkZXNjcmliZVNpYmxpbmdGaWJlcihpLCBpbmRlbnQpKSxcbiAgICAgICAgICAoaSA9IGkuc2libGluZyk7XG4gICAgICBpICYmXG4gICAgICAgIDAgPCBub2RlLmNoaWxkcmVuLmxlbmd0aCAmJlxuICAgICAgICAocHJvcE5hbWUgKz0gaW5kZW50YXRpb24oaW5kZW50KSArIFwiLi4uXFxuXCIpO1xuICAgICAgaSA9IG5vZGUuc2VydmVyVGFpbDtcbiAgICAgIG51bGwgPT09IG5vZGUuc2VydmVyUHJvcHMgJiYgaW5kZW50LS07XG4gICAgICBmb3IgKG5vZGUgPSAwOyBub2RlIDwgaS5sZW5ndGg7IG5vZGUrKylcbiAgICAgICAgKHNlcnZlckNvbXBvbmVudE5hbWUgPSBpW25vZGVdKSxcbiAgICAgICAgICAocHJvcE5hbWUgPVxuICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHNlcnZlckNvbXBvbmVudE5hbWVcbiAgICAgICAgICAgICAgPyBwcm9wTmFtZSArXG4gICAgICAgICAgICAgICAgKHJlbW92ZWQoaW5kZW50KSArXG4gICAgICAgICAgICAgICAgICBkZXNjcmliZVRleHROb2RlKHNlcnZlckNvbXBvbmVudE5hbWUsIDEyMCAtIDIgKiBpbmRlbnQpICtcbiAgICAgICAgICAgICAgICAgIFwiXFxuXCIpXG4gICAgICAgICAgICAgIDogcHJvcE5hbWUgK1xuICAgICAgICAgICAgICAgIGRlc2NyaWJlRXhwYW5kZWRFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgc2VydmVyQ29tcG9uZW50TmFtZS50eXBlLFxuICAgICAgICAgICAgICAgICAgc2VydmVyQ29tcG9uZW50TmFtZS5wcm9wcyxcbiAgICAgICAgICAgICAgICAgIHJlbW92ZWQoaW5kZW50KVxuICAgICAgICAgICAgICAgICkpO1xuICAgICAgcmV0dXJuIHNraXBUb05vZGUgKyBkZWJ1Z0luZm8gKyBwcm9wTmFtZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVEaWZmKHJvb3ROb2RlKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gXCJcXG5cXG5cIiArIGRlc2NyaWJlTm9kZShyb290Tm9kZSwgMCk7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZUFuY2VzdG9ycyhhbmNlc3RvciwgY2hpbGQsIHByb3BzKSB7XG4gICAgICBmb3IgKHZhciBmaWJlciA9IGNoaWxkLCBub2RlID0gbnVsbCwgZGlzdGFuY2VGcm9tTGVhZiA9IDA7IGZpYmVyOyApXG4gICAgICAgIGZpYmVyID09PSBhbmNlc3RvciAmJiAoZGlzdGFuY2VGcm9tTGVhZiA9IDApLFxuICAgICAgICAgIChub2RlID0ge1xuICAgICAgICAgICAgZmliZXI6IGZpYmVyLFxuICAgICAgICAgICAgY2hpbGRyZW46IG51bGwgIT09IG5vZGUgPyBbbm9kZV0gOiBbXSxcbiAgICAgICAgICAgIHNlcnZlclByb3BzOlxuICAgICAgICAgICAgICBmaWJlciA9PT0gY2hpbGQgPyBwcm9wcyA6IGZpYmVyID09PSBhbmNlc3RvciA/IG51bGwgOiB2b2lkIDAsXG4gICAgICAgICAgICBzZXJ2ZXJUYWlsOiBbXSxcbiAgICAgICAgICAgIGRpc3RhbmNlRnJvbUxlYWY6IGRpc3RhbmNlRnJvbUxlYWZcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBkaXN0YW5jZUZyb21MZWFmKyssXG4gICAgICAgICAgKGZpYmVyID0gZmliZXIucmV0dXJuKTtcbiAgICAgIHJldHVybiBudWxsICE9PSBub2RlID8gZGVzY3JpYmVEaWZmKG5vZGUpLnJlcGxhY2VBbGwoL15bKy1dL2dtLCBcIj5cIikgOiBcIlwiO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVkQW5jZXN0b3JJbmZvRGV2KG9sZEluZm8sIHRhZykge1xuICAgICAgdmFyIGFuY2VzdG9ySW5mbyA9IGFzc2lnbih7fSwgb2xkSW5mbyB8fCBlbXB0eUFuY2VzdG9ySW5mb0RldiksXG4gICAgICAgIGluZm8gPSB7IHRhZzogdGFnIH07XG4gICAgICAtMSAhPT0gaW5TY29wZVRhZ3MuaW5kZXhPZih0YWcpICYmXG4gICAgICAgICgoYW5jZXN0b3JJbmZvLmFUYWdJblNjb3BlID0gbnVsbCksXG4gICAgICAgIChhbmNlc3RvckluZm8uYnV0dG9uVGFnSW5TY29wZSA9IG51bGwpLFxuICAgICAgICAoYW5jZXN0b3JJbmZvLm5vYnJUYWdJblNjb3BlID0gbnVsbCkpO1xuICAgICAgLTEgIT09IGJ1dHRvblNjb3BlVGFncy5pbmRleE9mKHRhZykgJiZcbiAgICAgICAgKGFuY2VzdG9ySW5mby5wVGFnSW5CdXR0b25TY29wZSA9IG51bGwpO1xuICAgICAgLTEgIT09IHNwZWNpYWxUYWdzLmluZGV4T2YodGFnKSAmJlxuICAgICAgICBcImFkZHJlc3NcIiAhPT0gdGFnICYmXG4gICAgICAgIFwiZGl2XCIgIT09IHRhZyAmJlxuICAgICAgICBcInBcIiAhPT0gdGFnICYmXG4gICAgICAgICgoYW5jZXN0b3JJbmZvLmxpc3RJdGVtVGFnQXV0b2Nsb3NpbmcgPSBudWxsKSxcbiAgICAgICAgKGFuY2VzdG9ySW5mby5kbEl0ZW1UYWdBdXRvY2xvc2luZyA9IG51bGwpKTtcbiAgICAgIGFuY2VzdG9ySW5mby5jdXJyZW50ID0gaW5mbztcbiAgICAgIFwiZm9ybVwiID09PSB0YWcgJiYgKGFuY2VzdG9ySW5mby5mb3JtVGFnID0gaW5mbyk7XG4gICAgICBcImFcIiA9PT0gdGFnICYmIChhbmNlc3RvckluZm8uYVRhZ0luU2NvcGUgPSBpbmZvKTtcbiAgICAgIFwiYnV0dG9uXCIgPT09IHRhZyAmJiAoYW5jZXN0b3JJbmZvLmJ1dHRvblRhZ0luU2NvcGUgPSBpbmZvKTtcbiAgICAgIFwibm9iclwiID09PSB0YWcgJiYgKGFuY2VzdG9ySW5mby5ub2JyVGFnSW5TY29wZSA9IGluZm8pO1xuICAgICAgXCJwXCIgPT09IHRhZyAmJiAoYW5jZXN0b3JJbmZvLnBUYWdJbkJ1dHRvblNjb3BlID0gaW5mbyk7XG4gICAgICBcImxpXCIgPT09IHRhZyAmJiAoYW5jZXN0b3JJbmZvLmxpc3RJdGVtVGFnQXV0b2Nsb3NpbmcgPSBpbmZvKTtcbiAgICAgIGlmIChcImRkXCIgPT09IHRhZyB8fCBcImR0XCIgPT09IHRhZylcbiAgICAgICAgYW5jZXN0b3JJbmZvLmRsSXRlbVRhZ0F1dG9jbG9zaW5nID0gaW5mbztcbiAgICAgIFwiI2RvY3VtZW50XCIgPT09IHRhZyB8fCBcImh0bWxcIiA9PT0gdGFnXG4gICAgICAgID8gKGFuY2VzdG9ySW5mby5jb250YWluZXJUYWdJblNjb3BlID0gbnVsbClcbiAgICAgICAgOiBhbmNlc3RvckluZm8uY29udGFpbmVyVGFnSW5TY29wZSB8fFxuICAgICAgICAgIChhbmNlc3RvckluZm8uY29udGFpbmVyVGFnSW5TY29wZSA9IGluZm8pO1xuICAgICAgbnVsbCAhPT0gb2xkSW5mbyB8fFxuICAgICAgKFwiI2RvY3VtZW50XCIgIT09IHRhZyAmJiBcImh0bWxcIiAhPT0gdGFnICYmIFwiYm9keVwiICE9PSB0YWcpXG4gICAgICAgID8gITAgPT09IGFuY2VzdG9ySW5mby5pbXBsaWNpdFJvb3RTY29wZSAmJlxuICAgICAgICAgIChhbmNlc3RvckluZm8uaW1wbGljaXRSb290U2NvcGUgPSAhMSlcbiAgICAgICAgOiAoYW5jZXN0b3JJbmZvLmltcGxpY2l0Um9vdFNjb3BlID0gITApO1xuICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mbztcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNUYWdWYWxpZFdpdGhQYXJlbnQodGFnLCBwYXJlbnRUYWcsIGltcGxpY2l0Um9vdFNjb3BlKSB7XG4gICAgICBzd2l0Y2ggKHBhcmVudFRhZykge1xuICAgICAgICBjYXNlIFwic2VsZWN0XCI6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIFwiaHJcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcIm9wdGlvblwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwib3B0Z3JvdXBcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcInNjcmlwdFwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwidGVtcGxhdGVcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcIiN0ZXh0XCIgPT09IHRhZ1xuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgXCJvcHRncm91cFwiOlxuICAgICAgICAgIHJldHVybiBcIm9wdGlvblwiID09PSB0YWcgfHwgXCIjdGV4dFwiID09PSB0YWc7XG4gICAgICAgIGNhc2UgXCJvcHRpb25cIjpcbiAgICAgICAgICByZXR1cm4gXCIjdGV4dFwiID09PSB0YWc7XG4gICAgICAgIGNhc2UgXCJ0clwiOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBcInRoXCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJ0ZFwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwic3R5bGVcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcInNjcmlwdFwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwidGVtcGxhdGVcIiA9PT0gdGFnXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSBcInRib2R5XCI6XG4gICAgICAgIGNhc2UgXCJ0aGVhZFwiOlxuICAgICAgICBjYXNlIFwidGZvb3RcIjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgXCJ0clwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwic3R5bGVcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcInNjcmlwdFwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwidGVtcGxhdGVcIiA9PT0gdGFnXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSBcImNvbGdyb3VwXCI6XG4gICAgICAgICAgcmV0dXJuIFwiY29sXCIgPT09IHRhZyB8fCBcInRlbXBsYXRlXCIgPT09IHRhZztcbiAgICAgICAgY2FzZSBcInRhYmxlXCI6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIFwiY2FwdGlvblwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwiY29sZ3JvdXBcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcInRib2R5XCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJ0Zm9vdFwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwidGhlYWRcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcInN0eWxlXCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJzY3JpcHRcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcInRlbXBsYXRlXCIgPT09IHRhZ1xuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgXCJoZWFkXCI6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIFwiYmFzZVwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwiYmFzZWZvbnRcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcImJnc291bmRcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcImxpbmtcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcIm1ldGFcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcInRpdGxlXCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJub3NjcmlwdFwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwibm9mcmFtZXNcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcInN0eWxlXCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJzY3JpcHRcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcInRlbXBsYXRlXCIgPT09IHRhZ1xuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgXCJodG1sXCI6XG4gICAgICAgICAgaWYgKGltcGxpY2l0Um9vdFNjb3BlKSBicmVhaztcbiAgICAgICAgICByZXR1cm4gXCJoZWFkXCIgPT09IHRhZyB8fCBcImJvZHlcIiA9PT0gdGFnIHx8IFwiZnJhbWVzZXRcIiA9PT0gdGFnO1xuICAgICAgICBjYXNlIFwiZnJhbWVzZXRcIjpcbiAgICAgICAgICByZXR1cm4gXCJmcmFtZVwiID09PSB0YWc7XG4gICAgICAgIGNhc2UgXCIjZG9jdW1lbnRcIjpcbiAgICAgICAgICBpZiAoIWltcGxpY2l0Um9vdFNjb3BlKSByZXR1cm4gXCJodG1sXCIgPT09IHRhZztcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICAgIGNhc2UgXCJoMVwiOlxuICAgICAgICBjYXNlIFwiaDJcIjpcbiAgICAgICAgY2FzZSBcImgzXCI6XG4gICAgICAgIGNhc2UgXCJoNFwiOlxuICAgICAgICBjYXNlIFwiaDVcIjpcbiAgICAgICAgY2FzZSBcImg2XCI6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIFwiaDFcIiAhPT0gcGFyZW50VGFnICYmXG4gICAgICAgICAgICBcImgyXCIgIT09IHBhcmVudFRhZyAmJlxuICAgICAgICAgICAgXCJoM1wiICE9PSBwYXJlbnRUYWcgJiZcbiAgICAgICAgICAgIFwiaDRcIiAhPT0gcGFyZW50VGFnICYmXG4gICAgICAgICAgICBcImg1XCIgIT09IHBhcmVudFRhZyAmJlxuICAgICAgICAgICAgXCJoNlwiICE9PSBwYXJlbnRUYWdcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIFwicnBcIjpcbiAgICAgICAgY2FzZSBcInJ0XCI6XG4gICAgICAgICAgcmV0dXJuIC0xID09PSBpbXBsaWVkRW5kVGFncy5pbmRleE9mKHBhcmVudFRhZyk7XG4gICAgICAgIGNhc2UgXCJjYXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJjb2xcIjpcbiAgICAgICAgY2FzZSBcImNvbGdyb3VwXCI6XG4gICAgICAgIGNhc2UgXCJmcmFtZXNldFwiOlxuICAgICAgICBjYXNlIFwiZnJhbWVcIjpcbiAgICAgICAgY2FzZSBcInRib2R5XCI6XG4gICAgICAgIGNhc2UgXCJ0ZFwiOlxuICAgICAgICBjYXNlIFwidGZvb3RcIjpcbiAgICAgICAgY2FzZSBcInRoXCI6XG4gICAgICAgIGNhc2UgXCJ0aGVhZFwiOlxuICAgICAgICBjYXNlIFwidHJcIjpcbiAgICAgICAgICByZXR1cm4gbnVsbCA9PSBwYXJlbnRUYWc7XG4gICAgICAgIGNhc2UgXCJoZWFkXCI6XG4gICAgICAgICAgcmV0dXJuIGltcGxpY2l0Um9vdFNjb3BlIHx8IG51bGwgPT09IHBhcmVudFRhZztcbiAgICAgICAgY2FzZSBcImh0bWxcIjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGltcGxpY2l0Um9vdFNjb3BlICYmIFwiI2RvY3VtZW50XCIgPT09IHBhcmVudFRhZykgfHxcbiAgICAgICAgICAgIG51bGwgPT09IHBhcmVudFRhZ1xuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgXCJib2R5XCI6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChpbXBsaWNpdFJvb3RTY29wZSAmJlxuICAgICAgICAgICAgICAoXCIjZG9jdW1lbnRcIiA9PT0gcGFyZW50VGFnIHx8IFwiaHRtbFwiID09PSBwYXJlbnRUYWcpKSB8fFxuICAgICAgICAgICAgbnVsbCA9PT0gcGFyZW50VGFnXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZEludmFsaWRBbmNlc3RvckZvclRhZyh0YWcsIGFuY2VzdG9ySW5mbykge1xuICAgICAgc3dpdGNoICh0YWcpIHtcbiAgICAgICAgY2FzZSBcImFkZHJlc3NcIjpcbiAgICAgICAgY2FzZSBcImFydGljbGVcIjpcbiAgICAgICAgY2FzZSBcImFzaWRlXCI6XG4gICAgICAgIGNhc2UgXCJibG9ja3F1b3RlXCI6XG4gICAgICAgIGNhc2UgXCJjZW50ZXJcIjpcbiAgICAgICAgY2FzZSBcImRldGFpbHNcIjpcbiAgICAgICAgY2FzZSBcImRpYWxvZ1wiOlxuICAgICAgICBjYXNlIFwiZGlyXCI6XG4gICAgICAgIGNhc2UgXCJkaXZcIjpcbiAgICAgICAgY2FzZSBcImRsXCI6XG4gICAgICAgIGNhc2UgXCJmaWVsZHNldFwiOlxuICAgICAgICBjYXNlIFwiZmlnY2FwdGlvblwiOlxuICAgICAgICBjYXNlIFwiZmlndXJlXCI6XG4gICAgICAgIGNhc2UgXCJmb290ZXJcIjpcbiAgICAgICAgY2FzZSBcImhlYWRlclwiOlxuICAgICAgICBjYXNlIFwiaGdyb3VwXCI6XG4gICAgICAgIGNhc2UgXCJtYWluXCI6XG4gICAgICAgIGNhc2UgXCJtZW51XCI6XG4gICAgICAgIGNhc2UgXCJuYXZcIjpcbiAgICAgICAgY2FzZSBcIm9sXCI6XG4gICAgICAgIGNhc2UgXCJwXCI6XG4gICAgICAgIGNhc2UgXCJzZWN0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJzdW1tYXJ5XCI6XG4gICAgICAgIGNhc2UgXCJ1bFwiOlxuICAgICAgICBjYXNlIFwicHJlXCI6XG4gICAgICAgIGNhc2UgXCJsaXN0aW5nXCI6XG4gICAgICAgIGNhc2UgXCJ0YWJsZVwiOlxuICAgICAgICBjYXNlIFwiaHJcIjpcbiAgICAgICAgY2FzZSBcInhtcFwiOlxuICAgICAgICBjYXNlIFwiaDFcIjpcbiAgICAgICAgY2FzZSBcImgyXCI6XG4gICAgICAgIGNhc2UgXCJoM1wiOlxuICAgICAgICBjYXNlIFwiaDRcIjpcbiAgICAgICAgY2FzZSBcImg1XCI6XG4gICAgICAgIGNhc2UgXCJoNlwiOlxuICAgICAgICAgIHJldHVybiBhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9uU2NvcGU7XG4gICAgICAgIGNhc2UgXCJmb3JtXCI6XG4gICAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5mb3JtVGFnIHx8IGFuY2VzdG9ySW5mby5wVGFnSW5CdXR0b25TY29wZTtcbiAgICAgICAgY2FzZSBcImxpXCI6XG4gICAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5saXN0SXRlbVRhZ0F1dG9jbG9zaW5nO1xuICAgICAgICBjYXNlIFwiZGRcIjpcbiAgICAgICAgY2FzZSBcImR0XCI6XG4gICAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5kbEl0ZW1UYWdBdXRvY2xvc2luZztcbiAgICAgICAgY2FzZSBcImJ1dHRvblwiOlxuICAgICAgICAgIHJldHVybiBhbmNlc3RvckluZm8uYnV0dG9uVGFnSW5TY29wZTtcbiAgICAgICAgY2FzZSBcImFcIjpcbiAgICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmFUYWdJblNjb3BlO1xuICAgICAgICBjYXNlIFwibm9iclwiOlxuICAgICAgICAgIHJldHVybiBhbmNlc3RvckluZm8ubm9iclRhZ0luU2NvcGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZEFuY2VzdG9yKHBhcmVudCwgdGFnTmFtZSkge1xuICAgICAgZm9yICg7IHBhcmVudDsgKSB7XG4gICAgICAgIHN3aXRjaCAocGFyZW50LnRhZykge1xuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICBpZiAocGFyZW50LnR5cGUgPT09IHRhZ05hbWUpIHJldHVybiBwYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZURPTU5lc3RpbmcoY2hpbGRUYWcsIGFuY2VzdG9ySW5mbykge1xuICAgICAgYW5jZXN0b3JJbmZvID0gYW5jZXN0b3JJbmZvIHx8IGVtcHR5QW5jZXN0b3JJbmZvRGV2O1xuICAgICAgdmFyIHBhcmVudEluZm8gPSBhbmNlc3RvckluZm8uY3VycmVudDtcbiAgICAgIGFuY2VzdG9ySW5mbyA9IChwYXJlbnRJbmZvID0gaXNUYWdWYWxpZFdpdGhQYXJlbnQoXG4gICAgICAgIGNoaWxkVGFnLFxuICAgICAgICBwYXJlbnRJbmZvICYmIHBhcmVudEluZm8udGFnLFxuICAgICAgICBhbmNlc3RvckluZm8uaW1wbGljaXRSb290U2NvcGVcbiAgICAgIClcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogcGFyZW50SW5mbylcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogZmluZEludmFsaWRBbmNlc3RvckZvclRhZyhjaGlsZFRhZywgYW5jZXN0b3JJbmZvKTtcbiAgICAgIGFuY2VzdG9ySW5mbyA9IHBhcmVudEluZm8gfHwgYW5jZXN0b3JJbmZvO1xuICAgICAgaWYgKCFhbmNlc3RvckluZm8pIHJldHVybiAhMDtcbiAgICAgIHZhciBhbmNlc3RvclRhZyA9IGFuY2VzdG9ySW5mby50YWc7XG4gICAgICBhbmNlc3RvckluZm8gPSBTdHJpbmcoISFwYXJlbnRJbmZvKSArIFwifFwiICsgY2hpbGRUYWcgKyBcInxcIiArIGFuY2VzdG9yVGFnO1xuICAgICAgaWYgKGRpZFdhcm5bYW5jZXN0b3JJbmZvXSkgcmV0dXJuICExO1xuICAgICAgZGlkV2FyblthbmNlc3RvckluZm9dID0gITA7XG4gICAgICB2YXIgYW5jZXN0b3IgPSAoYW5jZXN0b3JJbmZvID0gY3VycmVudClcbiAgICAgICAgICA/IGZpbmRBbmNlc3RvcihhbmNlc3RvckluZm8ucmV0dXJuLCBhbmNlc3RvclRhZylcbiAgICAgICAgICA6IG51bGwsXG4gICAgICAgIGFuY2VzdG9yRGVzY3JpcHRpb24gPVxuICAgICAgICAgIG51bGwgIT09IGFuY2VzdG9ySW5mbyAmJiBudWxsICE9PSBhbmNlc3RvclxuICAgICAgICAgICAgPyBkZXNjcmliZUFuY2VzdG9ycyhhbmNlc3RvciwgYW5jZXN0b3JJbmZvLCBudWxsKVxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICB0YWdEaXNwbGF5TmFtZSA9IFwiPFwiICsgY2hpbGRUYWcgKyBcIj5cIjtcbiAgICAgIHBhcmVudEluZm9cbiAgICAgICAgPyAoKHBhcmVudEluZm8gPSBcIlwiKSxcbiAgICAgICAgICBcInRhYmxlXCIgPT09IGFuY2VzdG9yVGFnICYmXG4gICAgICAgICAgICBcInRyXCIgPT09IGNoaWxkVGFnICYmXG4gICAgICAgICAgICAocGFyZW50SW5mbyArPVxuICAgICAgICAgICAgICBcIiBBZGQgYSA8dGJvZHk+LCA8dGhlYWQ+IG9yIDx0Zm9vdD4gdG8geW91ciBjb2RlIHRvIG1hdGNoIHRoZSBET00gdHJlZSBnZW5lcmF0ZWQgYnkgdGhlIGJyb3dzZXIuXCIpLFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkluIEhUTUwsICVzIGNhbm5vdCBiZSBhIGNoaWxkIG9mIDwlcz4uJXNcXG5UaGlzIHdpbGwgY2F1c2UgYSBoeWRyYXRpb24gZXJyb3IuJXNcIixcbiAgICAgICAgICAgIHRhZ0Rpc3BsYXlOYW1lLFxuICAgICAgICAgICAgYW5jZXN0b3JUYWcsXG4gICAgICAgICAgICBwYXJlbnRJbmZvLFxuICAgICAgICAgICAgYW5jZXN0b3JEZXNjcmlwdGlvblxuICAgICAgICAgICkpXG4gICAgICAgIDogY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiSW4gSFRNTCwgJXMgY2Fubm90IGJlIGEgZGVzY2VuZGFudCBvZiA8JXM+LlxcblRoaXMgd2lsbCBjYXVzZSBhIGh5ZHJhdGlvbiBlcnJvci4lc1wiLFxuICAgICAgICAgICAgdGFnRGlzcGxheU5hbWUsXG4gICAgICAgICAgICBhbmNlc3RvclRhZyxcbiAgICAgICAgICAgIGFuY2VzdG9yRGVzY3JpcHRpb25cbiAgICAgICAgICApO1xuICAgICAgYW5jZXN0b3JJbmZvICYmXG4gICAgICAgICgoY2hpbGRUYWcgPSBhbmNlc3RvckluZm8ucmV0dXJuKSxcbiAgICAgICAgbnVsbCA9PT0gYW5jZXN0b3IgfHxcbiAgICAgICAgICBudWxsID09PSBjaGlsZFRhZyB8fFxuICAgICAgICAgIChhbmNlc3RvciA9PT0gY2hpbGRUYWcgJiZcbiAgICAgICAgICAgIGNoaWxkVGFnLl9kZWJ1Z093bmVyID09PSBhbmNlc3RvckluZm8uX2RlYnVnT3duZXIpIHx8XG4gICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoYW5jZXN0b3IsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiPCVzPiBjYW5ub3QgY29udGFpbiBhIG5lc3RlZCAlcy5cXG5TZWUgdGhpcyBsb2cgZm9yIHRoZSBhbmNlc3RvciBzdGFjayB0cmFjZS5cIixcbiAgICAgICAgICAgICAgYW5jZXN0b3JUYWcsXG4gICAgICAgICAgICAgIHRhZ0Rpc3BsYXlOYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pKTtcbiAgICAgIHJldHVybiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVUZXh0TmVzdGluZyhjaGlsZFRleHQsIHBhcmVudFRhZywgaW1wbGljaXRSb290U2NvcGUpIHtcbiAgICAgIGlmIChpbXBsaWNpdFJvb3RTY29wZSB8fCBpc1RhZ1ZhbGlkV2l0aFBhcmVudChcIiN0ZXh0XCIsIHBhcmVudFRhZywgITEpKVxuICAgICAgICByZXR1cm4gITA7XG4gICAgICBpbXBsaWNpdFJvb3RTY29wZSA9IFwiI3RleHR8XCIgKyBwYXJlbnRUYWc7XG4gICAgICBpZiAoZGlkV2FybltpbXBsaWNpdFJvb3RTY29wZV0pIHJldHVybiAhMTtcbiAgICAgIGRpZFdhcm5baW1wbGljaXRSb290U2NvcGVdID0gITA7XG4gICAgICB2YXIgYW5jZXN0b3IgPSAoaW1wbGljaXRSb290U2NvcGUgPSBjdXJyZW50KVxuICAgICAgICA/IGZpbmRBbmNlc3RvcihpbXBsaWNpdFJvb3RTY29wZSwgcGFyZW50VGFnKVxuICAgICAgICA6IG51bGw7XG4gICAgICBpbXBsaWNpdFJvb3RTY29wZSA9XG4gICAgICAgIG51bGwgIT09IGltcGxpY2l0Um9vdFNjb3BlICYmIG51bGwgIT09IGFuY2VzdG9yXG4gICAgICAgICAgPyBkZXNjcmliZUFuY2VzdG9ycyhcbiAgICAgICAgICAgICAgYW5jZXN0b3IsXG4gICAgICAgICAgICAgIGltcGxpY2l0Um9vdFNjb3BlLFxuICAgICAgICAgICAgICA2ICE9PSBpbXBsaWNpdFJvb3RTY29wZS50YWcgPyB7IGNoaWxkcmVuOiBudWxsIH0gOiBudWxsXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBcIlwiO1xuICAgICAgL1xcUy8udGVzdChjaGlsZFRleHQpXG4gICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiSW4gSFRNTCwgdGV4dCBub2RlcyBjYW5ub3QgYmUgYSBjaGlsZCBvZiA8JXM+LlxcblRoaXMgd2lsbCBjYXVzZSBhIGh5ZHJhdGlvbiBlcnJvci4lc1wiLFxuICAgICAgICAgICAgcGFyZW50VGFnLFxuICAgICAgICAgICAgaW1wbGljaXRSb290U2NvcGVcbiAgICAgICAgICApXG4gICAgICAgIDogY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiSW4gSFRNTCwgd2hpdGVzcGFjZSB0ZXh0IG5vZGVzIGNhbm5vdCBiZSBhIGNoaWxkIG9mIDwlcz4uIE1ha2Ugc3VyZSB5b3UgZG9uJ3QgaGF2ZSBhbnkgZXh0cmEgd2hpdGVzcGFjZSBiZXR3ZWVuIHRhZ3Mgb24gZWFjaCBsaW5lIG9mIHlvdXIgc291cmNlIGNvZGUuXFxuVGhpcyB3aWxsIGNhdXNlIGEgaHlkcmF0aW9uIGVycm9yLiVzXCIsXG4gICAgICAgICAgICBwYXJlbnRUYWcsXG4gICAgICAgICAgICBpbXBsaWNpdFJvb3RTY29wZVxuICAgICAgICAgICk7XG4gICAgICByZXR1cm4gITE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNldFRleHRDb250ZW50KG5vZGUsIHRleHQpIHtcbiAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgIHZhciBmaXJzdENoaWxkID0gbm9kZS5maXJzdENoaWxkO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZmlyc3RDaGlsZCAmJlxuICAgICAgICAgIGZpcnN0Q2hpbGQgPT09IG5vZGUubGFzdENoaWxkICYmXG4gICAgICAgICAgMyA9PT0gZmlyc3RDaGlsZC5ub2RlVHlwZVxuICAgICAgICApIHtcbiAgICAgICAgICBmaXJzdENoaWxkLm5vZGVWYWx1ZSA9IHRleHQ7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBub2RlLnRleHRDb250ZW50ID0gdGV4dDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2FtZWxpemUoc3RyaW5nKSB7XG4gICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoaHlwaGVuUGF0dGVybiwgZnVuY3Rpb24gKF8sIGNoYXJhY3Rlcikge1xuICAgICAgICByZXR1cm4gY2hhcmFjdGVyLnRvVXBwZXJDYXNlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0VmFsdWVGb3JTdHlsZShzdHlsZSwgc3R5bGVOYW1lLCB2YWx1ZSkge1xuICAgICAgdmFyIGlzQ3VzdG9tUHJvcGVydHkgPSAwID09PSBzdHlsZU5hbWUuaW5kZXhPZihcIi0tXCIpO1xuICAgICAgaXNDdXN0b21Qcm9wZXJ0eSB8fFxuICAgICAgICAoLTEgPCBzdHlsZU5hbWUuaW5kZXhPZihcIi1cIilcbiAgICAgICAgICA/ICh3YXJuZWRTdHlsZU5hbWVzLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkgJiZcbiAgICAgICAgICAgICAgd2FybmVkU3R5bGVOYW1lc1tzdHlsZU5hbWVdKSB8fFxuICAgICAgICAgICAgKCh3YXJuZWRTdHlsZU5hbWVzW3N0eWxlTmFtZV0gPSAhMCksXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlVuc3VwcG9ydGVkIHN0eWxlIHByb3BlcnR5ICVzLiBEaWQgeW91IG1lYW4gJXM/XCIsXG4gICAgICAgICAgICAgIHN0eWxlTmFtZSxcbiAgICAgICAgICAgICAgY2FtZWxpemUoc3R5bGVOYW1lLnJlcGxhY2UobXNQYXR0ZXJuLCBcIm1zLVwiKSlcbiAgICAgICAgICAgICkpXG4gICAgICAgICAgOiBiYWRWZW5kb3JlZFN0eWxlTmFtZVBhdHRlcm4udGVzdChzdHlsZU5hbWUpXG4gICAgICAgICAgICA/ICh3YXJuZWRTdHlsZU5hbWVzLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkgJiZcbiAgICAgICAgICAgICAgICB3YXJuZWRTdHlsZU5hbWVzW3N0eWxlTmFtZV0pIHx8XG4gICAgICAgICAgICAgICgod2FybmVkU3R5bGVOYW1lc1tzdHlsZU5hbWVdID0gITApLFxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiVW5zdXBwb3J0ZWQgdmVuZG9yLXByZWZpeGVkIHN0eWxlIHByb3BlcnR5ICVzLiBEaWQgeW91IG1lYW4gJXM/XCIsXG4gICAgICAgICAgICAgICAgc3R5bGVOYW1lLFxuICAgICAgICAgICAgICAgIHN0eWxlTmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0eWxlTmFtZS5zbGljZSgxKVxuICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgOiAhYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuLnRlc3QodmFsdWUpIHx8XG4gICAgICAgICAgICAgICh3YXJuZWRTdHlsZVZhbHVlcy5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSkgJiZcbiAgICAgICAgICAgICAgICB3YXJuZWRTdHlsZVZhbHVlc1t2YWx1ZV0pIHx8XG4gICAgICAgICAgICAgICgod2FybmVkU3R5bGVWYWx1ZXNbdmFsdWVdID0gITApLFxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICdTdHlsZSBwcm9wZXJ0eSB2YWx1ZXMgc2hvdWxkblxcJ3QgY29udGFpbiBhIHNlbWljb2xvbi4gVHJ5IFwiJXM6ICVzXCIgaW5zdGVhZC4nLFxuICAgICAgICAgICAgICAgIHN0eWxlTmFtZSxcbiAgICAgICAgICAgICAgICB2YWx1ZS5yZXBsYWNlKGJhZFN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uUGF0dGVybiwgXCJcIilcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgIFwibnVtYmVyXCIgPT09IHR5cGVvZiB2YWx1ZSAmJlxuICAgICAgICAgIChpc05hTih2YWx1ZSlcbiAgICAgICAgICAgID8gd2FybmVkRm9yTmFOVmFsdWUgfHxcbiAgICAgICAgICAgICAgKCh3YXJuZWRGb3JOYU5WYWx1ZSA9ICEwKSxcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcImBOYU5gIGlzIGFuIGludmFsaWQgdmFsdWUgZm9yIHRoZSBgJXNgIGNzcyBzdHlsZSBwcm9wZXJ0eS5cIixcbiAgICAgICAgICAgICAgICBzdHlsZU5hbWVcbiAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgIDogaXNGaW5pdGUodmFsdWUpIHx8XG4gICAgICAgICAgICAgIHdhcm5lZEZvckluZmluaXR5VmFsdWUgfHxcbiAgICAgICAgICAgICAgKCh3YXJuZWRGb3JJbmZpbml0eVZhbHVlID0gITApLFxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiYEluZmluaXR5YCBpcyBhbiBpbnZhbGlkIHZhbHVlIGZvciB0aGUgYCVzYCBjc3Mgc3R5bGUgcHJvcGVydHkuXCIsXG4gICAgICAgICAgICAgICAgc3R5bGVOYW1lXG4gICAgICAgICAgICAgICkpKSk7XG4gICAgICBudWxsID09IHZhbHVlIHx8IFwiYm9vbGVhblwiID09PSB0eXBlb2YgdmFsdWUgfHwgXCJcIiA9PT0gdmFsdWVcbiAgICAgICAgPyBpc0N1c3RvbVByb3BlcnR5XG4gICAgICAgICAgPyBzdHlsZS5zZXRQcm9wZXJ0eShzdHlsZU5hbWUsIFwiXCIpXG4gICAgICAgICAgOiBcImZsb2F0XCIgPT09IHN0eWxlTmFtZVxuICAgICAgICAgICAgPyAoc3R5bGUuY3NzRmxvYXQgPSBcIlwiKVxuICAgICAgICAgICAgOiAoc3R5bGVbc3R5bGVOYW1lXSA9IFwiXCIpXG4gICAgICAgIDogaXNDdXN0b21Qcm9wZXJ0eVxuICAgICAgICAgID8gc3R5bGUuc2V0UHJvcGVydHkoc3R5bGVOYW1lLCB2YWx1ZSlcbiAgICAgICAgICA6IFwibnVtYmVyXCIgIT09IHR5cGVvZiB2YWx1ZSB8fFxuICAgICAgICAgICAgICAwID09PSB2YWx1ZSB8fFxuICAgICAgICAgICAgICB1bml0bGVzc051bWJlcnMuaGFzKHN0eWxlTmFtZSlcbiAgICAgICAgICAgID8gXCJmbG9hdFwiID09PSBzdHlsZU5hbWVcbiAgICAgICAgICAgICAgPyAoc3R5bGUuY3NzRmxvYXQgPSB2YWx1ZSlcbiAgICAgICAgICAgICAgOiAoY2hlY2tDU1NQcm9wZXJ0eVN0cmluZ0NvZXJjaW9uKHZhbHVlLCBzdHlsZU5hbWUpLFxuICAgICAgICAgICAgICAgIChzdHlsZVtzdHlsZU5hbWVdID0gKFwiXCIgKyB2YWx1ZSkudHJpbSgpKSlcbiAgICAgICAgICAgIDogKHN0eWxlW3N0eWxlTmFtZV0gPSB2YWx1ZSArIFwicHhcIik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNldFZhbHVlRm9yU3R5bGVzKG5vZGUsIHN0eWxlcywgcHJldlN0eWxlcykge1xuICAgICAgaWYgKG51bGwgIT0gc3R5bGVzICYmIFwib2JqZWN0XCIgIT09IHR5cGVvZiBzdHlsZXMpXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiVGhlIGBzdHlsZWAgcHJvcCBleHBlY3RzIGEgbWFwcGluZyBmcm9tIHN0eWxlIHByb3BlcnRpZXMgdG8gdmFsdWVzLCBub3QgYSBzdHJpbmcuIEZvciBleGFtcGxlLCBzdHlsZT17e21hcmdpblJpZ2h0OiBzcGFjaW5nICsgJ2VtJ319IHdoZW4gdXNpbmcgSlNYLlwiXG4gICAgICAgICk7XG4gICAgICBzdHlsZXMgJiYgT2JqZWN0LmZyZWV6ZShzdHlsZXMpO1xuICAgICAgbm9kZSA9IG5vZGUuc3R5bGU7XG4gICAgICBpZiAobnVsbCAhPSBwcmV2U3R5bGVzKSB7XG4gICAgICAgIGlmIChzdHlsZXMpIHtcbiAgICAgICAgICB2YXIgZXhwYW5kZWRVcGRhdGVzID0ge307XG4gICAgICAgICAgaWYgKHByZXZTdHlsZXMpXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcHJldlN0eWxlcylcbiAgICAgICAgICAgICAgaWYgKHByZXZTdHlsZXMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAhc3R5bGVzLmhhc093blByb3BlcnR5KGtleSkpXG4gICAgICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICAgIHZhciBsb25naGFuZHMgPSBzaG9ydGhhbmRUb0xvbmdoYW5kW2tleV0gfHwgW2tleV0sIGkgPSAwO1xuICAgICAgICAgICAgICAgICAgaSA8IGxvbmdoYW5kcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICBpKytcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICBleHBhbmRlZFVwZGF0ZXNbbG9uZ2hhbmRzW2ldXSA9IGtleTtcbiAgICAgICAgICBmb3IgKHZhciBfa2V5IGluIHN0eWxlcylcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgc3R5bGVzLmhhc093blByb3BlcnR5KF9rZXkpICYmXG4gICAgICAgICAgICAgICghcHJldlN0eWxlcyB8fCBwcmV2U3R5bGVzW19rZXldICE9PSBzdHlsZXNbX2tleV0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAga2V5ID0gc2hvcnRoYW5kVG9Mb25naGFuZFtfa2V5XSB8fCBbX2tleV0sIGxvbmdoYW5kcyA9IDA7XG4gICAgICAgICAgICAgICAgbG9uZ2hhbmRzIDwga2V5Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICBsb25naGFuZHMrK1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgZXhwYW5kZWRVcGRhdGVzW2tleVtsb25naGFuZHNdXSA9IF9rZXk7XG4gICAgICAgICAgX2tleSA9IHt9O1xuICAgICAgICAgIGZvciAodmFyIGtleSRqc2NvbXAkMCBpbiBzdHlsZXMpXG4gICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICBrZXkgPSBzaG9ydGhhbmRUb0xvbmdoYW5kW2tleSRqc2NvbXAkMF0gfHwgW2tleSRqc2NvbXAkMF0sXG4gICAgICAgICAgICAgICAgbG9uZ2hhbmRzID0gMDtcbiAgICAgICAgICAgICAgbG9uZ2hhbmRzIDwga2V5Lmxlbmd0aDtcbiAgICAgICAgICAgICAgbG9uZ2hhbmRzKytcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgX2tleVtrZXlbbG9uZ2hhbmRzXV0gPSBrZXkkanNjb21wJDA7XG4gICAgICAgICAga2V5JGpzY29tcCQwID0ge307XG4gICAgICAgICAgZm9yICh2YXIgX2tleTIgaW4gZXhwYW5kZWRVcGRhdGVzKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoKGtleSA9IGV4cGFuZGVkVXBkYXRlc1tfa2V5Ml0pLFxuICAgICAgICAgICAgICAobG9uZ2hhbmRzID0gX2tleVtfa2V5Ml0pICYmXG4gICAgICAgICAgICAgICAga2V5ICE9PSBsb25naGFuZHMgJiZcbiAgICAgICAgICAgICAgICAoKGkgPSBrZXkgKyBcIixcIiArIGxvbmdoYW5kcyksICFrZXkkanNjb21wJDBbaV0pKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGtleSRqc2NvbXAkMFtpXSA9ICEwO1xuICAgICAgICAgICAgICBpID0gY29uc29sZTtcbiAgICAgICAgICAgICAgdmFyIHZhbHVlID0gc3R5bGVzW2tleV07XG4gICAgICAgICAgICAgIGkuZXJyb3IuY2FsbChcbiAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgIFwiJXMgYSBzdHlsZSBwcm9wZXJ0eSBkdXJpbmcgcmVyZW5kZXIgKCVzKSB3aGVuIGEgY29uZmxpY3RpbmcgcHJvcGVydHkgaXMgc2V0ICglcykgY2FuIGxlYWQgdG8gc3R5bGluZyBidWdzLiBUbyBhdm9pZCB0aGlzLCBkb24ndCBtaXggc2hvcnRoYW5kIGFuZCBub24tc2hvcnRoYW5kIHByb3BlcnRpZXMgZm9yIHRoZSBzYW1lIHZhbHVlOyBpbnN0ZWFkLCByZXBsYWNlIHRoZSBzaG9ydGhhbmQgd2l0aCBzZXBhcmF0ZSB2YWx1ZXMuXCIsXG4gICAgICAgICAgICAgICAgbnVsbCA9PSB2YWx1ZSB8fCBcImJvb2xlYW5cIiA9PT0gdHlwZW9mIHZhbHVlIHx8IFwiXCIgPT09IHZhbHVlXG4gICAgICAgICAgICAgICAgICA/IFwiUmVtb3ZpbmdcIlxuICAgICAgICAgICAgICAgICAgOiBcIlVwZGF0aW5nXCIsXG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIGxvbmdoYW5kc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIHN0eWxlTmFtZSBpbiBwcmV2U3R5bGVzKVxuICAgICAgICAgICFwcmV2U3R5bGVzLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkgfHxcbiAgICAgICAgICAgIChudWxsICE9IHN0eWxlcyAmJiBzdHlsZXMuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSkgfHxcbiAgICAgICAgICAgICgwID09PSBzdHlsZU5hbWUuaW5kZXhPZihcIi0tXCIpXG4gICAgICAgICAgICAgID8gbm9kZS5zZXRQcm9wZXJ0eShzdHlsZU5hbWUsIFwiXCIpXG4gICAgICAgICAgICAgIDogXCJmbG9hdFwiID09PSBzdHlsZU5hbWVcbiAgICAgICAgICAgICAgICA/IChub2RlLmNzc0Zsb2F0ID0gXCJcIilcbiAgICAgICAgICAgICAgICA6IChub2RlW3N0eWxlTmFtZV0gPSBcIlwiKSk7XG4gICAgICAgIGZvciAodmFyIF9zdHlsZU5hbWUgaW4gc3R5bGVzKVxuICAgICAgICAgIChfa2V5MiA9IHN0eWxlc1tfc3R5bGVOYW1lXSksXG4gICAgICAgICAgICBzdHlsZXMuaGFzT3duUHJvcGVydHkoX3N0eWxlTmFtZSkgJiZcbiAgICAgICAgICAgICAgcHJldlN0eWxlc1tfc3R5bGVOYW1lXSAhPT0gX2tleTIgJiZcbiAgICAgICAgICAgICAgc2V0VmFsdWVGb3JTdHlsZShub2RlLCBfc3R5bGVOYW1lLCBfa2V5Mik7XG4gICAgICB9IGVsc2VcbiAgICAgICAgZm9yIChleHBhbmRlZFVwZGF0ZXMgaW4gc3R5bGVzKVxuICAgICAgICAgIHN0eWxlcy5oYXNPd25Qcm9wZXJ0eShleHBhbmRlZFVwZGF0ZXMpICYmXG4gICAgICAgICAgICBzZXRWYWx1ZUZvclN0eWxlKG5vZGUsIGV4cGFuZGVkVXBkYXRlcywgc3R5bGVzW2V4cGFuZGVkVXBkYXRlc10pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0N1c3RvbUVsZW1lbnQodGFnTmFtZSkge1xuICAgICAgaWYgKC0xID09PSB0YWdOYW1lLmluZGV4T2YoXCItXCIpKSByZXR1cm4gITE7XG4gICAgICBzd2l0Y2ggKHRhZ05hbWUpIHtcbiAgICAgICAgY2FzZSBcImFubm90YXRpb24teG1sXCI6XG4gICAgICAgIGNhc2UgXCJjb2xvci1wcm9maWxlXCI6XG4gICAgICAgIGNhc2UgXCJmb250LWZhY2VcIjpcbiAgICAgICAgY2FzZSBcImZvbnQtZmFjZS1zcmNcIjpcbiAgICAgICAgY2FzZSBcImZvbnQtZmFjZS11cmlcIjpcbiAgICAgICAgY2FzZSBcImZvbnQtZmFjZS1mb3JtYXRcIjpcbiAgICAgICAgY2FzZSBcImZvbnQtZmFjZS1uYW1lXCI6XG4gICAgICAgIGNhc2UgXCJtaXNzaW5nLWdseXBoXCI6XG4gICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0QXR0cmlidXRlQWxpYXMobmFtZSkge1xuICAgICAgcmV0dXJuIGFsaWFzZXMuZ2V0KG5hbWUpIHx8IG5hbWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydHkkMSh0YWdOYW1lLCBuYW1lKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGhhc093blByb3BlcnR5LmNhbGwod2FybmVkUHJvcGVydGllcyQxLCBuYW1lKSAmJlxuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV1cbiAgICAgIClcbiAgICAgICAgcmV0dXJuICEwO1xuICAgICAgaWYgKHJBUklBQ2FtZWwkMS50ZXN0KG5hbWUpKSB7XG4gICAgICAgIHRhZ05hbWUgPSBcImFyaWEtXCIgKyBuYW1lLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHRhZ05hbWUgPSBhcmlhUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSh0YWdOYW1lKSA/IHRhZ05hbWUgOiBudWxsO1xuICAgICAgICBpZiAobnVsbCA9PSB0YWdOYW1lKVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkludmFsaWQgQVJJQSBhdHRyaWJ1dGUgYCVzYC4gQVJJQSBhdHRyaWJ1dGVzIGZvbGxvdyB0aGUgcGF0dGVybiBhcmlhLSogYW5kIG11c3QgYmUgbG93ZXJjYXNlLlwiLFxuICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgKHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9ICEwKVxuICAgICAgICAgICk7XG4gICAgICAgIGlmIChuYW1lICE9PSB0YWdOYW1lKVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkludmFsaWQgQVJJQSBhdHRyaWJ1dGUgYCVzYC4gRGlkIHlvdSBtZWFuIGAlc2A/XCIsXG4gICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgIHRhZ05hbWVcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICAod2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gITApXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChyQVJJQSQxLnRlc3QobmFtZSkpIHtcbiAgICAgICAgdGFnTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgdGFnTmFtZSA9IGFyaWFQcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KHRhZ05hbWUpID8gdGFnTmFtZSA6IG51bGw7XG4gICAgICAgIGlmIChudWxsID09IHRhZ05hbWUpIHJldHVybiAod2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gITApLCAhMTtcbiAgICAgICAgbmFtZSAhPT0gdGFnTmFtZSAmJlxuICAgICAgICAgIChjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJVbmtub3duIEFSSUEgYXR0cmlidXRlIGAlc2AuIERpZCB5b3UgbWVhbiBgJXNgP1wiLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHRhZ05hbWVcbiAgICAgICAgICApLFxuICAgICAgICAgICh3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSAhMCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuICEwO1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnRpZXMkMih0eXBlLCBwcm9wcykge1xuICAgICAgdmFyIGludmFsaWRQcm9wcyA9IFtdLFxuICAgICAgICBrZXk7XG4gICAgICBmb3IgKGtleSBpbiBwcm9wcylcbiAgICAgICAgdmFsaWRhdGVQcm9wZXJ0eSQxKHR5cGUsIGtleSkgfHwgaW52YWxpZFByb3BzLnB1c2goa2V5KTtcbiAgICAgIHByb3BzID0gaW52YWxpZFByb3BzXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgICByZXR1cm4gXCJgXCIgKyBwcm9wICsgXCJgXCI7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKFwiLCBcIik7XG4gICAgICAxID09PSBpbnZhbGlkUHJvcHMubGVuZ3RoXG4gICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiSW52YWxpZCBhcmlhIHByb3AgJXMgb24gPCVzPiB0YWcuIEZvciBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9pbnZhbGlkLWFyaWEtcHJvcHNcIixcbiAgICAgICAgICAgIHByb3BzLFxuICAgICAgICAgICAgdHlwZVxuICAgICAgICAgIClcbiAgICAgICAgOiAxIDwgaW52YWxpZFByb3BzLmxlbmd0aCAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkludmFsaWQgYXJpYSBwcm9wcyAlcyBvbiA8JXM+IHRhZy4gRm9yIGRldGFpbHMsIHNlZSBodHRwczovL3JlYWN0LmRldi9saW5rL2ludmFsaWQtYXJpYS1wcm9wc1wiLFxuICAgICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgICB0eXBlXG4gICAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0eSh0YWdOYW1lLCBuYW1lLCB2YWx1ZSwgZXZlbnRSZWdpc3RyeSkge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwod2FybmVkUHJvcGVydGllcywgbmFtZSkgJiYgd2FybmVkUHJvcGVydGllc1tuYW1lXSlcbiAgICAgICAgcmV0dXJuICEwO1xuICAgICAgdmFyIGxvd2VyQ2FzZWROYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKFwib25mb2N1c2luXCIgPT09IGxvd2VyQ2FzZWROYW1lIHx8IFwib25mb2N1c291dFwiID09PSBsb3dlckNhc2VkTmFtZSlcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJSZWFjdCB1c2VzIG9uRm9jdXMgYW5kIG9uQmx1ciBpbnN0ZWFkIG9mIG9uRm9jdXNJbiBhbmQgb25Gb2N1c091dC4gQWxsIFJlYWN0IGV2ZW50cyBhcmUgbm9ybWFsaXplZCB0byBidWJibGUsIHNvIG9uRm9jdXNJbiBhbmQgb25Gb2N1c091dCBhcmUgbm90IG5lZWRlZC9zdXBwb3J0ZWQgYnkgUmVhY3QuXCJcbiAgICAgICAgICApLFxuICAgICAgICAgICh3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gITApXG4gICAgICAgICk7XG4gICAgICBpZiAoXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHZhbHVlICYmXG4gICAgICAgICgoXCJmb3JtXCIgPT09IHRhZ05hbWUgJiYgXCJhY3Rpb25cIiA9PT0gbmFtZSkgfHxcbiAgICAgICAgICAoXCJpbnB1dFwiID09PSB0YWdOYW1lICYmIFwiZm9ybUFjdGlvblwiID09PSBuYW1lKSB8fFxuICAgICAgICAgIChcImJ1dHRvblwiID09PSB0YWdOYW1lICYmIFwiZm9ybUFjdGlvblwiID09PSBuYW1lKSlcbiAgICAgIClcbiAgICAgICAgcmV0dXJuICEwO1xuICAgICAgaWYgKG51bGwgIT0gZXZlbnRSZWdpc3RyeSkge1xuICAgICAgICB0YWdOYW1lID0gZXZlbnRSZWdpc3RyeS5wb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzO1xuICAgICAgICBpZiAoZXZlbnRSZWdpc3RyeS5yZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KG5hbWUpKVxuICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgZXZlbnRSZWdpc3RyeSA9IHRhZ05hbWUuaGFzT3duUHJvcGVydHkobG93ZXJDYXNlZE5hbWUpXG4gICAgICAgICAgPyB0YWdOYW1lW2xvd2VyQ2FzZWROYW1lXVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgaWYgKG51bGwgIT0gZXZlbnRSZWdpc3RyeSlcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJJbnZhbGlkIGV2ZW50IGhhbmRsZXIgcHJvcGVydHkgYCVzYC4gRGlkIHlvdSBtZWFuIGAlc2A/XCIsXG4gICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgIGV2ZW50UmVnaXN0cnlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICAod2FybmVkUHJvcGVydGllc1tuYW1lXSA9ICEwKVxuICAgICAgICAgICk7XG4gICAgICAgIGlmIChFVkVOVF9OQU1FX1JFR0VYLnRlc3QobmFtZSkpXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiVW5rbm93biBldmVudCBoYW5kbGVyIHByb3BlcnR5IGAlc2AuIEl0IHdpbGwgYmUgaWdub3JlZC5cIixcbiAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICh3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gITApXG4gICAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoRVZFTlRfTkFNRV9SRUdFWC50ZXN0KG5hbWUpKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIElOVkFMSURfRVZFTlRfTkFNRV9SRUdFWC50ZXN0KG5hbWUpICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkludmFsaWQgZXZlbnQgaGFuZGxlciBwcm9wZXJ0eSBgJXNgLiBSZWFjdCBldmVudHMgdXNlIHRoZSBjYW1lbENhc2UgbmFtaW5nIGNvbnZlbnRpb24sIGZvciBleGFtcGxlIGBvbkNsaWNrYC5cIixcbiAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAod2FybmVkUHJvcGVydGllc1tuYW1lXSA9ICEwKVxuICAgICAgICApO1xuICAgICAgaWYgKHJBUklBLnRlc3QobmFtZSkgfHwgckFSSUFDYW1lbC50ZXN0KG5hbWUpKSByZXR1cm4gITA7XG4gICAgICBpZiAoXCJpbm5lcmh0bWxcIiA9PT0gbG93ZXJDYXNlZE5hbWUpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiRGlyZWN0bHkgc2V0dGluZyBwcm9wZXJ0eSBgaW5uZXJIVE1MYCBpcyBub3QgcGVybWl0dGVkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgbG9va3VwIGRvY3VtZW50YXRpb24gb24gYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYC5cIlxuICAgICAgICAgICksXG4gICAgICAgICAgKHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSAhMClcbiAgICAgICAgKTtcbiAgICAgIGlmIChcImFyaWFcIiA9PT0gbG93ZXJDYXNlZE5hbWUpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiVGhlIGBhcmlhYCBhdHRyaWJ1dGUgaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgaW4gUmVhY3QuIFBhc3MgaW5kaXZpZHVhbCBgYXJpYS1gIGF0dHJpYnV0ZXMgaW5zdGVhZC5cIlxuICAgICAgICAgICksXG4gICAgICAgICAgKHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSAhMClcbiAgICAgICAgKTtcbiAgICAgIGlmIChcbiAgICAgICAgXCJpc1wiID09PSBsb3dlckNhc2VkTmFtZSAmJlxuICAgICAgICBudWxsICE9PSB2YWx1ZSAmJlxuICAgICAgICB2b2lkIDAgIT09IHZhbHVlICYmXG4gICAgICAgIFwic3RyaW5nXCIgIT09IHR5cGVvZiB2YWx1ZVxuICAgICAgKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIlJlY2VpdmVkIGEgYCVzYCBmb3IgYSBzdHJpbmcgYXR0cmlidXRlIGBpc2AuIElmIHRoaXMgaXMgZXhwZWN0ZWQsIGNhc3QgdGhlIHZhbHVlIHRvIGEgc3RyaW5nLlwiLFxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlXG4gICAgICAgICAgKSxcbiAgICAgICAgICAod2FybmVkUHJvcGVydGllc1tuYW1lXSA9ICEwKVxuICAgICAgICApO1xuICAgICAgaWYgKFwibnVtYmVyXCIgPT09IHR5cGVvZiB2YWx1ZSAmJiBpc05hTih2YWx1ZSkpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiUmVjZWl2ZWQgTmFOIGZvciB0aGUgYCVzYCBhdHRyaWJ1dGUuIElmIHRoaXMgaXMgZXhwZWN0ZWQsIGNhc3QgdGhlIHZhbHVlIHRvIGEgc3RyaW5nLlwiLFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICksXG4gICAgICAgICAgKHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSAhMClcbiAgICAgICAgKTtcbiAgICAgIGlmIChwb3NzaWJsZVN0YW5kYXJkTmFtZXMuaGFzT3duUHJvcGVydHkobG93ZXJDYXNlZE5hbWUpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAoKGxvd2VyQ2FzZWROYW1lID0gcG9zc2libGVTdGFuZGFyZE5hbWVzW2xvd2VyQ2FzZWROYW1lXSksXG4gICAgICAgICAgbG93ZXJDYXNlZE5hbWUgIT09IG5hbWUpXG4gICAgICAgIClcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJJbnZhbGlkIERPTSBwcm9wZXJ0eSBgJXNgLiBEaWQgeW91IG1lYW4gYCVzYD9cIixcbiAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgbG93ZXJDYXNlZE5hbWVcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICAod2FybmVkUHJvcGVydGllc1tuYW1lXSA9ICEwKVxuICAgICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKG5hbWUgIT09IGxvd2VyQ2FzZWROYW1lKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIlJlYWN0IGRvZXMgbm90IHJlY29nbml6ZSB0aGUgYCVzYCBwcm9wIG9uIGEgRE9NIGVsZW1lbnQuIElmIHlvdSBpbnRlbnRpb25hbGx5IHdhbnQgaXQgdG8gYXBwZWFyIGluIHRoZSBET00gYXMgYSBjdXN0b20gYXR0cmlidXRlLCBzcGVsbCBpdCBhcyBsb3dlcmNhc2UgYCVzYCBpbnN0ZWFkLiBJZiB5b3UgYWNjaWRlbnRhbGx5IHBhc3NlZCBpdCBmcm9tIGEgcGFyZW50IGNvbXBvbmVudCwgcmVtb3ZlIGl0IGZyb20gdGhlIERPTSBlbGVtZW50LlwiLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGxvd2VyQ2FzZWROYW1lXG4gICAgICAgICAgKSxcbiAgICAgICAgICAod2FybmVkUHJvcGVydGllc1tuYW1lXSA9ICEwKVxuICAgICAgICApO1xuICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgIGNhc2UgXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOlxuICAgICAgICBjYXNlIFwiY2hpbGRyZW5cIjpcbiAgICAgICAgY2FzZSBcInN0eWxlXCI6XG4gICAgICAgIGNhc2UgXCJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmdcIjpcbiAgICAgICAgY2FzZSBcInN1cHByZXNzSHlkcmF0aW9uV2FybmluZ1wiOlxuICAgICAgICBjYXNlIFwiZGVmYXVsdFZhbHVlXCI6XG4gICAgICAgIGNhc2UgXCJkZWZhdWx0Q2hlY2tlZFwiOlxuICAgICAgICBjYXNlIFwiaW5uZXJIVE1MXCI6XG4gICAgICAgIGNhc2UgXCJyZWZcIjpcbiAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgIGNhc2UgXCJpbm5lclRleHRcIjpcbiAgICAgICAgY2FzZSBcInRleHRDb250ZW50XCI6XG4gICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgfVxuICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhdXRvRm9jdXNcIjpcbiAgICAgICAgICAgIGNhc2UgXCJjaGVja2VkXCI6XG4gICAgICAgICAgICBjYXNlIFwibXVsdGlwbGVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJtdXRlZFwiOlxuICAgICAgICAgICAgY2FzZSBcInNlbGVjdGVkXCI6XG4gICAgICAgICAgICBjYXNlIFwiY29udGVudEVkaXRhYmxlXCI6XG4gICAgICAgICAgICBjYXNlIFwic3BlbGxDaGVja1wiOlxuICAgICAgICAgICAgY2FzZSBcImRyYWdnYWJsZVwiOlxuICAgICAgICAgICAgY2FzZSBcInZhbHVlXCI6XG4gICAgICAgICAgICBjYXNlIFwiYXV0b1JldmVyc2VcIjpcbiAgICAgICAgICAgIGNhc2UgXCJleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkXCI6XG4gICAgICAgICAgICBjYXNlIFwiZm9jdXNhYmxlXCI6XG4gICAgICAgICAgICBjYXNlIFwicHJlc2VydmVBbHBoYVwiOlxuICAgICAgICAgICAgY2FzZSBcImFsbG93RnVsbFNjcmVlblwiOlxuICAgICAgICAgICAgY2FzZSBcImFzeW5jXCI6XG4gICAgICAgICAgICBjYXNlIFwiYXV0b1BsYXlcIjpcbiAgICAgICAgICAgIGNhc2UgXCJjb250cm9sc1wiOlxuICAgICAgICAgICAgY2FzZSBcImRlZmF1bHRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJkZWZlclwiOlxuICAgICAgICAgICAgY2FzZSBcImRpc2FibGVkXCI6XG4gICAgICAgICAgICBjYXNlIFwiZGlzYWJsZVBpY3R1cmVJblBpY3R1cmVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJkaXNhYmxlUmVtb3RlUGxheWJhY2tcIjpcbiAgICAgICAgICAgIGNhc2UgXCJmb3JtTm9WYWxpZGF0ZVwiOlxuICAgICAgICAgICAgY2FzZSBcImhpZGRlblwiOlxuICAgICAgICAgICAgY2FzZSBcImxvb3BcIjpcbiAgICAgICAgICAgIGNhc2UgXCJub01vZHVsZVwiOlxuICAgICAgICAgICAgY2FzZSBcIm5vVmFsaWRhdGVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJvcGVuXCI6XG4gICAgICAgICAgICBjYXNlIFwicGxheXNJbmxpbmVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJyZWFkT25seVwiOlxuICAgICAgICAgICAgY2FzZSBcInJlcXVpcmVkXCI6XG4gICAgICAgICAgICBjYXNlIFwicmV2ZXJzZWRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzY29wZWRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzZWFtbGVzc1wiOlxuICAgICAgICAgICAgY2FzZSBcIml0ZW1TY29wZVwiOlxuICAgICAgICAgICAgY2FzZSBcImNhcHR1cmVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJkb3dubG9hZFwiOlxuICAgICAgICAgICAgY2FzZSBcImluZXJ0XCI6XG4gICAgICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGxvd2VyQ2FzZWROYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsIDUpO1xuICAgICAgICAgICAgICBpZiAoXCJkYXRhLVwiID09PSBsb3dlckNhc2VkTmFtZSB8fCBcImFyaWEtXCIgPT09IGxvd2VyQ2FzZWROYW1lKVxuICAgICAgICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICdSZWNlaXZlZCBgJXNgIGZvciBhIG5vbi1ib29sZWFuIGF0dHJpYnV0ZSBgJXNgLlxcblxcbklmIHlvdSB3YW50IHRvIHdyaXRlIGl0IHRvIHRoZSBET00sIHBhc3MgYSBzdHJpbmcgaW5zdGVhZDogJXM9XCIlc1wiIG9yICVzPXt2YWx1ZS50b1N0cmluZygpfS4nLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICdSZWNlaXZlZCBgJXNgIGZvciBhIG5vbi1ib29sZWFuIGF0dHJpYnV0ZSBgJXNgLlxcblxcbklmIHlvdSB3YW50IHRvIHdyaXRlIGl0IHRvIHRoZSBET00sIHBhc3MgYSBzdHJpbmcgaW5zdGVhZDogJXM9XCIlc1wiIG9yICVzPXt2YWx1ZS50b1N0cmluZygpfS5cXG5cXG5JZiB5b3UgdXNlZCB0byBjb25kaXRpb25hbGx5IG9taXQgaXQgd2l0aCAlcz17Y29uZGl0aW9uICYmIHZhbHVlfSwgcGFzcyAlcz17Y29uZGl0aW9uID8gdmFsdWUgOiB1bmRlZmluZWR9IGluc3RlYWQuJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXR1cm4gKHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSAhMCk7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgIHJldHVybiAod2FybmVkUHJvcGVydGllc1tuYW1lXSA9ICEwKSwgITE7XG4gICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICBpZiAoXCJmYWxzZVwiID09PSB2YWx1ZSB8fCBcInRydWVcIiA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgICAgICAgICBjYXNlIFwiY2hlY2tlZFwiOlxuICAgICAgICAgICAgICBjYXNlIFwic2VsZWN0ZWRcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIm11bHRpcGxlXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJtdXRlZFwiOlxuICAgICAgICAgICAgICBjYXNlIFwiYWxsb3dGdWxsU2NyZWVuXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJhc3luY1wiOlxuICAgICAgICAgICAgICBjYXNlIFwiYXV0b1BsYXlcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImNvbnRyb2xzXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJkZWZhdWx0XCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJkZWZlclwiOlxuICAgICAgICAgICAgICBjYXNlIFwiZGlzYWJsZWRcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImRpc2FibGVQaWN0dXJlSW5QaWN0dXJlXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJkaXNhYmxlUmVtb3RlUGxheWJhY2tcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImZvcm1Ob1ZhbGlkYXRlXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJoaWRkZW5cIjpcbiAgICAgICAgICAgICAgY2FzZSBcImxvb3BcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIm5vTW9kdWxlXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJub1ZhbGlkYXRlXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJvcGVuXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJwbGF5c0lubGluZVwiOlxuICAgICAgICAgICAgICBjYXNlIFwicmVhZE9ubHlcIjpcbiAgICAgICAgICAgICAgY2FzZSBcInJlcXVpcmVkXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJyZXZlcnNlZFwiOlxuICAgICAgICAgICAgICBjYXNlIFwic2NvcGVkXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJzZWFtbGVzc1wiOlxuICAgICAgICAgICAgICBjYXNlIFwiaXRlbVNjb3BlXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJpbmVydFwiOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVjZWl2ZWQgdGhlIHN0cmluZyBgJXNgIGZvciB0aGUgYm9vbGVhbiBhdHRyaWJ1dGUgYCVzYC4gJXMgRGlkIHlvdSBtZWFuICVzPXslc30/XCIsXG4gICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICBcImZhbHNlXCIgPT09IHZhbHVlXG4gICAgICAgICAgICAgICAgPyBcIlRoZSBicm93c2VyIHdpbGwgaW50ZXJwcmV0IGl0IGFzIGEgdHJ1dGh5IHZhbHVlLlwiXG4gICAgICAgICAgICAgICAgOiAnQWx0aG91Z2ggdGhpcyB3b3JrcywgaXQgd2lsbCBub3Qgd29yayBhcyBleHBlY3RlZCBpZiB5b3UgcGFzcyB0aGUgc3RyaW5nIFwiZmFsc2VcIi4nLFxuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSAhMDtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gITA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhcm5Vbmtub3duUHJvcGVydGllcyh0eXBlLCBwcm9wcywgZXZlbnRSZWdpc3RyeSkge1xuICAgICAgdmFyIHVua25vd25Qcm9wcyA9IFtdLFxuICAgICAgICBrZXk7XG4gICAgICBmb3IgKGtleSBpbiBwcm9wcylcbiAgICAgICAgdmFsaWRhdGVQcm9wZXJ0eSh0eXBlLCBrZXksIHByb3BzW2tleV0sIGV2ZW50UmVnaXN0cnkpIHx8XG4gICAgICAgICAgdW5rbm93blByb3BzLnB1c2goa2V5KTtcbiAgICAgIHByb3BzID0gdW5rbm93blByb3BzXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgICByZXR1cm4gXCJgXCIgKyBwcm9wICsgXCJgXCI7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKFwiLCBcIik7XG4gICAgICAxID09PSB1bmtub3duUHJvcHMubGVuZ3RoXG4gICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiSW52YWxpZCB2YWx1ZSBmb3IgcHJvcCAlcyBvbiA8JXM+IHRhZy4gRWl0aGVyIHJlbW92ZSBpdCBmcm9tIHRoZSBlbGVtZW50LCBvciBwYXNzIGEgc3RyaW5nIG9yIG51bWJlciB2YWx1ZSB0byBrZWVwIGl0IGluIHRoZSBET00uIEZvciBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9hdHRyaWJ1dGUtYmVoYXZpb3IgXCIsXG4gICAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICAgIHR5cGVcbiAgICAgICAgICApXG4gICAgICAgIDogMSA8IHVua25vd25Qcm9wcy5sZW5ndGggJiZcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJJbnZhbGlkIHZhbHVlcyBmb3IgcHJvcHMgJXMgb24gPCVzPiB0YWcuIEVpdGhlciByZW1vdmUgdGhlbSBmcm9tIHRoZSBlbGVtZW50LCBvciBwYXNzIGEgc3RyaW5nIG9yIG51bWJlciB2YWx1ZSB0byBrZWVwIHRoZW0gaW4gdGhlIERPTS4gRm9yIGRldGFpbHMsIHNlZSBodHRwczovL3JlYWN0LmRldi9saW5rL2F0dHJpYnV0ZS1iZWhhdmlvciBcIixcbiAgICAgICAgICAgIHByb3BzLFxuICAgICAgICAgICAgdHlwZVxuICAgICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNhbml0aXplVVJMKHVybCkge1xuICAgICAgcmV0dXJuIGlzSmF2YVNjcmlwdFByb3RvY29sLnRlc3QoXCJcIiArIHVybClcbiAgICAgICAgPyBcImphdmFzY3JpcHQ6dGhyb3cgbmV3IEVycm9yKCdSZWFjdCBoYXMgYmxvY2tlZCBhIGphdmFzY3JpcHQ6IFVSTCBhcyBhIHNlY3VyaXR5IHByZWNhdXRpb24uJylcIlxuICAgICAgICA6IHVybDtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm9vcCQxKCkge31cbiAgICBmdW5jdGlvbiBnZXRFdmVudFRhcmdldChuYXRpdmVFdmVudCkge1xuICAgICAgbmF0aXZlRXZlbnQgPSBuYXRpdmVFdmVudC50YXJnZXQgfHwgbmF0aXZlRXZlbnQuc3JjRWxlbWVudCB8fCB3aW5kb3c7XG4gICAgICBuYXRpdmVFdmVudC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCAmJlxuICAgICAgICAobmF0aXZlRXZlbnQgPSBuYXRpdmVFdmVudC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCk7XG4gICAgICByZXR1cm4gMyA9PT0gbmF0aXZlRXZlbnQubm9kZVR5cGUgPyBuYXRpdmVFdmVudC5wYXJlbnROb2RlIDogbmF0aXZlRXZlbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc3RvcmVTdGF0ZU9mVGFyZ2V0KHRhcmdldCkge1xuICAgICAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBnZXRJbnN0YW5jZUZyb21Ob2RlKHRhcmdldCk7XG4gICAgICBpZiAoaW50ZXJuYWxJbnN0YW5jZSAmJiAodGFyZ2V0ID0gaW50ZXJuYWxJbnN0YW5jZS5zdGF0ZU5vZGUpKSB7XG4gICAgICAgIHZhciBwcm9wcyA9IHRhcmdldFtpbnRlcm5hbFByb3BzS2V5XSB8fCBudWxsO1xuICAgICAgICBhOiBzd2l0Y2ggKFxuICAgICAgICAgICgodGFyZ2V0ID0gaW50ZXJuYWxJbnN0YW5jZS5zdGF0ZU5vZGUpLCBpbnRlcm5hbEluc3RhbmNlLnR5cGUpXG4gICAgICAgICkge1xuICAgICAgICAgIGNhc2UgXCJpbnB1dFwiOlxuICAgICAgICAgICAgdXBkYXRlSW5wdXQoXG4gICAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgICAgcHJvcHMudmFsdWUsXG4gICAgICAgICAgICAgIHByb3BzLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgICAgcHJvcHMuZGVmYXVsdFZhbHVlLFxuICAgICAgICAgICAgICBwcm9wcy5jaGVja2VkLFxuICAgICAgICAgICAgICBwcm9wcy5kZWZhdWx0Q2hlY2tlZCxcbiAgICAgICAgICAgICAgcHJvcHMudHlwZSxcbiAgICAgICAgICAgICAgcHJvcHMubmFtZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGludGVybmFsSW5zdGFuY2UgPSBwcm9wcy5uYW1lO1xuICAgICAgICAgICAgaWYgKFwicmFkaW9cIiA9PT0gcHJvcHMudHlwZSAmJiBudWxsICE9IGludGVybmFsSW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgZm9yIChwcm9wcyA9IHRhcmdldDsgcHJvcHMucGFyZW50Tm9kZTsgKSBwcm9wcyA9IHByb3BzLnBhcmVudE5vZGU7XG4gICAgICAgICAgICAgIGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24oaW50ZXJuYWxJbnN0YW5jZSwgXCJuYW1lXCIpO1xuICAgICAgICAgICAgICBwcm9wcyA9IHByb3BzLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgICAgICAgICAgJ2lucHV0W25hbWU9XCInICtcbiAgICAgICAgICAgICAgICAgIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXMoXG4gICAgICAgICAgICAgICAgICAgIFwiXCIgKyBpbnRlcm5hbEluc3RhbmNlXG4gICAgICAgICAgICAgICAgICApICtcbiAgICAgICAgICAgICAgICAgICdcIl1bdHlwZT1cInJhZGlvXCJdJ1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgIGludGVybmFsSW5zdGFuY2UgPSAwO1xuICAgICAgICAgICAgICAgIGludGVybmFsSW5zdGFuY2UgPCBwcm9wcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaW50ZXJuYWxJbnN0YW5jZSsrXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhciBvdGhlck5vZGUgPSBwcm9wc1tpbnRlcm5hbEluc3RhbmNlXTtcbiAgICAgICAgICAgICAgICBpZiAob3RoZXJOb2RlICE9PSB0YXJnZXQgJiYgb3RoZXJOb2RlLmZvcm0gPT09IHRhcmdldC5mb3JtKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgb3RoZXJQcm9wcyA9IG90aGVyTm9kZVtpbnRlcm5hbFByb3BzS2V5XSB8fCBudWxsO1xuICAgICAgICAgICAgICAgICAgaWYgKCFvdGhlclByb3BzKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICBcIlJlYWN0RE9NSW5wdXQ6IE1peGluZyBSZWFjdCBhbmQgbm9uLVJlYWN0IHJhZGlvIGlucHV0cyB3aXRoIHRoZSBzYW1lIGBuYW1lYCBpcyBub3Qgc3VwcG9ydGVkLlwiXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB1cGRhdGVJbnB1dChcbiAgICAgICAgICAgICAgICAgICAgb3RoZXJOb2RlLFxuICAgICAgICAgICAgICAgICAgICBvdGhlclByb3BzLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBvdGhlclByb3BzLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgb3RoZXJQcm9wcy5kZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG90aGVyUHJvcHMuY2hlY2tlZCxcbiAgICAgICAgICAgICAgICAgICAgb3RoZXJQcm9wcy5kZWZhdWx0Q2hlY2tlZCxcbiAgICAgICAgICAgICAgICAgICAgb3RoZXJQcm9wcy50eXBlLFxuICAgICAgICAgICAgICAgICAgICBvdGhlclByb3BzLm5hbWVcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgaW50ZXJuYWxJbnN0YW5jZSA9IDA7XG4gICAgICAgICAgICAgICAgaW50ZXJuYWxJbnN0YW5jZSA8IHByb3BzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBpbnRlcm5hbEluc3RhbmNlKytcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIChvdGhlck5vZGUgPSBwcm9wc1tpbnRlcm5hbEluc3RhbmNlXSksXG4gICAgICAgICAgICAgICAgICBvdGhlck5vZGUuZm9ybSA9PT0gdGFyZ2V0LmZvcm0gJiZcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlVmFsdWVJZkNoYW5nZWQob3RoZXJOb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgY2FzZSBcInRleHRhcmVhXCI6XG4gICAgICAgICAgICB1cGRhdGVUZXh0YXJlYSh0YXJnZXQsIHByb3BzLnZhbHVlLCBwcm9wcy5kZWZhdWx0VmFsdWUpO1xuICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICBjYXNlIFwic2VsZWN0XCI6XG4gICAgICAgICAgICAoaW50ZXJuYWxJbnN0YW5jZSA9IHByb3BzLnZhbHVlKSxcbiAgICAgICAgICAgICAgbnVsbCAhPSBpbnRlcm5hbEluc3RhbmNlICYmXG4gICAgICAgICAgICAgICAgdXBkYXRlT3B0aW9ucyh0YXJnZXQsICEhcHJvcHMubXVsdGlwbGUsIGludGVybmFsSW5zdGFuY2UsICExKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBiYXRjaGVkVXBkYXRlcyQxKGZuLCBhLCBiKSB7XG4gICAgICBpZiAoaXNJbnNpZGVFdmVudEhhbmRsZXIpIHJldHVybiBmbihhLCBiKTtcbiAgICAgIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gITA7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gZm4oYSk7XG4gICAgICAgIHJldHVybiBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQ7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKChpc0luc2lkZUV2ZW50SGFuZGxlciA9ICExKSxcbiAgICAgICAgICBudWxsICE9PSByZXN0b3JlVGFyZ2V0IHx8IG51bGwgIT09IHJlc3RvcmVRdWV1ZSlcbiAgICAgICAgKVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChmbHVzaFN5bmNXb3JrJDEoKSxcbiAgICAgICAgICAgIHJlc3RvcmVUYXJnZXQgJiZcbiAgICAgICAgICAgICAgKChhID0gcmVzdG9yZVRhcmdldCksXG4gICAgICAgICAgICAgIChmbiA9IHJlc3RvcmVRdWV1ZSksXG4gICAgICAgICAgICAgIChyZXN0b3JlUXVldWUgPSByZXN0b3JlVGFyZ2V0ID0gbnVsbCksXG4gICAgICAgICAgICAgIHJlc3RvcmVTdGF0ZU9mVGFyZ2V0KGEpLFxuICAgICAgICAgICAgICBmbikpXG4gICAgICAgICAgKVxuICAgICAgICAgICAgZm9yIChhID0gMDsgYSA8IGZuLmxlbmd0aDsgYSsrKSByZXN0b3JlU3RhdGVPZlRhcmdldChmblthXSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldExpc3RlbmVyKGluc3QsIHJlZ2lzdHJhdGlvbk5hbWUpIHtcbiAgICAgIHZhciBzdGF0ZU5vZGUgPSBpbnN0LnN0YXRlTm9kZTtcbiAgICAgIGlmIChudWxsID09PSBzdGF0ZU5vZGUpIHJldHVybiBudWxsO1xuICAgICAgdmFyIHByb3BzID0gc3RhdGVOb2RlW2ludGVybmFsUHJvcHNLZXldIHx8IG51bGw7XG4gICAgICBpZiAobnVsbCA9PT0gcHJvcHMpIHJldHVybiBudWxsO1xuICAgICAgc3RhdGVOb2RlID0gcHJvcHNbcmVnaXN0cmF0aW9uTmFtZV07XG4gICAgICBhOiBzd2l0Y2ggKHJlZ2lzdHJhdGlvbk5hbWUpIHtcbiAgICAgICAgY2FzZSBcIm9uQ2xpY2tcIjpcbiAgICAgICAgY2FzZSBcIm9uQ2xpY2tDYXB0dXJlXCI6XG4gICAgICAgIGNhc2UgXCJvbkRvdWJsZUNsaWNrXCI6XG4gICAgICAgIGNhc2UgXCJvbkRvdWJsZUNsaWNrQ2FwdHVyZVwiOlxuICAgICAgICBjYXNlIFwib25Nb3VzZURvd25cIjpcbiAgICAgICAgY2FzZSBcIm9uTW91c2VEb3duQ2FwdHVyZVwiOlxuICAgICAgICBjYXNlIFwib25Nb3VzZU1vdmVcIjpcbiAgICAgICAgY2FzZSBcIm9uTW91c2VNb3ZlQ2FwdHVyZVwiOlxuICAgICAgICBjYXNlIFwib25Nb3VzZVVwXCI6XG4gICAgICAgIGNhc2UgXCJvbk1vdXNlVXBDYXB0dXJlXCI6XG4gICAgICAgIGNhc2UgXCJvbk1vdXNlRW50ZXJcIjpcbiAgICAgICAgICAocHJvcHMgPSAhcHJvcHMuZGlzYWJsZWQpIHx8XG4gICAgICAgICAgICAoKGluc3QgPSBpbnN0LnR5cGUpLFxuICAgICAgICAgICAgKHByb3BzID0gIShcbiAgICAgICAgICAgICAgXCJidXR0b25cIiA9PT0gaW5zdCB8fFxuICAgICAgICAgICAgICBcImlucHV0XCIgPT09IGluc3QgfHxcbiAgICAgICAgICAgICAgXCJzZWxlY3RcIiA9PT0gaW5zdCB8fFxuICAgICAgICAgICAgICBcInRleHRhcmVhXCIgPT09IGluc3RcbiAgICAgICAgICAgICkpKTtcbiAgICAgICAgICBpbnN0ID0gIXByb3BzO1xuICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaW5zdCA9ICExO1xuICAgICAgfVxuICAgICAgaWYgKGluc3QpIHJldHVybiBudWxsO1xuICAgICAgaWYgKHN0YXRlTm9kZSAmJiBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBzdGF0ZU5vZGUpXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiRXhwZWN0ZWQgYFwiICtcbiAgICAgICAgICAgIHJlZ2lzdHJhdGlvbk5hbWUgK1xuICAgICAgICAgICAgXCJgIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24sIGluc3RlYWQgZ290IGEgdmFsdWUgb2YgYFwiICtcbiAgICAgICAgICAgIHR5cGVvZiBzdGF0ZU5vZGUgK1xuICAgICAgICAgICAgXCJgIHR5cGUuXCJcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiBzdGF0ZU5vZGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldERhdGEoKSB7XG4gICAgICBpZiAoZmFsbGJhY2tUZXh0KSByZXR1cm4gZmFsbGJhY2tUZXh0O1xuICAgICAgdmFyIHN0YXJ0LFxuICAgICAgICBzdGFydFZhbHVlID0gc3RhcnRUZXh0LFxuICAgICAgICBzdGFydExlbmd0aCA9IHN0YXJ0VmFsdWUubGVuZ3RoLFxuICAgICAgICBlbmQsXG4gICAgICAgIGVuZFZhbHVlID0gXCJ2YWx1ZVwiIGluIHJvb3QgPyByb290LnZhbHVlIDogcm9vdC50ZXh0Q29udGVudCxcbiAgICAgICAgZW5kTGVuZ3RoID0gZW5kVmFsdWUubGVuZ3RoO1xuICAgICAgZm9yIChcbiAgICAgICAgc3RhcnQgPSAwO1xuICAgICAgICBzdGFydCA8IHN0YXJ0TGVuZ3RoICYmIHN0YXJ0VmFsdWVbc3RhcnRdID09PSBlbmRWYWx1ZVtzdGFydF07XG4gICAgICAgIHN0YXJ0KytcbiAgICAgICk7XG4gICAgICB2YXIgbWluRW5kID0gc3RhcnRMZW5ndGggLSBzdGFydDtcbiAgICAgIGZvciAoXG4gICAgICAgIGVuZCA9IDE7XG4gICAgICAgIGVuZCA8PSBtaW5FbmQgJiZcbiAgICAgICAgc3RhcnRWYWx1ZVtzdGFydExlbmd0aCAtIGVuZF0gPT09IGVuZFZhbHVlW2VuZExlbmd0aCAtIGVuZF07XG4gICAgICAgIGVuZCsrXG4gICAgICApO1xuICAgICAgcmV0dXJuIChmYWxsYmFja1RleHQgPSBlbmRWYWx1ZS5zbGljZShzdGFydCwgMSA8IGVuZCA/IDEgLSBlbmQgOiB2b2lkIDApKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCkge1xuICAgICAgdmFyIGtleUNvZGUgPSBuYXRpdmVFdmVudC5rZXlDb2RlO1xuICAgICAgXCJjaGFyQ29kZVwiIGluIG5hdGl2ZUV2ZW50XG4gICAgICAgID8gKChuYXRpdmVFdmVudCA9IG5hdGl2ZUV2ZW50LmNoYXJDb2RlKSxcbiAgICAgICAgICAwID09PSBuYXRpdmVFdmVudCAmJiAxMyA9PT0ga2V5Q29kZSAmJiAobmF0aXZlRXZlbnQgPSAxMykpXG4gICAgICAgIDogKG5hdGl2ZUV2ZW50ID0ga2V5Q29kZSk7XG4gICAgICAxMCA9PT0gbmF0aXZlRXZlbnQgJiYgKG5hdGl2ZUV2ZW50ID0gMTMpO1xuICAgICAgcmV0dXJuIDMyIDw9IG5hdGl2ZUV2ZW50IHx8IDEzID09PSBuYXRpdmVFdmVudCA/IG5hdGl2ZUV2ZW50IDogMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZnVuY3Rpb25UaGF0UmV0dXJuc1RydWUoKSB7XG4gICAgICByZXR1cm4gITA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZSgpIHtcbiAgICAgIHJldHVybiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlU3ludGhldGljRXZlbnQoSW50ZXJmYWNlKSB7XG4gICAgICBmdW5jdGlvbiBTeW50aGV0aWNCYXNlRXZlbnQoXG4gICAgICAgIHJlYWN0TmFtZSxcbiAgICAgICAgcmVhY3RFdmVudFR5cGUsXG4gICAgICAgIHRhcmdldEluc3QsXG4gICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuX3JlYWN0TmFtZSA9IHJlYWN0TmFtZTtcbiAgICAgICAgdGhpcy5fdGFyZ2V0SW5zdCA9IHRhcmdldEluc3Q7XG4gICAgICAgIHRoaXMudHlwZSA9IHJlYWN0RXZlbnRUeXBlO1xuICAgICAgICB0aGlzLm5hdGl2ZUV2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gbmF0aXZlRXZlbnRUYXJnZXQ7XG4gICAgICAgIHRoaXMuY3VycmVudFRhcmdldCA9IG51bGw7XG4gICAgICAgIGZvciAodmFyIHByb3BOYW1lIGluIEludGVyZmFjZSlcbiAgICAgICAgICBJbnRlcmZhY2UuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpICYmXG4gICAgICAgICAgICAoKHJlYWN0TmFtZSA9IEludGVyZmFjZVtwcm9wTmFtZV0pLFxuICAgICAgICAgICAgKHRoaXNbcHJvcE5hbWVdID0gcmVhY3ROYW1lXG4gICAgICAgICAgICAgID8gcmVhY3ROYW1lKG5hdGl2ZUV2ZW50KVxuICAgICAgICAgICAgICA6IG5hdGl2ZUV2ZW50W3Byb3BOYW1lXSkpO1xuICAgICAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IChcbiAgICAgICAgICBudWxsICE9IG5hdGl2ZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWRcbiAgICAgICAgICAgID8gbmF0aXZlRXZlbnQuZGVmYXVsdFByZXZlbnRlZFxuICAgICAgICAgICAgOiAhMSA9PT0gbmF0aXZlRXZlbnQucmV0dXJuVmFsdWVcbiAgICAgICAgKVxuICAgICAgICAgID8gZnVuY3Rpb25UaGF0UmV0dXJuc1RydWVcbiAgICAgICAgICA6IGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZTtcbiAgICAgICAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICBhc3NpZ24oU3ludGhldGljQmFzZUV2ZW50LnByb3RvdHlwZSwge1xuICAgICAgICBwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9ICEwO1xuICAgICAgICAgIHZhciBldmVudCA9IHRoaXMubmF0aXZlRXZlbnQ7XG4gICAgICAgICAgZXZlbnQgJiZcbiAgICAgICAgICAgIChldmVudC5wcmV2ZW50RGVmYXVsdFxuICAgICAgICAgICAgICA/IGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgOiBcInVua25vd25cIiAhPT0gdHlwZW9mIGV2ZW50LnJldHVyblZhbHVlICYmXG4gICAgICAgICAgICAgICAgKGV2ZW50LnJldHVyblZhbHVlID0gITEpLFxuICAgICAgICAgICAgKHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gZnVuY3Rpb25UaGF0UmV0dXJuc1RydWUpKTtcbiAgICAgICAgfSxcbiAgICAgICAgc3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5uYXRpdmVFdmVudDtcbiAgICAgICAgICBldmVudCAmJlxuICAgICAgICAgICAgKGV2ZW50LnN0b3BQcm9wYWdhdGlvblxuICAgICAgICAgICAgICA/IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgIDogXCJ1bmtub3duXCIgIT09IHR5cGVvZiBldmVudC5jYW5jZWxCdWJibGUgJiZcbiAgICAgICAgICAgICAgICAoZXZlbnQuY2FuY2VsQnViYmxlID0gITApLFxuICAgICAgICAgICAgKHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZSkpO1xuICAgICAgICB9LFxuICAgICAgICBwZXJzaXN0OiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgICAgaXNQZXJzaXN0ZW50OiBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gU3ludGhldGljQmFzZUV2ZW50O1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb2RpZmllclN0YXRlR2V0dGVyKGtleUFyZykge1xuICAgICAgdmFyIG5hdGl2ZUV2ZW50ID0gdGhpcy5uYXRpdmVFdmVudDtcbiAgICAgIHJldHVybiBuYXRpdmVFdmVudC5nZXRNb2RpZmllclN0YXRlXG4gICAgICAgID8gbmF0aXZlRXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZShrZXlBcmcpXG4gICAgICAgIDogKGtleUFyZyA9IG1vZGlmaWVyS2V5VG9Qcm9wW2tleUFyZ10pXG4gICAgICAgICAgPyAhIW5hdGl2ZUV2ZW50W2tleUFyZ11cbiAgICAgICAgICA6ICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRFdmVudE1vZGlmaWVyU3RhdGUoKSB7XG4gICAgICByZXR1cm4gbW9kaWZpZXJTdGF0ZUdldHRlcjtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNGYWxsYmFja0NvbXBvc2l0aW9uRW5kKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgICAgIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgICAgIGNhc2UgXCJrZXl1cFwiOlxuICAgICAgICAgIHJldHVybiAtMSAhPT0gRU5EX0tFWUNPREVTLmluZGV4T2YobmF0aXZlRXZlbnQua2V5Q29kZSk7XG4gICAgICAgIGNhc2UgXCJrZXlkb3duXCI6XG4gICAgICAgICAgcmV0dXJuIG5hdGl2ZUV2ZW50LmtleUNvZGUgIT09IFNUQVJUX0tFWUNPREU7XG4gICAgICAgIGNhc2UgXCJrZXlwcmVzc1wiOlxuICAgICAgICBjYXNlIFwibW91c2Vkb3duXCI6XG4gICAgICAgIGNhc2UgXCJmb2N1c291dFwiOlxuICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gITE7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldERhdGFGcm9tQ3VzdG9tRXZlbnQobmF0aXZlRXZlbnQpIHtcbiAgICAgIG5hdGl2ZUV2ZW50ID0gbmF0aXZlRXZlbnQuZGV0YWlsO1xuICAgICAgcmV0dXJuIFwib2JqZWN0XCIgPT09IHR5cGVvZiBuYXRpdmVFdmVudCAmJiBcImRhdGFcIiBpbiBuYXRpdmVFdmVudFxuICAgICAgICA/IG5hdGl2ZUV2ZW50LmRhdGFcbiAgICAgICAgOiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXROYXRpdmVCZWZvcmVJbnB1dENoYXJzKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgICAgIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgICAgIGNhc2UgXCJjb21wb3NpdGlvbmVuZFwiOlxuICAgICAgICAgIHJldHVybiBnZXREYXRhRnJvbUN1c3RvbUV2ZW50KG5hdGl2ZUV2ZW50KTtcbiAgICAgICAgY2FzZSBcImtleXByZXNzXCI6XG4gICAgICAgICAgaWYgKG5hdGl2ZUV2ZW50LndoaWNoICE9PSBTUEFDRUJBUl9DT0RFKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICBoYXNTcGFjZUtleXByZXNzID0gITA7XG4gICAgICAgICAgcmV0dXJuIFNQQUNFQkFSX0NIQVI7XG4gICAgICAgIGNhc2UgXCJ0ZXh0SW5wdXRcIjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGRvbUV2ZW50TmFtZSA9IG5hdGl2ZUV2ZW50LmRhdGEpLFxuICAgICAgICAgICAgZG9tRXZlbnROYW1lID09PSBTUEFDRUJBUl9DSEFSICYmIGhhc1NwYWNlS2V5cHJlc3NcbiAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgIDogZG9tRXZlbnROYW1lXG4gICAgICAgICAgKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0RmFsbGJhY2tCZWZvcmVJbnB1dENoYXJzKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgICAgIGlmIChpc0NvbXBvc2luZylcbiAgICAgICAgcmV0dXJuIFwiY29tcG9zaXRpb25lbmRcIiA9PT0gZG9tRXZlbnROYW1lIHx8XG4gICAgICAgICAgKCFjYW5Vc2VDb21wb3NpdGlvbkV2ZW50ICYmXG4gICAgICAgICAgICBpc0ZhbGxiYWNrQ29tcG9zaXRpb25FbmQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkpXG4gICAgICAgICAgPyAoKGRvbUV2ZW50TmFtZSA9IGdldERhdGEoKSksXG4gICAgICAgICAgICAoZmFsbGJhY2tUZXh0ID0gc3RhcnRUZXh0ID0gcm9vdCA9IG51bGwpLFxuICAgICAgICAgICAgKGlzQ29tcG9zaW5nID0gITEpLFxuICAgICAgICAgICAgZG9tRXZlbnROYW1lKVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgICAgIGNhc2UgXCJwYXN0ZVwiOlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjYXNlIFwia2V5cHJlc3NcIjpcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhKFxuICAgICAgICAgICAgICBuYXRpdmVFdmVudC5jdHJsS2V5IHx8XG4gICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LmFsdEtleSB8fFxuICAgICAgICAgICAgICBuYXRpdmVFdmVudC5tZXRhS2V5XG4gICAgICAgICAgICApIHx8XG4gICAgICAgICAgICAobmF0aXZlRXZlbnQuY3RybEtleSAmJiBuYXRpdmVFdmVudC5hbHRLZXkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAobmF0aXZlRXZlbnQuY2hhciAmJiAxIDwgbmF0aXZlRXZlbnQuY2hhci5sZW5ndGgpXG4gICAgICAgICAgICAgIHJldHVybiBuYXRpdmVFdmVudC5jaGFyO1xuICAgICAgICAgICAgaWYgKG5hdGl2ZUV2ZW50LndoaWNoKVxuICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShuYXRpdmVFdmVudC53aGljaCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjYXNlIFwiY29tcG9zaXRpb25lbmRcIjpcbiAgICAgICAgICByZXR1cm4gdXNlRmFsbGJhY2tDb21wb3NpdGlvbkRhdGEgJiYgXCJrb1wiICE9PSBuYXRpdmVFdmVudC5sb2NhbGVcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiBuYXRpdmVFdmVudC5kYXRhO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpc1RleHRJbnB1dEVsZW1lbnQoZWxlbSkge1xuICAgICAgdmFyIG5vZGVOYW1lID0gZWxlbSAmJiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiBcImlucHV0XCIgPT09IG5vZGVOYW1lXG4gICAgICAgID8gISFzdXBwb3J0ZWRJbnB1dFR5cGVzW2VsZW0udHlwZV1cbiAgICAgICAgOiBcInRleHRhcmVhXCIgPT09IG5vZGVOYW1lXG4gICAgICAgICAgPyAhMFxuICAgICAgICAgIDogITE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzRXZlbnRTdXBwb3J0ZWQoZXZlbnROYW1lU3VmZml4KSB7XG4gICAgICBpZiAoIWNhblVzZURPTSkgcmV0dXJuICExO1xuICAgICAgZXZlbnROYW1lU3VmZml4ID0gXCJvblwiICsgZXZlbnROYW1lU3VmZml4O1xuICAgICAgdmFyIGlzU3VwcG9ydGVkID0gZXZlbnROYW1lU3VmZml4IGluIGRvY3VtZW50O1xuICAgICAgaXNTdXBwb3J0ZWQgfHxcbiAgICAgICAgKChpc1N1cHBvcnRlZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLFxuICAgICAgICBpc1N1cHBvcnRlZC5zZXRBdHRyaWJ1dGUoZXZlbnROYW1lU3VmZml4LCBcInJldHVybjtcIiksXG4gICAgICAgIChpc1N1cHBvcnRlZCA9IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGlzU3VwcG9ydGVkW2V2ZW50TmFtZVN1ZmZpeF0pKTtcbiAgICAgIHJldHVybiBpc1N1cHBvcnRlZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQW5kQWNjdW11bGF0ZUNoYW5nZUV2ZW50KFxuICAgICAgZGlzcGF0Y2hRdWV1ZSxcbiAgICAgIGluc3QsXG4gICAgICBuYXRpdmVFdmVudCxcbiAgICAgIHRhcmdldFxuICAgICkge1xuICAgICAgcmVzdG9yZVRhcmdldFxuICAgICAgICA/IHJlc3RvcmVRdWV1ZVxuICAgICAgICAgID8gcmVzdG9yZVF1ZXVlLnB1c2godGFyZ2V0KVxuICAgICAgICAgIDogKHJlc3RvcmVRdWV1ZSA9IFt0YXJnZXRdKVxuICAgICAgICA6IChyZXN0b3JlVGFyZ2V0ID0gdGFyZ2V0KTtcbiAgICAgIGluc3QgPSBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnMoaW5zdCwgXCJvbkNoYW5nZVwiKTtcbiAgICAgIDAgPCBpbnN0Lmxlbmd0aCAmJlxuICAgICAgICAoKG5hdGl2ZUV2ZW50ID0gbmV3IFN5bnRoZXRpY0V2ZW50KFxuICAgICAgICAgIFwib25DaGFuZ2VcIixcbiAgICAgICAgICBcImNoYW5nZVwiLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgdGFyZ2V0XG4gICAgICAgICkpLFxuICAgICAgICBkaXNwYXRjaFF1ZXVlLnB1c2goeyBldmVudDogbmF0aXZlRXZlbnQsIGxpc3RlbmVyczogaW5zdCB9KSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJ1bkV2ZW50SW5CYXRjaChkaXNwYXRjaFF1ZXVlKSB7XG4gICAgICBwcm9jZXNzRGlzcGF0Y2hRdWV1ZShkaXNwYXRjaFF1ZXVlLCAwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKHRhcmdldEluc3QpIHtcbiAgICAgIHZhciB0YXJnZXROb2RlID0gZ2V0Tm9kZUZyb21JbnN0YW5jZSh0YXJnZXRJbnN0KTtcbiAgICAgIGlmICh1cGRhdGVWYWx1ZUlmQ2hhbmdlZCh0YXJnZXROb2RlKSkgcmV0dXJuIHRhcmdldEluc3Q7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JDaGFuZ2VFdmVudChkb21FdmVudE5hbWUsIHRhcmdldEluc3QpIHtcbiAgICAgIGlmIChcImNoYW5nZVwiID09PSBkb21FdmVudE5hbWUpIHJldHVybiB0YXJnZXRJbnN0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpIHtcbiAgICAgIGFjdGl2ZUVsZW1lbnQkMSAmJlxuICAgICAgICAoYWN0aXZlRWxlbWVudCQxLmRldGFjaEV2ZW50KFwib25wcm9wZXJ0eWNoYW5nZVwiLCBoYW5kbGVQcm9wZXJ0eUNoYW5nZSksXG4gICAgICAgIChhY3RpdmVFbGVtZW50SW5zdCQxID0gYWN0aXZlRWxlbWVudCQxID0gbnVsbCkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVQcm9wZXJ0eUNoYW5nZShuYXRpdmVFdmVudCkge1xuICAgICAgaWYgKFxuICAgICAgICBcInZhbHVlXCIgPT09IG5hdGl2ZUV2ZW50LnByb3BlcnR5TmFtZSAmJlxuICAgICAgICBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQoYWN0aXZlRWxlbWVudEluc3QkMSlcbiAgICAgICkge1xuICAgICAgICB2YXIgZGlzcGF0Y2hRdWV1ZSA9IFtdO1xuICAgICAgICBjcmVhdGVBbmRBY2N1bXVsYXRlQ2hhbmdlRXZlbnQoXG4gICAgICAgICAgZGlzcGF0Y2hRdWV1ZSxcbiAgICAgICAgICBhY3RpdmVFbGVtZW50SW5zdCQxLFxuICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgIGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KVxuICAgICAgICApO1xuICAgICAgICBiYXRjaGVkVXBkYXRlcyQxKHJ1bkV2ZW50SW5CYXRjaCwgZGlzcGF0Y2hRdWV1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZUV2ZW50c0ZvcklucHV0RXZlbnRQb2x5ZmlsbChcbiAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgIHRhcmdldCxcbiAgICAgIHRhcmdldEluc3RcbiAgICApIHtcbiAgICAgIFwiZm9jdXNpblwiID09PSBkb21FdmVudE5hbWVcbiAgICAgICAgPyAoc3RvcFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UoKSxcbiAgICAgICAgICAoYWN0aXZlRWxlbWVudCQxID0gdGFyZ2V0KSxcbiAgICAgICAgICAoYWN0aXZlRWxlbWVudEluc3QkMSA9IHRhcmdldEluc3QpLFxuICAgICAgICAgIGFjdGl2ZUVsZW1lbnQkMS5hdHRhY2hFdmVudChcIm9ucHJvcGVydHljaGFuZ2VcIiwgaGFuZGxlUHJvcGVydHlDaGFuZ2UpKVxuICAgICAgICA6IFwiZm9jdXNvdXRcIiA9PT0gZG9tRXZlbnROYW1lICYmIHN0b3BXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JJbnB1dEV2ZW50UG9seWZpbGwoZG9tRXZlbnROYW1lKSB7XG4gICAgICBpZiAoXG4gICAgICAgIFwic2VsZWN0aW9uY2hhbmdlXCIgPT09IGRvbUV2ZW50TmFtZSB8fFxuICAgICAgICBcImtleXVwXCIgPT09IGRvbUV2ZW50TmFtZSB8fFxuICAgICAgICBcImtleWRvd25cIiA9PT0gZG9tRXZlbnROYW1lXG4gICAgICApXG4gICAgICAgIHJldHVybiBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQoYWN0aXZlRWxlbWVudEluc3QkMSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JDbGlja0V2ZW50KGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCkge1xuICAgICAgaWYgKFwiY2xpY2tcIiA9PT0gZG9tRXZlbnROYW1lKSByZXR1cm4gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKHRhcmdldEluc3QpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRPckNoYW5nZUV2ZW50KGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCkge1xuICAgICAgaWYgKFwiaW5wdXRcIiA9PT0gZG9tRXZlbnROYW1lIHx8IFwiY2hhbmdlXCIgPT09IGRvbUV2ZW50TmFtZSlcbiAgICAgICAgcmV0dXJuIGdldEluc3RJZlZhbHVlQ2hhbmdlZCh0YXJnZXRJbnN0KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAgICAgcmV0dXJuICh4ID09PSB5ICYmICgwICE9PSB4IHx8IDEgLyB4ID09PSAxIC8geSkpIHx8ICh4ICE9PSB4ICYmIHkgIT09IHkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzaGFsbG93RXF1YWwob2JqQSwgb2JqQikge1xuICAgICAgaWYgKG9iamVjdElzKG9iakEsIG9iakIpKSByZXR1cm4gITA7XG4gICAgICBpZiAoXG4gICAgICAgIFwib2JqZWN0XCIgIT09IHR5cGVvZiBvYmpBIHx8XG4gICAgICAgIG51bGwgPT09IG9iakEgfHxcbiAgICAgICAgXCJvYmplY3RcIiAhPT0gdHlwZW9mIG9iakIgfHxcbiAgICAgICAgbnVsbCA9PT0gb2JqQlxuICAgICAgKVxuICAgICAgICByZXR1cm4gITE7XG4gICAgICB2YXIga2V5c0EgPSBPYmplY3Qua2V5cyhvYmpBKSxcbiAgICAgICAga2V5c0IgPSBPYmplY3Qua2V5cyhvYmpCKTtcbiAgICAgIGlmIChrZXlzQS5sZW5ndGggIT09IGtleXNCLmxlbmd0aCkgcmV0dXJuICExO1xuICAgICAgZm9yIChrZXlzQiA9IDA7IGtleXNCIDwga2V5c0EubGVuZ3RoOyBrZXlzQisrKSB7XG4gICAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5c0Fba2V5c0JdO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWhhc093blByb3BlcnR5LmNhbGwob2JqQiwgY3VycmVudEtleSkgfHxcbiAgICAgICAgICAhb2JqZWN0SXMob2JqQVtjdXJyZW50S2V5XSwgb2JqQltjdXJyZW50S2V5XSlcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0TGVhZk5vZGUobm9kZSkge1xuICAgICAgZm9yICg7IG5vZGUgJiYgbm9kZS5maXJzdENoaWxkOyApIG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQ7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldChyb290LCBvZmZzZXQpIHtcbiAgICAgIHZhciBub2RlID0gZ2V0TGVhZk5vZGUocm9vdCk7XG4gICAgICByb290ID0gMDtcbiAgICAgIGZvciAodmFyIG5vZGVFbmQ7IG5vZGU7ICkge1xuICAgICAgICBpZiAoMyA9PT0gbm9kZS5ub2RlVHlwZSkge1xuICAgICAgICAgIG5vZGVFbmQgPSByb290ICsgbm9kZS50ZXh0Q29udGVudC5sZW5ndGg7XG4gICAgICAgICAgaWYgKHJvb3QgPD0gb2Zmc2V0ICYmIG5vZGVFbmQgPj0gb2Zmc2V0KVxuICAgICAgICAgICAgcmV0dXJuIHsgbm9kZTogbm9kZSwgb2Zmc2V0OiBvZmZzZXQgLSByb290IH07XG4gICAgICAgICAgcm9vdCA9IG5vZGVFbmQ7XG4gICAgICAgIH1cbiAgICAgICAgYToge1xuICAgICAgICAgIGZvciAoOyBub2RlOyApIHtcbiAgICAgICAgICAgIGlmIChub2RlLm5leHRTaWJsaW5nKSB7XG4gICAgICAgICAgICAgIG5vZGUgPSBub2RlLm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbm9kZSA9IHZvaWQgMDtcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gZ2V0TGVhZk5vZGUobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbnRhaW5zTm9kZShvdXRlck5vZGUsIGlubmVyTm9kZSkge1xuICAgICAgcmV0dXJuIG91dGVyTm9kZSAmJiBpbm5lck5vZGVcbiAgICAgICAgPyBvdXRlck5vZGUgPT09IGlubmVyTm9kZVxuICAgICAgICAgID8gITBcbiAgICAgICAgICA6IG91dGVyTm9kZSAmJiAzID09PSBvdXRlck5vZGUubm9kZVR5cGVcbiAgICAgICAgICAgID8gITFcbiAgICAgICAgICAgIDogaW5uZXJOb2RlICYmIDMgPT09IGlubmVyTm9kZS5ub2RlVHlwZVxuICAgICAgICAgICAgICA/IGNvbnRhaW5zTm9kZShvdXRlck5vZGUsIGlubmVyTm9kZS5wYXJlbnROb2RlKVxuICAgICAgICAgICAgICA6IFwiY29udGFpbnNcIiBpbiBvdXRlck5vZGVcbiAgICAgICAgICAgICAgICA/IG91dGVyTm9kZS5jb250YWlucyhpbm5lck5vZGUpXG4gICAgICAgICAgICAgICAgOiBvdXRlck5vZGUuY29tcGFyZURvY3VtZW50UG9zaXRpb25cbiAgICAgICAgICAgICAgICAgID8gISEob3V0ZXJOb2RlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGlubmVyTm9kZSkgJiAxNilcbiAgICAgICAgICAgICAgICAgIDogITFcbiAgICAgICAgOiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0QWN0aXZlRWxlbWVudERlZXAoY29udGFpbmVySW5mbykge1xuICAgICAgY29udGFpbmVySW5mbyA9XG4gICAgICAgIG51bGwgIT0gY29udGFpbmVySW5mbyAmJlxuICAgICAgICBudWxsICE9IGNvbnRhaW5lckluZm8ub3duZXJEb2N1bWVudCAmJlxuICAgICAgICBudWxsICE9IGNvbnRhaW5lckluZm8ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld1xuICAgICAgICAgID8gY29udGFpbmVySW5mby5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3XG4gICAgICAgICAgOiB3aW5kb3c7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgZWxlbWVudCA9IGdldEFjdGl2ZUVsZW1lbnQoY29udGFpbmVySW5mby5kb2N1bWVudCk7XG4gICAgICAgIGVsZW1lbnQgaW5zdGFuY2VvZiBjb250YWluZXJJbmZvLkhUTUxJRnJhbWVFbGVtZW50O1xuXG4gICAgICApIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YXIgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID1cbiAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBlbGVtZW50LmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gITE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCkgY29udGFpbmVySW5mbyA9IGVsZW1lbnQuY29udGVudFdpbmRvdztcbiAgICAgICAgZWxzZSBicmVhaztcbiAgICAgICAgZWxlbWVudCA9IGdldEFjdGl2ZUVsZW1lbnQoY29udGFpbmVySW5mby5kb2N1bWVudCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gICAgZnVuY3Rpb24gaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKGVsZW0pIHtcbiAgICAgIHZhciBub2RlTmFtZSA9IGVsZW0gJiYgZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBub2RlTmFtZSAmJlxuICAgICAgICAoKFwiaW5wdXRcIiA9PT0gbm9kZU5hbWUgJiZcbiAgICAgICAgICAoXCJ0ZXh0XCIgPT09IGVsZW0udHlwZSB8fFxuICAgICAgICAgICAgXCJzZWFyY2hcIiA9PT0gZWxlbS50eXBlIHx8XG4gICAgICAgICAgICBcInRlbFwiID09PSBlbGVtLnR5cGUgfHxcbiAgICAgICAgICAgIFwidXJsXCIgPT09IGVsZW0udHlwZSB8fFxuICAgICAgICAgICAgXCJwYXNzd29yZFwiID09PSBlbGVtLnR5cGUpKSB8fFxuICAgICAgICAgIFwidGV4dGFyZWFcIiA9PT0gbm9kZU5hbWUgfHxcbiAgICAgICAgICBcInRydWVcIiA9PT0gZWxlbS5jb250ZW50RWRpdGFibGUpXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb25zdHJ1Y3RTZWxlY3RFdmVudChcbiAgICAgIGRpc3BhdGNoUXVldWUsXG4gICAgICBuYXRpdmVFdmVudCxcbiAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgKSB7XG4gICAgICB2YXIgZG9jID1cbiAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXQud2luZG93ID09PSBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICAgID8gbmF0aXZlRXZlbnRUYXJnZXQuZG9jdW1lbnRcbiAgICAgICAgICA6IDkgPT09IG5hdGl2ZUV2ZW50VGFyZ2V0Lm5vZGVUeXBlXG4gICAgICAgICAgICA/IG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICAgICA6IG5hdGl2ZUV2ZW50VGFyZ2V0Lm93bmVyRG9jdW1lbnQ7XG4gICAgICBtb3VzZURvd24gfHxcbiAgICAgICAgbnVsbCA9PSBhY3RpdmVFbGVtZW50IHx8XG4gICAgICAgIGFjdGl2ZUVsZW1lbnQgIT09IGdldEFjdGl2ZUVsZW1lbnQoZG9jKSB8fFxuICAgICAgICAoKGRvYyA9IGFjdGl2ZUVsZW1lbnQpLFxuICAgICAgICBcInNlbGVjdGlvblN0YXJ0XCIgaW4gZG9jICYmIGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhkb2MpXG4gICAgICAgICAgPyAoZG9jID0geyBzdGFydDogZG9jLnNlbGVjdGlvblN0YXJ0LCBlbmQ6IGRvYy5zZWxlY3Rpb25FbmQgfSlcbiAgICAgICAgICA6ICgoZG9jID0gKFxuICAgICAgICAgICAgICAoZG9jLm93bmVyRG9jdW1lbnQgJiYgZG9jLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcpIHx8XG4gICAgICAgICAgICAgIHdpbmRvd1xuICAgICAgICAgICAgKS5nZXRTZWxlY3Rpb24oKSksXG4gICAgICAgICAgICAoZG9jID0ge1xuICAgICAgICAgICAgICBhbmNob3JOb2RlOiBkb2MuYW5jaG9yTm9kZSxcbiAgICAgICAgICAgICAgYW5jaG9yT2Zmc2V0OiBkb2MuYW5jaG9yT2Zmc2V0LFxuICAgICAgICAgICAgICBmb2N1c05vZGU6IGRvYy5mb2N1c05vZGUsXG4gICAgICAgICAgICAgIGZvY3VzT2Zmc2V0OiBkb2MuZm9jdXNPZmZzZXRcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgKGxhc3RTZWxlY3Rpb24gJiYgc2hhbGxvd0VxdWFsKGxhc3RTZWxlY3Rpb24sIGRvYykpIHx8XG4gICAgICAgICAgKChsYXN0U2VsZWN0aW9uID0gZG9jKSxcbiAgICAgICAgICAoZG9jID0gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKGFjdGl2ZUVsZW1lbnRJbnN0LCBcIm9uU2VsZWN0XCIpKSxcbiAgICAgICAgICAwIDwgZG9jLmxlbmd0aCAmJlxuICAgICAgICAgICAgKChuYXRpdmVFdmVudCA9IG5ldyBTeW50aGV0aWNFdmVudChcbiAgICAgICAgICAgICAgXCJvblNlbGVjdFwiLFxuICAgICAgICAgICAgICBcInNlbGVjdFwiLFxuICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHsgZXZlbnQ6IG5hdGl2ZUV2ZW50LCBsaXN0ZW5lcnM6IGRvYyB9KSxcbiAgICAgICAgICAgIChuYXRpdmVFdmVudC50YXJnZXQgPSBhY3RpdmVFbGVtZW50KSkpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFrZVByZWZpeE1hcChzdHlsZVByb3AsIGV2ZW50TmFtZSkge1xuICAgICAgdmFyIHByZWZpeGVzID0ge307XG4gICAgICBwcmVmaXhlc1tzdHlsZVByb3AudG9Mb3dlckNhc2UoKV0gPSBldmVudE5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIHByZWZpeGVzW1wiV2Via2l0XCIgKyBzdHlsZVByb3BdID0gXCJ3ZWJraXRcIiArIGV2ZW50TmFtZTtcbiAgICAgIHByZWZpeGVzW1wiTW96XCIgKyBzdHlsZVByb3BdID0gXCJtb3pcIiArIGV2ZW50TmFtZTtcbiAgICAgIHJldHVybiBwcmVmaXhlcztcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoZXZlbnROYW1lKSB7XG4gICAgICBpZiAocHJlZml4ZWRFdmVudE5hbWVzW2V2ZW50TmFtZV0pIHJldHVybiBwcmVmaXhlZEV2ZW50TmFtZXNbZXZlbnROYW1lXTtcbiAgICAgIGlmICghdmVuZG9yUHJlZml4ZXNbZXZlbnROYW1lXSkgcmV0dXJuIGV2ZW50TmFtZTtcbiAgICAgIHZhciBwcmVmaXhNYXAgPSB2ZW5kb3JQcmVmaXhlc1tldmVudE5hbWVdLFxuICAgICAgICBzdHlsZVByb3A7XG4gICAgICBmb3IgKHN0eWxlUHJvcCBpbiBwcmVmaXhNYXApXG4gICAgICAgIGlmIChwcmVmaXhNYXAuaGFzT3duUHJvcGVydHkoc3R5bGVQcm9wKSAmJiBzdHlsZVByb3AgaW4gc3R5bGUpXG4gICAgICAgICAgcmV0dXJuIChwcmVmaXhlZEV2ZW50TmFtZXNbZXZlbnROYW1lXSA9IHByZWZpeE1hcFtzdHlsZVByb3BdKTtcbiAgICAgIHJldHVybiBldmVudE5hbWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlZ2lzdGVyU2ltcGxlRXZlbnQoZG9tRXZlbnROYW1lLCByZWFjdE5hbWUpIHtcbiAgICAgIHRvcExldmVsRXZlbnRzVG9SZWFjdE5hbWVzLnNldChkb21FdmVudE5hbWUsIHJlYWN0TmFtZSk7XG4gICAgICByZWdpc3RlclR3b1BoYXNlRXZlbnQocmVhY3ROYW1lLCBbZG9tRXZlbnROYW1lXSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmlzaFF1ZXVlaW5nQ29uY3VycmVudFVwZGF0ZXMoKSB7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgZW5kSW5kZXggPSBjb25jdXJyZW50UXVldWVzSW5kZXgsXG4gICAgICAgICAgaSA9IChjb25jdXJyZW50bHlVcGRhdGVkTGFuZXMgPSBjb25jdXJyZW50UXVldWVzSW5kZXggPSAwKTtcbiAgICAgICAgaSA8IGVuZEluZGV4O1xuXG4gICAgICApIHtcbiAgICAgICAgdmFyIGZpYmVyID0gY29uY3VycmVudFF1ZXVlc1tpXTtcbiAgICAgICAgY29uY3VycmVudFF1ZXVlc1tpKytdID0gbnVsbDtcbiAgICAgICAgdmFyIHF1ZXVlID0gY29uY3VycmVudFF1ZXVlc1tpXTtcbiAgICAgICAgY29uY3VycmVudFF1ZXVlc1tpKytdID0gbnVsbDtcbiAgICAgICAgdmFyIHVwZGF0ZSA9IGNvbmN1cnJlbnRRdWV1ZXNbaV07XG4gICAgICAgIGNvbmN1cnJlbnRRdWV1ZXNbaSsrXSA9IG51bGw7XG4gICAgICAgIHZhciBsYW5lID0gY29uY3VycmVudFF1ZXVlc1tpXTtcbiAgICAgICAgY29uY3VycmVudFF1ZXVlc1tpKytdID0gbnVsbDtcbiAgICAgICAgaWYgKG51bGwgIT09IHF1ZXVlICYmIG51bGwgIT09IHVwZGF0ZSkge1xuICAgICAgICAgIHZhciBwZW5kaW5nID0gcXVldWUucGVuZGluZztcbiAgICAgICAgICBudWxsID09PSBwZW5kaW5nXG4gICAgICAgICAgICA/ICh1cGRhdGUubmV4dCA9IHVwZGF0ZSlcbiAgICAgICAgICAgIDogKCh1cGRhdGUubmV4dCA9IHBlbmRpbmcubmV4dCksIChwZW5kaW5nLm5leHQgPSB1cGRhdGUpKTtcbiAgICAgICAgICBxdWV1ZS5wZW5kaW5nID0gdXBkYXRlO1xuICAgICAgICB9XG4gICAgICAgIDAgIT09IGxhbmUgJiYgbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3QoZmliZXIsIHVwZGF0ZSwgbGFuZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVucXVldWVVcGRhdGUkMShmaWJlciwgcXVldWUsIHVwZGF0ZSwgbGFuZSkge1xuICAgICAgY29uY3VycmVudFF1ZXVlc1tjb25jdXJyZW50UXVldWVzSW5kZXgrK10gPSBmaWJlcjtcbiAgICAgIGNvbmN1cnJlbnRRdWV1ZXNbY29uY3VycmVudFF1ZXVlc0luZGV4KytdID0gcXVldWU7XG4gICAgICBjb25jdXJyZW50UXVldWVzW2NvbmN1cnJlbnRRdWV1ZXNJbmRleCsrXSA9IHVwZGF0ZTtcbiAgICAgIGNvbmN1cnJlbnRRdWV1ZXNbY29uY3VycmVudFF1ZXVlc0luZGV4KytdID0gbGFuZTtcbiAgICAgIGNvbmN1cnJlbnRseVVwZGF0ZWRMYW5lcyB8PSBsYW5lO1xuICAgICAgZmliZXIubGFuZXMgfD0gbGFuZTtcbiAgICAgIGZpYmVyID0gZmliZXIuYWx0ZXJuYXRlO1xuICAgICAgbnVsbCAhPT0gZmliZXIgJiYgKGZpYmVyLmxhbmVzIHw9IGxhbmUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbnF1ZXVlQ29uY3VycmVudEhvb2tVcGRhdGUoZmliZXIsIHF1ZXVlLCB1cGRhdGUsIGxhbmUpIHtcbiAgICAgIGVucXVldWVVcGRhdGUkMShmaWJlciwgcXVldWUsIHVwZGF0ZSwgbGFuZSk7XG4gICAgICByZXR1cm4gZ2V0Um9vdEZvclVwZGF0ZWRGaWJlcihmaWJlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShmaWJlciwgbGFuZSkge1xuICAgICAgZW5xdWV1ZVVwZGF0ZSQxKGZpYmVyLCBudWxsLCBudWxsLCBsYW5lKTtcbiAgICAgIHJldHVybiBnZXRSb290Rm9yVXBkYXRlZEZpYmVyKGZpYmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3Qoc291cmNlRmliZXIsIHVwZGF0ZSwgbGFuZSkge1xuICAgICAgc291cmNlRmliZXIubGFuZXMgfD0gbGFuZTtcbiAgICAgIHZhciBhbHRlcm5hdGUgPSBzb3VyY2VGaWJlci5hbHRlcm5hdGU7XG4gICAgICBudWxsICE9PSBhbHRlcm5hdGUgJiYgKGFsdGVybmF0ZS5sYW5lcyB8PSBsYW5lKTtcbiAgICAgIGZvciAodmFyIGlzSGlkZGVuID0gITEsIHBhcmVudCA9IHNvdXJjZUZpYmVyLnJldHVybjsgbnVsbCAhPT0gcGFyZW50OyApXG4gICAgICAgIChwYXJlbnQuY2hpbGRMYW5lcyB8PSBsYW5lKSxcbiAgICAgICAgICAoYWx0ZXJuYXRlID0gcGFyZW50LmFsdGVybmF0ZSksXG4gICAgICAgICAgbnVsbCAhPT0gYWx0ZXJuYXRlICYmIChhbHRlcm5hdGUuY2hpbGRMYW5lcyB8PSBsYW5lKSxcbiAgICAgICAgICAyMiA9PT0gcGFyZW50LnRhZyAmJlxuICAgICAgICAgICAgKChzb3VyY2VGaWJlciA9IHBhcmVudC5zdGF0ZU5vZGUpLFxuICAgICAgICAgICAgbnVsbCA9PT0gc291cmNlRmliZXIgfHxcbiAgICAgICAgICAgICAgc291cmNlRmliZXIuX3Zpc2liaWxpdHkgJiBPZmZzY3JlZW5WaXNpYmxlIHx8XG4gICAgICAgICAgICAgIChpc0hpZGRlbiA9ICEwKSksXG4gICAgICAgICAgKHNvdXJjZUZpYmVyID0gcGFyZW50KSxcbiAgICAgICAgICAocGFyZW50ID0gcGFyZW50LnJldHVybik7XG4gICAgICByZXR1cm4gMyA9PT0gc291cmNlRmliZXIudGFnXG4gICAgICAgID8gKChwYXJlbnQgPSBzb3VyY2VGaWJlci5zdGF0ZU5vZGUpLFxuICAgICAgICAgIGlzSGlkZGVuICYmXG4gICAgICAgICAgICBudWxsICE9PSB1cGRhdGUgJiZcbiAgICAgICAgICAgICgoaXNIaWRkZW4gPSAzMSAtIGNsejMyKGxhbmUpKSxcbiAgICAgICAgICAgIChzb3VyY2VGaWJlciA9IHBhcmVudC5oaWRkZW5VcGRhdGVzKSxcbiAgICAgICAgICAgIChhbHRlcm5hdGUgPSBzb3VyY2VGaWJlcltpc0hpZGRlbl0pLFxuICAgICAgICAgICAgbnVsbCA9PT0gYWx0ZXJuYXRlXG4gICAgICAgICAgICAgID8gKHNvdXJjZUZpYmVyW2lzSGlkZGVuXSA9IFt1cGRhdGVdKVxuICAgICAgICAgICAgICA6IGFsdGVybmF0ZS5wdXNoKHVwZGF0ZSksXG4gICAgICAgICAgICAodXBkYXRlLmxhbmUgPSBsYW5lIHwgNTM2ODcwOTEyKSksXG4gICAgICAgICAgcGFyZW50KVxuICAgICAgICA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFJvb3RGb3JVcGRhdGVkRmliZXIoc291cmNlRmliZXIpIHtcbiAgICAgIGlmIChuZXN0ZWRVcGRhdGVDb3VudCA+IE5FU1RFRF9VUERBVEVfTElNSVQpXG4gICAgICAgIHRocm93IChcbiAgICAgICAgICAoKG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IG5lc3RlZFVwZGF0ZUNvdW50ID0gMCksXG4gICAgICAgICAgKHJvb3RXaXRoUGFzc2l2ZU5lc3RlZFVwZGF0ZXMgPSByb290V2l0aE5lc3RlZFVwZGF0ZXMgPSBudWxsKSxcbiAgICAgICAgICBFcnJvcihcbiAgICAgICAgICAgIFwiTWF4aW11bSB1cGRhdGUgZGVwdGggZXhjZWVkZWQuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgY29tcG9uZW50IHJlcGVhdGVkbHkgY2FsbHMgc2V0U3RhdGUgaW5zaWRlIGNvbXBvbmVudFdpbGxVcGRhdGUgb3IgY29tcG9uZW50RGlkVXBkYXRlLiBSZWFjdCBsaW1pdHMgdGhlIG51bWJlciBvZiBuZXN0ZWQgdXBkYXRlcyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzLlwiXG4gICAgICAgICAgKSlcbiAgICAgICAgKTtcbiAgICAgIG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA+IE5FU1RFRF9QQVNTSVZFX1VQREFURV9MSU1JVCAmJlxuICAgICAgICAoKG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IDApLFxuICAgICAgICAocm9vdFdpdGhQYXNzaXZlTmVzdGVkVXBkYXRlcyA9IG51bGwpLFxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiTWF4aW11bSB1cGRhdGUgZGVwdGggZXhjZWVkZWQuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgY29tcG9uZW50IGNhbGxzIHNldFN0YXRlIGluc2lkZSB1c2VFZmZlY3QsIGJ1dCB1c2VFZmZlY3QgZWl0aGVyIGRvZXNuJ3QgaGF2ZSBhIGRlcGVuZGVuY3kgYXJyYXksIG9yIG9uZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGNoYW5nZXMgb24gZXZlcnkgcmVuZGVyLlwiXG4gICAgICAgICkpO1xuICAgICAgbnVsbCA9PT0gc291cmNlRmliZXIuYWx0ZXJuYXRlICYmXG4gICAgICAgIDAgIT09IChzb3VyY2VGaWJlci5mbGFncyAmIDQwOTgpICYmXG4gICAgICAgIHdhcm5BYm91dFVwZGF0ZU9uTm90WWV0TW91bnRlZEZpYmVySW5ERVYoc291cmNlRmliZXIpO1xuICAgICAgZm9yICh2YXIgbm9kZSA9IHNvdXJjZUZpYmVyLCBwYXJlbnQgPSBub2RlLnJldHVybjsgbnVsbCAhPT0gcGFyZW50OyApXG4gICAgICAgIG51bGwgPT09IG5vZGUuYWx0ZXJuYXRlICYmXG4gICAgICAgICAgMCAhPT0gKG5vZGUuZmxhZ3MgJiA0MDk4KSAmJlxuICAgICAgICAgIHdhcm5BYm91dFVwZGF0ZU9uTm90WWV0TW91bnRlZEZpYmVySW5ERVYoc291cmNlRmliZXIpLFxuICAgICAgICAgIChub2RlID0gcGFyZW50KSxcbiAgICAgICAgICAocGFyZW50ID0gbm9kZS5yZXR1cm4pO1xuICAgICAgcmV0dXJuIDMgPT09IG5vZGUudGFnID8gbm9kZS5zdGF0ZU5vZGUgOiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcodHlwZSkge1xuICAgICAgaWYgKG51bGwgPT09IHJlc29sdmVGYW1pbHkpIHJldHVybiB0eXBlO1xuICAgICAgdmFyIGZhbWlseSA9IHJlc29sdmVGYW1pbHkodHlwZSk7XG4gICAgICByZXR1cm4gdm9pZCAwID09PSBmYW1pbHkgPyB0eXBlIDogZmFtaWx5LmN1cnJlbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc29sdmVGb3J3YXJkUmVmRm9ySG90UmVsb2FkaW5nKHR5cGUpIHtcbiAgICAgIGlmIChudWxsID09PSByZXNvbHZlRmFtaWx5KSByZXR1cm4gdHlwZTtcbiAgICAgIHZhciBmYW1pbHkgPSByZXNvbHZlRmFtaWx5KHR5cGUpO1xuICAgICAgcmV0dXJuIHZvaWQgMCA9PT0gZmFtaWx5XG4gICAgICAgID8gbnVsbCAhPT0gdHlwZSAmJlxuICAgICAgICAgIHZvaWQgMCAhPT0gdHlwZSAmJlxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHR5cGUucmVuZGVyICYmXG4gICAgICAgICAgKChmYW1pbHkgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcodHlwZS5yZW5kZXIpKSxcbiAgICAgICAgICB0eXBlLnJlbmRlciAhPT0gZmFtaWx5KVxuICAgICAgICAgID8gKChmYW1pbHkgPSB7ICQkdHlwZW9mOiBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFLCByZW5kZXI6IGZhbWlseSB9KSxcbiAgICAgICAgICAgIHZvaWQgMCAhPT0gdHlwZS5kaXNwbGF5TmFtZSAmJlxuICAgICAgICAgICAgICAoZmFtaWx5LmRpc3BsYXlOYW1lID0gdHlwZS5kaXNwbGF5TmFtZSksXG4gICAgICAgICAgICBmYW1pbHkpXG4gICAgICAgICAgOiB0eXBlXG4gICAgICAgIDogZmFtaWx5LmN1cnJlbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzQ29tcGF0aWJsZUZhbWlseUZvckhvdFJlbG9hZGluZyhmaWJlciwgZWxlbWVudCkge1xuICAgICAgaWYgKG51bGwgPT09IHJlc29sdmVGYW1pbHkpIHJldHVybiAhMTtcbiAgICAgIHZhciBwcmV2VHlwZSA9IGZpYmVyLmVsZW1lbnRUeXBlO1xuICAgICAgZWxlbWVudCA9IGVsZW1lbnQudHlwZTtcbiAgICAgIHZhciBuZWVkc0NvbXBhcmVGYW1pbGllcyA9ICExLFxuICAgICAgICAkJHR5cGVvZk5leHRUeXBlID1cbiAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgZWxlbWVudCAmJiBudWxsICE9PSBlbGVtZW50XG4gICAgICAgICAgICA/IGVsZW1lbnQuJCR0eXBlb2ZcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBlbGVtZW50ICYmIChuZWVkc0NvbXBhcmVGYW1pbGllcyA9ICEwKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGVsZW1lbnRcbiAgICAgICAgICAgID8gKG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gITApXG4gICAgICAgICAgICA6ICQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX0xBWllfVFlQRSAmJlxuICAgICAgICAgICAgICAobmVlZHNDb21wYXJlRmFtaWxpZXMgPSAhMCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRVxuICAgICAgICAgICAgPyAobmVlZHNDb21wYXJlRmFtaWxpZXMgPSAhMClcbiAgICAgICAgICAgIDogJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfTEFaWV9UWVBFICYmXG4gICAgICAgICAgICAgIChuZWVkc0NvbXBhcmVGYW1pbGllcyA9ICEwKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICAkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9NRU1PX1RZUEVcbiAgICAgICAgICAgID8gKG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gITApXG4gICAgICAgICAgICA6ICQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX0xBWllfVFlQRSAmJlxuICAgICAgICAgICAgICAobmVlZHNDb21wYXJlRmFtaWxpZXMgPSAhMCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuICExO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5lZWRzQ29tcGFyZUZhbWlsaWVzICYmXG4gICAgICAgICgoZmliZXIgPSByZXNvbHZlRmFtaWx5KHByZXZUeXBlKSksXG4gICAgICAgIHZvaWQgMCAhPT0gZmliZXIgJiYgZmliZXIgPT09IHJlc29sdmVGYW1pbHkoZWxlbWVudCkpXG4gICAgICAgID8gITBcbiAgICAgICAgOiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya0ZhaWxlZEVycm9yQm91bmRhcnlGb3JIb3RSZWxvYWRpbmcoZmliZXIpIHtcbiAgICAgIG51bGwgIT09IHJlc29sdmVGYW1pbHkgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgV2Vha1NldCAmJlxuICAgICAgICAobnVsbCA9PT0gZmFpbGVkQm91bmRhcmllcyAmJiAoZmFpbGVkQm91bmRhcmllcyA9IG5ldyBXZWFrU2V0KCkpLFxuICAgICAgICBmYWlsZWRCb3VuZGFyaWVzLmFkZChmaWJlcikpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzY2hlZHVsZUZpYmVyc1dpdGhGYW1pbGllc1JlY3Vyc2l2ZWx5KFxuICAgICAgZmliZXIsXG4gICAgICB1cGRhdGVkRmFtaWxpZXMsXG4gICAgICBzdGFsZUZhbWlsaWVzXG4gICAgKSB7XG4gICAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlLFxuICAgICAgICBjaGlsZCA9IGZpYmVyLmNoaWxkLFxuICAgICAgICBzaWJsaW5nID0gZmliZXIuc2libGluZyxcbiAgICAgICAgdGFnID0gZmliZXIudGFnLFxuICAgICAgICB0eXBlID0gZmliZXIudHlwZSxcbiAgICAgICAgY2FuZGlkYXRlVHlwZSA9IG51bGw7XG4gICAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBjYW5kaWRhdGVUeXBlID0gdHlwZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICBjYW5kaWRhdGVUeXBlID0gdHlwZS5yZW5kZXI7XG4gICAgICB9XG4gICAgICBpZiAobnVsbCA9PT0gcmVzb2x2ZUZhbWlseSlcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJFeHBlY3RlZCByZXNvbHZlRmFtaWx5IHRvIGJlIHNldCBkdXJpbmcgaG90IHJlbG9hZC5cIik7XG4gICAgICB2YXIgbmVlZHNSZW5kZXIgPSAhMTtcbiAgICAgIHR5cGUgPSAhMTtcbiAgICAgIG51bGwgIT09IGNhbmRpZGF0ZVR5cGUgJiZcbiAgICAgICAgKChjYW5kaWRhdGVUeXBlID0gcmVzb2x2ZUZhbWlseShjYW5kaWRhdGVUeXBlKSksXG4gICAgICAgIHZvaWQgMCAhPT0gY2FuZGlkYXRlVHlwZSAmJlxuICAgICAgICAgIChzdGFsZUZhbWlsaWVzLmhhcyhjYW5kaWRhdGVUeXBlKVxuICAgICAgICAgICAgPyAodHlwZSA9ICEwKVxuICAgICAgICAgICAgOiB1cGRhdGVkRmFtaWxpZXMuaGFzKGNhbmRpZGF0ZVR5cGUpICYmXG4gICAgICAgICAgICAgICgxID09PSB0YWcgPyAodHlwZSA9ICEwKSA6IChuZWVkc1JlbmRlciA9ICEwKSkpKTtcbiAgICAgIG51bGwgIT09IGZhaWxlZEJvdW5kYXJpZXMgJiZcbiAgICAgICAgKGZhaWxlZEJvdW5kYXJpZXMuaGFzKGZpYmVyKSB8fFxuICAgICAgICAgIChudWxsICE9PSBhbHRlcm5hdGUgJiYgZmFpbGVkQm91bmRhcmllcy5oYXMoYWx0ZXJuYXRlKSkpICYmXG4gICAgICAgICh0eXBlID0gITApO1xuICAgICAgdHlwZSAmJiAoZmliZXIuX2RlYnVnTmVlZHNSZW1vdW50ID0gITApO1xuICAgICAgaWYgKHR5cGUgfHwgbmVlZHNSZW5kZXIpXG4gICAgICAgIChhbHRlcm5hdGUgPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIDIpKSxcbiAgICAgICAgICBudWxsICE9PSBhbHRlcm5hdGUgJiYgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGFsdGVybmF0ZSwgZmliZXIsIDIpO1xuICAgICAgbnVsbCA9PT0gY2hpbGQgfHxcbiAgICAgICAgdHlwZSB8fFxuICAgICAgICBzY2hlZHVsZUZpYmVyc1dpdGhGYW1pbGllc1JlY3Vyc2l2ZWx5KFxuICAgICAgICAgIGNoaWxkLFxuICAgICAgICAgIHVwZGF0ZWRGYW1pbGllcyxcbiAgICAgICAgICBzdGFsZUZhbWlsaWVzXG4gICAgICAgICk7XG4gICAgICBudWxsICE9PSBzaWJsaW5nICYmXG4gICAgICAgIHNjaGVkdWxlRmliZXJzV2l0aEZhbWlsaWVzUmVjdXJzaXZlbHkoXG4gICAgICAgICAgc2libGluZyxcbiAgICAgICAgICB1cGRhdGVkRmFtaWxpZXMsXG4gICAgICAgICAgc3RhbGVGYW1pbGllc1xuICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBGaWJlck5vZGUodGFnLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSkge1xuICAgICAgdGhpcy50YWcgPSB0YWc7XG4gICAgICB0aGlzLmtleSA9IGtleTtcbiAgICAgIHRoaXMuc2libGluZyA9XG4gICAgICAgIHRoaXMuY2hpbGQgPVxuICAgICAgICB0aGlzLnJldHVybiA9XG4gICAgICAgIHRoaXMuc3RhdGVOb2RlID1cbiAgICAgICAgdGhpcy50eXBlID1cbiAgICAgICAgdGhpcy5lbGVtZW50VHlwZSA9XG4gICAgICAgICAgbnVsbDtcbiAgICAgIHRoaXMuaW5kZXggPSAwO1xuICAgICAgdGhpcy5yZWZDbGVhbnVwID0gdGhpcy5yZWYgPSBudWxsO1xuICAgICAgdGhpcy5wZW5kaW5nUHJvcHMgPSBwZW5kaW5nUHJvcHM7XG4gICAgICB0aGlzLmRlcGVuZGVuY2llcyA9XG4gICAgICAgIHRoaXMubWVtb2l6ZWRTdGF0ZSA9XG4gICAgICAgIHRoaXMudXBkYXRlUXVldWUgPVxuICAgICAgICB0aGlzLm1lbW9pemVkUHJvcHMgPVxuICAgICAgICAgIG51bGw7XG4gICAgICB0aGlzLm1vZGUgPSBtb2RlO1xuICAgICAgdGhpcy5zdWJ0cmVlRmxhZ3MgPSB0aGlzLmZsYWdzID0gMDtcbiAgICAgIHRoaXMuZGVsZXRpb25zID0gbnVsbDtcbiAgICAgIHRoaXMuY2hpbGRMYW5lcyA9IHRoaXMubGFuZXMgPSAwO1xuICAgICAgdGhpcy5hbHRlcm5hdGUgPSBudWxsO1xuICAgICAgdGhpcy5hY3R1YWxEdXJhdGlvbiA9IC0wO1xuICAgICAgdGhpcy5hY3R1YWxTdGFydFRpbWUgPSAtMS4xO1xuICAgICAgdGhpcy50cmVlQmFzZUR1cmF0aW9uID0gdGhpcy5zZWxmQmFzZUR1cmF0aW9uID0gLTA7XG4gICAgICB0aGlzLl9kZWJ1Z1Rhc2sgPVxuICAgICAgICB0aGlzLl9kZWJ1Z1N0YWNrID1cbiAgICAgICAgdGhpcy5fZGVidWdPd25lciA9XG4gICAgICAgIHRoaXMuX2RlYnVnSW5mbyA9XG4gICAgICAgICAgbnVsbDtcbiAgICAgIHRoaXMuX2RlYnVnTmVlZHNSZW1vdW50ID0gITE7XG4gICAgICB0aGlzLl9kZWJ1Z0hvb2tUeXBlcyA9IG51bGw7XG4gICAgICBoYXNCYWRNYXBQb2x5ZmlsbCB8fFxuICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBPYmplY3QucHJldmVudEV4dGVuc2lvbnMgfHxcbiAgICAgICAgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHRoaXMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzaG91bGRDb25zdHJ1Y3QoQ29tcG9uZW50KSB7XG4gICAgICBDb21wb25lbnQgPSBDb21wb25lbnQucHJvdG90eXBlO1xuICAgICAgcmV0dXJuICEoIUNvbXBvbmVudCB8fCAhQ29tcG9uZW50LmlzUmVhY3RDb21wb25lbnQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50LCBwZW5kaW5nUHJvcHMpIHtcbiAgICAgIHZhciB3b3JrSW5Qcm9ncmVzcyA9IGN1cnJlbnQuYWx0ZXJuYXRlO1xuICAgICAgbnVsbCA9PT0gd29ya0luUHJvZ3Jlc3NcbiAgICAgICAgPyAoKHdvcmtJblByb2dyZXNzID0gY3JlYXRlRmliZXIoXG4gICAgICAgICAgICBjdXJyZW50LnRhZyxcbiAgICAgICAgICAgIHBlbmRpbmdQcm9wcyxcbiAgICAgICAgICAgIGN1cnJlbnQua2V5LFxuICAgICAgICAgICAgY3VycmVudC5tb2RlXG4gICAgICAgICAgKSksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID0gY3VycmVudC5lbGVtZW50VHlwZSksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLnR5cGUgPSBjdXJyZW50LnR5cGUpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBjdXJyZW50LnN0YXRlTm9kZSksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLl9kZWJ1Z093bmVyID0gY3VycmVudC5fZGVidWdPd25lciksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLl9kZWJ1Z1N0YWNrID0gY3VycmVudC5fZGVidWdTdGFjayksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLl9kZWJ1Z1Rhc2sgPSBjdXJyZW50Ll9kZWJ1Z1Rhc2spLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5fZGVidWdIb29rVHlwZXMgPSBjdXJyZW50Ll9kZWJ1Z0hvb2tUeXBlcyksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IGN1cnJlbnQpLFxuICAgICAgICAgIChjdXJyZW50LmFsdGVybmF0ZSA9IHdvcmtJblByb2dyZXNzKSlcbiAgICAgICAgOiAoKHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyA9IHBlbmRpbmdQcm9wcyksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLnR5cGUgPSBjdXJyZW50LnR5cGUpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IDApLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5zdWJ0cmVlRmxhZ3MgPSAwKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZGVsZXRpb25zID0gbnVsbCksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmFjdHVhbER1cmF0aW9uID0gLTApLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5hY3R1YWxTdGFydFRpbWUgPSAtMS4xKSk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IGN1cnJlbnQuZmxhZ3MgJiA2NTAxMTcxMjtcbiAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSBjdXJyZW50LmNoaWxkTGFuZXM7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IGN1cnJlbnQubGFuZXM7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQuY2hpbGQ7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTtcbiAgICAgIHBlbmRpbmdQcm9wcyA9IGN1cnJlbnQuZGVwZW5kZW5jaWVzO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID1cbiAgICAgICAgbnVsbCA9PT0gcGVuZGluZ1Byb3BzXG4gICAgICAgICAgPyBudWxsXG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIGxhbmVzOiBwZW5kaW5nUHJvcHMubGFuZXMsXG4gICAgICAgICAgICAgIGZpcnN0Q29udGV4dDogcGVuZGluZ1Byb3BzLmZpcnN0Q29udGV4dCxcbiAgICAgICAgICAgICAgX2RlYnVnVGhlbmFibGVTdGF0ZTogcGVuZGluZ1Byb3BzLl9kZWJ1Z1RoZW5hYmxlU3RhdGVcbiAgICAgICAgICAgIH07XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5zaWJsaW5nID0gY3VycmVudC5zaWJsaW5nO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuaW5kZXggPSBjdXJyZW50LmluZGV4O1xuICAgICAgd29ya0luUHJvZ3Jlc3MucmVmID0gY3VycmVudC5yZWY7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5yZWZDbGVhbnVwID0gY3VycmVudC5yZWZDbGVhbnVwO1xuICAgICAgd29ya0luUHJvZ3Jlc3Muc2VsZkJhc2VEdXJhdGlvbiA9IGN1cnJlbnQuc2VsZkJhc2VEdXJhdGlvbjtcbiAgICAgIHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gPSBjdXJyZW50LnRyZWVCYXNlRHVyYXRpb247XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdJbmZvID0gY3VycmVudC5fZGVidWdJbmZvO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnTmVlZHNSZW1vdW50ID0gY3VycmVudC5fZGVidWdOZWVkc1JlbW91bnQ7XG4gICAgICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyhjdXJyZW50LnR5cGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyhjdXJyZW50LnR5cGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSByZXNvbHZlRm9yd2FyZFJlZkZvckhvdFJlbG9hZGluZyhjdXJyZW50LnR5cGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNldFdvcmtJblByb2dyZXNzKHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gNjUwMTE3MTQ7XG4gICAgICB2YXIgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZTtcbiAgICAgIG51bGwgPT09IGN1cnJlbnRcbiAgICAgICAgPyAoKHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSAwKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubGFuZXMgPSByZW5kZXJMYW5lcyksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbCksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLnN1YnRyZWVGbGFncyA9IDApLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gbnVsbCksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBudWxsKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID0gbnVsbCksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IG51bGwpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5zZWxmQmFzZUR1cmF0aW9uID0gMCksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gPSAwKSlcbiAgICAgICAgOiAoKHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSBjdXJyZW50LmNoaWxkTGFuZXMpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IGN1cnJlbnQubGFuZXMpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQuY2hpbGQpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5zdWJ0cmVlRmxhZ3MgPSAwKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZGVsZXRpb25zID0gbnVsbCksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHMpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudHlwZSA9IGN1cnJlbnQudHlwZSksXG4gICAgICAgICAgKHJlbmRlckxhbmVzID0gY3VycmVudC5kZXBlbmRlbmNpZXMpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXMgPVxuICAgICAgICAgICAgbnVsbCA9PT0gcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgbGFuZXM6IHJlbmRlckxhbmVzLmxhbmVzLFxuICAgICAgICAgICAgICAgICAgZmlyc3RDb250ZXh0OiByZW5kZXJMYW5lcy5maXJzdENvbnRleHQsXG4gICAgICAgICAgICAgICAgICBfZGVidWdUaGVuYWJsZVN0YXRlOiByZW5kZXJMYW5lcy5fZGVidWdUaGVuYWJsZVN0YXRlXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLnNlbGZCYXNlRHVyYXRpb24gPSBjdXJyZW50LnNlbGZCYXNlRHVyYXRpb24pLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy50cmVlQmFzZUR1cmF0aW9uID0gY3VycmVudC50cmVlQmFzZUR1cmF0aW9uKSk7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyhcbiAgICAgIHR5cGUsXG4gICAgICBrZXksXG4gICAgICBwZW5kaW5nUHJvcHMsXG4gICAgICBvd25lcixcbiAgICAgIG1vZGUsXG4gICAgICBsYW5lc1xuICAgICkge1xuICAgICAgdmFyIGZpYmVyVGFnID0gMCxcbiAgICAgICAgcmVzb2x2ZWRUeXBlID0gdHlwZTtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0eXBlKVxuICAgICAgICBzaG91bGRDb25zdHJ1Y3QodHlwZSkgJiYgKGZpYmVyVGFnID0gMSksXG4gICAgICAgICAgKHJlc29sdmVkVHlwZSA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyhyZXNvbHZlZFR5cGUpKTtcbiAgICAgIGVsc2UgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiB0eXBlKVxuICAgICAgICAoZmliZXJUYWcgPSBnZXRIb3N0Q29udGV4dCgpKSxcbiAgICAgICAgICAoZmliZXJUYWcgPSBpc0hvc3RIb2lzdGFibGVUeXBlKHR5cGUsIHBlbmRpbmdQcm9wcywgZmliZXJUYWcpXG4gICAgICAgICAgICA/IDI2XG4gICAgICAgICAgICA6IFwiaHRtbFwiID09PSB0eXBlIHx8IFwiaGVhZFwiID09PSB0eXBlIHx8IFwiYm9keVwiID09PSB0eXBlXG4gICAgICAgICAgICAgID8gMjdcbiAgICAgICAgICAgICAgOiA1KTtcbiAgICAgIGVsc2VcbiAgICAgICAgYTogc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9BQ1RJVklUWV9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKGtleSA9IGNyZWF0ZUZpYmVyKDMxLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSkpLFxuICAgICAgICAgICAgICAoa2V5LmVsZW1lbnRUeXBlID0gUkVBQ1RfQUNUSVZJVFlfVFlQRSksXG4gICAgICAgICAgICAgIChrZXkubGFuZXMgPSBsYW5lcyksXG4gICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoXG4gICAgICAgICAgICAgIHBlbmRpbmdQcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICAgICAgbW9kZSxcbiAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgICBmaWJlclRhZyA9IDg7XG4gICAgICAgICAgICBtb2RlIHw9IFN0cmljdExlZ2FjeU1vZGU7XG4gICAgICAgICAgICBtb2RlIHw9IFN0cmljdEVmZmVjdHNNb2RlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKHR5cGUgPSBwZW5kaW5nUHJvcHMpLFxuICAgICAgICAgICAgICAob3duZXIgPSBtb2RlKSxcbiAgICAgICAgICAgICAgXCJzdHJpbmdcIiAhPT0gdHlwZW9mIHR5cGUuaWQgJiZcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgJ1Byb2ZpbGVyIG11c3Qgc3BlY2lmeSBhbiBcImlkXCIgb2YgdHlwZSBgc3RyaW5nYCBhcyBhIHByb3AuIFJlY2VpdmVkIHRoZSB0eXBlIGAlc2AgaW5zdGVhZC4nLFxuICAgICAgICAgICAgICAgICAgdHlwZW9mIHR5cGUuaWRcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAoa2V5ID0gY3JlYXRlRmliZXIoMTIsIHR5cGUsIGtleSwgb3duZXIgfCBQcm9maWxlTW9kZSkpLFxuICAgICAgICAgICAgICAoa2V5LmVsZW1lbnRUeXBlID0gUkVBQ1RfUFJPRklMRVJfVFlQRSksXG4gICAgICAgICAgICAgIChrZXkubGFuZXMgPSBsYW5lcyksXG4gICAgICAgICAgICAgIChrZXkuc3RhdGVOb2RlID0geyBlZmZlY3REdXJhdGlvbjogMCwgcGFzc2l2ZUVmZmVjdER1cmF0aW9uOiAwIH0pLFxuICAgICAgICAgICAgICBrZXlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKGtleSA9IGNyZWF0ZUZpYmVyKDEzLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSkpLFxuICAgICAgICAgICAgICAoa2V5LmVsZW1lbnRUeXBlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRSksXG4gICAgICAgICAgICAgIChrZXkubGFuZXMgPSBsYW5lcyksXG4gICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChrZXkgPSBjcmVhdGVGaWJlcigxOSwgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpKSxcbiAgICAgICAgICAgICAgKGtleS5lbGVtZW50VHlwZSA9IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSksXG4gICAgICAgICAgICAgIChrZXkubGFuZXMgPSBsYW5lcyksXG4gICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiB0eXBlICYmIG51bGwgIT09IHR5cGUpXG4gICAgICAgICAgICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgICAgICAgZmliZXJUYWcgPSAxMDtcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05TVU1FUl9UWVBFOlxuICAgICAgICAgICAgICAgICAgZmliZXJUYWcgPSA5O1xuICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICAgICAgICBmaWJlclRhZyA9IDExO1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRUeXBlID0gcmVzb2x2ZUZvcndhcmRSZWZGb3JIb3RSZWxvYWRpbmcocmVzb2x2ZWRUeXBlKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgICAgICBmaWJlclRhZyA9IDE0O1xuICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gMTY7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlZFR5cGUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZWRUeXBlID0gXCJcIjtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdm9pZCAwID09PSB0eXBlIHx8XG4gICAgICAgICAgICAgIChcIm9iamVjdFwiID09PSB0eXBlb2YgdHlwZSAmJlxuICAgICAgICAgICAgICAgIG51bGwgIT09IHR5cGUgJiZcbiAgICAgICAgICAgICAgICAwID09PSBPYmplY3Qua2V5cyh0eXBlKS5sZW5ndGgpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHJlc29sdmVkVHlwZSArPVxuICAgICAgICAgICAgICAgIFwiIFlvdSBsaWtlbHkgZm9yZ290IHRvIGV4cG9ydCB5b3VyIGNvbXBvbmVudCBmcm9tIHRoZSBmaWxlIGl0J3MgZGVmaW5lZCBpbiwgb3IgeW91IG1pZ2h0IGhhdmUgbWl4ZWQgdXAgZGVmYXVsdCBhbmQgbmFtZWQgaW1wb3J0cy5cIjtcbiAgICAgICAgICAgIG51bGwgPT09IHR5cGVcbiAgICAgICAgICAgICAgPyAocGVuZGluZ1Byb3BzID0gXCJudWxsXCIpXG4gICAgICAgICAgICAgIDogaXNBcnJheUltcGwodHlwZSlcbiAgICAgICAgICAgICAgICA/IChwZW5kaW5nUHJvcHMgPSBcImFycmF5XCIpXG4gICAgICAgICAgICAgICAgOiB2b2lkIDAgIT09IHR5cGUgJiYgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFXG4gICAgICAgICAgICAgICAgICA/ICgocGVuZGluZ1Byb3BzID1cbiAgICAgICAgICAgICAgICAgICAgICBcIjxcIiArXG4gICAgICAgICAgICAgICAgICAgICAgKGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlLnR5cGUpIHx8IFwiVW5rbm93blwiKSArXG4gICAgICAgICAgICAgICAgICAgICAgXCIgLz5cIiksXG4gICAgICAgICAgICAgICAgICAgIChyZXNvbHZlZFR5cGUgPVxuICAgICAgICAgICAgICAgICAgICAgIFwiIERpZCB5b3UgYWNjaWRlbnRhbGx5IGV4cG9ydCBhIEpTWCBsaXRlcmFsIGluc3RlYWQgb2YgYSBjb21wb25lbnQ/XCIpKVxuICAgICAgICAgICAgICAgICAgOiAocGVuZGluZ1Byb3BzID0gdHlwZW9mIHR5cGUpO1xuICAgICAgICAgICAgKGZpYmVyVGFnID0gb3duZXIgPyBnZXRDb21wb25lbnROYW1lRnJvbU93bmVyKG93bmVyKSA6IG51bGwpICYmXG4gICAgICAgICAgICAgIChyZXNvbHZlZFR5cGUgKz1cbiAgICAgICAgICAgICAgICBcIlxcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGBcIiArIGZpYmVyVGFnICsgXCJgLlwiKTtcbiAgICAgICAgICAgIGZpYmVyVGFnID0gMjk7XG4gICAgICAgICAgICBwZW5kaW5nUHJvcHMgPSBFcnJvcihcbiAgICAgICAgICAgICAgXCJFbGVtZW50IHR5cGUgaXMgaW52YWxpZDogZXhwZWN0ZWQgYSBzdHJpbmcgKGZvciBidWlsdC1pbiBjb21wb25lbnRzKSBvciBhIGNsYXNzL2Z1bmN0aW9uIChmb3IgY29tcG9zaXRlIGNvbXBvbmVudHMpIGJ1dCBnb3Q6IFwiICtcbiAgICAgICAgICAgICAgICAocGVuZGluZ1Byb3BzICsgXCIuXCIgKyByZXNvbHZlZFR5cGUpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmVzb2x2ZWRUeXBlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAga2V5ID0gY3JlYXRlRmliZXIoZmliZXJUYWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTtcbiAgICAgIGtleS5lbGVtZW50VHlwZSA9IHR5cGU7XG4gICAgICBrZXkudHlwZSA9IHJlc29sdmVkVHlwZTtcbiAgICAgIGtleS5sYW5lcyA9IGxhbmVzO1xuICAgICAga2V5Ll9kZWJ1Z093bmVyID0gb3duZXI7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVGaWJlckZyb21FbGVtZW50KGVsZW1lbnQsIG1vZGUsIGxhbmVzKSB7XG4gICAgICBtb2RlID0gY3JlYXRlRmliZXJGcm9tVHlwZUFuZFByb3BzKFxuICAgICAgICBlbGVtZW50LnR5cGUsXG4gICAgICAgIGVsZW1lbnQua2V5LFxuICAgICAgICBlbGVtZW50LnByb3BzLFxuICAgICAgICBlbGVtZW50Ll9vd25lcixcbiAgICAgICAgbW9kZSxcbiAgICAgICAgbGFuZXNcbiAgICAgICk7XG4gICAgICBtb2RlLl9kZWJ1Z093bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICBtb2RlLl9kZWJ1Z1N0YWNrID0gZWxlbWVudC5fZGVidWdTdGFjaztcbiAgICAgIG1vZGUuX2RlYnVnVGFzayA9IGVsZW1lbnQuX2RlYnVnVGFzaztcbiAgICAgIHJldHVybiBtb2RlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVGaWJlckZyb21GcmFnbWVudChlbGVtZW50cywgbW9kZSwgbGFuZXMsIGtleSkge1xuICAgICAgZWxlbWVudHMgPSBjcmVhdGVGaWJlcig3LCBlbGVtZW50cywga2V5LCBtb2RlKTtcbiAgICAgIGVsZW1lbnRzLmxhbmVzID0gbGFuZXM7XG4gICAgICByZXR1cm4gZWxlbWVudHM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVRleHQoY29udGVudCwgbW9kZSwgbGFuZXMpIHtcbiAgICAgIGNvbnRlbnQgPSBjcmVhdGVGaWJlcig2LCBjb250ZW50LCBudWxsLCBtb2RlKTtcbiAgICAgIGNvbnRlbnQubGFuZXMgPSBsYW5lcztcbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVGaWJlckZyb21EZWh5ZHJhdGVkRnJhZ21lbnQoZGVoeWRyYXRlZE5vZGUpIHtcbiAgICAgIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKDE4LCBudWxsLCBudWxsLCBOb01vZGUpO1xuICAgICAgZmliZXIuc3RhdGVOb2RlID0gZGVoeWRyYXRlZE5vZGU7XG4gICAgICByZXR1cm4gZmliZXI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVBvcnRhbChwb3J0YWwsIG1vZGUsIGxhbmVzKSB7XG4gICAgICBtb2RlID0gY3JlYXRlRmliZXIoXG4gICAgICAgIDQsXG4gICAgICAgIG51bGwgIT09IHBvcnRhbC5jaGlsZHJlbiA/IHBvcnRhbC5jaGlsZHJlbiA6IFtdLFxuICAgICAgICBwb3J0YWwua2V5LFxuICAgICAgICBtb2RlXG4gICAgICApO1xuICAgICAgbW9kZS5sYW5lcyA9IGxhbmVzO1xuICAgICAgbW9kZS5zdGF0ZU5vZGUgPSB7XG4gICAgICAgIGNvbnRhaW5lckluZm86IHBvcnRhbC5jb250YWluZXJJbmZvLFxuICAgICAgICBwZW5kaW5nQ2hpbGRyZW46IG51bGwsXG4gICAgICAgIGltcGxlbWVudGF0aW9uOiBwb3J0YWwuaW1wbGVtZW50YXRpb25cbiAgICAgIH07XG4gICAgICByZXR1cm4gbW9kZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIodmFsdWUsIHNvdXJjZSkge1xuICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiB2YWx1ZSAmJiBudWxsICE9PSB2YWx1ZSkge1xuICAgICAgICB2YXIgZXhpc3RpbmcgPSBDYXB0dXJlZFN0YWNrcy5nZXQodmFsdWUpO1xuICAgICAgICBpZiAodm9pZCAwICE9PSBleGlzdGluZykgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgICBzb3VyY2UgPSB7XG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICAgIHN0YWNrOiBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2Qoc291cmNlKVxuICAgICAgICB9O1xuICAgICAgICBDYXB0dXJlZFN0YWNrcy5zZXQodmFsdWUsIHNvdXJjZSk7XG4gICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICBzdGFjazogZ2V0U3RhY2tCeUZpYmVySW5EZXZBbmRQcm9kKHNvdXJjZSlcbiAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2hUcmVlRm9yayh3b3JrSW5Qcm9ncmVzcywgdG90YWxDaGlsZHJlbikge1xuICAgICAgd2FybklmTm90SHlkcmF0aW5nKCk7XG4gICAgICBmb3JrU3RhY2tbZm9ya1N0YWNrSW5kZXgrK10gPSB0cmVlRm9ya0NvdW50O1xuICAgICAgZm9ya1N0YWNrW2ZvcmtTdGFja0luZGV4KytdID0gdHJlZUZvcmtQcm92aWRlcjtcbiAgICAgIHRyZWVGb3JrUHJvdmlkZXIgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIHRyZWVGb3JrQ291bnQgPSB0b3RhbENoaWxkcmVuO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoVHJlZUlkKHdvcmtJblByb2dyZXNzLCB0b3RhbENoaWxkcmVuLCBpbmRleCkge1xuICAgICAgd2FybklmTm90SHlkcmF0aW5nKCk7XG4gICAgICBpZFN0YWNrW2lkU3RhY2tJbmRleCsrXSA9IHRyZWVDb250ZXh0SWQ7XG4gICAgICBpZFN0YWNrW2lkU3RhY2tJbmRleCsrXSA9IHRyZWVDb250ZXh0T3ZlcmZsb3c7XG4gICAgICBpZFN0YWNrW2lkU3RhY2tJbmRleCsrXSA9IHRyZWVDb250ZXh0UHJvdmlkZXI7XG4gICAgICB0cmVlQ29udGV4dFByb3ZpZGVyID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICB2YXIgYmFzZUlkV2l0aExlYWRpbmdCaXQgPSB0cmVlQ29udGV4dElkO1xuICAgICAgd29ya0luUHJvZ3Jlc3MgPSB0cmVlQ29udGV4dE92ZXJmbG93O1xuICAgICAgdmFyIGJhc2VMZW5ndGggPSAzMiAtIGNsejMyKGJhc2VJZFdpdGhMZWFkaW5nQml0KSAtIDE7XG4gICAgICBiYXNlSWRXaXRoTGVhZGluZ0JpdCAmPSB+KDEgPDwgYmFzZUxlbmd0aCk7XG4gICAgICBpbmRleCArPSAxO1xuICAgICAgdmFyIGxlbmd0aCA9IDMyIC0gY2x6MzIodG90YWxDaGlsZHJlbikgKyBiYXNlTGVuZ3RoO1xuICAgICAgaWYgKDMwIDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBudW1iZXJPZk92ZXJmbG93Qml0cyA9IGJhc2VMZW5ndGggLSAoYmFzZUxlbmd0aCAlIDUpO1xuICAgICAgICBsZW5ndGggPSAoXG4gICAgICAgICAgYmFzZUlkV2l0aExlYWRpbmdCaXQgJlxuICAgICAgICAgICgoMSA8PCBudW1iZXJPZk92ZXJmbG93Qml0cykgLSAxKVxuICAgICAgICApLnRvU3RyaW5nKDMyKTtcbiAgICAgICAgYmFzZUlkV2l0aExlYWRpbmdCaXQgPj49IG51bWJlck9mT3ZlcmZsb3dCaXRzO1xuICAgICAgICBiYXNlTGVuZ3RoIC09IG51bWJlck9mT3ZlcmZsb3dCaXRzO1xuICAgICAgICB0cmVlQ29udGV4dElkID1cbiAgICAgICAgICAoMSA8PCAoMzIgLSBjbHozMih0b3RhbENoaWxkcmVuKSArIGJhc2VMZW5ndGgpKSB8XG4gICAgICAgICAgKGluZGV4IDw8IGJhc2VMZW5ndGgpIHxcbiAgICAgICAgICBiYXNlSWRXaXRoTGVhZGluZ0JpdDtcbiAgICAgICAgdHJlZUNvbnRleHRPdmVyZmxvdyA9IGxlbmd0aCArIHdvcmtJblByb2dyZXNzO1xuICAgICAgfSBlbHNlXG4gICAgICAgICh0cmVlQ29udGV4dElkID1cbiAgICAgICAgICAoMSA8PCBsZW5ndGgpIHwgKGluZGV4IDw8IGJhc2VMZW5ndGgpIHwgYmFzZUlkV2l0aExlYWRpbmdCaXQpLFxuICAgICAgICAgICh0cmVlQ29udGV4dE92ZXJmbG93ID0gd29ya0luUHJvZ3Jlc3MpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoTWF0ZXJpYWxpemVkVHJlZUlkKHdvcmtJblByb2dyZXNzKSB7XG4gICAgICB3YXJuSWZOb3RIeWRyYXRpbmcoKTtcbiAgICAgIG51bGwgIT09IHdvcmtJblByb2dyZXNzLnJldHVybiAmJlxuICAgICAgICAocHVzaFRyZWVGb3JrKHdvcmtJblByb2dyZXNzLCAxKSwgcHVzaFRyZWVJZCh3b3JrSW5Qcm9ncmVzcywgMSwgMCkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwb3BUcmVlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgZm9yICg7IHdvcmtJblByb2dyZXNzID09PSB0cmVlRm9ya1Byb3ZpZGVyOyApXG4gICAgICAgICh0cmVlRm9ya1Byb3ZpZGVyID0gZm9ya1N0YWNrWy0tZm9ya1N0YWNrSW5kZXhdKSxcbiAgICAgICAgICAoZm9ya1N0YWNrW2ZvcmtTdGFja0luZGV4XSA9IG51bGwpLFxuICAgICAgICAgICh0cmVlRm9ya0NvdW50ID0gZm9ya1N0YWNrWy0tZm9ya1N0YWNrSW5kZXhdKSxcbiAgICAgICAgICAoZm9ya1N0YWNrW2ZvcmtTdGFja0luZGV4XSA9IG51bGwpO1xuICAgICAgZm9yICg7IHdvcmtJblByb2dyZXNzID09PSB0cmVlQ29udGV4dFByb3ZpZGVyOyApXG4gICAgICAgICh0cmVlQ29udGV4dFByb3ZpZGVyID0gaWRTdGFja1stLWlkU3RhY2tJbmRleF0pLFxuICAgICAgICAgIChpZFN0YWNrW2lkU3RhY2tJbmRleF0gPSBudWxsKSxcbiAgICAgICAgICAodHJlZUNvbnRleHRPdmVyZmxvdyA9IGlkU3RhY2tbLS1pZFN0YWNrSW5kZXhdKSxcbiAgICAgICAgICAoaWRTdGFja1tpZFN0YWNrSW5kZXhdID0gbnVsbCksXG4gICAgICAgICAgKHRyZWVDb250ZXh0SWQgPSBpZFN0YWNrWy0taWRTdGFja0luZGV4XSksXG4gICAgICAgICAgKGlkU3RhY2tbaWRTdGFja0luZGV4XSA9IG51bGwpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRTdXNwZW5kZWRUcmVlQ29udGV4dCgpIHtcbiAgICAgIHdhcm5JZk5vdEh5ZHJhdGluZygpO1xuICAgICAgcmV0dXJuIG51bGwgIT09IHRyZWVDb250ZXh0UHJvdmlkZXJcbiAgICAgICAgPyB7IGlkOiB0cmVlQ29udGV4dElkLCBvdmVyZmxvdzogdHJlZUNvbnRleHRPdmVyZmxvdyB9XG4gICAgICAgIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzdG9yZVN1c3BlbmRlZFRyZWVDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzdXNwZW5kZWRDb250ZXh0KSB7XG4gICAgICB3YXJuSWZOb3RIeWRyYXRpbmcoKTtcbiAgICAgIGlkU3RhY2tbaWRTdGFja0luZGV4KytdID0gdHJlZUNvbnRleHRJZDtcbiAgICAgIGlkU3RhY2tbaWRTdGFja0luZGV4KytdID0gdHJlZUNvbnRleHRPdmVyZmxvdztcbiAgICAgIGlkU3RhY2tbaWRTdGFja0luZGV4KytdID0gdHJlZUNvbnRleHRQcm92aWRlcjtcbiAgICAgIHRyZWVDb250ZXh0SWQgPSBzdXNwZW5kZWRDb250ZXh0LmlkO1xuICAgICAgdHJlZUNvbnRleHRPdmVyZmxvdyA9IHN1c3BlbmRlZENvbnRleHQub3ZlcmZsb3c7XG4gICAgICB0cmVlQ29udGV4dFByb3ZpZGVyID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhcm5JZk5vdEh5ZHJhdGluZygpIHtcbiAgICAgIGlzSHlkcmF0aW5nIHx8XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJFeHBlY3RlZCB0byBiZSBoeWRyYXRpbmcuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJ1aWxkSHlkcmF0aW9uRGlmZk5vZGUoZmliZXIsIGRpc3RhbmNlRnJvbUxlYWYpIHtcbiAgICAgIGlmIChudWxsID09PSBmaWJlci5yZXR1cm4pIHtcbiAgICAgICAgaWYgKG51bGwgPT09IGh5ZHJhdGlvbkRpZmZSb290REVWKVxuICAgICAgICAgIGh5ZHJhdGlvbkRpZmZSb290REVWID0ge1xuICAgICAgICAgICAgZmliZXI6IGZpYmVyLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgc2VydmVyUHJvcHM6IHZvaWQgMCxcbiAgICAgICAgICAgIHNlcnZlclRhaWw6IFtdLFxuICAgICAgICAgICAgZGlzdGFuY2VGcm9tTGVhZjogZGlzdGFuY2VGcm9tTGVhZlxuICAgICAgICAgIH07XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmIChoeWRyYXRpb25EaWZmUm9vdERFVi5maWJlciAhPT0gZmliZXIpXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgXCJTYXcgbXVsdGlwbGUgaHlkcmF0aW9uIGRpZmYgcm9vdHMgaW4gYSBwYXNzLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGh5ZHJhdGlvbkRpZmZSb290REVWLmRpc3RhbmNlRnJvbUxlYWYgPiBkaXN0YW5jZUZyb21MZWFmICYmXG4gICAgICAgICAgICAoaHlkcmF0aW9uRGlmZlJvb3RERVYuZGlzdGFuY2VGcm9tTGVhZiA9IGRpc3RhbmNlRnJvbUxlYWYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoeWRyYXRpb25EaWZmUm9vdERFVjtcbiAgICAgIH1cbiAgICAgIHZhciBzaWJsaW5ncyA9IGJ1aWxkSHlkcmF0aW9uRGlmZk5vZGUoXG4gICAgICAgIGZpYmVyLnJldHVybixcbiAgICAgICAgZGlzdGFuY2VGcm9tTGVhZiArIDFcbiAgICAgICkuY2hpbGRyZW47XG4gICAgICBpZiAoMCA8IHNpYmxpbmdzLmxlbmd0aCAmJiBzaWJsaW5nc1tzaWJsaW5ncy5sZW5ndGggLSAxXS5maWJlciA9PT0gZmliZXIpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgKHNpYmxpbmdzID0gc2libGluZ3Nbc2libGluZ3MubGVuZ3RoIC0gMV0pLFxuICAgICAgICAgIHNpYmxpbmdzLmRpc3RhbmNlRnJvbUxlYWYgPiBkaXN0YW5jZUZyb21MZWFmICYmXG4gICAgICAgICAgICAoc2libGluZ3MuZGlzdGFuY2VGcm9tTGVhZiA9IGRpc3RhbmNlRnJvbUxlYWYpLFxuICAgICAgICAgIHNpYmxpbmdzXG4gICAgICAgICk7XG4gICAgICBkaXN0YW5jZUZyb21MZWFmID0ge1xuICAgICAgICBmaWJlcjogZmliZXIsXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgc2VydmVyUHJvcHM6IHZvaWQgMCxcbiAgICAgICAgc2VydmVyVGFpbDogW10sXG4gICAgICAgIGRpc3RhbmNlRnJvbUxlYWY6IGRpc3RhbmNlRnJvbUxlYWZcbiAgICAgIH07XG4gICAgICBzaWJsaW5ncy5wdXNoKGRpc3RhbmNlRnJvbUxlYWYpO1xuICAgICAgcmV0dXJuIGRpc3RhbmNlRnJvbUxlYWY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhcm5JZkh5ZHJhdGluZygpIHtcbiAgICAgIGlzSHlkcmF0aW5nICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJXZSBzaG91bGQgbm90IGJlIGh5ZHJhdGluZyBoZXJlLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhIGJ1Zy5cIlxuICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3YXJuTm9uSHlkcmF0ZWRJbnN0YW5jZShmaWJlciwgcmVqZWN0ZWRDYW5kaWRhdGUpIHtcbiAgICAgIGRpZFN1c3BlbmRPckVycm9yREVWIHx8XG4gICAgICAgICgoZmliZXIgPSBidWlsZEh5ZHJhdGlvbkRpZmZOb2RlKGZpYmVyLCAwKSksXG4gICAgICAgIChmaWJlci5zZXJ2ZXJQcm9wcyA9IG51bGwpLFxuICAgICAgICBudWxsICE9PSByZWplY3RlZENhbmRpZGF0ZSAmJlxuICAgICAgICAgICgocmVqZWN0ZWRDYW5kaWRhdGUgPVxuICAgICAgICAgICAgZGVzY3JpYmVIeWRyYXRhYmxlSW5zdGFuY2VGb3JEZXZXYXJuaW5ncyhyZWplY3RlZENhbmRpZGF0ZSkpLFxuICAgICAgICAgIGZpYmVyLnNlcnZlclRhaWwucHVzaChyZWplY3RlZENhbmRpZGF0ZSkpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdGhyb3dPbkh5ZHJhdGlvbk1pc21hdGNoKGZpYmVyKSB7XG4gICAgICB2YXIgZnJvbVRleHQgPVxuICAgICAgICAgIDEgPCBhcmd1bWVudHMubGVuZ3RoICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzFdID8gYXJndW1lbnRzWzFdIDogITEsXG4gICAgICAgIGRpZmYgPSBcIlwiLFxuICAgICAgICBkaWZmUm9vdCA9IGh5ZHJhdGlvbkRpZmZSb290REVWO1xuICAgICAgbnVsbCAhPT0gZGlmZlJvb3QgJiZcbiAgICAgICAgKChoeWRyYXRpb25EaWZmUm9vdERFViA9IG51bGwpLCAoZGlmZiA9IGRlc2NyaWJlRGlmZihkaWZmUm9vdCkpKTtcbiAgICAgIHF1ZXVlSHlkcmF0aW9uRXJyb3IoXG4gICAgICAgIGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKFxuICAgICAgICAgIEVycm9yKFxuICAgICAgICAgICAgXCJIeWRyYXRpb24gZmFpbGVkIGJlY2F1c2UgdGhlIHNlcnZlciByZW5kZXJlZCBcIiArXG4gICAgICAgICAgICAgIChmcm9tVGV4dCA/IFwidGV4dFwiIDogXCJIVE1MXCIpICtcbiAgICAgICAgICAgICAgXCIgZGlkbid0IG1hdGNoIHRoZSBjbGllbnQuIEFzIGEgcmVzdWx0IHRoaXMgdHJlZSB3aWxsIGJlIHJlZ2VuZXJhdGVkIG9uIHRoZSBjbGllbnQuIFRoaXMgY2FuIGhhcHBlbiBpZiBhIFNTUi1lZCBDbGllbnQgQ29tcG9uZW50IHVzZWQ6XFxuXFxuLSBBIHNlcnZlci9jbGllbnQgYnJhbmNoIGBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpYC5cXG4tIFZhcmlhYmxlIGlucHV0IHN1Y2ggYXMgYERhdGUubm93KClgIG9yIGBNYXRoLnJhbmRvbSgpYCB3aGljaCBjaGFuZ2VzIGVhY2ggdGltZSBpdCdzIGNhbGxlZC5cXG4tIERhdGUgZm9ybWF0dGluZyBpbiBhIHVzZXIncyBsb2NhbGUgd2hpY2ggZG9lc24ndCBtYXRjaCB0aGUgc2VydmVyLlxcbi0gRXh0ZXJuYWwgY2hhbmdpbmcgZGF0YSB3aXRob3V0IHNlbmRpbmcgYSBzbmFwc2hvdCBvZiBpdCBhbG9uZyB3aXRoIHRoZSBIVE1MLlxcbi0gSW52YWxpZCBIVE1MIHRhZyBuZXN0aW5nLlxcblxcbkl0IGNhbiBhbHNvIGhhcHBlbiBpZiB0aGUgY2xpZW50IGhhcyBhIGJyb3dzZXIgZXh0ZW5zaW9uIGluc3RhbGxlZCB3aGljaCBtZXNzZXMgd2l0aCB0aGUgSFRNTCBiZWZvcmUgUmVhY3QgbG9hZGVkLlxcblxcbmh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvaHlkcmF0aW9uLW1pc21hdGNoXCIgK1xuICAgICAgICAgICAgICBkaWZmXG4gICAgICAgICAgKSxcbiAgICAgICAgICBmaWJlclxuICAgICAgICApXG4gICAgICApO1xuICAgICAgdGhyb3cgSHlkcmF0aW9uTWlzbWF0Y2hFeGNlcHRpb247XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByZXBhcmVUb0h5ZHJhdGVIb3N0SW5zdGFuY2UoZmliZXIpIHtcbiAgICAgIHZhciBkaWRIeWRyYXRlID0gZmliZXIuc3RhdGVOb2RlO1xuICAgICAgdmFyIHR5cGUgPSBmaWJlci50eXBlLFxuICAgICAgICBwcm9wcyA9IGZpYmVyLm1lbW9pemVkUHJvcHM7XG4gICAgICBkaWRIeWRyYXRlW2ludGVybmFsSW5zdGFuY2VLZXldID0gZmliZXI7XG4gICAgICBkaWRIeWRyYXRlW2ludGVybmFsUHJvcHNLZXldID0gcHJvcHM7XG4gICAgICB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50KHR5cGUsIHByb3BzKTtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFwiZGlhbG9nXCI6XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImNhbmNlbFwiLCBkaWRIeWRyYXRlKTtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwiY2xvc2VcIiwgZGlkSHlkcmF0ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJpZnJhbWVcIjpcbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICBjYXNlIFwiZW1iZWRcIjpcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwibG9hZFwiLCBkaWRIeWRyYXRlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInZpZGVvXCI6XG4gICAgICAgIGNhc2UgXCJhdWRpb1wiOlxuICAgICAgICAgIGZvciAodHlwZSA9IDA7IHR5cGUgPCBtZWRpYUV2ZW50VHlwZXMubGVuZ3RoOyB0eXBlKyspXG4gICAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KG1lZGlhRXZlbnRUeXBlc1t0eXBlXSwgZGlkSHlkcmF0ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJzb3VyY2VcIjpcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwiZXJyb3JcIiwgZGlkSHlkcmF0ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJpbWdcIjpcbiAgICAgICAgY2FzZSBcImltYWdlXCI6XG4gICAgICAgIGNhc2UgXCJsaW5rXCI6XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImVycm9yXCIsIGRpZEh5ZHJhdGUpO1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJsb2FkXCIsIGRpZEh5ZHJhdGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiZGV0YWlsc1wiOlxuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJ0b2dnbGVcIiwgZGlkSHlkcmF0ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJpbnB1dFwiOlxuICAgICAgICAgIGNoZWNrQ29udHJvbGxlZFZhbHVlUHJvcHMoXCJpbnB1dFwiLCBwcm9wcyk7XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImludmFsaWRcIiwgZGlkSHlkcmF0ZSk7XG4gICAgICAgICAgdmFsaWRhdGVJbnB1dFByb3BzKGRpZEh5ZHJhdGUsIHByb3BzKTtcbiAgICAgICAgICBpbml0SW5wdXQoXG4gICAgICAgICAgICBkaWRIeWRyYXRlLFxuICAgICAgICAgICAgcHJvcHMudmFsdWUsXG4gICAgICAgICAgICBwcm9wcy5kZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICBwcm9wcy5jaGVja2VkLFxuICAgICAgICAgICAgcHJvcHMuZGVmYXVsdENoZWNrZWQsXG4gICAgICAgICAgICBwcm9wcy50eXBlLFxuICAgICAgICAgICAgcHJvcHMubmFtZSxcbiAgICAgICAgICAgICEwXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm9wdGlvblwiOlxuICAgICAgICAgIHZhbGlkYXRlT3B0aW9uUHJvcHMoZGlkSHlkcmF0ZSwgcHJvcHMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwic2VsZWN0XCI6XG4gICAgICAgICAgY2hlY2tDb250cm9sbGVkVmFsdWVQcm9wcyhcInNlbGVjdFwiLCBwcm9wcyk7XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImludmFsaWRcIiwgZGlkSHlkcmF0ZSk7XG4gICAgICAgICAgdmFsaWRhdGVTZWxlY3RQcm9wcyhkaWRIeWRyYXRlLCBwcm9wcyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ0ZXh0YXJlYVwiOlxuICAgICAgICAgIGNoZWNrQ29udHJvbGxlZFZhbHVlUHJvcHMoXCJ0ZXh0YXJlYVwiLCBwcm9wcyksXG4gICAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwiaW52YWxpZFwiLCBkaWRIeWRyYXRlKSxcbiAgICAgICAgICAgIHZhbGlkYXRlVGV4dGFyZWFQcm9wcyhkaWRIeWRyYXRlLCBwcm9wcyksXG4gICAgICAgICAgICBpbml0VGV4dGFyZWEoXG4gICAgICAgICAgICAgIGRpZEh5ZHJhdGUsXG4gICAgICAgICAgICAgIHByb3BzLnZhbHVlLFxuICAgICAgICAgICAgICBwcm9wcy5kZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICAgIHByb3BzLmNoaWxkcmVuXG4gICAgICAgICAgICApO1xuICAgICAgfVxuICAgICAgdHlwZSA9IHByb3BzLmNoaWxkcmVuO1xuICAgICAgKFwic3RyaW5nXCIgIT09IHR5cGVvZiB0eXBlICYmXG4gICAgICAgIFwibnVtYmVyXCIgIT09IHR5cGVvZiB0eXBlICYmXG4gICAgICAgIFwiYmlnaW50XCIgIT09IHR5cGVvZiB0eXBlKSB8fFxuICAgICAgZGlkSHlkcmF0ZS50ZXh0Q29udGVudCA9PT0gXCJcIiArIHR5cGUgfHxcbiAgICAgICEwID09PSBwcm9wcy5zdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcgfHxcbiAgICAgIGNoZWNrRm9yVW5tYXRjaGVkVGV4dChkaWRIeWRyYXRlLnRleHRDb250ZW50LCB0eXBlKVxuICAgICAgICA/IChudWxsICE9IHByb3BzLnBvcG92ZXIgJiZcbiAgICAgICAgICAgIChsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwiYmVmb3JldG9nZ2xlXCIsIGRpZEh5ZHJhdGUpLFxuICAgICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcInRvZ2dsZVwiLCBkaWRIeWRyYXRlKSksXG4gICAgICAgICAgbnVsbCAhPSBwcm9wcy5vblNjcm9sbCAmJlxuICAgICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcInNjcm9sbFwiLCBkaWRIeWRyYXRlKSxcbiAgICAgICAgICBudWxsICE9IHByb3BzLm9uU2Nyb2xsRW5kICYmXG4gICAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwic2Nyb2xsZW5kXCIsIGRpZEh5ZHJhdGUpLFxuICAgICAgICAgIG51bGwgIT0gcHJvcHMub25DbGljayAmJiAoZGlkSHlkcmF0ZS5vbmNsaWNrID0gbm9vcCQxKSxcbiAgICAgICAgICAoZGlkSHlkcmF0ZSA9ICEwKSlcbiAgICAgICAgOiAoZGlkSHlkcmF0ZSA9ICExKTtcbiAgICAgIGRpZEh5ZHJhdGUgfHwgdGhyb3dPbkh5ZHJhdGlvbk1pc21hdGNoKGZpYmVyLCAhMCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcFRvTmV4dEhvc3RQYXJlbnQoZmliZXIpIHtcbiAgICAgIGZvciAoaHlkcmF0aW9uUGFyZW50RmliZXIgPSBmaWJlci5yZXR1cm47IGh5ZHJhdGlvblBhcmVudEZpYmVyOyApXG4gICAgICAgIHN3aXRjaCAoaHlkcmF0aW9uUGFyZW50RmliZXIudGFnKSB7XG4gICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIGNhc2UgMzE6XG4gICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgIHJvb3RPclNpbmdsZXRvbkNvbnRleHQgPSAhMTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJvb3RPclNpbmdsZXRvbkNvbnRleHQgPSAhMDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBoeWRyYXRpb25QYXJlbnRGaWJlci5yZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcG9wSHlkcmF0aW9uU3RhdGUoZmliZXIpIHtcbiAgICAgIGlmIChmaWJlciAhPT0gaHlkcmF0aW9uUGFyZW50RmliZXIpIHJldHVybiAhMTtcbiAgICAgIGlmICghaXNIeWRyYXRpbmcpXG4gICAgICAgIHJldHVybiBwb3BUb05leHRIb3N0UGFyZW50KGZpYmVyKSwgKGlzSHlkcmF0aW5nID0gITApLCAhMTtcbiAgICAgIHZhciB0YWcgPSBmaWJlci50YWcsXG4gICAgICAgIEpTQ29tcGlsZXJfdGVtcDtcbiAgICAgIGlmICgoSlNDb21waWxlcl90ZW1wID0gMyAhPT0gdGFnICYmIDI3ICE9PSB0YWcpKSB7XG4gICAgICAgIGlmICgoSlNDb21waWxlcl90ZW1wID0gNSA9PT0gdGFnKSlcbiAgICAgICAgICAoSlNDb21waWxlcl90ZW1wID0gZmliZXIudHlwZSksXG4gICAgICAgICAgICAoSlNDb21waWxlcl90ZW1wID1cbiAgICAgICAgICAgICAgIShcImZvcm1cIiAhPT0gSlNDb21waWxlcl90ZW1wICYmIFwiYnV0dG9uXCIgIT09IEpTQ29tcGlsZXJfdGVtcCkgfHxcbiAgICAgICAgICAgICAgc2hvdWxkU2V0VGV4dENvbnRlbnQoZmliZXIudHlwZSwgZmliZXIubWVtb2l6ZWRQcm9wcykpO1xuICAgICAgICBKU0NvbXBpbGVyX3RlbXAgPSAhSlNDb21waWxlcl90ZW1wO1xuICAgICAgfVxuICAgICAgaWYgKEpTQ29tcGlsZXJfdGVtcCAmJiBuZXh0SHlkcmF0YWJsZUluc3RhbmNlKSB7XG4gICAgICAgIGZvciAoSlNDb21waWxlcl90ZW1wID0gbmV4dEh5ZHJhdGFibGVJbnN0YW5jZTsgSlNDb21waWxlcl90ZW1wOyApIHtcbiAgICAgICAgICB2YXIgZGlmZk5vZGUgPSBidWlsZEh5ZHJhdGlvbkRpZmZOb2RlKGZpYmVyLCAwKSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uID1cbiAgICAgICAgICAgICAgZGVzY3JpYmVIeWRyYXRhYmxlSW5zdGFuY2VGb3JEZXZXYXJuaW5ncyhKU0NvbXBpbGVyX3RlbXApO1xuICAgICAgICAgIGRpZmZOb2RlLnNlcnZlclRhaWwucHVzaChkZXNjcmlwdGlvbik7XG4gICAgICAgICAgSlNDb21waWxlcl90ZW1wID1cbiAgICAgICAgICAgIFwiU3VzcGVuc2VcIiA9PT0gZGVzY3JpcHRpb24udHlwZVxuICAgICAgICAgICAgICA/IGdldE5leHRIeWRyYXRhYmxlSW5zdGFuY2VBZnRlckh5ZHJhdGlvbkJvdW5kYXJ5KEpTQ29tcGlsZXJfdGVtcClcbiAgICAgICAgICAgICAgOiBnZXROZXh0SHlkcmF0YWJsZShKU0NvbXBpbGVyX3RlbXAubmV4dFNpYmxpbmcpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93T25IeWRyYXRpb25NaXNtYXRjaChmaWJlcik7XG4gICAgICB9XG4gICAgICBwb3BUb05leHRIb3N0UGFyZW50KGZpYmVyKTtcbiAgICAgIGlmICgxMyA9PT0gdGFnKSB7XG4gICAgICAgIGZpYmVyID0gZmliZXIubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgZmliZXIgPSBudWxsICE9PSBmaWJlciA/IGZpYmVyLmRlaHlkcmF0ZWQgOiBudWxsO1xuICAgICAgICBpZiAoIWZpYmVyKVxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJFeHBlY3RlZCB0byBoYXZlIGEgaHlkcmF0ZWQgc3VzcGVuc2UgaW5zdGFuY2UuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICApO1xuICAgICAgICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID1cbiAgICAgICAgICBnZXROZXh0SHlkcmF0YWJsZUluc3RhbmNlQWZ0ZXJIeWRyYXRpb25Cb3VuZGFyeShmaWJlcik7XG4gICAgICB9IGVsc2UgaWYgKDMxID09PSB0YWcpIHtcbiAgICAgICAgZmliZXIgPSBmaWJlci5tZW1vaXplZFN0YXRlO1xuICAgICAgICBmaWJlciA9IG51bGwgIT09IGZpYmVyID8gZmliZXIuZGVoeWRyYXRlZCA6IG51bGw7XG4gICAgICAgIGlmICghZmliZXIpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcIkV4cGVjdGVkIHRvIGhhdmUgYSBoeWRyYXRlZCBzdXNwZW5zZSBpbnN0YW5jZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICk7XG4gICAgICAgIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPVxuICAgICAgICAgIGdldE5leHRIeWRyYXRhYmxlSW5zdGFuY2VBZnRlckh5ZHJhdGlvbkJvdW5kYXJ5KGZpYmVyKTtcbiAgICAgIH0gZWxzZVxuICAgICAgICAyNyA9PT0gdGFnXG4gICAgICAgICAgPyAoKHRhZyA9IG5leHRIeWRyYXRhYmxlSW5zdGFuY2UpLFxuICAgICAgICAgICAgaXNTaW5nbGV0b25TY29wZShmaWJlci50eXBlKVxuICAgICAgICAgICAgICA/ICgoZmliZXIgPSBwcmV2aW91c0h5ZHJhdGFibGVPbkVudGVyaW5nU2NvcGVkU2luZ2xldG9uKSxcbiAgICAgICAgICAgICAgICAocHJldmlvdXNIeWRyYXRhYmxlT25FbnRlcmluZ1Njb3BlZFNpbmdsZXRvbiA9IG51bGwpLFxuICAgICAgICAgICAgICAgIChuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gZmliZXIpKVxuICAgICAgICAgICAgICA6IChuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gdGFnKSlcbiAgICAgICAgICA6IChuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gaHlkcmF0aW9uUGFyZW50RmliZXJcbiAgICAgICAgICAgICAgPyBnZXROZXh0SHlkcmF0YWJsZShmaWJlci5zdGF0ZU5vZGUubmV4dFNpYmxpbmcpXG4gICAgICAgICAgICAgIDogbnVsbCk7XG4gICAgICByZXR1cm4gITA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc2V0SHlkcmF0aW9uU3RhdGUoKSB7XG4gICAgICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gaHlkcmF0aW9uUGFyZW50RmliZXIgPSBudWxsO1xuICAgICAgZGlkU3VzcGVuZE9yRXJyb3JERVYgPSBpc0h5ZHJhdGluZyA9ICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGdyYWRlSHlkcmF0aW9uRXJyb3JzVG9SZWNvdmVyYWJsZSgpIHtcbiAgICAgIHZhciBxdWV1ZWRFcnJvcnMgPSBoeWRyYXRpb25FcnJvcnM7XG4gICAgICBudWxsICE9PSBxdWV1ZWRFcnJvcnMgJiZcbiAgICAgICAgKG51bGwgPT09IHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzXG4gICAgICAgICAgPyAod29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMgPSBxdWV1ZWRFcnJvcnMpXG4gICAgICAgICAgOiB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycy5wdXNoLmFwcGx5KFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyxcbiAgICAgICAgICAgICAgcXVldWVkRXJyb3JzXG4gICAgICAgICAgICApLFxuICAgICAgICAoaHlkcmF0aW9uRXJyb3JzID0gbnVsbCkpO1xuICAgICAgcmV0dXJuIHF1ZXVlZEVycm9ycztcbiAgICB9XG4gICAgZnVuY3Rpb24gcXVldWVIeWRyYXRpb25FcnJvcihlcnJvcikge1xuICAgICAgbnVsbCA9PT0gaHlkcmF0aW9uRXJyb3JzXG4gICAgICAgID8gKGh5ZHJhdGlvbkVycm9ycyA9IFtlcnJvcl0pXG4gICAgICAgIDogaHlkcmF0aW9uRXJyb3JzLnB1c2goZXJyb3IpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbWl0UGVuZGluZ0h5ZHJhdGlvbldhcm5pbmdzKCkge1xuICAgICAgdmFyIGRpZmZSb290ID0gaHlkcmF0aW9uRGlmZlJvb3RERVY7XG4gICAgICBpZiAobnVsbCAhPT0gZGlmZlJvb3QpIHtcbiAgICAgICAgaHlkcmF0aW9uRGlmZlJvb3RERVYgPSBudWxsO1xuICAgICAgICBmb3IgKHZhciBkaWZmID0gZGVzY3JpYmVEaWZmKGRpZmZSb290KTsgMCA8IGRpZmZSb290LmNoaWxkcmVuLmxlbmd0aDsgKVxuICAgICAgICAgIGRpZmZSb290ID0gZGlmZlJvb3QuY2hpbGRyZW5bMF07XG4gICAgICAgIHJ1bldpdGhGaWJlckluREVWKGRpZmZSb290LmZpYmVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiQSB0cmVlIGh5ZHJhdGVkIGJ1dCBzb21lIGF0dHJpYnV0ZXMgb2YgdGhlIHNlcnZlciByZW5kZXJlZCBIVE1MIGRpZG4ndCBtYXRjaCB0aGUgY2xpZW50IHByb3BlcnRpZXMuIFRoaXMgd29uJ3QgYmUgcGF0Y2hlZCB1cC4gVGhpcyBjYW4gaGFwcGVuIGlmIGEgU1NSLWVkIENsaWVudCBDb21wb25lbnQgdXNlZDpcXG5cXG4tIEEgc2VydmVyL2NsaWVudCBicmFuY2ggYGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJylgLlxcbi0gVmFyaWFibGUgaW5wdXQgc3VjaCBhcyBgRGF0ZS5ub3coKWAgb3IgYE1hdGgucmFuZG9tKClgIHdoaWNoIGNoYW5nZXMgZWFjaCB0aW1lIGl0J3MgY2FsbGVkLlxcbi0gRGF0ZSBmb3JtYXR0aW5nIGluIGEgdXNlcidzIGxvY2FsZSB3aGljaCBkb2Vzbid0IG1hdGNoIHRoZSBzZXJ2ZXIuXFxuLSBFeHRlcm5hbCBjaGFuZ2luZyBkYXRhIHdpdGhvdXQgc2VuZGluZyBhIHNuYXBzaG90IG9mIGl0IGFsb25nIHdpdGggdGhlIEhUTUwuXFxuLSBJbnZhbGlkIEhUTUwgdGFnIG5lc3RpbmcuXFxuXFxuSXQgY2FuIGFsc28gaGFwcGVuIGlmIHRoZSBjbGllbnQgaGFzIGEgYnJvd3NlciBleHRlbnNpb24gaW5zdGFsbGVkIHdoaWNoIG1lc3NlcyB3aXRoIHRoZSBIVE1MIGJlZm9yZSBSZWFjdCBsb2FkZWQuXFxuXFxuJXMlc1wiLFxuICAgICAgICAgICAgXCJodHRwczovL3JlYWN0LmRldi9saW5rL2h5ZHJhdGlvbi1taXNtYXRjaFwiLFxuICAgICAgICAgICAgZGlmZlxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKSB7XG4gICAgICBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxID0gbnVsbDtcbiAgICAgIGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYgPSAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHVzaFByb3ZpZGVyKHByb3ZpZGVyRmliZXIsIGNvbnRleHQsIG5leHRWYWx1ZSkge1xuICAgICAgcHVzaCh2YWx1ZUN1cnNvciwgY29udGV4dC5fY3VycmVudFZhbHVlLCBwcm92aWRlckZpYmVyKTtcbiAgICAgIGNvbnRleHQuX2N1cnJlbnRWYWx1ZSA9IG5leHRWYWx1ZTtcbiAgICAgIHB1c2gocmVuZGVyZXJDdXJzb3JERVYsIGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciwgcHJvdmlkZXJGaWJlcik7XG4gICAgICB2b2lkIDAgIT09IGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciAmJlxuICAgICAgICBudWxsICE9PSBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgJiZcbiAgICAgICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyICE9PSByZW5kZXJlclNpZ2lsICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJEZXRlY3RlZCBtdWx0aXBsZSByZW5kZXJlcnMgY29uY3VycmVudGx5IHJlbmRlcmluZyB0aGUgc2FtZSBjb250ZXh0IHByb3ZpZGVyLiBUaGlzIGlzIGN1cnJlbnRseSB1bnN1cHBvcnRlZC5cIlxuICAgICAgICApO1xuICAgICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyID0gcmVuZGVyZXJTaWdpbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcG9wUHJvdmlkZXIoY29udGV4dCwgcHJvdmlkZXJGaWJlcikge1xuICAgICAgY29udGV4dC5fY3VycmVudFZhbHVlID0gdmFsdWVDdXJzb3IuY3VycmVudDtcbiAgICAgIHZhciBjdXJyZW50UmVuZGVyZXIgPSByZW5kZXJlckN1cnNvckRFVi5jdXJyZW50O1xuICAgICAgcG9wKHJlbmRlcmVyQ3Vyc29yREVWLCBwcm92aWRlckZpYmVyKTtcbiAgICAgIGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciA9IGN1cnJlbnRSZW5kZXJlcjtcbiAgICAgIHBvcCh2YWx1ZUN1cnNvciwgcHJvdmlkZXJGaWJlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNjaGVkdWxlQ29udGV4dFdvcmtPblBhcmVudFBhdGgoXG4gICAgICBwYXJlbnQsXG4gICAgICByZW5kZXJMYW5lcyxcbiAgICAgIHByb3BhZ2F0aW9uUm9vdFxuICAgICkge1xuICAgICAgZm9yICg7IG51bGwgIT09IHBhcmVudDsgKSB7XG4gICAgICAgIHZhciBhbHRlcm5hdGUgPSBwYXJlbnQuYWx0ZXJuYXRlO1xuICAgICAgICAocGFyZW50LmNoaWxkTGFuZXMgJiByZW5kZXJMYW5lcykgIT09IHJlbmRlckxhbmVzXG4gICAgICAgICAgPyAoKHBhcmVudC5jaGlsZExhbmVzIHw9IHJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgIG51bGwgIT09IGFsdGVybmF0ZSAmJiAoYWx0ZXJuYXRlLmNoaWxkTGFuZXMgfD0gcmVuZGVyTGFuZXMpKVxuICAgICAgICAgIDogbnVsbCAhPT0gYWx0ZXJuYXRlICYmXG4gICAgICAgICAgICAoYWx0ZXJuYXRlLmNoaWxkTGFuZXMgJiByZW5kZXJMYW5lcykgIT09IHJlbmRlckxhbmVzICYmXG4gICAgICAgICAgICAoYWx0ZXJuYXRlLmNoaWxkTGFuZXMgfD0gcmVuZGVyTGFuZXMpO1xuICAgICAgICBpZiAocGFyZW50ID09PSBwcm9wYWdhdGlvblJvb3QpIGJyZWFrO1xuICAgICAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICAgICAgfVxuICAgICAgcGFyZW50ICE9PSBwcm9wYWdhdGlvblJvb3QgJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkV4cGVjdGVkIHRvIGZpbmQgdGhlIHByb3BhZ2F0aW9uIHJvb3Qgd2hlbiBzY2hlZHVsaW5nIGNvbnRleHQgd29yay4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwcm9wYWdhdGVDb250ZXh0Q2hhbmdlcyhcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgY29udGV4dHMsXG4gICAgICByZW5kZXJMYW5lcyxcbiAgICAgIGZvcmNlUHJvcGFnYXRlRW50aXJlVHJlZVxuICAgICkge1xuICAgICAgdmFyIGZpYmVyID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICBudWxsICE9PSBmaWJlciAmJiAoZmliZXIucmV0dXJuID0gd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgZm9yICg7IG51bGwgIT09IGZpYmVyOyApIHtcbiAgICAgICAgdmFyIGxpc3QgPSBmaWJlci5kZXBlbmRlbmNpZXM7XG4gICAgICAgIGlmIChudWxsICE9PSBsaXN0KSB7XG4gICAgICAgICAgdmFyIG5leHRGaWJlciA9IGZpYmVyLmNoaWxkO1xuICAgICAgICAgIGxpc3QgPSBsaXN0LmZpcnN0Q29udGV4dDtcbiAgICAgICAgICBhOiBmb3IgKDsgbnVsbCAhPT0gbGlzdDsgKSB7XG4gICAgICAgICAgICB2YXIgZGVwZW5kZW5jeSA9IGxpc3Q7XG4gICAgICAgICAgICBsaXN0ID0gZmliZXI7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbnRleHRzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICBpZiAoZGVwZW5kZW5jeS5jb250ZXh0ID09PSBjb250ZXh0c1tpXSkge1xuICAgICAgICAgICAgICAgIGxpc3QubGFuZXMgfD0gcmVuZGVyTGFuZXM7XG4gICAgICAgICAgICAgICAgZGVwZW5kZW5jeSA9IGxpc3QuYWx0ZXJuYXRlO1xuICAgICAgICAgICAgICAgIG51bGwgIT09IGRlcGVuZGVuY3kgJiYgKGRlcGVuZGVuY3kubGFuZXMgfD0gcmVuZGVyTGFuZXMpO1xuICAgICAgICAgICAgICAgIHNjaGVkdWxlQ29udGV4dFdvcmtPblBhcmVudFBhdGgoXG4gICAgICAgICAgICAgICAgICBsaXN0LnJldHVybixcbiAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGZvcmNlUHJvcGFnYXRlRW50aXJlVHJlZSB8fCAobmV4dEZpYmVyID0gbnVsbCk7XG4gICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGlzdCA9IGRlcGVuZGVuY3kubmV4dDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoMTggPT09IGZpYmVyLnRhZykge1xuICAgICAgICAgIG5leHRGaWJlciA9IGZpYmVyLnJldHVybjtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gbmV4dEZpYmVyKVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgIFwiV2UganVzdCBjYW1lIGZyb20gYSBwYXJlbnQgc28gd2UgbXVzdCBoYXZlIGhhZCBhIHBhcmVudC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBuZXh0RmliZXIubGFuZXMgfD0gcmVuZGVyTGFuZXM7XG4gICAgICAgICAgbGlzdCA9IG5leHRGaWJlci5hbHRlcm5hdGU7XG4gICAgICAgICAgbnVsbCAhPT0gbGlzdCAmJiAobGlzdC5sYW5lcyB8PSByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgc2NoZWR1bGVDb250ZXh0V29ya09uUGFyZW50UGF0aChcbiAgICAgICAgICAgIG5leHRGaWJlcixcbiAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NcbiAgICAgICAgICApO1xuICAgICAgICAgIG5leHRGaWJlciA9IG51bGw7XG4gICAgICAgIH0gZWxzZSBuZXh0RmliZXIgPSBmaWJlci5jaGlsZDtcbiAgICAgICAgaWYgKG51bGwgIT09IG5leHRGaWJlcikgbmV4dEZpYmVyLnJldHVybiA9IGZpYmVyO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgZm9yIChuZXh0RmliZXIgPSBmaWJlcjsgbnVsbCAhPT0gbmV4dEZpYmVyOyApIHtcbiAgICAgICAgICAgIGlmIChuZXh0RmliZXIgPT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgIG5leHRGaWJlciA9IG51bGw7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmliZXIgPSBuZXh0RmliZXIuc2libGluZztcbiAgICAgICAgICAgIGlmIChudWxsICE9PSBmaWJlcikge1xuICAgICAgICAgICAgICBmaWJlci5yZXR1cm4gPSBuZXh0RmliZXIucmV0dXJuO1xuICAgICAgICAgICAgICBuZXh0RmliZXIgPSBmaWJlcjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXh0RmliZXIgPSBuZXh0RmliZXIucmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgZmliZXIgPSBuZXh0RmliZXI7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByb3BhZ2F0ZVBhcmVudENvbnRleHRDaGFuZ2VzKFxuICAgICAgY3VycmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICBmb3JjZVByb3BhZ2F0ZUVudGlyZVRyZWVcbiAgICApIHtcbiAgICAgIGN1cnJlbnQgPSBudWxsO1xuICAgICAgZm9yIChcbiAgICAgICAgdmFyIHBhcmVudCA9IHdvcmtJblByb2dyZXNzLCBpc0luc2lkZVByb3BhZ2F0aW9uQmFpbG91dCA9ICExO1xuICAgICAgICBudWxsICE9PSBwYXJlbnQ7XG5cbiAgICAgICkge1xuICAgICAgICBpZiAoIWlzSW5zaWRlUHJvcGFnYXRpb25CYWlsb3V0KVxuICAgICAgICAgIGlmICgwICE9PSAocGFyZW50LmZsYWdzICYgNTI0Mjg4KSkgaXNJbnNpZGVQcm9wYWdhdGlvbkJhaWxvdXQgPSAhMDtcbiAgICAgICAgICBlbHNlIGlmICgwICE9PSAocGFyZW50LmZsYWdzICYgMjYyMTQ0KSkgYnJlYWs7XG4gICAgICAgIGlmICgxMCA9PT0gcGFyZW50LnRhZykge1xuICAgICAgICAgIHZhciBjdXJyZW50UGFyZW50ID0gcGFyZW50LmFsdGVybmF0ZTtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gY3VycmVudFBhcmVudClcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwiU2hvdWxkIGhhdmUgYSBjdXJyZW50IGZpYmVyLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiKTtcbiAgICAgICAgICBjdXJyZW50UGFyZW50ID0gY3VycmVudFBhcmVudC5tZW1vaXplZFByb3BzO1xuICAgICAgICAgIGlmIChudWxsICE9PSBjdXJyZW50UGFyZW50KSB7XG4gICAgICAgICAgICB2YXIgY29udGV4dCA9IHBhcmVudC50eXBlO1xuICAgICAgICAgICAgb2JqZWN0SXMocGFyZW50LnBlbmRpbmdQcm9wcy52YWx1ZSwgY3VycmVudFBhcmVudC52YWx1ZSkgfHxcbiAgICAgICAgICAgICAgKG51bGwgIT09IGN1cnJlbnRcbiAgICAgICAgICAgICAgICA/IGN1cnJlbnQucHVzaChjb250ZXh0KVxuICAgICAgICAgICAgICAgIDogKGN1cnJlbnQgPSBbY29udGV4dF0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFyZW50ID09PSBob3N0VHJhbnNpdGlvblByb3ZpZGVyQ3Vyc29yLmN1cnJlbnQpIHtcbiAgICAgICAgICBjdXJyZW50UGFyZW50ID0gcGFyZW50LmFsdGVybmF0ZTtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gY3VycmVudFBhcmVudClcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwiU2hvdWxkIGhhdmUgYSBjdXJyZW50IGZpYmVyLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiKTtcbiAgICAgICAgICBjdXJyZW50UGFyZW50Lm1lbW9pemVkU3RhdGUubWVtb2l6ZWRTdGF0ZSAhPT1cbiAgICAgICAgICAgIHBhcmVudC5tZW1vaXplZFN0YXRlLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICAgIChudWxsICE9PSBjdXJyZW50XG4gICAgICAgICAgICAgID8gY3VycmVudC5wdXNoKEhvc3RUcmFuc2l0aW9uQ29udGV4dClcbiAgICAgICAgICAgICAgOiAoY3VycmVudCA9IFtIb3N0VHJhbnNpdGlvbkNvbnRleHRdKSk7XG4gICAgICAgIH1cbiAgICAgICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgICAgIH1cbiAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgcHJvcGFnYXRlQ29udGV4dENoYW5nZXMoXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICBmb3JjZVByb3BhZ2F0ZUVudGlyZVRyZWVcbiAgICAgICAgKTtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDI2MjE0NDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tJZkNvbnRleHRDaGFuZ2VkKGN1cnJlbnREZXBlbmRlbmNpZXMpIHtcbiAgICAgIGZvciAoXG4gICAgICAgIGN1cnJlbnREZXBlbmRlbmNpZXMgPSBjdXJyZW50RGVwZW5kZW5jaWVzLmZpcnN0Q29udGV4dDtcbiAgICAgICAgbnVsbCAhPT0gY3VycmVudERlcGVuZGVuY2llcztcblxuICAgICAgKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhb2JqZWN0SXMoXG4gICAgICAgICAgICBjdXJyZW50RGVwZW5kZW5jaWVzLmNvbnRleHQuX2N1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgIGN1cnJlbnREZXBlbmRlbmNpZXMubWVtb2l6ZWRWYWx1ZVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgY3VycmVudERlcGVuZGVuY2llcyA9IGN1cnJlbnREZXBlbmRlbmNpZXMubmV4dDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IG51bGw7XG4gICAgICB3b3JrSW5Qcm9ncmVzcyA9IHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcztcbiAgICAgIG51bGwgIT09IHdvcmtJblByb2dyZXNzICYmICh3b3JrSW5Qcm9ncmVzcy5maXJzdENvbnRleHQgPSBudWxsKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZENvbnRleHQoY29udGV4dCkge1xuICAgICAgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiQ29udGV4dCBjYW4gb25seSBiZSByZWFkIHdoaWxlIFJlYWN0IGlzIHJlbmRlcmluZy4gSW4gY2xhc3NlcywgeW91IGNhbiByZWFkIGl0IGluIHRoZSByZW5kZXIgbWV0aG9kIG9yIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gSW4gZnVuY3Rpb24gY29tcG9uZW50cywgeW91IGNhbiByZWFkIGl0IGRpcmVjdGx5IGluIHRoZSBmdW5jdGlvbiBib2R5LCBidXQgbm90IGluc2lkZSBIb29rcyBsaWtlIHVzZVJlZHVjZXIoKSBvciB1c2VNZW1vKCkuXCJcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dEZvckNvbnN1bWVyKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEsIGNvbnRleHQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkQ29udGV4dER1cmluZ1JlY29uY2lsaWF0aW9uKGNvbnN1bWVyLCBjb250ZXh0KSB7XG4gICAgICBudWxsID09PSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxICYmIHByZXBhcmVUb1JlYWRDb250ZXh0KGNvbnN1bWVyKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dEZvckNvbnN1bWVyKGNvbnN1bWVyLCBjb250ZXh0KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZENvbnRleHRGb3JDb25zdW1lcihjb25zdW1lciwgY29udGV4dCkge1xuICAgICAgdmFyIHZhbHVlID0gY29udGV4dC5fY3VycmVudFZhbHVlO1xuICAgICAgY29udGV4dCA9IHsgY29udGV4dDogY29udGV4dCwgbWVtb2l6ZWRWYWx1ZTogdmFsdWUsIG5leHQ6IG51bGwgfTtcbiAgICAgIGlmIChudWxsID09PSBsYXN0Q29udGV4dERlcGVuZGVuY3kpIHtcbiAgICAgICAgaWYgKG51bGwgPT09IGNvbnN1bWVyKVxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJDb250ZXh0IGNhbiBvbmx5IGJlIHJlYWQgd2hpbGUgUmVhY3QgaXMgcmVuZGVyaW5nLiBJbiBjbGFzc2VzLCB5b3UgY2FuIHJlYWQgaXQgaW4gdGhlIHJlbmRlciBtZXRob2Qgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiBJbiBmdW5jdGlvbiBjb21wb25lbnRzLCB5b3UgY2FuIHJlYWQgaXQgZGlyZWN0bHkgaW4gdGhlIGZ1bmN0aW9uIGJvZHksIGJ1dCBub3QgaW5zaWRlIEhvb2tzIGxpa2UgdXNlUmVkdWNlcigpIG9yIHVzZU1lbW8oKS5cIlxuICAgICAgICAgICk7XG4gICAgICAgIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IGNvbnRleHQ7XG4gICAgICAgIGNvbnN1bWVyLmRlcGVuZGVuY2llcyA9IHtcbiAgICAgICAgICBsYW5lczogMCxcbiAgICAgICAgICBmaXJzdENvbnRleHQ6IGNvbnRleHQsXG4gICAgICAgICAgX2RlYnVnVGhlbmFibGVTdGF0ZTogbnVsbFxuICAgICAgICB9O1xuICAgICAgICBjb25zdW1lci5mbGFncyB8PSA1MjQyODg7XG4gICAgICB9IGVsc2UgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gbGFzdENvbnRleHREZXBlbmRlbmN5Lm5leHQgPSBjb250ZXh0O1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVDYWNoZSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRyb2xsZXI6IG5ldyBBYm9ydENvbnRyb2xsZXJMb2NhbCgpLFxuICAgICAgICBkYXRhOiBuZXcgTWFwKCksXG4gICAgICAgIHJlZkNvdW50OiAwXG4gICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXRhaW5DYWNoZShjYWNoZSkge1xuICAgICAgY2FjaGUuY29udHJvbGxlci5zaWduYWwuYWJvcnRlZCAmJlxuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgXCJBIGNhY2hlIGluc3RhbmNlIHdhcyByZXRhaW5lZCBhZnRlciBpdCB3YXMgYWxyZWFkeSBmcmVlZC4gVGhpcyBsaWtlbHkgaW5kaWNhdGVzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICk7XG4gICAgICBjYWNoZS5yZWZDb3VudCsrO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWxlYXNlQ2FjaGUoY2FjaGUpIHtcbiAgICAgIGNhY2hlLnJlZkNvdW50LS07XG4gICAgICAwID4gY2FjaGUucmVmQ291bnQgJiZcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIFwiQSBjYWNoZSBpbnN0YW5jZSB3YXMgcmVsZWFzZWQgYWZ0ZXIgaXQgd2FzIGFscmVhZHkgZnJlZWQuIFRoaXMgbGlrZWx5IGluZGljYXRlcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICApO1xuICAgICAgMCA9PT0gY2FjaGUucmVmQ291bnQgJiZcbiAgICAgICAgc2NoZWR1bGVDYWxsYmFjayQyKE5vcm1hbFByaW9yaXR5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY2FjaGUuY29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHVzaE5lc3RlZEVmZmVjdER1cmF0aW9ucygpIHtcbiAgICAgIHZhciBwcmV2RWZmZWN0RHVyYXRpb24gPSBwcm9maWxlckVmZmVjdER1cmF0aW9uO1xuICAgICAgcHJvZmlsZXJFZmZlY3REdXJhdGlvbiA9IDA7XG4gICAgICByZXR1cm4gcHJldkVmZmVjdER1cmF0aW9uO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwb3BOZXN0ZWRFZmZlY3REdXJhdGlvbnMocHJldkVmZmVjdER1cmF0aW9uKSB7XG4gICAgICB2YXIgZWxhcHNlZFRpbWUgPSBwcm9maWxlckVmZmVjdER1cmF0aW9uO1xuICAgICAgcHJvZmlsZXJFZmZlY3REdXJhdGlvbiA9IHByZXZFZmZlY3REdXJhdGlvbjtcbiAgICAgIHJldHVybiBlbGFwc2VkVGltZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYnViYmxlTmVzdGVkRWZmZWN0RHVyYXRpb25zKHByZXZFZmZlY3REdXJhdGlvbikge1xuICAgICAgdmFyIGVsYXBzZWRUaW1lID0gcHJvZmlsZXJFZmZlY3REdXJhdGlvbjtcbiAgICAgIHByb2ZpbGVyRWZmZWN0RHVyYXRpb24gKz0gcHJldkVmZmVjdER1cmF0aW9uO1xuICAgICAgcmV0dXJuIGVsYXBzZWRUaW1lO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoQ29tcG9uZW50RWZmZWN0U3RhcnQoKSB7XG4gICAgICB2YXIgcHJldkVmZmVjdFN0YXJ0ID0gY29tcG9uZW50RWZmZWN0U3RhcnRUaW1lO1xuICAgICAgY29tcG9uZW50RWZmZWN0U3RhcnRUaW1lID0gLTEuMTtcbiAgICAgIHJldHVybiBwcmV2RWZmZWN0U3RhcnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcENvbXBvbmVudEVmZmVjdFN0YXJ0KHByZXZFZmZlY3RTdGFydCkge1xuICAgICAgMCA8PSBwcmV2RWZmZWN0U3RhcnQgJiYgKGNvbXBvbmVudEVmZmVjdFN0YXJ0VGltZSA9IHByZXZFZmZlY3RTdGFydCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHN0YXJ0UHJvZmlsZXJUaW1lcihmaWJlcikge1xuICAgICAgcHJvZmlsZXJTdGFydFRpbWUgPSBub3coKTtcbiAgICAgIDAgPiBmaWJlci5hY3R1YWxTdGFydFRpbWUgJiYgKGZpYmVyLmFjdHVhbFN0YXJ0VGltZSA9IHByb2ZpbGVyU3RhcnRUaW1lKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREdXJhdGlvbihmaWJlcikge1xuICAgICAgaWYgKDAgPD0gcHJvZmlsZXJTdGFydFRpbWUpIHtcbiAgICAgICAgdmFyIGVsYXBzZWRUaW1lID0gbm93KCkgLSBwcm9maWxlclN0YXJ0VGltZTtcbiAgICAgICAgZmliZXIuYWN0dWFsRHVyYXRpb24gKz0gZWxhcHNlZFRpbWU7XG4gICAgICAgIGZpYmVyLnNlbGZCYXNlRHVyYXRpb24gPSBlbGFwc2VkVGltZTtcbiAgICAgICAgcHJvZmlsZXJTdGFydFRpbWUgPSAtMTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmRJbmNvbXBsZXRlRHVyYXRpb24oZmliZXIpIHtcbiAgICAgIGlmICgwIDw9IHByb2ZpbGVyU3RhcnRUaW1lKSB7XG4gICAgICAgIHZhciBlbGFwc2VkVGltZSA9IG5vdygpIC0gcHJvZmlsZXJTdGFydFRpbWU7XG4gICAgICAgIGZpYmVyLmFjdHVhbER1cmF0aW9uICs9IGVsYXBzZWRUaW1lO1xuICAgICAgICBwcm9maWxlclN0YXJ0VGltZSA9IC0xO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZWNvcmRFZmZlY3REdXJhdGlvbigpIHtcbiAgICAgIGlmICgwIDw9IHByb2ZpbGVyU3RhcnRUaW1lKSB7XG4gICAgICAgIHZhciBlbGFwc2VkVGltZSA9IG5vdygpIC0gcHJvZmlsZXJTdGFydFRpbWU7XG4gICAgICAgIHByb2ZpbGVyU3RhcnRUaW1lID0gLTE7XG4gICAgICAgIHByb2ZpbGVyRWZmZWN0RHVyYXRpb24gKz0gZWxhcHNlZFRpbWU7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHN0YXJ0RWZmZWN0VGltZXIoKSB7XG4gICAgICBwcm9maWxlclN0YXJ0VGltZSA9IG5vdygpO1xuICAgICAgMCA+IGNvbXBvbmVudEVmZmVjdFN0YXJ0VGltZSAmJlxuICAgICAgICAoY29tcG9uZW50RWZmZWN0U3RhcnRUaW1lID0gcHJvZmlsZXJTdGFydFRpbWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKGZpYmVyKSB7XG4gICAgICBmb3IgKHZhciBjaGlsZCA9IGZpYmVyLmNoaWxkOyBjaGlsZDsgKVxuICAgICAgICAoZmliZXIuYWN0dWFsRHVyYXRpb24gKz0gY2hpbGQuYWN0dWFsRHVyYXRpb24pLCAoY2hpbGQgPSBjaGlsZC5zaWJsaW5nKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZW50YW5nbGVBc3luY0FjdGlvbih0cmFuc2l0aW9uLCB0aGVuYWJsZSkge1xuICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnRFbnRhbmdsZWRMaXN0ZW5lcnMpIHtcbiAgICAgICAgdmFyIGVudGFuZ2xlZExpc3RlbmVycyA9IChjdXJyZW50RW50YW5nbGVkTGlzdGVuZXJzID0gW10pO1xuICAgICAgICBjdXJyZW50RW50YW5nbGVkUGVuZGluZ0NvdW50ID0gMDtcbiAgICAgICAgY3VycmVudEVudGFuZ2xlZExhbmUgPSByZXF1ZXN0VHJhbnNpdGlvbkxhbmUoKTtcbiAgICAgICAgY3VycmVudEVudGFuZ2xlZEFjdGlvblRoZW5hYmxlID0ge1xuICAgICAgICAgIHN0YXR1czogXCJwZW5kaW5nXCIsXG4gICAgICAgICAgdmFsdWU6IHZvaWQgMCxcbiAgICAgICAgICB0aGVuOiBmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgICAgZW50YW5nbGVkTGlzdGVuZXJzLnB1c2gocmVzb2x2ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY3VycmVudEVudGFuZ2xlZFBlbmRpbmdDb3VudCsrO1xuICAgICAgdGhlbmFibGUudGhlbihwaW5nRW5ndGFuZ2xlZEFjdGlvblNjb3BlLCBwaW5nRW5ndGFuZ2xlZEFjdGlvblNjb3BlKTtcbiAgICAgIHJldHVybiB0aGVuYWJsZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGluZ0VuZ3RhbmdsZWRBY3Rpb25TY29wZSgpIHtcbiAgICAgIGlmIChcbiAgICAgICAgMCA9PT0gLS1jdXJyZW50RW50YW5nbGVkUGVuZGluZ0NvdW50ICYmXG4gICAgICAgIG51bGwgIT09IGN1cnJlbnRFbnRhbmdsZWRMaXN0ZW5lcnNcbiAgICAgICkge1xuICAgICAgICBudWxsICE9PSBjdXJyZW50RW50YW5nbGVkQWN0aW9uVGhlbmFibGUgJiZcbiAgICAgICAgICAoY3VycmVudEVudGFuZ2xlZEFjdGlvblRoZW5hYmxlLnN0YXR1cyA9IFwiZnVsZmlsbGVkXCIpO1xuICAgICAgICB2YXIgbGlzdGVuZXJzID0gY3VycmVudEVudGFuZ2xlZExpc3RlbmVycztcbiAgICAgICAgY3VycmVudEVudGFuZ2xlZExpc3RlbmVycyA9IG51bGw7XG4gICAgICAgIGN1cnJlbnRFbnRhbmdsZWRMYW5lID0gMDtcbiAgICAgICAgY3VycmVudEVudGFuZ2xlZEFjdGlvblRoZW5hYmxlID0gbnVsbDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpKyspICgwLCBsaXN0ZW5lcnNbaV0pKCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoYWluVGhlbmFibGVWYWx1ZSh0aGVuYWJsZSwgcmVzdWx0KSB7XG4gICAgICB2YXIgbGlzdGVuZXJzID0gW10sXG4gICAgICAgIHRoZW5hYmxlV2l0aE92ZXJyaWRlID0ge1xuICAgICAgICAgIHN0YXR1czogXCJwZW5kaW5nXCIsXG4gICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgcmVhc29uOiBudWxsLFxuICAgICAgICAgIHRoZW46IGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgICBsaXN0ZW5lcnMucHVzaChyZXNvbHZlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB0aGVuYWJsZS50aGVuKFxuICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhlbmFibGVXaXRoT3ZlcnJpZGUuc3RhdHVzID0gXCJmdWxmaWxsZWRcIjtcbiAgICAgICAgICB0aGVuYWJsZVdpdGhPdmVycmlkZS52YWx1ZSA9IHJlc3VsdDtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkrKykgKDAsIGxpc3RlbmVyc1tpXSkocmVzdWx0KTtcbiAgICAgICAgfSxcbiAgICAgICAgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgdGhlbmFibGVXaXRoT3ZlcnJpZGUuc3RhdHVzID0gXCJyZWplY3RlZFwiO1xuICAgICAgICAgIHRoZW5hYmxlV2l0aE92ZXJyaWRlLnJlYXNvbiA9IGVycm9yO1xuICAgICAgICAgIGZvciAoZXJyb3IgPSAwOyBlcnJvciA8IGxpc3RlbmVycy5sZW5ndGg7IGVycm9yKyspXG4gICAgICAgICAgICAoMCwgbGlzdGVuZXJzW2Vycm9yXSkodm9pZCAwKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHJldHVybiB0aGVuYWJsZVdpdGhPdmVycmlkZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGVla0NhY2hlRnJvbVBvb2woKSB7XG4gICAgICB2YXIgY2FjaGVSZXN1bWVkRnJvbVByZXZpb3VzUmVuZGVyID0gcmVzdW1lZENhY2hlLmN1cnJlbnQ7XG4gICAgICByZXR1cm4gbnVsbCAhPT0gY2FjaGVSZXN1bWVkRnJvbVByZXZpb3VzUmVuZGVyXG4gICAgICAgID8gY2FjaGVSZXN1bWVkRnJvbVByZXZpb3VzUmVuZGVyXG4gICAgICAgIDogd29ya0luUHJvZ3Jlc3NSb290LnBvb2xlZENhY2hlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoVHJhbnNpdGlvbihvZmZzY3JlZW5Xb3JrSW5Qcm9ncmVzcywgcHJldkNhY2hlUG9vbCkge1xuICAgICAgbnVsbCA9PT0gcHJldkNhY2hlUG9vbFxuICAgICAgICA/IHB1c2gocmVzdW1lZENhY2hlLCByZXN1bWVkQ2FjaGUuY3VycmVudCwgb2Zmc2NyZWVuV29ya0luUHJvZ3Jlc3MpXG4gICAgICAgIDogcHVzaChyZXN1bWVkQ2FjaGUsIHByZXZDYWNoZVBvb2wucG9vbCwgb2Zmc2NyZWVuV29ya0luUHJvZ3Jlc3MpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRTdXNwZW5kZWRDYWNoZSgpIHtcbiAgICAgIHZhciBjYWNoZUZyb21Qb29sID0gcGVla0NhY2hlRnJvbVBvb2woKTtcbiAgICAgIHJldHVybiBudWxsID09PSBjYWNoZUZyb21Qb29sXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IHsgcGFyZW50OiBDYWNoZUNvbnRleHQuX2N1cnJlbnRWYWx1ZSwgcG9vbDogY2FjaGVGcm9tUG9vbCB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVUaGVuYWJsZVN0YXRlKCkge1xuICAgICAgcmV0dXJuIHsgZGlkV2FybkFib3V0VW5jYWNoZWRQcm9taXNlOiAhMSwgdGhlbmFibGVzOiBbXSB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc1RoZW5hYmxlUmVzb2x2ZWQodGhlbmFibGUpIHtcbiAgICAgIHRoZW5hYmxlID0gdGhlbmFibGUuc3RhdHVzO1xuICAgICAgcmV0dXJuIFwiZnVsZmlsbGVkXCIgPT09IHRoZW5hYmxlIHx8IFwicmVqZWN0ZWRcIiA9PT0gdGhlbmFibGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRyYWNrVXNlZFRoZW5hYmxlKHRoZW5hYmxlU3RhdGUsIHRoZW5hYmxlLCBpbmRleCkge1xuICAgICAgbnVsbCAhPT0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWUgJiZcbiAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLmRpZFVzZVByb21pc2UgPSAhMCk7XG4gICAgICB2YXIgdHJhY2tlZFRoZW5hYmxlcyA9IHRoZW5hYmxlU3RhdGUudGhlbmFibGVzO1xuICAgICAgaW5kZXggPSB0cmFja2VkVGhlbmFibGVzW2luZGV4XTtcbiAgICAgIHZvaWQgMCA9PT0gaW5kZXhcbiAgICAgICAgPyB0cmFja2VkVGhlbmFibGVzLnB1c2godGhlbmFibGUpXG4gICAgICAgIDogaW5kZXggIT09IHRoZW5hYmxlICYmXG4gICAgICAgICAgKHRoZW5hYmxlU3RhdGUuZGlkV2FybkFib3V0VW5jYWNoZWRQcm9taXNlIHx8XG4gICAgICAgICAgICAoKHRoZW5hYmxlU3RhdGUuZGlkV2FybkFib3V0VW5jYWNoZWRQcm9taXNlID0gITApLFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJBIGNvbXBvbmVudCB3YXMgc3VzcGVuZGVkIGJ5IGFuIHVuY2FjaGVkIHByb21pc2UuIENyZWF0aW5nIHByb21pc2VzIGluc2lkZSBhIENsaWVudCBDb21wb25lbnQgb3IgaG9vayBpcyBub3QgeWV0IHN1cHBvcnRlZCwgZXhjZXB0IHZpYSBhIFN1c3BlbnNlLWNvbXBhdGlibGUgbGlicmFyeSBvciBmcmFtZXdvcmsuXCJcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgIHRoZW5hYmxlLnRoZW4obm9vcCQxLCBub29wJDEpLFxuICAgICAgICAgICh0aGVuYWJsZSA9IGluZGV4KSk7XG4gICAgICBzd2l0Y2ggKHRoZW5hYmxlLnN0YXR1cykge1xuICAgICAgICBjYXNlIFwiZnVsZmlsbGVkXCI6XG4gICAgICAgICAgcmV0dXJuIHRoZW5hYmxlLnZhbHVlO1xuICAgICAgICBjYXNlIFwicmVqZWN0ZWRcIjpcbiAgICAgICAgICB0aHJvdyAoXG4gICAgICAgICAgICAoKHRoZW5hYmxlU3RhdGUgPSB0aGVuYWJsZS5yZWFzb24pLFxuICAgICAgICAgICAgY2hlY2tJZlVzZVdyYXBwZWRJbkFzeW5jQ2F0Y2godGhlbmFibGVTdGF0ZSksXG4gICAgICAgICAgICB0aGVuYWJsZVN0YXRlKVxuICAgICAgICAgICk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiB0aGVuYWJsZS5zdGF0dXMpXG4gICAgICAgICAgICB0aGVuYWJsZS50aGVuKG5vb3AkMSwgbm9vcCQxKTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoZW5hYmxlU3RhdGUgPSB3b3JrSW5Qcm9ncmVzc1Jvb3Q7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG51bGwgIT09IHRoZW5hYmxlU3RhdGUgJiZcbiAgICAgICAgICAgICAgMTAwIDwgdGhlbmFibGVTdGF0ZS5zaGVsbFN1c3BlbmRDb3VudGVyXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiQW4gdW5rbm93biBDb21wb25lbnQgaXMgYW4gYXN5bmMgQ2xpZW50IENvbXBvbmVudC4gT25seSBTZXJ2ZXIgQ29tcG9uZW50cyBjYW4gYmUgYXN5bmMgYXQgdGhlIG1vbWVudC4gVGhpcyBlcnJvciBpcyBvZnRlbiBjYXVzZWQgYnkgYWNjaWRlbnRhbGx5IGFkZGluZyBgJ3VzZSBjbGllbnQnYCB0byBhIG1vZHVsZSB0aGF0IHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gZm9yIHRoZSBzZXJ2ZXIuXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoZW5hYmxlU3RhdGUgPSB0aGVuYWJsZTtcbiAgICAgICAgICAgIHRoZW5hYmxlU3RhdGUuc3RhdHVzID0gXCJwZW5kaW5nXCI7XG4gICAgICAgICAgICB0aGVuYWJsZVN0YXRlLnRoZW4oXG4gICAgICAgICAgICAgIGZ1bmN0aW9uIChmdWxmaWxsZWRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChcInBlbmRpbmdcIiA9PT0gdGhlbmFibGUuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgZnVsZmlsbGVkVGhlbmFibGUgPSB0aGVuYWJsZTtcbiAgICAgICAgICAgICAgICAgIGZ1bGZpbGxlZFRoZW5hYmxlLnN0YXR1cyA9IFwiZnVsZmlsbGVkXCI7XG4gICAgICAgICAgICAgICAgICBmdWxmaWxsZWRUaGVuYWJsZS52YWx1ZSA9IGZ1bGZpbGxlZFZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKFwicGVuZGluZ1wiID09PSB0aGVuYWJsZS5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgIHZhciByZWplY3RlZFRoZW5hYmxlID0gdGhlbmFibGU7XG4gICAgICAgICAgICAgICAgICByZWplY3RlZFRoZW5hYmxlLnN0YXR1cyA9IFwicmVqZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgIHJlamVjdGVkVGhlbmFibGUucmVhc29uID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzd2l0Y2ggKHRoZW5hYmxlLnN0YXR1cykge1xuICAgICAgICAgICAgY2FzZSBcImZ1bGZpbGxlZFwiOlxuICAgICAgICAgICAgICByZXR1cm4gdGhlbmFibGUudmFsdWU7XG4gICAgICAgICAgICBjYXNlIFwicmVqZWN0ZWRcIjpcbiAgICAgICAgICAgICAgdGhyb3cgKFxuICAgICAgICAgICAgICAgICgodGhlbmFibGVTdGF0ZSA9IHRoZW5hYmxlLnJlYXNvbiksXG4gICAgICAgICAgICAgICAgY2hlY2tJZlVzZVdyYXBwZWRJbkFzeW5jQ2F0Y2godGhlbmFibGVTdGF0ZSksXG4gICAgICAgICAgICAgICAgdGhlbmFibGVTdGF0ZSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3VzcGVuZGVkVGhlbmFibGUgPSB0aGVuYWJsZTtcbiAgICAgICAgICBuZWVkc1RvUmVzZXRTdXNwZW5kZWRUaGVuYWJsZURFViA9ICEwO1xuICAgICAgICAgIHRocm93IFN1c3BlbnNlRXhjZXB0aW9uO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRTdXNwZW5kZWRUaGVuYWJsZSgpIHtcbiAgICAgIGlmIChudWxsID09PSBzdXNwZW5kZWRUaGVuYWJsZSlcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJFeHBlY3RlZCBhIHN1c3BlbmRlZCB0aGVuYWJsZS4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgKTtcbiAgICAgIHZhciB0aGVuYWJsZSA9IHN1c3BlbmRlZFRoZW5hYmxlO1xuICAgICAgc3VzcGVuZGVkVGhlbmFibGUgPSBudWxsO1xuICAgICAgbmVlZHNUb1Jlc2V0U3VzcGVuZGVkVGhlbmFibGVERVYgPSAhMTtcbiAgICAgIHJldHVybiB0aGVuYWJsZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tJZlVzZVdyYXBwZWRJbkFzeW5jQ2F0Y2gocmVqZWN0ZWRSZWFzb24pIHtcbiAgICAgIGlmIChcbiAgICAgICAgcmVqZWN0ZWRSZWFzb24gPT09IFN1c3BlbnNlRXhjZXB0aW9uIHx8XG4gICAgICAgIHJlamVjdGVkUmVhc29uID09PSBTdXNwZW5zZUFjdGlvbkV4Y2VwdGlvblxuICAgICAgKVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIkhvb2tzIGFyZSBub3Qgc3VwcG9ydGVkIGluc2lkZSBhbiBhc3luYyBjb21wb25lbnQuIFRoaXMgZXJyb3IgaXMgb2Z0ZW4gY2F1c2VkIGJ5IGFjY2lkZW50YWxseSBhZGRpbmcgYCd1c2UgY2xpZW50J2AgdG8gYSBtb2R1bGUgdGhhdCB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGZvciB0aGUgc2VydmVyLlwiXG4gICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2hEZWJ1Z0luZm8oZGVidWdJbmZvKSB7XG4gICAgICB2YXIgcHJldmlvdXNEZWJ1Z0luZm8gPSBjdXJyZW50RGVidWdJbmZvO1xuICAgICAgbnVsbCAhPSBkZWJ1Z0luZm8gJiZcbiAgICAgICAgKGN1cnJlbnREZWJ1Z0luZm8gPVxuICAgICAgICAgIG51bGwgPT09IHByZXZpb3VzRGVidWdJbmZvXG4gICAgICAgICAgICA/IGRlYnVnSW5mb1xuICAgICAgICAgICAgOiBwcmV2aW91c0RlYnVnSW5mby5jb25jYXQoZGVidWdJbmZvKSk7XG4gICAgICByZXR1cm4gcHJldmlvdXNEZWJ1Z0luZm87XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhlbGVtZW50LCBmaWJlciwgcmV0dXJuRmliZXIpIHtcbiAgICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhlbGVtZW50LnByb3BzKSwgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICBpZiAoXCJjaGlsZHJlblwiICE9PSBrZXkgJiYgXCJrZXlcIiAhPT0ga2V5KSB7XG4gICAgICAgICAgbnVsbCA9PT0gZmliZXIgJiZcbiAgICAgICAgICAgICgoZmliZXIgPSBjcmVhdGVGaWJlckZyb21FbGVtZW50KGVsZW1lbnQsIHJldHVybkZpYmVyLm1vZGUsIDApKSxcbiAgICAgICAgICAgIChmaWJlci5fZGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbyksXG4gICAgICAgICAgICAoZmliZXIucmV0dXJuID0gcmV0dXJuRmliZXIpKTtcbiAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVycm9yZWRLZXkpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIkludmFsaWQgcHJvcCBgJXNgIHN1cHBsaWVkIHRvIGBSZWFjdC5GcmFnbWVudGAuIFJlYWN0LkZyYWdtZW50IGNhbiBvbmx5IGhhdmUgYGtleWAgYW5kIGBjaGlsZHJlbmAgcHJvcHMuXCIsXG4gICAgICAgICAgICAgICAgZXJyb3JlZEtleVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtleVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdW53cmFwVGhlbmFibGUodGhlbmFibGUpIHtcbiAgICAgIHZhciBpbmRleCA9IHRoZW5hYmxlSW5kZXhDb3VudGVyJDE7XG4gICAgICB0aGVuYWJsZUluZGV4Q291bnRlciQxICs9IDE7XG4gICAgICBudWxsID09PSB0aGVuYWJsZVN0YXRlJDEgJiYgKHRoZW5hYmxlU3RhdGUkMSA9IGNyZWF0ZVRoZW5hYmxlU3RhdGUoKSk7XG4gICAgICByZXR1cm4gdHJhY2tVc2VkVGhlbmFibGUodGhlbmFibGVTdGF0ZSQxLCB0aGVuYWJsZSwgaW5kZXgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb2VyY2VSZWYod29ya0luUHJvZ3Jlc3MsIGVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnByb3BzLnJlZjtcbiAgICAgIHdvcmtJblByb2dyZXNzLnJlZiA9IHZvaWQgMCAhPT0gZWxlbWVudCA/IGVsZW1lbnQgOiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKSB7XG4gICAgICBpZiAobmV3Q2hpbGQuJCR0eXBlb2YgPT09IFJFQUNUX0xFR0FDWV9FTEVNRU5UX1RZUEUpXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdBIFJlYWN0IEVsZW1lbnQgZnJvbSBhbiBvbGRlciB2ZXJzaW9uIG9mIFJlYWN0IHdhcyByZW5kZXJlZC4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkLiBJdCBjYW4gaGFwcGVuIGlmOlxcbi0gTXVsdGlwbGUgY29waWVzIG9mIHRoZSBcInJlYWN0XCIgcGFja2FnZSBpcyB1c2VkLlxcbi0gQSBsaWJyYXJ5IHByZS1idW5kbGVkIGFuIG9sZCBjb3B5IG9mIFwicmVhY3RcIiBvciBcInJlYWN0L2pzeC1ydW50aW1lXCIuXFxuLSBBIGNvbXBpbGVyIHRyaWVzIHRvIFwiaW5saW5lXCIgSlNYIGluc3RlYWQgb2YgdXNpbmcgdGhlIHJ1bnRpbWUuJ1xuICAgICAgICApO1xuICAgICAgcmV0dXJuRmliZXIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmV3Q2hpbGQpO1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIFwiT2JqZWN0cyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQgKGZvdW5kOiBcIiArXG4gICAgICAgICAgKFwiW29iamVjdCBPYmplY3RdXCIgPT09IHJldHVybkZpYmVyXG4gICAgICAgICAgICA/IFwib2JqZWN0IHdpdGgga2V5cyB7XCIgKyBPYmplY3Qua2V5cyhuZXdDaGlsZCkuam9pbihcIiwgXCIpICsgXCJ9XCJcbiAgICAgICAgICAgIDogcmV0dXJuRmliZXIpICtcbiAgICAgICAgICBcIikuIElmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgaW5zdGVhZC5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2Fybk9uRnVuY3Rpb25UeXBlKHJldHVybkZpYmVyLCBpbnZhbGlkQ2hpbGQpIHtcbiAgICAgIHZhciBwYXJlbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihyZXR1cm5GaWJlcikgfHwgXCJDb21wb25lbnRcIjtcbiAgICAgIG93bmVySGFzRnVuY3Rpb25UeXBlV2FybmluZ1twYXJlbnROYW1lXSB8fFxuICAgICAgICAoKG93bmVySGFzRnVuY3Rpb25UeXBlV2FybmluZ1twYXJlbnROYW1lXSA9ICEwKSxcbiAgICAgICAgKGludmFsaWRDaGlsZCA9XG4gICAgICAgICAgaW52YWxpZENoaWxkLmRpc3BsYXlOYW1lIHx8IGludmFsaWRDaGlsZC5uYW1lIHx8IFwiQ29tcG9uZW50XCIpLFxuICAgICAgICAzID09PSByZXR1cm5GaWJlci50YWdcbiAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiRnVuY3Rpb25zIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZC4gVGhpcyBtYXkgaGFwcGVuIGlmIHlvdSByZXR1cm4gJXMgaW5zdGVhZCBvZiA8JXMgLz4gZnJvbSByZW5kZXIuIE9yIG1heWJlIHlvdSBtZWFudCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gcmF0aGVyIHRoYW4gcmV0dXJuIGl0LlxcbiAgcm9vdC5yZW5kZXIoJXMpXCIsXG4gICAgICAgICAgICAgIGludmFsaWRDaGlsZCxcbiAgICAgICAgICAgICAgaW52YWxpZENoaWxkLFxuICAgICAgICAgICAgICBpbnZhbGlkQ2hpbGRcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiRnVuY3Rpb25zIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZC4gVGhpcyBtYXkgaGFwcGVuIGlmIHlvdSByZXR1cm4gJXMgaW5zdGVhZCBvZiA8JXMgLz4gZnJvbSByZW5kZXIuIE9yIG1heWJlIHlvdSBtZWFudCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gcmF0aGVyIHRoYW4gcmV0dXJuIGl0LlxcbiAgPCVzPnslc308LyVzPlwiLFxuICAgICAgICAgICAgICBpbnZhbGlkQ2hpbGQsXG4gICAgICAgICAgICAgIGludmFsaWRDaGlsZCxcbiAgICAgICAgICAgICAgcGFyZW50TmFtZSxcbiAgICAgICAgICAgICAgaW52YWxpZENoaWxkLFxuICAgICAgICAgICAgICBwYXJlbnROYW1lXG4gICAgICAgICAgICApKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2Fybk9uU3ltYm9sVHlwZShyZXR1cm5GaWJlciwgaW52YWxpZENoaWxkKSB7XG4gICAgICB2YXIgcGFyZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIocmV0dXJuRmliZXIpIHx8IFwiQ29tcG9uZW50XCI7XG4gICAgICBvd25lckhhc1N5bWJvbFR5cGVXYXJuaW5nW3BhcmVudE5hbWVdIHx8XG4gICAgICAgICgob3duZXJIYXNTeW1ib2xUeXBlV2FybmluZ1twYXJlbnROYW1lXSA9ICEwKSxcbiAgICAgICAgKGludmFsaWRDaGlsZCA9IFN0cmluZyhpbnZhbGlkQ2hpbGQpKSxcbiAgICAgICAgMyA9PT0gcmV0dXJuRmliZXIudGFnXG4gICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlN5bWJvbHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkLlxcbiAgcm9vdC5yZW5kZXIoJXMpXCIsXG4gICAgICAgICAgICAgIGludmFsaWRDaGlsZFxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJTeW1ib2xzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZC5cXG4gIDwlcz4lczwvJXM+XCIsXG4gICAgICAgICAgICAgIHBhcmVudE5hbWUsXG4gICAgICAgICAgICAgIGludmFsaWRDaGlsZCxcbiAgICAgICAgICAgICAgcGFyZW50TmFtZVxuICAgICAgICAgICAgKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNoaWxkUmVjb25jaWxlcihzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICBmdW5jdGlvbiBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGRUb0RlbGV0ZSkge1xuICAgICAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgICAgIHZhciBkZWxldGlvbnMgPSByZXR1cm5GaWJlci5kZWxldGlvbnM7XG4gICAgICAgICAgbnVsbCA9PT0gZGVsZXRpb25zXG4gICAgICAgICAgICA/ICgocmV0dXJuRmliZXIuZGVsZXRpb25zID0gW2NoaWxkVG9EZWxldGVdKSxcbiAgICAgICAgICAgICAgKHJldHVybkZpYmVyLmZsYWdzIHw9IDE2KSlcbiAgICAgICAgICAgIDogZGVsZXRpb25zLnB1c2goY2hpbGRUb0RlbGV0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCkge1xuICAgICAgICBpZiAoIXNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHJldHVybiBudWxsO1xuICAgICAgICBmb3IgKDsgbnVsbCAhPT0gY3VycmVudEZpcnN0Q2hpbGQ7IClcbiAgICAgICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpLFxuICAgICAgICAgICAgKGN1cnJlbnRGaXJzdENoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQuc2libGluZyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gbWFwUmVtYWluaW5nQ2hpbGRyZW4oY3VycmVudEZpcnN0Q2hpbGQpIHtcbiAgICAgICAgZm9yICh2YXIgZXhpc3RpbmdDaGlsZHJlbiA9IG5ldyBNYXAoKTsgbnVsbCAhPT0gY3VycmVudEZpcnN0Q2hpbGQ7IClcbiAgICAgICAgICBudWxsICE9PSBjdXJyZW50Rmlyc3RDaGlsZC5rZXlcbiAgICAgICAgICAgID8gZXhpc3RpbmdDaGlsZHJlbi5zZXQoY3VycmVudEZpcnN0Q2hpbGQua2V5LCBjdXJyZW50Rmlyc3RDaGlsZClcbiAgICAgICAgICAgIDogZXhpc3RpbmdDaGlsZHJlbi5zZXQoY3VycmVudEZpcnN0Q2hpbGQuaW5kZXgsIGN1cnJlbnRGaXJzdENoaWxkKSxcbiAgICAgICAgICAgIChjdXJyZW50Rmlyc3RDaGlsZCA9IGN1cnJlbnRGaXJzdENoaWxkLnNpYmxpbmcpO1xuICAgICAgICByZXR1cm4gZXhpc3RpbmdDaGlsZHJlbjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHVzZUZpYmVyKGZpYmVyLCBwZW5kaW5nUHJvcHMpIHtcbiAgICAgICAgZmliZXIgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhmaWJlciwgcGVuZGluZ1Byb3BzKTtcbiAgICAgICAgZmliZXIuaW5kZXggPSAwO1xuICAgICAgICBmaWJlci5zaWJsaW5nID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIGZpYmVyO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcGxhY2VDaGlsZChuZXdGaWJlciwgbGFzdFBsYWNlZEluZGV4LCBuZXdJbmRleCkge1xuICAgICAgICBuZXdGaWJlci5pbmRleCA9IG5ld0luZGV4O1xuICAgICAgICBpZiAoIXNob3VsZFRyYWNrU2lkZUVmZmVjdHMpXG4gICAgICAgICAgcmV0dXJuIChuZXdGaWJlci5mbGFncyB8PSAxMDQ4NTc2KSwgbGFzdFBsYWNlZEluZGV4O1xuICAgICAgICBuZXdJbmRleCA9IG5ld0ZpYmVyLmFsdGVybmF0ZTtcbiAgICAgICAgaWYgKG51bGwgIT09IG5ld0luZGV4KVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAobmV3SW5kZXggPSBuZXdJbmRleC5pbmRleCksXG4gICAgICAgICAgICBuZXdJbmRleCA8IGxhc3RQbGFjZWRJbmRleFxuICAgICAgICAgICAgICA/ICgobmV3RmliZXIuZmxhZ3MgfD0gNjcxMDg4NjYpLCBsYXN0UGxhY2VkSW5kZXgpXG4gICAgICAgICAgICAgIDogbmV3SW5kZXhcbiAgICAgICAgICApO1xuICAgICAgICBuZXdGaWJlci5mbGFncyB8PSA2NzEwODg2NjtcbiAgICAgICAgcmV0dXJuIGxhc3RQbGFjZWRJbmRleDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHBsYWNlU2luZ2xlQ2hpbGQobmV3RmliZXIpIHtcbiAgICAgICAgc2hvdWxkVHJhY2tTaWRlRWZmZWN0cyAmJlxuICAgICAgICAgIG51bGwgPT09IG5ld0ZpYmVyLmFsdGVybmF0ZSAmJlxuICAgICAgICAgIChuZXdGaWJlci5mbGFncyB8PSA2NzEwODg2Nik7XG4gICAgICAgIHJldHVybiBuZXdGaWJlcjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZVRleHROb2RlKHJldHVybkZpYmVyLCBjdXJyZW50LCB0ZXh0Q29udGVudCwgbGFuZXMpIHtcbiAgICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnQgfHwgNiAhPT0gY3VycmVudC50YWcpXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChjdXJyZW50ID0gY3JlYXRlRmliZXJGcm9tVGV4dChcbiAgICAgICAgICAgICAgdGV4dENvbnRlbnQsXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLm1vZGUsXG4gICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIChjdXJyZW50LnJldHVybiA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgIChjdXJyZW50Ll9kZWJ1Z093bmVyID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgKGN1cnJlbnQuX2RlYnVnVGFzayA9IHJldHVybkZpYmVyLl9kZWJ1Z1Rhc2spLFxuICAgICAgICAgICAgKGN1cnJlbnQuX2RlYnVnSW5mbyA9IGN1cnJlbnREZWJ1Z0luZm8pLFxuICAgICAgICAgICAgY3VycmVudFxuICAgICAgICAgICk7XG4gICAgICAgIGN1cnJlbnQgPSB1c2VGaWJlcihjdXJyZW50LCB0ZXh0Q29udGVudCk7XG4gICAgICAgIGN1cnJlbnQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgIGN1cnJlbnQuX2RlYnVnSW5mbyA9IGN1cnJlbnREZWJ1Z0luZm87XG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gdXBkYXRlRWxlbWVudChyZXR1cm5GaWJlciwgY3VycmVudCwgZWxlbWVudCwgbGFuZXMpIHtcbiAgICAgICAgdmFyIGVsZW1lbnRUeXBlID0gZWxlbWVudC50eXBlO1xuICAgICAgICBpZiAoZWxlbWVudFR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChjdXJyZW50ID0gdXBkYXRlRnJhZ21lbnQoXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICBlbGVtZW50LnByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgICAgZWxlbWVudC5rZXlcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgdmFsaWRhdGVGcmFnbWVudFByb3BzKGVsZW1lbnQsIGN1cnJlbnQsIHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgIGN1cnJlbnRcbiAgICAgICAgICApO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAgIChjdXJyZW50LmVsZW1lbnRUeXBlID09PSBlbGVtZW50VHlwZSB8fFxuICAgICAgICAgICAgaXNDb21wYXRpYmxlRmFtaWx5Rm9ySG90UmVsb2FkaW5nKGN1cnJlbnQsIGVsZW1lbnQpIHx8XG4gICAgICAgICAgICAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIGVsZW1lbnRUeXBlICYmXG4gICAgICAgICAgICAgIG51bGwgIT09IGVsZW1lbnRUeXBlICYmXG4gICAgICAgICAgICAgIGVsZW1lbnRUeXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgJiZcbiAgICAgICAgICAgICAgY2FsbExhenlJbml0SW5ERVYoZWxlbWVudFR5cGUpID09PSBjdXJyZW50LnR5cGUpKVxuICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChjdXJyZW50ID0gdXNlRmliZXIoY3VycmVudCwgZWxlbWVudC5wcm9wcykpLFxuICAgICAgICAgICAgY29lcmNlUmVmKGN1cnJlbnQsIGVsZW1lbnQpLFxuICAgICAgICAgICAgKGN1cnJlbnQucmV0dXJuID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgKGN1cnJlbnQuX2RlYnVnT3duZXIgPSBlbGVtZW50Ll9vd25lciksXG4gICAgICAgICAgICAoY3VycmVudC5fZGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbyksXG4gICAgICAgICAgICBjdXJyZW50XG4gICAgICAgICAgKTtcbiAgICAgICAgY3VycmVudCA9IGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQoZWxlbWVudCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgICAgICBjb2VyY2VSZWYoY3VycmVudCwgZWxlbWVudCk7XG4gICAgICAgIGN1cnJlbnQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgIGN1cnJlbnQuX2RlYnVnSW5mbyA9IGN1cnJlbnREZWJ1Z0luZm87XG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gdXBkYXRlUG9ydGFsKHJldHVybkZpYmVyLCBjdXJyZW50LCBwb3J0YWwsIGxhbmVzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBudWxsID09PSBjdXJyZW50IHx8XG4gICAgICAgICAgNCAhPT0gY3VycmVudC50YWcgfHxcbiAgICAgICAgICBjdXJyZW50LnN0YXRlTm9kZS5jb250YWluZXJJbmZvICE9PSBwb3J0YWwuY29udGFpbmVySW5mbyB8fFxuICAgICAgICAgIGN1cnJlbnQuc3RhdGVOb2RlLmltcGxlbWVudGF0aW9uICE9PSBwb3J0YWwuaW1wbGVtZW50YXRpb25cbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoY3VycmVudCA9IGNyZWF0ZUZpYmVyRnJvbVBvcnRhbChwb3J0YWwsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKSksXG4gICAgICAgICAgICAoY3VycmVudC5yZXR1cm4gPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAoY3VycmVudC5fZGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbyksXG4gICAgICAgICAgICBjdXJyZW50XG4gICAgICAgICAgKTtcbiAgICAgICAgY3VycmVudCA9IHVzZUZpYmVyKGN1cnJlbnQsIHBvcnRhbC5jaGlsZHJlbiB8fCBbXSk7XG4gICAgICAgIGN1cnJlbnQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgIGN1cnJlbnQuX2RlYnVnSW5mbyA9IGN1cnJlbnREZWJ1Z0luZm87XG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIGN1cnJlbnQsIGZyYWdtZW50LCBsYW5lcywga2V5KSB7XG4gICAgICAgIGlmIChudWxsID09PSBjdXJyZW50IHx8IDcgIT09IGN1cnJlbnQudGFnKVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoY3VycmVudCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KFxuICAgICAgICAgICAgICBmcmFnbWVudCxcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIubW9kZSxcbiAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAoY3VycmVudC5yZXR1cm4gPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAoY3VycmVudC5fZGVidWdPd25lciA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgIChjdXJyZW50Ll9kZWJ1Z1Rhc2sgPSByZXR1cm5GaWJlci5fZGVidWdUYXNrKSxcbiAgICAgICAgICAgIChjdXJyZW50Ll9kZWJ1Z0luZm8gPSBjdXJyZW50RGVidWdJbmZvKSxcbiAgICAgICAgICAgIGN1cnJlbnRcbiAgICAgICAgICApO1xuICAgICAgICBjdXJyZW50ID0gdXNlRmliZXIoY3VycmVudCwgZnJhZ21lbnQpO1xuICAgICAgICBjdXJyZW50LnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICBjdXJyZW50Ll9kZWJ1Z0luZm8gPSBjdXJyZW50RGVidWdJbmZvO1xuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChcInN0cmluZ1wiID09PSB0eXBlb2YgbmV3Q2hpbGQgJiYgXCJcIiAhPT0gbmV3Q2hpbGQpIHx8XG4gICAgICAgICAgXCJudW1iZXJcIiA9PT0gdHlwZW9mIG5ld0NoaWxkIHx8XG4gICAgICAgICAgXCJiaWdpbnRcIiA9PT0gdHlwZW9mIG5ld0NoaWxkXG4gICAgICAgIClcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKG5ld0NoaWxkID0gY3JlYXRlRmliZXJGcm9tVGV4dChcbiAgICAgICAgICAgICAgXCJcIiArIG5ld0NoaWxkLFxuICAgICAgICAgICAgICByZXR1cm5GaWJlci5tb2RlLFxuICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAobmV3Q2hpbGQucmV0dXJuID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgKG5ld0NoaWxkLl9kZWJ1Z093bmVyID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgKG5ld0NoaWxkLl9kZWJ1Z1Rhc2sgPSByZXR1cm5GaWJlci5fZGVidWdUYXNrKSxcbiAgICAgICAgICAgIChuZXdDaGlsZC5fZGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbyksXG4gICAgICAgICAgICBuZXdDaGlsZFxuICAgICAgICAgICk7XG4gICAgICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2YgbmV3Q2hpbGQgJiYgbnVsbCAhPT0gbmV3Q2hpbGQpIHtcbiAgICAgICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAobGFuZXMgPSBjcmVhdGVGaWJlckZyb21FbGVtZW50KFxuICAgICAgICAgICAgICAgICAgbmV3Q2hpbGQsXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlci5tb2RlLFxuICAgICAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICBjb2VyY2VSZWYobGFuZXMsIG5ld0NoaWxkKSxcbiAgICAgICAgICAgICAgICAobGFuZXMucmV0dXJuID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IHB1c2hEZWJ1Z0luZm8obmV3Q2hpbGQuX2RlYnVnSW5mbykpLFxuICAgICAgICAgICAgICAgIChsYW5lcy5fZGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbyksXG4gICAgICAgICAgICAgICAgKGN1cnJlbnREZWJ1Z0luZm8gPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgKG5ld0NoaWxkID0gY3JlYXRlRmliZXJGcm9tUG9ydGFsKFxuICAgICAgICAgICAgICAgICAgbmV3Q2hpbGQsXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlci5tb2RlLFxuICAgICAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAobmV3Q2hpbGQucmV0dXJuID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICAgIChuZXdDaGlsZC5fZGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbyksXG4gICAgICAgICAgICAgICAgbmV3Q2hpbGRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICB2YXIgX3ByZXZEZWJ1Z0luZm8gPSBwdXNoRGVidWdJbmZvKG5ld0NoaWxkLl9kZWJ1Z0luZm8pO1xuICAgICAgICAgICAgICBuZXdDaGlsZCA9IGNhbGxMYXp5SW5pdEluREVWKG5ld0NoaWxkKTtcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIgPSBjcmVhdGVDaGlsZChyZXR1cm5GaWJlciwgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICAgICAgICAgICAgY3VycmVudERlYnVnSW5mbyA9IF9wcmV2RGVidWdJbmZvO1xuICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuRmliZXI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc0FycmF5SW1wbChuZXdDaGlsZCkgfHwgZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAobGFuZXMgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChcbiAgICAgICAgICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgICAgICAgICByZXR1cm5GaWJlci5tb2RlLFxuICAgICAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIChsYW5lcy5yZXR1cm4gPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAgIChsYW5lcy5fZGVidWdPd25lciA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgICAgKGxhbmVzLl9kZWJ1Z1Rhc2sgPSByZXR1cm5GaWJlci5fZGVidWdUYXNrKSxcbiAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gcHVzaERlYnVnSW5mbyhuZXdDaGlsZC5fZGVidWdJbmZvKSksXG4gICAgICAgICAgICAgIChsYW5lcy5fZGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbyksXG4gICAgICAgICAgICAgIChjdXJyZW50RGVidWdJbmZvID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbmV3Q2hpbGQudGhlbilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChfcHJldkRlYnVnSW5mbyA9IHB1c2hEZWJ1Z0luZm8obmV3Q2hpbGQuX2RlYnVnSW5mbykpLFxuICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSBjcmVhdGVDaGlsZChcbiAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICB1bndyYXBUaGVuYWJsZShuZXdDaGlsZCksXG4gICAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIChjdXJyZW50RGVidWdJbmZvID0gX3ByZXZEZWJ1Z0luZm8pLFxuICAgICAgICAgICAgICByZXR1cm5GaWJlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBpZiAobmV3Q2hpbGQuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSlcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVDaGlsZChcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgIHJlYWRDb250ZXh0RHVyaW5nUmVjb25jaWxpYXRpb24ocmV0dXJuRmliZXIsIG5ld0NoaWxkKSxcbiAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgICAgIH1cbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbmV3Q2hpbGQgJiZcbiAgICAgICAgICB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICAgICAgXCJzeW1ib2xcIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmIHdhcm5PblN5bWJvbFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB1cGRhdGVTbG90KHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGQsIGxhbmVzKSB7XG4gICAgICAgIHZhciBrZXkgPSBudWxsICE9PSBvbGRGaWJlciA/IG9sZEZpYmVyLmtleSA6IG51bGw7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmIFwiXCIgIT09IG5ld0NoaWxkKSB8fFxuICAgICAgICAgIFwibnVtYmVyXCIgPT09IHR5cGVvZiBuZXdDaGlsZCB8fFxuICAgICAgICAgIFwiYmlnaW50XCIgPT09IHR5cGVvZiBuZXdDaGlsZFxuICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIG51bGwgIT09IGtleVxuICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICA6IHVwZGF0ZVRleHROb2RlKHJldHVybkZpYmVyLCBvbGRGaWJlciwgXCJcIiArIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2YgbmV3Q2hpbGQgJiYgbnVsbCAhPT0gbmV3Q2hpbGQpIHtcbiAgICAgICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICAgICAgcmV0dXJuIG5ld0NoaWxkLmtleSA9PT0ga2V5XG4gICAgICAgICAgICAgICAgPyAoKGtleSA9IHB1c2hEZWJ1Z0luZm8obmV3Q2hpbGQuX2RlYnVnSW5mbykpLFxuICAgICAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gdXBkYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICAgIG9sZEZpYmVyLFxuICAgICAgICAgICAgICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgKGN1cnJlbnREZWJ1Z0luZm8gPSBrZXkpLFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIpXG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICAgICAgcmV0dXJuIG5ld0NoaWxkLmtleSA9PT0ga2V5XG4gICAgICAgICAgICAgICAgPyB1cGRhdGVQb3J0YWwocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpXG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgKGtleSA9IHB1c2hEZWJ1Z0luZm8obmV3Q2hpbGQuX2RlYnVnSW5mbykpLFxuICAgICAgICAgICAgICAgIChuZXdDaGlsZCA9IGNhbGxMYXp5SW5pdEluREVWKG5ld0NoaWxkKSksXG4gICAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gdXBkYXRlU2xvdChcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgb2xkRmliZXIsXG4gICAgICAgICAgICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgKGN1cnJlbnREZWJ1Z0luZm8gPSBrZXkpLFxuICAgICAgICAgICAgICAgIHJldHVybkZpYmVyXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc0FycmF5SW1wbChuZXdDaGlsZCkgfHwgZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpIHtcbiAgICAgICAgICAgIGlmIChudWxsICE9PSBrZXkpIHJldHVybiBudWxsO1xuICAgICAgICAgICAga2V5ID0gcHVzaERlYnVnSW5mbyhuZXdDaGlsZC5fZGVidWdJbmZvKTtcbiAgICAgICAgICAgIHJldHVybkZpYmVyID0gdXBkYXRlRnJhZ21lbnQoXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICBvbGRGaWJlcixcbiAgICAgICAgICAgICAgbmV3Q2hpbGQsXG4gICAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY3VycmVudERlYnVnSW5mbyA9IGtleTtcbiAgICAgICAgICAgIHJldHVybiByZXR1cm5GaWJlcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG5ld0NoaWxkLnRoZW4pXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAoa2V5ID0gcHVzaERlYnVnSW5mbyhuZXdDaGlsZC5fZGVidWdJbmZvKSksXG4gICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IHVwZGF0ZVNsb3QoXG4gICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgb2xkRmliZXIsXG4gICAgICAgICAgICAgICAgdW53cmFwVGhlbmFibGUobmV3Q2hpbGQpLFxuICAgICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAoY3VycmVudERlYnVnSW5mbyA9IGtleSksXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGlmIChuZXdDaGlsZC4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFKVxuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVNsb3QoXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICBvbGRGaWJlcixcbiAgICAgICAgICAgICAgcmVhZENvbnRleHREdXJpbmdSZWNvbmNpbGlhdGlvbihyZXR1cm5GaWJlciwgbmV3Q2hpbGQpLFxuICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBuZXdDaGlsZCAmJlxuICAgICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgICAgICBcInN5bWJvbFwiID09PSB0eXBlb2YgbmV3Q2hpbGQgJiYgd2Fybk9uU3ltYm9sVHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZUZyb21NYXAoXG4gICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4sXG4gICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICBuZXdJZHgsXG4gICAgICAgIG5ld0NoaWxkLFxuICAgICAgICBsYW5lc1xuICAgICAgKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmIFwiXCIgIT09IG5ld0NoaWxkKSB8fFxuICAgICAgICAgIFwibnVtYmVyXCIgPT09IHR5cGVvZiBuZXdDaGlsZCB8fFxuICAgICAgICAgIFwiYmlnaW50XCIgPT09IHR5cGVvZiBuZXdDaGlsZFxuICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChleGlzdGluZ0NoaWxkcmVuID0gZXhpc3RpbmdDaGlsZHJlbi5nZXQobmV3SWR4KSB8fCBudWxsKSxcbiAgICAgICAgICAgIHVwZGF0ZVRleHROb2RlKHJldHVybkZpYmVyLCBleGlzdGluZ0NoaWxkcmVuLCBcIlwiICsgbmV3Q2hpbGQsIGxhbmVzKVxuICAgICAgICAgICk7XG4gICAgICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2YgbmV3Q2hpbGQgJiYgbnVsbCAhPT0gbmV3Q2hpbGQpIHtcbiAgICAgICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAobmV3SWR4ID1cbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KFxuICAgICAgICAgICAgICAgICAgICBudWxsID09PSBuZXdDaGlsZC5rZXkgPyBuZXdJZHggOiBuZXdDaGlsZC5rZXlcbiAgICAgICAgICAgICAgICAgICkgfHwgbnVsbCksXG4gICAgICAgICAgICAgICAgKGV4aXN0aW5nQ2hpbGRyZW4gPSBwdXNoRGVidWdJbmZvKG5ld0NoaWxkLl9kZWJ1Z0luZm8pKSxcbiAgICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSB1cGRhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICBuZXdJZHgsXG4gICAgICAgICAgICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgKGN1cnJlbnREZWJ1Z0luZm8gPSBleGlzdGluZ0NoaWxkcmVuKSxcbiAgICAgICAgICAgICAgICByZXR1cm5GaWJlclxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAoZXhpc3RpbmdDaGlsZHJlbiA9XG4gICAgICAgICAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLmdldChcbiAgICAgICAgICAgICAgICAgICAgbnVsbCA9PT0gbmV3Q2hpbGQua2V5ID8gbmV3SWR4IDogbmV3Q2hpbGQua2V5XG4gICAgICAgICAgICAgICAgICApIHx8IG51bGwpLFxuICAgICAgICAgICAgICAgIHVwZGF0ZVBvcnRhbChyZXR1cm5GaWJlciwgZXhpc3RpbmdDaGlsZHJlbiwgbmV3Q2hpbGQsIGxhbmVzKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgIHZhciBfcHJldkRlYnVnSW5mbzcgPSBwdXNoRGVidWdJbmZvKG5ld0NoaWxkLl9kZWJ1Z0luZm8pO1xuICAgICAgICAgICAgICBuZXdDaGlsZCA9IGNhbGxMYXp5SW5pdEluREVWKG5ld0NoaWxkKTtcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIgPSB1cGRhdGVGcm9tTWFwKFxuICAgICAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgbmV3SWR4LFxuICAgICAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGN1cnJlbnREZWJ1Z0luZm8gPSBfcHJldkRlYnVnSW5mbzc7XG4gICAgICAgICAgICAgIHJldHVybiByZXR1cm5GaWJlcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGlzQXJyYXlJbXBsKG5ld0NoaWxkKSB8fCBnZXRJdGVyYXRvckZuKG5ld0NoaWxkKSlcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChuZXdJZHggPSBleGlzdGluZ0NoaWxkcmVuLmdldChuZXdJZHgpIHx8IG51bGwpLFxuICAgICAgICAgICAgICAoZXhpc3RpbmdDaGlsZHJlbiA9IHB1c2hEZWJ1Z0luZm8obmV3Q2hpbGQuX2RlYnVnSW5mbykpLFxuICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSB1cGRhdGVGcmFnbWVudChcbiAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICBuZXdJZHgsXG4gICAgICAgICAgICAgICAgbmV3Q2hpbGQsXG4gICAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgKGN1cnJlbnREZWJ1Z0luZm8gPSBleGlzdGluZ0NoaWxkcmVuKSxcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG5ld0NoaWxkLnRoZW4pXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAoX3ByZXZEZWJ1Z0luZm83ID0gcHVzaERlYnVnSW5mbyhuZXdDaGlsZC5fZGVidWdJbmZvKSksXG4gICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IHVwZGF0ZUZyb21NYXAoXG4gICAgICAgICAgICAgICAgZXhpc3RpbmdDaGlsZHJlbixcbiAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICBuZXdJZHgsXG4gICAgICAgICAgICAgICAgdW53cmFwVGhlbmFibGUobmV3Q2hpbGQpLFxuICAgICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAoY3VycmVudERlYnVnSW5mbyA9IF9wcmV2RGVidWdJbmZvNyksXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGlmIChuZXdDaGlsZC4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFKVxuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZUZyb21NYXAoXG4gICAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4sXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICBuZXdJZHgsXG4gICAgICAgICAgICAgIHJlYWRDb250ZXh0RHVyaW5nUmVjb25jaWxpYXRpb24ocmV0dXJuRmliZXIsIG5ld0NoaWxkKSxcbiAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgICAgIH1cbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbmV3Q2hpbGQgJiZcbiAgICAgICAgICB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICAgICAgXCJzeW1ib2xcIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmIHdhcm5PblN5bWJvbFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB3YXJuT25JbnZhbGlkS2V5KHJldHVybkZpYmVyLCB3b3JrSW5Qcm9ncmVzcywgY2hpbGQsIGtub3duS2V5cykge1xuICAgICAgICBpZiAoXCJvYmplY3RcIiAhPT0gdHlwZW9mIGNoaWxkIHx8IG51bGwgPT09IGNoaWxkKSByZXR1cm4ga25vd25LZXlzO1xuICAgICAgICBzd2l0Y2ggKGNoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICAgIHdhcm5Gb3JNaXNzaW5nS2V5KHJldHVybkZpYmVyLCB3b3JrSW5Qcm9ncmVzcywgY2hpbGQpO1xuICAgICAgICAgICAgdmFyIGtleSA9IGNoaWxkLmtleTtcbiAgICAgICAgICAgIGlmIChcInN0cmluZ1wiICE9PSB0eXBlb2Yga2V5KSBicmVhaztcbiAgICAgICAgICAgIGlmIChudWxsID09PSBrbm93bktleXMpIHtcbiAgICAgICAgICAgICAga25vd25LZXlzID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgICBrbm93bktleXMuYWRkKGtleSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFrbm93bktleXMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgICAga25vd25LZXlzLmFkZChrZXkpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKHdvcmtJblByb2dyZXNzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJFbmNvdW50ZXJlZCB0d28gY2hpbGRyZW4gd2l0aCB0aGUgc2FtZSBrZXksIGAlc2AuIEtleXMgc2hvdWxkIGJlIHVuaXF1ZSBzbyB0aGF0IGNvbXBvbmVudHMgbWFpbnRhaW4gdGhlaXIgaWRlbnRpdHkgYWNyb3NzIHVwZGF0ZXMuIE5vbi11bmlxdWUga2V5cyBtYXkgY2F1c2UgY2hpbGRyZW4gdG8gYmUgZHVwbGljYXRlZCBhbmQvb3Igb21pdHRlZCBcXHUyMDE0IHRoZSBiZWhhdmlvciBpcyB1bnN1cHBvcnRlZCBhbmQgY291bGQgY2hhbmdlIGluIGEgZnV0dXJlIHZlcnNpb24uXCIsXG4gICAgICAgICAgICAgICAga2V5XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgKGNoaWxkID0gY2FsbExhenlJbml0SW5ERVYoY2hpbGQpKSxcbiAgICAgICAgICAgICAgd2Fybk9uSW52YWxpZEtleShyZXR1cm5GaWJlciwgd29ya0luUHJvZ3Jlc3MsIGNoaWxkLCBrbm93bktleXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrbm93bktleXM7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbkFycmF5KFxuICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgIG5ld0NoaWxkcmVuLFxuICAgICAgICBsYW5lc1xuICAgICAgKSB7XG4gICAgICAgIGZvciAoXG4gICAgICAgICAgdmFyIGtub3duS2V5cyA9IG51bGwsXG4gICAgICAgICAgICByZXN1bHRpbmdGaXJzdENoaWxkID0gbnVsbCxcbiAgICAgICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBudWxsLFxuICAgICAgICAgICAgb2xkRmliZXIgPSBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICAgIG5ld0lkeCA9IChjdXJyZW50Rmlyc3RDaGlsZCA9IDApLFxuICAgICAgICAgICAgbmV4dE9sZEZpYmVyID0gbnVsbDtcbiAgICAgICAgICBudWxsICE9PSBvbGRGaWJlciAmJiBuZXdJZHggPCBuZXdDaGlsZHJlbi5sZW5ndGg7XG4gICAgICAgICAgbmV3SWR4KytcbiAgICAgICAgKSB7XG4gICAgICAgICAgb2xkRmliZXIuaW5kZXggPiBuZXdJZHhcbiAgICAgICAgICAgID8gKChuZXh0T2xkRmliZXIgPSBvbGRGaWJlciksIChvbGRGaWJlciA9IG51bGwpKVxuICAgICAgICAgICAgOiAobmV4dE9sZEZpYmVyID0gb2xkRmliZXIuc2libGluZyk7XG4gICAgICAgICAgdmFyIG5ld0ZpYmVyID0gdXBkYXRlU2xvdChcbiAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgb2xkRmliZXIsXG4gICAgICAgICAgICBuZXdDaGlsZHJlbltuZXdJZHhdLFxuICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChudWxsID09PSBuZXdGaWJlcikge1xuICAgICAgICAgICAgbnVsbCA9PT0gb2xkRmliZXIgJiYgKG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBrbm93bktleXMgPSB3YXJuT25JbnZhbGlkS2V5KFxuICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICBuZXdGaWJlcixcbiAgICAgICAgICAgIG5ld0NoaWxkcmVuW25ld0lkeF0sXG4gICAgICAgICAgICBrbm93bktleXNcbiAgICAgICAgICApO1xuICAgICAgICAgIHNob3VsZFRyYWNrU2lkZUVmZmVjdHMgJiZcbiAgICAgICAgICAgIG9sZEZpYmVyICYmXG4gICAgICAgICAgICBudWxsID09PSBuZXdGaWJlci5hbHRlcm5hdGUgJiZcbiAgICAgICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG4gICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQgPSBwbGFjZUNoaWxkKG5ld0ZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3SWR4KTtcbiAgICAgICAgICBudWxsID09PSBwcmV2aW91c05ld0ZpYmVyXG4gICAgICAgICAgICA/IChyZXN1bHRpbmdGaXJzdENoaWxkID0gbmV3RmliZXIpXG4gICAgICAgICAgICA6IChwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBuZXdGaWJlcik7XG4gICAgICAgICAgcHJldmlvdXNOZXdGaWJlciA9IG5ld0ZpYmVyO1xuICAgICAgICAgIG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZXdJZHggPT09IG5ld0NoaWxkcmVuLmxlbmd0aClcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIG9sZEZpYmVyKSxcbiAgICAgICAgICAgIGlzSHlkcmF0aW5nICYmIHB1c2hUcmVlRm9yayhyZXR1cm5GaWJlciwgbmV3SWR4KSxcbiAgICAgICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGRcbiAgICAgICAgICApO1xuICAgICAgICBpZiAobnVsbCA9PT0gb2xkRmliZXIpIHtcbiAgICAgICAgICBmb3IgKDsgbmV3SWR4IDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBuZXdJZHgrKylcbiAgICAgICAgICAgIChvbGRGaWJlciA9IGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCBuZXdDaGlsZHJlbltuZXdJZHhdLCBsYW5lcykpLFxuICAgICAgICAgICAgICBudWxsICE9PSBvbGRGaWJlciAmJlxuICAgICAgICAgICAgICAgICgoa25vd25LZXlzID0gd2Fybk9uSW52YWxpZEtleShcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgb2xkRmliZXIsXG4gICAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbltuZXdJZHhdLFxuICAgICAgICAgICAgICAgICAga25vd25LZXlzXG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgKGN1cnJlbnRGaXJzdENoaWxkID0gcGxhY2VDaGlsZChcbiAgICAgICAgICAgICAgICAgIG9sZEZpYmVyLFxuICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgICAgICAgICAgICBuZXdJZHhcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICBudWxsID09PSBwcmV2aW91c05ld0ZpYmVyXG4gICAgICAgICAgICAgICAgICA/IChyZXN1bHRpbmdGaXJzdENoaWxkID0gb2xkRmliZXIpXG4gICAgICAgICAgICAgICAgICA6IChwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBvbGRGaWJlciksXG4gICAgICAgICAgICAgICAgKHByZXZpb3VzTmV3RmliZXIgPSBvbGRGaWJlcikpO1xuICAgICAgICAgIGlzSHlkcmF0aW5nICYmIHB1c2hUcmVlRm9yayhyZXR1cm5GaWJlciwgbmV3SWR4KTtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKFxuICAgICAgICAgIG9sZEZpYmVyID0gbWFwUmVtYWluaW5nQ2hpbGRyZW4ob2xkRmliZXIpO1xuICAgICAgICAgIG5ld0lkeCA8IG5ld0NoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgICBuZXdJZHgrK1xuICAgICAgICApXG4gICAgICAgICAgKG5leHRPbGRGaWJlciA9IHVwZGF0ZUZyb21NYXAoXG4gICAgICAgICAgICBvbGRGaWJlcixcbiAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgbmV3SWR4LFxuICAgICAgICAgICAgbmV3Q2hpbGRyZW5bbmV3SWR4XSxcbiAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgKSksXG4gICAgICAgICAgICBudWxsICE9PSBuZXh0T2xkRmliZXIgJiZcbiAgICAgICAgICAgICAgKChrbm93bktleXMgPSB3YXJuT25JbnZhbGlkS2V5KFxuICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgIG5leHRPbGRGaWJlcixcbiAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbltuZXdJZHhdLFxuICAgICAgICAgICAgICAgIGtub3duS2V5c1xuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgc2hvdWxkVHJhY2tTaWRlRWZmZWN0cyAmJlxuICAgICAgICAgICAgICAgIG51bGwgIT09IG5leHRPbGRGaWJlci5hbHRlcm5hdGUgJiZcbiAgICAgICAgICAgICAgICBvbGRGaWJlci5kZWxldGUoXG4gICAgICAgICAgICAgICAgICBudWxsID09PSBuZXh0T2xkRmliZXIua2V5ID8gbmV3SWR4IDogbmV4dE9sZEZpYmVyLmtleVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIChjdXJyZW50Rmlyc3RDaGlsZCA9IHBsYWNlQ2hpbGQoXG4gICAgICAgICAgICAgICAgbmV4dE9sZEZpYmVyLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgICAgICAgIG5ld0lkeFxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgbnVsbCA9PT0gcHJldmlvdXNOZXdGaWJlclxuICAgICAgICAgICAgICAgID8gKHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBuZXh0T2xkRmliZXIpXG4gICAgICAgICAgICAgICAgOiAocHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gbmV4dE9sZEZpYmVyKSxcbiAgICAgICAgICAgICAgKHByZXZpb3VzTmV3RmliZXIgPSBuZXh0T2xkRmliZXIpKTtcbiAgICAgICAgc2hvdWxkVHJhY2tTaWRlRWZmZWN0cyAmJlxuICAgICAgICAgIG9sZEZpYmVyLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgaXNIeWRyYXRpbmcgJiYgcHVzaFRyZWVGb3JrKHJldHVybkZpYmVyLCBuZXdJZHgpO1xuICAgICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHJlY29uY2lsZUNoaWxkcmVuSXRlcmF0b3IoXG4gICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgbmV3Q2hpbGRyZW4sXG4gICAgICAgIGxhbmVzXG4gICAgICApIHtcbiAgICAgICAgaWYgKG51bGwgPT0gbmV3Q2hpbGRyZW4pXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJBbiBpdGVyYWJsZSBvYmplY3QgcHJvdmlkZWQgbm8gaXRlcmF0b3IuXCIpO1xuICAgICAgICBmb3IgKFxuICAgICAgICAgIHZhciByZXN1bHRpbmdGaXJzdENoaWxkID0gbnVsbCxcbiAgICAgICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBudWxsLFxuICAgICAgICAgICAgb2xkRmliZXIgPSBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICAgIG5ld0lkeCA9IChjdXJyZW50Rmlyc3RDaGlsZCA9IDApLFxuICAgICAgICAgICAgbmV4dE9sZEZpYmVyID0gbnVsbCxcbiAgICAgICAgICAgIGtub3duS2V5cyA9IG51bGwsXG4gICAgICAgICAgICBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpO1xuICAgICAgICAgIG51bGwgIT09IG9sZEZpYmVyICYmICFzdGVwLmRvbmU7XG4gICAgICAgICAgbmV3SWR4KyssIHN0ZXAgPSBuZXdDaGlsZHJlbi5uZXh0KClcbiAgICAgICAgKSB7XG4gICAgICAgICAgb2xkRmliZXIuaW5kZXggPiBuZXdJZHhcbiAgICAgICAgICAgID8gKChuZXh0T2xkRmliZXIgPSBvbGRGaWJlciksIChvbGRGaWJlciA9IG51bGwpKVxuICAgICAgICAgICAgOiAobmV4dE9sZEZpYmVyID0gb2xkRmliZXIuc2libGluZyk7XG4gICAgICAgICAgdmFyIG5ld0ZpYmVyID0gdXBkYXRlU2xvdChyZXR1cm5GaWJlciwgb2xkRmliZXIsIHN0ZXAudmFsdWUsIGxhbmVzKTtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gbmV3RmliZXIpIHtcbiAgICAgICAgICAgIG51bGwgPT09IG9sZEZpYmVyICYmIChvbGRGaWJlciA9IG5leHRPbGRGaWJlcik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAga25vd25LZXlzID0gd2Fybk9uSW52YWxpZEtleShcbiAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgbmV3RmliZXIsXG4gICAgICAgICAgICBzdGVwLnZhbHVlLFxuICAgICAgICAgICAga25vd25LZXlzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBzaG91bGRUcmFja1NpZGVFZmZlY3RzICYmXG4gICAgICAgICAgICBvbGRGaWJlciAmJlxuICAgICAgICAgICAgbnVsbCA9PT0gbmV3RmliZXIuYWx0ZXJuYXRlICYmXG4gICAgICAgICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgb2xkRmliZXIpO1xuICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkID0gcGxhY2VDaGlsZChuZXdGaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0lkeCk7XG4gICAgICAgICAgbnVsbCA9PT0gcHJldmlvdXNOZXdGaWJlclxuICAgICAgICAgICAgPyAocmVzdWx0aW5nRmlyc3RDaGlsZCA9IG5ld0ZpYmVyKVxuICAgICAgICAgICAgOiAocHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gbmV3RmliZXIpO1xuICAgICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBuZXdGaWJlcjtcbiAgICAgICAgICBvbGRGaWJlciA9IG5leHRPbGRGaWJlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RlcC5kb25lKVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgb2xkRmliZXIpLFxuICAgICAgICAgICAgaXNIeWRyYXRpbmcgJiYgcHVzaFRyZWVGb3JrKHJldHVybkZpYmVyLCBuZXdJZHgpLFxuICAgICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZFxuICAgICAgICAgICk7XG4gICAgICAgIGlmIChudWxsID09PSBvbGRGaWJlcikge1xuICAgICAgICAgIGZvciAoOyAhc3RlcC5kb25lOyBuZXdJZHgrKywgc3RlcCA9IG5ld0NoaWxkcmVuLm5leHQoKSlcbiAgICAgICAgICAgIChvbGRGaWJlciA9IGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCBzdGVwLnZhbHVlLCBsYW5lcykpLFxuICAgICAgICAgICAgICBudWxsICE9PSBvbGRGaWJlciAmJlxuICAgICAgICAgICAgICAgICgoa25vd25LZXlzID0gd2Fybk9uSW52YWxpZEtleShcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgb2xkRmliZXIsXG4gICAgICAgICAgICAgICAgICBzdGVwLnZhbHVlLFxuICAgICAgICAgICAgICAgICAga25vd25LZXlzXG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgKGN1cnJlbnRGaXJzdENoaWxkID0gcGxhY2VDaGlsZChcbiAgICAgICAgICAgICAgICAgIG9sZEZpYmVyLFxuICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgICAgICAgICAgICBuZXdJZHhcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICBudWxsID09PSBwcmV2aW91c05ld0ZpYmVyXG4gICAgICAgICAgICAgICAgICA/IChyZXN1bHRpbmdGaXJzdENoaWxkID0gb2xkRmliZXIpXG4gICAgICAgICAgICAgICAgICA6IChwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBvbGRGaWJlciksXG4gICAgICAgICAgICAgICAgKHByZXZpb3VzTmV3RmliZXIgPSBvbGRGaWJlcikpO1xuICAgICAgICAgIGlzSHlkcmF0aW5nICYmIHB1c2hUcmVlRm9yayhyZXR1cm5GaWJlciwgbmV3SWR4KTtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKFxuICAgICAgICAgIG9sZEZpYmVyID0gbWFwUmVtYWluaW5nQ2hpbGRyZW4ob2xkRmliZXIpO1xuICAgICAgICAgICFzdGVwLmRvbmU7XG4gICAgICAgICAgbmV3SWR4KyssIHN0ZXAgPSBuZXdDaGlsZHJlbi5uZXh0KClcbiAgICAgICAgKVxuICAgICAgICAgIChuZXh0T2xkRmliZXIgPSB1cGRhdGVGcm9tTWFwKFxuICAgICAgICAgICAgb2xkRmliZXIsXG4gICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgIG5ld0lkeCxcbiAgICAgICAgICAgIHN0ZXAudmFsdWUsXG4gICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICkpLFxuICAgICAgICAgICAgbnVsbCAhPT0gbmV4dE9sZEZpYmVyICYmXG4gICAgICAgICAgICAgICgoa25vd25LZXlzID0gd2Fybk9uSW52YWxpZEtleShcbiAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICBuZXh0T2xkRmliZXIsXG4gICAgICAgICAgICAgICAgc3RlcC52YWx1ZSxcbiAgICAgICAgICAgICAgICBrbm93bktleXNcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIHNob3VsZFRyYWNrU2lkZUVmZmVjdHMgJiZcbiAgICAgICAgICAgICAgICBudWxsICE9PSBuZXh0T2xkRmliZXIuYWx0ZXJuYXRlICYmXG4gICAgICAgICAgICAgICAgb2xkRmliZXIuZGVsZXRlKFxuICAgICAgICAgICAgICAgICAgbnVsbCA9PT0gbmV4dE9sZEZpYmVyLmtleSA/IG5ld0lkeCA6IG5leHRPbGRGaWJlci5rZXlcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAoY3VycmVudEZpcnN0Q2hpbGQgPSBwbGFjZUNoaWxkKFxuICAgICAgICAgICAgICAgIG5leHRPbGRGaWJlcixcbiAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICAgICAgICBuZXdJZHhcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIG51bGwgPT09IHByZXZpb3VzTmV3RmliZXJcbiAgICAgICAgICAgICAgICA/IChyZXN1bHRpbmdGaXJzdENoaWxkID0gbmV4dE9sZEZpYmVyKVxuICAgICAgICAgICAgICAgIDogKHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IG5leHRPbGRGaWJlciksXG4gICAgICAgICAgICAgIChwcmV2aW91c05ld0ZpYmVyID0gbmV4dE9sZEZpYmVyKSk7XG4gICAgICAgIHNob3VsZFRyYWNrU2lkZUVmZmVjdHMgJiZcbiAgICAgICAgICBvbGRGaWJlci5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICAgICAgcmV0dXJuIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIGlzSHlkcmF0aW5nICYmIHB1c2hUcmVlRm9yayhyZXR1cm5GaWJlciwgbmV3SWR4KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZEZpYmVyc0ltcGwoXG4gICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgbmV3Q2hpbGQsXG4gICAgICAgIGxhbmVzXG4gICAgICApIHtcbiAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmXG4gICAgICAgICAgbnVsbCAhPT0gbmV3Q2hpbGQgJiZcbiAgICAgICAgICBuZXdDaGlsZC50eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFICYmXG4gICAgICAgICAgbnVsbCA9PT0gbmV3Q2hpbGQua2V5ICYmXG4gICAgICAgICAgKHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhuZXdDaGlsZCwgbnVsbCwgcmV0dXJuRmliZXIpLFxuICAgICAgICAgIChuZXdDaGlsZCA9IG5ld0NoaWxkLnByb3BzLmNoaWxkcmVuKSk7XG4gICAgICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2YgbmV3Q2hpbGQgJiYgbnVsbCAhPT0gbmV3Q2hpbGQpIHtcbiAgICAgICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICAgICAgdmFyIHByZXZEZWJ1Z0luZm8gPSBwdXNoRGVidWdJbmZvKG5ld0NoaWxkLl9kZWJ1Z0luZm8pO1xuICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIga2V5ID0gbmV3Q2hpbGQua2V5OyBudWxsICE9PSBjdXJyZW50Rmlyc3RDaGlsZDsgKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZpcnN0Q2hpbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbmV3Q2hpbGQudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSkge1xuICAgICAgICAgICAgICAgICAgICAgIGlmICg3ID09PSBjdXJyZW50Rmlyc3RDaGlsZC50YWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQuc2libGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhbmVzID0gdXNlRmliZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdDaGlsZC5wcm9wcy5jaGlsZHJlblxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhbmVzLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFuZXMuX2RlYnVnT3duZXIgPSBuZXdDaGlsZC5fb3duZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYW5lcy5fZGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhuZXdDaGlsZCwgbGFuZXMsIHJldHVybkZpYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyID0gbGFuZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZC5lbGVtZW50VHlwZSA9PT0ga2V5IHx8XG4gICAgICAgICAgICAgICAgICAgICAgaXNDb21wYXRpYmxlRmFtaWx5Rm9ySG90UmVsb2FkaW5nKFxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDaGlsZFxuICAgICAgICAgICAgICAgICAgICAgICkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIGtleSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0ga2V5ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbExhenlJbml0SW5ERVYoa2V5KSA9PT0gY3VycmVudEZpcnN0Q2hpbGQudHlwZSlcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4oXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLnNpYmxpbmdcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIGxhbmVzID0gdXNlRmliZXIoY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLnByb3BzKTtcbiAgICAgICAgICAgICAgICAgICAgICBjb2VyY2VSZWYobGFuZXMsIG5ld0NoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICBsYW5lcy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICBsYW5lcy5fZGVidWdPd25lciA9IG5ld0NoaWxkLl9vd25lcjtcbiAgICAgICAgICAgICAgICAgICAgICBsYW5lcy5fZGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbztcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm5GaWJlciA9IGxhbmVzO1xuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKTtcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQuc2libGluZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbmV3Q2hpbGQudHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRVxuICAgICAgICAgICAgICAgICAgPyAoKGxhbmVzID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgbmV3Q2hpbGQucHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIubW9kZSxcbiAgICAgICAgICAgICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgICAgICAgICAgICBuZXdDaGlsZC5rZXlcbiAgICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgICAgIChsYW5lcy5yZXR1cm4gPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAgICAgICAgIChsYW5lcy5fZGVidWdPd25lciA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgICAgICAgICAgKGxhbmVzLl9kZWJ1Z1Rhc2sgPSByZXR1cm5GaWJlci5fZGVidWdUYXNrKSxcbiAgICAgICAgICAgICAgICAgICAgKGxhbmVzLl9kZWJ1Z0luZm8gPSBjdXJyZW50RGVidWdJbmZvKSxcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVGcmFnbWVudFByb3BzKG5ld0NoaWxkLCBsYW5lcywgcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSBsYW5lcykpXG4gICAgICAgICAgICAgICAgICA6ICgobGFuZXMgPSBjcmVhdGVGaWJlckZyb21FbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLm1vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgICAgIGNvZXJjZVJlZihsYW5lcywgbmV3Q2hpbGQpLFxuICAgICAgICAgICAgICAgICAgICAobGFuZXMucmV0dXJuID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICAgICAgICAobGFuZXMuX2RlYnVnSW5mbyA9IGN1cnJlbnREZWJ1Z0luZm8pLFxuICAgICAgICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSBsYW5lcykpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybkZpYmVyID0gcGxhY2VTaW5nbGVDaGlsZChyZXR1cm5GaWJlcik7XG4gICAgICAgICAgICAgIGN1cnJlbnREZWJ1Z0luZm8gPSBwcmV2RGVidWdJbmZvO1xuICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuRmliZXI7XG4gICAgICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgcHJldkRlYnVnSW5mbyA9IG5ld0NoaWxkO1xuICAgICAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgICBuZXdDaGlsZCA9IHByZXZEZWJ1Z0luZm8ua2V5O1xuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudEZpcnN0Q2hpbGQ7XG5cbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Rmlyc3RDaGlsZC5rZXkgPT09IG5ld0NoaWxkKVxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgNCA9PT0gY3VycmVudEZpcnN0Q2hpbGQudGFnICYmXG4gICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8gPT09XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2RGVidWdJbmZvLmNvbnRhaW5lckluZm8gJiZcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZC5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24gPT09XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2RGVidWdJbmZvLmltcGxlbWVudGF0aW9uXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZC5zaWJsaW5nXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICBsYW5lcyA9IHVzZUZpYmVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2RGVidWdJbmZvLmNoaWxkcmVuIHx8IFtdXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICBsYW5lcy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm5GaWJlciA9IGxhbmVzO1xuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZWxzZSBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpO1xuICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQgPSBjdXJyZW50Rmlyc3RDaGlsZC5zaWJsaW5nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsYW5lcyA9IGNyZWF0ZUZpYmVyRnJvbVBvcnRhbChcbiAgICAgICAgICAgICAgICAgIHByZXZEZWJ1Z0luZm8sXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlci5tb2RlLFxuICAgICAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGxhbmVzLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICAgICAgICAgIHJldHVybkZpYmVyID0gbGFuZXM7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHBsYWNlU2luZ2xlQ2hpbGQocmV0dXJuRmliZXIpO1xuICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgKHByZXZEZWJ1Z0luZm8gPSBwdXNoRGVidWdJbmZvKG5ld0NoaWxkLl9kZWJ1Z0luZm8pKSxcbiAgICAgICAgICAgICAgICAobmV3Q2hpbGQgPSBjYWxsTGF6eUluaXRJbkRFVihuZXdDaGlsZCkpLFxuICAgICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IHJlY29uY2lsZUNoaWxkRmliZXJzSW1wbChcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgICAgICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgKGN1cnJlbnREZWJ1Z0luZm8gPSBwcmV2RGVidWdJbmZvKSxcbiAgICAgICAgICAgICAgICByZXR1cm5GaWJlclxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNBcnJheUltcGwobmV3Q2hpbGQpKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKHByZXZEZWJ1Z0luZm8gPSBwdXNoRGVidWdJbmZvKG5ld0NoaWxkLl9kZWJ1Z0luZm8pKSxcbiAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gcmVjb25jaWxlQ2hpbGRyZW5BcnJheShcbiAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgKGN1cnJlbnREZWJ1Z0luZm8gPSBwcmV2RGVidWdJbmZvKSxcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKSB7XG4gICAgICAgICAgICBwcmV2RGVidWdJbmZvID0gcHVzaERlYnVnSW5mbyhuZXdDaGlsZC5fZGVidWdJbmZvKTtcbiAgICAgICAgICAgIGtleSA9IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpO1xuICAgICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGtleSlcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJBbiBvYmplY3QgaXMgbm90IGFuIGl0ZXJhYmxlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB2YXIgbmV3Q2hpbGRyZW4gPSBrZXkuY2FsbChuZXdDaGlsZCk7XG4gICAgICAgICAgICBpZiAobmV3Q2hpbGRyZW4gPT09IG5ld0NoaWxkKSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAwICE9PSByZXR1cm5GaWJlci50YWcgfHxcbiAgICAgICAgICAgICAgICBcIltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dXCIgIT09XG4gICAgICAgICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocmV0dXJuRmliZXIudHlwZSkgfHxcbiAgICAgICAgICAgICAgICBcIltvYmplY3QgR2VuZXJhdG9yXVwiICE9PVxuICAgICAgICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5ld0NoaWxkcmVuKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgZGlkV2FybkFib3V0R2VuZXJhdG9ycyB8fFxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgXCJVc2luZyBJdGVyYXRvcnMgYXMgY2hpbGRyZW4gaXMgdW5zdXBwb3J0ZWQgYW5kIHdpbGwgbGlrZWx5IHlpZWxkIHVuZXhwZWN0ZWQgcmVzdWx0cyBiZWNhdXNlIGVudW1lcmF0aW5nIGEgZ2VuZXJhdG9yIG11dGF0ZXMgaXQuIFlvdSBtYXkgY29udmVydCBpdCB0byBhbiBhcnJheSB3aXRoIGBBcnJheS5mcm9tKClgIG9yIHRoZSBgWy4uLnNwcmVhZF1gIG9wZXJhdG9yIGJlZm9yZSByZW5kZXJpbmcuIFlvdSBjYW4gYWxzbyB1c2UgYW4gSXRlcmFibGUgdGhhdCBjYW4gaXRlcmF0ZSBtdWx0aXBsZSB0aW1lcyBvdmVyIHRoZSBzYW1lIGl0ZW1zLlwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgKGRpZFdhcm5BYm91dEdlbmVyYXRvcnMgPSAhMCk7XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgbmV3Q2hpbGQuZW50cmllcyAhPT0ga2V5IHx8XG4gICAgICAgICAgICAgICAgZGlkV2FybkFib3V0TWFwcyB8fFxuICAgICAgICAgICAgICAgIChjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgXCJVc2luZyBNYXBzIGFzIGNoaWxkcmVuIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhbiBhcnJheSBvZiBrZXllZCBSZWFjdEVsZW1lbnRzIGluc3RlYWQuXCJcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIChkaWRXYXJuQWJvdXRNYXBzID0gITApKTtcbiAgICAgICAgICAgIHJldHVybkZpYmVyID0gcmVjb25jaWxlQ2hpbGRyZW5JdGVyYXRvcihcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgICAgICBuZXdDaGlsZHJlbixcbiAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjdXJyZW50RGVidWdJbmZvID0gcHJldkRlYnVnSW5mbztcbiAgICAgICAgICAgIHJldHVybiByZXR1cm5GaWJlcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG5ld0NoaWxkLnRoZW4pXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAocHJldkRlYnVnSW5mbyA9IHB1c2hEZWJ1Z0luZm8obmV3Q2hpbGQuX2RlYnVnSW5mbykpLFxuICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSByZWNvbmNpbGVDaGlsZEZpYmVyc0ltcGwoXG4gICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgICAgICAgICAgdW53cmFwVGhlbmFibGUobmV3Q2hpbGQpLFxuICAgICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAoY3VycmVudERlYnVnSW5mbyA9IHByZXZEZWJ1Z0luZm8pLFxuICAgICAgICAgICAgICByZXR1cm5GaWJlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBpZiAobmV3Q2hpbGQuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSlcbiAgICAgICAgICAgIHJldHVybiByZWNvbmNpbGVDaGlsZEZpYmVyc0ltcGwoXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICAgICAgcmVhZENvbnRleHREdXJpbmdSZWNvbmNpbGlhdGlvbihyZXR1cm5GaWJlciwgbmV3Q2hpbGQpLFxuICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBuZXdDaGlsZCAmJiBcIlwiICE9PSBuZXdDaGlsZCkgfHxcbiAgICAgICAgICBcIm51bWJlclwiID09PSB0eXBlb2YgbmV3Q2hpbGQgfHxcbiAgICAgICAgICBcImJpZ2ludFwiID09PSB0eXBlb2YgbmV3Q2hpbGRcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAocHJldkRlYnVnSW5mbyA9IFwiXCIgKyBuZXdDaGlsZCksXG4gICAgICAgICAgICBudWxsICE9PSBjdXJyZW50Rmlyc3RDaGlsZCAmJiA2ID09PSBjdXJyZW50Rmlyc3RDaGlsZC50YWdcbiAgICAgICAgICAgICAgPyAoZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4oXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLnNpYmxpbmdcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIChsYW5lcyA9IHVzZUZpYmVyKGN1cnJlbnRGaXJzdENoaWxkLCBwcmV2RGVidWdJbmZvKSksXG4gICAgICAgICAgICAgICAgKGxhbmVzLnJldHVybiA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSBsYW5lcykpXG4gICAgICAgICAgICAgIDogKGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCksXG4gICAgICAgICAgICAgICAgKGxhbmVzID0gY3JlYXRlRmliZXJGcm9tVGV4dChcbiAgICAgICAgICAgICAgICAgIHByZXZEZWJ1Z0luZm8sXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlci5tb2RlLFxuICAgICAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAobGFuZXMucmV0dXJuID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICAgIChsYW5lcy5fZGVidWdPd25lciA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgICAgICAobGFuZXMuX2RlYnVnVGFzayA9IHJldHVybkZpYmVyLl9kZWJ1Z1Rhc2spLFxuICAgICAgICAgICAgICAgIChsYW5lcy5fZGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbyksXG4gICAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gbGFuZXMpKSxcbiAgICAgICAgICAgIHBsYWNlU2luZ2xlQ2hpbGQocmV0dXJuRmliZXIpXG4gICAgICAgICAgKTtcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbmV3Q2hpbGQgJiZcbiAgICAgICAgICB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICAgICAgXCJzeW1ib2xcIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmIHdhcm5PblN5bWJvbFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICAgICAgcmV0dXJuIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGQsIGxhbmVzKSB7XG4gICAgICAgIHZhciBwcmV2RGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbztcbiAgICAgICAgY3VycmVudERlYnVnSW5mbyA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbmFibGVJbmRleENvdW50ZXIkMSA9IDA7XG4gICAgICAgICAgdmFyIGZpcnN0Q2hpbGRGaWJlciA9IHJlY29uY2lsZUNoaWxkRmliZXJzSW1wbChcbiAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGVuYWJsZVN0YXRlJDEgPSBudWxsO1xuICAgICAgICAgIHJldHVybiBmaXJzdENoaWxkRmliZXI7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBpZiAoeCA9PT0gU3VzcGVuc2VFeGNlcHRpb24gfHwgeCA9PT0gU3VzcGVuc2VBY3Rpb25FeGNlcHRpb24pIHRocm93IHg7XG4gICAgICAgICAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoMjksIHgsIG51bGwsIHJldHVybkZpYmVyLm1vZGUpO1xuICAgICAgICAgIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gICAgICAgICAgZmliZXIucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgdmFyIGRlYnVnSW5mbyA9IChmaWJlci5fZGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbyk7XG4gICAgICAgICAgZmliZXIuX2RlYnVnT3duZXIgPSByZXR1cm5GaWJlci5fZGVidWdPd25lcjtcbiAgICAgICAgICBmaWJlci5fZGVidWdUYXNrID0gcmV0dXJuRmliZXIuX2RlYnVnVGFzaztcbiAgICAgICAgICBpZiAobnVsbCAhPSBkZWJ1Z0luZm8pXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gZGVidWdJbmZvLmxlbmd0aCAtIDE7IDAgPD0gaTsgaS0tKVxuICAgICAgICAgICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGRlYnVnSW5mb1tpXS5zdGFjaykge1xuICAgICAgICAgICAgICAgIGZpYmVyLl9kZWJ1Z093bmVyID0gZGVidWdJbmZvW2ldO1xuICAgICAgICAgICAgICAgIGZpYmVyLl9kZWJ1Z1Rhc2sgPSBkZWJ1Z0luZm9baV0uZGVidWdUYXNrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZpYmVyO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGN1cnJlbnREZWJ1Z0luZm8gPSBwcmV2RGVidWdJbmZvO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZVN1c3BlbnNlTGlzdE5lc3RlZENoaWxkKGNoaWxkU2xvdCwgaW5kZXgpIHtcbiAgICAgIHZhciBpc0FuQXJyYXkgPSBpc0FycmF5SW1wbChjaGlsZFNsb3QpO1xuICAgICAgY2hpbGRTbG90ID0gIWlzQW5BcnJheSAmJiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBnZXRJdGVyYXRvckZuKGNoaWxkU2xvdCk7XG4gICAgICByZXR1cm4gaXNBbkFycmF5IHx8IGNoaWxkU2xvdFxuICAgICAgICA/ICgoaXNBbkFycmF5ID0gaXNBbkFycmF5ID8gXCJhcnJheVwiIDogXCJpdGVyYWJsZVwiKSxcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJBIG5lc3RlZCAlcyB3YXMgcGFzc2VkIHRvIHJvdyAjJXMgaW4gPFN1c3BlbnNlTGlzdCAvPi4gV3JhcCBpdCBpbiBhbiBhZGRpdGlvbmFsIFN1c3BlbnNlTGlzdCB0byBjb25maWd1cmUgaXRzIHJldmVhbE9yZGVyOiA8U3VzcGVuc2VMaXN0IHJldmVhbE9yZGVyPS4uLj4gLi4uIDxTdXNwZW5zZUxpc3QgcmV2ZWFsT3JkZXI9Li4uPnslc308L1N1c3BlbnNlTGlzdD4gLi4uIDwvU3VzcGVuc2VMaXN0PlwiLFxuICAgICAgICAgICAgaXNBbkFycmF5LFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBpc0FuQXJyYXlcbiAgICAgICAgICApLFxuICAgICAgICAgICExKVxuICAgICAgICA6ICEwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbml0aWFsaXplVXBkYXRlUXVldWUoZmliZXIpIHtcbiAgICAgIGZpYmVyLnVwZGF0ZVF1ZXVlID0ge1xuICAgICAgICBiYXNlU3RhdGU6IGZpYmVyLm1lbW9pemVkU3RhdGUsXG4gICAgICAgIGZpcnN0QmFzZVVwZGF0ZTogbnVsbCxcbiAgICAgICAgbGFzdEJhc2VVcGRhdGU6IG51bGwsXG4gICAgICAgIHNoYXJlZDogeyBwZW5kaW5nOiBudWxsLCBsYW5lczogMCwgaGlkZGVuQ2FsbGJhY2tzOiBudWxsIH0sXG4gICAgICAgIGNhbGxiYWNrczogbnVsbFxuICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2xvbmVVcGRhdGVRdWV1ZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgY3VycmVudCA9IGN1cnJlbnQudXBkYXRlUXVldWU7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9PT0gY3VycmVudCAmJlxuICAgICAgICAod29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSB7XG4gICAgICAgICAgYmFzZVN0YXRlOiBjdXJyZW50LmJhc2VTdGF0ZSxcbiAgICAgICAgICBmaXJzdEJhc2VVcGRhdGU6IGN1cnJlbnQuZmlyc3RCYXNlVXBkYXRlLFxuICAgICAgICAgIGxhc3RCYXNlVXBkYXRlOiBjdXJyZW50Lmxhc3RCYXNlVXBkYXRlLFxuICAgICAgICAgIHNoYXJlZDogY3VycmVudC5zaGFyZWQsXG4gICAgICAgICAgY2FsbGJhY2tzOiBudWxsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVVcGRhdGUobGFuZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGFuZTogbGFuZSxcbiAgICAgICAgdGFnOiBVcGRhdGVTdGF0ZSxcbiAgICAgICAgcGF5bG9hZDogbnVsbCxcbiAgICAgICAgY2FsbGJhY2s6IG51bGwsXG4gICAgICAgIG5leHQ6IG51bGxcbiAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSwgbGFuZSkge1xuICAgICAgdmFyIHVwZGF0ZVF1ZXVlID0gZmliZXIudXBkYXRlUXVldWU7XG4gICAgICBpZiAobnVsbCA9PT0gdXBkYXRlUXVldWUpIHJldHVybiBudWxsO1xuICAgICAgdXBkYXRlUXVldWUgPSB1cGRhdGVRdWV1ZS5zaGFyZWQ7XG4gICAgICBpZiAoXG4gICAgICAgIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9PT0gdXBkYXRlUXVldWUgJiZcbiAgICAgICAgIWRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGVcbiAgICAgICkge1xuICAgICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpO1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiQW4gdXBkYXRlIChzZXRTdGF0ZSwgcmVwbGFjZVN0YXRlLCBvciBmb3JjZVVwZGF0ZSkgd2FzIHNjaGVkdWxlZCBmcm9tIGluc2lkZSBhbiB1cGRhdGUgZnVuY3Rpb24uIFVwZGF0ZSBmdW5jdGlvbnMgc2hvdWxkIGJlIHB1cmUsIHdpdGggemVybyBzaWRlLWVmZmVjdHMuIENvbnNpZGVyIHVzaW5nIGNvbXBvbmVudERpZFVwZGF0ZSBvciBhIGNhbGxiYWNrLlxcblxcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnQ6ICVzXCIsXG4gICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgICAgICApO1xuICAgICAgICBkaWRXYXJuVXBkYXRlSW5zaWRlVXBkYXRlID0gITA7XG4gICAgICB9XG4gICAgICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiBSZW5kZXJDb250ZXh0KSAhPT0gTm9Db250ZXh0KVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIChjb21wb25lbnROYW1lID0gdXBkYXRlUXVldWUucGVuZGluZyksXG4gICAgICAgICAgbnVsbCA9PT0gY29tcG9uZW50TmFtZVxuICAgICAgICAgICAgPyAodXBkYXRlLm5leHQgPSB1cGRhdGUpXG4gICAgICAgICAgICA6ICgodXBkYXRlLm5leHQgPSBjb21wb25lbnROYW1lLm5leHQpLFxuICAgICAgICAgICAgICAoY29tcG9uZW50TmFtZS5uZXh0ID0gdXBkYXRlKSksXG4gICAgICAgICAgKHVwZGF0ZVF1ZXVlLnBlbmRpbmcgPSB1cGRhdGUpLFxuICAgICAgICAgICh1cGRhdGUgPSBnZXRSb290Rm9yVXBkYXRlZEZpYmVyKGZpYmVyKSksXG4gICAgICAgICAgbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3QoZmliZXIsIG51bGwsIGxhbmUpLFxuICAgICAgICAgIHVwZGF0ZVxuICAgICAgICApO1xuICAgICAgZW5xdWV1ZVVwZGF0ZSQxKGZpYmVyLCB1cGRhdGVRdWV1ZSwgdXBkYXRlLCBsYW5lKTtcbiAgICAgIHJldHVybiBnZXRSb290Rm9yVXBkYXRlZEZpYmVyKGZpYmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZW50YW5nbGVUcmFuc2l0aW9ucyhyb290LCBmaWJlciwgbGFuZSkge1xuICAgICAgZmliZXIgPSBmaWJlci51cGRhdGVRdWV1ZTtcbiAgICAgIGlmIChudWxsICE9PSBmaWJlciAmJiAoKGZpYmVyID0gZmliZXIuc2hhcmVkKSwgMCAhPT0gKGxhbmUgJiA0MTk0MDQ4KSkpIHtcbiAgICAgICAgdmFyIHF1ZXVlTGFuZXMgPSBmaWJlci5sYW5lcztcbiAgICAgICAgcXVldWVMYW5lcyAmPSByb290LnBlbmRpbmdMYW5lcztcbiAgICAgICAgbGFuZSB8PSBxdWV1ZUxhbmVzO1xuICAgICAgICBmaWJlci5sYW5lcyA9IGxhbmU7XG4gICAgICAgIG1hcmtSb290RW50YW5nbGVkKHJvb3QsIGxhbmUpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBlbnF1ZXVlQ2FwdHVyZWRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIGNhcHR1cmVkVXBkYXRlKSB7XG4gICAgICB2YXIgcXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSxcbiAgICAgICAgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZTtcbiAgICAgIGlmIChcbiAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAoKGN1cnJlbnQgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlKSwgcXVldWUgPT09IGN1cnJlbnQpXG4gICAgICApIHtcbiAgICAgICAgdmFyIG5ld0ZpcnN0ID0gbnVsbCxcbiAgICAgICAgICBuZXdMYXN0ID0gbnVsbDtcbiAgICAgICAgcXVldWUgPSBxdWV1ZS5maXJzdEJhc2VVcGRhdGU7XG4gICAgICAgIGlmIChudWxsICE9PSBxdWV1ZSkge1xuICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgIHZhciBjbG9uZSA9IHtcbiAgICAgICAgICAgICAgbGFuZTogcXVldWUubGFuZSxcbiAgICAgICAgICAgICAgdGFnOiBxdWV1ZS50YWcsXG4gICAgICAgICAgICAgIHBheWxvYWQ6IHF1ZXVlLnBheWxvYWQsXG4gICAgICAgICAgICAgIGNhbGxiYWNrOiBudWxsLFxuICAgICAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbnVsbCA9PT0gbmV3TGFzdFxuICAgICAgICAgICAgICA/IChuZXdGaXJzdCA9IG5ld0xhc3QgPSBjbG9uZSlcbiAgICAgICAgICAgICAgOiAobmV3TGFzdCA9IG5ld0xhc3QubmV4dCA9IGNsb25lKTtcbiAgICAgICAgICAgIHF1ZXVlID0gcXVldWUubmV4dDtcbiAgICAgICAgICB9IHdoaWxlIChudWxsICE9PSBxdWV1ZSk7XG4gICAgICAgICAgbnVsbCA9PT0gbmV3TGFzdFxuICAgICAgICAgICAgPyAobmV3Rmlyc3QgPSBuZXdMYXN0ID0gY2FwdHVyZWRVcGRhdGUpXG4gICAgICAgICAgICA6IChuZXdMYXN0ID0gbmV3TGFzdC5uZXh0ID0gY2FwdHVyZWRVcGRhdGUpO1xuICAgICAgICB9IGVsc2UgbmV3Rmlyc3QgPSBuZXdMYXN0ID0gY2FwdHVyZWRVcGRhdGU7XG4gICAgICAgIHF1ZXVlID0ge1xuICAgICAgICAgIGJhc2VTdGF0ZTogY3VycmVudC5iYXNlU3RhdGUsXG4gICAgICAgICAgZmlyc3RCYXNlVXBkYXRlOiBuZXdGaXJzdCxcbiAgICAgICAgICBsYXN0QmFzZVVwZGF0ZTogbmV3TGFzdCxcbiAgICAgICAgICBzaGFyZWQ6IGN1cnJlbnQuc2hhcmVkLFxuICAgICAgICAgIGNhbGxiYWNrczogY3VycmVudC5jYWxsYmFja3NcbiAgICAgICAgfTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgd29ya0luUHJvZ3Jlc3MgPSBxdWV1ZS5sYXN0QmFzZVVwZGF0ZTtcbiAgICAgIG51bGwgPT09IHdvcmtJblByb2dyZXNzXG4gICAgICAgID8gKHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZSA9IGNhcHR1cmVkVXBkYXRlKVxuICAgICAgICA6ICh3b3JrSW5Qcm9ncmVzcy5uZXh0ID0gY2FwdHVyZWRVcGRhdGUpO1xuICAgICAgcXVldWUubGFzdEJhc2VVcGRhdGUgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3VzcGVuZElmVXBkYXRlUmVhZEZyb21FbnRhbmdsZWRBc3luY0FjdGlvbigpIHtcbiAgICAgIGlmIChkaWRSZWFkRnJvbUVudGFuZ2xlZEFzeW5jQWN0aW9uKSB7XG4gICAgICAgIHZhciBlbnRhbmdsZWRBY3Rpb25UaGVuYWJsZSA9IGN1cnJlbnRFbnRhbmdsZWRBY3Rpb25UaGVuYWJsZTtcbiAgICAgICAgaWYgKG51bGwgIT09IGVudGFuZ2xlZEFjdGlvblRoZW5hYmxlKSB0aHJvdyBlbnRhbmdsZWRBY3Rpb25UaGVuYWJsZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcHJvY2Vzc1VwZGF0ZVF1ZXVlKFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBwcm9wcyxcbiAgICAgIGluc3RhbmNlJGpzY29tcCQwLFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIGRpZFJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24gPSAhMTtcbiAgICAgIHZhciBxdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuICAgICAgaGFzRm9yY2VVcGRhdGUgPSAhMTtcbiAgICAgIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9IHF1ZXVlLnNoYXJlZDtcbiAgICAgIHZhciBmaXJzdEJhc2VVcGRhdGUgPSBxdWV1ZS5maXJzdEJhc2VVcGRhdGUsXG4gICAgICAgIGxhc3RCYXNlVXBkYXRlID0gcXVldWUubGFzdEJhc2VVcGRhdGUsXG4gICAgICAgIHBlbmRpbmdRdWV1ZSA9IHF1ZXVlLnNoYXJlZC5wZW5kaW5nO1xuICAgICAgaWYgKG51bGwgIT09IHBlbmRpbmdRdWV1ZSkge1xuICAgICAgICBxdWV1ZS5zaGFyZWQucGVuZGluZyA9IG51bGw7XG4gICAgICAgIHZhciBsYXN0UGVuZGluZ1VwZGF0ZSA9IHBlbmRpbmdRdWV1ZSxcbiAgICAgICAgICBmaXJzdFBlbmRpbmdVcGRhdGUgPSBsYXN0UGVuZGluZ1VwZGF0ZS5uZXh0O1xuICAgICAgICBsYXN0UGVuZGluZ1VwZGF0ZS5uZXh0ID0gbnVsbDtcbiAgICAgICAgbnVsbCA9PT0gbGFzdEJhc2VVcGRhdGVcbiAgICAgICAgICA/IChmaXJzdEJhc2VVcGRhdGUgPSBmaXJzdFBlbmRpbmdVcGRhdGUpXG4gICAgICAgICAgOiAobGFzdEJhc2VVcGRhdGUubmV4dCA9IGZpcnN0UGVuZGluZ1VwZGF0ZSk7XG4gICAgICAgIGxhc3RCYXNlVXBkYXRlID0gbGFzdFBlbmRpbmdVcGRhdGU7XG4gICAgICAgIHZhciBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlO1xuICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgKChjdXJyZW50ID0gY3VycmVudC51cGRhdGVRdWV1ZSksXG4gICAgICAgICAgKHBlbmRpbmdRdWV1ZSA9IGN1cnJlbnQubGFzdEJhc2VVcGRhdGUpLFxuICAgICAgICAgIHBlbmRpbmdRdWV1ZSAhPT0gbGFzdEJhc2VVcGRhdGUgJiZcbiAgICAgICAgICAgIChudWxsID09PSBwZW5kaW5nUXVldWVcbiAgICAgICAgICAgICAgPyAoY3VycmVudC5maXJzdEJhc2VVcGRhdGUgPSBmaXJzdFBlbmRpbmdVcGRhdGUpXG4gICAgICAgICAgICAgIDogKHBlbmRpbmdRdWV1ZS5uZXh0ID0gZmlyc3RQZW5kaW5nVXBkYXRlKSxcbiAgICAgICAgICAgIChjdXJyZW50Lmxhc3RCYXNlVXBkYXRlID0gbGFzdFBlbmRpbmdVcGRhdGUpKSk7XG4gICAgICB9XG4gICAgICBpZiAobnVsbCAhPT0gZmlyc3RCYXNlVXBkYXRlKSB7XG4gICAgICAgIHZhciBuZXdTdGF0ZSA9IHF1ZXVlLmJhc2VTdGF0ZTtcbiAgICAgICAgbGFzdEJhc2VVcGRhdGUgPSAwO1xuICAgICAgICBjdXJyZW50ID0gZmlyc3RQZW5kaW5nVXBkYXRlID0gbGFzdFBlbmRpbmdVcGRhdGUgPSBudWxsO1xuICAgICAgICBwZW5kaW5nUXVldWUgPSBmaXJzdEJhc2VVcGRhdGU7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICB2YXIgdXBkYXRlTGFuZSA9IHBlbmRpbmdRdWV1ZS5sYW5lICYgLTUzNjg3MDkxMyxcbiAgICAgICAgICAgIGlzSGlkZGVuVXBkYXRlID0gdXBkYXRlTGFuZSAhPT0gcGVuZGluZ1F1ZXVlLmxhbmU7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaXNIaWRkZW5VcGRhdGVcbiAgICAgICAgICAgICAgPyAod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiB1cGRhdGVMYW5lKSA9PT0gdXBkYXRlTGFuZVxuICAgICAgICAgICAgICA6IChyZW5kZXJMYW5lcyAmIHVwZGF0ZUxhbmUpID09PSB1cGRhdGVMYW5lXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAwICE9PSB1cGRhdGVMYW5lICYmXG4gICAgICAgICAgICAgIHVwZGF0ZUxhbmUgPT09IGN1cnJlbnRFbnRhbmdsZWRMYW5lICYmXG4gICAgICAgICAgICAgIChkaWRSZWFkRnJvbUVudGFuZ2xlZEFzeW5jQWN0aW9uID0gITApO1xuICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAgICAgICAoY3VycmVudCA9IGN1cnJlbnQubmV4dCA9XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbGFuZTogMCxcbiAgICAgICAgICAgICAgICAgIHRhZzogcGVuZGluZ1F1ZXVlLnRhZyxcbiAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IHBlbmRpbmdRdWV1ZS5wYXlsb2FkLFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IG51bGwsXG4gICAgICAgICAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgIHVwZGF0ZUxhbmUgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgICAgICAgdmFyIHBhcnRpYWxTdGF0ZSA9IHBlbmRpbmdRdWV1ZTtcbiAgICAgICAgICAgICAgdmFyIG5leHRQcm9wcyA9IHByb3BzLFxuICAgICAgICAgICAgICAgIGluc3RhbmNlID0gaW5zdGFuY2UkanNjb21wJDA7XG4gICAgICAgICAgICAgIHN3aXRjaCAocGFydGlhbFN0YXRlLnRhZykge1xuICAgICAgICAgICAgICAgIGNhc2UgUmVwbGFjZVN0YXRlOlxuICAgICAgICAgICAgICAgICAgcGFydGlhbFN0YXRlID0gcGFydGlhbFN0YXRlLnBheWxvYWQ7XG4gICAgICAgICAgICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcGFydGlhbFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYgPSAhMDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRTdGF0ZSA9IHBhcnRpYWxTdGF0ZS5jYWxsKFxuICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgICAgICAgICAgICAgIG5ld1N0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgIG5leHRQcm9wc1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAodXBkYXRlTGFuZS5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCEwKTtcbiAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydGlhbFN0YXRlLmNhbGwoaW5zdGFuY2UsIG5ld1N0YXRlLCBuZXh0UHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMSk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYgPSAhMTtcbiAgICAgICAgICAgICAgICAgICAgbmV3U3RhdGUgPSBuZXh0U3RhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBuZXdTdGF0ZSA9IHBhcnRpYWxTdGF0ZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgY2FzZSBDYXB0dXJlVXBkYXRlOlxuICAgICAgICAgICAgICAgICAgdXBkYXRlTGFuZS5mbGFncyA9ICh1cGRhdGVMYW5lLmZsYWdzICYgLTY1NTM3KSB8IDEyODtcbiAgICAgICAgICAgICAgICBjYXNlIFVwZGF0ZVN0YXRlOlxuICAgICAgICAgICAgICAgICAgbmV4dFN0YXRlID0gcGFydGlhbFN0YXRlLnBheWxvYWQ7XG4gICAgICAgICAgICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbmV4dFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYgPSAhMDtcbiAgICAgICAgICAgICAgICAgICAgcGFydGlhbFN0YXRlID0gbmV4dFN0YXRlLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgbmV3U3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgbmV4dFByb3BzXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1cGRhdGVMYW5lLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITApO1xuICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0U3RhdGUuY2FsbChpbnN0YW5jZSwgbmV3U3RhdGUsIG5leHRQcm9wcyk7XG4gICAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCExKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA9ICExO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHBhcnRpYWxTdGF0ZSA9IG5leHRTdGF0ZTtcbiAgICAgICAgICAgICAgICAgIGlmIChudWxsID09PSBwYXJ0aWFsU3RhdGUgfHwgdm9pZCAwID09PSBwYXJ0aWFsU3RhdGUpIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgICBuZXdTdGF0ZSA9IGFzc2lnbih7fSwgbmV3U3RhdGUsIHBhcnRpYWxTdGF0ZSk7XG4gICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgIGNhc2UgRm9yY2VVcGRhdGU6XG4gICAgICAgICAgICAgICAgICBoYXNGb3JjZVVwZGF0ZSA9ICEwO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1cGRhdGVMYW5lID0gcGVuZGluZ1F1ZXVlLmNhbGxiYWNrO1xuICAgICAgICAgICAgbnVsbCAhPT0gdXBkYXRlTGFuZSAmJlxuICAgICAgICAgICAgICAoKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDY0KSxcbiAgICAgICAgICAgICAgaXNIaWRkZW5VcGRhdGUgJiYgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDgxOTIpLFxuICAgICAgICAgICAgICAoaXNIaWRkZW5VcGRhdGUgPSBxdWV1ZS5jYWxsYmFja3MpLFxuICAgICAgICAgICAgICBudWxsID09PSBpc0hpZGRlblVwZGF0ZVxuICAgICAgICAgICAgICAgID8gKHF1ZXVlLmNhbGxiYWNrcyA9IFt1cGRhdGVMYW5lXSlcbiAgICAgICAgICAgICAgICA6IGlzSGlkZGVuVXBkYXRlLnB1c2godXBkYXRlTGFuZSkpO1xuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgKGlzSGlkZGVuVXBkYXRlID0ge1xuICAgICAgICAgICAgICBsYW5lOiB1cGRhdGVMYW5lLFxuICAgICAgICAgICAgICB0YWc6IHBlbmRpbmdRdWV1ZS50YWcsXG4gICAgICAgICAgICAgIHBheWxvYWQ6IHBlbmRpbmdRdWV1ZS5wYXlsb2FkLFxuICAgICAgICAgICAgICBjYWxsYmFjazogcGVuZGluZ1F1ZXVlLmNhbGxiYWNrLFxuICAgICAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgbnVsbCA9PT0gY3VycmVudFxuICAgICAgICAgICAgICAgID8gKChmaXJzdFBlbmRpbmdVcGRhdGUgPSBjdXJyZW50ID0gaXNIaWRkZW5VcGRhdGUpLFxuICAgICAgICAgICAgICAgICAgKGxhc3RQZW5kaW5nVXBkYXRlID0gbmV3U3RhdGUpKVxuICAgICAgICAgICAgICAgIDogKGN1cnJlbnQgPSBjdXJyZW50Lm5leHQgPSBpc0hpZGRlblVwZGF0ZSksXG4gICAgICAgICAgICAgIChsYXN0QmFzZVVwZGF0ZSB8PSB1cGRhdGVMYW5lKTtcbiAgICAgICAgICBwZW5kaW5nUXVldWUgPSBwZW5kaW5nUXVldWUubmV4dDtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gcGVuZGluZ1F1ZXVlKVxuICAgICAgICAgICAgaWYgKCgocGVuZGluZ1F1ZXVlID0gcXVldWUuc2hhcmVkLnBlbmRpbmcpLCBudWxsID09PSBwZW5kaW5nUXVldWUpKVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgKGlzSGlkZGVuVXBkYXRlID0gcGVuZGluZ1F1ZXVlKSxcbiAgICAgICAgICAgICAgICAocGVuZGluZ1F1ZXVlID0gaXNIaWRkZW5VcGRhdGUubmV4dCksXG4gICAgICAgICAgICAgICAgKGlzSGlkZGVuVXBkYXRlLm5leHQgPSBudWxsKSxcbiAgICAgICAgICAgICAgICAocXVldWUubGFzdEJhc2VVcGRhdGUgPSBpc0hpZGRlblVwZGF0ZSksXG4gICAgICAgICAgICAgICAgKHF1ZXVlLnNoYXJlZC5wZW5kaW5nID0gbnVsbCk7XG4gICAgICAgIH0gd2hpbGUgKDEpO1xuICAgICAgICBudWxsID09PSBjdXJyZW50ICYmIChsYXN0UGVuZGluZ1VwZGF0ZSA9IG5ld1N0YXRlKTtcbiAgICAgICAgcXVldWUuYmFzZVN0YXRlID0gbGFzdFBlbmRpbmdVcGRhdGU7XG4gICAgICAgIHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZSA9IGZpcnN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgICAgcXVldWUubGFzdEJhc2VVcGRhdGUgPSBjdXJyZW50O1xuICAgICAgICBudWxsID09PSBmaXJzdEJhc2VVcGRhdGUgJiYgKHF1ZXVlLnNoYXJlZC5sYW5lcyA9IDApO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgfD0gbGFzdEJhc2VVcGRhdGU7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gbGFzdEJhc2VVcGRhdGU7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgIH1cbiAgICAgIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNhbGxDYWxsYmFjayhjYWxsYmFjaywgY29udGV4dCkge1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGNhbGxiYWNrKVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIkludmFsaWQgYXJndW1lbnQgcGFzc2VkIGFzIGNhbGxiYWNrLiBFeHBlY3RlZCBhIGZ1bmN0aW9uLiBJbnN0ZWFkIHJlY2VpdmVkOiBcIiArXG4gICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICApO1xuICAgICAgY2FsbGJhY2suY2FsbChjb250ZXh0KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0SGlkZGVuQ2FsbGJhY2tzKHVwZGF0ZVF1ZXVlLCBjb250ZXh0KSB7XG4gICAgICB2YXIgaGlkZGVuQ2FsbGJhY2tzID0gdXBkYXRlUXVldWUuc2hhcmVkLmhpZGRlbkNhbGxiYWNrcztcbiAgICAgIGlmIChudWxsICE9PSBoaWRkZW5DYWxsYmFja3MpXG4gICAgICAgIGZvciAoXG4gICAgICAgICAgdXBkYXRlUXVldWUuc2hhcmVkLmhpZGRlbkNhbGxiYWNrcyA9IG51bGwsIHVwZGF0ZVF1ZXVlID0gMDtcbiAgICAgICAgICB1cGRhdGVRdWV1ZSA8IGhpZGRlbkNhbGxiYWNrcy5sZW5ndGg7XG4gICAgICAgICAgdXBkYXRlUXVldWUrK1xuICAgICAgICApXG4gICAgICAgICAgY2FsbENhbGxiYWNrKGhpZGRlbkNhbGxiYWNrc1t1cGRhdGVRdWV1ZV0sIGNvbnRleHQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRDYWxsYmFja3ModXBkYXRlUXVldWUsIGNvbnRleHQpIHtcbiAgICAgIHZhciBjYWxsYmFja3MgPSB1cGRhdGVRdWV1ZS5jYWxsYmFja3M7XG4gICAgICBpZiAobnVsbCAhPT0gY2FsbGJhY2tzKVxuICAgICAgICBmb3IgKFxuICAgICAgICAgIHVwZGF0ZVF1ZXVlLmNhbGxiYWNrcyA9IG51bGwsIHVwZGF0ZVF1ZXVlID0gMDtcbiAgICAgICAgICB1cGRhdGVRdWV1ZSA8IGNhbGxiYWNrcy5sZW5ndGg7XG4gICAgICAgICAgdXBkYXRlUXVldWUrK1xuICAgICAgICApXG4gICAgICAgICAgY2FsbENhbGxiYWNrKGNhbGxiYWNrc1t1cGRhdGVRdWV1ZV0sIGNvbnRleHQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoSGlkZGVuQ29udGV4dChmaWJlciwgY29udGV4dCkge1xuICAgICAgdmFyIHByZXZFbnRhbmdsZWRSZW5kZXJMYW5lcyA9IGVudGFuZ2xlZFJlbmRlckxhbmVzO1xuICAgICAgcHVzaChwcmV2RW50YW5nbGVkUmVuZGVyTGFuZXNDdXJzb3IsIHByZXZFbnRhbmdsZWRSZW5kZXJMYW5lcywgZmliZXIpO1xuICAgICAgcHVzaChjdXJyZW50VHJlZUhpZGRlblN0YWNrQ3Vyc29yLCBjb250ZXh0LCBmaWJlcik7XG4gICAgICBlbnRhbmdsZWRSZW5kZXJMYW5lcyA9IHByZXZFbnRhbmdsZWRSZW5kZXJMYW5lcyB8IGNvbnRleHQuYmFzZUxhbmVzO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXVzZUhpZGRlbkNvbnRleHRPblN0YWNrKGZpYmVyKSB7XG4gICAgICBwdXNoKHByZXZFbnRhbmdsZWRSZW5kZXJMYW5lc0N1cnNvciwgZW50YW5nbGVkUmVuZGVyTGFuZXMsIGZpYmVyKTtcbiAgICAgIHB1c2goXG4gICAgICAgIGN1cnJlbnRUcmVlSGlkZGVuU3RhY2tDdXJzb3IsXG4gICAgICAgIGN1cnJlbnRUcmVlSGlkZGVuU3RhY2tDdXJzb3IuY3VycmVudCxcbiAgICAgICAgZmliZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcEhpZGRlbkNvbnRleHQoZmliZXIpIHtcbiAgICAgIGVudGFuZ2xlZFJlbmRlckxhbmVzID0gcHJldkVudGFuZ2xlZFJlbmRlckxhbmVzQ3Vyc29yLmN1cnJlbnQ7XG4gICAgICBwb3AoY3VycmVudFRyZWVIaWRkZW5TdGFja0N1cnNvciwgZmliZXIpO1xuICAgICAgcG9wKHByZXZFbnRhbmdsZWRSZW5kZXJMYW5lc0N1cnNvciwgZmliZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoUHJpbWFyeVRyZWVTdXNwZW5zZUhhbmRsZXIoaGFuZGxlcikge1xuICAgICAgdmFyIGN1cnJlbnQgPSBoYW5kbGVyLmFsdGVybmF0ZTtcbiAgICAgIHB1c2goXG4gICAgICAgIHN1c3BlbnNlU3RhY2tDdXJzb3IsXG4gICAgICAgIHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCAmIFN1YnRyZWVTdXNwZW5zZUNvbnRleHRNYXNrLFxuICAgICAgICBoYW5kbGVyXG4gICAgICApO1xuICAgICAgcHVzaChzdXNwZW5zZUhhbmRsZXJTdGFja0N1cnNvciwgaGFuZGxlciwgaGFuZGxlcik7XG4gICAgICBudWxsID09PSBzaGVsbEJvdW5kYXJ5ICYmXG4gICAgICAgIChudWxsID09PSBjdXJyZW50IHx8IG51bGwgIT09IGN1cnJlbnRUcmVlSGlkZGVuU3RhY2tDdXJzb3IuY3VycmVudFxuICAgICAgICAgID8gKHNoZWxsQm91bmRhcnkgPSBoYW5kbGVyKVxuICAgICAgICAgIDogbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlICYmIChzaGVsbEJvdW5kYXJ5ID0gaGFuZGxlcikpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoRGVoeWRyYXRlZEFjdGl2aXR5U3VzcGVuc2VIYW5kbGVyKGZpYmVyKSB7XG4gICAgICBwdXNoKHN1c3BlbnNlU3RhY2tDdXJzb3IsIHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCwgZmliZXIpO1xuICAgICAgcHVzaChzdXNwZW5zZUhhbmRsZXJTdGFja0N1cnNvciwgZmliZXIsIGZpYmVyKTtcbiAgICAgIG51bGwgPT09IHNoZWxsQm91bmRhcnkgJiYgKHNoZWxsQm91bmRhcnkgPSBmaWJlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2hPZmZzY3JlZW5TdXNwZW5zZUhhbmRsZXIoZmliZXIpIHtcbiAgICAgIDIyID09PSBmaWJlci50YWdcbiAgICAgICAgPyAocHVzaChzdXNwZW5zZVN0YWNrQ3Vyc29yLCBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQsIGZpYmVyKSxcbiAgICAgICAgICBwdXNoKHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yLCBmaWJlciwgZmliZXIpLFxuICAgICAgICAgIG51bGwgPT09IHNoZWxsQm91bmRhcnkgJiYgKHNoZWxsQm91bmRhcnkgPSBmaWJlcikpXG4gICAgICAgIDogcmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrKGZpYmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrKGZpYmVyKSB7XG4gICAgICBwdXNoKHN1c3BlbnNlU3RhY2tDdXJzb3IsIHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCwgZmliZXIpO1xuICAgICAgcHVzaChcbiAgICAgICAgc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IsXG4gICAgICAgIHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yLmN1cnJlbnQsXG4gICAgICAgIGZpYmVyXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwb3BTdXNwZW5zZUhhbmRsZXIoZmliZXIpIHtcbiAgICAgIHBvcChzdXNwZW5zZUhhbmRsZXJTdGFja0N1cnNvciwgZmliZXIpO1xuICAgICAgc2hlbGxCb3VuZGFyeSA9PT0gZmliZXIgJiYgKHNoZWxsQm91bmRhcnkgPSBudWxsKTtcbiAgICAgIHBvcChzdXNwZW5zZVN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRGaXJzdFN1c3BlbmRlZChyb3cpIHtcbiAgICAgIGZvciAodmFyIG5vZGUgPSByb3c7IG51bGwgIT09IG5vZGU7ICkge1xuICAgICAgICBpZiAoMTMgPT09IG5vZGUudGFnKSB7XG4gICAgICAgICAgdmFyIHN0YXRlID0gbm9kZS5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG51bGwgIT09IHN0YXRlICYmXG4gICAgICAgICAgICAoKHN0YXRlID0gc3RhdGUuZGVoeWRyYXRlZCksXG4gICAgICAgICAgICBudWxsID09PSBzdGF0ZSB8fFxuICAgICAgICAgICAgICBpc1N1c3BlbnNlSW5zdGFuY2VQZW5kaW5nKHN0YXRlKSB8fFxuICAgICAgICAgICAgICBpc1N1c3BlbnNlSW5zdGFuY2VGYWxsYmFjayhzdGF0ZSkpXG4gICAgICAgICAgKVxuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgMTkgPT09IG5vZGUudGFnICYmXG4gICAgICAgICAgKFwiZm9yd2FyZHNcIiA9PT0gbm9kZS5tZW1vaXplZFByb3BzLnJldmVhbE9yZGVyIHx8XG4gICAgICAgICAgICBcImJhY2t3YXJkc1wiID09PSBub2RlLm1lbW9pemVkUHJvcHMucmV2ZWFsT3JkZXIgfHxcbiAgICAgICAgICAgIFwidW5zdGFibGVfbGVnYWN5LWJhY2t3YXJkc1wiID09PSBub2RlLm1lbW9pemVkUHJvcHMucmV2ZWFsT3JkZXIgfHxcbiAgICAgICAgICAgIFwidG9nZXRoZXJcIiA9PT0gbm9kZS5tZW1vaXplZFByb3BzLnJldmVhbE9yZGVyKVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoMCAhPT0gKG5vZGUuZmxhZ3MgJiAxMjgpKSByZXR1cm4gbm9kZTtcbiAgICAgICAgfSBlbHNlIGlmIChudWxsICE9PSBub2RlLmNoaWxkKSB7XG4gICAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlID09PSByb3cpIGJyZWFrO1xuICAgICAgICBmb3IgKDsgbnVsbCA9PT0gbm9kZS5zaWJsaW5nOyApIHtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gbm9kZS5yZXR1cm4gfHwgbm9kZS5yZXR1cm4gPT09IHJvdykgcmV0dXJuIG51bGw7XG4gICAgICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICAgICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudEhvb2tUeXBlc0RldigpIHtcbiAgICAgIHZhciBob29rTmFtZSA9IGN1cnJlbnRIb29rTmFtZUluRGV2O1xuICAgICAgbnVsbCA9PT0gaG9va1R5cGVzRGV2XG4gICAgICAgID8gKGhvb2tUeXBlc0RldiA9IFtob29rTmFtZV0pXG4gICAgICAgIDogaG9va1R5cGVzRGV2LnB1c2goaG9va05hbWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVIb29rVHlwZXNEZXYoKSB7XG4gICAgICB2YXIgaG9va05hbWUgPSBjdXJyZW50SG9va05hbWVJbkRldjtcbiAgICAgIGlmIChcbiAgICAgICAgbnVsbCAhPT0gaG9va1R5cGVzRGV2ICYmXG4gICAgICAgIChob29rVHlwZXNVcGRhdGVJbmRleERldisrLFxuICAgICAgICBob29rVHlwZXNEZXZbaG9va1R5cGVzVXBkYXRlSW5kZXhEZXZdICE9PSBob29rTmFtZSlcbiAgICAgICkge1xuICAgICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoY3VycmVudGx5UmVuZGVyaW5nRmliZXIpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWRpZFdhcm5BYm91dE1pc21hdGNoZWRIb29rc0ZvckNvbXBvbmVudC5oYXMoY29tcG9uZW50TmFtZSkgJiZcbiAgICAgICAgICAoZGlkV2FybkFib3V0TWlzbWF0Y2hlZEhvb2tzRm9yQ29tcG9uZW50LmFkZChjb21wb25lbnROYW1lKSxcbiAgICAgICAgICBudWxsICE9PSBob29rVHlwZXNEZXYpXG4gICAgICAgICkge1xuICAgICAgICAgIGZvciAodmFyIHRhYmxlID0gXCJcIiwgaSA9IDA7IGkgPD0gaG9va1R5cGVzVXBkYXRlSW5kZXhEZXY7IGkrKykge1xuICAgICAgICAgICAgdmFyIG9sZEhvb2tOYW1lID0gaG9va1R5cGVzRGV2W2ldLFxuICAgICAgICAgICAgICBuZXdIb29rTmFtZSA9XG4gICAgICAgICAgICAgICAgaSA9PT0gaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPyBob29rTmFtZSA6IG9sZEhvb2tOYW1lO1xuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgb2xkSG9va05hbWUgPSBpICsgMSArIFwiLiBcIiArIG9sZEhvb2tOYW1lO1xuICAgICAgICAgICAgICAzMCA+IG9sZEhvb2tOYW1lLmxlbmd0aDtcblxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBvbGRIb29rTmFtZSArPSBcIiBcIjtcbiAgICAgICAgICAgIG9sZEhvb2tOYW1lICs9IG5ld0hvb2tOYW1lICsgXCJcXG5cIjtcbiAgICAgICAgICAgIHRhYmxlICs9IG9sZEhvb2tOYW1lO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJSZWFjdCBoYXMgZGV0ZWN0ZWQgYSBjaGFuZ2UgaW4gdGhlIG9yZGVyIG9mIEhvb2tzIGNhbGxlZCBieSAlcy4gVGhpcyB3aWxsIGxlYWQgdG8gYnVncyBhbmQgZXJyb3JzIGlmIG5vdCBmaXhlZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlYWQgdGhlIFJ1bGVzIG9mIEhvb2tzOiBodHRwczovL3JlYWN0LmRldi9saW5rL3J1bGVzLW9mLWhvb2tzXFxuXFxuICAgUHJldmlvdXMgcmVuZGVyICAgICAgICAgICAgTmV4dCByZW5kZXJcXG4gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4lcyAgIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXlxcblwiLFxuICAgICAgICAgICAgY29tcG9uZW50TmFtZSxcbiAgICAgICAgICAgIHRhYmxlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKSB7XG4gICAgICB2b2lkIDAgPT09IGRlcHMgfHxcbiAgICAgICAgbnVsbCA9PT0gZGVwcyB8fFxuICAgICAgICBpc0FycmF5SW1wbChkZXBzKSB8fFxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiJXMgcmVjZWl2ZWQgYSBmaW5hbCBhcmd1bWVudCB0aGF0IGlzIG5vdCBhbiBhcnJheSAoaW5zdGVhZCwgcmVjZWl2ZWQgYCVzYCkuIFdoZW4gc3BlY2lmaWVkLCB0aGUgZmluYWwgYXJndW1lbnQgbXVzdCBiZSBhbiBhcnJheS5cIixcbiAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldixcbiAgICAgICAgICB0eXBlb2YgZGVwc1xuICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3YXJuT25Vc2VGb3JtU3RhdGVJbkRldigpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihjdXJyZW50bHlSZW5kZXJpbmdGaWJlcik7XG4gICAgICBkaWRXYXJuQWJvdXRVc2VGb3JtU3RhdGUuaGFzKGNvbXBvbmVudE5hbWUpIHx8XG4gICAgICAgIChkaWRXYXJuQWJvdXRVc2VGb3JtU3RhdGUuYWRkKGNvbXBvbmVudE5hbWUpLFxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiUmVhY3RET00udXNlRm9ybVN0YXRlIGhhcyBiZWVuIHJlbmFtZWQgdG8gUmVhY3QudXNlQWN0aW9uU3RhdGUuIFBsZWFzZSB1cGRhdGUgJXMgdG8gdXNlIFJlYWN0LnVzZUFjdGlvblN0YXRlLlwiLFxuICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICAgICAgKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRocm93SW52YWxpZEhvb2tFcnJvcigpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBcIkludmFsaWQgaG9vayBjYWxsLiBIb29rcyBjYW4gb25seSBiZSBjYWxsZWQgaW5zaWRlIG9mIHRoZSBib2R5IG9mIGEgZnVuY3Rpb24gY29tcG9uZW50LiBUaGlzIGNvdWxkIGhhcHBlbiBmb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcXG4xLiBZb3UgbWlnaHQgaGF2ZSBtaXNtYXRjaGluZyB2ZXJzaW9ucyBvZiBSZWFjdCBhbmQgdGhlIHJlbmRlcmVyIChzdWNoIGFzIFJlYWN0IERPTSlcXG4yLiBZb3UgbWlnaHQgYmUgYnJlYWtpbmcgdGhlIFJ1bGVzIG9mIEhvb2tzXFxuMy4gWW91IG1pZ2h0IGhhdmUgbW9yZSB0aGFuIG9uZSBjb3B5IG9mIFJlYWN0IGluIHRoZSBzYW1lIGFwcFxcblNlZSBodHRwczovL3JlYWN0LmRldi9saW5rL2ludmFsaWQtaG9vay1jYWxsIGZvciB0aXBzIGFib3V0IGhvdyB0byBkZWJ1ZyBhbmQgZml4IHRoaXMgcHJvYmxlbS5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYXJlSG9va0lucHV0c0VxdWFsKG5leHREZXBzLCBwcmV2RGVwcykge1xuICAgICAgaWYgKGlnbm9yZVByZXZpb3VzRGVwZW5kZW5jaWVzKSByZXR1cm4gITE7XG4gICAgICBpZiAobnVsbCA9PT0gcHJldkRlcHMpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiJXMgcmVjZWl2ZWQgYSBmaW5hbCBhcmd1bWVudCBkdXJpbmcgdGhpcyByZW5kZXIsIGJ1dCBub3QgZHVyaW5nIHRoZSBwcmV2aW91cyByZW5kZXIuIEV2ZW4gdGhvdWdoIHRoZSBmaW5hbCBhcmd1bWVudCBpcyBvcHRpb25hbCwgaXRzIHR5cGUgY2Fubm90IGNoYW5nZSBiZXR3ZWVuIHJlbmRlcnMuXCIsXG4gICAgICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldlxuICAgICAgICAgICksXG4gICAgICAgICAgITFcbiAgICAgICAgKTtcbiAgICAgIG5leHREZXBzLmxlbmd0aCAhPT0gcHJldkRlcHMubGVuZ3RoICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJUaGUgZmluYWwgYXJndW1lbnQgcGFzc2VkIHRvICVzIGNoYW5nZWQgc2l6ZSBiZXR3ZWVuIHJlbmRlcnMuIFRoZSBvcmRlciBhbmQgc2l6ZSBvZiB0aGlzIGFycmF5IG11c3QgcmVtYWluIGNvbnN0YW50LlxcblxcblByZXZpb3VzOiAlc1xcbkluY29taW5nOiAlc1wiLFxuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2LFxuICAgICAgICAgIFwiW1wiICsgcHJldkRlcHMuam9pbihcIiwgXCIpICsgXCJdXCIsXG4gICAgICAgICAgXCJbXCIgKyBuZXh0RGVwcy5qb2luKFwiLCBcIikgKyBcIl1cIlxuICAgICAgICApO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmV2RGVwcy5sZW5ndGggJiYgaSA8IG5leHREZXBzLmxlbmd0aDsgaSsrKVxuICAgICAgICBpZiAoIW9iamVjdElzKG5leHREZXBzW2ldLCBwcmV2RGVwc1tpXSkpIHJldHVybiAhMTtcbiAgICAgIHJldHVybiAhMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVuZGVyV2l0aEhvb2tzKFxuICAgICAgY3VycmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgQ29tcG9uZW50LFxuICAgICAgcHJvcHMsXG4gICAgICBzZWNvbmRBcmcsXG4gICAgICBuZXh0UmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIHJlbmRlckxhbmVzID0gbmV4dFJlbmRlckxhbmVzO1xuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIGhvb2tUeXBlc0RldiA9IG51bGwgIT09IGN1cnJlbnQgPyBjdXJyZW50Ll9kZWJ1Z0hvb2tUeXBlcyA6IG51bGw7XG4gICAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xO1xuICAgICAgaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMgPVxuICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmIGN1cnJlbnQudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgIGlmIChcbiAgICAgICAgXCJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dXCIgPT09XG4gICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKENvbXBvbmVudCkgfHxcbiAgICAgICAgXCJbb2JqZWN0IEFzeW5jR2VuZXJhdG9yRnVuY3Rpb25dXCIgPT09XG4gICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKENvbXBvbmVudClcbiAgICAgIClcbiAgICAgICAgKG5leHRSZW5kZXJMYW5lcyA9IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoY3VycmVudGx5UmVuZGVyaW5nRmliZXIpKSxcbiAgICAgICAgICBkaWRXYXJuQWJvdXRBc3luY0NsaWVudENvbXBvbmVudC5oYXMobmV4dFJlbmRlckxhbmVzKSB8fFxuICAgICAgICAgICAgKGRpZFdhcm5BYm91dEFzeW5jQ2xpZW50Q29tcG9uZW50LmFkZChuZXh0UmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCIlcyBpcyBhbiBhc3luYyBDbGllbnQgQ29tcG9uZW50LiBPbmx5IFNlcnZlciBDb21wb25lbnRzIGNhbiBiZSBhc3luYyBhdCB0aGUgbW9tZW50LiBUaGlzIGVycm9yIGlzIG9mdGVuIGNhdXNlZCBieSBhY2NpZGVudGFsbHkgYWRkaW5nIGAndXNlIGNsaWVudCdgIHRvIGEgbW9kdWxlIHRoYXQgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBmb3IgdGhlIHNlcnZlci5cIixcbiAgICAgICAgICAgICAgbnVsbCA9PT0gbmV4dFJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgPyBcIkFuIHVua25vd24gQ29tcG9uZW50XCJcbiAgICAgICAgICAgICAgICA6IFwiPFwiICsgbmV4dFJlbmRlckxhbmVzICsgXCI+XCJcbiAgICAgICAgICAgICkpO1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IDA7XG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID1cbiAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJiBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGVcbiAgICAgICAgICA/IEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVZcbiAgICAgICAgICA6IG51bGwgIT09IGhvb2tUeXBlc0RldlxuICAgICAgICAgICAgPyBIb29rc0Rpc3BhdGNoZXJPbk1vdW50V2l0aEhvb2tUeXBlc0luREVWXG4gICAgICAgICAgICA6IEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcbiAgICAgIHNob3VsZERvdWJsZUludm9rZVVzZXJGbnNJbkhvb2tzREVWID0gbmV4dFJlbmRlckxhbmVzID1cbiAgICAgICAgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlKSAhPT0gTm9Nb2RlO1xuICAgICAgdmFyIGNoaWxkcmVuID0gY2FsbENvbXBvbmVudEluREVWKENvbXBvbmVudCwgcHJvcHMsIHNlY29uZEFyZyk7XG4gICAgICBzaG91bGREb3VibGVJbnZva2VVc2VyRm5zSW5Ib29rc0RFViA9ICExO1xuICAgICAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzICYmXG4gICAgICAgIChjaGlsZHJlbiA9IHJlbmRlcldpdGhIb29rc0FnYWluKFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICBzZWNvbmRBcmdcbiAgICAgICAgKSk7XG4gICAgICBpZiAobmV4dFJlbmRlckxhbmVzKSB7XG4gICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCEwKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjaGlsZHJlbiA9IHJlbmRlcldpdGhIb29rc0FnYWluKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICAgIHNlY29uZEFyZ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmaW5pc2hSZW5kZXJpbmdIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmlzaFJlbmRlcmluZ0hvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdIb29rVHlwZXMgPSBob29rVHlwZXNEZXY7XG4gICAgICBudWxsID09PSB3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXNcbiAgICAgICAgPyBudWxsICE9PSB0aGVuYWJsZVN0YXRlICYmXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9IHtcbiAgICAgICAgICAgIGxhbmVzOiAwLFxuICAgICAgICAgICAgZmlyc3RDb250ZXh0OiBudWxsLFxuICAgICAgICAgICAgX2RlYnVnVGhlbmFibGVTdGF0ZTogdGhlbmFibGVTdGF0ZVxuICAgICAgICAgIH0pXG4gICAgICAgIDogKHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcy5fZGVidWdUaGVuYWJsZVN0YXRlID0gdGhlbmFibGVTdGF0ZSk7XG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gQ29udGV4dE9ubHlEaXNwYXRjaGVyO1xuICAgICAgdmFyIGRpZFJlbmRlclRvb0Zld0hvb2tzID1cbiAgICAgICAgbnVsbCAhPT0gY3VycmVudEhvb2sgJiYgbnVsbCAhPT0gY3VycmVudEhvb2submV4dDtcbiAgICAgIHJlbmRlckxhbmVzID0gMDtcbiAgICAgIGhvb2tUeXBlc0RldiA9XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID1cbiAgICAgICAgd29ya0luUHJvZ3Jlc3NIb29rID1cbiAgICAgICAgY3VycmVudEhvb2sgPVxuICAgICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9XG4gICAgICAgICAgbnVsbDtcbiAgICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7XG4gICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgIChjdXJyZW50LmZsYWdzICYgNjUwMTE3MTIpICE9PSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiA2NTAxMTcxMikgJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkludGVybmFsIFJlYWN0IGVycm9yOiBFeHBlY3RlZCBzdGF0aWMgZmxhZyB3YXMgbWlzc2luZy4gUGxlYXNlIG5vdGlmeSB0aGUgUmVhY3QgdGVhbS5cIlxuICAgICAgICApO1xuICAgICAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9ICExO1xuICAgICAgdGhlbmFibGVJbmRleENvdW50ZXIgPSAwO1xuICAgICAgdGhlbmFibGVTdGF0ZSA9IG51bGw7XG4gICAgICBpZiAoZGlkUmVuZGVyVG9vRmV3SG9va3MpXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiUmVuZGVyZWQgZmV3ZXIgaG9va3MgdGhhbiBleHBlY3RlZC4gVGhpcyBtYXkgYmUgY2F1c2VkIGJ5IGFuIGFjY2lkZW50YWwgZWFybHkgcmV0dXJuIHN0YXRlbWVudC5cIlxuICAgICAgICApO1xuICAgICAgbnVsbCA9PT0gY3VycmVudCB8fFxuICAgICAgICBkaWRSZWNlaXZlVXBkYXRlIHx8XG4gICAgICAgICgoY3VycmVudCA9IGN1cnJlbnQuZGVwZW5kZW5jaWVzKSxcbiAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAgIGNoZWNrSWZDb250ZXh0Q2hhbmdlZChjdXJyZW50KSAmJlxuICAgICAgICAgIChkaWRSZWNlaXZlVXBkYXRlID0gITApKTtcbiAgICAgIG5lZWRzVG9SZXNldFN1c3BlbmRlZFRoZW5hYmxlREVWXG4gICAgICAgID8gKChuZWVkc1RvUmVzZXRTdXNwZW5kZWRUaGVuYWJsZURFViA9ICExKSwgKGN1cnJlbnQgPSAhMCkpXG4gICAgICAgIDogKGN1cnJlbnQgPSAhMSk7XG4gICAgICBjdXJyZW50ICYmXG4gICAgICAgICgod29ya0luUHJvZ3Jlc3MgPVxuICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIod29ya0luUHJvZ3Jlc3MpIHx8IFwiVW5rbm93blwiKSxcbiAgICAgICAgZGlkV2FybkFib3V0VXNlV3JhcHBlZEluVHJ5Q2F0Y2guaGFzKHdvcmtJblByb2dyZXNzKSB8fFxuICAgICAgICAgIGRpZFdhcm5BYm91dEFzeW5jQ2xpZW50Q29tcG9uZW50Lmhhcyh3b3JrSW5Qcm9ncmVzcykgfHxcbiAgICAgICAgICAoZGlkV2FybkFib3V0VXNlV3JhcHBlZEluVHJ5Q2F0Y2guYWRkKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJgdXNlYCB3YXMgY2FsbGVkIGZyb20gaW5zaWRlIGEgdHJ5L2NhdGNoIGJsb2NrLiBUaGlzIGlzIG5vdCBhbGxvd2VkIGFuZCBjYW4gbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yLiBUbyBoYW5kbGUgZXJyb3JzIHRyaWdnZXJlZCBieSBgdXNlYCwgd3JhcCB5b3VyIGNvbXBvbmVudCBpbiBhIGVycm9yIGJvdW5kYXJ5LlwiXG4gICAgICAgICAgKSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZW5kZXJXaXRoSG9va3NBZ2Fpbih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBwcm9wcywgc2Vjb25kQXJnKSB7XG4gICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgdmFyIG51bWJlck9mUmVSZW5kZXJzID0gMDtcbiAgICAgIGRvIHtcbiAgICAgICAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzICYmICh0aGVuYWJsZVN0YXRlID0gbnVsbCk7XG4gICAgICAgIHRoZW5hYmxlSW5kZXhDb3VudGVyID0gMDtcbiAgICAgICAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzID0gITE7XG4gICAgICAgIGlmIChudW1iZXJPZlJlUmVuZGVycyA+PSBSRV9SRU5ERVJfTElNSVQpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcIlRvbyBtYW55IHJlLXJlbmRlcnMuIFJlYWN0IGxpbWl0cyB0aGUgbnVtYmVyIG9mIHJlbmRlcnMgdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgbnVtYmVyT2ZSZVJlbmRlcnMgKz0gMTtcbiAgICAgICAgaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMgPSAhMTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NIb29rID0gY3VycmVudEhvb2sgPSBudWxsO1xuICAgICAgICBpZiAobnVsbCAhPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSkge1xuICAgICAgICAgIHZhciBjaGlsZHJlbiA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuICAgICAgICAgIGNoaWxkcmVuLmxhc3RFZmZlY3QgPSBudWxsO1xuICAgICAgICAgIGNoaWxkcmVuLmV2ZW50cyA9IG51bGw7XG4gICAgICAgICAgY2hpbGRyZW4uc3RvcmVzID0gbnVsbDtcbiAgICAgICAgICBudWxsICE9IGNoaWxkcmVuLm1lbW9DYWNoZSAmJiAoY2hpbGRyZW4ubWVtb0NhY2hlLmluZGV4ID0gMCk7XG4gICAgICAgIH1cbiAgICAgICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVjtcbiAgICAgICAgY2hpbGRyZW4gPSBjYWxsQ29tcG9uZW50SW5ERVYoQ29tcG9uZW50LCBwcm9wcywgc2Vjb25kQXJnKTtcbiAgICAgIH0gd2hpbGUgKGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyk7XG4gICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgfVxuICAgIGZ1bmN0aW9uIFRyYW5zaXRpb25Bd2FyZUhvc3RDb21wb25lbnQoKSB7XG4gICAgICB2YXIgZGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkgsXG4gICAgICAgIG1heWJlVGhlbmFibGUgPSBkaXNwYXRjaGVyLnVzZVN0YXRlKClbMF07XG4gICAgICBtYXliZVRoZW5hYmxlID1cbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbWF5YmVUaGVuYWJsZS50aGVuXG4gICAgICAgICAgPyB1c2VUaGVuYWJsZShtYXliZVRoZW5hYmxlKVxuICAgICAgICAgIDogbWF5YmVUaGVuYWJsZTtcbiAgICAgIGRpc3BhdGNoZXIgPSBkaXNwYXRjaGVyLnVzZVN0YXRlKClbMF07XG4gICAgICAobnVsbCAhPT0gY3VycmVudEhvb2sgPyBjdXJyZW50SG9vay5tZW1vaXplZFN0YXRlIDogbnVsbCkgIT09XG4gICAgICAgIGRpc3BhdGNoZXIgJiYgKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLmZsYWdzIHw9IDEwMjQpO1xuICAgICAgcmV0dXJuIG1heWJlVGhlbmFibGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrRGlkUmVuZGVySWRIb29rKCkge1xuICAgICAgdmFyIGRpZFJlbmRlcklkSG9vayA9IDAgIT09IGxvY2FsSWRDb3VudGVyO1xuICAgICAgbG9jYWxJZENvdW50ZXIgPSAwO1xuICAgICAgcmV0dXJuIGRpZFJlbmRlcklkSG9vaztcbiAgICB9XG4gICAgZnVuY3Rpb24gYmFpbG91dEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBsYW5lcykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPVxuICAgICAgICAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdEVmZmVjdHNNb2RlKSAhPT0gTm9Nb2RlXG4gICAgICAgICAgPyB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIC00MDI2NTUyMzdcbiAgICAgICAgICA6IHdvcmtJblByb2dyZXNzLmZsYWdzICYgLTIwNTM7XG4gICAgICBjdXJyZW50LmxhbmVzICY9IH5sYW5lcztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzZXRIb29rc09uVW53aW5kKHdvcmtJblByb2dyZXNzKSB7XG4gICAgICBpZiAoZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSkge1xuICAgICAgICBmb3IgKFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICBudWxsICE9PSB3b3JrSW5Qcm9ncmVzcztcblxuICAgICAgICApIHtcbiAgICAgICAgICB2YXIgcXVldWUgPSB3b3JrSW5Qcm9ncmVzcy5xdWV1ZTtcbiAgICAgICAgICBudWxsICE9PSBxdWV1ZSAmJiAocXVldWUucGVuZGluZyA9IG51bGwpO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gd29ya0luUHJvZ3Jlc3MubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gITE7XG4gICAgICB9XG4gICAgICByZW5kZXJMYW5lcyA9IDA7XG4gICAgICBob29rVHlwZXNEZXYgPVxuICAgICAgICB3b3JrSW5Qcm9ncmVzc0hvb2sgPVxuICAgICAgICBjdXJyZW50SG9vayA9XG4gICAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyID1cbiAgICAgICAgICBudWxsO1xuICAgICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gbnVsbDtcbiAgICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyA9ICExO1xuICAgICAgdGhlbmFibGVJbmRleENvdW50ZXIgPSBsb2NhbElkQ291bnRlciA9IDA7XG4gICAgICB0aGVuYWJsZVN0YXRlID0gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKSB7XG4gICAgICB2YXIgaG9vayA9IHtcbiAgICAgICAgbWVtb2l6ZWRTdGF0ZTogbnVsbCxcbiAgICAgICAgYmFzZVN0YXRlOiBudWxsLFxuICAgICAgICBiYXNlUXVldWU6IG51bGwsXG4gICAgICAgIHF1ZXVlOiBudWxsLFxuICAgICAgICBuZXh0OiBudWxsXG4gICAgICB9O1xuICAgICAgbnVsbCA9PT0gd29ya0luUHJvZ3Jlc3NIb29rXG4gICAgICAgID8gKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLm1lbW9pemVkU3RhdGUgPSB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBob29rKVxuICAgICAgICA6ICh3b3JrSW5Qcm9ncmVzc0hvb2sgPSB3b3JrSW5Qcm9ncmVzc0hvb2submV4dCA9IGhvb2spO1xuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzSG9vaztcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCkge1xuICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnRIb29rKSB7XG4gICAgICAgIHZhciBuZXh0Q3VycmVudEhvb2sgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlci5hbHRlcm5hdGU7XG4gICAgICAgIG5leHRDdXJyZW50SG9vayA9XG4gICAgICAgICAgbnVsbCAhPT0gbmV4dEN1cnJlbnRIb29rID8gbmV4dEN1cnJlbnRIb29rLm1lbW9pemVkU3RhdGUgOiBudWxsO1xuICAgICAgfSBlbHNlIG5leHRDdXJyZW50SG9vayA9IGN1cnJlbnRIb29rLm5leHQ7XG4gICAgICB2YXIgbmV4dFdvcmtJblByb2dyZXNzSG9vayA9XG4gICAgICAgIG51bGwgPT09IHdvcmtJblByb2dyZXNzSG9va1xuICAgICAgICAgID8gY3VycmVudGx5UmVuZGVyaW5nRmliZXIubWVtb2l6ZWRTdGF0ZVxuICAgICAgICAgIDogd29ya0luUHJvZ3Jlc3NIb29rLm5leHQ7XG4gICAgICBpZiAobnVsbCAhPT0gbmV4dFdvcmtJblByb2dyZXNzSG9vaylcbiAgICAgICAgKHdvcmtJblByb2dyZXNzSG9vayA9IG5leHRXb3JrSW5Qcm9ncmVzc0hvb2spLFxuICAgICAgICAgIChjdXJyZW50SG9vayA9IG5leHRDdXJyZW50SG9vayk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKG51bGwgPT09IG5leHRDdXJyZW50SG9vaykge1xuICAgICAgICAgIGlmIChudWxsID09PSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlci5hbHRlcm5hdGUpXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgXCJVcGRhdGUgaG9vayBjYWxsZWQgb24gaW5pdGlhbCByZW5kZXIuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB0aHJvdyBFcnJvcihcIlJlbmRlcmVkIG1vcmUgaG9va3MgdGhhbiBkdXJpbmcgdGhlIHByZXZpb3VzIHJlbmRlci5cIik7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudEhvb2sgPSBuZXh0Q3VycmVudEhvb2s7XG4gICAgICAgIG5leHRDdXJyZW50SG9vayA9IHtcbiAgICAgICAgICBtZW1vaXplZFN0YXRlOiBjdXJyZW50SG9vay5tZW1vaXplZFN0YXRlLFxuICAgICAgICAgIGJhc2VTdGF0ZTogY3VycmVudEhvb2suYmFzZVN0YXRlLFxuICAgICAgICAgIGJhc2VRdWV1ZTogY3VycmVudEhvb2suYmFzZVF1ZXVlLFxuICAgICAgICAgIHF1ZXVlOiBjdXJyZW50SG9vay5xdWV1ZSxcbiAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgIH07XG4gICAgICAgIG51bGwgPT09IHdvcmtJblByb2dyZXNzSG9va1xuICAgICAgICAgID8gKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLm1lbW9pemVkU3RhdGUgPSB3b3JrSW5Qcm9ncmVzc0hvb2sgPVxuICAgICAgICAgICAgICBuZXh0Q3VycmVudEhvb2spXG4gICAgICAgICAgOiAod29ya0luUHJvZ3Jlc3NIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rLm5leHQgPSBuZXh0Q3VycmVudEhvb2spO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzSG9vaztcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb25Db21wb25lbnRVcGRhdGVRdWV1ZSgpIHtcbiAgICAgIHJldHVybiB7IGxhc3RFZmZlY3Q6IG51bGwsIGV2ZW50czogbnVsbCwgc3RvcmVzOiBudWxsLCBtZW1vQ2FjaGU6IG51bGwgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXNlVGhlbmFibGUodGhlbmFibGUpIHtcbiAgICAgIHZhciBpbmRleCA9IHRoZW5hYmxlSW5kZXhDb3VudGVyO1xuICAgICAgdGhlbmFibGVJbmRleENvdW50ZXIgKz0gMTtcbiAgICAgIG51bGwgPT09IHRoZW5hYmxlU3RhdGUgJiYgKHRoZW5hYmxlU3RhdGUgPSBjcmVhdGVUaGVuYWJsZVN0YXRlKCkpO1xuICAgICAgdGhlbmFibGUgPSB0cmFja1VzZWRUaGVuYWJsZSh0aGVuYWJsZVN0YXRlLCB0aGVuYWJsZSwgaW5kZXgpO1xuICAgICAgaW5kZXggPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlcjtcbiAgICAgIG51bGwgPT09XG4gICAgICAgIChudWxsID09PSB3b3JrSW5Qcm9ncmVzc0hvb2tcbiAgICAgICAgICA/IGluZGV4Lm1lbW9pemVkU3RhdGVcbiAgICAgICAgICA6IHdvcmtJblByb2dyZXNzSG9vay5uZXh0KSAmJlxuICAgICAgICAoKGluZGV4ID0gaW5kZXguYWx0ZXJuYXRlKSxcbiAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPVxuICAgICAgICAgIG51bGwgIT09IGluZGV4ICYmIG51bGwgIT09IGluZGV4Lm1lbW9pemVkU3RhdGVcbiAgICAgICAgICAgID8gSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVlxuICAgICAgICAgICAgOiBIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYpKTtcbiAgICAgIHJldHVybiB0aGVuYWJsZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXNlKHVzYWJsZSkge1xuICAgICAgaWYgKG51bGwgIT09IHVzYWJsZSAmJiBcIm9iamVjdFwiID09PSB0eXBlb2YgdXNhYmxlKSB7XG4gICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB1c2FibGUudGhlbikgcmV0dXJuIHVzZVRoZW5hYmxlKHVzYWJsZSk7XG4gICAgICAgIGlmICh1c2FibGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSkgcmV0dXJuIHJlYWRDb250ZXh0KHVzYWJsZSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBFcnJvcihcIkFuIHVuc3VwcG9ydGVkIHR5cGUgd2FzIHBhc3NlZCB0byB1c2UoKTogXCIgKyBTdHJpbmcodXNhYmxlKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVzZU1lbW9DYWNoZShzaXplKSB7XG4gICAgICB2YXIgbWVtb0NhY2hlID0gbnVsbCxcbiAgICAgICAgdXBkYXRlUXVldWUgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlci51cGRhdGVRdWV1ZTtcbiAgICAgIG51bGwgIT09IHVwZGF0ZVF1ZXVlICYmIChtZW1vQ2FjaGUgPSB1cGRhdGVRdWV1ZS5tZW1vQ2FjaGUpO1xuICAgICAgaWYgKG51bGwgPT0gbWVtb0NhY2hlKSB7XG4gICAgICAgIHZhciBjdXJyZW50ID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIuYWx0ZXJuYXRlO1xuICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgKChjdXJyZW50ID0gY3VycmVudC51cGRhdGVRdWV1ZSksXG4gICAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAgICAgKChjdXJyZW50ID0gY3VycmVudC5tZW1vQ2FjaGUpLFxuICAgICAgICAgICAgbnVsbCAhPSBjdXJyZW50ICYmXG4gICAgICAgICAgICAgIChtZW1vQ2FjaGUgPSB7XG4gICAgICAgICAgICAgICAgZGF0YTogY3VycmVudC5kYXRhLm1hcChmdW5jdGlvbiAoYXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJheS5zbGljZSgpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGluZGV4OiAwXG4gICAgICAgICAgICAgIH0pKSk7XG4gICAgICB9XG4gICAgICBudWxsID09IG1lbW9DYWNoZSAmJiAobWVtb0NhY2hlID0geyBkYXRhOiBbXSwgaW5kZXg6IDAgfSk7XG4gICAgICBudWxsID09PSB1cGRhdGVRdWV1ZSAmJlxuICAgICAgICAoKHVwZGF0ZVF1ZXVlID0gY3JlYXRlRnVuY3Rpb25Db21wb25lbnRVcGRhdGVRdWV1ZSgpKSxcbiAgICAgICAgKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLnVwZGF0ZVF1ZXVlID0gdXBkYXRlUXVldWUpKTtcbiAgICAgIHVwZGF0ZVF1ZXVlLm1lbW9DYWNoZSA9IG1lbW9DYWNoZTtcbiAgICAgIHVwZGF0ZVF1ZXVlID0gbWVtb0NhY2hlLmRhdGFbbWVtb0NhY2hlLmluZGV4XTtcbiAgICAgIGlmICh2b2lkIDAgPT09IHVwZGF0ZVF1ZXVlIHx8IGlnbm9yZVByZXZpb3VzRGVwZW5kZW5jaWVzKVxuICAgICAgICBmb3IgKFxuICAgICAgICAgIHVwZGF0ZVF1ZXVlID0gbWVtb0NhY2hlLmRhdGFbbWVtb0NhY2hlLmluZGV4XSA9IEFycmF5KHNpemUpLFxuICAgICAgICAgICAgY3VycmVudCA9IDA7XG4gICAgICAgICAgY3VycmVudCA8IHNpemU7XG4gICAgICAgICAgY3VycmVudCsrXG4gICAgICAgIClcbiAgICAgICAgICB1cGRhdGVRdWV1ZVtjdXJyZW50XSA9IFJFQUNUX01FTU9fQ0FDSEVfU0VOVElORUw7XG4gICAgICBlbHNlXG4gICAgICAgIHVwZGF0ZVF1ZXVlLmxlbmd0aCAhPT0gc2l6ZSAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkV4cGVjdGVkIGEgY29uc3RhbnQgc2l6ZSBhcmd1bWVudCBmb3IgZWFjaCBpbnZvY2F0aW9uIG9mIHVzZU1lbW9DYWNoZS4gVGhlIHByZXZpb3VzIGNhY2hlIHdhcyBhbGxvY2F0ZWQgd2l0aCBzaXplICVzIGJ1dCBzaXplICVzIHdhcyByZXF1ZXN0ZWQuXCIsXG4gICAgICAgICAgICB1cGRhdGVRdWV1ZS5sZW5ndGgsXG4gICAgICAgICAgICBzaXplXG4gICAgICAgICAgKTtcbiAgICAgIG1lbW9DYWNoZS5pbmRleCsrO1xuICAgICAgcmV0dXJuIHVwZGF0ZVF1ZXVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBiYXNpY1N0YXRlUmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7XG4gICAgICByZXR1cm4gXCJmdW5jdGlvblwiID09PSB0eXBlb2YgYWN0aW9uID8gYWN0aW9uKHN0YXRlKSA6IGFjdGlvbjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIGlmICh2b2lkIDAgIT09IGluaXQpIHtcbiAgICAgICAgdmFyIGluaXRpYWxTdGF0ZSA9IGluaXQoaW5pdGlhbEFyZyk7XG4gICAgICAgIGlmIChzaG91bGREb3VibGVJbnZva2VVc2VyRm5zSW5Ib29rc0RFVikge1xuICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCEwKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaW5pdChpbml0aWFsQXJnKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGluaXRpYWxTdGF0ZSA9IGluaXRpYWxBcmc7XG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBob29rLmJhc2VTdGF0ZSA9IGluaXRpYWxTdGF0ZTtcbiAgICAgIHJlZHVjZXIgPSB7XG4gICAgICAgIHBlbmRpbmc6IG51bGwsXG4gICAgICAgIGxhbmVzOiAwLFxuICAgICAgICBkaXNwYXRjaDogbnVsbCxcbiAgICAgICAgbGFzdFJlbmRlcmVkUmVkdWNlcjogcmVkdWNlcixcbiAgICAgICAgbGFzdFJlbmRlcmVkU3RhdGU6IGluaXRpYWxTdGF0ZVxuICAgICAgfTtcbiAgICAgIGhvb2sucXVldWUgPSByZWR1Y2VyO1xuICAgICAgcmVkdWNlciA9IHJlZHVjZXIuZGlzcGF0Y2ggPSBkaXNwYXRjaFJlZHVjZXJBY3Rpb24uYmluZChcbiAgICAgICAgbnVsbCxcbiAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIsXG4gICAgICAgIHJlZHVjZXJcbiAgICAgICk7XG4gICAgICByZXR1cm4gW2hvb2subWVtb2l6ZWRTdGF0ZSwgcmVkdWNlcl07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZVJlZHVjZXIocmVkdWNlcikge1xuICAgICAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIHJldHVybiB1cGRhdGVSZWR1Y2VySW1wbChob29rLCBjdXJyZW50SG9vaywgcmVkdWNlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZVJlZHVjZXJJbXBsKGhvb2ssIGN1cnJlbnQsIHJlZHVjZXIpIHtcbiAgICAgIHZhciBxdWV1ZSA9IGhvb2sucXVldWU7XG4gICAgICBpZiAobnVsbCA9PT0gcXVldWUpXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiU2hvdWxkIGhhdmUgYSBxdWV1ZS4gWW91IGFyZSBsaWtlbHkgY2FsbGluZyBIb29rcyBjb25kaXRpb25hbGx5LCB3aGljaCBpcyBub3QgYWxsb3dlZC4gKGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvaW52YWxpZC1ob29rLWNhbGwpXCJcbiAgICAgICAgKTtcbiAgICAgIHF1ZXVlLmxhc3RSZW5kZXJlZFJlZHVjZXIgPSByZWR1Y2VyO1xuICAgICAgdmFyIGJhc2VRdWV1ZSA9IGhvb2suYmFzZVF1ZXVlLFxuICAgICAgICBwZW5kaW5nUXVldWUgPSBxdWV1ZS5wZW5kaW5nO1xuICAgICAgaWYgKG51bGwgIT09IHBlbmRpbmdRdWV1ZSkge1xuICAgICAgICBpZiAobnVsbCAhPT0gYmFzZVF1ZXVlKSB7XG4gICAgICAgICAgdmFyIGJhc2VGaXJzdCA9IGJhc2VRdWV1ZS5uZXh0O1xuICAgICAgICAgIGJhc2VRdWV1ZS5uZXh0ID0gcGVuZGluZ1F1ZXVlLm5leHQ7XG4gICAgICAgICAgcGVuZGluZ1F1ZXVlLm5leHQgPSBiYXNlRmlyc3Q7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudC5iYXNlUXVldWUgIT09IGJhc2VRdWV1ZSAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkludGVybmFsIGVycm9yOiBFeHBlY3RlZCB3b3JrLWluLXByb2dyZXNzIHF1ZXVlIHRvIGJlIGEgY2xvbmUuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICApO1xuICAgICAgICBjdXJyZW50LmJhc2VRdWV1ZSA9IGJhc2VRdWV1ZSA9IHBlbmRpbmdRdWV1ZTtcbiAgICAgICAgcXVldWUucGVuZGluZyA9IG51bGw7XG4gICAgICB9XG4gICAgICBwZW5kaW5nUXVldWUgPSBob29rLmJhc2VTdGF0ZTtcbiAgICAgIGlmIChudWxsID09PSBiYXNlUXVldWUpIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHBlbmRpbmdRdWV1ZTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBjdXJyZW50ID0gYmFzZVF1ZXVlLm5leHQ7XG4gICAgICAgIHZhciBuZXdCYXNlUXVldWVGaXJzdCA9IChiYXNlRmlyc3QgPSBudWxsKSxcbiAgICAgICAgICBuZXdCYXNlUXVldWVMYXN0ID0gbnVsbCxcbiAgICAgICAgICB1cGRhdGUgPSBjdXJyZW50LFxuICAgICAgICAgIGRpZFJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24gPSAhMTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgIHZhciB1cGRhdGVMYW5lID0gdXBkYXRlLmxhbmUgJiAtNTM2ODcwOTEzO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHVwZGF0ZUxhbmUgIT09IHVwZGF0ZS5sYW5lXG4gICAgICAgICAgICAgID8gKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgdXBkYXRlTGFuZSkgPT09IHVwZGF0ZUxhbmVcbiAgICAgICAgICAgICAgOiAocmVuZGVyTGFuZXMgJiB1cGRhdGVMYW5lKSA9PT0gdXBkYXRlTGFuZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdmFyIHJldmVydExhbmUgPSB1cGRhdGUucmV2ZXJ0TGFuZTtcbiAgICAgICAgICAgIGlmICgwID09PSByZXZlcnRMYW5lKVxuICAgICAgICAgICAgICBudWxsICE9PSBuZXdCYXNlUXVldWVMYXN0ICYmXG4gICAgICAgICAgICAgICAgKG5ld0Jhc2VRdWV1ZUxhc3QgPSBuZXdCYXNlUXVldWVMYXN0Lm5leHQgPVxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsYW5lOiAwLFxuICAgICAgICAgICAgICAgICAgICByZXZlcnRMYW5lOiAwLFxuICAgICAgICAgICAgICAgICAgICBnZXN0dXJlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb246IHVwZGF0ZS5hY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGhhc0VhZ2VyU3RhdGU6IHVwZGF0ZS5oYXNFYWdlclN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBlYWdlclN0YXRlOiB1cGRhdGUuZWFnZXJTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdXBkYXRlTGFuZSA9PT0gY3VycmVudEVudGFuZ2xlZExhbmUgJiZcbiAgICAgICAgICAgICAgICAgIChkaWRSZWFkRnJvbUVudGFuZ2xlZEFzeW5jQWN0aW9uID0gITApO1xuICAgICAgICAgICAgZWxzZSBpZiAoKHJlbmRlckxhbmVzICYgcmV2ZXJ0TGFuZSkgPT09IHJldmVydExhbmUpIHtcbiAgICAgICAgICAgICAgdXBkYXRlID0gdXBkYXRlLm5leHQ7XG4gICAgICAgICAgICAgIHJldmVydExhbmUgPT09IGN1cnJlbnRFbnRhbmdsZWRMYW5lICYmXG4gICAgICAgICAgICAgICAgKGRpZFJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24gPSAhMCk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICh1cGRhdGVMYW5lID0ge1xuICAgICAgICAgICAgICAgIGxhbmU6IDAsXG4gICAgICAgICAgICAgICAgcmV2ZXJ0TGFuZTogdXBkYXRlLnJldmVydExhbmUsXG4gICAgICAgICAgICAgICAgZ2VzdHVyZTogbnVsbCxcbiAgICAgICAgICAgICAgICBhY3Rpb246IHVwZGF0ZS5hY3Rpb24sXG4gICAgICAgICAgICAgICAgaGFzRWFnZXJTdGF0ZTogdXBkYXRlLmhhc0VhZ2VyU3RhdGUsXG4gICAgICAgICAgICAgICAgZWFnZXJTdGF0ZTogdXBkYXRlLmVhZ2VyU3RhdGUsXG4gICAgICAgICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBudWxsID09PSBuZXdCYXNlUXVldWVMYXN0XG4gICAgICAgICAgICAgICAgICA/ICgobmV3QmFzZVF1ZXVlRmlyc3QgPSBuZXdCYXNlUXVldWVMYXN0ID0gdXBkYXRlTGFuZSksXG4gICAgICAgICAgICAgICAgICAgIChiYXNlRmlyc3QgPSBwZW5kaW5nUXVldWUpKVxuICAgICAgICAgICAgICAgICAgOiAobmV3QmFzZVF1ZXVlTGFzdCA9IG5ld0Jhc2VRdWV1ZUxhc3QubmV4dCA9IHVwZGF0ZUxhbmUpLFxuICAgICAgICAgICAgICAgIChjdXJyZW50bHlSZW5kZXJpbmdGaWJlci5sYW5lcyB8PSByZXZlcnRMYW5lKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzIHw9IHJldmVydExhbmUpO1xuICAgICAgICAgICAgdXBkYXRlTGFuZSA9IHVwZGF0ZS5hY3Rpb247XG4gICAgICAgICAgICBzaG91bGREb3VibGVJbnZva2VVc2VyRm5zSW5Ib29rc0RFViAmJlxuICAgICAgICAgICAgICByZWR1Y2VyKHBlbmRpbmdRdWV1ZSwgdXBkYXRlTGFuZSk7XG4gICAgICAgICAgICBwZW5kaW5nUXVldWUgPSB1cGRhdGUuaGFzRWFnZXJTdGF0ZVxuICAgICAgICAgICAgICA/IHVwZGF0ZS5lYWdlclN0YXRlXG4gICAgICAgICAgICAgIDogcmVkdWNlcihwZW5kaW5nUXVldWUsIHVwZGF0ZUxhbmUpO1xuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgKHJldmVydExhbmUgPSB7XG4gICAgICAgICAgICAgIGxhbmU6IHVwZGF0ZUxhbmUsXG4gICAgICAgICAgICAgIHJldmVydExhbmU6IHVwZGF0ZS5yZXZlcnRMYW5lLFxuICAgICAgICAgICAgICBnZXN0dXJlOiB1cGRhdGUuZ2VzdHVyZSxcbiAgICAgICAgICAgICAgYWN0aW9uOiB1cGRhdGUuYWN0aW9uLFxuICAgICAgICAgICAgICBoYXNFYWdlclN0YXRlOiB1cGRhdGUuaGFzRWFnZXJTdGF0ZSxcbiAgICAgICAgICAgICAgZWFnZXJTdGF0ZTogdXBkYXRlLmVhZ2VyU3RhdGUsXG4gICAgICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBudWxsID09PSBuZXdCYXNlUXVldWVMYXN0XG4gICAgICAgICAgICAgICAgPyAoKG5ld0Jhc2VRdWV1ZUZpcnN0ID0gbmV3QmFzZVF1ZXVlTGFzdCA9IHJldmVydExhbmUpLFxuICAgICAgICAgICAgICAgICAgKGJhc2VGaXJzdCA9IHBlbmRpbmdRdWV1ZSkpXG4gICAgICAgICAgICAgICAgOiAobmV3QmFzZVF1ZXVlTGFzdCA9IG5ld0Jhc2VRdWV1ZUxhc3QubmV4dCA9IHJldmVydExhbmUpLFxuICAgICAgICAgICAgICAoY3VycmVudGx5UmVuZGVyaW5nRmliZXIubGFuZXMgfD0gdXBkYXRlTGFuZSksXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgfD0gdXBkYXRlTGFuZSk7XG4gICAgICAgICAgdXBkYXRlID0gdXBkYXRlLm5leHQ7XG4gICAgICAgIH0gd2hpbGUgKG51bGwgIT09IHVwZGF0ZSAmJiB1cGRhdGUgIT09IGN1cnJlbnQpO1xuICAgICAgICBudWxsID09PSBuZXdCYXNlUXVldWVMYXN0XG4gICAgICAgICAgPyAoYmFzZUZpcnN0ID0gcGVuZGluZ1F1ZXVlKVxuICAgICAgICAgIDogKG5ld0Jhc2VRdWV1ZUxhc3QubmV4dCA9IG5ld0Jhc2VRdWV1ZUZpcnN0KTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFvYmplY3RJcyhwZW5kaW5nUXVldWUsIGhvb2subWVtb2l6ZWRTdGF0ZSkgJiZcbiAgICAgICAgICAoKGRpZFJlY2VpdmVVcGRhdGUgPSAhMCksXG4gICAgICAgICAgZGlkUmVhZEZyb21FbnRhbmdsZWRBc3luY0FjdGlvbiAmJlxuICAgICAgICAgICAgKChyZWR1Y2VyID0gY3VycmVudEVudGFuZ2xlZEFjdGlvblRoZW5hYmxlKSwgbnVsbCAhPT0gcmVkdWNlcikpXG4gICAgICAgIClcbiAgICAgICAgICB0aHJvdyByZWR1Y2VyO1xuICAgICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBwZW5kaW5nUXVldWU7XG4gICAgICAgIGhvb2suYmFzZVN0YXRlID0gYmFzZUZpcnN0O1xuICAgICAgICBob29rLmJhc2VRdWV1ZSA9IG5ld0Jhc2VRdWV1ZUxhc3Q7XG4gICAgICAgIHF1ZXVlLmxhc3RSZW5kZXJlZFN0YXRlID0gcGVuZGluZ1F1ZXVlO1xuICAgICAgfVxuICAgICAgbnVsbCA9PT0gYmFzZVF1ZXVlICYmIChxdWV1ZS5sYW5lcyA9IDApO1xuICAgICAgcmV0dXJuIFtob29rLm1lbW9pemVkU3RhdGUsIHF1ZXVlLmRpc3BhdGNoXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVyZW5kZXJSZWR1Y2VyKHJlZHVjZXIpIHtcbiAgICAgIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCksXG4gICAgICAgIHF1ZXVlID0gaG9vay5xdWV1ZTtcbiAgICAgIGlmIChudWxsID09PSBxdWV1ZSlcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJTaG91bGQgaGF2ZSBhIHF1ZXVlLiBZb3UgYXJlIGxpa2VseSBjYWxsaW5nIEhvb2tzIGNvbmRpdGlvbmFsbHksIHdoaWNoIGlzIG5vdCBhbGxvd2VkLiAoaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9pbnZhbGlkLWhvb2stY2FsbClcIlxuICAgICAgICApO1xuICAgICAgcXVldWUubGFzdFJlbmRlcmVkUmVkdWNlciA9IHJlZHVjZXI7XG4gICAgICB2YXIgZGlzcGF0Y2ggPSBxdWV1ZS5kaXNwYXRjaCxcbiAgICAgICAgbGFzdFJlbmRlclBoYXNlVXBkYXRlID0gcXVldWUucGVuZGluZyxcbiAgICAgICAgbmV3U3RhdGUgPSBob29rLm1lbW9pemVkU3RhdGU7XG4gICAgICBpZiAobnVsbCAhPT0gbGFzdFJlbmRlclBoYXNlVXBkYXRlKSB7XG4gICAgICAgIHF1ZXVlLnBlbmRpbmcgPSBudWxsO1xuICAgICAgICB2YXIgdXBkYXRlID0gKGxhc3RSZW5kZXJQaGFzZVVwZGF0ZSA9IGxhc3RSZW5kZXJQaGFzZVVwZGF0ZS5uZXh0KTtcbiAgICAgICAgZG9cbiAgICAgICAgICAobmV3U3RhdGUgPSByZWR1Y2VyKG5ld1N0YXRlLCB1cGRhdGUuYWN0aW9uKSksICh1cGRhdGUgPSB1cGRhdGUubmV4dCk7XG4gICAgICAgIHdoaWxlICh1cGRhdGUgIT09IGxhc3RSZW5kZXJQaGFzZVVwZGF0ZSk7XG4gICAgICAgIG9iamVjdElzKG5ld1N0YXRlLCBob29rLm1lbW9pemVkU3RhdGUpIHx8IChkaWRSZWNlaXZlVXBkYXRlID0gITApO1xuICAgICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgICAgbnVsbCA9PT0gaG9vay5iYXNlUXVldWUgJiYgKGhvb2suYmFzZVN0YXRlID0gbmV3U3RhdGUpO1xuICAgICAgICBxdWV1ZS5sYXN0UmVuZGVyZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtuZXdTdGF0ZSwgZGlzcGF0Y2hdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudFN5bmNFeHRlcm5hbFN0b3JlKHN1YnNjcmliZSwgZ2V0U25hcHNob3QsIGdldFNlcnZlclNuYXBzaG90KSB7XG4gICAgICB2YXIgZmliZXIgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlcixcbiAgICAgICAgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICBpZiAoaXNIeWRyYXRpbmcpIHtcbiAgICAgICAgaWYgKHZvaWQgMCA9PT0gZ2V0U2VydmVyU25hcHNob3QpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcIk1pc3NpbmcgZ2V0U2VydmVyU25hcHNob3QsIHdoaWNoIGlzIHJlcXVpcmVkIGZvciBzZXJ2ZXItcmVuZGVyZWQgY29udGVudC4gV2lsbCByZXZlcnQgdG8gY2xpZW50IHJlbmRlcmluZy5cIlxuICAgICAgICAgICk7XG4gICAgICAgIHZhciBuZXh0U25hcHNob3QgPSBnZXRTZXJ2ZXJTbmFwc2hvdCgpO1xuICAgICAgICBkaWRXYXJuVW5jYWNoZWRHZXRTbmFwc2hvdCB8fFxuICAgICAgICAgIG5leHRTbmFwc2hvdCA9PT0gZ2V0U2VydmVyU25hcHNob3QoKSB8fFxuICAgICAgICAgIChjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJUaGUgcmVzdWx0IG9mIGdldFNlcnZlclNuYXBzaG90IHNob3VsZCBiZSBjYWNoZWQgdG8gYXZvaWQgYW4gaW5maW5pdGUgbG9vcFwiXG4gICAgICAgICAgKSxcbiAgICAgICAgICAoZGlkV2FyblVuY2FjaGVkR2V0U25hcHNob3QgPSAhMCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dFNuYXBzaG90ID0gZ2V0U25hcHNob3QoKTtcbiAgICAgICAgZGlkV2FyblVuY2FjaGVkR2V0U25hcHNob3QgfHxcbiAgICAgICAgICAoKGdldFNlcnZlclNuYXBzaG90ID0gZ2V0U25hcHNob3QoKSksXG4gICAgICAgICAgb2JqZWN0SXMobmV4dFNuYXBzaG90LCBnZXRTZXJ2ZXJTbmFwc2hvdCkgfHxcbiAgICAgICAgICAgIChjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlRoZSByZXN1bHQgb2YgZ2V0U25hcHNob3Qgc2hvdWxkIGJlIGNhY2hlZCB0byBhdm9pZCBhbiBpbmZpbml0ZSBsb29wXCJcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICAoZGlkV2FyblVuY2FjaGVkR2V0U25hcHNob3QgPSAhMCkpKTtcbiAgICAgICAgaWYgKG51bGwgPT09IHdvcmtJblByb2dyZXNzUm9vdClcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIFwiRXhwZWN0ZWQgYSB3b3JrLWluLXByb2dyZXNzIHJvb3QuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgMCAhPT0gKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgMTI0KSB8fFxuICAgICAgICAgIHB1c2hTdG9yZUNvbnNpc3RlbmN5Q2hlY2soZmliZXIsIGdldFNuYXBzaG90LCBuZXh0U25hcHNob3QpO1xuICAgICAgfVxuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gbmV4dFNuYXBzaG90O1xuICAgICAgZ2V0U2VydmVyU25hcHNob3QgPSB7IHZhbHVlOiBuZXh0U25hcHNob3QsIGdldFNuYXBzaG90OiBnZXRTbmFwc2hvdCB9O1xuICAgICAgaG9vay5xdWV1ZSA9IGdldFNlcnZlclNuYXBzaG90O1xuICAgICAgbW91bnRFZmZlY3QoXG4gICAgICAgIHN1YnNjcmliZVRvU3RvcmUuYmluZChudWxsLCBmaWJlciwgZ2V0U2VydmVyU25hcHNob3QsIHN1YnNjcmliZSksXG4gICAgICAgIFtzdWJzY3JpYmVdXG4gICAgICApO1xuICAgICAgZmliZXIuZmxhZ3MgfD0gMjA0ODtcbiAgICAgIHB1c2hTaW1wbGVFZmZlY3QoXG4gICAgICAgIEhhc0VmZmVjdCB8IFBhc3NpdmUsXG4gICAgICAgIHsgZGVzdHJveTogdm9pZCAwIH0sXG4gICAgICAgIHVwZGF0ZVN0b3JlSW5zdGFuY2UuYmluZChcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgIGdldFNlcnZlclNuYXBzaG90LFxuICAgICAgICAgIG5leHRTbmFwc2hvdCxcbiAgICAgICAgICBnZXRTbmFwc2hvdFxuICAgICAgICApLFxuICAgICAgICBudWxsXG4gICAgICApO1xuICAgICAgcmV0dXJuIG5leHRTbmFwc2hvdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlU3luY0V4dGVybmFsU3RvcmUoXG4gICAgICBzdWJzY3JpYmUsXG4gICAgICBnZXRTbmFwc2hvdCxcbiAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgKSB7XG4gICAgICB2YXIgZmliZXIgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlcixcbiAgICAgICAgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpLFxuICAgICAgICBpc0h5ZHJhdGluZyRqc2NvbXAkMCA9IGlzSHlkcmF0aW5nO1xuICAgICAgaWYgKGlzSHlkcmF0aW5nJGpzY29tcCQwKSB7XG4gICAgICAgIGlmICh2b2lkIDAgPT09IGdldFNlcnZlclNuYXBzaG90KVxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJNaXNzaW5nIGdldFNlcnZlclNuYXBzaG90LCB3aGljaCBpcyByZXF1aXJlZCBmb3Igc2VydmVyLXJlbmRlcmVkIGNvbnRlbnQuIFdpbGwgcmV2ZXJ0IHRvIGNsaWVudCByZW5kZXJpbmcuXCJcbiAgICAgICAgICApO1xuICAgICAgICBnZXRTZXJ2ZXJTbmFwc2hvdCA9IGdldFNlcnZlclNuYXBzaG90KCk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAoKGdldFNlcnZlclNuYXBzaG90ID0gZ2V0U25hcHNob3QoKSksICFkaWRXYXJuVW5jYWNoZWRHZXRTbmFwc2hvdClcbiAgICAgICkge1xuICAgICAgICB2YXIgY2FjaGVkU25hcHNob3QgPSBnZXRTbmFwc2hvdCgpO1xuICAgICAgICBvYmplY3RJcyhnZXRTZXJ2ZXJTbmFwc2hvdCwgY2FjaGVkU25hcHNob3QpIHx8XG4gICAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIlRoZSByZXN1bHQgb2YgZ2V0U25hcHNob3Qgc2hvdWxkIGJlIGNhY2hlZCB0byBhdm9pZCBhbiBpbmZpbml0ZSBsb29wXCJcbiAgICAgICAgICApLFxuICAgICAgICAgIChkaWRXYXJuVW5jYWNoZWRHZXRTbmFwc2hvdCA9ICEwKSk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIChjYWNoZWRTbmFwc2hvdCA9ICFvYmplY3RJcyhcbiAgICAgICAgICAoY3VycmVudEhvb2sgfHwgaG9vaykubWVtb2l6ZWRTdGF0ZSxcbiAgICAgICAgICBnZXRTZXJ2ZXJTbmFwc2hvdFxuICAgICAgICApKVxuICAgICAgKVxuICAgICAgICAoaG9vay5tZW1vaXplZFN0YXRlID0gZ2V0U2VydmVyU25hcHNob3QpLCAoZGlkUmVjZWl2ZVVwZGF0ZSA9ICEwKTtcbiAgICAgIGhvb2sgPSBob29rLnF1ZXVlO1xuICAgICAgdmFyIGNyZWF0ZSA9IHN1YnNjcmliZVRvU3RvcmUuYmluZChudWxsLCBmaWJlciwgaG9vaywgc3Vic2NyaWJlKTtcbiAgICAgIHVwZGF0ZUVmZmVjdEltcGwoMjA0OCwgUGFzc2l2ZSwgY3JlYXRlLCBbc3Vic2NyaWJlXSk7XG4gICAgICBpZiAoXG4gICAgICAgIGhvb2suZ2V0U25hcHNob3QgIT09IGdldFNuYXBzaG90IHx8XG4gICAgICAgIGNhY2hlZFNuYXBzaG90IHx8XG4gICAgICAgIChudWxsICE9PSB3b3JrSW5Qcm9ncmVzc0hvb2sgJiZcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzc0hvb2subWVtb2l6ZWRTdGF0ZS50YWcgJiBIYXNFZmZlY3QpXG4gICAgICApIHtcbiAgICAgICAgZmliZXIuZmxhZ3MgfD0gMjA0ODtcbiAgICAgICAgcHVzaFNpbXBsZUVmZmVjdChcbiAgICAgICAgICBIYXNFZmZlY3QgfCBQYXNzaXZlLFxuICAgICAgICAgIHsgZGVzdHJveTogdm9pZCAwIH0sXG4gICAgICAgICAgdXBkYXRlU3RvcmVJbnN0YW5jZS5iaW5kKFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgICAgaG9vayxcbiAgICAgICAgICAgIGdldFNlcnZlclNuYXBzaG90LFxuICAgICAgICAgICAgZ2V0U25hcHNob3RcbiAgICAgICAgICApLFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG51bGwgPT09IHdvcmtJblByb2dyZXNzUm9vdClcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIFwiRXhwZWN0ZWQgYSB3b3JrLWluLXByb2dyZXNzIHJvb3QuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgaXNIeWRyYXRpbmckanNjb21wJDAgfHxcbiAgICAgICAgICAwICE9PSAocmVuZGVyTGFuZXMgJiAxMjQpIHx8XG4gICAgICAgICAgcHVzaFN0b3JlQ29uc2lzdGVuY3lDaGVjayhmaWJlciwgZ2V0U25hcHNob3QsIGdldFNlcnZlclNuYXBzaG90KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBnZXRTZXJ2ZXJTbmFwc2hvdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHVzaFN0b3JlQ29uc2lzdGVuY3lDaGVjayhmaWJlciwgZ2V0U25hcHNob3QsIHJlbmRlcmVkU25hcHNob3QpIHtcbiAgICAgIGZpYmVyLmZsYWdzIHw9IDE2Mzg0O1xuICAgICAgZmliZXIgPSB7IGdldFNuYXBzaG90OiBnZXRTbmFwc2hvdCwgdmFsdWU6IHJlbmRlcmVkU25hcHNob3QgfTtcbiAgICAgIGdldFNuYXBzaG90ID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIudXBkYXRlUXVldWU7XG4gICAgICBudWxsID09PSBnZXRTbmFwc2hvdFxuICAgICAgICA/ICgoZ2V0U25hcHNob3QgPSBjcmVhdGVGdW5jdGlvbkNvbXBvbmVudFVwZGF0ZVF1ZXVlKCkpLFxuICAgICAgICAgIChjdXJyZW50bHlSZW5kZXJpbmdGaWJlci51cGRhdGVRdWV1ZSA9IGdldFNuYXBzaG90KSxcbiAgICAgICAgICAoZ2V0U25hcHNob3Quc3RvcmVzID0gW2ZpYmVyXSkpXG4gICAgICAgIDogKChyZW5kZXJlZFNuYXBzaG90ID0gZ2V0U25hcHNob3Quc3RvcmVzKSxcbiAgICAgICAgICBudWxsID09PSByZW5kZXJlZFNuYXBzaG90XG4gICAgICAgICAgICA/IChnZXRTbmFwc2hvdC5zdG9yZXMgPSBbZmliZXJdKVxuICAgICAgICAgICAgOiByZW5kZXJlZFNuYXBzaG90LnB1c2goZmliZXIpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlU3RvcmVJbnN0YW5jZShmaWJlciwgaW5zdCwgbmV4dFNuYXBzaG90LCBnZXRTbmFwc2hvdCkge1xuICAgICAgaW5zdC52YWx1ZSA9IG5leHRTbmFwc2hvdDtcbiAgICAgIGluc3QuZ2V0U25hcHNob3QgPSBnZXRTbmFwc2hvdDtcbiAgICAgIGNoZWNrSWZTbmFwc2hvdENoYW5nZWQoaW5zdCkgJiYgZm9yY2VTdG9yZVJlcmVuZGVyKGZpYmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3Vic2NyaWJlVG9TdG9yZShmaWJlciwgaW5zdCwgc3Vic2NyaWJlKSB7XG4gICAgICByZXR1cm4gc3Vic2NyaWJlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2hlY2tJZlNuYXBzaG90Q2hhbmdlZChpbnN0KSAmJiBmb3JjZVN0b3JlUmVyZW5kZXIoZmliZXIpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrSWZTbmFwc2hvdENoYW5nZWQoaW5zdCkge1xuICAgICAgdmFyIGxhdGVzdEdldFNuYXBzaG90ID0gaW5zdC5nZXRTbmFwc2hvdDtcbiAgICAgIGluc3QgPSBpbnN0LnZhbHVlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG5leHRWYWx1ZSA9IGxhdGVzdEdldFNuYXBzaG90KCk7XG4gICAgICAgIHJldHVybiAhb2JqZWN0SXMoaW5zdCwgbmV4dFZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJldHVybiAhMDtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZm9yY2VTdG9yZVJlcmVuZGVyKGZpYmVyKSB7XG4gICAgICB2YXIgcm9vdCA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShmaWJlciwgMik7XG4gICAgICBudWxsICE9PSByb290ICYmIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgMik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50U3RhdGVJbXBsKGluaXRpYWxTdGF0ZSkge1xuICAgICAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluaXRpYWxTdGF0ZSkge1xuICAgICAgICB2YXIgaW5pdGlhbFN0YXRlSW5pdGlhbGl6ZXIgPSBpbml0aWFsU3RhdGU7XG4gICAgICAgIGluaXRpYWxTdGF0ZSA9IGluaXRpYWxTdGF0ZUluaXRpYWxpemVyKCk7XG4gICAgICAgIGlmIChzaG91bGREb3VibGVJbnZva2VVc2VyRm5zSW5Ib29rc0RFVikge1xuICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCEwKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaW5pdGlhbFN0YXRlSW5pdGlhbGl6ZXIoKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gaG9vay5iYXNlU3RhdGUgPSBpbml0aWFsU3RhdGU7XG4gICAgICBob29rLnF1ZXVlID0ge1xuICAgICAgICBwZW5kaW5nOiBudWxsLFxuICAgICAgICBsYW5lczogMCxcbiAgICAgICAgZGlzcGF0Y2g6IG51bGwsXG4gICAgICAgIGxhc3RSZW5kZXJlZFJlZHVjZXI6IGJhc2ljU3RhdGVSZWR1Y2VyLFxuICAgICAgICBsYXN0UmVuZGVyZWRTdGF0ZTogaW5pdGlhbFN0YXRlXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGhvb2s7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBpbml0aWFsU3RhdGUgPSBtb3VudFN0YXRlSW1wbChpbml0aWFsU3RhdGUpO1xuICAgICAgdmFyIHF1ZXVlID0gaW5pdGlhbFN0YXRlLnF1ZXVlLFxuICAgICAgICBkaXNwYXRjaCA9IGRpc3BhdGNoU2V0U3RhdGUuYmluZChudWxsLCBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciwgcXVldWUpO1xuICAgICAgcXVldWUuZGlzcGF0Y2ggPSBkaXNwYXRjaDtcbiAgICAgIHJldHVybiBbaW5pdGlhbFN0YXRlLm1lbW9pemVkU3RhdGUsIGRpc3BhdGNoXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRPcHRpbWlzdGljKHBhc3N0aHJvdWdoKSB7XG4gICAgICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBob29rLmJhc2VTdGF0ZSA9IHBhc3N0aHJvdWdoO1xuICAgICAgdmFyIHF1ZXVlID0ge1xuICAgICAgICBwZW5kaW5nOiBudWxsLFxuICAgICAgICBsYW5lczogMCxcbiAgICAgICAgZGlzcGF0Y2g6IG51bGwsXG4gICAgICAgIGxhc3RSZW5kZXJlZFJlZHVjZXI6IG51bGwsXG4gICAgICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBudWxsXG4gICAgICB9O1xuICAgICAgaG9vay5xdWV1ZSA9IHF1ZXVlO1xuICAgICAgaG9vayA9IGRpc3BhdGNoT3B0aW1pc3RpY1NldFN0YXRlLmJpbmQoXG4gICAgICAgIG51bGwsXG4gICAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLFxuICAgICAgICAhMCxcbiAgICAgICAgcXVldWVcbiAgICAgICk7XG4gICAgICBxdWV1ZS5kaXNwYXRjaCA9IGhvb2s7XG4gICAgICByZXR1cm4gW3Bhc3N0aHJvdWdoLCBob29rXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlT3B0aW1pc3RpYyhwYXNzdGhyb3VnaCwgcmVkdWNlcikge1xuICAgICAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIHJldHVybiB1cGRhdGVPcHRpbWlzdGljSW1wbChob29rLCBjdXJyZW50SG9vaywgcGFzc3Rocm91Z2gsIHJlZHVjZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVPcHRpbWlzdGljSW1wbChob29rLCBjdXJyZW50LCBwYXNzdGhyb3VnaCwgcmVkdWNlcikge1xuICAgICAgaG9vay5iYXNlU3RhdGUgPSBwYXNzdGhyb3VnaDtcbiAgICAgIHJldHVybiB1cGRhdGVSZWR1Y2VySW1wbChcbiAgICAgICAgaG9vayxcbiAgICAgICAgY3VycmVudEhvb2ssXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHJlZHVjZXIgPyByZWR1Y2VyIDogYmFzaWNTdGF0ZVJlZHVjZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcmVuZGVyT3B0aW1pc3RpYyhwYXNzdGhyb3VnaCwgcmVkdWNlcikge1xuICAgICAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIGlmIChudWxsICE9PSBjdXJyZW50SG9vaylcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU9wdGltaXN0aWNJbXBsKGhvb2ssIGN1cnJlbnRIb29rLCBwYXNzdGhyb3VnaCwgcmVkdWNlcik7XG4gICAgICBob29rLmJhc2VTdGF0ZSA9IHBhc3N0aHJvdWdoO1xuICAgICAgcmV0dXJuIFtwYXNzdGhyb3VnaCwgaG9vay5xdWV1ZS5kaXNwYXRjaF07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRpc3BhdGNoQWN0aW9uU3RhdGUoXG4gICAgICBmaWJlcixcbiAgICAgIGFjdGlvblF1ZXVlLFxuICAgICAgc2V0UGVuZGluZ1N0YXRlLFxuICAgICAgc2V0U3RhdGUsXG4gICAgICBwYXlsb2FkXG4gICAgKSB7XG4gICAgICBpZiAoaXNSZW5kZXJQaGFzZVVwZGF0ZShmaWJlcikpXG4gICAgICAgIHRocm93IEVycm9yKFwiQ2Fubm90IHVwZGF0ZSBmb3JtIHN0YXRlIHdoaWxlIHJlbmRlcmluZy5cIik7XG4gICAgICBmaWJlciA9IGFjdGlvblF1ZXVlLmFjdGlvbjtcbiAgICAgIGlmIChudWxsICE9PSBmaWJlcikge1xuICAgICAgICB2YXIgYWN0aW9uTm9kZSA9IHtcbiAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgIGFjdGlvbjogZmliZXIsXG4gICAgICAgICAgbmV4dDogbnVsbCxcbiAgICAgICAgICBpc1RyYW5zaXRpb246ICEwLFxuICAgICAgICAgIHN0YXR1czogXCJwZW5kaW5nXCIsXG4gICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgcmVhc29uOiBudWxsLFxuICAgICAgICAgIGxpc3RlbmVyczogW10sXG4gICAgICAgICAgdGhlbjogZnVuY3Rpb24gKGxpc3RlbmVyKSB7XG4gICAgICAgICAgICBhY3Rpb25Ob2RlLmxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIG51bGwgIT09IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlRcbiAgICAgICAgICA/IHNldFBlbmRpbmdTdGF0ZSghMClcbiAgICAgICAgICA6IChhY3Rpb25Ob2RlLmlzVHJhbnNpdGlvbiA9ICExKTtcbiAgICAgICAgc2V0U3RhdGUoYWN0aW9uTm9kZSk7XG4gICAgICAgIHNldFBlbmRpbmdTdGF0ZSA9IGFjdGlvblF1ZXVlLnBlbmRpbmc7XG4gICAgICAgIG51bGwgPT09IHNldFBlbmRpbmdTdGF0ZVxuICAgICAgICAgID8gKChhY3Rpb25Ob2RlLm5leHQgPSBhY3Rpb25RdWV1ZS5wZW5kaW5nID0gYWN0aW9uTm9kZSksXG4gICAgICAgICAgICBydW5BY3Rpb25TdGF0ZUFjdGlvbihhY3Rpb25RdWV1ZSwgYWN0aW9uTm9kZSkpXG4gICAgICAgICAgOiAoKGFjdGlvbk5vZGUubmV4dCA9IHNldFBlbmRpbmdTdGF0ZS5uZXh0KSxcbiAgICAgICAgICAgIChhY3Rpb25RdWV1ZS5wZW5kaW5nID0gc2V0UGVuZGluZ1N0YXRlLm5leHQgPSBhY3Rpb25Ob2RlKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJ1bkFjdGlvblN0YXRlQWN0aW9uKGFjdGlvblF1ZXVlLCBub2RlKSB7XG4gICAgICB2YXIgYWN0aW9uID0gbm9kZS5hY3Rpb24sXG4gICAgICAgIHBheWxvYWQgPSBub2RlLnBheWxvYWQsXG4gICAgICAgIHByZXZTdGF0ZSA9IGFjdGlvblF1ZXVlLnN0YXRlO1xuICAgICAgaWYgKG5vZGUuaXNUcmFuc2l0aW9uKSB7XG4gICAgICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQsXG4gICAgICAgICAgY3VycmVudFRyYW5zaXRpb24gPSB7fTtcbiAgICAgICAgY3VycmVudFRyYW5zaXRpb24uX3VwZGF0ZWRGaWJlcnMgPSBuZXcgU2V0KCk7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSBjdXJyZW50VHJhbnNpdGlvbjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YXIgcmV0dXJuVmFsdWUgPSBhY3Rpb24ocHJldlN0YXRlLCBwYXlsb2FkKSxcbiAgICAgICAgICAgIG9uU3RhcnRUcmFuc2l0aW9uRmluaXNoID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUztcbiAgICAgICAgICBudWxsICE9PSBvblN0YXJ0VHJhbnNpdGlvbkZpbmlzaCAmJlxuICAgICAgICAgICAgb25TdGFydFRyYW5zaXRpb25GaW5pc2goY3VycmVudFRyYW5zaXRpb24sIHJldHVyblZhbHVlKTtcbiAgICAgICAgICBoYW5kbGVBY3Rpb25SZXR1cm5WYWx1ZShhY3Rpb25RdWV1ZSwgbm9kZSwgcmV0dXJuVmFsdWUpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIG9uQWN0aW9uRXJyb3IoYWN0aW9uUXVldWUsIG5vZGUsIGVycm9yKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBudWxsICE9PSBwcmV2VHJhbnNpdGlvbiAmJlxuICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudFRyYW5zaXRpb24udHlwZXMgJiZcbiAgICAgICAgICAgIChudWxsICE9PSBwcmV2VHJhbnNpdGlvbi50eXBlcyAmJlxuICAgICAgICAgICAgICBwcmV2VHJhbnNpdGlvbi50eXBlcyAhPT0gY3VycmVudFRyYW5zaXRpb24udHlwZXMgJiZcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIldlIGV4cGVjdGVkIGlubmVyIFRyYW5zaXRpb25zIHRvIGhhdmUgdHJhbnNmZXJyZWQgdGhlIG91dGVyIHR5cGVzIHNldCBhbmQgdGhhdCB5b3UgY2Fubm90IGFkZCB0byB0aGUgb3V0ZXIgVHJhbnNpdGlvbiB3aGlsZSBpbnNpZGUgdGhlIGlubmVyLlRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIChwcmV2VHJhbnNpdGlvbi50eXBlcyA9IGN1cnJlbnRUcmFuc2l0aW9uLnR5cGVzKSksXG4gICAgICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IHByZXZUcmFuc2l0aW9uKSxcbiAgICAgICAgICAgIG51bGwgPT09IHByZXZUcmFuc2l0aW9uICYmXG4gICAgICAgICAgICAgIGN1cnJlbnRUcmFuc2l0aW9uLl91cGRhdGVkRmliZXJzICYmXG4gICAgICAgICAgICAgICgoYWN0aW9uUXVldWUgPSBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycy5zaXplKSxcbiAgICAgICAgICAgICAgY3VycmVudFRyYW5zaXRpb24uX3VwZGF0ZWRGaWJlcnMuY2xlYXIoKSxcbiAgICAgICAgICAgICAgMTAgPCBhY3Rpb25RdWV1ZSAmJlxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICAgIFwiRGV0ZWN0ZWQgYSBsYXJnZSBudW1iZXIgb2YgdXBkYXRlcyBpbnNpZGUgc3RhcnRUcmFuc2l0aW9uLiBJZiB0aGlzIGlzIGR1ZSB0byBhIHN1YnNjcmlwdGlvbiBwbGVhc2UgcmUtd3JpdGUgaXQgdG8gdXNlIFJlYWN0IHByb3ZpZGVkIGhvb2tzLiBPdGhlcndpc2UgY29uY3VycmVudCBtb2RlIGd1YXJhbnRlZXMgYXJlIG9mZiB0aGUgdGFibGUuXCJcbiAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgKGN1cnJlbnRUcmFuc2l0aW9uID0gYWN0aW9uKHByZXZTdGF0ZSwgcGF5bG9hZCkpLFxuICAgICAgICAgICAgaGFuZGxlQWN0aW9uUmV0dXJuVmFsdWUoYWN0aW9uUXVldWUsIG5vZGUsIGN1cnJlbnRUcmFuc2l0aW9uKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IkNCkge1xuICAgICAgICAgIG9uQWN0aW9uRXJyb3IoYWN0aW9uUXVldWUsIG5vZGUsIGVycm9yJDQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZUFjdGlvblJldHVyblZhbHVlKGFjdGlvblF1ZXVlLCBub2RlLCByZXR1cm5WYWx1ZSkge1xuICAgICAgbnVsbCAhPT0gcmV0dXJuVmFsdWUgJiZcbiAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiByZXR1cm5WYWx1ZSAmJlxuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmV0dXJuVmFsdWUudGhlblxuICAgICAgICA/IChSZWFjdFNoYXJlZEludGVybmFscy5hc3luY1RyYW5zaXRpb25zKyssXG4gICAgICAgICAgcmV0dXJuVmFsdWUudGhlbihyZWxlYXNlQXN5bmNUcmFuc2l0aW9uLCByZWxlYXNlQXN5bmNUcmFuc2l0aW9uKSxcbiAgICAgICAgICByZXR1cm5WYWx1ZS50aGVuKFxuICAgICAgICAgICAgZnVuY3Rpb24gKG5leHRTdGF0ZSkge1xuICAgICAgICAgICAgICBvbkFjdGlvblN1Y2Nlc3MoYWN0aW9uUXVldWUsIG5vZGUsIG5leHRTdGF0ZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgIHJldHVybiBvbkFjdGlvbkVycm9yKGFjdGlvblF1ZXVlLCBub2RlLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKSxcbiAgICAgICAgICBub2RlLmlzVHJhbnNpdGlvbiB8fFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJBbiBhc3luYyBmdW5jdGlvbiB3aXRoIHVzZUFjdGlvblN0YXRlIHdhcyBjYWxsZWQgb3V0c2lkZSBvZiBhIHRyYW5zaXRpb24uIFRoaXMgaXMgbGlrZWx5IG5vdCB3aGF0IHlvdSBpbnRlbmRlZCAoZm9yIGV4YW1wbGUsIGlzUGVuZGluZyB3aWxsIG5vdCB1cGRhdGUgY29ycmVjdGx5KS4gRWl0aGVyIGNhbGwgdGhlIHJldHVybmVkIGZ1bmN0aW9uIGluc2lkZSBzdGFydFRyYW5zaXRpb24sIG9yIHBhc3MgaXQgdG8gYW4gYGFjdGlvbmAgb3IgYGZvcm1BY3Rpb25gIHByb3AuXCJcbiAgICAgICAgICAgICkpXG4gICAgICAgIDogb25BY3Rpb25TdWNjZXNzKGFjdGlvblF1ZXVlLCBub2RlLCByZXR1cm5WYWx1ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG9uQWN0aW9uU3VjY2VzcyhhY3Rpb25RdWV1ZSwgYWN0aW9uTm9kZSwgbmV4dFN0YXRlKSB7XG4gICAgICBhY3Rpb25Ob2RlLnN0YXR1cyA9IFwiZnVsZmlsbGVkXCI7XG4gICAgICBhY3Rpb25Ob2RlLnZhbHVlID0gbmV4dFN0YXRlO1xuICAgICAgbm90aWZ5QWN0aW9uTGlzdGVuZXJzKGFjdGlvbk5vZGUpO1xuICAgICAgYWN0aW9uUXVldWUuc3RhdGUgPSBuZXh0U3RhdGU7XG4gICAgICBhY3Rpb25Ob2RlID0gYWN0aW9uUXVldWUucGVuZGluZztcbiAgICAgIG51bGwgIT09IGFjdGlvbk5vZGUgJiZcbiAgICAgICAgKChuZXh0U3RhdGUgPSBhY3Rpb25Ob2RlLm5leHQpLFxuICAgICAgICBuZXh0U3RhdGUgPT09IGFjdGlvbk5vZGVcbiAgICAgICAgICA/IChhY3Rpb25RdWV1ZS5wZW5kaW5nID0gbnVsbClcbiAgICAgICAgICA6ICgobmV4dFN0YXRlID0gbmV4dFN0YXRlLm5leHQpLFxuICAgICAgICAgICAgKGFjdGlvbk5vZGUubmV4dCA9IG5leHRTdGF0ZSksXG4gICAgICAgICAgICBydW5BY3Rpb25TdGF0ZUFjdGlvbihhY3Rpb25RdWV1ZSwgbmV4dFN0YXRlKSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBvbkFjdGlvbkVycm9yKGFjdGlvblF1ZXVlLCBhY3Rpb25Ob2RlLCBlcnJvcikge1xuICAgICAgdmFyIGxhc3QgPSBhY3Rpb25RdWV1ZS5wZW5kaW5nO1xuICAgICAgYWN0aW9uUXVldWUucGVuZGluZyA9IG51bGw7XG4gICAgICBpZiAobnVsbCAhPT0gbGFzdCkge1xuICAgICAgICBsYXN0ID0gbGFzdC5uZXh0O1xuICAgICAgICBkb1xuICAgICAgICAgIChhY3Rpb25Ob2RlLnN0YXR1cyA9IFwicmVqZWN0ZWRcIiksXG4gICAgICAgICAgICAoYWN0aW9uTm9kZS5yZWFzb24gPSBlcnJvciksXG4gICAgICAgICAgICBub3RpZnlBY3Rpb25MaXN0ZW5lcnMoYWN0aW9uTm9kZSksXG4gICAgICAgICAgICAoYWN0aW9uTm9kZSA9IGFjdGlvbk5vZGUubmV4dCk7XG4gICAgICAgIHdoaWxlIChhY3Rpb25Ob2RlICE9PSBsYXN0KTtcbiAgICAgIH1cbiAgICAgIGFjdGlvblF1ZXVlLmFjdGlvbiA9IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vdGlmeUFjdGlvbkxpc3RlbmVycyhhY3Rpb25Ob2RlKSB7XG4gICAgICBhY3Rpb25Ob2RlID0gYWN0aW9uTm9kZS5saXN0ZW5lcnM7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFjdGlvbk5vZGUubGVuZ3RoOyBpKyspICgwLCBhY3Rpb25Ob2RlW2ldKSgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhY3Rpb25TdGF0ZVJlZHVjZXIob2xkU3RhdGUsIG5ld1N0YXRlKSB7XG4gICAgICByZXR1cm4gbmV3U3RhdGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50QWN0aW9uU3RhdGUoYWN0aW9uLCBpbml0aWFsU3RhdGVQcm9wKSB7XG4gICAgICBpZiAoaXNIeWRyYXRpbmcpIHtcbiAgICAgICAgdmFyIHNzckZvcm1TdGF0ZSA9IHdvcmtJblByb2dyZXNzUm9vdC5mb3JtU3RhdGU7XG4gICAgICAgIGlmIChudWxsICE9PSBzc3JGb3JtU3RhdGUpIHtcbiAgICAgICAgICBhOiB7XG4gICAgICAgICAgICB2YXIgaXNNYXRjaGluZyA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyO1xuICAgICAgICAgICAgaWYgKGlzSHlkcmF0aW5nKSB7XG4gICAgICAgICAgICAgIGlmIChuZXh0SHlkcmF0YWJsZUluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgdmFyIG1hcmtlckluc3RhbmNlID0gbmV4dEh5ZHJhdGFibGVJbnN0YW5jZTtcbiAgICAgICAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgICAgIHZhciBpblJvb3RPclNpbmdsZXRvbiA9IHJvb3RPclNpbmdsZXRvbkNvbnRleHQ7XG4gICAgICAgICAgICAgICAgICAgIDggIT09IG1hcmtlckluc3RhbmNlLm5vZGVUeXBlO1xuXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpblJvb3RPclNpbmdsZXRvbikge1xuICAgICAgICAgICAgICAgICAgICAgIG1hcmtlckluc3RhbmNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhayBiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG1hcmtlckluc3RhbmNlID0gZ2V0TmV4dEh5ZHJhdGFibGUoXG4gICAgICAgICAgICAgICAgICAgICAgbWFya2VySW5zdGFuY2UubmV4dFNpYmxpbmdcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bGwgPT09IG1hcmtlckluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgbWFya2VySW5zdGFuY2UgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGluUm9vdE9yU2luZ2xldG9uID0gbWFya2VySW5zdGFuY2UuZGF0YTtcbiAgICAgICAgICAgICAgICAgIG1hcmtlckluc3RhbmNlID1cbiAgICAgICAgICAgICAgICAgICAgaW5Sb290T3JTaW5nbGV0b24gPT09IEZPUk1fU1RBVEVfSVNfTUFUQ0hJTkcgfHxcbiAgICAgICAgICAgICAgICAgICAgaW5Sb290T3JTaW5nbGV0b24gPT09IEZPUk1fU1RBVEVfSVNfTk9UX01BVENISU5HXG4gICAgICAgICAgICAgICAgICAgICAgPyBtYXJrZXJJbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG1hcmtlckluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gZ2V0TmV4dEh5ZHJhdGFibGUoXG4gICAgICAgICAgICAgICAgICAgIG1hcmtlckluc3RhbmNlLm5leHRTaWJsaW5nXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgaXNNYXRjaGluZyA9IG1hcmtlckluc3RhbmNlLmRhdGEgPT09IEZPUk1fU1RBVEVfSVNfTUFUQ0hJTkc7XG4gICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aHJvd09uSHlkcmF0aW9uTWlzbWF0Y2goaXNNYXRjaGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpc01hdGNoaW5nID0gITE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlzTWF0Y2hpbmcgJiYgKGluaXRpYWxTdGF0ZVByb3AgPSBzc3JGb3JtU3RhdGVbMF0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzc3JGb3JtU3RhdGUgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgc3NyRm9ybVN0YXRlLm1lbW9pemVkU3RhdGUgPSBzc3JGb3JtU3RhdGUuYmFzZVN0YXRlID0gaW5pdGlhbFN0YXRlUHJvcDtcbiAgICAgIGlzTWF0Y2hpbmcgPSB7XG4gICAgICAgIHBlbmRpbmc6IG51bGwsXG4gICAgICAgIGxhbmVzOiAwLFxuICAgICAgICBkaXNwYXRjaDogbnVsbCxcbiAgICAgICAgbGFzdFJlbmRlcmVkUmVkdWNlcjogYWN0aW9uU3RhdGVSZWR1Y2VyLFxuICAgICAgICBsYXN0UmVuZGVyZWRTdGF0ZTogaW5pdGlhbFN0YXRlUHJvcFxuICAgICAgfTtcbiAgICAgIHNzckZvcm1TdGF0ZS5xdWV1ZSA9IGlzTWF0Y2hpbmc7XG4gICAgICBzc3JGb3JtU3RhdGUgPSBkaXNwYXRjaFNldFN0YXRlLmJpbmQoXG4gICAgICAgIG51bGwsXG4gICAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLFxuICAgICAgICBpc01hdGNoaW5nXG4gICAgICApO1xuICAgICAgaXNNYXRjaGluZy5kaXNwYXRjaCA9IHNzckZvcm1TdGF0ZTtcbiAgICAgIGlzTWF0Y2hpbmcgPSBtb3VudFN0YXRlSW1wbCghMSk7XG4gICAgICBpblJvb3RPclNpbmdsZXRvbiA9IGRpc3BhdGNoT3B0aW1pc3RpY1NldFN0YXRlLmJpbmQoXG4gICAgICAgIG51bGwsXG4gICAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLFxuICAgICAgICAhMSxcbiAgICAgICAgaXNNYXRjaGluZy5xdWV1ZVxuICAgICAgKTtcbiAgICAgIGlzTWF0Y2hpbmcgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgbWFya2VySW5zdGFuY2UgPSB7XG4gICAgICAgIHN0YXRlOiBpbml0aWFsU3RhdGVQcm9wLFxuICAgICAgICBkaXNwYXRjaDogbnVsbCxcbiAgICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICAgIHBlbmRpbmc6IG51bGxcbiAgICAgIH07XG4gICAgICBpc01hdGNoaW5nLnF1ZXVlID0gbWFya2VySW5zdGFuY2U7XG4gICAgICBzc3JGb3JtU3RhdGUgPSBkaXNwYXRjaEFjdGlvblN0YXRlLmJpbmQoXG4gICAgICAgIG51bGwsXG4gICAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLFxuICAgICAgICBtYXJrZXJJbnN0YW5jZSxcbiAgICAgICAgaW5Sb290T3JTaW5nbGV0b24sXG4gICAgICAgIHNzckZvcm1TdGF0ZVxuICAgICAgKTtcbiAgICAgIG1hcmtlckluc3RhbmNlLmRpc3BhdGNoID0gc3NyRm9ybVN0YXRlO1xuICAgICAgaXNNYXRjaGluZy5tZW1vaXplZFN0YXRlID0gYWN0aW9uO1xuICAgICAgcmV0dXJuIFtpbml0aWFsU3RhdGVQcm9wLCBzc3JGb3JtU3RhdGUsICExXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlQWN0aW9uU3RhdGUoYWN0aW9uKSB7XG4gICAgICB2YXIgc3RhdGVIb29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICByZXR1cm4gdXBkYXRlQWN0aW9uU3RhdGVJbXBsKHN0YXRlSG9vaywgY3VycmVudEhvb2ssIGFjdGlvbik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZUFjdGlvblN0YXRlSW1wbChzdGF0ZUhvb2ssIGN1cnJlbnRTdGF0ZUhvb2ssIGFjdGlvbikge1xuICAgICAgY3VycmVudFN0YXRlSG9vayA9IHVwZGF0ZVJlZHVjZXJJbXBsKFxuICAgICAgICBzdGF0ZUhvb2ssXG4gICAgICAgIGN1cnJlbnRTdGF0ZUhvb2ssXG4gICAgICAgIGFjdGlvblN0YXRlUmVkdWNlclxuICAgICAgKVswXTtcbiAgICAgIHN0YXRlSG9vayA9IHVwZGF0ZVJlZHVjZXIoYmFzaWNTdGF0ZVJlZHVjZXIpWzBdO1xuICAgICAgaWYgKFxuICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgY3VycmVudFN0YXRlSG9vayAmJlxuICAgICAgICBudWxsICE9PSBjdXJyZW50U3RhdGVIb29rICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGN1cnJlbnRTdGF0ZUhvb2sudGhlblxuICAgICAgKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhciBzdGF0ZSA9IHVzZVRoZW5hYmxlKGN1cnJlbnRTdGF0ZUhvb2spO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgaWYgKHggPT09IFN1c3BlbnNlRXhjZXB0aW9uKSB0aHJvdyBTdXNwZW5zZUFjdGlvbkV4Y2VwdGlvbjtcbiAgICAgICAgICB0aHJvdyB4O1xuICAgICAgICB9XG4gICAgICBlbHNlIHN0YXRlID0gY3VycmVudFN0YXRlSG9vaztcbiAgICAgIGN1cnJlbnRTdGF0ZUhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIHZhciBhY3Rpb25RdWV1ZSA9IGN1cnJlbnRTdGF0ZUhvb2sucXVldWUsXG4gICAgICAgIGRpc3BhdGNoID0gYWN0aW9uUXVldWUuZGlzcGF0Y2g7XG4gICAgICBhY3Rpb24gIT09IGN1cnJlbnRTdGF0ZUhvb2subWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAoKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLmZsYWdzIHw9IDIwNDgpLFxuICAgICAgICBwdXNoU2ltcGxlRWZmZWN0KFxuICAgICAgICAgIEhhc0VmZmVjdCB8IFBhc3NpdmUsXG4gICAgICAgICAgeyBkZXN0cm95OiB2b2lkIDAgfSxcbiAgICAgICAgICBhY3Rpb25TdGF0ZUFjdGlvbkVmZmVjdC5iaW5kKG51bGwsIGFjdGlvblF1ZXVlLCBhY3Rpb24pLFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKSk7XG4gICAgICByZXR1cm4gW3N0YXRlLCBkaXNwYXRjaCwgc3RhdGVIb29rXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWN0aW9uU3RhdGVBY3Rpb25FZmZlY3QoYWN0aW9uUXVldWUsIGFjdGlvbikge1xuICAgICAgYWN0aW9uUXVldWUuYWN0aW9uID0gYWN0aW9uO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXJlbmRlckFjdGlvblN0YXRlKGFjdGlvbikge1xuICAgICAgdmFyIHN0YXRlSG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpLFxuICAgICAgICBjdXJyZW50U3RhdGVIb29rID0gY3VycmVudEhvb2s7XG4gICAgICBpZiAobnVsbCAhPT0gY3VycmVudFN0YXRlSG9vaylcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUFjdGlvblN0YXRlSW1wbChzdGF0ZUhvb2ssIGN1cnJlbnRTdGF0ZUhvb2ssIGFjdGlvbik7XG4gICAgICB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIHN0YXRlSG9vayA9IHN0YXRlSG9vay5tZW1vaXplZFN0YXRlO1xuICAgICAgY3VycmVudFN0YXRlSG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgdmFyIGRpc3BhdGNoID0gY3VycmVudFN0YXRlSG9vay5xdWV1ZS5kaXNwYXRjaDtcbiAgICAgIGN1cnJlbnRTdGF0ZUhvb2subWVtb2l6ZWRTdGF0ZSA9IGFjdGlvbjtcbiAgICAgIHJldHVybiBbc3RhdGVIb29rLCBkaXNwYXRjaCwgITFdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoU2ltcGxlRWZmZWN0KHRhZywgaW5zdCwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICB0YWcgPSB7IHRhZzogdGFnLCBjcmVhdGU6IGNyZWF0ZSwgZGVwczogZGVwcywgaW5zdDogaW5zdCwgbmV4dDogbnVsbCB9O1xuICAgICAgaW5zdCA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLnVwZGF0ZVF1ZXVlO1xuICAgICAgbnVsbCA9PT0gaW5zdCAmJlxuICAgICAgICAoKGluc3QgPSBjcmVhdGVGdW5jdGlvbkNvbXBvbmVudFVwZGF0ZVF1ZXVlKCkpLFxuICAgICAgICAoY3VycmVudGx5UmVuZGVyaW5nRmliZXIudXBkYXRlUXVldWUgPSBpbnN0KSk7XG4gICAgICBjcmVhdGUgPSBpbnN0Lmxhc3RFZmZlY3Q7XG4gICAgICBudWxsID09PSBjcmVhdGVcbiAgICAgICAgPyAoaW5zdC5sYXN0RWZmZWN0ID0gdGFnLm5leHQgPSB0YWcpXG4gICAgICAgIDogKChkZXBzID0gY3JlYXRlLm5leHQpLFxuICAgICAgICAgIChjcmVhdGUubmV4dCA9IHRhZyksXG4gICAgICAgICAgKHRhZy5uZXh0ID0gZGVwcyksXG4gICAgICAgICAgKGluc3QubGFzdEVmZmVjdCA9IHRhZykpO1xuICAgICAgcmV0dXJuIHRhZztcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRSZWYoaW5pdGlhbFZhbHVlKSB7XG4gICAgICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICBpbml0aWFsVmFsdWUgPSB7IGN1cnJlbnQ6IGluaXRpYWxWYWx1ZSB9O1xuICAgICAgcmV0dXJuIChob29rLm1lbW9pemVkU3RhdGUgPSBpbml0aWFsVmFsdWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudEVmZmVjdEltcGwoZmliZXJGbGFncywgaG9va0ZsYWdzLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLmZsYWdzIHw9IGZpYmVyRmxhZ3M7XG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBwdXNoU2ltcGxlRWZmZWN0KFxuICAgICAgICBIYXNFZmZlY3QgfCBob29rRmxhZ3MsXG4gICAgICAgIHsgZGVzdHJveTogdm9pZCAwIH0sXG4gICAgICAgIGNyZWF0ZSxcbiAgICAgICAgdm9pZCAwID09PSBkZXBzID8gbnVsbCA6IGRlcHNcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZUVmZmVjdEltcGwoZmliZXJGbGFncywgaG9va0ZsYWdzLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICBkZXBzID0gdm9pZCAwID09PSBkZXBzID8gbnVsbCA6IGRlcHM7XG4gICAgICB2YXIgaW5zdCA9IGhvb2subWVtb2l6ZWRTdGF0ZS5pbnN0O1xuICAgICAgbnVsbCAhPT0gY3VycmVudEhvb2sgJiZcbiAgICAgIG51bGwgIT09IGRlcHMgJiZcbiAgICAgIGFyZUhvb2tJbnB1dHNFcXVhbChkZXBzLCBjdXJyZW50SG9vay5tZW1vaXplZFN0YXRlLmRlcHMpXG4gICAgICAgID8gKGhvb2subWVtb2l6ZWRTdGF0ZSA9IHB1c2hTaW1wbGVFZmZlY3QoaG9va0ZsYWdzLCBpbnN0LCBjcmVhdGUsIGRlcHMpKVxuICAgICAgICA6ICgoY3VycmVudGx5UmVuZGVyaW5nRmliZXIuZmxhZ3MgfD0gZmliZXJGbGFncyksXG4gICAgICAgICAgKGhvb2subWVtb2l6ZWRTdGF0ZSA9IHB1c2hTaW1wbGVFZmZlY3QoXG4gICAgICAgICAgICBIYXNFZmZlY3QgfCBob29rRmxhZ3MsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY3JlYXRlLFxuICAgICAgICAgICAgZGVwc1xuICAgICAgICAgICkpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAoY3VycmVudGx5UmVuZGVyaW5nRmliZXIubW9kZSAmIFN0cmljdEVmZmVjdHNNb2RlKSAhPT0gTm9Nb2RlXG4gICAgICAgID8gbW91bnRFZmZlY3RJbXBsKDI3NjgyNjExMiwgUGFzc2l2ZSwgY3JlYXRlLCBkZXBzKVxuICAgICAgICA6IG1vdW50RWZmZWN0SW1wbCg4MzkwNjU2LCBQYXNzaXZlLCBjcmVhdGUsIGRlcHMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudExheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIHZhciBmaWJlckZsYWdzID0gNDE5NDMwODtcbiAgICAgIChjdXJyZW50bHlSZW5kZXJpbmdGaWJlci5tb2RlICYgU3RyaWN0RWZmZWN0c01vZGUpICE9PSBOb01vZGUgJiZcbiAgICAgICAgKGZpYmVyRmxhZ3MgfD0gMTM0MjE3NzI4KTtcbiAgICAgIHJldHVybiBtb3VudEVmZmVjdEltcGwoZmliZXJGbGFncywgTGF5b3V0LCBjcmVhdGUsIGRlcHMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbXBlcmF0aXZlSGFuZGxlRWZmZWN0KGNyZWF0ZSwgcmVmKSB7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmVmKSB7XG4gICAgICAgIGNyZWF0ZSA9IGNyZWF0ZSgpO1xuICAgICAgICB2YXIgcmVmQ2xlYW51cCA9IHJlZihjcmVhdGUpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHJlZkNsZWFudXAgPyByZWZDbGVhbnVwKCkgOiByZWYobnVsbCk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAobnVsbCAhPT0gcmVmICYmIHZvaWQgMCAhPT0gcmVmKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHJlZi5oYXNPd25Qcm9wZXJ0eShcImN1cnJlbnRcIikgfHxcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiRXhwZWN0ZWQgdXNlSW1wZXJhdGl2ZUhhbmRsZSgpIGZpcnN0IGFyZ3VtZW50IHRvIGVpdGhlciBiZSBhIHJlZiBjYWxsYmFjayBvciBSZWFjdC5jcmVhdGVSZWYoKSBvYmplY3QuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLlwiLFxuICAgICAgICAgICAgICBcImFuIG9iamVjdCB3aXRoIGtleXMge1wiICsgT2JqZWN0LmtleXMocmVmKS5qb2luKFwiLCBcIikgKyBcIn1cIlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAoY3JlYXRlID0gY3JlYXRlKCkpLFxuICAgICAgICAgIChyZWYuY3VycmVudCA9IGNyZWF0ZSksXG4gICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBjcmVhdGUgJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkV4cGVjdGVkIHVzZUltcGVyYXRpdmVIYW5kbGUoKSBzZWNvbmQgYXJndW1lbnQgdG8gYmUgYSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBoYW5kbGUuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLlwiLFxuICAgICAgICAgIG51bGwgIT09IGNyZWF0ZSA/IHR5cGVvZiBjcmVhdGUgOiBcIm51bGxcIlxuICAgICAgICApO1xuICAgICAgZGVwcyA9IG51bGwgIT09IGRlcHMgJiYgdm9pZCAwICE9PSBkZXBzID8gZGVwcy5jb25jYXQoW3JlZl0pIDogbnVsbDtcbiAgICAgIHZhciBmaWJlckZsYWdzID0gNDE5NDMwODtcbiAgICAgIChjdXJyZW50bHlSZW5kZXJpbmdGaWJlci5tb2RlICYgU3RyaWN0RWZmZWN0c01vZGUpICE9PSBOb01vZGUgJiZcbiAgICAgICAgKGZpYmVyRmxhZ3MgfD0gMTM0MjE3NzI4KTtcbiAgICAgIG1vdW50RWZmZWN0SW1wbChcbiAgICAgICAgZmliZXJGbGFncyxcbiAgICAgICAgTGF5b3V0LFxuICAgICAgICBpbXBlcmF0aXZlSGFuZGxlRWZmZWN0LmJpbmQobnVsbCwgY3JlYXRlLCByZWYpLFxuICAgICAgICBkZXBzXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBjcmVhdGUgJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkV4cGVjdGVkIHVzZUltcGVyYXRpdmVIYW5kbGUoKSBzZWNvbmQgYXJndW1lbnQgdG8gYmUgYSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBoYW5kbGUuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLlwiLFxuICAgICAgICAgIG51bGwgIT09IGNyZWF0ZSA/IHR5cGVvZiBjcmVhdGUgOiBcIm51bGxcIlxuICAgICAgICApO1xuICAgICAgZGVwcyA9IG51bGwgIT09IGRlcHMgJiYgdm9pZCAwICE9PSBkZXBzID8gZGVwcy5jb25jYXQoW3JlZl0pIDogbnVsbDtcbiAgICAgIHVwZGF0ZUVmZmVjdEltcGwoXG4gICAgICAgIDQsXG4gICAgICAgIExheW91dCxcbiAgICAgICAgaW1wZXJhdGl2ZUhhbmRsZUVmZmVjdC5iaW5kKG51bGwsIGNyZWF0ZSwgcmVmKSxcbiAgICAgICAgZGVwc1xuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRDYWxsYmFjayhjYWxsYmFjaywgZGVwcykge1xuICAgICAgbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlID0gW1xuICAgICAgICBjYWxsYmFjayxcbiAgICAgICAgdm9pZCAwID09PSBkZXBzID8gbnVsbCA6IGRlcHNcbiAgICAgIF07XG4gICAgICByZXR1cm4gY2FsbGJhY2s7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgZGVwcyA9IHZvaWQgMCA9PT0gZGVwcyA/IG51bGwgOiBkZXBzO1xuICAgICAgdmFyIHByZXZTdGF0ZSA9IGhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgICAgIGlmIChudWxsICE9PSBkZXBzICYmIGFyZUhvb2tJbnB1dHNFcXVhbChkZXBzLCBwcmV2U3RhdGVbMV0pKVxuICAgICAgICByZXR1cm4gcHJldlN0YXRlWzBdO1xuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gW2NhbGxiYWNrLCBkZXBzXTtcbiAgICAgIHJldHVybiBjYWxsYmFjaztcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRNZW1vKG5leHRDcmVhdGUsIGRlcHMpIHtcbiAgICAgIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIGRlcHMgPSB2b2lkIDAgPT09IGRlcHMgPyBudWxsIDogZGVwcztcbiAgICAgIHZhciBuZXh0VmFsdWUgPSBuZXh0Q3JlYXRlKCk7XG4gICAgICBpZiAoc2hvdWxkRG91YmxlSW52b2tlVXNlckZuc0luSG9va3NERVYpIHtcbiAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG5leHRDcmVhdGUoKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IFtuZXh0VmFsdWUsIGRlcHNdO1xuICAgICAgcmV0dXJuIG5leHRWYWx1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlTWVtbyhuZXh0Q3JlYXRlLCBkZXBzKSB7XG4gICAgICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgZGVwcyA9IHZvaWQgMCA9PT0gZGVwcyA/IG51bGwgOiBkZXBzO1xuICAgICAgdmFyIHByZXZTdGF0ZSA9IGhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgICAgIGlmIChudWxsICE9PSBkZXBzICYmIGFyZUhvb2tJbnB1dHNFcXVhbChkZXBzLCBwcmV2U3RhdGVbMV0pKVxuICAgICAgICByZXR1cm4gcHJldlN0YXRlWzBdO1xuICAgICAgcHJldlN0YXRlID0gbmV4dENyZWF0ZSgpO1xuICAgICAgaWYgKHNob3VsZERvdWJsZUludm9rZVVzZXJGbnNJbkhvb2tzREVWKSB7XG4gICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCEwKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBuZXh0Q3JlYXRlKCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBbcHJldlN0YXRlLCBkZXBzXTtcbiAgICAgIHJldHVybiBwcmV2U3RhdGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50RGVmZXJyZWRWYWx1ZSh2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICByZXR1cm4gbW91bnREZWZlcnJlZFZhbHVlSW1wbChob29rLCB2YWx1ZSwgaW5pdGlhbFZhbHVlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlRGVmZXJyZWRWYWx1ZSh2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlZmVycmVkVmFsdWVJbXBsKFxuICAgICAgICBob29rLFxuICAgICAgICBjdXJyZW50SG9vay5tZW1vaXplZFN0YXRlLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgaW5pdGlhbFZhbHVlXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXJlbmRlckRlZmVycmVkVmFsdWUodmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIHJldHVybiBudWxsID09PSBjdXJyZW50SG9va1xuICAgICAgICA/IG1vdW50RGVmZXJyZWRWYWx1ZUltcGwoaG9vaywgdmFsdWUsIGluaXRpYWxWYWx1ZSlcbiAgICAgICAgOiB1cGRhdGVEZWZlcnJlZFZhbHVlSW1wbChcbiAgICAgICAgICAgIGhvb2ssXG4gICAgICAgICAgICBjdXJyZW50SG9vay5tZW1vaXplZFN0YXRlLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBpbml0aWFsVmFsdWVcbiAgICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudERlZmVycmVkVmFsdWVJbXBsKGhvb2ssIHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgIGlmICh2b2lkIDAgPT09IGluaXRpYWxWYWx1ZSB8fCAwICE9PSAocmVuZGVyTGFuZXMgJiAxMDczNzQxODI0KSlcbiAgICAgICAgcmV0dXJuIChob29rLm1lbW9pemVkU3RhdGUgPSB2YWx1ZSk7XG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBpbml0aWFsVmFsdWU7XG4gICAgICBob29rID0gcmVxdWVzdERlZmVycmVkTGFuZSgpO1xuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIubGFuZXMgfD0gaG9vaztcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyB8PSBob29rO1xuICAgICAgcmV0dXJuIGluaXRpYWxWYWx1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlRGVmZXJyZWRWYWx1ZUltcGwoaG9vaywgcHJldlZhbHVlLCB2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICBpZiAob2JqZWN0SXModmFsdWUsIHByZXZWYWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgICAgIGlmIChudWxsICE9PSBjdXJyZW50VHJlZUhpZGRlblN0YWNrQ3Vyc29yLmN1cnJlbnQpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgKGhvb2sgPSBtb3VudERlZmVycmVkVmFsdWVJbXBsKGhvb2ssIHZhbHVlLCBpbml0aWFsVmFsdWUpKSxcbiAgICAgICAgICBvYmplY3RJcyhob29rLCBwcmV2VmFsdWUpIHx8IChkaWRSZWNlaXZlVXBkYXRlID0gITApLFxuICAgICAgICAgIGhvb2tcbiAgICAgICAgKTtcbiAgICAgIGlmICgwID09PSAocmVuZGVyTGFuZXMgJiA0MikgfHwgMCAhPT0gKHJlbmRlckxhbmVzICYgMTA3Mzc0MTgyNCkpXG4gICAgICAgIHJldHVybiAoZGlkUmVjZWl2ZVVwZGF0ZSA9ICEwKSwgKGhvb2subWVtb2l6ZWRTdGF0ZSA9IHZhbHVlKTtcbiAgICAgIGhvb2sgPSByZXF1ZXN0RGVmZXJyZWRMYW5lKCk7XG4gICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlci5sYW5lcyB8PSBob29rO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzIHw9IGhvb2s7XG4gICAgICByZXR1cm4gcHJldlZhbHVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWxlYXNlQXN5bmNUcmFuc2l0aW9uKCkge1xuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuYXN5bmNUcmFuc2l0aW9ucy0tO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzdGFydFRyYW5zaXRpb24oXG4gICAgICBmaWJlcixcbiAgICAgIHF1ZXVlLFxuICAgICAgcGVuZGluZ1N0YXRlLFxuICAgICAgZmluaXNoZWRTdGF0ZSxcbiAgICAgIGNhbGxiYWNrXG4gICAgKSB7XG4gICAgICB2YXIgcHJldmlvdXNQcmlvcml0eSA9IFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnA7XG4gICAgICBSZWFjdERPTVNoYXJlZEludGVybmFscy5wID1cbiAgICAgICAgMCAhPT0gcHJldmlvdXNQcmlvcml0eSAmJiBwcmV2aW91c1ByaW9yaXR5IDwgQ29udGludW91c0V2ZW50UHJpb3JpdHlcbiAgICAgICAgICA/IHByZXZpb3VzUHJpb3JpdHlcbiAgICAgICAgICA6IENvbnRpbnVvdXNFdmVudFByaW9yaXR5O1xuICAgICAgdmFyIHByZXZUcmFuc2l0aW9uID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCxcbiAgICAgICAgY3VycmVudFRyYW5zaXRpb24gPSB7fTtcbiAgICAgIGN1cnJlbnRUcmFuc2l0aW9uLl91cGRhdGVkRmliZXJzID0gbmV3IFNldCgpO1xuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IGN1cnJlbnRUcmFuc2l0aW9uO1xuICAgICAgZGlzcGF0Y2hPcHRpbWlzdGljU2V0U3RhdGUoZmliZXIsICExLCBxdWV1ZSwgcGVuZGluZ1N0YXRlKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciByZXR1cm5WYWx1ZSA9IGNhbGxiYWNrKCksXG4gICAgICAgICAgb25TdGFydFRyYW5zaXRpb25GaW5pc2ggPSBSZWFjdFNoYXJlZEludGVybmFscy5TO1xuICAgICAgICBudWxsICE9PSBvblN0YXJ0VHJhbnNpdGlvbkZpbmlzaCAmJlxuICAgICAgICAgIG9uU3RhcnRUcmFuc2l0aW9uRmluaXNoKGN1cnJlbnRUcmFuc2l0aW9uLCByZXR1cm5WYWx1ZSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBudWxsICE9PSByZXR1cm5WYWx1ZSAmJlxuICAgICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiByZXR1cm5WYWx1ZSAmJlxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHJldHVyblZhbHVlLnRoZW5cbiAgICAgICAgKSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuYXN5bmNUcmFuc2l0aW9ucysrO1xuICAgICAgICAgIHJldHVyblZhbHVlLnRoZW4ocmVsZWFzZUFzeW5jVHJhbnNpdGlvbiwgcmVsZWFzZUFzeW5jVHJhbnNpdGlvbik7XG4gICAgICAgICAgdmFyIHRoZW5hYmxlRm9yRmluaXNoZWRTdGF0ZSA9IGNoYWluVGhlbmFibGVWYWx1ZShcbiAgICAgICAgICAgIHJldHVyblZhbHVlLFxuICAgICAgICAgICAgZmluaXNoZWRTdGF0ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgZGlzcGF0Y2hTZXRTdGF0ZUludGVybmFsKFxuICAgICAgICAgICAgZmliZXIsXG4gICAgICAgICAgICBxdWV1ZSxcbiAgICAgICAgICAgIHRoZW5hYmxlRm9yRmluaXNoZWRTdGF0ZSxcbiAgICAgICAgICAgIHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIGRpc3BhdGNoU2V0U3RhdGVJbnRlcm5hbChcbiAgICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgICAgcXVldWUsXG4gICAgICAgICAgICBmaW5pc2hlZFN0YXRlLFxuICAgICAgICAgICAgcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpXG4gICAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGRpc3BhdGNoU2V0U3RhdGVJbnRlcm5hbChcbiAgICAgICAgICBmaWJlcixcbiAgICAgICAgICBxdWV1ZSxcbiAgICAgICAgICB7IHRoZW46IGZ1bmN0aW9uICgpIHt9LCBzdGF0dXM6IFwicmVqZWN0ZWRcIiwgcmVhc29uOiBlcnJvciB9LFxuICAgICAgICAgIHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKVxuICAgICAgICApO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgKFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnAgPSBwcmV2aW91c1ByaW9yaXR5KSxcbiAgICAgICAgICBudWxsICE9PSBwcmV2VHJhbnNpdGlvbiAmJlxuICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudFRyYW5zaXRpb24udHlwZXMgJiZcbiAgICAgICAgICAgIChudWxsICE9PSBwcmV2VHJhbnNpdGlvbi50eXBlcyAmJlxuICAgICAgICAgICAgICBwcmV2VHJhbnNpdGlvbi50eXBlcyAhPT0gY3VycmVudFRyYW5zaXRpb24udHlwZXMgJiZcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIldlIGV4cGVjdGVkIGlubmVyIFRyYW5zaXRpb25zIHRvIGhhdmUgdHJhbnNmZXJyZWQgdGhlIG91dGVyIHR5cGVzIHNldCBhbmQgdGhhdCB5b3UgY2Fubm90IGFkZCB0byB0aGUgb3V0ZXIgVHJhbnNpdGlvbiB3aGlsZSBpbnNpZGUgdGhlIGlubmVyLlRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIChwcmV2VHJhbnNpdGlvbi50eXBlcyA9IGN1cnJlbnRUcmFuc2l0aW9uLnR5cGVzKSksXG4gICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSBwcmV2VHJhbnNpdGlvbiksXG4gICAgICAgICAgbnVsbCA9PT0gcHJldlRyYW5zaXRpb24gJiZcbiAgICAgICAgICAgIGN1cnJlbnRUcmFuc2l0aW9uLl91cGRhdGVkRmliZXJzICYmXG4gICAgICAgICAgICAoKGZpYmVyID0gY3VycmVudFRyYW5zaXRpb24uX3VwZGF0ZWRGaWJlcnMuc2l6ZSksXG4gICAgICAgICAgICBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycy5jbGVhcigpLFxuICAgICAgICAgICAgMTAgPCBmaWJlciAmJlxuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgXCJEZXRlY3RlZCBhIGxhcmdlIG51bWJlciBvZiB1cGRhdGVzIGluc2lkZSBzdGFydFRyYW5zaXRpb24uIElmIHRoaXMgaXMgZHVlIHRvIGEgc3Vic2NyaXB0aW9uIHBsZWFzZSByZS13cml0ZSBpdCB0byB1c2UgUmVhY3QgcHJvdmlkZWQgaG9va3MuIE90aGVyd2lzZSBjb25jdXJyZW50IG1vZGUgZ3VhcmFudGVlcyBhcmUgb2ZmIHRoZSB0YWJsZS5cIlxuICAgICAgICAgICAgICApKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc3RhcnRIb3N0VHJhbnNpdGlvbihmb3JtRmliZXIsIHBlbmRpbmdTdGF0ZSwgYWN0aW9uLCBmb3JtRGF0YSkge1xuICAgICAgaWYgKDUgIT09IGZvcm1GaWJlci50YWcpXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiRXhwZWN0ZWQgdGhlIGZvcm0gaW5zdGFuY2UgdG8gYmUgYSBIb3N0Q29tcG9uZW50LiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICk7XG4gICAgICB2YXIgcXVldWUgPSBlbnN1cmVGb3JtQ29tcG9uZW50SXNTdGF0ZWZ1bChmb3JtRmliZXIpLnF1ZXVlO1xuICAgICAgc3RhcnRUcmFuc2l0aW9uKFxuICAgICAgICBmb3JtRmliZXIsXG4gICAgICAgIHF1ZXVlLFxuICAgICAgICBwZW5kaW5nU3RhdGUsXG4gICAgICAgIE5vdFBlbmRpbmdUcmFuc2l0aW9uLFxuICAgICAgICBudWxsID09PSBhY3Rpb25cbiAgICAgICAgICA/IG5vb3BcbiAgICAgICAgICA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcmVxdWVzdEZvcm1SZXNldCQxKGZvcm1GaWJlcik7XG4gICAgICAgICAgICAgIHJldHVybiBhY3Rpb24oZm9ybURhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZW5zdXJlRm9ybUNvbXBvbmVudElzU3RhdGVmdWwoZm9ybUZpYmVyKSB7XG4gICAgICB2YXIgZXhpc3RpbmdTdGF0ZUhvb2sgPSBmb3JtRmliZXIubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIGlmIChudWxsICE9PSBleGlzdGluZ1N0YXRlSG9vaykgcmV0dXJuIGV4aXN0aW5nU3RhdGVIb29rO1xuICAgICAgZXhpc3RpbmdTdGF0ZUhvb2sgPSB7XG4gICAgICAgIG1lbW9pemVkU3RhdGU6IE5vdFBlbmRpbmdUcmFuc2l0aW9uLFxuICAgICAgICBiYXNlU3RhdGU6IE5vdFBlbmRpbmdUcmFuc2l0aW9uLFxuICAgICAgICBiYXNlUXVldWU6IG51bGwsXG4gICAgICAgIHF1ZXVlOiB7XG4gICAgICAgICAgcGVuZGluZzogbnVsbCxcbiAgICAgICAgICBsYW5lczogMCxcbiAgICAgICAgICBkaXNwYXRjaDogbnVsbCxcbiAgICAgICAgICBsYXN0UmVuZGVyZWRSZWR1Y2VyOiBiYXNpY1N0YXRlUmVkdWNlcixcbiAgICAgICAgICBsYXN0UmVuZGVyZWRTdGF0ZTogTm90UGVuZGluZ1RyYW5zaXRpb25cbiAgICAgICAgfSxcbiAgICAgICAgbmV4dDogbnVsbFxuICAgICAgfTtcbiAgICAgIHZhciBpbml0aWFsUmVzZXRTdGF0ZSA9IHt9O1xuICAgICAgZXhpc3RpbmdTdGF0ZUhvb2submV4dCA9IHtcbiAgICAgICAgbWVtb2l6ZWRTdGF0ZTogaW5pdGlhbFJlc2V0U3RhdGUsXG4gICAgICAgIGJhc2VTdGF0ZTogaW5pdGlhbFJlc2V0U3RhdGUsXG4gICAgICAgIGJhc2VRdWV1ZTogbnVsbCxcbiAgICAgICAgcXVldWU6IHtcbiAgICAgICAgICBwZW5kaW5nOiBudWxsLFxuICAgICAgICAgIGxhbmVzOiAwLFxuICAgICAgICAgIGRpc3BhdGNoOiBudWxsLFxuICAgICAgICAgIGxhc3RSZW5kZXJlZFJlZHVjZXI6IGJhc2ljU3RhdGVSZWR1Y2VyLFxuICAgICAgICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBpbml0aWFsUmVzZXRTdGF0ZVxuICAgICAgICB9LFxuICAgICAgICBuZXh0OiBudWxsXG4gICAgICB9O1xuICAgICAgZm9ybUZpYmVyLm1lbW9pemVkU3RhdGUgPSBleGlzdGluZ1N0YXRlSG9vaztcbiAgICAgIGZvcm1GaWJlciA9IGZvcm1GaWJlci5hbHRlcm5hdGU7XG4gICAgICBudWxsICE9PSBmb3JtRmliZXIgJiYgKGZvcm1GaWJlci5tZW1vaXplZFN0YXRlID0gZXhpc3RpbmdTdGF0ZUhvb2spO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nU3RhdGVIb29rO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXF1ZXN0Rm9ybVJlc2V0JDEoZm9ybUZpYmVyKSB7XG4gICAgICBudWxsID09PSBSZWFjdFNoYXJlZEludGVybmFscy5UICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJyZXF1ZXN0Rm9ybVJlc2V0IHdhcyBjYWxsZWQgb3V0c2lkZSBhIHRyYW5zaXRpb24gb3IgYWN0aW9uLiBUbyBmaXgsIG1vdmUgdG8gYW4gYWN0aW9uLCBvciB3cmFwIHdpdGggc3RhcnRUcmFuc2l0aW9uLlwiXG4gICAgICAgICk7XG4gICAgICB2YXIgc3RhdGVIb29rID0gZW5zdXJlRm9ybUNvbXBvbmVudElzU3RhdGVmdWwoZm9ybUZpYmVyKTtcbiAgICAgIG51bGwgPT09IHN0YXRlSG9vay5uZXh0ICYmXG4gICAgICAgIChzdGF0ZUhvb2sgPSBmb3JtRmliZXIuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUpO1xuICAgICAgZGlzcGF0Y2hTZXRTdGF0ZUludGVybmFsKFxuICAgICAgICBmb3JtRmliZXIsXG4gICAgICAgIHN0YXRlSG9vay5uZXh0LnF1ZXVlLFxuICAgICAgICB7fSxcbiAgICAgICAgcmVxdWVzdFVwZGF0ZUxhbmUoZm9ybUZpYmVyKVxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRUcmFuc2l0aW9uKCkge1xuICAgICAgdmFyIHN0YXRlSG9vayA9IG1vdW50U3RhdGVJbXBsKCExKTtcbiAgICAgIHN0YXRlSG9vayA9IHN0YXJ0VHJhbnNpdGlvbi5iaW5kKFxuICAgICAgICBudWxsLFxuICAgICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlcixcbiAgICAgICAgc3RhdGVIb29rLnF1ZXVlLFxuICAgICAgICAhMCxcbiAgICAgICAgITFcbiAgICAgICk7XG4gICAgICBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpLm1lbW9pemVkU3RhdGUgPSBzdGF0ZUhvb2s7XG4gICAgICByZXR1cm4gWyExLCBzdGF0ZUhvb2tdO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVUcmFuc2l0aW9uKCkge1xuICAgICAgdmFyIGJvb2xlYW5PclRoZW5hYmxlID0gdXBkYXRlUmVkdWNlcihiYXNpY1N0YXRlUmVkdWNlcilbMF0sXG4gICAgICAgIHN0YXJ0ID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCkubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIFwiYm9vbGVhblwiID09PSB0eXBlb2YgYm9vbGVhbk9yVGhlbmFibGVcbiAgICAgICAgICA/IGJvb2xlYW5PclRoZW5hYmxlXG4gICAgICAgICAgOiB1c2VUaGVuYWJsZShib29sZWFuT3JUaGVuYWJsZSksXG4gICAgICAgIHN0YXJ0XG4gICAgICBdO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXJlbmRlclRyYW5zaXRpb24oKSB7XG4gICAgICB2YXIgYm9vbGVhbk9yVGhlbmFibGUgPSByZXJlbmRlclJlZHVjZXIoYmFzaWNTdGF0ZVJlZHVjZXIpWzBdLFxuICAgICAgICBzdGFydCA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpLm1lbW9pemVkU3RhdGU7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBcImJvb2xlYW5cIiA9PT0gdHlwZW9mIGJvb2xlYW5PclRoZW5hYmxlXG4gICAgICAgICAgPyBib29sZWFuT3JUaGVuYWJsZVxuICAgICAgICAgIDogdXNlVGhlbmFibGUoYm9vbGVhbk9yVGhlbmFibGUpLFxuICAgICAgICBzdGFydFxuICAgICAgXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXNlSG9zdFRyYW5zaXRpb25TdGF0dXMoKSB7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoSG9zdFRyYW5zaXRpb25Db250ZXh0KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRJZCgpIHtcbiAgICAgIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKSxcbiAgICAgICAgaWRlbnRpZmllclByZWZpeCA9IHdvcmtJblByb2dyZXNzUm9vdC5pZGVudGlmaWVyUHJlZml4O1xuICAgICAgaWYgKGlzSHlkcmF0aW5nKSB7XG4gICAgICAgIHZhciB0cmVlSWQgPSB0cmVlQ29udGV4dE92ZXJmbG93O1xuICAgICAgICB2YXIgaWRXaXRoTGVhZGluZ0JpdCA9IHRyZWVDb250ZXh0SWQ7XG4gICAgICAgIHRyZWVJZCA9XG4gICAgICAgICAgKFxuICAgICAgICAgICAgaWRXaXRoTGVhZGluZ0JpdCAmIH4oMSA8PCAoMzIgLSBjbHozMihpZFdpdGhMZWFkaW5nQml0KSAtIDEpKVxuICAgICAgICAgICkudG9TdHJpbmcoMzIpICsgdHJlZUlkO1xuICAgICAgICBpZGVudGlmaWVyUHJlZml4ID0gXCJfXCIgKyBpZGVudGlmaWVyUHJlZml4ICsgXCJSX1wiICsgdHJlZUlkO1xuICAgICAgICB0cmVlSWQgPSBsb2NhbElkQ291bnRlcisrO1xuICAgICAgICAwIDwgdHJlZUlkICYmIChpZGVudGlmaWVyUHJlZml4ICs9IFwiSFwiICsgdHJlZUlkLnRvU3RyaW5nKDMyKSk7XG4gICAgICAgIGlkZW50aWZpZXJQcmVmaXggKz0gXCJfXCI7XG4gICAgICB9IGVsc2VcbiAgICAgICAgKHRyZWVJZCA9IGdsb2JhbENsaWVudElkQ291bnRlcisrKSxcbiAgICAgICAgICAoaWRlbnRpZmllclByZWZpeCA9XG4gICAgICAgICAgICBcIl9cIiArIGlkZW50aWZpZXJQcmVmaXggKyBcInJfXCIgKyB0cmVlSWQudG9TdHJpbmcoMzIpICsgXCJfXCIpO1xuICAgICAgcmV0dXJuIChob29rLm1lbW9pemVkU3RhdGUgPSBpZGVudGlmaWVyUHJlZml4KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRSZWZyZXNoKCkge1xuICAgICAgcmV0dXJuIChtb3VudFdvcmtJblByb2dyZXNzSG9vaygpLm1lbW9pemVkU3RhdGUgPSByZWZyZXNoQ2FjaGUuYmluZChcbiAgICAgICAgbnVsbCxcbiAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXJcbiAgICAgICkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWZyZXNoQ2FjaGUoZmliZXIsIHNlZWRLZXkpIHtcbiAgICAgIGZvciAodmFyIHByb3ZpZGVyID0gZmliZXIucmV0dXJuOyBudWxsICE9PSBwcm92aWRlcjsgKSB7XG4gICAgICAgIHN3aXRjaCAocHJvdmlkZXIudGFnKSB7XG4gICAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKHByb3ZpZGVyKTtcbiAgICAgICAgICAgIGZpYmVyID0gY3JlYXRlVXBkYXRlKGxhbmUpO1xuICAgICAgICAgICAgdmFyIHJvb3QgPSBlbnF1ZXVlVXBkYXRlKHByb3ZpZGVyLCBmaWJlciwgbGFuZSk7XG4gICAgICAgICAgICBudWxsICE9PSByb290ICYmXG4gICAgICAgICAgICAgIChzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgcHJvdmlkZXIsIGxhbmUpLFxuICAgICAgICAgICAgICBlbnRhbmdsZVRyYW5zaXRpb25zKHJvb3QsIHByb3ZpZGVyLCBsYW5lKSk7XG4gICAgICAgICAgICBwcm92aWRlciA9IGNyZWF0ZUNhY2hlKCk7XG4gICAgICAgICAgICBudWxsICE9PSBzZWVkS2V5ICYmXG4gICAgICAgICAgICAgIHZvaWQgMCAhPT0gc2VlZEtleSAmJlxuICAgICAgICAgICAgICBudWxsICE9PSByb290ICYmXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJUaGUgc2VlZCBhcmd1bWVudCBpcyBub3QgZW5hYmxlZCBvdXRzaWRlIGV4cGVyaW1lbnRhbCBjaGFubmVscy5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgZmliZXIucGF5bG9hZCA9IHsgY2FjaGU6IHByb3ZpZGVyIH07XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcHJvdmlkZXIgPSBwcm92aWRlci5yZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRpc3BhdGNoUmVkdWNlckFjdGlvbihmaWJlciwgcXVldWUsIGFjdGlvbikge1xuICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBhcmdzWzNdICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJTdGF0ZSB1cGRhdGVzIGZyb20gdGhlIHVzZVN0YXRlKCkgYW5kIHVzZVJlZHVjZXIoKSBIb29rcyBkb24ndCBzdXBwb3J0IHRoZSBzZWNvbmQgY2FsbGJhY2sgYXJndW1lbnQuIFRvIGV4ZWN1dGUgYSBzaWRlIGVmZmVjdCBhZnRlciByZW5kZXJpbmcsIGRlY2xhcmUgaXQgaW4gdGhlIGNvbXBvbmVudCBib2R5IHdpdGggdXNlRWZmZWN0KCkuXCJcbiAgICAgICAgKTtcbiAgICAgIGFyZ3MgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gICAgICB2YXIgdXBkYXRlID0ge1xuICAgICAgICBsYW5lOiBhcmdzLFxuICAgICAgICByZXZlcnRMYW5lOiAwLFxuICAgICAgICBnZXN0dXJlOiBudWxsLFxuICAgICAgICBhY3Rpb246IGFjdGlvbixcbiAgICAgICAgaGFzRWFnZXJTdGF0ZTogITEsXG4gICAgICAgIGVhZ2VyU3RhdGU6IG51bGwsXG4gICAgICAgIG5leHQ6IG51bGxcbiAgICAgIH07XG4gICAgICBpc1JlbmRlclBoYXNlVXBkYXRlKGZpYmVyKVxuICAgICAgICA/IGVucXVldWVSZW5kZXJQaGFzZVVwZGF0ZShxdWV1ZSwgdXBkYXRlKVxuICAgICAgICA6ICgodXBkYXRlID0gZW5xdWV1ZUNvbmN1cnJlbnRIb29rVXBkYXRlKGZpYmVyLCBxdWV1ZSwgdXBkYXRlLCBhcmdzKSksXG4gICAgICAgICAgbnVsbCAhPT0gdXBkYXRlICYmXG4gICAgICAgICAgICAoc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHVwZGF0ZSwgZmliZXIsIGFyZ3MpLFxuICAgICAgICAgICAgZW50YW5nbGVUcmFuc2l0aW9uVXBkYXRlKHVwZGF0ZSwgcXVldWUsIGFyZ3MpKSk7XG4gICAgICBtYXJrU3RhdGVVcGRhdGVTY2hlZHVsZWQoZmliZXIsIGFyZ3MpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkaXNwYXRjaFNldFN0YXRlKGZpYmVyLCBxdWV1ZSwgYWN0aW9uKSB7XG4gICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGFyZ3NbM10gJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIlN0YXRlIHVwZGF0ZXMgZnJvbSB0aGUgdXNlU3RhdGUoKSBhbmQgdXNlUmVkdWNlcigpIEhvb2tzIGRvbid0IHN1cHBvcnQgdGhlIHNlY29uZCBjYWxsYmFjayBhcmd1bWVudC4gVG8gZXhlY3V0ZSBhIHNpZGUgZWZmZWN0IGFmdGVyIHJlbmRlcmluZywgZGVjbGFyZSBpdCBpbiB0aGUgY29tcG9uZW50IGJvZHkgd2l0aCB1c2VFZmZlY3QoKS5cIlxuICAgICAgICApO1xuICAgICAgYXJncyA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgICAgIGRpc3BhdGNoU2V0U3RhdGVJbnRlcm5hbChmaWJlciwgcXVldWUsIGFjdGlvbiwgYXJncyk7XG4gICAgICBtYXJrU3RhdGVVcGRhdGVTY2hlZHVsZWQoZmliZXIsIGFyZ3MpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkaXNwYXRjaFNldFN0YXRlSW50ZXJuYWwoZmliZXIsIHF1ZXVlLCBhY3Rpb24sIGxhbmUpIHtcbiAgICAgIHZhciB1cGRhdGUgPSB7XG4gICAgICAgIGxhbmU6IGxhbmUsXG4gICAgICAgIHJldmVydExhbmU6IDAsXG4gICAgICAgIGdlc3R1cmU6IG51bGwsXG4gICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICBoYXNFYWdlclN0YXRlOiAhMSxcbiAgICAgICAgZWFnZXJTdGF0ZTogbnVsbCxcbiAgICAgICAgbmV4dDogbnVsbFxuICAgICAgfTtcbiAgICAgIGlmIChpc1JlbmRlclBoYXNlVXBkYXRlKGZpYmVyKSkgZW5xdWV1ZVJlbmRlclBoYXNlVXBkYXRlKHF1ZXVlLCB1cGRhdGUpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAwID09PSBmaWJlci5sYW5lcyAmJlxuICAgICAgICAgIChudWxsID09PSBhbHRlcm5hdGUgfHwgMCA9PT0gYWx0ZXJuYXRlLmxhbmVzKSAmJlxuICAgICAgICAgICgoYWx0ZXJuYXRlID0gcXVldWUubGFzdFJlbmRlcmVkUmVkdWNlciksIG51bGwgIT09IGFsdGVybmF0ZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50U3RhdGUgPSBxdWV1ZS5sYXN0UmVuZGVyZWRTdGF0ZSxcbiAgICAgICAgICAgICAgZWFnZXJTdGF0ZSA9IGFsdGVybmF0ZShjdXJyZW50U3RhdGUsIGFjdGlvbik7XG4gICAgICAgICAgICB1cGRhdGUuaGFzRWFnZXJTdGF0ZSA9ICEwO1xuICAgICAgICAgICAgdXBkYXRlLmVhZ2VyU3RhdGUgPSBlYWdlclN0YXRlO1xuICAgICAgICAgICAgaWYgKG9iamVjdElzKGVhZ2VyU3RhdGUsIGN1cnJlbnRTdGF0ZSkpXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgZW5xdWV1ZVVwZGF0ZSQxKGZpYmVyLCBxdWV1ZSwgdXBkYXRlLCAwKSxcbiAgICAgICAgICAgICAgICBudWxsID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QgJiZcbiAgICAgICAgICAgICAgICAgIGZpbmlzaFF1ZXVlaW5nQ29uY3VycmVudFVwZGF0ZXMoKSxcbiAgICAgICAgICAgICAgICAhMVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYWN0aW9uID0gZW5xdWV1ZUNvbmN1cnJlbnRIb29rVXBkYXRlKGZpYmVyLCBxdWV1ZSwgdXBkYXRlLCBsYW5lKTtcbiAgICAgICAgaWYgKG51bGwgIT09IGFjdGlvbilcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGFjdGlvbiwgZmliZXIsIGxhbmUpLFxuICAgICAgICAgICAgZW50YW5nbGVUcmFuc2l0aW9uVXBkYXRlKGFjdGlvbiwgcXVldWUsIGxhbmUpLFxuICAgICAgICAgICAgITBcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkaXNwYXRjaE9wdGltaXN0aWNTZXRTdGF0ZShcbiAgICAgIGZpYmVyLFxuICAgICAgdGhyb3dJZkR1cmluZ1JlbmRlcixcbiAgICAgIHF1ZXVlLFxuICAgICAgYWN0aW9uXG4gICAgKSB7XG4gICAgICBudWxsID09PSBSZWFjdFNoYXJlZEludGVybmFscy5UICYmXG4gICAgICAgIDAgPT09IGN1cnJlbnRFbnRhbmdsZWRMYW5lICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJBbiBvcHRpbWlzdGljIHN0YXRlIHVwZGF0ZSBvY2N1cnJlZCBvdXRzaWRlIGEgdHJhbnNpdGlvbiBvciBhY3Rpb24uIFRvIGZpeCwgbW92ZSB0aGUgdXBkYXRlIHRvIGFuIGFjdGlvbiwgb3Igd3JhcCB3aXRoIHN0YXJ0VHJhbnNpdGlvbi5cIlxuICAgICAgICApO1xuICAgICAgYWN0aW9uID0ge1xuICAgICAgICBsYW5lOiAyLFxuICAgICAgICByZXZlcnRMYW5lOiByZXF1ZXN0VHJhbnNpdGlvbkxhbmUoKSxcbiAgICAgICAgZ2VzdHVyZTogbnVsbCxcbiAgICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICAgIGhhc0VhZ2VyU3RhdGU6ICExLFxuICAgICAgICBlYWdlclN0YXRlOiBudWxsLFxuICAgICAgICBuZXh0OiBudWxsXG4gICAgICB9O1xuICAgICAgaWYgKGlzUmVuZGVyUGhhc2VVcGRhdGUoZmliZXIpKSB7XG4gICAgICAgIGlmICh0aHJvd0lmRHVyaW5nUmVuZGVyKVxuICAgICAgICAgIHRocm93IEVycm9yKFwiQ2Fubm90IHVwZGF0ZSBvcHRpbWlzdGljIHN0YXRlIHdoaWxlIHJlbmRlcmluZy5cIik7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJDYW5ub3QgY2FsbCBzdGFydFRyYW5zaXRpb24gd2hpbGUgcmVuZGVyaW5nLlwiKTtcbiAgICAgIH0gZWxzZVxuICAgICAgICAodGhyb3dJZkR1cmluZ1JlbmRlciA9IGVucXVldWVDb25jdXJyZW50SG9va1VwZGF0ZShcbiAgICAgICAgICBmaWJlcixcbiAgICAgICAgICBxdWV1ZSxcbiAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgMlxuICAgICAgICApKSxcbiAgICAgICAgICBudWxsICE9PSB0aHJvd0lmRHVyaW5nUmVuZGVyICYmXG4gICAgICAgICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIodGhyb3dJZkR1cmluZ1JlbmRlciwgZmliZXIsIDIpO1xuICAgICAgbWFya1N0YXRlVXBkYXRlU2NoZWR1bGVkKGZpYmVyLCAyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNSZW5kZXJQaGFzZVVwZGF0ZShmaWJlcikge1xuICAgICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGZpYmVyID09PSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciB8fFxuICAgICAgICAobnVsbCAhPT0gYWx0ZXJuYXRlICYmIGFsdGVybmF0ZSA9PT0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIpXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbnF1ZXVlUmVuZGVyUGhhc2VVcGRhdGUocXVldWUsIHVwZGF0ZSkge1xuICAgICAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzID1cbiAgICAgICAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9ICEwO1xuICAgICAgdmFyIHBlbmRpbmcgPSBxdWV1ZS5wZW5kaW5nO1xuICAgICAgbnVsbCA9PT0gcGVuZGluZ1xuICAgICAgICA/ICh1cGRhdGUubmV4dCA9IHVwZGF0ZSlcbiAgICAgICAgOiAoKHVwZGF0ZS5uZXh0ID0gcGVuZGluZy5uZXh0KSwgKHBlbmRpbmcubmV4dCA9IHVwZGF0ZSkpO1xuICAgICAgcXVldWUucGVuZGluZyA9IHVwZGF0ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZW50YW5nbGVUcmFuc2l0aW9uVXBkYXRlKHJvb3QsIHF1ZXVlLCBsYW5lKSB7XG4gICAgICBpZiAoMCAhPT0gKGxhbmUgJiA0MTk0MDQ4KSkge1xuICAgICAgICB2YXIgcXVldWVMYW5lcyA9IHF1ZXVlLmxhbmVzO1xuICAgICAgICBxdWV1ZUxhbmVzICY9IHJvb3QucGVuZGluZ0xhbmVzO1xuICAgICAgICBsYW5lIHw9IHF1ZXVlTGFuZXM7XG4gICAgICAgIHF1ZXVlLmxhbmVzID0gbGFuZTtcbiAgICAgICAgbWFya1Jvb3RFbnRhbmdsZWQocm9vdCwgbGFuZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhcm5PbkludmFsaWRDYWxsYmFjayhjYWxsYmFjaykge1xuICAgICAgaWYgKG51bGwgIT09IGNhbGxiYWNrICYmIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBrZXkgPSBTdHJpbmcoY2FsbGJhY2spO1xuICAgICAgICBkaWRXYXJuT25JbnZhbGlkQ2FsbGJhY2suaGFzKGtleSkgfHxcbiAgICAgICAgICAoZGlkV2Fybk9uSW52YWxpZENhbGxiYWNrLmFkZChrZXkpLFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkV4cGVjdGVkIHRoZSBsYXN0IG9wdGlvbmFsIGBjYWxsYmFja2AgYXJndW1lbnQgdG8gYmUgYSBmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogJXMuXCIsXG4gICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICkpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyhcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgY3RvcixcbiAgICAgIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyxcbiAgICAgIG5leHRQcm9wc1xuICAgICkge1xuICAgICAgdmFyIHByZXZTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUsXG4gICAgICAgIHBhcnRpYWxTdGF0ZSA9IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgICBpZiAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUpIHtcbiAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHBhcnRpYWxTdGF0ZSA9IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2b2lkIDAgPT09IHBhcnRpYWxTdGF0ZSAmJlxuICAgICAgICAoKGN0b3IgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoY3RvcikgfHwgXCJDb21wb25lbnRcIiksXG4gICAgICAgIGRpZFdhcm5BYm91dFVuZGVmaW5lZERlcml2ZWRTdGF0ZS5oYXMoY3RvcikgfHxcbiAgICAgICAgICAoZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlLmFkZChjdG9yKSxcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlcy5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoKTogQSB2YWxpZCBzdGF0ZSBvYmplY3QgKG9yIG51bGwpIG11c3QgYmUgcmV0dXJuZWQuIFlvdSBoYXZlIHJldHVybmVkIHVuZGVmaW5lZC5cIixcbiAgICAgICAgICAgIGN0b3JcbiAgICAgICAgICApKSk7XG4gICAgICBwcmV2U3RhdGUgPVxuICAgICAgICBudWxsID09PSBwYXJ0aWFsU3RhdGUgfHwgdm9pZCAwID09PSBwYXJ0aWFsU3RhdGVcbiAgICAgICAgICA/IHByZXZTdGF0ZVxuICAgICAgICAgIDogYXNzaWduKHt9LCBwcmV2U3RhdGUsIHBhcnRpYWxTdGF0ZSk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gcHJldlN0YXRlO1xuICAgICAgMCA9PT0gd29ya0luUHJvZ3Jlc3MubGFuZXMgJiZcbiAgICAgICAgKHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlLmJhc2VTdGF0ZSA9IHByZXZTdGF0ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrU2hvdWxkQ29tcG9uZW50VXBkYXRlKFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBjdG9yLFxuICAgICAgb2xkUHJvcHMsXG4gICAgICBuZXdQcm9wcyxcbiAgICAgIG9sZFN0YXRlLFxuICAgICAgbmV3U3RhdGUsXG4gICAgICBuZXh0Q29udGV4dFxuICAgICkge1xuICAgICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLnNob3VsZENvbXBvbmVudFVwZGF0ZSkge1xuICAgICAgICBvbGRQcm9wcyA9IGluc3RhbmNlLnNob3VsZENvbXBvbmVudFVwZGF0ZShcbiAgICAgICAgICBuZXdQcm9wcyxcbiAgICAgICAgICBuZXdTdGF0ZSxcbiAgICAgICAgICBuZXh0Q29udGV4dFxuICAgICAgICApO1xuICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUpIHtcbiAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG9sZFByb3BzID0gaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlKFxuICAgICAgICAgICAgICBuZXdQcm9wcyxcbiAgICAgICAgICAgICAgbmV3U3RhdGUsXG4gICAgICAgICAgICAgIG5leHRDb250ZXh0XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZvaWQgMCA9PT0gb2xkUHJvcHMgJiZcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlcy5zaG91bGRDb21wb25lbnRVcGRhdGUoKTogUmV0dXJuZWQgdW5kZWZpbmVkIGluc3RlYWQgb2YgYSBib29sZWFuIHZhbHVlLiBNYWtlIHN1cmUgdG8gcmV0dXJuIHRydWUgb3IgZmFsc2UuXCIsXG4gICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoY3RvcikgfHwgXCJDb21wb25lbnRcIlxuICAgICAgICAgICk7XG4gICAgICAgIHJldHVybiBvbGRQcm9wcztcbiAgICAgIH1cbiAgICAgIHJldHVybiBjdG9yLnByb3RvdHlwZSAmJiBjdG9yLnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudFxuICAgICAgICA/ICFzaGFsbG93RXF1YWwob2xkUHJvcHMsIG5ld1Byb3BzKSB8fCAhc2hhbGxvd0VxdWFsKG9sZFN0YXRlLCBuZXdTdGF0ZSlcbiAgICAgICAgOiAhMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2FsbENvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIGluc3RhbmNlLFxuICAgICAgbmV3UHJvcHMsXG4gICAgICBuZXh0Q29udGV4dFxuICAgICkge1xuICAgICAgdmFyIG9sZFN0YXRlID0gaW5zdGFuY2Uuc3RhdGU7XG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzICYmXG4gICAgICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV3UHJvcHMsIG5leHRDb250ZXh0KTtcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzICYmXG4gICAgICAgIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5ld1Byb3BzLCBuZXh0Q29udGV4dCk7XG4gICAgICBpbnN0YW5jZS5zdGF0ZSAhPT0gb2xkU3RhdGUgJiZcbiAgICAgICAgKCh3b3JrSW5Qcm9ncmVzcyA9XG4gICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcih3b3JrSW5Qcm9ncmVzcykgfHwgXCJDb21wb25lbnRcIiksXG4gICAgICAgIGRpZFdhcm5BYm91dFN0YXRlQXNzaWdubWVudEZvckNvbXBvbmVudC5oYXMod29ya0luUHJvZ3Jlc3MpIHx8XG4gICAgICAgICAgKGRpZFdhcm5BYm91dFN0YXRlQXNzaWdubWVudEZvckNvbXBvbmVudC5hZGQod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKTogQXNzaWduaW5nIGRpcmVjdGx5IHRvIHRoaXMuc3RhdGUgaXMgZGVwcmVjYXRlZCAoZXhjZXB0IGluc2lkZSBhIGNvbXBvbmVudCdzIGNvbnN0cnVjdG9yKS4gVXNlIHNldFN0YXRlIGluc3RlYWQuXCIsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgICkpLFxuICAgICAgICBjbGFzc0NvbXBvbmVudFVwZGF0ZXIuZW5xdWV1ZVJlcGxhY2VTdGF0ZShcbiAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICBpbnN0YW5jZS5zdGF0ZSxcbiAgICAgICAgICBudWxsXG4gICAgICAgICkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlQ2xhc3NDb21wb25lbnRQcm9wcyhDb21wb25lbnQsIGJhc2VQcm9wcykge1xuICAgICAgdmFyIG5ld1Byb3BzID0gYmFzZVByb3BzO1xuICAgICAgaWYgKFwicmVmXCIgaW4gYmFzZVByb3BzKSB7XG4gICAgICAgIG5ld1Byb3BzID0ge307XG4gICAgICAgIGZvciAodmFyIHByb3BOYW1lIGluIGJhc2VQcm9wcylcbiAgICAgICAgICBcInJlZlwiICE9PSBwcm9wTmFtZSAmJiAobmV3UHJvcHNbcHJvcE5hbWVdID0gYmFzZVByb3BzW3Byb3BOYW1lXSk7XG4gICAgICB9XG4gICAgICBpZiAoKENvbXBvbmVudCA9IENvbXBvbmVudC5kZWZhdWx0UHJvcHMpKSB7XG4gICAgICAgIG5ld1Byb3BzID09PSBiYXNlUHJvcHMgJiYgKG5ld1Byb3BzID0gYXNzaWduKHt9LCBuZXdQcm9wcykpO1xuICAgICAgICBmb3IgKHZhciBfcHJvcE5hbWUgaW4gQ29tcG9uZW50KVxuICAgICAgICAgIHZvaWQgMCA9PT0gbmV3UHJvcHNbX3Byb3BOYW1lXSAmJlxuICAgICAgICAgICAgKG5ld1Byb3BzW19wcm9wTmFtZV0gPSBDb21wb25lbnRbX3Byb3BOYW1lXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3UHJvcHM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlZmF1bHRPblVuY2F1Z2h0RXJyb3IoZXJyb3IpIHtcbiAgICAgIHJlcG9ydEdsb2JhbEVycm9yKGVycm9yKTtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCIlc1xcblxcbiVzXFxuXCIsXG4gICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICAgICAgICA/IFwiQW4gZXJyb3Igb2NjdXJyZWQgaW4gdGhlIDxcIiArIGNvbXBvbmVudE5hbWUgKyBcIj4gY29tcG9uZW50LlwiXG4gICAgICAgICAgOiBcIkFuIGVycm9yIG9jY3VycmVkIGluIG9uZSBvZiB5b3VyIFJlYWN0IGNvbXBvbmVudHMuXCIsXG4gICAgICAgIFwiQ29uc2lkZXIgYWRkaW5nIGFuIGVycm9yIGJvdW5kYXJ5IHRvIHlvdXIgdHJlZSB0byBjdXN0b21pemUgZXJyb3IgaGFuZGxpbmcgYmVoYXZpb3IuXFxuVmlzaXQgaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9lcnJvci1ib3VuZGFyaWVzIHRvIGxlYXJuIG1vcmUgYWJvdXQgZXJyb3IgYm91bmRhcmllcy5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVmYXVsdE9uQ2F1Z2h0RXJyb3IoZXJyb3IpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lTWVzc2FnZSA9IGNvbXBvbmVudE5hbWVcbiAgICAgICAgICA/IFwiVGhlIGFib3ZlIGVycm9yIG9jY3VycmVkIGluIHRoZSA8XCIgKyBjb21wb25lbnROYW1lICsgXCI+IGNvbXBvbmVudC5cIlxuICAgICAgICAgIDogXCJUaGUgYWJvdmUgZXJyb3Igb2NjdXJyZWQgaW4gb25lIG9mIHlvdXIgUmVhY3QgY29tcG9uZW50cy5cIixcbiAgICAgICAgcmVjcmVhdGVNZXNzYWdlID1cbiAgICAgICAgICBcIlJlYWN0IHdpbGwgdHJ5IHRvIHJlY3JlYXRlIHRoaXMgY29tcG9uZW50IHRyZWUgZnJvbSBzY3JhdGNoIHVzaW5nIHRoZSBlcnJvciBib3VuZGFyeSB5b3UgcHJvdmlkZWQsIFwiICtcbiAgICAgICAgICAoKGVycm9yQm91bmRhcnlOYW1lIHx8IFwiQW5vbnltb3VzXCIpICsgXCIuXCIpO1xuICAgICAgaWYgKFxuICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgZXJyb3IgJiZcbiAgICAgICAgbnVsbCAhPT0gZXJyb3IgJiZcbiAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGVycm9yLmVudmlyb25tZW50TmFtZVxuICAgICAgKSB7XG4gICAgICAgIHZhciBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSBlcnJvci5lbnZpcm9ubWVudE5hbWU7XG4gICAgICAgIGVycm9yID0gW1xuICAgICAgICAgIFwiJW9cXG5cXG4lc1xcblxcbiVzXFxuXCIsXG4gICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgY29tcG9uZW50TmFtZU1lc3NhZ2UsXG4gICAgICAgICAgcmVjcmVhdGVNZXNzYWdlXG4gICAgICAgIF0uc2xpY2UoMCk7XG4gICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBlcnJvclswXVxuICAgICAgICAgID8gZXJyb3Iuc3BsaWNlKFxuICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICBiYWRnZUZvcm1hdCArIGVycm9yWzBdLFxuICAgICAgICAgICAgICBiYWRnZVN0eWxlLFxuICAgICAgICAgICAgICBwYWQgKyBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgKyBwYWQsXG4gICAgICAgICAgICAgIHJlc2V0U3R5bGVcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IGVycm9yLnNwbGljZShcbiAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgYmFkZ2VGb3JtYXQsXG4gICAgICAgICAgICAgIGJhZGdlU3R5bGUsXG4gICAgICAgICAgICAgIHBhZCArIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCArIHBhZCxcbiAgICAgICAgICAgICAgcmVzZXRTdHlsZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgZXJyb3IudW5zaGlmdChjb25zb2xlKTtcbiAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gYmluZC5hcHBseShjb25zb2xlLmVycm9yLCBlcnJvcik7XG4gICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCgpO1xuICAgICAgfSBlbHNlXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCIlb1xcblxcbiVzXFxuXFxuJXNcXG5cIixcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgICBjb21wb25lbnROYW1lTWVzc2FnZSxcbiAgICAgICAgICByZWNyZWF0ZU1lc3NhZ2VcbiAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVmYXVsdE9uUmVjb3ZlcmFibGVFcnJvcihlcnJvcikge1xuICAgICAgcmVwb3J0R2xvYmFsRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBsb2dVbmNhdWdodEVycm9yKHJvb3QsIGVycm9ySW5mbykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29tcG9uZW50TmFtZSA9IGVycm9ySW5mby5zb3VyY2VcbiAgICAgICAgICA/IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZXJyb3JJbmZvLnNvdXJjZSlcbiAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGVycm9yQm91bmRhcnlOYW1lID0gbnVsbDtcbiAgICAgICAgdmFyIGVycm9yID0gZXJyb3JJbmZvLnZhbHVlO1xuICAgICAgICBpZiAobnVsbCAhPT0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWUpXG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB2YXIgb25VbmNhdWdodEVycm9yID0gcm9vdC5vblVuY2F1Z2h0RXJyb3I7XG4gICAgICAgICAgb25VbmNhdWdodEVycm9yKGVycm9yLCB7IGNvbXBvbmVudFN0YWNrOiBlcnJvckluZm8uc3RhY2sgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUkNSkge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aHJvdyBlJDU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBsb2dDYXVnaHRFcnJvcihyb290LCBib3VuZGFyeSwgZXJyb3JJbmZvKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb21wb25lbnROYW1lID0gZXJyb3JJbmZvLnNvdXJjZVxuICAgICAgICAgID8gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihlcnJvckluZm8uc291cmNlKVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgZXJyb3JCb3VuZGFyeU5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGJvdW5kYXJ5KTtcbiAgICAgICAgdmFyIG9uQ2F1Z2h0RXJyb3IgPSByb290Lm9uQ2F1Z2h0RXJyb3I7XG4gICAgICAgIG9uQ2F1Z2h0RXJyb3IoZXJyb3JJbmZvLnZhbHVlLCB7XG4gICAgICAgICAgY29tcG9uZW50U3RhY2s6IGVycm9ySW5mby5zdGFjayxcbiAgICAgICAgICBlcnJvckJvdW5kYXJ5OiAxID09PSBib3VuZGFyeS50YWcgPyBib3VuZGFyeS5zdGF0ZU5vZGUgOiBudWxsXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSQ2KSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRocm93IGUkNjtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZVJvb3RFcnJvclVwZGF0ZShyb290LCBlcnJvckluZm8sIGxhbmUpIHtcbiAgICAgIGxhbmUgPSBjcmVhdGVVcGRhdGUobGFuZSk7XG4gICAgICBsYW5lLnRhZyA9IENhcHR1cmVVcGRhdGU7XG4gICAgICBsYW5lLnBheWxvYWQgPSB7IGVsZW1lbnQ6IG51bGwgfTtcbiAgICAgIGxhbmUuY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJ1bldpdGhGaWJlckluREVWKGVycm9ySW5mby5zb3VyY2UsIGxvZ1VuY2F1Z2h0RXJyb3IsIHJvb3QsIGVycm9ySW5mbyk7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIGxhbmU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNsYXNzRXJyb3JVcGRhdGUobGFuZSkge1xuICAgICAgbGFuZSA9IGNyZWF0ZVVwZGF0ZShsYW5lKTtcbiAgICAgIGxhbmUudGFnID0gQ2FwdHVyZVVwZGF0ZTtcbiAgICAgIHJldHVybiBsYW5lO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbml0aWFsaXplQ2xhc3NFcnJvclVwZGF0ZSh1cGRhdGUsIHJvb3QsIGZpYmVyLCBlcnJvckluZm8pIHtcbiAgICAgIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgPSBmaWJlci50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IpIHtcbiAgICAgICAgdmFyIGVycm9yID0gZXJyb3JJbmZvLnZhbHVlO1xuICAgICAgICB1cGRhdGUucGF5bG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKGVycm9yKTtcbiAgICAgICAgfTtcbiAgICAgICAgdXBkYXRlLmNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIG1hcmtGYWlsZWRFcnJvckJvdW5kYXJ5Rm9ySG90UmVsb2FkaW5nKGZpYmVyKTtcbiAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgIGVycm9ySW5mby5zb3VyY2UsXG4gICAgICAgICAgICBsb2dDYXVnaHRFcnJvcixcbiAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICBmaWJlcixcbiAgICAgICAgICAgIGVycm9ySW5mb1xuICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB2YXIgaW5zdCA9IGZpYmVyLnN0YXRlTm9kZTtcbiAgICAgIG51bGwgIT09IGluc3QgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdC5jb21wb25lbnREaWRDYXRjaCAmJlxuICAgICAgICAodXBkYXRlLmNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIG1hcmtGYWlsZWRFcnJvckJvdW5kYXJ5Rm9ySG90UmVsb2FkaW5nKGZpYmVyKTtcbiAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgIGVycm9ySW5mby5zb3VyY2UsXG4gICAgICAgICAgICBsb2dDYXVnaHRFcnJvcixcbiAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICBmaWJlcixcbiAgICAgICAgICAgIGVycm9ySW5mb1xuICAgICAgICAgICk7XG4gICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yICYmXG4gICAgICAgICAgICAobnVsbCA9PT0gbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWRcbiAgICAgICAgICAgICAgPyAobGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgPSBuZXcgU2V0KFt0aGlzXSkpXG4gICAgICAgICAgICAgIDogbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQuYWRkKHRoaXMpKTtcbiAgICAgICAgICBjYWxsQ29tcG9uZW50RGlkQ2F0Y2hJbkRFVih0aGlzLCBlcnJvckluZm8pO1xuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciB8fFxuICAgICAgICAgICAgKDAgPT09IChmaWJlci5sYW5lcyAmIDIpICYmXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCIlczogRXJyb3IgYm91bmRhcmllcyBzaG91bGQgaW1wbGVtZW50IGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcigpLiBJbiB0aGF0IG1ldGhvZCwgcmV0dXJuIGEgc3RhdGUgdXBkYXRlIHRvIGRpc3BsYXkgYW4gZXJyb3IgbWVzc2FnZSBvciBmYWxsYmFjayBVSS5cIixcbiAgICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCBcIlVua25vd25cIlxuICAgICAgICAgICAgICApKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRocm93RXhjZXB0aW9uKFxuICAgICAgcm9vdCxcbiAgICAgIHJldHVybkZpYmVyLFxuICAgICAgc291cmNlRmliZXIsXG4gICAgICB2YWx1ZSxcbiAgICAgIHJvb3RSZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgc291cmNlRmliZXIuZmxhZ3MgfD0gMzI3Njg7XG4gICAgICBpc0RldlRvb2xzUHJlc2VudCAmJiByZXN0b3JlUGVuZGluZ1VwZGF0ZXJzKHJvb3QsIHJvb3RSZW5kZXJMYW5lcyk7XG4gICAgICBpZiAoXG4gICAgICAgIG51bGwgIT09IHZhbHVlICYmXG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiB2YWx1ZSAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB2YWx1ZS50aGVuXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuRmliZXIgPSBzb3VyY2VGaWJlci5hbHRlcm5hdGU7XG4gICAgICAgIG51bGwgIT09IHJldHVybkZpYmVyICYmXG4gICAgICAgICAgcHJvcGFnYXRlUGFyZW50Q29udGV4dENoYW5nZXMoXG4gICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgIHNvdXJjZUZpYmVyLFxuICAgICAgICAgICAgcm9vdFJlbmRlckxhbmVzLFxuICAgICAgICAgICAgITBcbiAgICAgICAgICApO1xuICAgICAgICBpc0h5ZHJhdGluZyAmJiAoZGlkU3VzcGVuZE9yRXJyb3JERVYgPSAhMCk7XG4gICAgICAgIHNvdXJjZUZpYmVyID0gc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IuY3VycmVudDtcbiAgICAgICAgaWYgKG51bGwgIT09IHNvdXJjZUZpYmVyKSB7XG4gICAgICAgICAgc3dpdGNoIChzb3VyY2VGaWJlci50YWcpIHtcbiAgICAgICAgICAgIGNhc2UgMzE6XG4gICAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIG51bGwgPT09IHNoZWxsQm91bmRhcnlcbiAgICAgICAgICAgICAgICAgID8gcmVuZGVyRGlkU3VzcGVuZERlbGF5SWZQb3NzaWJsZSgpXG4gICAgICAgICAgICAgICAgICA6IG51bGwgPT09IHNvdXJjZUZpYmVyLmFsdGVybmF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290SW5Qcm9ncmVzcyAmJlxuICAgICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RTdXNwZW5kZWQpLFxuICAgICAgICAgICAgICAgIChzb3VyY2VGaWJlci5mbGFncyAmPSAtMjU3KSxcbiAgICAgICAgICAgICAgICAoc291cmNlRmliZXIuZmxhZ3MgfD0gNjU1MzYpLFxuICAgICAgICAgICAgICAgIChzb3VyY2VGaWJlci5sYW5lcyA9IHJvb3RSZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAgICAgdmFsdWUgPT09IG5vb3BTdXNwZW5zZXlDb21taXRUaGVuYWJsZVxuICAgICAgICAgICAgICAgICAgPyAoc291cmNlRmliZXIuZmxhZ3MgfD0gMTYzODQpXG4gICAgICAgICAgICAgICAgICA6ICgocmV0dXJuRmliZXIgPSBzb3VyY2VGaWJlci51cGRhdGVRdWV1ZSksXG4gICAgICAgICAgICAgICAgICAgIG51bGwgPT09IHJldHVybkZpYmVyXG4gICAgICAgICAgICAgICAgICAgICAgPyAoc291cmNlRmliZXIudXBkYXRlUXVldWUgPSBuZXcgU2V0KFt2YWx1ZV0pKVxuICAgICAgICAgICAgICAgICAgICAgIDogcmV0dXJuRmliZXIuYWRkKHZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgYXR0YWNoUGluZ0xpc3RlbmVyKHJvb3QsIHZhbHVlLCByb290UmVuZGVyTGFuZXMpKSxcbiAgICAgICAgICAgICAgICAhMVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAoc291cmNlRmliZXIuZmxhZ3MgfD0gNjU1MzYpLFxuICAgICAgICAgICAgICAgIHZhbHVlID09PSBub29wU3VzcGVuc2V5Q29tbWl0VGhlbmFibGVcbiAgICAgICAgICAgICAgICAgID8gKHNvdXJjZUZpYmVyLmZsYWdzIHw9IDE2Mzg0KVxuICAgICAgICAgICAgICAgICAgOiAoKHJldHVybkZpYmVyID0gc291cmNlRmliZXIudXBkYXRlUXVldWUpLFxuICAgICAgICAgICAgICAgICAgICBudWxsID09PSByZXR1cm5GaWJlclxuICAgICAgICAgICAgICAgICAgICAgID8gKChyZXR1cm5GaWJlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbnM6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlckluc3RhbmNlczogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0cnlRdWV1ZTogbmV3IFNldChbdmFsdWVdKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAoc291cmNlRmliZXIudXBkYXRlUXVldWUgPSByZXR1cm5GaWJlcikpXG4gICAgICAgICAgICAgICAgICAgICAgOiAoKHNvdXJjZUZpYmVyID0gcmV0dXJuRmliZXIucmV0cnlRdWV1ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBudWxsID09PSBzb3VyY2VGaWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IChyZXR1cm5GaWJlci5yZXRyeVF1ZXVlID0gbmV3IFNldChbdmFsdWVdKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzb3VyY2VGaWJlci5hZGQodmFsdWUpKSxcbiAgICAgICAgICAgICAgICAgICAgYXR0YWNoUGluZ0xpc3RlbmVyKHJvb3QsIHZhbHVlLCByb290UmVuZGVyTGFuZXMpKSxcbiAgICAgICAgICAgICAgICAhMVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIFwiVW5leHBlY3RlZCBTdXNwZW5zZSBoYW5kbGVyIHRhZyAoXCIgK1xuICAgICAgICAgICAgICBzb3VyY2VGaWJlci50YWcgK1xuICAgICAgICAgICAgICBcIikuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGF0dGFjaFBpbmdMaXN0ZW5lcihyb290LCB2YWx1ZSwgcm9vdFJlbmRlckxhbmVzKTtcbiAgICAgICAgcmVuZGVyRGlkU3VzcGVuZERlbGF5SWZQb3NzaWJsZSgpO1xuICAgICAgICByZXR1cm4gITE7XG4gICAgICB9XG4gICAgICBpZiAoaXNIeWRyYXRpbmcpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgKGRpZFN1c3BlbmRPckVycm9yREVWID0gITApLFxuICAgICAgICAgIChyZXR1cm5GaWJlciA9IHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yLmN1cnJlbnQpLFxuICAgICAgICAgIG51bGwgIT09IHJldHVybkZpYmVyXG4gICAgICAgICAgICA/ICgwID09PSAocmV0dXJuRmliZXIuZmxhZ3MgJiA2NTUzNikgJiYgKHJldHVybkZpYmVyLmZsYWdzIHw9IDI1NiksXG4gICAgICAgICAgICAgIChyZXR1cm5GaWJlci5mbGFncyB8PSA2NTUzNiksXG4gICAgICAgICAgICAgIChyZXR1cm5GaWJlci5sYW5lcyA9IHJvb3RSZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAgIHZhbHVlICE9PSBIeWRyYXRpb25NaXNtYXRjaEV4Y2VwdGlvbiAmJlxuICAgICAgICAgICAgICAgIHF1ZXVlSHlkcmF0aW9uRXJyb3IoXG4gICAgICAgICAgICAgICAgICBjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlcihcbiAgICAgICAgICAgICAgICAgICAgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgXCJUaGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgaHlkcmF0aW5nIGJ1dCBSZWFjdCB3YXMgYWJsZSB0byByZWNvdmVyIGJ5IGluc3RlYWQgY2xpZW50IHJlbmRlcmluZyBmcm9tIHRoZSBuZWFyZXN0IFN1c3BlbnNlIGJvdW5kYXJ5LlwiLFxuICAgICAgICAgICAgICAgICAgICAgIHsgY2F1c2U6IHZhbHVlIH1cbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlRmliZXJcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgOiAodmFsdWUgIT09IEh5ZHJhdGlvbk1pc21hdGNoRXhjZXB0aW9uICYmXG4gICAgICAgICAgICAgICAgcXVldWVIeWRyYXRpb25FcnJvcihcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKFxuICAgICAgICAgICAgICAgICAgICBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICBcIlRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBoeWRyYXRpbmcgYnV0IFJlYWN0IHdhcyBhYmxlIHRvIHJlY292ZXIgYnkgaW5zdGVhZCBjbGllbnQgcmVuZGVyaW5nIHRoZSBlbnRpcmUgcm9vdC5cIixcbiAgICAgICAgICAgICAgICAgICAgICB7IGNhdXNlOiB2YWx1ZSB9XG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUZpYmVyXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgKHJvb3QgPSByb290LmN1cnJlbnQuYWx0ZXJuYXRlKSxcbiAgICAgICAgICAgICAgKHJvb3QuZmxhZ3MgfD0gNjU1MzYpLFxuICAgICAgICAgICAgICAocm9vdFJlbmRlckxhbmVzICY9IC1yb290UmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgICAocm9vdC5sYW5lcyB8PSByb290UmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgICAodmFsdWUgPSBjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlcih2YWx1ZSwgc291cmNlRmliZXIpKSxcbiAgICAgICAgICAgICAgKHJvb3RSZW5kZXJMYW5lcyA9IGNyZWF0ZVJvb3RFcnJvclVwZGF0ZShcbiAgICAgICAgICAgICAgICByb290LnN0YXRlTm9kZSxcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICByb290UmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIGVucXVldWVDYXB0dXJlZFVwZGF0ZShyb290LCByb290UmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzICE9PSBSb290U3VzcGVuZGVkV2l0aERlbGF5ICYmXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290RXJyb3JlZCkpLFxuICAgICAgICAgICExXG4gICAgICAgICk7XG4gICAgICB2YXIgZXJyb3IgPSBjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlcihcbiAgICAgICAgRXJyb3IoXG4gICAgICAgICAgXCJUaGVyZSB3YXMgYW4gZXJyb3IgZHVyaW5nIGNvbmN1cnJlbnQgcmVuZGVyaW5nIGJ1dCBSZWFjdCB3YXMgYWJsZSB0byByZWNvdmVyIGJ5IGluc3RlYWQgc3luY2hyb25vdXNseSByZW5kZXJpbmcgdGhlIGVudGlyZSByb290LlwiLFxuICAgICAgICAgIHsgY2F1c2U6IHZhbHVlIH1cbiAgICAgICAgKSxcbiAgICAgICAgc291cmNlRmliZXJcbiAgICAgICk7XG4gICAgICBudWxsID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3RDb25jdXJyZW50RXJyb3JzXG4gICAgICAgID8gKHdvcmtJblByb2dyZXNzUm9vdENvbmN1cnJlbnRFcnJvcnMgPSBbZXJyb3JdKVxuICAgICAgICA6IHdvcmtJblByb2dyZXNzUm9vdENvbmN1cnJlbnRFcnJvcnMucHVzaChlcnJvcik7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzICE9PSBSb290U3VzcGVuZGVkV2l0aERlbGF5ICYmXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEVycm9yZWQpO1xuICAgICAgaWYgKG51bGwgPT09IHJldHVybkZpYmVyKSByZXR1cm4gITA7XG4gICAgICB2YWx1ZSA9IGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKHZhbHVlLCBzb3VyY2VGaWJlcik7XG4gICAgICBzb3VyY2VGaWJlciA9IHJldHVybkZpYmVyO1xuICAgICAgZG8ge1xuICAgICAgICBzd2l0Y2ggKHNvdXJjZUZpYmVyLnRhZykge1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChzb3VyY2VGaWJlci5mbGFncyB8PSA2NTUzNiksXG4gICAgICAgICAgICAgIChyb290ID0gcm9vdFJlbmRlckxhbmVzICYgLXJvb3RSZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAgIChzb3VyY2VGaWJlci5sYW5lcyB8PSByb290KSxcbiAgICAgICAgICAgICAgKHJvb3QgPSBjcmVhdGVSb290RXJyb3JVcGRhdGUoXG4gICAgICAgICAgICAgICAgc291cmNlRmliZXIuc3RhdGVOb2RlLFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIHJvb3RcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIGVucXVldWVDYXB0dXJlZFVwZGF0ZShzb3VyY2VGaWJlciwgcm9vdCksXG4gICAgICAgICAgICAgICExXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKChyZXR1cm5GaWJlciA9IHNvdXJjZUZpYmVyLnR5cGUpLFxuICAgICAgICAgICAgICAoZXJyb3IgPSBzb3VyY2VGaWJlci5zdGF0ZU5vZGUpLFxuICAgICAgICAgICAgICAwID09PSAoc291cmNlRmliZXIuZmxhZ3MgJiAxMjgpICYmXG4gICAgICAgICAgICAgICAgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHJldHVybkZpYmVyLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciB8fFxuICAgICAgICAgICAgICAgICAgKG51bGwgIT09IGVycm9yICYmXG4gICAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGVycm9yLmNvbXBvbmVudERpZENhdGNoICYmXG4gICAgICAgICAgICAgICAgICAgIChudWxsID09PSBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICFsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZC5oYXMoZXJyb3IpKSkpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIChzb3VyY2VGaWJlci5mbGFncyB8PSA2NTUzNiksXG4gICAgICAgICAgICAgICAgKHJvb3RSZW5kZXJMYW5lcyAmPSAtcm9vdFJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgICAgICAoc291cmNlRmliZXIubGFuZXMgfD0gcm9vdFJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgICAgICAocm9vdFJlbmRlckxhbmVzID0gY3JlYXRlQ2xhc3NFcnJvclVwZGF0ZShyb290UmVuZGVyTGFuZXMpKSxcbiAgICAgICAgICAgICAgICBpbml0aWFsaXplQ2xhc3NFcnJvclVwZGF0ZShcbiAgICAgICAgICAgICAgICAgIHJvb3RSZW5kZXJMYW5lcyxcbiAgICAgICAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICAgICAgICBzb3VyY2VGaWJlcixcbiAgICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBlbnF1ZXVlQ2FwdHVyZWRVcGRhdGUoc291cmNlRmliZXIsIHJvb3RSZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAgICAgITFcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBzb3VyY2VGaWJlciA9IHNvdXJjZUZpYmVyLnJldHVybjtcbiAgICAgIH0gd2hpbGUgKG51bGwgIT09IHNvdXJjZUZpYmVyKTtcbiAgICAgIHJldHVybiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRyZW4oXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBuZXh0Q2hpbGRyZW4sXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPVxuICAgICAgICBudWxsID09PSBjdXJyZW50XG4gICAgICAgICAgPyBtb3VudENoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBudWxsLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKVxuICAgICAgICAgIDogcmVjb25jaWxlQ2hpbGRGaWJlcnMoXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICBjdXJyZW50LmNoaWxkLFxuICAgICAgICAgICAgICBuZXh0Q2hpbGRyZW4sXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVGb3J3YXJkUmVmKFxuICAgICAgY3VycmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgQ29tcG9uZW50LFxuICAgICAgbmV4dFByb3BzLFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIENvbXBvbmVudCA9IENvbXBvbmVudC5yZW5kZXI7XG4gICAgICB2YXIgcmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuICAgICAgaWYgKFwicmVmXCIgaW4gbmV4dFByb3BzKSB7XG4gICAgICAgIHZhciBwcm9wc1dpdGhvdXRSZWYgPSB7fTtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIG5leHRQcm9wcylcbiAgICAgICAgICBcInJlZlwiICE9PSBrZXkgJiYgKHByb3BzV2l0aG91dFJlZltrZXldID0gbmV4dFByb3BzW2tleV0pO1xuICAgICAgfSBlbHNlIHByb3BzV2l0aG91dFJlZiA9IG5leHRQcm9wcztcbiAgICAgIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgIG1hcmtDb21wb25lbnRSZW5kZXJTdGFydGVkKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIG5leHRQcm9wcyA9IHJlbmRlcldpdGhIb29rcyhcbiAgICAgICAgY3VycmVudCxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgcHJvcHNXaXRob3V0UmVmLFxuICAgICAgICByZWYsXG4gICAgICAgIHJlbmRlckxhbmVzXG4gICAgICApO1xuICAgICAga2V5ID0gY2hlY2tEaWRSZW5kZXJJZEhvb2soKTtcbiAgICAgIG1hcmtDb21wb25lbnRSZW5kZXJTdG9wcGVkKCk7XG4gICAgICBpZiAobnVsbCAhPT0gY3VycmVudCAmJiAhZGlkUmVjZWl2ZVVwZGF0ZSlcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBiYWlsb3V0SG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSxcbiAgICAgICAgICBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcylcbiAgICAgICAgKTtcbiAgICAgIGlzSHlkcmF0aW5nICYmIGtleSAmJiBwdXNoTWF0ZXJpYWxpemVkVHJlZUlkKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDE7XG4gICAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZU1lbW9Db21wb25lbnQoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBDb21wb25lbnQsXG4gICAgICBuZXh0UHJvcHMsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnQpIHtcbiAgICAgICAgdmFyIHR5cGUgPSBDb21wb25lbnQudHlwZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHR5cGUgJiZcbiAgICAgICAgICAhc2hvdWxkQ29uc3RydWN0KHR5cGUpICYmXG4gICAgICAgICAgdm9pZCAwID09PSB0eXBlLmRlZmF1bHRQcm9wcyAmJlxuICAgICAgICAgIG51bGwgPT09IENvbXBvbmVudC5jb21wYXJlXG4gICAgICAgIClcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKENvbXBvbmVudCA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyh0eXBlKSksXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudGFnID0gMTUpLFxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLnR5cGUgPSBDb21wb25lbnQpLFxuICAgICAgICAgICAgdmFsaWRhdGVGdW5jdGlvbkNvbXBvbmVudEluRGV2KHdvcmtJblByb2dyZXNzLCB0eXBlKSxcbiAgICAgICAgICAgIHVwZGF0ZVNpbXBsZU1lbW9Db21wb25lbnQoXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICBjdXJyZW50ID0gY3JlYXRlRmliZXJGcm9tVHlwZUFuZFByb3BzKFxuICAgICAgICAgIENvbXBvbmVudC50eXBlLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLm1vZGUsXG4gICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgKTtcbiAgICAgICAgY3VycmVudC5yZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWY7XG4gICAgICAgIGN1cnJlbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIHJldHVybiAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjdXJyZW50KTtcbiAgICAgIH1cbiAgICAgIHR5cGUgPSBjdXJyZW50LmNoaWxkO1xuICAgICAgaWYgKCFjaGVja1NjaGVkdWxlZFVwZGF0ZU9yQ29udGV4dChjdXJyZW50LCByZW5kZXJMYW5lcykpIHtcbiAgICAgICAgdmFyIHByZXZQcm9wcyA9IHR5cGUubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgQ29tcG9uZW50ID0gQ29tcG9uZW50LmNvbXBhcmU7XG4gICAgICAgIENvbXBvbmVudCA9IG51bGwgIT09IENvbXBvbmVudCA/IENvbXBvbmVudCA6IHNoYWxsb3dFcXVhbDtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIENvbXBvbmVudChwcmV2UHJvcHMsIG5leHRQcm9wcykgJiZcbiAgICAgICAgICBjdXJyZW50LnJlZiA9PT0gd29ya0luUHJvZ3Jlc3MucmVmXG4gICAgICAgIClcbiAgICAgICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDE7XG4gICAgICBjdXJyZW50ID0gY3JlYXRlV29ya0luUHJvZ3Jlc3ModHlwZSwgbmV4dFByb3BzKTtcbiAgICAgIGN1cnJlbnQucmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuICAgICAgY3VycmVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIHJldHVybiAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjdXJyZW50KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlU2ltcGxlTWVtb0NvbXBvbmVudChcbiAgICAgIGN1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIG5leHRQcm9wcyxcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICBpZiAobnVsbCAhPT0gY3VycmVudCkge1xuICAgICAgICB2YXIgcHJldlByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgc2hhbGxvd0VxdWFsKHByZXZQcm9wcywgbmV4dFByb3BzKSAmJlxuICAgICAgICAgIGN1cnJlbnQucmVmID09PSB3b3JrSW5Qcm9ncmVzcy5yZWYgJiZcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID09PSBjdXJyZW50LnR5cGVcbiAgICAgICAgKVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICgoZGlkUmVjZWl2ZVVwZGF0ZSA9ICExKSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMgPSBuZXh0UHJvcHMgPSBwcmV2UHJvcHMpLFxuICAgICAgICAgICAgY2hlY2tTY2hlZHVsZWRVcGRhdGVPckNvbnRleHQoY3VycmVudCwgcmVuZGVyTGFuZXMpKVxuICAgICAgICAgIClcbiAgICAgICAgICAgIDAgIT09IChjdXJyZW50LmZsYWdzICYgMTMxMDcyKSAmJiAoZGlkUmVjZWl2ZVVwZGF0ZSA9ICEwKTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubGFuZXMgPSBjdXJyZW50LmxhbmVzKSxcbiAgICAgICAgICAgICAgYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpXG4gICAgICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KFxuICAgICAgICBjdXJyZW50LFxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgIHJlbmRlckxhbmVzXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVPZmZzY3JlZW5Db21wb25lbnQoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICByZW5kZXJMYW5lcyxcbiAgICAgIG5leHRQcm9wc1xuICAgICkge1xuICAgICAgdmFyIG5leHRDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbixcbiAgICAgICAgcHJldlN0YXRlID0gbnVsbCAhPT0gY3VycmVudCA/IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSA6IG51bGw7XG4gICAgICBpZiAoXCJoaWRkZW5cIiA9PT0gbmV4dFByb3BzLm1vZGUpIHtcbiAgICAgICAgaWYgKDAgIT09ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDEyOCkpIHtcbiAgICAgICAgICBuZXh0UHJvcHMgPVxuICAgICAgICAgICAgbnVsbCAhPT0gcHJldlN0YXRlXG4gICAgICAgICAgICAgID8gcHJldlN0YXRlLmJhc2VMYW5lcyB8IHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgIDogcmVuZGVyTGFuZXM7XG4gICAgICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnQpIHtcbiAgICAgICAgICAgIG5leHRDaGlsZHJlbiA9IHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudC5jaGlsZDtcbiAgICAgICAgICAgIGZvciAocHJldlN0YXRlID0gMDsgbnVsbCAhPT0gbmV4dENoaWxkcmVuOyApXG4gICAgICAgICAgICAgIChwcmV2U3RhdGUgPVxuICAgICAgICAgICAgICAgIHByZXZTdGF0ZSB8IG5leHRDaGlsZHJlbi5sYW5lcyB8IG5leHRDaGlsZHJlbi5jaGlsZExhbmVzKSxcbiAgICAgICAgICAgICAgICAobmV4dENoaWxkcmVuID0gbmV4dENoaWxkcmVuLnNpYmxpbmcpO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IHByZXZTdGF0ZSAmIH5uZXh0UHJvcHM7XG4gICAgICAgICAgfSBlbHNlICh3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gMCksICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG51bGwpO1xuICAgICAgICAgIHJldHVybiBkZWZlckhpZGRlbk9mZnNjcmVlbkNvbXBvbmVudChcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoMCAhPT0gKHJlbmRlckxhbmVzICYgNTM2ODcwOTEyKSlcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IHsgYmFzZUxhbmVzOiAwLCBjYWNoZVBvb2w6IG51bGwgfSksXG4gICAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgICAgIHB1c2hUcmFuc2l0aW9uKFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIG51bGwgIT09IHByZXZTdGF0ZSA/IHByZXZTdGF0ZS5jYWNoZVBvb2wgOiBudWxsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICBudWxsICE9PSBwcmV2U3RhdGVcbiAgICAgICAgICAgICAgPyBwdXNoSGlkZGVuQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcHJldlN0YXRlKVxuICAgICAgICAgICAgICA6IHJldXNlSGlkZGVuQ29udGV4dE9uU3RhY2sod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgcHVzaE9mZnNjcmVlblN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmxhbmVzID0gd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IDUzNjg3MDkxMiksXG4gICAgICAgICAgICBkZWZlckhpZGRlbk9mZnNjcmVlbkNvbXBvbmVudChcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIG51bGwgIT09IHByZXZTdGF0ZVxuICAgICAgICAgICAgICAgID8gcHJldlN0YXRlLmJhc2VMYW5lcyB8IHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgOiByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgfSBlbHNlXG4gICAgICAgIG51bGwgIT09IHByZXZTdGF0ZVxuICAgICAgICAgID8gKHB1c2hUcmFuc2l0aW9uKHdvcmtJblByb2dyZXNzLCBwcmV2U3RhdGUuY2FjaGVQb29sKSxcbiAgICAgICAgICAgIHB1c2hIaWRkZW5Db250ZXh0KHdvcmtJblByb2dyZXNzLCBwcmV2U3RhdGUpLFxuICAgICAgICAgICAgcmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbCkpXG4gICAgICAgICAgOiAobnVsbCAhPT0gY3VycmVudCAmJiBwdXNoVHJhbnNpdGlvbih3b3JrSW5Qcm9ncmVzcywgbnVsbCksXG4gICAgICAgICAgICByZXVzZUhpZGRlbkNvbnRleHRPblN0YWNrKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIHJldXNlU3VzcGVuc2VIYW5kbGVyT25TdGFjayh3b3JrSW5Qcm9ncmVzcykpO1xuICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZWZlckhpZGRlbk9mZnNjcmVlbkNvbXBvbmVudChcbiAgICAgIGN1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIG5leHRCYXNlTGFuZXMsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IHBlZWtDYWNoZUZyb21Qb29sKCk7XG4gICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPVxuICAgICAgICBudWxsID09PSBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHRcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgcGFyZW50OiBDYWNoZUNvbnRleHQuX2N1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgICAgcG9vbDogSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0XG4gICAgICAgICAgICB9O1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IHtcbiAgICAgICAgYmFzZUxhbmVzOiBuZXh0QmFzZUxhbmVzLFxuICAgICAgICBjYWNoZVBvb2w6IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdFxuICAgICAgfTtcbiAgICAgIG51bGwgIT09IGN1cnJlbnQgJiYgcHVzaFRyYW5zaXRpb24od29ya0luUHJvZ3Jlc3MsIG51bGwpO1xuICAgICAgcmV1c2VIaWRkZW5Db250ZXh0T25TdGFjayh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBwdXNoT2Zmc2NyZWVuU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgcHJvcGFnYXRlUGFyZW50Q29udGV4dENoYW5nZXMoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzLCAhMCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRBY3Rpdml0eUNoaWxkcmVuKHdvcmtJblByb2dyZXNzLCBuZXh0UHJvcHMpIHtcbiAgICAgIHZhciBoaWRkZW5Qcm9wID0gbmV4dFByb3BzLmhpZGRlbjtcbiAgICAgIHZvaWQgMCAhPT0gaGlkZGVuUHJvcCAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICc8QWN0aXZpdHk+IGRvZXNuXFwndCBhY2NlcHQgYSBoaWRkZW4gcHJvcC4gVXNlIG1vZGU9XCJoaWRkZW5cIiBpbnN0ZWFkLlxcbi0gPEFjdGl2aXR5ICVzPlxcbisgPEFjdGl2aXR5ICVzPicsXG4gICAgICAgICAgITAgPT09IGhpZGRlblByb3BcbiAgICAgICAgICAgID8gXCJoaWRkZW5cIlxuICAgICAgICAgICAgOiAhMSA9PT0gaGlkZGVuUHJvcFxuICAgICAgICAgICAgICA/IFwiaGlkZGVuPXtmYWxzZX1cIlxuICAgICAgICAgICAgICA6IFwiaGlkZGVuPXsuLi59XCIsXG4gICAgICAgICAgaGlkZGVuUHJvcCA/ICdtb2RlPVwiaGlkZGVuXCInIDogJ21vZGU9XCJ2aXNpYmxlXCInXG4gICAgICAgICk7XG4gICAgICBuZXh0UHJvcHMgPSBtb3VudFdvcmtJblByb2dyZXNzT2Zmc2NyZWVuRmliZXIoXG4gICAgICAgIHsgbW9kZTogbmV4dFByb3BzLm1vZGUsIGNoaWxkcmVuOiBuZXh0UHJvcHMuY2hpbGRyZW4gfSxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubW9kZVxuICAgICAgKTtcbiAgICAgIG5leHRQcm9wcy5yZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWY7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG5leHRQcm9wcztcbiAgICAgIG5leHRQcm9wcy5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIHJldHVybiBuZXh0UHJvcHM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJldHJ5QWN0aXZpdHlDb21wb25lbnRXaXRob3V0SHlkcmF0aW5nKFxuICAgICAgY3VycmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIHJlY29uY2lsZUNoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBjdXJyZW50LmNoaWxkLCBudWxsLCByZW5kZXJMYW5lcyk7XG4gICAgICBjdXJyZW50ID0gbW91bnRBY3Rpdml0eUNoaWxkcmVuKFxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzXG4gICAgICApO1xuICAgICAgY3VycmVudC5mbGFncyB8PSAyO1xuICAgICAgcG9wU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcmtSZWYoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgIHZhciByZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWY7XG4gICAgICBpZiAobnVsbCA9PT0gcmVmKVxuICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgbnVsbCAhPT0gY3VycmVudC5yZWYgJiZcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNDE5NDgxNik7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHJlZiAmJiBcIm9iamVjdFwiICE9PSB0eXBlb2YgcmVmKVxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJFeHBlY3RlZCByZWYgdG8gYmUgYSBmdW5jdGlvbiwgYW4gb2JqZWN0IHJldHVybmVkIGJ5IFJlYWN0LmNyZWF0ZVJlZigpLCBvciB1bmRlZmluZWQvbnVsbC5cIlxuICAgICAgICAgICk7XG4gICAgICAgIGlmIChudWxsID09PSBjdXJyZW50IHx8IGN1cnJlbnQucmVmICE9PSByZWYpXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNDE5NDgxNjtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBDb21wb25lbnQsXG4gICAgICBuZXh0UHJvcHMsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICBDb21wb25lbnQucHJvdG90eXBlICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIENvbXBvbmVudC5wcm90b3R5cGUucmVuZGVyXG4gICAgICApIHtcbiAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoQ29tcG9uZW50KSB8fCBcIlVua25vd25cIjtcbiAgICAgICAgZGlkV2FybkFib3V0QmFkQ2xhc3NbY29tcG9uZW50TmFtZV0gfHxcbiAgICAgICAgICAoY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiVGhlIDwlcyAvPiBjb21wb25lbnQgYXBwZWFycyB0byBoYXZlIGEgcmVuZGVyIG1ldGhvZCwgYnV0IGRvZXNuJ3QgZXh0ZW5kIFJlYWN0LkNvbXBvbmVudC4gVGhpcyBpcyBsaWtlbHkgdG8gY2F1c2UgZXJyb3JzLiBDaGFuZ2UgJXMgdG8gZXh0ZW5kIFJlYWN0LkNvbXBvbmVudCBpbnN0ZWFkLlwiLFxuICAgICAgICAgICAgY29tcG9uZW50TmFtZSxcbiAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICAgICAgICApLFxuICAgICAgICAgIChkaWRXYXJuQWJvdXRCYWRDbGFzc1tjb21wb25lbnROYW1lXSA9ICEwKSk7XG4gICAgICB9XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSAmJlxuICAgICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRMZWdhY3lDb250ZXh0V2FybmluZyhcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICBudWxsXG4gICAgICAgICk7XG4gICAgICBudWxsID09PSBjdXJyZW50ICYmXG4gICAgICAgICh2YWxpZGF0ZUZ1bmN0aW9uQ29tcG9uZW50SW5EZXYod29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLnR5cGUpLFxuICAgICAgICBDb21wb25lbnQuY29udGV4dFR5cGVzICYmXG4gICAgICAgICAgKChjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKENvbXBvbmVudCkgfHwgXCJVbmtub3duXCIpLFxuICAgICAgICAgIGRpZFdhcm5BYm91dENvbnRleHRUeXBlc1tjb21wb25lbnROYW1lXSB8fFxuICAgICAgICAgICAgKChkaWRXYXJuQWJvdXRDb250ZXh0VHlwZXNbY29tcG9uZW50TmFtZV0gPSAhMCksXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIiVzIHVzZXMgdGhlIGxlZ2FjeSBjb250ZXh0VHlwZXMgQVBJIHdoaWNoIHdhcyByZW1vdmVkIGluIFJlYWN0IDE5LiBVc2UgUmVhY3QuY3JlYXRlQ29udGV4dCgpIHdpdGggUmVhY3QudXNlQ29udGV4dCgpIGluc3RlYWQuIChodHRwczovL3JlYWN0LmRldi9saW5rL2xlZ2FjeS1jb250ZXh0KVwiLFxuICAgICAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAgICAgICAgICApKSkpO1xuICAgICAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgbWFya0NvbXBvbmVudFJlbmRlclN0YXJ0ZWQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgQ29tcG9uZW50ID0gcmVuZGVyV2l0aEhvb2tzKFxuICAgICAgICBjdXJyZW50LFxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgIHZvaWQgMCxcbiAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICk7XG4gICAgICBuZXh0UHJvcHMgPSBjaGVja0RpZFJlbmRlcklkSG9vaygpO1xuICAgICAgbWFya0NvbXBvbmVudFJlbmRlclN0b3BwZWQoKTtcbiAgICAgIGlmIChudWxsICE9PSBjdXJyZW50ICYmICFkaWRSZWNlaXZlVXBkYXRlKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGJhaWxvdXRIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpLFxuICAgICAgICAgIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKVxuICAgICAgICApO1xuICAgICAgaXNIeWRyYXRpbmcgJiYgbmV4dFByb3BzICYmIHB1c2hNYXRlcmlhbGl6ZWRUcmVlSWQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTtcbiAgICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHJlbmRlckxhbmVzKTtcbiAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVwbGF5RnVuY3Rpb25Db21wb25lbnQoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBuZXh0UHJvcHMsXG4gICAgICBDb21wb25lbnQsXG4gICAgICBzZWNvbmRBcmcsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgbWFya0NvbXBvbmVudFJlbmRlclN0YXJ0ZWQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTtcbiAgICAgIGlnbm9yZVByZXZpb3VzRGVwZW5kZW5jaWVzID1cbiAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJiBjdXJyZW50LnR5cGUgIT09IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7XG4gICAgICBuZXh0UHJvcHMgPSByZW5kZXJXaXRoSG9va3NBZ2FpbihcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICBzZWNvbmRBcmdcbiAgICAgICk7XG4gICAgICBmaW5pc2hSZW5kZXJpbmdIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBDb21wb25lbnQgPSBjaGVja0RpZFJlbmRlcklkSG9vaygpO1xuICAgICAgbWFya0NvbXBvbmVudFJlbmRlclN0b3BwZWQoKTtcbiAgICAgIGlmIChudWxsICE9PSBjdXJyZW50ICYmICFkaWRSZWNlaXZlVXBkYXRlKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGJhaWxvdXRIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpLFxuICAgICAgICAgIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKVxuICAgICAgICApO1xuICAgICAgaXNIeWRyYXRpbmcgJiYgQ29tcG9uZW50ICYmIHB1c2hNYXRlcmlhbGl6ZWRUcmVlSWQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTtcbiAgICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlQ2xhc3NDb21wb25lbnQoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBDb21wb25lbnQsXG4gICAgICBuZXh0UHJvcHMsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgc3dpdGNoIChzaG91bGRFcnJvckltcGwod29ya0luUHJvZ3Jlc3MpKSB7XG4gICAgICAgIGNhc2UgITE6XG4gICAgICAgICAgdmFyIF9pbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSxcbiAgICAgICAgICAgIHN0YXRlID0gbmV3IHdvcmtJblByb2dyZXNzLnR5cGUoXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMsXG4gICAgICAgICAgICAgIF9pbnN0YW5jZS5jb250ZXh0XG4gICAgICAgICAgICApLnN0YXRlO1xuICAgICAgICAgIF9pbnN0YW5jZS51cGRhdGVyLmVucXVldWVTZXRTdGF0ZShfaW5zdGFuY2UsIHN0YXRlLCBudWxsKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAhMDpcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMjg7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNjU1MzY7XG4gICAgICAgICAgX2luc3RhbmNlID0gRXJyb3IoXCJTaW11bGF0ZWQgZXJyb3IgY29taW5nIGZyb20gRGV2VG9vbHNcIik7XG4gICAgICAgICAgdmFyIGxhbmUgPSByZW5kZXJMYW5lcyAmIC1yZW5kZXJMYW5lcztcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyB8PSBsYW5lO1xuICAgICAgICAgIHN0YXRlID0gd29ya0luUHJvZ3Jlc3NSb290O1xuICAgICAgICAgIGlmIChudWxsID09PSBzdGF0ZSlcbiAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICBcIkV4cGVjdGVkIGEgd29yay1pbi1wcm9ncmVzcyByb290LiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBsYW5lID0gY3JlYXRlQ2xhc3NFcnJvclVwZGF0ZShsYW5lKTtcbiAgICAgICAgICBpbml0aWFsaXplQ2xhc3NFcnJvclVwZGF0ZShcbiAgICAgICAgICAgIGxhbmUsXG4gICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIoX2luc3RhbmNlLCB3b3JrSW5Qcm9ncmVzcylcbiAgICAgICAgICApO1xuICAgICAgICAgIGVucXVldWVDYXB0dXJlZFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgbGFuZSk7XG4gICAgICB9XG4gICAgICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBpZiAobnVsbCA9PT0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlKSB7XG4gICAgICAgIHN0YXRlID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuICAgICAgICBfaW5zdGFuY2UgPSBDb21wb25lbnQuY29udGV4dFR5cGU7XG4gICAgICAgIFwiY29udGV4dFR5cGVcIiBpbiBDb21wb25lbnQgJiZcbiAgICAgICAgICBudWxsICE9PSBfaW5zdGFuY2UgJiZcbiAgICAgICAgICAodm9pZCAwID09PSBfaW5zdGFuY2UgfHwgX2luc3RhbmNlLiQkdHlwZW9mICE9PSBSRUFDVF9DT05URVhUX1RZUEUpICYmXG4gICAgICAgICAgIWRpZFdhcm5BYm91dEludmFsaWRhdGVDb250ZXh0VHlwZS5oYXMoQ29tcG9uZW50KSAmJlxuICAgICAgICAgIChkaWRXYXJuQWJvdXRJbnZhbGlkYXRlQ29udGV4dFR5cGUuYWRkKENvbXBvbmVudCksXG4gICAgICAgICAgKGxhbmUgPVxuICAgICAgICAgICAgdm9pZCAwID09PSBfaW5zdGFuY2VcbiAgICAgICAgICAgICAgPyBcIiBIb3dldmVyLCBpdCBpcyBzZXQgdG8gdW5kZWZpbmVkLiBUaGlzIGNhbiBiZSBjYXVzZWQgYnkgYSB0eXBvIG9yIGJ5IG1peGluZyB1cCBuYW1lZCBhbmQgZGVmYXVsdCBpbXBvcnRzLiBUaGlzIGNhbiBhbHNvIGhhcHBlbiBkdWUgdG8gYSBjaXJjdWxhciBkZXBlbmRlbmN5LCBzbyB0cnkgbW92aW5nIHRoZSBjcmVhdGVDb250ZXh0KCkgY2FsbCB0byBhIHNlcGFyYXRlIGZpbGUuXCJcbiAgICAgICAgICAgICAgOiBcIm9iamVjdFwiICE9PSB0eXBlb2YgX2luc3RhbmNlXG4gICAgICAgICAgICAgICAgPyBcIiBIb3dldmVyLCBpdCBpcyBzZXQgdG8gYSBcIiArIHR5cGVvZiBfaW5zdGFuY2UgKyBcIi5cIlxuICAgICAgICAgICAgICAgIDogX2luc3RhbmNlLiQkdHlwZW9mID09PSBSRUFDVF9DT05TVU1FUl9UWVBFXG4gICAgICAgICAgICAgICAgICA/IFwiIERpZCB5b3UgYWNjaWRlbnRhbGx5IHBhc3MgdGhlIENvbnRleHQuQ29uc3VtZXIgaW5zdGVhZD9cIlxuICAgICAgICAgICAgICAgICAgOiBcIiBIb3dldmVyLCBpdCBpcyBzZXQgdG8gYW4gb2JqZWN0IHdpdGgga2V5cyB7XCIgK1xuICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhfaW5zdGFuY2UpLmpvaW4oXCIsIFwiKSArXG4gICAgICAgICAgICAgICAgICAgIFwifS5cIiksXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiJXMgZGVmaW5lcyBhbiBpbnZhbGlkIGNvbnRleHRUeXBlLiBjb250ZXh0VHlwZSBzaG91bGQgcG9pbnQgdG8gdGhlIENvbnRleHQgb2JqZWN0IHJldHVybmVkIGJ5IFJlYWN0LmNyZWF0ZUNvbnRleHQoKS4lc1wiLFxuICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKENvbXBvbmVudCkgfHwgXCJDb21wb25lbnRcIixcbiAgICAgICAgICAgIGxhbmVcbiAgICAgICAgICApKTtcbiAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIF9pbnN0YW5jZSAmJlxuICAgICAgICAgIG51bGwgIT09IF9pbnN0YW5jZSAmJlxuICAgICAgICAgIChzdGF0ZSA9IHJlYWRDb250ZXh0KF9pbnN0YW5jZSkpO1xuICAgICAgICBfaW5zdGFuY2UgPSBuZXcgQ29tcG9uZW50KG5leHRQcm9wcywgc3RhdGUpO1xuICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUpIHtcbiAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIF9pbnN0YW5jZSA9IG5ldyBDb21wb25lbnQobmV4dFByb3BzLCBzdGF0ZSk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCExKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID1cbiAgICAgICAgICBudWxsICE9PSBfaW5zdGFuY2Uuc3RhdGUgJiYgdm9pZCAwICE9PSBfaW5zdGFuY2Uuc3RhdGVcbiAgICAgICAgICAgID8gX2luc3RhbmNlLnN0YXRlXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIF9pbnN0YW5jZS51cGRhdGVyID0gY2xhc3NDb21wb25lbnRVcGRhdGVyO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBfaW5zdGFuY2U7XG4gICAgICAgIF9pbnN0YW5jZS5fcmVhY3RJbnRlcm5hbHMgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgX2luc3RhbmNlLl9yZWFjdEludGVybmFsSW5zdGFuY2UgPSBmYWtlSW50ZXJuYWxJbnN0YW5jZTtcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgQ29tcG9uZW50LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyAmJlxuICAgICAgICAgIG51bGwgPT09IHN0YXRlICYmXG4gICAgICAgICAgKChzdGF0ZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShDb21wb25lbnQpIHx8IFwiQ29tcG9uZW50XCIpLFxuICAgICAgICAgIGRpZFdhcm5BYm91dFVuaW5pdGlhbGl6ZWRTdGF0ZS5oYXMoc3RhdGUpIHx8XG4gICAgICAgICAgICAoZGlkV2FybkFib3V0VW5pbml0aWFsaXplZFN0YXRlLmFkZChzdGF0ZSksXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcImAlc2AgdXNlcyBgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzYCBidXQgaXRzIGluaXRpYWwgc3RhdGUgaXMgJXMuIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkLiBJbnN0ZWFkLCBkZWZpbmUgdGhlIGluaXRpYWwgc3RhdGUgYnkgYXNzaWduaW5nIGFuIG9iamVjdCB0byBgdGhpcy5zdGF0ZWAgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIGAlc2AuIFRoaXMgZW5zdXJlcyB0aGF0IGBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNgIGFyZ3VtZW50cyBoYXZlIGEgY29uc2lzdGVudCBzaGFwZS5cIixcbiAgICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICAgIG51bGwgPT09IF9pbnN0YW5jZS5zdGF0ZSA/IFwibnVsbFwiIDogXCJ1bmRlZmluZWRcIixcbiAgICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICAgICkpKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgfHxcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGVcbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFyIGZvdW5kV2lsbFVwZGF0ZU5hbWUgPSAobGFuZSA9IHN0YXRlID0gbnVsbCk7XG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCAmJlxuICAgICAgICAgICEwICE9PSBfaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50Ll9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdcbiAgICAgICAgICAgID8gKHN0YXRlID0gXCJjb21wb25lbnRXaWxsTW91bnRcIilcbiAgICAgICAgICAgIDogXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgJiZcbiAgICAgICAgICAgICAgKHN0YXRlID0gXCJVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50XCIpO1xuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzICYmXG4gICAgICAgICAgITAgIT09XG4gICAgICAgICAgICBfaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcy5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nXG4gICAgICAgICAgICA/IChsYW5lID0gXCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzXCIpXG4gICAgICAgICAgICA6IFwiZnVuY3Rpb25cIiA9PT1cbiAgICAgICAgICAgICAgICB0eXBlb2YgX2luc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzICYmXG4gICAgICAgICAgICAgIChsYW5lID0gXCJVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1wiKTtcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZSAmJlxuICAgICAgICAgICEwICE9PSBfaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZS5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nXG4gICAgICAgICAgICA/IChmb3VuZFdpbGxVcGRhdGVOYW1lID0gXCJjb21wb25lbnRXaWxsVXBkYXRlXCIpXG4gICAgICAgICAgICA6IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSAmJlxuICAgICAgICAgICAgICAoZm91bmRXaWxsVXBkYXRlTmFtZSA9IFwiVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVcIik7XG4gICAgICAgICAgaWYgKG51bGwgIT09IHN0YXRlIHx8IG51bGwgIT09IGxhbmUgfHwgbnVsbCAhPT0gZm91bmRXaWxsVXBkYXRlTmFtZSkge1xuICAgICAgICAgICAgX2luc3RhbmNlID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKENvbXBvbmVudCkgfHwgXCJDb21wb25lbnRcIjtcbiAgICAgICAgICAgIHZhciBuZXdBcGlOYW1lID1cbiAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgQ29tcG9uZW50LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc1xuICAgICAgICAgICAgICAgID8gXCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoKVwiXG4gICAgICAgICAgICAgICAgOiBcImdldFNuYXBzaG90QmVmb3JlVXBkYXRlKClcIjtcbiAgICAgICAgICAgIGRpZFdhcm5BYm91dExlZ2FjeUxpZmVjeWNsZXNBbmREZXJpdmVkU3RhdGUuaGFzKF9pbnN0YW5jZSkgfHxcbiAgICAgICAgICAgICAgKGRpZFdhcm5BYm91dExlZ2FjeUxpZmVjeWNsZXNBbmREZXJpdmVkU3RhdGUuYWRkKF9pbnN0YW5jZSksXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJVbnNhZmUgbGVnYWN5IGxpZmVjeWNsZXMgd2lsbCBub3QgYmUgY2FsbGVkIGZvciBjb21wb25lbnRzIHVzaW5nIG5ldyBjb21wb25lbnQgQVBJcy5cXG5cXG4lcyB1c2VzICVzIGJ1dCBhbHNvIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgbGVnYWN5IGxpZmVjeWNsZXM6JXMlcyVzXFxuXFxuVGhlIGFib3ZlIGxpZmVjeWNsZXMgc2hvdWxkIGJlIHJlbW92ZWQuIExlYXJuIG1vcmUgYWJvdXQgdGhpcyB3YXJuaW5nIGhlcmU6XFxuaHR0cHM6Ly9yZWFjdC5kZXYvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXNcIixcbiAgICAgICAgICAgICAgICBfaW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgbmV3QXBpTmFtZSxcbiAgICAgICAgICAgICAgICBudWxsICE9PSBzdGF0ZSA/IFwiXFxuICBcIiArIHN0YXRlIDogXCJcIixcbiAgICAgICAgICAgICAgICBudWxsICE9PSBsYW5lID8gXCJcXG4gIFwiICsgbGFuZSA6IFwiXCIsXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gZm91bmRXaWxsVXBkYXRlTmFtZSA/IFwiXFxuICBcIiArIGZvdW5kV2lsbFVwZGF0ZU5hbWUgOiBcIlwiXG4gICAgICAgICAgICAgICkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgICAgIHN0YXRlID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKENvbXBvbmVudCkgfHwgXCJDb21wb25lbnRcIjtcbiAgICAgICAgX2luc3RhbmNlLnJlbmRlciB8fFxuICAgICAgICAgIChDb21wb25lbnQucHJvdG90eXBlICYmXG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgQ29tcG9uZW50LnByb3RvdHlwZS5yZW5kZXJcbiAgICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIk5vIGByZW5kZXJgIG1ldGhvZCBmb3VuZCBvbiB0aGUgJXMgaW5zdGFuY2U6IGRpZCB5b3UgYWNjaWRlbnRhbGx5IHJldHVybiBhbiBvYmplY3QgZnJvbSB0aGUgY29uc3RydWN0b3I/XCIsXG4gICAgICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiTm8gYHJlbmRlcmAgbWV0aG9kIGZvdW5kIG9uIHRoZSAlcyBpbnN0YW5jZTogeW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBkZWZpbmUgYHJlbmRlcmAuXCIsXG4gICAgICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICAgICAgKSk7XG4gICAgICAgICFfaW5zdGFuY2UuZ2V0SW5pdGlhbFN0YXRlIHx8XG4gICAgICAgICAgX2luc3RhbmNlLmdldEluaXRpYWxTdGF0ZS5pc1JlYWN0Q2xhc3NBcHByb3ZlZCB8fFxuICAgICAgICAgIF9pbnN0YW5jZS5zdGF0ZSB8fFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcImdldEluaXRpYWxTdGF0ZSB3YXMgZGVmaW5lZCBvbiAlcywgYSBwbGFpbiBKYXZhU2NyaXB0IGNsYXNzLiBUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBjbGFzc2VzIGNyZWF0ZWQgdXNpbmcgUmVhY3QuY3JlYXRlQ2xhc3MuIERpZCB5b3UgbWVhbiB0byBkZWZpbmUgYSBzdGF0ZSBwcm9wZXJ0eSBpbnN0ZWFkP1wiLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICApO1xuICAgICAgICBfaW5zdGFuY2UuZ2V0RGVmYXVsdFByb3BzICYmXG4gICAgICAgICAgIV9pbnN0YW5jZS5nZXREZWZhdWx0UHJvcHMuaXNSZWFjdENsYXNzQXBwcm92ZWQgJiZcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJnZXREZWZhdWx0UHJvcHMgd2FzIGRlZmluZWQgb24gJXMsIGEgcGxhaW4gSmF2YVNjcmlwdCBjbGFzcy4gVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgY2xhc3NlcyBjcmVhdGVkIHVzaW5nIFJlYWN0LmNyZWF0ZUNsYXNzLiBVc2UgYSBzdGF0aWMgcHJvcGVydHkgdG8gZGVmaW5lIGRlZmF1bHRQcm9wcyBpbnN0ZWFkLlwiLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICApO1xuICAgICAgICBfaW5zdGFuY2UuY29udGV4dFR5cGUgJiZcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJjb250ZXh0VHlwZSB3YXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBvbiAlcy4gVXNlIGEgc3RhdGljIHByb3BlcnR5IHRvIGRlZmluZSBjb250ZXh0VHlwZSBpbnN0ZWFkLlwiLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICApO1xuICAgICAgICBDb21wb25lbnQuY2hpbGRDb250ZXh0VHlwZXMgJiZcbiAgICAgICAgICAhZGlkV2FybkFib3V0Q2hpbGRDb250ZXh0VHlwZXMuaGFzKENvbXBvbmVudCkgJiZcbiAgICAgICAgICAoZGlkV2FybkFib3V0Q2hpbGRDb250ZXh0VHlwZXMuYWRkKENvbXBvbmVudCksXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiJXMgdXNlcyB0aGUgbGVnYWN5IGNoaWxkQ29udGV4dFR5cGVzIEFQSSB3aGljaCB3YXMgcmVtb3ZlZCBpbiBSZWFjdCAxOS4gVXNlIFJlYWN0LmNyZWF0ZUNvbnRleHQoKSBpbnN0ZWFkLiAoaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9sZWdhY3ktY29udGV4dClcIixcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgKSk7XG4gICAgICAgIENvbXBvbmVudC5jb250ZXh0VHlwZXMgJiZcbiAgICAgICAgICAhZGlkV2FybkFib3V0Q29udGV4dFR5cGVzJDEuaGFzKENvbXBvbmVudCkgJiZcbiAgICAgICAgICAoZGlkV2FybkFib3V0Q29udGV4dFR5cGVzJDEuYWRkKENvbXBvbmVudCksXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiJXMgdXNlcyB0aGUgbGVnYWN5IGNvbnRleHRUeXBlcyBBUEkgd2hpY2ggd2FzIHJlbW92ZWQgaW4gUmVhY3QgMTkuIFVzZSBSZWFjdC5jcmVhdGVDb250ZXh0KCkgd2l0aCBzdGF0aWMgY29udGV4dFR5cGUgaW5zdGVhZC4gKGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvbGVnYWN5LWNvbnRleHQpXCIsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICkpO1xuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50U2hvdWxkVXBkYXRlICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCBjb21wb25lbnRTaG91bGRVcGRhdGUoKS4gRGlkIHlvdSBtZWFuIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpPyBUaGUgbmFtZSBpcyBwaHJhc2VkIGFzIGEgcXVlc3Rpb24gYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgZXhwZWN0ZWQgdG8gcmV0dXJuIGEgdmFsdWUuXCIsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICk7XG4gICAgICAgIENvbXBvbmVudC5wcm90b3R5cGUgJiZcbiAgICAgICAgICBDb21wb25lbnQucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50ICYmXG4gICAgICAgICAgXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIF9pbnN0YW5jZS5zaG91bGRDb21wb25lbnRVcGRhdGUgJiZcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlcyBoYXMgYSBtZXRob2QgY2FsbGVkIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpLiBzaG91bGRDb21wb25lbnRVcGRhdGUgc2hvdWxkIG5vdCBiZSB1c2VkIHdoZW4gZXh0ZW5kaW5nIFJlYWN0LlB1cmVDb21wb25lbnQuIFBsZWFzZSBleHRlbmQgUmVhY3QuQ29tcG9uZW50IGlmIHNob3VsZENvbXBvbmVudFVwZGF0ZSBpcyB1c2VkLlwiLFxuICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKENvbXBvbmVudCkgfHwgXCJBIHB1cmUgY29tcG9uZW50XCJcbiAgICAgICAgICApO1xuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50RGlkVW5tb3VudCAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgY29tcG9uZW50RGlkVW5tb3VudCgpLiBCdXQgdGhlcmUgaXMgbm8gc3VjaCBsaWZlY3ljbGUgbWV0aG9kLiBEaWQgeW91IG1lYW4gY29tcG9uZW50V2lsbFVubW91bnQoKT9cIixcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgKTtcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudERpZFJlY2VpdmVQcm9wcyAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgY29tcG9uZW50RGlkUmVjZWl2ZVByb3BzKCkuIEJ1dCB0aGVyZSBpcyBubyBzdWNoIGxpZmVjeWNsZSBtZXRob2QuIElmIHlvdSBtZWFudCB0byB1cGRhdGUgdGhlIHN0YXRlIGluIHJlc3BvbnNlIHRvIGNoYW5naW5nIHByb3BzLCB1c2UgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpLiBJZiB5b3UgbWVhbnQgdG8gZmV0Y2ggZGF0YSBvciBydW4gc2lkZS1lZmZlY3RzIG9yIG11dGF0aW9ucyBhZnRlciBSZWFjdCBoYXMgdXBkYXRlZCB0aGUgVUksIHVzZSBjb21wb25lbnREaWRVcGRhdGUoKS5cIixcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgKTtcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMgJiZcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlcyBoYXMgYSBtZXRob2QgY2FsbGVkIGNvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMoKS4gRGlkIHlvdSBtZWFuIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKT9cIixcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgKTtcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcygpLiBEaWQgeW91IG1lYW4gVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKT9cIixcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgKTtcbiAgICAgICAgbGFuZSA9IF9pbnN0YW5jZS5wcm9wcyAhPT0gbmV4dFByb3BzO1xuICAgICAgICB2b2lkIDAgIT09IF9pbnN0YW5jZS5wcm9wcyAmJlxuICAgICAgICAgIGxhbmUgJiZcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJXaGVuIGNhbGxpbmcgc3VwZXIoKSBpbiBgJXNgLCBtYWtlIHN1cmUgdG8gcGFzcyB1cCB0aGUgc2FtZSBwcm9wcyB0aGF0IHlvdXIgY29tcG9uZW50J3MgY29uc3RydWN0b3Igd2FzIHBhc3NlZC5cIixcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgKTtcbiAgICAgICAgX2luc3RhbmNlLmRlZmF1bHRQcm9wcyAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIlNldHRpbmcgZGVmYXVsdFByb3BzIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgaWdub3JlZC4gSW5zdGVhZCwgZGVmaW5lIGRlZmF1bHRQcm9wcyBhcyBhIHN0YXRpYyBwcm9wZXJ0eSBvbiAlcy5cIixcbiAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICApO1xuICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBfaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgfHxcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlIHx8XG4gICAgICAgICAgZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlLmhhcyhDb21wb25lbnQpIHx8XG4gICAgICAgICAgKGRpZFdhcm5BYm91dEdldFNuYXBzaG90QmVmb3JlVXBkYXRlV2l0aG91dERpZFVwZGF0ZS5hZGQoQ29tcG9uZW50KSxcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlczogZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKSBzaG91bGQgYmUgdXNlZCB3aXRoIGNvbXBvbmVudERpZFVwZGF0ZSgpLiBUaGlzIGNvbXBvbmVudCBkZWZpbmVzIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCkgb25seS5cIixcbiAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShDb21wb25lbnQpXG4gICAgICAgICAgKSk7XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgJiZcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlczogZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKCkgaXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBtZXRob2QgYW5kIHdpbGwgYmUgaWdub3JlZC4gSW5zdGVhZCwgZGVjbGFyZSBpdCBhcyBhIHN0YXRpYyBtZXRob2QuXCIsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICk7XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgJiZcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlczogZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKCkgaXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBtZXRob2QgYW5kIHdpbGwgYmUgaWdub3JlZC4gSW5zdGVhZCwgZGVjbGFyZSBpdCBhcyBhIHN0YXRpYyBtZXRob2QuXCIsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICk7XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIENvbXBvbmVudC5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzOiBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpIGlzIGRlZmluZWQgYXMgYSBzdGF0aWMgbWV0aG9kIGFuZCB3aWxsIGJlIGlnbm9yZWQuIEluc3RlYWQsIGRlY2xhcmUgaXQgYXMgYW4gaW5zdGFuY2UgbWV0aG9kLlwiLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICApO1xuICAgICAgICAobGFuZSA9IF9pbnN0YW5jZS5zdGF0ZSkgJiZcbiAgICAgICAgICAoXCJvYmplY3RcIiAhPT0gdHlwZW9mIGxhbmUgfHwgaXNBcnJheUltcGwobGFuZSkpICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIiVzLnN0YXRlOiBtdXN0IGJlIHNldCB0byBhbiBvYmplY3Qgb3IgbnVsbFwiLCBzdGF0ZSk7XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5nZXRDaGlsZENvbnRleHQgJiZcbiAgICAgICAgICBcIm9iamVjdFwiICE9PSB0eXBlb2YgQ29tcG9uZW50LmNoaWxkQ29udGV4dFR5cGVzICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiJXMuZ2V0Q2hpbGRDb250ZXh0KCk6IGNoaWxkQ29udGV4dFR5cGVzIG11c3QgYmUgZGVmaW5lZCBpbiBvcmRlciB0byB1c2UgZ2V0Q2hpbGRDb250ZXh0KCkuXCIsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICk7XG4gICAgICAgIF9pbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICAgICAgX2luc3RhbmNlLnByb3BzID0gbmV4dFByb3BzO1xuICAgICAgICBfaW5zdGFuY2Uuc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICBfaW5zdGFuY2UucmVmcyA9IHt9O1xuICAgICAgICBpbml0aWFsaXplVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICBzdGF0ZSA9IENvbXBvbmVudC5jb250ZXh0VHlwZTtcbiAgICAgICAgX2luc3RhbmNlLmNvbnRleHQgPVxuICAgICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBzdGF0ZSAmJiBudWxsICE9PSBzdGF0ZVxuICAgICAgICAgICAgPyByZWFkQ29udGV4dChzdGF0ZSlcbiAgICAgICAgICAgIDogZW1wdHlDb250ZXh0T2JqZWN0O1xuICAgICAgICBfaW5zdGFuY2Uuc3RhdGUgPT09IG5leHRQcm9wcyAmJlxuICAgICAgICAgICgoc3RhdGUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoQ29tcG9uZW50KSB8fCBcIkNvbXBvbmVudFwiKSxcbiAgICAgICAgICBkaWRXYXJuQWJvdXREaXJlY3RseUFzc2lnbmluZ1Byb3BzVG9TdGF0ZS5oYXMoc3RhdGUpIHx8XG4gICAgICAgICAgICAoZGlkV2FybkFib3V0RGlyZWN0bHlBc3NpZ25pbmdQcm9wc1RvU3RhdGUuYWRkKHN0YXRlKSxcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiJXM6IEl0IGlzIG5vdCByZWNvbW1lbmRlZCB0byBhc3NpZ24gcHJvcHMgZGlyZWN0bHkgdG8gc3RhdGUgYmVjYXVzZSB1cGRhdGVzIHRvIHByb3BzIHdvbid0IGJlIHJlZmxlY3RlZCBpbiBzdGF0ZS4gSW4gbW9zdCBjYXNlcywgaXQgaXMgYmV0dGVyIHRvIHVzZSBwcm9wcyBkaXJlY3RseS5cIixcbiAgICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICAgICkpKTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUgJiZcbiAgICAgICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRMZWdhY3lDb250ZXh0V2FybmluZyhcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgX2luc3RhbmNlXG4gICAgICAgICAgKTtcbiAgICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MoXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgX2luc3RhbmNlXG4gICAgICAgICk7XG4gICAgICAgIF9pbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIHN0YXRlID0gQ29tcG9uZW50LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2Ygc3RhdGUgJiZcbiAgICAgICAgICAoYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgbmV4dFByb3BzXG4gICAgICAgICAgKSxcbiAgICAgICAgICAoX2luc3RhbmNlLnN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSkpO1xuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIHx8XG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlIHx8XG4gICAgICAgICAgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIF9pbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ICYmXG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50KSB8fFxuICAgICAgICAgICgoc3RhdGUgPSBfaW5zdGFuY2Uuc3RhdGUpLFxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgJiZcbiAgICAgICAgICAgIF9pbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQoKSxcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCAmJlxuICAgICAgICAgICAgX2luc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKSxcbiAgICAgICAgICBzdGF0ZSAhPT0gX2luc3RhbmNlLnN0YXRlICYmXG4gICAgICAgICAgICAoY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCIlcy5jb21wb25lbnRXaWxsTW91bnQoKTogQXNzaWduaW5nIGRpcmVjdGx5IHRvIHRoaXMuc3RhdGUgaXMgZGVwcmVjYXRlZCAoZXhjZXB0IGluc2lkZSBhIGNvbXBvbmVudCdzIGNvbnN0cnVjdG9yKS4gVXNlIHNldFN0YXRlIGluc3RlYWQuXCIsXG4gICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIod29ya0luUHJvZ3Jlc3MpIHx8IFwiQ29tcG9uZW50XCJcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjbGFzc0NvbXBvbmVudFVwZGF0ZXIuZW5xdWV1ZVJlcGxhY2VTdGF0ZShcbiAgICAgICAgICAgICAgX2luc3RhbmNlLFxuICAgICAgICAgICAgICBfaW5zdGFuY2Uuc3RhdGUsXG4gICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV4dFByb3BzLCBfaW5zdGFuY2UsIHJlbmRlckxhbmVzKSxcbiAgICAgICAgICBzdXNwZW5kSWZVcGRhdGVSZWFkRnJvbUVudGFuZ2xlZEFzeW5jQWN0aW9uKCksXG4gICAgICAgICAgKF9pbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUpKTtcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ICYmXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQxOTQzMDgpO1xuICAgICAgICAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdEVmZmVjdHNNb2RlKSAhPT0gTm9Nb2RlICYmXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEzNDIxNzcyOCk7XG4gICAgICAgIF9pbnN0YW5jZSA9ICEwO1xuICAgICAgfSBlbHNlIGlmIChudWxsID09PSBjdXJyZW50KSB7XG4gICAgICAgIF9pbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICAgICAgdmFyIHVucmVzb2x2ZWRPbGRQcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHM7XG4gICAgICAgIGxhbmUgPSByZXNvbHZlQ2xhc3NDb21wb25lbnRQcm9wcyhDb21wb25lbnQsIHVucmVzb2x2ZWRPbGRQcm9wcyk7XG4gICAgICAgIF9pbnN0YW5jZS5wcm9wcyA9IGxhbmU7XG4gICAgICAgIHZhciBvbGRDb250ZXh0ID0gX2luc3RhbmNlLmNvbnRleHQ7XG4gICAgICAgIGZvdW5kV2lsbFVwZGF0ZU5hbWUgPSBDb21wb25lbnQuY29udGV4dFR5cGU7XG4gICAgICAgIHN0YXRlID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgZm91bmRXaWxsVXBkYXRlTmFtZSAmJlxuICAgICAgICAgIG51bGwgIT09IGZvdW5kV2lsbFVwZGF0ZU5hbWUgJiZcbiAgICAgICAgICAoc3RhdGUgPSByZWFkQ29udGV4dChmb3VuZFdpbGxVcGRhdGVOYW1lKSk7XG4gICAgICAgIG5ld0FwaU5hbWUgPSBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzO1xuICAgICAgICBmb3VuZFdpbGxVcGRhdGVOYW1lID1cbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBuZXdBcGlOYW1lIHx8XG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlO1xuICAgICAgICB1bnJlc29sdmVkT2xkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMgIT09IHVucmVzb2x2ZWRPbGRQcm9wcztcbiAgICAgICAgZm91bmRXaWxsVXBkYXRlTmFtZSB8fFxuICAgICAgICAgIChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBfaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgJiZcbiAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKSB8fFxuICAgICAgICAgICgodW5yZXNvbHZlZE9sZFByb3BzIHx8IG9sZENvbnRleHQgIT09IHN0YXRlKSAmJlxuICAgICAgICAgICAgY2FsbENvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICBfaW5zdGFuY2UsXG4gICAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICAgICkpO1xuICAgICAgICBoYXNGb3JjZVVwZGF0ZSA9ICExO1xuICAgICAgICB2YXIgb2xkU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICBfaW5zdGFuY2Uuc3RhdGUgPSBvbGRTdGF0ZTtcbiAgICAgICAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXh0UHJvcHMsIF9pbnN0YW5jZSwgcmVuZGVyTGFuZXMpO1xuICAgICAgICBzdXNwZW5kSWZVcGRhdGVSZWFkRnJvbUVudGFuZ2xlZEFzeW5jQWN0aW9uKCk7XG4gICAgICAgIG9sZENvbnRleHQgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICB1bnJlc29sdmVkT2xkUHJvcHMgfHwgb2xkU3RhdGUgIT09IG9sZENvbnRleHQgfHwgaGFzRm9yY2VVcGRhdGVcbiAgICAgICAgICA/IChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBuZXdBcGlOYW1lICYmXG4gICAgICAgICAgICAgIChhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyhcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgbmV3QXBpTmFtZSxcbiAgICAgICAgICAgICAgICBuZXh0UHJvcHNcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgKG9sZENvbnRleHQgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlKSksXG4gICAgICAgICAgICAobGFuZSA9XG4gICAgICAgICAgICAgIGhhc0ZvcmNlVXBkYXRlIHx8XG4gICAgICAgICAgICAgIGNoZWNrU2hvdWxkQ29tcG9uZW50VXBkYXRlKFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICBsYW5lLFxuICAgICAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgICAgICBvbGRTdGF0ZSxcbiAgICAgICAgICAgICAgICBvbGRDb250ZXh0LFxuICAgICAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgID8gKGZvdW5kV2lsbFVwZGF0ZU5hbWUgfHxcbiAgICAgICAgICAgICAgICAgIChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBfaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCAmJlxuICAgICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50KSB8fFxuICAgICAgICAgICAgICAgICAgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgJiZcbiAgICAgICAgICAgICAgICAgICAgX2luc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCgpLFxuICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgJiZcbiAgICAgICAgICAgICAgICAgICAgX2luc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKSksXG4gICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ICYmXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNDE5NDMwOCksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RFZmZlY3RzTW9kZSkgIT09IE5vTW9kZSAmJlxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEzNDIxNzcyOCkpXG4gICAgICAgICAgICAgIDogKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCAmJlxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQxOTQzMDgpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0RWZmZWN0c01vZGUpICE9PSBOb01vZGUgJiZcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMzQyMTc3MjgpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gbmV4dFByb3BzKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG9sZENvbnRleHQpKSxcbiAgICAgICAgICAgIChfaW5zdGFuY2UucHJvcHMgPSBuZXh0UHJvcHMpLFxuICAgICAgICAgICAgKF9pbnN0YW5jZS5zdGF0ZSA9IG9sZENvbnRleHQpLFxuICAgICAgICAgICAgKF9pbnN0YW5jZS5jb250ZXh0ID0gc3RhdGUpLFxuICAgICAgICAgICAgKF9pbnN0YW5jZSA9IGxhbmUpKVxuICAgICAgICAgIDogKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCAmJlxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNDE5NDMwOCksXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdEVmZmVjdHNNb2RlKSAhPT0gTm9Nb2RlICYmXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMzQyMTc3MjgpLFxuICAgICAgICAgICAgKF9pbnN0YW5jZSA9ICExKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgICAgIGNsb25lVXBkYXRlUXVldWUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICBzdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHM7XG4gICAgICAgIGZvdW5kV2lsbFVwZGF0ZU5hbWUgPSByZXNvbHZlQ2xhc3NDb21wb25lbnRQcm9wcyhDb21wb25lbnQsIHN0YXRlKTtcbiAgICAgICAgX2luc3RhbmNlLnByb3BzID0gZm91bmRXaWxsVXBkYXRlTmFtZTtcbiAgICAgICAgbmV3QXBpTmFtZSA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgICAgICAgb2xkU3RhdGUgPSBfaW5zdGFuY2UuY29udGV4dDtcbiAgICAgICAgb2xkQ29udGV4dCA9IENvbXBvbmVudC5jb250ZXh0VHlwZTtcbiAgICAgICAgbGFuZSA9IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIG9sZENvbnRleHQgJiZcbiAgICAgICAgICBudWxsICE9PSBvbGRDb250ZXh0ICYmXG4gICAgICAgICAgKGxhbmUgPSByZWFkQ29udGV4dChvbGRDb250ZXh0KSk7XG4gICAgICAgIHVucmVzb2x2ZWRPbGRQcm9wcyA9IENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG4gICAgICAgIChvbGRDb250ZXh0ID1cbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB1bnJlc29sdmVkT2xkUHJvcHMgfHxcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUpIHx8XG4gICAgICAgICAgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIF9pbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyAmJlxuICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMpIHx8XG4gICAgICAgICAgKChzdGF0ZSAhPT0gbmV3QXBpTmFtZSB8fCBvbGRTdGF0ZSAhPT0gbGFuZSkgJiZcbiAgICAgICAgICAgIGNhbGxDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgX2luc3RhbmNlLFxuICAgICAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgICAgIGxhbmVcbiAgICAgICAgICAgICkpO1xuICAgICAgICBoYXNGb3JjZVVwZGF0ZSA9ICExO1xuICAgICAgICBvbGRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIF9pbnN0YW5jZS5zdGF0ZSA9IG9sZFN0YXRlO1xuICAgICAgICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIG5leHRQcm9wcywgX2luc3RhbmNlLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIHN1c3BlbmRJZlVwZGF0ZVJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24oKTtcbiAgICAgICAgdmFyIG5ld1N0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgc3RhdGUgIT09IG5ld0FwaU5hbWUgfHxcbiAgICAgICAgb2xkU3RhdGUgIT09IG5ld1N0YXRlIHx8XG4gICAgICAgIGhhc0ZvcmNlVXBkYXRlIHx8XG4gICAgICAgIChudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgbnVsbCAhPT0gY3VycmVudC5kZXBlbmRlbmNpZXMgJiZcbiAgICAgICAgICBjaGVja0lmQ29udGV4dENoYW5nZWQoY3VycmVudC5kZXBlbmRlbmNpZXMpKVxuICAgICAgICAgID8gKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHVucmVzb2x2ZWRPbGRQcm9wcyAmJlxuICAgICAgICAgICAgICAoYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMoXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgIHVucmVzb2x2ZWRPbGRQcm9wcyxcbiAgICAgICAgICAgICAgICBuZXh0UHJvcHNcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgKG5ld1N0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSkpLFxuICAgICAgICAgICAgKGZvdW5kV2lsbFVwZGF0ZU5hbWUgPVxuICAgICAgICAgICAgICBoYXNGb3JjZVVwZGF0ZSB8fFxuICAgICAgICAgICAgICBjaGVja1Nob3VsZENvbXBvbmVudFVwZGF0ZShcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgZm91bmRXaWxsVXBkYXRlTmFtZSxcbiAgICAgICAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgICAgICAgb2xkU3RhdGUsXG4gICAgICAgICAgICAgICAgbmV3U3RhdGUsXG4gICAgICAgICAgICAgICAgbGFuZVxuICAgICAgICAgICAgICApIHx8XG4gICAgICAgICAgICAgIChudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudC5kZXBlbmRlbmNpZXMgJiZcbiAgICAgICAgICAgICAgICBjaGVja0lmQ29udGV4dENoYW5nZWQoY3VycmVudC5kZXBlbmRlbmNpZXMpKSlcbiAgICAgICAgICAgICAgPyAob2xkQ29udGV4dCB8fFxuICAgICAgICAgICAgICAgICAgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIF9pbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICBfaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZShuZXh0UHJvcHMsIG5ld1N0YXRlLCBsYW5lKSxcbiAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICBfaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgICAgICAgICAgIG5ld1N0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgIGxhbmVcbiAgICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQpLFxuICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEwMjQpKVxuICAgICAgICAgICAgICA6IChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlIHx8XG4gICAgICAgICAgICAgICAgICAoc3RhdGUgPT09IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyAmJlxuICAgICAgICAgICAgICAgICAgICBvbGRTdGF0ZSA9PT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB8fFxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQpLFxuICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIF9pbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSB8fFxuICAgICAgICAgICAgICAgICAgKHN0YXRlID09PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgJiZcbiAgICAgICAgICAgICAgICAgICAgb2xkU3RhdGUgPT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMDI0KSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IG5leHRQcm9wcyksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZSkpLFxuICAgICAgICAgICAgKF9pbnN0YW5jZS5wcm9wcyA9IG5leHRQcm9wcyksXG4gICAgICAgICAgICAoX2luc3RhbmNlLnN0YXRlID0gbmV3U3RhdGUpLFxuICAgICAgICAgICAgKF9pbnN0YW5jZS5jb250ZXh0ID0gbGFuZSksXG4gICAgICAgICAgICAoX2luc3RhbmNlID0gZm91bmRXaWxsVXBkYXRlTmFtZSkpXG4gICAgICAgICAgOiAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSB8fFxuICAgICAgICAgICAgICAoc3RhdGUgPT09IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyAmJlxuICAgICAgICAgICAgICAgIG9sZFN0YXRlID09PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpIHx8XG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0KSxcbiAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIF9pbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSB8fFxuICAgICAgICAgICAgICAoc3RhdGUgPT09IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyAmJlxuICAgICAgICAgICAgICAgIG9sZFN0YXRlID09PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpIHx8XG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMDI0KSxcbiAgICAgICAgICAgIChfaW5zdGFuY2UgPSAhMSkpO1xuICAgICAgfVxuICAgICAgbGFuZSA9IF9pbnN0YW5jZTtcbiAgICAgIG1hcmtSZWYoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgc3RhdGUgPSAwICE9PSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAxMjgpO1xuICAgICAgaWYgKGxhbmUgfHwgc3RhdGUpIHtcbiAgICAgICAgbGFuZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICAgICAgc2V0Q3VycmVudEZpYmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgaWYgKHN0YXRlICYmIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IpXG4gICAgICAgICAgKENvbXBvbmVudCA9IG51bGwpLCAocHJvZmlsZXJTdGFydFRpbWUgPSAtMSk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIG1hcmtDb21wb25lbnRSZW5kZXJTdGFydGVkKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBDb21wb25lbnQgPSBjYWxsUmVuZGVySW5ERVYobGFuZSk7XG4gICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlKSB7XG4gICAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjYWxsUmVuZGVySW5ERVYobGFuZSk7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIG1hcmtDb21wb25lbnRSZW5kZXJTdG9wcGVkKCk7XG4gICAgICAgIH1cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTtcbiAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJiBzdGF0ZVxuICAgICAgICAgID8gKCh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlY29uY2lsZUNoaWxkRmliZXJzKFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgY3VycmVudC5jaGlsZCxcbiAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVjb25jaWxlQ2hpbGRGaWJlcnMoXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICApKSlcbiAgICAgICAgICA6IHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGxhbmUuc3RhdGU7XG4gICAgICAgIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgIH0gZWxzZVxuICAgICAgICBjdXJyZW50ID0gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhcbiAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICk7XG4gICAgICByZW5kZXJMYW5lcyA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICAgIF9pbnN0YW5jZSAmJlxuICAgICAgICByZW5kZXJMYW5lcy5wcm9wcyAhPT0gbmV4dFByb3BzICYmXG4gICAgICAgIChkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzIHx8XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiSXQgbG9va3MgbGlrZSAlcyBpcyByZWFzc2lnbmluZyBpdHMgb3duIGB0aGlzLnByb3BzYCB3aGlsZSByZW5kZXJpbmcuIFRoaXMgaXMgbm90IHN1cHBvcnRlZCBhbmQgY2FuIGxlYWQgdG8gY29uZnVzaW5nIGJ1Z3MuXCIsXG4gICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKHdvcmtJblByb2dyZXNzKSB8fCBcImEgY29tcG9uZW50XCJcbiAgICAgICAgICApLFxuICAgICAgICAoZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcyA9ICEwKSk7XG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRIb3N0Um9vdFdpdGhvdXRIeWRyYXRpbmcoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBuZXh0Q2hpbGRyZW4sXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgcmVzZXRIeWRyYXRpb25TdGF0ZSgpO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMjU2O1xuICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUZ1bmN0aW9uQ29tcG9uZW50SW5EZXYod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCkge1xuICAgICAgQ29tcG9uZW50ICYmXG4gICAgICAgIENvbXBvbmVudC5jaGlsZENvbnRleHRUeXBlcyAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiY2hpbGRDb250ZXh0VHlwZXMgY2Fubm90IGJlIGRlZmluZWQgb24gYSBmdW5jdGlvbiBjb21wb25lbnQuXFxuICAlcy5jaGlsZENvbnRleHRUeXBlcyA9IC4uLlwiLFxuICAgICAgICAgIENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCBcIkNvbXBvbmVudFwiXG4gICAgICAgICk7XG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzICYmXG4gICAgICAgICgod29ya0luUHJvZ3Jlc3MgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoQ29tcG9uZW50KSB8fCBcIlVua25vd25cIiksXG4gICAgICAgIGRpZFdhcm5BYm91dEdldERlcml2ZWRTdGF0ZU9uRnVuY3Rpb25Db21wb25lbnRbd29ya0luUHJvZ3Jlc3NdIHx8XG4gICAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzOiBGdW5jdGlvbiBjb21wb25lbnRzIGRvIG5vdCBzdXBwb3J0IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy5cIixcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzXG4gICAgICAgICAgKSxcbiAgICAgICAgICAoZGlkV2FybkFib3V0R2V0RGVyaXZlZFN0YXRlT25GdW5jdGlvbkNvbXBvbmVudFt3b3JrSW5Qcm9ncmVzc10gPVxuICAgICAgICAgICAgITApKSk7XG4gICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgQ29tcG9uZW50LmNvbnRleHRUeXBlICYmXG4gICAgICAgIG51bGwgIT09IENvbXBvbmVudC5jb250ZXh0VHlwZSAmJlxuICAgICAgICAoKENvbXBvbmVudCA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShDb21wb25lbnQpIHx8IFwiVW5rbm93blwiKSxcbiAgICAgICAgZGlkV2FybkFib3V0Q29udGV4dFR5cGVPbkZ1bmN0aW9uQ29tcG9uZW50W0NvbXBvbmVudF0gfHxcbiAgICAgICAgICAoY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiJXM6IEZ1bmN0aW9uIGNvbXBvbmVudHMgZG8gbm90IHN1cHBvcnQgY29udGV4dFR5cGUuXCIsXG4gICAgICAgICAgICBDb21wb25lbnRcbiAgICAgICAgICApLFxuICAgICAgICAgIChkaWRXYXJuQWJvdXRDb250ZXh0VHlwZU9uRnVuY3Rpb25Db21wb25lbnRbQ29tcG9uZW50XSA9ICEwKSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpIHtcbiAgICAgIHJldHVybiB7IGJhc2VMYW5lczogcmVuZGVyTGFuZXMsIGNhY2hlUG9vbDogZ2V0U3VzcGVuZGVkQ2FjaGUoKSB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRSZW1haW5pbmdXb3JrSW5QcmltYXJ5VHJlZShcbiAgICAgIGN1cnJlbnQsXG4gICAgICBwcmltYXJ5VHJlZURpZERlZmVyLFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIGN1cnJlbnQgPSBudWxsICE9PSBjdXJyZW50ID8gY3VycmVudC5jaGlsZExhbmVzICYgfnJlbmRlckxhbmVzIDogMDtcbiAgICAgIHByaW1hcnlUcmVlRGlkRGVmZXIgJiYgKGN1cnJlbnQgfD0gd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUpO1xuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAgICAgdmFyIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjU1MTtcbiAgICAgIHZhciBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjU1MiA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgICAgIHNob3VsZFN1c3BlbmRJbXBsKHdvcmtJblByb2dyZXNzKSAmJiAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTI4KTtcbiAgICAgIHZhciBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yNTUwID0gITE7XG4gICAgICB2YXIgZGlkU3VzcGVuZCA9IDAgIT09ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDEyOCk7XG4gICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNTUxID0gZGlkU3VzcGVuZCkgfHxcbiAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjU1MSA9XG4gICAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJiBudWxsID09PSBjdXJyZW50Lm1lbW9pemVkU3RhdGVcbiAgICAgICAgICAgID8gITFcbiAgICAgICAgICAgIDogMCAhPT0gKHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCAmIEZvcmNlU3VzcGVuc2VGYWxsYmFjaykpO1xuICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNTUxICYmXG4gICAgICAgICgoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjU1MCA9ICEwKSxcbiAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzICY9IC0xMjkpKTtcbiAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjU1MSA9IDAgIT09ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDMyKTtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IC0zMztcbiAgICAgIGlmIChudWxsID09PSBjdXJyZW50KSB7XG4gICAgICAgIGlmIChpc0h5ZHJhdGluZykge1xuICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzI1NTBcbiAgICAgICAgICAgID8gcHVzaFByaW1hcnlUcmVlU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKVxuICAgICAgICAgICAgOiByZXVzZVN1c3BlbnNlSGFuZGxlck9uU3RhY2sod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIChjdXJyZW50ID0gbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSlcbiAgICAgICAgICAgID8gKChyZW5kZXJMYW5lcyA9IGNhbkh5ZHJhdGVIeWRyYXRpb25Cb3VuZGFyeShcbiAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgIHJvb3RPclNpbmdsZXRvbkNvbnRleHRcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIChyZW5kZXJMYW5lcyA9XG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gcmVuZGVyTGFuZXMgJiYgcmVuZGVyTGFuZXMuZGF0YSAhPT0gQUNUSVZJVFlfU1RBUlRfREFUQVxuICAgICAgICAgICAgICAgICAgPyByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgICAgOiBudWxsKSxcbiAgICAgICAgICAgICAgbnVsbCAhPT0gcmVuZGVyTGFuZXMgJiZcbiAgICAgICAgICAgICAgICAoKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjU1MSA9IHtcbiAgICAgICAgICAgICAgICAgIGRlaHlkcmF0ZWQ6IHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAgICAgdHJlZUNvbnRleHQ6IGdldFN1c3BlbmRlZFRyZWVDb250ZXh0KCksXG4gICAgICAgICAgICAgICAgICByZXRyeUxhbmU6IDUzNjg3MDkxMixcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGlvbkVycm9yczogbnVsbFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID1cbiAgICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjU1MSksXG4gICAgICAgICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjU1MSA9XG4gICAgICAgICAgICAgICAgICBjcmVhdGVGaWJlckZyb21EZWh5ZHJhdGVkRnJhZ21lbnQocmVuZGVyTGFuZXMpKSxcbiAgICAgICAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNTUxLnJldHVybiA9IHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI1NTEpLFxuICAgICAgICAgICAgICAgIChoeWRyYXRpb25QYXJlbnRGaWJlciA9IHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAobmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IG51bGwpKSlcbiAgICAgICAgICAgIDogKHJlbmRlckxhbmVzID0gbnVsbCk7XG4gICAgICAgICAgaWYgKG51bGwgPT09IHJlbmRlckxhbmVzKVxuICAgICAgICAgICAgdGhyb3cgKFxuICAgICAgICAgICAgICAod2Fybk5vbkh5ZHJhdGVkSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN1cnJlbnQpLFxuICAgICAgICAgICAgICB0aHJvd09uSHlkcmF0aW9uTWlzbWF0Y2god29ya0luUHJvZ3Jlc3MpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBpc1N1c3BlbnNlSW5zdGFuY2VGYWxsYmFjayhyZW5kZXJMYW5lcylcbiAgICAgICAgICAgID8gKHdvcmtJblByb2dyZXNzLmxhbmVzID0gMzIpXG4gICAgICAgICAgICA6ICh3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IDUzNjg3MDkxMik7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG5leHRQcmltYXJ5Q2hpbGRyZW4gPSBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjU1Mi5jaGlsZHJlbjtcbiAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI1NTIgPVxuICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNTUyLmZhbGxiYWNrO1xuICAgICAgICBpZiAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjU1MCkge1xuICAgICAgICAgIHJldXNlU3VzcGVuc2VIYW5kbGVyT25TdGFjayh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgdmFyIG1vZGUgPSB3b3JrSW5Qcm9ncmVzcy5tb2RlO1xuICAgICAgICAgIG5leHRQcmltYXJ5Q2hpbGRyZW4gPSBtb3VudFdvcmtJblByb2dyZXNzT2Zmc2NyZWVuRmliZXIoXG4gICAgICAgICAgICB7IG1vZGU6IFwiaGlkZGVuXCIsIGNoaWxkcmVuOiBuZXh0UHJpbWFyeUNoaWxkcmVuIH0sXG4gICAgICAgICAgICBtb2RlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjU1MiA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KFxuICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI1NTIsXG4gICAgICAgICAgICBtb2RlLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICBudWxsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBuZXh0UHJpbWFyeUNoaWxkcmVuLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNTUyLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgICAgIG5leHRQcmltYXJ5Q2hpbGRyZW4uc2libGluZyA9IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNTUyO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbmV4dFByaW1hcnlDaGlsZHJlbjtcbiAgICAgICAgICBuZXh0UHJpbWFyeUNoaWxkcmVuID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgbmV4dFByaW1hcnlDaGlsZHJlbi5tZW1vaXplZFN0YXRlID1cbiAgICAgICAgICAgIG1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShyZW5kZXJMYW5lcyk7XG4gICAgICAgICAgbmV4dFByaW1hcnlDaGlsZHJlbi5jaGlsZExhbmVzID0gZ2V0UmVtYWluaW5nV29ya0luUHJpbWFyeVRyZWUoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNTUxLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBTVVNQRU5ERURfTUFSS0VSO1xuICAgICAgICAgIHJldHVybiBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjU1MjtcbiAgICAgICAgfVxuICAgICAgICBwdXNoUHJpbWFyeVRyZWVTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICByZXR1cm4gbW91bnRTdXNwZW5zZVByaW1hcnlDaGlsZHJlbihcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICBuZXh0UHJpbWFyeUNoaWxkcmVuXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB2YXIgcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgaWYgKG51bGwgIT09IHByZXZTdGF0ZSkge1xuICAgICAgICB2YXIgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzI1NTMgPSBwcmV2U3RhdGUuZGVoeWRyYXRlZDtcbiAgICAgICAgaWYgKG51bGwgIT09IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNTUzKSB7XG4gICAgICAgICAgaWYgKGRpZFN1c3BlbmQpXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDI1NlxuICAgICAgICAgICAgICA/IChwdXNoUHJpbWFyeVRyZWVTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSAtMjU3KSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MgPSByZXRyeVN1c3BlbnNlQ29tcG9uZW50V2l0aG91dEh5ZHJhdGluZyhcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgKSkpXG4gICAgICAgICAgICAgIDogbnVsbCAhPT0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZVxuICAgICAgICAgICAgICAgID8gKHJldXNlU3VzcGVuc2VIYW5kbGVyT25TdGFjayh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjdXJyZW50LmNoaWxkKSxcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMjgpLFxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzID0gbnVsbCkpXG4gICAgICAgICAgICAgICAgOiAocmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAgIChuZXh0UHJpbWFyeUNoaWxkcmVuID1cbiAgICAgICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI1NTIuZmFsbGJhY2spLFxuICAgICAgICAgICAgICAgICAgKG1vZGUgPSB3b3JrSW5Qcm9ncmVzcy5tb2RlKSxcbiAgICAgICAgICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjU1MiA9XG4gICAgICAgICAgICAgICAgICAgIG1vdW50V29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlcihcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlOiBcInZpc2libGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjU1Mi5jaGlsZHJlblxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgbW9kZVxuICAgICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAgIChuZXh0UHJpbWFyeUNoaWxkcmVuID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoXG4gICAgICAgICAgICAgICAgICAgIG5leHRQcmltYXJ5Q2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgICAgIG1vZGUsXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAgIChuZXh0UHJpbWFyeUNoaWxkcmVuLmZsYWdzIHw9IDIpLFxuICAgICAgICAgICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNTUyLnJldHVybiA9IHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAgIChuZXh0UHJpbWFyeUNoaWxkcmVuLnJldHVybiA9IHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjU1Mi5zaWJsaW5nID1cbiAgICAgICAgICAgICAgICAgICAgbmV4dFByaW1hcnlDaGlsZHJlbiksXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjU1MiksXG4gICAgICAgICAgICAgICAgICByZWNvbmNpbGVDaGlsZEZpYmVycyhcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQuY2hpbGQsXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNTUyID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQpLFxuICAgICAgICAgICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNTUyLm1lbW9pemVkU3RhdGUgPVxuICAgICAgICAgICAgICAgICAgICBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpKSxcbiAgICAgICAgICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjU1Mi5jaGlsZExhbmVzID1cbiAgICAgICAgICAgICAgICAgICAgZ2V0UmVtYWluaW5nV29ya0luUHJpbWFyeVRyZWUoXG4gICAgICAgICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI1NTEsXG4gICAgICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IFNVU1BFTkRFRF9NQVJLRVIpLFxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzID0gbmV4dFByaW1hcnlDaGlsZHJlbikpO1xuICAgICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgICAgKHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICB3YXJuSWZIeWRyYXRpbmcoKSxcbiAgICAgICAgICAgIGlzU3VzcGVuc2VJbnN0YW5jZUZhbGxiYWNrKFxuICAgICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjU1M1xuICAgICAgICAgICAgKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjU1MSA9XG4gICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNTUzLm5leHRTaWJsaW5nICYmXG4gICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNTUzLm5leHRTaWJsaW5nLmRhdGFzZXQ7XG4gICAgICAgICAgICBpZiAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNTUxKSB7XG4gICAgICAgICAgICAgIG5leHRQcmltYXJ5Q2hpbGRyZW4gPSBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI1NTEuZGdzdDtcbiAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI1NTEubXNnO1xuICAgICAgICAgICAgICBtb2RlID0gSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNTUxLnN0Y2s7XG4gICAgICAgICAgICAgIHZhciBjb21wb25lbnRTdGFjayA9IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjU1MS5jc3RjaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzI1NTAgPSBtZXNzYWdlO1xuICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNTUxID0gbmV4dFByaW1hcnlDaGlsZHJlbjtcbiAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNTUyID0gbW9kZTtcbiAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNTUzID0gY29tcG9uZW50U3RhY2s7XG4gICAgICAgICAgICBuZXh0UHJpbWFyeUNoaWxkcmVuID0gSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjU1MDtcbiAgICAgICAgICAgIG1vZGUgPSBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjU1MztcbiAgICAgICAgICAgIG5leHRQcmltYXJ5Q2hpbGRyZW4gPSBuZXh0UHJpbWFyeUNoaWxkcmVuXG4gICAgICAgICAgICAgID8gRXJyb3IobmV4dFByaW1hcnlDaGlsZHJlbilcbiAgICAgICAgICAgICAgOiBFcnJvcihcbiAgICAgICAgICAgICAgICAgIFwiVGhlIHNlcnZlciBjb3VsZCBub3QgZmluaXNoIHRoaXMgU3VzcGVuc2UgYm91bmRhcnksIGxpa2VseSBkdWUgdG8gYW4gZXJyb3IgZHVyaW5nIHNlcnZlciByZW5kZXJpbmcuIFN3aXRjaGVkIHRvIGNsaWVudCByZW5kZXJpbmcuXCJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgbmV4dFByaW1hcnlDaGlsZHJlbi5zdGFjayA9XG4gICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNTUyIHx8IFwiXCI7XG4gICAgICAgICAgICBuZXh0UHJpbWFyeUNoaWxkcmVuLmRpZ2VzdCA9IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjU1MTtcbiAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjU1MSA9XG4gICAgICAgICAgICAgIHZvaWQgMCA9PT0gbW9kZSA/IG51bGwgOiBtb2RlO1xuICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI1NTIgPSB7XG4gICAgICAgICAgICAgIHZhbHVlOiBuZXh0UHJpbWFyeUNoaWxkcmVuLFxuICAgICAgICAgICAgICBzb3VyY2U6IG51bGwsXG4gICAgICAgICAgICAgIHN0YWNrOiBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI1NTFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNTUxICYmXG4gICAgICAgICAgICAgIENhcHR1cmVkU3RhY2tzLnNldChcbiAgICAgICAgICAgICAgICBuZXh0UHJpbWFyeUNoaWxkcmVuLFxuICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNTUyXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBxdWV1ZUh5ZHJhdGlvbkVycm9yKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNTUyKTtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gcmV0cnlTdXNwZW5zZUNvbXBvbmVudFdpdGhvdXRIeWRyYXRpbmcoXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgKGRpZFJlY2VpdmVVcGRhdGUgfHxcbiAgICAgICAgICAgICAgcHJvcGFnYXRlUGFyZW50Q29udGV4dENoYW5nZXMoXG4gICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgICAgICAhMVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjU1MSA9XG4gICAgICAgICAgICAgIDAgIT09IChyZW5kZXJMYW5lcyAmIGN1cnJlbnQuY2hpbGRMYW5lcykpLFxuICAgICAgICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSB8fCBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI1NTEpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI1NTEgPSB3b3JrSW5Qcm9ncmVzc1Jvb3Q7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG51bGwgIT09IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjU1MSAmJlxuICAgICAgICAgICAgICAoKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNTUyID0gZ2V0QnVtcGVkTGFuZUZvckh5ZHJhdGlvbihcbiAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI1NTEsXG4gICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIDAgIT09IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNTUyICYmXG4gICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI1NTIgIT09IHByZXZTdGF0ZS5yZXRyeUxhbmUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHRocm93IChcbiAgICAgICAgICAgICAgICAoKHByZXZTdGF0ZS5yZXRyeUxhbmUgPSBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjU1MiksXG4gICAgICAgICAgICAgICAgZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKFxuICAgICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNTUyXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoXG4gICAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI1NTEsXG4gICAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI1NTJcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIFNlbGVjdGl2ZUh5ZHJhdGlvbkV4Y2VwdGlvbilcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlzU3VzcGVuc2VJbnN0YW5jZVBlbmRpbmcoXG4gICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNTUzXG4gICAgICAgICAgICApIHx8IHJlbmRlckRpZFN1c3BlbmREZWxheUlmUG9zc2libGUoKTtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gcmV0cnlTdXNwZW5zZUNvbXBvbmVudFdpdGhvdXRIeWRyYXRpbmcoXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIGlzU3VzcGVuc2VJbnN0YW5jZVBlbmRpbmcoXG4gICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNTUzXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgID8gKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxOTIpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQuY2hpbGQpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcyA9IG51bGwpKVxuICAgICAgICAgICAgICA6ICgoY3VycmVudCA9IHByZXZTdGF0ZS50cmVlQ29udGV4dCksXG4gICAgICAgICAgICAgICAgKG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZShcbiAgICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNTUzLm5leHRTaWJsaW5nXG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgKGh5ZHJhdGlvblBhcmVudEZpYmVyID0gd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgIChpc0h5ZHJhdGluZyA9ICEwKSxcbiAgICAgICAgICAgICAgICAoaHlkcmF0aW9uRXJyb3JzID0gbnVsbCksXG4gICAgICAgICAgICAgICAgKGRpZFN1c3BlbmRPckVycm9yREVWID0gITEpLFxuICAgICAgICAgICAgICAgIChoeWRyYXRpb25EaWZmUm9vdERFViA9IG51bGwpLFxuICAgICAgICAgICAgICAgIChyb290T3JTaW5nbGV0b25Db250ZXh0ID0gITEpLFxuICAgICAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgICAgIHJlc3RvcmVTdXNwZW5kZWRUcmVlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgY3VycmVudCksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzID0gbW91bnRTdXNwZW5zZVByaW1hcnlDaGlsZHJlbihcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI1NTIuY2hpbGRyZW5cbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNDA5NikpO1xuICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzI1NTApXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgcmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAobmV4dFByaW1hcnlDaGlsZHJlbiA9IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNTUyLmZhbGxiYWNrKSxcbiAgICAgICAgICAobW9kZSA9IHdvcmtJblByb2dyZXNzLm1vZGUpLFxuICAgICAgICAgIChjb21wb25lbnRTdGFjayA9IGN1cnJlbnQuY2hpbGQpLFxuICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjU1MyA9XG4gICAgICAgICAgICBjb21wb25lbnRTdGFjay5zaWJsaW5nKSxcbiAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI1NTIgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhcbiAgICAgICAgICAgIGNvbXBvbmVudFN0YWNrLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBtb2RlOiBcImhpZGRlblwiLFxuICAgICAgICAgICAgICBjaGlsZHJlbjogSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI1NTIuY2hpbGRyZW5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICApKSxcbiAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI1NTIuc3VidHJlZUZsYWdzID1cbiAgICAgICAgICAgIGNvbXBvbmVudFN0YWNrLnN1YnRyZWVGbGFncyAmIDY1MDExNzEyKSxcbiAgICAgICAgICBudWxsICE9PSBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjU1M1xuICAgICAgICAgICAgPyAobmV4dFByaW1hcnlDaGlsZHJlbiA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKFxuICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNTUzLFxuICAgICAgICAgICAgICAgIG5leHRQcmltYXJ5Q2hpbGRyZW5cbiAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgIDogKChuZXh0UHJpbWFyeUNoaWxkcmVuID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoXG4gICAgICAgICAgICAgICAgbmV4dFByaW1hcnlDaGlsZHJlbixcbiAgICAgICAgICAgICAgICBtb2RlLFxuICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIChuZXh0UHJpbWFyeUNoaWxkcmVuLmZsYWdzIHw9IDIpKSxcbiAgICAgICAgICAobmV4dFByaW1hcnlDaGlsZHJlbi5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNTUyLnJldHVybiA9IHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI1NTIuc2libGluZyA9IG5leHRQcmltYXJ5Q2hpbGRyZW4pLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNTUyKSxcbiAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI1NTIgPSBuZXh0UHJpbWFyeUNoaWxkcmVuKSxcbiAgICAgICAgICAobmV4dFByaW1hcnlDaGlsZHJlbiA9IHdvcmtJblByb2dyZXNzLmNoaWxkKSxcbiAgICAgICAgICAobW9kZSA9IGN1cnJlbnQuY2hpbGQubWVtb2l6ZWRTdGF0ZSksXG4gICAgICAgICAgbnVsbCA9PT0gbW9kZVxuICAgICAgICAgICAgPyAobW9kZSA9IG1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShyZW5kZXJMYW5lcykpXG4gICAgICAgICAgICA6ICgoY29tcG9uZW50U3RhY2sgPSBtb2RlLmNhY2hlUG9vbCksXG4gICAgICAgICAgICAgIG51bGwgIT09IGNvbXBvbmVudFN0YWNrXG4gICAgICAgICAgICAgICAgPyAoKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNTUzID1cbiAgICAgICAgICAgICAgICAgICAgQ2FjaGVDb250ZXh0Ll9jdXJyZW50VmFsdWUpLFxuICAgICAgICAgICAgICAgICAgKGNvbXBvbmVudFN0YWNrID1cbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50U3RhY2sucGFyZW50ICE9PVxuICAgICAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjU1M1xuICAgICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNTUzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwb29sOiBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjU1M1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIDogY29tcG9uZW50U3RhY2spKVxuICAgICAgICAgICAgICAgIDogKGNvbXBvbmVudFN0YWNrID0gZ2V0U3VzcGVuZGVkQ2FjaGUoKSksXG4gICAgICAgICAgICAgIChtb2RlID0ge1xuICAgICAgICAgICAgICAgIGJhc2VMYW5lczogbW9kZS5iYXNlTGFuZXMgfCByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgICAgICBjYWNoZVBvb2w6IGNvbXBvbmVudFN0YWNrXG4gICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAobmV4dFByaW1hcnlDaGlsZHJlbi5tZW1vaXplZFN0YXRlID0gbW9kZSksXG4gICAgICAgICAgKG5leHRQcmltYXJ5Q2hpbGRyZW4uY2hpbGRMYW5lcyA9IGdldFJlbWFpbmluZ1dvcmtJblByaW1hcnlUcmVlKFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjU1MSxcbiAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgKSksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBTVVNQRU5ERURfTUFSS0VSKSxcbiAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjU1MlxuICAgICAgICApO1xuICAgICAgcHVzaFByaW1hcnlUcmVlU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJlbmRlckxhbmVzID0gY3VycmVudC5jaGlsZDtcbiAgICAgIGN1cnJlbnQgPSByZW5kZXJMYW5lcy5zaWJsaW5nO1xuICAgICAgcmVuZGVyTGFuZXMgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhyZW5kZXJMYW5lcywge1xuICAgICAgICBtb2RlOiBcInZpc2libGVcIixcbiAgICAgICAgY2hpbGRyZW46IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNTUyLmNoaWxkcmVuXG4gICAgICB9KTtcbiAgICAgIHJlbmRlckxhbmVzLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgcmVuZGVyTGFuZXMuc2libGluZyA9IG51bGw7XG4gICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICgoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNTUxID0gd29ya0luUHJvZ3Jlc3MuZGVsZXRpb25zKSxcbiAgICAgICAgbnVsbCA9PT0gSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNTUxXG4gICAgICAgICAgPyAoKHdvcmtJblByb2dyZXNzLmRlbGV0aW9ucyA9IFtjdXJyZW50XSksXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTYpKVxuICAgICAgICAgIDogSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNTUxLnB1c2goY3VycmVudCkpO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZW5kZXJMYW5lcztcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIHJlbmRlckxhbmVzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudFN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKHdvcmtJblByb2dyZXNzLCBwcmltYXJ5Q2hpbGRyZW4pIHtcbiAgICAgIHByaW1hcnlDaGlsZHJlbiA9IG1vdW50V29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlcihcbiAgICAgICAgeyBtb2RlOiBcInZpc2libGVcIiwgY2hpbGRyZW46IHByaW1hcnlDaGlsZHJlbiB9LFxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tb2RlXG4gICAgICApO1xuICAgICAgcHJpbWFyeUNoaWxkcmVuLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgcmV0dXJuICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHByaW1hcnlDaGlsZHJlbik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50V29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlcihvZmZzY3JlZW5Qcm9wcywgbW9kZSkge1xuICAgICAgb2Zmc2NyZWVuUHJvcHMgPSBjcmVhdGVGaWJlcigyMiwgb2Zmc2NyZWVuUHJvcHMsIG51bGwsIG1vZGUpO1xuICAgICAgb2Zmc2NyZWVuUHJvcHMubGFuZXMgPSAwO1xuICAgICAgb2Zmc2NyZWVuUHJvcHMuc3RhdGVOb2RlID0ge1xuICAgICAgICBfdmlzaWJpbGl0eTogT2Zmc2NyZWVuVmlzaWJsZSxcbiAgICAgICAgX3BlbmRpbmdNYXJrZXJzOiBudWxsLFxuICAgICAgICBfcmV0cnlDYWNoZTogbnVsbCxcbiAgICAgICAgX3RyYW5zaXRpb25zOiBudWxsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIG9mZnNjcmVlblByb3BzO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXRyeVN1c3BlbnNlQ29tcG9uZW50V2l0aG91dEh5ZHJhdGluZyhcbiAgICAgIGN1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICByZWNvbmNpbGVDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgY3VycmVudC5jaGlsZCwgbnVsbCwgcmVuZGVyTGFuZXMpO1xuICAgICAgY3VycmVudCA9IG1vdW50U3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4oXG4gICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMuY2hpbGRyZW5cbiAgICAgICk7XG4gICAgICBjdXJyZW50LmZsYWdzIHw9IDI7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH1cbiAgICBmdW5jdGlvbiBzY2hlZHVsZVN1c3BlbnNlV29ya09uRmliZXIoZmliZXIsIHJlbmRlckxhbmVzLCBwcm9wYWdhdGlvblJvb3QpIHtcbiAgICAgIGZpYmVyLmxhbmVzIHw9IHJlbmRlckxhbmVzO1xuICAgICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcbiAgICAgIG51bGwgIT09IGFsdGVybmF0ZSAmJiAoYWx0ZXJuYXRlLmxhbmVzIHw9IHJlbmRlckxhbmVzKTtcbiAgICAgIHNjaGVkdWxlQ29udGV4dFdvcmtPblBhcmVudFBhdGgoXG4gICAgICAgIGZpYmVyLnJldHVybixcbiAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgIHByb3BhZ2F0aW9uUm9vdFxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlKFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBpc0JhY2t3YXJkcyxcbiAgICAgIHRhaWwsXG4gICAgICBsYXN0Q29udGVudFJvdyxcbiAgICAgIHRhaWxNb2RlLFxuICAgICAgdHJlZUZvcmtDb3VudFxuICAgICkge1xuICAgICAgdmFyIHJlbmRlclN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIG51bGwgPT09IHJlbmRlclN0YXRlXG4gICAgICAgID8gKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSB7XG4gICAgICAgICAgICBpc0JhY2t3YXJkczogaXNCYWNrd2FyZHMsXG4gICAgICAgICAgICByZW5kZXJpbmc6IG51bGwsXG4gICAgICAgICAgICByZW5kZXJpbmdTdGFydFRpbWU6IDAsXG4gICAgICAgICAgICBsYXN0OiBsYXN0Q29udGVudFJvdyxcbiAgICAgICAgICAgIHRhaWw6IHRhaWwsXG4gICAgICAgICAgICB0YWlsTW9kZTogdGFpbE1vZGUsXG4gICAgICAgICAgICB0cmVlRm9ya0NvdW50OiB0cmVlRm9ya0NvdW50XG4gICAgICAgICAgfSlcbiAgICAgICAgOiAoKHJlbmRlclN0YXRlLmlzQmFja3dhcmRzID0gaXNCYWNrd2FyZHMpLFxuICAgICAgICAgIChyZW5kZXJTdGF0ZS5yZW5kZXJpbmcgPSBudWxsKSxcbiAgICAgICAgICAocmVuZGVyU3RhdGUucmVuZGVyaW5nU3RhcnRUaW1lID0gMCksXG4gICAgICAgICAgKHJlbmRlclN0YXRlLmxhc3QgPSBsYXN0Q29udGVudFJvdyksXG4gICAgICAgICAgKHJlbmRlclN0YXRlLnRhaWwgPSB0YWlsKSxcbiAgICAgICAgICAocmVuZGVyU3RhdGUudGFpbE1vZGUgPSB0YWlsTW9kZSksXG4gICAgICAgICAgKHJlbmRlclN0YXRlLnRyZWVGb3JrQ291bnQgPSB0cmVlRm9ya0NvdW50KSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlTGlzdENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgICAgIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgIHJldmVhbE9yZGVyID0gbmV4dFByb3BzLnJldmVhbE9yZGVyLFxuICAgICAgICB0YWlsTW9kZSA9IG5leHRQcm9wcy50YWlsLFxuICAgICAgICBuZXdDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbixcbiAgICAgICAgc3VzcGVuc2VDb250ZXh0ID0gc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50O1xuICAgICAgKG5leHRQcm9wcyA9IDAgIT09IChzdXNwZW5zZUNvbnRleHQgJiBGb3JjZVN1c3BlbnNlRmFsbGJhY2spKVxuICAgICAgICA/ICgoc3VzcGVuc2VDb250ZXh0ID1cbiAgICAgICAgICAgIChzdXNwZW5zZUNvbnRleHQgJiBTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzaykgfFxuICAgICAgICAgICAgRm9yY2VTdXNwZW5zZUZhbGxiYWNrKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTI4KSlcbiAgICAgICAgOiAoc3VzcGVuc2VDb250ZXh0ICY9IFN1YnRyZWVTdXNwZW5zZUNvbnRleHRNYXNrKTtcbiAgICAgIHB1c2goc3VzcGVuc2VTdGFja0N1cnNvciwgc3VzcGVuc2VDb250ZXh0LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBzdXNwZW5zZUNvbnRleHQgPSBudWxsID09IHJldmVhbE9yZGVyID8gXCJudWxsXCIgOiByZXZlYWxPcmRlcjtcbiAgICAgIGlmIChcbiAgICAgICAgXCJmb3J3YXJkc1wiICE9PSByZXZlYWxPcmRlciAmJlxuICAgICAgICBcInVuc3RhYmxlX2xlZ2FjeS1iYWNrd2FyZHNcIiAhPT0gcmV2ZWFsT3JkZXIgJiZcbiAgICAgICAgXCJ0b2dldGhlclwiICE9PSByZXZlYWxPcmRlciAmJlxuICAgICAgICBcImluZGVwZW5kZW50XCIgIT09IHJldmVhbE9yZGVyICYmXG4gICAgICAgICFkaWRXYXJuQWJvdXRSZXZlYWxPcmRlcltzdXNwZW5zZUNvbnRleHRdXG4gICAgICApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoKGRpZFdhcm5BYm91dFJldmVhbE9yZGVyW3N1c3BlbnNlQ29udGV4dF0gPSAhMCksIG51bGwgPT0gcmV2ZWFsT3JkZXIpXG4gICAgICAgIClcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgJ1RoZSBkZWZhdWx0IGZvciB0aGUgPFN1c3BlbnNlTGlzdCByZXZlYWxPcmRlcj1cIi4uLlwiPiBwcm9wIGlzIGNoYW5naW5nLiBUbyBiZSBmdXR1cmUgY29tcGF0aWJsZSB5b3UgbXVzdCBleHBsaWN0bHkgc3BlY2lmeSBlaXRoZXIgXCJpbmRlcGVuZGVudFwiICh0aGUgY3VycmVudCBkZWZhdWx0KSwgXCJ0b2dldGhlclwiLCBcImZvcndhcmRzXCIgb3IgXCJsZWdhY3lfdW5zdGFibGUtYmFja3dhcmRzXCIuJ1xuICAgICAgICAgICk7XG4gICAgICAgIGVsc2UgaWYgKFwiYmFja3dhcmRzXCIgPT09IHJldmVhbE9yZGVyKVxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAnVGhlIHJlbmRlcmluZyBvcmRlciBvZiA8U3VzcGVuc2VMaXN0IHJldmVhbE9yZGVyPVwiYmFja3dhcmRzXCI+IGlzIGNoYW5naW5nLiBUbyBiZSBmdXR1cmUgY29tcGF0aWJsZSB5b3UgbXVzdCBzcGVjaWZ5IHJldmVhbE9yZGVyPVwibGVnYWN5X3Vuc3RhYmxlLWJhY2t3YXJkc1wiIGluc3RlYWQuJ1xuICAgICAgICAgICk7XG4gICAgICAgIGVsc2UgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiByZXZlYWxPcmRlcilcbiAgICAgICAgICBzd2l0Y2ggKHJldmVhbE9yZGVyLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ0b2dldGhlclwiOlxuICAgICAgICAgICAgY2FzZSBcImZvcndhcmRzXCI6XG4gICAgICAgICAgICBjYXNlIFwiYmFja3dhcmRzXCI6XG4gICAgICAgICAgICBjYXNlIFwiaW5kZXBlbmRlbnRcIjpcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAnXCIlc1wiIGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciByZXZlYWxPcmRlciBvbiA8U3VzcGVuc2VMaXN0IC8+LiBVc2UgbG93ZXJjYXNlIFwiJXNcIiBpbnN0ZWFkLicsXG4gICAgICAgICAgICAgICAgcmV2ZWFsT3JkZXIsXG4gICAgICAgICAgICAgICAgcmV2ZWFsT3JkZXIudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJmb3J3YXJkXCI6XG4gICAgICAgICAgICBjYXNlIFwiYmFja3dhcmRcIjpcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAnXCIlc1wiIGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciByZXZlYWxPcmRlciBvbiA8U3VzcGVuc2VMaXN0IC8+LiBSZWFjdCB1c2VzIHRoZSAtcyBzdWZmaXggaW4gdGhlIHNwZWxsaW5nLiBVc2UgXCIlc3NcIiBpbnN0ZWFkLicsXG4gICAgICAgICAgICAgICAgcmV2ZWFsT3JkZXIsXG4gICAgICAgICAgICAgICAgcmV2ZWFsT3JkZXIudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgJ1wiJXNcIiBpcyBub3QgYSBzdXBwb3J0ZWQgcmV2ZWFsT3JkZXIgb24gPFN1c3BlbnNlTGlzdCAvPi4gRGlkIHlvdSBtZWFuIFwiaW5kZXBlbmRlbnRcIiwgXCJ0b2dldGhlclwiLCBcImZvcndhcmRzXCIgb3IgXCJiYWNrd2FyZHNcIj8nLFxuICAgICAgICAgICAgICAgIHJldmVhbE9yZGVyXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICclcyBpcyBub3QgYSBzdXBwb3J0ZWQgdmFsdWUgZm9yIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uIERpZCB5b3UgbWVhbiBcImluZGVwZW5kZW50XCIsIFwidG9nZXRoZXJcIiwgXCJmb3J3YXJkc1wiIG9yIFwiYmFja3dhcmRzXCI/JyxcbiAgICAgICAgICAgIHJldmVhbE9yZGVyXG4gICAgICAgICAgKTtcbiAgICAgIHN1c3BlbnNlQ29udGV4dCA9IG51bGwgPT0gdGFpbE1vZGUgPyBcIm51bGxcIiA6IHRhaWxNb2RlO1xuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRUYWlsT3B0aW9uc1tzdXNwZW5zZUNvbnRleHRdKVxuICAgICAgICBpZiAobnVsbCA9PSB0YWlsTW9kZSkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIFwiZm9yd2FyZHNcIiA9PT0gcmV2ZWFsT3JkZXIgfHxcbiAgICAgICAgICAgIFwiYmFja3dhcmRzXCIgPT09IHJldmVhbE9yZGVyIHx8XG4gICAgICAgICAgICBcInVuc3RhYmxlX2xlZ2FjeS1iYWNrd2FyZHNcIiA9PT0gcmV2ZWFsT3JkZXJcbiAgICAgICAgICApXG4gICAgICAgICAgICAoZGlkV2FybkFib3V0VGFpbE9wdGlvbnNbc3VzcGVuc2VDb250ZXh0XSA9ICEwKSxcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAnVGhlIGRlZmF1bHQgZm9yIHRoZSA8U3VzcGVuc2VMaXN0IHRhaWw9XCIuLi5cIj4gcHJvcCBpcyBjaGFuZ2luZy4gVG8gYmUgZnV0dXJlIGNvbXBhdGlibGUgeW91IG11c3QgZXhwbGljdGx5IHNwZWNpZnkgZWl0aGVyIFwidmlzaWJsZVwiICh0aGUgY3VycmVudCBkZWZhdWx0KSwgXCJjb2xsYXBzZWRcIiBvciBcImhpZGRlblwiLidcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgXCJ2aXNpYmxlXCIgIT09IHRhaWxNb2RlICYmXG4gICAgICAgICAgXCJjb2xsYXBzZWRcIiAhPT0gdGFpbE1vZGUgJiZcbiAgICAgICAgICBcImhpZGRlblwiICE9PSB0YWlsTW9kZVxuICAgICAgICAgICAgPyAoKGRpZFdhcm5BYm91dFRhaWxPcHRpb25zW3N1c3BlbnNlQ29udGV4dF0gPSAhMCksXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgJ1wiJXNcIiBpcyBub3QgYSBzdXBwb3J0ZWQgdmFsdWUgZm9yIHRhaWwgb24gPFN1c3BlbnNlTGlzdCAvPi4gRGlkIHlvdSBtZWFuIFwidmlzaWJsZVwiLCBcImNvbGxhcHNlZFwiIG9yIFwiaGlkZGVuXCI/JyxcbiAgICAgICAgICAgICAgICB0YWlsTW9kZVxuICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgOiBcImZvcndhcmRzXCIgIT09IHJldmVhbE9yZGVyICYmXG4gICAgICAgICAgICAgIFwiYmFja3dhcmRzXCIgIT09IHJldmVhbE9yZGVyICYmXG4gICAgICAgICAgICAgIFwidW5zdGFibGVfbGVnYWN5LWJhY2t3YXJkc1wiICE9PSByZXZlYWxPcmRlciAmJlxuICAgICAgICAgICAgICAoKGRpZFdhcm5BYm91dFRhaWxPcHRpb25zW3N1c3BlbnNlQ29udGV4dF0gPSAhMCksXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgJzxTdXNwZW5zZUxpc3QgdGFpbD1cIiVzXCIgLz4gaXMgb25seSB2YWxpZCBpZiByZXZlYWxPcmRlciBpcyBcImZvcndhcmRzXCIgb3IgXCJiYWNrd2FyZHNcIi4gRGlkIHlvdSBtZWFuIHRvIHNwZWNpZnkgcmV2ZWFsT3JkZXI9XCJmb3J3YXJkc1wiPycsXG4gICAgICAgICAgICAgICAgdGFpbE1vZGVcbiAgICAgICAgICAgICAgKSk7XG4gICAgICBhOiBpZiAoXG4gICAgICAgIChcImZvcndhcmRzXCIgPT09IHJldmVhbE9yZGVyIHx8XG4gICAgICAgICAgXCJiYWNrd2FyZHNcIiA9PT0gcmV2ZWFsT3JkZXIgfHxcbiAgICAgICAgICBcInVuc3RhYmxlX2xlZ2FjeS1iYWNrd2FyZHNcIiA9PT0gcmV2ZWFsT3JkZXIpICYmXG4gICAgICAgIHZvaWQgMCAhPT0gbmV3Q2hpbGRyZW4gJiZcbiAgICAgICAgbnVsbCAhPT0gbmV3Q2hpbGRyZW4gJiZcbiAgICAgICAgITEgIT09IG5ld0NoaWxkcmVuXG4gICAgICApXG4gICAgICAgIGlmIChpc0FycmF5SW1wbChuZXdDaGlsZHJlbikpXG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIHN1c3BlbnNlQ29udGV4dCA9IDA7XG4gICAgICAgICAgICBzdXNwZW5zZUNvbnRleHQgPCBuZXdDaGlsZHJlbi5sZW5ndGg7XG4gICAgICAgICAgICBzdXNwZW5zZUNvbnRleHQrK1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhdmFsaWRhdGVTdXNwZW5zZUxpc3ROZXN0ZWRDaGlsZChcbiAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbltzdXNwZW5zZUNvbnRleHRdLFxuICAgICAgICAgICAgICAgIHN1c3BlbnNlQ29udGV4dFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAoKHN1c3BlbnNlQ29udGV4dCA9IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGRyZW4pKSxcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBzdXNwZW5zZUNvbnRleHQpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmICgoc3VzcGVuc2VDb250ZXh0ID0gc3VzcGVuc2VDb250ZXh0LmNhbGwobmV3Q2hpbGRyZW4pKSlcbiAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgIHZhciBzdGVwID0gc3VzcGVuc2VDb250ZXh0Lm5leHQoKSwgX2kgPSAwO1xuICAgICAgICAgICAgICAhc3RlcC5kb25lO1xuICAgICAgICAgICAgICBzdGVwID0gc3VzcGVuc2VDb250ZXh0Lm5leHQoKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGlmICghdmFsaWRhdGVTdXNwZW5zZUxpc3ROZXN0ZWRDaGlsZChzdGVwLnZhbHVlLCBfaSkpIGJyZWFrIGE7XG4gICAgICAgICAgICAgIF9pKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAnQSBzaW5nbGUgcm93IHdhcyBwYXNzZWQgdG8gYSA8U3VzcGVuc2VMaXN0IHJldmVhbE9yZGVyPVwiJXNcIiAvPi4gVGhpcyBpcyBub3QgdXNlZnVsIHNpbmNlIGl0IG5lZWRzIG11bHRpcGxlIHJvd3MuIERpZCB5b3UgbWVhbiB0byBwYXNzIG11bHRpcGxlIGNoaWxkcmVuIG9yIGFuIGFycmF5PycsXG4gICAgICAgICAgICByZXZlYWxPcmRlclxuICAgICAgICAgICk7XG4gICAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV3Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICAgIGlzSHlkcmF0aW5nXG4gICAgICAgID8gKHdhcm5JZk5vdEh5ZHJhdGluZygpLCAobmV3Q2hpbGRyZW4gPSB0cmVlRm9ya0NvdW50KSlcbiAgICAgICAgOiAobmV3Q2hpbGRyZW4gPSAwKTtcbiAgICAgIGlmICghbmV4dFByb3BzICYmIG51bGwgIT09IGN1cnJlbnQgJiYgMCAhPT0gKGN1cnJlbnQuZmxhZ3MgJiAxMjgpKVxuICAgICAgICBhOiBmb3IgKGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDsgbnVsbCAhPT0gY3VycmVudDsgKSB7XG4gICAgICAgICAgaWYgKDEzID09PSBjdXJyZW50LnRhZylcbiAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgICAgICBzY2hlZHVsZVN1c3BlbnNlV29ya09uRmliZXIoY3VycmVudCwgcmVuZGVyTGFuZXMsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBlbHNlIGlmICgxOSA9PT0gY3VycmVudC50YWcpXG4gICAgICAgICAgICBzY2hlZHVsZVN1c3BlbnNlV29ya09uRmliZXIoY3VycmVudCwgcmVuZGVyTGFuZXMsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBlbHNlIGlmIChudWxsICE9PSBjdXJyZW50LmNoaWxkKSB7XG4gICAgICAgICAgICBjdXJyZW50LmNoaWxkLnJldHVybiA9IGN1cnJlbnQ7XG4gICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5jaGlsZDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY3VycmVudCA9PT0gd29ya0luUHJvZ3Jlc3MpIGJyZWFrIGE7XG4gICAgICAgICAgZm9yICg7IG51bGwgPT09IGN1cnJlbnQuc2libGluZzsgKSB7XG4gICAgICAgICAgICBpZiAobnVsbCA9PT0gY3VycmVudC5yZXR1cm4gfHwgY3VycmVudC5yZXR1cm4gPT09IHdvcmtJblByb2dyZXNzKVxuICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQucmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjdXJyZW50LnNpYmxpbmcucmV0dXJuID0gY3VycmVudC5yZXR1cm47XG4gICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuc2libGluZztcbiAgICAgICAgfVxuICAgICAgc3dpdGNoIChyZXZlYWxPcmRlcikge1xuICAgICAgICBjYXNlIFwiZm9yd2FyZHNcIjpcbiAgICAgICAgICByZW5kZXJMYW5lcyA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgIGZvciAocmV2ZWFsT3JkZXIgPSBudWxsOyBudWxsICE9PSByZW5kZXJMYW5lczsgKVxuICAgICAgICAgICAgKGN1cnJlbnQgPSByZW5kZXJMYW5lcy5hbHRlcm5hdGUpLFxuICAgICAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgICAgICAgbnVsbCA9PT0gZmluZEZpcnN0U3VzcGVuZGVkKGN1cnJlbnQpICYmXG4gICAgICAgICAgICAgICAgKHJldmVhbE9yZGVyID0gcmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgICAocmVuZGVyTGFuZXMgPSByZW5kZXJMYW5lcy5zaWJsaW5nKTtcbiAgICAgICAgICByZW5kZXJMYW5lcyA9IHJldmVhbE9yZGVyO1xuICAgICAgICAgIG51bGwgPT09IHJlbmRlckxhbmVzXG4gICAgICAgICAgICA/ICgocmV2ZWFsT3JkZXIgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZCksXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG51bGwpKVxuICAgICAgICAgICAgOiAoKHJldmVhbE9yZGVyID0gcmVuZGVyTGFuZXMuc2libGluZyksXG4gICAgICAgICAgICAgIChyZW5kZXJMYW5lcy5zaWJsaW5nID0gbnVsbCkpO1xuICAgICAgICAgIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZShcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgITEsXG4gICAgICAgICAgICByZXZlYWxPcmRlcixcbiAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgdGFpbE1vZGUsXG4gICAgICAgICAgICBuZXdDaGlsZHJlblxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJiYWNrd2FyZHNcIjpcbiAgICAgICAgY2FzZSBcInVuc3RhYmxlX2xlZ2FjeS1iYWNrd2FyZHNcIjpcbiAgICAgICAgICByZW5kZXJMYW5lcyA9IG51bGw7XG4gICAgICAgICAgcmV2ZWFsT3JkZXIgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICBmb3IgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbDsgbnVsbCAhPT0gcmV2ZWFsT3JkZXI7ICkge1xuICAgICAgICAgICAgY3VycmVudCA9IHJldmVhbE9yZGVyLmFsdGVybmF0ZTtcbiAgICAgICAgICAgIGlmIChudWxsICE9PSBjdXJyZW50ICYmIG51bGwgPT09IGZpbmRGaXJzdFN1c3BlbmRlZChjdXJyZW50KSkge1xuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJldmVhbE9yZGVyO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJlbnQgPSByZXZlYWxPcmRlci5zaWJsaW5nO1xuICAgICAgICAgICAgcmV2ZWFsT3JkZXIuc2libGluZyA9IHJlbmRlckxhbmVzO1xuICAgICAgICAgICAgcmVuZGVyTGFuZXMgPSByZXZlYWxPcmRlcjtcbiAgICAgICAgICAgIHJldmVhbE9yZGVyID0gY3VycmVudDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAhMCxcbiAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIHRhaWxNb2RlLFxuICAgICAgICAgICAgbmV3Q2hpbGRyZW5cbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwidG9nZXRoZXJcIjpcbiAgICAgICAgICBpbml0U3VzcGVuc2VMaXN0UmVuZGVyU3RhdGUoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICExLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICB2b2lkIDAsXG4gICAgICAgICAgICBuZXdDaGlsZHJlblxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgbnVsbCAhPT0gY3VycmVudCAmJiAod29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID0gY3VycmVudC5kZXBlbmRlbmNpZXMpO1xuICAgICAgcHJvZmlsZXJTdGFydFRpbWUgPSAtMTtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyB8PSB3b3JrSW5Qcm9ncmVzcy5sYW5lcztcbiAgICAgIGlmICgwID09PSAocmVuZGVyTGFuZXMgJiB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzKSlcbiAgICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnQpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAocHJvcGFnYXRlUGFyZW50Q29udGV4dENoYW5nZXMoXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgICAgITFcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICAwID09PSAocmVuZGVyTGFuZXMgJiB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzKSlcbiAgICAgICAgICApXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSBlbHNlIHJldHVybiBudWxsO1xuICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnQgJiYgd29ya0luUHJvZ3Jlc3MuY2hpbGQgIT09IGN1cnJlbnQuY2hpbGQpXG4gICAgICAgIHRocm93IEVycm9yKFwiUmVzdW1pbmcgd29yayBub3QgeWV0IGltcGxlbWVudGVkLlwiKTtcbiAgICAgIGlmIChudWxsICE9PSB3b3JrSW5Qcm9ncmVzcy5jaGlsZCkge1xuICAgICAgICBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgIHJlbmRlckxhbmVzID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudCwgY3VycmVudC5wZW5kaW5nUHJvcHMpO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlbmRlckxhbmVzO1xuICAgICAgICBmb3IgKHJlbmRlckxhbmVzLnJldHVybiA9IHdvcmtJblByb2dyZXNzOyBudWxsICE9PSBjdXJyZW50LnNpYmxpbmc7IClcbiAgICAgICAgICAoY3VycmVudCA9IGN1cnJlbnQuc2libGluZyksXG4gICAgICAgICAgICAocmVuZGVyTGFuZXMgPSByZW5kZXJMYW5lcy5zaWJsaW5nID1cbiAgICAgICAgICAgICAgY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudCwgY3VycmVudC5wZW5kaW5nUHJvcHMpKSxcbiAgICAgICAgICAgIChyZW5kZXJMYW5lcy5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHJlbmRlckxhbmVzLnNpYmxpbmcgPSBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja1NjaGVkdWxlZFVwZGF0ZU9yQ29udGV4dChjdXJyZW50LCByZW5kZXJMYW5lcykge1xuICAgICAgaWYgKDAgIT09IChjdXJyZW50LmxhbmVzICYgcmVuZGVyTGFuZXMpKSByZXR1cm4gITA7XG4gICAgICBjdXJyZW50ID0gY3VycmVudC5kZXBlbmRlbmNpZXM7XG4gICAgICByZXR1cm4gbnVsbCAhPT0gY3VycmVudCAmJiBjaGVja0lmQ29udGV4dENoYW5nZWQoY3VycmVudCkgPyAhMCA6ICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhdHRlbXB0RWFybHlCYWlsb3V0SWZOb1NjaGVkdWxlZFVwZGF0ZShcbiAgICAgIGN1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcHVzaEhvc3RDb250YWluZXIoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZS5jb250YWluZXJJbmZvXG4gICAgICAgICAgKTtcbiAgICAgICAgICBwdXNoUHJvdmlkZXIoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIENhY2hlQ29udGV4dCxcbiAgICAgICAgICAgIGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5jYWNoZVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmVzZXRIeWRyYXRpb25TdGF0ZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI3OlxuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcHVzaEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHB1c2hIb3N0Q29udGFpbmVyKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUuY29udGFpbmVySW5mb1xuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcHVzaFByb3ZpZGVyKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcy52YWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgMCAhPT0gKHJlbmRlckxhbmVzICYgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcykgJiZcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0KTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAyMDQ4O1xuICAgICAgICAgIHZhciBzdGF0ZU5vZGUgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgICAgICAgc3RhdGVOb2RlLmVmZmVjdER1cmF0aW9uID0gLTA7XG4gICAgICAgICAgc3RhdGVOb2RlLnBhc3NpdmVFZmZlY3REdXJhdGlvbiA9IC0wO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgIGlmIChudWxsICE9PSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEyOCksXG4gICAgICAgICAgICAgIHB1c2hEZWh5ZHJhdGVkQWN0aXZpdHlTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIHN0YXRlTm9kZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgaWYgKG51bGwgIT09IHN0YXRlTm9kZSkge1xuICAgICAgICAgICAgaWYgKG51bGwgIT09IHN0YXRlTm9kZS5kZWh5ZHJhdGVkKVxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEyOCksXG4gICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKDAgIT09IChyZW5kZXJMYW5lcyAmIHdvcmtJblByb2dyZXNzLmNoaWxkLmNoaWxkTGFuZXMpKVxuICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlU3VzcGVuc2VDb21wb25lbnQoXG4gICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgcHVzaFByaW1hcnlUcmVlU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIGN1cnJlbnQgPSBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKFxuICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbCAhPT0gY3VycmVudCA/IGN1cnJlbnQuc2libGluZyA6IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgdmFyIGRpZFN1c3BlbmRCZWZvcmUgPSAwICE9PSAoY3VycmVudC5mbGFncyAmIDEyOCk7XG4gICAgICAgICAgc3RhdGVOb2RlID0gMCAhPT0gKHJlbmRlckxhbmVzICYgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyk7XG4gICAgICAgICAgc3RhdGVOb2RlIHx8XG4gICAgICAgICAgICAocHJvcGFnYXRlUGFyZW50Q29udGV4dENoYW5nZXMoXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgICAgITFcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICAoc3RhdGVOb2RlID0gMCAhPT0gKHJlbmRlckxhbmVzICYgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcykpKTtcbiAgICAgICAgICBpZiAoZGlkU3VzcGVuZEJlZm9yZSkge1xuICAgICAgICAgICAgaWYgKHN0YXRlTm9kZSlcbiAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVN1c3BlbnNlTGlzdENvbXBvbmVudChcbiAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMjg7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRpZFN1c3BlbmRCZWZvcmUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIG51bGwgIT09IGRpZFN1c3BlbmRCZWZvcmUgJiZcbiAgICAgICAgICAgICgoZGlkU3VzcGVuZEJlZm9yZS5yZW5kZXJpbmcgPSBudWxsKSxcbiAgICAgICAgICAgIChkaWRTdXNwZW5kQmVmb3JlLnRhaWwgPSBudWxsKSxcbiAgICAgICAgICAgIChkaWRTdXNwZW5kQmVmb3JlLmxhc3RFZmZlY3QgPSBudWxsKSk7XG4gICAgICAgICAgcHVzaChcbiAgICAgICAgICAgIHN1c3BlbnNlU3RhY2tDdXJzb3IsXG4gICAgICAgICAgICBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHN0YXRlTm9kZSkgYnJlYWs7XG4gICAgICAgICAgZWxzZSByZXR1cm4gbnVsbDtcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmxhbmVzID0gMCksXG4gICAgICAgICAgICB1cGRhdGVPZmZzY3JlZW5Db21wb25lbnQoXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICBwdXNoUHJvdmlkZXIoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIENhY2hlQ29udGV4dCxcbiAgICAgICAgICAgIGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5jYWNoZVxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBiZWdpbldvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gICAgICBpZiAod29ya0luUHJvZ3Jlc3MuX2RlYnVnTmVlZHNSZW1vdW50ICYmIG51bGwgIT09IGN1cnJlbnQpIHtcbiAgICAgICAgcmVuZGVyTGFuZXMgPSBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHMoXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5rZXksXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z093bmVyIHx8IG51bGwsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubW9kZSxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lc1xuICAgICAgICApO1xuICAgICAgICByZW5kZXJMYW5lcy5fZGVidWdTdGFjayA9IHdvcmtJblByb2dyZXNzLl9kZWJ1Z1N0YWNrO1xuICAgICAgICByZW5kZXJMYW5lcy5fZGVidWdUYXNrID0gd29ya0luUHJvZ3Jlc3MuX2RlYnVnVGFzaztcbiAgICAgICAgdmFyIHJldHVybkZpYmVyID0gd29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuICAgICAgICBpZiAobnVsbCA9PT0gcmV0dXJuRmliZXIpIHRocm93IEVycm9yKFwiQ2Fubm90IHN3YXAgdGhlIHJvb3QgZmliZXIuXCIpO1xuICAgICAgICBjdXJyZW50LmFsdGVybmF0ZSA9IG51bGw7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IG51bGw7XG4gICAgICAgIHJlbmRlckxhbmVzLmluZGV4ID0gd29ya0luUHJvZ3Jlc3MuaW5kZXg7XG4gICAgICAgIHJlbmRlckxhbmVzLnNpYmxpbmcgPSB3b3JrSW5Qcm9ncmVzcy5zaWJsaW5nO1xuICAgICAgICByZW5kZXJMYW5lcy5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcy5yZXR1cm47XG4gICAgICAgIHJlbmRlckxhbmVzLnJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjtcbiAgICAgICAgcmVuZGVyTGFuZXMuX2RlYnVnSW5mbyA9IHdvcmtJblByb2dyZXNzLl9kZWJ1Z0luZm87XG4gICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcyA9PT0gcmV0dXJuRmliZXIuY2hpbGQpXG4gICAgICAgICAgcmV0dXJuRmliZXIuY2hpbGQgPSByZW5kZXJMYW5lcztcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdmFyIHByZXZTaWJsaW5nID0gcmV0dXJuRmliZXIuY2hpbGQ7XG4gICAgICAgICAgaWYgKG51bGwgPT09IHByZXZTaWJsaW5nKVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJFeHBlY3RlZCBwYXJlbnQgdG8gaGF2ZSBhIGNoaWxkLlwiKTtcbiAgICAgICAgICBmb3IgKDsgcHJldlNpYmxpbmcuc2libGluZyAhPT0gd29ya0luUHJvZ3Jlc3M7IClcbiAgICAgICAgICAgIGlmICgoKHByZXZTaWJsaW5nID0gcHJldlNpYmxpbmcuc2libGluZyksIG51bGwgPT09IHByZXZTaWJsaW5nKSlcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJFeHBlY3RlZCB0byBmaW5kIHRoZSBwcmV2aW91cyBzaWJsaW5nLlwiKTtcbiAgICAgICAgICBwcmV2U2libGluZy5zaWJsaW5nID0gcmVuZGVyTGFuZXM7XG4gICAgICAgIH1cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSByZXR1cm5GaWJlci5kZWxldGlvbnM7XG4gICAgICAgIG51bGwgPT09IHdvcmtJblByb2dyZXNzXG4gICAgICAgICAgPyAoKHJldHVybkZpYmVyLmRlbGV0aW9ucyA9IFtjdXJyZW50XSksIChyZXR1cm5GaWJlci5mbGFncyB8PSAxNikpXG4gICAgICAgICAgOiB3b3JrSW5Qcm9ncmVzcy5wdXNoKGN1cnJlbnQpO1xuICAgICAgICByZW5kZXJMYW5lcy5mbGFncyB8PSAyO1xuICAgICAgICByZXR1cm4gcmVuZGVyTGFuZXM7XG4gICAgICB9XG4gICAgICBpZiAobnVsbCAhPT0gY3VycmVudClcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGN1cnJlbnQubWVtb2l6ZWRQcm9wcyAhPT0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzIHx8XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gY3VycmVudC50eXBlXG4gICAgICAgIClcbiAgICAgICAgICBkaWRSZWNlaXZlVXBkYXRlID0gITA7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFjaGVja1NjaGVkdWxlZFVwZGF0ZU9yQ29udGV4dChjdXJyZW50LCByZW5kZXJMYW5lcykgJiZcbiAgICAgICAgICAgIDAgPT09ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDEyOClcbiAgICAgICAgICApXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAoZGlkUmVjZWl2ZVVwZGF0ZSA9ICExKSxcbiAgICAgICAgICAgICAgYXR0ZW1wdEVhcmx5QmFpbG91dElmTm9TY2hlZHVsZWRVcGRhdGUoXG4gICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSAwICE9PSAoY3VycmVudC5mbGFncyAmIDEzMTA3MikgPyAhMCA6ICExO1xuICAgICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9ICExO1xuICAgICAgICBpZiAoKHJldHVybkZpYmVyID0gaXNIeWRyYXRpbmcpKVxuICAgICAgICAgIHdhcm5JZk5vdEh5ZHJhdGluZygpLFxuICAgICAgICAgICAgKHJldHVybkZpYmVyID0gMCAhPT0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgMTA0ODU3NikpO1xuICAgICAgICByZXR1cm5GaWJlciAmJlxuICAgICAgICAgICgocmV0dXJuRmliZXIgPSB3b3JrSW5Qcm9ncmVzcy5pbmRleCksXG4gICAgICAgICAgd2FybklmTm90SHlkcmF0aW5nKCksXG4gICAgICAgICAgcHVzaFRyZWVJZCh3b3JrSW5Qcm9ncmVzcywgdHJlZUZvcmtDb3VudCwgcmV0dXJuRmliZXIpKTtcbiAgICAgIH1cbiAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gMDtcbiAgICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgYTogaWYgKFxuICAgICAgICAgICAgKChyZXR1cm5GaWJlciA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyksXG4gICAgICAgICAgICAoY3VycmVudCA9IGNhbGxMYXp5SW5pdEluREVWKHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSksXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudHlwZSA9IGN1cnJlbnQpLFxuICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY3VycmVudClcbiAgICAgICAgICApXG4gICAgICAgICAgICBzaG91bGRDb25zdHJ1Y3QoY3VycmVudClcbiAgICAgICAgICAgICAgPyAoKHJldHVybkZpYmVyID0gcmVzb2x2ZUNsYXNzQ29tcG9uZW50UHJvcHMoXG4gICAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXJcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudGFnID0gMSksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLnR5cGUgPSBjdXJyZW50ID1cbiAgICAgICAgICAgICAgICAgIHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyhjdXJyZW50KSksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzID0gdXBkYXRlQ2xhc3NDb21wb25lbnQoXG4gICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgICkpKVxuICAgICAgICAgICAgICA6ICgod29ya0luUHJvZ3Jlc3MudGFnID0gMCksXG4gICAgICAgICAgICAgICAgdmFsaWRhdGVGdW5jdGlvbkNvbXBvbmVudEluRGV2KHdvcmtJblByb2dyZXNzLCBjdXJyZW50KSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudHlwZSA9IGN1cnJlbnQgPVxuICAgICAgICAgICAgICAgICAgcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKGN1cnJlbnQpKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MgPSB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudChcbiAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgKSkpO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHZvaWQgMCAhPT0gY3VycmVudCAmJiBudWxsICE9PSBjdXJyZW50KVxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKChwcmV2U2libGluZyA9IGN1cnJlbnQuJCR0eXBlb2YpLFxuICAgICAgICAgICAgICAgIHByZXZTaWJsaW5nID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50YWcgPSAxMTtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gY3VycmVudCA9XG4gICAgICAgICAgICAgICAgICByZXNvbHZlRm9yd2FyZFJlZkZvckhvdFJlbG9hZGluZyhjdXJyZW50KTtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IHVwZGF0ZUZvcndhcmRSZWYoXG4gICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChwcmV2U2libGluZyA9PT0gUkVBQ1RfTUVNT19UWVBFKSB7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudGFnID0gMTQ7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSB1cGRhdGVNZW1vQ29tcG9uZW50KFxuICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gXCJcIjtcbiAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgY3VycmVudC4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFICYmXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcyA9XG4gICAgICAgICAgICAgICAgXCIgRGlkIHlvdSB3cmFwIGEgY29tcG9uZW50IGluIFJlYWN0LmxhenkoKSBtb3JlIHRoYW4gb25jZT9cIik7XG4gICAgICAgICAgICByZW5kZXJMYW5lcyA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShjdXJyZW50KSB8fCBjdXJyZW50O1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgIFwiRWxlbWVudCB0eXBlIGlzIGludmFsaWQuIFJlY2VpdmVkIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvOiBcIiArXG4gICAgICAgICAgICAgICAgcmVuZGVyTGFuZXMgK1xuICAgICAgICAgICAgICAgIFwiLiBMYXp5IGVsZW1lbnQgdHlwZSBtdXN0IHJlc29sdmUgdG8gYSBjbGFzcyBvciBmdW5jdGlvbi5cIiArXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIHJldHVybiB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudChcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHJldHVybkZpYmVyID0gd29ya0luUHJvZ3Jlc3MudHlwZSksXG4gICAgICAgICAgICAocHJldlNpYmxpbmcgPSByZXNvbHZlQ2xhc3NDb21wb25lbnRQcm9wcyhcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wc1xuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICB1cGRhdGVDbGFzc0NvbXBvbmVudChcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICBwcmV2U2libGluZyxcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgYToge1xuICAgICAgICAgICAgcHVzaEhvc3RDb250YWluZXIoXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUuY29udGFpbmVySW5mb1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChudWxsID09PSBjdXJyZW50KVxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIlNob3VsZCBoYXZlIGEgY3VycmVudCBmaWJlci4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuRmliZXIgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gICAgICAgICAgICB2YXIgcHJldlN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICAgIHByZXZTaWJsaW5nID0gcHJldlN0YXRlLmVsZW1lbnQ7XG4gICAgICAgICAgICBjbG9uZVVwZGF0ZVF1ZXVlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgcmV0dXJuRmliZXIsIG51bGwsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgICAgIHZhciBuZXh0U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgICAgcmV0dXJuRmliZXIgPSBuZXh0U3RhdGUuY2FjaGU7XG4gICAgICAgICAgICBwdXNoUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIENhY2hlQ29udGV4dCwgcmV0dXJuRmliZXIpO1xuICAgICAgICAgICAgcmV0dXJuRmliZXIgIT09IHByZXZTdGF0ZS5jYWNoZSAmJlxuICAgICAgICAgICAgICBwcm9wYWdhdGVDb250ZXh0Q2hhbmdlcyhcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICBbQ2FjaGVDb250ZXh0XSxcbiAgICAgICAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgICAgICAhMFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgc3VzcGVuZElmVXBkYXRlUmVhZEZyb21FbnRhbmdsZWRBc3luY0FjdGlvbigpO1xuICAgICAgICAgICAgcmV0dXJuRmliZXIgPSBuZXh0U3RhdGUuZWxlbWVudDtcbiAgICAgICAgICAgIGlmIChwcmV2U3RhdGUuaXNEZWh5ZHJhdGVkKVxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKChwcmV2U3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50OiByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgIGlzRGVoeWRyYXRlZDogITEsXG4gICAgICAgICAgICAgICAgICBjYWNoZTogbmV4dFN0YXRlLmNhY2hlXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlLmJhc2VTdGF0ZSA9IHByZXZTdGF0ZSksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBwcmV2U3RhdGUpLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzICYgMjU2KVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IG1vdW50SG9zdFJvb3RXaXRob3V0SHlkcmF0aW5nKFxuICAgICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXR1cm5GaWJlciAhPT0gcHJldlNpYmxpbmcpIHtcbiAgICAgICAgICAgICAgICBwcmV2U2libGluZyA9IGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKFxuICAgICAgICAgICAgICAgICAgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiVGhpcyByb290IHJlY2VpdmVkIGFuIGVhcmx5IHVwZGF0ZSwgYmVmb3JlIGFueXRoaW5nIHdhcyBhYmxlIGh5ZHJhdGUuIFN3aXRjaGVkIHRoZSBlbnRpcmUgcm9vdCB0byBjbGllbnQgcmVuZGVyaW5nLlwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHF1ZXVlSHlkcmF0aW9uRXJyb3IocHJldlNpYmxpbmcpO1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gbW91bnRIb3N0Um9vdFdpdGhvdXRIeWRyYXRpbmcoXG4gICAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGN1cnJlbnQubm9kZVR5cGUpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuYm9keTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID1cbiAgICAgICAgICAgICAgICAgICAgICBcIkhUTUxcIiA9PT0gY3VycmVudC5ub2RlTmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBjdXJyZW50Lm93bmVyRG9jdW1lbnQuYm9keVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gZ2V0TmV4dEh5ZHJhdGFibGUoY3VycmVudC5maXJzdENoaWxkKTtcbiAgICAgICAgICAgICAgICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgICAgICAgICAgIGlzSHlkcmF0aW5nID0gITA7XG4gICAgICAgICAgICAgICAgaHlkcmF0aW9uRXJyb3JzID0gbnVsbDtcbiAgICAgICAgICAgICAgICBkaWRTdXNwZW5kT3JFcnJvckRFViA9ICExO1xuICAgICAgICAgICAgICAgIGh5ZHJhdGlvbkRpZmZSb290REVWID0gbnVsbDtcbiAgICAgICAgICAgICAgICByb290T3JTaW5nbGV0b25Db250ZXh0ID0gITA7XG4gICAgICAgICAgICAgICAgcmVuZGVyTGFuZXMgPSBtb3VudENoaWxkRmliZXJzKFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZm9yICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlbmRlckxhbmVzOyByZW5kZXJMYW5lczsgKVxuICAgICAgICAgICAgICAgICAgKHJlbmRlckxhbmVzLmZsYWdzID0gKHJlbmRlckxhbmVzLmZsYWdzICYgLTMpIHwgNDA5NiksXG4gICAgICAgICAgICAgICAgICAgIChyZW5kZXJMYW5lcyA9IHJlbmRlckxhbmVzLnNpYmxpbmcpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzZXRIeWRyYXRpb25TdGF0ZSgpO1xuICAgICAgICAgICAgICBpZiAocmV0dXJuRmliZXIgPT09IHByZXZTaWJsaW5nKSB7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKFxuICAgICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oXG4gICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBtYXJrUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIG51bGwgPT09IGN1cnJlbnRcbiAgICAgICAgICAgICAgPyAocmVuZGVyTGFuZXMgPSBnZXRSZXNvdXJjZShcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUsXG4gICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLFxuICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgPyAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IHJlbmRlckxhbmVzKVxuICAgICAgICAgICAgICAgIDogaXNIeWRyYXRpbmcgfHxcbiAgICAgICAgICAgICAgICAgICgocmVuZGVyTGFuZXMgPSB3b3JrSW5Qcm9ncmVzcy50eXBlKSxcbiAgICAgICAgICAgICAgICAgIChjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzKSxcbiAgICAgICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IHJlcXVpcmVkQ29udGV4dChcbiAgICAgICAgICAgICAgICAgICAgcm9vdEluc3RhbmNlU3RhY2tDdXJzb3IuY3VycmVudFxuICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPVxuICAgICAgICAgICAgICAgICAgICBnZXRPd25lckRvY3VtZW50RnJvbVJvb3RDb250YWluZXIoXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXJcbiAgICAgICAgICAgICAgICAgICAgKS5jcmVhdGVFbGVtZW50KHJlbmRlckxhbmVzKSksXG4gICAgICAgICAgICAgICAgICAocmV0dXJuRmliZXJbaW50ZXJuYWxJbnN0YW5jZUtleV0gPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgICAocmV0dXJuRmliZXJbaW50ZXJuYWxQcm9wc0tleV0gPSBjdXJyZW50KSxcbiAgICAgICAgICAgICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKHJldHVybkZpYmVyLCByZW5kZXJMYW5lcywgY3VycmVudCksXG4gICAgICAgICAgICAgICAgICBtYXJrTm9kZUFzSG9pc3RhYmxlKHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSByZXR1cm5GaWJlcikpXG4gICAgICAgICAgICAgIDogKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBnZXRSZXNvdXJjZShcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUsXG4gICAgICAgICAgICAgICAgICBjdXJyZW50Lm1lbW9pemVkUHJvcHMsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgICAgICAgICAgICBjdXJyZW50Lm1lbW9pemVkU3RhdGVcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgIG51bGxcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBwdXNoSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgbnVsbCA9PT0gY3VycmVudCAmJlxuICAgICAgICAgICAgICBpc0h5ZHJhdGluZyAmJlxuICAgICAgICAgICAgICAoKHJldHVybkZpYmVyID0gcmVxdWlyZWRDb250ZXh0KHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLmN1cnJlbnQpKSxcbiAgICAgICAgICAgICAgKHByZXZTaWJsaW5nID0gZ2V0SG9zdENvbnRleHQoKSksXG4gICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9XG4gICAgICAgICAgICAgICAgcmVzb2x2ZVNpbmdsZXRvbkluc3RhbmNlKFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSxcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyxcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgcHJldlNpYmxpbmcsXG4gICAgICAgICAgICAgICAgICAhMVxuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICBkaWRTdXNwZW5kT3JFcnJvckRFViB8fFxuICAgICAgICAgICAgICAgICgocHJldlNpYmxpbmcgPSBkaWZmSHlkcmF0ZWRQcm9wZXJ0aWVzKFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlLFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLFxuICAgICAgICAgICAgICAgICAgcHJldlNpYmxpbmdcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICBudWxsICE9PSBwcmV2U2libGluZyAmJlxuICAgICAgICAgICAgICAgICAgKGJ1aWxkSHlkcmF0aW9uRGlmZk5vZGUod29ya0luUHJvZ3Jlc3MsIDApLnNlcnZlclByb3BzID1cbiAgICAgICAgICAgICAgICAgICAgcHJldlNpYmxpbmcpKSxcbiAgICAgICAgICAgICAgKGh5ZHJhdGlvblBhcmVudEZpYmVyID0gd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAocm9vdE9yU2luZ2xldG9uQ29udGV4dCA9ICEwKSxcbiAgICAgICAgICAgICAgKHByZXZTaWJsaW5nID0gbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSksXG4gICAgICAgICAgICAgIGlzU2luZ2xldG9uU2NvcGUod29ya0luUHJvZ3Jlc3MudHlwZSlcbiAgICAgICAgICAgICAgICA/ICgocHJldmlvdXNIeWRyYXRhYmxlT25FbnRlcmluZ1Njb3BlZFNpbmdsZXRvbiA9IHByZXZTaWJsaW5nKSxcbiAgICAgICAgICAgICAgICAgIChuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gZ2V0TmV4dEh5ZHJhdGFibGUoXG4gICAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLmZpcnN0Q2hpbGRcbiAgICAgICAgICAgICAgICAgICkpKVxuICAgICAgICAgICAgICAgIDogKG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBwcmV2U2libGluZykpLFxuICAgICAgICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgbWFya1JlZihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICBudWxsID09PSBjdXJyZW50ICYmICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0MTk0MzA0KSxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBudWxsID09PSBjdXJyZW50ICYmXG4gICAgICAgICAgICAgIGlzSHlkcmF0aW5nICYmXG4gICAgICAgICAgICAgICgocHJldlN0YXRlID0gZ2V0SG9zdENvbnRleHQoKSksXG4gICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IHZhbGlkYXRlRE9NTmVzdGluZyhcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlLFxuICAgICAgICAgICAgICAgIHByZXZTdGF0ZS5hbmNlc3RvckluZm9cbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIChwcmV2U2libGluZyA9IG5leHRIeWRyYXRhYmxlSW5zdGFuY2UpLFxuICAgICAgICAgICAgICAobmV4dFN0YXRlID0gIXByZXZTaWJsaW5nKSB8fFxuICAgICAgICAgICAgICAgICgobmV4dFN0YXRlID0gY2FuSHlkcmF0ZUluc3RhbmNlKFxuICAgICAgICAgICAgICAgICAgcHJldlNpYmxpbmcsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlLFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLFxuICAgICAgICAgICAgICAgICAgcm9vdE9yU2luZ2xldG9uQ29udGV4dFxuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIG51bGwgIT09IG5leHRTdGF0ZVxuICAgICAgICAgICAgICAgICAgPyAoKHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IG5leHRTdGF0ZSksXG4gICAgICAgICAgICAgICAgICAgIGRpZFN1c3BlbmRPckVycm9yREVWIHx8XG4gICAgICAgICAgICAgICAgICAgICAgKChwcmV2U3RhdGUgPSBkaWZmSHlkcmF0ZWRQcm9wZXJ0aWVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZTdGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgICAgIG51bGwgIT09IHByZXZTdGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKGJ1aWxkSHlkcmF0aW9uRGlmZk5vZGUod29ya0luUHJvZ3Jlc3MsIDApLnNlcnZlclByb3BzID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldlN0YXRlKSksXG4gICAgICAgICAgICAgICAgICAgIChoeWRyYXRpb25QYXJlbnRGaWJlciA9IHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAgICAgKG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZShcbiAgICAgICAgICAgICAgICAgICAgICBuZXh0U3RhdGUuZmlyc3RDaGlsZFxuICAgICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAgICAgKHJvb3RPclNpbmdsZXRvbkNvbnRleHQgPSAhMSksXG4gICAgICAgICAgICAgICAgICAgIChwcmV2U3RhdGUgPSAhMCkpXG4gICAgICAgICAgICAgICAgICA6IChwcmV2U3RhdGUgPSAhMSksXG4gICAgICAgICAgICAgICAgKG5leHRTdGF0ZSA9ICFwcmV2U3RhdGUpKSxcbiAgICAgICAgICAgICAgbmV4dFN0YXRlICYmXG4gICAgICAgICAgICAgICAgKHJldHVybkZpYmVyICYmXG4gICAgICAgICAgICAgICAgICB3YXJuTm9uSHlkcmF0ZWRJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgcHJldlNpYmxpbmcpLFxuICAgICAgICAgICAgICAgIHRocm93T25IeWRyYXRpb25NaXNtYXRjaCh3b3JrSW5Qcm9ncmVzcykpKSxcbiAgICAgICAgICAgIHB1c2hIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAocHJldlNpYmxpbmcgPSB3b3JrSW5Qcm9ncmVzcy50eXBlKSxcbiAgICAgICAgICAgIChwcmV2U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMpLFxuICAgICAgICAgICAgKG5leHRTdGF0ZSA9IG51bGwgIT09IGN1cnJlbnQgPyBjdXJyZW50Lm1lbW9pemVkUHJvcHMgOiBudWxsKSxcbiAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IHByZXZTdGF0ZS5jaGlsZHJlbiksXG4gICAgICAgICAgICBzaG91bGRTZXRUZXh0Q29udGVudChwcmV2U2libGluZywgcHJldlN0YXRlKVxuICAgICAgICAgICAgICA/IChyZXR1cm5GaWJlciA9IG51bGwpXG4gICAgICAgICAgICAgIDogbnVsbCAhPT0gbmV4dFN0YXRlICYmXG4gICAgICAgICAgICAgICAgc2hvdWxkU2V0VGV4dENvbnRlbnQocHJldlNpYmxpbmcsIG5leHRTdGF0ZSkgJiZcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMzIpLFxuICAgICAgICAgICAgbnVsbCAhPT0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgICAgICAoKHByZXZTaWJsaW5nID0gcmVuZGVyV2l0aEhvb2tzKFxuICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgVHJhbnNpdGlvbkF3YXJlSG9zdENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIChIb3N0VHJhbnNpdGlvbkNvbnRleHQuX2N1cnJlbnRWYWx1ZSA9IHByZXZTaWJsaW5nKSksXG4gICAgICAgICAgICBtYXJrUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIHJlY29uY2lsZUNoaWxkcmVuKFxuICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIG51bGwgPT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgaXNIeWRyYXRpbmcgJiZcbiAgICAgICAgICAgICAgKChyZW5kZXJMYW5lcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyksXG4gICAgICAgICAgICAgIChjdXJyZW50ID0gZ2V0SG9zdENvbnRleHQoKSksXG4gICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IGN1cnJlbnQuYW5jZXN0b3JJbmZvLmN1cnJlbnQpLFxuICAgICAgICAgICAgICAocmVuZGVyTGFuZXMgPVxuICAgICAgICAgICAgICAgIG51bGwgIT0gcmV0dXJuRmliZXJcbiAgICAgICAgICAgICAgICAgID8gdmFsaWRhdGVUZXh0TmVzdGluZyhcbiAgICAgICAgICAgICAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm5GaWJlci50YWcsXG4gICAgICAgICAgICAgICAgICAgICAgY3VycmVudC5hbmNlc3RvckluZm8uaW1wbGljaXRSb290U2NvcGVcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgOiAhMCksXG4gICAgICAgICAgICAgIChjdXJyZW50ID0gbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSksXG4gICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9ICFjdXJyZW50KSB8fFxuICAgICAgICAgICAgICAgICgocmV0dXJuRmliZXIgPSBjYW5IeWRyYXRlVGV4dEluc3RhbmNlKFxuICAgICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyxcbiAgICAgICAgICAgICAgICAgIHJvb3RPclNpbmdsZXRvbkNvbnRleHRcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICBudWxsICE9PSByZXR1cm5GaWJlclxuICAgICAgICAgICAgICAgICAgPyAoKHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgICAgICAgICAgKGh5ZHJhdGlvblBhcmVudEZpYmVyID0gd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgICAgICAobmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IG51bGwpLFxuICAgICAgICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSAhMCkpXG4gICAgICAgICAgICAgICAgICA6IChyZXR1cm5GaWJlciA9ICExKSxcbiAgICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSAhcmV0dXJuRmliZXIpKSxcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIgJiZcbiAgICAgICAgICAgICAgICAocmVuZGVyTGFuZXMgJiZcbiAgICAgICAgICAgICAgICAgIHdhcm5Ob25IeWRyYXRlZEluc3RhbmNlKHdvcmtJblByb2dyZXNzLCBjdXJyZW50KSxcbiAgICAgICAgICAgICAgICB0aHJvd09uSHlkcmF0aW9uTWlzbWF0Y2god29ya0luUHJvZ3Jlc3MpKSksXG4gICAgICAgICAgICBudWxsXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICByZXR1cm4gdXBkYXRlU3VzcGVuc2VDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBwdXNoSG9zdENvbnRhaW5lcihcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZS5jb250YWluZXJJbmZvXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgKHJldHVybkZpYmVyID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzKSxcbiAgICAgICAgICAgIG51bGwgPT09IGN1cnJlbnRcbiAgICAgICAgICAgICAgPyAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyhcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICA6IHJlY29uY2lsZUNoaWxkcmVuKFxuICAgICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZUZvcndhcmRSZWYoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHJlY29uY2lsZUNoaWxkcmVuKFxuICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICByZWNvbmNpbGVDaGlsZHJlbihcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0KSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAyMDQ4KSxcbiAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSksXG4gICAgICAgICAgICAocmV0dXJuRmliZXIuZWZmZWN0RHVyYXRpb24gPSAtMCksXG4gICAgICAgICAgICAocmV0dXJuRmliZXIucGFzc2l2ZUVmZmVjdER1cmF0aW9uID0gLTApLFxuICAgICAgICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAocmV0dXJuRmliZXIgPSB3b3JrSW5Qcm9ncmVzcy50eXBlKSxcbiAgICAgICAgICAgIChwcmV2U2libGluZyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyksXG4gICAgICAgICAgICAocHJldlN0YXRlID0gcHJldlNpYmxpbmcudmFsdWUpLFxuICAgICAgICAgICAgXCJ2YWx1ZVwiIGluIHByZXZTaWJsaW5nIHx8XG4gICAgICAgICAgICAgIGhhc1dhcm5lZEFib3V0VXNpbmdOb1ZhbHVlUHJvcE9uQ29udGV4dFByb3ZpZGVyIHx8XG4gICAgICAgICAgICAgICgoaGFzV2FybmVkQWJvdXRVc2luZ05vVmFsdWVQcm9wT25Db250ZXh0UHJvdmlkZXIgPSAhMCksXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJUaGUgYHZhbHVlYCBwcm9wIGlzIHJlcXVpcmVkIGZvciB0aGUgYDxDb250ZXh0LlByb3ZpZGVyPmAuIERpZCB5b3UgbWlzc3BlbGwgaXQgb3IgZm9yZ2V0IHRvIHBhc3MgaXQ/XCJcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICBwdXNoUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIHJldHVybkZpYmVyLCBwcmV2U3RhdGUpLFxuICAgICAgICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICBwcmV2U2libGluZy5jaGlsZHJlbixcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHByZXZTaWJsaW5nID0gd29ya0luUHJvZ3Jlc3MudHlwZS5fY29udGV4dCksXG4gICAgICAgICAgICAocmV0dXJuRmliZXIgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMuY2hpbGRyZW4pLFxuICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgcmV0dXJuRmliZXIgJiZcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIkEgY29udGV4dCBjb25zdW1lciB3YXMgcmVuZGVyZWQgd2l0aCBtdWx0aXBsZSBjaGlsZHJlbiwgb3IgYSBjaGlsZCB0aGF0IGlzbid0IGEgZnVuY3Rpb24uIEEgY29udGV4dCBjb25zdW1lciBleHBlY3RzIGEgc2luZ2xlIGNoaWxkIHRoYXQgaXMgYSBmdW5jdGlvbi4gSWYgeW91IGRpZCBwYXNzIGEgZnVuY3Rpb24sIG1ha2Ugc3VyZSB0aGVyZSBpcyBubyB0cmFpbGluZyBvciBsZWFkaW5nIHdoaXRlc3BhY2UgYXJvdW5kIGl0LlwiXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAocHJldlNpYmxpbmcgPSByZWFkQ29udGV4dChwcmV2U2libGluZykpLFxuICAgICAgICAgICAgbWFya0NvbXBvbmVudFJlbmRlclN0YXJ0ZWQod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgKHJldHVybkZpYmVyID0gY2FsbENvbXBvbmVudEluREVWKFxuICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgcHJldlNpYmxpbmcsXG4gICAgICAgICAgICAgIHZvaWQgMFxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICBtYXJrQ29tcG9uZW50UmVuZGVyU3RvcHBlZCgpLFxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEpLFxuICAgICAgICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW9Db21wb25lbnQoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIHJldHVybiB1cGRhdGVTaW1wbGVNZW1vQ29tcG9uZW50KFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyxcbiAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICByZXR1cm4gdXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50KFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgIHByZXZTaWJsaW5nID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICAgICAgICAgIG5leHRTdGF0ZSA9IDAgIT09ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDEyOCk7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gLTEyOTtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gY3VycmVudClcbiAgICAgICAgICAgIGlmIChpc0h5ZHJhdGluZykge1xuICAgICAgICAgICAgICBpZiAoXCJoaWRkZW5cIiA9PT0gcHJldlNpYmxpbmcubW9kZSlcbiAgICAgICAgICAgICAgICBtb3VudEFjdGl2aXR5Q2hpbGRyZW4od29ya0luUHJvZ3Jlc3MsIHByZXZTaWJsaW5nKTtcbiAgICAgICAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgKHB1c2hEZWh5ZHJhdGVkQWN0aXZpdHlTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgIChyZW5kZXJMYW5lcyA9IG5leHRIeWRyYXRhYmxlSW5zdGFuY2UpXG4gICAgICAgICAgICAgICAgICA/ICgoY3VycmVudCA9IGNhbkh5ZHJhdGVIeWRyYXRpb25Cb3VuZGFyeShcbiAgICAgICAgICAgICAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgICAgICAgICAgICByb290T3JTaW5nbGV0b25Db250ZXh0XG4gICAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgICAoY3VycmVudCA9XG4gICAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJiBjdXJyZW50LmRhdGEgPT09IEFDVElWSVRZX1NUQVJUX0RBVEFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY3VycmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsKSxcbiAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAgICAgICAgICAgICAgICgocmV0dXJuRmliZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWh5ZHJhdGVkOiBjdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJlZUNvbnRleHQ6IGdldFN1c3BlbmRlZFRyZWVDb250ZXh0KCksXG4gICAgICAgICAgICAgICAgICAgICAgICByZXRyeUxhbmU6IDUzNjg3MDkxMixcbiAgICAgICAgICAgICAgICAgICAgICAgIGh5ZHJhdGlvbkVycm9yczogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9XG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVGaWJlckZyb21EZWh5ZHJhdGVkRnJhZ21lbnQoY3VycmVudCkpLFxuICAgICAgICAgICAgICAgICAgICAgIChyZXR1cm5GaWJlci5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICAgICAgICAgIChoeWRyYXRpb25QYXJlbnRGaWJlciA9IHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAgICAgICAobmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IG51bGwpKSlcbiAgICAgICAgICAgICAgICAgIDogKGN1cnJlbnQgPSBudWxsKSxcbiAgICAgICAgICAgICAgICBudWxsID09PSBjdXJyZW50KVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgdGhyb3cgKFxuICAgICAgICAgICAgICAgICAgKHdhcm5Ob25IeWRyYXRlZEluc3RhbmNlKHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAgICAgICB0aHJvd09uSHlkcmF0aW9uTWlzbWF0Y2god29ya0luUHJvZ3Jlc3MpKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gNTM2ODcwOTEyO1xuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBtb3VudEFjdGl2aXR5Q2hpbGRyZW4oXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgcHJldlNpYmxpbmdcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAgICgocmV0dXJuRmliZXIgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpLCBudWxsICE9PSByZXR1cm5GaWJlcilcbiAgICAgICAgICApXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICgocHJldlN0YXRlID0gcmV0dXJuRmliZXIuZGVoeWRyYXRlZCksXG4gICAgICAgICAgICAgIHB1c2hEZWh5ZHJhdGVkQWN0aXZpdHlTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICBuZXh0U3RhdGUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDI1NilcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gLTI1NyksXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MgPSByZXRyeUFjdGl2aXR5Q29tcG9uZW50V2l0aG91dEh5ZHJhdGluZyhcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgICAgZWxzZSBpZiAobnVsbCAhPT0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSlcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjdXJyZW50LmNoaWxkKSxcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMjgpLFxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzID0gbnVsbCk7XG4gICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICAgIFwiQ2xpZW50IHJlbmRlcmluZyBhbiBBY3Rpdml0eSBzdXNwZW5kZWQgaXQgYWdhaW4uIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgICAgICh3YXJuSWZIeWRyYXRpbmcoKSxcbiAgICAgICAgICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSB8fFxuICAgICAgICAgICAgICAgIHByb3BhZ2F0ZVBhcmVudENvbnRleHRDaGFuZ2VzKFxuICAgICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICAgICAgICAhMVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIChuZXh0U3RhdGUgPSAwICE9PSAocmVuZGVyTGFuZXMgJiBjdXJyZW50LmNoaWxkTGFuZXMpKSxcbiAgICAgICAgICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSB8fCBuZXh0U3RhdGUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcHJldlNpYmxpbmcgPSB3b3JrSW5Qcm9ncmVzc1Jvb3Q7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBudWxsICE9PSBwcmV2U2libGluZyAmJlxuICAgICAgICAgICAgICAgICgocHJldlN0YXRlID0gZ2V0QnVtcGVkTGFuZUZvckh5ZHJhdGlvbihcbiAgICAgICAgICAgICAgICAgIHByZXZTaWJsaW5nLFxuICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAwICE9PSBwcmV2U3RhdGUgJiYgcHJldlN0YXRlICE9PSByZXR1cm5GaWJlci5yZXRyeUxhbmUpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB0aHJvdyAoXG4gICAgICAgICAgICAgICAgICAoKHJldHVybkZpYmVyLnJldHJ5TGFuZSA9IHByZXZTdGF0ZSksXG4gICAgICAgICAgICAgICAgICBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoY3VycmVudCwgcHJldlN0YXRlKSxcbiAgICAgICAgICAgICAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihwcmV2U2libGluZywgY3VycmVudCwgcHJldlN0YXRlKSxcbiAgICAgICAgICAgICAgICAgIFNlbGVjdGl2ZUh5ZHJhdGlvbkV4Y2VwdGlvbilcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZW5kZXJEaWRTdXNwZW5kRGVsYXlJZlBvc3NpYmxlKCk7XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gcmV0cnlBY3Rpdml0eUNvbXBvbmVudFdpdGhvdXRIeWRyYXRpbmcoXG4gICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgIChyZW5kZXJMYW5lcyA9IHJldHVybkZpYmVyLnRyZWVDb250ZXh0KSxcbiAgICAgICAgICAgICAgICAobmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGdldE5leHRIeWRyYXRhYmxlKFxuICAgICAgICAgICAgICAgICAgcHJldlN0YXRlLm5leHRTaWJsaW5nXG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgKGh5ZHJhdGlvblBhcmVudEZpYmVyID0gd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgIChpc0h5ZHJhdGluZyA9ICEwKSxcbiAgICAgICAgICAgICAgICAoaHlkcmF0aW9uRXJyb3JzID0gbnVsbCksXG4gICAgICAgICAgICAgICAgKGRpZFN1c3BlbmRPckVycm9yREVWID0gITEpLFxuICAgICAgICAgICAgICAgIChoeWRyYXRpb25EaWZmUm9vdERFViA9IG51bGwpLFxuICAgICAgICAgICAgICAgIChyb290T3JTaW5nbGV0b25Db250ZXh0ID0gITEpLFxuICAgICAgICAgICAgICAgIG51bGwgIT09IHJlbmRlckxhbmVzICYmXG4gICAgICAgICAgICAgICAgICByZXN0b3JlU3VzcGVuZGVkVHJlZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MgPSBtb3VudEFjdGl2aXR5Q2hpbGRyZW4oXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICAgIHByZXZTaWJsaW5nXG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQwOTYpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIChyZW5kZXJMYW5lcyA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnQuY2hpbGQsIHtcbiAgICAgICAgICAgICAgbW9kZTogcHJldlNpYmxpbmcubW9kZSxcbiAgICAgICAgICAgICAgY2hpbGRyZW46IHByZXZTaWJsaW5nLmNoaWxkcmVuXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgIChyZW5kZXJMYW5lcy5yZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWYpLFxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAgIChyZW5kZXJMYW5lcy5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcyA9IHJlbmRlckxhbmVzKTtcbiAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZU9mZnNjcmVlbkNvbXBvbmVudChcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgKHJldHVybkZpYmVyID0gcmVhZENvbnRleHQoQ2FjaGVDb250ZXh0KSksXG4gICAgICAgICAgICBudWxsID09PSBjdXJyZW50XG4gICAgICAgICAgICAgID8gKChwcmV2U2libGluZyA9IHBlZWtDYWNoZUZyb21Qb29sKCkpLFxuICAgICAgICAgICAgICAgIG51bGwgPT09IHByZXZTaWJsaW5nICYmXG4gICAgICAgICAgICAgICAgICAoKHByZXZTaWJsaW5nID0gd29ya0luUHJvZ3Jlc3NSb290KSxcbiAgICAgICAgICAgICAgICAgIChwcmV2U3RhdGUgPSBjcmVhdGVDYWNoZSgpKSxcbiAgICAgICAgICAgICAgICAgIChwcmV2U2libGluZy5wb29sZWRDYWNoZSA9IHByZXZTdGF0ZSksXG4gICAgICAgICAgICAgICAgICByZXRhaW5DYWNoZShwcmV2U3RhdGUpLFxuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gcHJldlN0YXRlICYmXG4gICAgICAgICAgICAgICAgICAgIChwcmV2U2libGluZy5wb29sZWRDYWNoZUxhbmVzIHw9IHJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgICAgICAgIChwcmV2U2libGluZyA9IHByZXZTdGF0ZSkpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgcGFyZW50OiByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgIGNhY2hlOiBwcmV2U2libGluZ1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGluaXRpYWxpemVVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgcHVzaFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBDYWNoZUNvbnRleHQsIHByZXZTaWJsaW5nKSlcbiAgICAgICAgICAgICAgOiAoMCAhPT0gKGN1cnJlbnQubGFuZXMgJiByZW5kZXJMYW5lcykgJiZcbiAgICAgICAgICAgICAgICAgIChjbG9uZVVwZGF0ZVF1ZXVlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAgIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbnVsbCwgbnVsbCwgcmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgICAgICAgc3VzcGVuZElmVXBkYXRlUmVhZEZyb21FbnRhbmdsZWRBc3luY0FjdGlvbigpKSxcbiAgICAgICAgICAgICAgICAocHJldlNpYmxpbmcgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpLFxuICAgICAgICAgICAgICAgIChwcmV2U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlKSxcbiAgICAgICAgICAgICAgICBwcmV2U2libGluZy5wYXJlbnQgIT09IHJldHVybkZpYmVyXG4gICAgICAgICAgICAgICAgICA/ICgocHJldlNpYmxpbmcgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgcGFyZW50OiByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgICAgICBjYWNoZTogcmV0dXJuRmliZXJcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gcHJldlNpYmxpbmcpLFxuICAgICAgICAgICAgICAgICAgICAwID09PSB3b3JrSW5Qcm9ncmVzcy5sYW5lcyAmJlxuICAgICAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlLmJhc2VTdGF0ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZTaWJsaW5nKSxcbiAgICAgICAgICAgICAgICAgICAgcHVzaFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBDYWNoZUNvbnRleHQsIHJldHVybkZpYmVyKSlcbiAgICAgICAgICAgICAgICAgIDogKChyZXR1cm5GaWJlciA9IHByZXZTdGF0ZS5jYWNoZSksXG4gICAgICAgICAgICAgICAgICAgIHB1c2hQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgQ2FjaGVDb250ZXh0LCByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyICE9PSBwcmV2U2libGluZy5jYWNoZSAmJlxuICAgICAgICAgICAgICAgICAgICAgIHByb3BhZ2F0ZUNvbnRleHRDaGFuZ2VzKFxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICBbQ2FjaGVDb250ZXh0XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgITBcbiAgICAgICAgICAgICAgICAgICAgICApKSksXG4gICAgICAgICAgICByZWNvbmNpbGVDaGlsZHJlbihcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMjk6XG4gICAgICAgICAgdGhyb3cgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICAgICAgfVxuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIFwiVW5rbm93biB1bml0IG9mIHdvcmsgdGFnIChcIiArXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudGFnICtcbiAgICAgICAgICBcIikuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByZWxvYWRJbnN0YW5jZUFuZFN1c3BlbmRJZk5lZWRlZChcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgdHlwZSxcbiAgICAgIG9sZFByb3BzLFxuICAgICAgbmV3UHJvcHMsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgaWYgKCh0eXBlID0gKHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdXNwZW5zZXlJbWFnZXNNb2RlKSAhPT0gTm9Nb2RlKSlcbiAgICAgICAgdHlwZSA9ICExO1xuICAgICAgaWYgKHR5cGUpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTY3NzcyMTYpLFxuICAgICAgICAgIChyZW5kZXJMYW5lcyAmIDMzNTU0NDEyOCkgPT09IHJlbmRlckxhbmVzKVxuICAgICAgICApXG4gICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZS5jb21wbGV0ZSkgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gODE5MjtcbiAgICAgICAgICBlbHNlIGlmIChzaG91bGRSZW1haW5PblByZXZpb3VzU2NyZWVuKCkpIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDgxOTI7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhyb3cgKFxuICAgICAgICAgICAgICAoKHN1c3BlbmRlZFRoZW5hYmxlID0gbm9vcFN1c3BlbnNleUNvbW1pdFRoZW5hYmxlKSxcbiAgICAgICAgICAgICAgU3VzcGVuc2V5Q29tbWl0RXhjZXB0aW9uKVxuICAgICAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSAtMTY3NzcyMTc7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByZWxvYWRSZXNvdXJjZUFuZFN1c3BlbmRJZk5lZWRlZCh3b3JrSW5Qcm9ncmVzcywgcmVzb3VyY2UpIHtcbiAgICAgIGlmIChcbiAgICAgICAgXCJzdHlsZXNoZWV0XCIgIT09IHJlc291cmNlLnR5cGUgfHxcbiAgICAgICAgKHJlc291cmNlLnN0YXRlLmxvYWRpbmcgJiBJbnNlcnRlZCkgIT09IE5vdExvYWRlZFxuICAgICAgKVxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSAtMTY3NzcyMTc7XG4gICAgICBlbHNlIGlmICgoKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDE2Nzc3MjE2KSwgIXByZWxvYWRSZXNvdXJjZShyZXNvdXJjZSkpKVxuICAgICAgICBpZiAoc2hvdWxkUmVtYWluT25QcmV2aW91c1NjcmVlbigpKSB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA4MTkyO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgdGhyb3cgKFxuICAgICAgICAgICAgKChzdXNwZW5kZWRUaGVuYWJsZSA9IG5vb3BTdXNwZW5zZXlDb21taXRUaGVuYWJsZSksXG4gICAgICAgICAgICBTdXNwZW5zZXlDb21taXRFeGNlcHRpb24pXG4gICAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2NoZWR1bGVSZXRyeUVmZmVjdCh3b3JrSW5Qcm9ncmVzcywgcmV0cnlRdWV1ZSkge1xuICAgICAgbnVsbCAhPT0gcmV0cnlRdWV1ZSAmJiAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNCk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDE2Mzg0ICYmXG4gICAgICAgICgocmV0cnlRdWV1ZSA9XG4gICAgICAgICAgMjIgIT09IHdvcmtJblByb2dyZXNzLnRhZyA/IGNsYWltTmV4dFJldHJ5TGFuZSgpIDogNTM2ODcwOTEyKSxcbiAgICAgICAgKHdvcmtJblByb2dyZXNzLmxhbmVzIHw9IHJldHJ5UXVldWUpLFxuICAgICAgICAod29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZXRyeUxhbmVzIHw9IHJldHJ5UXVldWUpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCBoYXNSZW5kZXJlZEFUYWlsRmFsbGJhY2spIHtcbiAgICAgIGlmICghaXNIeWRyYXRpbmcpXG4gICAgICAgIHN3aXRjaCAocmVuZGVyU3RhdGUudGFpbE1vZGUpIHtcbiAgICAgICAgICBjYXNlIFwiaGlkZGVuXCI6XG4gICAgICAgICAgICBoYXNSZW5kZXJlZEFUYWlsRmFsbGJhY2sgPSByZW5kZXJTdGF0ZS50YWlsO1xuICAgICAgICAgICAgZm9yICh2YXIgbGFzdFRhaWxOb2RlID0gbnVsbDsgbnVsbCAhPT0gaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrOyApXG4gICAgICAgICAgICAgIG51bGwgIT09IGhhc1JlbmRlcmVkQVRhaWxGYWxsYmFjay5hbHRlcm5hdGUgJiZcbiAgICAgICAgICAgICAgICAobGFzdFRhaWxOb2RlID0gaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrKSxcbiAgICAgICAgICAgICAgICAoaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrID0gaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrLnNpYmxpbmcpO1xuICAgICAgICAgICAgbnVsbCA9PT0gbGFzdFRhaWxOb2RlXG4gICAgICAgICAgICAgID8gKHJlbmRlclN0YXRlLnRhaWwgPSBudWxsKVxuICAgICAgICAgICAgICA6IChsYXN0VGFpbE5vZGUuc2libGluZyA9IG51bGwpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBcImNvbGxhcHNlZFwiOlxuICAgICAgICAgICAgbGFzdFRhaWxOb2RlID0gcmVuZGVyU3RhdGUudGFpbDtcbiAgICAgICAgICAgIGZvciAodmFyIF9sYXN0VGFpbE5vZGUgPSBudWxsOyBudWxsICE9PSBsYXN0VGFpbE5vZGU7IClcbiAgICAgICAgICAgICAgbnVsbCAhPT0gbGFzdFRhaWxOb2RlLmFsdGVybmF0ZSAmJiAoX2xhc3RUYWlsTm9kZSA9IGxhc3RUYWlsTm9kZSksXG4gICAgICAgICAgICAgICAgKGxhc3RUYWlsTm9kZSA9IGxhc3RUYWlsTm9kZS5zaWJsaW5nKTtcbiAgICAgICAgICAgIG51bGwgPT09IF9sYXN0VGFpbE5vZGVcbiAgICAgICAgICAgICAgPyBoYXNSZW5kZXJlZEFUYWlsRmFsbGJhY2sgfHwgbnVsbCA9PT0gcmVuZGVyU3RhdGUudGFpbFxuICAgICAgICAgICAgICAgID8gKHJlbmRlclN0YXRlLnRhaWwgPSBudWxsKVxuICAgICAgICAgICAgICAgIDogKHJlbmRlclN0YXRlLnRhaWwuc2libGluZyA9IG51bGwpXG4gICAgICAgICAgICAgIDogKF9sYXN0VGFpbE5vZGUuc2libGluZyA9IG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJ1YmJsZVByb3BlcnRpZXMoY29tcGxldGVkV29yaykge1xuICAgICAgdmFyIGRpZEJhaWxvdXQgPVxuICAgICAgICAgIG51bGwgIT09IGNvbXBsZXRlZFdvcmsuYWx0ZXJuYXRlICYmXG4gICAgICAgICAgY29tcGxldGVkV29yay5hbHRlcm5hdGUuY2hpbGQgPT09IGNvbXBsZXRlZFdvcmsuY2hpbGQsXG4gICAgICAgIG5ld0NoaWxkTGFuZXMgPSAwLFxuICAgICAgICBzdWJ0cmVlRmxhZ3MgPSAwO1xuICAgICAgaWYgKGRpZEJhaWxvdXQpXG4gICAgICAgIGlmICgoY29tcGxldGVkV29yay5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgdmFyIF90cmVlQmFzZUR1cmF0aW9uID0gY29tcGxldGVkV29yay5zZWxmQmFzZUR1cmF0aW9uLFxuICAgICAgICAgICAgICBfY2hpbGQyID0gY29tcGxldGVkV29yay5jaGlsZDtcbiAgICAgICAgICAgIG51bGwgIT09IF9jaGlsZDI7XG5cbiAgICAgICAgICApXG4gICAgICAgICAgICAobmV3Q2hpbGRMYW5lcyB8PSBfY2hpbGQyLmxhbmVzIHwgX2NoaWxkMi5jaGlsZExhbmVzKSxcbiAgICAgICAgICAgICAgKHN1YnRyZWVGbGFncyB8PSBfY2hpbGQyLnN1YnRyZWVGbGFncyAmIDY1MDExNzEyKSxcbiAgICAgICAgICAgICAgKHN1YnRyZWVGbGFncyB8PSBfY2hpbGQyLmZsYWdzICYgNjUwMTE3MTIpLFxuICAgICAgICAgICAgICAoX3RyZWVCYXNlRHVyYXRpb24gKz0gX2NoaWxkMi50cmVlQmFzZUR1cmF0aW9uKSxcbiAgICAgICAgICAgICAgKF9jaGlsZDIgPSBfY2hpbGQyLnNpYmxpbmcpO1xuICAgICAgICAgIGNvbXBsZXRlZFdvcmsudHJlZUJhc2VEdXJhdGlvbiA9IF90cmVlQmFzZUR1cmF0aW9uO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgX3RyZWVCYXNlRHVyYXRpb24gPSBjb21wbGV0ZWRXb3JrLmNoaWxkO1xuICAgICAgICAgICAgbnVsbCAhPT0gX3RyZWVCYXNlRHVyYXRpb247XG5cbiAgICAgICAgICApXG4gICAgICAgICAgICAobmV3Q2hpbGRMYW5lcyB8PVxuICAgICAgICAgICAgICBfdHJlZUJhc2VEdXJhdGlvbi5sYW5lcyB8IF90cmVlQmFzZUR1cmF0aW9uLmNoaWxkTGFuZXMpLFxuICAgICAgICAgICAgICAoc3VidHJlZUZsYWdzIHw9IF90cmVlQmFzZUR1cmF0aW9uLnN1YnRyZWVGbGFncyAmIDY1MDExNzEyKSxcbiAgICAgICAgICAgICAgKHN1YnRyZWVGbGFncyB8PSBfdHJlZUJhc2VEdXJhdGlvbi5mbGFncyAmIDY1MDExNzEyKSxcbiAgICAgICAgICAgICAgKF90cmVlQmFzZUR1cmF0aW9uLnJldHVybiA9IGNvbXBsZXRlZFdvcmspLFxuICAgICAgICAgICAgICAoX3RyZWVCYXNlRHVyYXRpb24gPSBfdHJlZUJhc2VEdXJhdGlvbi5zaWJsaW5nKTtcbiAgICAgIGVsc2UgaWYgKChjb21wbGV0ZWRXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICBfdHJlZUJhc2VEdXJhdGlvbiA9IGNvbXBsZXRlZFdvcmsuYWN0dWFsRHVyYXRpb247XG4gICAgICAgIF9jaGlsZDIgPSBjb21wbGV0ZWRXb3JrLnNlbGZCYXNlRHVyYXRpb247XG4gICAgICAgIGZvciAodmFyIGNoaWxkID0gY29tcGxldGVkV29yay5jaGlsZDsgbnVsbCAhPT0gY2hpbGQ7IClcbiAgICAgICAgICAobmV3Q2hpbGRMYW5lcyB8PSBjaGlsZC5sYW5lcyB8IGNoaWxkLmNoaWxkTGFuZXMpLFxuICAgICAgICAgICAgKHN1YnRyZWVGbGFncyB8PSBjaGlsZC5zdWJ0cmVlRmxhZ3MpLFxuICAgICAgICAgICAgKHN1YnRyZWVGbGFncyB8PSBjaGlsZC5mbGFncyksXG4gICAgICAgICAgICAoX3RyZWVCYXNlRHVyYXRpb24gKz0gY2hpbGQuYWN0dWFsRHVyYXRpb24pLFxuICAgICAgICAgICAgKF9jaGlsZDIgKz0gY2hpbGQudHJlZUJhc2VEdXJhdGlvbiksXG4gICAgICAgICAgICAoY2hpbGQgPSBjaGlsZC5zaWJsaW5nKTtcbiAgICAgICAgY29tcGxldGVkV29yay5hY3R1YWxEdXJhdGlvbiA9IF90cmVlQmFzZUR1cmF0aW9uO1xuICAgICAgICBjb21wbGV0ZWRXb3JrLnRyZWVCYXNlRHVyYXRpb24gPSBfY2hpbGQyO1xuICAgICAgfSBlbHNlXG4gICAgICAgIGZvciAoXG4gICAgICAgICAgX3RyZWVCYXNlRHVyYXRpb24gPSBjb21wbGV0ZWRXb3JrLmNoaWxkO1xuICAgICAgICAgIG51bGwgIT09IF90cmVlQmFzZUR1cmF0aW9uO1xuXG4gICAgICAgIClcbiAgICAgICAgICAobmV3Q2hpbGRMYW5lcyB8PVxuICAgICAgICAgICAgX3RyZWVCYXNlRHVyYXRpb24ubGFuZXMgfCBfdHJlZUJhc2VEdXJhdGlvbi5jaGlsZExhbmVzKSxcbiAgICAgICAgICAgIChzdWJ0cmVlRmxhZ3MgfD0gX3RyZWVCYXNlRHVyYXRpb24uc3VidHJlZUZsYWdzKSxcbiAgICAgICAgICAgIChzdWJ0cmVlRmxhZ3MgfD0gX3RyZWVCYXNlRHVyYXRpb24uZmxhZ3MpLFxuICAgICAgICAgICAgKF90cmVlQmFzZUR1cmF0aW9uLnJldHVybiA9IGNvbXBsZXRlZFdvcmspLFxuICAgICAgICAgICAgKF90cmVlQmFzZUR1cmF0aW9uID0gX3RyZWVCYXNlRHVyYXRpb24uc2libGluZyk7XG4gICAgICBjb21wbGV0ZWRXb3JrLnN1YnRyZWVGbGFncyB8PSBzdWJ0cmVlRmxhZ3M7XG4gICAgICBjb21wbGV0ZWRXb3JrLmNoaWxkTGFuZXMgPSBuZXdDaGlsZExhbmVzO1xuICAgICAgcmV0dXJuIGRpZEJhaWxvdXQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbXBsZXRlV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgICAgIHZhciBuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgICAgIHBvcFRyZWVDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICAgIGNhc2UgMTY6XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICBjYXNlIDg6XG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICByZXR1cm4gYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyksIG51bGw7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICByZXR1cm4gYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyksIG51bGw7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICByZW5kZXJMYW5lcyA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICAgICAgICBuZXdQcm9wcyA9IG51bGw7XG4gICAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJiAobmV3UHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGUuY2FjaGUpO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUuY2FjaGUgIT09IG5ld1Byb3BzICYmXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMjA0OCk7XG4gICAgICAgICAgcG9wUHJvdmlkZXIoQ2FjaGVDb250ZXh0LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgcG9wSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgcmVuZGVyTGFuZXMucGVuZGluZ0NvbnRleHQgJiZcbiAgICAgICAgICAgICgocmVuZGVyTGFuZXMuY29udGV4dCA9IHJlbmRlckxhbmVzLnBlbmRpbmdDb250ZXh0KSxcbiAgICAgICAgICAgIChyZW5kZXJMYW5lcy5wZW5kaW5nQ29udGV4dCA9IG51bGwpKTtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gY3VycmVudCB8fCBudWxsID09PSBjdXJyZW50LmNoaWxkKVxuICAgICAgICAgICAgcG9wSHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpXG4gICAgICAgICAgICAgID8gKGVtaXRQZW5kaW5nSHlkcmF0aW9uV2FybmluZ3MoKSwgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcykpXG4gICAgICAgICAgICAgIDogbnVsbCA9PT0gY3VycmVudCB8fFxuICAgICAgICAgICAgICAgIChjdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkICYmXG4gICAgICAgICAgICAgICAgICAwID09PSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAyNTYpKSB8fFxuICAgICAgICAgICAgICAgICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTAyNCksXG4gICAgICAgICAgICAgICAgdXBncmFkZUh5ZHJhdGlvbkVycm9yc1RvUmVjb3ZlcmFibGUoKSk7XG4gICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgdmFyIHR5cGUgPSB3b3JrSW5Qcm9ncmVzcy50eXBlLFxuICAgICAgICAgICAgbmV4dFJlc291cmNlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICBudWxsID09PSBjdXJyZW50XG4gICAgICAgICAgICA/IChtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgbnVsbCAhPT0gbmV4dFJlc291cmNlXG4gICAgICAgICAgICAgICAgPyAoYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgICBwcmVsb2FkUmVzb3VyY2VBbmRTdXNwZW5kSWZOZWVkZWQoXG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgICBuZXh0UmVzb3VyY2VcbiAgICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgOiAoYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgICBwcmVsb2FkSW5zdGFuY2VBbmRTdXNwZW5kSWZOZWVkZWQoXG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICBuZXdQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICAgICkpKVxuICAgICAgICAgICAgOiBuZXh0UmVzb3VyY2VcbiAgICAgICAgICAgICAgPyBuZXh0UmVzb3VyY2UgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZVxuICAgICAgICAgICAgICAgID8gKG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgICBwcmVsb2FkUmVzb3VyY2VBbmRTdXNwZW5kSWZOZWVkZWQoXG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgICBuZXh0UmVzb3VyY2VcbiAgICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgOiAoYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gLTE2Nzc3MjE3KSlcbiAgICAgICAgICAgICAgOiAoKGN1cnJlbnQgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHMpLFxuICAgICAgICAgICAgICAgIGN1cnJlbnQgIT09IG5ld1Byb3BzICYmIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgIHByZWxvYWRJbnN0YW5jZUFuZFN1c3BlbmRJZk5lZWRlZChcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICBuZXdQcm9wcyxcbiAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgcG9wSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHJlbmRlckxhbmVzID0gcmVxdWlyZWRDb250ZXh0KHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLmN1cnJlbnQpO1xuICAgICAgICAgIHR5cGUgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICAgIGlmIChudWxsICE9PSBjdXJyZW50ICYmIG51bGwgIT0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlKVxuICAgICAgICAgICAgY3VycmVudC5tZW1vaXplZFByb3BzICE9PSBuZXdQcm9wcyAmJiBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICghbmV3UHJvcHMpIHtcbiAgICAgICAgICAgICAgaWYgKG51bGwgPT09IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSlcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICAgIFwiV2UgbXVzdCBoYXZlIG5ldyBwcm9wcyBmb3IgbmV3IG1vdW50cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJlbnQgPSBnZXRIb3N0Q29udGV4dCgpO1xuICAgICAgICAgICAgcG9wSHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpXG4gICAgICAgICAgICAgID8gcHJlcGFyZVRvSHlkcmF0ZUhvc3RJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgY3VycmVudClcbiAgICAgICAgICAgICAgOiAoKGN1cnJlbnQgPSByZXNvbHZlU2luZ2xldG9uSW5zdGFuY2UoXG4gICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgbmV3UHJvcHMsXG4gICAgICAgICAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAhMFxuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBjdXJyZW50KSxcbiAgICAgICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcG9wSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHR5cGUgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICAgIGlmIChudWxsICE9PSBjdXJyZW50ICYmIG51bGwgIT0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlKVxuICAgICAgICAgICAgY3VycmVudC5tZW1vaXplZFByb3BzICE9PSBuZXdQcm9wcyAmJiBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICghbmV3UHJvcHMpIHtcbiAgICAgICAgICAgICAgaWYgKG51bGwgPT09IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSlcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICAgIFwiV2UgbXVzdCBoYXZlIG5ldyBwcm9wcyBmb3IgbmV3IG1vdW50cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBfY3VycmVudEhvc3RDb250ZXh0ID0gZ2V0SG9zdENvbnRleHQoKTtcbiAgICAgICAgICAgIGlmIChwb3BIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcykpXG4gICAgICAgICAgICAgIHByZXBhcmVUb0h5ZHJhdGVIb3N0SW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIF9jdXJyZW50SG9zdENvbnRleHQpO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIG5leHRSZXNvdXJjZSA9IHJlcXVpcmVkQ29udGV4dChyb290SW5zdGFuY2VTdGFja0N1cnNvci5jdXJyZW50KTtcbiAgICAgICAgICAgICAgdmFsaWRhdGVET01OZXN0aW5nKHR5cGUsIF9jdXJyZW50SG9zdENvbnRleHQuYW5jZXN0b3JJbmZvKTtcbiAgICAgICAgICAgICAgX2N1cnJlbnRIb3N0Q29udGV4dCA9IF9jdXJyZW50SG9zdENvbnRleHQuY29udGV4dDtcbiAgICAgICAgICAgICAgbmV4dFJlc291cmNlID0gZ2V0T3duZXJEb2N1bWVudEZyb21Sb290Q29udGFpbmVyKG5leHRSZXNvdXJjZSk7XG4gICAgICAgICAgICAgIHN3aXRjaCAoX2N1cnJlbnRIb3N0Q29udGV4dCkge1xuICAgICAgICAgICAgICAgIGNhc2UgSG9zdENvbnRleHROYW1lc3BhY2VTdmc6XG4gICAgICAgICAgICAgICAgICBuZXh0UmVzb3VyY2UgPSBuZXh0UmVzb3VyY2UuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgICAgICAgICAgICAgICBTVkdfTkFNRVNQQUNFLFxuICAgICAgICAgICAgICAgICAgICB0eXBlXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBIb3N0Q29udGV4dE5hbWVzcGFjZU1hdGg6XG4gICAgICAgICAgICAgICAgICBuZXh0UmVzb3VyY2UgPSBuZXh0UmVzb3VyY2UuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgICAgICAgICAgICAgICBNQVRIX05BTUVTUEFDRSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN2Z1wiOlxuICAgICAgICAgICAgICAgICAgICAgIG5leHRSZXNvdXJjZSA9IG5leHRSZXNvdXJjZS5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgICAgICAgICAgICAgICAgICBTVkdfTkFNRVNQQUNFLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJtYXRoXCI6XG4gICAgICAgICAgICAgICAgICAgICAgbmV4dFJlc291cmNlID0gbmV4dFJlc291cmNlLmNyZWF0ZUVsZW1lbnROUyhcbiAgICAgICAgICAgICAgICAgICAgICAgIE1BVEhfTkFNRVNQQUNFLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzY3JpcHRcIjpcbiAgICAgICAgICAgICAgICAgICAgICBuZXh0UmVzb3VyY2UgPSBuZXh0UmVzb3VyY2UuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICBuZXh0UmVzb3VyY2UuaW5uZXJIVE1MID0gXCI8c2NyaXB0PlxceDNjL3NjcmlwdD5cIjtcbiAgICAgICAgICAgICAgICAgICAgICBuZXh0UmVzb3VyY2UgPSBuZXh0UmVzb3VyY2UucmVtb3ZlQ2hpbGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0UmVzb3VyY2UuZmlyc3RDaGlsZFxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzZWxlY3RcIjpcbiAgICAgICAgICAgICAgICAgICAgICBuZXh0UmVzb3VyY2UgPVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG5ld1Byb3BzLmlzXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gbmV4dFJlc291cmNlLmNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXM6IG5ld1Byb3BzLmlzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBuZXh0UmVzb3VyY2UuY3JlYXRlRWxlbWVudChcInNlbGVjdFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICBuZXdQcm9wcy5tdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAobmV4dFJlc291cmNlLm11bHRpcGxlID0gITApXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG5ld1Byb3BzLnNpemUgJiYgKG5leHRSZXNvdXJjZS5zaXplID0gbmV3UHJvcHMuc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgKG5leHRSZXNvdXJjZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgbmV3UHJvcHMuaXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXh0UmVzb3VyY2UuY3JlYXRlRWxlbWVudCh0eXBlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpczogbmV3UHJvcHMuaXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IG5leHRSZXNvdXJjZS5jcmVhdGVFbGVtZW50KHR5cGUpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC0xID09PSB0eXBlLmluZGV4T2YoXCItXCIpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlICE9PSB0eXBlLnRvTG93ZXJDYXNlKCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI8JXMgLz4gaXMgdXNpbmcgaW5jb3JyZWN0IGNhc2luZy4gVXNlIFBhc2NhbENhc2UgZm9yIFJlYWN0IGNvbXBvbmVudHMsIG9yIGxvd2VyY2FzZSBmb3IgSFRNTCBlbGVtZW50cy5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIltvYmplY3QgSFRNTFVua25vd25FbGVtZW50XVwiICE9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuZXh0UmVzb3VyY2UpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3duUHJvcGVydHkuY2FsbCh3YXJuZWRVbmtub3duVGFncywgdHlwZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHdhcm5lZFVua25vd25UYWdzW3R5cGVdID0gITApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRoZSB0YWcgPCVzPiBpcyB1bnJlY29nbml6ZWQgaW4gdGhpcyBicm93c2VyLiBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgUmVhY3QgY29tcG9uZW50LCBzdGFydCBpdHMgbmFtZSB3aXRoIGFuIHVwcGVyY2FzZSBsZXR0ZXIuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG5leHRSZXNvdXJjZVtpbnRlcm5hbEluc3RhbmNlS2V5XSA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgICAgICAgICBuZXh0UmVzb3VyY2VbaW50ZXJuYWxQcm9wc0tleV0gPSBuZXdQcm9wcztcbiAgICAgICAgICAgICAgYTogZm9yIChcbiAgICAgICAgICAgICAgICBfY3VycmVudEhvc3RDb250ZXh0ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gX2N1cnJlbnRIb3N0Q29udGV4dDtcblxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICA1ID09PSBfY3VycmVudEhvc3RDb250ZXh0LnRhZyB8fFxuICAgICAgICAgICAgICAgICAgNiA9PT0gX2N1cnJlbnRIb3N0Q29udGV4dC50YWdcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICBuZXh0UmVzb3VyY2UuYXBwZW5kQ2hpbGQoX2N1cnJlbnRIb3N0Q29udGV4dC5zdGF0ZU5vZGUpO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgNCAhPT0gX2N1cnJlbnRIb3N0Q29udGV4dC50YWcgJiZcbiAgICAgICAgICAgICAgICAgIDI3ICE9PSBfY3VycmVudEhvc3RDb250ZXh0LnRhZyAmJlxuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gX2N1cnJlbnRIb3N0Q29udGV4dC5jaGlsZFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgX2N1cnJlbnRIb3N0Q29udGV4dC5jaGlsZC5yZXR1cm4gPSBfY3VycmVudEhvc3RDb250ZXh0O1xuICAgICAgICAgICAgICAgICAgX2N1cnJlbnRIb3N0Q29udGV4dCA9IF9jdXJyZW50SG9zdENvbnRleHQuY2hpbGQ7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF9jdXJyZW50SG9zdENvbnRleHQgPT09IHdvcmtJblByb2dyZXNzKSBicmVhayBhO1xuICAgICAgICAgICAgICAgIGZvciAoOyBudWxsID09PSBfY3VycmVudEhvc3RDb250ZXh0LnNpYmxpbmc7ICkge1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBudWxsID09PSBfY3VycmVudEhvc3RDb250ZXh0LnJldHVybiB8fFxuICAgICAgICAgICAgICAgICAgICBfY3VycmVudEhvc3RDb250ZXh0LnJldHVybiA9PT0gd29ya0luUHJvZ3Jlc3NcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgIF9jdXJyZW50SG9zdENvbnRleHQgPSBfY3VycmVudEhvc3RDb250ZXh0LnJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgX2N1cnJlbnRIb3N0Q29udGV4dC5zaWJsaW5nLnJldHVybiA9IF9jdXJyZW50SG9zdENvbnRleHQucmV0dXJuO1xuICAgICAgICAgICAgICAgIF9jdXJyZW50SG9zdENvbnRleHQgPSBfY3VycmVudEhvc3RDb250ZXh0LnNpYmxpbmc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gbmV4dFJlc291cmNlO1xuICAgICAgICAgICAgICBhOiBzd2l0Y2ggKFxuICAgICAgICAgICAgICAgIChzZXRJbml0aWFsUHJvcGVydGllcyhuZXh0UmVzb3VyY2UsIHR5cGUsIG5ld1Byb3BzKSwgdHlwZSlcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcImJ1dHRvblwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJpbnB1dFwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJzZWxlY3RcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwidGV4dGFyZWFcIjpcbiAgICAgICAgICAgICAgICAgIG5ld1Byb3BzID0gISFuZXdQcm9wcy5hdXRvRm9jdXM7XG4gICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJpbWdcIjpcbiAgICAgICAgICAgICAgICAgIG5ld1Byb3BzID0gITA7XG4gICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBuZXdQcm9wcyA9ICExO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG5ld1Byb3BzICYmIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBwcmVsb2FkSW5zdGFuY2VBbmRTdXNwZW5kSWZOZWVkZWQoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUsXG4gICAgICAgICAgICBudWxsID09PSBjdXJyZW50ID8gbnVsbCA6IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyxcbiAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIGlmIChjdXJyZW50ICYmIG51bGwgIT0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlKVxuICAgICAgICAgICAgY3VycmVudC5tZW1vaXplZFByb3BzICE9PSBuZXdQcm9wcyAmJiBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgXCJzdHJpbmdcIiAhPT0gdHlwZW9mIG5ld1Byb3BzICYmXG4gICAgICAgICAgICAgIG51bGwgPT09IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIldlIG11c3QgaGF2ZSBuZXcgcHJvcHMgZm9yIG5ldyBtb3VudHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGN1cnJlbnQgPSByZXF1aXJlZENvbnRleHQocm9vdEluc3RhbmNlU3RhY2tDdXJzb3IuY3VycmVudCk7XG4gICAgICAgICAgICByZW5kZXJMYW5lcyA9IGdldEhvc3RDb250ZXh0KCk7XG4gICAgICAgICAgICBpZiAocG9wSHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpKSB7XG4gICAgICAgICAgICAgIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICAgICAgdHlwZSA9ICFkaWRTdXNwZW5kT3JFcnJvckRFVjtcbiAgICAgICAgICAgICAgbmV3UHJvcHMgPSBudWxsO1xuICAgICAgICAgICAgICBuZXh0UmVzb3VyY2UgPSBoeWRyYXRpb25QYXJlbnRGaWJlcjtcbiAgICAgICAgICAgICAgaWYgKG51bGwgIT09IG5leHRSZXNvdXJjZSlcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKG5leHRSZXNvdXJjZS50YWcpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgdHlwZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICgodHlwZSA9IGRpZmZIeWRyYXRlZFRleHRGb3JEZXZXYXJuaW5ncyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Byb3BzXG4gICAgICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gdHlwZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKGJ1aWxkSHlkcmF0aW9uRGlmZk5vZGUod29ya0luUHJvZ3Jlc3MsIDApLnNlcnZlclByb3BzID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgIChuZXdQcm9wcyA9IG5leHRSZXNvdXJjZS5tZW1vaXplZFByb3BzKSxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoKHR5cGUgPSBkaWZmSHlkcmF0ZWRUZXh0Rm9yRGV2V2FybmluZ3MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQcm9wc1xuICAgICAgICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgICAgICAgICBudWxsICE9PSB0eXBlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChidWlsZEh5ZHJhdGlvbkRpZmZOb2RlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKS5zZXJ2ZXJQcm9wcyA9IHR5cGUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGN1cnJlbnRbaW50ZXJuYWxJbnN0YW5jZUtleV0gPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgICAgICAgY3VycmVudCA9XG4gICAgICAgICAgICAgICAgY3VycmVudC5ub2RlVmFsdWUgPT09IHJlbmRlckxhbmVzIHx8XG4gICAgICAgICAgICAgICAgKG51bGwgIT09IG5ld1Byb3BzICYmXG4gICAgICAgICAgICAgICAgICAhMCA9PT0gbmV3UHJvcHMuc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nKSB8fFxuICAgICAgICAgICAgICAgIGNoZWNrRm9yVW5tYXRjaGVkVGV4dChjdXJyZW50Lm5vZGVWYWx1ZSwgcmVuZGVyTGFuZXMpXG4gICAgICAgICAgICAgICAgICA/ICEwXG4gICAgICAgICAgICAgICAgICA6ICExO1xuICAgICAgICAgICAgICBjdXJyZW50IHx8IHRocm93T25IeWRyYXRpb25NaXNtYXRjaCh3b3JrSW5Qcm9ncmVzcywgITApO1xuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICh0eXBlID0gcmVuZGVyTGFuZXMuYW5jZXN0b3JJbmZvLmN1cnJlbnQpLFxuICAgICAgICAgICAgICAgIG51bGwgIT0gdHlwZSAmJlxuICAgICAgICAgICAgICAgICAgdmFsaWRhdGVUZXh0TmVzdGluZyhcbiAgICAgICAgICAgICAgICAgICAgbmV3UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIHR5cGUudGFnLFxuICAgICAgICAgICAgICAgICAgICByZW5kZXJMYW5lcy5hbmNlc3RvckluZm8uaW1wbGljaXRSb290U2NvcGVcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKGN1cnJlbnQgPVxuICAgICAgICAgICAgICAgICAgZ2V0T3duZXJEb2N1bWVudEZyb21Sb290Q29udGFpbmVyKGN1cnJlbnQpLmNyZWF0ZVRleHROb2RlKFxuICAgICAgICAgICAgICAgICAgICBuZXdQcm9wc1xuICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgKGN1cnJlbnRbaW50ZXJuYWxJbnN0YW5jZUtleV0gPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGN1cnJlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICByZW5kZXJMYW5lcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnQgfHwgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgICAgICBuZXdQcm9wcyA9IHBvcEh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIGlmIChudWxsICE9PSByZW5kZXJMYW5lcykge1xuICAgICAgICAgICAgICBpZiAobnVsbCA9PT0gY3VycmVudCkge1xuICAgICAgICAgICAgICAgIGlmICghbmV3UHJvcHMpXG4gICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgXCJBIGRlaHlkcmF0ZWQgc3VzcGVuc2UgY29tcG9uZW50IHdhcyBjb21wbGV0ZWQgd2l0aG91dCBhIGh5ZHJhdGVkIG5vZGUuIFRoaXMgaXMgcHJvYmFibHkgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgICAgICAgY3VycmVudCA9IG51bGwgIT09IGN1cnJlbnQgPyBjdXJyZW50LmRlaHlkcmF0ZWQgOiBudWxsO1xuICAgICAgICAgICAgICAgIGlmICghY3VycmVudClcbiAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBcIkV4cGVjdGVkIHRvIGhhdmUgYSBoeWRyYXRlZCBhY3Rpdml0eSBpbnN0YW5jZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50W2ludGVybmFsSW5zdGFuY2VLZXldID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSAmJlxuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gcmVuZGVyTGFuZXMgJiZcbiAgICAgICAgICAgICAgICAgICgoY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkKSxcbiAgICAgICAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gLT1cbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRyZWVCYXNlRHVyYXRpb24pKTtcbiAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgZW1pdFBlbmRpbmdIeWRyYXRpb25XYXJuaW5ncygpLFxuICAgICAgICAgICAgICAgICAgcmVzZXRIeWRyYXRpb25TdGF0ZSgpLFxuICAgICAgICAgICAgICAgICAgMCA9PT0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgMTI4KSAmJlxuICAgICAgICAgICAgICAgICAgICAocmVuZGVyTGFuZXMgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbCksXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNCksXG4gICAgICAgICAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUgJiZcbiAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gcmVuZGVyTGFuZXMgJiZcbiAgICAgICAgICAgICAgICAgICAgKChjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQpLFxuICAgICAgICAgICAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gLT1cbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudHJlZUJhc2VEdXJhdGlvbikpO1xuICAgICAgICAgICAgICBjdXJyZW50ID0gITE7XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgKHJlbmRlckxhbmVzID0gdXBncmFkZUh5ZHJhdGlvbkVycm9yc1RvUmVjb3ZlcmFibGUoKSksXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgICAgICAgICAoY3VycmVudC5tZW1vaXplZFN0YXRlLmh5ZHJhdGlvbkVycm9ycyA9IHJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgICAgICAoY3VycmVudCA9ICEwKTtcbiAgICAgICAgICAgIGlmICghY3VycmVudCkge1xuICAgICAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAyNTYpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBvcFN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyksIHdvcmtJblByb2dyZXNzO1xuICAgICAgICAgICAgICBwb3BTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgwICE9PSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAxMjgpKVxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIkNsaWVudCByZW5kZXJpbmcgYW4gQWN0aXZpdHkgc3VzcGVuZGVkIGl0IGFnYWluLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBudWxsID09PSBjdXJyZW50IHx8XG4gICAgICAgICAgICAobnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5kZWh5ZHJhdGVkKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdHlwZSA9IG5ld1Byb3BzO1xuICAgICAgICAgICAgbmV4dFJlc291cmNlID0gcG9wSHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgaWYgKG51bGwgIT09IHR5cGUgJiYgbnVsbCAhPT0gdHlwZS5kZWh5ZHJhdGVkKSB7XG4gICAgICAgICAgICAgIGlmIChudWxsID09PSBjdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFuZXh0UmVzb3VyY2UpXG4gICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgXCJBIGRlaHlkcmF0ZWQgc3VzcGVuc2UgY29tcG9uZW50IHdhcyBjb21wbGV0ZWQgd2l0aG91dCBhIGh5ZHJhdGVkIG5vZGUuIFRoaXMgaXMgcHJvYmFibHkgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgbmV4dFJlc291cmNlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICAgICAgICBuZXh0UmVzb3VyY2UgPVxuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gbmV4dFJlc291cmNlID8gbmV4dFJlc291cmNlLmRlaHlkcmF0ZWQgOiBudWxsO1xuICAgICAgICAgICAgICAgIGlmICghbmV4dFJlc291cmNlKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiRXhwZWN0ZWQgdG8gaGF2ZSBhIGh5ZHJhdGVkIHN1c3BlbnNlIGluc3RhbmNlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIG5leHRSZXNvdXJjZVtpbnRlcm5hbEluc3RhbmNlS2V5XSA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUgJiZcbiAgICAgICAgICAgICAgICAgIG51bGwgIT09IHR5cGUgJiZcbiAgICAgICAgICAgICAgICAgICgodHlwZSA9IHdvcmtJblByb2dyZXNzLmNoaWxkKSxcbiAgICAgICAgICAgICAgICAgIG51bGwgIT09IHR5cGUgJiZcbiAgICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gLT0gdHlwZS50cmVlQmFzZUR1cmF0aW9uKSk7XG4gICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIGVtaXRQZW5kaW5nSHlkcmF0aW9uV2FybmluZ3MoKSxcbiAgICAgICAgICAgICAgICAgIHJlc2V0SHlkcmF0aW9uU3RhdGUoKSxcbiAgICAgICAgICAgICAgICAgIDAgPT09ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDEyOCkgJiZcbiAgICAgICAgICAgICAgICAgICAgKHR5cGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbCksXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNCksXG4gICAgICAgICAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUgJiZcbiAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gdHlwZSAmJlxuICAgICAgICAgICAgICAgICAgICAoKHR5cGUgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZCksXG4gICAgICAgICAgICAgICAgICAgIG51bGwgIT09IHR5cGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiAtPVxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS50cmVlQmFzZUR1cmF0aW9uKSk7XG4gICAgICAgICAgICAgIHR5cGUgPSAhMTtcbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAodHlwZSA9IHVwZ3JhZGVIeWRyYXRpb25FcnJvcnNUb1JlY292ZXJhYmxlKCkpLFxuICAgICAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgKGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5oeWRyYXRpb25FcnJvcnMgPSB0eXBlKSxcbiAgICAgICAgICAgICAgICAodHlwZSA9ICEwKTtcbiAgICAgICAgICAgIGlmICghdHlwZSkge1xuICAgICAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAyNTYpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBvcFN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyksIHdvcmtJblByb2dyZXNzO1xuICAgICAgICAgICAgICBwb3BTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcG9wU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBpZiAoMCAhPT0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgMTI4KSlcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IHJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSAmJlxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQWN0dWFsRHVyYXRpb24od29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICByZW5kZXJMYW5lcyA9IG51bGwgIT09IG5ld1Byb3BzO1xuICAgICAgICAgIGN1cnJlbnQgPSBudWxsICE9PSBjdXJyZW50ICYmIG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICByZW5kZXJMYW5lcyAmJlxuICAgICAgICAgICAgKChuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLmNoaWxkKSxcbiAgICAgICAgICAgICh0eXBlID0gbnVsbCksXG4gICAgICAgICAgICBudWxsICE9PSBuZXdQcm9wcy5hbHRlcm5hdGUgJiZcbiAgICAgICAgICAgICAgbnVsbCAhPT0gbmV3UHJvcHMuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICAgICAgbnVsbCAhPT0gbmV3UHJvcHMuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sICYmXG4gICAgICAgICAgICAgICh0eXBlID0gbmV3UHJvcHMuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpLFxuICAgICAgICAgICAgKG5leHRSZXNvdXJjZSA9IG51bGwpLFxuICAgICAgICAgICAgbnVsbCAhPT0gbmV3UHJvcHMubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgICAgICBudWxsICE9PSBuZXdQcm9wcy5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCAmJlxuICAgICAgICAgICAgICAobmV4dFJlc291cmNlID0gbmV3UHJvcHMubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wucG9vbCksXG4gICAgICAgICAgICBuZXh0UmVzb3VyY2UgIT09IHR5cGUgJiYgKG5ld1Byb3BzLmZsYWdzIHw9IDIwNDgpKTtcbiAgICAgICAgICByZW5kZXJMYW5lcyAhPT0gY3VycmVudCAmJlxuICAgICAgICAgICAgcmVuZGVyTGFuZXMgJiZcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZC5mbGFncyB8PSA4MTkyKTtcbiAgICAgICAgICBzY2hlZHVsZVJldHJ5RWZmZWN0KHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSk7XG4gICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSAmJlxuICAgICAgICAgICAgcmVuZGVyTGFuZXMgJiZcbiAgICAgICAgICAgICgoY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkKSxcbiAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gLT0gY3VycmVudC50cmVlQmFzZUR1cmF0aW9uKSk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgcG9wSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICBudWxsID09PSBjdXJyZW50ICYmXG4gICAgICAgICAgICAgIGxpc3RlblRvQWxsU3VwcG9ydGVkRXZlbnRzKFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZS5jb250YWluZXJJbmZvXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIG51bGxcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBwb3BQcm92aWRlcih3b3JrSW5Qcm9ncmVzcy50eXBlLCB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIG51bGxcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgIHBvcChzdXNwZW5zZVN0YWNrQ3Vyc29yLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgbmV3UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIGlmIChudWxsID09PSBuZXdQcm9wcykgcmV0dXJuIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpLCBudWxsO1xuICAgICAgICAgIHR5cGUgPSAwICE9PSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAxMjgpO1xuICAgICAgICAgIG5leHRSZXNvdXJjZSA9IG5ld1Byb3BzLnJlbmRlcmluZztcbiAgICAgICAgICBpZiAobnVsbCA9PT0gbmV4dFJlc291cmNlKVxuICAgICAgICAgICAgaWYgKHR5cGUpIGN1dE9mZlRhaWxJZk5lZWRlZChuZXdQcm9wcywgITEpO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzICE9PSBSb290SW5Qcm9ncmVzcyB8fFxuICAgICAgICAgICAgICAgIChudWxsICE9PSBjdXJyZW50ICYmIDAgIT09IChjdXJyZW50LmZsYWdzICYgMTI4KSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGZvciAoY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkOyBudWxsICE9PSBjdXJyZW50OyApIHtcbiAgICAgICAgICAgICAgICAgIG5leHRSZXNvdXJjZSA9IGZpbmRGaXJzdFN1c3BlbmRlZChjdXJyZW50KTtcbiAgICAgICAgICAgICAgICAgIGlmIChudWxsICE9PSBuZXh0UmVzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTI4O1xuICAgICAgICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQobmV3UHJvcHMsICExKTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IG5leHRSZXNvdXJjZS51cGRhdGVRdWV1ZTtcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZVJldHJ5RWZmZWN0KHdvcmtJblByb2dyZXNzLCBjdXJyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3VidHJlZUZsYWdzID0gMDtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IHJlbmRlckxhbmVzO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gcmVuZGVyTGFuZXM7XG5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIHJlc2V0V29ya0luUHJvZ3Jlc3MocmVuZGVyTGFuZXMsIGN1cnJlbnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKHJlbmRlckxhbmVzID0gcmVuZGVyTGFuZXMuc2libGluZyk7XG4gICAgICAgICAgICAgICAgICAgIHB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgc3VzcGVuc2VTdGFja0N1cnNvcixcbiAgICAgICAgICAgICAgICAgICAgICAoc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50ICZcbiAgICAgICAgICAgICAgICAgICAgICAgIFN1YnRyZWVTdXNwZW5zZUNvbnRleHRNYXNrKSB8XG4gICAgICAgICAgICAgICAgICAgICAgICBGb3JjZVN1c3BlbnNlRmFsbGJhY2ssXG4gICAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaXNIeWRyYXRpbmcgJiZcbiAgICAgICAgICAgICAgICAgICAgICBwdXNoVHJlZUZvcmsod29ya0luUHJvZ3Jlc3MsIG5ld1Byb3BzLnRyZWVGb3JrQ291bnQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5zaWJsaW5nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbnVsbCAhPT0gbmV3UHJvcHMudGFpbCAmJlxuICAgICAgICAgICAgICAgIG5vdyQxKCkgPiB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJUYXJnZXRUaW1lICYmXG4gICAgICAgICAgICAgICAgKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMjgpLFxuICAgICAgICAgICAgICAgICh0eXBlID0gITApLFxuICAgICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChuZXdQcm9wcywgITEpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IDQxOTQzMDQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdHlwZSlcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICgoY3VycmVudCA9IGZpbmRGaXJzdFN1c3BlbmRlZChuZXh0UmVzb3VyY2UpKSwgbnVsbCAhPT0gY3VycmVudClcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMjgpLFxuICAgICAgICAgICAgICAgICAgKHR5cGUgPSAhMCksXG4gICAgICAgICAgICAgICAgICAoY3VycmVudCA9IGN1cnJlbnQudXBkYXRlUXVldWUpLFxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY3VycmVudCksXG4gICAgICAgICAgICAgICAgICBzY2hlZHVsZVJldHJ5RWZmZWN0KHdvcmtJblByb2dyZXNzLCBjdXJyZW50KSxcbiAgICAgICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChuZXdQcm9wcywgITApLFxuICAgICAgICAgICAgICAgICAgbnVsbCA9PT0gbmV3UHJvcHMudGFpbCAmJlxuICAgICAgICAgICAgICAgICAgICBcImhpZGRlblwiID09PSBuZXdQcm9wcy50YWlsTW9kZSAmJlxuICAgICAgICAgICAgICAgICAgICAhbmV4dFJlc291cmNlLmFsdGVybmF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICAhaXNIeWRyYXRpbmcpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpLCBudWxsO1xuICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICAyICogbm93JDEoKSAtIG5ld1Byb3BzLnJlbmRlcmluZ1N0YXJ0VGltZSA+XG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJUYXJnZXRUaW1lICYmXG4gICAgICAgICAgICAgICAgICA1MzY4NzA5MTIgIT09IHJlbmRlckxhbmVzICYmXG4gICAgICAgICAgICAgICAgICAoKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEyOCksXG4gICAgICAgICAgICAgICAgICAodHlwZSA9ICEwKSxcbiAgICAgICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChuZXdQcm9wcywgITEpLFxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmxhbmVzID0gNDE5NDMwNCkpO1xuICAgICAgICAgICAgbmV3UHJvcHMuaXNCYWNrd2FyZHNcbiAgICAgICAgICAgICAgPyAoKG5leHRSZXNvdXJjZS5zaWJsaW5nID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG5leHRSZXNvdXJjZSkpXG4gICAgICAgICAgICAgIDogKChjdXJyZW50ID0gbmV3UHJvcHMubGFzdCksXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudFxuICAgICAgICAgICAgICAgICAgPyAoY3VycmVudC5zaWJsaW5nID0gbmV4dFJlc291cmNlKVxuICAgICAgICAgICAgICAgICAgOiAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBuZXh0UmVzb3VyY2UpLFxuICAgICAgICAgICAgICAgIChuZXdQcm9wcy5sYXN0ID0gbmV4dFJlc291cmNlKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChudWxsICE9PSBuZXdQcm9wcy50YWlsKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKGN1cnJlbnQgPSBuZXdQcm9wcy50YWlsKSxcbiAgICAgICAgICAgICAgKG5ld1Byb3BzLnJlbmRlcmluZyA9IGN1cnJlbnQpLFxuICAgICAgICAgICAgICAobmV3UHJvcHMudGFpbCA9IGN1cnJlbnQuc2libGluZyksXG4gICAgICAgICAgICAgIChuZXdQcm9wcy5yZW5kZXJpbmdTdGFydFRpbWUgPSBub3ckMSgpKSxcbiAgICAgICAgICAgICAgKGN1cnJlbnQuc2libGluZyA9IG51bGwpLFxuICAgICAgICAgICAgICAocmVuZGVyTGFuZXMgPSBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQpLFxuICAgICAgICAgICAgICAocmVuZGVyTGFuZXMgPSB0eXBlXG4gICAgICAgICAgICAgICAgPyAocmVuZGVyTGFuZXMgJiBTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzaykgfFxuICAgICAgICAgICAgICAgICAgRm9yY2VTdXNwZW5zZUZhbGxiYWNrXG4gICAgICAgICAgICAgICAgOiByZW5kZXJMYW5lcyAmIFN1YnRyZWVTdXNwZW5zZUNvbnRleHRNYXNrKSxcbiAgICAgICAgICAgICAgcHVzaChzdXNwZW5zZVN0YWNrQ3Vyc29yLCByZW5kZXJMYW5lcywgd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICBpc0h5ZHJhdGluZyAmJlxuICAgICAgICAgICAgICAgIHB1c2hUcmVlRm9yayh3b3JrSW5Qcm9ncmVzcywgbmV3UHJvcHMudHJlZUZvcmtDb3VudCksXG4gICAgICAgICAgICAgIGN1cnJlbnRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHBvcFN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICBwb3BIaWRkZW5Db250ZXh0KHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIChuZXdQcm9wcyA9IG51bGwgIT09IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUpLFxuICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudFxuICAgICAgICAgICAgICA/IChudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpICE9PSBuZXdQcm9wcyAmJlxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA4MTkyKVxuICAgICAgICAgICAgICA6IG5ld1Byb3BzICYmICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA4MTkyKSxcbiAgICAgICAgICAgIG5ld1Byb3BzXG4gICAgICAgICAgICAgID8gMCAhPT0gKHJlbmRlckxhbmVzICYgNTM2ODcwOTEyKSAmJlxuICAgICAgICAgICAgICAgIDAgPT09ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDEyOCkgJiZcbiAgICAgICAgICAgICAgICAoYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3VidHJlZUZsYWdzICYgNiAmJlxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDgxOTIpKVxuICAgICAgICAgICAgICA6IGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgKHJlbmRlckxhbmVzID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUpLFxuICAgICAgICAgICAgbnVsbCAhPT0gcmVuZGVyTGFuZXMgJiZcbiAgICAgICAgICAgICAgc2NoZWR1bGVSZXRyeUVmZmVjdCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMucmV0cnlRdWV1ZSksXG4gICAgICAgICAgICAocmVuZGVyTGFuZXMgPSBudWxsKSxcbiAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wgJiZcbiAgICAgICAgICAgICAgKHJlbmRlckxhbmVzID0gY3VycmVudC5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKSxcbiAgICAgICAgICAgIChuZXdQcm9wcyA9IG51bGwpLFxuICAgICAgICAgICAgbnVsbCAhPT0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgICAgICBudWxsICE9PSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCAmJlxuICAgICAgICAgICAgICAobmV3UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKSxcbiAgICAgICAgICAgIG5ld1Byb3BzICE9PSByZW5kZXJMYW5lcyAmJiAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMjA0OCksXG4gICAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmIHBvcChyZXN1bWVkQ2FjaGUsIHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIG51bGxcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAocmVuZGVyTGFuZXMgPSBudWxsKSxcbiAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiYgKHJlbmRlckxhbmVzID0gY3VycmVudC5tZW1vaXplZFN0YXRlLmNhY2hlKSxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUuY2FjaGUgIT09IHJlbmRlckxhbmVzICYmXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAyMDQ4KSxcbiAgICAgICAgICAgIHBvcFByb3ZpZGVyKENhY2hlQ29udGV4dCwgd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICBudWxsXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAyNTpcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBcIlVua25vd24gdW5pdCBvZiB3b3JrIHRhZyAoXCIgK1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnRhZyArXG4gICAgICAgICAgXCIpLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1bndpbmRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gICAgICBwb3BUcmVlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuZmxhZ3MpLFxuICAgICAgICAgICAgY3VycmVudCAmIDY1NTM2XG4gICAgICAgICAgICAgID8gKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IChjdXJyZW50ICYgLTY1NTM3KSB8IDEyOCksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSAmJlxuICAgICAgICAgICAgICAgICAgdHJhbnNmZXJBY3R1YWxEdXJhdGlvbih3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MpXG4gICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgcG9wUHJvdmlkZXIoQ2FjaGVDb250ZXh0LCB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICBwb3BIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIChjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuZmxhZ3MpLFxuICAgICAgICAgICAgMCAhPT0gKGN1cnJlbnQgJiA2NTUzNikgJiYgMCA9PT0gKGN1cnJlbnQgJiAxMjgpXG4gICAgICAgICAgICAgID8gKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IChjdXJyZW50ICYgLTY1NTM3KSB8IDEyOCksXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MpXG4gICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMjY6XG4gICAgICAgIGNhc2UgMjc6XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZXR1cm4gcG9wSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpLCBudWxsO1xuICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgIGlmIChudWxsICE9PSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgICAgICBwb3BTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgaWYgKG51bGwgPT09IHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSlcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJUaHJldyBpbiBuZXdseSBtb3VudGVkIGRlaHlkcmF0ZWQgY29tcG9uZW50LiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJlc2V0SHlkcmF0aW9uU3RhdGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmZsYWdzO1xuICAgICAgICAgIHJldHVybiBjdXJyZW50ICYgNjU1MzZcbiAgICAgICAgICAgID8gKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IChjdXJyZW50ICYgLTY1NTM3KSB8IDEyOCksXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUgJiZcbiAgICAgICAgICAgICAgICB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MpXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgcG9wU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICBpZiAobnVsbCAhPT0gY3VycmVudCAmJiBudWxsICE9PSBjdXJyZW50LmRlaHlkcmF0ZWQpIHtcbiAgICAgICAgICAgIGlmIChudWxsID09PSB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUpXG4gICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiVGhyZXcgaW4gbmV3bHkgbW91bnRlZCBkZWh5ZHJhdGVkIGNvbXBvbmVudC4gVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXNldEh5ZHJhdGlvblN0YXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5mbGFncztcbiAgICAgICAgICByZXR1cm4gY3VycmVudCAmIDY1NTM2XG4gICAgICAgICAgICA/ICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSAoY3VycmVudCAmIC02NTUzNykgfCAxMjgpLFxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlICYmXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJBY3R1YWxEdXJhdGlvbih3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzKVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgIHJldHVybiBwb3Aoc3VzcGVuc2VTdGFja0N1cnNvciwgd29ya0luUHJvZ3Jlc3MpLCBudWxsO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIHBvcEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpLCBudWxsO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIHJldHVybiBwb3BQcm92aWRlcih3b3JrSW5Qcm9ncmVzcy50eXBlLCB3b3JrSW5Qcm9ncmVzcyksIG51bGw7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHBvcFN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICBwb3BIaWRkZW5Db250ZXh0KHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiYgcG9wKHJlc3VtZWRDYWNoZSwgd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgKGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5mbGFncyksXG4gICAgICAgICAgICBjdXJyZW50ICYgNjU1MzZcbiAgICAgICAgICAgICAgPyAoKHdvcmtJblByb2dyZXNzLmZsYWdzID0gKGN1cnJlbnQgJiAtNjU1MzcpIHwgMTI4KSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlICYmXG4gICAgICAgICAgICAgICAgICB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcylcbiAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICByZXR1cm4gcG9wUHJvdmlkZXIoQ2FjaGVDb250ZXh0LCB3b3JrSW5Qcm9ncmVzcyksIG51bGw7XG4gICAgICAgIGNhc2UgMjU6XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVud2luZEludGVycnVwdGVkV29yayhjdXJyZW50LCBpbnRlcnJ1cHRlZFdvcmspIHtcbiAgICAgIHBvcFRyZWVDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICBzd2l0Y2ggKGludGVycnVwdGVkV29yay50YWcpIHtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHBvcFByb3ZpZGVyKENhY2hlQ29udGV4dCwgaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgICBwb3BIb3N0Q29udGFpbmVyKGludGVycnVwdGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjY6XG4gICAgICAgIGNhc2UgMjc6XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBwb3BIb3N0Q29udGV4dChpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcG9wSG9zdENvbnRhaW5lcihpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgIG51bGwgIT09IGludGVycnVwdGVkV29yay5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgICBwb3BTdXNwZW5zZUhhbmRsZXIoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICBwb3BTdXNwZW5zZUhhbmRsZXIoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICBwb3Aoc3VzcGVuc2VTdGFja0N1cnNvciwgaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICBwb3BQcm92aWRlcihpbnRlcnJ1cHRlZFdvcmsudHlwZSwgaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICBwb3BTdXNwZW5zZUhhbmRsZXIoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgICBwb3BIaWRkZW5Db250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJiBwb3AocmVzdW1lZENhY2hlLCBpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgIHBvcFByb3ZpZGVyKENhY2hlQ29udGV4dCwgaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc2hvdWxkUHJvZmlsZShjdXJyZW50KSB7XG4gICAgICByZXR1cm4gKGN1cnJlbnQubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRIb29rTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFdvcmssIGhvb2tGbGFncykge1xuICAgICAgc2hvdWxkUHJvZmlsZShmaW5pc2hlZFdvcmspXG4gICAgICAgID8gKHN0YXJ0RWZmZWN0VGltZXIoKSxcbiAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdE1vdW50KGhvb2tGbGFncywgZmluaXNoZWRXb3JrKSxcbiAgICAgICAgICByZWNvcmRFZmZlY3REdXJhdGlvbigpKVxuICAgICAgICA6IGNvbW1pdEhvb2tFZmZlY3RMaXN0TW91bnQoaG9va0ZsYWdzLCBmaW5pc2hlZFdvcmspO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRIb29rTGF5b3V0VW5tb3VudEVmZmVjdHMoXG4gICAgICBmaW5pc2hlZFdvcmssXG4gICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgaG9va0ZsYWdzXG4gICAgKSB7XG4gICAgICBzaG91bGRQcm9maWxlKGZpbmlzaGVkV29yaylcbiAgICAgICAgPyAoc3RhcnRFZmZlY3RUaW1lcigpLFxuICAgICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0VW5tb3VudChcbiAgICAgICAgICAgIGhvb2tGbGFncyxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3JcbiAgICAgICAgICApLFxuICAgICAgICAgIHJlY29yZEVmZmVjdER1cmF0aW9uKCkpXG4gICAgICAgIDogY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KFxuICAgICAgICAgICAgaG9va0ZsYWdzLFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvclxuICAgICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdEhvb2tFZmZlY3RMaXN0TW91bnQoZmxhZ3MsIGZpbmlzaGVkV29yaykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlLFxuICAgICAgICAgIGxhc3RFZmZlY3QgPSBudWxsICE9PSB1cGRhdGVRdWV1ZSA/IHVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgOiBudWxsO1xuICAgICAgICBpZiAobnVsbCAhPT0gbGFzdEVmZmVjdCkge1xuICAgICAgICAgIHZhciBmaXJzdEVmZmVjdCA9IGxhc3RFZmZlY3QubmV4dDtcbiAgICAgICAgICB1cGRhdGVRdWV1ZSA9IGZpcnN0RWZmZWN0O1xuICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKHVwZGF0ZVF1ZXVlLnRhZyAmIGZsYWdzKSA9PT0gZmxhZ3MgJiZcbiAgICAgICAgICAgICAgKChmbGFncyAmIFBhc3NpdmUpICE9PSBOb0ZsYWdzXG4gICAgICAgICAgICAgICAgPyBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRQYXNzaXZlRWZmZWN0TW91bnRTdGFydGVkICYmXG4gICAgICAgICAgICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRQYXNzaXZlRWZmZWN0TW91bnRTdGFydGVkKFxuICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IChmbGFncyAmIExheW91dCkgIT09IE5vRmxhZ3MgJiZcbiAgICAgICAgICAgICAgICAgIG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT1cbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudExheW91dEVmZmVjdE1vdW50U3RhcnRlZCAmJlxuICAgICAgICAgICAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50TGF5b3V0RWZmZWN0TW91bnRTdGFydGVkKFxuICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIChsYXN0RWZmZWN0ID0gdm9pZCAwKSxcbiAgICAgICAgICAgICAgKGZsYWdzICYgSW5zZXJ0aW9uKSAhPT0gTm9GbGFncyAmJlxuICAgICAgICAgICAgICAgIChpc1J1bm5pbmdJbnNlcnRpb25FZmZlY3QgPSAhMCksXG4gICAgICAgICAgICAgIChsYXN0RWZmZWN0ID0gcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgIGNhbGxDcmVhdGVJbkRFVixcbiAgICAgICAgICAgICAgICB1cGRhdGVRdWV1ZVxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgKGZsYWdzICYgSW5zZXJ0aW9uKSAhPT0gTm9GbGFncyAmJlxuICAgICAgICAgICAgICAgIChpc1J1bm5pbmdJbnNlcnRpb25FZmZlY3QgPSAhMSksXG4gICAgICAgICAgICAgIChmbGFncyAmIFBhc3NpdmUpICE9PSBOb0ZsYWdzXG4gICAgICAgICAgICAgICAgPyBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRQYXNzaXZlRWZmZWN0TW91bnRTdG9wcGVkICYmXG4gICAgICAgICAgICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRQYXNzaXZlRWZmZWN0TW91bnRTdG9wcGVkKClcbiAgICAgICAgICAgICAgICA6IChmbGFncyAmIExheW91dCkgIT09IE5vRmxhZ3MgJiZcbiAgICAgICAgICAgICAgICAgIG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT1cbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudExheW91dEVmZmVjdE1vdW50U3RvcHBlZCAmJlxuICAgICAgICAgICAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50TGF5b3V0RWZmZWN0TW91bnRTdG9wcGVkKCksXG4gICAgICAgICAgICAgIHZvaWQgMCAhPT0gbGFzdEVmZmVjdCAmJiBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBsYXN0RWZmZWN0KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHZhciBob29rTmFtZSA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgaG9va05hbWUgPVxuICAgICAgICAgICAgICAgIDAgIT09ICh1cGRhdGVRdWV1ZS50YWcgJiBMYXlvdXQpXG4gICAgICAgICAgICAgICAgICA/IFwidXNlTGF5b3V0RWZmZWN0XCJcbiAgICAgICAgICAgICAgICAgIDogMCAhPT0gKHVwZGF0ZVF1ZXVlLnRhZyAmIEluc2VydGlvbilcbiAgICAgICAgICAgICAgICAgICAgPyBcInVzZUluc2VydGlvbkVmZmVjdFwiXG4gICAgICAgICAgICAgICAgICAgIDogXCJ1c2VFZmZlY3RcIjtcbiAgICAgICAgICAgICAgdmFyIGFkZGVuZHVtID0gdm9pZCAwO1xuICAgICAgICAgICAgICBhZGRlbmR1bSA9XG4gICAgICAgICAgICAgICAgbnVsbCA9PT0gbGFzdEVmZmVjdFxuICAgICAgICAgICAgICAgICAgPyBcIiBZb3UgcmV0dXJuZWQgbnVsbC4gSWYgeW91ciBlZmZlY3QgZG9lcyBub3QgcmVxdWlyZSBjbGVhbiB1cCwgcmV0dXJuIHVuZGVmaW5lZCAob3Igbm90aGluZykuXCJcbiAgICAgICAgICAgICAgICAgIDogXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbGFzdEVmZmVjdC50aGVuXG4gICAgICAgICAgICAgICAgICAgID8gXCJcXG5cXG5JdCBsb29rcyBsaWtlIHlvdSB3cm90ZSBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgaG9va05hbWUgK1xuICAgICAgICAgICAgICAgICAgICAgIFwiKGFzeW5jICgpID0+IC4uLikgb3IgcmV0dXJuZWQgYSBQcm9taXNlLiBJbnN0ZWFkLCB3cml0ZSB0aGUgYXN5bmMgZnVuY3Rpb24gaW5zaWRlIHlvdXIgZWZmZWN0IGFuZCBjYWxsIGl0IGltbWVkaWF0ZWx5OlxcblxcblwiICtcbiAgICAgICAgICAgICAgICAgICAgICBob29rTmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgXCIoKCkgPT4ge1xcbiAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hEYXRhKCkge1xcbiAgICAvLyBZb3UgY2FuIGF3YWl0IGhlcmVcXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBNeUFQSS5nZXREYXRhKHNvbWVJZCk7XFxuICAgIC8vIC4uLlxcbiAgfVxcbiAgZmV0Y2hEYXRhKCk7XFxufSwgW3NvbWVJZF0pOyAvLyBPciBbXSBpZiBlZmZlY3QgZG9lc24ndCBuZWVkIHByb3BzIG9yIHN0YXRlXFxuXFxuTGVhcm4gbW9yZSBhYm91dCBkYXRhIGZldGNoaW5nIHdpdGggSG9va3M6IGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvaG9va3MtZGF0YS1mZXRjaGluZ1wiXG4gICAgICAgICAgICAgICAgICAgIDogXCIgWW91IHJldHVybmVkOiBcIiArIGxhc3RFZmZlY3Q7XG4gICAgICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAobiwgYSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgXCIlcyBtdXN0IG5vdCByZXR1cm4gYW55dGhpbmcgYmVzaWRlcyBhIGZ1bmN0aW9uLCB3aGljaCBpcyB1c2VkIGZvciBjbGVhbi11cC4lc1wiLFxuICAgICAgICAgICAgICAgICAgICBuLFxuICAgICAgICAgICAgICAgICAgICBhXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaG9va05hbWUsXG4gICAgICAgICAgICAgICAgYWRkZW5kdW1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVwZGF0ZVF1ZXVlID0gdXBkYXRlUXVldWUubmV4dDtcbiAgICAgICAgICB9IHdoaWxlICh1cGRhdGVRdWV1ZSAhPT0gZmlyc3RFZmZlY3QpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KFxuICAgICAgZmxhZ3MsXG4gICAgICBmaW5pc2hlZFdvcmssXG4gICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yXG4gICAgKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWUsXG4gICAgICAgICAgbGFzdEVmZmVjdCA9IG51bGwgIT09IHVwZGF0ZVF1ZXVlID8gdXBkYXRlUXVldWUubGFzdEVmZmVjdCA6IG51bGw7XG4gICAgICAgIGlmIChudWxsICE9PSBsYXN0RWZmZWN0KSB7XG4gICAgICAgICAgdmFyIGZpcnN0RWZmZWN0ID0gbGFzdEVmZmVjdC5uZXh0O1xuICAgICAgICAgIHVwZGF0ZVF1ZXVlID0gZmlyc3RFZmZlY3Q7XG4gICAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKCh1cGRhdGVRdWV1ZS50YWcgJiBmbGFncykgPT09IGZsYWdzKSB7XG4gICAgICAgICAgICAgIHZhciBpbnN0ID0gdXBkYXRlUXVldWUuaW5zdCxcbiAgICAgICAgICAgICAgICBkZXN0cm95ID0gaW5zdC5kZXN0cm95O1xuICAgICAgICAgICAgICB2b2lkIDAgIT09IGRlc3Ryb3kgJiZcbiAgICAgICAgICAgICAgICAoKGluc3QuZGVzdHJveSA9IHZvaWQgMCksXG4gICAgICAgICAgICAgICAgKGZsYWdzICYgUGFzc2l2ZSkgIT09IE5vRmxhZ3NcbiAgICAgICAgICAgICAgICAgID8gbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RVbm1vdW50U3RhcnRlZCAmJlxuICAgICAgICAgICAgICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRQYXNzaXZlRWZmZWN0VW5tb3VudFN0YXJ0ZWQoXG4gICAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogKGZsYWdzICYgTGF5b3V0KSAhPT0gTm9GbGFncyAmJlxuICAgICAgICAgICAgICAgICAgICBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT1cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50TGF5b3V0RWZmZWN0VW5tb3VudFN0YXJ0ZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50TGF5b3V0RWZmZWN0VW5tb3VudFN0YXJ0ZWQoXG4gICAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKGZsYWdzICYgSW5zZXJ0aW9uKSAhPT0gTm9GbGFncyAmJlxuICAgICAgICAgICAgICAgICAgKGlzUnVubmluZ0luc2VydGlvbkVmZmVjdCA9ICEwKSxcbiAgICAgICAgICAgICAgICAobGFzdEVmZmVjdCA9IGZpbmlzaGVkV29yayksXG4gICAgICAgICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICAgICAgICBsYXN0RWZmZWN0LFxuICAgICAgICAgICAgICAgICAgY2FsbERlc3Ryb3lJbkRFVixcbiAgICAgICAgICAgICAgICAgIGxhc3RFZmZlY3QsXG4gICAgICAgICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgICAgICAgZGVzdHJveVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKGZsYWdzICYgSW5zZXJ0aW9uKSAhPT0gTm9GbGFncyAmJlxuICAgICAgICAgICAgICAgICAgKGlzUnVubmluZ0luc2VydGlvbkVmZmVjdCA9ICExKSxcbiAgICAgICAgICAgICAgICAoZmxhZ3MgJiBQYXNzaXZlKSAhPT0gTm9GbGFnc1xuICAgICAgICAgICAgICAgICAgPyBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT1cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50UGFzc2l2ZUVmZmVjdFVubW91bnRTdG9wcGVkICYmXG4gICAgICAgICAgICAgICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RVbm1vdW50U3RvcHBlZCgpXG4gICAgICAgICAgICAgICAgICA6IChmbGFncyAmIExheW91dCkgIT09IE5vRmxhZ3MgJiZcbiAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudExheW91dEVmZmVjdFVubW91bnRTdG9wcGVkICYmXG4gICAgICAgICAgICAgICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudExheW91dEVmZmVjdFVubW91bnRTdG9wcGVkKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdXBkYXRlUXVldWUgPSB1cGRhdGVRdWV1ZS5uZXh0O1xuICAgICAgICAgIH0gd2hpbGUgKHVwZGF0ZVF1ZXVlICE9PSBmaXJzdEVmZmVjdCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRIb29rUGFzc2l2ZU1vdW50RWZmZWN0cyhmaW5pc2hlZFdvcmssIGhvb2tGbGFncykge1xuICAgICAgc2hvdWxkUHJvZmlsZShmaW5pc2hlZFdvcmspXG4gICAgICAgID8gKHN0YXJ0RWZmZWN0VGltZXIoKSxcbiAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdE1vdW50KGhvb2tGbGFncywgZmluaXNoZWRXb3JrKSxcbiAgICAgICAgICByZWNvcmRFZmZlY3REdXJhdGlvbigpKVxuICAgICAgICA6IGNvbW1pdEhvb2tFZmZlY3RMaXN0TW91bnQoaG9va0ZsYWdzLCBmaW5pc2hlZFdvcmspO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRIb29rUGFzc2l2ZVVubW91bnRFZmZlY3RzKFxuICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgIGhvb2tGbGFnc1xuICAgICkge1xuICAgICAgc2hvdWxkUHJvZmlsZShmaW5pc2hlZFdvcmspXG4gICAgICAgID8gKHN0YXJ0RWZmZWN0VGltZXIoKSxcbiAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoXG4gICAgICAgICAgICBob29rRmxhZ3MsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yXG4gICAgICAgICAgKSxcbiAgICAgICAgICByZWNvcmRFZmZlY3REdXJhdGlvbigpKVxuICAgICAgICA6IGNvbW1pdEhvb2tFZmZlY3RMaXN0VW5tb3VudChcbiAgICAgICAgICAgIGhvb2tGbGFncyxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3JcbiAgICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRDbGFzc0NhbGxiYWNrcyhmaW5pc2hlZFdvcmspIHtcbiAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcbiAgICAgIGlmIChudWxsICE9PSB1cGRhdGVRdWV1ZSkge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICBmaW5pc2hlZFdvcmsudHlwZS5kZWZhdWx0UHJvcHMgfHxcbiAgICAgICAgICBcInJlZlwiIGluIGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzIHx8XG4gICAgICAgICAgZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcyB8fFxuICAgICAgICAgIChpbnN0YW5jZS5wcm9wcyAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMgJiZcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiRXhwZWN0ZWQgJXMgcHJvcHMgdG8gbWF0Y2ggbWVtb2l6ZWQgcHJvcHMgYmVmb3JlIHByb2Nlc3NpbmcgdGhlIHVwZGF0ZSBxdWV1ZS4gVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSBhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5wcm9wc2AuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiLFxuICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpbmlzaGVkV29yaykgfHwgXCJpbnN0YW5jZVwiXG4gICAgICAgICAgICApLFxuICAgICAgICAgIGluc3RhbmNlLnN0YXRlICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJFeHBlY3RlZCAlcyBzdGF0ZSB0byBtYXRjaCBtZW1vaXplZCBzdGF0ZSBiZWZvcmUgcHJvY2Vzc2luZyB0aGUgdXBkYXRlIHF1ZXVlLiBUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlIGEgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnN0YXRlYC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIsXG4gICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKSB8fCBcImluc3RhbmNlXCJcbiAgICAgICAgICAgICkpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgY29tbWl0Q2FsbGJhY2tzLFxuICAgICAgICAgICAgdXBkYXRlUXVldWUsXG4gICAgICAgICAgICBpbnN0YW5jZVxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY2FsbEdldFNuYXBzaG90QmVmb3JlVXBkYXRlcyhpbnN0YW5jZSwgcHJldlByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgIHJldHVybiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdENsYXNzU25hcHNob3QoZmluaXNoZWRXb3JrLCBjdXJyZW50KSB7XG4gICAgICB2YXIgcHJldlByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzLFxuICAgICAgICBwcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgICBjdXJyZW50ID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgIGZpbmlzaGVkV29yay50eXBlLmRlZmF1bHRQcm9wcyB8fFxuICAgICAgICBcInJlZlwiIGluIGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzIHx8XG4gICAgICAgIGRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMgfHxcbiAgICAgICAgKGN1cnJlbnQucHJvcHMgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiRXhwZWN0ZWQgJXMgcHJvcHMgdG8gbWF0Y2ggbWVtb2l6ZWQgcHJvcHMgYmVmb3JlIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlLiBUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlIGEgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIsXG4gICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpbmlzaGVkV29yaykgfHwgXCJpbnN0YW5jZVwiXG4gICAgICAgICAgKSxcbiAgICAgICAgY3VycmVudC5zdGF0ZSAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJFeHBlY3RlZCAlcyBzdGF0ZSB0byBtYXRjaCBtZW1vaXplZCBzdGF0ZSBiZWZvcmUgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUuIFRoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMuc3RhdGVgLiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIixcbiAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKSB8fCBcImluc3RhbmNlXCJcbiAgICAgICAgICApKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciByZXNvbHZlZFByZXZQcm9wcyA9IHJlc29sdmVDbGFzc0NvbXBvbmVudFByb3BzKFxuICAgICAgICAgIGZpbmlzaGVkV29yay50eXBlLFxuICAgICAgICAgIHByZXZQcm9wc1xuICAgICAgICApO1xuICAgICAgICB2YXIgc25hcHNob3QgPSBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgY2FsbEdldFNuYXBzaG90QmVmb3JlVXBkYXRlcyxcbiAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgIHJlc29sdmVkUHJldlByb3BzLFxuICAgICAgICAgIHByZXZTdGF0ZVxuICAgICAgICApO1xuICAgICAgICBwcmV2UHJvcHMgPSBkaWRXYXJuQWJvdXRVbmRlZmluZWRTbmFwc2hvdEJlZm9yZVVwZGF0ZTtcbiAgICAgICAgdm9pZCAwICE9PSBzbmFwc2hvdCB8fFxuICAgICAgICAgIHByZXZQcm9wcy5oYXMoZmluaXNoZWRXb3JrLnR5cGUpIHx8XG4gICAgICAgICAgKHByZXZQcm9wcy5hZGQoZmluaXNoZWRXb3JrLnR5cGUpLFxuICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKGZpbmlzaGVkV29yaywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCIlcy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpOiBBIHNuYXBzaG90IHZhbHVlIChvciBudWxsKSBtdXN0IGJlIHJldHVybmVkLiBZb3UgaGF2ZSByZXR1cm5lZCB1bmRlZmluZWQuXCIsXG4gICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KSk7XG4gICAgICAgIGN1cnJlbnQuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGUgPSBzbmFwc2hvdDtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzYWZlbHlDYWxsQ29tcG9uZW50V2lsbFVubW91bnQoXG4gICAgICBjdXJyZW50LFxuICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgIGluc3RhbmNlXG4gICAgKSB7XG4gICAgICBpbnN0YW5jZS5wcm9wcyA9IHJlc29sdmVDbGFzc0NvbXBvbmVudFByb3BzKFxuICAgICAgICBjdXJyZW50LnR5cGUsXG4gICAgICAgIGN1cnJlbnQubWVtb2l6ZWRQcm9wc1xuICAgICAgKTtcbiAgICAgIGluc3RhbmNlLnN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgc2hvdWxkUHJvZmlsZShjdXJyZW50KVxuICAgICAgICA/IChzdGFydEVmZmVjdFRpbWVyKCksXG4gICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgY2FsbENvbXBvbmVudFdpbGxVbm1vdW50SW5ERVYsXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgIGluc3RhbmNlXG4gICAgICAgICAgKSxcbiAgICAgICAgICByZWNvcmRFZmZlY3REdXJhdGlvbigpKVxuICAgICAgICA6IHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIGNhbGxDb21wb25lbnRXaWxsVW5tb3VudEluREVWLFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICBpbnN0YW5jZVxuICAgICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdEF0dGFjaFJlZihmaW5pc2hlZFdvcmspIHtcbiAgICAgIHZhciByZWYgPSBmaW5pc2hlZFdvcmsucmVmO1xuICAgICAgaWYgKG51bGwgIT09IHJlZikge1xuICAgICAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgdmFyIGluc3RhbmNlVG9Vc2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICAgIGluc3RhbmNlVG9Vc2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGluc3RhbmNlVG9Vc2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiByZWYpXG4gICAgICAgICAgaWYgKHNob3VsZFByb2ZpbGUoZmluaXNoZWRXb3JrKSlcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHN0YXJ0RWZmZWN0VGltZXIoKSxcbiAgICAgICAgICAgICAgICAoZmluaXNoZWRXb3JrLnJlZkNsZWFudXAgPSByZWYoaW5zdGFuY2VUb1VzZSkpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgcmVjb3JkRWZmZWN0RHVyYXRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGZpbmlzaGVkV29yay5yZWZDbGVhbnVwID0gcmVmKGluc3RhbmNlVG9Vc2UpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHJlZlxuICAgICAgICAgICAgPyBjb25zb2xlLmVycm9yKFwiU3RyaW5nIHJlZnMgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQuXCIpXG4gICAgICAgICAgICA6IHJlZi5oYXNPd25Qcm9wZXJ0eShcImN1cnJlbnRcIikgfHxcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIlVuZXhwZWN0ZWQgcmVmIG9iamVjdCBwcm92aWRlZCBmb3IgJXMuIFVzZSBlaXRoZXIgYSByZWYtc2V0dGVyIGZ1bmN0aW9uIG9yIFJlYWN0LmNyZWF0ZVJlZigpLlwiLFxuICAgICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKHJlZi5jdXJyZW50ID0gaW5zdGFuY2VUb1VzZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNhZmVseUF0dGFjaFJlZihjdXJyZW50LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yKSB7XG4gICAgICB0cnkge1xuICAgICAgICBydW5XaXRoRmliZXJJbkRFVihjdXJyZW50LCBjb21taXRBdHRhY2hSZWYsIGN1cnJlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoY3VycmVudCwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCwgbmVhcmVzdE1vdW50ZWRBbmNlc3Rvcikge1xuICAgICAgdmFyIHJlZiA9IGN1cnJlbnQucmVmLFxuICAgICAgICByZWZDbGVhbnVwID0gY3VycmVudC5yZWZDbGVhbnVwO1xuICAgICAgaWYgKG51bGwgIT09IHJlZilcbiAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHJlZkNsZWFudXApXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChzaG91bGRQcm9maWxlKGN1cnJlbnQpKVxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHN0YXJ0RWZmZWN0VGltZXIoKSwgcnVuV2l0aEZpYmVySW5ERVYoY3VycmVudCwgcmVmQ2xlYW51cCk7XG4gICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgcmVjb3JkRWZmZWN0RHVyYXRpb24oY3VycmVudCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgcnVuV2l0aEZpYmVySW5ERVYoY3VycmVudCwgcmVmQ2xlYW51cCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGVycm9yKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgKGN1cnJlbnQucmVmQ2xlYW51cCA9IG51bGwpLFxuICAgICAgICAgICAgICAoY3VycmVudCA9IGN1cnJlbnQuYWx0ZXJuYXRlKSxcbiAgICAgICAgICAgICAgbnVsbCAhPSBjdXJyZW50ICYmIChjdXJyZW50LnJlZkNsZWFudXAgPSBudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHJlZilcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHNob3VsZFByb2ZpbGUoY3VycmVudCkpXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgc3RhcnRFZmZlY3RUaW1lcigpLCBydW5XaXRoRmliZXJJbkRFVihjdXJyZW50LCByZWYsIG51bGwpO1xuICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHJlY29yZEVmZmVjdER1cmF0aW9uKGN1cnJlbnQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHJ1bldpdGhGaWJlckluREVWKGN1cnJlbnQsIHJlZiwgbnVsbCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IkNykge1xuICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoY3VycmVudCwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgZXJyb3IkNyk7XG4gICAgICAgICAgfVxuICAgICAgICBlbHNlIHJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0UHJvZmlsZXIoXG4gICAgICBmaW5pc2hlZFdvcmssXG4gICAgICBjdXJyZW50LFxuICAgICAgY29tbWl0U3RhcnRUaW1lLFxuICAgICAgZWZmZWN0RHVyYXRpb25cbiAgICApIHtcbiAgICAgIHZhciBfZmluaXNoZWRXb3JrJG1lbW9pemUgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyxcbiAgICAgICAgaWQgPSBfZmluaXNoZWRXb3JrJG1lbW9pemUuaWQsXG4gICAgICAgIG9uQ29tbWl0ID0gX2ZpbmlzaGVkV29yayRtZW1vaXplLm9uQ29tbWl0O1xuICAgICAgX2ZpbmlzaGVkV29yayRtZW1vaXplID0gX2ZpbmlzaGVkV29yayRtZW1vaXplLm9uUmVuZGVyO1xuICAgICAgY3VycmVudCA9IG51bGwgPT09IGN1cnJlbnQgPyBcIm1vdW50XCIgOiBcInVwZGF0ZVwiO1xuICAgICAgY3VycmVudFVwZGF0ZUlzTmVzdGVkICYmIChjdXJyZW50ID0gXCJuZXN0ZWQtdXBkYXRlXCIpO1xuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2ZpbmlzaGVkV29yayRtZW1vaXplICYmXG4gICAgICAgIF9maW5pc2hlZFdvcmskbWVtb2l6ZShcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgIGZpbmlzaGVkV29yay5hY3R1YWxEdXJhdGlvbixcbiAgICAgICAgICBmaW5pc2hlZFdvcmsudHJlZUJhc2VEdXJhdGlvbixcbiAgICAgICAgICBmaW5pc2hlZFdvcmsuYWN0dWFsU3RhcnRUaW1lLFxuICAgICAgICAgIGNvbW1pdFN0YXJ0VGltZVxuICAgICAgICApO1xuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2Ygb25Db21taXQgJiZcbiAgICAgICAgb25Db21taXQoaWQsIGN1cnJlbnQsIGVmZmVjdER1cmF0aW9uLCBjb21taXRTdGFydFRpbWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRQcm9maWxlclBvc3RDb21taXRJbXBsKFxuICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgY3VycmVudCxcbiAgICAgIGNvbW1pdFN0YXJ0VGltZSxcbiAgICAgIHBhc3NpdmVFZmZlY3REdXJhdGlvblxuICAgICkge1xuICAgICAgdmFyIF9maW5pc2hlZFdvcmskbWVtb2l6ZTIgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcztcbiAgICAgIGZpbmlzaGVkV29yayA9IF9maW5pc2hlZFdvcmskbWVtb2l6ZTIuaWQ7XG4gICAgICBfZmluaXNoZWRXb3JrJG1lbW9pemUyID0gX2ZpbmlzaGVkV29yayRtZW1vaXplMi5vblBvc3RDb21taXQ7XG4gICAgICBjdXJyZW50ID0gbnVsbCA9PT0gY3VycmVudCA/IFwibW91bnRcIiA6IFwidXBkYXRlXCI7XG4gICAgICBjdXJyZW50VXBkYXRlSXNOZXN0ZWQgJiYgKGN1cnJlbnQgPSBcIm5lc3RlZC11cGRhdGVcIik7XG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfZmluaXNoZWRXb3JrJG1lbW9pemUyICYmXG4gICAgICAgIF9maW5pc2hlZFdvcmskbWVtb2l6ZTIoXG4gICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgcGFzc2l2ZUVmZmVjdER1cmF0aW9uLFxuICAgICAgICAgIGNvbW1pdFN0YXJ0VGltZVxuICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRIb3N0TW91bnQoZmluaXNoZWRXb3JrKSB7XG4gICAgICB2YXIgdHlwZSA9IGZpbmlzaGVkV29yay50eXBlLFxuICAgICAgICBwcm9wcyA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzLFxuICAgICAgICBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICB0cnkge1xuICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgY29tbWl0TW91bnQsXG4gICAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRIb3N0VXBkYXRlKGZpbmlzaGVkV29yaywgbmV3UHJvcHMsIG9sZFByb3BzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgY29tbWl0VXBkYXRlLFxuICAgICAgICAgIGZpbmlzaGVkV29yay5zdGF0ZU5vZGUsXG4gICAgICAgICAgZmluaXNoZWRXb3JrLnR5cGUsXG4gICAgICAgICAgb2xkUHJvcHMsXG4gICAgICAgICAgbmV3UHJvcHMsXG4gICAgICAgICAgZmluaXNoZWRXb3JrXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaXNIb3N0UGFyZW50KGZpYmVyKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA1ID09PSBmaWJlci50YWcgfHxcbiAgICAgICAgMyA9PT0gZmliZXIudGFnIHx8XG4gICAgICAgIDI2ID09PSBmaWJlci50YWcgfHxcbiAgICAgICAgKDI3ID09PSBmaWJlci50YWcgJiYgaXNTaW5nbGV0b25TY29wZShmaWJlci50eXBlKSkgfHxcbiAgICAgICAgNCA9PT0gZmliZXIudGFnXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRIb3N0U2libGluZyhmaWJlcikge1xuICAgICAgYTogZm9yICg7Oykge1xuICAgICAgICBmb3IgKDsgbnVsbCA9PT0gZmliZXIuc2libGluZzsgKSB7XG4gICAgICAgICAgaWYgKG51bGwgPT09IGZpYmVyLnJldHVybiB8fCBpc0hvc3RQYXJlbnQoZmliZXIucmV0dXJuKSkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgZmliZXIgPSBmaWJlci5yZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZmliZXIuc2libGluZy5yZXR1cm4gPSBmaWJlci5yZXR1cm47XG4gICAgICAgIGZvciAoXG4gICAgICAgICAgZmliZXIgPSBmaWJlci5zaWJsaW5nO1xuICAgICAgICAgIDUgIT09IGZpYmVyLnRhZyAmJiA2ICE9PSBmaWJlci50YWcgJiYgMTggIT09IGZpYmVyLnRhZztcblxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoMjcgPT09IGZpYmVyLnRhZyAmJiBpc1NpbmdsZXRvblNjb3BlKGZpYmVyLnR5cGUpKSBjb250aW51ZSBhO1xuICAgICAgICAgIGlmIChmaWJlci5mbGFncyAmIDIpIGNvbnRpbnVlIGE7XG4gICAgICAgICAgaWYgKG51bGwgPT09IGZpYmVyLmNoaWxkIHx8IDQgPT09IGZpYmVyLnRhZykgY29udGludWUgYTtcbiAgICAgICAgICBlbHNlIChmaWJlci5jaGlsZC5yZXR1cm4gPSBmaWJlciksIChmaWJlciA9IGZpYmVyLmNoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIShmaWJlci5mbGFncyAmIDIpKSByZXR1cm4gZmliZXIuc3RhdGVOb2RlO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGVJbnRvQ29udGFpbmVyKG5vZGUsIGJlZm9yZSwgcGFyZW50KSB7XG4gICAgICB2YXIgdGFnID0gbm9kZS50YWc7XG4gICAgICBpZiAoNSA9PT0gdGFnIHx8IDYgPT09IHRhZylcbiAgICAgICAgKG5vZGUgPSBub2RlLnN0YXRlTm9kZSksXG4gICAgICAgICAgYmVmb3JlXG4gICAgICAgICAgICA/ICh3YXJuRm9yUmVhY3RDaGlsZHJlbkNvbmZsaWN0KHBhcmVudCksXG4gICAgICAgICAgICAgICg5ID09PSBwYXJlbnQubm9kZVR5cGVcbiAgICAgICAgICAgICAgICA/IHBhcmVudC5ib2R5XG4gICAgICAgICAgICAgICAgOiBcIkhUTUxcIiA9PT0gcGFyZW50Lm5vZGVOYW1lXG4gICAgICAgICAgICAgICAgICA/IHBhcmVudC5vd25lckRvY3VtZW50LmJvZHlcbiAgICAgICAgICAgICAgICAgIDogcGFyZW50XG4gICAgICAgICAgICAgICkuaW5zZXJ0QmVmb3JlKG5vZGUsIGJlZm9yZSkpXG4gICAgICAgICAgICA6ICh3YXJuRm9yUmVhY3RDaGlsZHJlbkNvbmZsaWN0KHBhcmVudCksXG4gICAgICAgICAgICAgIChiZWZvcmUgPVxuICAgICAgICAgICAgICAgIDkgPT09IHBhcmVudC5ub2RlVHlwZVxuICAgICAgICAgICAgICAgICAgPyBwYXJlbnQuYm9keVxuICAgICAgICAgICAgICAgICAgOiBcIkhUTUxcIiA9PT0gcGFyZW50Lm5vZGVOYW1lXG4gICAgICAgICAgICAgICAgICAgID8gcGFyZW50Lm93bmVyRG9jdW1lbnQuYm9keVxuICAgICAgICAgICAgICAgICAgICA6IHBhcmVudCksXG4gICAgICAgICAgICAgIGJlZm9yZS5hcHBlbmRDaGlsZChub2RlKSxcbiAgICAgICAgICAgICAgKHBhcmVudCA9IHBhcmVudC5fcmVhY3RSb290Q29udGFpbmVyKSxcbiAgICAgICAgICAgICAgKG51bGwgIT09IHBhcmVudCAmJiB2b2lkIDAgIT09IHBhcmVudCkgfHxcbiAgICAgICAgICAgICAgICBudWxsICE9PSBiZWZvcmUub25jbGljayB8fFxuICAgICAgICAgICAgICAgIChiZWZvcmUub25jbGljayA9IG5vb3AkMSkpO1xuICAgICAgZWxzZSBpZiAoXG4gICAgICAgIDQgIT09IHRhZyAmJlxuICAgICAgICAoMjcgPT09IHRhZyAmJlxuICAgICAgICAgIGlzU2luZ2xldG9uU2NvcGUobm9kZS50eXBlKSAmJlxuICAgICAgICAgICgocGFyZW50ID0gbm9kZS5zdGF0ZU5vZGUpLCAoYmVmb3JlID0gbnVsbCkpLFxuICAgICAgICAobm9kZSA9IG5vZGUuY2hpbGQpLFxuICAgICAgICBudWxsICE9PSBub2RlKVxuICAgICAgKVxuICAgICAgICBmb3IgKFxuICAgICAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZUludG9Db250YWluZXIobm9kZSwgYmVmb3JlLCBwYXJlbnQpLFxuICAgICAgICAgICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgICAgICAgICBudWxsICE9PSBub2RlO1xuXG4gICAgICAgIClcbiAgICAgICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGVJbnRvQ29udGFpbmVyKG5vZGUsIGJlZm9yZSwgcGFyZW50KSxcbiAgICAgICAgICAgIChub2RlID0gbm9kZS5zaWJsaW5nKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlKG5vZGUsIGJlZm9yZSwgcGFyZW50KSB7XG4gICAgICB2YXIgdGFnID0gbm9kZS50YWc7XG4gICAgICBpZiAoNSA9PT0gdGFnIHx8IDYgPT09IHRhZylcbiAgICAgICAgKG5vZGUgPSBub2RlLnN0YXRlTm9kZSksXG4gICAgICAgICAgYmVmb3JlID8gcGFyZW50Lmluc2VydEJlZm9yZShub2RlLCBiZWZvcmUpIDogcGFyZW50LmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgZWxzZSBpZiAoXG4gICAgICAgIDQgIT09IHRhZyAmJlxuICAgICAgICAoMjcgPT09IHRhZyAmJiBpc1NpbmdsZXRvblNjb3BlKG5vZGUudHlwZSkgJiYgKHBhcmVudCA9IG5vZGUuc3RhdGVOb2RlKSxcbiAgICAgICAgKG5vZGUgPSBub2RlLmNoaWxkKSxcbiAgICAgICAgbnVsbCAhPT0gbm9kZSlcbiAgICAgIClcbiAgICAgICAgZm9yIChcbiAgICAgICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUobm9kZSwgYmVmb3JlLCBwYXJlbnQpLFxuICAgICAgICAgICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgICAgICAgICBudWxsICE9PSBub2RlO1xuXG4gICAgICAgIClcbiAgICAgICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUobm9kZSwgYmVmb3JlLCBwYXJlbnQpLFxuICAgICAgICAgICAgKG5vZGUgPSBub2RlLnNpYmxpbmcpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRQbGFjZW1lbnQoZmluaXNoZWRXb3JrKSB7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgaG9zdFBhcmVudEZpYmVyLCBwYXJlbnRGaWJlciA9IGZpbmlzaGVkV29yay5yZXR1cm47XG4gICAgICAgIG51bGwgIT09IHBhcmVudEZpYmVyO1xuXG4gICAgICApIHtcbiAgICAgICAgaWYgKGlzSG9zdFBhcmVudChwYXJlbnRGaWJlcikpIHtcbiAgICAgICAgICBob3N0UGFyZW50RmliZXIgPSBwYXJlbnRGaWJlcjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChudWxsID09IGhvc3RQYXJlbnRGaWJlcilcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJFeHBlY3RlZCB0byBmaW5kIGEgaG9zdCBwYXJlbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgKTtcbiAgICAgIHN3aXRjaCAoaG9zdFBhcmVudEZpYmVyLnRhZykge1xuICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgIGhvc3RQYXJlbnRGaWJlciA9IGhvc3RQYXJlbnRGaWJlci5zdGF0ZU5vZGU7XG4gICAgICAgICAgcGFyZW50RmliZXIgPSBnZXRIb3N0U2libGluZyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZShcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIHBhcmVudEZpYmVyLFxuICAgICAgICAgICAgaG9zdFBhcmVudEZpYmVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHBhcmVudEZpYmVyID0gaG9zdFBhcmVudEZpYmVyLnN0YXRlTm9kZTtcbiAgICAgICAgICBob3N0UGFyZW50RmliZXIuZmxhZ3MgJiAzMiAmJlxuICAgICAgICAgICAgKHJlc2V0VGV4dENvbnRlbnQocGFyZW50RmliZXIpLCAoaG9zdFBhcmVudEZpYmVyLmZsYWdzICY9IC0zMykpO1xuICAgICAgICAgIGhvc3RQYXJlbnRGaWJlciA9IGdldEhvc3RTaWJsaW5nKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlKFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgaG9zdFBhcmVudEZpYmVyLFxuICAgICAgICAgICAgcGFyZW50RmliZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBob3N0UGFyZW50RmliZXIgPSBob3N0UGFyZW50RmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICAgICAgcGFyZW50RmliZXIgPSBnZXRIb3N0U2libGluZyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZUludG9Db250YWluZXIoXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBwYXJlbnRGaWJlcixcbiAgICAgICAgICAgIGhvc3RQYXJlbnRGaWJlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcIkludmFsaWQgaG9zdCBwYXJlbnQgZmliZXIuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRIb3N0U2luZ2xldG9uQWNxdWlzaXRpb24oZmluaXNoZWRXb3JrKSB7XG4gICAgICB2YXIgc2luZ2xldG9uID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZSxcbiAgICAgICAgcHJvcHMgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcztcbiAgICAgIHRyeSB7XG4gICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICBhY3F1aXJlU2luZ2xldG9uSW5zdGFuY2UsXG4gICAgICAgICAgZmluaXNoZWRXb3JrLnR5cGUsXG4gICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgc2luZ2xldG9uLFxuICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdEJlZm9yZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaXJzdENoaWxkKSB7XG4gICAgICByb290ID0gcm9vdC5jb250YWluZXJJbmZvO1xuICAgICAgZXZlbnRzRW5hYmxlZCA9IF9lbmFibGVkO1xuICAgICAgcm9vdCA9IGdldEFjdGl2ZUVsZW1lbnREZWVwKHJvb3QpO1xuICAgICAgaWYgKGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhyb290KSkge1xuICAgICAgICBpZiAoXCJzZWxlY3Rpb25TdGFydFwiIGluIHJvb3QpXG4gICAgICAgICAgdmFyIEpTQ29tcGlsZXJfdGVtcCA9IHtcbiAgICAgICAgICAgIHN0YXJ0OiByb290LnNlbGVjdGlvblN0YXJ0LFxuICAgICAgICAgICAgZW5kOiByb290LnNlbGVjdGlvbkVuZFxuICAgICAgICAgIH07XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBhOiB7XG4gICAgICAgICAgICBKU0NvbXBpbGVyX3RlbXAgPVxuICAgICAgICAgICAgICAoKEpTQ29tcGlsZXJfdGVtcCA9IHJvb3Qub3duZXJEb2N1bWVudCkgJiZcbiAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX3RlbXAuZGVmYXVsdFZpZXcpIHx8XG4gICAgICAgICAgICAgIHdpbmRvdztcbiAgICAgICAgICAgIHZhciBzZWxlY3Rpb24gPVxuICAgICAgICAgICAgICBKU0NvbXBpbGVyX3RlbXAuZ2V0U2VsZWN0aW9uICYmIEpTQ29tcGlsZXJfdGVtcC5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb24gJiYgMCAhPT0gc2VsZWN0aW9uLnJhbmdlQ291bnQpIHtcbiAgICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wID0gc2VsZWN0aW9uLmFuY2hvck5vZGU7XG4gICAgICAgICAgICAgIHZhciBhbmNob3JPZmZzZXQgPSBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgICAgICAgICAgIGZvY3VzTm9kZSA9IHNlbGVjdGlvbi5mb2N1c05vZGU7XG4gICAgICAgICAgICAgIHNlbGVjdGlvbiA9IHNlbGVjdGlvbi5mb2N1c09mZnNldDtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX3RlbXAubm9kZVR5cGUsIGZvY3VzTm9kZS5ub2RlVHlwZTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZSQyKSB7XG4gICAgICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wID0gbnVsbDtcbiAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZhciBsZW5ndGggPSAwLFxuICAgICAgICAgICAgICAgIHN0YXJ0ID0gLTEsXG4gICAgICAgICAgICAgICAgZW5kID0gLTEsXG4gICAgICAgICAgICAgICAgaW5kZXhXaXRoaW5BbmNob3IgPSAwLFxuICAgICAgICAgICAgICAgIGluZGV4V2l0aGluRm9jdXMgPSAwLFxuICAgICAgICAgICAgICAgIG5vZGUgPSByb290LFxuICAgICAgICAgICAgICAgIHBhcmVudE5vZGUgPSBudWxsO1xuICAgICAgICAgICAgICBiOiBmb3IgKDs7KSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgbmV4dDsgOyApIHtcbiAgICAgICAgICAgICAgICAgIG5vZGUgIT09IEpTQ29tcGlsZXJfdGVtcCB8fFxuICAgICAgICAgICAgICAgICAgICAoMCAhPT0gYW5jaG9yT2Zmc2V0ICYmIDMgIT09IG5vZGUubm9kZVR5cGUpIHx8XG4gICAgICAgICAgICAgICAgICAgIChzdGFydCA9IGxlbmd0aCArIGFuY2hvck9mZnNldCk7XG4gICAgICAgICAgICAgICAgICBub2RlICE9PSBmb2N1c05vZGUgfHxcbiAgICAgICAgICAgICAgICAgICAgKDAgIT09IHNlbGVjdGlvbiAmJiAzICE9PSBub2RlLm5vZGVUeXBlKSB8fFxuICAgICAgICAgICAgICAgICAgICAoZW5kID0gbGVuZ3RoICsgc2VsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgIDMgPT09IG5vZGUubm9kZVR5cGUgJiYgKGxlbmd0aCArPSBub2RlLm5vZGVWYWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgaWYgKG51bGwgPT09IChuZXh0ID0gbm9kZS5maXJzdENoaWxkKSkgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBwYXJlbnROb2RlID0gbm9kZTtcbiAgICAgICAgICAgICAgICAgIG5vZGUgPSBuZXh0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKDs7KSB7XG4gICAgICAgICAgICAgICAgICBpZiAobm9kZSA9PT0gcm9vdCkgYnJlYWsgYjtcbiAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUgPT09IEpTQ29tcGlsZXJfdGVtcCAmJlxuICAgICAgICAgICAgICAgICAgICArK2luZGV4V2l0aGluQW5jaG9yID09PSBhbmNob3JPZmZzZXQgJiZcbiAgICAgICAgICAgICAgICAgICAgKHN0YXJ0ID0gbGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUgPT09IGZvY3VzTm9kZSAmJlxuICAgICAgICAgICAgICAgICAgICArK2luZGV4V2l0aGluRm9jdXMgPT09IHNlbGVjdGlvbiAmJlxuICAgICAgICAgICAgICAgICAgICAoZW5kID0gbGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgIGlmIChudWxsICE9PSAobmV4dCA9IG5vZGUubmV4dFNpYmxpbmcpKSBicmVhaztcbiAgICAgICAgICAgICAgICAgIG5vZGUgPSBwYXJlbnROb2RlO1xuICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbm9kZSA9IG5leHQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgSlNDb21waWxlcl90ZW1wID1cbiAgICAgICAgICAgICAgICAtMSA9PT0gc3RhcnQgfHwgLTEgPT09IGVuZCA/IG51bGwgOiB7IHN0YXJ0OiBzdGFydCwgZW5kOiBlbmQgfTtcbiAgICAgICAgICAgIH0gZWxzZSBKU0NvbXBpbGVyX3RlbXAgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgSlNDb21waWxlcl90ZW1wID0gSlNDb21waWxlcl90ZW1wIHx8IHsgc3RhcnQ6IDAsIGVuZDogMCB9O1xuICAgICAgfSBlbHNlIEpTQ29tcGlsZXJfdGVtcCA9IG51bGw7XG4gICAgICBzZWxlY3Rpb25JbmZvcm1hdGlvbiA9IHtcbiAgICAgICAgZm9jdXNlZEVsZW06IHJvb3QsXG4gICAgICAgIHNlbGVjdGlvblJhbmdlOiBKU0NvbXBpbGVyX3RlbXBcbiAgICAgIH07XG4gICAgICBfZW5hYmxlZCA9ICExO1xuICAgICAgZm9yIChuZXh0RWZmZWN0ID0gZmlyc3RDaGlsZDsgbnVsbCAhPT0gbmV4dEVmZmVjdDsgKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgKChmaXJzdENoaWxkID0gbmV4dEVmZmVjdCksXG4gICAgICAgICAgKHJvb3QgPSBmaXJzdENoaWxkLmNoaWxkKSxcbiAgICAgICAgICAwICE9PSAoZmlyc3RDaGlsZC5zdWJ0cmVlRmxhZ3MgJiAxMDI0KSAmJiBudWxsICE9PSByb290KVxuICAgICAgICApXG4gICAgICAgICAgKHJvb3QucmV0dXJuID0gZmlyc3RDaGlsZCksIChuZXh0RWZmZWN0ID0gcm9vdCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBmb3IgKDsgbnVsbCAhPT0gbmV4dEVmZmVjdDsgKSB7XG4gICAgICAgICAgICByb290ID0gZmlyc3RDaGlsZCA9IG5leHRFZmZlY3Q7XG4gICAgICAgICAgICBKU0NvbXBpbGVyX3RlbXAgPSByb290LmFsdGVybmF0ZTtcbiAgICAgICAgICAgIGFuY2hvck9mZnNldCA9IHJvb3QuZmxhZ3M7XG4gICAgICAgICAgICBzd2l0Y2ggKHJvb3QudGFnKSB7XG4gICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIDAgIT09IChhbmNob3JPZmZzZXQgJiAxMDI0KSAmJlxuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gSlNDb21waWxlcl90ZW1wICYmXG4gICAgICAgICAgICAgICAgICBjb21taXRDbGFzc1NuYXBzaG90KHJvb3QsIEpTQ29tcGlsZXJfdGVtcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICBpZiAoMCAhPT0gKGFuY2hvck9mZnNldCAmIDEwMjQpKVxuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAoKHJvb3QgPSByb290LnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxcbiAgICAgICAgICAgICAgICAgICAgKEpTQ29tcGlsZXJfdGVtcCA9IHJvb3Qubm9kZVR5cGUpLFxuICAgICAgICAgICAgICAgICAgICA5ID09PSBKU0NvbXBpbGVyX3RlbXApXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyQ29udGFpbmVyU3BhcmluZ2x5KHJvb3QpO1xuICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoMSA9PT0gSlNDb21waWxlcl90ZW1wKVxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJvb3Qubm9kZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiSEVBRFwiOlxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJIVE1MXCI6XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIkJPRFlcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyQ29udGFpbmVyU3BhcmluZ2x5KHJvb3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QudGV4dENvbnRlbnQgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgIGNhc2UgMTc6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaWYgKDAgIT09IChhbmNob3JPZmZzZXQgJiAxMDI0KSlcbiAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBcIlRoaXMgdW5pdCBvZiB3b3JrIHRhZyBzaG91bGQgbm90IGhhdmUgc2lkZS1lZmZlY3RzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcm9vdCA9IGZpcnN0Q2hpbGQuc2libGluZztcbiAgICAgICAgICAgIGlmIChudWxsICE9PSByb290KSB7XG4gICAgICAgICAgICAgIHJvb3QucmV0dXJuID0gZmlyc3RDaGlsZC5yZXR1cm47XG4gICAgICAgICAgICAgIG5leHRFZmZlY3QgPSByb290O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5leHRFZmZlY3QgPSBmaXJzdENoaWxkLnJldHVybjtcbiAgICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdExheW91dEVmZmVjdE9uRmliZXIoZmluaXNoZWRSb290LCBjdXJyZW50LCBmaW5pc2hlZFdvcmspIHtcbiAgICAgIHZhciBwcmV2RWZmZWN0U3RhcnQgPSBwdXNoQ29tcG9uZW50RWZmZWN0U3RhcnQoKSxcbiAgICAgICAgZmxhZ3MgPSBmaW5pc2hlZFdvcmsuZmxhZ3M7XG4gICAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDExOlxuICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBmbGFncyAmIDQgJiZcbiAgICAgICAgICAgIGNvbW1pdEhvb2tMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yaywgTGF5b3V0IHwgSGFzRWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBpZiAoZmxhZ3MgJiA0KVxuICAgICAgICAgICAgaWYgKCgoZmluaXNoZWRSb290ID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZSksIG51bGwgPT09IGN1cnJlbnQpKVxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsudHlwZS5kZWZhdWx0UHJvcHMgfHxcbiAgICAgICAgICAgICAgICBcInJlZlwiIGluIGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzIHx8XG4gICAgICAgICAgICAgICAgZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcyB8fFxuICAgICAgICAgICAgICAgIChmaW5pc2hlZFJvb3QucHJvcHMgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzICYmXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICBcIkV4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSBjb21wb25lbnREaWRNb3VudC4gVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSBhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5wcm9wc2AuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiLFxuICAgICAgICAgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpbmlzaGVkV29yaykgfHwgXCJpbnN0YW5jZVwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdC5zdGF0ZSAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiRXhwZWN0ZWQgJXMgc3RhdGUgdG8gbWF0Y2ggbWVtb2l6ZWQgc3RhdGUgYmVmb3JlIGNvbXBvbmVudERpZE1vdW50LiBUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlIGEgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnN0YXRlYC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIsXG4gICAgICAgICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKSB8fCBcImluc3RhbmNlXCJcbiAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIHNob3VsZFByb2ZpbGUoZmluaXNoZWRXb3JrKVxuICAgICAgICAgICAgICAgICAgPyAoc3RhcnRFZmZlY3RUaW1lcigpLFxuICAgICAgICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgICAgICAgY2FsbENvbXBvbmVudERpZE1vdW50SW5ERVYsXG4gICAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICByZWNvcmRFZmZlY3REdXJhdGlvbigpKVxuICAgICAgICAgICAgICAgICAgOiBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgICAgICAgY2FsbENvbXBvbmVudERpZE1vdW50SW5ERVYsXG4gICAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIHZhciBwcmV2UHJvcHMgPSByZXNvbHZlQ2xhc3NDb21wb25lbnRQcm9wcyhcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsudHlwZSxcbiAgICAgICAgICAgICAgICBjdXJyZW50Lm1lbW9pemVkUHJvcHNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnR5cGUuZGVmYXVsdFByb3BzIHx8XG4gICAgICAgICAgICAgICAgXCJyZWZcIiBpbiBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyB8fFxuICAgICAgICAgICAgICAgIGRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMgfHxcbiAgICAgICAgICAgICAgICAoZmluaXNoZWRSb290LnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyAmJlxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgXCJFeHBlY3RlZCAlcyBwcm9wcyB0byBtYXRjaCBtZW1vaXplZCBwcm9wcyBiZWZvcmUgY29tcG9uZW50RGlkVXBkYXRlLiBUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlIGEgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIsXG4gICAgICAgICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKSB8fCBcImluc3RhbmNlXCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgZmluaXNoZWRSb290LnN0YXRlICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgXCJFeHBlY3RlZCAlcyBzdGF0ZSB0byBtYXRjaCBtZW1vaXplZCBzdGF0ZSBiZWZvcmUgY29tcG9uZW50RGlkVXBkYXRlLiBUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlIGEgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnN0YXRlYC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIsXG4gICAgICAgICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKSB8fCBcImluc3RhbmNlXCJcbiAgICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgICBzaG91bGRQcm9maWxlKGZpbmlzaGVkV29yaylcbiAgICAgICAgICAgICAgICA/IChzdGFydEVmZmVjdFRpbWVyKCksXG4gICAgICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgICAgICBjYWxsQ29tcG9uZW50RGlkVXBkYXRlSW5ERVYsXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICAgICAgICBwcmV2UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdC5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZVxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIHJlY29yZEVmZmVjdER1cmF0aW9uKCkpXG4gICAgICAgICAgICAgICAgOiBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgICAgICBjYWxsQ29tcG9uZW50RGlkVXBkYXRlSW5ERVYsXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICAgICAgICBwcmV2UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdC5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBmbGFncyAmIDY0ICYmIGNvbW1pdENsYXNzQ2FsbGJhY2tzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgZmxhZ3MgJiA1MTIgJiYgc2FmZWx5QXR0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBjdXJyZW50ID0gcHVzaE5lc3RlZEVmZmVjdER1cmF0aW9ucygpO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmbGFncyAmIDY0ICYmXG4gICAgICAgICAgICAoKGZsYWdzID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlKSwgbnVsbCAhPT0gZmxhZ3MpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBwcmV2UHJvcHMgPSBudWxsO1xuICAgICAgICAgICAgaWYgKG51bGwgIT09IGZpbmlzaGVkV29yay5jaGlsZClcbiAgICAgICAgICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsuY2hpbGQudGFnKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICBwcmV2UHJvcHMgPSBmaW5pc2hlZFdvcmsuY2hpbGQuc3RhdGVOb2RlO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgcHJldlByb3BzID0gZmluaXNoZWRXb3JrLmNoaWxkLnN0YXRlTm9kZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgIGNvbW1pdENhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICBmbGFncyxcbiAgICAgICAgICAgICAgICBwcmV2UHJvcHNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmaW5pc2hlZFJvb3QuZWZmZWN0RHVyYXRpb24gKz0gcG9wTmVzdGVkRWZmZWN0RHVyYXRpb25zKGN1cnJlbnQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgIG51bGwgPT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgIGZsYWdzICYgNCAmJlxuICAgICAgICAgICAgY29tbWl0SG9zdFNpbmdsZXRvbkFjcXVpc2l0aW9uKGZpbmlzaGVkV29yayk7XG4gICAgICAgIGNhc2UgMjY6XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnQpXG4gICAgICAgICAgICBpZiAoZmxhZ3MgJiA0KSBjb21taXRIb3N0TW91bnQoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGZsYWdzICYgNjQpIHtcbiAgICAgICAgICAgICAgZmluaXNoZWRSb290ID0gZmluaXNoZWRXb3JrLnR5cGU7XG4gICAgICAgICAgICAgIGN1cnJlbnQgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICAgICAgcHJldlByb3BzID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICAgIGNvbW1pdEh5ZHJhdGVkSW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgICBwcmV2UHJvcHMsXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yay5yZXR1cm4sXG4gICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICBmbGFncyAmIDUxMiAmJiBzYWZlbHlBdHRhY2hSZWYoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICBpZiAoZmxhZ3MgJiA0KSB7XG4gICAgICAgICAgICBmbGFncyA9IHB1c2hOZXN0ZWRFZmZlY3REdXJhdGlvbnMoKTtcbiAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QuZWZmZWN0RHVyYXRpb24gKz0gYnViYmxlTmVzdGVkRWZmZWN0RHVyYXRpb25zKGZsYWdzKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICBjb21taXRQcm9maWxlcixcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICBjb21taXRTdGFydFRpbWUsXG4gICAgICAgICAgICAgICAgZmluaXNoZWRSb290LmVmZmVjdER1cmF0aW9uXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBmbGFncyAmIDQgJiZcbiAgICAgICAgICAgIGNvbW1pdEFjdGl2aXR5SHlkcmF0aW9uQ2FsbGJhY2tzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgZmxhZ3MgJiA0ICYmXG4gICAgICAgICAgICBjb21taXRTdXNwZW5zZUh5ZHJhdGlvbkNhbGxiYWNrcyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgZmxhZ3MgJiA2NCAmJlxuICAgICAgICAgICAgKChmaW5pc2hlZFJvb3QgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSksXG4gICAgICAgICAgICBudWxsICE9PSBmaW5pc2hlZFJvb3QgJiZcbiAgICAgICAgICAgICAgKChmaW5pc2hlZFJvb3QgPSBmaW5pc2hlZFJvb3QuZGVoeWRyYXRlZCksXG4gICAgICAgICAgICAgIG51bGwgIT09IGZpbmlzaGVkUm9vdCAmJlxuICAgICAgICAgICAgICAgICgoZmluaXNoZWRXb3JrID0gcmV0cnlEZWh5ZHJhdGVkU3VzcGVuc2VCb3VuZGFyeS5iaW5kKFxuICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIHJlZ2lzdGVyU3VzcGVuc2VJbnN0YW5jZVJldHJ5KGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKSkpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICBmbGFncyA9XG4gICAgICAgICAgICBudWxsICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSB8fCBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW47XG4gICAgICAgICAgaWYgKCFmbGFncykge1xuICAgICAgICAgICAgY3VycmVudCA9XG4gICAgICAgICAgICAgIChudWxsICE9PSBjdXJyZW50ICYmIG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkgfHxcbiAgICAgICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbjtcbiAgICAgICAgICAgIHByZXZQcm9wcyA9IG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbjtcbiAgICAgICAgICAgIHZhciBwcmV2T2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9IG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW47XG4gICAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gPSBmbGFncztcbiAgICAgICAgICAgIChvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID0gY3VycmVudCkgJiZcbiAgICAgICAgICAgICFwcmV2T2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlblxuICAgICAgICAgICAgICA/IHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMoXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgICAwICE9PSAoZmluaXNoZWRXb3JrLnN1YnRyZWVGbGFncyAmIDg3NzIpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiA9IHByZXZQcm9wcztcbiAgICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gPSBwcmV2T2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzA6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgfVxuICAgICAgcG9wQ29tcG9uZW50RWZmZWN0U3RhcnQocHJldkVmZmVjdFN0YXJ0KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGV0YWNoRmliZXJBZnRlckVmZmVjdHMoZmliZXIpIHtcbiAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG4gICAgICBudWxsICE9PSBhbHRlcm5hdGUgJiZcbiAgICAgICAgKChmaWJlci5hbHRlcm5hdGUgPSBudWxsKSwgZGV0YWNoRmliZXJBZnRlckVmZmVjdHMoYWx0ZXJuYXRlKSk7XG4gICAgICBmaWJlci5jaGlsZCA9IG51bGw7XG4gICAgICBmaWJlci5kZWxldGlvbnMgPSBudWxsO1xuICAgICAgZmliZXIuc2libGluZyA9IG51bGw7XG4gICAgICA1ID09PSBmaWJlci50YWcgJiZcbiAgICAgICAgKChhbHRlcm5hdGUgPSBmaWJlci5zdGF0ZU5vZGUpLFxuICAgICAgICBudWxsICE9PSBhbHRlcm5hdGUgJiYgZGV0YWNoRGVsZXRlZEluc3RhbmNlKGFsdGVybmF0ZSkpO1xuICAgICAgZmliZXIuc3RhdGVOb2RlID0gbnVsbDtcbiAgICAgIGZpYmVyLl9kZWJ1Z093bmVyID0gbnVsbDtcbiAgICAgIGZpYmVyLnJldHVybiA9IG51bGw7XG4gICAgICBmaWJlci5kZXBlbmRlbmNpZXMgPSBudWxsO1xuICAgICAgZmliZXIubWVtb2l6ZWRQcm9wcyA9IG51bGw7XG4gICAgICBmaWJlci5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgIGZpYmVyLnBlbmRpbmdQcm9wcyA9IG51bGw7XG4gICAgICBmaWJlci5zdGF0ZU5vZGUgPSBudWxsO1xuICAgICAgZmliZXIudXBkYXRlUXVldWUgPSBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgZmluaXNoZWRSb290LFxuICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgIHBhcmVudFxuICAgICkge1xuICAgICAgZm9yIChwYXJlbnQgPSBwYXJlbnQuY2hpbGQ7IG51bGwgIT09IHBhcmVudDsgKVxuICAgICAgICBjb21taXREZWxldGlvbkVmZmVjdHNPbkZpYmVyKFxuICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgIHBhcmVudFxuICAgICAgICApLFxuICAgICAgICAgIChwYXJlbnQgPSBwYXJlbnQuc2libGluZyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdERlbGV0aW9uRWZmZWN0c09uRmliZXIoXG4gICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgZGVsZXRlZEZpYmVyXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGluamVjdGVkSG9vayAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclVubW91bnRcbiAgICAgIClcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclVubW91bnQocmVuZGVyZXJJRCwgZGVsZXRlZEZpYmVyKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaGFzTG9nZ2VkRXJyb3IgfHxcbiAgICAgICAgICAgICgoaGFzTG9nZ2VkRXJyb3IgPSAhMCksXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlJlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXNcIixcbiAgICAgICAgICAgICAgZXJyXG4gICAgICAgICAgICApKTtcbiAgICAgICAgfVxuICAgICAgdmFyIHByZXZFZmZlY3RTdGFydCA9IHB1c2hDb21wb25lbnRFZmZlY3RTdGFydCgpO1xuICAgICAgc3dpdGNoIChkZWxldGVkRmliZXIudGFnKSB7XG4gICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiB8fFxuICAgICAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGRlbGV0ZWRGaWJlciwgbmVhcmVzdE1vdW50ZWRBbmNlc3Rvcik7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURlbGV0aW9uRWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICBkZWxldGVkRmliZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGRlbGV0ZWRGaWJlci5tZW1vaXplZFN0YXRlXG4gICAgICAgICAgICA/IGRlbGV0ZWRGaWJlci5tZW1vaXplZFN0YXRlLmNvdW50LS1cbiAgICAgICAgICAgIDogZGVsZXRlZEZpYmVyLnN0YXRlTm9kZSAmJlxuICAgICAgICAgICAgICAoKGRlbGV0ZWRGaWJlciA9IGRlbGV0ZWRGaWJlci5zdGF0ZU5vZGUpLFxuICAgICAgICAgICAgICBkZWxldGVkRmliZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkZWxldGVkRmliZXIpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuIHx8XG4gICAgICAgICAgICBzYWZlbHlEZXRhY2hSZWYoZGVsZXRlZEZpYmVyLCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yKTtcbiAgICAgICAgICB2YXIgcHJldkhvc3RQYXJlbnQgPSBob3N0UGFyZW50LFxuICAgICAgICAgICAgcHJldkhvc3RQYXJlbnRJc0NvbnRhaW5lciA9IGhvc3RQYXJlbnRJc0NvbnRhaW5lcjtcbiAgICAgICAgICBpc1NpbmdsZXRvblNjb3BlKGRlbGV0ZWRGaWJlci50eXBlKSAmJlxuICAgICAgICAgICAgKChob3N0UGFyZW50ID0gZGVsZXRlZEZpYmVyLnN0YXRlTm9kZSksXG4gICAgICAgICAgICAoaG9zdFBhcmVudElzQ29udGFpbmVyID0gITEpKTtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgIGRlbGV0ZWRGaWJlclxuICAgICAgICAgICk7XG4gICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICBkZWxldGVkRmliZXIsXG4gICAgICAgICAgICByZWxlYXNlU2luZ2xldG9uSW5zdGFuY2UsXG4gICAgICAgICAgICBkZWxldGVkRmliZXIuc3RhdGVOb2RlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBob3N0UGFyZW50ID0gcHJldkhvc3RQYXJlbnQ7XG4gICAgICAgICAgaG9zdFBhcmVudElzQ29udGFpbmVyID0gcHJldkhvc3RQYXJlbnRJc0NvbnRhaW5lcjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gfHxcbiAgICAgICAgICAgIHNhZmVseURldGFjaFJlZihkZWxldGVkRmliZXIsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IpO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgcHJldkhvc3RQYXJlbnQgPSBob3N0UGFyZW50O1xuICAgICAgICAgIHByZXZIb3N0UGFyZW50SXNDb250YWluZXIgPSBob3N0UGFyZW50SXNDb250YWluZXI7XG4gICAgICAgICAgaG9zdFBhcmVudCA9IG51bGw7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURlbGV0aW9uRWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICBkZWxldGVkRmliZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGhvc3RQYXJlbnQgPSBwcmV2SG9zdFBhcmVudDtcbiAgICAgICAgICBob3N0UGFyZW50SXNDb250YWluZXIgPSBwcmV2SG9zdFBhcmVudElzQ29udGFpbmVyO1xuICAgICAgICAgIGlmIChudWxsICE9PSBob3N0UGFyZW50KVxuICAgICAgICAgICAgaWYgKGhvc3RQYXJlbnRJc0NvbnRhaW5lcilcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZWRGaWJlcixcbiAgICAgICAgICAgICAgICAgIHJlbW92ZUNoaWxkRnJvbUNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgIGhvc3RQYXJlbnQsXG4gICAgICAgICAgICAgICAgICBkZWxldGVkRmliZXIuc3RhdGVOb2RlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZWRGaWJlcixcbiAgICAgICAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZWRGaWJlcixcbiAgICAgICAgICAgICAgICAgIHJlbW92ZUNoaWxkLFxuICAgICAgICAgICAgICAgICAgaG9zdFBhcmVudCxcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZWRGaWJlci5zdGF0ZU5vZGVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKFxuICAgICAgICAgICAgICAgICAgZGVsZXRlZEZpYmVyLFxuICAgICAgICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgIG51bGwgIT09IGhvc3RQYXJlbnQgJiZcbiAgICAgICAgICAgIChob3N0UGFyZW50SXNDb250YWluZXJcbiAgICAgICAgICAgICAgPyAoKGZpbmlzaGVkUm9vdCA9IGhvc3RQYXJlbnQpLFxuICAgICAgICAgICAgICAgIGNsZWFySHlkcmF0aW9uQm91bmRhcnkoXG4gICAgICAgICAgICAgICAgICA5ID09PSBmaW5pc2hlZFJvb3Qubm9kZVR5cGVcbiAgICAgICAgICAgICAgICAgICAgPyBmaW5pc2hlZFJvb3QuYm9keVxuICAgICAgICAgICAgICAgICAgICA6IFwiSFRNTFwiID09PSBmaW5pc2hlZFJvb3Qubm9kZU5hbWVcbiAgICAgICAgICAgICAgICAgICAgICA/IGZpbmlzaGVkUm9vdC5vd25lckRvY3VtZW50LmJvZHlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZWRGaWJlci5zdGF0ZU5vZGVcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHJldHJ5SWZCbG9ja2VkT24oZmluaXNoZWRSb290KSlcbiAgICAgICAgICAgICAgOiBjbGVhckh5ZHJhdGlvbkJvdW5kYXJ5KGhvc3RQYXJlbnQsIGRlbGV0ZWRGaWJlci5zdGF0ZU5vZGUpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHByZXZIb3N0UGFyZW50ID0gaG9zdFBhcmVudDtcbiAgICAgICAgICBwcmV2SG9zdFBhcmVudElzQ29udGFpbmVyID0gaG9zdFBhcmVudElzQ29udGFpbmVyO1xuICAgICAgICAgIGhvc3RQYXJlbnQgPSBkZWxldGVkRmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICAgICAgaG9zdFBhcmVudElzQ29udGFpbmVyID0gITA7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURlbGV0aW9uRWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICBkZWxldGVkRmliZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGhvc3RQYXJlbnQgPSBwcmV2SG9zdFBhcmVudDtcbiAgICAgICAgICBob3N0UGFyZW50SXNDb250YWluZXIgPSBwcmV2SG9zdFBhcmVudElzQ29udGFpbmVyO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgIGNhc2UgMTQ6XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiB8fFxuICAgICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KFxuICAgICAgICAgICAgICBJbnNlcnRpb24sXG4gICAgICAgICAgICAgIGRlbGV0ZWRGaWJlcixcbiAgICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuIHx8XG4gICAgICAgICAgICBjb21taXRIb29rTGF5b3V0VW5tb3VudEVmZmVjdHMoXG4gICAgICAgICAgICAgIGRlbGV0ZWRGaWJlcixcbiAgICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgICAgTGF5b3V0XG4gICAgICAgICAgICApO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgZGVsZXRlZEZpYmVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gfHxcbiAgICAgICAgICAgIChzYWZlbHlEZXRhY2hSZWYoZGVsZXRlZEZpYmVyLCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yKSxcbiAgICAgICAgICAgIChwcmV2SG9zdFBhcmVudCA9IGRlbGV0ZWRGaWJlci5zdGF0ZU5vZGUpLFxuICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcHJldkhvc3RQYXJlbnQuY29tcG9uZW50V2lsbFVubW91bnQgJiZcbiAgICAgICAgICAgICAgc2FmZWx5Q2FsbENvbXBvbmVudFdpbGxVbm1vdW50KFxuICAgICAgICAgICAgICAgIGRlbGV0ZWRGaWJlcixcbiAgICAgICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgICAgIHByZXZIb3N0UGFyZW50XG4gICAgICAgICAgICAgICkpO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgZGVsZXRlZEZpYmVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgIGRlbGV0ZWRGaWJlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9XG4gICAgICAgICAgICAocHJldkhvc3RQYXJlbnQgPSBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuKSB8fFxuICAgICAgICAgICAgbnVsbCAhPT0gZGVsZXRlZEZpYmVyLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURlbGV0aW9uRWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICBkZWxldGVkRmliZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gPSBwcmV2SG9zdFBhcmVudDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgIGRlbGV0ZWRGaWJlclxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICBwb3BDb21wb25lbnRFZmZlY3RTdGFydChwcmV2RWZmZWN0U3RhcnQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRBY3Rpdml0eUh5ZHJhdGlvbkNhbGxiYWNrcyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yaykge1xuICAgICAgaWYgKFxuICAgICAgICBudWxsID09PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAoKGZpbmlzaGVkUm9vdCA9IGZpbmlzaGVkV29yay5hbHRlcm5hdGUpLFxuICAgICAgICBudWxsICE9PSBmaW5pc2hlZFJvb3QgJiZcbiAgICAgICAgICAoKGZpbmlzaGVkUm9vdCA9IGZpbmlzaGVkUm9vdC5tZW1vaXplZFN0YXRlKSwgbnVsbCAhPT0gZmluaXNoZWRSb290KSlcbiAgICAgICkge1xuICAgICAgICBmaW5pc2hlZFJvb3QgPSBmaW5pc2hlZFJvb3QuZGVoeWRyYXRlZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGNvbW1pdEh5ZHJhdGVkQWN0aXZpdHlJbnN0YW5jZSxcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdFxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0U3VzcGVuc2VIeWRyYXRpb25DYWxsYmFja3MoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspIHtcbiAgICAgIGlmIChcbiAgICAgICAgbnVsbCA9PT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgKChmaW5pc2hlZFJvb3QgPSBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlKSxcbiAgICAgICAgbnVsbCAhPT0gZmluaXNoZWRSb290ICYmXG4gICAgICAgICAgKChmaW5pc2hlZFJvb3QgPSBmaW5pc2hlZFJvb3QubWVtb2l6ZWRTdGF0ZSksXG4gICAgICAgICAgbnVsbCAhPT0gZmluaXNoZWRSb290ICYmXG4gICAgICAgICAgICAoKGZpbmlzaGVkUm9vdCA9IGZpbmlzaGVkUm9vdC5kZWh5ZHJhdGVkKSwgbnVsbCAhPT0gZmluaXNoZWRSb290KSkpXG4gICAgICApXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBjb21taXRIeWRyYXRlZFN1c3BlbnNlSW5zdGFuY2UsXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3RcbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFJldHJ5Q2FjaGUoZmluaXNoZWRXb3JrKSB7XG4gICAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICB2YXIgcmV0cnlDYWNoZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgbnVsbCA9PT0gcmV0cnlDYWNoZSAmJlxuICAgICAgICAgICAgKHJldHJ5Q2FjaGUgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlID0gbmV3IFBvc3NpYmx5V2Vha1NldCgpKTtcbiAgICAgICAgICByZXR1cm4gcmV0cnlDYWNoZTtcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGZpbmlzaGVkV29yayA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGUpLFxuICAgICAgICAgICAgKHJldHJ5Q2FjaGUgPSBmaW5pc2hlZFdvcmsuX3JldHJ5Q2FjaGUpLFxuICAgICAgICAgICAgbnVsbCA9PT0gcmV0cnlDYWNoZSAmJlxuICAgICAgICAgICAgICAocmV0cnlDYWNoZSA9IGZpbmlzaGVkV29yay5fcmV0cnlDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtTZXQoKSksXG4gICAgICAgICAgICByZXRyeUNhY2hlXG4gICAgICAgICAgKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIFwiVW5leHBlY3RlZCBTdXNwZW5zZSBoYW5kbGVyIHRhZyAoXCIgK1xuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsudGFnICtcbiAgICAgICAgICAgICAgXCIpLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyhmaW5pc2hlZFdvcmssIHdha2VhYmxlcykge1xuICAgICAgdmFyIHJldHJ5Q2FjaGUgPSBnZXRSZXRyeUNhY2hlKGZpbmlzaGVkV29yayk7XG4gICAgICB3YWtlYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAod2FrZWFibGUpIHtcbiAgICAgICAgdmFyIHJldHJ5ID0gcmVzb2x2ZVJldHJ5V2FrZWFibGUuYmluZChudWxsLCBmaW5pc2hlZFdvcmssIHdha2VhYmxlKTtcbiAgICAgICAgaWYgKCFyZXRyeUNhY2hlLmhhcyh3YWtlYWJsZSkpIHtcbiAgICAgICAgICByZXRyeUNhY2hlLmFkZCh3YWtlYWJsZSk7XG4gICAgICAgICAgaWYgKGlzRGV2VG9vbHNQcmVzZW50KVxuICAgICAgICAgICAgaWYgKG51bGwgIT09IGluUHJvZ3Jlc3NMYW5lcyAmJiBudWxsICE9PSBpblByb2dyZXNzUm9vdClcbiAgICAgICAgICAgICAgcmVzdG9yZVBlbmRpbmdVcGRhdGVycyhpblByb2dyZXNzUm9vdCwgaW5Qcm9ncmVzc0xhbmVzKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJFeHBlY3RlZCBmaW5pc2hlZCByb290IGFuZCBsYW5lcyB0byBiZSBzZXQuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB3YWtlYWJsZS50aGVuKHJldHJ5LCByZXRyeSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QkanNjb21wJDAsIHBhcmVudEZpYmVyKSB7XG4gICAgICB2YXIgZGVsZXRpb25zID0gcGFyZW50RmliZXIuZGVsZXRpb25zO1xuICAgICAgaWYgKG51bGwgIT09IGRlbGV0aW9ucylcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWxldGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgcm9vdCA9IHJvb3QkanNjb21wJDAsXG4gICAgICAgICAgICByZXR1cm5GaWJlciA9IHBhcmVudEZpYmVyLFxuICAgICAgICAgICAgZGVsZXRlZEZpYmVyID0gZGVsZXRpb25zW2ldLFxuICAgICAgICAgICAgcHJldkVmZmVjdFN0YXJ0ID0gcHVzaENvbXBvbmVudEVmZmVjdFN0YXJ0KCksXG4gICAgICAgICAgICBwYXJlbnQgPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICBhOiBmb3IgKDsgbnVsbCAhPT0gcGFyZW50OyApIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGFyZW50LnRhZykge1xuICAgICAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgICAgIGlmIChpc1NpbmdsZXRvblNjb3BlKHBhcmVudC50eXBlKSkge1xuICAgICAgICAgICAgICAgICAgaG9zdFBhcmVudCA9IHBhcmVudC5zdGF0ZU5vZGU7XG4gICAgICAgICAgICAgICAgICBob3N0UGFyZW50SXNDb250YWluZXIgPSAhMTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgaG9zdFBhcmVudCA9IHBhcmVudC5zdGF0ZU5vZGU7XG4gICAgICAgICAgICAgICAgaG9zdFBhcmVudElzQ29udGFpbmVyID0gITE7XG4gICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgaG9zdFBhcmVudCA9IHBhcmVudC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICAgICAgICBob3N0UGFyZW50SXNDb250YWluZXIgPSAhMDtcbiAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG51bGwgPT09IGhvc3RQYXJlbnQpXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgXCJFeHBlY3RlZCB0byBmaW5kIGEgaG9zdCBwYXJlbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY29tbWl0RGVsZXRpb25FZmZlY3RzT25GaWJlcihyb290LCByZXR1cm5GaWJlciwgZGVsZXRlZEZpYmVyKTtcbiAgICAgICAgICBob3N0UGFyZW50ID0gbnVsbDtcbiAgICAgICAgICBob3N0UGFyZW50SXNDb250YWluZXIgPSAhMTtcbiAgICAgICAgICBwb3BDb21wb25lbnRFZmZlY3RTdGFydChwcmV2RWZmZWN0U3RhcnQpO1xuICAgICAgICAgIHJvb3QgPSBkZWxldGVkRmliZXI7XG4gICAgICAgICAgcmV0dXJuRmliZXIgPSByb290LmFsdGVybmF0ZTtcbiAgICAgICAgICBudWxsICE9PSByZXR1cm5GaWJlciAmJiAocmV0dXJuRmliZXIucmV0dXJuID0gbnVsbCk7XG4gICAgICAgICAgcm9vdC5yZXR1cm4gPSBudWxsO1xuICAgICAgICB9XG4gICAgICBpZiAocGFyZW50RmliZXIuc3VidHJlZUZsYWdzICYgMTM4NzgpXG4gICAgICAgIGZvciAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5jaGlsZDsgbnVsbCAhPT0gcGFyZW50RmliZXI7IClcbiAgICAgICAgICBjb21taXRNdXRhdGlvbkVmZmVjdHNPbkZpYmVyKHBhcmVudEZpYmVyLCByb290JGpzY29tcCQwKSxcbiAgICAgICAgICAgIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnNpYmxpbmcpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRNdXRhdGlvbkVmZmVjdHNPbkZpYmVyKGZpbmlzaGVkV29yaywgcm9vdCkge1xuICAgICAgdmFyIHByZXZFZmZlY3RTdGFydCA9IHB1c2hDb21wb25lbnRFZmZlY3RTdGFydCgpLFxuICAgICAgICBjdXJyZW50ID0gZmluaXNoZWRXb3JrLmFsdGVybmF0ZSxcbiAgICAgICAgZmxhZ3MgPSBmaW5pc2hlZFdvcmsuZmxhZ3M7XG4gICAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDExOlxuICAgICAgICBjYXNlIDE0OlxuICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBmbGFncyAmIDQgJiZcbiAgICAgICAgICAgIChjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoXG4gICAgICAgICAgICAgIEluc2VydGlvbiB8IEhhc0VmZmVjdCxcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsucmV0dXJuXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChJbnNlcnRpb24gfCBIYXNFZmZlY3QsIGZpbmlzaGVkV29yayksXG4gICAgICAgICAgICBjb21taXRIb29rTGF5b3V0VW5tb3VudEVmZmVjdHMoXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnJldHVybixcbiAgICAgICAgICAgICAgTGF5b3V0IHwgSGFzRWZmZWN0XG4gICAgICAgICAgICApKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBmbGFncyAmIDUxMiAmJlxuICAgICAgICAgICAgKG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gfHxcbiAgICAgICAgICAgICAgbnVsbCA9PT0gY3VycmVudCB8fFxuICAgICAgICAgICAgICBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCwgY3VycmVudC5yZXR1cm4pKTtcbiAgICAgICAgICBmbGFncyAmIDY0ICYmXG4gICAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gJiZcbiAgICAgICAgICAgICgoZmluaXNoZWRXb3JrID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgICAgIG51bGwgIT09IGZpbmlzaGVkV29yayAmJlxuICAgICAgICAgICAgICAoKGZsYWdzID0gZmluaXNoZWRXb3JrLmNhbGxiYWNrcyksXG4gICAgICAgICAgICAgIG51bGwgIT09IGZsYWdzICYmXG4gICAgICAgICAgICAgICAgKChjdXJyZW50ID0gZmluaXNoZWRXb3JrLnNoYXJlZC5oaWRkZW5DYWxsYmFja3MpLFxuICAgICAgICAgICAgICAgIChmaW5pc2hlZFdvcmsuc2hhcmVkLmhpZGRlbkNhbGxiYWNrcyA9XG4gICAgICAgICAgICAgICAgICBudWxsID09PSBjdXJyZW50ID8gZmxhZ3MgOiBjdXJyZW50LmNvbmNhdChmbGFncykpKSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgIHZhciBob2lzdGFibGVSb290ID0gY3VycmVudEhvaXN0YWJsZVJvb3Q7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGZsYWdzICYgNTEyICYmXG4gICAgICAgICAgICAob2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiB8fFxuICAgICAgICAgICAgICBudWxsID09PSBjdXJyZW50IHx8XG4gICAgICAgICAgICAgIHNhZmVseURldGFjaFJlZihjdXJyZW50LCBjdXJyZW50LnJldHVybikpO1xuICAgICAgICAgIGlmIChmbGFncyAmIDQpIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50UmVzb3VyY2UgPVxuICAgICAgICAgICAgICBudWxsICE9PSBjdXJyZW50ID8gY3VycmVudC5tZW1vaXplZFN0YXRlIDogbnVsbDtcbiAgICAgICAgICAgIGZsYWdzID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgICBpZiAobnVsbCA9PT0gY3VycmVudClcbiAgICAgICAgICAgICAgaWYgKG51bGwgPT09IGZsYWdzKVxuICAgICAgICAgICAgICAgIGlmIChudWxsID09PSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlKSB7XG4gICAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGZsYWdzID0gZmluaXNoZWRXb3JrLnR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdCA9XG4gICAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdC5vd25lckRvY3VtZW50IHx8IGhvaXN0YWJsZVJvb3Q7XG4gICAgICAgICAgICAgICAgICAgIGI6IHN3aXRjaCAoZmxhZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwidGl0bGVcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZXNvdXJjZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJ0aXRsZVwiKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIWN1cnJlbnRSZXNvdXJjZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVzb3VyY2VbaW50ZXJuYWxIb2lzdGFibGVNYXJrZXJdIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZXNvdXJjZVtpbnRlcm5hbEluc3RhbmNlS2V5XSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVzb3VyY2UubmFtZXNwYWNlVVJJID09PSBTVkdfTkFNRVNQQUNFIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZXNvdXJjZS5oYXNBdHRyaWJ1dGUoXCJpdGVtcHJvcFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY3VycmVudFJlc291cmNlID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBob2lzdGFibGVSb290LmNyZWF0ZUVsZW1lbnQoZmxhZ3MpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBob2lzdGFibGVSb290LmhlYWQuaW5zZXJ0QmVmb3JlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlc291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdC5xdWVyeVNlbGVjdG9yKFwiaGVhZCA+IHRpdGxlXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKGN1cnJlbnRSZXNvdXJjZSwgZmxhZ3MsIGN1cnJlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlc291cmNlW2ludGVybmFsSW5zdGFuY2VLZXldID0gZmluaXNoZWRXb3JrO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShjdXJyZW50UmVzb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSBjdXJyZW50UmVzb3VyY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJsaW5rXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF5YmVOb2RlcyA9IGdldEh5ZHJhdGFibGVIb2lzdGFibGVDYWNoZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsaW5rXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiaHJlZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBob2lzdGFibGVSb290XG4gICAgICAgICAgICAgICAgICAgICAgICApLmdldChmbGFncyArIChjdXJyZW50LmhyZWYgfHwgXCJcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1heWJlTm9kZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF5YmVOb2Rlcy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGN1cnJlbnRSZXNvdXJjZSA9IG1heWJlTm9kZXNbaV0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlc291cmNlLmdldEF0dHJpYnV0ZShcImhyZWZcIikgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudWxsID09IGN1cnJlbnQuaHJlZiB8fCBcIlwiID09PSBjdXJyZW50LmhyZWZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnQuaHJlZikgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlc291cmNlLmdldEF0dHJpYnV0ZShcInJlbFwiKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobnVsbCA9PSBjdXJyZW50LnJlbCA/IG51bGwgOiBjdXJyZW50LnJlbCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlc291cmNlLmdldEF0dHJpYnV0ZShcInRpdGxlXCIpID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudWxsID09IGN1cnJlbnQudGl0bGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50LnRpdGxlKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVzb3VyY2UuZ2V0QXR0cmlidXRlKFwiY3Jvc3NvcmlnaW5cIikgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG51bGwgPT0gY3VycmVudC5jcm9zc09yaWdpblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnQuY3Jvc3NPcmlnaW4pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5YmVOb2Rlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZXNvdXJjZSA9IGhvaXN0YWJsZVJvb3QuY3JlYXRlRWxlbWVudChmbGFncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRJbml0aWFsUHJvcGVydGllcyhjdXJyZW50UmVzb3VyY2UsIGZsYWdzLCBjdXJyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QuaGVhZC5hcHBlbmRDaGlsZChjdXJyZW50UmVzb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIm1ldGFcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG1heWJlTm9kZXMgPSBnZXRIeWRyYXRhYmxlSG9pc3RhYmxlQ2FjaGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtZXRhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb250ZW50XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdFxuICAgICAgICAgICAgICAgICAgICAgICAgICApLmdldChmbGFncyArIChjdXJyZW50LmNvbnRlbnQgfHwgXCJcIikpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbWF5YmVOb2Rlcy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGN1cnJlbnRSZXNvdXJjZSA9IG1heWJlTm9kZXNbaV0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC5jb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZXNvdXJjZS5nZXRBdHRyaWJ1dGUoXCJjb250ZW50XCIpID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobnVsbCA9PSBjdXJyZW50LmNvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiXCIgKyBjdXJyZW50LmNvbnRlbnQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZXNvdXJjZS5nZXRBdHRyaWJ1dGUoXCJuYW1lXCIpID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudWxsID09IGN1cnJlbnQubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnQubmFtZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlc291cmNlLmdldEF0dHJpYnV0ZShcInByb3BlcnR5XCIpID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudWxsID09IGN1cnJlbnQucHJvcGVydHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50LnByb3BlcnR5KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVzb3VyY2UuZ2V0QXR0cmlidXRlKFwiaHR0cC1lcXVpdlwiKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobnVsbCA9PSBjdXJyZW50Lmh0dHBFcXVpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnQuaHR0cEVxdWl2KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVzb3VyY2UuZ2V0QXR0cmlidXRlKFwiY2hhcnNldFwiKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobnVsbCA9PSBjdXJyZW50LmNoYXJTZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50LmNoYXJTZXQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5YmVOb2Rlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZXNvdXJjZSA9IGhvaXN0YWJsZVJvb3QuY3JlYXRlRWxlbWVudChmbGFncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRJbml0aWFsUHJvcGVydGllcyhjdXJyZW50UmVzb3VyY2UsIGZsYWdzLCBjdXJyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QuaGVhZC5hcHBlbmRDaGlsZChjdXJyZW50UmVzb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0Tm9kZXNGb3JUeXBlIGVuY291bnRlcmVkIGEgdHlwZSBpdCBkaWQgbm90IGV4cGVjdDogXCInICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1wiLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LidcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlc291cmNlW2ludGVybmFsSW5zdGFuY2VLZXldID0gZmluaXNoZWRXb3JrO1xuICAgICAgICAgICAgICAgICAgICBtYXJrTm9kZUFzSG9pc3RhYmxlKGN1cnJlbnRSZXNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgIGZsYWdzID0gY3VycmVudFJlc291cmNlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnN0YXRlTm9kZSA9IGZsYWdzO1xuICAgICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgICAgbW91bnRIb2lzdGFibGUoXG4gICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QsXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yay50eXBlLFxuICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnN0YXRlTm9kZSA9IGFjcXVpcmVSZXNvdXJjZShcbiAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QsXG4gICAgICAgICAgICAgICAgICBmbGFncyxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgY3VycmVudFJlc291cmNlICE9PSBmbGFnc1xuICAgICAgICAgICAgICAgID8gKG51bGwgPT09IGN1cnJlbnRSZXNvdXJjZVxuICAgICAgICAgICAgICAgICAgICA/IG51bGwgIT09IGN1cnJlbnQuc3RhdGVOb2RlICYmXG4gICAgICAgICAgICAgICAgICAgICAgKChjdXJyZW50ID0gY3VycmVudC5zdGF0ZU5vZGUpLFxuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjdXJyZW50KSlcbiAgICAgICAgICAgICAgICAgICAgOiBjdXJyZW50UmVzb3VyY2UuY291bnQtLSxcbiAgICAgICAgICAgICAgICAgIG51bGwgPT09IGZsYWdzXG4gICAgICAgICAgICAgICAgICAgID8gbW91bnRIb2lzdGFibGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBob2lzdGFibGVSb290LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IGFjcXVpcmVSZXNvdXJjZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QsXG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFncyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzXG4gICAgICAgICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgICA6IG51bGwgPT09IGZsYWdzICYmXG4gICAgICAgICAgICAgICAgICBudWxsICE9PSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlICYmXG4gICAgICAgICAgICAgICAgICBjb21taXRIb3N0VXBkYXRlKFxuICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Lm1lbW9pemVkUHJvcHNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBmbGFncyAmIDUxMiAmJlxuICAgICAgICAgICAgKG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gfHxcbiAgICAgICAgICAgICAgbnVsbCA9PT0gY3VycmVudCB8fFxuICAgICAgICAgICAgICBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCwgY3VycmVudC5yZXR1cm4pKTtcbiAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgICBmbGFncyAmIDQgJiZcbiAgICAgICAgICAgIGNvbW1pdEhvc3RVcGRhdGUoXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMsXG4gICAgICAgICAgICAgIGN1cnJlbnQubWVtb2l6ZWRQcm9wc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBmbGFncyAmIDUxMiAmJlxuICAgICAgICAgICAgKG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gfHxcbiAgICAgICAgICAgICAgbnVsbCA9PT0gY3VycmVudCB8fFxuICAgICAgICAgICAgICBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCwgY3VycmVudC5yZXR1cm4pKTtcbiAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLmZsYWdzICYgMzIpIHtcbiAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoZmluaXNoZWRXb3JrLCByZXNldFRleHRDb250ZW50LCBob2lzdGFibGVSb290KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmbGFncyAmIDQgJiZcbiAgICAgICAgICAgIG51bGwgIT0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZSAmJlxuICAgICAgICAgICAgKChob2lzdGFibGVSb290ID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMpLFxuICAgICAgICAgICAgY29tbWl0SG9zdFVwZGF0ZShcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICBob2lzdGFibGVSb290LFxuICAgICAgICAgICAgICBudWxsICE9PSBjdXJyZW50ID8gY3VycmVudC5tZW1vaXplZFByb3BzIDogaG9pc3RhYmxlUm9vdFxuICAgICAgICAgICAgKSk7XG4gICAgICAgICAgZmxhZ3MgJiAxMDI0ICYmXG4gICAgICAgICAgICAoKG5lZWRzRm9ybVJlc2V0ID0gITApLFxuICAgICAgICAgICAgXCJmb3JtXCIgIT09IGZpbmlzaGVkV29yay50eXBlICYmXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJVbmV4cGVjdGVkIGhvc3QgY29tcG9uZW50IHR5cGUuIEV4cGVjdGVkIGEgZm9ybS4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICAgICApKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBpZiAoZmxhZ3MgJiA0KSB7XG4gICAgICAgICAgICBpZiAobnVsbCA9PT0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZSlcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJUaGlzIHNob3VsZCBoYXZlIGEgdGV4dCBub2RlIGluaXRpYWxpemVkLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBmbGFncyA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzO1xuICAgICAgICAgICAgY3VycmVudCA9IG51bGwgIT09IGN1cnJlbnQgPyBjdXJyZW50Lm1lbW9pemVkUHJvcHMgOiBmbGFncztcbiAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgIGNvbW1pdFRleHRVcGRhdGUsXG4gICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdCxcbiAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgIGZsYWdzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBob2lzdGFibGVSb290ID0gcHVzaE5lc3RlZEVmZmVjdER1cmF0aW9ucygpO1xuICAgICAgICAgIHRhZ0NhY2hlcyA9IG51bGw7XG4gICAgICAgICAgY3VycmVudFJlc291cmNlID0gY3VycmVudEhvaXN0YWJsZVJvb3Q7XG4gICAgICAgICAgY3VycmVudEhvaXN0YWJsZVJvb3QgPSBnZXRIb2lzdGFibGVSb290KHJvb3QuY29udGFpbmVySW5mbyk7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGN1cnJlbnRIb2lzdGFibGVSb290ID0gY3VycmVudFJlc291cmNlO1xuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZsYWdzICYgNCAmJlxuICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAgICAgY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZFxuICAgICAgICAgIClcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICBjb21taXRIeWRyYXRlZENvbnRhaW5lcixcbiAgICAgICAgICAgICAgICByb290LmNvbnRhaW5lckluZm9cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIG5lZWRzRm9ybVJlc2V0ICYmXG4gICAgICAgICAgICAoKG5lZWRzRm9ybVJlc2V0ID0gITEpLCByZWN1cnNpdmVseVJlc2V0Rm9ybXMoZmluaXNoZWRXb3JrKSk7XG4gICAgICAgICAgcm9vdC5lZmZlY3REdXJhdGlvbiArPSBwb3BOZXN0ZWRFZmZlY3REdXJhdGlvbnMoaG9pc3RhYmxlUm9vdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBmbGFncyA9IGN1cnJlbnRIb2lzdGFibGVSb290O1xuICAgICAgICAgIGN1cnJlbnRIb2lzdGFibGVSb290ID0gZ2V0SG9pc3RhYmxlUm9vdChcbiAgICAgICAgICAgIGZpbmlzaGVkV29yay5zdGF0ZU5vZGUuY29udGFpbmVySW5mb1xuICAgICAgICAgICk7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGN1cnJlbnRIb2lzdGFibGVSb290ID0gZmxhZ3M7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgZmxhZ3MgPSBwdXNoTmVzdGVkRWZmZWN0RHVyYXRpb25zKCk7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGZpbmlzaGVkV29yay5zdGF0ZU5vZGUuZWZmZWN0RHVyYXRpb24gKz1cbiAgICAgICAgICAgIGJ1YmJsZU5lc3RlZEVmZmVjdER1cmF0aW9ucyhmbGFncyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzE6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGZsYWdzICYgNCAmJlxuICAgICAgICAgICAgKChmbGFncyA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSksXG4gICAgICAgICAgICBudWxsICE9PSBmbGFncyAmJlxuICAgICAgICAgICAgICAoKGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSA9IG51bGwpLFxuICAgICAgICAgICAgICBhdHRhY2hTdXNwZW5zZVJldHJ5TGlzdGVuZXJzKGZpbmlzaGVkV29yaywgZmxhZ3MpKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGZpbmlzaGVkV29yay5jaGlsZC5mbGFncyAmIDgxOTIgJiZcbiAgICAgICAgICAgIChudWxsICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSkgIT09XG4gICAgICAgICAgICAgIChudWxsICE9PSBjdXJyZW50ICYmIG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkgJiZcbiAgICAgICAgICAgIChnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lID0gbm93JDEoKSk7XG4gICAgICAgICAgZmxhZ3MgJiA0ICYmXG4gICAgICAgICAgICAoKGZsYWdzID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgICAgIG51bGwgIT09IGZsYWdzICYmXG4gICAgICAgICAgICAgICgoZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlID0gbnVsbCksXG4gICAgICAgICAgICAgIGF0dGFjaFN1c3BlbnNlUmV0cnlMaXN0ZW5lcnMoZmluaXNoZWRXb3JrLCBmbGFncykpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICBob2lzdGFibGVSb290ID0gbnVsbCAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgdmFyIHdhc0hpZGRlbiA9IG51bGwgIT09IGN1cnJlbnQgJiYgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlLFxuICAgICAgICAgICAgcHJldk9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiA9IG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbixcbiAgICAgICAgICAgIHByZXZPZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID0gb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbjtcbiAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gPVxuICAgICAgICAgICAgcHJldk9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiB8fCBob2lzdGFibGVSb290O1xuICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gPVxuICAgICAgICAgICAgcHJldk9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gfHwgd2FzSGlkZGVuO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID0gcHJldk9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW47XG4gICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuID0gcHJldk9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbjtcbiAgICAgICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBpZiAoZmxhZ3MgJiA4MTkyKVxuICAgICAgICAgICAgYTogZm9yIChcbiAgICAgICAgICAgICAgcm9vdCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGUsXG4gICAgICAgICAgICAgICAgcm9vdC5fdmlzaWJpbGl0eSA9IGhvaXN0YWJsZVJvb3RcbiAgICAgICAgICAgICAgICAgID8gcm9vdC5fdmlzaWJpbGl0eSAmIH5PZmZzY3JlZW5WaXNpYmxlXG4gICAgICAgICAgICAgICAgICA6IHJvb3QuX3Zpc2liaWxpdHkgfCBPZmZzY3JlZW5WaXNpYmxlLFxuICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QgJiZcbiAgICAgICAgICAgICAgICAgIChudWxsID09PSBjdXJyZW50IHx8XG4gICAgICAgICAgICAgICAgICAgIHdhc0hpZGRlbiB8fFxuICAgICAgICAgICAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gfHxcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiB8fFxuICAgICAgICAgICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGlzYXBwZWFyTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFdvcmspKSxcbiAgICAgICAgICAgICAgICBjdXJyZW50ID0gbnVsbCxcbiAgICAgICAgICAgICAgICByb290ID0gZmluaXNoZWRXb3JrO1xuICAgICAgICAgICAgICA7XG5cbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpZiAoNSA9PT0gcm9vdC50YWcgfHwgMjYgPT09IHJvb3QudGFnKSB7XG4gICAgICAgICAgICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICAgIHdhc0hpZGRlbiA9IGN1cnJlbnQgPSByb290O1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnRSZXNvdXJjZSA9IHdhc0hpZGRlbi5zdGF0ZU5vZGUpLFxuICAgICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3RcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FzSGlkZGVuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVJbnN0YW5jZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXNIaWRkZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5oaWRlSW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FzSGlkZGVuLnN0YXRlTm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXNIaWRkZW4ubWVtb2l6ZWRQcm9wc1xuICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3Iod2FzSGlkZGVuLCB3YXNIaWRkZW4ucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKDYgPT09IHJvb3QudGFnKSB7XG4gICAgICAgICAgICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICAgIHdhc0hpZGRlbiA9IHJvb3Q7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAobWF5YmVOb2RlcyA9IHdhc0hpZGRlbi5zdGF0ZU5vZGUpLFxuICAgICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3RcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FzSGlkZGVuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVUZXh0SW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5YmVOb2Rlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhc0hpZGRlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmhpZGVUZXh0SW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5YmVOb2RlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXNIaWRkZW4ubWVtb2l6ZWRQcm9wc1xuICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3Iod2FzSGlkZGVuLCB3YXNIaWRkZW4ucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKDE4ID09PSByb290LnRhZykge1xuICAgICAgICAgICAgICAgIGlmIChudWxsID09PSBjdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgICB3YXNIaWRkZW4gPSByb290O1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgKGkgPSB3YXNIaWRkZW4uc3RhdGVOb2RlKSxcbiAgICAgICAgICAgICAgICAgICAgICBob2lzdGFibGVSb290XG4gICAgICAgICAgICAgICAgICAgICAgICA/IHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhc0hpZGRlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlRGVoeWRyYXRlZEJvdW5kYXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXNIaWRkZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5oaWRlRGVoeWRyYXRlZEJvdW5kYXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhc0hpZGRlbi5zdGF0ZU5vZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKHdhc0hpZGRlbiwgd2FzSGlkZGVuLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAoKDIyICE9PSByb290LnRhZyAmJiAyMyAhPT0gcm9vdC50YWcpIHx8XG4gICAgICAgICAgICAgICAgICBudWxsID09PSByb290Lm1lbW9pemVkU3RhdGUgfHxcbiAgICAgICAgICAgICAgICAgIHJvb3QgPT09IGZpbmlzaGVkV29yaykgJiZcbiAgICAgICAgICAgICAgICBudWxsICE9PSByb290LmNoaWxkXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJvb3QuY2hpbGQucmV0dXJuID0gcm9vdDtcbiAgICAgICAgICAgICAgICByb290ID0gcm9vdC5jaGlsZDtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocm9vdCA9PT0gZmluaXNoZWRXb3JrKSBicmVhayBhO1xuICAgICAgICAgICAgICBmb3IgKDsgbnVsbCA9PT0gcm9vdC5zaWJsaW5nOyApIHtcbiAgICAgICAgICAgICAgICBpZiAobnVsbCA9PT0gcm9vdC5yZXR1cm4gfHwgcm9vdC5yZXR1cm4gPT09IGZpbmlzaGVkV29yaylcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgY3VycmVudCA9PT0gcm9vdCAmJiAoY3VycmVudCA9IG51bGwpO1xuICAgICAgICAgICAgICAgIHJvb3QgPSByb290LnJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjdXJyZW50ID09PSByb290ICYmIChjdXJyZW50ID0gbnVsbCk7XG4gICAgICAgICAgICAgIHJvb3Quc2libGluZy5yZXR1cm4gPSByb290LnJldHVybjtcbiAgICAgICAgICAgICAgcm9vdCA9IHJvb3Quc2libGluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBmbGFncyAmIDQgJiZcbiAgICAgICAgICAgICgoZmxhZ3MgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWUpLFxuICAgICAgICAgICAgbnVsbCAhPT0gZmxhZ3MgJiZcbiAgICAgICAgICAgICAgKChjdXJyZW50ID0gZmxhZ3MucmV0cnlRdWV1ZSksXG4gICAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgICAoKGZsYWdzLnJldHJ5UXVldWUgPSBudWxsKSxcbiAgICAgICAgICAgICAgICBhdHRhY2hTdXNwZW5zZVJldHJ5TGlzdGVuZXJzKGZpbmlzaGVkV29yaywgY3VycmVudCkpKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGZsYWdzICYgNCAmJlxuICAgICAgICAgICAgKChmbGFncyA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSksXG4gICAgICAgICAgICBudWxsICE9PSBmbGFncyAmJlxuICAgICAgICAgICAgICAoKGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSA9IG51bGwpLFxuICAgICAgICAgICAgICBhdHRhY2hTdXNwZW5zZVJldHJ5TGlzdGVuZXJzKGZpbmlzaGVkV29yaywgZmxhZ3MpKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzA6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspLFxuICAgICAgICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICB9XG4gICAgICBwb3BDb21wb25lbnRFZmZlY3RTdGFydChwcmV2RWZmZWN0U3RhcnQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKSB7XG4gICAgICB2YXIgZmxhZ3MgPSBmaW5pc2hlZFdvcmsuZmxhZ3M7XG4gICAgICBpZiAoZmxhZ3MgJiAyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoZmluaXNoZWRXb3JrLCBjb21taXRQbGFjZW1lbnQsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZmluaXNoZWRXb3JrLmZsYWdzICY9IC0zO1xuICAgICAgfVxuICAgICAgZmxhZ3MgJiA0MDk2ICYmIChmaW5pc2hlZFdvcmsuZmxhZ3MgJj0gLTQwOTcpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWN1cnNpdmVseVJlc2V0Rm9ybXMocGFyZW50RmliZXIpIHtcbiAgICAgIGlmIChwYXJlbnRGaWJlci5zdWJ0cmVlRmxhZ3MgJiAxMDI0KVxuICAgICAgICBmb3IgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuY2hpbGQ7IG51bGwgIT09IHBhcmVudEZpYmVyOyApIHtcbiAgICAgICAgICB2YXIgZmliZXIgPSBwYXJlbnRGaWJlcjtcbiAgICAgICAgICByZWN1cnNpdmVseVJlc2V0Rm9ybXMoZmliZXIpO1xuICAgICAgICAgIDUgPT09IGZpYmVyLnRhZyAmJiBmaWJlci5mbGFncyAmIDEwMjQgJiYgZmliZXIuc3RhdGVOb2RlLnJlc2V0KCk7XG4gICAgICAgICAgcGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5zaWJsaW5nO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKHJvb3QsIHBhcmVudEZpYmVyKSB7XG4gICAgICBpZiAocGFyZW50RmliZXIuc3VidHJlZUZsYWdzICYgODc3MilcbiAgICAgICAgZm9yIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLmNoaWxkOyBudWxsICE9PSBwYXJlbnRGaWJlcjsgKVxuICAgICAgICAgIGNvbW1pdExheW91dEVmZmVjdE9uRmliZXIocm9vdCwgcGFyZW50RmliZXIuYWx0ZXJuYXRlLCBwYXJlbnRGaWJlciksXG4gICAgICAgICAgICAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5zaWJsaW5nKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGlzYXBwZWFyTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFdvcmspIHtcbiAgICAgIHZhciBwcmV2RWZmZWN0U3RhcnQgPSBwdXNoQ29tcG9uZW50RWZmZWN0U3RhcnQoKTtcbiAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgIGNhc2UgMTQ6XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgY29tbWl0SG9va0xheW91dFVubW91bnRFZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLnJldHVybixcbiAgICAgICAgICAgIExheW91dFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2FwcGVhckxheW91dEVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHNhZmVseURldGFjaFJlZihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4pO1xuICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVubW91bnQgJiZcbiAgICAgICAgICAgIHNhZmVseUNhbGxDb21wb25lbnRXaWxsVW5tb3VudChcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsucmV0dXJuLFxuICAgICAgICAgICAgICBpbnN0YW5jZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGlzYXBwZWFyTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgcmVsZWFzZVNpbmdsZXRvbkluc3RhbmNlLFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLnN0YXRlTm9kZVxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMjY6XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBzYWZlbHlEZXRhY2hSZWYoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGlzYXBwZWFyTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIG51bGwgPT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGlzYXBwZWFyTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMwOlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNhcHBlYXJMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2FwcGVhckxheW91dEVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgIH1cbiAgICAgIHBvcENvbXBvbmVudEVmZmVjdFN0YXJ0KHByZXZFZmZlY3RTdGFydCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNhcHBlYXJMYXlvdXRFZmZlY3RzKHBhcmVudEZpYmVyKSB7XG4gICAgICBmb3IgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuY2hpbGQ7IG51bGwgIT09IHBhcmVudEZpYmVyOyApXG4gICAgICAgIGRpc2FwcGVhckxheW91dEVmZmVjdHMocGFyZW50RmliZXIpLFxuICAgICAgICAgIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnNpYmxpbmcpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFwcGVhckxheW91dEVmZmVjdHMoXG4gICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICBjdXJyZW50LFxuICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICkge1xuICAgICAgdmFyIHByZXZFZmZlY3RTdGFydCA9IHB1c2hDb21wb25lbnRFZmZlY3RTdGFydCgpLFxuICAgICAgICBmbGFncyA9IGZpbmlzaGVkV29yay5mbGFncztcbiAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbW1pdEhvb2tMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yaywgTGF5b3V0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjdXJyZW50ID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjdXJyZW50LmNvbXBvbmVudERpZE1vdW50ICYmXG4gICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICBjYWxsQ29tcG9uZW50RGlkTW91bnRJbkRFVixcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICBjdXJyZW50XG4gICAgICAgICAgICApO1xuICAgICAgICAgIGN1cnJlbnQgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG4gICAgICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnQpIHtcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgY29tbWl0SGlkZGVuQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgZmluaXNoZWRSb290XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cyAmJlxuICAgICAgICAgICAgZmxhZ3MgJiA2NCAmJlxuICAgICAgICAgICAgY29tbWl0Q2xhc3NDYWxsYmFja3MoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBzYWZlbHlBdHRhY2hSZWYoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICBjb21taXRIb3N0U2luZ2xldG9uQWNxdWlzaXRpb24oZmluaXNoZWRXb3JrKTtcbiAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzICYmXG4gICAgICAgICAgICBudWxsID09PSBjdXJyZW50ICYmXG4gICAgICAgICAgICBmbGFncyAmIDQgJiZcbiAgICAgICAgICAgIGNvbW1pdEhvc3RNb3VudChmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIHNhZmVseUF0dGFjaFJlZihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgIGlmIChpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzICYmIGZsYWdzICYgNCkge1xuICAgICAgICAgICAgZmxhZ3MgPSBwdXNoTmVzdGVkRWZmZWN0RHVyYXRpb25zKCk7XG4gICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVhcHBlYXJMYXlvdXRFZmZlY3RzKFxuICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cy5lZmZlY3REdXJhdGlvbiArPVxuICAgICAgICAgICAgICBidWJibGVOZXN0ZWRFZmZlY3REdXJhdGlvbnMoZmxhZ3MpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgIGNvbW1pdFByb2ZpbGVyLFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgIGNvbW1pdFN0YXJ0VGltZSxcbiAgICAgICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzLmVmZmVjdER1cmF0aW9uXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMoXG4gICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzICYmXG4gICAgICAgICAgICBmbGFncyAmIDQgJiZcbiAgICAgICAgICAgIGNvbW1pdEFjdGl2aXR5SHlkcmF0aW9uQ2FsbGJhY2tzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVhcHBlYXJMYXlvdXRFZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICAgICAgICk7XG4gICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cyAmJlxuICAgICAgICAgICAgZmxhZ3MgJiA0ICYmXG4gICAgICAgICAgICBjb21taXRTdXNwZW5zZUh5ZHJhdGlvbkNhbGxiYWNrcyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgbnVsbCA9PT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMoXG4gICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHNhZmVseUF0dGFjaFJlZihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDMwOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHBvcENvbXBvbmVudEVmZmVjdFN0YXJ0KHByZXZFZmZlY3RTdGFydCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMoXG4gICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICBwYXJlbnRGaWJlcixcbiAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICApIHtcbiAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMgPVxuICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzICYmIDAgIT09IChwYXJlbnRGaWJlci5zdWJ0cmVlRmxhZ3MgJiA4NzcyKTtcbiAgICAgIGZvciAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5jaGlsZDsgbnVsbCAhPT0gcGFyZW50RmliZXI7IClcbiAgICAgICAgcmVhcHBlYXJMYXlvdXRFZmZlY3RzKFxuICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICBwYXJlbnRGaWJlci5hbHRlcm5hdGUsXG4gICAgICAgICAgcGFyZW50RmliZXIsXG4gICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICAgICApLFxuICAgICAgICAgIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnNpYmxpbmcpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRPZmZzY3JlZW5QYXNzaXZlTW91bnRFZmZlY3RzKGN1cnJlbnQsIGZpbmlzaGVkV29yaykge1xuICAgICAgdmFyIHByZXZpb3VzQ2FjaGUgPSBudWxsO1xuICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCAmJlxuICAgICAgICAocHJldmlvdXNDYWNoZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wucG9vbCk7XG4gICAgICBjdXJyZW50ID0gbnVsbDtcbiAgICAgIG51bGwgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgIG51bGwgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCAmJlxuICAgICAgICAoY3VycmVudCA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKTtcbiAgICAgIGN1cnJlbnQgIT09IHByZXZpb3VzQ2FjaGUgJiZcbiAgICAgICAgKG51bGwgIT0gY3VycmVudCAmJiByZXRhaW5DYWNoZShjdXJyZW50KSxcbiAgICAgICAgbnVsbCAhPSBwcmV2aW91c0NhY2hlICYmIHJlbGVhc2VDYWNoZShwcmV2aW91c0NhY2hlKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdENhY2hlUGFzc2l2ZU1vdW50RWZmZWN0KGN1cnJlbnQsIGZpbmlzaGVkV29yaykge1xuICAgICAgY3VycmVudCA9IG51bGw7XG4gICAgICBudWxsICE9PSBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlICYmXG4gICAgICAgIChjdXJyZW50ID0gZmluaXNoZWRXb3JrLmFsdGVybmF0ZS5tZW1vaXplZFN0YXRlLmNhY2hlKTtcbiAgICAgIGZpbmlzaGVkV29yayA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlLmNhY2hlO1xuICAgICAgZmluaXNoZWRXb3JrICE9PSBjdXJyZW50ICYmXG4gICAgICAgIChyZXRhaW5DYWNoZShmaW5pc2hlZFdvcmspLCBudWxsICE9IGN1cnJlbnQgJiYgcmVsZWFzZUNhY2hlKGN1cnJlbnQpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVNb3VudEVmZmVjdHMoXG4gICAgICByb290LFxuICAgICAgcGFyZW50RmliZXIsXG4gICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zXG4gICAgKSB7XG4gICAgICBpZiAocGFyZW50RmliZXIuc3VidHJlZUZsYWdzICYgMTAyNTYpXG4gICAgICAgIGZvciAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5jaGlsZDsgbnVsbCAhPT0gcGFyZW50RmliZXI7IClcbiAgICAgICAgICBjb21taXRQYXNzaXZlTW91bnRPbkZpYmVyKFxuICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgIHBhcmVudEZpYmVyLFxuICAgICAgICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9uc1xuICAgICAgICAgICksXG4gICAgICAgICAgICAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5zaWJsaW5nKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0UGFzc2l2ZU1vdW50T25GaWJlcihcbiAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnNcbiAgICApIHtcbiAgICAgIHZhciBwcmV2RWZmZWN0U3RhcnQgPSBwdXNoQ29tcG9uZW50RWZmZWN0U3RhcnQoKSxcbiAgICAgICAgZmxhZ3MgPSBmaW5pc2hlZFdvcmsuZmxhZ3M7XG4gICAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDExOlxuICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9uc1xuICAgICAgICAgICk7XG4gICAgICAgICAgZmxhZ3MgJiAyMDQ4ICYmXG4gICAgICAgICAgICBjb21taXRIb29rUGFzc2l2ZU1vdW50RWZmZWN0cyhmaW5pc2hlZFdvcmssIFBhc3NpdmUgfCBIYXNFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVNb3VudEVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgICAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHZhciBwcmV2UHJvZmlsZXJFZmZlY3REdXJhdGlvbiA9IHB1c2hOZXN0ZWRFZmZlY3REdXJhdGlvbnMoKTtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnNcbiAgICAgICAgICApO1xuICAgICAgICAgIGZsYWdzICYgMjA0OCAmJlxuICAgICAgICAgICAgKChjb21taXR0ZWRMYW5lcyA9IG51bGwpLFxuICAgICAgICAgICAgbnVsbCAhPT0gZmluaXNoZWRXb3JrLmFsdGVybmF0ZSAmJlxuICAgICAgICAgICAgICAoY29tbWl0dGVkTGFuZXMgPSBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUuY2FjaGUpLFxuICAgICAgICAgICAgKGZpbmlzaGVkV29yayA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlLmNhY2hlKSxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayAhPT0gY29tbWl0dGVkTGFuZXMgJiZcbiAgICAgICAgICAgICAgKHJldGFpbkNhY2hlKGZpbmlzaGVkV29yayksXG4gICAgICAgICAgICAgIG51bGwgIT0gY29tbWl0dGVkTGFuZXMgJiYgcmVsZWFzZUNhY2hlKGNvbW1pdHRlZExhbmVzKSkpO1xuICAgICAgICAgIGZpbmlzaGVkUm9vdC5wYXNzaXZlRWZmZWN0RHVyYXRpb24gKz0gcG9wTmVzdGVkRWZmZWN0RHVyYXRpb25zKFxuICAgICAgICAgICAgcHJldlByb2ZpbGVyRWZmZWN0RHVyYXRpb25cbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgIGlmIChmbGFncyAmIDIwNDgpIHtcbiAgICAgICAgICAgIGZsYWdzID0gcHVzaE5lc3RlZEVmZmVjdER1cmF0aW9ucygpO1xuICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVNb3VudEVmZmVjdHMoXG4gICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgICAgICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICAgICAgZmluaXNoZWRSb290LnBhc3NpdmVFZmZlY3REdXJhdGlvbiArPVxuICAgICAgICAgICAgICBidWJibGVOZXN0ZWRFZmZlY3REdXJhdGlvbnMoZmxhZ3MpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgIGNvbW1pdFByb2ZpbGVyUG9zdENvbW1pdEltcGwsXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yay5hbHRlcm5hdGUsXG4gICAgICAgICAgICAgICAgY29tbWl0U3RhcnRUaW1lLFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdC5wYXNzaXZlRWZmZWN0RHVyYXRpb25cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVNb3VudEVmZmVjdHMoXG4gICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgICAgICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzE6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVNb3VudEVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgICAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnNcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIHByZXZQcm9maWxlckVmZmVjdER1cmF0aW9uID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICB2YXIgX2N1cnJlbnQgPSBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlO1xuICAgICAgICAgIG51bGwgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlXG4gICAgICAgICAgICA/IHByZXZQcm9maWxlckVmZmVjdER1cmF0aW9uLl92aXNpYmlsaXR5ICZcbiAgICAgICAgICAgICAgT2Zmc2NyZWVuUGFzc2l2ZUVmZmVjdHNDb25uZWN0ZWRcbiAgICAgICAgICAgICAgPyByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgICAgICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnNcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogcmVjdXJzaXZlbHlUcmF2ZXJzZUF0b21pY1Bhc3NpdmVFZmZlY3RzKFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBwcmV2UHJvZmlsZXJFZmZlY3REdXJhdGlvbi5fdmlzaWJpbGl0eSAmXG4gICAgICAgICAgICAgICAgT2Zmc2NyZWVuUGFzc2l2ZUVmZmVjdHNDb25uZWN0ZWRcbiAgICAgICAgICAgICAgPyByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgICAgICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnNcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogKChwcmV2UHJvZmlsZXJFZmZlY3REdXJhdGlvbi5fdmlzaWJpbGl0eSB8PVxuICAgICAgICAgICAgICAgICAgT2Zmc2NyZWVuUGFzc2l2ZUVmZmVjdHNDb25uZWN0ZWQpLFxuICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWNvbm5lY3RQYXNzaXZlRWZmZWN0cyhcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgICAgICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnMsXG4gICAgICAgICAgICAgICAgICAwICE9PSAoZmluaXNoZWRXb3JrLnN1YnRyZWVGbGFncyAmIDEwMjU2KVxuICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgIGZsYWdzICYgMjA0OCAmJlxuICAgICAgICAgICAgY29tbWl0T2Zmc2NyZWVuUGFzc2l2ZU1vdW50RWZmZWN0cyhfY3VycmVudCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnNcbiAgICAgICAgICApO1xuICAgICAgICAgIGZsYWdzICYgMjA0OCAmJlxuICAgICAgICAgICAgY29tbWl0Q2FjaGVQYXNzaXZlTW91bnRFZmZlY3QoZmluaXNoZWRXb3JrLmFsdGVybmF0ZSwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnNcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgICAgcG9wQ29tcG9uZW50RWZmZWN0U3RhcnQocHJldkVmZmVjdFN0YXJ0KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVjdXJzaXZlbHlUcmF2ZXJzZVJlY29ubmVjdFBhc3NpdmVFZmZlY3RzKFxuICAgICAgZmluaXNoZWRSb290LFxuICAgICAgcGFyZW50RmliZXIsXG4gICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zLFxuICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICkge1xuICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cyA9XG4gICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMgJiZcbiAgICAgICAgMCAhPT0gKHBhcmVudEZpYmVyLnN1YnRyZWVGbGFncyAmIDEwMjU2KTtcbiAgICAgIGZvciAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5jaGlsZDsgbnVsbCAhPT0gcGFyZW50RmliZXI7IClcbiAgICAgICAgcmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoXG4gICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgIHBhcmVudEZpYmVyLFxuICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zLFxuICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgKSxcbiAgICAgICAgICAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5zaWJsaW5nKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoXG4gICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICBmaW5pc2hlZFdvcmssXG4gICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zLFxuICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICkge1xuICAgICAgdmFyIHByZXZFZmZlY3RTdGFydCA9IHB1c2hDb21wb25lbnRFZmZlY3RTdGFydCgpLFxuICAgICAgICBmbGFncyA9IGZpbmlzaGVkV29yay5mbGFncztcbiAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlY29ubmVjdFBhc3NpdmVFZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9ucyxcbiAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbW1pdEhvb2tQYXNzaXZlTW91bnRFZmZlY3RzKGZpbmlzaGVkV29yaywgUGFzc2l2ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgdmFyIF9pbnN0YW5jZTIgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICAgIG51bGwgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlXG4gICAgICAgICAgICA/IF9pbnN0YW5jZTIuX3Zpc2liaWxpdHkgJiBPZmZzY3JlZW5QYXNzaXZlRWZmZWN0c0Nvbm5lY3RlZFxuICAgICAgICAgICAgICA/IHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWNvbm5lY3RQYXNzaXZlRWZmZWN0cyhcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgICAgICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnMsXG4gICAgICAgICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IHJlY3Vyc2l2ZWx5VHJhdmVyc2VBdG9taWNQYXNzaXZlRWZmZWN0cyhcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogKChfaW5zdGFuY2UyLl92aXNpYmlsaXR5IHw9IE9mZnNjcmVlblBhc3NpdmVFZmZlY3RzQ29ubmVjdGVkKSxcbiAgICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlY29ubmVjdFBhc3NpdmVFZmZlY3RzKFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICAgICAgICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnMsXG4gICAgICAgICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICAgICAgICAgICApKTtcbiAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzICYmXG4gICAgICAgICAgICBmbGFncyAmIDIwNDggJiZcbiAgICAgICAgICAgIGNvbW1pdE9mZnNjcmVlblBhc3NpdmVNb3VudEVmZmVjdHMoXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yay5hbHRlcm5hdGUsXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgICAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zLFxuICAgICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICAgICAgICk7XG4gICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cyAmJlxuICAgICAgICAgICAgZmxhZ3MgJiAyMDQ4ICYmXG4gICAgICAgICAgICBjb21taXRDYWNoZVBhc3NpdmVNb3VudEVmZmVjdChmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlLCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWNvbm5lY3RQYXNzaXZlRWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnMsXG4gICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHBvcENvbXBvbmVudEVmZmVjdFN0YXJ0KHByZXZFZmZlY3RTdGFydCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VBdG9taWNQYXNzaXZlRWZmZWN0cyhcbiAgICAgIGZpbmlzaGVkUm9vdCRqc2NvbXAkMCxcbiAgICAgIHBhcmVudEZpYmVyXG4gICAgKSB7XG4gICAgICBpZiAocGFyZW50RmliZXIuc3VidHJlZUZsYWdzICYgMTAyNTYpXG4gICAgICAgIGZvciAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5jaGlsZDsgbnVsbCAhPT0gcGFyZW50RmliZXI7ICkge1xuICAgICAgICAgIHZhciBmaW5pc2hlZFJvb3QgPSBmaW5pc2hlZFJvb3QkanNjb21wJDAsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmsgPSBwYXJlbnRGaWJlcixcbiAgICAgICAgICAgIGZsYWdzID0gZmluaXNoZWRXb3JrLmZsYWdzO1xuICAgICAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUF0b21pY1Bhc3NpdmVFZmZlY3RzKFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgZmxhZ3MgJiAyMDQ4ICYmXG4gICAgICAgICAgICAgICAgY29tbWl0T2Zmc2NyZWVuUGFzc2l2ZU1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yay5hbHRlcm5hdGUsXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VBdG9taWNQYXNzaXZlRWZmZWN0cyhcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGZsYWdzICYgMjA0OCAmJlxuICAgICAgICAgICAgICAgIGNvbW1pdENhY2hlUGFzc2l2ZU1vdW50RWZmZWN0KFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLmFsdGVybmF0ZSxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUF0b21pY1Bhc3NpdmVFZmZlY3RzKFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5zaWJsaW5nO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5QWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdChwYXJlbnRGaWJlcikge1xuICAgICAgaWYgKHBhcmVudEZpYmVyLnN1YnRyZWVGbGFncyAmIHN1c3BlbnNleUNvbW1pdEZsYWcpXG4gICAgICAgIGZvciAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5jaGlsZDsgbnVsbCAhPT0gcGFyZW50RmliZXI7IClcbiAgICAgICAgICBhY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0T25GaWJlcihwYXJlbnRGaWJlciksXG4gICAgICAgICAgICAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5zaWJsaW5nKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdE9uRmliZXIoZmliZXIpIHtcbiAgICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgcmVjdXJzaXZlbHlBY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0KGZpYmVyKTtcbiAgICAgICAgICBmaWJlci5mbGFncyAmIHN1c3BlbnNleUNvbW1pdEZsYWcgJiZcbiAgICAgICAgICAgIG51bGwgIT09IGZpYmVyLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICAgIHN1c3BlbmRSZXNvdXJjZShcbiAgICAgICAgICAgICAgY3VycmVudEhvaXN0YWJsZVJvb3QsXG4gICAgICAgICAgICAgIGZpYmVyLm1lbW9pemVkU3RhdGUsXG4gICAgICAgICAgICAgIGZpYmVyLm1lbW9pemVkUHJvcHNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZWN1cnNpdmVseUFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXQoZmliZXIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICB2YXIgcHJldmlvdXNIb2lzdGFibGVSb290ID0gY3VycmVudEhvaXN0YWJsZVJvb3Q7XG4gICAgICAgICAgY3VycmVudEhvaXN0YWJsZVJvb3QgPSBnZXRIb2lzdGFibGVSb290KFxuICAgICAgICAgICAgZmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm9cbiAgICAgICAgICApO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5QWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdChmaWJlcik7XG4gICAgICAgICAgY3VycmVudEhvaXN0YWJsZVJvb3QgPSBwcmV2aW91c0hvaXN0YWJsZVJvb3Q7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgbnVsbCA9PT0gZmliZXIubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgICAgKChwcmV2aW91c0hvaXN0YWJsZVJvb3QgPSBmaWJlci5hbHRlcm5hdGUpLFxuICAgICAgICAgICAgbnVsbCAhPT0gcHJldmlvdXNIb2lzdGFibGVSb290ICYmXG4gICAgICAgICAgICBudWxsICE9PSBwcmV2aW91c0hvaXN0YWJsZVJvb3QubWVtb2l6ZWRTdGF0ZVxuICAgICAgICAgICAgICA/ICgocHJldmlvdXNIb2lzdGFibGVSb290ID0gc3VzcGVuc2V5Q29tbWl0RmxhZyksXG4gICAgICAgICAgICAgICAgKHN1c3BlbnNleUNvbW1pdEZsYWcgPSAxNjc3NzIxNiksXG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlbHlBY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0KGZpYmVyKSxcbiAgICAgICAgICAgICAgICAoc3VzcGVuc2V5Q29tbWl0RmxhZyA9IHByZXZpb3VzSG9pc3RhYmxlUm9vdCkpXG4gICAgICAgICAgICAgIDogcmVjdXJzaXZlbHlBY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0KGZpYmVyKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVjdXJzaXZlbHlBY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0KGZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZGV0YWNoQWx0ZXJuYXRlU2libGluZ3MocGFyZW50RmliZXIpIHtcbiAgICAgIHZhciBwcmV2aW91c0ZpYmVyID0gcGFyZW50RmliZXIuYWx0ZXJuYXRlO1xuICAgICAgaWYgKFxuICAgICAgICBudWxsICE9PSBwcmV2aW91c0ZpYmVyICYmXG4gICAgICAgICgocGFyZW50RmliZXIgPSBwcmV2aW91c0ZpYmVyLmNoaWxkKSwgbnVsbCAhPT0gcGFyZW50RmliZXIpXG4gICAgICApIHtcbiAgICAgICAgcHJldmlvdXNGaWJlci5jaGlsZCA9IG51bGw7XG4gICAgICAgIGRvXG4gICAgICAgICAgKHByZXZpb3VzRmliZXIgPSBwYXJlbnRGaWJlci5zaWJsaW5nKSxcbiAgICAgICAgICAgIChwYXJlbnRGaWJlci5zaWJsaW5nID0gbnVsbCksXG4gICAgICAgICAgICAocGFyZW50RmliZXIgPSBwcmV2aW91c0ZpYmVyKTtcbiAgICAgICAgd2hpbGUgKG51bGwgIT09IHBhcmVudEZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVVbm1vdW50RWZmZWN0cyhwYXJlbnRGaWJlcikge1xuICAgICAgdmFyIGRlbGV0aW9ucyA9IHBhcmVudEZpYmVyLmRlbGV0aW9ucztcbiAgICAgIGlmICgwICE9PSAocGFyZW50RmliZXIuZmxhZ3MgJiAxNikpIHtcbiAgICAgICAgaWYgKG51bGwgIT09IGRlbGV0aW9ucylcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGV0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNoaWxkVG9EZWxldGUgPSBkZWxldGlvbnNbaV0sXG4gICAgICAgICAgICAgIHByZXZFZmZlY3RTdGFydCA9IHB1c2hDb21wb25lbnRFZmZlY3RTdGFydCgpO1xuICAgICAgICAgICAgbmV4dEVmZmVjdCA9IGNoaWxkVG9EZWxldGU7XG4gICAgICAgICAgICBjb21taXRQYXNzaXZlVW5tb3VudEVmZmVjdHNJbnNpZGVPZkRlbGV0ZWRUcmVlX2JlZ2luKFxuICAgICAgICAgICAgICBjaGlsZFRvRGVsZXRlLFxuICAgICAgICAgICAgICBwYXJlbnRGaWJlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHBvcENvbXBvbmVudEVmZmVjdFN0YXJ0KHByZXZFZmZlY3RTdGFydCk7XG4gICAgICAgICAgfVxuICAgICAgICBkZXRhY2hBbHRlcm5hdGVTaWJsaW5ncyhwYXJlbnRGaWJlcik7XG4gICAgICB9XG4gICAgICBpZiAocGFyZW50RmliZXIuc3VidHJlZUZsYWdzICYgMTAyNTYpXG4gICAgICAgIGZvciAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5jaGlsZDsgbnVsbCAhPT0gcGFyZW50RmliZXI7IClcbiAgICAgICAgICBjb21taXRQYXNzaXZlVW5tb3VudE9uRmliZXIocGFyZW50RmliZXIpLFxuICAgICAgICAgICAgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuc2libGluZyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdFBhc3NpdmVVbm1vdW50T25GaWJlcihmaW5pc2hlZFdvcmspIHtcbiAgICAgIHZhciBwcmV2RWZmZWN0U3RhcnQgPSBwdXNoQ29tcG9uZW50RWZmZWN0U3RhcnQoKTtcbiAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVVbm1vdW50RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGZpbmlzaGVkV29yay5mbGFncyAmIDIwNDggJiZcbiAgICAgICAgICAgIGNvbW1pdEhvb2tQYXNzaXZlVW5tb3VudEVmZmVjdHMoXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnJldHVybixcbiAgICAgICAgICAgICAgUGFzc2l2ZSB8IEhhc0VmZmVjdFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHZhciBwcmV2UHJvZmlsZXJFZmZlY3REdXJhdGlvbiA9IHB1c2hOZXN0ZWRFZmZlY3REdXJhdGlvbnMoKTtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZVVubW91bnRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgZmluaXNoZWRXb3JrLnN0YXRlTm9kZS5wYXNzaXZlRWZmZWN0RHVyYXRpb24gKz1cbiAgICAgICAgICAgIHBvcE5lc3RlZEVmZmVjdER1cmF0aW9ucyhwcmV2UHJvZmlsZXJFZmZlY3REdXJhdGlvbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgcHJldlByb2ZpbGVyRWZmZWN0RHVyYXRpb24gPSBwdXNoTmVzdGVkRWZmZWN0RHVyYXRpb25zKCk7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVVbm1vdW50RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGZpbmlzaGVkV29yay5zdGF0ZU5vZGUucGFzc2l2ZUVmZmVjdER1cmF0aW9uICs9XG4gICAgICAgICAgICBidWJibGVOZXN0ZWRFZmZlY3REdXJhdGlvbnMocHJldlByb2ZpbGVyRWZmZWN0RHVyYXRpb24pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIHByZXZQcm9maWxlckVmZmVjdER1cmF0aW9uID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICBudWxsICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgIHByZXZQcm9maWxlckVmZmVjdER1cmF0aW9uLl92aXNpYmlsaXR5ICZcbiAgICAgICAgICAgIE9mZnNjcmVlblBhc3NpdmVFZmZlY3RzQ29ubmVjdGVkICYmXG4gICAgICAgICAgKG51bGwgPT09IGZpbmlzaGVkV29yay5yZXR1cm4gfHwgMTMgIT09IGZpbmlzaGVkV29yay5yZXR1cm4udGFnKVxuICAgICAgICAgICAgPyAoKHByZXZQcm9maWxlckVmZmVjdER1cmF0aW9uLl92aXNpYmlsaXR5ICY9XG4gICAgICAgICAgICAgICAgfk9mZnNjcmVlblBhc3NpdmVFZmZlY3RzQ29ubmVjdGVkKSxcbiAgICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2Nvbm5lY3RQYXNzaXZlRWZmZWN0cyhmaW5pc2hlZFdvcmspKVxuICAgICAgICAgICAgOiByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZVVubW91bnRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVVbm1vdW50RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgfVxuICAgICAgcG9wQ29tcG9uZW50RWZmZWN0U3RhcnQocHJldkVmZmVjdFN0YXJ0KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2Nvbm5lY3RQYXNzaXZlRWZmZWN0cyhwYXJlbnRGaWJlcikge1xuICAgICAgdmFyIGRlbGV0aW9ucyA9IHBhcmVudEZpYmVyLmRlbGV0aW9ucztcbiAgICAgIGlmICgwICE9PSAocGFyZW50RmliZXIuZmxhZ3MgJiAxNikpIHtcbiAgICAgICAgaWYgKG51bGwgIT09IGRlbGV0aW9ucylcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGV0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNoaWxkVG9EZWxldGUgPSBkZWxldGlvbnNbaV0sXG4gICAgICAgICAgICAgIHByZXZFZmZlY3RTdGFydCA9IHB1c2hDb21wb25lbnRFZmZlY3RTdGFydCgpO1xuICAgICAgICAgICAgbmV4dEVmZmVjdCA9IGNoaWxkVG9EZWxldGU7XG4gICAgICAgICAgICBjb21taXRQYXNzaXZlVW5tb3VudEVmZmVjdHNJbnNpZGVPZkRlbGV0ZWRUcmVlX2JlZ2luKFxuICAgICAgICAgICAgICBjaGlsZFRvRGVsZXRlLFxuICAgICAgICAgICAgICBwYXJlbnRGaWJlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHBvcENvbXBvbmVudEVmZmVjdFN0YXJ0KHByZXZFZmZlY3RTdGFydCk7XG4gICAgICAgICAgfVxuICAgICAgICBkZXRhY2hBbHRlcm5hdGVTaWJsaW5ncyhwYXJlbnRGaWJlcik7XG4gICAgICB9XG4gICAgICBmb3IgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuY2hpbGQ7IG51bGwgIT09IHBhcmVudEZpYmVyOyApXG4gICAgICAgIGRpc2Nvbm5lY3RQYXNzaXZlRWZmZWN0KHBhcmVudEZpYmVyKSxcbiAgICAgICAgICAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5zaWJsaW5nKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGlzY29ubmVjdFBhc3NpdmVFZmZlY3QoZmluaXNoZWRXb3JrKSB7XG4gICAgICB2YXIgcHJldkVmZmVjdFN0YXJ0ID0gcHVzaENvbXBvbmVudEVmZmVjdFN0YXJ0KCk7XG4gICAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDExOlxuICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIGNvbW1pdEhvb2tQYXNzaXZlVW5tb3VudEVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmsucmV0dXJuLFxuICAgICAgICAgICAgUGFzc2l2ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2Nvbm5lY3RQYXNzaXZlRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgaW5zdGFuY2UuX3Zpc2liaWxpdHkgJiBPZmZzY3JlZW5QYXNzaXZlRWZmZWN0c0Nvbm5lY3RlZCAmJlxuICAgICAgICAgICAgKChpbnN0YW5jZS5fdmlzaWJpbGl0eSAmPSB+T2Zmc2NyZWVuUGFzc2l2ZUVmZmVjdHNDb25uZWN0ZWQpLFxuICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2Nvbm5lY3RQYXNzaXZlRWZmZWN0cyhmaW5pc2hlZFdvcmspKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGlzY29ubmVjdFBhc3NpdmVFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICB9XG4gICAgICBwb3BDb21wb25lbnRFZmZlY3RTdGFydChwcmV2RWZmZWN0U3RhcnQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRQYXNzaXZlVW5tb3VudEVmZmVjdHNJbnNpZGVPZkRlbGV0ZWRUcmVlX2JlZ2luKFxuICAgICAgZGVsZXRlZFN1YnRyZWVSb290LFxuICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciRqc2NvbXAkMFxuICAgICkge1xuICAgICAgZm9yICg7IG51bGwgIT09IG5leHRFZmZlY3Q7ICkge1xuICAgICAgICB2YXIgZmliZXIgPSBuZXh0RWZmZWN0LFxuICAgICAgICAgIGN1cnJlbnQgPSBmaWJlcixcbiAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yID0gbmVhcmVzdE1vdW50ZWRBbmNlc3RvciRqc2NvbXAkMCxcbiAgICAgICAgICBwcmV2RWZmZWN0U3RhcnQgPSBwdXNoQ29tcG9uZW50RWZmZWN0U3RhcnQoKTtcbiAgICAgICAgc3dpdGNoIChjdXJyZW50LnRhZykge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgICBjb21taXRIb29rUGFzc2l2ZVVubW91bnRFZmZlY3RzKFxuICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgICBQYXNzaXZlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wgJiZcbiAgICAgICAgICAgICAgKChjdXJyZW50ID0gY3VycmVudC5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKSxcbiAgICAgICAgICAgICAgbnVsbCAhPSBjdXJyZW50ICYmIHJldGFpbkNhY2hlKGN1cnJlbnQpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgICByZWxlYXNlQ2FjaGUoY3VycmVudC5tZW1vaXplZFN0YXRlLmNhY2hlKTtcbiAgICAgICAgfVxuICAgICAgICBwb3BDb21wb25lbnRFZmZlY3RTdGFydChwcmV2RWZmZWN0U3RhcnQpO1xuICAgICAgICBwcmV2RWZmZWN0U3RhcnQgPSBmaWJlci5jaGlsZDtcbiAgICAgICAgaWYgKG51bGwgIT09IHByZXZFZmZlY3RTdGFydClcbiAgICAgICAgICAocHJldkVmZmVjdFN0YXJ0LnJldHVybiA9IGZpYmVyKSwgKG5leHRFZmZlY3QgPSBwcmV2RWZmZWN0U3RhcnQpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgYTogZm9yIChmaWJlciA9IGRlbGV0ZWRTdWJ0cmVlUm9vdDsgbnVsbCAhPT0gbmV4dEVmZmVjdDsgKSB7XG4gICAgICAgICAgICBwcmV2RWZmZWN0U3RhcnQgPSBuZXh0RWZmZWN0O1xuICAgICAgICAgICAgY3VycmVudCA9IHByZXZFZmZlY3RTdGFydC5zaWJsaW5nO1xuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciA9IHByZXZFZmZlY3RTdGFydC5yZXR1cm47XG4gICAgICAgICAgICBkZXRhY2hGaWJlckFmdGVyRWZmZWN0cyhwcmV2RWZmZWN0U3RhcnQpO1xuICAgICAgICAgICAgaWYgKHByZXZFZmZlY3RTdGFydCA9PT0gZmliZXIpIHtcbiAgICAgICAgICAgICAgbmV4dEVmZmVjdCA9IG51bGw7XG4gICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobnVsbCAhPT0gY3VycmVudCkge1xuICAgICAgICAgICAgICBjdXJyZW50LnJldHVybiA9IG5lYXJlc3RNb3VudGVkQW5jZXN0b3I7XG4gICAgICAgICAgICAgIG5leHRFZmZlY3QgPSBjdXJyZW50O1xuICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dEVmZmVjdCA9IG5lYXJlc3RNb3VudGVkQW5jZXN0b3I7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBvbkNvbW1pdFJvb3QoKSB7XG4gICAgICBjb21taXRIb29rcy5mb3JFYWNoKGZ1bmN0aW9uIChjb21taXRIb29rKSB7XG4gICAgICAgIHJldHVybiBjb21taXRIb29rKCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNDb25jdXJyZW50QWN0RW52aXJvbm1lbnQoKSB7XG4gICAgICB2YXIgaXNSZWFjdEFjdEVudmlyb25tZW50R2xvYmFsID1cbiAgICAgICAgXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIElTX1JFQUNUX0FDVF9FTlZJUk9OTUVOVFxuICAgICAgICAgID8gSVNfUkVBQ1RfQUNUX0VOVklST05NRU5UXG4gICAgICAgICAgOiB2b2lkIDA7XG4gICAgICBpc1JlYWN0QWN0RW52aXJvbm1lbnRHbG9iYWwgfHxcbiAgICAgICAgbnVsbCA9PT0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWUgfHxcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIlRoZSBjdXJyZW50IHRlc3RpbmcgZW52aXJvbm1lbnQgaXMgbm90IGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCBhY3QoLi4uKVwiXG4gICAgICAgICk7XG4gICAgICByZXR1cm4gaXNSZWFjdEFjdEVudmlyb25tZW50R2xvYmFsO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcikge1xuICAgICAgaWYgKFxuICAgICAgICAoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpICE9PSBOb0NvbnRleHQgJiZcbiAgICAgICAgMCAhPT0gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXNcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgLXdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzO1xuICAgICAgdmFyIHRyYW5zaXRpb24gPSBSZWFjdFNoYXJlZEludGVybmFscy5UO1xuICAgICAgcmV0dXJuIG51bGwgIT09IHRyYW5zaXRpb25cbiAgICAgICAgPyAodHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycyB8fCAodHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycyA9IG5ldyBTZXQoKSksXG4gICAgICAgICAgdHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycy5hZGQoZmliZXIpLFxuICAgICAgICAgIHJlcXVlc3RUcmFuc2l0aW9uTGFuZSgpKVxuICAgICAgICA6IHJlc29sdmVVcGRhdGVQcmlvcml0eSgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXF1ZXN0RGVmZXJyZWRMYW5lKCkge1xuICAgICAgMCA9PT0gd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUgJiZcbiAgICAgICAgKHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lID1cbiAgICAgICAgICAwID09PSAod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiA1MzY4NzA5MTIpIHx8IGlzSHlkcmF0aW5nXG4gICAgICAgICAgICA/IGNsYWltTmV4dFRyYW5zaXRpb25MYW5lKClcbiAgICAgICAgICAgIDogNTM2ODcwOTEyKTtcbiAgICAgIHZhciBzdXNwZW5zZUhhbmRsZXIgPSBzdXNwZW5zZUhhbmRsZXJTdGFja0N1cnNvci5jdXJyZW50O1xuICAgICAgbnVsbCAhPT0gc3VzcGVuc2VIYW5kbGVyICYmIChzdXNwZW5zZUhhbmRsZXIuZmxhZ3MgfD0gMzIpO1xuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgZmliZXIsIGxhbmUpIHtcbiAgICAgIGlzUnVubmluZ0luc2VydGlvbkVmZmVjdCAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFwidXNlSW5zZXJ0aW9uRWZmZWN0IG11c3Qgbm90IHNjaGVkdWxlIHVwZGF0ZXMuXCIpO1xuICAgICAgaXNGbHVzaGluZ1Bhc3NpdmVFZmZlY3RzICYmIChkaWRTY2hlZHVsZVVwZGF0ZUR1cmluZ1Bhc3NpdmVFZmZlY3RzID0gITApO1xuICAgICAgaWYgKFxuICAgICAgICAocm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ICYmXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID09PSBTdXNwZW5kZWRPbkRhdGEgfHxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID09PSBTdXNwZW5kZWRPbkFjdGlvbikpIHx8XG4gICAgICAgIG51bGwgIT09IHJvb3QuY2FuY2VsUGVuZGluZ0NvbW1pdFxuICAgICAgKVxuICAgICAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCAwKSxcbiAgICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZChcbiAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lLFxuICAgICAgICAgICAgITFcbiAgICAgICAgICApO1xuICAgICAgbWFya1Jvb3RVcGRhdGVkJDEocm9vdCwgbGFuZSk7XG4gICAgICBpZiAoXG4gICAgICAgIChleGVjdXRpb25Db250ZXh0ICYgUmVuZGVyQ29udGV4dCkgIT09IE5vQ29udGV4dCAmJlxuICAgICAgICByb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3RcbiAgICAgICkge1xuICAgICAgICBpZiAoaXNSZW5kZXJpbmcpXG4gICAgICAgICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgICAgICByb290ID1cbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MgJiYgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcih3b3JrSW5Qcm9ncmVzcykpIHx8XG4gICAgICAgICAgICAgICAgXCJVbmtub3duXCI7XG4gICAgICAgICAgICAgIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyRm9yQW5vdGhlckNvbXBvbmVudC5oYXMocm9vdCkgfHxcbiAgICAgICAgICAgICAgICAoZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXJGb3JBbm90aGVyQ29tcG9uZW50LmFkZChyb290KSxcbiAgICAgICAgICAgICAgICAoZmliZXIgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCBcIlVua25vd25cIiksXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgIFwiQ2Fubm90IHVwZGF0ZSBhIGNvbXBvbmVudCAoYCVzYCkgd2hpbGUgcmVuZGVyaW5nIGEgZGlmZmVyZW50IGNvbXBvbmVudCAoYCVzYCkuIFRvIGxvY2F0ZSB0aGUgYmFkIHNldFN0YXRlKCkgY2FsbCBpbnNpZGUgYCVzYCwgZm9sbG93IHRoZSBzdGFjayB0cmFjZSBhcyBkZXNjcmliZWQgaW4gaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9zZXRzdGF0ZS1pbi1yZW5kZXJcIixcbiAgICAgICAgICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgICAgIHJvb3RcbiAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyIHx8XG4gICAgICAgICAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICBcIkNhbm5vdCB1cGRhdGUgZHVyaW5nIGFuIGV4aXN0aW5nIHN0YXRlIHRyYW5zaXRpb24gKHN1Y2ggYXMgd2l0aGluIGByZW5kZXJgKS4gUmVuZGVyIG1ldGhvZHMgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGUuXCJcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIChkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlciA9ICEwKSk7XG4gICAgICAgICAgfVxuICAgICAgfSBlbHNlXG4gICAgICAgIGlzRGV2VG9vbHNQcmVzZW50ICYmIGFkZEZpYmVyVG9MYW5lc01hcChyb290LCBmaWJlciwgbGFuZSksXG4gICAgICAgICAgd2FybklmVXBkYXRlc05vdFdyYXBwZWRXaXRoQWN0REVWKGZpYmVyKSxcbiAgICAgICAgICByb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QgJiZcbiAgICAgICAgICAgICgoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpID09PSBOb0NvbnRleHQgJiZcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzUm9vdEludGVybGVhdmVkVXBkYXRlZExhbmVzIHw9IGxhbmUpLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdFN1c3BlbmRlZFdpdGhEZWxheSAmJlxuICAgICAgICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZChcbiAgICAgICAgICAgICAgICByb290LFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lLFxuICAgICAgICAgICAgICAgICExXG4gICAgICAgICAgICAgICkpLFxuICAgICAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGVyZm9ybVdvcmtPblJvb3Qocm9vdCwgbGFuZXMsIGZvcmNlU3luYykge1xuICAgICAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgIT09IE5vQ29udGV4dClcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJTaG91bGQgbm90IGFscmVhZHkgYmUgd29ya2luZy5cIik7XG4gICAgICB2YXIgc2hvdWxkVGltZVNsaWNlID1cbiAgICAgICAgICAoIWZvcmNlU3luYyAmJlxuICAgICAgICAgICAgMCA9PT0gKGxhbmVzICYgMTI0KSAmJlxuICAgICAgICAgICAgMCA9PT0gKGxhbmVzICYgcm9vdC5leHBpcmVkTGFuZXMpKSB8fFxuICAgICAgICAgIGNoZWNrSWZSb290SXNQcmVyZW5kZXJpbmcocm9vdCwgbGFuZXMpLFxuICAgICAgICBleGl0U3RhdHVzID0gc2hvdWxkVGltZVNsaWNlXG4gICAgICAgICAgPyByZW5kZXJSb290Q29uY3VycmVudChyb290LCBsYW5lcylcbiAgICAgICAgICA6IHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzLCAhMCksXG4gICAgICAgIHJlbmRlcldhc0NvbmN1cnJlbnQgPSBzaG91bGRUaW1lU2xpY2U7XG4gICAgICBkbyB7XG4gICAgICAgIGlmIChleGl0U3RhdHVzID09PSBSb290SW5Qcm9ncmVzcykge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdElzUHJlcmVuZGVyaW5nICYmXG4gICAgICAgICAgICAhc2hvdWxkVGltZVNsaWNlICYmXG4gICAgICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZChyb290LCBsYW5lcywgMCwgITEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvcmNlU3luYyA9IHJvb3QuY3VycmVudC5hbHRlcm5hdGU7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcmVuZGVyV2FzQ29uY3VycmVudCAmJlxuICAgICAgICAgICAgIWlzUmVuZGVyQ29uc2lzdGVudFdpdGhFeHRlcm5hbFN0b3Jlcyhmb3JjZVN5bmMpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBleGl0U3RhdHVzID0gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMsICExKTtcbiAgICAgICAgICAgIHJlbmRlcldhc0NvbmN1cnJlbnQgPSAhMTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZXhpdFN0YXR1cyA9PT0gUm9vdEVycm9yZWQpIHtcbiAgICAgICAgICAgIHJlbmRlcldhc0NvbmN1cnJlbnQgPSBsYW5lcztcbiAgICAgICAgICAgIGlmIChyb290LmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzICYgcmVuZGVyV2FzQ29uY3VycmVudClcbiAgICAgICAgICAgICAgdmFyIGVycm9yUmV0cnlMYW5lcyA9IDA7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIChlcnJvclJldHJ5TGFuZXMgPSByb290LnBlbmRpbmdMYW5lcyAmIC01MzY4NzA5MTMpLFxuICAgICAgICAgICAgICAgIChlcnJvclJldHJ5TGFuZXMgPVxuICAgICAgICAgICAgICAgICAgMCAhPT0gZXJyb3JSZXRyeUxhbmVzXG4gICAgICAgICAgICAgICAgICAgID8gZXJyb3JSZXRyeUxhbmVzXG4gICAgICAgICAgICAgICAgICAgIDogZXJyb3JSZXRyeUxhbmVzICYgNTM2ODcwOTEyXG4gICAgICAgICAgICAgICAgICAgICAgPyA1MzY4NzA5MTJcbiAgICAgICAgICAgICAgICAgICAgICA6IDApO1xuICAgICAgICAgICAgaWYgKDAgIT09IGVycm9yUmV0cnlMYW5lcykge1xuICAgICAgICAgICAgICBsYW5lcyA9IGVycm9yUmV0cnlMYW5lcztcbiAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgIGV4aXRTdGF0dXMgPSByb290O1xuICAgICAgICAgICAgICAgIHZhciBlcnJvclJldHJ5TGFuZXMkanNjb21wJDAgPSBlcnJvclJldHJ5TGFuZXM7XG4gICAgICAgICAgICAgICAgZXJyb3JSZXRyeUxhbmVzID0gd29ya0luUHJvZ3Jlc3NSb290Q29uY3VycmVudEVycm9ycztcbiAgICAgICAgICAgICAgICB2YXIgd2FzUm9vdERlaHlkcmF0ZWQgPVxuICAgICAgICAgICAgICAgICAgZXhpdFN0YXR1cy5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkO1xuICAgICAgICAgICAgICAgIHdhc1Jvb3REZWh5ZHJhdGVkICYmXG4gICAgICAgICAgICAgICAgICAocHJlcGFyZUZyZXNoU3RhY2soXG4gICAgICAgICAgICAgICAgICAgIGV4aXRTdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yUmV0cnlMYW5lcyRqc2NvbXAkMFxuICAgICAgICAgICAgICAgICAgKS5mbGFncyB8PSAyNTYpO1xuICAgICAgICAgICAgICAgIGVycm9yUmV0cnlMYW5lcyRqc2NvbXAkMCA9IHJlbmRlclJvb3RTeW5jKFxuICAgICAgICAgICAgICAgICAgZXhpdFN0YXR1cyxcbiAgICAgICAgICAgICAgICAgIGVycm9yUmV0cnlMYW5lcyRqc2NvbXAkMCxcbiAgICAgICAgICAgICAgICAgICExXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3JSZXRyeUxhbmVzJGpzY29tcCQwICE9PSBSb290RXJyb3JlZCkge1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3REaWRBdHRhY2hQaW5nTGlzdGVuZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgIXdhc1Jvb3REZWh5ZHJhdGVkXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgZXhpdFN0YXR1cy5lcnJvclJlY292ZXJ5RGlzYWJsZWRMYW5lcyB8PVxuICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcldhc0NvbmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEludGVybGVhdmVkVXBkYXRlZExhbmVzIHw9XG4gICAgICAgICAgICAgICAgICAgICAgcmVuZGVyV2FzQ29uY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgZXhpdFN0YXR1cyA9IFJvb3RTdXNwZW5kZWRXaXRoRGVsYXk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBleGl0U3RhdHVzID0gd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnM7XG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyA9IGVycm9yUmV0cnlMYW5lcztcbiAgICAgICAgICAgICAgICAgIG51bGwgIT09IGV4aXRTdGF0dXMgJiZcbiAgICAgICAgICAgICAgICAgICAgKG51bGwgPT09IHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICAgPyAod29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMgPSBleGl0U3RhdHVzKVxuICAgICAgICAgICAgICAgICAgICAgIDogd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMucHVzaC5hcHBseShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXRTdGF0dXNcbiAgICAgICAgICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBleGl0U3RhdHVzID0gZXJyb3JSZXRyeUxhbmVzJGpzY29tcCQwO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlbmRlcldhc0NvbmN1cnJlbnQgPSAhMTtcbiAgICAgICAgICAgICAgaWYgKGV4aXRTdGF0dXMgIT09IFJvb3RFcnJvcmVkKSBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGV4aXRTdGF0dXMgPT09IFJvb3RGYXRhbEVycm9yZWQpIHtcbiAgICAgICAgICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIDApO1xuICAgICAgICAgICAgbWFya1Jvb3RTdXNwZW5kZWQocm9vdCwgbGFuZXMsIDAsICEwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhOiB7XG4gICAgICAgICAgICBzaG91bGRUaW1lU2xpY2UgPSByb290O1xuICAgICAgICAgICAgc3dpdGNoIChleGl0U3RhdHVzKSB7XG4gICAgICAgICAgICAgIGNhc2UgUm9vdEluUHJvZ3Jlc3M6XG4gICAgICAgICAgICAgIGNhc2UgUm9vdEZhdGFsRXJyb3JlZDpcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIlJvb3QgZGlkIG5vdCBjb21wbGV0ZS4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIik7XG4gICAgICAgICAgICAgIGNhc2UgUm9vdFN1c3BlbmRlZFdpdGhEZWxheTpcbiAgICAgICAgICAgICAgICBpZiAoKGxhbmVzICYgNDE5NDA0OCkgIT09IGxhbmVzKSBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBSb290U3VzcGVuZGVkQXRUaGVTaGVsbDpcbiAgICAgICAgICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZChcbiAgICAgICAgICAgICAgICAgIHNob3VsZFRpbWVTbGljZSxcbiAgICAgICAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUsXG4gICAgICAgICAgICAgICAgICAhd29ya0luUHJvZ3Jlc3NSb290RGlkU2tpcFN1c3BlbmRlZFNpYmxpbmdzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICBjYXNlIFJvb3RFcnJvcmVkOlxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzID0gbnVsbDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBSb290U3VzcGVuZGVkOlxuICAgICAgICAgICAgICBjYXNlIFJvb3RDb21wbGV0ZWQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJVbmtub3duIHJvb3QgZXhpdCBzdGF0dXMuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG51bGwgIT09IFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFjdFF1ZXVlKVxuICAgICAgICAgICAgICBjb21taXRSb290KFxuICAgICAgICAgICAgICAgIHNob3VsZFRpbWVTbGljZSxcbiAgICAgICAgICAgICAgICBmb3JjZVN5bmMsXG4gICAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NUcmFuc2l0aW9ucyxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3REaWRJbmNsdWRlUmVjdXJzaXZlUmVuZGVyVXBkYXRlLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEludGVybGVhdmVkVXBkYXRlZExhbmVzLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmV0cnlMYW5lc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAobGFuZXMgJiA2MjkxNDU2MCkgPT09IGxhbmVzICYmXG4gICAgICAgICAgICAgICAgKChyZW5kZXJXYXNDb25jdXJyZW50ID1cbiAgICAgICAgICAgICAgICAgIGdsb2JhbE1vc3RSZWNlbnRGYWxsYmFja1RpbWUgK1xuICAgICAgICAgICAgICAgICAgRkFMTEJBQ0tfVEhST1RUTEVfTVMgLVxuICAgICAgICAgICAgICAgICAgbm93JDEoKSksXG4gICAgICAgICAgICAgICAgMTAgPCByZW5kZXJXYXNDb25jdXJyZW50KVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZChcbiAgICAgICAgICAgICAgICAgIHNob3VsZFRpbWVTbGljZSxcbiAgICAgICAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUsXG4gICAgICAgICAgICAgICAgICAhd29ya0luUHJvZ3Jlc3NSb290RGlkU2tpcFN1c3BlbmRlZFNpYmxpbmdzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoMCAhPT0gZ2V0TmV4dExhbmVzKHNob3VsZFRpbWVTbGljZSwgMCwgITApKSBicmVhayBhO1xuICAgICAgICAgICAgICAgIHNob3VsZFRpbWVTbGljZS50aW1lb3V0SGFuZGxlID0gc2NoZWR1bGVUaW1lb3V0KFxuICAgICAgICAgICAgICAgICAgY29tbWl0Um9vdFdoZW5SZWFkeS5iaW5kKFxuICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICBzaG91bGRUaW1lU2xpY2UsXG4gICAgICAgICAgICAgICAgICAgIGZvcmNlU3luYyxcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMsXG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzVHJhbnNpdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdERpZEluY2x1ZGVSZWN1cnNpdmVSZW5kZXJVcGRhdGUsXG4gICAgICAgICAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSxcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMsXG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmV0cnlMYW5lcyxcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RGlkU2tpcFN1c3BlbmRlZFNpYmxpbmdzLFxuICAgICAgICAgICAgICAgICAgICBleGl0U3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICBUSFJPVFRMRURfQ09NTUlULFxuICAgICAgICAgICAgICAgICAgICByZW5kZXJTdGFydFRpbWUsXG4gICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICByZW5kZXJXYXNDb25jdXJyZW50XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbW1pdFJvb3RXaGVuUmVhZHkoXG4gICAgICAgICAgICAgICAgc2hvdWxkVGltZVNsaWNlLFxuICAgICAgICAgICAgICAgIGZvcmNlU3luYyxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1RyYW5zaXRpb25zLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdERpZEluY2x1ZGVSZWN1cnNpdmVSZW5kZXJVcGRhdGUsXG4gICAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZXRyeUxhbmVzLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdERpZFNraXBTdXNwZW5kZWRTaWJsaW5ncyxcbiAgICAgICAgICAgICAgICBleGl0U3RhdHVzLFxuICAgICAgICAgICAgICAgIElNTUVESUFURV9DT01NSVQsXG4gICAgICAgICAgICAgICAgcmVuZGVyU3RhcnRUaW1lLFxuICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9IHdoaWxlICgxKTtcbiAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0Um9vdFdoZW5SZWFkeShcbiAgICAgIHJvb3QsXG4gICAgICBmaW5pc2hlZFdvcmssXG4gICAgICByZWNvdmVyYWJsZUVycm9ycyxcbiAgICAgIHRyYW5zaXRpb25zLFxuICAgICAgZGlkSW5jbHVkZVJlbmRlclBoYXNlVXBkYXRlLFxuICAgICAgbGFuZXMsXG4gICAgICBzcGF3bmVkTGFuZSxcbiAgICAgIHVwZGF0ZWRMYW5lcyxcbiAgICAgIHN1c3BlbmRlZFJldHJ5TGFuZXMsXG4gICAgICBkaWRTa2lwU3VzcGVuZGVkU2libGluZ3MsXG4gICAgICBleGl0U3RhdHVzLFxuICAgICAgc3VzcGVuZGVkQ29tbWl0UmVhc29uLFxuICAgICAgY29tcGxldGVkUmVuZGVyU3RhcnRUaW1lLFxuICAgICAgY29tcGxldGVkUmVuZGVyRW5kVGltZVxuICAgICkge1xuICAgICAgcm9vdC50aW1lb3V0SGFuZGxlID0gbm9UaW1lb3V0O1xuICAgICAgc3VzcGVuZGVkQ29tbWl0UmVhc29uID0gZmluaXNoZWRXb3JrLnN1YnRyZWVGbGFncztcbiAgICAgIGlmIChcbiAgICAgICAgc3VzcGVuZGVkQ29tbWl0UmVhc29uICYgODE5MiB8fFxuICAgICAgICAxNjc4NTQwOCA9PT0gKHN1c3BlbmRlZENvbW1pdFJlYXNvbiAmIDE2Nzg1NDA4KVxuICAgICAgKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgKChzdXNwZW5kZWRTdGF0ZSA9IHtcbiAgICAgICAgICAgIHN0eWxlc2hlZXRzOiBudWxsLFxuICAgICAgICAgICAgY291bnQ6IDAsXG4gICAgICAgICAgICB1bnN1c3BlbmQ6IG5vb3AkMVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXRPbkZpYmVyKGZpbmlzaGVkV29yayksXG4gICAgICAgICAgKHN1c3BlbmRlZENvbW1pdFJlYXNvbiA9IHdhaXRGb3JDb21taXRUb0JlUmVhZHkoKSksXG4gICAgICAgICAgbnVsbCAhPT0gc3VzcGVuZGVkQ29tbWl0UmVhc29uKVxuICAgICAgICApIHtcbiAgICAgICAgICByb290LmNhbmNlbFBlbmRpbmdDb21taXQgPSBzdXNwZW5kZWRDb21taXRSZWFzb24oXG4gICAgICAgICAgICBjb21taXRSb290LmJpbmQoXG4gICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgIHJlY292ZXJhYmxlRXJyb3JzLFxuICAgICAgICAgICAgICB0cmFuc2l0aW9ucyxcbiAgICAgICAgICAgICAgZGlkSW5jbHVkZVJlbmRlclBoYXNlVXBkYXRlLFxuICAgICAgICAgICAgICBzcGF3bmVkTGFuZSxcbiAgICAgICAgICAgICAgdXBkYXRlZExhbmVzLFxuICAgICAgICAgICAgICBzdXNwZW5kZWRSZXRyeUxhbmVzLFxuICAgICAgICAgICAgICBleGl0U3RhdHVzLFxuICAgICAgICAgICAgICBTVVNQRU5ERURfQ09NTUlULFxuICAgICAgICAgICAgICBjb21wbGV0ZWRSZW5kZXJTdGFydFRpbWUsXG4gICAgICAgICAgICAgIGNvbXBsZXRlZFJlbmRlckVuZFRpbWVcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICAgIG1hcmtSb290U3VzcGVuZGVkKFxuICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgc3Bhd25lZExhbmUsXG4gICAgICAgICAgICAhZGlkU2tpcFN1c3BlbmRlZFNpYmxpbmdzXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIGNvbW1pdFJvb3QoXG4gICAgICAgIHJvb3QsXG4gICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgbGFuZXMsXG4gICAgICAgIHJlY292ZXJhYmxlRXJyb3JzLFxuICAgICAgICB0cmFuc2l0aW9ucyxcbiAgICAgICAgZGlkSW5jbHVkZVJlbmRlclBoYXNlVXBkYXRlLFxuICAgICAgICBzcGF3bmVkTGFuZSxcbiAgICAgICAgdXBkYXRlZExhbmVzLFxuICAgICAgICBzdXNwZW5kZWRSZXRyeUxhbmVzXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc1JlbmRlckNvbnNpc3RlbnRXaXRoRXh0ZXJuYWxTdG9yZXMoZmluaXNoZWRXb3JrKSB7XG4gICAgICBmb3IgKHZhciBub2RlID0gZmluaXNoZWRXb3JrOyA7ICkge1xuICAgICAgICB2YXIgdGFnID0gbm9kZS50YWc7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAoMCA9PT0gdGFnIHx8IDExID09PSB0YWcgfHwgMTUgPT09IHRhZykgJiZcbiAgICAgICAgICBub2RlLmZsYWdzICYgMTYzODQgJiZcbiAgICAgICAgICAoKHRhZyA9IG5vZGUudXBkYXRlUXVldWUpLFxuICAgICAgICAgIG51bGwgIT09IHRhZyAmJiAoKHRhZyA9IHRhZy5zdG9yZXMpLCBudWxsICE9PSB0YWcpKVxuICAgICAgICApXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjaGVjayA9IHRhZ1tpXSxcbiAgICAgICAgICAgICAgZ2V0U25hcHNob3QgPSBjaGVjay5nZXRTbmFwc2hvdDtcbiAgICAgICAgICAgIGNoZWNrID0gY2hlY2sudmFsdWU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBpZiAoIW9iamVjdElzKGdldFNuYXBzaG90KCksIGNoZWNrKSkgcmV0dXJuICExO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgdGFnID0gbm9kZS5jaGlsZDtcbiAgICAgICAgaWYgKG5vZGUuc3VidHJlZUZsYWdzICYgMTYzODQgJiYgbnVsbCAhPT0gdGFnKVxuICAgICAgICAgICh0YWcucmV0dXJuID0gbm9kZSksIChub2RlID0gdGFnKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKG5vZGUgPT09IGZpbmlzaGVkV29yaykgYnJlYWs7XG4gICAgICAgICAgZm9yICg7IG51bGwgPT09IG5vZGUuc2libGluZzsgKSB7XG4gICAgICAgICAgICBpZiAobnVsbCA9PT0gbm9kZS5yZXR1cm4gfHwgbm9kZS5yZXR1cm4gPT09IGZpbmlzaGVkV29yaykgcmV0dXJuICEwO1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgICAgICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuICEwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrUm9vdFN1c3BlbmRlZChcbiAgICAgIHJvb3QsXG4gICAgICBzdXNwZW5kZWRMYW5lcyxcbiAgICAgIHNwYXduZWRMYW5lLFxuICAgICAgZGlkQXR0ZW1wdEVudGlyZVRyZWVcbiAgICApIHtcbiAgICAgIHN1c3BlbmRlZExhbmVzICY9IH53b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcztcbiAgICAgIHN1c3BlbmRlZExhbmVzICY9IH53b3JrSW5Qcm9ncmVzc1Jvb3RJbnRlcmxlYXZlZFVwZGF0ZWRMYW5lcztcbiAgICAgIHJvb3Quc3VzcGVuZGVkTGFuZXMgfD0gc3VzcGVuZGVkTGFuZXM7XG4gICAgICByb290LnBpbmdlZExhbmVzICY9IH5zdXNwZW5kZWRMYW5lcztcbiAgICAgIGRpZEF0dGVtcHRFbnRpcmVUcmVlICYmIChyb290Lndhcm1MYW5lcyB8PSBzdXNwZW5kZWRMYW5lcyk7XG4gICAgICBkaWRBdHRlbXB0RW50aXJlVHJlZSA9IHJvb3QuZXhwaXJhdGlvblRpbWVzO1xuICAgICAgZm9yICh2YXIgbGFuZXMgPSBzdXNwZW5kZWRMYW5lczsgMCA8IGxhbmVzOyApIHtcbiAgICAgICAgdmFyIGluZGV4ID0gMzEgLSBjbHozMihsYW5lcyksXG4gICAgICAgICAgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgICAgIGRpZEF0dGVtcHRFbnRpcmVUcmVlW2luZGV4XSA9IC0xO1xuICAgICAgICBsYW5lcyAmPSB+bGFuZTtcbiAgICAgIH1cbiAgICAgIDAgIT09IHNwYXduZWRMYW5lICYmXG4gICAgICAgIG1hcmtTcGF3bmVkRGVmZXJyZWRMYW5lKHJvb3QsIHNwYXduZWRMYW5lLCBzdXNwZW5kZWRMYW5lcyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZsdXNoU3luY1dvcmskMSgpIHtcbiAgICAgIHJldHVybiAoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpID09PSBOb0NvbnRleHRcbiAgICAgICAgPyAoZmx1c2hTeW5jV29ya0Fjcm9zc1Jvb3RzX2ltcGwoMCwgITEpLCAhMSlcbiAgICAgICAgOiAhMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzZXRXb3JrSW5Qcm9ncmVzc1N0YWNrKCkge1xuICAgICAgaWYgKG51bGwgIT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9PT0gTm90U3VzcGVuZGVkKVxuICAgICAgICAgIHZhciBpbnRlcnJ1cHRlZFdvcmsgPSB3b3JrSW5Qcm9ncmVzcy5yZXR1cm47XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAoaW50ZXJydXB0ZWRXb3JrID0gd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgcmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzKCksXG4gICAgICAgICAgICByZXNldEhvb2tzT25VbndpbmQoaW50ZXJydXB0ZWRXb3JrKSxcbiAgICAgICAgICAgICh0aGVuYWJsZVN0YXRlJDEgPSBudWxsKSxcbiAgICAgICAgICAgICh0aGVuYWJsZUluZGV4Q291bnRlciQxID0gMCksXG4gICAgICAgICAgICAoaW50ZXJydXB0ZWRXb3JrID0gd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICBmb3IgKDsgbnVsbCAhPT0gaW50ZXJydXB0ZWRXb3JrOyApXG4gICAgICAgICAgdW53aW5kSW50ZXJydXB0ZWRXb3JrKGludGVycnVwdGVkV29yay5hbHRlcm5hdGUsIGludGVycnVwdGVkV29yayksXG4gICAgICAgICAgICAoaW50ZXJydXB0ZWRXb3JrID0gaW50ZXJydXB0ZWRXb3JrLnJldHVybik7XG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgbGFuZXMpIHtcbiAgICAgIHZhciB0aW1lb3V0SGFuZGxlID0gcm9vdC50aW1lb3V0SGFuZGxlO1xuICAgICAgdGltZW91dEhhbmRsZSAhPT0gbm9UaW1lb3V0ICYmXG4gICAgICAgICgocm9vdC50aW1lb3V0SGFuZGxlID0gbm9UaW1lb3V0KSwgY2FuY2VsVGltZW91dCh0aW1lb3V0SGFuZGxlKSk7XG4gICAgICB0aW1lb3V0SGFuZGxlID0gcm9vdC5jYW5jZWxQZW5kaW5nQ29tbWl0O1xuICAgICAgbnVsbCAhPT0gdGltZW91dEhhbmRsZSAmJlxuICAgICAgICAoKHJvb3QuY2FuY2VsUGVuZGluZ0NvbW1pdCA9IG51bGwpLCB0aW1lb3V0SGFuZGxlKCkpO1xuICAgICAgcmVzZXRXb3JrSW5Qcm9ncmVzc1N0YWNrKCk7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSByb290O1xuICAgICAgd29ya0luUHJvZ3Jlc3MgPSB0aW1lb3V0SGFuZGxlID0gY3JlYXRlV29ya0luUHJvZ3Jlc3Mocm9vdC5jdXJyZW50LCBudWxsKTtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gbGFuZXM7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IE5vdFN1c3BlbmRlZDtcbiAgICAgIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290RGlkU2tpcFN1c3BlbmRlZFNpYmxpbmdzID0gITE7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RJc1ByZXJlbmRlcmluZyA9IGNoZWNrSWZSb290SXNQcmVyZW5kZXJpbmcocm9vdCwgbGFuZXMpO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290RGlkQXR0YWNoUGluZ0xpc3RlbmVyID0gITE7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEluUHJvZ3Jlc3M7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJldHJ5TGFuZXMgPVxuICAgICAgICB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSA9XG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzID1cbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMgPVxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgPVxuICAgICAgICAgIDA7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyA9IHdvcmtJblByb2dyZXNzUm9vdENvbmN1cnJlbnRFcnJvcnMgPVxuICAgICAgICBudWxsO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290RGlkSW5jbHVkZVJlY3Vyc2l2ZVJlbmRlclVwZGF0ZSA9ICExO1xuICAgICAgMCAhPT0gKGxhbmVzICYgOCkgJiYgKGxhbmVzIHw9IGxhbmVzICYgMzIpO1xuICAgICAgdmFyIGFsbEVudGFuZ2xlZExhbmVzID0gcm9vdC5lbnRhbmdsZWRMYW5lcztcbiAgICAgIGlmICgwICE9PSBhbGxFbnRhbmdsZWRMYW5lcylcbiAgICAgICAgZm9yIChcbiAgICAgICAgICByb290ID0gcm9vdC5lbnRhbmdsZW1lbnRzLCBhbGxFbnRhbmdsZWRMYW5lcyAmPSBsYW5lcztcbiAgICAgICAgICAwIDwgYWxsRW50YW5nbGVkTGFuZXM7XG5cbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFyIGluZGV4ID0gMzEgLSBjbHozMihhbGxFbnRhbmdsZWRMYW5lcyksXG4gICAgICAgICAgICBsYW5lID0gMSA8PCBpbmRleDtcbiAgICAgICAgICBsYW5lcyB8PSByb290W2luZGV4XTtcbiAgICAgICAgICBhbGxFbnRhbmdsZWRMYW5lcyAmPSB+bGFuZTtcbiAgICAgICAgfVxuICAgICAgZW50YW5nbGVkUmVuZGVyTGFuZXMgPSBsYW5lcztcbiAgICAgIGZpbmlzaFF1ZXVlaW5nQ29uY3VycmVudFVwZGF0ZXMoKTtcbiAgICAgIGxhbmVzID0gZ2V0Q3VycmVudFRpbWUoKTtcbiAgICAgIDFlMyA8IGxhbmVzIC0gbGFzdFJlc2V0VGltZSAmJlxuICAgICAgICAoKFJlYWN0U2hhcmVkSW50ZXJuYWxzLnJlY2VudGx5Q3JlYXRlZE93bmVyU3RhY2tzID0gMCksXG4gICAgICAgIChsYXN0UmVzZXRUaW1lID0gbGFuZXMpKTtcbiAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmRpc2NhcmRQZW5kaW5nV2FybmluZ3MoKTtcbiAgICAgIHJldHVybiB0aW1lb3V0SGFuZGxlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVUaHJvdyhyb290LCB0aHJvd25WYWx1ZSkge1xuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIgPSBudWxsO1xuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IENvbnRleHRPbmx5RGlzcGF0Y2hlcjtcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLmdldEN1cnJlbnRTdGFjayA9IG51bGw7XG4gICAgICBpc1JlbmRlcmluZyA9ICExO1xuICAgICAgY3VycmVudCA9IG51bGw7XG4gICAgICB0aHJvd25WYWx1ZSA9PT0gU3VzcGVuc2VFeGNlcHRpb24gfHxcbiAgICAgIHRocm93blZhbHVlID09PSBTdXNwZW5zZUFjdGlvbkV4Y2VwdGlvblxuICAgICAgICA/ICgodGhyb3duVmFsdWUgPSBnZXRTdXNwZW5kZWRUaGVuYWJsZSgpKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBTdXNwZW5kZWRPbkltbWVkaWF0ZSkpXG4gICAgICAgIDogdGhyb3duVmFsdWUgPT09IFN1c3BlbnNleUNvbW1pdEV4Y2VwdGlvblxuICAgICAgICAgID8gKCh0aHJvd25WYWx1ZSA9IGdldFN1c3BlbmRlZFRoZW5hYmxlKCkpLFxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gU3VzcGVuZGVkT25JbnN0YW5jZSkpXG4gICAgICAgICAgOiAod29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPVxuICAgICAgICAgICAgICB0aHJvd25WYWx1ZSA9PT0gU2VsZWN0aXZlSHlkcmF0aW9uRXhjZXB0aW9uXG4gICAgICAgICAgICAgICAgPyBTdXNwZW5kZWRPbkh5ZHJhdGlvblxuICAgICAgICAgICAgICAgIDogbnVsbCAhPT0gdGhyb3duVmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHRocm93blZhbHVlICYmXG4gICAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHRocm93blZhbHVlLnRoZW5cbiAgICAgICAgICAgICAgICAgID8gU3VzcGVuZGVkT25EZXByZWNhdGVkVGhyb3dQcm9taXNlXG4gICAgICAgICAgICAgICAgICA6IFN1c3BlbmRlZE9uRXJyb3IpO1xuICAgICAgd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IHRocm93blZhbHVlO1xuICAgICAgdmFyIGVycm9yZWRXb3JrID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICBpZiAobnVsbCA9PT0gZXJyb3JlZFdvcmspXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEZhdGFsRXJyb3JlZCksXG4gICAgICAgICAgbG9nVW5jYXVnaHRFcnJvcihcbiAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICBjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlcih0aHJvd25WYWx1ZSwgcm9vdC5jdXJyZW50KVxuICAgICAgICAgICk7XG4gICAgICBlbHNlXG4gICAgICAgIHN3aXRjaCAoXG4gICAgICAgICAgKGVycm9yZWRXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSAmJlxuICAgICAgICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREdXJhdGlvbihlcnJvcmVkV29yayksXG4gICAgICAgICAgbWFya0NvbXBvbmVudFJlbmRlclN0b3BwZWQoKSxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbilcbiAgICAgICAgKSB7XG4gICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkVycm9yOlxuICAgICAgICAgICAgbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgICAgICAgICAgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudEVycm9yZWQgJiZcbiAgICAgICAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50RXJyb3JlZChcbiAgICAgICAgICAgICAgICBlcnJvcmVkV29yayxcbiAgICAgICAgICAgICAgICB0aHJvd25WYWx1ZSxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkRhdGE6XG4gICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkFjdGlvbjpcbiAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uSW1tZWRpYXRlOlxuICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25EZXByZWNhdGVkVGhyb3dQcm9taXNlOlxuICAgICAgICAgIGNhc2UgU3VzcGVuZGVkQW5kUmVhZHlUb0NvbnRpbnVlOlxuICAgICAgICAgICAgbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgICAgICAgICAgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudFN1c3BlbmRlZCAmJlxuICAgICAgICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRTdXNwZW5kZWQoXG4gICAgICAgICAgICAgICAgZXJyb3JlZFdvcmssXG4gICAgICAgICAgICAgICAgdGhyb3duVmFsdWUsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzaG91bGRSZW1haW5PblByZXZpb3VzU2NyZWVuKCkge1xuICAgICAgdmFyIGhhbmRsZXIgPSBzdXNwZW5zZUhhbmRsZXJTdGFja0N1cnNvci5jdXJyZW50O1xuICAgICAgcmV0dXJuIG51bGwgPT09IGhhbmRsZXJcbiAgICAgICAgPyAhMFxuICAgICAgICA6ICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAmIDQxOTQwNDgpID09PVxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXNcbiAgICAgICAgICA/IG51bGwgPT09IHNoZWxsQm91bmRhcnlcbiAgICAgICAgICAgID8gITBcbiAgICAgICAgICAgIDogITFcbiAgICAgICAgICA6ICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAmIDYyOTE0NTYwKSA9PT1cbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyB8fFxuICAgICAgICAgICAgICAwICE9PSAod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiA1MzY4NzA5MTIpXG4gICAgICAgICAgICA/IGhhbmRsZXIgPT09IHNoZWxsQm91bmRhcnlcbiAgICAgICAgICAgIDogITE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2hEaXNwYXRjaGVyKCkge1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBDb250ZXh0T25seURpc3BhdGNoZXI7XG4gICAgICByZXR1cm4gbnVsbCA9PT0gcHJldkRpc3BhdGNoZXIgPyBDb250ZXh0T25seURpc3BhdGNoZXIgOiBwcmV2RGlzcGF0Y2hlcjtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHVzaEFzeW5jRGlzcGF0Y2hlcigpIHtcbiAgICAgIHZhciBwcmV2QXN5bmNEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuQTtcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkEgPSBEZWZhdWx0QXN5bmNEaXNwYXRjaGVyO1xuICAgICAgcmV0dXJuIHByZXZBc3luY0Rpc3BhdGNoZXI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbmRlckRpZFN1c3BlbmREZWxheUlmUG9zc2libGUoKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdFN1c3BlbmRlZFdpdGhEZWxheTtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdERpZFNraXBTdXNwZW5kZWRTaWJsaW5ncyB8fFxuICAgICAgICAoKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgNDE5NDA0OCkgIT09XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiZcbiAgICAgICAgICBudWxsICE9PSBzdXNwZW5zZUhhbmRsZXJTdGFja0N1cnNvci5jdXJyZW50KSB8fFxuICAgICAgICAod29ya0luUHJvZ3Jlc3NSb290SXNQcmVyZW5kZXJpbmcgPSAhMCk7XG4gICAgICAoMCA9PT0gKHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyAmIDEzNDIxNzcyNykgJiZcbiAgICAgICAgMCA9PT0gKHdvcmtJblByb2dyZXNzUm9vdEludGVybGVhdmVkVXBkYXRlZExhbmVzICYgMTM0MjE3NzI3KSkgfHxcbiAgICAgICAgbnVsbCA9PT0gd29ya0luUHJvZ3Jlc3NSb290IHx8XG4gICAgICAgIG1hcmtSb290U3VzcGVuZGVkKFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdCxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSxcbiAgICAgICAgICAhMVxuICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZW5kZXJSb290U3luYyhyb290LCBsYW5lcywgc2hvdWxkWWllbGRGb3JQcmVyZW5kZXJpbmcpIHtcbiAgICAgIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gICAgICBleGVjdXRpb25Db250ZXh0IHw9IFJlbmRlckNvbnRleHQ7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBwdXNoRGlzcGF0Y2hlcigpLFxuICAgICAgICBwcmV2QXN5bmNEaXNwYXRjaGVyID0gcHVzaEFzeW5jRGlzcGF0Y2hlcigpO1xuICAgICAgaWYgKFxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3QgIT09IHJvb3QgfHxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgIT09IGxhbmVzXG4gICAgICApIHtcbiAgICAgICAgaWYgKGlzRGV2VG9vbHNQcmVzZW50KSB7XG4gICAgICAgICAgdmFyIG1lbW9pemVkVXBkYXRlcnMgPSByb290Lm1lbW9pemVkVXBkYXRlcnM7XG4gICAgICAgICAgMCA8IG1lbW9pemVkVXBkYXRlcnMuc2l6ZSAmJlxuICAgICAgICAgICAgKHJlc3RvcmVQZW5kaW5nVXBkYXRlcnMocm9vdCwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgbWVtb2l6ZWRVcGRhdGVycy5jbGVhcigpKTtcbiAgICAgICAgICBtb3ZlUGVuZGluZ0ZpYmVyc1RvTWVtb2l6ZWQocm9vdCwgbGFuZXMpO1xuICAgICAgICB9XG4gICAgICAgIHdvcmtJblByb2dyZXNzVHJhbnNpdGlvbnMgPSBudWxsO1xuICAgICAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBsYW5lcyk7XG4gICAgICB9XG4gICAgICBtYXJrUmVuZGVyU3RhcnRlZChsYW5lcyk7XG4gICAgICBsYW5lcyA9ICExO1xuICAgICAgbWVtb2l6ZWRVcGRhdGVycyA9IHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXM7XG4gICAgICBhOiBkb1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uICE9PSBOb3RTdXNwZW5kZWQgJiZcbiAgICAgICAgICAgIG51bGwgIT09IHdvcmtJblByb2dyZXNzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB2YXIgdW5pdE9mV29yayA9IHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICB0aHJvd25WYWx1ZSA9IHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWU7XG4gICAgICAgICAgICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uKSB7XG4gICAgICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25IeWRyYXRpb246XG4gICAgICAgICAgICAgICAgcmVzZXRXb3JrSW5Qcm9ncmVzc1N0YWNrKCk7XG4gICAgICAgICAgICAgICAgbWVtb2l6ZWRVcGRhdGVycyA9IFJvb3RTdXNwZW5kZWRBdFRoZVNoZWxsO1xuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25JbW1lZGlhdGU6XG4gICAgICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25EYXRhOlxuICAgICAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uQWN0aW9uOlxuICAgICAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uRGVwcmVjYXRlZFRocm93UHJvbWlzZTpcbiAgICAgICAgICAgICAgICBudWxsID09PSBzdXNwZW5zZUhhbmRsZXJTdGFja0N1cnNvci5jdXJyZW50ICYmIChsYW5lcyA9ICEwKTtcbiAgICAgICAgICAgICAgICB2YXIgcmVhc29uID0gd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb247XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBOb3RTdXNwZW5kZWQ7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhyb3dBbmRVbndpbmRXb3JrTG9vcChyb290LCB1bml0T2ZXb3JrLCB0aHJvd25WYWx1ZSwgcmVhc29uKTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBzaG91bGRZaWVsZEZvclByZXJlbmRlcmluZyAmJlxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290SXNQcmVyZW5kZXJpbmdcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIG1lbW9pemVkVXBkYXRlcnMgPSBSb290SW5Qcm9ncmVzcztcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIChyZWFzb24gPSB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiksXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBOb3RTdXNwZW5kZWQpLFxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsKSxcbiAgICAgICAgICAgICAgICAgIHRocm93QW5kVW53aW5kV29ya0xvb3Aocm9vdCwgdW5pdE9mV29yaywgdGhyb3duVmFsdWUsIHJlYXNvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHdvcmtMb29wU3luYygpO1xuICAgICAgICAgIG1lbW9pemVkVXBkYXRlcnMgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGNhdGNoICh0aHJvd25WYWx1ZSQ4KSB7XG4gICAgICAgICAgaGFuZGxlVGhyb3cocm9vdCwgdGhyb3duVmFsdWUkOCk7XG4gICAgICAgIH1cbiAgICAgIHdoaWxlICgxKTtcbiAgICAgIGxhbmVzICYmIHJvb3Quc2hlbGxTdXNwZW5kQ291bnRlcisrO1xuICAgICAgcmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzKCk7XG4gICAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscy5BID0gcHJldkFzeW5jRGlzcGF0Y2hlcjtcbiAgICAgIG1hcmtSZW5kZXJTdG9wcGVkKCk7XG4gICAgICBudWxsID09PSB3b3JrSW5Qcm9ncmVzcyAmJlxuICAgICAgICAoKHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGwpLFxuICAgICAgICAod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSAwKSxcbiAgICAgICAgZmluaXNoUXVldWVpbmdDb25jdXJyZW50VXBkYXRlcygpKTtcbiAgICAgIHJldHVybiBtZW1vaXplZFVwZGF0ZXJzO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3b3JrTG9vcFN5bmMoKSB7XG4gICAgICBmb3IgKDsgbnVsbCAhPT0gd29ya0luUHJvZ3Jlc3M7ICkgcGVyZm9ybVVuaXRPZldvcmsod29ya0luUHJvZ3Jlc3MpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZW5kZXJSb290Q29uY3VycmVudChyb290LCBsYW5lcykge1xuICAgICAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgICAgIGV4ZWN1dGlvbkNvbnRleHQgfD0gUmVuZGVyQ29udGV4dDtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IHB1c2hEaXNwYXRjaGVyKCksXG4gICAgICAgIHByZXZBc3luY0Rpc3BhdGNoZXIgPSBwdXNoQXN5bmNEaXNwYXRjaGVyKCk7XG4gICAgICBpZiAoXG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdCAhPT0gcm9vdCB8fFxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAhPT0gbGFuZXNcbiAgICAgICkge1xuICAgICAgICBpZiAoaXNEZXZUb29sc1ByZXNlbnQpIHtcbiAgICAgICAgICB2YXIgbWVtb2l6ZWRVcGRhdGVycyA9IHJvb3QubWVtb2l6ZWRVcGRhdGVycztcbiAgICAgICAgICAwIDwgbWVtb2l6ZWRVcGRhdGVycy5zaXplICYmXG4gICAgICAgICAgICAocmVzdG9yZVBlbmRpbmdVcGRhdGVycyhyb290LCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyksXG4gICAgICAgICAgICBtZW1vaXplZFVwZGF0ZXJzLmNsZWFyKCkpO1xuICAgICAgICAgIG1vdmVQZW5kaW5nRmliZXJzVG9NZW1vaXplZChyb290LCBsYW5lcyk7XG4gICAgICAgIH1cbiAgICAgICAgd29ya0luUHJvZ3Jlc3NUcmFuc2l0aW9ucyA9IG51bGw7XG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlclRhcmdldFRpbWUgPSBub3ckMSgpICsgUkVOREVSX1RJTUVPVVRfTVM7XG4gICAgICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIGxhbmVzKTtcbiAgICAgIH0gZWxzZVxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RJc1ByZXJlbmRlcmluZyA9IGNoZWNrSWZSb290SXNQcmVyZW5kZXJpbmcoXG4gICAgICAgICAgcm9vdCxcbiAgICAgICAgICBsYW5lc1xuICAgICAgICApO1xuICAgICAgbWFya1JlbmRlclN0YXJ0ZWQobGFuZXMpO1xuICAgICAgYTogZG9cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiAhPT0gTm90U3VzcGVuZGVkICYmXG4gICAgICAgICAgICBudWxsICE9PSB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgIClcbiAgICAgICAgICAgIGI6IHN3aXRjaCAoXG4gICAgICAgICAgICAgICgobGFuZXMgPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgIChtZW1vaXplZFVwZGF0ZXJzID0gd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSksXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25FcnJvcjpcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IE5vdFN1c3BlbmRlZDtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aHJvd0FuZFVud2luZFdvcmtMb29wKFxuICAgICAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgICAgICAgbWVtb2l6ZWRVcGRhdGVycyxcbiAgICAgICAgICAgICAgICAgIFN1c3BlbmRlZE9uRXJyb3JcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uRGF0YTpcbiAgICAgICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkFjdGlvbjpcbiAgICAgICAgICAgICAgICBpZiAoaXNUaGVuYWJsZVJlc29sdmVkKG1lbW9pemVkVXBkYXRlcnMpKSB7XG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IE5vdFN1c3BlbmRlZDtcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgcmVwbGF5U3VzcGVuZGVkVW5pdE9mV29yayhsYW5lcyk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGFuZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gIT09IFN1c3BlbmRlZE9uRGF0YSAmJlxuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiAhPT0gU3VzcGVuZGVkT25BY3Rpb24pIHx8XG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdCAhPT0gcm9vdCB8fFxuICAgICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPVxuICAgICAgICAgICAgICAgICAgICAgIFN1c3BlbmRlZEFuZFJlYWR5VG9Db250aW51ZSk7XG4gICAgICAgICAgICAgICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBtZW1vaXplZFVwZGF0ZXJzLnRoZW4obGFuZXMsIGxhbmVzKTtcbiAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uSW1tZWRpYXRlOlxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gU3VzcGVuZGVkQW5kUmVhZHlUb0NvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25JbnN0YW5jZTpcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9XG4gICAgICAgICAgICAgICAgICBTdXNwZW5kZWRPbkluc3RhbmNlQW5kUmVhZHlUb0NvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIGNhc2UgU3VzcGVuZGVkQW5kUmVhZHlUb0NvbnRpbnVlOlxuICAgICAgICAgICAgICAgIGlzVGhlbmFibGVSZXNvbHZlZChtZW1vaXplZFVwZGF0ZXJzKVxuICAgICAgICAgICAgICAgICAgPyAoKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gTm90U3VzcGVuZGVkKSxcbiAgICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsKSxcbiAgICAgICAgICAgICAgICAgICAgcmVwbGF5U3VzcGVuZGVkVW5pdE9mV29yayhsYW5lcykpXG4gICAgICAgICAgICAgICAgICA6ICgod29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBOb3RTdXNwZW5kZWQpLFxuICAgICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IG51bGwpLFxuICAgICAgICAgICAgICAgICAgICB0aHJvd0FuZFVud2luZFdvcmtMb29wKFxuICAgICAgICAgICAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgICAgICAgICAgbWVtb2l6ZWRVcGRhdGVycyxcbiAgICAgICAgICAgICAgICAgICAgICBTdXNwZW5kZWRBbmRSZWFkeVRvQ29udGludWVcbiAgICAgICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25JbnN0YW5jZUFuZFJlYWR5VG9Db250aW51ZTpcbiAgICAgICAgICAgICAgICB2YXIgcmVzb3VyY2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgICAgICAgICB2YXIgaG9zdEZpYmVyID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBwcmVsb2FkUmVzb3VyY2UocmVzb3VyY2UpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGhvc3RGaWJlci5zdGF0ZU5vZGUuY29tcGxldGVcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBOb3RTdXNwZW5kZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIHNpYmxpbmcgPSBob3N0RmliZXIuc2libGluZztcbiAgICAgICAgICAgICAgICAgICAgICBpZiAobnVsbCAhPT0gc2libGluZykgd29ya0luUHJvZ3Jlc3MgPSBzaWJsaW5nO1xuICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldHVybkZpYmVyID0gaG9zdEZpYmVyLnJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgIT09IHJldHVybkZpYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gKCh3b3JrSW5Qcm9ncmVzcyA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZVVuaXRPZldvcmsocmV0dXJuRmliZXIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6ICh3b3JrSW5Qcm9ncmVzcyA9IG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBicmVhayBiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICBcIlVuZXhwZWN0ZWQgdHlwZSBvZiBmaWJlciB0cmlnZ2VyZWQgYSBzdXNwZW5zZXkgY29tbWl0LiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gTm90U3VzcGVuZGVkO1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRocm93QW5kVW53aW5kV29ya0xvb3AoXG4gICAgICAgICAgICAgICAgICByb290LFxuICAgICAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgICAgICBtZW1vaXplZFVwZGF0ZXJzLFxuICAgICAgICAgICAgICAgICAgU3VzcGVuZGVkT25JbnN0YW5jZUFuZFJlYWR5VG9Db250aW51ZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25EZXByZWNhdGVkVGhyb3dQcm9taXNlOlxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gTm90U3VzcGVuZGVkO1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRocm93QW5kVW53aW5kV29ya0xvb3AoXG4gICAgICAgICAgICAgICAgICByb290LFxuICAgICAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgICAgICBtZW1vaXplZFVwZGF0ZXJzLFxuICAgICAgICAgICAgICAgICAgU3VzcGVuZGVkT25EZXByZWNhdGVkVGhyb3dQcm9taXNlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkh5ZHJhdGlvbjpcbiAgICAgICAgICAgICAgICByZXNldFdvcmtJblByb2dyZXNzU3RhY2soKTtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdFN1c3BlbmRlZEF0VGhlU2hlbGw7XG4gICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICAgIFwiVW5leHBlY3RlZCBTdXNwZW5kZWRSZWFzb24uIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIG51bGwgIT09IFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFjdFF1ZXVlXG4gICAgICAgICAgICA/IHdvcmtMb29wU3luYygpXG4gICAgICAgICAgICA6IHdvcmtMb29wQ29uY3VycmVudEJ5U2NoZWR1bGVyKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gY2F0Y2ggKHRocm93blZhbHVlJDkpIHtcbiAgICAgICAgICBoYW5kbGVUaHJvdyhyb290LCB0aHJvd25WYWx1ZSQ5KTtcbiAgICAgICAgfVxuICAgICAgd2hpbGUgKDEpO1xuICAgICAgcmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzKCk7XG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscy5BID0gcHJldkFzeW5jRGlzcGF0Y2hlcjtcbiAgICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcbiAgICAgIGlmIChudWxsICE9PSB3b3JrSW5Qcm9ncmVzcylcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtSZW5kZXJZaWVsZGVkICYmXG4gICAgICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtSZW5kZXJZaWVsZGVkKCksXG4gICAgICAgICAgUm9vdEluUHJvZ3Jlc3NcbiAgICAgICAgKTtcbiAgICAgIG1hcmtSZW5kZXJTdG9wcGVkKCk7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSBudWxsO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSAwO1xuICAgICAgZmluaXNoUXVldWVpbmdDb25jdXJyZW50VXBkYXRlcygpO1xuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdvcmtMb29wQ29uY3VycmVudEJ5U2NoZWR1bGVyKCkge1xuICAgICAgZm9yICg7IG51bGwgIT09IHdvcmtJblByb2dyZXNzICYmICFzaG91bGRZaWVsZCgpOyApXG4gICAgICAgIHBlcmZvcm1Vbml0T2ZXb3JrKHdvcmtJblByb2dyZXNzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGVyZm9ybVVuaXRPZldvcmsodW5pdE9mV29yaykge1xuICAgICAgdmFyIGN1cnJlbnQgPSB1bml0T2ZXb3JrLmFsdGVybmF0ZTtcbiAgICAgICh1bml0T2ZXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZVxuICAgICAgICA/IChzdGFydFByb2ZpbGVyVGltZXIodW5pdE9mV29yayksXG4gICAgICAgICAgKGN1cnJlbnQgPSBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgIHVuaXRPZldvcmssXG4gICAgICAgICAgICBiZWdpbldvcmssXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgdW5pdE9mV29yayxcbiAgICAgICAgICAgIGVudGFuZ2xlZFJlbmRlckxhbmVzXG4gICAgICAgICAgKSksXG4gICAgICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREdXJhdGlvbih1bml0T2ZXb3JrKSlcbiAgICAgICAgOiAoY3VycmVudCA9IHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgdW5pdE9mV29yayxcbiAgICAgICAgICAgIGJlZ2luV29yayxcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB1bml0T2ZXb3JrLFxuICAgICAgICAgICAgZW50YW5nbGVkUmVuZGVyTGFuZXNcbiAgICAgICAgICApKTtcbiAgICAgIHVuaXRPZldvcmsubWVtb2l6ZWRQcm9wcyA9IHVuaXRPZldvcmsucGVuZGluZ1Byb3BzO1xuICAgICAgbnVsbCA9PT0gY3VycmVudFxuICAgICAgICA/IGNvbXBsZXRlVW5pdE9mV29yayh1bml0T2ZXb3JrKVxuICAgICAgICA6ICh3b3JrSW5Qcm9ncmVzcyA9IGN1cnJlbnQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXBsYXlTdXNwZW5kZWRVbml0T2ZXb3JrKHVuaXRPZldvcmspIHtcbiAgICAgIHZhciBuZXh0ID0gcnVuV2l0aEZpYmVySW5ERVYodW5pdE9mV29yaywgcmVwbGF5QmVnaW5Xb3JrLCB1bml0T2ZXb3JrKTtcbiAgICAgIHVuaXRPZldvcmsubWVtb2l6ZWRQcm9wcyA9IHVuaXRPZldvcmsucGVuZGluZ1Byb3BzO1xuICAgICAgbnVsbCA9PT0gbmV4dCA/IGNvbXBsZXRlVW5pdE9mV29yayh1bml0T2ZXb3JrKSA6ICh3b3JrSW5Qcm9ncmVzcyA9IG5leHQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXBsYXlCZWdpbldvcmsodW5pdE9mV29yaykge1xuICAgICAgdmFyIGN1cnJlbnQgPSB1bml0T2ZXb3JrLmFsdGVybmF0ZSxcbiAgICAgICAgaXNQcm9maWxpbmdNb2RlID0gKHVuaXRPZldvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlO1xuICAgICAgaXNQcm9maWxpbmdNb2RlICYmIHN0YXJ0UHJvZmlsZXJUaW1lcih1bml0T2ZXb3JrKTtcbiAgICAgIHN3aXRjaCAodW5pdE9mV29yay50YWcpIHtcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIGN1cnJlbnQgPSByZXBsYXlGdW5jdGlvbkNvbXBvbmVudChcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB1bml0T2ZXb3JrLFxuICAgICAgICAgICAgdW5pdE9mV29yay5wZW5kaW5nUHJvcHMsXG4gICAgICAgICAgICB1bml0T2ZXb3JrLnR5cGUsXG4gICAgICAgICAgICB2b2lkIDAsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgY3VycmVudCA9IHJlcGxheUZ1bmN0aW9uQ29tcG9uZW50KFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHVuaXRPZldvcmssXG4gICAgICAgICAgICB1bml0T2ZXb3JrLnBlbmRpbmdQcm9wcyxcbiAgICAgICAgICAgIHVuaXRPZldvcmsudHlwZS5yZW5kZXIsXG4gICAgICAgICAgICB1bml0T2ZXb3JrLnJlZixcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJlc2V0SG9va3NPblVud2luZCh1bml0T2ZXb3JrKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB1bndpbmRJbnRlcnJ1cHRlZFdvcmsoY3VycmVudCwgdW5pdE9mV29yayksXG4gICAgICAgICAgICAodW5pdE9mV29yayA9IHdvcmtJblByb2dyZXNzID1cbiAgICAgICAgICAgICAgcmVzZXRXb3JrSW5Qcm9ncmVzcyh1bml0T2ZXb3JrLCBlbnRhbmdsZWRSZW5kZXJMYW5lcykpLFxuICAgICAgICAgICAgKGN1cnJlbnQgPSBiZWdpbldvcmsoY3VycmVudCwgdW5pdE9mV29yaywgZW50YW5nbGVkUmVuZGVyTGFuZXMpKTtcbiAgICAgIH1cbiAgICAgIGlzUHJvZmlsaW5nTW9kZSAmJlxuICAgICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZER1cmF0aW9uKHVuaXRPZldvcmspO1xuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRocm93QW5kVW53aW5kV29ya0xvb3AoXG4gICAgICByb290LFxuICAgICAgdW5pdE9mV29yayxcbiAgICAgIHRocm93blZhbHVlLFxuICAgICAgc3VzcGVuZGVkUmVhc29uXG4gICAgKSB7XG4gICAgICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcbiAgICAgIHJlc2V0SG9va3NPblVud2luZCh1bml0T2ZXb3JrKTtcbiAgICAgIHRoZW5hYmxlU3RhdGUkMSA9IG51bGw7XG4gICAgICB0aGVuYWJsZUluZGV4Q291bnRlciQxID0gMDtcbiAgICAgIHZhciByZXR1cm5GaWJlciA9IHVuaXRPZldvcmsucmV0dXJuO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRocm93RXhjZXB0aW9uKFxuICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgdW5pdE9mV29yayxcbiAgICAgICAgICAgIHRocm93blZhbHVlLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXNcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290RmF0YWxFcnJvcmVkO1xuICAgICAgICAgIGxvZ1VuY2F1Z2h0RXJyb3IoXG4gICAgICAgICAgICByb290LFxuICAgICAgICAgICAgY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIodGhyb3duVmFsdWUsIHJvb3QuY3VycmVudClcbiAgICAgICAgICApO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChudWxsICE9PSByZXR1cm5GaWJlcikgdGhyb3cgKCh3b3JrSW5Qcm9ncmVzcyA9IHJldHVybkZpYmVyKSwgZXJyb3IpO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEZhdGFsRXJyb3JlZDtcbiAgICAgICAgbG9nVW5jYXVnaHRFcnJvcihcbiAgICAgICAgICByb290LFxuICAgICAgICAgIGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKHRocm93blZhbHVlLCByb290LmN1cnJlbnQpXG4gICAgICAgICk7XG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHVuaXRPZldvcmsuZmxhZ3MgJiAzMjc2OCkge1xuICAgICAgICBpZiAoaXNIeWRyYXRpbmcgfHwgc3VzcGVuZGVkUmVhc29uID09PSBTdXNwZW5kZWRPbkVycm9yKSByb290ID0gITA7XG4gICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdElzUHJlcmVuZGVyaW5nIHx8XG4gICAgICAgICAgMCAhPT0gKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgNTM2ODcwOTEyKVxuICAgICAgICApXG4gICAgICAgICAgcm9vdCA9ICExO1xuICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAoKHdvcmtJblByb2dyZXNzUm9vdERpZFNraXBTdXNwZW5kZWRTaWJsaW5ncyA9IHJvb3QgPSAhMCksXG4gICAgICAgICAgc3VzcGVuZGVkUmVhc29uID09PSBTdXNwZW5kZWRPbkRhdGEgfHxcbiAgICAgICAgICAgIHN1c3BlbmRlZFJlYXNvbiA9PT0gU3VzcGVuZGVkT25BY3Rpb24gfHxcbiAgICAgICAgICAgIHN1c3BlbmRlZFJlYXNvbiA9PT0gU3VzcGVuZGVkT25JbW1lZGlhdGUgfHxcbiAgICAgICAgICAgIHN1c3BlbmRlZFJlYXNvbiA9PT0gU3VzcGVuZGVkT25EZXByZWNhdGVkVGhyb3dQcm9taXNlKVxuICAgICAgICApXG4gICAgICAgICAgKHN1c3BlbmRlZFJlYXNvbiA9IHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yLmN1cnJlbnQpLFxuICAgICAgICAgICAgbnVsbCAhPT0gc3VzcGVuZGVkUmVhc29uICYmXG4gICAgICAgICAgICAgIDEzID09PSBzdXNwZW5kZWRSZWFzb24udGFnICYmXG4gICAgICAgICAgICAgIChzdXNwZW5kZWRSZWFzb24uZmxhZ3MgfD0gMTYzODQpO1xuICAgICAgICB1bndpbmRVbml0T2ZXb3JrKHVuaXRPZldvcmssIHJvb3QpO1xuICAgICAgfSBlbHNlIGNvbXBsZXRlVW5pdE9mV29yayh1bml0T2ZXb3JrKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tcGxldGVVbml0T2ZXb3JrKHVuaXRPZldvcmspIHtcbiAgICAgIHZhciBjb21wbGV0ZWRXb3JrID0gdW5pdE9mV29yaztcbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKDAgIT09IChjb21wbGV0ZWRXb3JrLmZsYWdzICYgMzI3NjgpKSB7XG4gICAgICAgICAgdW53aW5kVW5pdE9mV29yayhcbiAgICAgICAgICAgIGNvbXBsZXRlZFdvcmssXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3REaWRTa2lwU3VzcGVuZGVkU2libGluZ3NcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY3VycmVudCA9IGNvbXBsZXRlZFdvcmsuYWx0ZXJuYXRlO1xuICAgICAgICB1bml0T2ZXb3JrID0gY29tcGxldGVkV29yay5yZXR1cm47XG4gICAgICAgIHN0YXJ0UHJvZmlsZXJUaW1lcihjb21wbGV0ZWRXb3JrKTtcbiAgICAgICAgY3VycmVudCA9IHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgIGNvbXBsZXRlZFdvcmssXG4gICAgICAgICAgY29tcGxldGVXb3JrLFxuICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgY29tcGxldGVkV29yayxcbiAgICAgICAgICBlbnRhbmdsZWRSZW5kZXJMYW5lc1xuICAgICAgICApO1xuICAgICAgICAoY29tcGxldGVkV29yay5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUgJiZcbiAgICAgICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZEluY29tcGxldGVEdXJhdGlvbihjb21wbGV0ZWRXb3JrKTtcbiAgICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnQpIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IGN1cnJlbnQ7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbXBsZXRlZFdvcmsgPSBjb21wbGV0ZWRXb3JrLnNpYmxpbmc7XG4gICAgICAgIGlmIChudWxsICE9PSBjb21wbGV0ZWRXb3JrKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBjb21wbGV0ZWRXb3JrO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IGNvbXBsZXRlZFdvcmsgPSB1bml0T2ZXb3JrO1xuICAgICAgfSB3aGlsZSAobnVsbCAhPT0gY29tcGxldGVkV29yayk7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290SW5Qcm9ncmVzcyAmJlxuICAgICAgICAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RDb21wbGV0ZWQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1bndpbmRVbml0T2ZXb3JrKHVuaXRPZldvcmssIHNraXBTaWJsaW5ncykge1xuICAgICAgZG8ge1xuICAgICAgICB2YXIgbmV4dCA9IHVud2luZFdvcmsodW5pdE9mV29yay5hbHRlcm5hdGUsIHVuaXRPZldvcmspO1xuICAgICAgICBpZiAobnVsbCAhPT0gbmV4dCkge1xuICAgICAgICAgIG5leHQuZmxhZ3MgJj0gMzI3Njc7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBuZXh0O1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKHVuaXRPZldvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmRJbmNvbXBsZXRlRHVyYXRpb24odW5pdE9mV29yayk7XG4gICAgICAgICAgbmV4dCA9IHVuaXRPZldvcmsuYWN0dWFsRHVyYXRpb247XG4gICAgICAgICAgZm9yICh2YXIgY2hpbGQgPSB1bml0T2ZXb3JrLmNoaWxkOyBudWxsICE9PSBjaGlsZDsgKVxuICAgICAgICAgICAgKG5leHQgKz0gY2hpbGQuYWN0dWFsRHVyYXRpb24pLCAoY2hpbGQgPSBjaGlsZC5zaWJsaW5nKTtcbiAgICAgICAgICB1bml0T2ZXb3JrLmFjdHVhbER1cmF0aW9uID0gbmV4dDtcbiAgICAgICAgfVxuICAgICAgICBuZXh0ID0gdW5pdE9mV29yay5yZXR1cm47XG4gICAgICAgIG51bGwgIT09IG5leHQgJiZcbiAgICAgICAgICAoKG5leHQuZmxhZ3MgfD0gMzI3NjgpLFxuICAgICAgICAgIChuZXh0LnN1YnRyZWVGbGFncyA9IDApLFxuICAgICAgICAgIChuZXh0LmRlbGV0aW9ucyA9IG51bGwpKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFza2lwU2libGluZ3MgJiZcbiAgICAgICAgICAoKHVuaXRPZldvcmsgPSB1bml0T2ZXb3JrLnNpYmxpbmcpLCBudWxsICE9PSB1bml0T2ZXb3JrKVxuICAgICAgICApIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IHVuaXRPZldvcms7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gdW5pdE9mV29yayA9IG5leHQ7XG4gICAgICB9IHdoaWxlIChudWxsICE9PSB1bml0T2ZXb3JrKTtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290U3VzcGVuZGVkQXRUaGVTaGVsbDtcbiAgICAgIHdvcmtJblByb2dyZXNzID0gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0Um9vdChcbiAgICAgIHJvb3QsXG4gICAgICBmaW5pc2hlZFdvcmssXG4gICAgICBsYW5lcyxcbiAgICAgIHJlY292ZXJhYmxlRXJyb3JzLFxuICAgICAgdHJhbnNpdGlvbnMsXG4gICAgICBkaWRJbmNsdWRlUmVuZGVyUGhhc2VVcGRhdGUsXG4gICAgICBzcGF3bmVkTGFuZSxcbiAgICAgIHVwZGF0ZWRMYW5lcyxcbiAgICAgIHN1c3BlbmRlZFJldHJ5TGFuZXNcbiAgICApIHtcbiAgICAgIHJvb3QuY2FuY2VsUGVuZGluZ0NvbW1pdCA9IG51bGw7XG4gICAgICBkbyBmbHVzaFBlbmRpbmdFZmZlY3RzKCk7XG4gICAgICB3aGlsZSAocGVuZGluZ0VmZmVjdHNTdGF0dXMgIT09IE5PX1BFTkRJTkdfRUZGRUNUUyk7XG4gICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5mbHVzaExlZ2FjeUNvbnRleHRXYXJuaW5nKCk7XG4gICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5mbHVzaFBlbmRpbmdVbnNhZmVMaWZlY3ljbGVXYXJuaW5ncygpO1xuICAgICAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgIT09IE5vQ29udGV4dClcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJTaG91bGQgbm90IGFscmVhZHkgYmUgd29ya2luZy5cIik7XG4gICAgICBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbW1pdFN0YXJ0ZWQgJiZcbiAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tbWl0U3RhcnRlZChsYW5lcyk7XG4gICAgICBpZiAobnVsbCA9PT0gZmluaXNoZWRXb3JrKSBtYXJrQ29tbWl0U3RvcHBlZCgpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIDAgPT09IGxhbmVzICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiZmluaXNoZWRMYW5lcyBzaG91bGQgbm90IGJlIGVtcHR5IGR1cmluZyBhIGNvbW1pdC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICk7XG4gICAgICAgIGlmIChmaW5pc2hlZFdvcmsgPT09IHJvb3QuY3VycmVudClcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIFwiQ2Fubm90IGNvbW1pdCB0aGUgc2FtZSB0cmVlIGFzIGJlZm9yZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICk7XG4gICAgICAgIGRpZEluY2x1ZGVSZW5kZXJQaGFzZVVwZGF0ZSA9XG4gICAgICAgICAgZmluaXNoZWRXb3JrLmxhbmVzIHwgZmluaXNoZWRXb3JrLmNoaWxkTGFuZXM7XG4gICAgICAgIGRpZEluY2x1ZGVSZW5kZXJQaGFzZVVwZGF0ZSB8PSBjb25jdXJyZW50bHlVcGRhdGVkTGFuZXM7XG4gICAgICAgIG1hcmtSb290RmluaXNoZWQoXG4gICAgICAgICAgcm9vdCxcbiAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICBkaWRJbmNsdWRlUmVuZGVyUGhhc2VVcGRhdGUsXG4gICAgICAgICAgc3Bhd25lZExhbmUsXG4gICAgICAgICAgdXBkYXRlZExhbmVzLFxuICAgICAgICAgIHN1c3BlbmRlZFJldHJ5TGFuZXNcbiAgICAgICAgKTtcbiAgICAgICAgcm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ICYmXG4gICAgICAgICAgKCh3b3JrSW5Qcm9ncmVzcyA9IHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGwpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IDApKTtcbiAgICAgICAgcGVuZGluZ0ZpbmlzaGVkV29yayA9IGZpbmlzaGVkV29yaztcbiAgICAgICAgcGVuZGluZ0VmZmVjdHNSb290ID0gcm9vdDtcbiAgICAgICAgcGVuZGluZ0VmZmVjdHNMYW5lcyA9IGxhbmVzO1xuICAgICAgICBwZW5kaW5nRWZmZWN0c1JlbWFpbmluZ0xhbmVzID0gZGlkSW5jbHVkZVJlbmRlclBoYXNlVXBkYXRlO1xuICAgICAgICBwZW5kaW5nUGFzc2l2ZVRyYW5zaXRpb25zID0gdHJhbnNpdGlvbnM7XG4gICAgICAgIHBlbmRpbmdSZWNvdmVyYWJsZUVycm9ycyA9IHJlY292ZXJhYmxlRXJyb3JzO1xuICAgICAgICAwICE9PSAoZmluaXNoZWRXb3JrLnN1YnRyZWVGbGFncyAmIDEwMjU2KSB8fFxuICAgICAgICAwICE9PSAoZmluaXNoZWRXb3JrLmZsYWdzICYgMTAyNTYpXG4gICAgICAgICAgPyAoKHJvb3QuY2FsbGJhY2tOb2RlID0gbnVsbCksXG4gICAgICAgICAgICAocm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gMCksXG4gICAgICAgICAgICBzY2hlZHVsZUNhbGxiYWNrJDEoTm9ybWFsUHJpb3JpdHkkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCEwKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICA6ICgocm9vdC5jYWxsYmFja05vZGUgPSBudWxsKSwgKHJvb3QuY2FsbGJhY2tQcmlvcml0eSA9IDApKTtcbiAgICAgICAgY29tbWl0U3RhcnRUaW1lID0gbm93KCk7XG4gICAgICAgIHJlY292ZXJhYmxlRXJyb3JzID0gMCAhPT0gKGZpbmlzaGVkV29yay5mbGFncyAmIDEzODc4KTtcbiAgICAgICAgaWYgKDAgIT09IChmaW5pc2hlZFdvcmsuc3VidHJlZUZsYWdzICYgMTM4NzgpIHx8IHJlY292ZXJhYmxlRXJyb3JzKSB7XG4gICAgICAgICAgcmVjb3ZlcmFibGVFcnJvcnMgPSBSZWFjdFNoYXJlZEludGVybmFscy5UO1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSBudWxsO1xuICAgICAgICAgIHRyYW5zaXRpb25zID0gUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucDtcbiAgICAgICAgICBSZWFjdERPTVNoYXJlZEludGVybmFscy5wID0gRGlzY3JldGVFdmVudFByaW9yaXR5O1xuICAgICAgICAgIHNwYXduZWRMYW5lID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgICAgICAgICBleGVjdXRpb25Db250ZXh0IHw9IENvbW1pdENvbnRleHQ7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbW1pdEJlZm9yZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmssIGxhbmVzKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgKGV4ZWN1dGlvbkNvbnRleHQgPSBzcGF3bmVkTGFuZSksXG4gICAgICAgICAgICAgIChSZWFjdERPTVNoYXJlZEludGVybmFscy5wID0gdHJhbnNpdGlvbnMpLFxuICAgICAgICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IHJlY292ZXJhYmxlRXJyb3JzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcGVuZGluZ0VmZmVjdHNTdGF0dXMgPSBQRU5ESU5HX01VVEFUSU9OX1BIQVNFO1xuICAgICAgICBmbHVzaE11dGF0aW9uRWZmZWN0cygpO1xuICAgICAgICBmbHVzaExheW91dEVmZmVjdHMoKTtcbiAgICAgICAgZmx1c2hTcGF3bmVkV29yaygpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBmbHVzaE11dGF0aW9uRWZmZWN0cygpIHtcbiAgICAgIGlmIChwZW5kaW5nRWZmZWN0c1N0YXR1cyA9PT0gUEVORElOR19NVVRBVElPTl9QSEFTRSkge1xuICAgICAgICBwZW5kaW5nRWZmZWN0c1N0YXR1cyA9IE5PX1BFTkRJTkdfRUZGRUNUUztcbiAgICAgICAgdmFyIHJvb3QgPSBwZW5kaW5nRWZmZWN0c1Jvb3QsXG4gICAgICAgICAgZmluaXNoZWRXb3JrID0gcGVuZGluZ0ZpbmlzaGVkV29yayxcbiAgICAgICAgICBsYW5lcyA9IHBlbmRpbmdFZmZlY3RzTGFuZXMsXG4gICAgICAgICAgcm9vdE11dGF0aW9uSGFzRWZmZWN0ID0gMCAhPT0gKGZpbmlzaGVkV29yay5mbGFncyAmIDEzODc4KTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIDAgIT09IChmaW5pc2hlZFdvcmsuc3VidHJlZUZsYWdzICYgMTM4NzgpIHx8XG4gICAgICAgICAgcm9vdE11dGF0aW9uSGFzRWZmZWN0XG4gICAgICAgICkge1xuICAgICAgICAgIHJvb3RNdXRhdGlvbkhhc0VmZmVjdCA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQ7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IG51bGw7XG4gICAgICAgICAgdmFyIHByZXZpb3VzUHJpb3JpdHkgPSBSZWFjdERPTVNoYXJlZEludGVybmFscy5wO1xuICAgICAgICAgIFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnAgPSBEaXNjcmV0ZUV2ZW50UHJpb3JpdHk7XG4gICAgICAgICAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgICAgICAgICBleGVjdXRpb25Db250ZXh0IHw9IENvbW1pdENvbnRleHQ7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGluUHJvZ3Jlc3NMYW5lcyA9IGxhbmVzO1xuICAgICAgICAgICAgaW5Qcm9ncmVzc1Jvb3QgPSByb290O1xuICAgICAgICAgICAgY29tcG9uZW50RWZmZWN0U3RhcnRUaW1lID0gLTEuMTtcbiAgICAgICAgICAgIGNvbW1pdE11dGF0aW9uRWZmZWN0c09uRmliZXIoZmluaXNoZWRXb3JrLCByb290KTtcbiAgICAgICAgICAgIGluUHJvZ3Jlc3NSb290ID0gaW5Qcm9ncmVzc0xhbmVzID0gbnVsbDtcbiAgICAgICAgICAgIGxhbmVzID0gc2VsZWN0aW9uSW5mb3JtYXRpb247XG4gICAgICAgICAgICB2YXIgY3VyRm9jdXNlZEVsZW0gPSBnZXRBY3RpdmVFbGVtZW50RGVlcChyb290LmNvbnRhaW5lckluZm8pLFxuICAgICAgICAgICAgICBwcmlvckZvY3VzZWRFbGVtID0gbGFuZXMuZm9jdXNlZEVsZW0sXG4gICAgICAgICAgICAgIHByaW9yU2VsZWN0aW9uUmFuZ2UgPSBsYW5lcy5zZWxlY3Rpb25SYW5nZTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgY3VyRm9jdXNlZEVsZW0gIT09IHByaW9yRm9jdXNlZEVsZW0gJiZcbiAgICAgICAgICAgICAgcHJpb3JGb2N1c2VkRWxlbSAmJlxuICAgICAgICAgICAgICBwcmlvckZvY3VzZWRFbGVtLm93bmVyRG9jdW1lbnQgJiZcbiAgICAgICAgICAgICAgY29udGFpbnNOb2RlKFxuICAgICAgICAgICAgICAgIHByaW9yRm9jdXNlZEVsZW0ub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG4gICAgICAgICAgICAgICAgcHJpb3JGb2N1c2VkRWxlbVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG51bGwgIT09IHByaW9yU2VsZWN0aW9uUmFuZ2UgJiZcbiAgICAgICAgICAgICAgICBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMocHJpb3JGb2N1c2VkRWxlbSlcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gcHJpb3JTZWxlY3Rpb25SYW5nZS5zdGFydCxcbiAgICAgICAgICAgICAgICAgIGVuZCA9IHByaW9yU2VsZWN0aW9uUmFuZ2UuZW5kO1xuICAgICAgICAgICAgICAgIHZvaWQgMCA9PT0gZW5kICYmIChlbmQgPSBzdGFydCk7XG4gICAgICAgICAgICAgICAgaWYgKFwic2VsZWN0aW9uU3RhcnRcIiBpbiBwcmlvckZvY3VzZWRFbGVtKVxuICAgICAgICAgICAgICAgICAgKHByaW9yRm9jdXNlZEVsZW0uc2VsZWN0aW9uU3RhcnQgPSBzdGFydCksXG4gICAgICAgICAgICAgICAgICAgIChwcmlvckZvY3VzZWRFbGVtLnNlbGVjdGlvbkVuZCA9IE1hdGgubWluKFxuICAgICAgICAgICAgICAgICAgICAgIGVuZCxcbiAgICAgICAgICAgICAgICAgICAgICBwcmlvckZvY3VzZWRFbGVtLnZhbHVlLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHZhciBkb2MgPSBwcmlvckZvY3VzZWRFbGVtLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHdpbiA9IChkb2MgJiYgZG9jLmRlZmF1bHRWaWV3KSB8fCB3aW5kb3c7XG4gICAgICAgICAgICAgICAgICBpZiAod2luLmdldFNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0aW9uID0gd2luLmdldFNlbGVjdGlvbigpLFxuICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHByaW9yRm9jdXNlZEVsZW0udGV4dENvbnRlbnQubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0JGpzY29tcCQwID0gTWF0aC5taW4oXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmlvclNlbGVjdGlvblJhbmdlLnN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICBlbmQkanNjb21wJDAgPVxuICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAwID09PSBwcmlvclNlbGVjdGlvblJhbmdlLmVuZFxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IHN0YXJ0JGpzY29tcCQwXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogTWF0aC5taW4ocHJpb3JTZWxlY3Rpb25SYW5nZS5lbmQsIGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICFzZWxlY3Rpb24uZXh0ZW5kICYmXG4gICAgICAgICAgICAgICAgICAgICAgc3RhcnQkanNjb21wJDAgPiBlbmQkanNjb21wJDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICAoKGN1ckZvY3VzZWRFbGVtID0gZW5kJGpzY29tcCQwKSxcbiAgICAgICAgICAgICAgICAgICAgICAoZW5kJGpzY29tcCQwID0gc3RhcnQkanNjb21wJDApLFxuICAgICAgICAgICAgICAgICAgICAgIChzdGFydCRqc2NvbXAkMCA9IGN1ckZvY3VzZWRFbGVtKSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdGFydE1hcmtlciA9IGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmlvckZvY3VzZWRFbGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQkanNjb21wJDBcbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgIGVuZE1hcmtlciA9IGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmlvckZvY3VzZWRFbGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kJGpzY29tcCQwXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0TWFya2VyICYmXG4gICAgICAgICAgICAgICAgICAgICAgZW5kTWFya2VyICYmXG4gICAgICAgICAgICAgICAgICAgICAgKDEgIT09IHNlbGVjdGlvbi5yYW5nZUNvdW50IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZSAhPT0gc3RhcnRNYXJrZXIubm9kZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck9mZnNldCAhPT0gc3RhcnRNYXJrZXIub2Zmc2V0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNOb2RlICE9PSBlbmRNYXJrZXIubm9kZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0ICE9PSBlbmRNYXJrZXIub2Zmc2V0KVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSBkb2MuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICByYW5nZS5zZXRTdGFydChzdGFydE1hcmtlci5ub2RlLCBzdGFydE1hcmtlci5vZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICBzdGFydCRqc2NvbXAkMCA+IGVuZCRqc2NvbXAkMFxuICAgICAgICAgICAgICAgICAgICAgICAgPyAoc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLmV4dGVuZChlbmRNYXJrZXIubm9kZSwgZW5kTWFya2VyLm9mZnNldCkpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IChyYW5nZS5zZXRFbmQoZW5kTWFya2VyLm5vZGUsIGVuZE1hcmtlci5vZmZzZXQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBkb2MgPSBbXTtcbiAgICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24gPSBwcmlvckZvY3VzZWRFbGVtO1xuICAgICAgICAgICAgICAgIChzZWxlY3Rpb24gPSBzZWxlY3Rpb24ucGFyZW50Tm9kZSk7XG5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDEgPT09IHNlbGVjdGlvbi5ub2RlVHlwZSAmJlxuICAgICAgICAgICAgICAgICAgZG9jLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBzZWxlY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IHNlbGVjdGlvbi5zY3JvbGxMZWZ0LFxuICAgICAgICAgICAgICAgICAgICB0b3A6IHNlbGVjdGlvbi5zY3JvbGxUb3BcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBwcmlvckZvY3VzZWRFbGVtLmZvY3VzICYmXG4gICAgICAgICAgICAgICAgcHJpb3JGb2N1c2VkRWxlbS5mb2N1cygpO1xuICAgICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgIHByaW9yRm9jdXNlZEVsZW0gPSAwO1xuICAgICAgICAgICAgICAgIHByaW9yRm9jdXNlZEVsZW0gPCBkb2MubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHByaW9yRm9jdXNlZEVsZW0rK1xuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB2YXIgaW5mbyA9IGRvY1twcmlvckZvY3VzZWRFbGVtXTtcbiAgICAgICAgICAgICAgICBpbmZvLmVsZW1lbnQuc2Nyb2xsTGVmdCA9IGluZm8ubGVmdDtcbiAgICAgICAgICAgICAgICBpbmZvLmVsZW1lbnQuc2Nyb2xsVG9wID0gaW5mby50b3A7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9lbmFibGVkID0gISFldmVudHNFbmFibGVkO1xuICAgICAgICAgICAgc2VsZWN0aW9uSW5mb3JtYXRpb24gPSBldmVudHNFbmFibGVkID0gbnVsbDtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgKGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dCksXG4gICAgICAgICAgICAgIChSZWFjdERPTVNoYXJlZEludGVybmFscy5wID0gcHJldmlvdXNQcmlvcml0eSksXG4gICAgICAgICAgICAgIChSZWFjdFNoYXJlZEludGVybmFscy5UID0gcm9vdE11dGF0aW9uSGFzRWZmZWN0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcm9vdC5jdXJyZW50ID0gZmluaXNoZWRXb3JrO1xuICAgICAgICBwZW5kaW5nRWZmZWN0c1N0YXR1cyA9IFBFTkRJTkdfTEFZT1VUX1BIQVNFO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBmbHVzaExheW91dEVmZmVjdHMoKSB7XG4gICAgICBpZiAocGVuZGluZ0VmZmVjdHNTdGF0dXMgPT09IFBFTkRJTkdfTEFZT1VUX1BIQVNFKSB7XG4gICAgICAgIHBlbmRpbmdFZmZlY3RzU3RhdHVzID0gTk9fUEVORElOR19FRkZFQ1RTO1xuICAgICAgICB2YXIgcm9vdCA9IHBlbmRpbmdFZmZlY3RzUm9vdCxcbiAgICAgICAgICBmaW5pc2hlZFdvcmsgPSBwZW5kaW5nRmluaXNoZWRXb3JrLFxuICAgICAgICAgIGxhbmVzID0gcGVuZGluZ0VmZmVjdHNMYW5lcyxcbiAgICAgICAgICByb290SGFzTGF5b3V0RWZmZWN0ID0gMCAhPT0gKGZpbmlzaGVkV29yay5mbGFncyAmIDg3NzIpO1xuICAgICAgICBpZiAoMCAhPT0gKGZpbmlzaGVkV29yay5zdWJ0cmVlRmxhZ3MgJiA4NzcyKSB8fCByb290SGFzTGF5b3V0RWZmZWN0KSB7XG4gICAgICAgICAgcm9vdEhhc0xheW91dEVmZmVjdCA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQ7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IG51bGw7XG4gICAgICAgICAgdmFyIF9wcmV2aW91c1ByaW9yaXR5ID0gUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucDtcbiAgICAgICAgICBSZWFjdERPTVNoYXJlZEludGVybmFscy5wID0gRGlzY3JldGVFdmVudFByaW9yaXR5O1xuICAgICAgICAgIHZhciBfcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICAgICAgICAgIGV4ZWN1dGlvbkNvbnRleHQgfD0gQ29tbWl0Q29udGV4dDtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgICAgICAgICAgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0xheW91dEVmZmVjdHNTdGFydGVkICYmXG4gICAgICAgICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0xheW91dEVmZmVjdHNTdGFydGVkKGxhbmVzKSxcbiAgICAgICAgICAgICAgKGluUHJvZ3Jlc3NMYW5lcyA9IGxhbmVzKSxcbiAgICAgICAgICAgICAgKGluUHJvZ3Jlc3NSb290ID0gcm9vdCksXG4gICAgICAgICAgICAgIChjb21wb25lbnRFZmZlY3RTdGFydFRpbWUgPSAtMS4xKSxcbiAgICAgICAgICAgICAgY29tbWl0TGF5b3V0RWZmZWN0T25GaWJlcihcbiAgICAgICAgICAgICAgICByb290LFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yay5hbHRlcm5hdGUsXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIChpblByb2dyZXNzUm9vdCA9IGluUHJvZ3Jlc3NMYW5lcyA9IG51bGwpLFxuICAgICAgICAgICAgICBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgICAgICAgICAgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0xheW91dEVmZmVjdHNTdG9wcGVkICYmXG4gICAgICAgICAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrTGF5b3V0RWZmZWN0c1N0b3BwZWQoKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgKGV4ZWN1dGlvbkNvbnRleHQgPSBfcHJldkV4ZWN1dGlvbkNvbnRleHQpLFxuICAgICAgICAgICAgICAoUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucCA9IF9wcmV2aW91c1ByaW9yaXR5KSxcbiAgICAgICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSByb290SGFzTGF5b3V0RWZmZWN0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcGVuZGluZ0VmZmVjdHNTdGF0dXMgPSBQRU5ESU5HX0FGVEVSX01VVEFUSU9OX1BIQVNFO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBmbHVzaFNwYXduZWRXb3JrKCkge1xuICAgICAgaWYgKFxuICAgICAgICBwZW5kaW5nRWZmZWN0c1N0YXR1cyA9PT0gUEVORElOR19TUEFXTkVEX1dPUksgfHxcbiAgICAgICAgcGVuZGluZ0VmZmVjdHNTdGF0dXMgPT09IFBFTkRJTkdfQUZURVJfTVVUQVRJT05fUEhBU0VcbiAgICAgICkge1xuICAgICAgICBwZW5kaW5nRWZmZWN0c1N0YXR1cyA9IE5PX1BFTkRJTkdfRUZGRUNUUztcbiAgICAgICAgcmVxdWVzdFBhaW50KCk7XG4gICAgICAgIHZhciByb290ID0gcGVuZGluZ0VmZmVjdHNSb290LFxuICAgICAgICAgIGZpbmlzaGVkV29yayA9IHBlbmRpbmdGaW5pc2hlZFdvcmssXG4gICAgICAgICAgbGFuZXMgPSBwZW5kaW5nRWZmZWN0c0xhbmVzLFxuICAgICAgICAgIHJlY292ZXJhYmxlRXJyb3JzID0gcGVuZGluZ1JlY292ZXJhYmxlRXJyb3JzLFxuICAgICAgICAgIHJvb3REaWRIYXZlUGFzc2l2ZUVmZmVjdHMgPVxuICAgICAgICAgICAgMCAhPT0gKGZpbmlzaGVkV29yay5zdWJ0cmVlRmxhZ3MgJiAxMDI1NikgfHxcbiAgICAgICAgICAgIDAgIT09IChmaW5pc2hlZFdvcmsuZmxhZ3MgJiAxMDI1Nik7XG4gICAgICAgIHJvb3REaWRIYXZlUGFzc2l2ZUVmZmVjdHNcbiAgICAgICAgICA/IChwZW5kaW5nRWZmZWN0c1N0YXR1cyA9IFBFTkRJTkdfUEFTU0lWRV9QSEFTRSlcbiAgICAgICAgICA6ICgocGVuZGluZ0VmZmVjdHNTdGF0dXMgPSBOT19QRU5ESU5HX0VGRkVDVFMpLFxuICAgICAgICAgICAgKHBlbmRpbmdGaW5pc2hlZFdvcmsgPSBwZW5kaW5nRWZmZWN0c1Jvb3QgPSBudWxsKSxcbiAgICAgICAgICAgIHJlbGVhc2VSb290UG9vbGVkQ2FjaGUocm9vdCwgcm9vdC5wZW5kaW5nTGFuZXMpLFxuICAgICAgICAgICAgKG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IDApLFxuICAgICAgICAgICAgKHJvb3RXaXRoUGFzc2l2ZU5lc3RlZFVwZGF0ZXMgPSBudWxsKSk7XG4gICAgICAgIHZhciByZW1haW5pbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzO1xuICAgICAgICAwID09PSByZW1haW5pbmdMYW5lcyAmJiAobGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgPSBudWxsKTtcbiAgICAgICAgcm9vdERpZEhhdmVQYXNzaXZlRWZmZWN0cyB8fCBjb21taXREb3VibGVJbnZva2VFZmZlY3RzSW5ERVYocm9vdCk7XG4gICAgICAgIHJvb3REaWRIYXZlUGFzc2l2ZUVmZmVjdHMgPSBsYW5lc1RvRXZlbnRQcmlvcml0eShsYW5lcyk7XG4gICAgICAgIGZpbmlzaGVkV29yayA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBpbmplY3RlZEhvb2sgJiZcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclJvb3RcbiAgICAgICAgKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgZGlkRXJyb3IgPSAxMjggPT09IChmaW5pc2hlZFdvcmsuY3VycmVudC5mbGFncyAmIDEyOCk7XG4gICAgICAgICAgICBzd2l0Y2ggKHJvb3REaWRIYXZlUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAgICAgICAgICAgY2FzZSBEaXNjcmV0ZUV2ZW50UHJpb3JpdHk6XG4gICAgICAgICAgICAgICAgdmFyIHNjaGVkdWxlclByaW9yaXR5ID0gSW1tZWRpYXRlUHJpb3JpdHk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgQ29udGludW91c0V2ZW50UHJpb3JpdHk6XG4gICAgICAgICAgICAgICAgc2NoZWR1bGVyUHJpb3JpdHkgPSBVc2VyQmxvY2tpbmdQcmlvcml0eTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBEZWZhdWx0RXZlbnRQcmlvcml0eTpcbiAgICAgICAgICAgICAgICBzY2hlZHVsZXJQcmlvcml0eSA9IE5vcm1hbFByaW9yaXR5JDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgSWRsZUV2ZW50UHJpb3JpdHk6XG4gICAgICAgICAgICAgICAgc2NoZWR1bGVyUHJpb3JpdHkgPSBJZGxlUHJpb3JpdHk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgc2NoZWR1bGVyUHJpb3JpdHkgPSBOb3JtYWxQcmlvcml0eSQxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5qZWN0ZWRIb29rLm9uQ29tbWl0RmliZXJSb290KFxuICAgICAgICAgICAgICByZW5kZXJlcklELFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgIHNjaGVkdWxlclByaW9yaXR5LFxuICAgICAgICAgICAgICBkaWRFcnJvclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGhhc0xvZ2dlZEVycm9yIHx8XG4gICAgICAgICAgICAgICgoaGFzTG9nZ2VkRXJyb3IgPSAhMCksXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJSZWFjdCBpbnN0cnVtZW50YXRpb24gZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzXCIsXG4gICAgICAgICAgICAgICAgZXJyXG4gICAgICAgICAgICAgICkpO1xuICAgICAgICAgIH1cbiAgICAgICAgaXNEZXZUb29sc1ByZXNlbnQgJiYgcm9vdC5tZW1vaXplZFVwZGF0ZXJzLmNsZWFyKCk7XG4gICAgICAgIG9uQ29tbWl0Um9vdCgpO1xuICAgICAgICBpZiAobnVsbCAhPT0gcmVjb3ZlcmFibGVFcnJvcnMpIHtcbiAgICAgICAgICBkaWRFcnJvciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQ7XG4gICAgICAgICAgc2NoZWR1bGVyUHJpb3JpdHkgPSBSZWFjdERPTVNoYXJlZEludGVybmFscy5wO1xuICAgICAgICAgIFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnAgPSBEaXNjcmV0ZUV2ZW50UHJpb3JpdHk7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IG51bGw7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciBvblJlY292ZXJhYmxlRXJyb3IgPSByb290Lm9uUmVjb3ZlcmFibGVFcnJvcjtcbiAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yayA9IDA7XG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yayA8IHJlY292ZXJhYmxlRXJyb3JzLmxlbmd0aDtcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrKytcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB2YXIgcmVjb3ZlcmFibGVFcnJvciA9IHJlY292ZXJhYmxlRXJyb3JzW2ZpbmlzaGVkV29ya10sXG4gICAgICAgICAgICAgICAgZXJyb3JJbmZvID0gbWFrZUVycm9ySW5mbyhyZWNvdmVyYWJsZUVycm9yLnN0YWNrKTtcbiAgICAgICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICAgICAgcmVjb3ZlcmFibGVFcnJvci5zb3VyY2UsXG4gICAgICAgICAgICAgICAgb25SZWNvdmVyYWJsZUVycm9yLFxuICAgICAgICAgICAgICAgIHJlY292ZXJhYmxlRXJyb3IudmFsdWUsXG4gICAgICAgICAgICAgICAgZXJyb3JJbmZvXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIChSZWFjdFNoYXJlZEludGVybmFscy5UID0gZGlkRXJyb3IpLFxuICAgICAgICAgICAgICAoUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucCA9IHNjaGVkdWxlclByaW9yaXR5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgMCAhPT0gKHBlbmRpbmdFZmZlY3RzTGFuZXMgJiAzKSAmJiBmbHVzaFBlbmRpbmdFZmZlY3RzKCk7XG4gICAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290KTtcbiAgICAgICAgcmVtYWluaW5nTGFuZXMgPSByb290LnBlbmRpbmdMYW5lcztcbiAgICAgICAgMCAhPT0gKGxhbmVzICYgNDE5NDA5MCkgJiYgMCAhPT0gKHJlbWFpbmluZ0xhbmVzICYgNDIpXG4gICAgICAgICAgPyAoKG5lc3RlZFVwZGF0ZVNjaGVkdWxlZCA9ICEwKSxcbiAgICAgICAgICAgIHJvb3QgPT09IHJvb3RXaXRoTmVzdGVkVXBkYXRlc1xuICAgICAgICAgICAgICA/IG5lc3RlZFVwZGF0ZUNvdW50KytcbiAgICAgICAgICAgICAgOiAoKG5lc3RlZFVwZGF0ZUNvdW50ID0gMCksIChyb290V2l0aE5lc3RlZFVwZGF0ZXMgPSByb290KSkpXG4gICAgICAgICAgOiAobmVzdGVkVXBkYXRlQ291bnQgPSAwKTtcbiAgICAgICAgZmx1c2hTeW5jV29ya0Fjcm9zc1Jvb3RzX2ltcGwoMCwgITEpO1xuICAgICAgICBtYXJrQ29tbWl0U3RvcHBlZCgpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBtYWtlRXJyb3JJbmZvKGNvbXBvbmVudFN0YWNrKSB7XG4gICAgICBjb21wb25lbnRTdGFjayA9IHsgY29tcG9uZW50U3RhY2s6IGNvbXBvbmVudFN0YWNrIH07XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29tcG9uZW50U3RhY2ssIFwiZGlnZXN0XCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICdZb3UgYXJlIGFjY2Vzc2luZyBcImRpZ2VzdFwiIGZyb20gdGhlIGVycm9ySW5mbyBvYmplY3QgcGFzc2VkIHRvIG9uUmVjb3ZlcmFibGVFcnJvci4gVGhpcyBwcm9wZXJ0eSBpcyBubyBsb25nZXIgcHJvdmlkZWQgYXMgcGFydCBvZiBlcnJvckluZm8gYnV0IGNhbiBiZSBhY2Nlc3NlZCBhcyBhIHByb3BlcnR5IG9mIHRoZSBFcnJvciBpbnN0YW5jZSBpdHNlbGYuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNvbXBvbmVudFN0YWNrO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWxlYXNlUm9vdFBvb2xlZENhY2hlKHJvb3QsIHJlbWFpbmluZ0xhbmVzKSB7XG4gICAgICAwID09PSAocm9vdC5wb29sZWRDYWNoZUxhbmVzICY9IHJlbWFpbmluZ0xhbmVzKSAmJlxuICAgICAgICAoKHJlbWFpbmluZ0xhbmVzID0gcm9vdC5wb29sZWRDYWNoZSksXG4gICAgICAgIG51bGwgIT0gcmVtYWluaW5nTGFuZXMgJiZcbiAgICAgICAgICAoKHJvb3QucG9vbGVkQ2FjaGUgPSBudWxsKSwgcmVsZWFzZUNhY2hlKHJlbWFpbmluZ0xhbmVzKSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmbHVzaFBlbmRpbmdFZmZlY3RzKHdhc0RlbGF5ZWRDb21taXQpIHtcbiAgICAgIGZsdXNoTXV0YXRpb25FZmZlY3RzKCk7XG4gICAgICBmbHVzaExheW91dEVmZmVjdHMoKTtcbiAgICAgIGZsdXNoU3Bhd25lZFdvcmsoKTtcbiAgICAgIHJldHVybiBmbHVzaFBhc3NpdmVFZmZlY3RzKHdhc0RlbGF5ZWRDb21taXQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmbHVzaFBhc3NpdmVFZmZlY3RzKCkge1xuICAgICAgaWYgKHBlbmRpbmdFZmZlY3RzU3RhdHVzICE9PSBQRU5ESU5HX1BBU1NJVkVfUEhBU0UpIHJldHVybiAhMTtcbiAgICAgIHZhciByb290ID0gcGVuZGluZ0VmZmVjdHNSb290LFxuICAgICAgICByZW1haW5pbmdMYW5lcyA9IHBlbmRpbmdFZmZlY3RzUmVtYWluaW5nTGFuZXM7XG4gICAgICBwZW5kaW5nRWZmZWN0c1JlbWFpbmluZ0xhbmVzID0gMDtcbiAgICAgIHZhciByZW5kZXJQcmlvcml0eSA9IGxhbmVzVG9FdmVudFByaW9yaXR5KHBlbmRpbmdFZmZlY3RzTGFuZXMpLFxuICAgICAgICBwcmlvcml0eSA9XG4gICAgICAgICAgMCA9PT0gRGVmYXVsdEV2ZW50UHJpb3JpdHkgfHwgRGVmYXVsdEV2ZW50UHJpb3JpdHkgPiByZW5kZXJQcmlvcml0eVxuICAgICAgICAgICAgPyBEZWZhdWx0RXZlbnRQcmlvcml0eVxuICAgICAgICAgICAgOiByZW5kZXJQcmlvcml0eTtcbiAgICAgIHJlbmRlclByaW9yaXR5ID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuVDtcbiAgICAgIHZhciBwcmV2aW91c1ByaW9yaXR5ID0gUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucDtcbiAgICAgIHRyeSB7XG4gICAgICAgIFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnAgPSBwcmlvcml0eTtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IG51bGw7XG4gICAgICAgIHByaW9yaXR5ID0gcGVuZGluZ1Bhc3NpdmVUcmFuc2l0aW9ucztcbiAgICAgICAgcGVuZGluZ1Bhc3NpdmVUcmFuc2l0aW9ucyA9IG51bGw7XG4gICAgICAgIHZhciByb290JGpzY29tcCQwID0gcGVuZGluZ0VmZmVjdHNSb290LFxuICAgICAgICAgIGxhbmVzID0gcGVuZGluZ0VmZmVjdHNMYW5lcztcbiAgICAgICAgcGVuZGluZ0VmZmVjdHNTdGF0dXMgPSBOT19QRU5ESU5HX0VGRkVDVFM7XG4gICAgICAgIHBlbmRpbmdGaW5pc2hlZFdvcmsgPSBwZW5kaW5nRWZmZWN0c1Jvb3QgPSBudWxsO1xuICAgICAgICBwZW5kaW5nRWZmZWN0c0xhbmVzID0gMDtcbiAgICAgICAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgIT09IE5vQ29udGV4dClcbiAgICAgICAgICB0aHJvdyBFcnJvcihcIkNhbm5vdCBmbHVzaCBwYXNzaXZlIGVmZmVjdHMgd2hpbGUgYWxyZWFkeSByZW5kZXJpbmcuXCIpO1xuICAgICAgICBpc0ZsdXNoaW5nUGFzc2l2ZUVmZmVjdHMgPSAhMDtcbiAgICAgICAgZGlkU2NoZWR1bGVVcGRhdGVEdXJpbmdQYXNzaXZlRWZmZWN0cyA9ICExO1xuICAgICAgICBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgICAgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1Bhc3NpdmVFZmZlY3RzU3RhcnRlZCAmJlxuICAgICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1Bhc3NpdmVFZmZlY3RzU3RhcnRlZChsYW5lcyk7XG4gICAgICAgIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gICAgICAgIGV4ZWN1dGlvbkNvbnRleHQgfD0gQ29tbWl0Q29udGV4dDtcbiAgICAgICAgdmFyIGZpbmlzaGVkV29yayA9IHJvb3QkanNjb21wJDAuY3VycmVudDtcbiAgICAgICAgY29tcG9uZW50RWZmZWN0U3RhcnRUaW1lID0gLTEuMTtcbiAgICAgICAgY29tbWl0UGFzc2l2ZVVubW91bnRPbkZpYmVyKGZpbmlzaGVkV29yayk7XG4gICAgICAgIHZhciBmaW5pc2hlZFdvcmskanNjb21wJDAgPSByb290JGpzY29tcCQwLmN1cnJlbnQ7XG4gICAgICAgIGNvbXBvbmVudEVmZmVjdFN0YXJ0VGltZSA9IC0xLjE7XG4gICAgICAgIGNvbW1pdFBhc3NpdmVNb3VudE9uRmliZXIoXG4gICAgICAgICAgcm9vdCRqc2NvbXAkMCxcbiAgICAgICAgICBmaW5pc2hlZFdvcmskanNjb21wJDAsXG4gICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgcHJpb3JpdHlcbiAgICAgICAgKTtcbiAgICAgICAgbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT1cbiAgICAgICAgICAgIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtQYXNzaXZlRWZmZWN0c1N0b3BwZWQgJiZcbiAgICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtQYXNzaXZlRWZmZWN0c1N0b3BwZWQoKTtcbiAgICAgICAgY29tbWl0RG91YmxlSW52b2tlRWZmZWN0c0luREVWKHJvb3QkanNjb21wJDApO1xuICAgICAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG4gICAgICAgIGZsdXNoU3luY1dvcmtBY3Jvc3NSb290c19pbXBsKDAsICExKTtcbiAgICAgICAgZGlkU2NoZWR1bGVVcGRhdGVEdXJpbmdQYXNzaXZlRWZmZWN0c1xuICAgICAgICAgID8gcm9vdCRqc2NvbXAkMCA9PT0gcm9vdFdpdGhQYXNzaXZlTmVzdGVkVXBkYXRlc1xuICAgICAgICAgICAgPyBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQrK1xuICAgICAgICAgICAgOiAoKG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IDApLFxuICAgICAgICAgICAgICAocm9vdFdpdGhQYXNzaXZlTmVzdGVkVXBkYXRlcyA9IHJvb3QkanNjb21wJDApKVxuICAgICAgICAgIDogKG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IDApO1xuICAgICAgICBkaWRTY2hlZHVsZVVwZGF0ZUR1cmluZ1Bhc3NpdmVFZmZlY3RzID0gaXNGbHVzaGluZ1Bhc3NpdmVFZmZlY3RzID0gITE7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBpbmplY3RlZEhvb2sgJiZcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbmplY3RlZEhvb2sub25Qb3N0Q29tbWl0RmliZXJSb290XG4gICAgICAgIClcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaW5qZWN0ZWRIb29rLm9uUG9zdENvbW1pdEZpYmVyUm9vdChyZW5kZXJlcklELCByb290JGpzY29tcCQwKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGhhc0xvZ2dlZEVycm9yIHx8XG4gICAgICAgICAgICAgICgoaGFzTG9nZ2VkRXJyb3IgPSAhMCksXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJSZWFjdCBpbnN0cnVtZW50YXRpb24gZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzXCIsXG4gICAgICAgICAgICAgICAgZXJyXG4gICAgICAgICAgICAgICkpO1xuICAgICAgICAgIH1cbiAgICAgICAgdmFyIHN0YXRlTm9kZSA9IHJvb3QkanNjb21wJDAuY3VycmVudC5zdGF0ZU5vZGU7XG4gICAgICAgIHN0YXRlTm9kZS5lZmZlY3REdXJhdGlvbiA9IDA7XG4gICAgICAgIHN0YXRlTm9kZS5wYXNzaXZlRWZmZWN0RHVyYXRpb24gPSAwO1xuICAgICAgICByZXR1cm4gITA7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICAoUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucCA9IHByZXZpb3VzUHJpb3JpdHkpLFxuICAgICAgICAgIChSZWFjdFNoYXJlZEludGVybmFscy5UID0gcmVuZGVyUHJpb3JpdHkpLFxuICAgICAgICAgIHJlbGVhc2VSb290UG9vbGVkQ2FjaGUocm9vdCwgcmVtYWluaW5nTGFuZXMpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvck9uUm9vdChyb290RmliZXIsIHNvdXJjZUZpYmVyLCBlcnJvcikge1xuICAgICAgc291cmNlRmliZXIgPSBjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlcihlcnJvciwgc291cmNlRmliZXIpO1xuICAgICAgc291cmNlRmliZXIgPSBjcmVhdGVSb290RXJyb3JVcGRhdGUocm9vdEZpYmVyLnN0YXRlTm9kZSwgc291cmNlRmliZXIsIDIpO1xuICAgICAgcm9vdEZpYmVyID0gZW5xdWV1ZVVwZGF0ZShyb290RmliZXIsIHNvdXJjZUZpYmVyLCAyKTtcbiAgICAgIG51bGwgIT09IHJvb3RGaWJlciAmJlxuICAgICAgICAobWFya1Jvb3RVcGRhdGVkJDEocm9vdEZpYmVyLCAyKSwgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3RGaWJlcikpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihcbiAgICAgIHNvdXJjZUZpYmVyLFxuICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgIGVycm9yXG4gICAgKSB7XG4gICAgICBpc1J1bm5pbmdJbnNlcnRpb25FZmZlY3QgPSAhMTtcbiAgICAgIGlmICgzID09PSBzb3VyY2VGaWJlci50YWcpXG4gICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yT25Sb290KHNvdXJjZUZpYmVyLCBzb3VyY2VGaWJlciwgZXJyb3IpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGZvciAoOyBudWxsICE9PSBuZWFyZXN0TW91bnRlZEFuY2VzdG9yOyApIHtcbiAgICAgICAgICBpZiAoMyA9PT0gbmVhcmVzdE1vdW50ZWRBbmNlc3Rvci50YWcpIHtcbiAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yT25Sb290KFxuICAgICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgICBzb3VyY2VGaWJlcixcbiAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgxID09PSBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLnRhZykge1xuICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gbmVhcmVzdE1vdW50ZWRBbmNlc3Rvci5zdGF0ZU5vZGU7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT1cbiAgICAgICAgICAgICAgICB0eXBlb2YgbmVhcmVzdE1vdW50ZWRBbmNlc3Rvci50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciB8fFxuICAgICAgICAgICAgICAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkQ2F0Y2ggJiZcbiAgICAgICAgICAgICAgICAobnVsbCA9PT0gbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgfHxcbiAgICAgICAgICAgICAgICAgICFsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZC5oYXMoaW5zdGFuY2UpKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBzb3VyY2VGaWJlciA9IGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKGVycm9yLCBzb3VyY2VGaWJlcik7XG4gICAgICAgICAgICAgIGVycm9yID0gY3JlYXRlQ2xhc3NFcnJvclVwZGF0ZSgyKTtcbiAgICAgICAgICAgICAgaW5zdGFuY2UgPSBlbnF1ZXVlVXBkYXRlKG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGVycm9yLCAyKTtcbiAgICAgICAgICAgICAgbnVsbCAhPT0gaW5zdGFuY2UgJiZcbiAgICAgICAgICAgICAgICAoaW5pdGlhbGl6ZUNsYXNzRXJyb3JVcGRhdGUoXG4gICAgICAgICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgICAgICAgIHNvdXJjZUZpYmVyXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBtYXJrUm9vdFVwZGF0ZWQkMShpbnN0YW5jZSwgMiksXG4gICAgICAgICAgICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKGluc3RhbmNlKSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciA9IG5lYXJlc3RNb3VudGVkQW5jZXN0b3IucmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJJbnRlcm5hbCBSZWFjdCBlcnJvcjogQXR0ZW1wdGVkIHRvIGNhcHR1cmUgYSBjb21taXQgcGhhc2UgZXJyb3IgaW5zaWRlIGEgZGV0YWNoZWQgdHJlZS4gVGhpcyBpbmRpY2F0ZXMgYSBidWcgaW4gUmVhY3QuIFBvdGVudGlhbCBjYXVzZXMgaW5jbHVkZSBkZWxldGluZyB0aGUgc2FtZSBmaWJlciBtb3JlIHRoYW4gb25jZSwgY29tbWl0dGluZyBhbiBhbHJlYWR5LWZpbmlzaGVkIHRyZWUsIG9yIGFuIGluY29uc2lzdGVudCByZXR1cm4gcG9pbnRlci5cXG5cXG5FcnJvciBtZXNzYWdlOlxcblxcbiVzXCIsXG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gYXR0YWNoUGluZ0xpc3RlbmVyKHJvb3QsIHdha2VhYmxlLCBsYW5lcykge1xuICAgICAgdmFyIHBpbmdDYWNoZSA9IHJvb3QucGluZ0NhY2hlO1xuICAgICAgaWYgKG51bGwgPT09IHBpbmdDYWNoZSkge1xuICAgICAgICBwaW5nQ2FjaGUgPSByb290LnBpbmdDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTtcbiAgICAgICAgdmFyIHRocmVhZElEcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgcGluZ0NhY2hlLnNldCh3YWtlYWJsZSwgdGhyZWFkSURzKTtcbiAgICAgIH0gZWxzZVxuICAgICAgICAodGhyZWFkSURzID0gcGluZ0NhY2hlLmdldCh3YWtlYWJsZSkpLFxuICAgICAgICAgIHZvaWQgMCA9PT0gdGhyZWFkSURzICYmXG4gICAgICAgICAgICAoKHRocmVhZElEcyA9IG5ldyBTZXQoKSksIHBpbmdDYWNoZS5zZXQod2FrZWFibGUsIHRocmVhZElEcykpO1xuICAgICAgdGhyZWFkSURzLmhhcyhsYW5lcykgfHxcbiAgICAgICAgKCh3b3JrSW5Qcm9ncmVzc1Jvb3REaWRBdHRhY2hQaW5nTGlzdGVuZXIgPSAhMCksXG4gICAgICAgIHRocmVhZElEcy5hZGQobGFuZXMpLFxuICAgICAgICAocGluZ0NhY2hlID0gcGluZ1N1c3BlbmRlZFJvb3QuYmluZChudWxsLCByb290LCB3YWtlYWJsZSwgbGFuZXMpKSxcbiAgICAgICAgaXNEZXZUb29sc1ByZXNlbnQgJiYgcmVzdG9yZVBlbmRpbmdVcGRhdGVycyhyb290LCBsYW5lcyksXG4gICAgICAgIHdha2VhYmxlLnRoZW4ocGluZ0NhY2hlLCBwaW5nQ2FjaGUpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGluZ1N1c3BlbmRlZFJvb3Qocm9vdCwgd2FrZWFibGUsIHBpbmdlZExhbmVzKSB7XG4gICAgICB2YXIgcGluZ0NhY2hlID0gcm9vdC5waW5nQ2FjaGU7XG4gICAgICBudWxsICE9PSBwaW5nQ2FjaGUgJiYgcGluZ0NhY2hlLmRlbGV0ZSh3YWtlYWJsZSk7XG4gICAgICByb290LnBpbmdlZExhbmVzIHw9IHJvb3Quc3VzcGVuZGVkTGFuZXMgJiBwaW5nZWRMYW5lcztcbiAgICAgIHJvb3Qud2FybUxhbmVzICY9IH5waW5nZWRMYW5lcztcbiAgICAgIGlzQ29uY3VycmVudEFjdEVudmlyb25tZW50KCkgJiZcbiAgICAgICAgbnVsbCA9PT0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWUgJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkEgc3VzcGVuZGVkIHJlc291cmNlIGZpbmlzaGVkIGxvYWRpbmcgaW5zaWRlIGEgdGVzdCwgYnV0IHRoZSBldmVudCB3YXMgbm90IHdyYXBwZWQgaW4gYWN0KC4uLikuXFxuXFxuV2hlbiB0ZXN0aW5nLCBjb2RlIHRoYXQgcmVzb2x2ZXMgc3VzcGVuZGVkIGRhdGEgc2hvdWxkIGJlIHdyYXBwZWQgaW50byBhY3QoLi4uKTpcXG5cXG5hY3QoKCkgPT4ge1xcbiAgLyogZmluaXNoIGxvYWRpbmcgc3VzcGVuZGVkIGRhdGEgKi9cXG59KTtcXG4vKiBhc3NlcnQgb24gdGhlIG91dHB1dCAqL1xcblxcblRoaXMgZW5zdXJlcyB0aGF0IHlvdSdyZSB0ZXN0aW5nIHRoZSBiZWhhdmlvciB0aGUgdXNlciB3b3VsZCBzZWUgaW4gdGhlIGJyb3dzZXIuIExlYXJuIG1vcmUgYXQgaHR0cHM6Ly9yZWFjdC5kZXYvbGluay93cmFwLXRlc3RzLXdpdGgtYWN0XCJcbiAgICAgICAgKTtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdCA9PT0gcm9vdCAmJlxuICAgICAgICAod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiBwaW5nZWRMYW5lcykgPT09IHBpbmdlZExhbmVzICYmXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290U3VzcGVuZGVkV2l0aERlbGF5IHx8XG4gICAgICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290U3VzcGVuZGVkICYmXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgNjI5MTQ1NjApID09PVxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiZcbiAgICAgICAgICBub3ckMSgpIC0gZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSA8IEZBTExCQUNLX1RIUk9UVExFX01TKVxuICAgICAgICAgID8gKGV4ZWN1dGlvbkNvbnRleHQgJiBSZW5kZXJDb250ZXh0KSA9PT0gTm9Db250ZXh0ICYmXG4gICAgICAgICAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCAwKVxuICAgICAgICAgIDogKHdvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzIHw9IHBpbmdlZExhbmVzKSxcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZXRyeUxhbmVzID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAmJlxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJldHJ5TGFuZXMgPSAwKSk7XG4gICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJldHJ5VGltZWRPdXRCb3VuZGFyeShib3VuZGFyeUZpYmVyLCByZXRyeUxhbmUpIHtcbiAgICAgIDAgPT09IHJldHJ5TGFuZSAmJiAocmV0cnlMYW5lID0gY2xhaW1OZXh0UmV0cnlMYW5lKCkpO1xuICAgICAgYm91bmRhcnlGaWJlciA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShib3VuZGFyeUZpYmVyLCByZXRyeUxhbmUpO1xuICAgICAgbnVsbCAhPT0gYm91bmRhcnlGaWJlciAmJlxuICAgICAgICAobWFya1Jvb3RVcGRhdGVkJDEoYm91bmRhcnlGaWJlciwgcmV0cnlMYW5lKSxcbiAgICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKGJvdW5kYXJ5RmliZXIpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmV0cnlEZWh5ZHJhdGVkU3VzcGVuc2VCb3VuZGFyeShib3VuZGFyeUZpYmVyKSB7XG4gICAgICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGJvdW5kYXJ5RmliZXIubWVtb2l6ZWRTdGF0ZSxcbiAgICAgICAgcmV0cnlMYW5lID0gMDtcbiAgICAgIG51bGwgIT09IHN1c3BlbnNlU3RhdGUgJiYgKHJldHJ5TGFuZSA9IHN1c3BlbnNlU3RhdGUucmV0cnlMYW5lKTtcbiAgICAgIHJldHJ5VGltZWRPdXRCb3VuZGFyeShib3VuZGFyeUZpYmVyLCByZXRyeUxhbmUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlUmV0cnlXYWtlYWJsZShib3VuZGFyeUZpYmVyLCB3YWtlYWJsZSkge1xuICAgICAgdmFyIHJldHJ5TGFuZSA9IDA7XG4gICAgICBzd2l0Y2ggKGJvdW5kYXJ5RmliZXIudGFnKSB7XG4gICAgICAgIGNhc2UgMzE6XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgdmFyIHJldHJ5Q2FjaGUgPSBib3VuZGFyeUZpYmVyLnN0YXRlTm9kZTtcbiAgICAgICAgICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGJvdW5kYXJ5RmliZXIubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICBudWxsICE9PSBzdXNwZW5zZVN0YXRlICYmIChyZXRyeUxhbmUgPSBzdXNwZW5zZVN0YXRlLnJldHJ5TGFuZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgcmV0cnlDYWNoZSA9IGJvdW5kYXJ5RmliZXIuc3RhdGVOb2RlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIHJldHJ5Q2FjaGUgPSBib3VuZGFyeUZpYmVyLnN0YXRlTm9kZS5fcmV0cnlDYWNoZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIFwiUGluZ2VkIHVua25vd24gc3VzcGVuc2UgYm91bmRhcnkgdHlwZS4gVGhpcyBpcyBwcm9iYWJseSBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICBudWxsICE9PSByZXRyeUNhY2hlICYmIHJldHJ5Q2FjaGUuZGVsZXRlKHdha2VhYmxlKTtcbiAgICAgIHJldHJ5VGltZWRPdXRCb3VuZGFyeShib3VuZGFyeUZpYmVyLCByZXRyeUxhbmUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlQW5kRG91YmxlSW52b2tlRWZmZWN0c0luREVWKFxuICAgICAgcm9vdCRqc2NvbXAkMCxcbiAgICAgIHBhcmVudEZpYmVyLFxuICAgICAgaXNJblN0cmljdE1vZGVcbiAgICApIHtcbiAgICAgIGlmICgwICE9PSAocGFyZW50RmliZXIuc3VidHJlZUZsYWdzICYgNjcxMTcwNTYpKVxuICAgICAgICBmb3IgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuY2hpbGQ7IG51bGwgIT09IHBhcmVudEZpYmVyOyApIHtcbiAgICAgICAgICB2YXIgcm9vdCA9IHJvb3QkanNjb21wJDAsXG4gICAgICAgICAgICBmaWJlciA9IHBhcmVudEZpYmVyLFxuICAgICAgICAgICAgaXNTdHJpY3RNb2RlRmliZXIgPSBmaWJlci50eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xuICAgICAgICAgIGlzU3RyaWN0TW9kZUZpYmVyID0gaXNJblN0cmljdE1vZGUgfHwgaXNTdHJpY3RNb2RlRmliZXI7XG4gICAgICAgICAgMjIgIT09IGZpYmVyLnRhZ1xuICAgICAgICAgICAgPyBmaWJlci5mbGFncyAmIDY3MTA4ODY0XG4gICAgICAgICAgICAgID8gaXNTdHJpY3RNb2RlRmliZXIgJiZcbiAgICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgICAgICAgICAgZG91YmxlSW52b2tlRWZmZWN0c09uRmliZXIsXG4gICAgICAgICAgICAgICAgICByb290LFxuICAgICAgICAgICAgICAgICAgZmliZXJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogcmVjdXJzaXZlbHlUcmF2ZXJzZUFuZERvdWJsZUludm9rZUVmZmVjdHNJbkRFVihcbiAgICAgICAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICAgICAgICBmaWJlcixcbiAgICAgICAgICAgICAgICAgIGlzU3RyaWN0TW9kZUZpYmVyXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBudWxsID09PSBmaWJlci5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgICAgIChpc1N0cmljdE1vZGVGaWJlciAmJiBmaWJlci5mbGFncyAmIDgxOTJcbiAgICAgICAgICAgICAgICA/IHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgICAgICBmaWJlcixcbiAgICAgICAgICAgICAgICAgICAgZG91YmxlSW52b2tlRWZmZWN0c09uRmliZXIsXG4gICAgICAgICAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICAgICAgICAgIGZpYmVyXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBmaWJlci5zdWJ0cmVlRmxhZ3MgJiA2NzEwODg2NCAmJlxuICAgICAgICAgICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlQW5kRG91YmxlSW52b2tlRWZmZWN0c0luREVWLFxuICAgICAgICAgICAgICAgICAgICByb290LFxuICAgICAgICAgICAgICAgICAgICBmaWJlcixcbiAgICAgICAgICAgICAgICAgICAgaXNTdHJpY3RNb2RlRmliZXJcbiAgICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgIHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuc2libGluZztcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBkb3VibGVJbnZva2VFZmZlY3RzT25GaWJlcihyb290LCBmaWJlcikge1xuICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZGlzYXBwZWFyTGF5b3V0RWZmZWN0cyhmaWJlciksXG4gICAgICAgICAgZGlzY29ubmVjdFBhc3NpdmVFZmZlY3QoZmliZXIpLFxuICAgICAgICAgIHJlYXBwZWFyTGF5b3V0RWZmZWN0cyhyb290LCBmaWJlci5hbHRlcm5hdGUsIGZpYmVyLCAhMSksXG4gICAgICAgICAgcmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMocm9vdCwgZmliZXIsIDAsIG51bGwsICExLCAwKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCExKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0RG91YmxlSW52b2tlRWZmZWN0c0luREVWKHJvb3QpIHtcbiAgICAgIHZhciBkb3VibGVJbnZva2VFZmZlY3RzID0gITA7XG4gICAgICByb290LmN1cnJlbnQubW9kZSAmIChTdHJpY3RMZWdhY3lNb2RlIHwgU3RyaWN0RWZmZWN0c01vZGUpIHx8XG4gICAgICAgIChkb3VibGVJbnZva2VFZmZlY3RzID0gITEpO1xuICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUFuZERvdWJsZUludm9rZUVmZmVjdHNJbkRFVihcbiAgICAgICAgcm9vdCxcbiAgICAgICAgcm9vdC5jdXJyZW50LFxuICAgICAgICBkb3VibGVJbnZva2VFZmZlY3RzXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3YXJuQWJvdXRVcGRhdGVPbk5vdFlldE1vdW50ZWRGaWJlckluREVWKGZpYmVyKSB7XG4gICAgICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiBSZW5kZXJDb250ZXh0KSA9PT0gTm9Db250ZXh0KSB7XG4gICAgICAgIHZhciB0YWcgPSBmaWJlci50YWc7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAzID09PSB0YWcgfHxcbiAgICAgICAgICAxID09PSB0YWcgfHxcbiAgICAgICAgICAwID09PSB0YWcgfHxcbiAgICAgICAgICAxMSA9PT0gdGFnIHx8XG4gICAgICAgICAgMTQgPT09IHRhZyB8fFxuICAgICAgICAgIDE1ID09PSB0YWdcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGFnID0gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcikgfHwgXCJSZWFjdENvbXBvbmVudFwiO1xuICAgICAgICAgIGlmIChudWxsICE9PSBkaWRXYXJuU3RhdGVVcGRhdGVGb3JOb3RZZXRNb3VudGVkQ29tcG9uZW50KSB7XG4gICAgICAgICAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudC5oYXModGFnKSkgcmV0dXJuO1xuICAgICAgICAgICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudC5hZGQodGFnKTtcbiAgICAgICAgICB9IGVsc2UgZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudCA9IG5ldyBTZXQoW3RhZ10pO1xuICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKGZpYmVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkNhbid0IHBlcmZvcm0gYSBSZWFjdCBzdGF0ZSB1cGRhdGUgb24gYSBjb21wb25lbnQgdGhhdCBoYXNuJ3QgbW91bnRlZCB5ZXQuIFRoaXMgaW5kaWNhdGVzIHRoYXQgeW91IGhhdmUgYSBzaWRlLWVmZmVjdCBpbiB5b3VyIHJlbmRlciBmdW5jdGlvbiB0aGF0IGFzeW5jaHJvbm91c2x5IHRyaWVzIHRvIHVwZGF0ZSB0aGUgY29tcG9uZW50LiBNb3ZlIHRoaXMgd29yayB0byB1c2VFZmZlY3QgaW5zdGVhZC5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZXN0b3JlUGVuZGluZ1VwZGF0ZXJzKHJvb3QsIGxhbmVzKSB7XG4gICAgICBpc0RldlRvb2xzUHJlc2VudCAmJlxuICAgICAgICByb290Lm1lbW9pemVkVXBkYXRlcnMuZm9yRWFjaChmdW5jdGlvbiAoc2NoZWR1bGluZ0ZpYmVyKSB7XG4gICAgICAgICAgYWRkRmliZXJUb0xhbmVzTWFwKHJvb3QsIHNjaGVkdWxpbmdGaWJlciwgbGFuZXMpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2NoZWR1bGVDYWxsYmFjayQxKHByaW9yaXR5TGV2ZWwsIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgYWN0UXVldWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZTtcbiAgICAgIHJldHVybiBudWxsICE9PSBhY3RRdWV1ZVxuICAgICAgICA/IChhY3RRdWV1ZS5wdXNoKGNhbGxiYWNrKSwgZmFrZUFjdENhbGxiYWNrTm9kZSQxKVxuICAgICAgICA6IHNjaGVkdWxlQ2FsbGJhY2skMyhwcmlvcml0eUxldmVsLCBjYWxsYmFjayk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhcm5JZlVwZGF0ZXNOb3RXcmFwcGVkV2l0aEFjdERFVihmaWJlcikge1xuICAgICAgaXNDb25jdXJyZW50QWN0RW52aXJvbm1lbnQoKSAmJlxuICAgICAgICBudWxsID09PSBSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZSAmJlxuICAgICAgICBydW5XaXRoRmliZXJJbkRFVihmaWJlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkFuIHVwZGF0ZSB0byAlcyBpbnNpZGUgYSB0ZXN0IHdhcyBub3Qgd3JhcHBlZCBpbiBhY3QoLi4uKS5cXG5cXG5XaGVuIHRlc3RpbmcsIGNvZGUgdGhhdCBjYXVzZXMgUmVhY3Qgc3RhdGUgdXBkYXRlcyBzaG91bGQgYmUgd3JhcHBlZCBpbnRvIGFjdCguLi4pOlxcblxcbmFjdCgoKSA9PiB7XFxuICAvKiBmaXJlIGV2ZW50cyB0aGF0IHVwZGF0ZSBzdGF0ZSAqL1xcbn0pO1xcbi8qIGFzc2VydCBvbiB0aGUgb3V0cHV0ICovXFxuXFxuVGhpcyBlbnN1cmVzIHRoYXQgeW91J3JlIHRlc3RpbmcgdGhlIGJlaGF2aW9yIHRoZSB1c2VyIHdvdWxkIHNlZSBpbiB0aGUgYnJvd3Nlci4gTGVhcm4gbW9yZSBhdCBodHRwczovL3JlYWN0LmRldi9saW5rL3dyYXAtdGVzdHMtd2l0aC1hY3RcIixcbiAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290KSB7XG4gICAgICByb290ICE9PSBsYXN0U2NoZWR1bGVkUm9vdCAmJlxuICAgICAgICBudWxsID09PSByb290Lm5leHQgJiZcbiAgICAgICAgKG51bGwgPT09IGxhc3RTY2hlZHVsZWRSb290XG4gICAgICAgICAgPyAoZmlyc3RTY2hlZHVsZWRSb290ID0gbGFzdFNjaGVkdWxlZFJvb3QgPSByb290KVxuICAgICAgICAgIDogKGxhc3RTY2hlZHVsZWRSb290ID0gbGFzdFNjaGVkdWxlZFJvb3QubmV4dCA9IHJvb3QpKTtcbiAgICAgIG1pZ2h0SGF2ZVBlbmRpbmdTeW5jV29yayA9ICEwO1xuICAgICAgbnVsbCAhPT0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWVcbiAgICAgICAgPyBkaWRTY2hlZHVsZU1pY3JvdGFza19hY3QgfHxcbiAgICAgICAgICAoKGRpZFNjaGVkdWxlTWljcm90YXNrX2FjdCA9ICEwKSwgc2NoZWR1bGVJbW1lZGlhdGVSb290U2NoZWR1bGVUYXNrKCkpXG4gICAgICAgIDogZGlkU2NoZWR1bGVNaWNyb3Rhc2sgfHxcbiAgICAgICAgICAoKGRpZFNjaGVkdWxlTWljcm90YXNrID0gITApLCBzY2hlZHVsZUltbWVkaWF0ZVJvb3RTY2hlZHVsZVRhc2soKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZsdXNoU3luY1dvcmtBY3Jvc3NSb290c19pbXBsKHN5bmNUcmFuc2l0aW9uTGFuZXMsIG9ubHlMZWdhY3kpIHtcbiAgICAgIGlmICghaXNGbHVzaGluZ1dvcmsgJiYgbWlnaHRIYXZlUGVuZGluZ1N5bmNXb3JrKSB7XG4gICAgICAgIGlzRmx1c2hpbmdXb3JrID0gITA7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICB2YXIgZGlkUGVyZm9ybVNvbWVXb3JrID0gITE7XG4gICAgICAgICAgZm9yICh2YXIgcm9vdCA9IGZpcnN0U2NoZWR1bGVkUm9vdDsgbnVsbCAhPT0gcm9vdDsgKSB7XG4gICAgICAgICAgICBpZiAoIW9ubHlMZWdhY3kpXG4gICAgICAgICAgICAgIGlmICgwICE9PSBzeW5jVHJhbnNpdGlvbkxhbmVzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHBlbmRpbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzO1xuICAgICAgICAgICAgICAgIGlmICgwID09PSBwZW5kaW5nTGFuZXMpIHZhciBuZXh0TGFuZXMgPSAwO1xuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdmFyIHN1c3BlbmRlZExhbmVzID0gcm9vdC5zdXNwZW5kZWRMYW5lcyxcbiAgICAgICAgICAgICAgICAgICAgcGluZ2VkTGFuZXMgPSByb290LnBpbmdlZExhbmVzO1xuICAgICAgICAgICAgICAgICAgbmV4dExhbmVzID1cbiAgICAgICAgICAgICAgICAgICAgKDEgPDwgKDMxIC0gY2x6MzIoNDIgfCBzeW5jVHJhbnNpdGlvbkxhbmVzKSArIDEpKSAtIDE7XG4gICAgICAgICAgICAgICAgICBuZXh0TGFuZXMgJj0gcGVuZGluZ0xhbmVzICYgfihzdXNwZW5kZWRMYW5lcyAmIH5waW5nZWRMYW5lcyk7XG4gICAgICAgICAgICAgICAgICBuZXh0TGFuZXMgPVxuICAgICAgICAgICAgICAgICAgICBuZXh0TGFuZXMgJiAyMDEzMjY3NDFcbiAgICAgICAgICAgICAgICAgICAgICA/IChuZXh0TGFuZXMgJiAyMDEzMjY3NDEpIHwgMVxuICAgICAgICAgICAgICAgICAgICAgIDogbmV4dExhbmVzXG4gICAgICAgICAgICAgICAgICAgICAgICA/IG5leHRMYW5lcyB8IDJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgMCAhPT0gbmV4dExhbmVzICYmXG4gICAgICAgICAgICAgICAgICAoKGRpZFBlcmZvcm1Tb21lV29yayA9ICEwKSxcbiAgICAgICAgICAgICAgICAgIHBlcmZvcm1TeW5jV29ya09uUm9vdChyb290LCBuZXh0TGFuZXMpKTtcbiAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgKG5leHRMYW5lcyA9IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgICAgICAgIChuZXh0TGFuZXMgPSBnZXROZXh0TGFuZXMoXG4gICAgICAgICAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICAgICAgICAgIHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCA/IG5leHRMYW5lcyA6IDAsXG4gICAgICAgICAgICAgICAgICAgIG51bGwgIT09IHJvb3QuY2FuY2VsUGVuZGluZ0NvbW1pdCB8fFxuICAgICAgICAgICAgICAgICAgICAgIHJvb3QudGltZW91dEhhbmRsZSAhPT0gbm9UaW1lb3V0XG4gICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAgIDAgPT09IChuZXh0TGFuZXMgJiAzKSB8fFxuICAgICAgICAgICAgICAgICAgICBjaGVja0lmUm9vdElzUHJlcmVuZGVyaW5nKHJvb3QsIG5leHRMYW5lcykgfHxcbiAgICAgICAgICAgICAgICAgICAgKChkaWRQZXJmb3JtU29tZVdvcmsgPSAhMCksXG4gICAgICAgICAgICAgICAgICAgIHBlcmZvcm1TeW5jV29ya09uUm9vdChyb290LCBuZXh0TGFuZXMpKTtcbiAgICAgICAgICAgIHJvb3QgPSByb290Lm5leHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChkaWRQZXJmb3JtU29tZVdvcmspO1xuICAgICAgICBpc0ZsdXNoaW5nV29yayA9ICExO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBwcm9jZXNzUm9vdFNjaGVkdWxlSW5JbW1lZGlhdGVUYXNrKCkge1xuICAgICAgcHJvY2Vzc1Jvb3RTY2hlZHVsZUluTWljcm90YXNrKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSb290U2NoZWR1bGVJbk1pY3JvdGFzaygpIHtcbiAgICAgIG1pZ2h0SGF2ZVBlbmRpbmdTeW5jV29yayA9XG4gICAgICAgIGRpZFNjaGVkdWxlTWljcm90YXNrX2FjdCA9XG4gICAgICAgIGRpZFNjaGVkdWxlTWljcm90YXNrID1cbiAgICAgICAgICAhMTtcbiAgICAgIHZhciBzeW5jVHJhbnNpdGlvbkxhbmVzID0gMDtcbiAgICAgIDAgIT09IGN1cnJlbnRFdmVudFRyYW5zaXRpb25MYW5lICYmXG4gICAgICAgIHNob3VsZEF0dGVtcHRFYWdlclRyYW5zaXRpb24oKSAmJlxuICAgICAgICAoc3luY1RyYW5zaXRpb25MYW5lcyA9IGN1cnJlbnRFdmVudFRyYW5zaXRpb25MYW5lKTtcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciBjdXJyZW50VGltZSA9IG5vdyQxKCksIHByZXYgPSBudWxsLCByb290ID0gZmlyc3RTY2hlZHVsZWRSb290O1xuICAgICAgICBudWxsICE9PSByb290O1xuXG4gICAgICApIHtcbiAgICAgICAgdmFyIG5leHQgPSByb290Lm5leHQsXG4gICAgICAgICAgbmV4dExhbmVzID0gc2NoZWR1bGVUYXNrRm9yUm9vdER1cmluZ01pY3JvdGFzayhyb290LCBjdXJyZW50VGltZSk7XG4gICAgICAgIGlmICgwID09PSBuZXh0TGFuZXMpXG4gICAgICAgICAgKHJvb3QubmV4dCA9IG51bGwpLFxuICAgICAgICAgICAgbnVsbCA9PT0gcHJldiA/IChmaXJzdFNjaGVkdWxlZFJvb3QgPSBuZXh0KSA6IChwcmV2Lm5leHQgPSBuZXh0KSxcbiAgICAgICAgICAgIG51bGwgPT09IG5leHQgJiYgKGxhc3RTY2hlZHVsZWRSb290ID0gcHJldik7XG4gICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgICgocHJldiA9IHJvb3QpLCAwICE9PSBzeW5jVHJhbnNpdGlvbkxhbmVzIHx8IDAgIT09IChuZXh0TGFuZXMgJiAzKSlcbiAgICAgICAgKVxuICAgICAgICAgIG1pZ2h0SGF2ZVBlbmRpbmdTeW5jV29yayA9ICEwO1xuICAgICAgICByb290ID0gbmV4dDtcbiAgICAgIH1cbiAgICAgIChwZW5kaW5nRWZmZWN0c1N0YXR1cyAhPT0gTk9fUEVORElOR19FRkZFQ1RTICYmXG4gICAgICAgIHBlbmRpbmdFZmZlY3RzU3RhdHVzICE9PSBQRU5ESU5HX1BBU1NJVkVfUEhBU0UpIHx8XG4gICAgICAgIGZsdXNoU3luY1dvcmtBY3Jvc3NSb290c19pbXBsKHN5bmNUcmFuc2l0aW9uTGFuZXMsICExKTtcbiAgICAgIDAgIT09IGN1cnJlbnRFdmVudFRyYW5zaXRpb25MYW5lICYmIChjdXJyZW50RXZlbnRUcmFuc2l0aW9uTGFuZSA9IDApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzY2hlZHVsZVRhc2tGb3JSb290RHVyaW5nTWljcm90YXNrKHJvb3QsIGN1cnJlbnRUaW1lKSB7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgc3VzcGVuZGVkTGFuZXMgPSByb290LnN1c3BlbmRlZExhbmVzLFxuICAgICAgICAgIHBpbmdlZExhbmVzID0gcm9vdC5waW5nZWRMYW5lcyxcbiAgICAgICAgICBleHBpcmF0aW9uVGltZXMgPSByb290LmV4cGlyYXRpb25UaW1lcyxcbiAgICAgICAgICBsYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzICYgLTYyOTE0NTYxO1xuICAgICAgICAwIDwgbGFuZXM7XG5cbiAgICAgICkge1xuICAgICAgICB2YXIgaW5kZXggPSAzMSAtIGNsejMyKGxhbmVzKSxcbiAgICAgICAgICBsYW5lID0gMSA8PCBpbmRleCxcbiAgICAgICAgICBleHBpcmF0aW9uVGltZSA9IGV4cGlyYXRpb25UaW1lc1tpbmRleF07XG4gICAgICAgIGlmICgtMSA9PT0gZXhwaXJhdGlvblRpbWUpIHtcbiAgICAgICAgICBpZiAoMCA9PT0gKGxhbmUgJiBzdXNwZW5kZWRMYW5lcykgfHwgMCAhPT0gKGxhbmUgJiBwaW5nZWRMYW5lcykpXG4gICAgICAgICAgICBleHBpcmF0aW9uVGltZXNbaW5kZXhdID0gY29tcHV0ZUV4cGlyYXRpb25UaW1lKGxhbmUsIGN1cnJlbnRUaW1lKTtcbiAgICAgICAgfSBlbHNlIGV4cGlyYXRpb25UaW1lIDw9IGN1cnJlbnRUaW1lICYmIChyb290LmV4cGlyZWRMYW5lcyB8PSBsYW5lKTtcbiAgICAgICAgbGFuZXMgJj0gfmxhbmU7XG4gICAgICB9XG4gICAgICBjdXJyZW50VGltZSA9IHdvcmtJblByb2dyZXNzUm9vdDtcbiAgICAgIHN1c3BlbmRlZExhbmVzID0gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXM7XG4gICAgICBzdXNwZW5kZWRMYW5lcyA9IGdldE5leHRMYW5lcyhcbiAgICAgICAgcm9vdCxcbiAgICAgICAgcm9vdCA9PT0gY3VycmVudFRpbWUgPyBzdXNwZW5kZWRMYW5lcyA6IDAsXG4gICAgICAgIG51bGwgIT09IHJvb3QuY2FuY2VsUGVuZGluZ0NvbW1pdCB8fCByb290LnRpbWVvdXRIYW5kbGUgIT09IG5vVGltZW91dFxuICAgICAgKTtcbiAgICAgIHBpbmdlZExhbmVzID0gcm9vdC5jYWxsYmFja05vZGU7XG4gICAgICBpZiAoXG4gICAgICAgIDAgPT09IHN1c3BlbmRlZExhbmVzIHx8XG4gICAgICAgIChyb290ID09PSBjdXJyZW50VGltZSAmJlxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9PT0gU3VzcGVuZGVkT25EYXRhIHx8XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9PT0gU3VzcGVuZGVkT25BY3Rpb24pKSB8fFxuICAgICAgICBudWxsICE9PSByb290LmNhbmNlbFBlbmRpbmdDb21taXRcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBudWxsICE9PSBwaW5nZWRMYW5lcyAmJiBjYW5jZWxDYWxsYmFjayhwaW5nZWRMYW5lcyksXG4gICAgICAgICAgKHJvb3QuY2FsbGJhY2tOb2RlID0gbnVsbCksXG4gICAgICAgICAgKHJvb3QuY2FsbGJhY2tQcmlvcml0eSA9IDApXG4gICAgICAgICk7XG4gICAgICBpZiAoXG4gICAgICAgIDAgPT09IChzdXNwZW5kZWRMYW5lcyAmIDMpIHx8XG4gICAgICAgIGNoZWNrSWZSb290SXNQcmVyZW5kZXJpbmcocm9vdCwgc3VzcGVuZGVkTGFuZXMpXG4gICAgICApIHtcbiAgICAgICAgY3VycmVudFRpbWUgPSBzdXNwZW5kZWRMYW5lcyAmIC1zdXNwZW5kZWRMYW5lcztcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGN1cnJlbnRUaW1lICE9PSByb290LmNhbGxiYWNrUHJpb3JpdHkgfHxcbiAgICAgICAgICAobnVsbCAhPT0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWUgJiZcbiAgICAgICAgICAgIHBpbmdlZExhbmVzICE9PSBmYWtlQWN0Q2FsbGJhY2tOb2RlKVxuICAgICAgICApXG4gICAgICAgICAgY2FuY2VsQ2FsbGJhY2socGluZ2VkTGFuZXMpO1xuICAgICAgICBlbHNlIHJldHVybiBjdXJyZW50VGltZTtcbiAgICAgICAgc3dpdGNoIChsYW5lc1RvRXZlbnRQcmlvcml0eShzdXNwZW5kZWRMYW5lcykpIHtcbiAgICAgICAgICBjYXNlIERpc2NyZXRlRXZlbnRQcmlvcml0eTpcbiAgICAgICAgICBjYXNlIENvbnRpbnVvdXNFdmVudFByaW9yaXR5OlxuICAgICAgICAgICAgc3VzcGVuZGVkTGFuZXMgPSBVc2VyQmxvY2tpbmdQcmlvcml0eTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgRGVmYXVsdEV2ZW50UHJpb3JpdHk6XG4gICAgICAgICAgICBzdXNwZW5kZWRMYW5lcyA9IE5vcm1hbFByaW9yaXR5JDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIElkbGVFdmVudFByaW9yaXR5OlxuICAgICAgICAgICAgc3VzcGVuZGVkTGFuZXMgPSBJZGxlUHJpb3JpdHk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgc3VzcGVuZGVkTGFuZXMgPSBOb3JtYWxQcmlvcml0eSQxO1xuICAgICAgICB9XG4gICAgICAgIHBpbmdlZExhbmVzID0gcGVyZm9ybVdvcmtPblJvb3RWaWFTY2hlZHVsZXJUYXNrLmJpbmQobnVsbCwgcm9vdCk7XG4gICAgICAgIG51bGwgIT09IFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFjdFF1ZXVlXG4gICAgICAgICAgPyAoUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWUucHVzaChwaW5nZWRMYW5lcyksXG4gICAgICAgICAgICAoc3VzcGVuZGVkTGFuZXMgPSBmYWtlQWN0Q2FsbGJhY2tOb2RlKSlcbiAgICAgICAgICA6IChzdXNwZW5kZWRMYW5lcyA9IHNjaGVkdWxlQ2FsbGJhY2skMyhzdXNwZW5kZWRMYW5lcywgcGluZ2VkTGFuZXMpKTtcbiAgICAgICAgcm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gY3VycmVudFRpbWU7XG4gICAgICAgIHJvb3QuY2FsbGJhY2tOb2RlID0gc3VzcGVuZGVkTGFuZXM7XG4gICAgICAgIHJldHVybiBjdXJyZW50VGltZTtcbiAgICAgIH1cbiAgICAgIG51bGwgIT09IHBpbmdlZExhbmVzICYmIGNhbmNlbENhbGxiYWNrKHBpbmdlZExhbmVzKTtcbiAgICAgIHJvb3QuY2FsbGJhY2tQcmlvcml0eSA9IDI7XG4gICAgICByb290LmNhbGxiYWNrTm9kZSA9IG51bGw7XG4gICAgICByZXR1cm4gMjtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGVyZm9ybVdvcmtPblJvb3RWaWFTY2hlZHVsZXJUYXNrKHJvb3QsIGRpZFRpbWVvdXQpIHtcbiAgICAgIG5lc3RlZFVwZGF0ZVNjaGVkdWxlZCA9IGN1cnJlbnRVcGRhdGVJc05lc3RlZCA9ICExO1xuICAgICAgaWYgKFxuICAgICAgICBwZW5kaW5nRWZmZWN0c1N0YXR1cyAhPT0gTk9fUEVORElOR19FRkZFQ1RTICYmXG4gICAgICAgIHBlbmRpbmdFZmZlY3RzU3RhdHVzICE9PSBQRU5ESU5HX1BBU1NJVkVfUEhBU0VcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIChyb290LmNhbGxiYWNrTm9kZSA9IG51bGwpLCAocm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gMCksIG51bGw7XG4gICAgICB2YXIgb3JpZ2luYWxDYWxsYmFja05vZGUgPSByb290LmNhbGxiYWNrTm9kZTtcbiAgICAgIGlmIChmbHVzaFBlbmRpbmdFZmZlY3RzKCEwKSAmJiByb290LmNhbGxiYWNrTm9kZSAhPT0gb3JpZ2luYWxDYWxsYmFja05vZGUpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgdmFyIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzJGpzY29tcCQwID1cbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXM7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyRqc2NvbXAkMCA9IGdldE5leHRMYW5lcyhcbiAgICAgICAgcm9vdCxcbiAgICAgICAgcm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290XG4gICAgICAgICAgPyB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyRqc2NvbXAkMFxuICAgICAgICAgIDogMCxcbiAgICAgICAgbnVsbCAhPT0gcm9vdC5jYW5jZWxQZW5kaW5nQ29tbWl0IHx8IHJvb3QudGltZW91dEhhbmRsZSAhPT0gbm9UaW1lb3V0XG4gICAgICApO1xuICAgICAgaWYgKDAgPT09IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzJGpzY29tcCQwKSByZXR1cm4gbnVsbDtcbiAgICAgIHBlcmZvcm1Xb3JrT25Sb290KFxuICAgICAgICByb290LFxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyRqc2NvbXAkMCxcbiAgICAgICAgZGlkVGltZW91dFxuICAgICAgKTtcbiAgICAgIHNjaGVkdWxlVGFza0ZvclJvb3REdXJpbmdNaWNyb3Rhc2socm9vdCwgbm93JDEoKSk7XG4gICAgICByZXR1cm4gbnVsbCAhPSByb290LmNhbGxiYWNrTm9kZSAmJlxuICAgICAgICByb290LmNhbGxiYWNrTm9kZSA9PT0gb3JpZ2luYWxDYWxsYmFja05vZGVcbiAgICAgICAgPyBwZXJmb3JtV29ya09uUm9vdFZpYVNjaGVkdWxlclRhc2suYmluZChudWxsLCByb290KVxuICAgICAgICA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBlcmZvcm1TeW5jV29ya09uUm9vdChyb290LCBsYW5lcykge1xuICAgICAgaWYgKGZsdXNoUGVuZGluZ0VmZmVjdHMoKSkgcmV0dXJuIG51bGw7XG4gICAgICBjdXJyZW50VXBkYXRlSXNOZXN0ZWQgPSBuZXN0ZWRVcGRhdGVTY2hlZHVsZWQ7XG4gICAgICBuZXN0ZWRVcGRhdGVTY2hlZHVsZWQgPSAhMTtcbiAgICAgIHBlcmZvcm1Xb3JrT25Sb290KHJvb3QsIGxhbmVzLCAhMCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNhbmNlbENhbGxiYWNrKGNhbGxiYWNrTm9kZSkge1xuICAgICAgY2FsbGJhY2tOb2RlICE9PSBmYWtlQWN0Q2FsbGJhY2tOb2RlICYmXG4gICAgICAgIG51bGwgIT09IGNhbGxiYWNrTm9kZSAmJlxuICAgICAgICBjYW5jZWxDYWxsYmFjayQxKGNhbGxiYWNrTm9kZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNjaGVkdWxlSW1tZWRpYXRlUm9vdFNjaGVkdWxlVGFzaygpIHtcbiAgICAgIG51bGwgIT09IFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFjdFF1ZXVlICYmXG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFjdFF1ZXVlLnB1c2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHByb2Nlc3NSb290U2NoZWR1bGVJbk1pY3JvdGFzaygpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9KTtcbiAgICAgIHNjaGVkdWxlTWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSAhPT0gTm9Db250ZXh0XG4gICAgICAgICAgPyBzY2hlZHVsZUNhbGxiYWNrJDMoXG4gICAgICAgICAgICAgIEltbWVkaWF0ZVByaW9yaXR5LFxuICAgICAgICAgICAgICBwcm9jZXNzUm9vdFNjaGVkdWxlSW5JbW1lZGlhdGVUYXNrXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBwcm9jZXNzUm9vdFNjaGVkdWxlSW5NaWNyb3Rhc2soKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXF1ZXN0VHJhbnNpdGlvbkxhbmUoKSB7XG4gICAgICBpZiAoMCA9PT0gY3VycmVudEV2ZW50VHJhbnNpdGlvbkxhbmUpIHtcbiAgICAgICAgdmFyIGFjdGlvblNjb3BlTGFuZSA9IGN1cnJlbnRFbnRhbmdsZWRMYW5lO1xuICAgICAgICBjdXJyZW50RXZlbnRUcmFuc2l0aW9uTGFuZSA9XG4gICAgICAgICAgMCAhPT0gYWN0aW9uU2NvcGVMYW5lID8gYWN0aW9uU2NvcGVMYW5lIDogY2xhaW1OZXh0VHJhbnNpdGlvbkxhbmUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjdXJyZW50RXZlbnRUcmFuc2l0aW9uTGFuZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29lcmNlRm9ybUFjdGlvblByb3AoYWN0aW9uUHJvcCkge1xuICAgICAgaWYgKFxuICAgICAgICBudWxsID09IGFjdGlvblByb3AgfHxcbiAgICAgICAgXCJzeW1ib2xcIiA9PT0gdHlwZW9mIGFjdGlvblByb3AgfHxcbiAgICAgICAgXCJib29sZWFuXCIgPT09IHR5cGVvZiBhY3Rpb25Qcm9wXG4gICAgICApXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGFjdGlvblByb3ApIHJldHVybiBhY3Rpb25Qcm9wO1xuICAgICAgY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbihhY3Rpb25Qcm9wLCBcImFjdGlvblwiKTtcbiAgICAgIHJldHVybiBzYW5pdGl6ZVVSTChcIlwiICsgYWN0aW9uUHJvcCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZvcm1EYXRhV2l0aFN1Ym1pdHRlcihmb3JtLCBzdWJtaXR0ZXIpIHtcbiAgICAgIHZhciB0ZW1wID0gc3VibWl0dGVyLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgICAgdGVtcC5uYW1lID0gc3VibWl0dGVyLm5hbWU7XG4gICAgICB0ZW1wLnZhbHVlID0gc3VibWl0dGVyLnZhbHVlO1xuICAgICAgZm9ybS5pZCAmJiB0ZW1wLnNldEF0dHJpYnV0ZShcImZvcm1cIiwgZm9ybS5pZCk7XG4gICAgICBzdWJtaXR0ZXIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGVtcCwgc3VibWl0dGVyKTtcbiAgICAgIGZvcm0gPSBuZXcgRm9ybURhdGEoZm9ybSk7XG4gICAgICB0ZW1wLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGVtcCk7XG4gICAgICByZXR1cm4gZm9ybTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyQxKFxuICAgICAgZGlzcGF0Y2hRdWV1ZSxcbiAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgIG1heWJlVGFyZ2V0SW5zdCxcbiAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgXCJzdWJtaXRcIiA9PT0gZG9tRXZlbnROYW1lICYmXG4gICAgICAgIG1heWJlVGFyZ2V0SW5zdCAmJlxuICAgICAgICBtYXliZVRhcmdldEluc3Quc3RhdGVOb2RlID09PSBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgKSB7XG4gICAgICAgIHZhciBhY3Rpb24gPSBjb2VyY2VGb3JtQWN0aW9uUHJvcChcbiAgICAgICAgICAgIChuYXRpdmVFdmVudFRhcmdldFtpbnRlcm5hbFByb3BzS2V5XSB8fCBudWxsKS5hY3Rpb25cbiAgICAgICAgICApLFxuICAgICAgICAgIHN1Ym1pdHRlciA9IG5hdGl2ZUV2ZW50LnN1Ym1pdHRlcjtcbiAgICAgICAgc3VibWl0dGVyICYmXG4gICAgICAgICAgKChkb21FdmVudE5hbWUgPSAoZG9tRXZlbnROYW1lID0gc3VibWl0dGVyW2ludGVybmFsUHJvcHNLZXldIHx8IG51bGwpXG4gICAgICAgICAgICA/IGNvZXJjZUZvcm1BY3Rpb25Qcm9wKGRvbUV2ZW50TmFtZS5mb3JtQWN0aW9uKVxuICAgICAgICAgICAgOiBzdWJtaXR0ZXIuZ2V0QXR0cmlidXRlKFwiZm9ybUFjdGlvblwiKSksXG4gICAgICAgICAgbnVsbCAhPT0gZG9tRXZlbnROYW1lICYmXG4gICAgICAgICAgICAoKGFjdGlvbiA9IGRvbUV2ZW50TmFtZSksIChzdWJtaXR0ZXIgPSBudWxsKSkpO1xuICAgICAgICB2YXIgZXZlbnQgPSBuZXcgU3ludGhldGljRXZlbnQoXG4gICAgICAgICAgXCJhY3Rpb25cIixcbiAgICAgICAgICBcImFjdGlvblwiLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgKTtcbiAgICAgICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgbGlzdGVuZXJzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGluc3RhbmNlOiBudWxsLFxuICAgICAgICAgICAgICBsaXN0ZW5lcjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChuYXRpdmVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoMCAhPT0gY3VycmVudEV2ZW50VHJhbnNpdGlvbkxhbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZvcm1EYXRhID0gc3VibWl0dGVyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNyZWF0ZUZvcm1EYXRhV2l0aFN1Ym1pdHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJtaXR0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBuZXcgRm9ybURhdGEobmF0aXZlRXZlbnRUYXJnZXQpLFxuICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmc6ICEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZm9ybURhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IG5hdGl2ZUV2ZW50VGFyZ2V0Lm1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmZyZWV6ZShwZW5kaW5nU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICBzdGFydEhvc3RUcmFuc2l0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgIG1heWJlVGFyZ2V0SW5zdCxcbiAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgYWN0aW9uICYmXG4gICAgICAgICAgICAgICAgICAgIChldmVudC5wcmV2ZW50RGVmYXVsdCgpLFxuICAgICAgICAgICAgICAgICAgICAoZm9ybURhdGEgPSBzdWJtaXR0ZXJcbiAgICAgICAgICAgICAgICAgICAgICA/IGNyZWF0ZUZvcm1EYXRhV2l0aFN1Ym1pdHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1pdHRlclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIDogbmV3IEZvcm1EYXRhKG5hdGl2ZUV2ZW50VGFyZ2V0KSksXG4gICAgICAgICAgICAgICAgICAgIChwZW5kaW5nU3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgcGVuZGluZzogITAsXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YTogZm9ybURhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBuYXRpdmVFdmVudFRhcmdldC5tZXRob2QsXG4gICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5mcmVlemUocGVuZGluZ1N0YXRlKSxcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRIb3N0VHJhbnNpdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICBtYXliZVRhcmdldEluc3QsXG4gICAgICAgICAgICAgICAgICAgICAgcGVuZGluZ1N0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YVxuICAgICAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgY3VycmVudFRhcmdldDogbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBleGVjdXRlRGlzcGF0Y2goZXZlbnQsIGxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KSB7XG4gICAgICBldmVudC5jdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxpc3RlbmVyKGV2ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJlcG9ydEdsb2JhbEVycm9yKGVycm9yKTtcbiAgICAgIH1cbiAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwcm9jZXNzRGlzcGF0Y2hRdWV1ZShkaXNwYXRjaFF1ZXVlLCBldmVudFN5c3RlbUZsYWdzKSB7XG4gICAgICBldmVudFN5c3RlbUZsYWdzID0gMCAhPT0gKGV2ZW50U3lzdGVtRmxhZ3MgJiA0KTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlzcGF0Y2hRdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgX2Rpc3BhdGNoUXVldWUkaSA9IGRpc3BhdGNoUXVldWVbaV07XG4gICAgICAgIGE6IHtcbiAgICAgICAgICB2YXIgcHJldmlvdXNJbnN0YW5jZSA9IHZvaWQgMCxcbiAgICAgICAgICAgIGV2ZW50ID0gX2Rpc3BhdGNoUXVldWUkaS5ldmVudDtcbiAgICAgICAgICBfZGlzcGF0Y2hRdWV1ZSRpID0gX2Rpc3BhdGNoUXVldWUkaS5saXN0ZW5lcnM7XG4gICAgICAgICAgaWYgKGV2ZW50U3lzdGVtRmxhZ3MpXG4gICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICB2YXIgaSRqc2NvbXAkMCA9IF9kaXNwYXRjaFF1ZXVlJGkubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgMCA8PSBpJGpzY29tcCQwO1xuICAgICAgICAgICAgICBpJGpzY29tcCQwLS1cbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB2YXIgX2Rpc3BhdGNoTGlzdGVuZXJzJGkgPSBfZGlzcGF0Y2hRdWV1ZSRpW2kkanNjb21wJDBdLFxuICAgICAgICAgICAgICAgIGluc3RhbmNlID0gX2Rpc3BhdGNoTGlzdGVuZXJzJGkuaW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgY3VycmVudFRhcmdldCA9IF9kaXNwYXRjaExpc3RlbmVycyRpLmN1cnJlbnRUYXJnZXQ7XG4gICAgICAgICAgICAgIF9kaXNwYXRjaExpc3RlbmVycyRpID0gX2Rpc3BhdGNoTGlzdGVuZXJzJGkubGlzdGVuZXI7XG4gICAgICAgICAgICAgIGlmIChpbnN0YW5jZSAhPT0gcHJldmlvdXNJbnN0YW5jZSAmJiBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKVxuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIG51bGwgIT09IGluc3RhbmNlXG4gICAgICAgICAgICAgICAgPyBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVEaXNwYXRjaCxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgIF9kaXNwYXRjaExpc3RlbmVycyRpLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0XG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBleGVjdXRlRGlzcGF0Y2goZXZlbnQsIF9kaXNwYXRjaExpc3RlbmVycyRpLCBjdXJyZW50VGFyZ2V0KTtcbiAgICAgICAgICAgICAgcHJldmlvdXNJbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgIGkkanNjb21wJDAgPSAwO1xuICAgICAgICAgICAgICBpJGpzY29tcCQwIDwgX2Rpc3BhdGNoUXVldWUkaS5sZW5ndGg7XG4gICAgICAgICAgICAgIGkkanNjb21wJDArK1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIF9kaXNwYXRjaExpc3RlbmVycyRpID0gX2Rpc3BhdGNoUXVldWUkaVtpJGpzY29tcCQwXTtcbiAgICAgICAgICAgICAgaW5zdGFuY2UgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkaS5pbnN0YW5jZTtcbiAgICAgICAgICAgICAgY3VycmVudFRhcmdldCA9IF9kaXNwYXRjaExpc3RlbmVycyRpLmN1cnJlbnRUYXJnZXQ7XG4gICAgICAgICAgICAgIF9kaXNwYXRjaExpc3RlbmVycyRpID0gX2Rpc3BhdGNoTGlzdGVuZXJzJGkubGlzdGVuZXI7XG4gICAgICAgICAgICAgIGlmIChpbnN0YW5jZSAhPT0gcHJldmlvdXNJbnN0YW5jZSAmJiBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKVxuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIG51bGwgIT09IGluc3RhbmNlXG4gICAgICAgICAgICAgICAgPyBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVEaXNwYXRjaCxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgIF9kaXNwYXRjaExpc3RlbmVycyRpLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0XG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBleGVjdXRlRGlzcGF0Y2goZXZlbnQsIF9kaXNwYXRjaExpc3RlbmVycyRpLCBjdXJyZW50VGFyZ2V0KTtcbiAgICAgICAgICAgICAgcHJldmlvdXNJbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoZG9tRXZlbnROYW1lLCB0YXJnZXRFbGVtZW50KSB7XG4gICAgICBub25EZWxlZ2F0ZWRFdmVudHMuaGFzKGRvbUV2ZW50TmFtZSkgfHxcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAnRGlkIG5vdCBleHBlY3QgYSBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCkgY2FsbCBmb3IgXCIlc1wiLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLFxuICAgICAgICAgIGRvbUV2ZW50TmFtZVxuICAgICAgICApO1xuICAgICAgdmFyIGxpc3RlbmVyU2V0ID0gdGFyZ2V0RWxlbWVudFtpbnRlcm5hbEV2ZW50SGFuZGxlcnNLZXldO1xuICAgICAgdm9pZCAwID09PSBsaXN0ZW5lclNldCAmJlxuICAgICAgICAobGlzdGVuZXJTZXQgPSB0YXJnZXRFbGVtZW50W2ludGVybmFsRXZlbnRIYW5kbGVyc0tleV0gPSBuZXcgU2V0KCkpO1xuICAgICAgdmFyIGxpc3RlbmVyU2V0S2V5ID0gZG9tRXZlbnROYW1lICsgXCJfX2J1YmJsZVwiO1xuICAgICAgbGlzdGVuZXJTZXQuaGFzKGxpc3RlbmVyU2V0S2V5KSB8fFxuICAgICAgICAoYWRkVHJhcHBlZEV2ZW50TGlzdGVuZXIodGFyZ2V0RWxlbWVudCwgZG9tRXZlbnROYW1lLCAyLCAhMSksXG4gICAgICAgIGxpc3RlbmVyU2V0LmFkZChsaXN0ZW5lclNldEtleSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBsaXN0ZW5Ub05hdGl2ZUV2ZW50KGRvbUV2ZW50TmFtZSwgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lciwgdGFyZ2V0KSB7XG4gICAgICBub25EZWxlZ2F0ZWRFdmVudHMuaGFzKGRvbUV2ZW50TmFtZSkgJiZcbiAgICAgICAgIWlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIgJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAnRGlkIG5vdCBleHBlY3QgYSBsaXN0ZW5Ub05hdGl2ZUV2ZW50KCkgY2FsbCBmb3IgXCIlc1wiIGluIHRoZSBidWJibGUgcGhhc2UuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicsXG4gICAgICAgICAgZG9tRXZlbnROYW1lXG4gICAgICAgICk7XG4gICAgICB2YXIgZXZlbnRTeXN0ZW1GbGFncyA9IDA7XG4gICAgICBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyICYmIChldmVudFN5c3RlbUZsYWdzIHw9IDQpO1xuICAgICAgYWRkVHJhcHBlZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgIHRhcmdldCxcbiAgICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgICBldmVudFN5c3RlbUZsYWdzLFxuICAgICAgICBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBsaXN0ZW5Ub0FsbFN1cHBvcnRlZEV2ZW50cyhyb290Q29udGFpbmVyRWxlbWVudCkge1xuICAgICAgaWYgKCFyb290Q29udGFpbmVyRWxlbWVudFtsaXN0ZW5pbmdNYXJrZXJdKSB7XG4gICAgICAgIHJvb3RDb250YWluZXJFbGVtZW50W2xpc3RlbmluZ01hcmtlcl0gPSAhMDtcbiAgICAgICAgYWxsTmF0aXZlRXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKGRvbUV2ZW50TmFtZSkge1xuICAgICAgICAgIFwic2VsZWN0aW9uY2hhbmdlXCIgIT09IGRvbUV2ZW50TmFtZSAmJlxuICAgICAgICAgICAgKG5vbkRlbGVnYXRlZEV2ZW50cy5oYXMoZG9tRXZlbnROYW1lKSB8fFxuICAgICAgICAgICAgICBsaXN0ZW5Ub05hdGl2ZUV2ZW50KGRvbUV2ZW50TmFtZSwgITEsIHJvb3RDb250YWluZXJFbGVtZW50KSxcbiAgICAgICAgICAgIGxpc3RlblRvTmF0aXZlRXZlbnQoZG9tRXZlbnROYW1lLCAhMCwgcm9vdENvbnRhaW5lckVsZW1lbnQpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBvd25lckRvY3VtZW50ID1cbiAgICAgICAgICA5ID09PSByb290Q29udGFpbmVyRWxlbWVudC5ub2RlVHlwZVxuICAgICAgICAgICAgPyByb290Q29udGFpbmVyRWxlbWVudFxuICAgICAgICAgICAgOiByb290Q29udGFpbmVyRWxlbWVudC5vd25lckRvY3VtZW50O1xuICAgICAgICBudWxsID09PSBvd25lckRvY3VtZW50IHx8XG4gICAgICAgICAgb3duZXJEb2N1bWVudFtsaXN0ZW5pbmdNYXJrZXJdIHx8XG4gICAgICAgICAgKChvd25lckRvY3VtZW50W2xpc3RlbmluZ01hcmtlcl0gPSAhMCksXG4gICAgICAgICAgbGlzdGVuVG9OYXRpdmVFdmVudChcInNlbGVjdGlvbmNoYW5nZVwiLCAhMSwgb3duZXJEb2N1bWVudCkpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBhZGRUcmFwcGVkRXZlbnRMaXN0ZW5lcihcbiAgICAgIHRhcmdldENvbnRhaW5lcixcbiAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyXG4gICAgKSB7XG4gICAgICBzd2l0Y2ggKGdldEV2ZW50UHJpb3JpdHkoZG9tRXZlbnROYW1lKSkge1xuICAgICAgICBjYXNlIERpc2NyZXRlRXZlbnRQcmlvcml0eTpcbiAgICAgICAgICB2YXIgbGlzdGVuZXJXcmFwcGVyID0gZGlzcGF0Y2hEaXNjcmV0ZUV2ZW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENvbnRpbnVvdXNFdmVudFByaW9yaXR5OlxuICAgICAgICAgIGxpc3RlbmVyV3JhcHBlciA9IGRpc3BhdGNoQ29udGludW91c0V2ZW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGxpc3RlbmVyV3JhcHBlciA9IGRpc3BhdGNoRXZlbnQ7XG4gICAgICB9XG4gICAgICBldmVudFN5c3RlbUZsYWdzID0gbGlzdGVuZXJXcmFwcGVyLmJpbmQoXG4gICAgICAgIG51bGwsXG4gICAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgICAgdGFyZ2V0Q29udGFpbmVyXG4gICAgICApO1xuICAgICAgbGlzdGVuZXJXcmFwcGVyID0gdm9pZCAwO1xuICAgICAgIXBhc3NpdmVCcm93c2VyRXZlbnRzU3VwcG9ydGVkIHx8XG4gICAgICAgIChcInRvdWNoc3RhcnRcIiAhPT0gZG9tRXZlbnROYW1lICYmXG4gICAgICAgICAgXCJ0b3VjaG1vdmVcIiAhPT0gZG9tRXZlbnROYW1lICYmXG4gICAgICAgICAgXCJ3aGVlbFwiICE9PSBkb21FdmVudE5hbWUpIHx8XG4gICAgICAgIChsaXN0ZW5lcldyYXBwZXIgPSAhMCk7XG4gICAgICBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyXG4gICAgICAgID8gdm9pZCAwICE9PSBsaXN0ZW5lcldyYXBwZXJcbiAgICAgICAgICA/IHRhcmdldENvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywge1xuICAgICAgICAgICAgICBjYXB0dXJlOiAhMCxcbiAgICAgICAgICAgICAgcGFzc2l2ZTogbGlzdGVuZXJXcmFwcGVyXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogdGFyZ2V0Q29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCAhMClcbiAgICAgICAgOiB2b2lkIDAgIT09IGxpc3RlbmVyV3JhcHBlclxuICAgICAgICAgID8gdGFyZ2V0Q29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB7XG4gICAgICAgICAgICAgIHBhc3NpdmU6IGxpc3RlbmVyV3JhcHBlclxuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IHRhcmdldENvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgICBkb21FdmVudE5hbWUsXG4gICAgICAgICAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICAgICAgICAgICExXG4gICAgICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkaXNwYXRjaEV2ZW50Rm9yUGx1Z2luRXZlbnRTeXN0ZW0oXG4gICAgICBkb21FdmVudE5hbWUsXG4gICAgICBldmVudFN5c3RlbUZsYWdzLFxuICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICB0YXJnZXRJbnN0JGpzY29tcCQwLFxuICAgICAgdGFyZ2V0Q29udGFpbmVyXG4gICAgKSB7XG4gICAgICB2YXIgYW5jZXN0b3JJbnN0ID0gdGFyZ2V0SW5zdCRqc2NvbXAkMDtcbiAgICAgIGlmIChcbiAgICAgICAgMCA9PT0gKGV2ZW50U3lzdGVtRmxhZ3MgJiAxKSAmJlxuICAgICAgICAwID09PSAoZXZlbnRTeXN0ZW1GbGFncyAmIDIpICYmXG4gICAgICAgIG51bGwgIT09IHRhcmdldEluc3QkanNjb21wJDBcbiAgICAgIClcbiAgICAgICAgYTogZm9yICg7Oykge1xuICAgICAgICAgIGlmIChudWxsID09PSB0YXJnZXRJbnN0JGpzY29tcCQwKSByZXR1cm47XG4gICAgICAgICAgdmFyIG5vZGVUYWcgPSB0YXJnZXRJbnN0JGpzY29tcCQwLnRhZztcbiAgICAgICAgICBpZiAoMyA9PT0gbm9kZVRhZyB8fCA0ID09PSBub2RlVGFnKSB7XG4gICAgICAgICAgICB2YXIgY29udGFpbmVyID0gdGFyZ2V0SW5zdCRqc2NvbXAkMC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICAgIGlmIChjb250YWluZXIgPT09IHRhcmdldENvbnRhaW5lcikgYnJlYWs7XG4gICAgICAgICAgICBpZiAoNCA9PT0gbm9kZVRhZylcbiAgICAgICAgICAgICAgZm9yIChub2RlVGFnID0gdGFyZ2V0SW5zdCRqc2NvbXAkMC5yZXR1cm47IG51bGwgIT09IG5vZGVUYWc7ICkge1xuICAgICAgICAgICAgICAgIHZhciBncmFuZFRhZyA9IG5vZGVUYWcudGFnO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICgzID09PSBncmFuZFRhZyB8fCA0ID09PSBncmFuZFRhZykgJiZcbiAgICAgICAgICAgICAgICAgIG5vZGVUYWcuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8gPT09IHRhcmdldENvbnRhaW5lclxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBub2RlVGFnID0gbm9kZVRhZy5yZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoOyBudWxsICE9PSBjb250YWluZXI7ICkge1xuICAgICAgICAgICAgICBub2RlVGFnID0gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUoY29udGFpbmVyKTtcbiAgICAgICAgICAgICAgaWYgKG51bGwgPT09IG5vZGVUYWcpIHJldHVybjtcbiAgICAgICAgICAgICAgZ3JhbmRUYWcgPSBub2RlVGFnLnRhZztcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIDUgPT09IGdyYW5kVGFnIHx8XG4gICAgICAgICAgICAgICAgNiA9PT0gZ3JhbmRUYWcgfHxcbiAgICAgICAgICAgICAgICAyNiA9PT0gZ3JhbmRUYWcgfHxcbiAgICAgICAgICAgICAgICAyNyA9PT0gZ3JhbmRUYWdcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0SW5zdCRqc2NvbXAkMCA9IGFuY2VzdG9ySW5zdCA9IG5vZGVUYWc7XG4gICAgICAgICAgICAgICAgY29udGludWUgYTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb250YWluZXIgPSBjb250YWluZXIucGFyZW50Tm9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGFyZ2V0SW5zdCRqc2NvbXAkMCA9IHRhcmdldEluc3QkanNjb21wJDAucmV0dXJuO1xuICAgICAgICB9XG4gICAgICBiYXRjaGVkVXBkYXRlcyQxKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHRhcmdldEluc3QgPSBhbmNlc3Rvckluc3QsXG4gICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXQgPSBnZXRFdmVudFRhcmdldChuYXRpdmVFdmVudCksXG4gICAgICAgICAgZGlzcGF0Y2hRdWV1ZSA9IFtdO1xuICAgICAgICBhOiB7XG4gICAgICAgICAgdmFyIHJlYWN0TmFtZSA9IHRvcExldmVsRXZlbnRzVG9SZWFjdE5hbWVzLmdldChkb21FdmVudE5hbWUpO1xuICAgICAgICAgIGlmICh2b2lkIDAgIT09IHJlYWN0TmFtZSkge1xuICAgICAgICAgICAgdmFyIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0V2ZW50LFxuICAgICAgICAgICAgICByZWFjdEV2ZW50VHlwZSA9IGRvbUV2ZW50TmFtZTtcbiAgICAgICAgICAgIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgICAgICAgICAgIGNhc2UgXCJrZXlwcmVzc1wiOlxuICAgICAgICAgICAgICAgIGlmICgwID09PSBnZXRFdmVudENoYXJDb2RlKG5hdGl2ZUV2ZW50KSkgYnJlYWsgYTtcbiAgICAgICAgICAgICAgY2FzZSBcImtleWRvd25cIjpcbiAgICAgICAgICAgICAgY2FzZSBcImtleXVwXCI6XG4gICAgICAgICAgICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljS2V5Ym9hcmRFdmVudDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcImZvY3VzaW5cIjpcbiAgICAgICAgICAgICAgICByZWFjdEV2ZW50VHlwZSA9IFwiZm9jdXNcIjtcbiAgICAgICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNGb2N1c0V2ZW50O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiZm9jdXNvdXRcIjpcbiAgICAgICAgICAgICAgICByZWFjdEV2ZW50VHlwZSA9IFwiYmx1clwiO1xuICAgICAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0ZvY3VzRXZlbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJiZWZvcmVibHVyXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJhZnRlcmJsdXJcIjpcbiAgICAgICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNGb2N1c0V2ZW50O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiY2xpY2tcIjpcbiAgICAgICAgICAgICAgICBpZiAoMiA9PT0gbmF0aXZlRXZlbnQuYnV0dG9uKSBicmVhayBhO1xuICAgICAgICAgICAgICBjYXNlIFwiYXV4Y2xpY2tcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImRibGNsaWNrXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJtb3VzZWRvd25cIjpcbiAgICAgICAgICAgICAgY2FzZSBcIm1vdXNlbW92ZVwiOlxuICAgICAgICAgICAgICBjYXNlIFwibW91c2V1cFwiOlxuICAgICAgICAgICAgICBjYXNlIFwibW91c2VvdXRcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIm1vdXNlb3ZlclwiOlxuICAgICAgICAgICAgICBjYXNlIFwiY29udGV4dG1lbnVcIjpcbiAgICAgICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNNb3VzZUV2ZW50O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiZHJhZ1wiOlxuICAgICAgICAgICAgICBjYXNlIFwiZHJhZ2VuZFwiOlxuICAgICAgICAgICAgICBjYXNlIFwiZHJhZ2VudGVyXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJkcmFnZXhpdFwiOlxuICAgICAgICAgICAgICBjYXNlIFwiZHJhZ2xlYXZlXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJkcmFnb3ZlclwiOlxuICAgICAgICAgICAgICBjYXNlIFwiZHJhZ3N0YXJ0XCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJkcm9wXCI6XG4gICAgICAgICAgICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRHJhZ0V2ZW50O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwidG91Y2hjYW5jZWxcIjpcbiAgICAgICAgICAgICAgY2FzZSBcInRvdWNoZW5kXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJ0b3VjaG1vdmVcIjpcbiAgICAgICAgICAgICAgY2FzZSBcInRvdWNoc3RhcnRcIjpcbiAgICAgICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNUb3VjaEV2ZW50O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIEFOSU1BVElPTl9FTkQ6XG4gICAgICAgICAgICAgIGNhc2UgQU5JTUFUSU9OX0lURVJBVElPTjpcbiAgICAgICAgICAgICAgY2FzZSBBTklNQVRJT05fU1RBUlQ6XG4gICAgICAgICAgICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljQW5pbWF0aW9uRXZlbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgVFJBTlNJVElPTl9FTkQ6XG4gICAgICAgICAgICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljVHJhbnNpdGlvbkV2ZW50O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwic2Nyb2xsXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJzY3JvbGxlbmRcIjpcbiAgICAgICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNVSUV2ZW50O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwid2hlZWxcIjpcbiAgICAgICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNXaGVlbEV2ZW50O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiY29weVwiOlxuICAgICAgICAgICAgICBjYXNlIFwiY3V0XCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJwYXN0ZVwiOlxuICAgICAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0NsaXBib2FyZEV2ZW50O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiZ290cG9pbnRlcmNhcHR1cmVcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImxvc3Rwb2ludGVyY2FwdHVyZVwiOlxuICAgICAgICAgICAgICBjYXNlIFwicG9pbnRlcmNhbmNlbFwiOlxuICAgICAgICAgICAgICBjYXNlIFwicG9pbnRlcmRvd25cIjpcbiAgICAgICAgICAgICAgY2FzZSBcInBvaW50ZXJtb3ZlXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJwb2ludGVyb3V0XCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJwb2ludGVyb3ZlclwiOlxuICAgICAgICAgICAgICBjYXNlIFwicG9pbnRlcnVwXCI6XG4gICAgICAgICAgICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljUG9pbnRlckV2ZW50O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwidG9nZ2xlXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJiZWZvcmV0b2dnbGVcIjpcbiAgICAgICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNUb2dnbGVFdmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBpbkNhcHR1cmVQaGFzZSA9IDAgIT09IChldmVudFN5c3RlbUZsYWdzICYgNCksXG4gICAgICAgICAgICAgIGFjY3VtdWxhdGVUYXJnZXRPbmx5ID1cbiAgICAgICAgICAgICAgICAhaW5DYXB0dXJlUGhhc2UgJiZcbiAgICAgICAgICAgICAgICAoXCJzY3JvbGxcIiA9PT0gZG9tRXZlbnROYW1lIHx8IFwic2Nyb2xsZW5kXCIgPT09IGRvbUV2ZW50TmFtZSksXG4gICAgICAgICAgICAgIHJlYWN0RXZlbnROYW1lID0gaW5DYXB0dXJlUGhhc2VcbiAgICAgICAgICAgICAgICA/IG51bGwgIT09IHJlYWN0TmFtZVxuICAgICAgICAgICAgICAgICAgPyByZWFjdE5hbWUgKyBcIkNhcHR1cmVcIlxuICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgICAgOiByZWFjdE5hbWU7XG4gICAgICAgICAgICBpbkNhcHR1cmVQaGFzZSA9IFtdO1xuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gdGFyZ2V0SW5zdCwgbGFzdEhvc3RDb21wb25lbnQ7XG4gICAgICAgICAgICAgIG51bGwgIT09IGluc3RhbmNlO1xuXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdmFyIF9pbnN0YW5jZTIgPSBpbnN0YW5jZTtcbiAgICAgICAgICAgICAgbGFzdEhvc3RDb21wb25lbnQgPSBfaW5zdGFuY2UyLnN0YXRlTm9kZTtcbiAgICAgICAgICAgICAgX2luc3RhbmNlMiA9IF9pbnN0YW5jZTIudGFnO1xuICAgICAgICAgICAgICAoNSAhPT0gX2luc3RhbmNlMiAmJiAyNiAhPT0gX2luc3RhbmNlMiAmJiAyNyAhPT0gX2luc3RhbmNlMikgfHxcbiAgICAgICAgICAgICAgICBudWxsID09PSBsYXN0SG9zdENvbXBvbmVudCB8fFxuICAgICAgICAgICAgICAgIG51bGwgPT09IHJlYWN0RXZlbnROYW1lIHx8XG4gICAgICAgICAgICAgICAgKChfaW5zdGFuY2UyID0gZ2V0TGlzdGVuZXIoaW5zdGFuY2UsIHJlYWN0RXZlbnROYW1lKSksXG4gICAgICAgICAgICAgICAgbnVsbCAhPSBfaW5zdGFuY2UyICYmXG4gICAgICAgICAgICAgICAgICBpbkNhcHR1cmVQaGFzZS5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVEaXNwYXRjaExpc3RlbmVyKFxuICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgICAgICAgICAgICAgIF9pbnN0YW5jZTIsXG4gICAgICAgICAgICAgICAgICAgICAgbGFzdEhvc3RDb21wb25lbnRcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICAgIGlmIChhY2N1bXVsYXRlVGFyZ2V0T25seSkgYnJlYWs7XG4gICAgICAgICAgICAgIGluc3RhbmNlID0gaW5zdGFuY2UucmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgMCA8IGluQ2FwdHVyZVBoYXNlLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAoKHJlYWN0TmFtZSA9IG5ldyBTeW50aGV0aWNFdmVudEN0b3IoXG4gICAgICAgICAgICAgICAgcmVhY3ROYW1lLFxuICAgICAgICAgICAgICAgIHJlYWN0RXZlbnRUeXBlLFxuICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICAgICAgICAgICAgZXZlbnQ6IHJlYWN0TmFtZSxcbiAgICAgICAgICAgICAgICBsaXN0ZW5lcnM6IGluQ2FwdHVyZVBoYXNlXG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKDAgPT09IChldmVudFN5c3RlbUZsYWdzICYgNykpIHtcbiAgICAgICAgICBhOiB7XG4gICAgICAgICAgICByZWFjdE5hbWUgPVxuICAgICAgICAgICAgICBcIm1vdXNlb3ZlclwiID09PSBkb21FdmVudE5hbWUgfHwgXCJwb2ludGVyb3ZlclwiID09PSBkb21FdmVudE5hbWU7XG4gICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IgPVxuICAgICAgICAgICAgICBcIm1vdXNlb3V0XCIgPT09IGRvbUV2ZW50TmFtZSB8fCBcInBvaW50ZXJvdXRcIiA9PT0gZG9tRXZlbnROYW1lO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICByZWFjdE5hbWUgJiZcbiAgICAgICAgICAgICAgbmF0aXZlRXZlbnQgIT09IGN1cnJlbnRSZXBsYXlpbmdFdmVudCAmJlxuICAgICAgICAgICAgICAocmVhY3RFdmVudFR5cGUgPVxuICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgbmF0aXZlRXZlbnQuZnJvbUVsZW1lbnQpICYmXG4gICAgICAgICAgICAgIChnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShyZWFjdEV2ZW50VHlwZSkgfHxcbiAgICAgICAgICAgICAgICByZWFjdEV2ZW50VHlwZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgIGlmIChTeW50aGV0aWNFdmVudEN0b3IgfHwgcmVhY3ROYW1lKSB7XG4gICAgICAgICAgICAgIHJlYWN0TmFtZSA9XG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXQud2luZG93ID09PSBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICAgICAgICAgICAgPyBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICAgICAgICAgICAgOiAocmVhY3ROYW1lID0gbmF0aXZlRXZlbnRUYXJnZXQub3duZXJEb2N1bWVudClcbiAgICAgICAgICAgICAgICAgICAgPyByZWFjdE5hbWUuZGVmYXVsdFZpZXcgfHwgcmVhY3ROYW1lLnBhcmVudFdpbmRvd1xuICAgICAgICAgICAgICAgICAgICA6IHdpbmRvdztcbiAgICAgICAgICAgICAgaWYgKFN5bnRoZXRpY0V2ZW50Q3Rvcikge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICgocmVhY3RFdmVudFR5cGUgPVxuICAgICAgICAgICAgICAgICAgICBuYXRpdmVFdmVudC5yZWxhdGVkVGFyZ2V0IHx8IG5hdGl2ZUV2ZW50LnRvRWxlbWVudCksXG4gICAgICAgICAgICAgICAgICAoU3ludGhldGljRXZlbnRDdG9yID0gdGFyZ2V0SW5zdCksXG4gICAgICAgICAgICAgICAgICAocmVhY3RFdmVudFR5cGUgPSByZWFjdEV2ZW50VHlwZVxuICAgICAgICAgICAgICAgICAgICA/IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHJlYWN0RXZlbnRUeXBlKVxuICAgICAgICAgICAgICAgICAgICA6IG51bGwpLFxuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gcmVhY3RFdmVudFR5cGUgJiZcbiAgICAgICAgICAgICAgICAgICAgKChhY2N1bXVsYXRlVGFyZ2V0T25seSA9XG4gICAgICAgICAgICAgICAgICAgICAgZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihyZWFjdEV2ZW50VHlwZSkpLFxuICAgICAgICAgICAgICAgICAgICAoaW5DYXB0dXJlUGhhc2UgPSByZWFjdEV2ZW50VHlwZS50YWcpLFxuICAgICAgICAgICAgICAgICAgICByZWFjdEV2ZW50VHlwZSAhPT0gYWNjdW11bGF0ZVRhcmdldE9ubHkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAoNSAhPT0gaW5DYXB0dXJlUGhhc2UgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIDI3ICE9PSBpbkNhcHR1cmVQaGFzZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgNiAhPT0gaW5DYXB0dXJlUGhhc2UpKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICByZWFjdEV2ZW50VHlwZSA9IG51bGw7XG4gICAgICAgICAgICAgIH0gZWxzZSAoU3ludGhldGljRXZlbnRDdG9yID0gbnVsbCksIChyZWFjdEV2ZW50VHlwZSA9IHRhcmdldEluc3QpO1xuICAgICAgICAgICAgICBpZiAoU3ludGhldGljRXZlbnRDdG9yICE9PSByZWFjdEV2ZW50VHlwZSkge1xuICAgICAgICAgICAgICAgIGluQ2FwdHVyZVBoYXNlID0gU3ludGhldGljTW91c2VFdmVudDtcbiAgICAgICAgICAgICAgICBfaW5zdGFuY2UyID0gXCJvbk1vdXNlTGVhdmVcIjtcbiAgICAgICAgICAgICAgICByZWFjdEV2ZW50TmFtZSA9IFwib25Nb3VzZUVudGVyXCI7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2UgPSBcIm1vdXNlXCI7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgXCJwb2ludGVyb3V0XCIgPT09IGRvbUV2ZW50TmFtZSB8fFxuICAgICAgICAgICAgICAgICAgXCJwb2ludGVyb3ZlclwiID09PSBkb21FdmVudE5hbWVcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAoaW5DYXB0dXJlUGhhc2UgPSBTeW50aGV0aWNQb2ludGVyRXZlbnQpLFxuICAgICAgICAgICAgICAgICAgICAoX2luc3RhbmNlMiA9IFwib25Qb2ludGVyTGVhdmVcIiksXG4gICAgICAgICAgICAgICAgICAgIChyZWFjdEV2ZW50TmFtZSA9IFwib25Qb2ludGVyRW50ZXJcIiksXG4gICAgICAgICAgICAgICAgICAgIChpbnN0YW5jZSA9IFwicG9pbnRlclwiKTtcbiAgICAgICAgICAgICAgICBhY2N1bXVsYXRlVGFyZ2V0T25seSA9XG4gICAgICAgICAgICAgICAgICBudWxsID09IFN5bnRoZXRpY0V2ZW50Q3RvclxuICAgICAgICAgICAgICAgICAgICA/IHJlYWN0TmFtZVxuICAgICAgICAgICAgICAgICAgICA6IGdldE5vZGVGcm9tSW5zdGFuY2UoU3ludGhldGljRXZlbnRDdG9yKTtcbiAgICAgICAgICAgICAgICBsYXN0SG9zdENvbXBvbmVudCA9XG4gICAgICAgICAgICAgICAgICBudWxsID09IHJlYWN0RXZlbnRUeXBlXG4gICAgICAgICAgICAgICAgICAgID8gcmVhY3ROYW1lXG4gICAgICAgICAgICAgICAgICAgIDogZ2V0Tm9kZUZyb21JbnN0YW5jZShyZWFjdEV2ZW50VHlwZSk7XG4gICAgICAgICAgICAgICAgcmVhY3ROYW1lID0gbmV3IGluQ2FwdHVyZVBoYXNlKFxuICAgICAgICAgICAgICAgICAgX2luc3RhbmNlMixcbiAgICAgICAgICAgICAgICAgIGluc3RhbmNlICsgXCJsZWF2ZVwiLFxuICAgICAgICAgICAgICAgICAgU3ludGhldGljRXZlbnRDdG9yLFxuICAgICAgICAgICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmVhY3ROYW1lLnRhcmdldCA9IGFjY3VtdWxhdGVUYXJnZXRPbmx5O1xuICAgICAgICAgICAgICAgIHJlYWN0TmFtZS5yZWxhdGVkVGFyZ2V0ID0gbGFzdEhvc3RDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgX2luc3RhbmNlMiA9IG51bGw7XG4gICAgICAgICAgICAgICAgZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUobmF0aXZlRXZlbnRUYXJnZXQpID09PSB0YXJnZXRJbnN0ICYmXG4gICAgICAgICAgICAgICAgICAoKGluQ2FwdHVyZVBoYXNlID0gbmV3IGluQ2FwdHVyZVBoYXNlKFxuICAgICAgICAgICAgICAgICAgICByZWFjdEV2ZW50TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UgKyBcImVudGVyXCIsXG4gICAgICAgICAgICAgICAgICAgIHJlYWN0RXZlbnRUeXBlLFxuICAgICAgICAgICAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICAgICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgKGluQ2FwdHVyZVBoYXNlLnRhcmdldCA9IGxhc3RIb3N0Q29tcG9uZW50KSxcbiAgICAgICAgICAgICAgICAgIChpbkNhcHR1cmVQaGFzZS5yZWxhdGVkVGFyZ2V0ID0gYWNjdW11bGF0ZVRhcmdldE9ubHkpLFxuICAgICAgICAgICAgICAgICAgKF9pbnN0YW5jZTIgPSBpbkNhcHR1cmVQaGFzZSkpO1xuICAgICAgICAgICAgICAgIGFjY3VtdWxhdGVUYXJnZXRPbmx5ID0gX2luc3RhbmNlMjtcbiAgICAgICAgICAgICAgICBpZiAoU3ludGhldGljRXZlbnRDdG9yICYmIHJlYWN0RXZlbnRUeXBlKVxuICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICBpbkNhcHR1cmVQaGFzZSA9IGdldFBhcmVudDtcbiAgICAgICAgICAgICAgICAgICAgcmVhY3RFdmVudE5hbWUgPSBTeW50aGV0aWNFdmVudEN0b3I7XG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlID0gcmVhY3RFdmVudFR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RIb3N0Q29tcG9uZW50ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICAgICAgICBfaW5zdGFuY2UyID0gcmVhY3RFdmVudE5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgX2luc3RhbmNlMjtcbiAgICAgICAgICAgICAgICAgICAgICBfaW5zdGFuY2UyID0gaW5DYXB0dXJlUGhhc2UoX2luc3RhbmNlMilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIGxhc3RIb3N0Q29tcG9uZW50Kys7XG4gICAgICAgICAgICAgICAgICAgIF9pbnN0YW5jZTIgPSAwO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wQiA9IGluc3RhbmNlO1xuICAgICAgICAgICAgICAgICAgICAgIHRlbXBCO1xuICAgICAgICAgICAgICAgICAgICAgIHRlbXBCID0gaW5DYXB0dXJlUGhhc2UodGVtcEIpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICBfaW5zdGFuY2UyKys7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoOyAwIDwgbGFzdEhvc3RDb21wb25lbnQgLSBfaW5zdGFuY2UyOyApXG4gICAgICAgICAgICAgICAgICAgICAgKHJlYWN0RXZlbnROYW1lID0gaW5DYXB0dXJlUGhhc2UocmVhY3RFdmVudE5hbWUpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RIb3N0Q29tcG9uZW50LS07XG4gICAgICAgICAgICAgICAgICAgIGZvciAoOyAwIDwgX2luc3RhbmNlMiAtIGxhc3RIb3N0Q29tcG9uZW50OyApXG4gICAgICAgICAgICAgICAgICAgICAgKGluc3RhbmNlID0gaW5DYXB0dXJlUGhhc2UoaW5zdGFuY2UpKSwgX2luc3RhbmNlMi0tO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKDsgbGFzdEhvc3RDb21wb25lbnQtLTsgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhY3RFdmVudE5hbWUgPT09IGluc3RhbmNlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAobnVsbCAhPT0gaW5zdGFuY2UgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhY3RFdmVudE5hbWUgPT09IGluc3RhbmNlLmFsdGVybmF0ZSlcbiAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluQ2FwdHVyZVBoYXNlID0gcmVhY3RFdmVudE5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhayBiO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICByZWFjdEV2ZW50TmFtZSA9IGluQ2FwdHVyZVBoYXNlKHJlYWN0RXZlbnROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSA9IGluQ2FwdHVyZVBoYXNlKGluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpbkNhcHR1cmVQaGFzZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpbkNhcHR1cmVQaGFzZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gU3ludGhldGljRXZlbnRDdG9yICYmXG4gICAgICAgICAgICAgICAgICBhY2N1bXVsYXRlRW50ZXJMZWF2ZUxpc3RlbmVyc0ZvckV2ZW50KFxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaFF1ZXVlLFxuICAgICAgICAgICAgICAgICAgICByZWFjdE5hbWUsXG4gICAgICAgICAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvcixcbiAgICAgICAgICAgICAgICAgICAgaW5DYXB0dXJlUGhhc2UsXG4gICAgICAgICAgICAgICAgICAgICExXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIG51bGwgIT09IHJlYWN0RXZlbnRUeXBlICYmXG4gICAgICAgICAgICAgICAgICBudWxsICE9PSBhY2N1bXVsYXRlVGFyZ2V0T25seSAmJlxuICAgICAgICAgICAgICAgICAgYWNjdW11bGF0ZUVudGVyTGVhdmVMaXN0ZW5lcnNGb3JFdmVudChcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hRdWV1ZSxcbiAgICAgICAgICAgICAgICAgICAgYWNjdW11bGF0ZVRhcmdldE9ubHksXG4gICAgICAgICAgICAgICAgICAgIHJlYWN0RXZlbnRUeXBlLFxuICAgICAgICAgICAgICAgICAgICBpbkNhcHR1cmVQaGFzZSxcbiAgICAgICAgICAgICAgICAgICAgITBcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYToge1xuICAgICAgICAgICAgcmVhY3ROYW1lID0gdGFyZ2V0SW5zdCA/IGdldE5vZGVGcm9tSW5zdGFuY2UodGFyZ2V0SW5zdCkgOiB3aW5kb3c7XG4gICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IgPVxuICAgICAgICAgICAgICByZWFjdE5hbWUubm9kZU5hbWUgJiYgcmVhY3ROYW1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIFwic2VsZWN0XCIgPT09IFN5bnRoZXRpY0V2ZW50Q3RvciB8fFxuICAgICAgICAgICAgICAoXCJpbnB1dFwiID09PSBTeW50aGV0aWNFdmVudEN0b3IgJiYgXCJmaWxlXCIgPT09IHJlYWN0TmFtZS50eXBlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB2YXIgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9yQ2hhbmdlRXZlbnQ7XG4gICAgICAgICAgICBlbHNlIGlmIChpc1RleHRJbnB1dEVsZW1lbnQocmVhY3ROYW1lKSlcbiAgICAgICAgICAgICAgaWYgKGlzSW5wdXRFdmVudFN1cHBvcnRlZClcbiAgICAgICAgICAgICAgICBnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JJbnB1dE9yQ2hhbmdlRXZlbnQ7XG4gICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZvcklucHV0RXZlbnRQb2x5ZmlsbDtcbiAgICAgICAgICAgICAgICB2YXIgaGFuZGxlRXZlbnRGdW5jID0gaGFuZGxlRXZlbnRzRm9ySW5wdXRFdmVudFBvbHlmaWxsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIChTeW50aGV0aWNFdmVudEN0b3IgPSByZWFjdE5hbWUubm9kZU5hbWUpLFxuICAgICAgICAgICAgICAgICFTeW50aGV0aWNFdmVudEN0b3IgfHxcbiAgICAgICAgICAgICAgICBcImlucHV0XCIgIT09IFN5bnRoZXRpY0V2ZW50Q3Rvci50b0xvd2VyQ2FzZSgpIHx8XG4gICAgICAgICAgICAgICAgKFwiY2hlY2tib3hcIiAhPT0gcmVhY3ROYW1lLnR5cGUgJiYgXCJyYWRpb1wiICE9PSByZWFjdE5hbWUudHlwZSlcbiAgICAgICAgICAgICAgICAgID8gdGFyZ2V0SW5zdCAmJlxuICAgICAgICAgICAgICAgICAgICBpc0N1c3RvbUVsZW1lbnQodGFyZ2V0SW5zdC5lbGVtZW50VHlwZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgKGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZvckNoYW5nZUV2ZW50KVxuICAgICAgICAgICAgICAgICAgOiAoZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9yQ2xpY2tFdmVudCk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGdldFRhcmdldEluc3RGdW5jICYmXG4gICAgICAgICAgICAgIChnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGdW5jKGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY3JlYXRlQW5kQWNjdW11bGF0ZUNoYW5nZUV2ZW50KFxuICAgICAgICAgICAgICAgIGRpc3BhdGNoUXVldWUsXG4gICAgICAgICAgICAgICAgZ2V0VGFyZ2V0SW5zdEZ1bmMsXG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGhhbmRsZUV2ZW50RnVuYyAmJlxuICAgICAgICAgICAgICBoYW5kbGVFdmVudEZ1bmMoZG9tRXZlbnROYW1lLCByZWFjdE5hbWUsIHRhcmdldEluc3QpO1xuICAgICAgICAgICAgXCJmb2N1c291dFwiID09PSBkb21FdmVudE5hbWUgJiZcbiAgICAgICAgICAgICAgdGFyZ2V0SW5zdCAmJlxuICAgICAgICAgICAgICBcIm51bWJlclwiID09PSByZWFjdE5hbWUudHlwZSAmJlxuICAgICAgICAgICAgICBudWxsICE9IHRhcmdldEluc3QubWVtb2l6ZWRQcm9wcy52YWx1ZSAmJlxuICAgICAgICAgICAgICBzZXREZWZhdWx0VmFsdWUocmVhY3ROYW1lLCBcIm51bWJlclwiLCByZWFjdE5hbWUudmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBoYW5kbGVFdmVudEZ1bmMgPSB0YXJnZXRJbnN0XG4gICAgICAgICAgICA/IGdldE5vZGVGcm9tSW5zdGFuY2UodGFyZ2V0SW5zdClcbiAgICAgICAgICAgIDogd2luZG93O1xuICAgICAgICAgIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgICAgICAgICBjYXNlIFwiZm9jdXNpblwiOlxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgaXNUZXh0SW5wdXRFbGVtZW50KGhhbmRsZUV2ZW50RnVuYykgfHxcbiAgICAgICAgICAgICAgICBcInRydWVcIiA9PT0gaGFuZGxlRXZlbnRGdW5jLmNvbnRlbnRFZGl0YWJsZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKGFjdGl2ZUVsZW1lbnQgPSBoYW5kbGVFdmVudEZ1bmMpLFxuICAgICAgICAgICAgICAgICAgKGFjdGl2ZUVsZW1lbnRJbnN0ID0gdGFyZ2V0SW5zdCksXG4gICAgICAgICAgICAgICAgICAobGFzdFNlbGVjdGlvbiA9IG51bGwpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJmb2N1c291dFwiOlxuICAgICAgICAgICAgICBsYXN0U2VsZWN0aW9uID0gYWN0aXZlRWxlbWVudEluc3QgPSBhY3RpdmVFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibW91c2Vkb3duXCI6XG4gICAgICAgICAgICAgIG1vdXNlRG93biA9ICEwO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJjb250ZXh0bWVudVwiOlxuICAgICAgICAgICAgY2FzZSBcIm1vdXNldXBcIjpcbiAgICAgICAgICAgIGNhc2UgXCJkcmFnZW5kXCI6XG4gICAgICAgICAgICAgIG1vdXNlRG93biA9ICExO1xuICAgICAgICAgICAgICBjb25zdHJ1Y3RTZWxlY3RFdmVudChcbiAgICAgICAgICAgICAgICBkaXNwYXRjaFF1ZXVlLFxuICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInNlbGVjdGlvbmNoYW5nZVwiOlxuICAgICAgICAgICAgICBpZiAoc2tpcFNlbGVjdGlvbkNoYW5nZUV2ZW50KSBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJrZXlkb3duXCI6XG4gICAgICAgICAgICBjYXNlIFwia2V5dXBcIjpcbiAgICAgICAgICAgICAgY29uc3RydWN0U2VsZWN0RXZlbnQoXG4gICAgICAgICAgICAgICAgZGlzcGF0Y2hRdWV1ZSxcbiAgICAgICAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgZmFsbGJhY2tEYXRhO1xuICAgICAgICAgIGlmIChjYW5Vc2VDb21wb3NpdGlvbkV2ZW50KVxuICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjb21wb3NpdGlvbnN0YXJ0XCI6XG4gICAgICAgICAgICAgICAgICB2YXIgZXZlbnRUeXBlID0gXCJvbkNvbXBvc2l0aW9uU3RhcnRcIjtcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGI7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNvbXBvc2l0aW9uZW5kXCI6XG4gICAgICAgICAgICAgICAgICBldmVudFR5cGUgPSBcIm9uQ29tcG9zaXRpb25FbmRcIjtcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGI7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNvbXBvc2l0aW9udXBkYXRlXCI6XG4gICAgICAgICAgICAgICAgICBldmVudFR5cGUgPSBcIm9uQ29tcG9zaXRpb25VcGRhdGVcIjtcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZXZlbnRUeXBlID0gdm9pZCAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGlzQ29tcG9zaW5nXG4gICAgICAgICAgICAgID8gaXNGYWxsYmFja0NvbXBvc2l0aW9uRW5kKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpICYmXG4gICAgICAgICAgICAgICAgKGV2ZW50VHlwZSA9IFwib25Db21wb3NpdGlvbkVuZFwiKVxuICAgICAgICAgICAgICA6IFwia2V5ZG93blwiID09PSBkb21FdmVudE5hbWUgJiZcbiAgICAgICAgICAgICAgICBuYXRpdmVFdmVudC5rZXlDb2RlID09PSBTVEFSVF9LRVlDT0RFICYmXG4gICAgICAgICAgICAgICAgKGV2ZW50VHlwZSA9IFwib25Db21wb3NpdGlvblN0YXJ0XCIpO1xuICAgICAgICAgIGV2ZW50VHlwZSAmJlxuICAgICAgICAgICAgKHVzZUZhbGxiYWNrQ29tcG9zaXRpb25EYXRhICYmXG4gICAgICAgICAgICAgIFwia29cIiAhPT0gbmF0aXZlRXZlbnQubG9jYWxlICYmXG4gICAgICAgICAgICAgIChpc0NvbXBvc2luZyB8fCBcIm9uQ29tcG9zaXRpb25TdGFydFwiICE9PSBldmVudFR5cGVcbiAgICAgICAgICAgICAgICA/IFwib25Db21wb3NpdGlvbkVuZFwiID09PSBldmVudFR5cGUgJiZcbiAgICAgICAgICAgICAgICAgIGlzQ29tcG9zaW5nICYmXG4gICAgICAgICAgICAgICAgICAoZmFsbGJhY2tEYXRhID0gZ2V0RGF0YSgpKVxuICAgICAgICAgICAgICAgIDogKChyb290ID0gbmF0aXZlRXZlbnRUYXJnZXQpLFxuICAgICAgICAgICAgICAgICAgKHN0YXJ0VGV4dCA9IFwidmFsdWVcIiBpbiByb290ID8gcm9vdC52YWx1ZSA6IHJvb3QudGV4dENvbnRlbnQpLFxuICAgICAgICAgICAgICAgICAgKGlzQ29tcG9zaW5nID0gITApKSksXG4gICAgICAgICAgICAoaGFuZGxlRXZlbnRGdW5jID0gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKFxuICAgICAgICAgICAgICB0YXJnZXRJbnN0LFxuICAgICAgICAgICAgICBldmVudFR5cGVcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgMCA8IGhhbmRsZUV2ZW50RnVuYy5sZW5ndGggJiZcbiAgICAgICAgICAgICAgKChldmVudFR5cGUgPSBuZXcgU3ludGhldGljQ29tcG9zaXRpb25FdmVudChcbiAgICAgICAgICAgICAgICBldmVudFR5cGUsXG4gICAgICAgICAgICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICAgICAgICAgICAgZXZlbnQ6IGV2ZW50VHlwZSxcbiAgICAgICAgICAgICAgICBsaXN0ZW5lcnM6IGhhbmRsZUV2ZW50RnVuY1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgZmFsbGJhY2tEYXRhXG4gICAgICAgICAgICAgICAgPyAoZXZlbnRUeXBlLmRhdGEgPSBmYWxsYmFja0RhdGEpXG4gICAgICAgICAgICAgICAgOiAoKGZhbGxiYWNrRGF0YSA9IGdldERhdGFGcm9tQ3VzdG9tRXZlbnQobmF0aXZlRXZlbnQpKSxcbiAgICAgICAgICAgICAgICAgIG51bGwgIT09IGZhbGxiYWNrRGF0YSAmJiAoZXZlbnRUeXBlLmRhdGEgPSBmYWxsYmFja0RhdGEpKSkpO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChmYWxsYmFja0RhdGEgPSBjYW5Vc2VUZXh0SW5wdXRFdmVudFxuICAgICAgICAgICAgICA/IGdldE5hdGl2ZUJlZm9yZUlucHV0Q2hhcnMoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudClcbiAgICAgICAgICAgICAgOiBnZXRGYWxsYmFja0JlZm9yZUlucHV0Q2hhcnMoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkpXG4gICAgICAgICAgKVxuICAgICAgICAgICAgKGV2ZW50VHlwZSA9IGFjY3VtdWxhdGVUd29QaGFzZUxpc3RlbmVycyhcbiAgICAgICAgICAgICAgdGFyZ2V0SW5zdCxcbiAgICAgICAgICAgICAgXCJvbkJlZm9yZUlucHV0XCJcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAwIDwgZXZlbnRUeXBlLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICgoaGFuZGxlRXZlbnRGdW5jID0gbmV3IFN5bnRoZXRpY0lucHV0RXZlbnQoXG4gICAgICAgICAgICAgICAgICBcIm9uQmVmb3JlSW5wdXRcIixcbiAgICAgICAgICAgICAgICAgIFwiYmVmb3JlaW5wdXRcIixcbiAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIGV2ZW50OiBoYW5kbGVFdmVudEZ1bmMsXG4gICAgICAgICAgICAgICAgICBsaXN0ZW5lcnM6IGV2ZW50VHlwZVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIChoYW5kbGVFdmVudEZ1bmMuZGF0YSA9IGZhbGxiYWNrRGF0YSkpO1xuICAgICAgICAgIGV4dHJhY3RFdmVudHMkMShcbiAgICAgICAgICAgIGRpc3BhdGNoUXVldWUsXG4gICAgICAgICAgICBkb21FdmVudE5hbWUsXG4gICAgICAgICAgICB0YXJnZXRJbnN0LFxuICAgICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcHJvY2Vzc0Rpc3BhdGNoUXVldWUoZGlzcGF0Y2hRdWV1ZSwgZXZlbnRTeXN0ZW1GbGFncyk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgbGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZSxcbiAgICAgICAgbGlzdGVuZXI6IGxpc3RlbmVyLFxuICAgICAgICBjdXJyZW50VGFyZ2V0OiBjdXJyZW50VGFyZ2V0XG4gICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnModGFyZ2V0RmliZXIsIHJlYWN0TmFtZSkge1xuICAgICAgZm9yIChcbiAgICAgICAgdmFyIGNhcHR1cmVOYW1lID0gcmVhY3ROYW1lICsgXCJDYXB0dXJlXCIsIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICBudWxsICE9PSB0YXJnZXRGaWJlcjtcblxuICAgICAgKSB7XG4gICAgICAgIHZhciBfaW5zdGFuY2UzID0gdGFyZ2V0RmliZXIsXG4gICAgICAgICAgc3RhdGVOb2RlID0gX2luc3RhbmNlMy5zdGF0ZU5vZGU7XG4gICAgICAgIF9pbnN0YW5jZTMgPSBfaW5zdGFuY2UzLnRhZztcbiAgICAgICAgKDUgIT09IF9pbnN0YW5jZTMgJiYgMjYgIT09IF9pbnN0YW5jZTMgJiYgMjcgIT09IF9pbnN0YW5jZTMpIHx8XG4gICAgICAgICAgbnVsbCA9PT0gc3RhdGVOb2RlIHx8XG4gICAgICAgICAgKChfaW5zdGFuY2UzID0gZ2V0TGlzdGVuZXIodGFyZ2V0RmliZXIsIGNhcHR1cmVOYW1lKSksXG4gICAgICAgICAgbnVsbCAhPSBfaW5zdGFuY2UzICYmXG4gICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChcbiAgICAgICAgICAgICAgY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcih0YXJnZXRGaWJlciwgX2luc3RhbmNlMywgc3RhdGVOb2RlKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAoX2luc3RhbmNlMyA9IGdldExpc3RlbmVyKHRhcmdldEZpYmVyLCByZWFjdE5hbWUpKSxcbiAgICAgICAgICBudWxsICE9IF9pbnN0YW5jZTMgJiZcbiAgICAgICAgICAgIGxpc3RlbmVycy5wdXNoKFxuICAgICAgICAgICAgICBjcmVhdGVEaXNwYXRjaExpc3RlbmVyKHRhcmdldEZpYmVyLCBfaW5zdGFuY2UzLCBzdGF0ZU5vZGUpXG4gICAgICAgICAgICApKTtcbiAgICAgICAgaWYgKDMgPT09IHRhcmdldEZpYmVyLnRhZykgcmV0dXJuIGxpc3RlbmVycztcbiAgICAgICAgdGFyZ2V0RmliZXIgPSB0YXJnZXRGaWJlci5yZXR1cm47XG4gICAgICB9XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFBhcmVudChpbnN0KSB7XG4gICAgICBpZiAobnVsbCA9PT0gaW5zdCkgcmV0dXJuIG51bGw7XG4gICAgICBkbyBpbnN0ID0gaW5zdC5yZXR1cm47XG4gICAgICB3aGlsZSAoaW5zdCAmJiA1ICE9PSBpbnN0LnRhZyAmJiAyNyAhPT0gaW5zdC50YWcpO1xuICAgICAgcmV0dXJuIGluc3QgPyBpbnN0IDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWNjdW11bGF0ZUVudGVyTGVhdmVMaXN0ZW5lcnNGb3JFdmVudChcbiAgICAgIGRpc3BhdGNoUXVldWUsXG4gICAgICBldmVudCxcbiAgICAgIHRhcmdldCxcbiAgICAgIGNvbW1vbixcbiAgICAgIGluQ2FwdHVyZVBoYXNlXG4gICAgKSB7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgcmVnaXN0cmF0aW9uTmFtZSA9IGV2ZW50Ll9yZWFjdE5hbWUsIGxpc3RlbmVycyA9IFtdO1xuICAgICAgICBudWxsICE9PSB0YXJnZXQgJiYgdGFyZ2V0ICE9PSBjb21tb247XG5cbiAgICAgICkge1xuICAgICAgICB2YXIgX2luc3RhbmNlNCA9IHRhcmdldCxcbiAgICAgICAgICBhbHRlcm5hdGUgPSBfaW5zdGFuY2U0LmFsdGVybmF0ZSxcbiAgICAgICAgICBzdGF0ZU5vZGUgPSBfaW5zdGFuY2U0LnN0YXRlTm9kZTtcbiAgICAgICAgX2luc3RhbmNlNCA9IF9pbnN0YW5jZTQudGFnO1xuICAgICAgICBpZiAobnVsbCAhPT0gYWx0ZXJuYXRlICYmIGFsdGVybmF0ZSA9PT0gY29tbW9uKSBicmVhaztcbiAgICAgICAgKDUgIT09IF9pbnN0YW5jZTQgJiYgMjYgIT09IF9pbnN0YW5jZTQgJiYgMjcgIT09IF9pbnN0YW5jZTQpIHx8XG4gICAgICAgICAgbnVsbCA9PT0gc3RhdGVOb2RlIHx8XG4gICAgICAgICAgKChhbHRlcm5hdGUgPSBzdGF0ZU5vZGUpLFxuICAgICAgICAgIGluQ2FwdHVyZVBoYXNlXG4gICAgICAgICAgICA/ICgoc3RhdGVOb2RlID0gZ2V0TGlzdGVuZXIodGFyZ2V0LCByZWdpc3RyYXRpb25OYW1lKSksXG4gICAgICAgICAgICAgIG51bGwgIT0gc3RhdGVOb2RlICYmXG4gICAgICAgICAgICAgICAgbGlzdGVuZXJzLnVuc2hpZnQoXG4gICAgICAgICAgICAgICAgICBjcmVhdGVEaXNwYXRjaExpc3RlbmVyKHRhcmdldCwgc3RhdGVOb2RlLCBhbHRlcm5hdGUpXG4gICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgIDogaW5DYXB0dXJlUGhhc2UgfHxcbiAgICAgICAgICAgICAgKChzdGF0ZU5vZGUgPSBnZXRMaXN0ZW5lcih0YXJnZXQsIHJlZ2lzdHJhdGlvbk5hbWUpKSxcbiAgICAgICAgICAgICAgbnVsbCAhPSBzdGF0ZU5vZGUgJiZcbiAgICAgICAgICAgICAgICBsaXN0ZW5lcnMucHVzaChcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIodGFyZ2V0LCBzdGF0ZU5vZGUsIGFsdGVybmF0ZSlcbiAgICAgICAgICAgICAgICApKSk7XG4gICAgICAgIHRhcmdldCA9IHRhcmdldC5yZXR1cm47XG4gICAgICB9XG4gICAgICAwICE9PSBsaXN0ZW5lcnMubGVuZ3RoICYmXG4gICAgICAgIGRpc3BhdGNoUXVldWUucHVzaCh7IGV2ZW50OiBldmVudCwgbGlzdGVuZXJzOiBsaXN0ZW5lcnMgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydGllc0luRGV2ZWxvcG1lbnQodHlwZSwgcHJvcHMpIHtcbiAgICAgIHZhbGlkYXRlUHJvcGVydGllcyQyKHR5cGUsIHByb3BzKTtcbiAgICAgIChcImlucHV0XCIgIT09IHR5cGUgJiYgXCJ0ZXh0YXJlYVwiICE9PSB0eXBlICYmIFwic2VsZWN0XCIgIT09IHR5cGUpIHx8XG4gICAgICAgIG51bGwgPT0gcHJvcHMgfHxcbiAgICAgICAgbnVsbCAhPT0gcHJvcHMudmFsdWUgfHxcbiAgICAgICAgZGlkV2FyblZhbHVlTnVsbCB8fFxuICAgICAgICAoKGRpZFdhcm5WYWx1ZU51bGwgPSAhMCksXG4gICAgICAgIFwic2VsZWN0XCIgPT09IHR5cGUgJiYgcHJvcHMubXVsdGlwbGVcbiAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiYHZhbHVlYCBwcm9wIG9uIGAlc2Agc2hvdWxkIG5vdCBiZSBudWxsLiBDb25zaWRlciB1c2luZyBhbiBlbXB0eSBhcnJheSB3aGVuIGBtdWx0aXBsZWAgaXMgc2V0IHRvIGB0cnVlYCB0byBjbGVhciB0aGUgY29tcG9uZW50IG9yIGB1bmRlZmluZWRgIGZvciB1bmNvbnRyb2xsZWQgY29tcG9uZW50cy5cIixcbiAgICAgICAgICAgICAgdHlwZVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJgdmFsdWVgIHByb3Agb24gYCVzYCBzaG91bGQgbm90IGJlIG51bGwuIENvbnNpZGVyIHVzaW5nIGFuIGVtcHR5IHN0cmluZyB0byBjbGVhciB0aGUgY29tcG9uZW50IG9yIGB1bmRlZmluZWRgIGZvciB1bmNvbnRyb2xsZWQgY29tcG9uZW50cy5cIixcbiAgICAgICAgICAgICAgdHlwZVxuICAgICAgICAgICAgKSk7XG4gICAgICB2YXIgZXZlbnRSZWdpc3RyeSA9IHtcbiAgICAgICAgcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llczogcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcyxcbiAgICAgICAgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lczogcG9zc2libGVSZWdpc3RyYXRpb25OYW1lc1xuICAgICAgfTtcbiAgICAgIGlzQ3VzdG9tRWxlbWVudCh0eXBlKSB8fFxuICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgcHJvcHMuaXMgfHxcbiAgICAgICAgd2FyblVua25vd25Qcm9wZXJ0aWVzKHR5cGUsIHByb3BzLCBldmVudFJlZ2lzdHJ5KTtcbiAgICAgIHByb3BzLmNvbnRlbnRFZGl0YWJsZSAmJlxuICAgICAgICAhcHJvcHMuc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nICYmXG4gICAgICAgIG51bGwgIT0gcHJvcHMuY2hpbGRyZW4gJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkEgY29tcG9uZW50IGlzIGBjb250ZW50RWRpdGFibGVgIGFuZCBjb250YWlucyBgY2hpbGRyZW5gIG1hbmFnZWQgYnkgUmVhY3QuIEl0IGlzIG5vdyB5b3VyIHJlc3BvbnNpYmlsaXR5IHRvIGd1YXJhbnRlZSB0aGF0IG5vbmUgb2YgdGhvc2Ugbm9kZXMgYXJlIHVuZXhwZWN0ZWRseSBtb2RpZmllZCBvciBkdXBsaWNhdGVkLiBUaGlzIGlzIHByb2JhYmx5IG5vdCBpbnRlbnRpb25hbC5cIlxuICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3YXJuRm9yUHJvcERpZmZlcmVuY2UoXG4gICAgICBwcm9wTmFtZSxcbiAgICAgIHNlcnZlclZhbHVlLFxuICAgICAgY2xpZW50VmFsdWUsXG4gICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICkge1xuICAgICAgc2VydmVyVmFsdWUgIT09IGNsaWVudFZhbHVlICYmXG4gICAgICAgICgoY2xpZW50VmFsdWUgPSBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUoY2xpZW50VmFsdWUpKSxcbiAgICAgICAgbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKHNlcnZlclZhbHVlKSAhPT0gY2xpZW50VmFsdWUgJiZcbiAgICAgICAgICAoc2VydmVyRGlmZmVyZW5jZXNbcHJvcE5hbWVdID0gc2VydmVyVmFsdWUpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2FybkZvckV4dHJhQXR0cmlidXRlcyhcbiAgICAgIGRvbUVsZW1lbnQsXG4gICAgICBhdHRyaWJ1dGVOYW1lcyxcbiAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgKSB7XG4gICAgICBhdHRyaWJ1dGVOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lKSB7XG4gICAgICAgIHNlcnZlckRpZmZlcmVuY2VzW2dldFByb3BOYW1lRnJvbUF0dHJpYnV0ZU5hbWUoYXR0cmlidXRlTmFtZSldID1cbiAgICAgICAgICBcInN0eWxlXCIgPT09IGF0dHJpYnV0ZU5hbWVcbiAgICAgICAgICAgID8gZ2V0U3R5bGVzT2JqZWN0RnJvbUVsZW1lbnQoZG9tRWxlbWVudClcbiAgICAgICAgICAgIDogZG9tRWxlbWVudC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyKHJlZ2lzdHJhdGlvbk5hbWUsIGxpc3RlbmVyKSB7XG4gICAgICAhMSA9PT0gbGlzdGVuZXJcbiAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJFeHBlY3RlZCBgJXNgIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24sIGluc3RlYWQgZ290IGBmYWxzZWAuXFxuXFxuSWYgeW91IHVzZWQgdG8gY29uZGl0aW9uYWxseSBvbWl0IGl0IHdpdGggJXM9e2NvbmRpdGlvbiAmJiB2YWx1ZX0sIHBhc3MgJXM9e2NvbmRpdGlvbiA/IHZhbHVlIDogdW5kZWZpbmVkfSBpbnN0ZWFkLlwiLFxuICAgICAgICAgICAgcmVnaXN0cmF0aW9uTmFtZSxcbiAgICAgICAgICAgIHJlZ2lzdHJhdGlvbk5hbWUsXG4gICAgICAgICAgICByZWdpc3RyYXRpb25OYW1lXG4gICAgICAgICAgKVxuICAgICAgICA6IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkV4cGVjdGVkIGAlc2AgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbiwgaW5zdGVhZCBnb3QgYSB2YWx1ZSBvZiBgJXNgIHR5cGUuXCIsXG4gICAgICAgICAgICByZWdpc3RyYXRpb25OYW1lLFxuICAgICAgICAgICAgdHlwZW9mIGxpc3RlbmVyXG4gICAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm9ybWFsaXplSFRNTChwYXJlbnQsIGh0bWwpIHtcbiAgICAgIHBhcmVudCA9XG4gICAgICAgIHBhcmVudC5uYW1lc3BhY2VVUkkgPT09IE1BVEhfTkFNRVNQQUNFIHx8XG4gICAgICAgIHBhcmVudC5uYW1lc3BhY2VVUkkgPT09IFNWR19OQU1FU1BBQ0VcbiAgICAgICAgICA/IHBhcmVudC5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcbiAgICAgICAgICAgICAgcGFyZW50Lm5hbWVzcGFjZVVSSSxcbiAgICAgICAgICAgICAgcGFyZW50LnRhZ05hbWVcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IHBhcmVudC5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocGFyZW50LnRhZ05hbWUpO1xuICAgICAgcGFyZW50LmlubmVySFRNTCA9IGh0bWw7XG4gICAgICByZXR1cm4gcGFyZW50LmlubmVySFRNTDtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKG1hcmt1cCkge1xuICAgICAgd2lsbENvZXJjaW9uVGhyb3cobWFya3VwKSAmJlxuICAgICAgICAoY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIlRoZSBwcm92aWRlZCBIVE1MIG1hcmt1cCB1c2VzIGEgdmFsdWUgb2YgdW5zdXBwb3J0ZWQgdHlwZSAlcy4gVGhpcyB2YWx1ZSBtdXN0IGJlIGNvZXJjZWQgdG8gYSBzdHJpbmcgYmVmb3JlIHVzaW5nIGl0IGhlcmUuXCIsXG4gICAgICAgICAgdHlwZU5hbWUobWFya3VwKVxuICAgICAgICApLFxuICAgICAgICB0ZXN0U3RyaW5nQ29lcmNpb24obWFya3VwKSk7XG4gICAgICByZXR1cm4gKFwic3RyaW5nXCIgPT09IHR5cGVvZiBtYXJrdXAgPyBtYXJrdXAgOiBcIlwiICsgbWFya3VwKVxuICAgICAgICAucmVwbGFjZShOT1JNQUxJWkVfTkVXTElORVNfUkVHRVgsIFwiXFxuXCIpXG4gICAgICAgIC5yZXBsYWNlKE5PUk1BTElaRV9OVUxMX0FORF9SRVBMQUNFTUVOVF9SRUdFWCwgXCJcIik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrRm9yVW5tYXRjaGVkVGV4dChzZXJ2ZXJUZXh0LCBjbGllbnRUZXh0KSB7XG4gICAgICBjbGllbnRUZXh0ID0gbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKGNsaWVudFRleHQpO1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZShzZXJ2ZXJUZXh0KSA9PT0gY2xpZW50VGV4dFxuICAgICAgICA/ICEwXG4gICAgICAgIDogITE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCBrZXksIHZhbHVlLCBwcm9wcywgcHJldlZhbHVlKSB7XG4gICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICBjYXNlIFwiY2hpbGRyZW5cIjpcbiAgICAgICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHZhbHVlKVxuICAgICAgICAgICAgdmFsaWRhdGVUZXh0TmVzdGluZyh2YWx1ZSwgdGFnLCAhMSksXG4gICAgICAgICAgICAgIFwiYm9keVwiID09PSB0YWcgfHxcbiAgICAgICAgICAgICAgICAoXCJ0ZXh0YXJlYVwiID09PSB0YWcgJiYgXCJcIiA9PT0gdmFsdWUpIHx8XG4gICAgICAgICAgICAgICAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgdmFsdWUpO1xuICAgICAgICAgIGVsc2UgaWYgKFwibnVtYmVyXCIgPT09IHR5cGVvZiB2YWx1ZSB8fCBcImJpZ2ludFwiID09PSB0eXBlb2YgdmFsdWUpXG4gICAgICAgICAgICB2YWxpZGF0ZVRleHROZXN0aW5nKFwiXCIgKyB2YWx1ZSwgdGFnLCAhMSksXG4gICAgICAgICAgICAgIFwiYm9keVwiICE9PSB0YWcgJiYgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgXCJcIiArIHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImNsYXNzTmFtZVwiOlxuICAgICAgICAgIHNldFZhbHVlRm9yS25vd25BdHRyaWJ1dGUoZG9tRWxlbWVudCwgXCJjbGFzc1wiLCB2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ0YWJJbmRleFwiOlxuICAgICAgICAgIHNldFZhbHVlRm9yS25vd25BdHRyaWJ1dGUoZG9tRWxlbWVudCwgXCJ0YWJpbmRleFwiLCB2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJkaXJcIjpcbiAgICAgICAgY2FzZSBcInJvbGVcIjpcbiAgICAgICAgY2FzZSBcInZpZXdCb3hcIjpcbiAgICAgICAgY2FzZSBcIndpZHRoXCI6XG4gICAgICAgIGNhc2UgXCJoZWlnaHRcIjpcbiAgICAgICAgICBzZXRWYWx1ZUZvcktub3duQXR0cmlidXRlKGRvbUVsZW1lbnQsIGtleSwgdmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwic3R5bGVcIjpcbiAgICAgICAgICBzZXRWYWx1ZUZvclN0eWxlcyhkb21FbGVtZW50LCB2YWx1ZSwgcHJldlZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImRhdGFcIjpcbiAgICAgICAgICBpZiAoXCJvYmplY3RcIiAhPT0gdGFnKSB7XG4gICAgICAgICAgICBzZXRWYWx1ZUZvcktub3duQXR0cmlidXRlKGRvbUVsZW1lbnQsIFwiZGF0YVwiLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJzcmNcIjpcbiAgICAgICAgY2FzZSBcImhyZWZcIjpcbiAgICAgICAgICBpZiAoXCJcIiA9PT0gdmFsdWUgJiYgKFwiYVwiICE9PSB0YWcgfHwgXCJocmVmXCIgIT09IGtleSkpIHtcbiAgICAgICAgICAgIFwic3JjXCIgPT09IGtleVxuICAgICAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAnQW4gZW1wdHkgc3RyaW5nIChcIlwiKSB3YXMgcGFzc2VkIHRvIHRoZSAlcyBhdHRyaWJ1dGUuIFRoaXMgbWF5IGNhdXNlIHRoZSBicm93c2VyIHRvIGRvd25sb2FkIHRoZSB3aG9sZSBwYWdlIGFnYWluIG92ZXIgdGhlIG5ldHdvcmsuIFRvIGZpeCB0aGlzLCBlaXRoZXIgZG8gbm90IHJlbmRlciB0aGUgZWxlbWVudCBhdCBhbGwgb3IgcGFzcyBudWxsIHRvICVzIGluc3RlYWQgb2YgYW4gZW1wdHkgc3RyaW5nLicsXG4gICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICBrZXlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICdBbiBlbXB0eSBzdHJpbmcgKFwiXCIpIHdhcyBwYXNzZWQgdG8gdGhlICVzIGF0dHJpYnV0ZS4gVG8gZml4IHRoaXMsIGVpdGhlciBkbyBub3QgcmVuZGVyIHRoZSBlbGVtZW50IGF0IGFsbCBvciBwYXNzIG51bGwgdG8gJXMgaW5zdGVhZCBvZiBhbiBlbXB0eSBzdHJpbmcuJyxcbiAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBkb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG51bGwgPT0gdmFsdWUgfHxcbiAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHZhbHVlIHx8XG4gICAgICAgICAgICBcInN5bWJvbFwiID09PSB0eXBlb2YgdmFsdWUgfHxcbiAgICAgICAgICAgIFwiYm9vbGVhblwiID09PSB0eXBlb2YgdmFsdWVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGRvbUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih2YWx1ZSwga2V5KTtcbiAgICAgICAgICB2YWx1ZSA9IHNhbml0aXplVVJMKFwiXCIgKyB2YWx1ZSk7XG4gICAgICAgICAgZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJhY3Rpb25cIjpcbiAgICAgICAgY2FzZSBcImZvcm1BY3Rpb25cIjpcbiAgICAgICAgICBudWxsICE9IHZhbHVlICYmXG4gICAgICAgICAgICAoXCJmb3JtXCIgPT09IHRhZ1xuICAgICAgICAgICAgICA/IFwiZm9ybUFjdGlvblwiID09PSBrZXlcbiAgICAgICAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiWW91IGNhbiBvbmx5IHBhc3MgdGhlIGZvcm1BY3Rpb24gcHJvcCB0byA8aW5wdXQ+IG9yIDxidXR0b24+LiBVc2UgdGhlIGFjdGlvbiBwcm9wIG9uIDxmb3JtPi5cIlxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICgobnVsbCA9PSBwcm9wcy5lbmNUeXBlICYmIG51bGwgPT0gcHJvcHMubWV0aG9kKSB8fFxuICAgICAgICAgICAgICAgICAgICBkaWRXYXJuRm9ybUFjdGlvbk1ldGhvZCB8fFxuICAgICAgICAgICAgICAgICAgICAoKGRpZFdhcm5Gb3JtQWN0aW9uTWV0aG9kID0gITApLFxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIFwiQ2Fubm90IHNwZWNpZnkgYSBlbmNUeXBlIG9yIG1ldGhvZCBmb3IgYSBmb3JtIHRoYXQgc3BlY2lmaWVzIGEgZnVuY3Rpb24gYXMgdGhlIGFjdGlvbi4gUmVhY3QgcHJvdmlkZXMgdGhvc2UgYXV0b21hdGljYWxseS4gVGhleSB3aWxsIGdldCBvdmVycmlkZGVuLlwiXG4gICAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgbnVsbCA9PSBwcm9wcy50YXJnZXQgfHxcbiAgICAgICAgICAgICAgICAgICAgZGlkV2FybkZvcm1BY3Rpb25UYXJnZXQgfHxcbiAgICAgICAgICAgICAgICAgICAgKChkaWRXYXJuRm9ybUFjdGlvblRhcmdldCA9ICEwKSxcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICBcIkNhbm5vdCBzcGVjaWZ5IGEgdGFyZ2V0IGZvciBhIGZvcm0gdGhhdCBzcGVjaWZpZXMgYSBmdW5jdGlvbiBhcyB0aGUgYWN0aW9uLiBUaGUgZnVuY3Rpb24gd2lsbCBhbHdheXMgYmUgZXhlY3V0ZWQgaW4gdGhlIHNhbWUgd2luZG93LlwiXG4gICAgICAgICAgICAgICAgICAgICkpKVxuICAgICAgICAgICAgICA6IFwiaW5wdXRcIiA9PT0gdGFnIHx8IFwiYnV0dG9uXCIgPT09IHRhZ1xuICAgICAgICAgICAgICAgID8gXCJhY3Rpb25cIiA9PT0ga2V5XG4gICAgICAgICAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgXCJZb3UgY2FuIG9ubHkgcGFzcyB0aGUgYWN0aW9uIHByb3AgdG8gPGZvcm0+LiBVc2UgdGhlIGZvcm1BY3Rpb24gcHJvcCBvbiA8aW5wdXQ+IG9yIDxidXR0b24+LlwiXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogXCJpbnB1dFwiICE9PSB0YWcgfHxcbiAgICAgICAgICAgICAgICAgICAgICBcInN1Ym1pdFwiID09PSBwcm9wcy50eXBlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgXCJpbWFnZVwiID09PSBwcm9wcy50eXBlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgZGlkV2FybkZvcm1BY3Rpb25UeXBlXG4gICAgICAgICAgICAgICAgICAgID8gXCJidXR0b25cIiAhPT0gdGFnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgbnVsbCA9PSBwcm9wcy50eXBlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgXCJzdWJtaXRcIiA9PT0gcHJvcHMudHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICAgIGRpZFdhcm5Gb3JtQWN0aW9uVHlwZVxuICAgICAgICAgICAgICAgICAgICAgID8gXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChudWxsID09IHByb3BzLm5hbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkV2FybkZvcm1BY3Rpb25OYW1lIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICgoZGlkV2FybkZvcm1BY3Rpb25OYW1lID0gITApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDYW5ub3Qgc3BlY2lmeSBhIFwibmFtZVwiIHByb3AgZm9yIGEgYnV0dG9uIHRoYXQgc3BlY2lmaWVzIGEgZnVuY3Rpb24gYXMgYSBmb3JtQWN0aW9uLiBSZWFjdCBuZWVkcyBpdCB0byBlbmNvZGUgd2hpY2ggYWN0aW9uIHNob3VsZCBiZSBpbnZva2VkLiBJdCB3aWxsIGdldCBvdmVycmlkZGVuLidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAobnVsbCA9PSBwcm9wcy5mb3JtRW5jVHlwZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsID09IHByb3BzLmZvcm1NZXRob2QpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRpZFdhcm5Gb3JtQWN0aW9uTWV0aG9kIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICgoZGlkV2FybkZvcm1BY3Rpb25NZXRob2QgPSAhMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJDYW5ub3Qgc3BlY2lmeSBhIGZvcm1FbmNUeXBlIG9yIGZvcm1NZXRob2QgZm9yIGEgYnV0dG9uIHRoYXQgc3BlY2lmaWVzIGEgZnVuY3Rpb24gYXMgYSBmb3JtQWN0aW9uLiBSZWFjdCBwcm92aWRlcyB0aG9zZSBhdXRvbWF0aWNhbGx5LiBUaGV5IHdpbGwgZ2V0IG92ZXJyaWRkZW4uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgICAgICAgICBudWxsID09IHByb3BzLmZvcm1UYXJnZXQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkV2FybkZvcm1BY3Rpb25UYXJnZXQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKChkaWRXYXJuRm9ybUFjdGlvblRhcmdldCA9ICEwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkNhbm5vdCBzcGVjaWZ5IGEgZm9ybVRhcmdldCBmb3IgYSBidXR0b24gdGhhdCBzcGVjaWZpZXMgYSBmdW5jdGlvbiBhcyBhIGZvcm1BY3Rpb24uIFRoZSBmdW5jdGlvbiB3aWxsIGFsd2F5cyBiZSBleGVjdXRlZCBpbiB0aGUgc2FtZSB3aW5kb3cuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSkpXG4gICAgICAgICAgICAgICAgICAgICAgOiAoKGRpZFdhcm5Gb3JtQWN0aW9uVHlwZSA9ICEwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdBIGJ1dHRvbiBjYW4gb25seSBzcGVjaWZ5IGEgZm9ybUFjdGlvbiBhbG9uZyB3aXRoIHR5cGU9XCJzdWJtaXRcIiBvciBubyB0eXBlLidcbiAgICAgICAgICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgICAgIDogKChkaWRXYXJuRm9ybUFjdGlvblR5cGUgPSAhMCksXG4gICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICdBbiBpbnB1dCBjYW4gb25seSBzcGVjaWZ5IGEgZm9ybUFjdGlvbiBhbG9uZyB3aXRoIHR5cGU9XCJzdWJtaXRcIiBvciB0eXBlPVwiaW1hZ2VcIi4nXG4gICAgICAgICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgICA6IFwiYWN0aW9uXCIgPT09IGtleVxuICAgICAgICAgICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIFwiWW91IGNhbiBvbmx5IHBhc3MgdGhlIGFjdGlvbiBwcm9wIHRvIDxmb3JtPi5cIlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA6IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgXCJZb3UgY2FuIG9ubHkgcGFzcyB0aGUgZm9ybUFjdGlvbiBwcm9wIHRvIDxpbnB1dD4gb3IgPGJ1dHRvbj4uXCJcbiAgICAgICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgICBkb21FbGVtZW50LnNldEF0dHJpYnV0ZShcbiAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICBcImphdmFzY3JpcHQ6dGhyb3cgbmV3IEVycm9yKCdBIFJlYWN0IGZvcm0gd2FzIHVuZXhwZWN0ZWRseSBzdWJtaXR0ZWQuIElmIHlvdSBjYWxsZWQgZm9ybS5zdWJtaXQoKSBtYW51YWxseSwgY29uc2lkZXIgdXNpbmcgZm9ybS5yZXF1ZXN0U3VibWl0KCkgaW5zdGVhZC4gSWYgeW91XFxcXCdyZSB0cnlpbmcgdG8gdXNlIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIGluIGEgc3VibWl0IGV2ZW50IGhhbmRsZXIsIGNvbnNpZGVyIGFsc28gY2FsbGluZyBldmVudC5wcmV2ZW50RGVmYXVsdCgpLicpXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHByZXZWYWx1ZSAmJlxuICAgICAgICAgICAgICAoXCJmb3JtQWN0aW9uXCIgPT09IGtleVxuICAgICAgICAgICAgICAgID8gKFwiaW5wdXRcIiAhPT0gdGFnICYmXG4gICAgICAgICAgICAgICAgICAgIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCBcIm5hbWVcIiwgcHJvcHMubmFtZSwgcHJvcHMsIG51bGwpLFxuICAgICAgICAgICAgICAgICAgc2V0UHJvcChcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgICAgICBcImZvcm1FbmNUeXBlXCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLmZvcm1FbmNUeXBlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIHNldFByb3AoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgICAgICAgICAgXCJmb3JtTWV0aG9kXCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLmZvcm1NZXRob2QsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLFxuICAgICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgc2V0UHJvcChcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgICAgICBcImZvcm1UYXJnZXRcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMuZm9ybVRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgOiAoc2V0UHJvcChcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgICAgICBcImVuY1R5cGVcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMuZW5jVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgXCJtZXRob2RcIiwgcHJvcHMubWV0aG9kLCBwcm9wcywgbnVsbCksXG4gICAgICAgICAgICAgICAgICBzZXRQcm9wKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICAgICAgICAgIFwidGFyZ2V0XCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLnRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgICAgICkpKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBudWxsID09IHZhbHVlIHx8XG4gICAgICAgICAgICBcInN5bWJvbFwiID09PSB0eXBlb2YgdmFsdWUgfHxcbiAgICAgICAgICAgIFwiYm9vbGVhblwiID09PSB0eXBlb2YgdmFsdWVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGRvbUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih2YWx1ZSwga2V5KTtcbiAgICAgICAgICB2YWx1ZSA9IHNhbml0aXplVVJMKFwiXCIgKyB2YWx1ZSk7XG4gICAgICAgICAgZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJvbkNsaWNrXCI6XG4gICAgICAgICAgbnVsbCAhPSB2YWx1ZSAmJlxuICAgICAgICAgICAgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHZhbHVlICYmXG4gICAgICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihrZXksIHZhbHVlKSxcbiAgICAgICAgICAgIChkb21FbGVtZW50Lm9uY2xpY2sgPSBub29wJDEpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm9uU2Nyb2xsXCI6XG4gICAgICAgICAgbnVsbCAhPSB2YWx1ZSAmJlxuICAgICAgICAgICAgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHZhbHVlICYmXG4gICAgICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihrZXksIHZhbHVlKSxcbiAgICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJzY3JvbGxcIiwgZG9tRWxlbWVudCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwib25TY3JvbGxFbmRcIjpcbiAgICAgICAgICBudWxsICE9IHZhbHVlICYmXG4gICAgICAgICAgICAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgdmFsdWUgJiZcbiAgICAgICAgICAgICAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyKGtleSwgdmFsdWUpLFxuICAgICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcInNjcm9sbGVuZFwiLCBkb21FbGVtZW50KSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOlxuICAgICAgICAgIGlmIChudWxsICE9IHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoXCJvYmplY3RcIiAhPT0gdHlwZW9mIHZhbHVlIHx8ICEoXCJfX2h0bWxcIiBpbiB2YWx1ZSkpXG4gICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiYHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYCBtdXN0IGJlIGluIHRoZSBmb3JtIGB7X19odG1sOiAuLi59YC4gUGxlYXNlIHZpc2l0IGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvZGFuZ2Vyb3VzbHktc2V0LWlubmVyLWh0bWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGtleSA9IHZhbHVlLl9faHRtbDtcbiAgICAgICAgICAgIGlmIChudWxsICE9IGtleSkge1xuICAgICAgICAgICAgICBpZiAobnVsbCAhPSBwcm9wcy5jaGlsZHJlbilcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICAgIFwiQ2FuIG9ubHkgc2V0IG9uZSBvZiBgY2hpbGRyZW5gIG9yIGBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTGAuXCJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBkb21FbGVtZW50LmlubmVySFRNTCA9IGtleTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJtdWx0aXBsZVwiOlxuICAgICAgICAgIGRvbUVsZW1lbnQubXVsdGlwbGUgPVxuICAgICAgICAgICAgdmFsdWUgJiYgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgdmFsdWUgJiYgXCJzeW1ib2xcIiAhPT0gdHlwZW9mIHZhbHVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwibXV0ZWRcIjpcbiAgICAgICAgICBkb21FbGVtZW50Lm11dGVkID1cbiAgICAgICAgICAgIHZhbHVlICYmIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHZhbHVlICYmIFwic3ltYm9sXCIgIT09IHR5cGVvZiB2YWx1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ1wiOlxuICAgICAgICBjYXNlIFwic3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nXCI6XG4gICAgICAgIGNhc2UgXCJkZWZhdWx0VmFsdWVcIjpcbiAgICAgICAgY2FzZSBcImRlZmF1bHRDaGVja2VkXCI6XG4gICAgICAgIGNhc2UgXCJpbm5lckhUTUxcIjpcbiAgICAgICAgY2FzZSBcInJlZlwiOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiYXV0b0ZvY3VzXCI6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ4bGlua0hyZWZcIjpcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBudWxsID09IHZhbHVlIHx8XG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB2YWx1ZSB8fFxuICAgICAgICAgICAgXCJib29sZWFuXCIgPT09IHR5cGVvZiB2YWx1ZSB8fFxuICAgICAgICAgICAgXCJzeW1ib2xcIiA9PT0gdHlwZW9mIHZhbHVlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBkb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShcInhsaW5rOmhyZWZcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih2YWx1ZSwga2V5KTtcbiAgICAgICAgICBrZXkgPSBzYW5pdGl6ZVVSTChcIlwiICsgdmFsdWUpO1xuICAgICAgICAgIGRvbUVsZW1lbnQuc2V0QXR0cmlidXRlTlMoeGxpbmtOYW1lc3BhY2UsIFwieGxpbms6aHJlZlwiLCBrZXkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiY29udGVudEVkaXRhYmxlXCI6XG4gICAgICAgIGNhc2UgXCJzcGVsbENoZWNrXCI6XG4gICAgICAgIGNhc2UgXCJkcmFnZ2FibGVcIjpcbiAgICAgICAgY2FzZSBcInZhbHVlXCI6XG4gICAgICAgIGNhc2UgXCJhdXRvUmV2ZXJzZVwiOlxuICAgICAgICBjYXNlIFwiZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZFwiOlxuICAgICAgICBjYXNlIFwiZm9jdXNhYmxlXCI6XG4gICAgICAgIGNhc2UgXCJwcmVzZXJ2ZUFscGhhXCI6XG4gICAgICAgICAgbnVsbCAhPSB2YWx1ZSAmJlxuICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHZhbHVlICYmXG4gICAgICAgICAgXCJzeW1ib2xcIiAhPT0gdHlwZW9mIHZhbHVlXG4gICAgICAgICAgICA/IChjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKHZhbHVlLCBrZXkpLFxuICAgICAgICAgICAgICBkb21FbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIFwiXCIgKyB2YWx1ZSkpXG4gICAgICAgICAgICA6IGRvbUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJpbmVydFwiOlxuICAgICAgICAgIFwiXCIgIT09IHZhbHVlIHx8XG4gICAgICAgICAgICBkaWRXYXJuRm9yTmV3Qm9vbGVhblByb3BzV2l0aEVtcHR5VmFsdWVba2V5XSB8fFxuICAgICAgICAgICAgKChkaWRXYXJuRm9yTmV3Qm9vbGVhblByb3BzV2l0aEVtcHR5VmFsdWVba2V5XSA9ICEwKSxcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVjZWl2ZWQgYW4gZW1wdHkgc3RyaW5nIGZvciBhIGJvb2xlYW4gYXR0cmlidXRlIGAlc2AuIFRoaXMgd2lsbCB0cmVhdCB0aGUgYXR0cmlidXRlIGFzIGlmIGl0IHdlcmUgZmFsc2UuIEVpdGhlciBwYXNzIGBmYWxzZWAgdG8gc2lsZW5jZSB0aGlzIHdhcm5pbmcsIG9yIHBhc3MgYHRydWVgIGlmIHlvdSB1c2VkIGFuIGVtcHR5IHN0cmluZyBpbiBlYXJsaWVyIHZlcnNpb25zIG9mIFJlYWN0IHRvIGluZGljYXRlIHRoaXMgYXR0cmlidXRlIGlzIHRydWUuXCIsXG4gICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgKSk7XG4gICAgICAgIGNhc2UgXCJhbGxvd0Z1bGxTY3JlZW5cIjpcbiAgICAgICAgY2FzZSBcImFzeW5jXCI6XG4gICAgICAgIGNhc2UgXCJhdXRvUGxheVwiOlxuICAgICAgICBjYXNlIFwiY29udHJvbHNcIjpcbiAgICAgICAgY2FzZSBcImRlZmF1bHRcIjpcbiAgICAgICAgY2FzZSBcImRlZmVyXCI6XG4gICAgICAgIGNhc2UgXCJkaXNhYmxlZFwiOlxuICAgICAgICBjYXNlIFwiZGlzYWJsZVBpY3R1cmVJblBpY3R1cmVcIjpcbiAgICAgICAgY2FzZSBcImRpc2FibGVSZW1vdGVQbGF5YmFja1wiOlxuICAgICAgICBjYXNlIFwiZm9ybU5vVmFsaWRhdGVcIjpcbiAgICAgICAgY2FzZSBcImhpZGRlblwiOlxuICAgICAgICBjYXNlIFwibG9vcFwiOlxuICAgICAgICBjYXNlIFwibm9Nb2R1bGVcIjpcbiAgICAgICAgY2FzZSBcIm5vVmFsaWRhdGVcIjpcbiAgICAgICAgY2FzZSBcIm9wZW5cIjpcbiAgICAgICAgY2FzZSBcInBsYXlzSW5saW5lXCI6XG4gICAgICAgIGNhc2UgXCJyZWFkT25seVwiOlxuICAgICAgICBjYXNlIFwicmVxdWlyZWRcIjpcbiAgICAgICAgY2FzZSBcInJldmVyc2VkXCI6XG4gICAgICAgIGNhc2UgXCJzY29wZWRcIjpcbiAgICAgICAgY2FzZSBcInNlYW1sZXNzXCI6XG4gICAgICAgIGNhc2UgXCJpdGVtU2NvcGVcIjpcbiAgICAgICAgICB2YWx1ZSAmJiBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiB2YWx1ZSAmJiBcInN5bWJvbFwiICE9PSB0eXBlb2YgdmFsdWVcbiAgICAgICAgICAgID8gZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCBcIlwiKVxuICAgICAgICAgICAgOiBkb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiY2FwdHVyZVwiOlxuICAgICAgICBjYXNlIFwiZG93bmxvYWRcIjpcbiAgICAgICAgICAhMCA9PT0gdmFsdWVcbiAgICAgICAgICAgID8gZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCBcIlwiKVxuICAgICAgICAgICAgOiAhMSAhPT0gdmFsdWUgJiZcbiAgICAgICAgICAgICAgICBudWxsICE9IHZhbHVlICYmXG4gICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgdmFsdWUgJiZcbiAgICAgICAgICAgICAgICBcInN5bWJvbFwiICE9PSB0eXBlb2YgdmFsdWVcbiAgICAgICAgICAgICAgPyAoY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih2YWx1ZSwga2V5KSxcbiAgICAgICAgICAgICAgICBkb21FbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKSlcbiAgICAgICAgICAgICAgOiBkb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiY29sc1wiOlxuICAgICAgICBjYXNlIFwicm93c1wiOlxuICAgICAgICBjYXNlIFwic2l6ZVwiOlxuICAgICAgICBjYXNlIFwic3BhblwiOlxuICAgICAgICAgIG51bGwgIT0gdmFsdWUgJiZcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiB2YWx1ZSAmJlxuICAgICAgICAgIFwic3ltYm9sXCIgIT09IHR5cGVvZiB2YWx1ZSAmJlxuICAgICAgICAgICFpc05hTih2YWx1ZSkgJiZcbiAgICAgICAgICAxIDw9IHZhbHVlXG4gICAgICAgICAgICA/IChjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKHZhbHVlLCBrZXkpLFxuICAgICAgICAgICAgICBkb21FbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKSlcbiAgICAgICAgICAgIDogZG9tRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInJvd1NwYW5cIjpcbiAgICAgICAgY2FzZSBcInN0YXJ0XCI6XG4gICAgICAgICAgbnVsbCA9PSB2YWx1ZSB8fFxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHZhbHVlIHx8XG4gICAgICAgICAgXCJzeW1ib2xcIiA9PT0gdHlwZW9mIHZhbHVlIHx8XG4gICAgICAgICAgaXNOYU4odmFsdWUpXG4gICAgICAgICAgICA/IGRvbUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGtleSlcbiAgICAgICAgICAgIDogKGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odmFsdWUsIGtleSksXG4gICAgICAgICAgICAgIGRvbUVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInBvcG92ZXJcIjpcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwiYmVmb3JldG9nZ2xlXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJ0b2dnbGVcIiwgZG9tRWxlbWVudCk7XG4gICAgICAgICAgc2V0VmFsdWVGb3JBdHRyaWJ1dGUoZG9tRWxlbWVudCwgXCJwb3BvdmVyXCIsIHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInhsaW5rQWN0dWF0ZVwiOlxuICAgICAgICAgIHNldFZhbHVlRm9yTmFtZXNwYWNlZEF0dHJpYnV0ZShcbiAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICB4bGlua05hbWVzcGFjZSxcbiAgICAgICAgICAgIFwieGxpbms6YWN0dWF0ZVwiLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwieGxpbmtBcmNyb2xlXCI6XG4gICAgICAgICAgc2V0VmFsdWVGb3JOYW1lc3BhY2VkQXR0cmlidXRlKFxuICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgIHhsaW5rTmFtZXNwYWNlLFxuICAgICAgICAgICAgXCJ4bGluazphcmNyb2xlXCIsXG4gICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ4bGlua1JvbGVcIjpcbiAgICAgICAgICBzZXRWYWx1ZUZvck5hbWVzcGFjZWRBdHRyaWJ1dGUoXG4gICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgeGxpbmtOYW1lc3BhY2UsXG4gICAgICAgICAgICBcInhsaW5rOnJvbGVcIixcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInhsaW5rU2hvd1wiOlxuICAgICAgICAgIHNldFZhbHVlRm9yTmFtZXNwYWNlZEF0dHJpYnV0ZShcbiAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICB4bGlua05hbWVzcGFjZSxcbiAgICAgICAgICAgIFwieGxpbms6c2hvd1wiLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwieGxpbmtUaXRsZVwiOlxuICAgICAgICAgIHNldFZhbHVlRm9yTmFtZXNwYWNlZEF0dHJpYnV0ZShcbiAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICB4bGlua05hbWVzcGFjZSxcbiAgICAgICAgICAgIFwieGxpbms6dGl0bGVcIixcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInhsaW5rVHlwZVwiOlxuICAgICAgICAgIHNldFZhbHVlRm9yTmFtZXNwYWNlZEF0dHJpYnV0ZShcbiAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICB4bGlua05hbWVzcGFjZSxcbiAgICAgICAgICAgIFwieGxpbms6dHlwZVwiLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwieG1sQmFzZVwiOlxuICAgICAgICAgIHNldFZhbHVlRm9yTmFtZXNwYWNlZEF0dHJpYnV0ZShcbiAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICB4bWxOYW1lc3BhY2UsXG4gICAgICAgICAgICBcInhtbDpiYXNlXCIsXG4gICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ4bWxMYW5nXCI6XG4gICAgICAgICAgc2V0VmFsdWVGb3JOYW1lc3BhY2VkQXR0cmlidXRlKFxuICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgIHhtbE5hbWVzcGFjZSxcbiAgICAgICAgICAgIFwieG1sOmxhbmdcIixcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInhtbFNwYWNlXCI6XG4gICAgICAgICAgc2V0VmFsdWVGb3JOYW1lc3BhY2VkQXR0cmlidXRlKFxuICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgIHhtbE5hbWVzcGFjZSxcbiAgICAgICAgICAgIFwieG1sOnNwYWNlXCIsXG4gICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJpc1wiOlxuICAgICAgICAgIG51bGwgIT0gcHJldlZhbHVlICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAnQ2Fubm90IHVwZGF0ZSB0aGUgXCJpc1wiIHByb3AgYWZ0ZXIgaXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICBzZXRWYWx1ZUZvckF0dHJpYnV0ZShkb21FbGVtZW50LCBcImlzXCIsIHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImlubmVyVGV4dFwiOlxuICAgICAgICBjYXNlIFwidGV4dENvbnRlbnRcIjpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInBvcG92ZXJUYXJnZXRcIjpcbiAgICAgICAgICBkaWRXYXJuUG9wb3ZlclRhcmdldE9iamVjdCB8fFxuICAgICAgICAgICAgbnVsbCA9PSB2YWx1ZSB8fFxuICAgICAgICAgICAgXCJvYmplY3RcIiAhPT0gdHlwZW9mIHZhbHVlIHx8XG4gICAgICAgICAgICAoKGRpZFdhcm5Qb3BvdmVyVGFyZ2V0T2JqZWN0ID0gITApLFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJUaGUgYHBvcG92ZXJUYXJnZXRgIHByb3AgZXhwZWN0cyB0aGUgSUQgb2YgYW4gRWxlbWVudCBhcyBhIHN0cmluZy4gUmVjZWl2ZWQgJXMgaW5zdGVhZC5cIixcbiAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICkpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICEoMiA8IGtleS5sZW5ndGgpIHx8XG4gICAgICAgICAgKFwib1wiICE9PSBrZXlbMF0gJiYgXCJPXCIgIT09IGtleVswXSkgfHxcbiAgICAgICAgICAoXCJuXCIgIT09IGtleVsxXSAmJiBcIk5cIiAhPT0ga2V5WzFdKVxuICAgICAgICAgICAgPyAoKGtleSA9IGdldEF0dHJpYnV0ZUFsaWFzKGtleSkpLFxuICAgICAgICAgICAgICBzZXRWYWx1ZUZvckF0dHJpYnV0ZShkb21FbGVtZW50LCBrZXksIHZhbHVlKSlcbiAgICAgICAgICAgIDogcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmXG4gICAgICAgICAgICAgIG51bGwgIT0gdmFsdWUgJiZcbiAgICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgdmFsdWUgJiZcbiAgICAgICAgICAgICAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyKGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzZXRQcm9wT25DdXN0b21FbGVtZW50KFxuICAgICAgZG9tRWxlbWVudCxcbiAgICAgIHRhZyxcbiAgICAgIGtleSxcbiAgICAgIHZhbHVlLFxuICAgICAgcHJvcHMsXG4gICAgICBwcmV2VmFsdWVcbiAgICApIHtcbiAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgIGNhc2UgXCJzdHlsZVwiOlxuICAgICAgICAgIHNldFZhbHVlRm9yU3R5bGVzKGRvbUVsZW1lbnQsIHZhbHVlLCBwcmV2VmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIjpcbiAgICAgICAgICBpZiAobnVsbCAhPSB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKFwib2JqZWN0XCIgIT09IHR5cGVvZiB2YWx1ZSB8fCAhKFwiX19odG1sXCIgaW4gdmFsdWUpKVxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICBcImBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTGAgbXVzdCBiZSBpbiB0aGUgZm9ybSBge19faHRtbDogLi4ufWAuIFBsZWFzZSB2aXNpdCBodHRwczovL3JlYWN0LmRldi9saW5rL2Rhbmdlcm91c2x5LXNldC1pbm5lci1odG1sIGZvciBtb3JlIGluZm9ybWF0aW9uLlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBrZXkgPSB2YWx1ZS5fX2h0bWw7XG4gICAgICAgICAgICBpZiAobnVsbCAhPSBrZXkpIHtcbiAgICAgICAgICAgICAgaWYgKG51bGwgIT0gcHJvcHMuY2hpbGRyZW4pXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgICBcIkNhbiBvbmx5IHNldCBvbmUgb2YgYGNoaWxkcmVuYCBvciBgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLlwiXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgZG9tRWxlbWVudC5pbm5lckhUTUwgPSBrZXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiY2hpbGRyZW5cIjpcbiAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgdmFsdWVcbiAgICAgICAgICAgID8gc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgdmFsdWUpXG4gICAgICAgICAgICA6IChcIm51bWJlclwiID09PSB0eXBlb2YgdmFsdWUgfHwgXCJiaWdpbnRcIiA9PT0gdHlwZW9mIHZhbHVlKSAmJlxuICAgICAgICAgICAgICBzZXRUZXh0Q29udGVudChkb21FbGVtZW50LCBcIlwiICsgdmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwib25TY3JvbGxcIjpcbiAgICAgICAgICBudWxsICE9IHZhbHVlICYmXG4gICAgICAgICAgICAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgdmFsdWUgJiZcbiAgICAgICAgICAgICAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyKGtleSwgdmFsdWUpLFxuICAgICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcInNjcm9sbFwiLCBkb21FbGVtZW50KSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJvblNjcm9sbEVuZFwiOlxuICAgICAgICAgIG51bGwgIT0gdmFsdWUgJiZcbiAgICAgICAgICAgIChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiB2YWx1ZSAmJlxuICAgICAgICAgICAgICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIoa2V5LCB2YWx1ZSksXG4gICAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwic2Nyb2xsZW5kXCIsIGRvbUVsZW1lbnQpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm9uQ2xpY2tcIjpcbiAgICAgICAgICBudWxsICE9IHZhbHVlICYmXG4gICAgICAgICAgICAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgdmFsdWUgJiZcbiAgICAgICAgICAgICAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyKGtleSwgdmFsdWUpLFxuICAgICAgICAgICAgKGRvbUVsZW1lbnQub25jbGljayA9IG5vb3AkMSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nXCI6XG4gICAgICAgIGNhc2UgXCJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmdcIjpcbiAgICAgICAgY2FzZSBcImlubmVySFRNTFwiOlxuICAgICAgICBjYXNlIFwicmVmXCI6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJpbm5lclRleHRcIjpcbiAgICAgICAgY2FzZSBcInRleHRDb250ZW50XCI6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMuaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgIG51bGwgIT0gdmFsdWUgJiZcbiAgICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgdmFsdWUgJiZcbiAgICAgICAgICAgICAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyKGtleSwgdmFsdWUpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIFwib1wiID09PSBrZXlbMF0gJiZcbiAgICAgICAgICAgICAgICBcIm5cIiA9PT0ga2V5WzFdICYmXG4gICAgICAgICAgICAgICAgKChwcm9wcyA9IGtleS5lbmRzV2l0aChcIkNhcHR1cmVcIikpLFxuICAgICAgICAgICAgICAgICh0YWcgPSBrZXkuc2xpY2UoMiwgcHJvcHMgPyBrZXkubGVuZ3RoIC0gNyA6IHZvaWQgMCkpLFxuICAgICAgICAgICAgICAgIChwcmV2VmFsdWUgPSBkb21FbGVtZW50W2ludGVybmFsUHJvcHNLZXldIHx8IG51bGwpLFxuICAgICAgICAgICAgICAgIChwcmV2VmFsdWUgPSBudWxsICE9IHByZXZWYWx1ZSA/IHByZXZWYWx1ZVtrZXldIDogbnVsbCksXG4gICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcHJldlZhbHVlICYmXG4gICAgICAgICAgICAgICAgICBkb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodGFnLCBwcmV2VmFsdWUsIHByb3BzKSxcbiAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB2YWx1ZSlcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgcHJldlZhbHVlICYmXG4gICAgICAgICAgICAgICAgICBudWxsICE9PSBwcmV2VmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgIChrZXkgaW4gZG9tRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICA/IChkb21FbGVtZW50W2tleV0gPSBudWxsKVxuICAgICAgICAgICAgICAgICAgICA6IGRvbUVsZW1lbnQuaGFzQXR0cmlidXRlKGtleSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShrZXkpKTtcbiAgICAgICAgICAgICAgICBkb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodGFnLCB2YWx1ZSwgcHJvcHMpO1xuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAga2V5IGluIGRvbUVsZW1lbnRcbiAgICAgICAgICAgICAgICA/IChkb21FbGVtZW50W2tleV0gPSB2YWx1ZSlcbiAgICAgICAgICAgICAgICA6ICEwID09PSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgPyBkb21FbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIFwiXCIpXG4gICAgICAgICAgICAgICAgICA6IHNldFZhbHVlRm9yQXR0cmlidXRlKGRvbUVsZW1lbnQsIGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzZXRJbml0aWFsUHJvcGVydGllcyhkb21FbGVtZW50LCB0YWcsIHByb3BzKSB7XG4gICAgICB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50KHRhZywgcHJvcHMpO1xuICAgICAgc3dpdGNoICh0YWcpIHtcbiAgICAgICAgY2FzZSBcImRpdlwiOlxuICAgICAgICBjYXNlIFwic3BhblwiOlxuICAgICAgICBjYXNlIFwic3ZnXCI6XG4gICAgICAgIGNhc2UgXCJwYXRoXCI6XG4gICAgICAgIGNhc2UgXCJhXCI6XG4gICAgICAgIGNhc2UgXCJnXCI6XG4gICAgICAgIGNhc2UgXCJwXCI6XG4gICAgICAgIGNhc2UgXCJsaVwiOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaW1nXCI6XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImVycm9yXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJsb2FkXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgICAgIHZhciBoYXNTcmMgPSAhMSxcbiAgICAgICAgICAgIGhhc1NyY1NldCA9ICExLFxuICAgICAgICAgICAgcHJvcEtleTtcbiAgICAgICAgICBmb3IgKHByb3BLZXkgaW4gcHJvcHMpXG4gICAgICAgICAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgICAgICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BLZXldO1xuICAgICAgICAgICAgICBpZiAobnVsbCAhPSBwcm9wVmFsdWUpXG4gICAgICAgICAgICAgICAgc3dpdGNoIChwcm9wS2V5KSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIFwic3JjXCI6XG4gICAgICAgICAgICAgICAgICAgIGhhc1NyYyA9ICEwO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJzcmNTZXRcIjpcbiAgICAgICAgICAgICAgICAgICAgaGFzU3JjU2V0ID0gITA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgY2FzZSBcImNoaWxkcmVuXCI6XG4gICAgICAgICAgICAgICAgICBjYXNlIFwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIjpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgdGFnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiIGlzIGEgdm9pZCBlbGVtZW50IHRhZyBhbmQgbXVzdCBuZWl0aGVyIGhhdmUgYGNoaWxkcmVuYCBub3IgdXNlIGBkYW5nZXJvdXNseVNldElubmVySFRNTGAuXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCBwcm9wS2V5LCBwcm9wVmFsdWUsIHByb3BzLCBudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgaGFzU3JjU2V0ICYmXG4gICAgICAgICAgICBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgXCJzcmNTZXRcIiwgcHJvcHMuc3JjU2V0LCBwcm9wcywgbnVsbCk7XG4gICAgICAgICAgaGFzU3JjICYmIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCBcInNyY1wiLCBwcm9wcy5zcmMsIHByb3BzLCBudWxsKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgXCJpbnB1dFwiOlxuICAgICAgICAgIGNoZWNrQ29udHJvbGxlZFZhbHVlUHJvcHMoXCJpbnB1dFwiLCBwcm9wcyk7XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImludmFsaWRcIiwgZG9tRWxlbWVudCk7XG4gICAgICAgICAgdmFyIGRlZmF1bHRWYWx1ZSA9IChwcm9wS2V5ID0gcHJvcFZhbHVlID0gaGFzU3JjU2V0ID0gbnVsbCksXG4gICAgICAgICAgICBjaGVja2VkID0gbnVsbCxcbiAgICAgICAgICAgIGRlZmF1bHRDaGVja2VkID0gbnVsbDtcbiAgICAgICAgICBmb3IgKGhhc1NyYyBpbiBwcm9wcylcbiAgICAgICAgICAgIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eShoYXNTcmMpKSB7XG4gICAgICAgICAgICAgIHZhciBfcHJvcFZhbHVlID0gcHJvcHNbaGFzU3JjXTtcbiAgICAgICAgICAgICAgaWYgKG51bGwgIT0gX3Byb3BWYWx1ZSlcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGhhc1NyYykge1xuICAgICAgICAgICAgICAgICAgY2FzZSBcIm5hbWVcIjpcbiAgICAgICAgICAgICAgICAgICAgaGFzU3JjU2V0ID0gX3Byb3BWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBjYXNlIFwidHlwZVwiOlxuICAgICAgICAgICAgICAgICAgICBwcm9wVmFsdWUgPSBfcHJvcFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJjaGVja2VkXCI6XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQgPSBfcHJvcFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJkZWZhdWx0Q2hlY2tlZFwiOlxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q2hlY2tlZCA9IF9wcm9wVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgY2FzZSBcInZhbHVlXCI6XG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXkgPSBfcHJvcFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJkZWZhdWx0VmFsdWVcIjpcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gX3Byb3BWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBjYXNlIFwiY2hpbGRyZW5cIjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOlxuICAgICAgICAgICAgICAgICAgICBpZiAobnVsbCAhPSBfcHJvcFZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgaXMgYSB2b2lkIGVsZW1lbnQgdGFnIGFuZCBtdXN0IG5laXRoZXIgaGF2ZSBgY2hpbGRyZW5gIG5vciB1c2UgYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYC5cIlxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgc2V0UHJvcChkb21FbGVtZW50LCB0YWcsIGhhc1NyYywgX3Byb3BWYWx1ZSwgcHJvcHMsIG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB2YWxpZGF0ZUlucHV0UHJvcHMoZG9tRWxlbWVudCwgcHJvcHMpO1xuICAgICAgICAgIGluaXRJbnB1dChcbiAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgICAgICAgY2hlY2tlZCxcbiAgICAgICAgICAgIGRlZmF1bHRDaGVja2VkLFxuICAgICAgICAgICAgcHJvcFZhbHVlLFxuICAgICAgICAgICAgaGFzU3JjU2V0LFxuICAgICAgICAgICAgITFcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBcInNlbGVjdFwiOlxuICAgICAgICAgIGNoZWNrQ29udHJvbGxlZFZhbHVlUHJvcHMoXCJzZWxlY3RcIiwgcHJvcHMpO1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJpbnZhbGlkXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgICAgIGhhc1NyYyA9IHByb3BWYWx1ZSA9IHByb3BLZXkgPSBudWxsO1xuICAgICAgICAgIGZvciAoaGFzU3JjU2V0IGluIHByb3BzKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBwcm9wcy5oYXNPd25Qcm9wZXJ0eShoYXNTcmNTZXQpICYmXG4gICAgICAgICAgICAgICgoZGVmYXVsdFZhbHVlID0gcHJvcHNbaGFzU3JjU2V0XSksIG51bGwgIT0gZGVmYXVsdFZhbHVlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzd2l0Y2ggKGhhc1NyY1NldCkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ2YWx1ZVwiOlxuICAgICAgICAgICAgICAgICAgcHJvcEtleSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJkZWZhdWx0VmFsdWVcIjpcbiAgICAgICAgICAgICAgICAgIHByb3BWYWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtdWx0aXBsZVwiOlxuICAgICAgICAgICAgICAgICAgaGFzU3JjID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBzZXRQcm9wKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICAgICAgICAgIGhhc1NyY1NldCxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIHZhbGlkYXRlU2VsZWN0UHJvcHMoZG9tRWxlbWVudCwgcHJvcHMpO1xuICAgICAgICAgIHRhZyA9IHByb3BLZXk7XG4gICAgICAgICAgcHJvcHMgPSBwcm9wVmFsdWU7XG4gICAgICAgICAgZG9tRWxlbWVudC5tdWx0aXBsZSA9ICEhaGFzU3JjO1xuICAgICAgICAgIG51bGwgIT0gdGFnXG4gICAgICAgICAgICA/IHVwZGF0ZU9wdGlvbnMoZG9tRWxlbWVudCwgISFoYXNTcmMsIHRhZywgITEpXG4gICAgICAgICAgICA6IG51bGwgIT0gcHJvcHMgJiYgdXBkYXRlT3B0aW9ucyhkb21FbGVtZW50LCAhIWhhc1NyYywgcHJvcHMsICEwKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgXCJ0ZXh0YXJlYVwiOlxuICAgICAgICAgIGNoZWNrQ29udHJvbGxlZFZhbHVlUHJvcHMoXCJ0ZXh0YXJlYVwiLCBwcm9wcyk7XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImludmFsaWRcIiwgZG9tRWxlbWVudCk7XG4gICAgICAgICAgcHJvcEtleSA9IGhhc1NyY1NldCA9IGhhc1NyYyA9IG51bGw7XG4gICAgICAgICAgZm9yIChwcm9wVmFsdWUgaW4gcHJvcHMpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHByb3BzLmhhc093blByb3BlcnR5KHByb3BWYWx1ZSkgJiZcbiAgICAgICAgICAgICAgKChkZWZhdWx0VmFsdWUgPSBwcm9wc1twcm9wVmFsdWVdKSwgbnVsbCAhPSBkZWZhdWx0VmFsdWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHN3aXRjaCAocHJvcFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInZhbHVlXCI6XG4gICAgICAgICAgICAgICAgICBoYXNTcmMgPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGVmYXVsdFZhbHVlXCI6XG4gICAgICAgICAgICAgICAgICBoYXNTcmNTZXQgPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiY2hpbGRyZW5cIjpcbiAgICAgICAgICAgICAgICAgIHByb3BLZXkgPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIjpcbiAgICAgICAgICAgICAgICAgIGlmIChudWxsICE9IGRlZmF1bHRWYWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgXCJgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgIGRvZXMgbm90IG1ha2Ugc2Vuc2Ugb24gPHRleHRhcmVhPi5cIlxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIHNldFByb3AoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLFxuICAgICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgdmFsaWRhdGVUZXh0YXJlYVByb3BzKGRvbUVsZW1lbnQsIHByb3BzKTtcbiAgICAgICAgICBpbml0VGV4dGFyZWEoZG9tRWxlbWVudCwgaGFzU3JjLCBoYXNTcmNTZXQsIHByb3BLZXkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBcIm9wdGlvblwiOlxuICAgICAgICAgIHZhbGlkYXRlT3B0aW9uUHJvcHMoZG9tRWxlbWVudCwgcHJvcHMpO1xuICAgICAgICAgIGZvciAoY2hlY2tlZCBpbiBwcm9wcylcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgcHJvcHMuaGFzT3duUHJvcGVydHkoY2hlY2tlZCkgJiZcbiAgICAgICAgICAgICAgKChoYXNTcmMgPSBwcm9wc1tjaGVja2VkXSksIG51bGwgIT0gaGFzU3JjKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzd2l0Y2ggKGNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwic2VsZWN0ZWRcIjpcbiAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQuc2VsZWN0ZWQgPVxuICAgICAgICAgICAgICAgICAgICBoYXNTcmMgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgaGFzU3JjICYmXG4gICAgICAgICAgICAgICAgICAgIFwic3ltYm9sXCIgIT09IHR5cGVvZiBoYXNTcmM7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgc2V0UHJvcChkb21FbGVtZW50LCB0YWcsIGNoZWNrZWQsIGhhc1NyYywgcHJvcHMsIG51bGwpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIFwiZGlhbG9nXCI6XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImJlZm9yZXRvZ2dsZVwiLCBkb21FbGVtZW50KTtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwidG9nZ2xlXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJjYW5jZWxcIiwgZG9tRWxlbWVudCk7XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImNsb3NlXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaWZyYW1lXCI6XG4gICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwibG9hZFwiLCBkb21FbGVtZW50KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInZpZGVvXCI6XG4gICAgICAgIGNhc2UgXCJhdWRpb1wiOlxuICAgICAgICAgIGZvciAoaGFzU3JjID0gMDsgaGFzU3JjIDwgbWVkaWFFdmVudFR5cGVzLmxlbmd0aDsgaGFzU3JjKyspXG4gICAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KG1lZGlhRXZlbnRUeXBlc1toYXNTcmNdLCBkb21FbGVtZW50KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImltYWdlXCI6XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImVycm9yXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJsb2FkXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiZGV0YWlsc1wiOlxuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJ0b2dnbGVcIiwgZG9tRWxlbWVudCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJlbWJlZFwiOlxuICAgICAgICBjYXNlIFwic291cmNlXCI6XG4gICAgICAgIGNhc2UgXCJsaW5rXCI6XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImVycm9yXCIsIGRvbUVsZW1lbnQpLFxuICAgICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImxvYWRcIiwgZG9tRWxlbWVudCk7XG4gICAgICAgIGNhc2UgXCJhcmVhXCI6XG4gICAgICAgIGNhc2UgXCJiYXNlXCI6XG4gICAgICAgIGNhc2UgXCJiclwiOlxuICAgICAgICBjYXNlIFwiY29sXCI6XG4gICAgICAgIGNhc2UgXCJoclwiOlxuICAgICAgICBjYXNlIFwia2V5Z2VuXCI6XG4gICAgICAgIGNhc2UgXCJtZXRhXCI6XG4gICAgICAgIGNhc2UgXCJwYXJhbVwiOlxuICAgICAgICBjYXNlIFwidHJhY2tcIjpcbiAgICAgICAgY2FzZSBcIndiclwiOlxuICAgICAgICBjYXNlIFwibWVudWl0ZW1cIjpcbiAgICAgICAgICBmb3IgKGRlZmF1bHRDaGVja2VkIGluIHByb3BzKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBwcm9wcy5oYXNPd25Qcm9wZXJ0eShkZWZhdWx0Q2hlY2tlZCkgJiZcbiAgICAgICAgICAgICAgKChoYXNTcmMgPSBwcm9wc1tkZWZhdWx0Q2hlY2tlZF0pLCBudWxsICE9IGhhc1NyYylcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3dpdGNoIChkZWZhdWx0Q2hlY2tlZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjaGlsZHJlblwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOlxuICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIHRhZyArXG4gICAgICAgICAgICAgICAgICAgICAgXCIgaXMgYSB2b2lkIGVsZW1lbnQgdGFnIGFuZCBtdXN0IG5laXRoZXIgaGF2ZSBgY2hpbGRyZW5gIG5vciB1c2UgYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYC5cIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgc2V0UHJvcChkb21FbGVtZW50LCB0YWcsIGRlZmF1bHRDaGVja2VkLCBoYXNTcmMsIHByb3BzLCBudWxsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoaXNDdXN0b21FbGVtZW50KHRhZykpIHtcbiAgICAgICAgICAgIGZvciAoX3Byb3BWYWx1ZSBpbiBwcm9wcylcbiAgICAgICAgICAgICAgcHJvcHMuaGFzT3duUHJvcGVydHkoX3Byb3BWYWx1ZSkgJiZcbiAgICAgICAgICAgICAgICAoKGhhc1NyYyA9IHByb3BzW19wcm9wVmFsdWVdKSxcbiAgICAgICAgICAgICAgICB2b2lkIDAgIT09IGhhc1NyYyAmJlxuICAgICAgICAgICAgICAgICAgc2V0UHJvcE9uQ3VzdG9tRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgICAgICBfcHJvcFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBoYXNTcmMsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLFxuICAgICAgICAgICAgICAgICAgICB2b2lkIDBcbiAgICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAoZGVmYXVsdFZhbHVlIGluIHByb3BzKVxuICAgICAgICBwcm9wcy5oYXNPd25Qcm9wZXJ0eShkZWZhdWx0VmFsdWUpICYmXG4gICAgICAgICAgKChoYXNTcmMgPSBwcm9wc1tkZWZhdWx0VmFsdWVdKSxcbiAgICAgICAgICBudWxsICE9IGhhc1NyYyAmJlxuICAgICAgICAgICAgc2V0UHJvcChkb21FbGVtZW50LCB0YWcsIGRlZmF1bHRWYWx1ZSwgaGFzU3JjLCBwcm9wcywgbnVsbCkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHRhZywgbGFzdFByb3BzLCBuZXh0UHJvcHMpIHtcbiAgICAgIHZhbGlkYXRlUHJvcGVydGllc0luRGV2ZWxvcG1lbnQodGFnLCBuZXh0UHJvcHMpO1xuICAgICAgc3dpdGNoICh0YWcpIHtcbiAgICAgICAgY2FzZSBcImRpdlwiOlxuICAgICAgICBjYXNlIFwic3BhblwiOlxuICAgICAgICBjYXNlIFwic3ZnXCI6XG4gICAgICAgIGNhc2UgXCJwYXRoXCI6XG4gICAgICAgIGNhc2UgXCJhXCI6XG4gICAgICAgIGNhc2UgXCJnXCI6XG4gICAgICAgIGNhc2UgXCJwXCI6XG4gICAgICAgIGNhc2UgXCJsaVwiOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaW5wdXRcIjpcbiAgICAgICAgICB2YXIgbmFtZSA9IG51bGwsXG4gICAgICAgICAgICB0eXBlID0gbnVsbCxcbiAgICAgICAgICAgIHZhbHVlID0gbnVsbCxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IG51bGwsXG4gICAgICAgICAgICBsYXN0RGVmYXVsdFZhbHVlID0gbnVsbCxcbiAgICAgICAgICAgIGNoZWNrZWQgPSBudWxsLFxuICAgICAgICAgICAgZGVmYXVsdENoZWNrZWQgPSBudWxsO1xuICAgICAgICAgIGZvciAocHJvcEtleSBpbiBsYXN0UHJvcHMpIHtcbiAgICAgICAgICAgIHZhciBsYXN0UHJvcCA9IGxhc3RQcm9wc1twcm9wS2V5XTtcbiAgICAgICAgICAgIGlmIChsYXN0UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkgJiYgbnVsbCAhPSBsYXN0UHJvcClcbiAgICAgICAgICAgICAgc3dpdGNoIChwcm9wS2V5KSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNoZWNrZWRcIjpcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ2YWx1ZVwiOlxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImRlZmF1bHRWYWx1ZVwiOlxuICAgICAgICAgICAgICAgICAgbGFzdERlZmF1bHRWYWx1ZSA9IGxhc3RQcm9wO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkgfHxcbiAgICAgICAgICAgICAgICAgICAgc2V0UHJvcChcbiAgICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgICAgICAgICAgIGxhc3RQcm9wXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yICh2YXIgX3Byb3BLZXk4IGluIG5leHRQcm9wcykge1xuICAgICAgICAgICAgdmFyIHByb3BLZXkgPSBuZXh0UHJvcHNbX3Byb3BLZXk4XTtcbiAgICAgICAgICAgIGxhc3RQcm9wID0gbGFzdFByb3BzW19wcm9wS2V5OF07XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShfcHJvcEtleTgpICYmXG4gICAgICAgICAgICAgIChudWxsICE9IHByb3BLZXkgfHwgbnVsbCAhPSBsYXN0UHJvcClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3dpdGNoIChfcHJvcEtleTgpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwidHlwZVwiOlxuICAgICAgICAgICAgICAgICAgdHlwZSA9IHByb3BLZXk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwibmFtZVwiOlxuICAgICAgICAgICAgICAgICAgbmFtZSA9IHByb3BLZXk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiY2hlY2tlZFwiOlxuICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IHByb3BLZXk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGVmYXVsdENoZWNrZWRcIjpcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHRDaGVja2VkID0gcHJvcEtleTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ2YWx1ZVwiOlxuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwcm9wS2V5O1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImRlZmF1bHRWYWx1ZVwiOlxuICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gcHJvcEtleTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjaGlsZHJlblwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOlxuICAgICAgICAgICAgICAgICAgaWYgKG51bGwgIT0gcHJvcEtleSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgdGFnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiIGlzIGEgdm9pZCBlbGVtZW50IHRhZyBhbmQgbXVzdCBuZWl0aGVyIGhhdmUgYGNoaWxkcmVuYCBub3IgdXNlIGBkYW5nZXJvdXNseVNldElubmVySFRNTGAuXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBwcm9wS2V5ICE9PSBsYXN0UHJvcCAmJlxuICAgICAgICAgICAgICAgICAgICBzZXRQcm9wKFxuICAgICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgICAgICAgIF9wcm9wS2V5OCxcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgICBsYXN0UHJvcFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRhZyA9XG4gICAgICAgICAgICBcImNoZWNrYm94XCIgPT09IGxhc3RQcm9wcy50eXBlIHx8IFwicmFkaW9cIiA9PT0gbGFzdFByb3BzLnR5cGVcbiAgICAgICAgICAgICAgPyBudWxsICE9IGxhc3RQcm9wcy5jaGVja2VkXG4gICAgICAgICAgICAgIDogbnVsbCAhPSBsYXN0UHJvcHMudmFsdWU7XG4gICAgICAgICAgbmV4dFByb3BzID1cbiAgICAgICAgICAgIFwiY2hlY2tib3hcIiA9PT0gbmV4dFByb3BzLnR5cGUgfHwgXCJyYWRpb1wiID09PSBuZXh0UHJvcHMudHlwZVxuICAgICAgICAgICAgICA/IG51bGwgIT0gbmV4dFByb3BzLmNoZWNrZWRcbiAgICAgICAgICAgICAgOiBudWxsICE9IG5leHRQcm9wcy52YWx1ZTtcbiAgICAgICAgICB0YWcgfHxcbiAgICAgICAgICAgICFuZXh0UHJvcHMgfHxcbiAgICAgICAgICAgIGRpZFdhcm5VbmNvbnRyb2xsZWRUb0NvbnRyb2xsZWQgfHxcbiAgICAgICAgICAgIChjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkEgY29tcG9uZW50IGlzIGNoYW5naW5nIGFuIHVuY29udHJvbGxlZCBpbnB1dCB0byBiZSBjb250cm9sbGVkLiBUaGlzIGlzIGxpa2VseSBjYXVzZWQgYnkgdGhlIHZhbHVlIGNoYW5naW5nIGZyb20gdW5kZWZpbmVkIHRvIGEgZGVmaW5lZCB2YWx1ZSwgd2hpY2ggc2hvdWxkIG5vdCBoYXBwZW4uIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgaW5wdXQgZWxlbWVudCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb21wb25lbnQuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHNcIlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIChkaWRXYXJuVW5jb250cm9sbGVkVG9Db250cm9sbGVkID0gITApKTtcbiAgICAgICAgICAhdGFnIHx8XG4gICAgICAgICAgICBuZXh0UHJvcHMgfHxcbiAgICAgICAgICAgIGRpZFdhcm5Db250cm9sbGVkVG9VbmNvbnRyb2xsZWQgfHxcbiAgICAgICAgICAgIChjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkEgY29tcG9uZW50IGlzIGNoYW5naW5nIGEgY29udHJvbGxlZCBpbnB1dCB0byBiZSB1bmNvbnRyb2xsZWQuIFRoaXMgaXMgbGlrZWx5IGNhdXNlZCBieSB0aGUgdmFsdWUgY2hhbmdpbmcgZnJvbSBhIGRlZmluZWQgdG8gdW5kZWZpbmVkLCB3aGljaCBzaG91bGQgbm90IGhhcHBlbi4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCBlbGVtZW50IGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNvbXBvbmVudC4gTW9yZSBpbmZvOiBodHRwczovL3JlYWN0LmRldi9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50c1wiXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgKGRpZFdhcm5Db250cm9sbGVkVG9VbmNvbnRyb2xsZWQgPSAhMCkpO1xuICAgICAgICAgIHVwZGF0ZUlucHV0KFxuICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgICAgICAgbGFzdERlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgIGNoZWNrZWQsXG4gICAgICAgICAgICBkZWZhdWx0Q2hlY2tlZCxcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBuYW1lXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgXCJzZWxlY3RcIjpcbiAgICAgICAgICBwcm9wS2V5ID0gdmFsdWUgPSBkZWZhdWx0VmFsdWUgPSBfcHJvcEtleTggPSBudWxsO1xuICAgICAgICAgIGZvciAodHlwZSBpbiBsYXN0UHJvcHMpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICgobGFzdERlZmF1bHRWYWx1ZSA9IGxhc3RQcm9wc1t0eXBlXSksXG4gICAgICAgICAgICAgIGxhc3RQcm9wcy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSAmJiBudWxsICE9IGxhc3REZWZhdWx0VmFsdWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ2YWx1ZVwiOlxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm11bHRpcGxlXCI6XG4gICAgICAgICAgICAgICAgICBwcm9wS2V5ID0gbGFzdERlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgbmV4dFByb3BzLmhhc093blByb3BlcnR5KHR5cGUpIHx8XG4gICAgICAgICAgICAgICAgICAgIHNldFByb3AoXG4gICAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgICBsYXN0RGVmYXVsdFZhbHVlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKG5hbWUgaW4gbmV4dFByb3BzKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoKHR5cGUgPSBuZXh0UHJvcHNbbmFtZV0pLFxuICAgICAgICAgICAgICAobGFzdERlZmF1bHRWYWx1ZSA9IGxhc3RQcm9wc1tuYW1lXSksXG4gICAgICAgICAgICAgIG5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJlxuICAgICAgICAgICAgICAgIChudWxsICE9IHR5cGUgfHwgbnVsbCAhPSBsYXN0RGVmYXVsdFZhbHVlKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInZhbHVlXCI6XG4gICAgICAgICAgICAgICAgICBfcHJvcEtleTggPSB0eXBlO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImRlZmF1bHRWYWx1ZVwiOlxuICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gdHlwZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtdWx0aXBsZVwiOlxuICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0eXBlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICB0eXBlICE9PSBsYXN0RGVmYXVsdFZhbHVlICYmXG4gICAgICAgICAgICAgICAgICAgIHNldFByb3AoXG4gICAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgICBsYXN0RGVmYXVsdFZhbHVlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICBuZXh0UHJvcHMgPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgdGFnID0gdmFsdWU7XG4gICAgICAgICAgbGFzdFByb3BzID0gcHJvcEtleTtcbiAgICAgICAgICBudWxsICE9IF9wcm9wS2V5OFxuICAgICAgICAgICAgPyB1cGRhdGVPcHRpb25zKGRvbUVsZW1lbnQsICEhdGFnLCBfcHJvcEtleTgsICExKVxuICAgICAgICAgICAgOiAhIWxhc3RQcm9wcyAhPT0gISF0YWcgJiZcbiAgICAgICAgICAgICAgKG51bGwgIT0gbmV4dFByb3BzXG4gICAgICAgICAgICAgICAgPyB1cGRhdGVPcHRpb25zKGRvbUVsZW1lbnQsICEhdGFnLCBuZXh0UHJvcHMsICEwKVxuICAgICAgICAgICAgICAgIDogdXBkYXRlT3B0aW9ucyhkb21FbGVtZW50LCAhIXRhZywgdGFnID8gW10gOiBcIlwiLCAhMSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBcInRleHRhcmVhXCI6XG4gICAgICAgICAgcHJvcEtleSA9IF9wcm9wS2V5OCA9IG51bGw7XG4gICAgICAgICAgZm9yIChkZWZhdWx0VmFsdWUgaW4gbGFzdFByb3BzKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoKG5hbWUgPSBsYXN0UHJvcHNbZGVmYXVsdFZhbHVlXSksXG4gICAgICAgICAgICAgIGxhc3RQcm9wcy5oYXNPd25Qcm9wZXJ0eShkZWZhdWx0VmFsdWUpICYmXG4gICAgICAgICAgICAgICAgbnVsbCAhPSBuYW1lICYmXG4gICAgICAgICAgICAgICAgIW5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShkZWZhdWx0VmFsdWUpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzd2l0Y2ggKGRlZmF1bHRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ2YWx1ZVwiOlxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNoaWxkcmVuXCI6XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgc2V0UHJvcChkb21FbGVtZW50LCB0YWcsIGRlZmF1bHRWYWx1ZSwgbnVsbCwgbmV4dFByb3BzLCBuYW1lKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIGZvciAodmFsdWUgaW4gbmV4dFByb3BzKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoKG5hbWUgPSBuZXh0UHJvcHNbdmFsdWVdKSxcbiAgICAgICAgICAgICAgKHR5cGUgPSBsYXN0UHJvcHNbdmFsdWVdKSxcbiAgICAgICAgICAgICAgbmV4dFByb3BzLmhhc093blByb3BlcnR5KHZhbHVlKSAmJiAobnVsbCAhPSBuYW1lIHx8IG51bGwgIT0gdHlwZSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwidmFsdWVcIjpcbiAgICAgICAgICAgICAgICAgIF9wcm9wS2V5OCA9IG5hbWU7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGVmYXVsdFZhbHVlXCI6XG4gICAgICAgICAgICAgICAgICBwcm9wS2V5ID0gbmFtZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjaGlsZHJlblwiOlxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI6XG4gICAgICAgICAgICAgICAgICBpZiAobnVsbCAhPSBuYW1lKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICBcImBkYW5nZXJvdXNseVNldElubmVySFRNTGAgZG9lcyBub3QgbWFrZSBzZW5zZSBvbiA8dGV4dGFyZWE+LlwiXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgbmFtZSAhPT0gdHlwZSAmJlxuICAgICAgICAgICAgICAgICAgICBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgdmFsdWUsIG5hbWUsIG5leHRQcm9wcywgdHlwZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB1cGRhdGVUZXh0YXJlYShkb21FbGVtZW50LCBfcHJvcEtleTgsIHByb3BLZXkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBcIm9wdGlvblwiOlxuICAgICAgICAgIGZvciAodmFyIF9wcm9wS2V5MTMgaW4gbGFzdFByb3BzKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoKF9wcm9wS2V5OCA9IGxhc3RQcm9wc1tfcHJvcEtleTEzXSksXG4gICAgICAgICAgICAgIGxhc3RQcm9wcy5oYXNPd25Qcm9wZXJ0eShfcHJvcEtleTEzKSAmJlxuICAgICAgICAgICAgICAgIG51bGwgIT0gX3Byb3BLZXk4ICYmXG4gICAgICAgICAgICAgICAgIW5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShfcHJvcEtleTEzKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3dpdGNoIChfcHJvcEtleTEzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNlbGVjdGVkXCI6XG4gICAgICAgICAgICAgICAgICBkb21FbGVtZW50LnNlbGVjdGVkID0gITE7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgc2V0UHJvcChcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgICAgICBfcHJvcEtleTEzLFxuICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIF9wcm9wS2V5OFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIGZvciAobGFzdERlZmF1bHRWYWx1ZSBpbiBuZXh0UHJvcHMpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICgoX3Byb3BLZXk4ID0gbmV4dFByb3BzW2xhc3REZWZhdWx0VmFsdWVdKSxcbiAgICAgICAgICAgICAgKHByb3BLZXkgPSBsYXN0UHJvcHNbbGFzdERlZmF1bHRWYWx1ZV0pLFxuICAgICAgICAgICAgICBuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkobGFzdERlZmF1bHRWYWx1ZSkgJiZcbiAgICAgICAgICAgICAgICBfcHJvcEtleTggIT09IHByb3BLZXkgJiZcbiAgICAgICAgICAgICAgICAobnVsbCAhPSBfcHJvcEtleTggfHwgbnVsbCAhPSBwcm9wS2V5KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3dpdGNoIChsYXN0RGVmYXVsdFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNlbGVjdGVkXCI6XG4gICAgICAgICAgICAgICAgICBkb21FbGVtZW50LnNlbGVjdGVkID1cbiAgICAgICAgICAgICAgICAgICAgX3Byb3BLZXk4ICYmXG4gICAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIF9wcm9wS2V5OCAmJlxuICAgICAgICAgICAgICAgICAgICBcInN5bWJvbFwiICE9PSB0eXBlb2YgX3Byb3BLZXk4O1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIHNldFByb3AoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgICAgICAgICAgbGFzdERlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgX3Byb3BLZXk4LFxuICAgICAgICAgICAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXlcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgXCJpbWdcIjpcbiAgICAgICAgY2FzZSBcImxpbmtcIjpcbiAgICAgICAgY2FzZSBcImFyZWFcIjpcbiAgICAgICAgY2FzZSBcImJhc2VcIjpcbiAgICAgICAgY2FzZSBcImJyXCI6XG4gICAgICAgIGNhc2UgXCJjb2xcIjpcbiAgICAgICAgY2FzZSBcImVtYmVkXCI6XG4gICAgICAgIGNhc2UgXCJoclwiOlxuICAgICAgICBjYXNlIFwia2V5Z2VuXCI6XG4gICAgICAgIGNhc2UgXCJtZXRhXCI6XG4gICAgICAgIGNhc2UgXCJwYXJhbVwiOlxuICAgICAgICBjYXNlIFwic291cmNlXCI6XG4gICAgICAgIGNhc2UgXCJ0cmFja1wiOlxuICAgICAgICBjYXNlIFwid2JyXCI6XG4gICAgICAgIGNhc2UgXCJtZW51aXRlbVwiOlxuICAgICAgICAgIGZvciAodmFyIF9wcm9wS2V5MTUgaW4gbGFzdFByb3BzKVxuICAgICAgICAgICAgKF9wcm9wS2V5OCA9IGxhc3RQcm9wc1tfcHJvcEtleTE1XSksXG4gICAgICAgICAgICAgIGxhc3RQcm9wcy5oYXNPd25Qcm9wZXJ0eShfcHJvcEtleTE1KSAmJlxuICAgICAgICAgICAgICAgIG51bGwgIT0gX3Byb3BLZXk4ICYmXG4gICAgICAgICAgICAgICAgIW5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShfcHJvcEtleTE1KSAmJlxuICAgICAgICAgICAgICAgIHNldFByb3AoXG4gICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgICAgX3Byb3BLZXkxNSxcbiAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgICAgICAgICBfcHJvcEtleThcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgIGZvciAoY2hlY2tlZCBpbiBuZXh0UHJvcHMpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICgoX3Byb3BLZXk4ID0gbmV4dFByb3BzW2NoZWNrZWRdKSxcbiAgICAgICAgICAgICAgKHByb3BLZXkgPSBsYXN0UHJvcHNbY2hlY2tlZF0pLFxuICAgICAgICAgICAgICBuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkoY2hlY2tlZCkgJiZcbiAgICAgICAgICAgICAgICBfcHJvcEtleTggIT09IHByb3BLZXkgJiZcbiAgICAgICAgICAgICAgICAobnVsbCAhPSBfcHJvcEtleTggfHwgbnVsbCAhPSBwcm9wS2V5KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3dpdGNoIChjaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNoaWxkcmVuXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI6XG4gICAgICAgICAgICAgICAgICBpZiAobnVsbCAhPSBfcHJvcEtleTgpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIHRhZyArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiBpcyBhIHZvaWQgZWxlbWVudCB0YWcgYW5kIG11c3QgbmVpdGhlciBoYXZlIGBjaGlsZHJlbmAgbm9yIHVzZSBgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLlwiXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgc2V0UHJvcChcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkLFxuICAgICAgICAgICAgICAgICAgICBfcHJvcEtleTgsXG4gICAgICAgICAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoaXNDdXN0b21FbGVtZW50KHRhZykpIHtcbiAgICAgICAgICAgIGZvciAodmFyIF9wcm9wS2V5MTcgaW4gbGFzdFByb3BzKVxuICAgICAgICAgICAgICAoX3Byb3BLZXk4ID0gbGFzdFByb3BzW19wcm9wS2V5MTddKSxcbiAgICAgICAgICAgICAgICBsYXN0UHJvcHMuaGFzT3duUHJvcGVydHkoX3Byb3BLZXkxNykgJiZcbiAgICAgICAgICAgICAgICAgIHZvaWQgMCAhPT0gX3Byb3BLZXk4ICYmXG4gICAgICAgICAgICAgICAgICAhbmV4dFByb3BzLmhhc093blByb3BlcnR5KF9wcm9wS2V5MTcpICYmXG4gICAgICAgICAgICAgICAgICBzZXRQcm9wT25DdXN0b21FbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICAgICAgICAgIF9wcm9wS2V5MTcsXG4gICAgICAgICAgICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgICAgICAgICBfcHJvcEtleThcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBmb3IgKGRlZmF1bHRDaGVja2VkIGluIG5leHRQcm9wcylcbiAgICAgICAgICAgICAgKF9wcm9wS2V5OCA9IG5leHRQcm9wc1tkZWZhdWx0Q2hlY2tlZF0pLFxuICAgICAgICAgICAgICAgIChwcm9wS2V5ID0gbGFzdFByb3BzW2RlZmF1bHRDaGVja2VkXSksXG4gICAgICAgICAgICAgICAgIW5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShkZWZhdWx0Q2hlY2tlZCkgfHxcbiAgICAgICAgICAgICAgICAgIF9wcm9wS2V5OCA9PT0gcHJvcEtleSB8fFxuICAgICAgICAgICAgICAgICAgKHZvaWQgMCA9PT0gX3Byb3BLZXk4ICYmIHZvaWQgMCA9PT0gcHJvcEtleSkgfHxcbiAgICAgICAgICAgICAgICAgIHNldFByb3BPbkN1c3RvbUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENoZWNrZWQsXG4gICAgICAgICAgICAgICAgICAgIF9wcm9wS2V5OCxcbiAgICAgICAgICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAodmFyIF9wcm9wS2V5MTkgaW4gbGFzdFByb3BzKVxuICAgICAgICAoX3Byb3BLZXk4ID0gbGFzdFByb3BzW19wcm9wS2V5MTldKSxcbiAgICAgICAgICBsYXN0UHJvcHMuaGFzT3duUHJvcGVydHkoX3Byb3BLZXkxOSkgJiZcbiAgICAgICAgICAgIG51bGwgIT0gX3Byb3BLZXk4ICYmXG4gICAgICAgICAgICAhbmV4dFByb3BzLmhhc093blByb3BlcnR5KF9wcm9wS2V5MTkpICYmXG4gICAgICAgICAgICBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgX3Byb3BLZXkxOSwgbnVsbCwgbmV4dFByb3BzLCBfcHJvcEtleTgpO1xuICAgICAgZm9yIChsYXN0UHJvcCBpbiBuZXh0UHJvcHMpXG4gICAgICAgIChfcHJvcEtleTggPSBuZXh0UHJvcHNbbGFzdFByb3BdKSxcbiAgICAgICAgICAocHJvcEtleSA9IGxhc3RQcm9wc1tsYXN0UHJvcF0pLFxuICAgICAgICAgICFuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkobGFzdFByb3ApIHx8XG4gICAgICAgICAgICBfcHJvcEtleTggPT09IHByb3BLZXkgfHxcbiAgICAgICAgICAgIChudWxsID09IF9wcm9wS2V5OCAmJiBudWxsID09IHByb3BLZXkpIHx8XG4gICAgICAgICAgICBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgbGFzdFByb3AsIF9wcm9wS2V5OCwgbmV4dFByb3BzLCBwcm9wS2V5KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0UHJvcE5hbWVGcm9tQXR0cmlidXRlTmFtZShhdHRyTmFtZSkge1xuICAgICAgc3dpdGNoIChhdHRyTmFtZSkge1xuICAgICAgICBjYXNlIFwiY2xhc3NcIjpcbiAgICAgICAgICByZXR1cm4gXCJjbGFzc05hbWVcIjtcbiAgICAgICAgY2FzZSBcImZvclwiOlxuICAgICAgICAgIHJldHVybiBcImh0bWxGb3JcIjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gYXR0ck5hbWU7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFN0eWxlc09iamVjdEZyb21FbGVtZW50KGRvbUVsZW1lbnQpIHtcbiAgICAgIHZhciBzZXJ2ZXJWYWx1ZUluT2JqZWN0Rm9ybSA9IHt9O1xuICAgICAgZG9tRWxlbWVudCA9IGRvbUVsZW1lbnQuc3R5bGU7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbUVsZW1lbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHN0eWxlTmFtZSA9IGRvbUVsZW1lbnRbaV07XG4gICAgICAgIHNlcnZlclZhbHVlSW5PYmplY3RGb3JtW3N0eWxlTmFtZV0gPVxuICAgICAgICAgIGRvbUVsZW1lbnQuZ2V0UHJvcGVydHlWYWx1ZShzdHlsZU5hbWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNlcnZlclZhbHVlSW5PYmplY3RGb3JtO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkaWZmSHlkcmF0ZWRTdHlsZXMoZG9tRWxlbWVudCwgdmFsdWUkanNjb21wJDAsIHNlcnZlckRpZmZlcmVuY2VzKSB7XG4gICAgICBpZiAobnVsbCAhPSB2YWx1ZSRqc2NvbXAkMCAmJiBcIm9iamVjdFwiICE9PSB0eXBlb2YgdmFsdWUkanNjb21wJDApXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJUaGUgYHN0eWxlYCBwcm9wIGV4cGVjdHMgYSBtYXBwaW5nIGZyb20gc3R5bGUgcHJvcGVydGllcyB0byB2YWx1ZXMsIG5vdCBhIHN0cmluZy4gRm9yIGV4YW1wbGUsIHN0eWxlPXt7bWFyZ2luUmlnaHQ6IHNwYWNpbmcgKyAnZW0nfX0gd2hlbiB1c2luZyBKU1guXCJcbiAgICAgICAgKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgY2xpZW50VmFsdWU7XG4gICAgICAgIHZhciBkZWxpbWl0ZXIgPSAoY2xpZW50VmFsdWUgPSBcIlwiKSxcbiAgICAgICAgICBzdHlsZU5hbWU7XG4gICAgICAgIGZvciAoc3R5bGVOYW1lIGluIHZhbHVlJGpzY29tcCQwKVxuICAgICAgICAgIGlmICh2YWx1ZSRqc2NvbXAkMC5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSB2YWx1ZSRqc2NvbXAkMFtzdHlsZU5hbWVdO1xuICAgICAgICAgICAgbnVsbCAhPSB2YWx1ZSAmJlxuICAgICAgICAgICAgICBcImJvb2xlYW5cIiAhPT0gdHlwZW9mIHZhbHVlICYmXG4gICAgICAgICAgICAgIFwiXCIgIT09IHZhbHVlICYmXG4gICAgICAgICAgICAgICgwID09PSBzdHlsZU5hbWUuaW5kZXhPZihcIi0tXCIpXG4gICAgICAgICAgICAgICAgPyAoY2hlY2tDU1NQcm9wZXJ0eVN0cmluZ0NvZXJjaW9uKHZhbHVlLCBzdHlsZU5hbWUpLFxuICAgICAgICAgICAgICAgICAgKGNsaWVudFZhbHVlICs9XG4gICAgICAgICAgICAgICAgICAgIGRlbGltaXRlciArIHN0eWxlTmFtZSArIFwiOlwiICsgKFwiXCIgKyB2YWx1ZSkudHJpbSgpKSlcbiAgICAgICAgICAgICAgICA6IFwibnVtYmVyXCIgIT09IHR5cGVvZiB2YWx1ZSB8fFxuICAgICAgICAgICAgICAgICAgICAwID09PSB2YWx1ZSB8fFxuICAgICAgICAgICAgICAgICAgICB1bml0bGVzc051bWJlcnMuaGFzKHN0eWxlTmFtZSlcbiAgICAgICAgICAgICAgICAgID8gKGNoZWNrQ1NTUHJvcGVydHlTdHJpbmdDb2VyY2lvbih2YWx1ZSwgc3R5bGVOYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgKGNsaWVudFZhbHVlICs9XG4gICAgICAgICAgICAgICAgICAgICAgZGVsaW1pdGVyICtcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZU5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKHVwcGVyY2FzZVBhdHRlcm4sIFwiLSQxXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UobXNQYXR0ZXJuJDEsIFwiLW1zLVwiKSArXG4gICAgICAgICAgICAgICAgICAgICAgXCI6XCIgK1xuICAgICAgICAgICAgICAgICAgICAgIChcIlwiICsgdmFsdWUpLnRyaW0oKSkpXG4gICAgICAgICAgICAgICAgICA6IChjbGllbnRWYWx1ZSArPVxuICAgICAgICAgICAgICAgICAgICAgIGRlbGltaXRlciArXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGVOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSh1cHBlcmNhc2VQYXR0ZXJuLCBcIi0kMVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKG1zUGF0dGVybiQxLCBcIi1tcy1cIikgK1xuICAgICAgICAgICAgICAgICAgICAgIFwiOlwiICtcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSArXG4gICAgICAgICAgICAgICAgICAgICAgXCJweFwiKSxcbiAgICAgICAgICAgICAgKGRlbGltaXRlciA9IFwiO1wiKSk7XG4gICAgICAgICAgfVxuICAgICAgICBjbGllbnRWYWx1ZSA9IGNsaWVudFZhbHVlIHx8IG51bGw7XG4gICAgICAgIHZhbHVlJGpzY29tcCQwID0gZG9tRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJzdHlsZVwiKTtcbiAgICAgICAgdmFsdWUkanNjb21wJDAgIT09IGNsaWVudFZhbHVlICYmXG4gICAgICAgICAgKChjbGllbnRWYWx1ZSA9IG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZShjbGllbnRWYWx1ZSkpLFxuICAgICAgICAgIG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZSh2YWx1ZSRqc2NvbXAkMCkgIT09IGNsaWVudFZhbHVlICYmXG4gICAgICAgICAgICAoc2VydmVyRGlmZmVyZW5jZXMuc3R5bGUgPSBnZXRTdHlsZXNPYmplY3RGcm9tRWxlbWVudChkb21FbGVtZW50KSkpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBoeWRyYXRlQXR0cmlidXRlKFxuICAgICAgZG9tRWxlbWVudCxcbiAgICAgIHByb3BLZXksXG4gICAgICBhdHRyaWJ1dGVOYW1lLFxuICAgICAgdmFsdWUsXG4gICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICkge1xuICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgIGRvbUVsZW1lbnQgPSBkb21FbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgIGlmIChudWxsID09PSBkb21FbGVtZW50KVxuICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgZWxzZSBpZiAobnVsbCAhPSB2YWx1ZSlcbiAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIChjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKHZhbHVlLCBwcm9wS2V5KSxcbiAgICAgICAgICAgICAgZG9tRWxlbWVudCA9PT0gXCJcIiArIHZhbHVlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShwcm9wS2V5LCBkb21FbGVtZW50LCB2YWx1ZSwgc2VydmVyRGlmZmVyZW5jZXMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoeWRyYXRlQm9vbGVhbkF0dHJpYnV0ZShcbiAgICAgIGRvbUVsZW1lbnQsXG4gICAgICBwcm9wS2V5LFxuICAgICAgYXR0cmlidXRlTmFtZSxcbiAgICAgIHZhbHVlLFxuICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICApIHtcbiAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICBkb21FbGVtZW50ID0gZG9tRWxlbWVudC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICBpZiAobnVsbCA9PT0gZG9tRWxlbWVudCkge1xuICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm47XG4gICAgICB9IGVsc2VcbiAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaWYgKHZhbHVlKSByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShwcm9wS2V5LCBkb21FbGVtZW50LCB2YWx1ZSwgc2VydmVyRGlmZmVyZW5jZXMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoeWRyYXRlQm9vbGVhbmlzaEF0dHJpYnV0ZShcbiAgICAgIGRvbUVsZW1lbnQsXG4gICAgICBwcm9wS2V5LFxuICAgICAgYXR0cmlidXRlTmFtZSxcbiAgICAgIHZhbHVlLFxuICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICApIHtcbiAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICBkb21FbGVtZW50ID0gZG9tRWxlbWVudC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICBpZiAobnVsbCA9PT0gZG9tRWxlbWVudClcbiAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICBlbHNlIGlmIChudWxsICE9IHZhbHVlKVxuICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIChjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKHZhbHVlLCBhdHRyaWJ1dGVOYW1lKSxcbiAgICAgICAgICAgICAgZG9tRWxlbWVudCA9PT0gXCJcIiArIHZhbHVlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShwcm9wS2V5LCBkb21FbGVtZW50LCB2YWx1ZSwgc2VydmVyRGlmZmVyZW5jZXMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoeWRyYXRlTnVtZXJpY0F0dHJpYnV0ZShcbiAgICAgIGRvbUVsZW1lbnQsXG4gICAgICBwcm9wS2V5LFxuICAgICAgYXR0cmlidXRlTmFtZSxcbiAgICAgIHZhbHVlLFxuICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICApIHtcbiAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICBkb21FbGVtZW50ID0gZG9tRWxlbWVudC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICBpZiAobnVsbCA9PT0gZG9tRWxlbWVudClcbiAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmIChpc05hTih2YWx1ZSkpIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgZWxzZSBpZiAobnVsbCAhPSB2YWx1ZSlcbiAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICFpc05hTih2YWx1ZSkgJiZcbiAgICAgICAgICAgICAgKGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odmFsdWUsIHByb3BLZXkpLFxuICAgICAgICAgICAgICBkb21FbGVtZW50ID09PSBcIlwiICsgdmFsdWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKHByb3BLZXksIGRvbUVsZW1lbnQsIHZhbHVlLCBzZXJ2ZXJEaWZmZXJlbmNlcyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGh5ZHJhdGVTYW5pdGl6ZWRBdHRyaWJ1dGUoXG4gICAgICBkb21FbGVtZW50LFxuICAgICAgcHJvcEtleSxcbiAgICAgIGF0dHJpYnV0ZU5hbWUsXG4gICAgICB2YWx1ZSxcbiAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgKSB7XG4gICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgZG9tRWxlbWVudCA9IGRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgaWYgKG51bGwgPT09IGRvbUVsZW1lbnQpXG4gICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICBlbHNlIGlmIChudWxsICE9IHZhbHVlKVxuICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odmFsdWUsIHByb3BLZXkpLFxuICAgICAgICAgICAgICAoYXR0cmlidXRlTmFtZSA9IHNhbml0aXplVVJMKFwiXCIgKyB2YWx1ZSkpLFxuICAgICAgICAgICAgICBkb21FbGVtZW50ID09PSBhdHRyaWJ1dGVOYW1lKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShwcm9wS2V5LCBkb21FbGVtZW50LCB2YWx1ZSwgc2VydmVyRGlmZmVyZW5jZXMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkaWZmSHlkcmF0ZWRQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHRhZywgcHJvcHMsIGhvc3RDb250ZXh0KSB7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgc2VydmVyRGlmZmVyZW5jZXMgPSB7fSxcbiAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMgPSBuZXcgU2V0KCksXG4gICAgICAgICAgYXR0cmlidXRlcyA9IGRvbUVsZW1lbnQuYXR0cmlidXRlcyxcbiAgICAgICAgICBpID0gMDtcbiAgICAgICAgaSA8IGF0dHJpYnV0ZXMubGVuZ3RoO1xuICAgICAgICBpKytcbiAgICAgIClcbiAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGVzW2ldLm5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgIGNhc2UgXCJ2YWx1ZVwiOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBcImNoZWNrZWRcIjpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgXCJzZWxlY3RlZFwiOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5hZGQoYXR0cmlidXRlc1tpXS5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgaWYgKGlzQ3VzdG9tRWxlbWVudCh0YWcpKVxuICAgICAgICBmb3IgKHZhciBwcm9wS2V5IGluIHByb3BzKSB7XG4gICAgICAgICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBwcm9wc1twcm9wS2V5XTtcbiAgICAgICAgICAgIGlmIChudWxsICE9IHZhbHVlKVxuICAgICAgICAgICAgICBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSlcbiAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiB2YWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyKHByb3BLZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgZWxzZSBpZiAoITAgIT09IHByb3BzLnN1cHByZXNzSHlkcmF0aW9uV2FybmluZylcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHByb3BLZXkpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJjaGlsZHJlblwiOlxuICAgICAgICAgICAgICAgICAgICAoXCJzdHJpbmdcIiAhPT0gdHlwZW9mIHZhbHVlICYmIFwibnVtYmVyXCIgIT09IHR5cGVvZiB2YWx1ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNoaWxkcmVuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LnRleHRDb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgY2FzZSBcInN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ1wiOlxuICAgICAgICAgICAgICAgICAgY2FzZSBcInN1cHByZXNzSHlkcmF0aW9uV2FybmluZ1wiOlxuICAgICAgICAgICAgICAgICAgY2FzZSBcImRlZmF1bHRWYWx1ZVwiOlxuICAgICAgICAgICAgICAgICAgY2FzZSBcImRlZmF1bHRDaGVja2VkXCI6XG4gICAgICAgICAgICAgICAgICBjYXNlIFwiaW5uZXJIVE1MXCI6XG4gICAgICAgICAgICAgICAgICBjYXNlIFwicmVmXCI6XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgY2FzZSBcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI6XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSBkb21FbGVtZW50LmlubmVySFRNTDtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSA/IHZhbHVlLl9faHRtbCA6IHZvaWQgMDtcbiAgICAgICAgICAgICAgICAgICAgbnVsbCAhPSB2YWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICgodmFsdWUgPSBub3JtYWxpemVIVE1MKGRvbUVsZW1lbnQsIHZhbHVlKSksXG4gICAgICAgICAgICAgICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgY2FzZSBcInN0eWxlXCI6XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUocHJvcEtleSk7XG4gICAgICAgICAgICAgICAgICAgIGRpZmZIeWRyYXRlZFN0eWxlcyhkb21FbGVtZW50LCB2YWx1ZSwgc2VydmVyRGlmZmVyZW5jZXMpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJvZmZzZXRQYXJlbnRcIjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJvZmZzZXRUb3BcIjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJvZmZzZXRMZWZ0XCI6XG4gICAgICAgICAgICAgICAgICBjYXNlIFwib2Zmc2V0V2lkdGhcIjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJvZmZzZXRIZWlnaHRcIjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJpc0NvbnRlbnRFZGl0YWJsZVwiOlxuICAgICAgICAgICAgICAgICAgY2FzZSBcIm91dGVyVGV4dFwiOlxuICAgICAgICAgICAgICAgICAgY2FzZSBcIm91dGVySFRNTFwiOlxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKHByb3BLZXkudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgXCJBc3NpZ25tZW50IHRvIHJlYWQtb25seSBwcm9wZXJ0eSB3aWxsIHJlc3VsdCBpbiBhIG5vLW9wOiBgJXNgXCIsXG4gICAgICAgICAgICAgICAgICAgICAgcHJvcEtleVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJjbGFzc05hbWVcIjpcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShcImNsYXNzXCIpO1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzID0gZ2V0VmFsdWVGb3JBdHRyaWJ1dGVPbkN1c3RvbUNvbXBvbmVudChcbiAgICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgIFwiY2xhc3NcIixcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgICAgICAgXCJjbGFzc05hbWVcIixcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaG9zdENvbnRleHQuY29udGV4dCA9PT0gSG9zdENvbnRleHROYW1lc3BhY2VOb25lICYmXG4gICAgICAgICAgICAgICAgICAgIFwic3ZnXCIgIT09IHRhZyAmJlxuICAgICAgICAgICAgICAgICAgICBcIm1hdGhcIiAhPT0gdGFnXG4gICAgICAgICAgICAgICAgICAgICAgPyBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKHByb3BLZXkudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGV4dHJhQXR0cmlidXRlcy5kZWxldGUocHJvcEtleSksXG4gICAgICAgICAgICAgICAgICAgICAgKGF0dHJpYnV0ZXMgPSBnZXRWYWx1ZUZvckF0dHJpYnV0ZU9uQ3VzdG9tQ29tcG9uZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgZWxzZVxuICAgICAgICBmb3IgKHZhbHVlIGluIHByb3BzKVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHByb3BzLmhhc093blByb3BlcnR5KHZhbHVlKSAmJlxuICAgICAgICAgICAgKChwcm9wS2V5ID0gcHJvcHNbdmFsdWVdKSwgbnVsbCAhPSBwcm9wS2V5KVxuICAgICAgICAgIClcbiAgICAgICAgICAgIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KHZhbHVlKSlcbiAgICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgcHJvcEtleSAmJlxuICAgICAgICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcih2YWx1ZSwgcHJvcEtleSk7XG4gICAgICAgICAgICBlbHNlIGlmICghMCAhPT0gcHJvcHMuc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nKVxuICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNoaWxkcmVuXCI6XG4gICAgICAgICAgICAgICAgICAoXCJzdHJpbmdcIiAhPT0gdHlwZW9mIHByb3BLZXkgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJudW1iZXJcIiAhPT0gdHlwZW9mIHByb3BLZXkpIHx8XG4gICAgICAgICAgICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShcbiAgICAgICAgICAgICAgICAgICAgICBcImNoaWxkcmVuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudC50ZXh0Q29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcInN1cHByZXNzSHlkcmF0aW9uV2FybmluZ1wiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJ2YWx1ZVwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJjaGVja2VkXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcInNlbGVjdGVkXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImRlZmF1bHRWYWx1ZVwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJkZWZhdWx0Q2hlY2tlZFwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJpbm5lckhUTUxcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwicmVmXCI6XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIjpcbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSBkb21FbGVtZW50LmlubmVySFRNTDtcbiAgICAgICAgICAgICAgICAgIHByb3BLZXkgPSBwcm9wS2V5ID8gcHJvcEtleS5fX2h0bWwgOiB2b2lkIDA7XG4gICAgICAgICAgICAgICAgICBudWxsICE9IHByb3BLZXkgJiZcbiAgICAgICAgICAgICAgICAgICAgKChwcm9wS2V5ID0gbm9ybWFsaXplSFRNTChkb21FbGVtZW50LCBwcm9wS2V5KSksXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgIT09IHByb3BLZXkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAoc2VydmVyRGlmZmVyZW5jZXNbdmFsdWVdID0geyBfX2h0bWw6IGF0dHJpYnV0ZXMgfSkpO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNsYXNzTmFtZVwiOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIFwiY2xhc3NcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ0YWJJbmRleFwiOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIFwidGFiaW5kZXhcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzdHlsZVwiOlxuICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICBkaWZmSHlkcmF0ZWRTdHlsZXMoZG9tRWxlbWVudCwgcHJvcEtleSwgc2VydmVyRGlmZmVyZW5jZXMpO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm11bHRpcGxlXCI6XG4gICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQubXVsdGlwbGUsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm11dGVkXCI6XG4gICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQubXV0ZWQsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcImF1dG9Gb2N1c1wiOlxuICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShcImF1dG9mb2N1c1wiKTtcbiAgICAgICAgICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQuYXV0b2ZvY3VzLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJkYXRhXCI6XG4gICAgICAgICAgICAgICAgICBpZiAoXCJvYmplY3RcIiAhPT0gdGFnKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzID0gZG9tRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhXCIpO1xuICAgICAgICAgICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgXCJzcmNcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiaHJlZlwiOlxuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgICAgICAgIFwiXCIgIT09IHByb3BLZXkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAoXCJhXCIgPT09IHRhZyAmJiBcImhyZWZcIiA9PT0gdmFsdWUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgKFwib2JqZWN0XCIgPT09IHRhZyAmJiBcImRhdGFcIiA9PT0gdmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBcInNyY1wiID09PSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FuIGVtcHR5IHN0cmluZyAoXCJcIikgd2FzIHBhc3NlZCB0byB0aGUgJXMgYXR0cmlidXRlLiBUaGlzIG1heSBjYXVzZSB0aGUgYnJvd3NlciB0byBkb3dubG9hZCB0aGUgd2hvbGUgcGFnZSBhZ2FpbiBvdmVyIHRoZSBuZXR3b3JrLiBUbyBmaXggdGhpcywgZWl0aGVyIGRvIG5vdCByZW5kZXIgdGhlIGVsZW1lbnQgYXQgYWxsIG9yIHBhc3MgbnVsbCB0byAlcyBpbnN0ZWFkIG9mIGFuIGVtcHR5IHN0cmluZy4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICA6IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdBbiBlbXB0eSBzdHJpbmcgKFwiXCIpIHdhcyBwYXNzZWQgdG8gdGhlICVzIGF0dHJpYnV0ZS4gVG8gZml4IHRoaXMsIGVpdGhlciBkbyBub3QgcmVuZGVyIHRoZSBlbGVtZW50IGF0IGFsbCBvciBwYXNzIG51bGwgdG8gJXMgaW5zdGVhZCBvZiBhbiBlbXB0eSBzdHJpbmcuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVTYW5pdGl6ZWRBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJhY3Rpb25cIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiZm9ybUFjdGlvblwiOlxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyA9IGRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBwcm9wS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUodmFsdWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICAgICAgICAgIFwiZm9ybUFjdGlvblwiID09PSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgID8gKGV4dHJhQXR0cmlidXRlcy5kZWxldGUoXCJuYW1lXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShcImZvcm1lbmN0eXBlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShcImZvcm1tZXRob2RcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKFwiZm9ybXRhcmdldFwiKSlcbiAgICAgICAgICAgICAgICAgICAgICA6IChleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKFwiZW5jdHlwZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUoXCJtZXRob2RcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKFwidGFyZ2V0XCIpKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZXMgPT09IEVYUEVDVEVEX0ZPUk1fQUNUSU9OX1VSTCkge1xuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKHZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBoeWRyYXRlU2FuaXRpemVkQXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ4bGlua0hyZWZcIjpcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVTYW5pdGl6ZWRBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBcInhsaW5rOmhyZWZcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjb250ZW50RWRpdGFibGVcIjpcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVCb29sZWFuaXNoQXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJjb250ZW50ZWRpdGFibGVcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzcGVsbENoZWNrXCI6XG4gICAgICAgICAgICAgICAgICBoeWRyYXRlQm9vbGVhbmlzaEF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIFwic3BlbGxjaGVja1wiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcImRyYWdnYWJsZVwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJhdXRvUmV2ZXJzZVwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImZvY3VzYWJsZVwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJwcmVzZXJ2ZUFscGhhXCI6XG4gICAgICAgICAgICAgICAgICBoeWRyYXRlQm9vbGVhbmlzaEF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcImFsbG93RnVsbFNjcmVlblwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJhc3luY1wiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJhdXRvUGxheVwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJjb250cm9sc1wiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJkZWZhdWx0XCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImRlZmVyXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImRpc2FibGVkXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImRpc2FibGVQaWN0dXJlSW5QaWN0dXJlXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImRpc2FibGVSZW1vdGVQbGF5YmFja1wiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJmb3JtTm9WYWxpZGF0ZVwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJoaWRkZW5cIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwibG9vcFwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJub01vZHVsZVwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJub1ZhbGlkYXRlXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcIm9wZW5cIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwicGxheXNJbmxpbmVcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwicmVhZE9ubHlcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwicmVxdWlyZWRcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwicmV2ZXJzZWRcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwic2NvcGVkXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcInNlYW1sZXNzXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcIml0ZW1TY29wZVwiOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUJvb2xlYW5BdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNhcHR1cmVcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiZG93bmxvYWRcIjpcbiAgICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGRvbUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gKGF0dHJpYnV0ZXMgPSB2YWx1ZSksXG4gICAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXMkanNjb21wJDAgPSBzZXJ2ZXJEaWZmZXJlbmNlcztcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGkuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobnVsbCA9PT0gaSlcbiAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghMSA9PT0gcHJvcEtleSkgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG51bGwgIT0gcHJvcEtleSlcbiAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoITAgPT09IHByb3BLZXkgJiYgXCJcIiA9PT0gaSkgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24ocHJvcEtleSwgYXR0cmlidXRlcyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9PT0gXCJcIiArIHByb3BLZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzJGpzY29tcCQwXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwiY29sc1wiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJyb3dzXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcInNpemVcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwic3BhblwiOlxuICAgICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBpID0gZG9tRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZXMgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXMkanNjb21wJDAgPSBzZXJ2ZXJEaWZmZXJlbmNlcztcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGkuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobnVsbCA9PT0gaSlcbiAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4ocHJvcEtleSkgfHwgMSA+IHByb3BLZXkpIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChudWxsICE9IHByb3BLZXkpXG4gICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgcHJvcEtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKGlzTmFOKHByb3BLZXkpIHx8IDEgPiBwcm9wS2V5KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKHByb3BLZXksIGF0dHJpYnV0ZXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPT09IFwiXCIgKyBwcm9wS2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlcyRqc2NvbXAkMFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcInJvd1NwYW5cIjpcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVOdW1lcmljQXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJyb3dzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwic3RhcnRcIjpcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVOdW1lcmljQXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwieEhlaWdodFwiOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIFwieC1oZWlnaHRcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ4bGlua0FjdHVhdGVcIjpcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBcInhsaW5rOmFjdHVhdGVcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ4bGlua0FyY3JvbGVcIjpcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBcInhsaW5rOmFyY3JvbGVcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ4bGlua1JvbGVcIjpcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBcInhsaW5rOnJvbGVcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ4bGlua1Nob3dcIjpcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBcInhsaW5rOnNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ4bGlua1RpdGxlXCI6XG4gICAgICAgICAgICAgICAgICBoeWRyYXRlQXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJ4bGluazp0aXRsZVwiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcInhsaW5rVHlwZVwiOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIFwieGxpbms6dHlwZVwiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcInhtbEJhc2VcIjpcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBcInhtbDpiYXNlXCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwieG1sTGFuZ1wiOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIFwieG1sOmxhbmdcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ4bWxTcGFjZVwiOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIFwieG1sOnNwYWNlXCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwiaW5lcnRcIjpcbiAgICAgICAgICAgICAgICAgIFwiXCIgIT09IHByb3BLZXkgfHxcbiAgICAgICAgICAgICAgICAgICAgZGlkV2FybkZvck5ld0Jvb2xlYW5Qcm9wc1dpdGhFbXB0eVZhbHVlW3ZhbHVlXSB8fFxuICAgICAgICAgICAgICAgICAgICAoKGRpZFdhcm5Gb3JOZXdCb29sZWFuUHJvcHNXaXRoRW1wdHlWYWx1ZVt2YWx1ZV0gPSAhMCksXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgXCJSZWNlaXZlZCBhbiBlbXB0eSBzdHJpbmcgZm9yIGEgYm9vbGVhbiBhdHRyaWJ1dGUgYCVzYC4gVGhpcyB3aWxsIHRyZWF0IHRoZSBhdHRyaWJ1dGUgYXMgaWYgaXQgd2VyZSBmYWxzZS4gRWl0aGVyIHBhc3MgYGZhbHNlYCB0byBzaWxlbmNlIHRoaXMgd2FybmluZywgb3IgcGFzcyBgdHJ1ZWAgaWYgeW91IHVzZWQgYW4gZW1wdHkgc3RyaW5nIGluIGVhcmxpZXIgdmVyc2lvbnMgb2YgUmVhY3QgdG8gaW5kaWNhdGUgdGhpcyBhdHRyaWJ1dGUgaXMgdHJ1ZS5cIixcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVCb29sZWFuQXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAhKDIgPCB2YWx1ZS5sZW5ndGgpIHx8XG4gICAgICAgICAgICAgICAgICAgIChcIm9cIiAhPT0gdmFsdWVbMF0gJiYgXCJPXCIgIT09IHZhbHVlWzBdKSB8fFxuICAgICAgICAgICAgICAgICAgICAoXCJuXCIgIT09IHZhbHVlWzFdICYmIFwiTlwiICE9PSB2YWx1ZVsxXSlcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBpID0gZ2V0QXR0cmlidXRlQWxpYXModmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzID0gITE7XG4gICAgICAgICAgICAgICAgICAgIGhvc3RDb250ZXh0LmNvbnRleHQgPT09IEhvc3RDb250ZXh0TmFtZXNwYWNlTm9uZSAmJlxuICAgICAgICAgICAgICAgICAgICBcInN2Z1wiICE9PSB0YWcgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJtYXRoXCIgIT09IHRhZ1xuICAgICAgICAgICAgICAgICAgICAgID8gZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShpLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICAgICAgICAgICAgOiAoKGF0dHJpYnV0ZU5hbWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChhdHRyaWJ1dGVOYW1lID0gcG9zc2libGVTdGFuZGFyZE5hbWVzLmhhc093blByb3BlcnR5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gcG9zc2libGVTdGFuZGFyZE5hbWVzW2F0dHJpYnV0ZU5hbWVdIHx8IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgIT09IGF0dHJpYnV0ZU5hbWUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZSAhPT0gdmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKChhdHRyaWJ1dGVzID0gITApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKGF0dHJpYnV0ZU5hbWUpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUoaSkpO1xuICAgICAgICAgICAgICAgICAgICBhOiBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgKChhdHRyaWJ1dGVOYW1lID0gZG9tRWxlbWVudCksXG4gICAgICAgICAgICAgICAgICAgICAgKHNlcnZlckRpZmZlcmVuY2VzJGpzY29tcCQwID0gaSksXG4gICAgICAgICAgICAgICAgICAgICAgKGkgPSBwcm9wS2V5KSxcbiAgICAgICAgICAgICAgICAgICAgICBpc0F0dHJpYnV0ZU5hbWVTYWZlKHNlcnZlckRpZmZlcmVuY2VzJGpzY29tcCQwKSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWUuaGFzQXR0cmlidXRlKHNlcnZlckRpZmZlcmVuY2VzJGpzY29tcCQwKVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIChhdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlTmFtZS5nZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzJGpzY29tcCQwXG4gICAgICAgICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzJGpzY29tcCQwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChpID0gYXR0cmlidXRlTmFtZSA9PT0gXCJcIiArIGkgPyBpIDogYXR0cmlidXRlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGF0dHJpYnV0ZU5hbWUgPSBzZXJ2ZXJEaWZmZXJlbmNlcyRqc2NvbXAkMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2xpY2UoMCwgNSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXRhLVwiICE9PSBhdHRyaWJ1dGVOYW1lICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYXJpYS1cIiAhPT0gYXR0cmlidXRlTmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHZvaWQgMCA9PT0gaSA/IHZvaWQgMCA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGkgPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgfHxcbiAgICAgICAgICAgICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAwIDwgZXh0cmFBdHRyaWJ1dGVzLnNpemUgJiZcbiAgICAgICAgITAgIT09IHByb3BzLnN1cHByZXNzSHlkcmF0aW9uV2FybmluZyAmJlxuICAgICAgICB3YXJuRm9yRXh0cmFBdHRyaWJ1dGVzKGRvbUVsZW1lbnQsIGV4dHJhQXR0cmlidXRlcywgc2VydmVyRGlmZmVyZW5jZXMpO1xuICAgICAgcmV0dXJuIDAgPT09IE9iamVjdC5rZXlzKHNlcnZlckRpZmZlcmVuY2VzKS5sZW5ndGhcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogc2VydmVyRGlmZmVyZW5jZXM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByb3BOYW1lc0xpc3RKb2luKGxpc3QsIGNvbWJpbmF0b3IpIHtcbiAgICAgIHN3aXRjaCAobGlzdC5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmV0dXJuIGxpc3RbMF07XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICByZXR1cm4gbGlzdFswXSArIFwiIFwiICsgY29tYmluYXRvciArIFwiIFwiICsgbGlzdFsxXTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgbGlzdC5zbGljZSgwLCAtMSkuam9pbihcIiwgXCIpICtcbiAgICAgICAgICAgIFwiLCBcIiArXG4gICAgICAgICAgICBjb21iaW5hdG9yICtcbiAgICAgICAgICAgIFwiIFwiICtcbiAgICAgICAgICAgIGxpc3RbbGlzdC5sZW5ndGggLSAxXVxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldE93bmVyRG9jdW1lbnRGcm9tUm9vdENvbnRhaW5lcihyb290Q29udGFpbmVyRWxlbWVudCkge1xuICAgICAgcmV0dXJuIDkgPT09IHJvb3RDb250YWluZXJFbGVtZW50Lm5vZGVUeXBlXG4gICAgICAgID8gcm9vdENvbnRhaW5lckVsZW1lbnRcbiAgICAgICAgOiByb290Q29udGFpbmVyRWxlbWVudC5vd25lckRvY3VtZW50O1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRPd25Ib3N0Q29udGV4dChuYW1lc3BhY2VVUkkpIHtcbiAgICAgIHN3aXRjaCAobmFtZXNwYWNlVVJJKSB7XG4gICAgICAgIGNhc2UgU1ZHX05BTUVTUEFDRTpcbiAgICAgICAgICByZXR1cm4gSG9zdENvbnRleHROYW1lc3BhY2VTdmc7XG4gICAgICAgIGNhc2UgTUFUSF9OQU1FU1BBQ0U6XG4gICAgICAgICAgcmV0dXJuIEhvc3RDb250ZXh0TmFtZXNwYWNlTWF0aDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gSG9zdENvbnRleHROYW1lc3BhY2VOb25lO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRDaGlsZEhvc3RDb250ZXh0UHJvZChwYXJlbnROYW1lc3BhY2UsIHR5cGUpIHtcbiAgICAgIGlmIChwYXJlbnROYW1lc3BhY2UgPT09IEhvc3RDb250ZXh0TmFtZXNwYWNlTm9uZSlcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSBcInN2Z1wiOlxuICAgICAgICAgICAgcmV0dXJuIEhvc3RDb250ZXh0TmFtZXNwYWNlU3ZnO1xuICAgICAgICAgIGNhc2UgXCJtYXRoXCI6XG4gICAgICAgICAgICByZXR1cm4gSG9zdENvbnRleHROYW1lc3BhY2VNYXRoO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gSG9zdENvbnRleHROYW1lc3BhY2VOb25lO1xuICAgICAgICB9XG4gICAgICByZXR1cm4gcGFyZW50TmFtZXNwYWNlID09PSBIb3N0Q29udGV4dE5hbWVzcGFjZVN2ZyAmJlxuICAgICAgICBcImZvcmVpZ25PYmplY3RcIiA9PT0gdHlwZVxuICAgICAgICA/IEhvc3RDb250ZXh0TmFtZXNwYWNlTm9uZVxuICAgICAgICA6IHBhcmVudE5hbWVzcGFjZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2hvdWxkU2V0VGV4dENvbnRlbnQodHlwZSwgcHJvcHMpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIFwidGV4dGFyZWFcIiA9PT0gdHlwZSB8fFxuICAgICAgICBcIm5vc2NyaXB0XCIgPT09IHR5cGUgfHxcbiAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHByb3BzLmNoaWxkcmVuIHx8XG4gICAgICAgIFwibnVtYmVyXCIgPT09IHR5cGVvZiBwcm9wcy5jaGlsZHJlbiB8fFxuICAgICAgICBcImJpZ2ludFwiID09PSB0eXBlb2YgcHJvcHMuY2hpbGRyZW4gfHxcbiAgICAgICAgKFwib2JqZWN0XCIgPT09IHR5cGVvZiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCAmJlxuICAgICAgICAgIG51bGwgIT09IHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MICYmXG4gICAgICAgICAgbnVsbCAhPSBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWwpXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzaG91bGRBdHRlbXB0RWFnZXJUcmFuc2l0aW9uKCkge1xuICAgICAgdmFyIGV2ZW50ID0gd2luZG93LmV2ZW50O1xuICAgICAgaWYgKGV2ZW50ICYmIFwicG9wc3RhdGVcIiA9PT0gZXZlbnQudHlwZSkge1xuICAgICAgICBpZiAoZXZlbnQgPT09IGN1cnJlbnRQb3BzdGF0ZVRyYW5zaXRpb25FdmVudCkgcmV0dXJuICExO1xuICAgICAgICBjdXJyZW50UG9wc3RhdGVUcmFuc2l0aW9uRXZlbnQgPSBldmVudDtcbiAgICAgICAgcmV0dXJuICEwO1xuICAgICAgfVxuICAgICAgY3VycmVudFBvcHN0YXRlVHJhbnNpdGlvbkV2ZW50ID0gbnVsbDtcbiAgICAgIHJldHVybiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaGFuZGxlRXJyb3JJbk5leHRUaWNrKGVycm9yKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0TW91bnQoZG9tRWxlbWVudCwgdHlwZSwgbmV3UHJvcHMpIHtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFwiYnV0dG9uXCI6XG4gICAgICAgIGNhc2UgXCJpbnB1dFwiOlxuICAgICAgICBjYXNlIFwic2VsZWN0XCI6XG4gICAgICAgIGNhc2UgXCJ0ZXh0YXJlYVwiOlxuICAgICAgICAgIG5ld1Byb3BzLmF1dG9Gb2N1cyAmJiBkb21FbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJpbWdcIjpcbiAgICAgICAgICBuZXdQcm9wcy5zcmNcbiAgICAgICAgICAgID8gKGRvbUVsZW1lbnQuc3JjID0gbmV3UHJvcHMuc3JjKVxuICAgICAgICAgICAgOiBuZXdQcm9wcy5zcmNTZXQgJiYgKGRvbUVsZW1lbnQuc3Jjc2V0ID0gbmV3UHJvcHMuc3JjU2V0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0SHlkcmF0ZWRJbnN0YW5jZSgpIHt9XG4gICAgZnVuY3Rpb24gY29tbWl0VXBkYXRlKGRvbUVsZW1lbnQsIHR5cGUsIG9sZFByb3BzLCBuZXdQcm9wcykge1xuICAgICAgdXBkYXRlUHJvcGVydGllcyhkb21FbGVtZW50LCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMpO1xuICAgICAgZG9tRWxlbWVudFtpbnRlcm5hbFByb3BzS2V5XSA9IG5ld1Byb3BzO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNldFRleHRDb250ZW50KGRvbUVsZW1lbnQpIHtcbiAgICAgIHNldFRleHRDb250ZW50KGRvbUVsZW1lbnQsIFwiXCIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRUZXh0VXBkYXRlKHRleHRJbnN0YW5jZSwgb2xkVGV4dCwgbmV3VGV4dCkge1xuICAgICAgdGV4dEluc3RhbmNlLm5vZGVWYWx1ZSA9IG5ld1RleHQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhcm5Gb3JSZWFjdENoaWxkcmVuQ29uZmxpY3QoY29udGFpbmVyKSB7XG4gICAgICBpZiAoIWNvbnRhaW5lci5fX3JlYWN0V2FybmVkQWJvdXRDaGlsZHJlbkNvbmZsaWN0KSB7XG4gICAgICAgIHZhciBwcm9wcyA9IGNvbnRhaW5lcltpbnRlcm5hbFByb3BzS2V5XSB8fCBudWxsO1xuICAgICAgICBpZiAobnVsbCAhPT0gcHJvcHMpIHtcbiAgICAgICAgICB2YXIgZmliZXIgPSBnZXRJbnN0YW5jZUZyb21Ob2RlKGNvbnRhaW5lcik7XG4gICAgICAgICAgbnVsbCAhPT0gZmliZXIgJiZcbiAgICAgICAgICAgIChcInN0cmluZ1wiID09PSB0eXBlb2YgcHJvcHMuY2hpbGRyZW4gfHxcbiAgICAgICAgICAgIFwibnVtYmVyXCIgPT09IHR5cGVvZiBwcm9wcy5jaGlsZHJlblxuICAgICAgICAgICAgICA/ICgoY29udGFpbmVyLl9fcmVhY3RXYXJuZWRBYm91dENoaWxkcmVuQ29uZmxpY3QgPSAhMCksXG4gICAgICAgICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoZmliZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICdDYW5ub3QgdXNlIGEgcmVmIG9uIGEgUmVhY3QgZWxlbWVudCBhcyBhIGNvbnRhaW5lciB0byBgY3JlYXRlUm9vdGAgb3IgYGNyZWF0ZVBvcnRhbGAgaWYgdGhhdCBlbGVtZW50IGFsc28gc2V0cyBcImNoaWxkcmVuXCIgdGV4dCBjb250ZW50IHVzaW5nIFJlYWN0LiBJdCBzaG91bGQgYmUgYSBsZWFmIHdpdGggbm8gY2hpbGRyZW4uIE90aGVyd2lzZSBpdFxcJ3MgYW1iaWd1b3VzIHdoaWNoIGNoaWxkcmVuIHNob3VsZCBiZSB1c2VkLidcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgIDogbnVsbCAhPSBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCAmJlxuICAgICAgICAgICAgICAgICgoY29udGFpbmVyLl9fcmVhY3RXYXJuZWRBYm91dENoaWxkcmVuQ29uZmxpY3QgPSAhMCksXG4gICAgICAgICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoZmliZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICdDYW5ub3QgdXNlIGEgcmVmIG9uIGEgUmVhY3QgZWxlbWVudCBhcyBhIGNvbnRhaW5lciB0byBgY3JlYXRlUm9vdGAgb3IgYGNyZWF0ZVBvcnRhbGAgaWYgdGhhdCBlbGVtZW50IGFsc28gc2V0cyBcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCIgdXNpbmcgUmVhY3QuIEl0IHNob3VsZCBiZSBhIGxlYWYgd2l0aCBubyBjaGlsZHJlbi4gT3RoZXJ3aXNlIGl0XFwncyBhbWJpZ3VvdXMgd2hpY2ggY2hpbGRyZW4gc2hvdWxkIGJlIHVzZWQuJ1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzU2luZ2xldG9uU2NvcGUodHlwZSkge1xuICAgICAgcmV0dXJuIFwiaGVhZFwiID09PSB0eXBlO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZW1vdmVDaGlsZChwYXJlbnRJbnN0YW5jZSwgY2hpbGQpIHtcbiAgICAgIHBhcmVudEluc3RhbmNlLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVtb3ZlQ2hpbGRGcm9tQ29udGFpbmVyKGNvbnRhaW5lciwgY2hpbGQpIHtcbiAgICAgICg5ID09PSBjb250YWluZXIubm9kZVR5cGVcbiAgICAgICAgPyBjb250YWluZXIuYm9keVxuICAgICAgICA6IFwiSFRNTFwiID09PSBjb250YWluZXIubm9kZU5hbWVcbiAgICAgICAgICA/IGNvbnRhaW5lci5vd25lckRvY3VtZW50LmJvZHlcbiAgICAgICAgICA6IGNvbnRhaW5lclxuICAgICAgKS5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNsZWFySHlkcmF0aW9uQm91bmRhcnkocGFyZW50SW5zdGFuY2UsIGh5ZHJhdGlvbkluc3RhbmNlKSB7XG4gICAgICB2YXIgbm9kZSA9IGh5ZHJhdGlvbkluc3RhbmNlLFxuICAgICAgICBkZXB0aCA9IDA7XG4gICAgICBkbyB7XG4gICAgICAgIHZhciBuZXh0Tm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7XG4gICAgICAgIHBhcmVudEluc3RhbmNlLnJlbW92ZUNoaWxkKG5vZGUpO1xuICAgICAgICBpZiAobmV4dE5vZGUgJiYgOCA9PT0gbmV4dE5vZGUubm9kZVR5cGUpXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKChub2RlID0gbmV4dE5vZGUuZGF0YSksXG4gICAgICAgICAgICBub2RlID09PSBTVVNQRU5TRV9FTkRfREFUQSB8fCBub2RlID09PSBBQ1RJVklUWV9FTkRfREFUQSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmICgwID09PSBkZXB0aCkge1xuICAgICAgICAgICAgICBwYXJlbnRJbnN0YW5jZS5yZW1vdmVDaGlsZChuZXh0Tm9kZSk7XG4gICAgICAgICAgICAgIHJldHJ5SWZCbG9ja2VkT24oaHlkcmF0aW9uSW5zdGFuY2UpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZXB0aC0tO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBub2RlID09PSBTVVNQRU5TRV9TVEFSVF9EQVRBIHx8XG4gICAgICAgICAgICBub2RlID09PSBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEEgfHxcbiAgICAgICAgICAgIG5vZGUgPT09IFNVU1BFTlNFX1FVRVVFRF9TVEFSVF9EQVRBIHx8XG4gICAgICAgICAgICBub2RlID09PSBTVVNQRU5TRV9GQUxMQkFDS19TVEFSVF9EQVRBIHx8XG4gICAgICAgICAgICBub2RlID09PSBBQ1RJVklUWV9TVEFSVF9EQVRBXG4gICAgICAgICAgKVxuICAgICAgICAgICAgZGVwdGgrKztcbiAgICAgICAgICBlbHNlIGlmIChub2RlID09PSBQUkVBTUJMRV9DT05UUklCVVRJT05fSFRNTClcbiAgICAgICAgICAgIHJlbGVhc2VTaW5nbGV0b25JbnN0YW5jZShcbiAgICAgICAgICAgICAgcGFyZW50SW5zdGFuY2Uub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgZWxzZSBpZiAobm9kZSA9PT0gUFJFQU1CTEVfQ09OVFJJQlVUSU9OX0hFQUQpIHtcbiAgICAgICAgICAgIG5vZGUgPSBwYXJlbnRJbnN0YW5jZS5vd25lckRvY3VtZW50LmhlYWQ7XG4gICAgICAgICAgICByZWxlYXNlU2luZ2xldG9uSW5zdGFuY2Uobm9kZSk7XG4gICAgICAgICAgICBmb3IgKHZhciBub2RlJGpzY29tcCQwID0gbm9kZS5maXJzdENoaWxkOyBub2RlJGpzY29tcCQwOyApIHtcbiAgICAgICAgICAgICAgdmFyIG5leHROb2RlJGpzY29tcCQwID0gbm9kZSRqc2NvbXAkMC5uZXh0U2libGluZyxcbiAgICAgICAgICAgICAgICBub2RlTmFtZSA9IG5vZGUkanNjb21wJDAubm9kZU5hbWU7XG4gICAgICAgICAgICAgIG5vZGUkanNjb21wJDBbaW50ZXJuYWxIb2lzdGFibGVNYXJrZXJdIHx8XG4gICAgICAgICAgICAgICAgXCJTQ1JJUFRcIiA9PT0gbm9kZU5hbWUgfHxcbiAgICAgICAgICAgICAgICBcIlNUWUxFXCIgPT09IG5vZGVOYW1lIHx8XG4gICAgICAgICAgICAgICAgKFwiTElOS1wiID09PSBub2RlTmFtZSAmJlxuICAgICAgICAgICAgICAgICAgXCJzdHlsZXNoZWV0XCIgPT09IG5vZGUkanNjb21wJDAucmVsLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVDaGlsZChub2RlJGpzY29tcCQwKTtcbiAgICAgICAgICAgICAgbm9kZSRqc2NvbXAkMCA9IG5leHROb2RlJGpzY29tcCQwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgbm9kZSA9PT0gUFJFQU1CTEVfQ09OVFJJQlVUSU9OX0JPRFkgJiZcbiAgICAgICAgICAgICAgcmVsZWFzZVNpbmdsZXRvbkluc3RhbmNlKHBhcmVudEluc3RhbmNlLm93bmVyRG9jdW1lbnQuYm9keSk7XG4gICAgICAgIG5vZGUgPSBuZXh0Tm9kZTtcbiAgICAgIH0gd2hpbGUgKG5vZGUpO1xuICAgICAgcmV0cnlJZkJsb2NrZWRPbihoeWRyYXRpb25JbnN0YW5jZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhpZGVPclVuaGlkZURlaHlkcmF0ZWRCb3VuZGFyeShzdXNwZW5zZUluc3RhbmNlLCBpc0hpZGRlbikge1xuICAgICAgdmFyIG5vZGUgPSBzdXNwZW5zZUluc3RhbmNlO1xuICAgICAgc3VzcGVuc2VJbnN0YW5jZSA9IDA7XG4gICAgICBkbyB7XG4gICAgICAgIHZhciBuZXh0Tm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7XG4gICAgICAgIDEgPT09IG5vZGUubm9kZVR5cGVcbiAgICAgICAgICA/IGlzSGlkZGVuXG4gICAgICAgICAgICA/ICgobm9kZS5fc3Rhc2hlZERpc3BsYXkgPSBub2RlLnN0eWxlLmRpc3BsYXkpLFxuICAgICAgICAgICAgICAobm9kZS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCIpKVxuICAgICAgICAgICAgOiAoKG5vZGUuc3R5bGUuZGlzcGxheSA9IG5vZGUuX3N0YXNoZWREaXNwbGF5IHx8IFwiXCIpLFxuICAgICAgICAgICAgICBcIlwiID09PSBub2RlLmdldEF0dHJpYnV0ZShcInN0eWxlXCIpICYmXG4gICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoXCJzdHlsZVwiKSlcbiAgICAgICAgICA6IDMgPT09IG5vZGUubm9kZVR5cGUgJiZcbiAgICAgICAgICAgIChpc0hpZGRlblxuICAgICAgICAgICAgICA/ICgobm9kZS5fc3Rhc2hlZFRleHQgPSBub2RlLm5vZGVWYWx1ZSksIChub2RlLm5vZGVWYWx1ZSA9IFwiXCIpKVxuICAgICAgICAgICAgICA6IChub2RlLm5vZGVWYWx1ZSA9IG5vZGUuX3N0YXNoZWRUZXh0IHx8IFwiXCIpKTtcbiAgICAgICAgaWYgKG5leHROb2RlICYmIDggPT09IG5leHROb2RlLm5vZGVUeXBlKVxuICAgICAgICAgIGlmICgoKG5vZGUgPSBuZXh0Tm9kZS5kYXRhKSwgbm9kZSA9PT0gU1VTUEVOU0VfRU5EX0RBVEEpKVxuICAgICAgICAgICAgaWYgKDAgPT09IHN1c3BlbnNlSW5zdGFuY2UpIGJyZWFrO1xuICAgICAgICAgICAgZWxzZSBzdXNwZW5zZUluc3RhbmNlLS07XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgKG5vZGUgIT09IFNVU1BFTlNFX1NUQVJUX0RBVEEgJiZcbiAgICAgICAgICAgICAgbm9kZSAhPT0gU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBICYmXG4gICAgICAgICAgICAgIG5vZGUgIT09IFNVU1BFTlNFX1FVRVVFRF9TVEFSVF9EQVRBICYmXG4gICAgICAgICAgICAgIG5vZGUgIT09IFNVU1BFTlNFX0ZBTExCQUNLX1NUQVJUX0RBVEEpIHx8XG4gICAgICAgICAgICAgIHN1c3BlbnNlSW5zdGFuY2UrKztcbiAgICAgICAgbm9kZSA9IG5leHROb2RlO1xuICAgICAgfSB3aGlsZSAobm9kZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhpZGVEZWh5ZHJhdGVkQm91bmRhcnkoc3VzcGVuc2VJbnN0YW5jZSkge1xuICAgICAgaGlkZU9yVW5oaWRlRGVoeWRyYXRlZEJvdW5kYXJ5KHN1c3BlbnNlSW5zdGFuY2UsICEwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaGlkZUluc3RhbmNlKGluc3RhbmNlKSB7XG4gICAgICBpbnN0YW5jZSA9IGluc3RhbmNlLnN0eWxlO1xuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2Uuc2V0UHJvcGVydHlcbiAgICAgICAgPyBpbnN0YW5jZS5zZXRQcm9wZXJ0eShcImRpc3BsYXlcIiwgXCJub25lXCIsIFwiaW1wb3J0YW50XCIpXG4gICAgICAgIDogKGluc3RhbmNlLmRpc3BsYXkgPSBcIm5vbmVcIik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhpZGVUZXh0SW5zdGFuY2UodGV4dEluc3RhbmNlKSB7XG4gICAgICB0ZXh0SW5zdGFuY2Uubm9kZVZhbHVlID0gXCJcIjtcbiAgICB9XG4gICAgZnVuY3Rpb24gdW5oaWRlRGVoeWRyYXRlZEJvdW5kYXJ5KGRlaHlkcmF0ZWRJbnN0YW5jZSkge1xuICAgICAgaGlkZU9yVW5oaWRlRGVoeWRyYXRlZEJvdW5kYXJ5KGRlaHlkcmF0ZWRJbnN0YW5jZSwgITEpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1bmhpZGVJbnN0YW5jZShpbnN0YW5jZSwgcHJvcHMpIHtcbiAgICAgIHByb3BzID0gcHJvcHNbU1RZTEVdO1xuICAgICAgcHJvcHMgPVxuICAgICAgICB2b2lkIDAgIT09IHByb3BzICYmIG51bGwgIT09IHByb3BzICYmIHByb3BzLmhhc093blByb3BlcnR5KFwiZGlzcGxheVwiKVxuICAgICAgICAgID8gcHJvcHMuZGlzcGxheVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgIGluc3RhbmNlLnN0eWxlLmRpc3BsYXkgPVxuICAgICAgICBudWxsID09IHByb3BzIHx8IFwiYm9vbGVhblwiID09PSB0eXBlb2YgcHJvcHMgPyBcIlwiIDogKFwiXCIgKyBwcm9wcykudHJpbSgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1bmhpZGVUZXh0SW5zdGFuY2UodGV4dEluc3RhbmNlLCB0ZXh0KSB7XG4gICAgICB0ZXh0SW5zdGFuY2Uubm9kZVZhbHVlID0gdGV4dDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2xlYXJDb250YWluZXJTcGFyaW5nbHkoY29udGFpbmVyKSB7XG4gICAgICB2YXIgbmV4dE5vZGUgPSBjb250YWluZXIuZmlyc3RDaGlsZDtcbiAgICAgIG5leHROb2RlICYmIDEwID09PSBuZXh0Tm9kZS5ub2RlVHlwZSAmJiAobmV4dE5vZGUgPSBuZXh0Tm9kZS5uZXh0U2libGluZyk7XG4gICAgICBmb3IgKDsgbmV4dE5vZGU7ICkge1xuICAgICAgICB2YXIgbm9kZSA9IG5leHROb2RlO1xuICAgICAgICBuZXh0Tm9kZSA9IG5leHROb2RlLm5leHRTaWJsaW5nO1xuICAgICAgICBzd2l0Y2ggKG5vZGUubm9kZU5hbWUpIHtcbiAgICAgICAgICBjYXNlIFwiSFRNTFwiOlxuICAgICAgICAgIGNhc2UgXCJIRUFEXCI6XG4gICAgICAgICAgY2FzZSBcIkJPRFlcIjpcbiAgICAgICAgICAgIGNsZWFyQ29udGFpbmVyU3BhcmluZ2x5KG5vZGUpO1xuICAgICAgICAgICAgZGV0YWNoRGVsZXRlZEluc3RhbmNlKG5vZGUpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgY2FzZSBcIlNDUklQVFwiOlxuICAgICAgICAgIGNhc2UgXCJTVFlMRVwiOlxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgY2FzZSBcIkxJTktcIjpcbiAgICAgICAgICAgIGlmIChcInN0eWxlc2hlZXRcIiA9PT0gbm9kZS5yZWwudG9Mb3dlckNhc2UoKSkgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjYW5IeWRyYXRlSW5zdGFuY2UoaW5zdGFuY2UsIHR5cGUsIHByb3BzLCBpblJvb3RPclNpbmdsZXRvbikge1xuICAgICAgZm9yICg7IDEgPT09IGluc3RhbmNlLm5vZGVUeXBlOyApIHtcbiAgICAgICAgdmFyIGFueVByb3BzID0gcHJvcHM7XG4gICAgICAgIGlmIChpbnN0YW5jZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSB0eXBlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhaW5Sb290T3JTaW5nbGV0b24gJiZcbiAgICAgICAgICAgIChcIklOUFVUXCIgIT09IGluc3RhbmNlLm5vZGVOYW1lIHx8IFwiaGlkZGVuXCIgIT09IGluc3RhbmNlLnR5cGUpXG4gICAgICAgICAgKVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSBpZiAoIWluUm9vdE9yU2luZ2xldG9uKVxuICAgICAgICAgIGlmIChcImlucHV0XCIgPT09IHR5cGUgJiYgXCJoaWRkZW5cIiA9PT0gaW5zdGFuY2UudHlwZSkge1xuICAgICAgICAgICAgY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbihhbnlQcm9wcy5uYW1lLCBcIm5hbWVcIik7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IG51bGwgPT0gYW55UHJvcHMubmFtZSA/IG51bGwgOiBcIlwiICsgYW55UHJvcHMubmFtZTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgXCJoaWRkZW5cIiA9PT0gYW55UHJvcHMudHlwZSAmJlxuICAgICAgICAgICAgICBpbnN0YW5jZS5nZXRBdHRyaWJ1dGUoXCJuYW1lXCIpID09PSBuYW1lXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgICB9IGVsc2UgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICBlbHNlIGlmICghaW5zdGFuY2VbaW50ZXJuYWxIb2lzdGFibGVNYXJrZXJdKVxuICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSBcIm1ldGFcIjpcbiAgICAgICAgICAgICAgaWYgKCFpbnN0YW5jZS5oYXNBdHRyaWJ1dGUoXCJpdGVtcHJvcFwiKSkgYnJlYWs7XG4gICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgICAgIGNhc2UgXCJsaW5rXCI6XG4gICAgICAgICAgICAgIG5hbWUgPSBpbnN0YW5jZS5nZXRBdHRyaWJ1dGUoXCJyZWxcIik7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBcInN0eWxlc2hlZXRcIiA9PT0gbmFtZSAmJlxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmhhc0F0dHJpYnV0ZShcImRhdGEtcHJlY2VkZW5jZVwiKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIG5hbWUgIT09IGFueVByb3BzLnJlbCB8fFxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmdldEF0dHJpYnV0ZShcImhyZWZcIikgIT09XG4gICAgICAgICAgICAgICAgICAobnVsbCA9PSBhbnlQcm9wcy5ocmVmIHx8IFwiXCIgPT09IGFueVByb3BzLmhyZWZcbiAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgIDogYW55UHJvcHMuaHJlZikgfHxcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5nZXRBdHRyaWJ1dGUoXCJjcm9zc29yaWdpblwiKSAhPT1cbiAgICAgICAgICAgICAgICAgIChudWxsID09IGFueVByb3BzLmNyb3NzT3JpZ2luXG4gICAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgICA6IGFueVByb3BzLmNyb3NzT3JpZ2luKSB8fFxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmdldEF0dHJpYnV0ZShcInRpdGxlXCIpICE9PVxuICAgICAgICAgICAgICAgICAgKG51bGwgPT0gYW55UHJvcHMudGl0bGUgPyBudWxsIDogYW55UHJvcHMudGl0bGUpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICAgICAgY2FzZSBcInN0eWxlXCI6XG4gICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5oYXNBdHRyaWJ1dGUoXCJkYXRhLXByZWNlZGVuY2VcIikpIGJyZWFrO1xuICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgICAgICBjYXNlIFwic2NyaXB0XCI6XG4gICAgICAgICAgICAgIG5hbWUgPSBpbnN0YW5jZS5nZXRBdHRyaWJ1dGUoXCJzcmNcIik7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAobmFtZSAhPT0gKG51bGwgPT0gYW55UHJvcHMuc3JjID8gbnVsbCA6IGFueVByb3BzLnNyYykgfHxcbiAgICAgICAgICAgICAgICAgIGluc3RhbmNlLmdldEF0dHJpYnV0ZShcInR5cGVcIikgIT09XG4gICAgICAgICAgICAgICAgICAgIChudWxsID09IGFueVByb3BzLnR5cGUgPyBudWxsIDogYW55UHJvcHMudHlwZSkgfHxcbiAgICAgICAgICAgICAgICAgIGluc3RhbmNlLmdldEF0dHJpYnV0ZShcImNyb3Nzb3JpZ2luXCIpICE9PVxuICAgICAgICAgICAgICAgICAgICAobnVsbCA9PSBhbnlQcm9wcy5jcm9zc09yaWdpblxuICAgICAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgIDogYW55UHJvcHMuY3Jvc3NPcmlnaW4pKSAmJlxuICAgICAgICAgICAgICAgIG5hbWUgJiZcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5oYXNBdHRyaWJ1dGUoXCJhc3luY1wiKSAmJlxuICAgICAgICAgICAgICAgICFpbnN0YW5jZS5oYXNBdHRyaWJ1dGUoXCJpdGVtcHJvcFwiKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgICB9XG4gICAgICAgIGluc3RhbmNlID0gZ2V0TmV4dEh5ZHJhdGFibGUoaW5zdGFuY2UubmV4dFNpYmxpbmcpO1xuICAgICAgICBpZiAobnVsbCA9PT0gaW5zdGFuY2UpIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNhbkh5ZHJhdGVUZXh0SW5zdGFuY2UoaW5zdGFuY2UsIHRleHQsIGluUm9vdE9yU2luZ2xldG9uKSB7XG4gICAgICBpZiAoXCJcIiA9PT0gdGV4dCkgcmV0dXJuIG51bGw7XG4gICAgICBmb3IgKDsgMyAhPT0gaW5zdGFuY2Uubm9kZVR5cGU7ICkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKDEgIT09IGluc3RhbmNlLm5vZGVUeXBlIHx8XG4gICAgICAgICAgICBcIklOUFVUXCIgIT09IGluc3RhbmNlLm5vZGVOYW1lIHx8XG4gICAgICAgICAgICBcImhpZGRlblwiICE9PSBpbnN0YW5jZS50eXBlKSAmJlxuICAgICAgICAgICFpblJvb3RPclNpbmdsZXRvblxuICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGluc3RhbmNlID0gZ2V0TmV4dEh5ZHJhdGFibGUoaW5zdGFuY2UubmV4dFNpYmxpbmcpO1xuICAgICAgICBpZiAobnVsbCA9PT0gaW5zdGFuY2UpIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjYW5IeWRyYXRlSHlkcmF0aW9uQm91bmRhcnkoaW5zdGFuY2UsIGluUm9vdE9yU2luZ2xldG9uKSB7XG4gICAgICBmb3IgKDsgOCAhPT0gaW5zdGFuY2Uubm9kZVR5cGU7ICkge1xuICAgICAgICBpZiAoIWluUm9vdE9yU2luZ2xldG9uKSByZXR1cm4gbnVsbDtcbiAgICAgICAgaW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZShpbnN0YW5jZS5uZXh0U2libGluZyk7XG4gICAgICAgIGlmIChudWxsID09PSBpbnN0YW5jZSkgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzU3VzcGVuc2VJbnN0YW5jZVBlbmRpbmcoaW5zdGFuY2UpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGluc3RhbmNlLmRhdGEgPT09IFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQSB8fFxuICAgICAgICBpbnN0YW5jZS5kYXRhID09PSBTVVNQRU5TRV9RVUVVRURfU1RBUlRfREFUQVxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNTdXNwZW5zZUluc3RhbmNlRmFsbGJhY2soaW5zdGFuY2UpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGluc3RhbmNlLmRhdGEgPT09IFNVU1BFTlNFX0ZBTExCQUNLX1NUQVJUX0RBVEEgfHxcbiAgICAgICAgKGluc3RhbmNlLmRhdGEgPT09IFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQSAmJlxuICAgICAgICAgIGluc3RhbmNlLm93bmVyRG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gRE9DVU1FTlRfUkVBRFlfU1RBVEVfTE9BRElORylcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlZ2lzdGVyU3VzcGVuc2VJbnN0YW5jZVJldHJ5KGluc3RhbmNlLCBjYWxsYmFjaykge1xuICAgICAgdmFyIG93bmVyRG9jdW1lbnQgPSBpbnN0YW5jZS5vd25lckRvY3VtZW50O1xuICAgICAgaWYgKGluc3RhbmNlLmRhdGEgPT09IFNVU1BFTlNFX1FVRVVFRF9TVEFSVF9EQVRBKVxuICAgICAgICBpbnN0YW5jZS5fcmVhY3RSZXRyeSA9IGNhbGxiYWNrO1xuICAgICAgZWxzZSBpZiAoXG4gICAgICAgIGluc3RhbmNlLmRhdGEgIT09IFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQSB8fFxuICAgICAgICBvd25lckRvY3VtZW50LnJlYWR5U3RhdGUgIT09IERPQ1VNRU5UX1JFQURZX1NUQVRFX0xPQURJTkdcbiAgICAgIClcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICBvd25lckRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIGxpc3RlbmVyKTtcbiAgICAgICAgfTtcbiAgICAgICAgb3duZXJEb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBsaXN0ZW5lcik7XG4gICAgICAgIGluc3RhbmNlLl9yZWFjdFJldHJ5ID0gbGlzdGVuZXI7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldE5leHRIeWRyYXRhYmxlKG5vZGUpIHtcbiAgICAgIGZvciAoOyBudWxsICE9IG5vZGU7IG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSB7XG4gICAgICAgIHZhciBub2RlVHlwZSA9IG5vZGUubm9kZVR5cGU7XG4gICAgICAgIGlmICgxID09PSBub2RlVHlwZSB8fCAzID09PSBub2RlVHlwZSkgYnJlYWs7XG4gICAgICAgIGlmICg4ID09PSBub2RlVHlwZSkge1xuICAgICAgICAgIG5vZGVUeXBlID0gbm9kZS5kYXRhO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG5vZGVUeXBlID09PSBTVVNQRU5TRV9TVEFSVF9EQVRBIHx8XG4gICAgICAgICAgICBub2RlVHlwZSA9PT0gU1VTUEVOU0VfRkFMTEJBQ0tfU1RBUlRfREFUQSB8fFxuICAgICAgICAgICAgbm9kZVR5cGUgPT09IFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQSB8fFxuICAgICAgICAgICAgbm9kZVR5cGUgPT09IFNVU1BFTlNFX1FVRVVFRF9TVEFSVF9EQVRBIHx8XG4gICAgICAgICAgICBub2RlVHlwZSA9PT0gQUNUSVZJVFlfU1RBUlRfREFUQSB8fFxuICAgICAgICAgICAgbm9kZVR5cGUgPT09IEZPUk1fU1RBVEVfSVNfTUFUQ0hJTkcgfHxcbiAgICAgICAgICAgIG5vZGVUeXBlID09PSBGT1JNX1NUQVRFX0lTX05PVF9NQVRDSElOR1xuICAgICAgICAgIClcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGlmIChub2RlVHlwZSA9PT0gU1VTUEVOU0VfRU5EX0RBVEEgfHwgbm9kZVR5cGUgPT09IEFDVElWSVRZX0VORF9EQVRBKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZUh5ZHJhdGFibGVJbnN0YW5jZUZvckRldldhcm5pbmdzKGluc3RhbmNlKSB7XG4gICAgICBpZiAoMSA9PT0gaW5zdGFuY2Uubm9kZVR5cGUpIHtcbiAgICAgICAgZm9yIChcbiAgICAgICAgICB2YXIgSlNDb21waWxlcl90ZW1wX2NvbnN0ID0gaW5zdGFuY2Uubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzID0ge30sXG4gICAgICAgICAgICBhdHRyaWJ1dGVzID0gaW5zdGFuY2UuYXR0cmlidXRlcyxcbiAgICAgICAgICAgIGkgPSAwO1xuICAgICAgICAgIGkgPCBhdHRyaWJ1dGVzLmxlbmd0aDtcbiAgICAgICAgICBpKytcbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFyIGF0dHIgPSBhdHRyaWJ1dGVzW2ldO1xuICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzW2dldFByb3BOYW1lRnJvbUF0dHJpYnV0ZU5hbWUoYXR0ci5uYW1lKV0gPVxuICAgICAgICAgICAgXCJzdHlsZVwiID09PSBhdHRyLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICA/IGdldFN0eWxlc09iamVjdEZyb21FbGVtZW50KGluc3RhbmNlKVxuICAgICAgICAgICAgICA6IGF0dHIudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgdHlwZTogSlNDb21waWxlcl90ZW1wX2NvbnN0LCBwcm9wczogc2VydmVyRGlmZmVyZW5jZXMgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiA4ID09PSBpbnN0YW5jZS5ub2RlVHlwZVxuICAgICAgICA/IGluc3RhbmNlLmRhdGEgPT09IEFDVElWSVRZX1NUQVJUX0RBVEFcbiAgICAgICAgICA/IHsgdHlwZTogXCJBY3Rpdml0eVwiLCBwcm9wczoge30gfVxuICAgICAgICAgIDogeyB0eXBlOiBcIlN1c3BlbnNlXCIsIHByb3BzOiB7fSB9XG4gICAgICAgIDogaW5zdGFuY2Uubm9kZVZhbHVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkaWZmSHlkcmF0ZWRUZXh0Rm9yRGV2V2FybmluZ3ModGV4dEluc3RhbmNlLCB0ZXh0LCBwYXJlbnRQcm9wcykge1xuICAgICAgcmV0dXJuIG51bGwgPT09IHBhcmVudFByb3BzIHx8XG4gICAgICAgICEwICE9PSBwYXJlbnRQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklOR11cbiAgICAgICAgPyAodGV4dEluc3RhbmNlLm5vZGVWYWx1ZSA9PT0gdGV4dFxuICAgICAgICAgICAgPyAodGV4dEluc3RhbmNlID0gbnVsbClcbiAgICAgICAgICAgIDogKCh0ZXh0ID0gbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKHRleHQpKSxcbiAgICAgICAgICAgICAgKHRleHRJbnN0YW5jZSA9XG4gICAgICAgICAgICAgICAgbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKHRleHRJbnN0YW5jZS5ub2RlVmFsdWUpID09PVxuICAgICAgICAgICAgICAgIHRleHRcbiAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgOiB0ZXh0SW5zdGFuY2Uubm9kZVZhbHVlKSksXG4gICAgICAgICAgdGV4dEluc3RhbmNlKVxuICAgICAgICA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldE5leHRIeWRyYXRhYmxlSW5zdGFuY2VBZnRlckh5ZHJhdGlvbkJvdW5kYXJ5KFxuICAgICAgaHlkcmF0aW9uSW5zdGFuY2VcbiAgICApIHtcbiAgICAgIGh5ZHJhdGlvbkluc3RhbmNlID0gaHlkcmF0aW9uSW5zdGFuY2UubmV4dFNpYmxpbmc7XG4gICAgICBmb3IgKHZhciBkZXB0aCA9IDA7IGh5ZHJhdGlvbkluc3RhbmNlOyApIHtcbiAgICAgICAgaWYgKDggPT09IGh5ZHJhdGlvbkluc3RhbmNlLm5vZGVUeXBlKSB7XG4gICAgICAgICAgdmFyIGRhdGEgPSBoeWRyYXRpb25JbnN0YW5jZS5kYXRhO1xuICAgICAgICAgIGlmIChkYXRhID09PSBTVVNQRU5TRV9FTkRfREFUQSB8fCBkYXRhID09PSBBQ1RJVklUWV9FTkRfREFUQSkge1xuICAgICAgICAgICAgaWYgKDAgPT09IGRlcHRoKVxuICAgICAgICAgICAgICByZXR1cm4gZ2V0TmV4dEh5ZHJhdGFibGUoaHlkcmF0aW9uSW5zdGFuY2UubmV4dFNpYmxpbmcpO1xuICAgICAgICAgICAgZGVwdGgtLTtcbiAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIChkYXRhICE9PSBTVVNQRU5TRV9TVEFSVF9EQVRBICYmXG4gICAgICAgICAgICAgIGRhdGEgIT09IFNVU1BFTlNFX0ZBTExCQUNLX1NUQVJUX0RBVEEgJiZcbiAgICAgICAgICAgICAgZGF0YSAhPT0gU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBICYmXG4gICAgICAgICAgICAgIGRhdGEgIT09IFNVU1BFTlNFX1FVRVVFRF9TVEFSVF9EQVRBICYmXG4gICAgICAgICAgICAgIGRhdGEgIT09IEFDVElWSVRZX1NUQVJUX0RBVEEpIHx8XG4gICAgICAgICAgICAgIGRlcHRoKys7XG4gICAgICAgIH1cbiAgICAgICAgaHlkcmF0aW9uSW5zdGFuY2UgPSBoeWRyYXRpb25JbnN0YW5jZS5uZXh0U2libGluZztcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRQYXJlbnRIeWRyYXRpb25Cb3VuZGFyeSh0YXJnZXRJbnN0YW5jZSkge1xuICAgICAgdGFyZ2V0SW5zdGFuY2UgPSB0YXJnZXRJbnN0YW5jZS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICBmb3IgKHZhciBkZXB0aCA9IDA7IHRhcmdldEluc3RhbmNlOyApIHtcbiAgICAgICAgaWYgKDggPT09IHRhcmdldEluc3RhbmNlLm5vZGVUeXBlKSB7XG4gICAgICAgICAgdmFyIGRhdGEgPSB0YXJnZXRJbnN0YW5jZS5kYXRhO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGRhdGEgPT09IFNVU1BFTlNFX1NUQVJUX0RBVEEgfHxcbiAgICAgICAgICAgIGRhdGEgPT09IFNVU1BFTlNFX0ZBTExCQUNLX1NUQVJUX0RBVEEgfHxcbiAgICAgICAgICAgIGRhdGEgPT09IFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQSB8fFxuICAgICAgICAgICAgZGF0YSA9PT0gU1VTUEVOU0VfUVVFVUVEX1NUQVJUX0RBVEEgfHxcbiAgICAgICAgICAgIGRhdGEgPT09IEFDVElWSVRZX1NUQVJUX0RBVEFcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmICgwID09PSBkZXB0aCkgcmV0dXJuIHRhcmdldEluc3RhbmNlO1xuICAgICAgICAgICAgZGVwdGgtLTtcbiAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIChkYXRhICE9PSBTVVNQRU5TRV9FTkRfREFUQSAmJiBkYXRhICE9PSBBQ1RJVklUWV9FTkRfREFUQSkgfHxcbiAgICAgICAgICAgICAgZGVwdGgrKztcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXRJbnN0YW5jZSA9IHRhcmdldEluc3RhbmNlLnByZXZpb3VzU2libGluZztcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRIeWRyYXRlZENvbnRhaW5lcihjb250YWluZXIpIHtcbiAgICAgIHJldHJ5SWZCbG9ja2VkT24oY29udGFpbmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0SHlkcmF0ZWRBY3Rpdml0eUluc3RhbmNlKGFjdGl2aXR5SW5zdGFuY2UpIHtcbiAgICAgIHJldHJ5SWZCbG9ja2VkT24oYWN0aXZpdHlJbnN0YW5jZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdEh5ZHJhdGVkU3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlKSB7XG4gICAgICByZXRyeUlmQmxvY2tlZE9uKHN1c3BlbnNlSW5zdGFuY2UpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlU2luZ2xldG9uSW5zdGFuY2UoXG4gICAgICB0eXBlLFxuICAgICAgcHJvcHMsXG4gICAgICByb290Q29udGFpbmVySW5zdGFuY2UsXG4gICAgICBob3N0Q29udGV4dCxcbiAgICAgIHZhbGlkYXRlRE9NTmVzdGluZ0RldlxuICAgICkge1xuICAgICAgdmFsaWRhdGVET01OZXN0aW5nRGV2ICYmXG4gICAgICAgIHZhbGlkYXRlRE9NTmVzdGluZyh0eXBlLCBob3N0Q29udGV4dC5hbmNlc3RvckluZm8pO1xuICAgICAgcHJvcHMgPSBnZXRPd25lckRvY3VtZW50RnJvbVJvb3RDb250YWluZXIocm9vdENvbnRhaW5lckluc3RhbmNlKTtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFwiaHRtbFwiOlxuICAgICAgICAgIHR5cGUgPSBwcm9wcy5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgICAgaWYgKCF0eXBlKVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVhY3QgZXhwZWN0ZWQgYW4gPGh0bWw+IGVsZW1lbnQgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkgdG8gZXhpc3QgaW4gdGhlIERvY3VtZW50IGJ1dCBvbmUgd2FzIG5vdCBmb3VuZC4gUmVhY3QgbmV2ZXIgcmVtb3ZlcyB0aGUgZG9jdW1lbnRFbGVtZW50IGZvciBhbnkgRG9jdW1lbnQgaXQgcmVuZGVycyBpbnRvIHNvIHRoZSBjYXVzZSBpcyBsaWtlbHkgaW4gc29tZSBvdGhlciBzY3JpcHQgcnVubmluZyBvbiB0aGlzIHBhZ2UuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgIGNhc2UgXCJoZWFkXCI6XG4gICAgICAgICAgdHlwZSA9IHByb3BzLmhlYWQ7XG4gICAgICAgICAgaWYgKCF0eXBlKVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVhY3QgZXhwZWN0ZWQgYSA8aGVhZD4gZWxlbWVudCAoZG9jdW1lbnQuaGVhZCkgdG8gZXhpc3QgaW4gdGhlIERvY3VtZW50IGJ1dCBvbmUgd2FzIG5vdCBmb3VuZC4gUmVhY3QgbmV2ZXIgcmVtb3ZlcyB0aGUgaGVhZCBmb3IgYW55IERvY3VtZW50IGl0IHJlbmRlcnMgaW50byBzbyB0aGUgY2F1c2UgaXMgbGlrZWx5IGluIHNvbWUgb3RoZXIgc2NyaXB0IHJ1bm5pbmcgb24gdGhpcyBwYWdlLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgICBjYXNlIFwiYm9keVwiOlxuICAgICAgICAgIHR5cGUgPSBwcm9wcy5ib2R5O1xuICAgICAgICAgIGlmICghdHlwZSlcbiAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICBcIlJlYWN0IGV4cGVjdGVkIGEgPGJvZHk+IGVsZW1lbnQgKGRvY3VtZW50LmJvZHkpIHRvIGV4aXN0IGluIHRoZSBEb2N1bWVudCBidXQgb25lIHdhcyBub3QgZm91bmQuIFJlYWN0IG5ldmVyIHJlbW92ZXMgdGhlIGJvZHkgZm9yIGFueSBEb2N1bWVudCBpdCByZW5kZXJzIGludG8gc28gdGhlIGNhdXNlIGlzIGxpa2VseSBpbiBzb21lIG90aGVyIHNjcmlwdCBydW5uaW5nIG9uIHRoaXMgcGFnZS5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIFwicmVzb2x2ZVNpbmdsZXRvbkluc3RhbmNlIHdhcyBjYWxsZWQgd2l0aCBhbiBlbGVtZW50IHR5cGUgdGhhdCBpcyBub3Qgc3VwcG9ydGVkLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gYWNxdWlyZVNpbmdsZXRvbkluc3RhbmNlKFxuICAgICAgdHlwZSxcbiAgICAgIHByb3BzLFxuICAgICAgaW5zdGFuY2UsXG4gICAgICBpbnRlcm5hbEluc3RhbmNlSGFuZGxlXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFpbnN0YW5jZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSAmJlxuICAgICAgICBnZXRJbnN0YW5jZUZyb21Ob2RlKGluc3RhbmNlKVxuICAgICAgKSB7XG4gICAgICAgIHZhciB0YWdOYW1lID0gaW5zdGFuY2UudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiWW91IGFyZSBtb3VudGluZyBhIG5ldyAlcyBjb21wb25lbnQgd2hlbiBhIHByZXZpb3VzIG9uZSBoYXMgbm90IGZpcnN0IHVubW91bnRlZC4gSXQgaXMgYW4gZXJyb3IgdG8gcmVuZGVyIG1vcmUgdGhhbiBvbmUgJXMgY29tcG9uZW50IGF0IGEgdGltZSBhbmQgYXR0cmlidXRlcyBhbmQgY2hpbGRyZW4gb2YgdGhlc2UgY29tcG9uZW50cyB3aWxsIGxpa2VseSBmYWlsIGluIHVucHJlZGljdGFibGUgd2F5cy4gUGxlYXNlIG9ubHkgcmVuZGVyIGEgc2luZ2xlIGluc3RhbmNlIG9mIDwlcz4gYW5kIGlmIHlvdSBuZWVkIHRvIG1vdW50IGEgbmV3IG9uZSwgZW5zdXJlIGFueSBwcmV2aW91cyBvbmVzIGhhdmUgdW5tb3VudGVkIGZpcnN0LlwiLFxuICAgICAgICAgIHRhZ05hbWUsXG4gICAgICAgICAgdGFnTmFtZSxcbiAgICAgICAgICB0YWdOYW1lXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBcImh0bWxcIjpcbiAgICAgICAgY2FzZSBcImhlYWRcIjpcbiAgICAgICAgY2FzZSBcImJvZHlcIjpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJhY3F1aXJlU2luZ2xldG9uSW5zdGFuY2Ugd2FzIGNhbGxlZCB3aXRoIGFuIGVsZW1lbnQgdHlwZSB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgICAgZm9yICh0YWdOYW1lID0gaW5zdGFuY2UuYXR0cmlidXRlczsgdGFnTmFtZS5sZW5ndGg7IClcbiAgICAgICAgaW5zdGFuY2UucmVtb3ZlQXR0cmlidXRlTm9kZSh0YWdOYW1lWzBdKTtcbiAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKGluc3RhbmNlLCB0eXBlLCBwcm9wcyk7XG4gICAgICBpbnN0YW5jZVtpbnRlcm5hbEluc3RhbmNlS2V5XSA9IGludGVybmFsSW5zdGFuY2VIYW5kbGU7XG4gICAgICBpbnN0YW5jZVtpbnRlcm5hbFByb3BzS2V5XSA9IHByb3BzO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWxlYXNlU2luZ2xldG9uSW5zdGFuY2UoaW5zdGFuY2UpIHtcbiAgICAgIGZvciAodmFyIGF0dHJpYnV0ZXMgPSBpbnN0YW5jZS5hdHRyaWJ1dGVzOyBhdHRyaWJ1dGVzLmxlbmd0aDsgKVxuICAgICAgICBpbnN0YW5jZS5yZW1vdmVBdHRyaWJ1dGVOb2RlKGF0dHJpYnV0ZXNbMF0pO1xuICAgICAgZGV0YWNoRGVsZXRlZEluc3RhbmNlKGluc3RhbmNlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0SG9pc3RhYmxlUm9vdChjb250YWluZXIpIHtcbiAgICAgIHJldHVybiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjb250YWluZXIuZ2V0Um9vdE5vZGVcbiAgICAgICAgPyBjb250YWluZXIuZ2V0Um9vdE5vZGUoKVxuICAgICAgICA6IDkgPT09IGNvbnRhaW5lci5ub2RlVHlwZVxuICAgICAgICAgID8gY29udGFpbmVyXG4gICAgICAgICAgOiBjb250YWluZXIub3duZXJEb2N1bWVudDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHJlY29ubmVjdEFzKHJlbCwgaHJlZiwgY3Jvc3NPcmlnaW4pIHtcbiAgICAgIHZhciBvd25lckRvY3VtZW50ID0gZ2xvYmFsRG9jdW1lbnQ7XG4gICAgICBpZiAob3duZXJEb2N1bWVudCAmJiBcInN0cmluZ1wiID09PSB0eXBlb2YgaHJlZiAmJiBocmVmKSB7XG4gICAgICAgIHZhciBsaW1pdGVkRXNjYXBlZEhyZWYgPVxuICAgICAgICAgIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXMoaHJlZik7XG4gICAgICAgIGxpbWl0ZWRFc2NhcGVkSHJlZiA9XG4gICAgICAgICAgJ2xpbmtbcmVsPVwiJyArIHJlbCArICdcIl1baHJlZj1cIicgKyBsaW1pdGVkRXNjYXBlZEhyZWYgKyAnXCJdJztcbiAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGNyb3NzT3JpZ2luICYmXG4gICAgICAgICAgKGxpbWl0ZWRFc2NhcGVkSHJlZiArPSAnW2Nyb3Nzb3JpZ2luPVwiJyArIGNyb3NzT3JpZ2luICsgJ1wiXScpO1xuICAgICAgICBwcmVjb25uZWN0c1NldC5oYXMobGltaXRlZEVzY2FwZWRIcmVmKSB8fFxuICAgICAgICAgIChwcmVjb25uZWN0c1NldC5hZGQobGltaXRlZEVzY2FwZWRIcmVmKSxcbiAgICAgICAgICAocmVsID0geyByZWw6IHJlbCwgY3Jvc3NPcmlnaW46IGNyb3NzT3JpZ2luLCBocmVmOiBocmVmIH0pLFxuICAgICAgICAgIG51bGwgPT09IG93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvcihsaW1pdGVkRXNjYXBlZEhyZWYpICYmXG4gICAgICAgICAgICAoKGhyZWYgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpKSxcbiAgICAgICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKGhyZWYsIFwibGlua1wiLCByZWwpLFxuICAgICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShocmVmKSxcbiAgICAgICAgICAgIG93bmVyRG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChocmVmKSkpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRSZXNvdXJjZSh0eXBlLCBjdXJyZW50UHJvcHMsIHBlbmRpbmdQcm9wcywgY3VycmVudFJlc291cmNlKSB7XG4gICAgICB2YXIgcmVzb3VyY2VSb290ID0gKHJlc291cmNlUm9vdCA9IHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLmN1cnJlbnQpXG4gICAgICAgID8gZ2V0SG9pc3RhYmxlUm9vdChyZXNvdXJjZVJvb3QpXG4gICAgICAgIDogbnVsbDtcbiAgICAgIGlmICghcmVzb3VyY2VSb290KVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnXCJyZXNvdXJjZVJvb3RcIiB3YXMgZXhwZWN0ZWQgdG8gZXhpc3QuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuJ1xuICAgICAgICApO1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgXCJtZXRhXCI6XG4gICAgICAgIGNhc2UgXCJ0aXRsZVwiOlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjYXNlIFwic3R5bGVcIjpcbiAgICAgICAgICByZXR1cm4gXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHBlbmRpbmdQcm9wcy5wcmVjZWRlbmNlICYmXG4gICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgcGVuZGluZ1Byb3BzLmhyZWZcbiAgICAgICAgICAgID8gKChwZW5kaW5nUHJvcHMgPSBnZXRTdHlsZUtleShwZW5kaW5nUHJvcHMuaHJlZikpLFxuICAgICAgICAgICAgICAoY3VycmVudFByb3BzID1cbiAgICAgICAgICAgICAgICBnZXRSZXNvdXJjZXNGcm9tUm9vdChyZXNvdXJjZVJvb3QpLmhvaXN0YWJsZVN0eWxlcyksXG4gICAgICAgICAgICAgIChjdXJyZW50UmVzb3VyY2UgPSBjdXJyZW50UHJvcHMuZ2V0KHBlbmRpbmdQcm9wcykpLFxuICAgICAgICAgICAgICBjdXJyZW50UmVzb3VyY2UgfHxcbiAgICAgICAgICAgICAgICAoKGN1cnJlbnRSZXNvdXJjZSA9IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3R5bGVcIixcbiAgICAgICAgICAgICAgICAgIGluc3RhbmNlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgY291bnQ6IDAsXG4gICAgICAgICAgICAgICAgICBzdGF0ZTogbnVsbFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRQcm9wcy5zZXQocGVuZGluZ1Byb3BzLCBjdXJyZW50UmVzb3VyY2UpKSxcbiAgICAgICAgICAgICAgY3VycmVudFJlc291cmNlKVxuICAgICAgICAgICAgOiB7IHR5cGU6IFwidm9pZFwiLCBpbnN0YW5jZTogbnVsbCwgY291bnQ6IDAsIHN0YXRlOiBudWxsIH07XG4gICAgICAgIGNhc2UgXCJsaW5rXCI6XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgXCJzdHlsZXNoZWV0XCIgPT09IHBlbmRpbmdQcm9wcy5yZWwgJiZcbiAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBwZW5kaW5nUHJvcHMuaHJlZiAmJlxuICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHBlbmRpbmdQcm9wcy5wcmVjZWRlbmNlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0eXBlID0gZ2V0U3R5bGVLZXkocGVuZGluZ1Byb3BzLmhyZWYpO1xuICAgICAgICAgICAgdmFyIF9zdHlsZXMgPSBnZXRSZXNvdXJjZXNGcm9tUm9vdChyZXNvdXJjZVJvb3QpLmhvaXN0YWJsZVN0eWxlcyxcbiAgICAgICAgICAgICAgX3Jlc291cmNlID0gX3N0eWxlcy5nZXQodHlwZSk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICFfcmVzb3VyY2UgJiZcbiAgICAgICAgICAgICAgKChyZXNvdXJjZVJvb3QgPSByZXNvdXJjZVJvb3Qub3duZXJEb2N1bWVudCB8fCByZXNvdXJjZVJvb3QpLFxuICAgICAgICAgICAgICAoX3Jlc291cmNlID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic3R5bGVzaGVldFwiLFxuICAgICAgICAgICAgICAgIGluc3RhbmNlOiBudWxsLFxuICAgICAgICAgICAgICAgIGNvdW50OiAwLFxuICAgICAgICAgICAgICAgIHN0YXRlOiB7IGxvYWRpbmc6IE5vdExvYWRlZCwgcHJlbG9hZDogbnVsbCB9XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBfc3R5bGVzLnNldCh0eXBlLCBfcmVzb3VyY2UpLFxuICAgICAgICAgICAgICAoX3N0eWxlcyA9IHJlc291cmNlUm9vdC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgICAgIGdldFN0eWxlc2hlZXRTZWxlY3RvckZyb21LZXkodHlwZSlcbiAgICAgICAgICAgICAgKSkgJiZcbiAgICAgICAgICAgICAgICAhX3N0eWxlcy5fcCAmJlxuICAgICAgICAgICAgICAgICgoX3Jlc291cmNlLmluc3RhbmNlID0gX3N0eWxlcyksXG4gICAgICAgICAgICAgICAgKF9yZXNvdXJjZS5zdGF0ZS5sb2FkaW5nID0gTG9hZGVkIHwgSW5zZXJ0ZWQpKSxcbiAgICAgICAgICAgICAgIXByZWxvYWRQcm9wc01hcC5oYXModHlwZSkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdmFyIHByZWxvYWRQcm9wcyA9IHtcbiAgICAgICAgICAgICAgICByZWw6IFwicHJlbG9hZFwiLFxuICAgICAgICAgICAgICAgIGFzOiBcInN0eWxlXCIsXG4gICAgICAgICAgICAgICAgaHJlZjogcGVuZGluZ1Byb3BzLmhyZWYsXG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHBlbmRpbmdQcm9wcy5jcm9zc09yaWdpbixcbiAgICAgICAgICAgICAgICBpbnRlZ3JpdHk6IHBlbmRpbmdQcm9wcy5pbnRlZ3JpdHksXG4gICAgICAgICAgICAgICAgbWVkaWE6IHBlbmRpbmdQcm9wcy5tZWRpYSxcbiAgICAgICAgICAgICAgICBocmVmTGFuZzogcGVuZGluZ1Byb3BzLmhyZWZMYW5nLFxuICAgICAgICAgICAgICAgIHJlZmVycmVyUG9saWN5OiBwZW5kaW5nUHJvcHMucmVmZXJyZXJQb2xpY3lcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgcHJlbG9hZFByb3BzTWFwLnNldCh0eXBlLCBwcmVsb2FkUHJvcHMpO1xuICAgICAgICAgICAgICBfc3R5bGVzIHx8XG4gICAgICAgICAgICAgICAgcHJlbG9hZFN0eWxlc2hlZXQoXG4gICAgICAgICAgICAgICAgICByZXNvdXJjZVJvb3QsXG4gICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgcHJlbG9hZFByb3BzLFxuICAgICAgICAgICAgICAgICAgX3Jlc291cmNlLnN0YXRlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjdXJyZW50UHJvcHMgJiYgbnVsbCA9PT0gY3VycmVudFJlc291cmNlKVxuICAgICAgICAgICAgICB0aHJvdyAoXG4gICAgICAgICAgICAgICAgKChwZW5kaW5nUHJvcHMgPVxuICAgICAgICAgICAgICAgICAgXCJcXG5cXG4gIC0gXCIgK1xuICAgICAgICAgICAgICAgICAgZGVzY3JpYmVMaW5rRm9yUmVzb3VyY2VFcnJvckRFVihjdXJyZW50UHJvcHMpICtcbiAgICAgICAgICAgICAgICAgIFwiXFxuICArIFwiICtcbiAgICAgICAgICAgICAgICAgIGRlc2NyaWJlTGlua0ZvclJlc291cmNlRXJyb3JERVYocGVuZGluZ1Byb3BzKSksXG4gICAgICAgICAgICAgICAgRXJyb3IoXG4gICAgICAgICAgICAgICAgICBcIkV4cGVjdGVkIDxsaW5rPiBub3QgdG8gdXBkYXRlIHRvIGJlIHVwZGF0ZWQgdG8gYSBzdHlsZXNoZWV0IHdpdGggcHJlY2VkZW5jZS4gQ2hlY2sgdGhlIGByZWxgLCBgaHJlZmAsIGFuZCBgcHJlY2VkZW5jZWAgcHJvcHMgb2YgdGhpcyBjb21wb25lbnQuIEFsdGVybmF0aXZlbHksIGNoZWNrIHdoZXRoZXIgdHdvIGRpZmZlcmVudCA8bGluaz4gY29tcG9uZW50cyByZW5kZXIgaW4gdGhlIHNhbWUgc2xvdCBvciBzaGFyZSB0aGUgc2FtZSBrZXkuXCIgK1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nUHJvcHNcbiAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIF9yZXNvdXJjZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGN1cnJlbnRQcm9wcyAmJiBudWxsICE9PSBjdXJyZW50UmVzb3VyY2UpXG4gICAgICAgICAgICB0aHJvdyAoXG4gICAgICAgICAgICAgICgocGVuZGluZ1Byb3BzID1cbiAgICAgICAgICAgICAgICBcIlxcblxcbiAgLSBcIiArXG4gICAgICAgICAgICAgICAgZGVzY3JpYmVMaW5rRm9yUmVzb3VyY2VFcnJvckRFVihjdXJyZW50UHJvcHMpICtcbiAgICAgICAgICAgICAgICBcIlxcbiAgKyBcIiArXG4gICAgICAgICAgICAgICAgZGVzY3JpYmVMaW5rRm9yUmVzb3VyY2VFcnJvckRFVihwZW5kaW5nUHJvcHMpKSxcbiAgICAgICAgICAgICAgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJFeHBlY3RlZCBzdHlsZXNoZWV0IHdpdGggcHJlY2VkZW5jZSB0byBub3QgYmUgdXBkYXRlZCB0byBhIGRpZmZlcmVudCBraW5kIG9mIDxsaW5rPi4gQ2hlY2sgdGhlIGByZWxgLCBgaHJlZmAsIGFuZCBgcHJlY2VkZW5jZWAgcHJvcHMgb2YgdGhpcyBjb21wb25lbnQuIEFsdGVybmF0aXZlbHksIGNoZWNrIHdoZXRoZXIgdHdvIGRpZmZlcmVudCA8bGluaz4gY29tcG9uZW50cyByZW5kZXIgaW4gdGhlIHNhbWUgc2xvdCBvciBzaGFyZSB0aGUgc2FtZSBrZXkuXCIgK1xuICAgICAgICAgICAgICAgICAgcGVuZGluZ1Byb3BzXG4gICAgICAgICAgICAgICkpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjYXNlIFwic2NyaXB0XCI6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChjdXJyZW50UHJvcHMgPSBwZW5kaW5nUHJvcHMuYXN5bmMpLFxuICAgICAgICAgICAgKHBlbmRpbmdQcm9wcyA9IHBlbmRpbmdQcm9wcy5zcmMpLFxuICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHBlbmRpbmdQcm9wcyAmJlxuICAgICAgICAgICAgY3VycmVudFByb3BzICYmXG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBjdXJyZW50UHJvcHMgJiZcbiAgICAgICAgICAgIFwic3ltYm9sXCIgIT09IHR5cGVvZiBjdXJyZW50UHJvcHNcbiAgICAgICAgICAgICAgPyAoKHBlbmRpbmdQcm9wcyA9IGdldFNjcmlwdEtleShwZW5kaW5nUHJvcHMpKSxcbiAgICAgICAgICAgICAgICAoY3VycmVudFByb3BzID1cbiAgICAgICAgICAgICAgICAgIGdldFJlc291cmNlc0Zyb21Sb290KHJlc291cmNlUm9vdCkuaG9pc3RhYmxlU2NyaXB0cyksXG4gICAgICAgICAgICAgICAgKGN1cnJlbnRSZXNvdXJjZSA9IGN1cnJlbnRQcm9wcy5nZXQocGVuZGluZ1Byb3BzKSksXG4gICAgICAgICAgICAgICAgY3VycmVudFJlc291cmNlIHx8XG4gICAgICAgICAgICAgICAgICAoKGN1cnJlbnRSZXNvdXJjZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzY3JpcHRcIixcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2U6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGNvdW50OiAwLFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZTogbnVsbFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICBjdXJyZW50UHJvcHMuc2V0KHBlbmRpbmdQcm9wcywgY3VycmVudFJlc291cmNlKSksXG4gICAgICAgICAgICAgICAgY3VycmVudFJlc291cmNlKVxuICAgICAgICAgICAgICA6IHsgdHlwZTogXCJ2b2lkXCIsIGluc3RhbmNlOiBudWxsLCBjb3VudDogMCwgc3RhdGU6IG51bGwgfVxuICAgICAgICAgICk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAnZ2V0UmVzb3VyY2UgZW5jb3VudGVyZWQgYSB0eXBlIGl0IGRpZCBub3QgZXhwZWN0OiBcIicgK1xuICAgICAgICAgICAgICB0eXBlICtcbiAgICAgICAgICAgICAgJ1wiLiB0aGlzIGlzIGEgYnVnIGluIFJlYWN0LidcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZUxpbmtGb3JSZXNvdXJjZUVycm9yREVWKHByb3BzKSB7XG4gICAgICB2YXIgZGVzY3JpYmVkUHJvcHMgPSAwLFxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiPGxpbmtcIjtcbiAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBwcm9wcy5yZWxcbiAgICAgICAgPyAoZGVzY3JpYmVkUHJvcHMrKywgKGRlc2NyaXB0aW9uICs9ICcgcmVsPVwiJyArIHByb3BzLnJlbCArICdcIicpKVxuICAgICAgICA6IGhhc093blByb3BlcnR5LmNhbGwocHJvcHMsIFwicmVsXCIpICYmXG4gICAgICAgICAgKGRlc2NyaWJlZFByb3BzKyssXG4gICAgICAgICAgKGRlc2NyaXB0aW9uICs9XG4gICAgICAgICAgICAnIHJlbD1cIicgK1xuICAgICAgICAgICAgKG51bGwgPT09IHByb3BzLnJlbCA/IFwibnVsbFwiIDogXCJpbnZhbGlkIHR5cGUgXCIgKyB0eXBlb2YgcHJvcHMucmVsKSArXG4gICAgICAgICAgICAnXCInKSk7XG4gICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgcHJvcHMuaHJlZlxuICAgICAgICA/IChkZXNjcmliZWRQcm9wcysrLCAoZGVzY3JpcHRpb24gKz0gJyBocmVmPVwiJyArIHByb3BzLmhyZWYgKyAnXCInKSlcbiAgICAgICAgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3BzLCBcImhyZWZcIikgJiZcbiAgICAgICAgICAoZGVzY3JpYmVkUHJvcHMrKyxcbiAgICAgICAgICAoZGVzY3JpcHRpb24gKz1cbiAgICAgICAgICAgICcgaHJlZj1cIicgK1xuICAgICAgICAgICAgKG51bGwgPT09IHByb3BzLmhyZWZcbiAgICAgICAgICAgICAgPyBcIm51bGxcIlxuICAgICAgICAgICAgICA6IFwiaW52YWxpZCB0eXBlIFwiICsgdHlwZW9mIHByb3BzLmhyZWYpICtcbiAgICAgICAgICAgICdcIicpKTtcbiAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBwcm9wcy5wcmVjZWRlbmNlXG4gICAgICAgID8gKGRlc2NyaWJlZFByb3BzKyssXG4gICAgICAgICAgKGRlc2NyaXB0aW9uICs9ICcgcHJlY2VkZW5jZT1cIicgKyBwcm9wcy5wcmVjZWRlbmNlICsgJ1wiJykpXG4gICAgICAgIDogaGFzT3duUHJvcGVydHkuY2FsbChwcm9wcywgXCJwcmVjZWRlbmNlXCIpICYmXG4gICAgICAgICAgKGRlc2NyaWJlZFByb3BzKyssXG4gICAgICAgICAgKGRlc2NyaXB0aW9uICs9XG4gICAgICAgICAgICBcIiBwcmVjZWRlbmNlPXtcIiArXG4gICAgICAgICAgICAobnVsbCA9PT0gcHJvcHMucHJlY2VkZW5jZVxuICAgICAgICAgICAgICA/IFwibnVsbFwiXG4gICAgICAgICAgICAgIDogXCJpbnZhbGlkIHR5cGUgXCIgKyB0eXBlb2YgcHJvcHMucHJlY2VkZW5jZSkgK1xuICAgICAgICAgICAgXCJ9XCIpKTtcbiAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3BzKS5sZW5ndGggPiBkZXNjcmliZWRQcm9wcyAmJlxuICAgICAgICAoZGVzY3JpcHRpb24gKz0gXCIgLi4uXCIpO1xuICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uICsgXCIgLz5cIjtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0U3R5bGVLZXkoaHJlZikge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgJ2hyZWY9XCInICsgZXNjYXBlU2VsZWN0b3JBdHRyaWJ1dGVWYWx1ZUluc2lkZURvdWJsZVF1b3RlcyhocmVmKSArICdcIidcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFN0eWxlc2hlZXRTZWxlY3RvckZyb21LZXkoa2V5KSB7XG4gICAgICByZXR1cm4gJ2xpbmtbcmVsPVwic3R5bGVzaGVldFwiXVsnICsga2V5ICsgXCJdXCI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHN0eWxlc2hlZXRQcm9wc0Zyb21SYXdQcm9wcyhyYXdQcm9wcykge1xuICAgICAgcmV0dXJuIGFzc2lnbih7fSwgcmF3UHJvcHMsIHtcbiAgICAgICAgXCJkYXRhLXByZWNlZGVuY2VcIjogcmF3UHJvcHMucHJlY2VkZW5jZSxcbiAgICAgICAgcHJlY2VkZW5jZTogbnVsbFxuICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByZWxvYWRTdHlsZXNoZWV0KG93bmVyRG9jdW1lbnQsIGtleSwgcHJlbG9hZFByb3BzLCBzdGF0ZSkge1xuICAgICAgb3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAnbGlua1tyZWw9XCJwcmVsb2FkXCJdW2FzPVwic3R5bGVcIl1bJyArIGtleSArIFwiXVwiXG4gICAgICApXG4gICAgICAgID8gKHN0YXRlLmxvYWRpbmcgPSBMb2FkZWQpXG4gICAgICAgIDogKChrZXkgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpKSxcbiAgICAgICAgICAoc3RhdGUucHJlbG9hZCA9IGtleSksXG4gICAgICAgICAga2V5LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAoc3RhdGUubG9hZGluZyB8PSBMb2FkZWQpO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGtleS5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIChzdGF0ZS5sb2FkaW5nIHw9IEVycm9yZWQpO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKGtleSwgXCJsaW5rXCIsIHByZWxvYWRQcm9wcyksXG4gICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShrZXkpLFxuICAgICAgICAgIG93bmVyRG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChrZXkpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0U2NyaXB0S2V5KHNyYykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgJ1tzcmM9XCInICsgZXNjYXBlU2VsZWN0b3JBdHRyaWJ1dGVWYWx1ZUluc2lkZURvdWJsZVF1b3RlcyhzcmMpICsgJ1wiXSdcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFNjcmlwdFNlbGVjdG9yRnJvbUtleShrZXkpIHtcbiAgICAgIHJldHVybiBcInNjcmlwdFthc3luY11cIiArIGtleTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWNxdWlyZVJlc291cmNlKGhvaXN0YWJsZVJvb3QsIHJlc291cmNlLCBwcm9wcykge1xuICAgICAgcmVzb3VyY2UuY291bnQrKztcbiAgICAgIGlmIChudWxsID09PSByZXNvdXJjZS5pbnN0YW5jZSlcbiAgICAgICAgc3dpdGNoIChyZXNvdXJjZS50eXBlKSB7XG4gICAgICAgICAgY2FzZSBcInN0eWxlXCI6XG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBob2lzdGFibGVSb290LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICAgICdzdHlsZVtkYXRhLWhyZWZ+PVwiJyArXG4gICAgICAgICAgICAgICAgZXNjYXBlU2VsZWN0b3JBdHRyaWJ1dGVWYWx1ZUluc2lkZURvdWJsZVF1b3Rlcyhwcm9wcy5ocmVmKSArXG4gICAgICAgICAgICAgICAgJ1wiXSdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoaW5zdGFuY2UpXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgKHJlc291cmNlLmluc3RhbmNlID0gaW5zdGFuY2UpLFxuICAgICAgICAgICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUoaW5zdGFuY2UpLFxuICAgICAgICAgICAgICAgIGluc3RhbmNlXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB2YXIgc3R5bGVQcm9wcyA9IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgICAgXCJkYXRhLWhyZWZcIjogcHJvcHMuaHJlZixcbiAgICAgICAgICAgICAgXCJkYXRhLXByZWNlZGVuY2VcIjogcHJvcHMucHJlY2VkZW5jZSxcbiAgICAgICAgICAgICAgaHJlZjogbnVsbCxcbiAgICAgICAgICAgICAgcHJlY2VkZW5jZTogbnVsbFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpbnN0YW5jZSA9IChcbiAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdC5vd25lckRvY3VtZW50IHx8IGhvaXN0YWJsZVJvb3RcbiAgICAgICAgICAgICkuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICAgICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShpbnN0YW5jZSk7XG4gICAgICAgICAgICBzZXRJbml0aWFsUHJvcGVydGllcyhpbnN0YW5jZSwgXCJzdHlsZVwiLCBzdHlsZVByb3BzKTtcbiAgICAgICAgICAgIGluc2VydFN0eWxlc2hlZXQoaW5zdGFuY2UsIHByb3BzLnByZWNlZGVuY2UsIGhvaXN0YWJsZVJvb3QpO1xuICAgICAgICAgICAgcmV0dXJuIChyZXNvdXJjZS5pbnN0YW5jZSA9IGluc3RhbmNlKTtcbiAgICAgICAgICBjYXNlIFwic3R5bGVzaGVldFwiOlxuICAgICAgICAgICAgc3R5bGVQcm9wcyA9IGdldFN0eWxlS2V5KHByb3BzLmhyZWYpO1xuICAgICAgICAgICAgdmFyIF9pbnN0YW5jZSA9IGhvaXN0YWJsZVJvb3QucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgZ2V0U3R5bGVzaGVldFNlbGVjdG9yRnJvbUtleShzdHlsZVByb3BzKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChfaW5zdGFuY2UpXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgKHJlc291cmNlLnN0YXRlLmxvYWRpbmcgfD0gSW5zZXJ0ZWQpLFxuICAgICAgICAgICAgICAgIChyZXNvdXJjZS5pbnN0YW5jZSA9IF9pbnN0YW5jZSksXG4gICAgICAgICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShfaW5zdGFuY2UpLFxuICAgICAgICAgICAgICAgIF9pbnN0YW5jZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgaW5zdGFuY2UgPSBzdHlsZXNoZWV0UHJvcHNGcm9tUmF3UHJvcHMocHJvcHMpO1xuICAgICAgICAgICAgKHN0eWxlUHJvcHMgPSBwcmVsb2FkUHJvcHNNYXAuZ2V0KHN0eWxlUHJvcHMpKSAmJlxuICAgICAgICAgICAgICBhZG9wdFByZWxvYWRQcm9wc0ZvclN0eWxlc2hlZXQoaW5zdGFuY2UsIHN0eWxlUHJvcHMpO1xuICAgICAgICAgICAgX2luc3RhbmNlID0gKFxuICAgICAgICAgICAgICBob2lzdGFibGVSb290Lm93bmVyRG9jdW1lbnQgfHwgaG9pc3RhYmxlUm9vdFxuICAgICAgICAgICAgKS5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcbiAgICAgICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUoX2luc3RhbmNlKTtcbiAgICAgICAgICAgIHZhciBsaW5rSW5zdGFuY2UgPSBfaW5zdGFuY2U7XG4gICAgICAgICAgICBsaW5rSW5zdGFuY2UuX3AgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgIGxpbmtJbnN0YW5jZS5vbmxvYWQgPSByZXNvbHZlO1xuICAgICAgICAgICAgICBsaW5rSW5zdGFuY2Uub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2V0SW5pdGlhbFByb3BlcnRpZXMoX2luc3RhbmNlLCBcImxpbmtcIiwgaW5zdGFuY2UpO1xuICAgICAgICAgICAgcmVzb3VyY2Uuc3RhdGUubG9hZGluZyB8PSBJbnNlcnRlZDtcbiAgICAgICAgICAgIGluc2VydFN0eWxlc2hlZXQoX2luc3RhbmNlLCBwcm9wcy5wcmVjZWRlbmNlLCBob2lzdGFibGVSb290KTtcbiAgICAgICAgICAgIHJldHVybiAocmVzb3VyY2UuaW5zdGFuY2UgPSBfaW5zdGFuY2UpO1xuICAgICAgICAgIGNhc2UgXCJzY3JpcHRcIjpcbiAgICAgICAgICAgIF9pbnN0YW5jZSA9IGdldFNjcmlwdEtleShwcm9wcy5zcmMpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoc3R5bGVQcm9wcyA9IGhvaXN0YWJsZVJvb3QucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgICBnZXRTY3JpcHRTZWxlY3RvckZyb21LZXkoX2luc3RhbmNlKVxuICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIChyZXNvdXJjZS5pbnN0YW5jZSA9IHN0eWxlUHJvcHMpLFxuICAgICAgICAgICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUoc3R5bGVQcm9wcyksXG4gICAgICAgICAgICAgICAgc3R5bGVQcm9wc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgaW5zdGFuY2UgPSBwcm9wcztcbiAgICAgICAgICAgIGlmICgoc3R5bGVQcm9wcyA9IHByZWxvYWRQcm9wc01hcC5nZXQoX2luc3RhbmNlKSkpXG4gICAgICAgICAgICAgIChpbnN0YW5jZSA9IGFzc2lnbih7fSwgcHJvcHMpKSxcbiAgICAgICAgICAgICAgICBhZG9wdFByZWxvYWRQcm9wc0ZvclNjcmlwdChpbnN0YW5jZSwgc3R5bGVQcm9wcyk7XG4gICAgICAgICAgICBob2lzdGFibGVSb290ID0gaG9pc3RhYmxlUm9vdC5vd25lckRvY3VtZW50IHx8IGhvaXN0YWJsZVJvb3Q7XG4gICAgICAgICAgICBzdHlsZVByb3BzID0gaG9pc3RhYmxlUm9vdC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShzdHlsZVByb3BzKTtcbiAgICAgICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKHN0eWxlUHJvcHMsIFwibGlua1wiLCBpbnN0YW5jZSk7XG4gICAgICAgICAgICBob2lzdGFibGVSb290LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGVQcm9wcyk7XG4gICAgICAgICAgICByZXR1cm4gKHJlc291cmNlLmluc3RhbmNlID0gc3R5bGVQcm9wcyk7XG4gICAgICAgICAgY2FzZSBcInZvaWRcIjpcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgJ2FjcXVpcmVSZXNvdXJjZSBlbmNvdW50ZXJlZCBhIHJlc291cmNlIHR5cGUgaXQgZGlkIG5vdCBleHBlY3Q6IFwiJyArXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UudHlwZSArXG4gICAgICAgICAgICAgICAgJ1wiLiB0aGlzIGlzIGEgYnVnIGluIFJlYWN0LidcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgICAgXCJzdHlsZXNoZWV0XCIgPT09IHJlc291cmNlLnR5cGUgJiZcbiAgICAgICAgICAocmVzb3VyY2Uuc3RhdGUubG9hZGluZyAmIEluc2VydGVkKSA9PT0gTm90TG9hZGVkICYmXG4gICAgICAgICAgKChpbnN0YW5jZSA9IHJlc291cmNlLmluc3RhbmNlKSxcbiAgICAgICAgICAocmVzb3VyY2Uuc3RhdGUubG9hZGluZyB8PSBJbnNlcnRlZCksXG4gICAgICAgICAgaW5zZXJ0U3R5bGVzaGVldChpbnN0YW5jZSwgcHJvcHMucHJlY2VkZW5jZSwgaG9pc3RhYmxlUm9vdCkpO1xuICAgICAgcmV0dXJuIHJlc291cmNlLmluc3RhbmNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbnNlcnRTdHlsZXNoZWV0KGluc3RhbmNlLCBwcmVjZWRlbmNlLCByb290KSB7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgbm9kZXMgPSByb290LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgICAgICAnbGlua1tyZWw9XCJzdHlsZXNoZWV0XCJdW2RhdGEtcHJlY2VkZW5jZV0sc3R5bGVbZGF0YS1wcmVjZWRlbmNlXSdcbiAgICAgICAgICApLFxuICAgICAgICAgIGxhc3QgPSBub2Rlcy5sZW5ndGggPyBub2Rlc1tub2Rlcy5sZW5ndGggLSAxXSA6IG51bGwsXG4gICAgICAgICAgcHJpb3IgPSBsYXN0LFxuICAgICAgICAgIGkgPSAwO1xuICAgICAgICBpIDwgbm9kZXMubGVuZ3RoO1xuICAgICAgICBpKytcbiAgICAgICkge1xuICAgICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICBpZiAobm9kZS5kYXRhc2V0LnByZWNlZGVuY2UgPT09IHByZWNlZGVuY2UpIHByaW9yID0gbm9kZTtcbiAgICAgICAgZWxzZSBpZiAocHJpb3IgIT09IGxhc3QpIGJyZWFrO1xuICAgICAgfVxuICAgICAgcHJpb3JcbiAgICAgICAgPyBwcmlvci5wYXJlbnROb2RlLmluc2VydEJlZm9yZShpbnN0YW5jZSwgcHJpb3IubmV4dFNpYmxpbmcpXG4gICAgICAgIDogKChwcmVjZWRlbmNlID0gOSA9PT0gcm9vdC5ub2RlVHlwZSA/IHJvb3QuaGVhZCA6IHJvb3QpLFxuICAgICAgICAgIHByZWNlZGVuY2UuaW5zZXJ0QmVmb3JlKGluc3RhbmNlLCBwcmVjZWRlbmNlLmZpcnN0Q2hpbGQpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWRvcHRQcmVsb2FkUHJvcHNGb3JTdHlsZXNoZWV0KHN0eWxlc2hlZXRQcm9wcywgcHJlbG9hZFByb3BzKSB7XG4gICAgICBudWxsID09IHN0eWxlc2hlZXRQcm9wcy5jcm9zc09yaWdpbiAmJlxuICAgICAgICAoc3R5bGVzaGVldFByb3BzLmNyb3NzT3JpZ2luID0gcHJlbG9hZFByb3BzLmNyb3NzT3JpZ2luKTtcbiAgICAgIG51bGwgPT0gc3R5bGVzaGVldFByb3BzLnJlZmVycmVyUG9saWN5ICYmXG4gICAgICAgIChzdHlsZXNoZWV0UHJvcHMucmVmZXJyZXJQb2xpY3kgPSBwcmVsb2FkUHJvcHMucmVmZXJyZXJQb2xpY3kpO1xuICAgICAgbnVsbCA9PSBzdHlsZXNoZWV0UHJvcHMudGl0bGUgJiZcbiAgICAgICAgKHN0eWxlc2hlZXRQcm9wcy50aXRsZSA9IHByZWxvYWRQcm9wcy50aXRsZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFkb3B0UHJlbG9hZFByb3BzRm9yU2NyaXB0KHNjcmlwdFByb3BzLCBwcmVsb2FkUHJvcHMpIHtcbiAgICAgIG51bGwgPT0gc2NyaXB0UHJvcHMuY3Jvc3NPcmlnaW4gJiZcbiAgICAgICAgKHNjcmlwdFByb3BzLmNyb3NzT3JpZ2luID0gcHJlbG9hZFByb3BzLmNyb3NzT3JpZ2luKTtcbiAgICAgIG51bGwgPT0gc2NyaXB0UHJvcHMucmVmZXJyZXJQb2xpY3kgJiZcbiAgICAgICAgKHNjcmlwdFByb3BzLnJlZmVycmVyUG9saWN5ID0gcHJlbG9hZFByb3BzLnJlZmVycmVyUG9saWN5KTtcbiAgICAgIG51bGwgPT0gc2NyaXB0UHJvcHMuaW50ZWdyaXR5ICYmXG4gICAgICAgIChzY3JpcHRQcm9wcy5pbnRlZ3JpdHkgPSBwcmVsb2FkUHJvcHMuaW50ZWdyaXR5KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0SHlkcmF0YWJsZUhvaXN0YWJsZUNhY2hlKHR5cGUsIGtleUF0dHJpYnV0ZSwgb3duZXJEb2N1bWVudCkge1xuICAgICAgaWYgKG51bGwgPT09IHRhZ0NhY2hlcykge1xuICAgICAgICB2YXIgY2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgICAgIHZhciBjYWNoZXMgPSAodGFnQ2FjaGVzID0gbmV3IE1hcCgpKTtcbiAgICAgICAgY2FjaGVzLnNldChvd25lckRvY3VtZW50LCBjYWNoZSk7XG4gICAgICB9IGVsc2VcbiAgICAgICAgKGNhY2hlcyA9IHRhZ0NhY2hlcyksXG4gICAgICAgICAgKGNhY2hlID0gY2FjaGVzLmdldChvd25lckRvY3VtZW50KSksXG4gICAgICAgICAgY2FjaGUgfHwgKChjYWNoZSA9IG5ldyBNYXAoKSksIGNhY2hlcy5zZXQob3duZXJEb2N1bWVudCwgY2FjaGUpKTtcbiAgICAgIGlmIChjYWNoZS5oYXModHlwZSkpIHJldHVybiBjYWNoZTtcbiAgICAgIGNhY2hlLnNldCh0eXBlLCBudWxsKTtcbiAgICAgIG93bmVyRG9jdW1lbnQgPSBvd25lckRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKHR5cGUpO1xuICAgICAgZm9yIChjYWNoZXMgPSAwOyBjYWNoZXMgPCBvd25lckRvY3VtZW50Lmxlbmd0aDsgY2FjaGVzKyspIHtcbiAgICAgICAgdmFyIG5vZGUgPSBvd25lckRvY3VtZW50W2NhY2hlc107XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhKFxuICAgICAgICAgICAgbm9kZVtpbnRlcm5hbEhvaXN0YWJsZU1hcmtlcl0gfHxcbiAgICAgICAgICAgIG5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV0gfHxcbiAgICAgICAgICAgIChcImxpbmtcIiA9PT0gdHlwZSAmJiBcInN0eWxlc2hlZXRcIiA9PT0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJyZWxcIikpXG4gICAgICAgICAgKSAmJlxuICAgICAgICAgIG5vZGUubmFtZXNwYWNlVVJJICE9PSBTVkdfTkFNRVNQQUNFXG4gICAgICAgICkge1xuICAgICAgICAgIHZhciBub2RlS2V5ID0gbm9kZS5nZXRBdHRyaWJ1dGUoa2V5QXR0cmlidXRlKSB8fCBcIlwiO1xuICAgICAgICAgIG5vZGVLZXkgPSB0eXBlICsgbm9kZUtleTtcbiAgICAgICAgICB2YXIgZXhpc3RpbmcgPSBjYWNoZS5nZXQobm9kZUtleSk7XG4gICAgICAgICAgZXhpc3RpbmcgPyBleGlzdGluZy5wdXNoKG5vZGUpIDogY2FjaGUuc2V0KG5vZGVLZXksIFtub2RlXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBjYWNoZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRIb2lzdGFibGUoaG9pc3RhYmxlUm9vdCwgdHlwZSwgaW5zdGFuY2UpIHtcbiAgICAgIGhvaXN0YWJsZVJvb3QgPSBob2lzdGFibGVSb290Lm93bmVyRG9jdW1lbnQgfHwgaG9pc3RhYmxlUm9vdDtcbiAgICAgIGhvaXN0YWJsZVJvb3QuaGVhZC5pbnNlcnRCZWZvcmUoXG4gICAgICAgIGluc3RhbmNlLFxuICAgICAgICBcInRpdGxlXCIgPT09IHR5cGUgPyBob2lzdGFibGVSb290LnF1ZXJ5U2VsZWN0b3IoXCJoZWFkID4gdGl0bGVcIikgOiBudWxsXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0hvc3RIb2lzdGFibGVUeXBlKHR5cGUsIHByb3BzLCBob3N0Q29udGV4dCkge1xuICAgICAgdmFyIG91dHNpZGVIb3N0Q29udGFpbmVyQ29udGV4dCA9XG4gICAgICAgICFob3N0Q29udGV4dC5hbmNlc3RvckluZm8uY29udGFpbmVyVGFnSW5TY29wZTtcbiAgICAgIGlmIChcbiAgICAgICAgaG9zdENvbnRleHQuY29udGV4dCA9PT0gSG9zdENvbnRleHROYW1lc3BhY2VTdmcgfHxcbiAgICAgICAgbnVsbCAhPSBwcm9wcy5pdGVtUHJvcFxuICAgICAgKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICFvdXRzaWRlSG9zdENvbnRhaW5lckNvbnRleHQgfHxcbiAgICAgICAgICAgIG51bGwgPT0gcHJvcHMuaXRlbVByb3AgfHxcbiAgICAgICAgICAgIChcIm1ldGFcIiAhPT0gdHlwZSAmJlxuICAgICAgICAgICAgICBcInRpdGxlXCIgIT09IHR5cGUgJiZcbiAgICAgICAgICAgICAgXCJzdHlsZVwiICE9PSB0eXBlICYmXG4gICAgICAgICAgICAgIFwibGlua1wiICE9PSB0eXBlICYmXG4gICAgICAgICAgICAgIFwic2NyaXB0XCIgIT09IHR5cGUpIHx8XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkNhbm5vdCByZW5kZXIgYSA8JXM+IG91dHNpZGUgdGhlIG1haW4gZG9jdW1lbnQgaWYgaXQgaGFzIGFuIGBpdGVtUHJvcGAgcHJvcC4gYGl0ZW1Qcm9wYCBzdWdnZXN0cyB0aGUgdGFnIGJlbG9uZ3MgdG8gYW4gYGl0ZW1TY29wZWAgd2hpY2ggY2FuIGFwcGVhciBhbnl3aGVyZSBpbiB0aGUgRE9NLiBJZiB5b3Ugd2VyZSBpbnRlbmRpbmcgZm9yIFJlYWN0IHRvIGhvaXN0IHRoaXMgPCVzPiByZW1vdmUgdGhlIGBpdGVtUHJvcGAgcHJvcC4gT3RoZXJ3aXNlLCB0cnkgbW92aW5nIHRoaXMgdGFnIGludG8gdGhlIDxoZWFkPiBvciA8Ym9keT4gb2YgdGhlIERvY3VtZW50LlwiLFxuICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICB0eXBlXG4gICAgICAgICAgICApLFxuICAgICAgICAgICExXG4gICAgICAgICk7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBcIm1ldGFcIjpcbiAgICAgICAgY2FzZSBcInRpdGxlXCI6XG4gICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICBjYXNlIFwic3R5bGVcIjpcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBcInN0cmluZ1wiICE9PSB0eXBlb2YgcHJvcHMucHJlY2VkZW5jZSB8fFxuICAgICAgICAgICAgXCJzdHJpbmdcIiAhPT0gdHlwZW9mIHByb3BzLmhyZWYgfHxcbiAgICAgICAgICAgIFwiXCIgPT09IHByb3BzLmhyZWZcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIG91dHNpZGVIb3N0Q29udGFpbmVyQ29udGV4dCAmJlxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICdDYW5ub3QgcmVuZGVyIGEgPHN0eWxlPiBvdXRzaWRlIHRoZSBtYWluIGRvY3VtZW50IHdpdGhvdXQga25vd2luZyBpdHMgcHJlY2VkZW5jZSBhbmQgYSB1bmlxdWUgaHJlZiBrZXkuIFJlYWN0IGNhbiBob2lzdCBhbmQgZGVkdXBsaWNhdGUgPHN0eWxlPiB0YWdzIGlmIHlvdSBwcm92aWRlIGEgYHByZWNlZGVuY2VgIHByb3AgYWxvbmcgd2l0aCBhbiBgaHJlZmAgcHJvcCB0aGF0IGRvZXMgbm90IGNvbmZsaWN0IHdpdGggdGhlIGBocmVmYCB2YWx1ZXMgdXNlZCBpbiBhbnkgb3RoZXIgaG9pc3RlZCA8c3R5bGU+IG9yIDxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiAuLi4+IHRhZ3MuICBOb3RlIHRoYXQgaG9pc3RpbmcgPHN0eWxlPiB0YWdzIGlzIGNvbnNpZGVyZWQgYW4gYWR2YW5jZWQgZmVhdHVyZSB0aGF0IG1vc3Qgd2lsbCBub3QgdXNlIGRpcmVjdGx5LiBDb25zaWRlciBtb3ZpbmcgdGhlIDxzdHlsZT4gdGFnIHRvIHRoZSA8aGVhZD4gb3IgY29uc2lkZXIgYWRkaW5nIGEgYHByZWNlZGVuY2U9XCJkZWZhdWx0XCJgIGFuZCBgaHJlZj1cInNvbWUgdW5pcXVlIHJlc291cmNlIGlkZW50aWZpZXJcImAuJ1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgY2FzZSBcImxpbmtcIjpcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBcInN0cmluZ1wiICE9PSB0eXBlb2YgcHJvcHMucmVsIHx8XG4gICAgICAgICAgICBcInN0cmluZ1wiICE9PSB0eXBlb2YgcHJvcHMuaHJlZiB8fFxuICAgICAgICAgICAgXCJcIiA9PT0gcHJvcHMuaHJlZiB8fFxuICAgICAgICAgICAgcHJvcHMub25Mb2FkIHx8XG4gICAgICAgICAgICBwcm9wcy5vbkVycm9yXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIFwic3R5bGVzaGVldFwiID09PSBwcm9wcy5yZWwgJiZcbiAgICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHByb3BzLnByZWNlZGVuY2VcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0eXBlID0gcHJvcHMuaHJlZjtcbiAgICAgICAgICAgICAgdmFyIG9uRXJyb3IgPSBwcm9wcy5vbkVycm9yLFxuICAgICAgICAgICAgICAgIGRpc2FibGVkID0gcHJvcHMuZGlzYWJsZWQ7XG4gICAgICAgICAgICAgIGhvc3RDb250ZXh0ID0gW107XG4gICAgICAgICAgICAgIHByb3BzLm9uTG9hZCAmJiBob3N0Q29udGV4dC5wdXNoKFwiYG9uTG9hZGBcIik7XG4gICAgICAgICAgICAgIG9uRXJyb3IgJiYgaG9zdENvbnRleHQucHVzaChcImBvbkVycm9yYFwiKTtcbiAgICAgICAgICAgICAgbnVsbCAhPSBkaXNhYmxlZCAmJiBob3N0Q29udGV4dC5wdXNoKFwiYGRpc2FibGVkYFwiKTtcbiAgICAgICAgICAgICAgb25FcnJvciA9IHByb3BOYW1lc0xpc3RKb2luKGhvc3RDb250ZXh0LCBcImFuZFwiKTtcbiAgICAgICAgICAgICAgb25FcnJvciArPSAxID09PSBob3N0Q29udGV4dC5sZW5ndGggPyBcIiBwcm9wXCIgOiBcIiBwcm9wc1wiO1xuICAgICAgICAgICAgICBkaXNhYmxlZCA9XG4gICAgICAgICAgICAgICAgMSA9PT0gaG9zdENvbnRleHQubGVuZ3RoID8gXCJhbiBcIiArIG9uRXJyb3IgOiBcInRoZSBcIiArIG9uRXJyb3I7XG4gICAgICAgICAgICAgIGhvc3RDb250ZXh0Lmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAnUmVhY3QgZW5jb3VudGVyZWQgYSA8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cIiVzXCIgLi4uIC8+IHdpdGggYSBgcHJlY2VkZW5jZWAgcHJvcCB0aGF0IGFsc28gaW5jbHVkZWQgJXMuIFRoZSBwcmVzZW5jZSBvZiBsb2FkaW5nIGFuZCBlcnJvciBoYW5kbGVycyBpbmRpY2F0ZXMgYW4gaW50ZW50IHRvIG1hbmFnZSB0aGUgc3R5bGVzaGVldCBsb2FkaW5nIHN0YXRlIGZyb20geW91ciBmcm9tIHlvdXIgQ29tcG9uZW50IGNvZGUgYW5kIFJlYWN0IHdpbGwgbm90IGhvaXN0IG9yIGRlZHVwbGljYXRlIHRoaXMgc3R5bGVzaGVldC4gSWYgeW91ciBpbnRlbnQgd2FzIHRvIGhhdmUgUmVhY3QgaG9pc3QgYW5kIGRlZHVwbGNpYXRlIHRoaXMgc3R5bGVzaGVldCB1c2luZyB0aGUgYHByZWNlZGVuY2VgIHByb3AgcmVtb3ZlIHRoZSAlcywgb3RoZXJ3aXNlIHJlbW92ZSB0aGUgYHByZWNlZGVuY2VgIHByb3AuJyxcbiAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAgIG9uRXJyb3JcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0c2lkZUhvc3RDb250YWluZXJDb250ZXh0ICYmXG4gICAgICAgICAgICAgIChcInN0cmluZ1wiICE9PSB0eXBlb2YgcHJvcHMucmVsIHx8XG4gICAgICAgICAgICAgIFwic3RyaW5nXCIgIT09IHR5cGVvZiBwcm9wcy5ocmVmIHx8XG4gICAgICAgICAgICAgIFwiXCIgPT09IHByb3BzLmhyZWZcbiAgICAgICAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiQ2Fubm90IHJlbmRlciBhIDxsaW5rPiBvdXRzaWRlIHRoZSBtYWluIGRvY3VtZW50IHdpdGhvdXQgYSBgcmVsYCBhbmQgYGhyZWZgIHByb3AuIFRyeSBhZGRpbmcgYSBgcmVsYCBhbmQvb3IgYGhyZWZgIHByb3AgdG8gdGhpcyA8bGluaz4gb3IgbW92aW5nIHRoZSBsaW5rIGludG8gdGhlIDxoZWFkPiB0YWdcIlxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogKHByb3BzLm9uRXJyb3IgfHwgcHJvcHMub25Mb2FkKSAmJlxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgXCJDYW5ub3QgcmVuZGVyIGEgPGxpbms+IHdpdGggb25Mb2FkIG9yIG9uRXJyb3IgbGlzdGVuZXJzIG91dHNpZGUgdGhlIG1haW4gZG9jdW1lbnQuIFRyeSByZW1vdmluZyBvbkxvYWQ9ey4uLn0gYW5kIG9uRXJyb3I9ey4uLn0gb3IgbW92aW5nIGl0IGludG8gdGhlIHJvb3QgPGhlYWQ+IHRhZyBvciBzb21ld2hlcmUgaW4gdGhlIDxib2R5Pi5cIlxuICAgICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgc3dpdGNoIChwcm9wcy5yZWwpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzdHlsZXNoZWV0XCI6XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgKHR5cGUgPSBwcm9wcy5wcmVjZWRlbmNlKSxcbiAgICAgICAgICAgICAgICAocHJvcHMgPSBwcm9wcy5kaXNhYmxlZCksXG4gICAgICAgICAgICAgICAgXCJzdHJpbmdcIiAhPT0gdHlwZW9mIHR5cGUgJiZcbiAgICAgICAgICAgICAgICAgIG91dHNpZGVIb3N0Q29udGFpbmVyQ29udGV4dCAmJlxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgJ0Nhbm5vdCByZW5kZXIgYSA8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgLz4gb3V0c2lkZSB0aGUgbWFpbiBkb2N1bWVudCB3aXRob3V0IGtub3dpbmcgaXRzIHByZWNlZGVuY2UuIENvbnNpZGVyIGFkZGluZyBwcmVjZWRlbmNlPVwiZGVmYXVsdFwiIG9yIG1vdmluZyBpdCBpbnRvIHRoZSByb290IDxoZWFkPiB0YWcuJ1xuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgdHlwZSAmJiBudWxsID09IHByb3BzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlIFwic2NyaXB0XCI6XG4gICAgICAgICAgdHlwZSA9XG4gICAgICAgICAgICBwcm9wcy5hc3luYyAmJlxuICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgcHJvcHMuYXN5bmMgJiZcbiAgICAgICAgICAgIFwic3ltYm9sXCIgIT09IHR5cGVvZiBwcm9wcy5hc3luYztcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdHlwZSB8fFxuICAgICAgICAgICAgcHJvcHMub25Mb2FkIHx8XG4gICAgICAgICAgICBwcm9wcy5vbkVycm9yIHx8XG4gICAgICAgICAgICAhcHJvcHMuc3JjIHx8XG4gICAgICAgICAgICBcInN0cmluZ1wiICE9PSB0eXBlb2YgcHJvcHMuc3JjXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBvdXRzaWRlSG9zdENvbnRhaW5lckNvbnRleHQgJiZcbiAgICAgICAgICAgICAgKHR5cGVcbiAgICAgICAgICAgICAgICA/IHByb3BzLm9uTG9hZCB8fCBwcm9wcy5vbkVycm9yXG4gICAgICAgICAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgXCJDYW5ub3QgcmVuZGVyIGEgPHNjcmlwdD4gd2l0aCBvbkxvYWQgb3Igb25FcnJvciBsaXN0ZW5lcnMgb3V0c2lkZSB0aGUgbWFpbiBkb2N1bWVudC4gVHJ5IHJlbW92aW5nIG9uTG9hZD17Li4ufSBhbmQgb25FcnJvcj17Li4ufSBvciBtb3ZpbmcgaXQgaW50byB0aGUgcm9vdCA8aGVhZD4gdGFnIG9yIHNvbWV3aGVyZSBpbiB0aGUgPGJvZHk+LlwiXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICBcIkNhbm5vdCByZW5kZXIgYSA8c2NyaXB0PiBvdXRzaWRlIHRoZSBtYWluIGRvY3VtZW50IHdpdGhvdXQgYGFzeW5jPXt0cnVlfWAgYW5kIGEgbm9uLWVtcHR5IGBzcmNgIHByb3AuIEVuc3VyZSB0aGVyZSBpcyBhIHZhbGlkIGBzcmNgIGFuZCBlaXRoZXIgbWFrZSB0aGUgc2NyaXB0IGFzeW5jIG9yIG1vdmUgaXQgaW50byB0aGUgcm9vdCA8aGVhZD4gdGFnIG9yIHNvbWV3aGVyZSBpbiB0aGUgPGJvZHk+LlwiXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICdDYW5ub3QgcmVuZGVyIGEgc3luYyBvciBkZWZlciA8c2NyaXB0PiBvdXRzaWRlIHRoZSBtYWluIGRvY3VtZW50IHdpdGhvdXQga25vd2luZyBpdHMgb3JkZXIuIFRyeSBhZGRpbmcgYXN5bmM9XCJcIiBvciBtb3ZpbmcgaXQgaW50byB0aGUgcm9vdCA8aGVhZD4gdGFnLidcbiAgICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgY2FzZSBcIm5vc2NyaXB0XCI6XG4gICAgICAgIGNhc2UgXCJ0ZW1wbGF0ZVwiOlxuICAgICAgICAgIG91dHNpZGVIb3N0Q29udGFpbmVyQ29udGV4dCAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJDYW5ub3QgcmVuZGVyIDwlcz4gb3V0c2lkZSB0aGUgbWFpbiBkb2N1bWVudC4gVHJ5IG1vdmluZyBpdCBpbnRvIHRoZSByb290IDxoZWFkPiB0YWcuXCIsXG4gICAgICAgICAgICAgIHR5cGVcbiAgICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gITE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByZWxvYWRSZXNvdXJjZShyZXNvdXJjZSkge1xuICAgICAgcmV0dXJuIFwic3R5bGVzaGVldFwiID09PSByZXNvdXJjZS50eXBlICYmXG4gICAgICAgIChyZXNvdXJjZS5zdGF0ZS5sb2FkaW5nICYgU2V0dGxlZCkgPT09IE5vdExvYWRlZFxuICAgICAgICA/ICExXG4gICAgICAgIDogITA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHN1c3BlbmRSZXNvdXJjZShob2lzdGFibGVSb290LCByZXNvdXJjZSwgcHJvcHMpIHtcbiAgICAgIGlmIChudWxsID09PSBzdXNwZW5kZWRTdGF0ZSlcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJJbnRlcm5hbCBSZWFjdCBFcnJvcjogc3VzcGVuZGVkU3RhdGUgbnVsbCB3aGVuIGl0IHdhcyBleHBlY3RlZCB0byBleGlzdHMuIFBsZWFzZSByZXBvcnQgdGhpcyBhcyBhIFJlYWN0IGJ1Zy5cIlxuICAgICAgICApO1xuICAgICAgdmFyIHN0YXRlID0gc3VzcGVuZGVkU3RhdGU7XG4gICAgICBpZiAoXG4gICAgICAgIFwic3R5bGVzaGVldFwiID09PSByZXNvdXJjZS50eXBlICYmXG4gICAgICAgIChcInN0cmluZ1wiICE9PSB0eXBlb2YgcHJvcHMubWVkaWEgfHxcbiAgICAgICAgICAhMSAhPT0gbWF0Y2hNZWRpYShwcm9wcy5tZWRpYSkubWF0Y2hlcykgJiZcbiAgICAgICAgKHJlc291cmNlLnN0YXRlLmxvYWRpbmcgJiBJbnNlcnRlZCkgPT09IE5vdExvYWRlZFxuICAgICAgKSB7XG4gICAgICAgIGlmIChudWxsID09PSByZXNvdXJjZS5pbnN0YW5jZSkge1xuICAgICAgICAgIHZhciBrZXkgPSBnZXRTdHlsZUtleShwcm9wcy5ocmVmKSxcbiAgICAgICAgICAgIGluc3RhbmNlID0gaG9pc3RhYmxlUm9vdC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgICBnZXRTdHlsZXNoZWV0U2VsZWN0b3JGcm9tS2V5KGtleSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICAgICAgICBob2lzdGFibGVSb290ID0gaW5zdGFuY2UuX3A7XG4gICAgICAgICAgICBudWxsICE9PSBob2lzdGFibGVSb290ICYmXG4gICAgICAgICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBob2lzdGFibGVSb290ICYmXG4gICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGhvaXN0YWJsZVJvb3QudGhlbiAmJlxuICAgICAgICAgICAgICAoc3RhdGUuY291bnQrKyxcbiAgICAgICAgICAgICAgKHN0YXRlID0gb25VbnN1c3BlbmQuYmluZChzdGF0ZSkpLFxuICAgICAgICAgICAgICBob2lzdGFibGVSb290LnRoZW4oc3RhdGUsIHN0YXRlKSk7XG4gICAgICAgICAgICByZXNvdXJjZS5zdGF0ZS5sb2FkaW5nIHw9IEluc2VydGVkO1xuICAgICAgICAgICAgcmVzb3VyY2UuaW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICAgICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUoaW5zdGFuY2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbnN0YW5jZSA9IGhvaXN0YWJsZVJvb3Qub3duZXJEb2N1bWVudCB8fCBob2lzdGFibGVSb290O1xuICAgICAgICAgIHByb3BzID0gc3R5bGVzaGVldFByb3BzRnJvbVJhd1Byb3BzKHByb3BzKTtcbiAgICAgICAgICAoa2V5ID0gcHJlbG9hZFByb3BzTWFwLmdldChrZXkpKSAmJlxuICAgICAgICAgICAgYWRvcHRQcmVsb2FkUHJvcHNGb3JTdHlsZXNoZWV0KHByb3BzLCBrZXkpO1xuICAgICAgICAgIGluc3RhbmNlID0gaW5zdGFuY2UuY3JlYXRlRWxlbWVudChcImxpbmtcIik7XG4gICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShpbnN0YW5jZSk7XG4gICAgICAgICAgdmFyIGxpbmtJbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgICAgICAgIGxpbmtJbnN0YW5jZS5fcCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIGxpbmtJbnN0YW5jZS5vbmxvYWQgPSByZXNvbHZlO1xuICAgICAgICAgICAgbGlua0luc3RhbmNlLm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgc2V0SW5pdGlhbFByb3BlcnRpZXMoaW5zdGFuY2UsIFwibGlua1wiLCBwcm9wcyk7XG4gICAgICAgICAgcmVzb3VyY2UuaW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICAgICAgfVxuICAgICAgICBudWxsID09PSBzdGF0ZS5zdHlsZXNoZWV0cyAmJiAoc3RhdGUuc3R5bGVzaGVldHMgPSBuZXcgTWFwKCkpO1xuICAgICAgICBzdGF0ZS5zdHlsZXNoZWV0cy5zZXQocmVzb3VyY2UsIGhvaXN0YWJsZVJvb3QpO1xuICAgICAgICAoaG9pc3RhYmxlUm9vdCA9IHJlc291cmNlLnN0YXRlLnByZWxvYWQpICYmXG4gICAgICAgICAgKHJlc291cmNlLnN0YXRlLmxvYWRpbmcgJiBTZXR0bGVkKSA9PT0gTm90TG9hZGVkICYmXG4gICAgICAgICAgKHN0YXRlLmNvdW50KyssXG4gICAgICAgICAgKHJlc291cmNlID0gb25VbnN1c3BlbmQuYmluZChzdGF0ZSkpLFxuICAgICAgICAgIGhvaXN0YWJsZVJvb3QuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgcmVzb3VyY2UpLFxuICAgICAgICAgIGhvaXN0YWJsZVJvb3QuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHJlc291cmNlKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhaXRGb3JDb21taXRUb0JlUmVhZHkoKSB7XG4gICAgICBpZiAobnVsbCA9PT0gc3VzcGVuZGVkU3RhdGUpXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiSW50ZXJuYWwgUmVhY3QgRXJyb3I6IHN1c3BlbmRlZFN0YXRlIG51bGwgd2hlbiBpdCB3YXMgZXhwZWN0ZWQgdG8gZXhpc3RzLiBQbGVhc2UgcmVwb3J0IHRoaXMgYXMgYSBSZWFjdCBidWcuXCJcbiAgICAgICAgKTtcbiAgICAgIHZhciBzdGF0ZSA9IHN1c3BlbmRlZFN0YXRlO1xuICAgICAgc3RhdGUuc3R5bGVzaGVldHMgJiZcbiAgICAgICAgMCA9PT0gc3RhdGUuY291bnQgJiZcbiAgICAgICAgaW5zZXJ0U3VzcGVuZGVkU3R5bGVzaGVldHMoc3RhdGUsIHN0YXRlLnN0eWxlc2hlZXRzKTtcbiAgICAgIHJldHVybiAwIDwgc3RhdGUuY291bnRcbiAgICAgICAgPyBmdW5jdGlvbiAoY29tbWl0KSB7XG4gICAgICAgICAgICB2YXIgc3R5bGVzaGVldFRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHN0YXRlLnN0eWxlc2hlZXRzICYmXG4gICAgICAgICAgICAgICAgaW5zZXJ0U3VzcGVuZGVkU3R5bGVzaGVldHMoc3RhdGUsIHN0YXRlLnN0eWxlc2hlZXRzKTtcbiAgICAgICAgICAgICAgaWYgKHN0YXRlLnVuc3VzcGVuZCkge1xuICAgICAgICAgICAgICAgIHZhciB1bnN1c3BlbmQgPSBzdGF0ZS51bnN1c3BlbmQ7XG4gICAgICAgICAgICAgICAgc3RhdGUudW5zdXNwZW5kID0gbnVsbDtcbiAgICAgICAgICAgICAgICB1bnN1c3BlbmQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgNmU0KTtcbiAgICAgICAgICAgIHN0YXRlLnVuc3VzcGVuZCA9IGNvbW1pdDtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHN0YXRlLnVuc3VzcGVuZCA9IG51bGw7XG4gICAgICAgICAgICAgIGNsZWFyVGltZW91dChzdHlsZXNoZWV0VGltZXIpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gb25VbnN1c3BlbmQoKSB7XG4gICAgICB0aGlzLmNvdW50LS07XG4gICAgICBpZiAoMCA9PT0gdGhpcy5jb3VudClcbiAgICAgICAgaWYgKHRoaXMuc3R5bGVzaGVldHMpXG4gICAgICAgICAgaW5zZXJ0U3VzcGVuZGVkU3R5bGVzaGVldHModGhpcywgdGhpcy5zdHlsZXNoZWV0cyk7XG4gICAgICAgIGVsc2UgaWYgKHRoaXMudW5zdXNwZW5kKSB7XG4gICAgICAgICAgdmFyIHVuc3VzcGVuZCA9IHRoaXMudW5zdXNwZW5kO1xuICAgICAgICAgIHRoaXMudW5zdXNwZW5kID0gbnVsbDtcbiAgICAgICAgICB1bnN1c3BlbmQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpbnNlcnRTdXNwZW5kZWRTdHlsZXNoZWV0cyhzdGF0ZSwgcmVzb3VyY2VzKSB7XG4gICAgICBzdGF0ZS5zdHlsZXNoZWV0cyA9IG51bGw7XG4gICAgICBudWxsICE9PSBzdGF0ZS51bnN1c3BlbmQgJiZcbiAgICAgICAgKHN0YXRlLmNvdW50KyssXG4gICAgICAgIChwcmVjZWRlbmNlc0J5Um9vdCA9IG5ldyBNYXAoKSksXG4gICAgICAgIHJlc291cmNlcy5mb3JFYWNoKGluc2VydFN0eWxlc2hlZXRJbnRvUm9vdCwgc3RhdGUpLFxuICAgICAgICAocHJlY2VkZW5jZXNCeVJvb3QgPSBudWxsKSxcbiAgICAgICAgb25VbnN1c3BlbmQuY2FsbChzdGF0ZSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbnNlcnRTdHlsZXNoZWV0SW50b1Jvb3Qocm9vdCwgcmVzb3VyY2UpIHtcbiAgICAgIGlmICghKHJlc291cmNlLnN0YXRlLmxvYWRpbmcgJiBJbnNlcnRlZCkpIHtcbiAgICAgICAgdmFyIHByZWNlZGVuY2VzID0gcHJlY2VkZW5jZXNCeVJvb3QuZ2V0KHJvb3QpO1xuICAgICAgICBpZiAocHJlY2VkZW5jZXMpIHZhciBsYXN0ID0gcHJlY2VkZW5jZXMuZ2V0KExBU1RfUFJFQ0VERU5DRSk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHByZWNlZGVuY2VzID0gbmV3IE1hcCgpO1xuICAgICAgICAgIHByZWNlZGVuY2VzQnlSb290LnNldChyb290LCBwcmVjZWRlbmNlcyk7XG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIHZhciBub2RlcyA9IHJvb3QucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgICAgICAgICBcImxpbmtbZGF0YS1wcmVjZWRlbmNlXSxzdHlsZVtkYXRhLXByZWNlZGVuY2VdXCJcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgaSA9IDA7XG4gICAgICAgICAgICBpIDwgbm9kZXMubGVuZ3RoO1xuICAgICAgICAgICAgaSsrXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBcIkxJTktcIiA9PT0gbm9kZS5ub2RlTmFtZSB8fFxuICAgICAgICAgICAgICBcIm5vdCBhbGxcIiAhPT0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJtZWRpYVwiKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBwcmVjZWRlbmNlcy5zZXQobm9kZS5kYXRhc2V0LnByZWNlZGVuY2UsIG5vZGUpLCAobGFzdCA9IG5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsYXN0ICYmIHByZWNlZGVuY2VzLnNldChMQVNUX1BSRUNFREVOQ0UsIGxhc3QpO1xuICAgICAgICB9XG4gICAgICAgIG5vZGVzID0gcmVzb3VyY2UuaW5zdGFuY2U7XG4gICAgICAgIG5vZGUgPSBub2Rlcy5nZXRBdHRyaWJ1dGUoXCJkYXRhLXByZWNlZGVuY2VcIik7XG4gICAgICAgIGkgPSBwcmVjZWRlbmNlcy5nZXQobm9kZSkgfHwgbGFzdDtcbiAgICAgICAgaSA9PT0gbGFzdCAmJiBwcmVjZWRlbmNlcy5zZXQoTEFTVF9QUkVDRURFTkNFLCBub2Rlcyk7XG4gICAgICAgIHByZWNlZGVuY2VzLnNldChub2RlLCBub2Rlcyk7XG4gICAgICAgIHRoaXMuY291bnQrKztcbiAgICAgICAgbGFzdCA9IG9uVW5zdXNwZW5kLmJpbmQodGhpcyk7XG4gICAgICAgIG5vZGVzLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIGxhc3QpO1xuICAgICAgICBub2Rlcy5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgbGFzdCk7XG4gICAgICAgIGlcbiAgICAgICAgICA/IGkucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZXMsIGkubmV4dFNpYmxpbmcpXG4gICAgICAgICAgOiAoKHJvb3QgPSA5ID09PSByb290Lm5vZGVUeXBlID8gcm9vdC5oZWFkIDogcm9vdCksXG4gICAgICAgICAgICByb290Lmluc2VydEJlZm9yZShub2Rlcywgcm9vdC5maXJzdENoaWxkKSk7XG4gICAgICAgIHJlc291cmNlLnN0YXRlLmxvYWRpbmcgfD0gSW5zZXJ0ZWQ7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIEZpYmVyUm9vdE5vZGUoXG4gICAgICBjb250YWluZXJJbmZvLFxuICAgICAgdGFnLFxuICAgICAgaHlkcmF0ZSxcbiAgICAgIGlkZW50aWZpZXJQcmVmaXgsXG4gICAgICBvblVuY2F1Z2h0RXJyb3IsXG4gICAgICBvbkNhdWdodEVycm9yLFxuICAgICAgb25SZWNvdmVyYWJsZUVycm9yLFxuICAgICAgb25EZWZhdWx0VHJhbnNpdGlvbkluZGljYXRvcixcbiAgICAgIGZvcm1TdGF0ZVxuICAgICkge1xuICAgICAgdGhpcy50YWcgPSAxO1xuICAgICAgdGhpcy5jb250YWluZXJJbmZvID0gY29udGFpbmVySW5mbztcbiAgICAgIHRoaXMucGluZ0NhY2hlID0gdGhpcy5jdXJyZW50ID0gdGhpcy5wZW5kaW5nQ2hpbGRyZW4gPSBudWxsO1xuICAgICAgdGhpcy50aW1lb3V0SGFuZGxlID0gbm9UaW1lb3V0O1xuICAgICAgdGhpcy5jYWxsYmFja05vZGUgPVxuICAgICAgICB0aGlzLm5leHQgPVxuICAgICAgICB0aGlzLnBlbmRpbmdDb250ZXh0ID1cbiAgICAgICAgdGhpcy5jb250ZXh0ID1cbiAgICAgICAgdGhpcy5jYW5jZWxQZW5kaW5nQ29tbWl0ID1cbiAgICAgICAgICBudWxsO1xuICAgICAgdGhpcy5jYWxsYmFja1ByaW9yaXR5ID0gMDtcbiAgICAgIHRoaXMuZXhwaXJhdGlvblRpbWVzID0gY3JlYXRlTGFuZU1hcCgtMSk7XG4gICAgICB0aGlzLmVudGFuZ2xlZExhbmVzID1cbiAgICAgICAgdGhpcy5zaGVsbFN1c3BlbmRDb3VudGVyID1cbiAgICAgICAgdGhpcy5lcnJvclJlY292ZXJ5RGlzYWJsZWRMYW5lcyA9XG4gICAgICAgIHRoaXMuZXhwaXJlZExhbmVzID1cbiAgICAgICAgdGhpcy53YXJtTGFuZXMgPVxuICAgICAgICB0aGlzLnBpbmdlZExhbmVzID1cbiAgICAgICAgdGhpcy5zdXNwZW5kZWRMYW5lcyA9XG4gICAgICAgIHRoaXMucGVuZGluZ0xhbmVzID1cbiAgICAgICAgICAwO1xuICAgICAgdGhpcy5lbnRhbmdsZW1lbnRzID0gY3JlYXRlTGFuZU1hcCgwKTtcbiAgICAgIHRoaXMuaGlkZGVuVXBkYXRlcyA9IGNyZWF0ZUxhbmVNYXAobnVsbCk7XG4gICAgICB0aGlzLmlkZW50aWZpZXJQcmVmaXggPSBpZGVudGlmaWVyUHJlZml4O1xuICAgICAgdGhpcy5vblVuY2F1Z2h0RXJyb3IgPSBvblVuY2F1Z2h0RXJyb3I7XG4gICAgICB0aGlzLm9uQ2F1Z2h0RXJyb3IgPSBvbkNhdWdodEVycm9yO1xuICAgICAgdGhpcy5vblJlY292ZXJhYmxlRXJyb3IgPSBvblJlY292ZXJhYmxlRXJyb3I7XG4gICAgICB0aGlzLnBvb2xlZENhY2hlID0gbnVsbDtcbiAgICAgIHRoaXMucG9vbGVkQ2FjaGVMYW5lcyA9IDA7XG4gICAgICB0aGlzLmZvcm1TdGF0ZSA9IGZvcm1TdGF0ZTtcbiAgICAgIHRoaXMuaW5jb21wbGV0ZVRyYW5zaXRpb25zID0gbmV3IE1hcCgpO1xuICAgICAgdGhpcy5wYXNzaXZlRWZmZWN0RHVyYXRpb24gPSB0aGlzLmVmZmVjdER1cmF0aW9uID0gLTA7XG4gICAgICB0aGlzLm1lbW9pemVkVXBkYXRlcnMgPSBuZXcgU2V0KCk7XG4gICAgICBjb250YWluZXJJbmZvID0gdGhpcy5wZW5kaW5nVXBkYXRlcnNMYW5lTWFwID0gW107XG4gICAgICBmb3IgKHRhZyA9IDA7IDMxID4gdGFnOyB0YWcrKykgY29udGFpbmVySW5mby5wdXNoKG5ldyBTZXQoKSk7XG4gICAgICB0aGlzLl9kZWJ1Z1Jvb3RUeXBlID0gaHlkcmF0ZSA/IFwiaHlkcmF0ZVJvb3QoKVwiIDogXCJjcmVhdGVSb290KClcIjtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRmliZXJSb290KFxuICAgICAgY29udGFpbmVySW5mbyxcbiAgICAgIHRhZyxcbiAgICAgIGh5ZHJhdGUsXG4gICAgICBpbml0aWFsQ2hpbGRyZW4sXG4gICAgICBoeWRyYXRpb25DYWxsYmFja3MsXG4gICAgICBpc1N0cmljdE1vZGUsXG4gICAgICBpZGVudGlmaWVyUHJlZml4LFxuICAgICAgZm9ybVN0YXRlLFxuICAgICAgb25VbmNhdWdodEVycm9yLFxuICAgICAgb25DYXVnaHRFcnJvcixcbiAgICAgIG9uUmVjb3ZlcmFibGVFcnJvcixcbiAgICAgIG9uRGVmYXVsdFRyYW5zaXRpb25JbmRpY2F0b3JcbiAgICApIHtcbiAgICAgIGNvbnRhaW5lckluZm8gPSBuZXcgRmliZXJSb290Tm9kZShcbiAgICAgICAgY29udGFpbmVySW5mbyxcbiAgICAgICAgdGFnLFxuICAgICAgICBoeWRyYXRlLFxuICAgICAgICBpZGVudGlmaWVyUHJlZml4LFxuICAgICAgICBvblVuY2F1Z2h0RXJyb3IsXG4gICAgICAgIG9uQ2F1Z2h0RXJyb3IsXG4gICAgICAgIG9uUmVjb3ZlcmFibGVFcnJvcixcbiAgICAgICAgb25EZWZhdWx0VHJhbnNpdGlvbkluZGljYXRvcixcbiAgICAgICAgZm9ybVN0YXRlXG4gICAgICApO1xuICAgICAgdGFnID0gQ29uY3VycmVudE1vZGU7XG4gICAgICAhMCA9PT0gaXNTdHJpY3RNb2RlICYmICh0YWcgfD0gU3RyaWN0TGVnYWN5TW9kZSB8IFN0cmljdEVmZmVjdHNNb2RlKTtcbiAgICAgIGlzRGV2VG9vbHNQcmVzZW50ICYmICh0YWcgfD0gUHJvZmlsZU1vZGUpO1xuICAgICAgaXNTdHJpY3RNb2RlID0gY3JlYXRlRmliZXIoMywgbnVsbCwgbnVsbCwgdGFnKTtcbiAgICAgIGNvbnRhaW5lckluZm8uY3VycmVudCA9IGlzU3RyaWN0TW9kZTtcbiAgICAgIGlzU3RyaWN0TW9kZS5zdGF0ZU5vZGUgPSBjb250YWluZXJJbmZvO1xuICAgICAgdGFnID0gY3JlYXRlQ2FjaGUoKTtcbiAgICAgIHJldGFpbkNhY2hlKHRhZyk7XG4gICAgICBjb250YWluZXJJbmZvLnBvb2xlZENhY2hlID0gdGFnO1xuICAgICAgcmV0YWluQ2FjaGUodGFnKTtcbiAgICAgIGlzU3RyaWN0TW9kZS5tZW1vaXplZFN0YXRlID0ge1xuICAgICAgICBlbGVtZW50OiBpbml0aWFsQ2hpbGRyZW4sXG4gICAgICAgIGlzRGVoeWRyYXRlZDogaHlkcmF0ZSxcbiAgICAgICAgY2FjaGU6IHRhZ1xuICAgICAgfTtcbiAgICAgIGluaXRpYWxpemVVcGRhdGVRdWV1ZShpc1N0cmljdE1vZGUpO1xuICAgICAgcmV0dXJuIGNvbnRhaW5lckluZm87XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldENvbnRleHRGb3JTdWJ0cmVlKHBhcmVudENvbXBvbmVudCkge1xuICAgICAgaWYgKCFwYXJlbnRDb21wb25lbnQpIHJldHVybiBlbXB0eUNvbnRleHRPYmplY3Q7XG4gICAgICBwYXJlbnRDb21wb25lbnQgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG4gICAgICByZXR1cm4gcGFyZW50Q29tcG9uZW50O1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVDb250YWluZXJJbXBsKFxuICAgICAgcm9vdEZpYmVyLFxuICAgICAgbGFuZSxcbiAgICAgIGVsZW1lbnQsXG4gICAgICBjb250YWluZXIsXG4gICAgICBwYXJlbnRDb21wb25lbnQsXG4gICAgICBjYWxsYmFja1xuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICBpbmplY3RlZEhvb2sgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5qZWN0ZWRIb29rLm9uU2NoZWR1bGVGaWJlclJvb3RcbiAgICAgIClcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpbmplY3RlZEhvb2sub25TY2hlZHVsZUZpYmVyUm9vdChyZW5kZXJlcklELCBjb250YWluZXIsIGVsZW1lbnQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBoYXNMb2dnZWRFcnJvciB8fFxuICAgICAgICAgICAgKChoYXNMb2dnZWRFcnJvciA9ICEwKSxcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlc1wiLFxuICAgICAgICAgICAgICBlcnJcbiAgICAgICAgICAgICkpO1xuICAgICAgICB9XG4gICAgICBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1JlbmRlclNjaGVkdWxlZCAmJlxuICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtSZW5kZXJTY2hlZHVsZWQobGFuZSk7XG4gICAgICBwYXJlbnRDb21wb25lbnQgPSBnZXRDb250ZXh0Rm9yU3VidHJlZShwYXJlbnRDb21wb25lbnQpO1xuICAgICAgbnVsbCA9PT0gY29udGFpbmVyLmNvbnRleHRcbiAgICAgICAgPyAoY29udGFpbmVyLmNvbnRleHQgPSBwYXJlbnRDb21wb25lbnQpXG4gICAgICAgIDogKGNvbnRhaW5lci5wZW5kaW5nQ29udGV4dCA9IHBhcmVudENvbXBvbmVudCk7XG4gICAgICBpc1JlbmRlcmluZyAmJlxuICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICFkaWRXYXJuQWJvdXROZXN0ZWRVcGRhdGVzICYmXG4gICAgICAgICgoZGlkV2FybkFib3V0TmVzdGVkVXBkYXRlcyA9ICEwKSxcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIlJlbmRlciBtZXRob2RzIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlOyB0cmlnZ2VyaW5nIG5lc3RlZCBjb21wb25lbnQgdXBkYXRlcyBmcm9tIHJlbmRlciBpcyBub3QgYWxsb3dlZC4gSWYgbmVjZXNzYXJ5LCB0cmlnZ2VyIG5lc3RlZCB1cGRhdGVzIGluIGNvbXBvbmVudERpZFVwZGF0ZS5cXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiAlcy5cIixcbiAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGN1cnJlbnQpIHx8IFwiVW5rbm93blwiXG4gICAgICAgICkpO1xuICAgICAgY29udGFpbmVyID0gY3JlYXRlVXBkYXRlKGxhbmUpO1xuICAgICAgY29udGFpbmVyLnBheWxvYWQgPSB7IGVsZW1lbnQ6IGVsZW1lbnQgfTtcbiAgICAgIGNhbGxiYWNrID0gdm9pZCAwID09PSBjYWxsYmFjayA/IG51bGwgOiBjYWxsYmFjaztcbiAgICAgIG51bGwgIT09IGNhbGxiYWNrICYmXG4gICAgICAgIChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBjYWxsYmFjayAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkV4cGVjdGVkIHRoZSBsYXN0IG9wdGlvbmFsIGBjYWxsYmFja2AgYXJndW1lbnQgdG8gYmUgYSBmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogJXMuXCIsXG4gICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICksXG4gICAgICAgIChjb250YWluZXIuY2FsbGJhY2sgPSBjYWxsYmFjaykpO1xuICAgICAgZWxlbWVudCA9IGVucXVldWVVcGRhdGUocm9vdEZpYmVyLCBjb250YWluZXIsIGxhbmUpO1xuICAgICAgbnVsbCAhPT0gZWxlbWVudCAmJlxuICAgICAgICAoc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGVsZW1lbnQsIHJvb3RGaWJlciwgbGFuZSksXG4gICAgICAgIGVudGFuZ2xlVHJhbnNpdGlvbnMoZWxlbWVudCwgcm9vdEZpYmVyLCBsYW5lKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcmtSZXRyeUxhbmVJbXBsKGZpYmVyLCByZXRyeUxhbmUpIHtcbiAgICAgIGZpYmVyID0gZmliZXIubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIGlmIChudWxsICE9PSBmaWJlciAmJiBudWxsICE9PSBmaWJlci5kZWh5ZHJhdGVkKSB7XG4gICAgICAgIHZhciBhID0gZmliZXIucmV0cnlMYW5lO1xuICAgICAgICBmaWJlci5yZXRyeUxhbmUgPSAwICE9PSBhICYmIGEgPCByZXRyeUxhbmUgPyBhIDogcmV0cnlMYW5lO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrUmV0cnlMYW5lSWZOb3RIeWRyYXRlZChmaWJlciwgcmV0cnlMYW5lKSB7XG4gICAgICBtYXJrUmV0cnlMYW5lSW1wbChmaWJlciwgcmV0cnlMYW5lKTtcbiAgICAgIChmaWJlciA9IGZpYmVyLmFsdGVybmF0ZSkgJiYgbWFya1JldHJ5TGFuZUltcGwoZmliZXIsIHJldHJ5TGFuZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uKGZpYmVyKSB7XG4gICAgICBpZiAoMTMgPT09IGZpYmVyLnRhZyB8fCAzMSA9PT0gZmliZXIudGFnKSB7XG4gICAgICAgIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCA2NzEwODg2NCk7XG4gICAgICAgIG51bGwgIT09IHJvb3QgJiYgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCA2NzEwODg2NCk7XG4gICAgICAgIG1hcmtSZXRyeUxhbmVJZk5vdEh5ZHJhdGVkKGZpYmVyLCA2NzEwODg2NCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eShmaWJlcikge1xuICAgICAgaWYgKDEzID09PSBmaWJlci50YWcgfHwgMzEgPT09IGZpYmVyLnRhZykge1xuICAgICAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgICAgICAgbGFuZSA9IGdldEJ1bXBlZExhbmVGb3JIeWRyYXRpb25CeUxhbmUobGFuZSk7XG4gICAgICAgIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCBsYW5lKTtcbiAgICAgICAgbnVsbCAhPT0gcm9vdCAmJiBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgZmliZXIsIGxhbmUpO1xuICAgICAgICBtYXJrUmV0cnlMYW5lSWZOb3RIeWRyYXRlZChmaWJlciwgbGFuZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEN1cnJlbnRGaWJlckZvckRldlRvb2xzKCkge1xuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldExhbmVMYWJlbE1hcCgpIHtcbiAgICAgIGZvciAodmFyIG1hcCA9IG5ldyBNYXAoKSwgbGFuZSA9IDEsIGluZGV4ID0gMDsgMzEgPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICB2YXIgbGFiZWwgPSBnZXRMYWJlbEZvckxhbmUobGFuZSk7XG4gICAgICAgIG1hcC5zZXQobGFuZSwgbGFiZWwpO1xuICAgICAgICBsYW5lICo9IDI7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWFwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkaXNwYXRjaERpc2NyZXRlRXZlbnQoXG4gICAgICBkb21FdmVudE5hbWUsXG4gICAgICBldmVudFN5c3RlbUZsYWdzLFxuICAgICAgY29udGFpbmVyLFxuICAgICAgbmF0aXZlRXZlbnRcbiAgICApIHtcbiAgICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQ7XG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscy5UID0gbnVsbDtcbiAgICAgIHZhciBwcmV2aW91c1ByaW9yaXR5ID0gUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucDtcbiAgICAgIHRyeSB7XG4gICAgICAgIChSZWFjdERPTVNoYXJlZEludGVybmFscy5wID0gRGlzY3JldGVFdmVudFByaW9yaXR5KSxcbiAgICAgICAgICBkaXNwYXRjaEV2ZW50KGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgY29udGFpbmVyLCBuYXRpdmVFdmVudCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICAoUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucCA9IHByZXZpb3VzUHJpb3JpdHkpLFxuICAgICAgICAgIChSZWFjdFNoYXJlZEludGVybmFscy5UID0gcHJldlRyYW5zaXRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBkaXNwYXRjaENvbnRpbnVvdXNFdmVudChcbiAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICBjb250YWluZXIsXG4gICAgICBuYXRpdmVFdmVudFxuICAgICkge1xuICAgICAgdmFyIHByZXZUcmFuc2l0aW9uID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuVDtcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSBudWxsO1xuICAgICAgdmFyIHByZXZpb3VzUHJpb3JpdHkgPSBSZWFjdERPTVNoYXJlZEludGVybmFscy5wO1xuICAgICAgdHJ5IHtcbiAgICAgICAgKFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnAgPSBDb250aW51b3VzRXZlbnRQcmlvcml0eSksXG4gICAgICAgICAgZGlzcGF0Y2hFdmVudChkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGNvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgKFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnAgPSBwcmV2aW91c1ByaW9yaXR5KSxcbiAgICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IHByZXZUcmFuc2l0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZGlzcGF0Y2hFdmVudChcbiAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICB0YXJnZXRDb250YWluZXIsXG4gICAgICBuYXRpdmVFdmVudFxuICAgICkge1xuICAgICAgaWYgKF9lbmFibGVkKSB7XG4gICAgICAgIHZhciBibG9ja2VkT24gPSBmaW5kSW5zdGFuY2VCbG9ja2luZ0V2ZW50KG5hdGl2ZUV2ZW50KTtcbiAgICAgICAgaWYgKG51bGwgPT09IGJsb2NrZWRPbilcbiAgICAgICAgICBkaXNwYXRjaEV2ZW50Rm9yUGx1Z2luRXZlbnRTeXN0ZW0oXG4gICAgICAgICAgICBkb21FdmVudE5hbWUsXG4gICAgICAgICAgICBldmVudFN5c3RlbUZsYWdzLFxuICAgICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgICByZXR1cm5fdGFyZ2V0SW5zdCxcbiAgICAgICAgICAgIHRhcmdldENvbnRhaW5lclxuICAgICAgICAgICksXG4gICAgICAgICAgICBjbGVhcklmQ29udGludW91c0V2ZW50KGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpO1xuICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICBxdWV1ZUlmQ29udGludW91c0V2ZW50KFxuICAgICAgICAgICAgYmxvY2tlZE9uLFxuICAgICAgICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgICAgICAgIHRhcmdldENvbnRhaW5lcixcbiAgICAgICAgICAgIG5hdGl2ZUV2ZW50XG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgICAgbmF0aXZlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgIChjbGVhcklmQ29udGludW91c0V2ZW50KGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpLFxuICAgICAgICAgIGV2ZW50U3lzdGVtRmxhZ3MgJiA0ICYmXG4gICAgICAgICAgICAtMSA8IGRpc2NyZXRlUmVwbGF5YWJsZUV2ZW50cy5pbmRleE9mKGRvbUV2ZW50TmFtZSkpXG4gICAgICAgICkge1xuICAgICAgICAgIGZvciAoOyBudWxsICE9PSBibG9ja2VkT247ICkge1xuICAgICAgICAgICAgdmFyIGZpYmVyID0gZ2V0SW5zdGFuY2VGcm9tTm9kZShibG9ja2VkT24pO1xuICAgICAgICAgICAgaWYgKG51bGwgIT09IGZpYmVyKVxuICAgICAgICAgICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgIGZpYmVyID0gZmliZXIuc3RhdGVOb2RlO1xuICAgICAgICAgICAgICAgICAgaWYgKGZpYmVyLmN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMoZmliZXIucGVuZGluZ0xhbmVzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKDAgIT09IGxhbmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIHJvb3QgPSBmaWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICByb290LnBlbmRpbmdMYW5lcyB8PSAyO1xuICAgICAgICAgICAgICAgICAgICAgIGZvciAocm9vdC5lbnRhbmdsZWRMYW5lcyB8PSAyOyBsYW5lczsgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGFuZSA9IDEgPDwgKDMxIC0gY2x6MzIobGFuZXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QuZW50YW5nbGVtZW50c1sxXSB8PSBsYW5lO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFuZXMgJj0gfmxhbmU7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChmaWJlcik7XG4gICAgICAgICAgICAgICAgICAgICAgKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgIE5vQ29udGV4dCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKCh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJUYXJnZXRUaW1lID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgbm93JDEoKSArIFJFTkRFUl9USU1FT1VUX01TKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoU3luY1dvcmtBY3Jvc3NSb290c19pbXBsKDAsICExKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMzE6XG4gICAgICAgICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgICAgICAgIChyb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCAyKSksXG4gICAgICAgICAgICAgICAgICAgIG51bGwgIT09IHJvb3QgJiYgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCAyKSxcbiAgICAgICAgICAgICAgICAgICAgZmx1c2hTeW5jV29yayQxKCksXG4gICAgICAgICAgICAgICAgICAgIG1hcmtSZXRyeUxhbmVJZk5vdEh5ZHJhdGVkKGZpYmVyLCAyKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmliZXIgPSBmaW5kSW5zdGFuY2VCbG9ja2luZ0V2ZW50KG5hdGl2ZUV2ZW50KTtcbiAgICAgICAgICAgIG51bGwgPT09IGZpYmVyICYmXG4gICAgICAgICAgICAgIGRpc3BhdGNoRXZlbnRGb3JQbHVnaW5FdmVudFN5c3RlbShcbiAgICAgICAgICAgICAgICBkb21FdmVudE5hbWUsXG4gICAgICAgICAgICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgICAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICAgICAgICByZXR1cm5fdGFyZ2V0SW5zdCxcbiAgICAgICAgICAgICAgICB0YXJnZXRDb250YWluZXJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChmaWJlciA9PT0gYmxvY2tlZE9uKSBicmVhaztcbiAgICAgICAgICAgIGJsb2NrZWRPbiA9IGZpYmVyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBudWxsICE9PSBibG9ja2VkT24gJiYgbmF0aXZlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIGRpc3BhdGNoRXZlbnRGb3JQbHVnaW5FdmVudFN5c3RlbShcbiAgICAgICAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgICAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICB0YXJnZXRDb250YWluZXJcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kSW5zdGFuY2VCbG9ja2luZ0V2ZW50KG5hdGl2ZUV2ZW50KSB7XG4gICAgICBuYXRpdmVFdmVudCA9IGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KTtcbiAgICAgIHJldHVybiBmaW5kSW5zdGFuY2VCbG9ja2luZ1RhcmdldChuYXRpdmVFdmVudCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRJbnN0YW5jZUJsb2NraW5nVGFyZ2V0KHRhcmdldE5vZGUpIHtcbiAgICAgIHJldHVybl90YXJnZXRJbnN0ID0gbnVsbDtcbiAgICAgIHRhcmdldE5vZGUgPSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZSh0YXJnZXROb2RlKTtcbiAgICAgIGlmIChudWxsICE9PSB0YXJnZXROb2RlKSB7XG4gICAgICAgIHZhciBuZWFyZXN0TW91bnRlZCA9IGdldE5lYXJlc3RNb3VudGVkRmliZXIodGFyZ2V0Tm9kZSk7XG4gICAgICAgIGlmIChudWxsID09PSBuZWFyZXN0TW91bnRlZCkgdGFyZ2V0Tm9kZSA9IG51bGw7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHZhciB0YWcgPSBuZWFyZXN0TW91bnRlZC50YWc7XG4gICAgICAgICAgaWYgKDEzID09PSB0YWcpIHtcbiAgICAgICAgICAgIHRhcmdldE5vZGUgPSBnZXRTdXNwZW5zZUluc3RhbmNlRnJvbUZpYmVyKG5lYXJlc3RNb3VudGVkKTtcbiAgICAgICAgICAgIGlmIChudWxsICE9PSB0YXJnZXROb2RlKSByZXR1cm4gdGFyZ2V0Tm9kZTtcbiAgICAgICAgICAgIHRhcmdldE5vZGUgPSBudWxsO1xuICAgICAgICAgIH0gZWxzZSBpZiAoMzEgPT09IHRhZykge1xuICAgICAgICAgICAgdGFyZ2V0Tm9kZSA9IGdldEFjdGl2aXR5SW5zdGFuY2VGcm9tRmliZXIobmVhcmVzdE1vdW50ZWQpO1xuICAgICAgICAgICAgaWYgKG51bGwgIT09IHRhcmdldE5vZGUpIHJldHVybiB0YXJnZXROb2RlO1xuICAgICAgICAgICAgdGFyZ2V0Tm9kZSA9IG51bGw7XG4gICAgICAgICAgfSBlbHNlIGlmICgzID09PSB0YWcpIHtcbiAgICAgICAgICAgIGlmIChuZWFyZXN0TW91bnRlZC5zdGF0ZU5vZGUuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZClcbiAgICAgICAgICAgICAgcmV0dXJuIDMgPT09IG5lYXJlc3RNb3VudGVkLnRhZ1xuICAgICAgICAgICAgICAgID8gbmVhcmVzdE1vdW50ZWQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm9cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICB0YXJnZXROb2RlID0gbnVsbDtcbiAgICAgICAgICB9IGVsc2UgbmVhcmVzdE1vdW50ZWQgIT09IHRhcmdldE5vZGUgJiYgKHRhcmdldE5vZGUgPSBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuX3RhcmdldEluc3QgPSB0YXJnZXROb2RlO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEV2ZW50UHJpb3JpdHkoZG9tRXZlbnROYW1lKSB7XG4gICAgICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgICAgICBjYXNlIFwiYmVmb3JldG9nZ2xlXCI6XG4gICAgICAgIGNhc2UgXCJjYW5jZWxcIjpcbiAgICAgICAgY2FzZSBcImNsaWNrXCI6XG4gICAgICAgIGNhc2UgXCJjbG9zZVwiOlxuICAgICAgICBjYXNlIFwiY29udGV4dG1lbnVcIjpcbiAgICAgICAgY2FzZSBcImNvcHlcIjpcbiAgICAgICAgY2FzZSBcImN1dFwiOlxuICAgICAgICBjYXNlIFwiYXV4Y2xpY2tcIjpcbiAgICAgICAgY2FzZSBcImRibGNsaWNrXCI6XG4gICAgICAgIGNhc2UgXCJkcmFnZW5kXCI6XG4gICAgICAgIGNhc2UgXCJkcmFnc3RhcnRcIjpcbiAgICAgICAgY2FzZSBcImRyb3BcIjpcbiAgICAgICAgY2FzZSBcImZvY3VzaW5cIjpcbiAgICAgICAgY2FzZSBcImZvY3Vzb3V0XCI6XG4gICAgICAgIGNhc2UgXCJpbnB1dFwiOlxuICAgICAgICBjYXNlIFwiaW52YWxpZFwiOlxuICAgICAgICBjYXNlIFwia2V5ZG93blwiOlxuICAgICAgICBjYXNlIFwia2V5cHJlc3NcIjpcbiAgICAgICAgY2FzZSBcImtleXVwXCI6XG4gICAgICAgIGNhc2UgXCJtb3VzZWRvd25cIjpcbiAgICAgICAgY2FzZSBcIm1vdXNldXBcIjpcbiAgICAgICAgY2FzZSBcInBhc3RlXCI6XG4gICAgICAgIGNhc2UgXCJwYXVzZVwiOlxuICAgICAgICBjYXNlIFwicGxheVwiOlxuICAgICAgICBjYXNlIFwicG9pbnRlcmNhbmNlbFwiOlxuICAgICAgICBjYXNlIFwicG9pbnRlcmRvd25cIjpcbiAgICAgICAgY2FzZSBcInBvaW50ZXJ1cFwiOlxuICAgICAgICBjYXNlIFwicmF0ZWNoYW5nZVwiOlxuICAgICAgICBjYXNlIFwicmVzZXRcIjpcbiAgICAgICAgY2FzZSBcInJlc2l6ZVwiOlxuICAgICAgICBjYXNlIFwic2Vla2VkXCI6XG4gICAgICAgIGNhc2UgXCJzdWJtaXRcIjpcbiAgICAgICAgY2FzZSBcInRvZ2dsZVwiOlxuICAgICAgICBjYXNlIFwidG91Y2hjYW5jZWxcIjpcbiAgICAgICAgY2FzZSBcInRvdWNoZW5kXCI6XG4gICAgICAgIGNhc2UgXCJ0b3VjaHN0YXJ0XCI6XG4gICAgICAgIGNhc2UgXCJ2b2x1bWVjaGFuZ2VcIjpcbiAgICAgICAgY2FzZSBcImNoYW5nZVwiOlxuICAgICAgICBjYXNlIFwic2VsZWN0aW9uY2hhbmdlXCI6XG4gICAgICAgIGNhc2UgXCJ0ZXh0SW5wdXRcIjpcbiAgICAgICAgY2FzZSBcImNvbXBvc2l0aW9uc3RhcnRcIjpcbiAgICAgICAgY2FzZSBcImNvbXBvc2l0aW9uZW5kXCI6XG4gICAgICAgIGNhc2UgXCJjb21wb3NpdGlvbnVwZGF0ZVwiOlxuICAgICAgICBjYXNlIFwiYmVmb3JlYmx1clwiOlxuICAgICAgICBjYXNlIFwiYWZ0ZXJibHVyXCI6XG4gICAgICAgIGNhc2UgXCJiZWZvcmVpbnB1dFwiOlxuICAgICAgICBjYXNlIFwiYmx1clwiOlxuICAgICAgICBjYXNlIFwiZnVsbHNjcmVlbmNoYW5nZVwiOlxuICAgICAgICBjYXNlIFwiZm9jdXNcIjpcbiAgICAgICAgY2FzZSBcImhhc2hjaGFuZ2VcIjpcbiAgICAgICAgY2FzZSBcInBvcHN0YXRlXCI6XG4gICAgICAgIGNhc2UgXCJzZWxlY3RcIjpcbiAgICAgICAgY2FzZSBcInNlbGVjdHN0YXJ0XCI6XG4gICAgICAgICAgcmV0dXJuIERpc2NyZXRlRXZlbnRQcmlvcml0eTtcbiAgICAgICAgY2FzZSBcImRyYWdcIjpcbiAgICAgICAgY2FzZSBcImRyYWdlbnRlclwiOlxuICAgICAgICBjYXNlIFwiZHJhZ2V4aXRcIjpcbiAgICAgICAgY2FzZSBcImRyYWdsZWF2ZVwiOlxuICAgICAgICBjYXNlIFwiZHJhZ292ZXJcIjpcbiAgICAgICAgY2FzZSBcIm1vdXNlbW92ZVwiOlxuICAgICAgICBjYXNlIFwibW91c2VvdXRcIjpcbiAgICAgICAgY2FzZSBcIm1vdXNlb3ZlclwiOlxuICAgICAgICBjYXNlIFwicG9pbnRlcm1vdmVcIjpcbiAgICAgICAgY2FzZSBcInBvaW50ZXJvdXRcIjpcbiAgICAgICAgY2FzZSBcInBvaW50ZXJvdmVyXCI6XG4gICAgICAgIGNhc2UgXCJzY3JvbGxcIjpcbiAgICAgICAgY2FzZSBcInRvdWNobW92ZVwiOlxuICAgICAgICBjYXNlIFwid2hlZWxcIjpcbiAgICAgICAgY2FzZSBcIm1vdXNlZW50ZXJcIjpcbiAgICAgICAgY2FzZSBcIm1vdXNlbGVhdmVcIjpcbiAgICAgICAgY2FzZSBcInBvaW50ZXJlbnRlclwiOlxuICAgICAgICBjYXNlIFwicG9pbnRlcmxlYXZlXCI6XG4gICAgICAgICAgcmV0dXJuIENvbnRpbnVvdXNFdmVudFByaW9yaXR5O1xuICAgICAgICBjYXNlIFwibWVzc2FnZVwiOlxuICAgICAgICAgIHN3aXRjaCAoZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKSkge1xuICAgICAgICAgICAgY2FzZSBJbW1lZGlhdGVQcmlvcml0eTpcbiAgICAgICAgICAgICAgcmV0dXJuIERpc2NyZXRlRXZlbnRQcmlvcml0eTtcbiAgICAgICAgICAgIGNhc2UgVXNlckJsb2NraW5nUHJpb3JpdHk6XG4gICAgICAgICAgICAgIHJldHVybiBDb250aW51b3VzRXZlbnRQcmlvcml0eTtcbiAgICAgICAgICAgIGNhc2UgTm9ybWFsUHJpb3JpdHkkMTpcbiAgICAgICAgICAgIGNhc2UgTG93UHJpb3JpdHk6XG4gICAgICAgICAgICAgIHJldHVybiBEZWZhdWx0RXZlbnRQcmlvcml0eTtcbiAgICAgICAgICAgIGNhc2UgSWRsZVByaW9yaXR5OlxuICAgICAgICAgICAgICByZXR1cm4gSWRsZUV2ZW50UHJpb3JpdHk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gRGVmYXVsdEV2ZW50UHJpb3JpdHk7XG4gICAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBEZWZhdWx0RXZlbnRQcmlvcml0eTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY2xlYXJJZkNvbnRpbnVvdXNFdmVudChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSB7XG4gICAgICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgICAgICBjYXNlIFwiZm9jdXNpblwiOlxuICAgICAgICBjYXNlIFwiZm9jdXNvdXRcIjpcbiAgICAgICAgICBxdWV1ZWRGb2N1cyA9IG51bGw7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJkcmFnZW50ZXJcIjpcbiAgICAgICAgY2FzZSBcImRyYWdsZWF2ZVwiOlxuICAgICAgICAgIHF1ZXVlZERyYWcgPSBudWxsO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwibW91c2VvdmVyXCI6XG4gICAgICAgIGNhc2UgXCJtb3VzZW91dFwiOlxuICAgICAgICAgIHF1ZXVlZE1vdXNlID0gbnVsbDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInBvaW50ZXJvdmVyXCI6XG4gICAgICAgIGNhc2UgXCJwb2ludGVyb3V0XCI6XG4gICAgICAgICAgcXVldWVkUG9pbnRlcnMuZGVsZXRlKG5hdGl2ZUV2ZW50LnBvaW50ZXJJZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJnb3Rwb2ludGVyY2FwdHVyZVwiOlxuICAgICAgICBjYXNlIFwibG9zdHBvaW50ZXJjYXB0dXJlXCI6XG4gICAgICAgICAgcXVldWVkUG9pbnRlckNhcHR1cmVzLmRlbGV0ZShuYXRpdmVFdmVudC5wb2ludGVySWQpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KFxuICAgICAgZXhpc3RpbmdRdWV1ZWRFdmVudCxcbiAgICAgIGJsb2NrZWRPbixcbiAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICB0YXJnZXRDb250YWluZXIsXG4gICAgICBuYXRpdmVFdmVudFxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICBudWxsID09PSBleGlzdGluZ1F1ZXVlZEV2ZW50IHx8XG4gICAgICAgIGV4aXN0aW5nUXVldWVkRXZlbnQubmF0aXZlRXZlbnQgIT09IG5hdGl2ZUV2ZW50XG4gICAgICApXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgKGV4aXN0aW5nUXVldWVkRXZlbnQgPSB7XG4gICAgICAgICAgICBibG9ja2VkT246IGJsb2NrZWRPbixcbiAgICAgICAgICAgIGRvbUV2ZW50TmFtZTogZG9tRXZlbnROYW1lLFxuICAgICAgICAgICAgZXZlbnRTeXN0ZW1GbGFnczogZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgICAgICAgIG5hdGl2ZUV2ZW50OiBuYXRpdmVFdmVudCxcbiAgICAgICAgICAgIHRhcmdldENvbnRhaW5lcnM6IFt0YXJnZXRDb250YWluZXJdXG4gICAgICAgICAgfSksXG4gICAgICAgICAgbnVsbCAhPT0gYmxvY2tlZE9uICYmXG4gICAgICAgICAgICAoKGJsb2NrZWRPbiA9IGdldEluc3RhbmNlRnJvbU5vZGUoYmxvY2tlZE9uKSksXG4gICAgICAgICAgICBudWxsICE9PSBibG9ja2VkT24gJiYgYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24oYmxvY2tlZE9uKSksXG4gICAgICAgICAgZXhpc3RpbmdRdWV1ZWRFdmVudFxuICAgICAgICApO1xuICAgICAgZXhpc3RpbmdRdWV1ZWRFdmVudC5ldmVudFN5c3RlbUZsYWdzIHw9IGV2ZW50U3lzdGVtRmxhZ3M7XG4gICAgICBibG9ja2VkT24gPSBleGlzdGluZ1F1ZXVlZEV2ZW50LnRhcmdldENvbnRhaW5lcnM7XG4gICAgICBudWxsICE9PSB0YXJnZXRDb250YWluZXIgJiZcbiAgICAgICAgLTEgPT09IGJsb2NrZWRPbi5pbmRleE9mKHRhcmdldENvbnRhaW5lcikgJiZcbiAgICAgICAgYmxvY2tlZE9uLnB1c2godGFyZ2V0Q29udGFpbmVyKTtcbiAgICAgIHJldHVybiBleGlzdGluZ1F1ZXVlZEV2ZW50O1xuICAgIH1cbiAgICBmdW5jdGlvbiBxdWV1ZUlmQ29udGludW91c0V2ZW50KFxuICAgICAgYmxvY2tlZE9uLFxuICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgIHRhcmdldENvbnRhaW5lcixcbiAgICAgIG5hdGl2ZUV2ZW50XG4gICAgKSB7XG4gICAgICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgICAgICBjYXNlIFwiZm9jdXNpblwiOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAocXVldWVkRm9jdXMgPSBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KFxuICAgICAgICAgICAgICBxdWV1ZWRGb2N1cyxcbiAgICAgICAgICAgICAgYmxvY2tlZE9uLFxuICAgICAgICAgICAgICBkb21FdmVudE5hbWUsXG4gICAgICAgICAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICAgICAgICAgIHRhcmdldENvbnRhaW5lcixcbiAgICAgICAgICAgICAgbmF0aXZlRXZlbnRcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgITBcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIFwiZHJhZ2VudGVyXCI6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChxdWV1ZWREcmFnID0gYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChcbiAgICAgICAgICAgICAgcXVldWVkRHJhZyxcbiAgICAgICAgICAgICAgYmxvY2tlZE9uLFxuICAgICAgICAgICAgICBkb21FdmVudE5hbWUsXG4gICAgICAgICAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICAgICAgICAgIHRhcmdldENvbnRhaW5lcixcbiAgICAgICAgICAgICAgbmF0aXZlRXZlbnRcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgITBcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIFwibW91c2VvdmVyXCI6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChxdWV1ZWRNb3VzZSA9IGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQoXG4gICAgICAgICAgICAgIHF1ZXVlZE1vdXNlLFxuICAgICAgICAgICAgICBibG9ja2VkT24sXG4gICAgICAgICAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgICAgICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgICAgICAgICAgdGFyZ2V0Q29udGFpbmVyLFxuICAgICAgICAgICAgICBuYXRpdmVFdmVudFxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAhMFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgXCJwb2ludGVyb3ZlclwiOlxuICAgICAgICAgIHZhciBwb2ludGVySWQgPSBuYXRpdmVFdmVudC5wb2ludGVySWQ7XG4gICAgICAgICAgcXVldWVkUG9pbnRlcnMuc2V0KFxuICAgICAgICAgICAgcG9pbnRlcklkLFxuICAgICAgICAgICAgYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChcbiAgICAgICAgICAgICAgcXVldWVkUG9pbnRlcnMuZ2V0KHBvaW50ZXJJZCkgfHwgbnVsbCxcbiAgICAgICAgICAgICAgYmxvY2tlZE9uLFxuICAgICAgICAgICAgICBkb21FdmVudE5hbWUsXG4gICAgICAgICAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICAgICAgICAgIHRhcmdldENvbnRhaW5lcixcbiAgICAgICAgICAgICAgbmF0aXZlRXZlbnRcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgY2FzZSBcImdvdHBvaW50ZXJjYXB0dXJlXCI6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChwb2ludGVySWQgPSBuYXRpdmVFdmVudC5wb2ludGVySWQpLFxuICAgICAgICAgICAgcXVldWVkUG9pbnRlckNhcHR1cmVzLnNldChcbiAgICAgICAgICAgICAgcG9pbnRlcklkLFxuICAgICAgICAgICAgICBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KFxuICAgICAgICAgICAgICAgIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5nZXQocG9pbnRlcklkKSB8fCBudWxsLFxuICAgICAgICAgICAgICAgIGJsb2NrZWRPbixcbiAgICAgICAgICAgICAgICBkb21FdmVudE5hbWUsXG4gICAgICAgICAgICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgICAgICAgICAgICB0YXJnZXRDb250YWluZXIsXG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnRcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICEwXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYXR0ZW1wdEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0KHF1ZXVlZFRhcmdldCkge1xuICAgICAgdmFyIHRhcmdldEluc3QgPSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShxdWV1ZWRUYXJnZXQudGFyZ2V0KTtcbiAgICAgIGlmIChudWxsICE9PSB0YXJnZXRJbnN0KSB7XG4gICAgICAgIHZhciBuZWFyZXN0TW91bnRlZCA9IGdldE5lYXJlc3RNb3VudGVkRmliZXIodGFyZ2V0SW5zdCk7XG4gICAgICAgIGlmIChudWxsICE9PSBuZWFyZXN0TW91bnRlZClcbiAgICAgICAgICBpZiAoKCh0YXJnZXRJbnN0ID0gbmVhcmVzdE1vdW50ZWQudGFnKSwgMTMgPT09IHRhcmdldEluc3QpKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICgodGFyZ2V0SW5zdCA9IGdldFN1c3BlbnNlSW5zdGFuY2VGcm9tRmliZXIobmVhcmVzdE1vdW50ZWQpKSxcbiAgICAgICAgICAgICAgbnVsbCAhPT0gdGFyZ2V0SW5zdClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID0gdGFyZ2V0SW5zdDtcbiAgICAgICAgICAgICAgcnVuV2l0aFByaW9yaXR5KHF1ZXVlZFRhcmdldC5wcmlvcml0eSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eShuZWFyZXN0TW91bnRlZCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICgzMSA9PT0gdGFyZ2V0SW5zdCkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoKHRhcmdldEluc3QgPSBnZXRBY3Rpdml0eUluc3RhbmNlRnJvbUZpYmVyKG5lYXJlc3RNb3VudGVkKSksXG4gICAgICAgICAgICAgIG51bGwgIT09IHRhcmdldEluc3QpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9IHRhcmdldEluc3Q7XG4gICAgICAgICAgICAgIHJ1bldpdGhQcmlvcml0eShxdWV1ZWRUYXJnZXQucHJpb3JpdHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBhdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHkobmVhcmVzdE1vdW50ZWQpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAzID09PSB0YXJnZXRJbnN0ICYmXG4gICAgICAgICAgICBuZWFyZXN0TW91bnRlZC5zdGF0ZU5vZGUuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9XG4gICAgICAgICAgICAgIDMgPT09IG5lYXJlc3RNb3VudGVkLnRhZ1xuICAgICAgICAgICAgICAgID8gbmVhcmVzdE1vdW50ZWQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm9cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgcXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnQocXVldWVkRXZlbnQpIHtcbiAgICAgIGlmIChudWxsICE9PSBxdWV1ZWRFdmVudC5ibG9ja2VkT24pIHJldHVybiAhMTtcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciB0YXJnZXRDb250YWluZXJzID0gcXVldWVkRXZlbnQudGFyZ2V0Q29udGFpbmVycztcbiAgICAgICAgMCA8IHRhcmdldENvbnRhaW5lcnMubGVuZ3RoO1xuXG4gICAgICApIHtcbiAgICAgICAgdmFyIG5leHRCbG9ja2VkT24gPSBmaW5kSW5zdGFuY2VCbG9ja2luZ0V2ZW50KHF1ZXVlZEV2ZW50Lm5hdGl2ZUV2ZW50KTtcbiAgICAgICAgaWYgKG51bGwgPT09IG5leHRCbG9ja2VkT24pIHtcbiAgICAgICAgICBuZXh0QmxvY2tlZE9uID0gcXVldWVkRXZlbnQubmF0aXZlRXZlbnQ7XG4gICAgICAgICAgdmFyIG5hdGl2ZUV2ZW50Q2xvbmUgPSBuZXcgbmV4dEJsb2NrZWRPbi5jb25zdHJ1Y3RvcihcbiAgICAgICAgICAgICAgbmV4dEJsb2NrZWRPbi50eXBlLFxuICAgICAgICAgICAgICBuZXh0QmxvY2tlZE9uXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgZXZlbnQgPSBuYXRpdmVFdmVudENsb25lO1xuICAgICAgICAgIG51bGwgIT09IGN1cnJlbnRSZXBsYXlpbmdFdmVudCAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJFeHBlY3RlZCBjdXJyZW50bHkgcmVwbGF5aW5nIGV2ZW50IHRvIGJlIG51bGwuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY3VycmVudFJlcGxheWluZ0V2ZW50ID0gZXZlbnQ7XG4gICAgICAgICAgbmV4dEJsb2NrZWRPbi50YXJnZXQuZGlzcGF0Y2hFdmVudChuYXRpdmVFdmVudENsb25lKTtcbiAgICAgICAgICBudWxsID09PSBjdXJyZW50UmVwbGF5aW5nRXZlbnQgJiZcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiRXhwZWN0ZWQgY3VycmVudGx5IHJlcGxheWluZyBldmVudCB0byBub3QgYmUgbnVsbC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBjdXJyZW50UmVwbGF5aW5nRXZlbnQgPSBudWxsO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHRhcmdldENvbnRhaW5lcnMgPSBnZXRJbnN0YW5jZUZyb21Ob2RlKG5leHRCbG9ja2VkT24pKSxcbiAgICAgICAgICAgIG51bGwgIT09IHRhcmdldENvbnRhaW5lcnMgJiZcbiAgICAgICAgICAgICAgYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24odGFyZ2V0Q29udGFpbmVycyksXG4gICAgICAgICAgICAocXVldWVkRXZlbnQuYmxvY2tlZE9uID0gbmV4dEJsb2NrZWRPbiksXG4gICAgICAgICAgICAhMVxuICAgICAgICAgICk7XG4gICAgICAgIHRhcmdldENvbnRhaW5lcnMuc2hpZnQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudEluTWFwKHF1ZXVlZEV2ZW50LCBrZXksIG1hcCkge1xuICAgICAgYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRFdmVudCkgJiYgbWFwLmRlbGV0ZShrZXkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXBsYXlVbmJsb2NrZWRFdmVudHMoKSB7XG4gICAgICBoYXNTY2hlZHVsZWRSZXBsYXlBdHRlbXB0ID0gITE7XG4gICAgICBudWxsICE9PSBxdWV1ZWRGb2N1cyAmJlxuICAgICAgICBhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50KHF1ZXVlZEZvY3VzKSAmJlxuICAgICAgICAocXVldWVkRm9jdXMgPSBudWxsKTtcbiAgICAgIG51bGwgIT09IHF1ZXVlZERyYWcgJiZcbiAgICAgICAgYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWREcmFnKSAmJlxuICAgICAgICAocXVldWVkRHJhZyA9IG51bGwpO1xuICAgICAgbnVsbCAhPT0gcXVldWVkTW91c2UgJiZcbiAgICAgICAgYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRNb3VzZSkgJiZcbiAgICAgICAgKHF1ZXVlZE1vdXNlID0gbnVsbCk7XG4gICAgICBxdWV1ZWRQb2ludGVycy5mb3JFYWNoKGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnRJbk1hcCk7XG4gICAgICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuZm9yRWFjaChhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50SW5NYXApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRXZlbnQsIHVuYmxvY2tlZCkge1xuICAgICAgcXVldWVkRXZlbnQuYmxvY2tlZE9uID09PSB1bmJsb2NrZWQgJiZcbiAgICAgICAgKChxdWV1ZWRFdmVudC5ibG9ja2VkT24gPSBudWxsKSxcbiAgICAgICAgaGFzU2NoZWR1bGVkUmVwbGF5QXR0ZW1wdCB8fFxuICAgICAgICAgICgoaGFzU2NoZWR1bGVkUmVwbGF5QXR0ZW1wdCA9ICEwKSxcbiAgICAgICAgICBTY2hlZHVsZXIudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayhcbiAgICAgICAgICAgIFNjaGVkdWxlci51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSxcbiAgICAgICAgICAgIHJlcGxheVVuYmxvY2tlZEV2ZW50c1xuICAgICAgICAgICkpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2NoZWR1bGVSZXBsYXlRdWV1ZUlmTmVlZGVkKGZvcm1SZXBsYXlpbmdRdWV1ZSkge1xuICAgICAgbGFzdFNjaGVkdWxlZFJlcGxheVF1ZXVlICE9PSBmb3JtUmVwbGF5aW5nUXVldWUgJiZcbiAgICAgICAgKChsYXN0U2NoZWR1bGVkUmVwbGF5UXVldWUgPSBmb3JtUmVwbGF5aW5nUXVldWUpLFxuICAgICAgICBTY2hlZHVsZXIudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayhcbiAgICAgICAgICBTY2hlZHVsZXIudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksXG4gICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGFzdFNjaGVkdWxlZFJlcGxheVF1ZXVlID09PSBmb3JtUmVwbGF5aW5nUXVldWUgJiZcbiAgICAgICAgICAgICAgKGxhc3RTY2hlZHVsZWRSZXBsYXlRdWV1ZSA9IG51bGwpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb3JtUmVwbGF5aW5nUXVldWUubGVuZ3RoOyBpICs9IDMpIHtcbiAgICAgICAgICAgICAgdmFyIGZvcm0gPSBmb3JtUmVwbGF5aW5nUXVldWVbaV0sXG4gICAgICAgICAgICAgICAgc3VibWl0dGVyT3JBY3Rpb24gPSBmb3JtUmVwbGF5aW5nUXVldWVbaSArIDFdLFxuICAgICAgICAgICAgICAgIGZvcm1EYXRhID0gZm9ybVJlcGxheWluZ1F1ZXVlW2kgKyAyXTtcbiAgICAgICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHN1Ym1pdHRlck9yQWN0aW9uKVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIG51bGwgPT09IGZpbmRJbnN0YW5jZUJsb2NraW5nVGFyZ2V0KHN1Ym1pdHRlck9yQWN0aW9uIHx8IGZvcm0pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgZWxzZSBicmVhaztcbiAgICAgICAgICAgICAgdmFyIGZvcm1JbnN0ID0gZ2V0SW5zdGFuY2VGcm9tTm9kZShmb3JtKTtcbiAgICAgICAgICAgICAgbnVsbCAhPT0gZm9ybUluc3QgJiZcbiAgICAgICAgICAgICAgICAoZm9ybVJlcGxheWluZ1F1ZXVlLnNwbGljZShpLCAzKSxcbiAgICAgICAgICAgICAgICAoaSAtPSAzKSxcbiAgICAgICAgICAgICAgICAoZm9ybSA9IHtcbiAgICAgICAgICAgICAgICAgIHBlbmRpbmc6ICEwLFxuICAgICAgICAgICAgICAgICAgZGF0YTogZm9ybURhdGEsXG4gICAgICAgICAgICAgICAgICBtZXRob2Q6IGZvcm0ubWV0aG9kLFxuICAgICAgICAgICAgICAgICAgYWN0aW9uOiBzdWJtaXR0ZXJPckFjdGlvblxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIE9iamVjdC5mcmVlemUoZm9ybSksXG4gICAgICAgICAgICAgICAgc3RhcnRIb3N0VHJhbnNpdGlvbihcbiAgICAgICAgICAgICAgICAgIGZvcm1JbnN0LFxuICAgICAgICAgICAgICAgICAgZm9ybSxcbiAgICAgICAgICAgICAgICAgIHN1Ym1pdHRlck9yQWN0aW9uLFxuICAgICAgICAgICAgICAgICAgZm9ybURhdGFcbiAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXRyeUlmQmxvY2tlZE9uKHVuYmxvY2tlZCkge1xuICAgICAgZnVuY3Rpb24gdW5ibG9jayhxdWV1ZWRFdmVudCkge1xuICAgICAgICByZXR1cm4gc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZEV2ZW50LCB1bmJsb2NrZWQpO1xuICAgICAgfVxuICAgICAgbnVsbCAhPT0gcXVldWVkRm9jdXMgJiZcbiAgICAgICAgc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZEZvY3VzLCB1bmJsb2NrZWQpO1xuICAgICAgbnVsbCAhPT0gcXVldWVkRHJhZyAmJiBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRHJhZywgdW5ibG9ja2VkKTtcbiAgICAgIG51bGwgIT09IHF1ZXVlZE1vdXNlICYmXG4gICAgICAgIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWRNb3VzZSwgdW5ibG9ja2VkKTtcbiAgICAgIHF1ZXVlZFBvaW50ZXJzLmZvckVhY2godW5ibG9jayk7XG4gICAgICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuZm9yRWFjaCh1bmJsb2NrKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBxdWV1ZWRUYXJnZXQgPSBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHNbaV07XG4gICAgICAgIHF1ZXVlZFRhcmdldC5ibG9ja2VkT24gPT09IHVuYmxvY2tlZCAmJiAocXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9IG51bGwpO1xuICAgICAgfVxuICAgICAgZm9yIChcbiAgICAgICAgO1xuICAgICAgICAwIDwgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzLmxlbmd0aCAmJlxuICAgICAgICAoKGkgPSBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHNbMF0pLCBudWxsID09PSBpLmJsb2NrZWRPbik7XG5cbiAgICAgIClcbiAgICAgICAgYXR0ZW1wdEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0KGkpLFxuICAgICAgICAgIG51bGwgPT09IGkuYmxvY2tlZE9uICYmIHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0cy5zaGlmdCgpO1xuICAgICAgaSA9ICh1bmJsb2NrZWQub3duZXJEb2N1bWVudCB8fCB1bmJsb2NrZWQpLiQkcmVhY3RGb3JtUmVwbGF5O1xuICAgICAgaWYgKG51bGwgIT0gaSlcbiAgICAgICAgZm9yIChxdWV1ZWRUYXJnZXQgPSAwOyBxdWV1ZWRUYXJnZXQgPCBpLmxlbmd0aDsgcXVldWVkVGFyZ2V0ICs9IDMpIHtcbiAgICAgICAgICB2YXIgZm9ybSA9IGlbcXVldWVkVGFyZ2V0XSxcbiAgICAgICAgICAgIHN1Ym1pdHRlck9yQWN0aW9uID0gaVtxdWV1ZWRUYXJnZXQgKyAxXSxcbiAgICAgICAgICAgIGZvcm1Qcm9wcyA9IGZvcm1baW50ZXJuYWxQcm9wc0tleV0gfHwgbnVsbDtcbiAgICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2Ygc3VibWl0dGVyT3JBY3Rpb24pXG4gICAgICAgICAgICBmb3JtUHJvcHMgfHwgc2NoZWR1bGVSZXBsYXlRdWV1ZUlmTmVlZGVkKGkpO1xuICAgICAgICAgIGVsc2UgaWYgKGZvcm1Qcm9wcykge1xuICAgICAgICAgICAgdmFyIGFjdGlvbiA9IG51bGw7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHN1Ym1pdHRlck9yQWN0aW9uICYmXG4gICAgICAgICAgICAgIHN1Ym1pdHRlck9yQWN0aW9uLmhhc0F0dHJpYnV0ZShcImZvcm1BY3Rpb25cIilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICgoZm9ybSA9IHN1Ym1pdHRlck9yQWN0aW9uKSxcbiAgICAgICAgICAgICAgICAoZm9ybVByb3BzID0gc3VibWl0dGVyT3JBY3Rpb25baW50ZXJuYWxQcm9wc0tleV0gfHwgbnVsbCkpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBhY3Rpb24gPSBmb3JtUHJvcHMuZm9ybUFjdGlvbjtcbiAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKG51bGwgIT09IGZpbmRJbnN0YW5jZUJsb2NraW5nVGFyZ2V0KGZvcm0pKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBhY3Rpb24gPSBmb3JtUHJvcHMuYWN0aW9uO1xuICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgYWN0aW9uXG4gICAgICAgICAgICAgID8gKGlbcXVldWVkVGFyZ2V0ICsgMV0gPSBhY3Rpb24pXG4gICAgICAgICAgICAgIDogKGkuc3BsaWNlKHF1ZXVlZFRhcmdldCwgMyksIChxdWV1ZWRUYXJnZXQgLT0gMykpO1xuICAgICAgICAgICAgc2NoZWR1bGVSZXBsYXlRdWV1ZUlmTmVlZGVkKGkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBkZWZhdWx0T25EZWZhdWx0VHJhbnNpdGlvbkluZGljYXRvcigpIHtcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZU5hdmlnYXRlKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LmNhbkludGVyY2VwdCAmJlxuICAgICAgICAgIFwicmVhY3QtdHJhbnNpdGlvblwiID09PSBldmVudC5pbmZvICYmXG4gICAgICAgICAgZXZlbnQuaW50ZXJjZXB0KHtcbiAgICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChwZW5kaW5nUmVzb2x2ZSA9IHJlc29sdmUpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmb2N1c1Jlc2V0OiBcIm1hbnVhbFwiLFxuICAgICAgICAgICAgc2Nyb2xsOiBcIm1hbnVhbFwiXG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBoYW5kbGVOYXZpZ2F0ZUNvbXBsZXRlKCkge1xuICAgICAgICBudWxsICE9PSBwZW5kaW5nUmVzb2x2ZSAmJiAocGVuZGluZ1Jlc29sdmUoKSwgKHBlbmRpbmdSZXNvbHZlID0gbnVsbCkpO1xuICAgICAgICBpc0NhbmNlbGxlZCB8fCBzZXRUaW1lb3V0KHN0YXJ0RmFrZU5hdmlnYXRpb24sIDIwKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHN0YXJ0RmFrZU5hdmlnYXRpb24oKSB7XG4gICAgICAgIGlmICghaXNDYW5jZWxsZWQgJiYgIW5hdmlnYXRpb24udHJhbnNpdGlvbikge1xuICAgICAgICAgIHZhciBjdXJyZW50RW50cnkgPSBuYXZpZ2F0aW9uLmN1cnJlbnRFbnRyeTtcbiAgICAgICAgICBjdXJyZW50RW50cnkgJiZcbiAgICAgICAgICAgIG51bGwgIT0gY3VycmVudEVudHJ5LnVybCAmJlxuICAgICAgICAgICAgbmF2aWdhdGlvbi5uYXZpZ2F0ZShjdXJyZW50RW50cnkudXJsLCB7XG4gICAgICAgICAgICAgIHN0YXRlOiBjdXJyZW50RW50cnkuZ2V0U3RhdGUoKSxcbiAgICAgICAgICAgICAgaW5mbzogXCJyZWFjdC10cmFuc2l0aW9uXCIsXG4gICAgICAgICAgICAgIGhpc3Rvcnk6IFwicmVwbGFjZVwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiBuYXZpZ2F0aW9uKSB7XG4gICAgICAgIHZhciBpc0NhbmNlbGxlZCA9ICExLFxuICAgICAgICAgIHBlbmRpbmdSZXNvbHZlID0gbnVsbDtcbiAgICAgICAgbmF2aWdhdGlvbi5hZGRFdmVudExpc3RlbmVyKFwibmF2aWdhdGVcIiwgaGFuZGxlTmF2aWdhdGUpO1xuICAgICAgICBuYXZpZ2F0aW9uLmFkZEV2ZW50TGlzdGVuZXIoXCJuYXZpZ2F0ZXN1Y2Nlc3NcIiwgaGFuZGxlTmF2aWdhdGVDb21wbGV0ZSk7XG4gICAgICAgIG5hdmlnYXRpb24uYWRkRXZlbnRMaXN0ZW5lcihcIm5hdmlnYXRlZXJyb3JcIiwgaGFuZGxlTmF2aWdhdGVDb21wbGV0ZSk7XG4gICAgICAgIHNldFRpbWVvdXQoc3RhcnRGYWtlTmF2aWdhdGlvbiwgMTAwKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpc0NhbmNlbGxlZCA9ICEwO1xuICAgICAgICAgIG5hdmlnYXRpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm5hdmlnYXRlXCIsIGhhbmRsZU5hdmlnYXRlKTtcbiAgICAgICAgICBuYXZpZ2F0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICBcIm5hdmlnYXRlc3VjY2Vzc1wiLFxuICAgICAgICAgICAgaGFuZGxlTmF2aWdhdGVDb21wbGV0ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgbmF2aWdhdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgXCJuYXZpZ2F0ZWVycm9yXCIsXG4gICAgICAgICAgICBoYW5kbGVOYXZpZ2F0ZUNvbXBsZXRlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBudWxsICE9PSBwZW5kaW5nUmVzb2x2ZSAmJlxuICAgICAgICAgICAgKHBlbmRpbmdSZXNvbHZlKCksIChwZW5kaW5nUmVzb2x2ZSA9IG51bGwpKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gUmVhY3RET01Sb290KGludGVybmFsUm9vdCkge1xuICAgICAgdGhpcy5faW50ZXJuYWxSb290ID0gaW50ZXJuYWxSb290O1xuICAgIH1cbiAgICBmdW5jdGlvbiBSZWFjdERPTUh5ZHJhdGlvblJvb3QoaW50ZXJuYWxSb290KSB7XG4gICAgICB0aGlzLl9pbnRlcm5hbFJvb3QgPSBpbnRlcm5hbFJvb3Q7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhcm5JZlJlYWN0RE9NQ29udGFpbmVySW5ERVYoY29udGFpbmVyKSB7XG4gICAgICBjb250YWluZXJbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV0gJiZcbiAgICAgICAgKGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyXG4gICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIllvdSBhcmUgY2FsbGluZyBSZWFjdERPTUNsaWVudC5jcmVhdGVSb290KCkgb24gYSBjb250YWluZXIgdGhhdCB3YXMgcHJldmlvdXNseSBwYXNzZWQgdG8gUmVhY3RET00ucmVuZGVyKCkuIFRoaXMgaXMgbm90IHN1cHBvcnRlZC5cIlxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJZb3UgYXJlIGNhbGxpbmcgUmVhY3RET01DbGllbnQuY3JlYXRlUm9vdCgpIG9uIGEgY29udGFpbmVyIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBwYXNzZWQgdG8gY3JlYXRlUm9vdCgpIGJlZm9yZS4gSW5zdGVhZCwgY2FsbCByb290LnJlbmRlcigpIG9uIHRoZSBleGlzdGluZyByb290IGluc3RlYWQgaWYgeW91IHdhbnQgdG8gdXBkYXRlIGl0LlwiXG4gICAgICAgICAgICApKTtcbiAgICB9XG4gICAgXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAmJlxuICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdGFydCAmJlxuICAgICAgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdGFydChFcnJvcigpKTtcbiAgICB2YXIgU2NoZWR1bGVyID0gcmVxdWlyZShcIm5leHQvZGlzdC9jb21waWxlZC9zY2hlZHVsZXJcIiksXG4gICAgICBSZWFjdCA9IHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3RcIiksXG4gICAgICBSZWFjdERPTSA9IHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QtZG9tXCIpLFxuICAgICAgYXNzaWduID0gT2JqZWN0LmFzc2lnbixcbiAgICAgIFJFQUNUX0xFR0FDWV9FTEVNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKSxcbiAgICAgIFJFQUNUX0VMRU1FTlRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC50cmFuc2l0aW9uYWwuZWxlbWVudFwiKSxcbiAgICAgIFJFQUNUX1BPUlRBTF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKSxcbiAgICAgIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIiksXG4gICAgICBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpLFxuICAgICAgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKSxcbiAgICAgIFJFQUNUX0NPTlNVTUVSX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuY29uc3VtZXJcIiksXG4gICAgICBSRUFDVF9DT05URVhUX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKSxcbiAgICAgIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIiksXG4gICAgICBSRUFDVF9TVVNQRU5TRV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpLFxuICAgICAgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlX2xpc3RcIiksXG4gICAgICBSRUFDVF9NRU1PX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKSxcbiAgICAgIFJFQUNUX0xBWllfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpO1xuICAgIFN5bWJvbC5mb3IoXCJyZWFjdC5zY29wZVwiKTtcbiAgICB2YXIgUkVBQ1RfQUNUSVZJVFlfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5hY3Rpdml0eVwiKTtcbiAgICBTeW1ib2wuZm9yKFwicmVhY3QubGVnYWN5X2hpZGRlblwiKTtcbiAgICBTeW1ib2wuZm9yKFwicmVhY3QudHJhY2luZ19tYXJrZXJcIik7XG4gICAgdmFyIFJFQUNUX01FTU9fQ0FDSEVfU0VOVElORUwgPSBTeW1ib2wuZm9yKFwicmVhY3QubWVtb19jYWNoZV9zZW50aW5lbFwiKTtcbiAgICBTeW1ib2wuZm9yKFwicmVhY3Qudmlld190cmFuc2l0aW9uXCIpO1xuICAgIHZhciBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgPSBTeW1ib2wuaXRlcmF0b3IsXG4gICAgICBSRUFDVF9DTElFTlRfUkVGRVJFTkNFID0gU3ltYm9sLmZvcihcInJlYWN0LmNsaWVudC5yZWZlcmVuY2VcIiksXG4gICAgICBpc0FycmF5SW1wbCA9IEFycmF5LmlzQXJyYXksXG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscyA9XG4gICAgICAgIFJlYWN0Ll9fQ0xJRU5UX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERSxcbiAgICAgIFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzID1cbiAgICAgICAgUmVhY3RET00uX19ET01fSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFLFxuICAgICAgTm90UGVuZGluZyA9IE9iamVjdC5mcmVlemUoe1xuICAgICAgICBwZW5kaW5nOiAhMSxcbiAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgICAgbWV0aG9kOiBudWxsLFxuICAgICAgICBhY3Rpb246IG51bGxcbiAgICAgIH0pLFxuICAgICAgdmFsdWVTdGFjayA9IFtdO1xuICAgIHZhciBmaWJlclN0YWNrID0gW107XG4gICAgdmFyIGluZGV4JGpzY29tcCQwID0gLTEsXG4gICAgICBjb250ZXh0U3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IobnVsbCksXG4gICAgICBjb250ZXh0RmliZXJTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihudWxsKSxcbiAgICAgIHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKG51bGwpLFxuICAgICAgaG9zdFRyYW5zaXRpb25Qcm92aWRlckN1cnNvciA9IGNyZWF0ZUN1cnNvcihudWxsKSxcbiAgICAgIGRpc2FibGVkRGVwdGggPSAwLFxuICAgICAgcHJldkxvZyxcbiAgICAgIHByZXZJbmZvLFxuICAgICAgcHJldldhcm4sXG4gICAgICBwcmV2RXJyb3IsXG4gICAgICBwcmV2R3JvdXAsXG4gICAgICBwcmV2R3JvdXBDb2xsYXBzZWQsXG4gICAgICBwcmV2R3JvdXBFbmQ7XG4gICAgZGlzYWJsZWRMb2cuX19yZWFjdERpc2FibGVkTG9nID0gITA7XG4gICAgdmFyIHByZWZpeCxcbiAgICAgIHN1ZmZpeCxcbiAgICAgIHJlZW50cnkgPSAhMTtcbiAgICB2YXIgY29tcG9uZW50RnJhbWVDYWNoZSA9IG5ldyAoXG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBXZWFrTWFwID8gV2Vha01hcCA6IE1hcFxuICAgICkoKTtcbiAgICB2YXIgY3VycmVudCA9IG51bGwsXG4gICAgICBpc1JlbmRlcmluZyA9ICExLFxuICAgICAgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LFxuICAgICAgc2NoZWR1bGVDYWxsYmFjayQzID0gU2NoZWR1bGVyLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2ssXG4gICAgICBjYW5jZWxDYWxsYmFjayQxID0gU2NoZWR1bGVyLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrLFxuICAgICAgc2hvdWxkWWllbGQgPSBTY2hlZHVsZXIudW5zdGFibGVfc2hvdWxkWWllbGQsXG4gICAgICByZXF1ZXN0UGFpbnQgPSBTY2hlZHVsZXIudW5zdGFibGVfcmVxdWVzdFBhaW50LFxuICAgICAgbm93JDEgPSBTY2hlZHVsZXIudW5zdGFibGVfbm93LFxuICAgICAgZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwgPSBTY2hlZHVsZXIudW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwsXG4gICAgICBJbW1lZGlhdGVQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eSxcbiAgICAgIFVzZXJCbG9ja2luZ1ByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5LFxuICAgICAgTm9ybWFsUHJpb3JpdHkkMSA9IFNjaGVkdWxlci51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSxcbiAgICAgIExvd1ByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX0xvd1ByaW9yaXR5LFxuICAgICAgSWRsZVByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX0lkbGVQcmlvcml0eSxcbiAgICAgIGxvZyQxID0gU2NoZWR1bGVyLmxvZyxcbiAgICAgIHVuc3RhYmxlX3NldERpc2FibGVZaWVsZFZhbHVlID0gU2NoZWR1bGVyLnVuc3RhYmxlX3NldERpc2FibGVZaWVsZFZhbHVlLFxuICAgICAgcmVuZGVyZXJJRCA9IG51bGwsXG4gICAgICBpbmplY3RlZEhvb2sgPSBudWxsLFxuICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcyA9IG51bGwsXG4gICAgICBoYXNMb2dnZWRFcnJvciA9ICExLFxuICAgICAgaXNEZXZUb29sc1ByZXNlbnQgPSBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLFxuICAgICAgY2x6MzIgPSBNYXRoLmNsejMyID8gTWF0aC5jbHozMiA6IGNsejMyRmFsbGJhY2ssXG4gICAgICBsb2cgPSBNYXRoLmxvZyxcbiAgICAgIExOMiA9IE1hdGguTE4yLFxuICAgICAgbmV4dFRyYW5zaXRpb25MYW5lID0gMjU2LFxuICAgICAgbmV4dFJldHJ5TGFuZSA9IDQxOTQzMDQsXG4gICAgICBEaXNjcmV0ZUV2ZW50UHJpb3JpdHkgPSAyLFxuICAgICAgQ29udGludW91c0V2ZW50UHJpb3JpdHkgPSA4LFxuICAgICAgRGVmYXVsdEV2ZW50UHJpb3JpdHkgPSAzMixcbiAgICAgIElkbGVFdmVudFByaW9yaXR5ID0gMjY4NDM1NDU2LFxuICAgICAgcmFuZG9tS2V5ID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiksXG4gICAgICBpbnRlcm5hbEluc3RhbmNlS2V5ID0gXCJfX3JlYWN0RmliZXIkXCIgKyByYW5kb21LZXksXG4gICAgICBpbnRlcm5hbFByb3BzS2V5ID0gXCJfX3JlYWN0UHJvcHMkXCIgKyByYW5kb21LZXksXG4gICAgICBpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5ID0gXCJfX3JlYWN0Q29udGFpbmVyJFwiICsgcmFuZG9tS2V5LFxuICAgICAgaW50ZXJuYWxFdmVudEhhbmRsZXJzS2V5ID0gXCJfX3JlYWN0RXZlbnRzJFwiICsgcmFuZG9tS2V5LFxuICAgICAgaW50ZXJuYWxFdmVudEhhbmRsZXJMaXN0ZW5lcnNLZXkgPSBcIl9fcmVhY3RMaXN0ZW5lcnMkXCIgKyByYW5kb21LZXksXG4gICAgICBpbnRlcm5hbEV2ZW50SGFuZGxlc1NldEtleSA9IFwiX19yZWFjdEhhbmRsZXMkXCIgKyByYW5kb21LZXksXG4gICAgICBpbnRlcm5hbFJvb3ROb2RlUmVzb3VyY2VzS2V5ID0gXCJfX3JlYWN0UmVzb3VyY2VzJFwiICsgcmFuZG9tS2V5LFxuICAgICAgaW50ZXJuYWxIb2lzdGFibGVNYXJrZXIgPSBcIl9fcmVhY3RNYXJrZXIkXCIgKyByYW5kb21LZXksXG4gICAgICBhbGxOYXRpdmVFdmVudHMgPSBuZXcgU2V0KCksXG4gICAgICByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzID0ge30sXG4gICAgICBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzID0ge30sXG4gICAgICBoYXNSZWFkT25seVZhbHVlID0ge1xuICAgICAgICBidXR0b246ICEwLFxuICAgICAgICBjaGVja2JveDogITAsXG4gICAgICAgIGltYWdlOiAhMCxcbiAgICAgICAgaGlkZGVuOiAhMCxcbiAgICAgICAgcmFkaW86ICEwLFxuICAgICAgICByZXNldDogITAsXG4gICAgICAgIHN1Ym1pdDogITBcbiAgICAgIH0sXG4gICAgICBWQUxJRF9BVFRSSUJVVEVfTkFNRV9SRUdFWCA9IFJlZ0V4cChcbiAgICAgICAgXCJeWzpBLVpfYS16XFxcXHUwMEMwLVxcXFx1MDBENlxcXFx1MDBEOC1cXFxcdTAwRjZcXFxcdTAwRjgtXFxcXHUwMkZGXFxcXHUwMzcwLVxcXFx1MDM3RFxcXFx1MDM3Ri1cXFxcdTFGRkZcXFxcdTIwMEMtXFxcXHUyMDBEXFxcXHUyMDcwLVxcXFx1MjE4RlxcXFx1MkMwMC1cXFxcdTJGRUZcXFxcdTMwMDEtXFxcXHVEN0ZGXFxcXHVGOTAwLVxcXFx1RkRDRlxcXFx1RkRGMC1cXFxcdUZGRkRdWzpBLVpfYS16XFxcXHUwMEMwLVxcXFx1MDBENlxcXFx1MDBEOC1cXFxcdTAwRjZcXFxcdTAwRjgtXFxcXHUwMkZGXFxcXHUwMzcwLVxcXFx1MDM3RFxcXFx1MDM3Ri1cXFxcdTFGRkZcXFxcdTIwMEMtXFxcXHUyMDBEXFxcXHUyMDcwLVxcXFx1MjE4RlxcXFx1MkMwMC1cXFxcdTJGRUZcXFxcdTMwMDEtXFxcXHVEN0ZGXFxcXHVGOTAwLVxcXFx1RkRDRlxcXFx1RkRGMC1cXFxcdUZGRkRcXFxcLS4wLTlcXFxcdTAwQjdcXFxcdTAzMDAtXFxcXHUwMzZGXFxcXHUyMDNGLVxcXFx1MjA0MF0qJFwiXG4gICAgICApLFxuICAgICAgaWxsZWdhbEF0dHJpYnV0ZU5hbWVDYWNoZSA9IHt9LFxuICAgICAgdmFsaWRhdGVkQXR0cmlidXRlTmFtZUNhY2hlID0ge30sXG4gICAgICBlc2NhcGVTZWxlY3RvckF0dHJpYnV0ZVZhbHVlSW5zaWRlRG91YmxlUXVvdGVzUmVnZXggPSAvW1xcblwiXFxcXF0vZyxcbiAgICAgIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSQxID0gITEsXG4gICAgICBkaWRXYXJuQ2hlY2tlZERlZmF1bHRDaGVja2VkID0gITEsXG4gICAgICBkaWRXYXJuU2VsZWN0ZWRTZXRPbk9wdGlvbiA9ICExLFxuICAgICAgZGlkV2FybkludmFsaWRDaGlsZCA9ICExLFxuICAgICAgZGlkV2FybkludmFsaWRJbm5lckhUTUwgPSAhMTtcbiAgICB2YXIgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlID0gITE7XG4gICAgdmFyIHZhbHVlUHJvcE5hbWVzID0gW1widmFsdWVcIiwgXCJkZWZhdWx0VmFsdWVcIl0sXG4gICAgICBkaWRXYXJuVmFsRGVmYXVsdFZhbCA9ICExLFxuICAgICAgbmVlZHNFc2NhcGluZyA9IC9bXCInJjw+XFxuXFx0XXxeXFxzfFxccyQvLFxuICAgICAgc3BlY2lhbFRhZ3MgPVxuICAgICAgICBcImFkZHJlc3MgYXBwbGV0IGFyZWEgYXJ0aWNsZSBhc2lkZSBiYXNlIGJhc2Vmb250IGJnc291bmQgYmxvY2txdW90ZSBib2R5IGJyIGJ1dHRvbiBjYXB0aW9uIGNlbnRlciBjb2wgY29sZ3JvdXAgZGQgZGV0YWlscyBkaXIgZGl2IGRsIGR0IGVtYmVkIGZpZWxkc2V0IGZpZ2NhcHRpb24gZmlndXJlIGZvb3RlciBmb3JtIGZyYW1lIGZyYW1lc2V0IGgxIGgyIGgzIGg0IGg1IGg2IGhlYWQgaGVhZGVyIGhncm91cCBociBodG1sIGlmcmFtZSBpbWcgaW5wdXQgaXNpbmRleCBsaSBsaW5rIGxpc3RpbmcgbWFpbiBtYXJxdWVlIG1lbnUgbWVudWl0ZW0gbWV0YSBuYXYgbm9lbWJlZCBub2ZyYW1lcyBub3NjcmlwdCBvYmplY3Qgb2wgcCBwYXJhbSBwbGFpbnRleHQgcHJlIHNjcmlwdCBzZWN0aW9uIHNlbGVjdCBzb3VyY2Ugc3R5bGUgc3VtbWFyeSB0YWJsZSB0Ym9keSB0ZCB0ZW1wbGF0ZSB0ZXh0YXJlYSB0Zm9vdCB0aCB0aGVhZCB0aXRsZSB0ciB0cmFjayB1bCB3YnIgeG1wXCIuc3BsaXQoXG4gICAgICAgICAgXCIgXCJcbiAgICAgICAgKSxcbiAgICAgIGluU2NvcGVUYWdzID1cbiAgICAgICAgXCJhcHBsZXQgY2FwdGlvbiBodG1sIHRhYmxlIHRkIHRoIG1hcnF1ZWUgb2JqZWN0IHRlbXBsYXRlIGZvcmVpZ25PYmplY3QgZGVzYyB0aXRsZVwiLnNwbGl0KFxuICAgICAgICAgIFwiIFwiXG4gICAgICAgICksXG4gICAgICBidXR0b25TY29wZVRhZ3MgPSBpblNjb3BlVGFncy5jb25jYXQoW1wiYnV0dG9uXCJdKSxcbiAgICAgIGltcGxpZWRFbmRUYWdzID0gXCJkZCBkdCBsaSBvcHRpb24gb3B0Z3JvdXAgcCBycCBydFwiLnNwbGl0KFwiIFwiKSxcbiAgICAgIGVtcHR5QW5jZXN0b3JJbmZvRGV2ID0ge1xuICAgICAgICBjdXJyZW50OiBudWxsLFxuICAgICAgICBmb3JtVGFnOiBudWxsLFxuICAgICAgICBhVGFnSW5TY29wZTogbnVsbCxcbiAgICAgICAgYnV0dG9uVGFnSW5TY29wZTogbnVsbCxcbiAgICAgICAgbm9iclRhZ0luU2NvcGU6IG51bGwsXG4gICAgICAgIHBUYWdJbkJ1dHRvblNjb3BlOiBudWxsLFxuICAgICAgICBsaXN0SXRlbVRhZ0F1dG9jbG9zaW5nOiBudWxsLFxuICAgICAgICBkbEl0ZW1UYWdBdXRvY2xvc2luZzogbnVsbCxcbiAgICAgICAgY29udGFpbmVyVGFnSW5TY29wZTogbnVsbCxcbiAgICAgICAgaW1wbGljaXRSb290U2NvcGU6ICExXG4gICAgICB9LFxuICAgICAgZGlkV2FybiA9IHt9LFxuICAgICAgc2hvcnRoYW5kVG9Mb25naGFuZCA9IHtcbiAgICAgICAgYW5pbWF0aW9uOlxuICAgICAgICAgIFwiYW5pbWF0aW9uRGVsYXkgYW5pbWF0aW9uRGlyZWN0aW9uIGFuaW1hdGlvbkR1cmF0aW9uIGFuaW1hdGlvbkZpbGxNb2RlIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50IGFuaW1hdGlvbk5hbWUgYW5pbWF0aW9uUGxheVN0YXRlIGFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uXCIuc3BsaXQoXG4gICAgICAgICAgICBcIiBcIlxuICAgICAgICAgICksXG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgXCJiYWNrZ3JvdW5kQXR0YWNobWVudCBiYWNrZ3JvdW5kQ2xpcCBiYWNrZ3JvdW5kQ29sb3IgYmFja2dyb3VuZEltYWdlIGJhY2tncm91bmRPcmlnaW4gYmFja2dyb3VuZFBvc2l0aW9uWCBiYWNrZ3JvdW5kUG9zaXRpb25ZIGJhY2tncm91bmRSZXBlYXQgYmFja2dyb3VuZFNpemVcIi5zcGxpdChcbiAgICAgICAgICAgIFwiIFwiXG4gICAgICAgICAgKSxcbiAgICAgICAgYmFja2dyb3VuZFBvc2l0aW9uOiBbXCJiYWNrZ3JvdW5kUG9zaXRpb25YXCIsIFwiYmFja2dyb3VuZFBvc2l0aW9uWVwiXSxcbiAgICAgICAgYm9yZGVyOlxuICAgICAgICAgIFwiYm9yZGVyQm90dG9tQ29sb3IgYm9yZGVyQm90dG9tU3R5bGUgYm9yZGVyQm90dG9tV2lkdGggYm9yZGVySW1hZ2VPdXRzZXQgYm9yZGVySW1hZ2VSZXBlYXQgYm9yZGVySW1hZ2VTbGljZSBib3JkZXJJbWFnZVNvdXJjZSBib3JkZXJJbWFnZVdpZHRoIGJvcmRlckxlZnRDb2xvciBib3JkZXJMZWZ0U3R5bGUgYm9yZGVyTGVmdFdpZHRoIGJvcmRlclJpZ2h0Q29sb3IgYm9yZGVyUmlnaHRTdHlsZSBib3JkZXJSaWdodFdpZHRoIGJvcmRlclRvcENvbG9yIGJvcmRlclRvcFN0eWxlIGJvcmRlclRvcFdpZHRoXCIuc3BsaXQoXG4gICAgICAgICAgICBcIiBcIlxuICAgICAgICAgICksXG4gICAgICAgIGJvcmRlckJsb2NrRW5kOiBbXG4gICAgICAgICAgXCJib3JkZXJCbG9ja0VuZENvbG9yXCIsXG4gICAgICAgICAgXCJib3JkZXJCbG9ja0VuZFN0eWxlXCIsXG4gICAgICAgICAgXCJib3JkZXJCbG9ja0VuZFdpZHRoXCJcbiAgICAgICAgXSxcbiAgICAgICAgYm9yZGVyQmxvY2tTdGFydDogW1xuICAgICAgICAgIFwiYm9yZGVyQmxvY2tTdGFydENvbG9yXCIsXG4gICAgICAgICAgXCJib3JkZXJCbG9ja1N0YXJ0U3R5bGVcIixcbiAgICAgICAgICBcImJvcmRlckJsb2NrU3RhcnRXaWR0aFwiXG4gICAgICAgIF0sXG4gICAgICAgIGJvcmRlckJvdHRvbTogW1xuICAgICAgICAgIFwiYm9yZGVyQm90dG9tQ29sb3JcIixcbiAgICAgICAgICBcImJvcmRlckJvdHRvbVN0eWxlXCIsXG4gICAgICAgICAgXCJib3JkZXJCb3R0b21XaWR0aFwiXG4gICAgICAgIF0sXG4gICAgICAgIGJvcmRlckNvbG9yOiBbXG4gICAgICAgICAgXCJib3JkZXJCb3R0b21Db2xvclwiLFxuICAgICAgICAgIFwiYm9yZGVyTGVmdENvbG9yXCIsXG4gICAgICAgICAgXCJib3JkZXJSaWdodENvbG9yXCIsXG4gICAgICAgICAgXCJib3JkZXJUb3BDb2xvclwiXG4gICAgICAgIF0sXG4gICAgICAgIGJvcmRlckltYWdlOiBbXG4gICAgICAgICAgXCJib3JkZXJJbWFnZU91dHNldFwiLFxuICAgICAgICAgIFwiYm9yZGVySW1hZ2VSZXBlYXRcIixcbiAgICAgICAgICBcImJvcmRlckltYWdlU2xpY2VcIixcbiAgICAgICAgICBcImJvcmRlckltYWdlU291cmNlXCIsXG4gICAgICAgICAgXCJib3JkZXJJbWFnZVdpZHRoXCJcbiAgICAgICAgXSxcbiAgICAgICAgYm9yZGVySW5saW5lRW5kOiBbXG4gICAgICAgICAgXCJib3JkZXJJbmxpbmVFbmRDb2xvclwiLFxuICAgICAgICAgIFwiYm9yZGVySW5saW5lRW5kU3R5bGVcIixcbiAgICAgICAgICBcImJvcmRlcklubGluZUVuZFdpZHRoXCJcbiAgICAgICAgXSxcbiAgICAgICAgYm9yZGVySW5saW5lU3RhcnQ6IFtcbiAgICAgICAgICBcImJvcmRlcklubGluZVN0YXJ0Q29sb3JcIixcbiAgICAgICAgICBcImJvcmRlcklubGluZVN0YXJ0U3R5bGVcIixcbiAgICAgICAgICBcImJvcmRlcklubGluZVN0YXJ0V2lkdGhcIlxuICAgICAgICBdLFxuICAgICAgICBib3JkZXJMZWZ0OiBbXCJib3JkZXJMZWZ0Q29sb3JcIiwgXCJib3JkZXJMZWZ0U3R5bGVcIiwgXCJib3JkZXJMZWZ0V2lkdGhcIl0sXG4gICAgICAgIGJvcmRlclJhZGl1czogW1xuICAgICAgICAgIFwiYm9yZGVyQm90dG9tTGVmdFJhZGl1c1wiLFxuICAgICAgICAgIFwiYm9yZGVyQm90dG9tUmlnaHRSYWRpdXNcIixcbiAgICAgICAgICBcImJvcmRlclRvcExlZnRSYWRpdXNcIixcbiAgICAgICAgICBcImJvcmRlclRvcFJpZ2h0UmFkaXVzXCJcbiAgICAgICAgXSxcbiAgICAgICAgYm9yZGVyUmlnaHQ6IFtcbiAgICAgICAgICBcImJvcmRlclJpZ2h0Q29sb3JcIixcbiAgICAgICAgICBcImJvcmRlclJpZ2h0U3R5bGVcIixcbiAgICAgICAgICBcImJvcmRlclJpZ2h0V2lkdGhcIlxuICAgICAgICBdLFxuICAgICAgICBib3JkZXJTdHlsZTogW1xuICAgICAgICAgIFwiYm9yZGVyQm90dG9tU3R5bGVcIixcbiAgICAgICAgICBcImJvcmRlckxlZnRTdHlsZVwiLFxuICAgICAgICAgIFwiYm9yZGVyUmlnaHRTdHlsZVwiLFxuICAgICAgICAgIFwiYm9yZGVyVG9wU3R5bGVcIlxuICAgICAgICBdLFxuICAgICAgICBib3JkZXJUb3A6IFtcImJvcmRlclRvcENvbG9yXCIsIFwiYm9yZGVyVG9wU3R5bGVcIiwgXCJib3JkZXJUb3BXaWR0aFwiXSxcbiAgICAgICAgYm9yZGVyV2lkdGg6IFtcbiAgICAgICAgICBcImJvcmRlckJvdHRvbVdpZHRoXCIsXG4gICAgICAgICAgXCJib3JkZXJMZWZ0V2lkdGhcIixcbiAgICAgICAgICBcImJvcmRlclJpZ2h0V2lkdGhcIixcbiAgICAgICAgICBcImJvcmRlclRvcFdpZHRoXCJcbiAgICAgICAgXSxcbiAgICAgICAgY29sdW1uUnVsZTogW1wiY29sdW1uUnVsZUNvbG9yXCIsIFwiY29sdW1uUnVsZVN0eWxlXCIsIFwiY29sdW1uUnVsZVdpZHRoXCJdLFxuICAgICAgICBjb2x1bW5zOiBbXCJjb2x1bW5Db3VudFwiLCBcImNvbHVtbldpZHRoXCJdLFxuICAgICAgICBmbGV4OiBbXCJmbGV4QmFzaXNcIiwgXCJmbGV4R3Jvd1wiLCBcImZsZXhTaHJpbmtcIl0sXG4gICAgICAgIGZsZXhGbG93OiBbXCJmbGV4RGlyZWN0aW9uXCIsIFwiZmxleFdyYXBcIl0sXG4gICAgICAgIGZvbnQ6IFwiZm9udEZhbWlseSBmb250RmVhdHVyZVNldHRpbmdzIGZvbnRLZXJuaW5nIGZvbnRMYW5ndWFnZU92ZXJyaWRlIGZvbnRTaXplIGZvbnRTaXplQWRqdXN0IGZvbnRTdHJldGNoIGZvbnRTdHlsZSBmb250VmFyaWFudCBmb250VmFyaWFudEFsdGVybmF0ZXMgZm9udFZhcmlhbnRDYXBzIGZvbnRWYXJpYW50RWFzdEFzaWFuIGZvbnRWYXJpYW50TGlnYXR1cmVzIGZvbnRWYXJpYW50TnVtZXJpYyBmb250VmFyaWFudFBvc2l0aW9uIGZvbnRXZWlnaHQgbGluZUhlaWdodFwiLnNwbGl0KFxuICAgICAgICAgIFwiIFwiXG4gICAgICAgICksXG4gICAgICAgIGZvbnRWYXJpYW50OlxuICAgICAgICAgIFwiZm9udFZhcmlhbnRBbHRlcm5hdGVzIGZvbnRWYXJpYW50Q2FwcyBmb250VmFyaWFudEVhc3RBc2lhbiBmb250VmFyaWFudExpZ2F0dXJlcyBmb250VmFyaWFudE51bWVyaWMgZm9udFZhcmlhbnRQb3NpdGlvblwiLnNwbGl0KFxuICAgICAgICAgICAgXCIgXCJcbiAgICAgICAgICApLFxuICAgICAgICBnYXA6IFtcImNvbHVtbkdhcFwiLCBcInJvd0dhcFwiXSxcbiAgICAgICAgZ3JpZDogXCJncmlkQXV0b0NvbHVtbnMgZ3JpZEF1dG9GbG93IGdyaWRBdXRvUm93cyBncmlkVGVtcGxhdGVBcmVhcyBncmlkVGVtcGxhdGVDb2x1bW5zIGdyaWRUZW1wbGF0ZVJvd3NcIi5zcGxpdChcbiAgICAgICAgICBcIiBcIlxuICAgICAgICApLFxuICAgICAgICBncmlkQXJlYTogW1xuICAgICAgICAgIFwiZ3JpZENvbHVtbkVuZFwiLFxuICAgICAgICAgIFwiZ3JpZENvbHVtblN0YXJ0XCIsXG4gICAgICAgICAgXCJncmlkUm93RW5kXCIsXG4gICAgICAgICAgXCJncmlkUm93U3RhcnRcIlxuICAgICAgICBdLFxuICAgICAgICBncmlkQ29sdW1uOiBbXCJncmlkQ29sdW1uRW5kXCIsIFwiZ3JpZENvbHVtblN0YXJ0XCJdLFxuICAgICAgICBncmlkQ29sdW1uR2FwOiBbXCJjb2x1bW5HYXBcIl0sXG4gICAgICAgIGdyaWRHYXA6IFtcImNvbHVtbkdhcFwiLCBcInJvd0dhcFwiXSxcbiAgICAgICAgZ3JpZFJvdzogW1wiZ3JpZFJvd0VuZFwiLCBcImdyaWRSb3dTdGFydFwiXSxcbiAgICAgICAgZ3JpZFJvd0dhcDogW1wicm93R2FwXCJdLFxuICAgICAgICBncmlkVGVtcGxhdGU6IFtcbiAgICAgICAgICBcImdyaWRUZW1wbGF0ZUFyZWFzXCIsXG4gICAgICAgICAgXCJncmlkVGVtcGxhdGVDb2x1bW5zXCIsXG4gICAgICAgICAgXCJncmlkVGVtcGxhdGVSb3dzXCJcbiAgICAgICAgXSxcbiAgICAgICAgbGlzdFN0eWxlOiBbXCJsaXN0U3R5bGVJbWFnZVwiLCBcImxpc3RTdHlsZVBvc2l0aW9uXCIsIFwibGlzdFN0eWxlVHlwZVwiXSxcbiAgICAgICAgbWFyZ2luOiBbXCJtYXJnaW5Cb3R0b21cIiwgXCJtYXJnaW5MZWZ0XCIsIFwibWFyZ2luUmlnaHRcIiwgXCJtYXJnaW5Ub3BcIl0sXG4gICAgICAgIG1hcmtlcjogW1wibWFya2VyRW5kXCIsIFwibWFya2VyTWlkXCIsIFwibWFya2VyU3RhcnRcIl0sXG4gICAgICAgIG1hc2s6IFwibWFza0NsaXAgbWFza0NvbXBvc2l0ZSBtYXNrSW1hZ2UgbWFza01vZGUgbWFza09yaWdpbiBtYXNrUG9zaXRpb25YIG1hc2tQb3NpdGlvblkgbWFza1JlcGVhdCBtYXNrU2l6ZVwiLnNwbGl0KFxuICAgICAgICAgIFwiIFwiXG4gICAgICAgICksXG4gICAgICAgIG1hc2tQb3NpdGlvbjogW1wibWFza1Bvc2l0aW9uWFwiLCBcIm1hc2tQb3NpdGlvbllcIl0sXG4gICAgICAgIG91dGxpbmU6IFtcIm91dGxpbmVDb2xvclwiLCBcIm91dGxpbmVTdHlsZVwiLCBcIm91dGxpbmVXaWR0aFwiXSxcbiAgICAgICAgb3ZlcmZsb3c6IFtcIm92ZXJmbG93WFwiLCBcIm92ZXJmbG93WVwiXSxcbiAgICAgICAgcGFkZGluZzogW1wicGFkZGluZ0JvdHRvbVwiLCBcInBhZGRpbmdMZWZ0XCIsIFwicGFkZGluZ1JpZ2h0XCIsIFwicGFkZGluZ1RvcFwiXSxcbiAgICAgICAgcGxhY2VDb250ZW50OiBbXCJhbGlnbkNvbnRlbnRcIiwgXCJqdXN0aWZ5Q29udGVudFwiXSxcbiAgICAgICAgcGxhY2VJdGVtczogW1wiYWxpZ25JdGVtc1wiLCBcImp1c3RpZnlJdGVtc1wiXSxcbiAgICAgICAgcGxhY2VTZWxmOiBbXCJhbGlnblNlbGZcIiwgXCJqdXN0aWZ5U2VsZlwiXSxcbiAgICAgICAgdGV4dERlY29yYXRpb246IFtcbiAgICAgICAgICBcInRleHREZWNvcmF0aW9uQ29sb3JcIixcbiAgICAgICAgICBcInRleHREZWNvcmF0aW9uTGluZVwiLFxuICAgICAgICAgIFwidGV4dERlY29yYXRpb25TdHlsZVwiXG4gICAgICAgIF0sXG4gICAgICAgIHRleHRFbXBoYXNpczogW1widGV4dEVtcGhhc2lzQ29sb3JcIiwgXCJ0ZXh0RW1waGFzaXNTdHlsZVwiXSxcbiAgICAgICAgdHJhbnNpdGlvbjogW1xuICAgICAgICAgIFwidHJhbnNpdGlvbkRlbGF5XCIsXG4gICAgICAgICAgXCJ0cmFuc2l0aW9uRHVyYXRpb25cIixcbiAgICAgICAgICBcInRyYW5zaXRpb25Qcm9wZXJ0eVwiLFxuICAgICAgICAgIFwidHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uXCJcbiAgICAgICAgXSxcbiAgICAgICAgd29yZFdyYXA6IFtcIm92ZXJmbG93V3JhcFwiXVxuICAgICAgfSxcbiAgICAgIHVwcGVyY2FzZVBhdHRlcm4gPSAvKFtBLVpdKS9nLFxuICAgICAgbXNQYXR0ZXJuJDEgPSAvXm1zLS8sXG4gICAgICBiYWRWZW5kb3JlZFN0eWxlTmFtZVBhdHRlcm4gPSAvXig/OndlYmtpdHxtb3p8bylbQS1aXS8sXG4gICAgICBtc1BhdHRlcm4gPSAvXi1tcy0vLFxuICAgICAgaHlwaGVuUGF0dGVybiA9IC8tKC4pL2csXG4gICAgICBiYWRTdHlsZVZhbHVlV2l0aFNlbWljb2xvblBhdHRlcm4gPSAvO1xccyokLyxcbiAgICAgIHdhcm5lZFN0eWxlTmFtZXMgPSB7fSxcbiAgICAgIHdhcm5lZFN0eWxlVmFsdWVzID0ge30sXG4gICAgICB3YXJuZWRGb3JOYU5WYWx1ZSA9ICExLFxuICAgICAgd2FybmVkRm9ySW5maW5pdHlWYWx1ZSA9ICExLFxuICAgICAgdW5pdGxlc3NOdW1iZXJzID0gbmV3IFNldChcbiAgICAgICAgXCJhbmltYXRpb25JdGVyYXRpb25Db3VudCBhc3BlY3RSYXRpbyBib3JkZXJJbWFnZU91dHNldCBib3JkZXJJbWFnZVNsaWNlIGJvcmRlckltYWdlV2lkdGggYm94RmxleCBib3hGbGV4R3JvdXAgYm94T3JkaW5hbEdyb3VwIGNvbHVtbkNvdW50IGNvbHVtbnMgZmxleCBmbGV4R3JvdyBmbGV4UG9zaXRpdmUgZmxleFNocmluayBmbGV4TmVnYXRpdmUgZmxleE9yZGVyIGdyaWRBcmVhIGdyaWRSb3cgZ3JpZFJvd0VuZCBncmlkUm93U3BhbiBncmlkUm93U3RhcnQgZ3JpZENvbHVtbiBncmlkQ29sdW1uRW5kIGdyaWRDb2x1bW5TcGFuIGdyaWRDb2x1bW5TdGFydCBmb250V2VpZ2h0IGxpbmVDbGFtcCBsaW5lSGVpZ2h0IG9wYWNpdHkgb3JkZXIgb3JwaGFucyBzY2FsZSB0YWJTaXplIHdpZG93cyB6SW5kZXggem9vbSBmaWxsT3BhY2l0eSBmbG9vZE9wYWNpdHkgc3RvcE9wYWNpdHkgc3Ryb2tlRGFzaGFycmF5IHN0cm9rZURhc2hvZmZzZXQgc3Ryb2tlTWl0ZXJsaW1pdCBzdHJva2VPcGFjaXR5IHN0cm9rZVdpZHRoIE1vekFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50IE1vekJveEZsZXggTW96Qm94RmxleEdyb3VwIE1vekxpbmVDbGFtcCBtc0FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50IG1zRmxleCBtc1pvb20gbXNGbGV4R3JvdyBtc0ZsZXhOZWdhdGl2ZSBtc0ZsZXhPcmRlciBtc0ZsZXhQb3NpdGl2ZSBtc0ZsZXhTaHJpbmsgbXNHcmlkQ29sdW1uIG1zR3JpZENvbHVtblNwYW4gbXNHcmlkUm93IG1zR3JpZFJvd1NwYW4gV2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQgV2Via2l0Qm94RmxleCBXZWJLaXRCb3hGbGV4R3JvdXAgV2Via2l0Qm94T3JkaW5hbEdyb3VwIFdlYmtpdENvbHVtbkNvdW50IFdlYmtpdENvbHVtbnMgV2Via2l0RmxleCBXZWJraXRGbGV4R3JvdyBXZWJraXRGbGV4UG9zaXRpdmUgV2Via2l0RmxleFNocmluayBXZWJraXRMaW5lQ2xhbXBcIi5zcGxpdChcbiAgICAgICAgICBcIiBcIlxuICAgICAgICApXG4gICAgICApLFxuICAgICAgTUFUSF9OQU1FU1BBQ0UgPSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUxcIixcbiAgICAgIFNWR19OQU1FU1BBQ0UgPSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICBhbGlhc2VzID0gbmV3IE1hcChbXG4gICAgICAgIFtcImFjY2VwdENoYXJzZXRcIiwgXCJhY2NlcHQtY2hhcnNldFwiXSxcbiAgICAgICAgW1wiaHRtbEZvclwiLCBcImZvclwiXSxcbiAgICAgICAgW1wiaHR0cEVxdWl2XCIsIFwiaHR0cC1lcXVpdlwiXSxcbiAgICAgICAgW1wiY3Jvc3NPcmlnaW5cIiwgXCJjcm9zc29yaWdpblwiXSxcbiAgICAgICAgW1wiYWNjZW50SGVpZ2h0XCIsIFwiYWNjZW50LWhlaWdodFwiXSxcbiAgICAgICAgW1wiYWxpZ25tZW50QmFzZWxpbmVcIiwgXCJhbGlnbm1lbnQtYmFzZWxpbmVcIl0sXG4gICAgICAgIFtcImFyYWJpY0Zvcm1cIiwgXCJhcmFiaWMtZm9ybVwiXSxcbiAgICAgICAgW1wiYmFzZWxpbmVTaGlmdFwiLCBcImJhc2VsaW5lLXNoaWZ0XCJdLFxuICAgICAgICBbXCJjYXBIZWlnaHRcIiwgXCJjYXAtaGVpZ2h0XCJdLFxuICAgICAgICBbXCJjbGlwUGF0aFwiLCBcImNsaXAtcGF0aFwiXSxcbiAgICAgICAgW1wiY2xpcFJ1bGVcIiwgXCJjbGlwLXJ1bGVcIl0sXG4gICAgICAgIFtcImNvbG9ySW50ZXJwb2xhdGlvblwiLCBcImNvbG9yLWludGVycG9sYXRpb25cIl0sXG4gICAgICAgIFtcImNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnNcIiwgXCJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnNcIl0sXG4gICAgICAgIFtcImNvbG9yUHJvZmlsZVwiLCBcImNvbG9yLXByb2ZpbGVcIl0sXG4gICAgICAgIFtcImNvbG9yUmVuZGVyaW5nXCIsIFwiY29sb3ItcmVuZGVyaW5nXCJdLFxuICAgICAgICBbXCJkb21pbmFudEJhc2VsaW5lXCIsIFwiZG9taW5hbnQtYmFzZWxpbmVcIl0sXG4gICAgICAgIFtcImVuYWJsZUJhY2tncm91bmRcIiwgXCJlbmFibGUtYmFja2dyb3VuZFwiXSxcbiAgICAgICAgW1wiZmlsbE9wYWNpdHlcIiwgXCJmaWxsLW9wYWNpdHlcIl0sXG4gICAgICAgIFtcImZpbGxSdWxlXCIsIFwiZmlsbC1ydWxlXCJdLFxuICAgICAgICBbXCJmbG9vZENvbG9yXCIsIFwiZmxvb2QtY29sb3JcIl0sXG4gICAgICAgIFtcImZsb29kT3BhY2l0eVwiLCBcImZsb29kLW9wYWNpdHlcIl0sXG4gICAgICAgIFtcImZvbnRGYW1pbHlcIiwgXCJmb250LWZhbWlseVwiXSxcbiAgICAgICAgW1wiZm9udFNpemVcIiwgXCJmb250LXNpemVcIl0sXG4gICAgICAgIFtcImZvbnRTaXplQWRqdXN0XCIsIFwiZm9udC1zaXplLWFkanVzdFwiXSxcbiAgICAgICAgW1wiZm9udFN0cmV0Y2hcIiwgXCJmb250LXN0cmV0Y2hcIl0sXG4gICAgICAgIFtcImZvbnRTdHlsZVwiLCBcImZvbnQtc3R5bGVcIl0sXG4gICAgICAgIFtcImZvbnRWYXJpYW50XCIsIFwiZm9udC12YXJpYW50XCJdLFxuICAgICAgICBbXCJmb250V2VpZ2h0XCIsIFwiZm9udC13ZWlnaHRcIl0sXG4gICAgICAgIFtcImdseXBoTmFtZVwiLCBcImdseXBoLW5hbWVcIl0sXG4gICAgICAgIFtcImdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsXCIsIFwiZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbFwiXSxcbiAgICAgICAgW1wiZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsXCIsIFwiZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWxcIl0sXG4gICAgICAgIFtcImhvcml6QWR2WFwiLCBcImhvcml6LWFkdi14XCJdLFxuICAgICAgICBbXCJob3Jpek9yaWdpblhcIiwgXCJob3Jpei1vcmlnaW4teFwiXSxcbiAgICAgICAgW1wiaW1hZ2VSZW5kZXJpbmdcIiwgXCJpbWFnZS1yZW5kZXJpbmdcIl0sXG4gICAgICAgIFtcImxldHRlclNwYWNpbmdcIiwgXCJsZXR0ZXItc3BhY2luZ1wiXSxcbiAgICAgICAgW1wibGlnaHRpbmdDb2xvclwiLCBcImxpZ2h0aW5nLWNvbG9yXCJdLFxuICAgICAgICBbXCJtYXJrZXJFbmRcIiwgXCJtYXJrZXItZW5kXCJdLFxuICAgICAgICBbXCJtYXJrZXJNaWRcIiwgXCJtYXJrZXItbWlkXCJdLFxuICAgICAgICBbXCJtYXJrZXJTdGFydFwiLCBcIm1hcmtlci1zdGFydFwiXSxcbiAgICAgICAgW1wib3ZlcmxpbmVQb3NpdGlvblwiLCBcIm92ZXJsaW5lLXBvc2l0aW9uXCJdLFxuICAgICAgICBbXCJvdmVybGluZVRoaWNrbmVzc1wiLCBcIm92ZXJsaW5lLXRoaWNrbmVzc1wiXSxcbiAgICAgICAgW1wicGFpbnRPcmRlclwiLCBcInBhaW50LW9yZGVyXCJdLFxuICAgICAgICBbXCJwYW5vc2UtMVwiLCBcInBhbm9zZS0xXCJdLFxuICAgICAgICBbXCJwb2ludGVyRXZlbnRzXCIsIFwicG9pbnRlci1ldmVudHNcIl0sXG4gICAgICAgIFtcInJlbmRlcmluZ0ludGVudFwiLCBcInJlbmRlcmluZy1pbnRlbnRcIl0sXG4gICAgICAgIFtcInNoYXBlUmVuZGVyaW5nXCIsIFwic2hhcGUtcmVuZGVyaW5nXCJdLFxuICAgICAgICBbXCJzdG9wQ29sb3JcIiwgXCJzdG9wLWNvbG9yXCJdLFxuICAgICAgICBbXCJzdG9wT3BhY2l0eVwiLCBcInN0b3Atb3BhY2l0eVwiXSxcbiAgICAgICAgW1wic3RyaWtldGhyb3VnaFBvc2l0aW9uXCIsIFwic3RyaWtldGhyb3VnaC1wb3NpdGlvblwiXSxcbiAgICAgICAgW1wic3RyaWtldGhyb3VnaFRoaWNrbmVzc1wiLCBcInN0cmlrZXRocm91Z2gtdGhpY2tuZXNzXCJdLFxuICAgICAgICBbXCJzdHJva2VEYXNoYXJyYXlcIiwgXCJzdHJva2UtZGFzaGFycmF5XCJdLFxuICAgICAgICBbXCJzdHJva2VEYXNob2Zmc2V0XCIsIFwic3Ryb2tlLWRhc2hvZmZzZXRcIl0sXG4gICAgICAgIFtcInN0cm9rZUxpbmVjYXBcIiwgXCJzdHJva2UtbGluZWNhcFwiXSxcbiAgICAgICAgW1wic3Ryb2tlTGluZWpvaW5cIiwgXCJzdHJva2UtbGluZWpvaW5cIl0sXG4gICAgICAgIFtcInN0cm9rZU1pdGVybGltaXRcIiwgXCJzdHJva2UtbWl0ZXJsaW1pdFwiXSxcbiAgICAgICAgW1wic3Ryb2tlT3BhY2l0eVwiLCBcInN0cm9rZS1vcGFjaXR5XCJdLFxuICAgICAgICBbXCJzdHJva2VXaWR0aFwiLCBcInN0cm9rZS13aWR0aFwiXSxcbiAgICAgICAgW1widGV4dEFuY2hvclwiLCBcInRleHQtYW5jaG9yXCJdLFxuICAgICAgICBbXCJ0ZXh0RGVjb3JhdGlvblwiLCBcInRleHQtZGVjb3JhdGlvblwiXSxcbiAgICAgICAgW1widGV4dFJlbmRlcmluZ1wiLCBcInRleHQtcmVuZGVyaW5nXCJdLFxuICAgICAgICBbXCJ0cmFuc2Zvcm1PcmlnaW5cIiwgXCJ0cmFuc2Zvcm0tb3JpZ2luXCJdLFxuICAgICAgICBbXCJ1bmRlcmxpbmVQb3NpdGlvblwiLCBcInVuZGVybGluZS1wb3NpdGlvblwiXSxcbiAgICAgICAgW1widW5kZXJsaW5lVGhpY2tuZXNzXCIsIFwidW5kZXJsaW5lLXRoaWNrbmVzc1wiXSxcbiAgICAgICAgW1widW5pY29kZUJpZGlcIiwgXCJ1bmljb2RlLWJpZGlcIl0sXG4gICAgICAgIFtcInVuaWNvZGVSYW5nZVwiLCBcInVuaWNvZGUtcmFuZ2VcIl0sXG4gICAgICAgIFtcInVuaXRzUGVyRW1cIiwgXCJ1bml0cy1wZXItZW1cIl0sXG4gICAgICAgIFtcInZBbHBoYWJldGljXCIsIFwidi1hbHBoYWJldGljXCJdLFxuICAgICAgICBbXCJ2SGFuZ2luZ1wiLCBcInYtaGFuZ2luZ1wiXSxcbiAgICAgICAgW1widklkZW9ncmFwaGljXCIsIFwidi1pZGVvZ3JhcGhpY1wiXSxcbiAgICAgICAgW1widk1hdGhlbWF0aWNhbFwiLCBcInYtbWF0aGVtYXRpY2FsXCJdLFxuICAgICAgICBbXCJ2ZWN0b3JFZmZlY3RcIiwgXCJ2ZWN0b3ItZWZmZWN0XCJdLFxuICAgICAgICBbXCJ2ZXJ0QWR2WVwiLCBcInZlcnQtYWR2LXlcIl0sXG4gICAgICAgIFtcInZlcnRPcmlnaW5YXCIsIFwidmVydC1vcmlnaW4teFwiXSxcbiAgICAgICAgW1widmVydE9yaWdpbllcIiwgXCJ2ZXJ0LW9yaWdpbi15XCJdLFxuICAgICAgICBbXCJ3b3JkU3BhY2luZ1wiLCBcIndvcmQtc3BhY2luZ1wiXSxcbiAgICAgICAgW1wid3JpdGluZ01vZGVcIiwgXCJ3cml0aW5nLW1vZGVcIl0sXG4gICAgICAgIFtcInhtbG5zWGxpbmtcIiwgXCJ4bWxuczp4bGlua1wiXSxcbiAgICAgICAgW1wieEhlaWdodFwiLCBcIngtaGVpZ2h0XCJdXG4gICAgICBdKSxcbiAgICAgIHBvc3NpYmxlU3RhbmRhcmROYW1lcyA9IHtcbiAgICAgICAgYWNjZXB0OiBcImFjY2VwdFwiLFxuICAgICAgICBhY2NlcHRjaGFyc2V0OiBcImFjY2VwdENoYXJzZXRcIixcbiAgICAgICAgXCJhY2NlcHQtY2hhcnNldFwiOiBcImFjY2VwdENoYXJzZXRcIixcbiAgICAgICAgYWNjZXNza2V5OiBcImFjY2Vzc0tleVwiLFxuICAgICAgICBhY3Rpb246IFwiYWN0aW9uXCIsXG4gICAgICAgIGFsbG93ZnVsbHNjcmVlbjogXCJhbGxvd0Z1bGxTY3JlZW5cIixcbiAgICAgICAgYWx0OiBcImFsdFwiLFxuICAgICAgICBhczogXCJhc1wiLFxuICAgICAgICBhc3luYzogXCJhc3luY1wiLFxuICAgICAgICBhdXRvY2FwaXRhbGl6ZTogXCJhdXRvQ2FwaXRhbGl6ZVwiLFxuICAgICAgICBhdXRvY29tcGxldGU6IFwiYXV0b0NvbXBsZXRlXCIsXG4gICAgICAgIGF1dG9jb3JyZWN0OiBcImF1dG9Db3JyZWN0XCIsXG4gICAgICAgIGF1dG9mb2N1czogXCJhdXRvRm9jdXNcIixcbiAgICAgICAgYXV0b3BsYXk6IFwiYXV0b1BsYXlcIixcbiAgICAgICAgYXV0b3NhdmU6IFwiYXV0b1NhdmVcIixcbiAgICAgICAgY2FwdHVyZTogXCJjYXB0dXJlXCIsXG4gICAgICAgIGNlbGxwYWRkaW5nOiBcImNlbGxQYWRkaW5nXCIsXG4gICAgICAgIGNlbGxzcGFjaW5nOiBcImNlbGxTcGFjaW5nXCIsXG4gICAgICAgIGNoYWxsZW5nZTogXCJjaGFsbGVuZ2VcIixcbiAgICAgICAgY2hhcnNldDogXCJjaGFyU2V0XCIsXG4gICAgICAgIGNoZWNrZWQ6IFwiY2hlY2tlZFwiLFxuICAgICAgICBjaGlsZHJlbjogXCJjaGlsZHJlblwiLFxuICAgICAgICBjaXRlOiBcImNpdGVcIixcbiAgICAgICAgY2xhc3M6IFwiY2xhc3NOYW1lXCIsXG4gICAgICAgIGNsYXNzaWQ6IFwiY2xhc3NJRFwiLFxuICAgICAgICBjbGFzc25hbWU6IFwiY2xhc3NOYW1lXCIsXG4gICAgICAgIGNvbHM6IFwiY29sc1wiLFxuICAgICAgICBjb2xzcGFuOiBcImNvbFNwYW5cIixcbiAgICAgICAgY29udGVudDogXCJjb250ZW50XCIsXG4gICAgICAgIGNvbnRlbnRlZGl0YWJsZTogXCJjb250ZW50RWRpdGFibGVcIixcbiAgICAgICAgY29udGV4dG1lbnU6IFwiY29udGV4dE1lbnVcIixcbiAgICAgICAgY29udHJvbHM6IFwiY29udHJvbHNcIixcbiAgICAgICAgY29udHJvbHNsaXN0OiBcImNvbnRyb2xzTGlzdFwiLFxuICAgICAgICBjb29yZHM6IFwiY29vcmRzXCIsXG4gICAgICAgIGNyb3Nzb3JpZ2luOiBcImNyb3NzT3JpZ2luXCIsXG4gICAgICAgIGRhbmdlcm91c2x5c2V0aW5uZXJodG1sOiBcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCIsXG4gICAgICAgIGRhdGE6IFwiZGF0YVwiLFxuICAgICAgICBkYXRldGltZTogXCJkYXRlVGltZVwiLFxuICAgICAgICBkZWZhdWx0OiBcImRlZmF1bHRcIixcbiAgICAgICAgZGVmYXVsdGNoZWNrZWQ6IFwiZGVmYXVsdENoZWNrZWRcIixcbiAgICAgICAgZGVmYXVsdHZhbHVlOiBcImRlZmF1bHRWYWx1ZVwiLFxuICAgICAgICBkZWZlcjogXCJkZWZlclwiLFxuICAgICAgICBkaXI6IFwiZGlyXCIsXG4gICAgICAgIGRpc2FibGVkOiBcImRpc2FibGVkXCIsXG4gICAgICAgIGRpc2FibGVwaWN0dXJlaW5waWN0dXJlOiBcImRpc2FibGVQaWN0dXJlSW5QaWN0dXJlXCIsXG4gICAgICAgIGRpc2FibGVyZW1vdGVwbGF5YmFjazogXCJkaXNhYmxlUmVtb3RlUGxheWJhY2tcIixcbiAgICAgICAgZG93bmxvYWQ6IFwiZG93bmxvYWRcIixcbiAgICAgICAgZHJhZ2dhYmxlOiBcImRyYWdnYWJsZVwiLFxuICAgICAgICBlbmN0eXBlOiBcImVuY1R5cGVcIixcbiAgICAgICAgZW50ZXJrZXloaW50OiBcImVudGVyS2V5SGludFwiLFxuICAgICAgICBmZXRjaHByaW9yaXR5OiBcImZldGNoUHJpb3JpdHlcIixcbiAgICAgICAgZm9yOiBcImh0bWxGb3JcIixcbiAgICAgICAgZm9ybTogXCJmb3JtXCIsXG4gICAgICAgIGZvcm1tZXRob2Q6IFwiZm9ybU1ldGhvZFwiLFxuICAgICAgICBmb3JtYWN0aW9uOiBcImZvcm1BY3Rpb25cIixcbiAgICAgICAgZm9ybWVuY3R5cGU6IFwiZm9ybUVuY1R5cGVcIixcbiAgICAgICAgZm9ybW5vdmFsaWRhdGU6IFwiZm9ybU5vVmFsaWRhdGVcIixcbiAgICAgICAgZm9ybXRhcmdldDogXCJmb3JtVGFyZ2V0XCIsXG4gICAgICAgIGZyYW1lYm9yZGVyOiBcImZyYW1lQm9yZGVyXCIsXG4gICAgICAgIGhlYWRlcnM6IFwiaGVhZGVyc1wiLFxuICAgICAgICBoZWlnaHQ6IFwiaGVpZ2h0XCIsXG4gICAgICAgIGhpZGRlbjogXCJoaWRkZW5cIixcbiAgICAgICAgaGlnaDogXCJoaWdoXCIsXG4gICAgICAgIGhyZWY6IFwiaHJlZlwiLFxuICAgICAgICBocmVmbGFuZzogXCJocmVmTGFuZ1wiLFxuICAgICAgICBodG1sZm9yOiBcImh0bWxGb3JcIixcbiAgICAgICAgaHR0cGVxdWl2OiBcImh0dHBFcXVpdlwiLFxuICAgICAgICBcImh0dHAtZXF1aXZcIjogXCJodHRwRXF1aXZcIixcbiAgICAgICAgaWNvbjogXCJpY29uXCIsXG4gICAgICAgIGlkOiBcImlkXCIsXG4gICAgICAgIGltYWdlc2l6ZXM6IFwiaW1hZ2VTaXplc1wiLFxuICAgICAgICBpbWFnZXNyY3NldDogXCJpbWFnZVNyY1NldFwiLFxuICAgICAgICBpbmVydDogXCJpbmVydFwiLFxuICAgICAgICBpbm5lcmh0bWw6IFwiaW5uZXJIVE1MXCIsXG4gICAgICAgIGlucHV0bW9kZTogXCJpbnB1dE1vZGVcIixcbiAgICAgICAgaW50ZWdyaXR5OiBcImludGVncml0eVwiLFxuICAgICAgICBpczogXCJpc1wiLFxuICAgICAgICBpdGVtaWQ6IFwiaXRlbUlEXCIsXG4gICAgICAgIGl0ZW1wcm9wOiBcIml0ZW1Qcm9wXCIsXG4gICAgICAgIGl0ZW1yZWY6IFwiaXRlbVJlZlwiLFxuICAgICAgICBpdGVtc2NvcGU6IFwiaXRlbVNjb3BlXCIsXG4gICAgICAgIGl0ZW10eXBlOiBcIml0ZW1UeXBlXCIsXG4gICAgICAgIGtleXBhcmFtczogXCJrZXlQYXJhbXNcIixcbiAgICAgICAga2V5dHlwZTogXCJrZXlUeXBlXCIsXG4gICAgICAgIGtpbmQ6IFwia2luZFwiLFxuICAgICAgICBsYWJlbDogXCJsYWJlbFwiLFxuICAgICAgICBsYW5nOiBcImxhbmdcIixcbiAgICAgICAgbGlzdDogXCJsaXN0XCIsXG4gICAgICAgIGxvb3A6IFwibG9vcFwiLFxuICAgICAgICBsb3c6IFwibG93XCIsXG4gICAgICAgIG1hbmlmZXN0OiBcIm1hbmlmZXN0XCIsXG4gICAgICAgIG1hcmdpbndpZHRoOiBcIm1hcmdpbldpZHRoXCIsXG4gICAgICAgIG1hcmdpbmhlaWdodDogXCJtYXJnaW5IZWlnaHRcIixcbiAgICAgICAgbWF4OiBcIm1heFwiLFxuICAgICAgICBtYXhsZW5ndGg6IFwibWF4TGVuZ3RoXCIsXG4gICAgICAgIG1lZGlhOiBcIm1lZGlhXCIsXG4gICAgICAgIG1lZGlhZ3JvdXA6IFwibWVkaWFHcm91cFwiLFxuICAgICAgICBtZXRob2Q6IFwibWV0aG9kXCIsXG4gICAgICAgIG1pbjogXCJtaW5cIixcbiAgICAgICAgbWlubGVuZ3RoOiBcIm1pbkxlbmd0aFwiLFxuICAgICAgICBtdWx0aXBsZTogXCJtdWx0aXBsZVwiLFxuICAgICAgICBtdXRlZDogXCJtdXRlZFwiLFxuICAgICAgICBuYW1lOiBcIm5hbWVcIixcbiAgICAgICAgbm9tb2R1bGU6IFwibm9Nb2R1bGVcIixcbiAgICAgICAgbm9uY2U6IFwibm9uY2VcIixcbiAgICAgICAgbm92YWxpZGF0ZTogXCJub1ZhbGlkYXRlXCIsXG4gICAgICAgIG9wZW46IFwib3BlblwiLFxuICAgICAgICBvcHRpbXVtOiBcIm9wdGltdW1cIixcbiAgICAgICAgcGF0dGVybjogXCJwYXR0ZXJuXCIsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBcInBsYWNlaG9sZGVyXCIsXG4gICAgICAgIHBsYXlzaW5saW5lOiBcInBsYXlzSW5saW5lXCIsXG4gICAgICAgIHBvc3RlcjogXCJwb3N0ZXJcIixcbiAgICAgICAgcHJlbG9hZDogXCJwcmVsb2FkXCIsXG4gICAgICAgIHByb2ZpbGU6IFwicHJvZmlsZVwiLFxuICAgICAgICByYWRpb2dyb3VwOiBcInJhZGlvR3JvdXBcIixcbiAgICAgICAgcmVhZG9ubHk6IFwicmVhZE9ubHlcIixcbiAgICAgICAgcmVmZXJyZXJwb2xpY3k6IFwicmVmZXJyZXJQb2xpY3lcIixcbiAgICAgICAgcmVsOiBcInJlbFwiLFxuICAgICAgICByZXF1aXJlZDogXCJyZXF1aXJlZFwiLFxuICAgICAgICByZXZlcnNlZDogXCJyZXZlcnNlZFwiLFxuICAgICAgICByb2xlOiBcInJvbGVcIixcbiAgICAgICAgcm93czogXCJyb3dzXCIsXG4gICAgICAgIHJvd3NwYW46IFwicm93U3BhblwiLFxuICAgICAgICBzYW5kYm94OiBcInNhbmRib3hcIixcbiAgICAgICAgc2NvcGU6IFwic2NvcGVcIixcbiAgICAgICAgc2NvcGVkOiBcInNjb3BlZFwiLFxuICAgICAgICBzY3JvbGxpbmc6IFwic2Nyb2xsaW5nXCIsXG4gICAgICAgIHNlYW1sZXNzOiBcInNlYW1sZXNzXCIsXG4gICAgICAgIHNlbGVjdGVkOiBcInNlbGVjdGVkXCIsXG4gICAgICAgIHNoYXBlOiBcInNoYXBlXCIsXG4gICAgICAgIHNpemU6IFwic2l6ZVwiLFxuICAgICAgICBzaXplczogXCJzaXplc1wiLFxuICAgICAgICBzcGFuOiBcInNwYW5cIixcbiAgICAgICAgc3BlbGxjaGVjazogXCJzcGVsbENoZWNrXCIsXG4gICAgICAgIHNyYzogXCJzcmNcIixcbiAgICAgICAgc3JjZG9jOiBcInNyY0RvY1wiLFxuICAgICAgICBzcmNsYW5nOiBcInNyY0xhbmdcIixcbiAgICAgICAgc3Jjc2V0OiBcInNyY1NldFwiLFxuICAgICAgICBzdGFydDogXCJzdGFydFwiLFxuICAgICAgICBzdGVwOiBcInN0ZXBcIixcbiAgICAgICAgc3R5bGU6IFwic3R5bGVcIixcbiAgICAgICAgc3VtbWFyeTogXCJzdW1tYXJ5XCIsXG4gICAgICAgIHRhYmluZGV4OiBcInRhYkluZGV4XCIsXG4gICAgICAgIHRhcmdldDogXCJ0YXJnZXRcIixcbiAgICAgICAgdGl0bGU6IFwidGl0bGVcIixcbiAgICAgICAgdHlwZTogXCJ0eXBlXCIsXG4gICAgICAgIHVzZW1hcDogXCJ1c2VNYXBcIixcbiAgICAgICAgdmFsdWU6IFwidmFsdWVcIixcbiAgICAgICAgd2lkdGg6IFwid2lkdGhcIixcbiAgICAgICAgd21vZGU6IFwid21vZGVcIixcbiAgICAgICAgd3JhcDogXCJ3cmFwXCIsXG4gICAgICAgIGFib3V0OiBcImFib3V0XCIsXG4gICAgICAgIGFjY2VudGhlaWdodDogXCJhY2NlbnRIZWlnaHRcIixcbiAgICAgICAgXCJhY2NlbnQtaGVpZ2h0XCI6IFwiYWNjZW50SGVpZ2h0XCIsXG4gICAgICAgIGFjY3VtdWxhdGU6IFwiYWNjdW11bGF0ZVwiLFxuICAgICAgICBhZGRpdGl2ZTogXCJhZGRpdGl2ZVwiLFxuICAgICAgICBhbGlnbm1lbnRiYXNlbGluZTogXCJhbGlnbm1lbnRCYXNlbGluZVwiLFxuICAgICAgICBcImFsaWdubWVudC1iYXNlbGluZVwiOiBcImFsaWdubWVudEJhc2VsaW5lXCIsXG4gICAgICAgIGFsbG93cmVvcmRlcjogXCJhbGxvd1Jlb3JkZXJcIixcbiAgICAgICAgYWxwaGFiZXRpYzogXCJhbHBoYWJldGljXCIsXG4gICAgICAgIGFtcGxpdHVkZTogXCJhbXBsaXR1ZGVcIixcbiAgICAgICAgYXJhYmljZm9ybTogXCJhcmFiaWNGb3JtXCIsXG4gICAgICAgIFwiYXJhYmljLWZvcm1cIjogXCJhcmFiaWNGb3JtXCIsXG4gICAgICAgIGFzY2VudDogXCJhc2NlbnRcIixcbiAgICAgICAgYXR0cmlidXRlbmFtZTogXCJhdHRyaWJ1dGVOYW1lXCIsXG4gICAgICAgIGF0dHJpYnV0ZXR5cGU6IFwiYXR0cmlidXRlVHlwZVwiLFxuICAgICAgICBhdXRvcmV2ZXJzZTogXCJhdXRvUmV2ZXJzZVwiLFxuICAgICAgICBhemltdXRoOiBcImF6aW11dGhcIixcbiAgICAgICAgYmFzZWZyZXF1ZW5jeTogXCJiYXNlRnJlcXVlbmN5XCIsXG4gICAgICAgIGJhc2VsaW5lc2hpZnQ6IFwiYmFzZWxpbmVTaGlmdFwiLFxuICAgICAgICBcImJhc2VsaW5lLXNoaWZ0XCI6IFwiYmFzZWxpbmVTaGlmdFwiLFxuICAgICAgICBiYXNlcHJvZmlsZTogXCJiYXNlUHJvZmlsZVwiLFxuICAgICAgICBiYm94OiBcImJib3hcIixcbiAgICAgICAgYmVnaW46IFwiYmVnaW5cIixcbiAgICAgICAgYmlhczogXCJiaWFzXCIsXG4gICAgICAgIGJ5OiBcImJ5XCIsXG4gICAgICAgIGNhbGNtb2RlOiBcImNhbGNNb2RlXCIsXG4gICAgICAgIGNhcGhlaWdodDogXCJjYXBIZWlnaHRcIixcbiAgICAgICAgXCJjYXAtaGVpZ2h0XCI6IFwiY2FwSGVpZ2h0XCIsXG4gICAgICAgIGNsaXA6IFwiY2xpcFwiLFxuICAgICAgICBjbGlwcGF0aDogXCJjbGlwUGF0aFwiLFxuICAgICAgICBcImNsaXAtcGF0aFwiOiBcImNsaXBQYXRoXCIsXG4gICAgICAgIGNsaXBwYXRodW5pdHM6IFwiY2xpcFBhdGhVbml0c1wiLFxuICAgICAgICBjbGlwcnVsZTogXCJjbGlwUnVsZVwiLFxuICAgICAgICBcImNsaXAtcnVsZVwiOiBcImNsaXBSdWxlXCIsXG4gICAgICAgIGNvbG9yOiBcImNvbG9yXCIsXG4gICAgICAgIGNvbG9yaW50ZXJwb2xhdGlvbjogXCJjb2xvckludGVycG9sYXRpb25cIixcbiAgICAgICAgXCJjb2xvci1pbnRlcnBvbGF0aW9uXCI6IFwiY29sb3JJbnRlcnBvbGF0aW9uXCIsXG4gICAgICAgIGNvbG9yaW50ZXJwb2xhdGlvbmZpbHRlcnM6IFwiY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyc1wiLFxuICAgICAgICBcImNvbG9yLWludGVycG9sYXRpb24tZmlsdGVyc1wiOiBcImNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnNcIixcbiAgICAgICAgY29sb3Jwcm9maWxlOiBcImNvbG9yUHJvZmlsZVwiLFxuICAgICAgICBcImNvbG9yLXByb2ZpbGVcIjogXCJjb2xvclByb2ZpbGVcIixcbiAgICAgICAgY29sb3JyZW5kZXJpbmc6IFwiY29sb3JSZW5kZXJpbmdcIixcbiAgICAgICAgXCJjb2xvci1yZW5kZXJpbmdcIjogXCJjb2xvclJlbmRlcmluZ1wiLFxuICAgICAgICBjb250ZW50c2NyaXB0dHlwZTogXCJjb250ZW50U2NyaXB0VHlwZVwiLFxuICAgICAgICBjb250ZW50c3R5bGV0eXBlOiBcImNvbnRlbnRTdHlsZVR5cGVcIixcbiAgICAgICAgY3Vyc29yOiBcImN1cnNvclwiLFxuICAgICAgICBjeDogXCJjeFwiLFxuICAgICAgICBjeTogXCJjeVwiLFxuICAgICAgICBkOiBcImRcIixcbiAgICAgICAgZGF0YXR5cGU6IFwiZGF0YXR5cGVcIixcbiAgICAgICAgZGVjZWxlcmF0ZTogXCJkZWNlbGVyYXRlXCIsXG4gICAgICAgIGRlc2NlbnQ6IFwiZGVzY2VudFwiLFxuICAgICAgICBkaWZmdXNlY29uc3RhbnQ6IFwiZGlmZnVzZUNvbnN0YW50XCIsXG4gICAgICAgIGRpcmVjdGlvbjogXCJkaXJlY3Rpb25cIixcbiAgICAgICAgZGlzcGxheTogXCJkaXNwbGF5XCIsXG4gICAgICAgIGRpdmlzb3I6IFwiZGl2aXNvclwiLFxuICAgICAgICBkb21pbmFudGJhc2VsaW5lOiBcImRvbWluYW50QmFzZWxpbmVcIixcbiAgICAgICAgXCJkb21pbmFudC1iYXNlbGluZVwiOiBcImRvbWluYW50QmFzZWxpbmVcIixcbiAgICAgICAgZHVyOiBcImR1clwiLFxuICAgICAgICBkeDogXCJkeFwiLFxuICAgICAgICBkeTogXCJkeVwiLFxuICAgICAgICBlZGdlbW9kZTogXCJlZGdlTW9kZVwiLFxuICAgICAgICBlbGV2YXRpb246IFwiZWxldmF0aW9uXCIsXG4gICAgICAgIGVuYWJsZWJhY2tncm91bmQ6IFwiZW5hYmxlQmFja2dyb3VuZFwiLFxuICAgICAgICBcImVuYWJsZS1iYWNrZ3JvdW5kXCI6IFwiZW5hYmxlQmFja2dyb3VuZFwiLFxuICAgICAgICBlbmQ6IFwiZW5kXCIsXG4gICAgICAgIGV4cG9uZW50OiBcImV4cG9uZW50XCIsXG4gICAgICAgIGV4dGVybmFscmVzb3VyY2VzcmVxdWlyZWQ6IFwiZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZFwiLFxuICAgICAgICBmaWxsOiBcImZpbGxcIixcbiAgICAgICAgZmlsbG9wYWNpdHk6IFwiZmlsbE9wYWNpdHlcIixcbiAgICAgICAgXCJmaWxsLW9wYWNpdHlcIjogXCJmaWxsT3BhY2l0eVwiLFxuICAgICAgICBmaWxscnVsZTogXCJmaWxsUnVsZVwiLFxuICAgICAgICBcImZpbGwtcnVsZVwiOiBcImZpbGxSdWxlXCIsXG4gICAgICAgIGZpbHRlcjogXCJmaWx0ZXJcIixcbiAgICAgICAgZmlsdGVycmVzOiBcImZpbHRlclJlc1wiLFxuICAgICAgICBmaWx0ZXJ1bml0czogXCJmaWx0ZXJVbml0c1wiLFxuICAgICAgICBmbG9vZG9wYWNpdHk6IFwiZmxvb2RPcGFjaXR5XCIsXG4gICAgICAgIFwiZmxvb2Qtb3BhY2l0eVwiOiBcImZsb29kT3BhY2l0eVwiLFxuICAgICAgICBmbG9vZGNvbG9yOiBcImZsb29kQ29sb3JcIixcbiAgICAgICAgXCJmbG9vZC1jb2xvclwiOiBcImZsb29kQ29sb3JcIixcbiAgICAgICAgZm9jdXNhYmxlOiBcImZvY3VzYWJsZVwiLFxuICAgICAgICBmb250ZmFtaWx5OiBcImZvbnRGYW1pbHlcIixcbiAgICAgICAgXCJmb250LWZhbWlseVwiOiBcImZvbnRGYW1pbHlcIixcbiAgICAgICAgZm9udHNpemU6IFwiZm9udFNpemVcIixcbiAgICAgICAgXCJmb250LXNpemVcIjogXCJmb250U2l6ZVwiLFxuICAgICAgICBmb250c2l6ZWFkanVzdDogXCJmb250U2l6ZUFkanVzdFwiLFxuICAgICAgICBcImZvbnQtc2l6ZS1hZGp1c3RcIjogXCJmb250U2l6ZUFkanVzdFwiLFxuICAgICAgICBmb250c3RyZXRjaDogXCJmb250U3RyZXRjaFwiLFxuICAgICAgICBcImZvbnQtc3RyZXRjaFwiOiBcImZvbnRTdHJldGNoXCIsXG4gICAgICAgIGZvbnRzdHlsZTogXCJmb250U3R5bGVcIixcbiAgICAgICAgXCJmb250LXN0eWxlXCI6IFwiZm9udFN0eWxlXCIsXG4gICAgICAgIGZvbnR2YXJpYW50OiBcImZvbnRWYXJpYW50XCIsXG4gICAgICAgIFwiZm9udC12YXJpYW50XCI6IFwiZm9udFZhcmlhbnRcIixcbiAgICAgICAgZm9udHdlaWdodDogXCJmb250V2VpZ2h0XCIsXG4gICAgICAgIFwiZm9udC13ZWlnaHRcIjogXCJmb250V2VpZ2h0XCIsXG4gICAgICAgIGZvcm1hdDogXCJmb3JtYXRcIixcbiAgICAgICAgZnJvbTogXCJmcm9tXCIsXG4gICAgICAgIGZ4OiBcImZ4XCIsXG4gICAgICAgIGZ5OiBcImZ5XCIsXG4gICAgICAgIGcxOiBcImcxXCIsXG4gICAgICAgIGcyOiBcImcyXCIsXG4gICAgICAgIGdseXBobmFtZTogXCJnbHlwaE5hbWVcIixcbiAgICAgICAgXCJnbHlwaC1uYW1lXCI6IFwiZ2x5cGhOYW1lXCIsXG4gICAgICAgIGdseXBob3JpZW50YXRpb25ob3Jpem9udGFsOiBcImdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsXCIsXG4gICAgICAgIFwiZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbFwiOiBcImdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsXCIsXG4gICAgICAgIGdseXBob3JpZW50YXRpb252ZXJ0aWNhbDogXCJnbHlwaE9yaWVudGF0aW9uVmVydGljYWxcIixcbiAgICAgICAgXCJnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbFwiOiBcImdseXBoT3JpZW50YXRpb25WZXJ0aWNhbFwiLFxuICAgICAgICBnbHlwaHJlZjogXCJnbHlwaFJlZlwiLFxuICAgICAgICBncmFkaWVudHRyYW5zZm9ybTogXCJncmFkaWVudFRyYW5zZm9ybVwiLFxuICAgICAgICBncmFkaWVudHVuaXRzOiBcImdyYWRpZW50VW5pdHNcIixcbiAgICAgICAgaGFuZ2luZzogXCJoYW5naW5nXCIsXG4gICAgICAgIGhvcml6YWR2eDogXCJob3JpekFkdlhcIixcbiAgICAgICAgXCJob3Jpei1hZHYteFwiOiBcImhvcml6QWR2WFwiLFxuICAgICAgICBob3Jpem9yaWdpbng6IFwiaG9yaXpPcmlnaW5YXCIsXG4gICAgICAgIFwiaG9yaXotb3JpZ2luLXhcIjogXCJob3Jpek9yaWdpblhcIixcbiAgICAgICAgaWRlb2dyYXBoaWM6IFwiaWRlb2dyYXBoaWNcIixcbiAgICAgICAgaW1hZ2VyZW5kZXJpbmc6IFwiaW1hZ2VSZW5kZXJpbmdcIixcbiAgICAgICAgXCJpbWFnZS1yZW5kZXJpbmdcIjogXCJpbWFnZVJlbmRlcmluZ1wiLFxuICAgICAgICBpbjI6IFwiaW4yXCIsXG4gICAgICAgIGluOiBcImluXCIsXG4gICAgICAgIGlubGlzdDogXCJpbmxpc3RcIixcbiAgICAgICAgaW50ZXJjZXB0OiBcImludGVyY2VwdFwiLFxuICAgICAgICBrMTogXCJrMVwiLFxuICAgICAgICBrMjogXCJrMlwiLFxuICAgICAgICBrMzogXCJrM1wiLFxuICAgICAgICBrNDogXCJrNFwiLFxuICAgICAgICBrOiBcImtcIixcbiAgICAgICAga2VybmVsbWF0cml4OiBcImtlcm5lbE1hdHJpeFwiLFxuICAgICAgICBrZXJuZWx1bml0bGVuZ3RoOiBcImtlcm5lbFVuaXRMZW5ndGhcIixcbiAgICAgICAga2VybmluZzogXCJrZXJuaW5nXCIsXG4gICAgICAgIGtleXBvaW50czogXCJrZXlQb2ludHNcIixcbiAgICAgICAga2V5c3BsaW5lczogXCJrZXlTcGxpbmVzXCIsXG4gICAgICAgIGtleXRpbWVzOiBcImtleVRpbWVzXCIsXG4gICAgICAgIGxlbmd0aGFkanVzdDogXCJsZW5ndGhBZGp1c3RcIixcbiAgICAgICAgbGV0dGVyc3BhY2luZzogXCJsZXR0ZXJTcGFjaW5nXCIsXG4gICAgICAgIFwibGV0dGVyLXNwYWNpbmdcIjogXCJsZXR0ZXJTcGFjaW5nXCIsXG4gICAgICAgIGxpZ2h0aW5nY29sb3I6IFwibGlnaHRpbmdDb2xvclwiLFxuICAgICAgICBcImxpZ2h0aW5nLWNvbG9yXCI6IFwibGlnaHRpbmdDb2xvclwiLFxuICAgICAgICBsaW1pdGluZ2NvbmVhbmdsZTogXCJsaW1pdGluZ0NvbmVBbmdsZVwiLFxuICAgICAgICBsb2NhbDogXCJsb2NhbFwiLFxuICAgICAgICBtYXJrZXJlbmQ6IFwibWFya2VyRW5kXCIsXG4gICAgICAgIFwibWFya2VyLWVuZFwiOiBcIm1hcmtlckVuZFwiLFxuICAgICAgICBtYXJrZXJoZWlnaHQ6IFwibWFya2VySGVpZ2h0XCIsXG4gICAgICAgIG1hcmtlcm1pZDogXCJtYXJrZXJNaWRcIixcbiAgICAgICAgXCJtYXJrZXItbWlkXCI6IFwibWFya2VyTWlkXCIsXG4gICAgICAgIG1hcmtlcnN0YXJ0OiBcIm1hcmtlclN0YXJ0XCIsXG4gICAgICAgIFwibWFya2VyLXN0YXJ0XCI6IFwibWFya2VyU3RhcnRcIixcbiAgICAgICAgbWFya2VydW5pdHM6IFwibWFya2VyVW5pdHNcIixcbiAgICAgICAgbWFya2Vyd2lkdGg6IFwibWFya2VyV2lkdGhcIixcbiAgICAgICAgbWFzazogXCJtYXNrXCIsXG4gICAgICAgIG1hc2tjb250ZW50dW5pdHM6IFwibWFza0NvbnRlbnRVbml0c1wiLFxuICAgICAgICBtYXNrdW5pdHM6IFwibWFza1VuaXRzXCIsXG4gICAgICAgIG1hdGhlbWF0aWNhbDogXCJtYXRoZW1hdGljYWxcIixcbiAgICAgICAgbW9kZTogXCJtb2RlXCIsXG4gICAgICAgIG51bW9jdGF2ZXM6IFwibnVtT2N0YXZlc1wiLFxuICAgICAgICBvZmZzZXQ6IFwib2Zmc2V0XCIsXG4gICAgICAgIG9wYWNpdHk6IFwib3BhY2l0eVwiLFxuICAgICAgICBvcGVyYXRvcjogXCJvcGVyYXRvclwiLFxuICAgICAgICBvcmRlcjogXCJvcmRlclwiLFxuICAgICAgICBvcmllbnQ6IFwib3JpZW50XCIsXG4gICAgICAgIG9yaWVudGF0aW9uOiBcIm9yaWVudGF0aW9uXCIsXG4gICAgICAgIG9yaWdpbjogXCJvcmlnaW5cIixcbiAgICAgICAgb3ZlcmZsb3c6IFwib3ZlcmZsb3dcIixcbiAgICAgICAgb3ZlcmxpbmVwb3NpdGlvbjogXCJvdmVybGluZVBvc2l0aW9uXCIsXG4gICAgICAgIFwib3ZlcmxpbmUtcG9zaXRpb25cIjogXCJvdmVybGluZVBvc2l0aW9uXCIsXG4gICAgICAgIG92ZXJsaW5ldGhpY2tuZXNzOiBcIm92ZXJsaW5lVGhpY2tuZXNzXCIsXG4gICAgICAgIFwib3ZlcmxpbmUtdGhpY2tuZXNzXCI6IFwib3ZlcmxpbmVUaGlja25lc3NcIixcbiAgICAgICAgcGFpbnRvcmRlcjogXCJwYWludE9yZGVyXCIsXG4gICAgICAgIFwicGFpbnQtb3JkZXJcIjogXCJwYWludE9yZGVyXCIsXG4gICAgICAgIHBhbm9zZTE6IFwicGFub3NlMVwiLFxuICAgICAgICBcInBhbm9zZS0xXCI6IFwicGFub3NlMVwiLFxuICAgICAgICBwYXRobGVuZ3RoOiBcInBhdGhMZW5ndGhcIixcbiAgICAgICAgcGF0dGVybmNvbnRlbnR1bml0czogXCJwYXR0ZXJuQ29udGVudFVuaXRzXCIsXG4gICAgICAgIHBhdHRlcm50cmFuc2Zvcm06IFwicGF0dGVyblRyYW5zZm9ybVwiLFxuICAgICAgICBwYXR0ZXJudW5pdHM6IFwicGF0dGVyblVuaXRzXCIsXG4gICAgICAgIHBvaW50ZXJldmVudHM6IFwicG9pbnRlckV2ZW50c1wiLFxuICAgICAgICBcInBvaW50ZXItZXZlbnRzXCI6IFwicG9pbnRlckV2ZW50c1wiLFxuICAgICAgICBwb2ludHM6IFwicG9pbnRzXCIsXG4gICAgICAgIHBvaW50c2F0eDogXCJwb2ludHNBdFhcIixcbiAgICAgICAgcG9pbnRzYXR5OiBcInBvaW50c0F0WVwiLFxuICAgICAgICBwb2ludHNhdHo6IFwicG9pbnRzQXRaXCIsXG4gICAgICAgIHBvcG92ZXI6IFwicG9wb3ZlclwiLFxuICAgICAgICBwb3BvdmVydGFyZ2V0OiBcInBvcG92ZXJUYXJnZXRcIixcbiAgICAgICAgcG9wb3ZlcnRhcmdldGFjdGlvbjogXCJwb3BvdmVyVGFyZ2V0QWN0aW9uXCIsXG4gICAgICAgIHByZWZpeDogXCJwcmVmaXhcIixcbiAgICAgICAgcHJlc2VydmVhbHBoYTogXCJwcmVzZXJ2ZUFscGhhXCIsXG4gICAgICAgIHByZXNlcnZlYXNwZWN0cmF0aW86IFwicHJlc2VydmVBc3BlY3RSYXRpb1wiLFxuICAgICAgICBwcmltaXRpdmV1bml0czogXCJwcmltaXRpdmVVbml0c1wiLFxuICAgICAgICBwcm9wZXJ0eTogXCJwcm9wZXJ0eVwiLFxuICAgICAgICByOiBcInJcIixcbiAgICAgICAgcmFkaXVzOiBcInJhZGl1c1wiLFxuICAgICAgICByZWZ4OiBcInJlZlhcIixcbiAgICAgICAgcmVmeTogXCJyZWZZXCIsXG4gICAgICAgIHJlbmRlcmluZ2ludGVudDogXCJyZW5kZXJpbmdJbnRlbnRcIixcbiAgICAgICAgXCJyZW5kZXJpbmctaW50ZW50XCI6IFwicmVuZGVyaW5nSW50ZW50XCIsXG4gICAgICAgIHJlcGVhdGNvdW50OiBcInJlcGVhdENvdW50XCIsXG4gICAgICAgIHJlcGVhdGR1cjogXCJyZXBlYXREdXJcIixcbiAgICAgICAgcmVxdWlyZWRleHRlbnNpb25zOiBcInJlcXVpcmVkRXh0ZW5zaW9uc1wiLFxuICAgICAgICByZXF1aXJlZGZlYXR1cmVzOiBcInJlcXVpcmVkRmVhdHVyZXNcIixcbiAgICAgICAgcmVzb3VyY2U6IFwicmVzb3VyY2VcIixcbiAgICAgICAgcmVzdGFydDogXCJyZXN0YXJ0XCIsXG4gICAgICAgIHJlc3VsdDogXCJyZXN1bHRcIixcbiAgICAgICAgcmVzdWx0czogXCJyZXN1bHRzXCIsXG4gICAgICAgIHJvdGF0ZTogXCJyb3RhdGVcIixcbiAgICAgICAgcng6IFwicnhcIixcbiAgICAgICAgcnk6IFwicnlcIixcbiAgICAgICAgc2NhbGU6IFwic2NhbGVcIixcbiAgICAgICAgc2VjdXJpdHk6IFwic2VjdXJpdHlcIixcbiAgICAgICAgc2VlZDogXCJzZWVkXCIsXG4gICAgICAgIHNoYXBlcmVuZGVyaW5nOiBcInNoYXBlUmVuZGVyaW5nXCIsXG4gICAgICAgIFwic2hhcGUtcmVuZGVyaW5nXCI6IFwic2hhcGVSZW5kZXJpbmdcIixcbiAgICAgICAgc2xvcGU6IFwic2xvcGVcIixcbiAgICAgICAgc3BhY2luZzogXCJzcGFjaW5nXCIsXG4gICAgICAgIHNwZWN1bGFyY29uc3RhbnQ6IFwic3BlY3VsYXJDb25zdGFudFwiLFxuICAgICAgICBzcGVjdWxhcmV4cG9uZW50OiBcInNwZWN1bGFyRXhwb25lbnRcIixcbiAgICAgICAgc3BlZWQ6IFwic3BlZWRcIixcbiAgICAgICAgc3ByZWFkbWV0aG9kOiBcInNwcmVhZE1ldGhvZFwiLFxuICAgICAgICBzdGFydG9mZnNldDogXCJzdGFydE9mZnNldFwiLFxuICAgICAgICBzdGRkZXZpYXRpb246IFwic3RkRGV2aWF0aW9uXCIsXG4gICAgICAgIHN0ZW1oOiBcInN0ZW1oXCIsXG4gICAgICAgIHN0ZW12OiBcInN0ZW12XCIsXG4gICAgICAgIHN0aXRjaHRpbGVzOiBcInN0aXRjaFRpbGVzXCIsXG4gICAgICAgIHN0b3Bjb2xvcjogXCJzdG9wQ29sb3JcIixcbiAgICAgICAgXCJzdG9wLWNvbG9yXCI6IFwic3RvcENvbG9yXCIsXG4gICAgICAgIHN0b3BvcGFjaXR5OiBcInN0b3BPcGFjaXR5XCIsXG4gICAgICAgIFwic3RvcC1vcGFjaXR5XCI6IFwic3RvcE9wYWNpdHlcIixcbiAgICAgICAgc3RyaWtldGhyb3VnaHBvc2l0aW9uOiBcInN0cmlrZXRocm91Z2hQb3NpdGlvblwiLFxuICAgICAgICBcInN0cmlrZXRocm91Z2gtcG9zaXRpb25cIjogXCJzdHJpa2V0aHJvdWdoUG9zaXRpb25cIixcbiAgICAgICAgc3RyaWtldGhyb3VnaHRoaWNrbmVzczogXCJzdHJpa2V0aHJvdWdoVGhpY2tuZXNzXCIsXG4gICAgICAgIFwic3RyaWtldGhyb3VnaC10aGlja25lc3NcIjogXCJzdHJpa2V0aHJvdWdoVGhpY2tuZXNzXCIsXG4gICAgICAgIHN0cmluZzogXCJzdHJpbmdcIixcbiAgICAgICAgc3Ryb2tlOiBcInN0cm9rZVwiLFxuICAgICAgICBzdHJva2VkYXNoYXJyYXk6IFwic3Ryb2tlRGFzaGFycmF5XCIsXG4gICAgICAgIFwic3Ryb2tlLWRhc2hhcnJheVwiOiBcInN0cm9rZURhc2hhcnJheVwiLFxuICAgICAgICBzdHJva2VkYXNob2Zmc2V0OiBcInN0cm9rZURhc2hvZmZzZXRcIixcbiAgICAgICAgXCJzdHJva2UtZGFzaG9mZnNldFwiOiBcInN0cm9rZURhc2hvZmZzZXRcIixcbiAgICAgICAgc3Ryb2tlbGluZWNhcDogXCJzdHJva2VMaW5lY2FwXCIsXG4gICAgICAgIFwic3Ryb2tlLWxpbmVjYXBcIjogXCJzdHJva2VMaW5lY2FwXCIsXG4gICAgICAgIHN0cm9rZWxpbmVqb2luOiBcInN0cm9rZUxpbmVqb2luXCIsXG4gICAgICAgIFwic3Ryb2tlLWxpbmVqb2luXCI6IFwic3Ryb2tlTGluZWpvaW5cIixcbiAgICAgICAgc3Ryb2tlbWl0ZXJsaW1pdDogXCJzdHJva2VNaXRlcmxpbWl0XCIsXG4gICAgICAgIFwic3Ryb2tlLW1pdGVybGltaXRcIjogXCJzdHJva2VNaXRlcmxpbWl0XCIsXG4gICAgICAgIHN0cm9rZXdpZHRoOiBcInN0cm9rZVdpZHRoXCIsXG4gICAgICAgIFwic3Ryb2tlLXdpZHRoXCI6IFwic3Ryb2tlV2lkdGhcIixcbiAgICAgICAgc3Ryb2tlb3BhY2l0eTogXCJzdHJva2VPcGFjaXR5XCIsXG4gICAgICAgIFwic3Ryb2tlLW9wYWNpdHlcIjogXCJzdHJva2VPcGFjaXR5XCIsXG4gICAgICAgIHN1cHByZXNzY29udGVudGVkaXRhYmxld2FybmluZzogXCJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmdcIixcbiAgICAgICAgc3VwcHJlc3NoeWRyYXRpb253YXJuaW5nOiBcInN1cHByZXNzSHlkcmF0aW9uV2FybmluZ1wiLFxuICAgICAgICBzdXJmYWNlc2NhbGU6IFwic3VyZmFjZVNjYWxlXCIsXG4gICAgICAgIHN5c3RlbWxhbmd1YWdlOiBcInN5c3RlbUxhbmd1YWdlXCIsXG4gICAgICAgIHRhYmxldmFsdWVzOiBcInRhYmxlVmFsdWVzXCIsXG4gICAgICAgIHRhcmdldHg6IFwidGFyZ2V0WFwiLFxuICAgICAgICB0YXJnZXR5OiBcInRhcmdldFlcIixcbiAgICAgICAgdGV4dGFuY2hvcjogXCJ0ZXh0QW5jaG9yXCIsXG4gICAgICAgIFwidGV4dC1hbmNob3JcIjogXCJ0ZXh0QW5jaG9yXCIsXG4gICAgICAgIHRleHRkZWNvcmF0aW9uOiBcInRleHREZWNvcmF0aW9uXCIsXG4gICAgICAgIFwidGV4dC1kZWNvcmF0aW9uXCI6IFwidGV4dERlY29yYXRpb25cIixcbiAgICAgICAgdGV4dGxlbmd0aDogXCJ0ZXh0TGVuZ3RoXCIsXG4gICAgICAgIHRleHRyZW5kZXJpbmc6IFwidGV4dFJlbmRlcmluZ1wiLFxuICAgICAgICBcInRleHQtcmVuZGVyaW5nXCI6IFwidGV4dFJlbmRlcmluZ1wiLFxuICAgICAgICB0bzogXCJ0b1wiLFxuICAgICAgICB0cmFuc2Zvcm06IFwidHJhbnNmb3JtXCIsXG4gICAgICAgIHRyYW5zZm9ybW9yaWdpbjogXCJ0cmFuc2Zvcm1PcmlnaW5cIixcbiAgICAgICAgXCJ0cmFuc2Zvcm0tb3JpZ2luXCI6IFwidHJhbnNmb3JtT3JpZ2luXCIsXG4gICAgICAgIHR5cGVvZjogXCJ0eXBlb2ZcIixcbiAgICAgICAgdTE6IFwidTFcIixcbiAgICAgICAgdTI6IFwidTJcIixcbiAgICAgICAgdW5kZXJsaW5lcG9zaXRpb246IFwidW5kZXJsaW5lUG9zaXRpb25cIixcbiAgICAgICAgXCJ1bmRlcmxpbmUtcG9zaXRpb25cIjogXCJ1bmRlcmxpbmVQb3NpdGlvblwiLFxuICAgICAgICB1bmRlcmxpbmV0aGlja25lc3M6IFwidW5kZXJsaW5lVGhpY2tuZXNzXCIsXG4gICAgICAgIFwidW5kZXJsaW5lLXRoaWNrbmVzc1wiOiBcInVuZGVybGluZVRoaWNrbmVzc1wiLFxuICAgICAgICB1bmljb2RlOiBcInVuaWNvZGVcIixcbiAgICAgICAgdW5pY29kZWJpZGk6IFwidW5pY29kZUJpZGlcIixcbiAgICAgICAgXCJ1bmljb2RlLWJpZGlcIjogXCJ1bmljb2RlQmlkaVwiLFxuICAgICAgICB1bmljb2RlcmFuZ2U6IFwidW5pY29kZVJhbmdlXCIsXG4gICAgICAgIFwidW5pY29kZS1yYW5nZVwiOiBcInVuaWNvZGVSYW5nZVwiLFxuICAgICAgICB1bml0c3BlcmVtOiBcInVuaXRzUGVyRW1cIixcbiAgICAgICAgXCJ1bml0cy1wZXItZW1cIjogXCJ1bml0c1BlckVtXCIsXG4gICAgICAgIHVuc2VsZWN0YWJsZTogXCJ1bnNlbGVjdGFibGVcIixcbiAgICAgICAgdmFscGhhYmV0aWM6IFwidkFscGhhYmV0aWNcIixcbiAgICAgICAgXCJ2LWFscGhhYmV0aWNcIjogXCJ2QWxwaGFiZXRpY1wiLFxuICAgICAgICB2YWx1ZXM6IFwidmFsdWVzXCIsXG4gICAgICAgIHZlY3RvcmVmZmVjdDogXCJ2ZWN0b3JFZmZlY3RcIixcbiAgICAgICAgXCJ2ZWN0b3ItZWZmZWN0XCI6IFwidmVjdG9yRWZmZWN0XCIsXG4gICAgICAgIHZlcnNpb246IFwidmVyc2lvblwiLFxuICAgICAgICB2ZXJ0YWR2eTogXCJ2ZXJ0QWR2WVwiLFxuICAgICAgICBcInZlcnQtYWR2LXlcIjogXCJ2ZXJ0QWR2WVwiLFxuICAgICAgICB2ZXJ0b3JpZ2lueDogXCJ2ZXJ0T3JpZ2luWFwiLFxuICAgICAgICBcInZlcnQtb3JpZ2luLXhcIjogXCJ2ZXJ0T3JpZ2luWFwiLFxuICAgICAgICB2ZXJ0b3JpZ2lueTogXCJ2ZXJ0T3JpZ2luWVwiLFxuICAgICAgICBcInZlcnQtb3JpZ2luLXlcIjogXCJ2ZXJ0T3JpZ2luWVwiLFxuICAgICAgICB2aGFuZ2luZzogXCJ2SGFuZ2luZ1wiLFxuICAgICAgICBcInYtaGFuZ2luZ1wiOiBcInZIYW5naW5nXCIsXG4gICAgICAgIHZpZGVvZ3JhcGhpYzogXCJ2SWRlb2dyYXBoaWNcIixcbiAgICAgICAgXCJ2LWlkZW9ncmFwaGljXCI6IFwidklkZW9ncmFwaGljXCIsXG4gICAgICAgIHZpZXdib3g6IFwidmlld0JveFwiLFxuICAgICAgICB2aWV3dGFyZ2V0OiBcInZpZXdUYXJnZXRcIixcbiAgICAgICAgdmlzaWJpbGl0eTogXCJ2aXNpYmlsaXR5XCIsXG4gICAgICAgIHZtYXRoZW1hdGljYWw6IFwidk1hdGhlbWF0aWNhbFwiLFxuICAgICAgICBcInYtbWF0aGVtYXRpY2FsXCI6IFwidk1hdGhlbWF0aWNhbFwiLFxuICAgICAgICB2b2NhYjogXCJ2b2NhYlwiLFxuICAgICAgICB3aWR0aHM6IFwid2lkdGhzXCIsXG4gICAgICAgIHdvcmRzcGFjaW5nOiBcIndvcmRTcGFjaW5nXCIsXG4gICAgICAgIFwid29yZC1zcGFjaW5nXCI6IFwid29yZFNwYWNpbmdcIixcbiAgICAgICAgd3JpdGluZ21vZGU6IFwid3JpdGluZ01vZGVcIixcbiAgICAgICAgXCJ3cml0aW5nLW1vZGVcIjogXCJ3cml0aW5nTW9kZVwiLFxuICAgICAgICB4MTogXCJ4MVwiLFxuICAgICAgICB4MjogXCJ4MlwiLFxuICAgICAgICB4OiBcInhcIixcbiAgICAgICAgeGNoYW5uZWxzZWxlY3RvcjogXCJ4Q2hhbm5lbFNlbGVjdG9yXCIsXG4gICAgICAgIHhoZWlnaHQ6IFwieEhlaWdodFwiLFxuICAgICAgICBcIngtaGVpZ2h0XCI6IFwieEhlaWdodFwiLFxuICAgICAgICB4bGlua2FjdHVhdGU6IFwieGxpbmtBY3R1YXRlXCIsXG4gICAgICAgIFwieGxpbms6YWN0dWF0ZVwiOiBcInhsaW5rQWN0dWF0ZVwiLFxuICAgICAgICB4bGlua2FyY3JvbGU6IFwieGxpbmtBcmNyb2xlXCIsXG4gICAgICAgIFwieGxpbms6YXJjcm9sZVwiOiBcInhsaW5rQXJjcm9sZVwiLFxuICAgICAgICB4bGlua2hyZWY6IFwieGxpbmtIcmVmXCIsXG4gICAgICAgIFwieGxpbms6aHJlZlwiOiBcInhsaW5rSHJlZlwiLFxuICAgICAgICB4bGlua3JvbGU6IFwieGxpbmtSb2xlXCIsXG4gICAgICAgIFwieGxpbms6cm9sZVwiOiBcInhsaW5rUm9sZVwiLFxuICAgICAgICB4bGlua3Nob3c6IFwieGxpbmtTaG93XCIsXG4gICAgICAgIFwieGxpbms6c2hvd1wiOiBcInhsaW5rU2hvd1wiLFxuICAgICAgICB4bGlua3RpdGxlOiBcInhsaW5rVGl0bGVcIixcbiAgICAgICAgXCJ4bGluazp0aXRsZVwiOiBcInhsaW5rVGl0bGVcIixcbiAgICAgICAgeGxpbmt0eXBlOiBcInhsaW5rVHlwZVwiLFxuICAgICAgICBcInhsaW5rOnR5cGVcIjogXCJ4bGlua1R5cGVcIixcbiAgICAgICAgeG1sYmFzZTogXCJ4bWxCYXNlXCIsXG4gICAgICAgIFwieG1sOmJhc2VcIjogXCJ4bWxCYXNlXCIsXG4gICAgICAgIHhtbGxhbmc6IFwieG1sTGFuZ1wiLFxuICAgICAgICBcInhtbDpsYW5nXCI6IFwieG1sTGFuZ1wiLFxuICAgICAgICB4bWxuczogXCJ4bWxuc1wiLFxuICAgICAgICBcInhtbDpzcGFjZVwiOiBcInhtbFNwYWNlXCIsXG4gICAgICAgIHhtbG5zeGxpbms6IFwieG1sbnNYbGlua1wiLFxuICAgICAgICBcInhtbG5zOnhsaW5rXCI6IFwieG1sbnNYbGlua1wiLFxuICAgICAgICB4bWxzcGFjZTogXCJ4bWxTcGFjZVwiLFxuICAgICAgICB5MTogXCJ5MVwiLFxuICAgICAgICB5MjogXCJ5MlwiLFxuICAgICAgICB5OiBcInlcIixcbiAgICAgICAgeWNoYW5uZWxzZWxlY3RvcjogXCJ5Q2hhbm5lbFNlbGVjdG9yXCIsXG4gICAgICAgIHo6IFwielwiLFxuICAgICAgICB6b29tYW5kcGFuOiBcInpvb21BbmRQYW5cIlxuICAgICAgfSxcbiAgICAgIGFyaWFQcm9wZXJ0aWVzID0ge1xuICAgICAgICBcImFyaWEtY3VycmVudFwiOiAwLFxuICAgICAgICBcImFyaWEtZGVzY3JpcHRpb25cIjogMCxcbiAgICAgICAgXCJhcmlhLWRldGFpbHNcIjogMCxcbiAgICAgICAgXCJhcmlhLWRpc2FibGVkXCI6IDAsXG4gICAgICAgIFwiYXJpYS1oaWRkZW5cIjogMCxcbiAgICAgICAgXCJhcmlhLWludmFsaWRcIjogMCxcbiAgICAgICAgXCJhcmlhLWtleXNob3J0Y3V0c1wiOiAwLFxuICAgICAgICBcImFyaWEtbGFiZWxcIjogMCxcbiAgICAgICAgXCJhcmlhLXJvbGVkZXNjcmlwdGlvblwiOiAwLFxuICAgICAgICBcImFyaWEtYXV0b2NvbXBsZXRlXCI6IDAsXG4gICAgICAgIFwiYXJpYS1jaGVja2VkXCI6IDAsXG4gICAgICAgIFwiYXJpYS1leHBhbmRlZFwiOiAwLFxuICAgICAgICBcImFyaWEtaGFzcG9wdXBcIjogMCxcbiAgICAgICAgXCJhcmlhLWxldmVsXCI6IDAsXG4gICAgICAgIFwiYXJpYS1tb2RhbFwiOiAwLFxuICAgICAgICBcImFyaWEtbXVsdGlsaW5lXCI6IDAsXG4gICAgICAgIFwiYXJpYS1tdWx0aXNlbGVjdGFibGVcIjogMCxcbiAgICAgICAgXCJhcmlhLW9yaWVudGF0aW9uXCI6IDAsXG4gICAgICAgIFwiYXJpYS1wbGFjZWhvbGRlclwiOiAwLFxuICAgICAgICBcImFyaWEtcHJlc3NlZFwiOiAwLFxuICAgICAgICBcImFyaWEtcmVhZG9ubHlcIjogMCxcbiAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IDAsXG4gICAgICAgIFwiYXJpYS1zZWxlY3RlZFwiOiAwLFxuICAgICAgICBcImFyaWEtc29ydFwiOiAwLFxuICAgICAgICBcImFyaWEtdmFsdWVtYXhcIjogMCxcbiAgICAgICAgXCJhcmlhLXZhbHVlbWluXCI6IDAsXG4gICAgICAgIFwiYXJpYS12YWx1ZW5vd1wiOiAwLFxuICAgICAgICBcImFyaWEtdmFsdWV0ZXh0XCI6IDAsXG4gICAgICAgIFwiYXJpYS1hdG9taWNcIjogMCxcbiAgICAgICAgXCJhcmlhLWJ1c3lcIjogMCxcbiAgICAgICAgXCJhcmlhLWxpdmVcIjogMCxcbiAgICAgICAgXCJhcmlhLXJlbGV2YW50XCI6IDAsXG4gICAgICAgIFwiYXJpYS1kcm9wZWZmZWN0XCI6IDAsXG4gICAgICAgIFwiYXJpYS1ncmFiYmVkXCI6IDAsXG4gICAgICAgIFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCI6IDAsXG4gICAgICAgIFwiYXJpYS1jb2xjb3VudFwiOiAwLFxuICAgICAgICBcImFyaWEtY29saW5kZXhcIjogMCxcbiAgICAgICAgXCJhcmlhLWNvbHNwYW5cIjogMCxcbiAgICAgICAgXCJhcmlhLWNvbnRyb2xzXCI6IDAsXG4gICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiAwLFxuICAgICAgICBcImFyaWEtZXJyb3JtZXNzYWdlXCI6IDAsXG4gICAgICAgIFwiYXJpYS1mbG93dG9cIjogMCxcbiAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogMCxcbiAgICAgICAgXCJhcmlhLW93bnNcIjogMCxcbiAgICAgICAgXCJhcmlhLXBvc2luc2V0XCI6IDAsXG4gICAgICAgIFwiYXJpYS1yb3djb3VudFwiOiAwLFxuICAgICAgICBcImFyaWEtcm93aW5kZXhcIjogMCxcbiAgICAgICAgXCJhcmlhLXJvd3NwYW5cIjogMCxcbiAgICAgICAgXCJhcmlhLXNldHNpemVcIjogMFxuICAgICAgfSxcbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMSA9IHt9LFxuICAgICAgckFSSUEkMSA9IFJlZ0V4cChcbiAgICAgICAgXCJeKGFyaWEpLVs6QS1aX2EtelxcXFx1MDBDMC1cXFxcdTAwRDZcXFxcdTAwRDgtXFxcXHUwMEY2XFxcXHUwMEY4LVxcXFx1MDJGRlxcXFx1MDM3MC1cXFxcdTAzN0RcXFxcdTAzN0YtXFxcXHUxRkZGXFxcXHUyMDBDLVxcXFx1MjAwRFxcXFx1MjA3MC1cXFxcdTIxOEZcXFxcdTJDMDAtXFxcXHUyRkVGXFxcXHUzMDAxLVxcXFx1RDdGRlxcXFx1RjkwMC1cXFxcdUZEQ0ZcXFxcdUZERjAtXFxcXHVGRkZEXFxcXC0uMC05XFxcXHUwMEI3XFxcXHUwMzAwLVxcXFx1MDM2RlxcXFx1MjAzRi1cXFxcdTIwNDBdKiRcIlxuICAgICAgKSxcbiAgICAgIHJBUklBQ2FtZWwkMSA9IFJlZ0V4cChcbiAgICAgICAgXCJeKGFyaWEpW0EtWl1bOkEtWl9hLXpcXFxcdTAwQzAtXFxcXHUwMEQ2XFxcXHUwMEQ4LVxcXFx1MDBGNlxcXFx1MDBGOC1cXFxcdTAyRkZcXFxcdTAzNzAtXFxcXHUwMzdEXFxcXHUwMzdGLVxcXFx1MUZGRlxcXFx1MjAwQy1cXFxcdTIwMERcXFxcdTIwNzAtXFxcXHUyMThGXFxcXHUyQzAwLVxcXFx1MkZFRlxcXFx1MzAwMS1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZGRFxcXFwtLjAtOVxcXFx1MDBCN1xcXFx1MDMwMC1cXFxcdTAzNkZcXFxcdTIwM0YtXFxcXHUyMDQwXSokXCJcbiAgICAgICksXG4gICAgICBkaWRXYXJuVmFsdWVOdWxsID0gITEsXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzID0ge30sXG4gICAgICBFVkVOVF9OQU1FX1JFR0VYID0gL15vbi4vLFxuICAgICAgSU5WQUxJRF9FVkVOVF9OQU1FX1JFR0VYID0gL15vblteQS1aXS8sXG4gICAgICByQVJJQSA9IFJlZ0V4cChcbiAgICAgICAgXCJeKGFyaWEpLVs6QS1aX2EtelxcXFx1MDBDMC1cXFxcdTAwRDZcXFxcdTAwRDgtXFxcXHUwMEY2XFxcXHUwMEY4LVxcXFx1MDJGRlxcXFx1MDM3MC1cXFxcdTAzN0RcXFxcdTAzN0YtXFxcXHUxRkZGXFxcXHUyMDBDLVxcXFx1MjAwRFxcXFx1MjA3MC1cXFxcdTIxOEZcXFxcdTJDMDAtXFxcXHUyRkVGXFxcXHUzMDAxLVxcXFx1RDdGRlxcXFx1RjkwMC1cXFxcdUZEQ0ZcXFxcdUZERjAtXFxcXHVGRkZEXFxcXC0uMC05XFxcXHUwMEI3XFxcXHUwMzAwLVxcXFx1MDM2RlxcXFx1MjAzRi1cXFxcdTIwNDBdKiRcIlxuICAgICAgKSxcbiAgICAgIHJBUklBQ2FtZWwgPSBSZWdFeHAoXG4gICAgICAgIFwiXihhcmlhKVtBLVpdWzpBLVpfYS16XFxcXHUwMEMwLVxcXFx1MDBENlxcXFx1MDBEOC1cXFxcdTAwRjZcXFxcdTAwRjgtXFxcXHUwMkZGXFxcXHUwMzcwLVxcXFx1MDM3RFxcXFx1MDM3Ri1cXFxcdTFGRkZcXFxcdTIwMEMtXFxcXHUyMDBEXFxcXHUyMDcwLVxcXFx1MjE4RlxcXFx1MkMwMC1cXFxcdTJGRUZcXFxcdTMwMDEtXFxcXHVEN0ZGXFxcXHVGOTAwLVxcXFx1RkRDRlxcXFx1RkRGMC1cXFxcdUZGRkRcXFxcLS4wLTlcXFxcdTAwQjdcXFxcdTAzMDAtXFxcXHUwMzZGXFxcXHUyMDNGLVxcXFx1MjA0MF0qJFwiXG4gICAgICApLFxuICAgICAgaXNKYXZhU2NyaXB0UHJvdG9jb2wgPVxuICAgICAgICAvXltcXHUwMDAwLVxcdTAwMUYgXSpqW1xcclxcblxcdF0qYVtcXHJcXG5cXHRdKnZbXFxyXFxuXFx0XSphW1xcclxcblxcdF0qc1tcXHJcXG5cXHRdKmNbXFxyXFxuXFx0XSpyW1xcclxcblxcdF0qaVtcXHJcXG5cXHRdKnBbXFxyXFxuXFx0XSp0W1xcclxcblxcdF0qOi9pLFxuICAgICAgY3VycmVudFJlcGxheWluZ0V2ZW50ID0gbnVsbCxcbiAgICAgIHJlc3RvcmVUYXJnZXQgPSBudWxsLFxuICAgICAgcmVzdG9yZVF1ZXVlID0gbnVsbCxcbiAgICAgIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gITEsXG4gICAgICBjYW5Vc2VET00gPSAhKFxuICAgICAgICBcInVuZGVmaW5lZFwiID09PSB0eXBlb2Ygd2luZG93IHx8XG4gICAgICAgIFwidW5kZWZpbmVkXCIgPT09IHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgfHxcbiAgICAgICAgXCJ1bmRlZmluZWRcIiA9PT0gdHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50XG4gICAgICApLFxuICAgICAgcGFzc2l2ZUJyb3dzZXJFdmVudHNTdXBwb3J0ZWQgPSAhMTtcbiAgICBpZiAoY2FuVXNlRE9NKVxuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG9wdGlvbnMkanNjb21wJDAgPSB7fTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9wdGlvbnMkanNjb21wJDAsIFwicGFzc2l2ZVwiLCB7XG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBwYXNzaXZlQnJvd3NlckV2ZW50c1N1cHBvcnRlZCA9ICEwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwidGVzdFwiLCBvcHRpb25zJGpzY29tcCQwLCBvcHRpb25zJGpzY29tcCQwKTtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0ZXN0XCIsIG9wdGlvbnMkanNjb21wJDAsIG9wdGlvbnMkanNjb21wJDApO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBwYXNzaXZlQnJvd3NlckV2ZW50c1N1cHBvcnRlZCA9ICExO1xuICAgICAgfVxuICAgIHZhciByb290ID0gbnVsbCxcbiAgICAgIHN0YXJ0VGV4dCA9IG51bGwsXG4gICAgICBmYWxsYmFja1RleHQgPSBudWxsLFxuICAgICAgRXZlbnRJbnRlcmZhY2UgPSB7XG4gICAgICAgIGV2ZW50UGhhc2U6IDAsXG4gICAgICAgIGJ1YmJsZXM6IDAsXG4gICAgICAgIGNhbmNlbGFibGU6IDAsXG4gICAgICAgIHRpbWVTdGFtcDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIGV2ZW50LnRpbWVTdGFtcCB8fCBEYXRlLm5vdygpO1xuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0UHJldmVudGVkOiAwLFxuICAgICAgICBpc1RydXN0ZWQ6IDBcbiAgICAgIH0sXG4gICAgICBTeW50aGV0aWNFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KEV2ZW50SW50ZXJmYWNlKSxcbiAgICAgIFVJRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7IHZpZXc6IDAsIGRldGFpbDogMCB9KSxcbiAgICAgIFN5bnRoZXRpY1VJRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChVSUV2ZW50SW50ZXJmYWNlKSxcbiAgICAgIGxhc3RNb3ZlbWVudFgsXG4gICAgICBsYXN0TW92ZW1lbnRZLFxuICAgICAgbGFzdE1vdXNlRXZlbnQsXG4gICAgICBNb3VzZUV2ZW50SW50ZXJmYWNlID0gYXNzaWduKHt9LCBVSUV2ZW50SW50ZXJmYWNlLCB7XG4gICAgICAgIHNjcmVlblg6IDAsXG4gICAgICAgIHNjcmVlblk6IDAsXG4gICAgICAgIGNsaWVudFg6IDAsXG4gICAgICAgIGNsaWVudFk6IDAsXG4gICAgICAgIHBhZ2VYOiAwLFxuICAgICAgICBwYWdlWTogMCxcbiAgICAgICAgY3RybEtleTogMCxcbiAgICAgICAgc2hpZnRLZXk6IDAsXG4gICAgICAgIGFsdEtleTogMCxcbiAgICAgICAgbWV0YUtleTogMCxcbiAgICAgICAgZ2V0TW9kaWZpZXJTdGF0ZTogZ2V0RXZlbnRNb2RpZmllclN0YXRlLFxuICAgICAgICBidXR0b246IDAsXG4gICAgICAgIGJ1dHRvbnM6IDAsXG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIHJldHVybiB2b2lkIDAgPT09IGV2ZW50LnJlbGF0ZWRUYXJnZXRcbiAgICAgICAgICAgID8gZXZlbnQuZnJvbUVsZW1lbnQgPT09IGV2ZW50LnNyY0VsZW1lbnRcbiAgICAgICAgICAgICAgPyBldmVudC50b0VsZW1lbnRcbiAgICAgICAgICAgICAgOiBldmVudC5mcm9tRWxlbWVudFxuICAgICAgICAgICAgOiBldmVudC5yZWxhdGVkVGFyZ2V0O1xuICAgICAgICB9LFxuICAgICAgICBtb3ZlbWVudFg6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIGlmIChcIm1vdmVtZW50WFwiIGluIGV2ZW50KSByZXR1cm4gZXZlbnQubW92ZW1lbnRYO1xuICAgICAgICAgIGV2ZW50ICE9PSBsYXN0TW91c2VFdmVudCAmJlxuICAgICAgICAgICAgKGxhc3RNb3VzZUV2ZW50ICYmIFwibW91c2Vtb3ZlXCIgPT09IGV2ZW50LnR5cGVcbiAgICAgICAgICAgICAgPyAoKGxhc3RNb3ZlbWVudFggPSBldmVudC5zY3JlZW5YIC0gbGFzdE1vdXNlRXZlbnQuc2NyZWVuWCksXG4gICAgICAgICAgICAgICAgKGxhc3RNb3ZlbWVudFkgPSBldmVudC5zY3JlZW5ZIC0gbGFzdE1vdXNlRXZlbnQuc2NyZWVuWSkpXG4gICAgICAgICAgICAgIDogKGxhc3RNb3ZlbWVudFkgPSBsYXN0TW92ZW1lbnRYID0gMCksXG4gICAgICAgICAgICAobGFzdE1vdXNlRXZlbnQgPSBldmVudCkpO1xuICAgICAgICAgIHJldHVybiBsYXN0TW92ZW1lbnRYO1xuICAgICAgICB9LFxuICAgICAgICBtb3ZlbWVudFk6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIHJldHVybiBcIm1vdmVtZW50WVwiIGluIGV2ZW50ID8gZXZlbnQubW92ZW1lbnRZIDogbGFzdE1vdmVtZW50WTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBTeW50aGV0aWNNb3VzZUV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoTW91c2VFdmVudEludGVyZmFjZSksXG4gICAgICBEcmFnRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIE1vdXNlRXZlbnRJbnRlcmZhY2UsIHsgZGF0YVRyYW5zZmVyOiAwIH0pLFxuICAgICAgU3ludGhldGljRHJhZ0V2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoRHJhZ0V2ZW50SW50ZXJmYWNlKSxcbiAgICAgIEZvY3VzRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIFVJRXZlbnRJbnRlcmZhY2UsIHsgcmVsYXRlZFRhcmdldDogMCB9KSxcbiAgICAgIFN5bnRoZXRpY0ZvY3VzRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChGb2N1c0V2ZW50SW50ZXJmYWNlKSxcbiAgICAgIEFuaW1hdGlvbkV2ZW50SW50ZXJmYWNlID0gYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICAgICAgICBhbmltYXRpb25OYW1lOiAwLFxuICAgICAgICBlbGFwc2VkVGltZTogMCxcbiAgICAgICAgcHNldWRvRWxlbWVudDogMFxuICAgICAgfSksXG4gICAgICBTeW50aGV0aWNBbmltYXRpb25FdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KEFuaW1hdGlvbkV2ZW50SW50ZXJmYWNlKSxcbiAgICAgIENsaXBib2FyZEV2ZW50SW50ZXJmYWNlID0gYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICAgICAgICBjbGlwYm9hcmREYXRhOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gXCJjbGlwYm9hcmREYXRhXCIgaW4gZXZlbnRcbiAgICAgICAgICAgID8gZXZlbnQuY2xpcGJvYXJkRGF0YVxuICAgICAgICAgICAgOiB3aW5kb3cuY2xpcGJvYXJkRGF0YTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBTeW50aGV0aWNDbGlwYm9hcmRFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KENsaXBib2FyZEV2ZW50SW50ZXJmYWNlKSxcbiAgICAgIENvbXBvc2l0aW9uRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7IGRhdGE6IDAgfSksXG4gICAgICBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoXG4gICAgICAgIENvbXBvc2l0aW9uRXZlbnRJbnRlcmZhY2VcbiAgICAgICksXG4gICAgICBTeW50aGV0aWNJbnB1dEV2ZW50ID0gU3ludGhldGljQ29tcG9zaXRpb25FdmVudCxcbiAgICAgIG5vcm1hbGl6ZUtleSA9IHtcbiAgICAgICAgRXNjOiBcIkVzY2FwZVwiLFxuICAgICAgICBTcGFjZWJhcjogXCIgXCIsXG4gICAgICAgIExlZnQ6IFwiQXJyb3dMZWZ0XCIsXG4gICAgICAgIFVwOiBcIkFycm93VXBcIixcbiAgICAgICAgUmlnaHQ6IFwiQXJyb3dSaWdodFwiLFxuICAgICAgICBEb3duOiBcIkFycm93RG93blwiLFxuICAgICAgICBEZWw6IFwiRGVsZXRlXCIsXG4gICAgICAgIFdpbjogXCJPU1wiLFxuICAgICAgICBNZW51OiBcIkNvbnRleHRNZW51XCIsXG4gICAgICAgIEFwcHM6IFwiQ29udGV4dE1lbnVcIixcbiAgICAgICAgU2Nyb2xsOiBcIlNjcm9sbExvY2tcIixcbiAgICAgICAgTW96UHJpbnRhYmxlS2V5OiBcIlVuaWRlbnRpZmllZFwiXG4gICAgICB9LFxuICAgICAgdHJhbnNsYXRlVG9LZXkgPSB7XG4gICAgICAgIDg6IFwiQmFja3NwYWNlXCIsXG4gICAgICAgIDk6IFwiVGFiXCIsXG4gICAgICAgIDEyOiBcIkNsZWFyXCIsXG4gICAgICAgIDEzOiBcIkVudGVyXCIsXG4gICAgICAgIDE2OiBcIlNoaWZ0XCIsXG4gICAgICAgIDE3OiBcIkNvbnRyb2xcIixcbiAgICAgICAgMTg6IFwiQWx0XCIsXG4gICAgICAgIDE5OiBcIlBhdXNlXCIsXG4gICAgICAgIDIwOiBcIkNhcHNMb2NrXCIsXG4gICAgICAgIDI3OiBcIkVzY2FwZVwiLFxuICAgICAgICAzMjogXCIgXCIsXG4gICAgICAgIDMzOiBcIlBhZ2VVcFwiLFxuICAgICAgICAzNDogXCJQYWdlRG93blwiLFxuICAgICAgICAzNTogXCJFbmRcIixcbiAgICAgICAgMzY6IFwiSG9tZVwiLFxuICAgICAgICAzNzogXCJBcnJvd0xlZnRcIixcbiAgICAgICAgMzg6IFwiQXJyb3dVcFwiLFxuICAgICAgICAzOTogXCJBcnJvd1JpZ2h0XCIsXG4gICAgICAgIDQwOiBcIkFycm93RG93blwiLFxuICAgICAgICA0NTogXCJJbnNlcnRcIixcbiAgICAgICAgNDY6IFwiRGVsZXRlXCIsXG4gICAgICAgIDExMjogXCJGMVwiLFxuICAgICAgICAxMTM6IFwiRjJcIixcbiAgICAgICAgMTE0OiBcIkYzXCIsXG4gICAgICAgIDExNTogXCJGNFwiLFxuICAgICAgICAxMTY6IFwiRjVcIixcbiAgICAgICAgMTE3OiBcIkY2XCIsXG4gICAgICAgIDExODogXCJGN1wiLFxuICAgICAgICAxMTk6IFwiRjhcIixcbiAgICAgICAgMTIwOiBcIkY5XCIsXG4gICAgICAgIDEyMTogXCJGMTBcIixcbiAgICAgICAgMTIyOiBcIkYxMVwiLFxuICAgICAgICAxMjM6IFwiRjEyXCIsXG4gICAgICAgIDE0NDogXCJOdW1Mb2NrXCIsXG4gICAgICAgIDE0NTogXCJTY3JvbGxMb2NrXCIsXG4gICAgICAgIDIyNDogXCJNZXRhXCJcbiAgICAgIH0sXG4gICAgICBtb2RpZmllcktleVRvUHJvcCA9IHtcbiAgICAgICAgQWx0OiBcImFsdEtleVwiLFxuICAgICAgICBDb250cm9sOiBcImN0cmxLZXlcIixcbiAgICAgICAgTWV0YTogXCJtZXRhS2V5XCIsXG4gICAgICAgIFNoaWZ0OiBcInNoaWZ0S2V5XCJcbiAgICAgIH0sXG4gICAgICBLZXlib2FyZEV2ZW50SW50ZXJmYWNlID0gYXNzaWduKHt9LCBVSUV2ZW50SW50ZXJmYWNlLCB7XG4gICAgICAgIGtleTogZnVuY3Rpb24gKG5hdGl2ZUV2ZW50KSB7XG4gICAgICAgICAgaWYgKG5hdGl2ZUV2ZW50LmtleSkge1xuICAgICAgICAgICAgdmFyIGtleSA9IG5vcm1hbGl6ZUtleVtuYXRpdmVFdmVudC5rZXldIHx8IG5hdGl2ZUV2ZW50LmtleTtcbiAgICAgICAgICAgIGlmIChcIlVuaWRlbnRpZmllZFwiICE9PSBrZXkpIHJldHVybiBrZXk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBcImtleXByZXNzXCIgPT09IG5hdGl2ZUV2ZW50LnR5cGVcbiAgICAgICAgICAgID8gKChuYXRpdmVFdmVudCA9IGdldEV2ZW50Q2hhckNvZGUobmF0aXZlRXZlbnQpKSxcbiAgICAgICAgICAgICAgMTMgPT09IG5hdGl2ZUV2ZW50ID8gXCJFbnRlclwiIDogU3RyaW5nLmZyb21DaGFyQ29kZShuYXRpdmVFdmVudCkpXG4gICAgICAgICAgICA6IFwia2V5ZG93blwiID09PSBuYXRpdmVFdmVudC50eXBlIHx8IFwia2V5dXBcIiA9PT0gbmF0aXZlRXZlbnQudHlwZVxuICAgICAgICAgICAgICA/IHRyYW5zbGF0ZVRvS2V5W25hdGl2ZUV2ZW50LmtleUNvZGVdIHx8IFwiVW5pZGVudGlmaWVkXCJcbiAgICAgICAgICAgICAgOiBcIlwiO1xuICAgICAgICB9LFxuICAgICAgICBjb2RlOiAwLFxuICAgICAgICBsb2NhdGlvbjogMCxcbiAgICAgICAgY3RybEtleTogMCxcbiAgICAgICAgc2hpZnRLZXk6IDAsXG4gICAgICAgIGFsdEtleTogMCxcbiAgICAgICAgbWV0YUtleTogMCxcbiAgICAgICAgcmVwZWF0OiAwLFxuICAgICAgICBsb2NhbGU6IDAsXG4gICAgICAgIGdldE1vZGlmaWVyU3RhdGU6IGdldEV2ZW50TW9kaWZpZXJTdGF0ZSxcbiAgICAgICAgY2hhckNvZGU6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIHJldHVybiBcImtleXByZXNzXCIgPT09IGV2ZW50LnR5cGUgPyBnZXRFdmVudENoYXJDb2RlKGV2ZW50KSA6IDA7XG4gICAgICAgIH0sXG4gICAgICAgIGtleUNvZGU6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIHJldHVybiBcImtleWRvd25cIiA9PT0gZXZlbnQudHlwZSB8fCBcImtleXVwXCIgPT09IGV2ZW50LnR5cGVcbiAgICAgICAgICAgID8gZXZlbnQua2V5Q29kZVxuICAgICAgICAgICAgOiAwO1xuICAgICAgICB9LFxuICAgICAgICB3aGljaDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIFwia2V5cHJlc3NcIiA9PT0gZXZlbnQudHlwZVxuICAgICAgICAgICAgPyBnZXRFdmVudENoYXJDb2RlKGV2ZW50KVxuICAgICAgICAgICAgOiBcImtleWRvd25cIiA9PT0gZXZlbnQudHlwZSB8fCBcImtleXVwXCIgPT09IGV2ZW50LnR5cGVcbiAgICAgICAgICAgICAgPyBldmVudC5rZXlDb2RlXG4gICAgICAgICAgICAgIDogMDtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBTeW50aGV0aWNLZXlib2FyZEV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoS2V5Ym9hcmRFdmVudEludGVyZmFjZSksXG4gICAgICBQb2ludGVyRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIE1vdXNlRXZlbnRJbnRlcmZhY2UsIHtcbiAgICAgICAgcG9pbnRlcklkOiAwLFxuICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICBwcmVzc3VyZTogMCxcbiAgICAgICAgdGFuZ2VudGlhbFByZXNzdXJlOiAwLFxuICAgICAgICB0aWx0WDogMCxcbiAgICAgICAgdGlsdFk6IDAsXG4gICAgICAgIHR3aXN0OiAwLFxuICAgICAgICBwb2ludGVyVHlwZTogMCxcbiAgICAgICAgaXNQcmltYXJ5OiAwXG4gICAgICB9KSxcbiAgICAgIFN5bnRoZXRpY1BvaW50ZXJFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFBvaW50ZXJFdmVudEludGVyZmFjZSksXG4gICAgICBUb3VjaEV2ZW50SW50ZXJmYWNlID0gYXNzaWduKHt9LCBVSUV2ZW50SW50ZXJmYWNlLCB7XG4gICAgICAgIHRvdWNoZXM6IDAsXG4gICAgICAgIHRhcmdldFRvdWNoZXM6IDAsXG4gICAgICAgIGNoYW5nZWRUb3VjaGVzOiAwLFxuICAgICAgICBhbHRLZXk6IDAsXG4gICAgICAgIG1ldGFLZXk6IDAsXG4gICAgICAgIGN0cmxLZXk6IDAsXG4gICAgICAgIHNoaWZ0S2V5OiAwLFxuICAgICAgICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGVcbiAgICAgIH0pLFxuICAgICAgU3ludGhldGljVG91Y2hFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFRvdWNoRXZlbnRJbnRlcmZhY2UpLFxuICAgICAgVHJhbnNpdGlvbkV2ZW50SW50ZXJmYWNlID0gYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICAgICAgICBwcm9wZXJ0eU5hbWU6IDAsXG4gICAgICAgIGVsYXBzZWRUaW1lOiAwLFxuICAgICAgICBwc2V1ZG9FbGVtZW50OiAwXG4gICAgICB9KSxcbiAgICAgIFN5bnRoZXRpY1RyYW5zaXRpb25FdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFRyYW5zaXRpb25FdmVudEludGVyZmFjZSksXG4gICAgICBXaGVlbEV2ZW50SW50ZXJmYWNlID0gYXNzaWduKHt9LCBNb3VzZUV2ZW50SW50ZXJmYWNlLCB7XG4gICAgICAgIGRlbHRhWDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIFwiZGVsdGFYXCIgaW4gZXZlbnRcbiAgICAgICAgICAgID8gZXZlbnQuZGVsdGFYXG4gICAgICAgICAgICA6IFwid2hlZWxEZWx0YVhcIiBpbiBldmVudFxuICAgICAgICAgICAgICA/IC1ldmVudC53aGVlbERlbHRhWFxuICAgICAgICAgICAgICA6IDA7XG4gICAgICAgIH0sXG4gICAgICAgIGRlbHRhWTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIFwiZGVsdGFZXCIgaW4gZXZlbnRcbiAgICAgICAgICAgID8gZXZlbnQuZGVsdGFZXG4gICAgICAgICAgICA6IFwid2hlZWxEZWx0YVlcIiBpbiBldmVudFxuICAgICAgICAgICAgICA/IC1ldmVudC53aGVlbERlbHRhWVxuICAgICAgICAgICAgICA6IFwid2hlZWxEZWx0YVwiIGluIGV2ZW50XG4gICAgICAgICAgICAgICAgPyAtZXZlbnQud2hlZWxEZWx0YVxuICAgICAgICAgICAgICAgIDogMDtcbiAgICAgICAgfSxcbiAgICAgICAgZGVsdGFaOiAwLFxuICAgICAgICBkZWx0YU1vZGU6IDBcbiAgICAgIH0pLFxuICAgICAgU3ludGhldGljV2hlZWxFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFdoZWVsRXZlbnRJbnRlcmZhY2UpLFxuICAgICAgVG9nZ2xlRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7XG4gICAgICAgIG5ld1N0YXRlOiAwLFxuICAgICAgICBvbGRTdGF0ZTogMFxuICAgICAgfSksXG4gICAgICBTeW50aGV0aWNUb2dnbGVFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFRvZ2dsZUV2ZW50SW50ZXJmYWNlKSxcbiAgICAgIEVORF9LRVlDT0RFUyA9IFs5LCAxMywgMjcsIDMyXSxcbiAgICAgIFNUQVJUX0tFWUNPREUgPSAyMjksXG4gICAgICBjYW5Vc2VDb21wb3NpdGlvbkV2ZW50ID0gY2FuVXNlRE9NICYmIFwiQ29tcG9zaXRpb25FdmVudFwiIGluIHdpbmRvdyxcbiAgICAgIGRvY3VtZW50TW9kZSA9IG51bGw7XG4gICAgY2FuVXNlRE9NICYmXG4gICAgICBcImRvY3VtZW50TW9kZVwiIGluIGRvY3VtZW50ICYmXG4gICAgICAoZG9jdW1lbnRNb2RlID0gZG9jdW1lbnQuZG9jdW1lbnRNb2RlKTtcbiAgICB2YXIgY2FuVXNlVGV4dElucHV0RXZlbnQgPVxuICAgICAgICBjYW5Vc2VET00gJiYgXCJUZXh0RXZlbnRcIiBpbiB3aW5kb3cgJiYgIWRvY3VtZW50TW9kZSxcbiAgICAgIHVzZUZhbGxiYWNrQ29tcG9zaXRpb25EYXRhID1cbiAgICAgICAgY2FuVXNlRE9NICYmXG4gICAgICAgICghY2FuVXNlQ29tcG9zaXRpb25FdmVudCB8fFxuICAgICAgICAgIChkb2N1bWVudE1vZGUgJiYgOCA8IGRvY3VtZW50TW9kZSAmJiAxMSA+PSBkb2N1bWVudE1vZGUpKSxcbiAgICAgIFNQQUNFQkFSX0NPREUgPSAzMixcbiAgICAgIFNQQUNFQkFSX0NIQVIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKFNQQUNFQkFSX0NPREUpLFxuICAgICAgaGFzU3BhY2VLZXlwcmVzcyA9ICExLFxuICAgICAgaXNDb21wb3NpbmcgPSAhMSxcbiAgICAgIHN1cHBvcnRlZElucHV0VHlwZXMgPSB7XG4gICAgICAgIGNvbG9yOiAhMCxcbiAgICAgICAgZGF0ZTogITAsXG4gICAgICAgIGRhdGV0aW1lOiAhMCxcbiAgICAgICAgXCJkYXRldGltZS1sb2NhbFwiOiAhMCxcbiAgICAgICAgZW1haWw6ICEwLFxuICAgICAgICBtb250aDogITAsXG4gICAgICAgIG51bWJlcjogITAsXG4gICAgICAgIHBhc3N3b3JkOiAhMCxcbiAgICAgICAgcmFuZ2U6ICEwLFxuICAgICAgICBzZWFyY2g6ICEwLFxuICAgICAgICB0ZWw6ICEwLFxuICAgICAgICB0ZXh0OiAhMCxcbiAgICAgICAgdGltZTogITAsXG4gICAgICAgIHVybDogITAsXG4gICAgICAgIHdlZWs6ICEwXG4gICAgICB9LFxuICAgICAgYWN0aXZlRWxlbWVudCQxID0gbnVsbCxcbiAgICAgIGFjdGl2ZUVsZW1lbnRJbnN0JDEgPSBudWxsLFxuICAgICAgaXNJbnB1dEV2ZW50U3VwcG9ydGVkID0gITE7XG4gICAgY2FuVXNlRE9NICYmXG4gICAgICAoaXNJbnB1dEV2ZW50U3VwcG9ydGVkID1cbiAgICAgICAgaXNFdmVudFN1cHBvcnRlZChcImlucHV0XCIpICYmXG4gICAgICAgICghZG9jdW1lbnQuZG9jdW1lbnRNb2RlIHx8IDkgPCBkb2N1bWVudC5kb2N1bWVudE1vZGUpKTtcbiAgICB2YXIgb2JqZWN0SXMgPSBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBPYmplY3QuaXMgPyBPYmplY3QuaXMgOiBpcyxcbiAgICAgIHNraXBTZWxlY3Rpb25DaGFuZ2VFdmVudCA9XG4gICAgICAgIGNhblVzZURPTSAmJiBcImRvY3VtZW50TW9kZVwiIGluIGRvY3VtZW50ICYmIDExID49IGRvY3VtZW50LmRvY3VtZW50TW9kZSxcbiAgICAgIGFjdGl2ZUVsZW1lbnQgPSBudWxsLFxuICAgICAgYWN0aXZlRWxlbWVudEluc3QgPSBudWxsLFxuICAgICAgbGFzdFNlbGVjdGlvbiA9IG51bGwsXG4gICAgICBtb3VzZURvd24gPSAhMSxcbiAgICAgIHZlbmRvclByZWZpeGVzID0ge1xuICAgICAgICBhbmltYXRpb25lbmQ6IG1ha2VQcmVmaXhNYXAoXCJBbmltYXRpb25cIiwgXCJBbmltYXRpb25FbmRcIiksXG4gICAgICAgIGFuaW1hdGlvbml0ZXJhdGlvbjogbWFrZVByZWZpeE1hcChcIkFuaW1hdGlvblwiLCBcIkFuaW1hdGlvbkl0ZXJhdGlvblwiKSxcbiAgICAgICAgYW5pbWF0aW9uc3RhcnQ6IG1ha2VQcmVmaXhNYXAoXCJBbmltYXRpb25cIiwgXCJBbmltYXRpb25TdGFydFwiKSxcbiAgICAgICAgdHJhbnNpdGlvbnJ1bjogbWFrZVByZWZpeE1hcChcIlRyYW5zaXRpb25cIiwgXCJUcmFuc2l0aW9uUnVuXCIpLFxuICAgICAgICB0cmFuc2l0aW9uc3RhcnQ6IG1ha2VQcmVmaXhNYXAoXCJUcmFuc2l0aW9uXCIsIFwiVHJhbnNpdGlvblN0YXJ0XCIpLFxuICAgICAgICB0cmFuc2l0aW9uY2FuY2VsOiBtYWtlUHJlZml4TWFwKFwiVHJhbnNpdGlvblwiLCBcIlRyYW5zaXRpb25DYW5jZWxcIiksXG4gICAgICAgIHRyYW5zaXRpb25lbmQ6IG1ha2VQcmVmaXhNYXAoXCJUcmFuc2l0aW9uXCIsIFwiVHJhbnNpdGlvbkVuZFwiKVxuICAgICAgfSxcbiAgICAgIHByZWZpeGVkRXZlbnROYW1lcyA9IHt9LFxuICAgICAgc3R5bGUgPSB7fTtcbiAgICBjYW5Vc2VET00gJiZcbiAgICAgICgoc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLnN0eWxlKSxcbiAgICAgIFwiQW5pbWF0aW9uRXZlbnRcIiBpbiB3aW5kb3cgfHxcbiAgICAgICAgKGRlbGV0ZSB2ZW5kb3JQcmVmaXhlcy5hbmltYXRpb25lbmQuYW5pbWF0aW9uLFxuICAgICAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uaXRlcmF0aW9uLmFuaW1hdGlvbixcbiAgICAgICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLmFuaW1hdGlvbnN0YXJ0LmFuaW1hdGlvbiksXG4gICAgICBcIlRyYW5zaXRpb25FdmVudFwiIGluIHdpbmRvdyB8fFxuICAgICAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMudHJhbnNpdGlvbmVuZC50cmFuc2l0aW9uKTtcbiAgICB2YXIgQU5JTUFUSU9OX0VORCA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKFwiYW5pbWF0aW9uZW5kXCIpLFxuICAgICAgQU5JTUFUSU9OX0lURVJBVElPTiA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKFwiYW5pbWF0aW9uaXRlcmF0aW9uXCIpLFxuICAgICAgQU5JTUFUSU9OX1NUQVJUID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoXCJhbmltYXRpb25zdGFydFwiKSxcbiAgICAgIFRSQU5TSVRJT05fUlVOID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoXCJ0cmFuc2l0aW9ucnVuXCIpLFxuICAgICAgVFJBTlNJVElPTl9TVEFSVCA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKFwidHJhbnNpdGlvbnN0YXJ0XCIpLFxuICAgICAgVFJBTlNJVElPTl9DQU5DRUwgPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZShcInRyYW5zaXRpb25jYW5jZWxcIiksXG4gICAgICBUUkFOU0lUSU9OX0VORCA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKFwidHJhbnNpdGlvbmVuZFwiKSxcbiAgICAgIHRvcExldmVsRXZlbnRzVG9SZWFjdE5hbWVzID0gbmV3IE1hcCgpLFxuICAgICAgc2ltcGxlRXZlbnRQbHVnaW5FdmVudHMgPVxuICAgICAgICBcImFib3J0IGF1eENsaWNrIGJlZm9yZVRvZ2dsZSBjYW5jZWwgY2FuUGxheSBjYW5QbGF5VGhyb3VnaCBjbGljayBjbG9zZSBjb250ZXh0TWVudSBjb3B5IGN1dCBkcmFnIGRyYWdFbmQgZHJhZ0VudGVyIGRyYWdFeGl0IGRyYWdMZWF2ZSBkcmFnT3ZlciBkcmFnU3RhcnQgZHJvcCBkdXJhdGlvbkNoYW5nZSBlbXB0aWVkIGVuY3J5cHRlZCBlbmRlZCBlcnJvciBnb3RQb2ludGVyQ2FwdHVyZSBpbnB1dCBpbnZhbGlkIGtleURvd24ga2V5UHJlc3Mga2V5VXAgbG9hZCBsb2FkZWREYXRhIGxvYWRlZE1ldGFkYXRhIGxvYWRTdGFydCBsb3N0UG9pbnRlckNhcHR1cmUgbW91c2VEb3duIG1vdXNlTW92ZSBtb3VzZU91dCBtb3VzZU92ZXIgbW91c2VVcCBwYXN0ZSBwYXVzZSBwbGF5IHBsYXlpbmcgcG9pbnRlckNhbmNlbCBwb2ludGVyRG93biBwb2ludGVyTW92ZSBwb2ludGVyT3V0IHBvaW50ZXJPdmVyIHBvaW50ZXJVcCBwcm9ncmVzcyByYXRlQ2hhbmdlIHJlc2V0IHJlc2l6ZSBzZWVrZWQgc2Vla2luZyBzdGFsbGVkIHN1Ym1pdCBzdXNwZW5kIHRpbWVVcGRhdGUgdG91Y2hDYW5jZWwgdG91Y2hFbmQgdG91Y2hTdGFydCB2b2x1bWVDaGFuZ2Ugc2Nyb2xsIHRvZ2dsZSB0b3VjaE1vdmUgd2FpdGluZyB3aGVlbFwiLnNwbGl0KFxuICAgICAgICAgIFwiIFwiXG4gICAgICAgICk7XG4gICAgc2ltcGxlRXZlbnRQbHVnaW5FdmVudHMucHVzaChcInNjcm9sbEVuZFwiKTtcbiAgICB2YXIgbGFzdFJlc2V0VGltZSA9IDA7XG4gICAgaWYgKFxuICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHBlcmZvcm1hbmNlICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBwZXJmb3JtYW5jZS5ub3dcbiAgICApIHtcbiAgICAgIHZhciBsb2NhbFBlcmZvcm1hbmNlID0gcGVyZm9ybWFuY2U7XG4gICAgICB2YXIgZ2V0Q3VycmVudFRpbWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBsb2NhbFBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGxvY2FsRGF0ZSA9IERhdGU7XG4gICAgICBnZXRDdXJyZW50VGltZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsRGF0ZS5ub3coKTtcbiAgICAgIH07XG4gICAgfVxuICAgIHZhciByZXBvcnRHbG9iYWxFcnJvciA9XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHJlcG9ydEVycm9yXG4gICAgICAgICAgPyByZXBvcnRFcnJvclxuICAgICAgICAgIDogZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2Ygd2luZG93ICYmXG4gICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2Ygd2luZG93LkVycm9yRXZlbnRcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdmFyIGV2ZW50ID0gbmV3IHdpbmRvdy5FcnJvckV2ZW50KFwiZXJyb3JcIiwge1xuICAgICAgICAgICAgICAgICAgYnViYmxlczogITAsXG4gICAgICAgICAgICAgICAgICBjYW5jZWxhYmxlOiAhMCxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICAgICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBlcnJvciAmJlxuICAgICAgICAgICAgICAgICAgICBudWxsICE9PSBlcnJvciAmJlxuICAgICAgICAgICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgZXJyb3IubWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgID8gU3RyaW5nKGVycm9yLm1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgICAgICAgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKCF3aW5kb3cuZGlzcGF0Y2hFdmVudChldmVudCkpIHJldHVybjtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgcHJvY2VzcyAmJlxuICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHByb2Nlc3MuZW1pdFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzLmVtaXQoXCJ1bmNhdWdodEV4Y2VwdGlvblwiLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfSxcbiAgICAgIE9mZnNjcmVlblZpc2libGUgPSAxLFxuICAgICAgT2Zmc2NyZWVuUGFzc2l2ZUVmZmVjdHNDb25uZWN0ZWQgPSAyLFxuICAgICAgY29uY3VycmVudFF1ZXVlcyA9IFtdLFxuICAgICAgY29uY3VycmVudFF1ZXVlc0luZGV4ID0gMCxcbiAgICAgIGNvbmN1cnJlbnRseVVwZGF0ZWRMYW5lcyA9IDAsXG4gICAgICBlbXB0eUNvbnRleHRPYmplY3QgPSB7fTtcbiAgICBPYmplY3QuZnJlZXplKGVtcHR5Q29udGV4dE9iamVjdCk7XG4gICAgdmFyIHJlc29sdmVGYW1pbHkgPSBudWxsLFxuICAgICAgZmFpbGVkQm91bmRhcmllcyA9IG51bGwsXG4gICAgICBOb01vZGUgPSAwLFxuICAgICAgQ29uY3VycmVudE1vZGUgPSAxLFxuICAgICAgUHJvZmlsZU1vZGUgPSAyLFxuICAgICAgU3RyaWN0TGVnYWN5TW9kZSA9IDgsXG4gICAgICBTdHJpY3RFZmZlY3RzTW9kZSA9IDE2LFxuICAgICAgU3VzcGVuc2V5SW1hZ2VzTW9kZSA9IDMyO1xuICAgIHZhciBoYXNCYWRNYXBQb2x5ZmlsbCA9ICExO1xuICAgIHRyeSB7XG4gICAgICB2YXIgbm9uRXh0ZW5zaWJsZU9iamVjdCA9IE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSk7XG4gICAgICBuZXcgTWFwKFtbbm9uRXh0ZW5zaWJsZU9iamVjdCwgbnVsbF1dKTtcbiAgICAgIG5ldyBTZXQoW25vbkV4dGVuc2libGVPYmplY3RdKTtcbiAgICB9IGNhdGNoIChlJDMpIHtcbiAgICAgIGhhc0JhZE1hcFBvbHlmaWxsID0gITA7XG4gICAgfVxuICAgIHZhciBDYXB0dXJlZFN0YWNrcyA9IG5ldyBXZWFrTWFwKCksXG4gICAgICBmb3JrU3RhY2sgPSBbXSxcbiAgICAgIGZvcmtTdGFja0luZGV4ID0gMCxcbiAgICAgIHRyZWVGb3JrUHJvdmlkZXIgPSBudWxsLFxuICAgICAgdHJlZUZvcmtDb3VudCA9IDAsXG4gICAgICBpZFN0YWNrID0gW10sXG4gICAgICBpZFN0YWNrSW5kZXggPSAwLFxuICAgICAgdHJlZUNvbnRleHRQcm92aWRlciA9IG51bGwsXG4gICAgICB0cmVlQ29udGV4dElkID0gMSxcbiAgICAgIHRyZWVDb250ZXh0T3ZlcmZsb3cgPSBcIlwiLFxuICAgICAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBudWxsLFxuICAgICAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IG51bGwsXG4gICAgICBpc0h5ZHJhdGluZyA9ICExLFxuICAgICAgZGlkU3VzcGVuZE9yRXJyb3JERVYgPSAhMSxcbiAgICAgIGh5ZHJhdGlvbkRpZmZSb290REVWID0gbnVsbCxcbiAgICAgIGh5ZHJhdGlvbkVycm9ycyA9IG51bGwsXG4gICAgICByb290T3JTaW5nbGV0b25Db250ZXh0ID0gITEsXG4gICAgICBIeWRyYXRpb25NaXNtYXRjaEV4Y2VwdGlvbiA9IEVycm9yKFxuICAgICAgICBcIkh5ZHJhdGlvbiBNaXNtYXRjaCBFeGNlcHRpb246IFRoaXMgaXMgbm90IGEgcmVhbCBlcnJvciwgYW5kIHNob3VsZCBub3QgbGVhayBpbnRvIHVzZXJzcGFjZS4gSWYgeW91J3JlIHNlZWluZyB0aGlzLCBpdCdzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgKSxcbiAgICAgIHZhbHVlQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKG51bGwpO1xuICAgIHZhciByZW5kZXJlckN1cnNvckRFViA9IGNyZWF0ZUN1cnNvcihudWxsKTtcbiAgICB2YXIgcmVuZGVyZXJTaWdpbCA9IHt9O1xuICAgIHZhciBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxID0gbnVsbCxcbiAgICAgIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IG51bGwsXG4gICAgICBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gITEsXG4gICAgICBBYm9ydENvbnRyb2xsZXJMb2NhbCA9XG4gICAgICAgIFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiBBYm9ydENvbnRyb2xsZXJcbiAgICAgICAgICA/IEFib3J0Q29udHJvbGxlclxuICAgICAgICAgIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB2YXIgbGlzdGVuZXJzID0gW10sXG4gICAgICAgICAgICAgICAgc2lnbmFsID0gKHRoaXMuc2lnbmFsID0ge1xuICAgICAgICAgICAgICAgICAgYWJvcnRlZDogITEsXG4gICAgICAgICAgICAgICAgICBhZGRFdmVudExpc3RlbmVyOiBmdW5jdGlvbiAodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB0aGlzLmFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHNpZ25hbC5hYm9ydGVkID0gITA7XG4gICAgICAgICAgICAgICAgbGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24gKGxpc3RlbmVyKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbGlzdGVuZXIoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICBzY2hlZHVsZUNhbGxiYWNrJDIgPSBTY2hlZHVsZXIudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayxcbiAgICAgIE5vcm1hbFByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LFxuICAgICAgQ2FjaGVDb250ZXh0ID0ge1xuICAgICAgICAkJHR5cGVvZjogUkVBQ1RfQ09OVEVYVF9UWVBFLFxuICAgICAgICBDb25zdW1lcjogbnVsbCxcbiAgICAgICAgUHJvdmlkZXI6IG51bGwsXG4gICAgICAgIF9jdXJyZW50VmFsdWU6IG51bGwsXG4gICAgICAgIF9jdXJyZW50VmFsdWUyOiBudWxsLFxuICAgICAgICBfdGhyZWFkQ291bnQ6IDAsXG4gICAgICAgIF9jdXJyZW50UmVuZGVyZXI6IG51bGwsXG4gICAgICAgIF9jdXJyZW50UmVuZGVyZXIyOiBudWxsXG4gICAgICB9LFxuICAgICAgbm93ID0gU2NoZWR1bGVyLnVuc3RhYmxlX25vdyxcbiAgICAgIHJlbmRlclN0YXJ0VGltZSA9IC0wLFxuICAgICAgY29tbWl0U3RhcnRUaW1lID0gLTAsXG4gICAgICBwcm9maWxlclN0YXJ0VGltZSA9IC0xLjEsXG4gICAgICBwcm9maWxlckVmZmVjdER1cmF0aW9uID0gLTAsXG4gICAgICBjb21wb25lbnRFZmZlY3RTdGFydFRpbWUgPSAtMS4xLFxuICAgICAgY3VycmVudFVwZGF0ZUlzTmVzdGVkID0gITEsXG4gICAgICBuZXN0ZWRVcGRhdGVTY2hlZHVsZWQgPSAhMSxcbiAgICAgIGN1cnJlbnRFbnRhbmdsZWRMaXN0ZW5lcnMgPSBudWxsLFxuICAgICAgY3VycmVudEVudGFuZ2xlZFBlbmRpbmdDb3VudCA9IDAsXG4gICAgICBjdXJyZW50RW50YW5nbGVkTGFuZSA9IDAsXG4gICAgICBjdXJyZW50RW50YW5nbGVkQWN0aW9uVGhlbmFibGUgPSBudWxsLFxuICAgICAgcHJldk9uU3RhcnRUcmFuc2l0aW9uRmluaXNoID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUztcbiAgICBSZWFjdFNoYXJlZEludGVybmFscy5TID0gZnVuY3Rpb24gKHRyYW5zaXRpb24sIHJldHVyblZhbHVlKSB7XG4gICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgcmV0dXJuVmFsdWUgJiZcbiAgICAgICAgbnVsbCAhPT0gcmV0dXJuVmFsdWUgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmV0dXJuVmFsdWUudGhlbiAmJlxuICAgICAgICBlbnRhbmdsZUFzeW5jQWN0aW9uKHRyYW5zaXRpb24sIHJldHVyblZhbHVlKTtcbiAgICAgIG51bGwgIT09IHByZXZPblN0YXJ0VHJhbnNpdGlvbkZpbmlzaCAmJlxuICAgICAgICBwcmV2T25TdGFydFRyYW5zaXRpb25GaW5pc2godHJhbnNpdGlvbiwgcmV0dXJuVmFsdWUpO1xuICAgIH07XG4gICAgdmFyIHJlc3VtZWRDYWNoZSA9IGNyZWF0ZUN1cnNvcihudWxsKSxcbiAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzID0ge1xuICAgICAgICByZWNvcmRVbnNhZmVMaWZlY3ljbGVXYXJuaW5nczogZnVuY3Rpb24gKCkge30sXG4gICAgICAgIGZsdXNoUGVuZGluZ1Vuc2FmZUxpZmVjeWNsZVdhcm5pbmdzOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgICAgcmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmc6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgICBmbHVzaExlZ2FjeUNvbnRleHRXYXJuaW5nOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgICAgZGlzY2FyZFBlbmRpbmdXYXJuaW5nczogZnVuY3Rpb24gKCkge31cbiAgICAgIH0sXG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXSxcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXSxcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXSxcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW10sXG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW10sXG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdLFxuICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcyA9IG5ldyBTZXQoKTtcbiAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRVbnNhZmVMaWZlY3ljbGVXYXJuaW5ncyA9IGZ1bmN0aW9uIChcbiAgICAgIGZpYmVyLFxuICAgICAgaW5zdGFuY2VcbiAgICApIHtcbiAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuaGFzKGZpYmVyLnR5cGUpIHx8XG4gICAgICAgIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgJiZcbiAgICAgICAgICAhMCAhPT0gaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50Ll9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgJiZcbiAgICAgICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MucHVzaChmaWJlciksXG4gICAgICAgIGZpYmVyLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlICYmXG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCAmJlxuICAgICAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MucHVzaChmaWJlciksXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgJiZcbiAgICAgICAgICAhMCAhPT1cbiAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAmJlxuICAgICAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MucHVzaChmaWJlciksXG4gICAgICAgIGZpYmVyLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlICYmXG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgJiZcbiAgICAgICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5wdXNoKGZpYmVyKSxcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZSAmJlxuICAgICAgICAgICEwICE9PSBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgJiZcbiAgICAgICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLnB1c2goZmliZXIpLFxuICAgICAgICBmaWJlci5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSAmJlxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlICYmXG4gICAgICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MucHVzaChmaWJlcikpO1xuICAgIH07XG4gICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hQZW5kaW5nVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG4gICAgICAwIDwgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLmxlbmd0aCAmJlxuICAgICAgICAocGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgICAgY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMuYWRkKFxuICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcikgfHwgXCJDb21wb25lbnRcIlxuICAgICAgICAgICk7XG4gICAgICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICAgIH0pLFxuICAgICAgICAocGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW10pKTtcbiAgICAgIHZhciBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG4gICAgICAwIDwgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5sZW5ndGggJiZcbiAgICAgICAgKHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgICBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMuYWRkKFxuICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcikgfHwgXCJDb21wb25lbnRcIlxuICAgICAgICAgICk7XG4gICAgICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICAgIH0pLFxuICAgICAgICAocGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdKSk7XG4gICAgICB2YXIgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuICAgICAgMCA8IHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MubGVuZ3RoICYmXG4gICAgICAgIChwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzLmFkZChcbiAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpIHx8IFwiQ29tcG9uZW50XCJcbiAgICAgICAgICApO1xuICAgICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgICB9KSxcbiAgICAgICAgKHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXSkpO1xuICAgICAgdmFyIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG4gICAgICAwIDwgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MubGVuZ3RoICYmXG4gICAgICAgIChwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5mb3JFYWNoKFxuICAgICAgICAgIGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5hZGQoXG4gICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpIHx8IFwiQ29tcG9uZW50XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIChwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdKSk7XG4gICAgICB2YXIgY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuICAgICAgMCA8IHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MubGVuZ3RoICYmXG4gICAgICAgIChwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgICAgY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzLmFkZChcbiAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpIHx8IFwiQ29tcG9uZW50XCJcbiAgICAgICAgICApO1xuICAgICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgICB9KSxcbiAgICAgICAgKHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXSkpO1xuICAgICAgdmFyIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG4gICAgICAwIDwgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MubGVuZ3RoICYmXG4gICAgICAgIChwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICAgIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMuYWRkKFxuICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcikgfHwgXCJDb21wb25lbnRcIlxuICAgICAgICAgICk7XG4gICAgICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICAgIH0pLFxuICAgICAgICAocGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXSkpO1xuICAgICAgaWYgKDAgPCBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMuc2l6ZSkge1xuICAgICAgICB2YXIgc29ydGVkTmFtZXMgPSBzZXRUb1NvcnRlZFN0cmluZyhcbiAgICAgICAgICBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXNcbiAgICAgICAgKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIlVzaW5nIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgaW4gc3RyaWN0IG1vZGUgaXMgbm90IHJlY29tbWVuZGVkIGFuZCBtYXkgaW5kaWNhdGUgYnVncyBpbiB5b3VyIGNvZGUuIFNlZSBodHRwczovL3JlYWN0LmRldi9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4qIE1vdmUgY29kZSB3aXRoIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRNb3VudCwgYW5kIHNldCBpbml0aWFsIHN0YXRlIGluIHRoZSBjb25zdHJ1Y3Rvci5cXG5cXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXNcIixcbiAgICAgICAgICBzb3J0ZWROYW1lc1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgMCA8IFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMuc2l6ZSAmJlxuICAgICAgICAoKHNvcnRlZE5hbWVzID0gc2V0VG9Tb3J0ZWRTdHJpbmcoXG4gICAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lc1xuICAgICAgICApKSxcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIlVzaW5nIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIGluIHN0cmljdCBtb2RlIGlzIG5vdCByZWNvbW1lbmRlZCBhbmQgbWF5IGluZGljYXRlIGJ1Z3MgaW4geW91ciBjb2RlLiBTZWUgaHR0cHM6Ly9yZWFjdC5kZXYvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuKiBNb3ZlIGRhdGEgZmV0Y2hpbmcgY29kZSBvciBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkVXBkYXRlLlxcbiogSWYgeW91J3JlIHVwZGF0aW5nIHN0YXRlIHdoZW5ldmVyIHByb3BzIGNoYW5nZSwgcmVmYWN0b3IgeW91ciBjb2RlIHRvIHVzZSBtZW1vaXphdGlvbiB0ZWNobmlxdWVzIG9yIG1vdmUgaXQgdG8gc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gTGVhcm4gbW9yZSBhdDogaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9kZXJpdmVkLXN0YXRlXFxuXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzXCIsXG4gICAgICAgICAgc29ydGVkTmFtZXNcbiAgICAgICAgKSk7XG4gICAgICAwIDwgVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcy5zaXplICYmXG4gICAgICAgICgoc29ydGVkTmFtZXMgPSBzZXRUb1NvcnRlZFN0cmluZyhcbiAgICAgICAgICBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzXG4gICAgICAgICkpLFxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiVXNpbmcgVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgaW4gc3RyaWN0IG1vZGUgaXMgbm90IHJlY29tbWVuZGVkIGFuZCBtYXkgaW5kaWNhdGUgYnVncyBpbiB5b3VyIGNvZGUuIFNlZSBodHRwczovL3JlYWN0LmRldi9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4qIE1vdmUgZGF0YSBmZXRjaGluZyBjb2RlIG9yIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRVcGRhdGUuXFxuXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzXCIsXG4gICAgICAgICAgc29ydGVkTmFtZXNcbiAgICAgICAgKSk7XG4gICAgICAwIDwgY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMuc2l6ZSAmJlxuICAgICAgICAoKHNvcnRlZE5hbWVzID0gc2V0VG9Tb3J0ZWRTdHJpbmcoY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMpKSxcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIFwiY29tcG9uZW50V2lsbE1vdW50IGhhcyBiZWVuIHJlbmFtZWQsIGFuZCBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHVzZS4gU2VlIGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbiogTW92ZSBjb2RlIHdpdGggc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZE1vdW50LCBhbmQgc2V0IGluaXRpYWwgc3RhdGUgaW4gdGhlIGNvbnN0cnVjdG9yLlxcbiogUmVuYW1lIGNvbXBvbmVudFdpbGxNb3VudCB0byBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50IHRvIHN1cHByZXNzIHRoaXMgd2FybmluZyBpbiBub24tc3RyaWN0IG1vZGUuIEluIFJlYWN0IDE4LngsIG9ubHkgdGhlIFVOU0FGRV8gbmFtZSB3aWxsIHdvcmsuIFRvIHJlbmFtZSBhbGwgZGVwcmVjYXRlZCBsaWZlY3ljbGVzIHRvIHRoZWlyIG5ldyBuYW1lcywgeW91IGNhbiBydW4gYG5weCByZWFjdC1jb2RlbW9kIHJlbmFtZS11bnNhZmUtbGlmZWN5Y2xlc2AgaW4geW91ciBwcm9qZWN0IHNvdXJjZSBmb2xkZXIuXFxuXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzXCIsXG4gICAgICAgICAgc29ydGVkTmFtZXNcbiAgICAgICAgKSk7XG4gICAgICAwIDwgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzLnNpemUgJiZcbiAgICAgICAgKChzb3J0ZWROYW1lcyA9IHNldFRvU29ydGVkU3RyaW5nKFxuICAgICAgICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lc1xuICAgICAgICApKSxcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIFwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyBoYXMgYmVlbiByZW5hbWVkLCBhbmQgaXMgbm90IHJlY29tbWVuZGVkIGZvciB1c2UuIFNlZSBodHRwczovL3JlYWN0LmRldi9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4qIE1vdmUgZGF0YSBmZXRjaGluZyBjb2RlIG9yIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRVcGRhdGUuXFxuKiBJZiB5b3UncmUgdXBkYXRpbmcgc3RhdGUgd2hlbmV2ZXIgcHJvcHMgY2hhbmdlLCByZWZhY3RvciB5b3VyIGNvZGUgdG8gdXNlIG1lbW9pemF0aW9uIHRlY2huaXF1ZXMgb3IgbW92ZSBpdCB0byBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiBMZWFybiBtb3JlIGF0OiBodHRwczovL3JlYWN0LmRldi9saW5rL2Rlcml2ZWQtc3RhdGVcXG4qIFJlbmFtZSBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIHRvIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIHRvIHN1cHByZXNzIHRoaXMgd2FybmluZyBpbiBub24tc3RyaWN0IG1vZGUuIEluIFJlYWN0IDE4LngsIG9ubHkgdGhlIFVOU0FGRV8gbmFtZSB3aWxsIHdvcmsuIFRvIHJlbmFtZSBhbGwgZGVwcmVjYXRlZCBsaWZlY3ljbGVzIHRvIHRoZWlyIG5ldyBuYW1lcywgeW91IGNhbiBydW4gYG5weCByZWFjdC1jb2RlbW9kIHJlbmFtZS11bnNhZmUtbGlmZWN5Y2xlc2AgaW4geW91ciBwcm9qZWN0IHNvdXJjZSBmb2xkZXIuXFxuXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzXCIsXG4gICAgICAgICAgc29ydGVkTmFtZXNcbiAgICAgICAgKSk7XG4gICAgICAwIDwgY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzLnNpemUgJiZcbiAgICAgICAgKChzb3J0ZWROYW1lcyA9IHNldFRvU29ydGVkU3RyaW5nKGNvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcykpLFxuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgXCJjb21wb25lbnRXaWxsVXBkYXRlIGhhcyBiZWVuIHJlbmFtZWQsIGFuZCBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHVzZS4gU2VlIGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbiogTW92ZSBkYXRhIGZldGNoaW5nIGNvZGUgb3Igc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZFVwZGF0ZS5cXG4qIFJlbmFtZSBjb21wb25lbnRXaWxsVXBkYXRlIHRvIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlIHRvIHN1cHByZXNzIHRoaXMgd2FybmluZyBpbiBub24tc3RyaWN0IG1vZGUuIEluIFJlYWN0IDE4LngsIG9ubHkgdGhlIFVOU0FGRV8gbmFtZSB3aWxsIHdvcmsuIFRvIHJlbmFtZSBhbGwgZGVwcmVjYXRlZCBsaWZlY3ljbGVzIHRvIHRoZWlyIG5ldyBuYW1lcywgeW91IGNhbiBydW4gYG5weCByZWFjdC1jb2RlbW9kIHJlbmFtZS11bnNhZmUtbGlmZWN5Y2xlc2AgaW4geW91ciBwcm9qZWN0IHNvdXJjZSBmb2xkZXIuXFxuXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzXCIsXG4gICAgICAgICAgc29ydGVkTmFtZXNcbiAgICAgICAgKSk7XG4gICAgfTtcbiAgICB2YXIgcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nID0gbmV3IE1hcCgpLFxuICAgICAgZGlkV2FybkFib3V0TGVnYWN5Q29udGV4dCA9IG5ldyBTZXQoKTtcbiAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRMZWdhY3lDb250ZXh0V2FybmluZyA9IGZ1bmN0aW9uIChcbiAgICAgIGZpYmVyLFxuICAgICAgaW5zdGFuY2VcbiAgICApIHtcbiAgICAgIHZhciBzdHJpY3RSb290ID0gbnVsbDtcbiAgICAgIGZvciAodmFyIG5vZGUgPSBmaWJlcjsgbnVsbCAhPT0gbm9kZTsgKVxuICAgICAgICBub2RlLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlICYmIChzdHJpY3RSb290ID0gbm9kZSksXG4gICAgICAgICAgKG5vZGUgPSBub2RlLnJldHVybik7XG4gICAgICBudWxsID09PSBzdHJpY3RSb290XG4gICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiRXhwZWN0ZWQgdG8gZmluZCBhIFN0cmljdE1vZGUgY29tcG9uZW50IGluIGEgc3RyaWN0IG1vZGUgdHJlZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgIClcbiAgICAgICAgOiAhZGlkV2FybkFib3V0TGVnYWN5Q29udGV4dC5oYXMoZmliZXIudHlwZSkgJiZcbiAgICAgICAgICAoKG5vZGUgPSBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcuZ2V0KHN0cmljdFJvb3QpKSxcbiAgICAgICAgICBudWxsICE9IGZpYmVyLnR5cGUuY29udGV4dFR5cGVzIHx8XG4gICAgICAgICAgICBudWxsICE9IGZpYmVyLnR5cGUuY2hpbGRDb250ZXh0VHlwZXMgfHxcbiAgICAgICAgICAgIChudWxsICE9PSBpbnN0YW5jZSAmJlxuICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbnN0YW5jZS5nZXRDaGlsZENvbnRleHQpKSAmJlxuICAgICAgICAgICh2b2lkIDAgPT09IG5vZGUgJiZcbiAgICAgICAgICAgICgobm9kZSA9IFtdKSwgcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nLnNldChzdHJpY3RSb290LCBub2RlKSksXG4gICAgICAgICAgbm9kZS5wdXNoKGZpYmVyKSk7XG4gICAgfTtcbiAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5mbHVzaExlZ2FjeUNvbnRleHRXYXJuaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyQXJyYXkpIHtcbiAgICAgICAgaWYgKDAgIT09IGZpYmVyQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIGZpcnN0RmliZXIgPSBmaWJlckFycmF5WzBdLFxuICAgICAgICAgICAgdW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgZmliZXJBcnJheS5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICAgICAgdW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpIHx8IFwiQ29tcG9uZW50XCIpO1xuICAgICAgICAgICAgZGlkV2FybkFib3V0TGVnYWN5Q29udGV4dC5hZGQoZmliZXIudHlwZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdmFyIHNvcnRlZE5hbWVzID0gc2V0VG9Tb3J0ZWRTdHJpbmcodW5pcXVlTmFtZXMpO1xuICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKGZpcnN0RmliZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiTGVnYWN5IGNvbnRleHQgQVBJIGhhcyBiZWVuIGRldGVjdGVkIHdpdGhpbiBhIHN0cmljdC1tb2RlIHRyZWUuXFxuXFxuVGhlIG9sZCBBUEkgd2lsbCBiZSBzdXBwb3J0ZWQgaW4gYWxsIDE2LnggcmVsZWFzZXMsIGJ1dCBhcHBsaWNhdGlvbnMgdXNpbmcgaXQgc2hvdWxkIG1pZ3JhdGUgdG8gdGhlIG5ldyB2ZXJzaW9uLlxcblxcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlc1xcblxcbkxlYXJuIG1vcmUgYWJvdXQgdGhpcyB3YXJuaW5nIGhlcmU6IGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvbGVnYWN5LWNvbnRleHRcIixcbiAgICAgICAgICAgICAgc29ydGVkTmFtZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZGlzY2FyZFBlbmRpbmdXYXJuaW5ncyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gICAgICBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcgPSBuZXcgTWFwKCk7XG4gICAgfTtcbiAgICB2YXIgU3VzcGVuc2VFeGNlcHRpb24gPSBFcnJvcihcbiAgICAgICAgXCJTdXNwZW5zZSBFeGNlcHRpb246IFRoaXMgaXMgbm90IGEgcmVhbCBlcnJvciEgSXQncyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YgYHVzZWAgdG8gaW50ZXJydXB0IHRoZSBjdXJyZW50IHJlbmRlci4gWW91IG11c3QgZWl0aGVyIHJldGhyb3cgaXQgaW1tZWRpYXRlbHksIG9yIG1vdmUgdGhlIGB1c2VgIGNhbGwgb3V0c2lkZSBvZiB0aGUgYHRyeS9jYXRjaGAgYmxvY2suIENhcHR1cmluZyB3aXRob3V0IHJldGhyb3dpbmcgd2lsbCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXFxuXFxuVG8gaGFuZGxlIGFzeW5jIGVycm9ycywgd3JhcCB5b3VyIGNvbXBvbmVudCBpbiBhbiBlcnJvciBib3VuZGFyeSwgb3IgY2FsbCB0aGUgcHJvbWlzZSdzIGAuY2F0Y2hgIG1ldGhvZCBhbmQgcGFzcyB0aGUgcmVzdWx0IHRvIGB1c2VgLlwiXG4gICAgICApLFxuICAgICAgU3VzcGVuc2V5Q29tbWl0RXhjZXB0aW9uID0gRXJyb3IoXG4gICAgICAgIFwiU3VzcGVuc2UgRXhjZXB0aW9uOiBUaGlzIGlzIG5vdCBhIHJlYWwgZXJyb3IsIGFuZCBzaG91bGQgbm90IGxlYWsgaW50byB1c2Vyc3BhY2UuIElmIHlvdSdyZSBzZWVpbmcgdGhpcywgaXQncyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICksXG4gICAgICBTdXNwZW5zZUFjdGlvbkV4Y2VwdGlvbiA9IEVycm9yKFxuICAgICAgICBcIlN1c3BlbnNlIEV4Y2VwdGlvbjogVGhpcyBpcyBub3QgYSByZWFsIGVycm9yISBJdCdzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCBvZiBgdXNlQWN0aW9uU3RhdGVgIHRvIGludGVycnVwdCB0aGUgY3VycmVudCByZW5kZXIuIFlvdSBtdXN0IGVpdGhlciByZXRocm93IGl0IGltbWVkaWF0ZWx5LCBvciBtb3ZlIHRoZSBgdXNlQWN0aW9uU3RhdGVgIGNhbGwgb3V0c2lkZSBvZiB0aGUgYHRyeS9jYXRjaGAgYmxvY2suIENhcHR1cmluZyB3aXRob3V0IHJldGhyb3dpbmcgd2lsbCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXFxuXFxuVG8gaGFuZGxlIGFzeW5jIGVycm9ycywgd3JhcCB5b3VyIGNvbXBvbmVudCBpbiBhbiBlcnJvciBib3VuZGFyeS5cIlxuICAgICAgKSxcbiAgICAgIG5vb3BTdXNwZW5zZXlDb21taXRUaGVuYWJsZSA9IHtcbiAgICAgICAgdGhlbjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAnSW50ZXJuYWwgUmVhY3QgZXJyb3I6IEEgbGlzdGVuZXIgd2FzIHVuZXhwZWN0ZWRseSBhdHRhY2hlZCB0byBhIFwibm9vcFwiIHRoZW5hYmxlLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHN1c3BlbmRlZFRoZW5hYmxlID0gbnVsbCxcbiAgICAgIG5lZWRzVG9SZXNldFN1c3BlbmRlZFRoZW5hYmxlREVWID0gITEsXG4gICAgICBjYWxsQ29tcG9uZW50ID0ge1xuICAgICAgICByZWFjdF9zdGFja19ib3R0b21fZnJhbWU6IGZ1bmN0aW9uIChDb21wb25lbnQsIHByb3BzLCBzZWNvbmRBcmcpIHtcbiAgICAgICAgICB2YXIgd2FzUmVuZGVyaW5nID0gaXNSZW5kZXJpbmc7XG4gICAgICAgICAgaXNSZW5kZXJpbmcgPSAhMDtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIENvbXBvbmVudChwcm9wcywgc2Vjb25kQXJnKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgaXNSZW5kZXJpbmcgPSB3YXNSZW5kZXJpbmc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2FsbENvbXBvbmVudEluREVWID1cbiAgICAgICAgY2FsbENvbXBvbmVudC5yZWFjdF9zdGFja19ib3R0b21fZnJhbWUuYmluZChjYWxsQ29tcG9uZW50KSxcbiAgICAgIGNhbGxSZW5kZXIgPSB7XG4gICAgICAgIHJlYWN0X3N0YWNrX2JvdHRvbV9mcmFtZTogZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgICAgdmFyIHdhc1JlbmRlcmluZyA9IGlzUmVuZGVyaW5nO1xuICAgICAgICAgIGlzUmVuZGVyaW5nID0gITA7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5yZW5kZXIoKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgaXNSZW5kZXJpbmcgPSB3YXNSZW5kZXJpbmc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2FsbFJlbmRlckluREVWID0gY2FsbFJlbmRlci5yZWFjdF9zdGFja19ib3R0b21fZnJhbWUuYmluZChjYWxsUmVuZGVyKSxcbiAgICAgIGNhbGxDb21wb25lbnREaWRNb3VudCA9IHtcbiAgICAgICAgcmVhY3Rfc3RhY2tfYm90dG9tX2ZyYW1lOiBmdW5jdGlvbiAoZmluaXNoZWRXb3JrLCBpbnN0YW5jZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCgpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjYWxsQ29tcG9uZW50RGlkTW91bnRJbkRFViA9XG4gICAgICAgIGNhbGxDb21wb25lbnREaWRNb3VudC5yZWFjdF9zdGFja19ib3R0b21fZnJhbWUuYmluZChcbiAgICAgICAgICBjYWxsQ29tcG9uZW50RGlkTW91bnRcbiAgICAgICAgKSxcbiAgICAgIGNhbGxDb21wb25lbnREaWRVcGRhdGUgPSB7XG4gICAgICAgIHJlYWN0X3N0YWNrX2JvdHRvbV9mcmFtZTogZnVuY3Rpb24gKFxuICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICBwcmV2UHJvcHMsXG4gICAgICAgICAgcHJldlN0YXRlLFxuICAgICAgICAgIHNuYXBzaG90XG4gICAgICAgICkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUsIHNuYXBzaG90KTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2FsbENvbXBvbmVudERpZFVwZGF0ZUluREVWID1cbiAgICAgICAgY2FsbENvbXBvbmVudERpZFVwZGF0ZS5yZWFjdF9zdGFja19ib3R0b21fZnJhbWUuYmluZChcbiAgICAgICAgICBjYWxsQ29tcG9uZW50RGlkVXBkYXRlXG4gICAgICAgICksXG4gICAgICBjYWxsQ29tcG9uZW50RGlkQ2F0Y2ggPSB7XG4gICAgICAgIHJlYWN0X3N0YWNrX2JvdHRvbV9mcmFtZTogZnVuY3Rpb24gKGluc3RhbmNlLCBlcnJvckluZm8pIHtcbiAgICAgICAgICB2YXIgc3RhY2sgPSBlcnJvckluZm8uc3RhY2s7XG4gICAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50RGlkQ2F0Y2goZXJyb3JJbmZvLnZhbHVlLCB7XG4gICAgICAgICAgICBjb21wb25lbnRTdGFjazogbnVsbCAhPT0gc3RhY2sgPyBzdGFjayA6IFwiXCJcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNhbGxDb21wb25lbnREaWRDYXRjaEluREVWID1cbiAgICAgICAgY2FsbENvbXBvbmVudERpZENhdGNoLnJlYWN0X3N0YWNrX2JvdHRvbV9mcmFtZS5iaW5kKFxuICAgICAgICAgIGNhbGxDb21wb25lbnREaWRDYXRjaFxuICAgICAgICApLFxuICAgICAgY2FsbENvbXBvbmVudFdpbGxVbm1vdW50ID0ge1xuICAgICAgICByZWFjdF9zdGFja19ib3R0b21fZnJhbWU6IGZ1bmN0aW9uIChcbiAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgaW5zdGFuY2VcbiAgICAgICAgKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjYWxsQ29tcG9uZW50V2lsbFVubW91bnRJbkRFViA9XG4gICAgICAgIGNhbGxDb21wb25lbnRXaWxsVW5tb3VudC5yZWFjdF9zdGFja19ib3R0b21fZnJhbWUuYmluZChcbiAgICAgICAgICBjYWxsQ29tcG9uZW50V2lsbFVubW91bnRcbiAgICAgICAgKSxcbiAgICAgIGNhbGxDcmVhdGUgPSB7XG4gICAgICAgIHJlYWN0X3N0YWNrX2JvdHRvbV9mcmFtZTogZnVuY3Rpb24gKGVmZmVjdCkge1xuICAgICAgICAgIHZhciBjcmVhdGUgPSBlZmZlY3QuY3JlYXRlO1xuICAgICAgICAgIGVmZmVjdCA9IGVmZmVjdC5pbnN0O1xuICAgICAgICAgIGNyZWF0ZSA9IGNyZWF0ZSgpO1xuICAgICAgICAgIHJldHVybiAoZWZmZWN0LmRlc3Ryb3kgPSBjcmVhdGUpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2FsbENyZWF0ZUluREVWID0gY2FsbENyZWF0ZS5yZWFjdF9zdGFja19ib3R0b21fZnJhbWUuYmluZChjYWxsQ3JlYXRlKSxcbiAgICAgIGNhbGxEZXN0cm95ID0ge1xuICAgICAgICByZWFjdF9zdGFja19ib3R0b21fZnJhbWU6IGZ1bmN0aW9uIChcbiAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgZGVzdHJveVxuICAgICAgICApIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZGVzdHJveSgpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2FsbERlc3Ryb3lJbkRFViA9IGNhbGxEZXN0cm95LnJlYWN0X3N0YWNrX2JvdHRvbV9mcmFtZS5iaW5kKGNhbGxEZXN0cm95KSxcbiAgICAgIGNhbGxMYXp5SW5pdCA9IHtcbiAgICAgICAgcmVhY3Rfc3RhY2tfYm90dG9tX2ZyYW1lOiBmdW5jdGlvbiAobGF6eSkge1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eS5faW5pdDtcbiAgICAgICAgICByZXR1cm4gaW5pdChsYXp5Ll9wYXlsb2FkKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNhbGxMYXp5SW5pdEluREVWID1cbiAgICAgICAgY2FsbExhenlJbml0LnJlYWN0X3N0YWNrX2JvdHRvbV9mcmFtZS5iaW5kKGNhbGxMYXp5SW5pdCksXG4gICAgICB0aGVuYWJsZVN0YXRlJDEgPSBudWxsLFxuICAgICAgdGhlbmFibGVJbmRleENvdW50ZXIkMSA9IDAsXG4gICAgICBjdXJyZW50RGVidWdJbmZvID0gbnVsbCxcbiAgICAgIGRpZFdhcm5BYm91dE1hcHM7XG4gICAgdmFyIGRpZFdhcm5BYm91dEdlbmVyYXRvcnMgPSAoZGlkV2FybkFib3V0TWFwcyA9ICExKTtcbiAgICB2YXIgb3duZXJIYXNLZXlVc2VXYXJuaW5nID0ge307XG4gICAgdmFyIG93bmVySGFzRnVuY3Rpb25UeXBlV2FybmluZyA9IHt9O1xuICAgIHZhciBvd25lckhhc1N5bWJvbFR5cGVXYXJuaW5nID0ge307XG4gICAgd2FybkZvck1pc3NpbmdLZXkgPSBmdW5jdGlvbiAocmV0dXJuRmliZXIsIHdvcmtJblByb2dyZXNzLCBjaGlsZCkge1xuICAgICAgaWYgKFxuICAgICAgICBudWxsICE9PSBjaGlsZCAmJlxuICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgY2hpbGQgJiZcbiAgICAgICAgY2hpbGQuX3N0b3JlICYmXG4gICAgICAgICgoIWNoaWxkLl9zdG9yZS52YWxpZGF0ZWQgJiYgbnVsbCA9PSBjaGlsZC5rZXkpIHx8XG4gICAgICAgICAgMiA9PT0gY2hpbGQuX3N0b3JlLnZhbGlkYXRlZClcbiAgICAgICkge1xuICAgICAgICBpZiAoXCJvYmplY3RcIiAhPT0gdHlwZW9mIGNoaWxkLl9zdG9yZSlcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIFwiUmVhY3QgQ29tcG9uZW50IGluIHdhcm5Gb3JNaXNzaW5nS2V5IHNob3VsZCBoYXZlIGEgX3N0b3JlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgY2hpbGQuX3N0b3JlLnZhbGlkYXRlZCA9IDE7XG4gICAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihyZXR1cm5GaWJlciksXG4gICAgICAgICAgY29tcG9uZW50S2V5ID0gY29tcG9uZW50TmFtZSB8fCBcIm51bGxcIjtcbiAgICAgICAgaWYgKCFvd25lckhhc0tleVVzZVdhcm5pbmdbY29tcG9uZW50S2V5XSkge1xuICAgICAgICAgIG93bmVySGFzS2V5VXNlV2FybmluZ1tjb21wb25lbnRLZXldID0gITA7XG4gICAgICAgICAgY2hpbGQgPSBjaGlsZC5fb3duZXI7XG4gICAgICAgICAgcmV0dXJuRmliZXIgPSByZXR1cm5GaWJlci5fZGVidWdPd25lcjtcbiAgICAgICAgICB2YXIgY3VycmVudENvbXBvbmVudEVycm9ySW5mbyA9IFwiXCI7XG4gICAgICAgICAgcmV0dXJuRmliZXIgJiZcbiAgICAgICAgICAgIFwibnVtYmVyXCIgPT09IHR5cGVvZiByZXR1cm5GaWJlci50YWcgJiZcbiAgICAgICAgICAgIChjb21wb25lbnRLZXkgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKHJldHVybkZpYmVyKSkgJiZcbiAgICAgICAgICAgIChjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvID1cbiAgICAgICAgICAgICAgXCJcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgXCIgKyBjb21wb25lbnRLZXkgKyBcImAuXCIpO1xuICAgICAgICAgIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8gfHxcbiAgICAgICAgICAgIChjb21wb25lbnROYW1lICYmXG4gICAgICAgICAgICAgIChjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvID1cbiAgICAgICAgICAgICAgICBcIlxcblxcbkNoZWNrIHRoZSB0b3AtbGV2ZWwgcmVuZGVyIGNhbGwgdXNpbmcgPFwiICtcbiAgICAgICAgICAgICAgICBjb21wb25lbnROYW1lICtcbiAgICAgICAgICAgICAgICBcIj4uXCIpKTtcbiAgICAgICAgICB2YXIgY2hpbGRPd25lckFwcGVuZGl4ID0gXCJcIjtcbiAgICAgICAgICBudWxsICE9IGNoaWxkICYmXG4gICAgICAgICAgICByZXR1cm5GaWJlciAhPT0gY2hpbGQgJiZcbiAgICAgICAgICAgICgoY29tcG9uZW50TmFtZSA9IG51bGwpLFxuICAgICAgICAgICAgXCJudW1iZXJcIiA9PT0gdHlwZW9mIGNoaWxkLnRhZ1xuICAgICAgICAgICAgICA/IChjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihjaGlsZCkpXG4gICAgICAgICAgICAgIDogXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGNoaWxkLm5hbWUgJiYgKGNvbXBvbmVudE5hbWUgPSBjaGlsZC5uYW1lKSxcbiAgICAgICAgICAgIGNvbXBvbmVudE5hbWUgJiZcbiAgICAgICAgICAgICAgKGNoaWxkT3duZXJBcHBlbmRpeCA9XG4gICAgICAgICAgICAgICAgXCIgSXQgd2FzIHBhc3NlZCBhIGNoaWxkIGZyb20gXCIgKyBjb21wb25lbnROYW1lICsgXCIuXCIpKTtcbiAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVih3b3JrSW5Qcm9ncmVzcywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgJ0VhY2ggY2hpbGQgaW4gYSBsaXN0IHNob3VsZCBoYXZlIGEgdW5pcXVlIFwia2V5XCIgcHJvcC4lcyVzIFNlZSBodHRwczovL3JlYWN0LmRldi9saW5rL3dhcm5pbmcta2V5cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nLFxuICAgICAgICAgICAgICBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvLFxuICAgICAgICAgICAgICBjaGlsZE93bmVyQXBwZW5kaXhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciByZWNvbmNpbGVDaGlsZEZpYmVycyA9IGNyZWF0ZUNoaWxkUmVjb25jaWxlcighMCksXG4gICAgICBtb3VudENoaWxkRmliZXJzID0gY3JlYXRlQ2hpbGRSZWNvbmNpbGVyKCExKSxcbiAgICAgIFVwZGF0ZVN0YXRlID0gMCxcbiAgICAgIFJlcGxhY2VTdGF0ZSA9IDEsXG4gICAgICBGb3JjZVVwZGF0ZSA9IDIsXG4gICAgICBDYXB0dXJlVXBkYXRlID0gMyxcbiAgICAgIGhhc0ZvcmNlVXBkYXRlID0gITE7XG4gICAgdmFyIGRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGUgPSAhMTtcbiAgICB2YXIgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID0gbnVsbDtcbiAgICB2YXIgZGlkUmVhZEZyb21FbnRhbmdsZWRBc3luY0FjdGlvbiA9ICExLFxuICAgICAgY3VycmVudFRyZWVIaWRkZW5TdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihudWxsKSxcbiAgICAgIHByZXZFbnRhbmdsZWRSZW5kZXJMYW5lc0N1cnNvciA9IGNyZWF0ZUN1cnNvcigwKSxcbiAgICAgIHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKG51bGwpLFxuICAgICAgc2hlbGxCb3VuZGFyeSA9IG51bGwsXG4gICAgICBTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzayA9IDEsXG4gICAgICBGb3JjZVN1c3BlbnNlRmFsbGJhY2sgPSAyLFxuICAgICAgc3VzcGVuc2VTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcigwKSxcbiAgICAgIE5vRmxhZ3MgPSAwLFxuICAgICAgSGFzRWZmZWN0ID0gMSxcbiAgICAgIEluc2VydGlvbiA9IDIsXG4gICAgICBMYXlvdXQgPSA0LFxuICAgICAgUGFzc2l2ZSA9IDgsXG4gICAgICBkaWRXYXJuVW5jYWNoZWRHZXRTbmFwc2hvdDtcbiAgICB2YXIgZGlkV2FybkFib3V0TWlzbWF0Y2hlZEhvb2tzRm9yQ29tcG9uZW50ID0gbmV3IFNldCgpO1xuICAgIHZhciBkaWRXYXJuQWJvdXRVc2VXcmFwcGVkSW5UcnlDYXRjaCA9IG5ldyBTZXQoKTtcbiAgICB2YXIgZGlkV2FybkFib3V0QXN5bmNDbGllbnRDb21wb25lbnQgPSBuZXcgU2V0KCk7XG4gICAgdmFyIGRpZFdhcm5BYm91dFVzZUZvcm1TdGF0ZSA9IG5ldyBTZXQoKTtcbiAgICB2YXIgcmVuZGVyTGFuZXMgPSAwLFxuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIgPSBudWxsLFxuICAgICAgY3VycmVudEhvb2sgPSBudWxsLFxuICAgICAgd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbCxcbiAgICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSAhMSxcbiAgICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyA9ICExLFxuICAgICAgc2hvdWxkRG91YmxlSW52b2tlVXNlckZuc0luSG9va3NERVYgPSAhMSxcbiAgICAgIGxvY2FsSWRDb3VudGVyID0gMCxcbiAgICAgIHRoZW5hYmxlSW5kZXhDb3VudGVyID0gMCxcbiAgICAgIHRoZW5hYmxlU3RhdGUgPSBudWxsLFxuICAgICAgZ2xvYmFsQ2xpZW50SWRDb3VudGVyID0gMCxcbiAgICAgIFJFX1JFTkRFUl9MSU1JVCA9IDI1LFxuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBudWxsLFxuICAgICAgaG9va1R5cGVzRGV2ID0gbnVsbCxcbiAgICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTEsXG4gICAgICBpZ25vcmVQcmV2aW91c0RlcGVuZGVuY2llcyA9ICExLFxuICAgICAgQ29udGV4dE9ubHlEaXNwYXRjaGVyID0ge1xuICAgICAgICByZWFkQ29udGV4dDogcmVhZENvbnRleHQsXG4gICAgICAgIHVzZTogdXNlLFxuICAgICAgICB1c2VDYWxsYmFjazogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgICB1c2VDb250ZXh0OiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgICAgIHVzZUVmZmVjdDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgICAgIHVzZUxheW91dEVmZmVjdDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgICB1c2VJbnNlcnRpb25FZmZlY3Q6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgICAgdXNlTWVtbzogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgICB1c2VSZWR1Y2VyOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgICAgIHVzZVJlZjogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgICB1c2VTdGF0ZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgICB1c2VEZWJ1Z1ZhbHVlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgICAgIHVzZURlZmVycmVkVmFsdWU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgICAgdXNlVHJhbnNpdGlvbjogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgICB1c2VTeW5jRXh0ZXJuYWxTdG9yZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgICB1c2VJZDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgICB1c2VIb3N0VHJhbnNpdGlvblN0YXR1czogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgICB1c2VGb3JtU3RhdGU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgICAgdXNlQWN0aW9uU3RhdGU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgICAgdXNlT3B0aW1pc3RpYzogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgICB1c2VNZW1vQ2FjaGU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgICAgdXNlQ2FjaGVSZWZyZXNoOiB0aHJvd0ludmFsaWRIb29rRXJyb3JcbiAgICAgIH0sXG4gICAgICBIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYgPSBudWxsLFxuICAgICAgSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFViA9IG51bGwsXG4gICAgICBIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0gbnVsbCxcbiAgICAgIEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA9IG51bGwsXG4gICAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWID0gbnVsbCxcbiAgICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0gbnVsbCxcbiAgICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYgPSBudWxsO1xuICAgIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFViA9IHtcbiAgICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICB9LFxuICAgICAgdXNlOiB1c2UsXG4gICAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDYWxsYmFja1wiO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgICAgcmV0dXJuIG1vdW50Q2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDb250ZXh0XCI7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICAgIH0sXG4gICAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUVmZmVjdFwiO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgICAgcmV0dXJuIG1vdW50RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJbXBlcmF0aXZlSGFuZGxlXCI7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgICByZXR1cm4gbW91bnRJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VJbnNlcnRpb25FZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUluc2VydGlvbkVmZmVjdFwiO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgICAgbW91bnRFZmZlY3RJbXBsKDQsIEluc2VydGlvbiwgY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUxheW91dEVmZmVjdFwiO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgICAgcmV0dXJuIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTWVtb1wiO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIG1vdW50TWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VSZWR1Y2VyXCI7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBtb3VudFJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VSZWZcIjtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50UmVmKGluaXRpYWxWYWx1ZSk7XG4gICAgICB9LFxuICAgICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVN0YXRlXCI7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBtb3VudFN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRGVidWdWYWx1ZVwiO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgfSxcbiAgICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VEZWZlcnJlZFZhbHVlXCI7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudERlZmVycmVkVmFsdWUodmFsdWUsIGluaXRpYWxWYWx1ZSk7XG4gICAgICB9LFxuICAgICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlVHJhbnNpdGlvblwiO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRUcmFuc2l0aW9uKCk7XG4gICAgICB9LFxuICAgICAgdXNlU3luY0V4dGVybmFsU3RvcmU6IGZ1bmN0aW9uIChcbiAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICBnZXRTbmFwc2hvdCxcbiAgICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICAgICkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlU3luY0V4dGVybmFsU3RvcmVcIjtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50U3luY0V4dGVybmFsU3RvcmUoXG4gICAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICAgIGdldFNuYXBzaG90LFxuICAgICAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgdXNlSWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUlkXCI7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudElkKCk7XG4gICAgICB9LFxuICAgICAgdXNlRm9ybVN0YXRlOiBmdW5jdGlvbiAoYWN0aW9uLCBpbml0aWFsU3RhdGUpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUZvcm1TdGF0ZVwiO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICB3YXJuT25Vc2VGb3JtU3RhdGVJbkRldigpO1xuICAgICAgICByZXR1cm4gbW91bnRBY3Rpb25TdGF0ZShhY3Rpb24sIGluaXRpYWxTdGF0ZSk7XG4gICAgICB9LFxuICAgICAgdXNlQWN0aW9uU3RhdGU6IGZ1bmN0aW9uIChhY3Rpb24sIGluaXRpYWxTdGF0ZSkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQWN0aW9uU3RhdGVcIjtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50QWN0aW9uU3RhdGUoYWN0aW9uLCBpbml0aWFsU3RhdGUpO1xuICAgICAgfSxcbiAgICAgIHVzZU9wdGltaXN0aWM6IGZ1bmN0aW9uIChwYXNzdGhyb3VnaCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlT3B0aW1pc3RpY1wiO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRPcHRpbWlzdGljKHBhc3N0aHJvdWdoKTtcbiAgICAgIH0sXG4gICAgICB1c2VIb3N0VHJhbnNpdGlvblN0YXR1czogdXNlSG9zdFRyYW5zaXRpb25TdGF0dXMsXG4gICAgICB1c2VNZW1vQ2FjaGU6IHVzZU1lbW9DYWNoZSxcbiAgICAgIHVzZUNhY2hlUmVmcmVzaDogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ2FjaGVSZWZyZXNoXCI7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudFJlZnJlc2goKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRXaXRoSG9va1R5cGVzSW5ERVYgPSB7XG4gICAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgfSxcbiAgICAgIHVzZTogdXNlLFxuICAgICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ2FsbGJhY2tcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ29udGV4dFwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgfSxcbiAgICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRWZmZWN0XCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUltcGVyYXRpdmVIYW5kbGVcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudEltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUluc2VydGlvbkVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSW5zZXJ0aW9uRWZmZWN0XCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICBtb3VudEVmZmVjdEltcGwoNCwgSW5zZXJ0aW9uLCBjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTGF5b3V0RWZmZWN0XCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VNZW1vXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gbW91bnRNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVJlZHVjZXJcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBtb3VudFJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VSZWZcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudFJlZihpbml0aWFsVmFsdWUpO1xuICAgICAgfSxcbiAgICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VTdGF0ZVwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VEZWJ1Z1ZhbHVlXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgfSxcbiAgICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VEZWZlcnJlZFZhbHVlXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnREZWZlcnJlZFZhbHVlKHZhbHVlLCBpbml0aWFsVmFsdWUpO1xuICAgICAgfSxcbiAgICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVRyYW5zaXRpb25cIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudFRyYW5zaXRpb24oKTtcbiAgICAgIH0sXG4gICAgICB1c2VTeW5jRXh0ZXJuYWxTdG9yZTogZnVuY3Rpb24gKFxuICAgICAgICBzdWJzY3JpYmUsXG4gICAgICAgIGdldFNuYXBzaG90LFxuICAgICAgICBnZXRTZXJ2ZXJTbmFwc2hvdFxuICAgICAgKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VTeW5jRXh0ZXJuYWxTdG9yZVwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50U3luY0V4dGVybmFsU3RvcmUoXG4gICAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICAgIGdldFNuYXBzaG90LFxuICAgICAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgdXNlSWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUlkXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRJZCgpO1xuICAgICAgfSxcbiAgICAgIHVzZUFjdGlvblN0YXRlOiBmdW5jdGlvbiAoYWN0aW9uLCBpbml0aWFsU3RhdGUpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUFjdGlvblN0YXRlXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRBY3Rpb25TdGF0ZShhY3Rpb24sIGluaXRpYWxTdGF0ZSk7XG4gICAgICB9LFxuICAgICAgdXNlRm9ybVN0YXRlOiBmdW5jdGlvbiAoYWN0aW9uLCBpbml0aWFsU3RhdGUpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUZvcm1TdGF0ZVwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgd2Fybk9uVXNlRm9ybVN0YXRlSW5EZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50QWN0aW9uU3RhdGUoYWN0aW9uLCBpbml0aWFsU3RhdGUpO1xuICAgICAgfSxcbiAgICAgIHVzZU9wdGltaXN0aWM6IGZ1bmN0aW9uIChwYXNzdGhyb3VnaCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlT3B0aW1pc3RpY1wiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50T3B0aW1pc3RpYyhwYXNzdGhyb3VnaCk7XG4gICAgICB9LFxuICAgICAgdXNlSG9zdFRyYW5zaXRpb25TdGF0dXM6IHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzLFxuICAgICAgdXNlTWVtb0NhY2hlOiB1c2VNZW1vQ2FjaGUsXG4gICAgICB1c2VDYWNoZVJlZnJlc2g6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNhY2hlUmVmcmVzaFwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50UmVmcmVzaCgpO1xuICAgICAgfVxuICAgIH07XG4gICAgSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFViA9IHtcbiAgICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICB9LFxuICAgICAgdXNlOiB1c2UsXG4gICAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDYWxsYmFja1wiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ29udGV4dFwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgfSxcbiAgICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRWZmZWN0XCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB1cGRhdGVFZmZlY3RJbXBsKDIwNDgsIFBhc3NpdmUsIGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJbXBlcmF0aXZlSGFuZGxlXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlSW5zZXJ0aW9uRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJbnNlcnRpb25FZmZlY3RcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVFZmZlY3RJbXBsKDQsIEluc2VydGlvbiwgY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUxheW91dEVmZmVjdFwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoNCwgTGF5b3V0LCBjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZU1lbW9cIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlTWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VSZWR1Y2VyXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlUmVmOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VSZWZcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlO1xuICAgICAgfSxcbiAgICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VTdGF0ZVwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiB1cGRhdGVSZWR1Y2VyKGJhc2ljU3RhdGVSZWR1Y2VyKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VEZWJ1Z1ZhbHVlXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgfSxcbiAgICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VEZWZlcnJlZFZhbHVlXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlRGVmZXJyZWRWYWx1ZSh2YWx1ZSwgaW5pdGlhbFZhbHVlKTtcbiAgICAgIH0sXG4gICAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VUcmFuc2l0aW9uXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlVHJhbnNpdGlvbigpO1xuICAgICAgfSxcbiAgICAgIHVzZVN5bmNFeHRlcm5hbFN0b3JlOiBmdW5jdGlvbiAoXG4gICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgZ2V0U25hcHNob3QsXG4gICAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgICApIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVN5bmNFeHRlcm5hbFN0b3JlXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlU3luY0V4dGVybmFsU3RvcmUoXG4gICAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICAgIGdldFNuYXBzaG90LFxuICAgICAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgdXNlSWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUlkXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCkubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIH0sXG4gICAgICB1c2VGb3JtU3RhdGU6IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUZvcm1TdGF0ZVwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgd2Fybk9uVXNlRm9ybVN0YXRlSW5EZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUFjdGlvblN0YXRlKGFjdGlvbik7XG4gICAgICB9LFxuICAgICAgdXNlQWN0aW9uU3RhdGU6IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUFjdGlvblN0YXRlXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlQWN0aW9uU3RhdGUoYWN0aW9uKTtcbiAgICAgIH0sXG4gICAgICB1c2VPcHRpbWlzdGljOiBmdW5jdGlvbiAocGFzc3Rocm91Z2gsIHJlZHVjZXIpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZU9wdGltaXN0aWNcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVPcHRpbWlzdGljKHBhc3N0aHJvdWdoLCByZWR1Y2VyKTtcbiAgICAgIH0sXG4gICAgICB1c2VIb3N0VHJhbnNpdGlvblN0YXR1czogdXNlSG9zdFRyYW5zaXRpb25TdGF0dXMsXG4gICAgICB1c2VNZW1vQ2FjaGU6IHVzZU1lbW9DYWNoZSxcbiAgICAgIHVzZUNhY2hlUmVmcmVzaDogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ2FjaGVSZWZyZXNoXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCkubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA9IHtcbiAgICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICB9LFxuICAgICAgdXNlOiB1c2UsXG4gICAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDYWxsYmFja1wiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ29udGV4dFwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgfSxcbiAgICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRWZmZWN0XCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB1cGRhdGVFZmZlY3RJbXBsKDIwNDgsIFBhc3NpdmUsIGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJbXBlcmF0aXZlSGFuZGxlXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlSW5zZXJ0aW9uRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJbnNlcnRpb25FZmZlY3RcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVFZmZlY3RJbXBsKDQsIEluc2VydGlvbiwgY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUxheW91dEVmZmVjdFwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoNCwgTGF5b3V0LCBjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZU1lbW9cIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiB1cGRhdGVNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVJlZHVjZXJcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiByZXJlbmRlclJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlUmVmOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VSZWZcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlO1xuICAgICAgfSxcbiAgICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VTdGF0ZVwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHJlcmVuZGVyUmVkdWNlcihiYXNpY1N0YXRlUmVkdWNlcik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRGVidWdWYWx1ZVwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIH0sXG4gICAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRGVmZXJyZWRWYWx1ZVwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyRGVmZXJyZWRWYWx1ZSh2YWx1ZSwgaW5pdGlhbFZhbHVlKTtcbiAgICAgIH0sXG4gICAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VUcmFuc2l0aW9uXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gcmVyZW5kZXJUcmFuc2l0aW9uKCk7XG4gICAgICB9LFxuICAgICAgdXNlU3luY0V4dGVybmFsU3RvcmU6IGZ1bmN0aW9uIChcbiAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICBnZXRTbmFwc2hvdCxcbiAgICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICAgICkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlU3luY0V4dGVybmFsU3RvcmVcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVTeW5jRXh0ZXJuYWxTdG9yZShcbiAgICAgICAgICBzdWJzY3JpYmUsXG4gICAgICAgICAgZ2V0U25hcHNob3QsXG4gICAgICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICB1c2VJZDogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSWRcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlO1xuICAgICAgfSxcbiAgICAgIHVzZUZvcm1TdGF0ZTogZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRm9ybVN0YXRlXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB3YXJuT25Vc2VGb3JtU3RhdGVJbkRldigpO1xuICAgICAgICByZXR1cm4gcmVyZW5kZXJBY3Rpb25TdGF0ZShhY3Rpb24pO1xuICAgICAgfSxcbiAgICAgIHVzZUFjdGlvblN0YXRlOiBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VBY3Rpb25TdGF0ZVwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyQWN0aW9uU3RhdGUoYWN0aW9uKTtcbiAgICAgIH0sXG4gICAgICB1c2VPcHRpbWlzdGljOiBmdW5jdGlvbiAocGFzc3Rocm91Z2gsIHJlZHVjZXIpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZU9wdGltaXN0aWNcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiByZXJlbmRlck9wdGltaXN0aWMocGFzc3Rocm91Z2gsIHJlZHVjZXIpO1xuICAgICAgfSxcbiAgICAgIHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzOiB1c2VIb3N0VHJhbnNpdGlvblN0YXR1cyxcbiAgICAgIHVzZU1lbW9DYWNoZTogdXNlTWVtb0NhY2hlLFxuICAgICAgdXNlQ2FjaGVSZWZyZXNoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDYWNoZVJlZnJlc2hcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlO1xuICAgICAgfVxuICAgIH07XG4gICAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFViA9IHtcbiAgICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICB3YXJuSW52YWxpZENvbnRleHRBY2Nlc3MoKTtcbiAgICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgfSxcbiAgICAgIHVzZTogZnVuY3Rpb24gKHVzYWJsZSkge1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgcmV0dXJuIHVzZSh1c2FibGUpO1xuICAgICAgfSxcbiAgICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNhbGxiYWNrXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNvbnRleHRcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICAgIH0sXG4gICAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUVmZmVjdFwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJbXBlcmF0aXZlSGFuZGxlXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VJbnNlcnRpb25FZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUluc2VydGlvbkVmZmVjdFwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgbW91bnRFZmZlY3RJbXBsKDQsIEluc2VydGlvbiwgY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUxheW91dEVmZmVjdFwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTWVtb1wiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIG1vdW50TWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VSZWR1Y2VyXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gbW91bnRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlUmVmXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRSZWYoaW5pdGlhbFZhbHVlKTtcbiAgICAgIH0sXG4gICAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlU3RhdGVcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBtb3VudFN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRGVidWdWYWx1ZVwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIH0sXG4gICAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRGVmZXJyZWRWYWx1ZVwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50RGVmZXJyZWRWYWx1ZSh2YWx1ZSwgaW5pdGlhbFZhbHVlKTtcbiAgICAgIH0sXG4gICAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VUcmFuc2l0aW9uXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRUcmFuc2l0aW9uKCk7XG4gICAgICB9LFxuICAgICAgdXNlU3luY0V4dGVybmFsU3RvcmU6IGZ1bmN0aW9uIChcbiAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICBnZXRTbmFwc2hvdCxcbiAgICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICAgICkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlU3luY0V4dGVybmFsU3RvcmVcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudFN5bmNFeHRlcm5hbFN0b3JlKFxuICAgICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgICBnZXRTbmFwc2hvdCxcbiAgICAgICAgICBnZXRTZXJ2ZXJTbmFwc2hvdFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIHVzZUlkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJZFwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50SWQoKTtcbiAgICAgIH0sXG4gICAgICB1c2VGb3JtU3RhdGU6IGZ1bmN0aW9uIChhY3Rpb24sIGluaXRpYWxTdGF0ZSkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRm9ybVN0YXRlXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRBY3Rpb25TdGF0ZShhY3Rpb24sIGluaXRpYWxTdGF0ZSk7XG4gICAgICB9LFxuICAgICAgdXNlQWN0aW9uU3RhdGU6IGZ1bmN0aW9uIChhY3Rpb24sIGluaXRpYWxTdGF0ZSkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQWN0aW9uU3RhdGVcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudEFjdGlvblN0YXRlKGFjdGlvbiwgaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0sXG4gICAgICB1c2VPcHRpbWlzdGljOiBmdW5jdGlvbiAocGFzc3Rocm91Z2gpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZU9wdGltaXN0aWNcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudE9wdGltaXN0aWMocGFzc3Rocm91Z2gpO1xuICAgICAgfSxcbiAgICAgIHVzZU1lbW9DYWNoZTogZnVuY3Rpb24gKHNpemUpIHtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHJldHVybiB1c2VNZW1vQ2FjaGUoc2l6ZSk7XG4gICAgICB9LFxuICAgICAgdXNlSG9zdFRyYW5zaXRpb25TdGF0dXM6IHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzLFxuICAgICAgdXNlQ2FjaGVSZWZyZXNoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDYWNoZVJlZnJlc2hcIjtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50UmVmcmVzaCgpO1xuICAgICAgfVxuICAgIH07XG4gICAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYgPSB7XG4gICAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgd2FybkludmFsaWRDb250ZXh0QWNjZXNzKCk7XG4gICAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICAgIH0sXG4gICAgICB1c2U6IGZ1bmN0aW9uICh1c2FibGUpIHtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHJldHVybiB1c2UodXNhYmxlKTtcbiAgICAgIH0sXG4gICAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDYWxsYmFja1wiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNvbnRleHRcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICB9LFxuICAgICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VFZmZlY3RcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB1cGRhdGVFZmZlY3RJbXBsKDIwNDgsIFBhc3NpdmUsIGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJbXBlcmF0aXZlSGFuZGxlXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUluc2VydGlvbkVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSW5zZXJ0aW9uRWZmZWN0XCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoNCwgSW5zZXJ0aW9uLCBjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTGF5b3V0RWZmZWN0XCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoNCwgTGF5b3V0LCBjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZU1lbW9cIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlUmVkdWNlclwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1c2VSZWY6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVJlZlwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlO1xuICAgICAgfSxcbiAgICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VTdGF0ZVwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlUmVkdWNlcihiYXNpY1N0YXRlUmVkdWNlcik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRGVidWdWYWx1ZVwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB9LFxuICAgICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZURlZmVycmVkVmFsdWVcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlRGVmZXJyZWRWYWx1ZSh2YWx1ZSwgaW5pdGlhbFZhbHVlKTtcbiAgICAgIH0sXG4gICAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VUcmFuc2l0aW9uXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVRyYW5zaXRpb24oKTtcbiAgICAgIH0sXG4gICAgICB1c2VTeW5jRXh0ZXJuYWxTdG9yZTogZnVuY3Rpb24gKFxuICAgICAgICBzdWJzY3JpYmUsXG4gICAgICAgIGdldFNuYXBzaG90LFxuICAgICAgICBnZXRTZXJ2ZXJTbmFwc2hvdFxuICAgICAgKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VTeW5jRXh0ZXJuYWxTdG9yZVwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVTeW5jRXh0ZXJuYWxTdG9yZShcbiAgICAgICAgICBzdWJzY3JpYmUsXG4gICAgICAgICAgZ2V0U25hcHNob3QsXG4gICAgICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICB1c2VJZDogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSWRcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCkubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIH0sXG4gICAgICB1c2VGb3JtU3RhdGU6IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUZvcm1TdGF0ZVwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVBY3Rpb25TdGF0ZShhY3Rpb24pO1xuICAgICAgfSxcbiAgICAgIHVzZUFjdGlvblN0YXRlOiBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VBY3Rpb25TdGF0ZVwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVBY3Rpb25TdGF0ZShhY3Rpb24pO1xuICAgICAgfSxcbiAgICAgIHVzZU9wdGltaXN0aWM6IGZ1bmN0aW9uIChwYXNzdGhyb3VnaCwgcmVkdWNlcikge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlT3B0aW1pc3RpY1wiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVPcHRpbWlzdGljKHBhc3N0aHJvdWdoLCByZWR1Y2VyKTtcbiAgICAgIH0sXG4gICAgICB1c2VNZW1vQ2FjaGU6IGZ1bmN0aW9uIChzaXplKSB7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICByZXR1cm4gdXNlTWVtb0NhY2hlKHNpemUpO1xuICAgICAgfSxcbiAgICAgIHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzOiB1c2VIb3N0VHJhbnNpdGlvblN0YXR1cyxcbiAgICAgIHVzZUNhY2hlUmVmcmVzaDogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ2FjaGVSZWZyZXNoXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCkubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYgPSB7XG4gICAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgd2FybkludmFsaWRDb250ZXh0QWNjZXNzKCk7XG4gICAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICAgIH0sXG4gICAgICB1c2U6IGZ1bmN0aW9uICh1c2FibGUpIHtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHJldHVybiB1c2UodXNhYmxlKTtcbiAgICAgIH0sXG4gICAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDYWxsYmFja1wiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNvbnRleHRcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICB9LFxuICAgICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VFZmZlY3RcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB1cGRhdGVFZmZlY3RJbXBsKDIwNDgsIFBhc3NpdmUsIGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJbXBlcmF0aXZlSGFuZGxlXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUluc2VydGlvbkVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSW5zZXJ0aW9uRWZmZWN0XCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoNCwgSW5zZXJ0aW9uLCBjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTGF5b3V0RWZmZWN0XCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoNCwgTGF5b3V0LCBjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZU1lbW9cIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlUmVkdWNlclwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gcmVyZW5kZXJSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVzZVJlZjogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlUmVmXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpLm1lbW9pemVkU3RhdGU7XG4gICAgICB9LFxuICAgICAgdXNlU3RhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVN0YXRlXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiByZXJlbmRlclJlZHVjZXIoYmFzaWNTdGF0ZVJlZHVjZXIpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZURlYnVnVmFsdWVcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgfSxcbiAgICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VEZWZlcnJlZFZhbHVlXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyRGVmZXJyZWRWYWx1ZSh2YWx1ZSwgaW5pdGlhbFZhbHVlKTtcbiAgICAgIH0sXG4gICAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VUcmFuc2l0aW9uXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyVHJhbnNpdGlvbigpO1xuICAgICAgfSxcbiAgICAgIHVzZVN5bmNFeHRlcm5hbFN0b3JlOiBmdW5jdGlvbiAoXG4gICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgZ2V0U25hcHNob3QsXG4gICAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgICApIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVN5bmNFeHRlcm5hbFN0b3JlXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVN5bmNFeHRlcm5hbFN0b3JlKFxuICAgICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgICBnZXRTbmFwc2hvdCxcbiAgICAgICAgICBnZXRTZXJ2ZXJTbmFwc2hvdFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIHVzZUlkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJZFwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlO1xuICAgICAgfSxcbiAgICAgIHVzZUZvcm1TdGF0ZTogZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRm9ybVN0YXRlXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyQWN0aW9uU3RhdGUoYWN0aW9uKTtcbiAgICAgIH0sXG4gICAgICB1c2VBY3Rpb25TdGF0ZTogZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQWN0aW9uU3RhdGVcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gcmVyZW5kZXJBY3Rpb25TdGF0ZShhY3Rpb24pO1xuICAgICAgfSxcbiAgICAgIHVzZU9wdGltaXN0aWM6IGZ1bmN0aW9uIChwYXNzdGhyb3VnaCwgcmVkdWNlcikge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlT3B0aW1pc3RpY1wiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiByZXJlbmRlck9wdGltaXN0aWMocGFzc3Rocm91Z2gsIHJlZHVjZXIpO1xuICAgICAgfSxcbiAgICAgIHVzZU1lbW9DYWNoZTogZnVuY3Rpb24gKHNpemUpIHtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHJldHVybiB1c2VNZW1vQ2FjaGUoc2l6ZSk7XG4gICAgICB9LFxuICAgICAgdXNlSG9zdFRyYW5zaXRpb25TdGF0dXM6IHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzLFxuICAgICAgdXNlQ2FjaGVSZWZyZXNoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDYWNoZVJlZnJlc2hcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlO1xuICAgICAgfVxuICAgIH07XG4gICAgdmFyIGZha2VJbnRlcm5hbEluc3RhbmNlID0ge307XG4gICAgdmFyIGRpZFdhcm5BYm91dFN0YXRlQXNzaWdubWVudEZvckNvbXBvbmVudCA9IG5ldyBTZXQoKTtcbiAgICB2YXIgZGlkV2FybkFib3V0VW5pbml0aWFsaXplZFN0YXRlID0gbmV3IFNldCgpO1xuICAgIHZhciBkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGUgPSBuZXcgU2V0KCk7XG4gICAgdmFyIGRpZFdhcm5BYm91dExlZ2FjeUxpZmVjeWNsZXNBbmREZXJpdmVkU3RhdGUgPSBuZXcgU2V0KCk7XG4gICAgdmFyIGRpZFdhcm5BYm91dERpcmVjdGx5QXNzaWduaW5nUHJvcHNUb1N0YXRlID0gbmV3IFNldCgpO1xuICAgIHZhciBkaWRXYXJuQWJvdXRVbmRlZmluZWREZXJpdmVkU3RhdGUgPSBuZXcgU2V0KCk7XG4gICAgdmFyIGRpZFdhcm5BYm91dENvbnRleHRUeXBlcyQxID0gbmV3IFNldCgpO1xuICAgIHZhciBkaWRXYXJuQWJvdXRDaGlsZENvbnRleHRUeXBlcyA9IG5ldyBTZXQoKTtcbiAgICB2YXIgZGlkV2FybkFib3V0SW52YWxpZGF0ZUNvbnRleHRUeXBlID0gbmV3IFNldCgpO1xuICAgIHZhciBkaWRXYXJuT25JbnZhbGlkQ2FsbGJhY2sgPSBuZXcgU2V0KCk7XG4gICAgT2JqZWN0LmZyZWV6ZShmYWtlSW50ZXJuYWxJbnN0YW5jZSk7XG4gICAgdmFyIGNsYXNzQ29tcG9uZW50VXBkYXRlciA9IHtcbiAgICAgICAgZW5xdWV1ZVNldFN0YXRlOiBmdW5jdGlvbiAoaW5zdCwgcGF5bG9hZCwgY2FsbGJhY2spIHtcbiAgICAgICAgICBpbnN0ID0gaW5zdC5fcmVhY3RJbnRlcm5hbHM7XG4gICAgICAgICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShpbnN0KSxcbiAgICAgICAgICAgIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShsYW5lKTtcbiAgICAgICAgICB1cGRhdGUucGF5bG9hZCA9IHBheWxvYWQ7XG4gICAgICAgICAgdm9pZCAwICE9PSBjYWxsYmFjayAmJlxuICAgICAgICAgICAgbnVsbCAhPT0gY2FsbGJhY2sgJiZcbiAgICAgICAgICAgICh3YXJuT25JbnZhbGlkQ2FsbGJhY2soY2FsbGJhY2spLCAodXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2spKTtcbiAgICAgICAgICBwYXlsb2FkID0gZW5xdWV1ZVVwZGF0ZShpbnN0LCB1cGRhdGUsIGxhbmUpO1xuICAgICAgICAgIG51bGwgIT09IHBheWxvYWQgJiZcbiAgICAgICAgICAgIChzY2hlZHVsZVVwZGF0ZU9uRmliZXIocGF5bG9hZCwgaW5zdCwgbGFuZSksXG4gICAgICAgICAgICBlbnRhbmdsZVRyYW5zaXRpb25zKHBheWxvYWQsIGluc3QsIGxhbmUpKTtcbiAgICAgICAgICBtYXJrU3RhdGVVcGRhdGVTY2hlZHVsZWQoaW5zdCwgbGFuZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVucXVldWVSZXBsYWNlU3RhdGU6IGZ1bmN0aW9uIChpbnN0LCBwYXlsb2FkLCBjYWxsYmFjaykge1xuICAgICAgICAgIGluc3QgPSBpbnN0Ll9yZWFjdEludGVybmFscztcbiAgICAgICAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGluc3QpLFxuICAgICAgICAgICAgdXBkYXRlID0gY3JlYXRlVXBkYXRlKGxhbmUpO1xuICAgICAgICAgIHVwZGF0ZS50YWcgPSBSZXBsYWNlU3RhdGU7XG4gICAgICAgICAgdXBkYXRlLnBheWxvYWQgPSBwYXlsb2FkO1xuICAgICAgICAgIHZvaWQgMCAhPT0gY2FsbGJhY2sgJiZcbiAgICAgICAgICAgIG51bGwgIT09IGNhbGxiYWNrICYmXG4gICAgICAgICAgICAod2Fybk9uSW52YWxpZENhbGxiYWNrKGNhbGxiYWNrKSwgKHVwZGF0ZS5jYWxsYmFjayA9IGNhbGxiYWNrKSk7XG4gICAgICAgICAgcGF5bG9hZCA9IGVucXVldWVVcGRhdGUoaW5zdCwgdXBkYXRlLCBsYW5lKTtcbiAgICAgICAgICBudWxsICE9PSBwYXlsb2FkICYmXG4gICAgICAgICAgICAoc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHBheWxvYWQsIGluc3QsIGxhbmUpLFxuICAgICAgICAgICAgZW50YW5nbGVUcmFuc2l0aW9ucyhwYXlsb2FkLCBpbnN0LCBsYW5lKSk7XG4gICAgICAgICAgbWFya1N0YXRlVXBkYXRlU2NoZWR1bGVkKGluc3QsIGxhbmUpO1xuICAgICAgICB9LFxuICAgICAgICBlbnF1ZXVlRm9yY2VVcGRhdGU6IGZ1bmN0aW9uIChpbnN0LCBjYWxsYmFjaykge1xuICAgICAgICAgIGluc3QgPSBpbnN0Ll9yZWFjdEludGVybmFscztcbiAgICAgICAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGluc3QpLFxuICAgICAgICAgICAgdXBkYXRlID0gY3JlYXRlVXBkYXRlKGxhbmUpO1xuICAgICAgICAgIHVwZGF0ZS50YWcgPSBGb3JjZVVwZGF0ZTtcbiAgICAgICAgICB2b2lkIDAgIT09IGNhbGxiYWNrICYmXG4gICAgICAgICAgICBudWxsICE9PSBjYWxsYmFjayAmJlxuICAgICAgICAgICAgKHdhcm5PbkludmFsaWRDYWxsYmFjayhjYWxsYmFjayksICh1cGRhdGUuY2FsbGJhY2sgPSBjYWxsYmFjaykpO1xuICAgICAgICAgIGNhbGxiYWNrID0gZW5xdWV1ZVVwZGF0ZShpbnN0LCB1cGRhdGUsIGxhbmUpO1xuICAgICAgICAgIG51bGwgIT09IGNhbGxiYWNrICYmXG4gICAgICAgICAgICAoc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGNhbGxiYWNrLCBpbnN0LCBsYW5lKSxcbiAgICAgICAgICAgIGVudGFuZ2xlVHJhbnNpdGlvbnMoY2FsbGJhY2ssIGluc3QsIGxhbmUpKTtcbiAgICAgICAgICBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgICAgICAgIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtGb3JjZVVwZGF0ZVNjaGVkdWxlZCAmJlxuICAgICAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrRm9yY2VVcGRhdGVTY2hlZHVsZWQoaW5zdCwgbGFuZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjb21wb25lbnROYW1lID0gbnVsbCxcbiAgICAgIGVycm9yQm91bmRhcnlOYW1lID0gbnVsbCxcbiAgICAgIFNlbGVjdGl2ZUh5ZHJhdGlvbkV4Y2VwdGlvbiA9IEVycm9yKFxuICAgICAgICBcIlRoaXMgaXMgbm90IGEgcmVhbCBlcnJvci4gSXQncyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YgUmVhY3QncyBzZWxlY3RpdmUgaHlkcmF0aW9uIGZlYXR1cmUuIElmIHRoaXMgbGVha3MgaW50byB1c2Vyc3BhY2UsIGl0J3MgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICApLFxuICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9ICExO1xuICAgIHZhciBkaWRXYXJuQWJvdXRCYWRDbGFzcyA9IHt9O1xuICAgIHZhciBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZU9uRnVuY3Rpb25Db21wb25lbnQgPSB7fTtcbiAgICB2YXIgZGlkV2FybkFib3V0Q29udGV4dFR5cGVzID0ge307XG4gICAgdmFyIGRpZFdhcm5BYm91dEdldERlcml2ZWRTdGF0ZU9uRnVuY3Rpb25Db21wb25lbnQgPSB7fTtcbiAgICB2YXIgZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcyA9ICExO1xuICAgIHZhciBkaWRXYXJuQWJvdXRSZXZlYWxPcmRlciA9IHt9O1xuICAgIHZhciBkaWRXYXJuQWJvdXRUYWlsT3B0aW9ucyA9IHt9O1xuICAgIHZhciBTVVNQRU5ERURfTUFSS0VSID0ge1xuICAgICAgICBkZWh5ZHJhdGVkOiBudWxsLFxuICAgICAgICB0cmVlQ29udGV4dDogbnVsbCxcbiAgICAgICAgcmV0cnlMYW5lOiAwLFxuICAgICAgICBoeWRyYXRpb25FcnJvcnM6IG51bGxcbiAgICAgIH0sXG4gICAgICBoYXNXYXJuZWRBYm91dFVzaW5nTm9WYWx1ZVByb3BPbkNvbnRleHRQcm92aWRlciA9ICExLFxuICAgICAgZGlkV2FybkFib3V0VW5kZWZpbmVkU25hcHNob3RCZWZvcmVVcGRhdGUgPSBudWxsO1xuICAgIGRpZFdhcm5BYm91dFVuZGVmaW5lZFNuYXBzaG90QmVmb3JlVXBkYXRlID0gbmV3IFNldCgpO1xuICAgIHZhciBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gPSAhMSxcbiAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gPSAhMSxcbiAgICAgIG5lZWRzRm9ybVJlc2V0ID0gITEsXG4gICAgICBQb3NzaWJseVdlYWtTZXQgPSBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBXZWFrU2V0ID8gV2Vha1NldCA6IFNldCxcbiAgICAgIG5leHRFZmZlY3QgPSBudWxsLFxuICAgICAgaW5Qcm9ncmVzc0xhbmVzID0gbnVsbCxcbiAgICAgIGluUHJvZ3Jlc3NSb290ID0gbnVsbCxcbiAgICAgIGhvc3RQYXJlbnQgPSBudWxsLFxuICAgICAgaG9zdFBhcmVudElzQ29udGFpbmVyID0gITEsXG4gICAgICBjdXJyZW50SG9pc3RhYmxlUm9vdCA9IG51bGwsXG4gICAgICBzdXNwZW5zZXlDb21taXRGbGFnID0gODE5MixcbiAgICAgIERlZmF1bHRBc3luY0Rpc3BhdGNoZXIgPSB7XG4gICAgICAgIGdldENhY2hlRm9yVHlwZTogZnVuY3Rpb24gKHJlc291cmNlVHlwZSkge1xuICAgICAgICAgIHZhciBjYWNoZSA9IHJlYWRDb250ZXh0KENhY2hlQ29udGV4dCksXG4gICAgICAgICAgICBjYWNoZUZvclR5cGUgPSBjYWNoZS5kYXRhLmdldChyZXNvdXJjZVR5cGUpO1xuICAgICAgICAgIHZvaWQgMCA9PT0gY2FjaGVGb3JUeXBlICYmXG4gICAgICAgICAgICAoKGNhY2hlRm9yVHlwZSA9IHJlc291cmNlVHlwZSgpKSxcbiAgICAgICAgICAgIGNhY2hlLmRhdGEuc2V0KHJlc291cmNlVHlwZSwgY2FjaGVGb3JUeXBlKSk7XG4gICAgICAgICAgcmV0dXJuIGNhY2hlRm9yVHlwZTtcbiAgICAgICAgfSxcbiAgICAgICAgY2FjaGVTaWduYWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoQ2FjaGVDb250ZXh0KS5jb250cm9sbGVyLnNpZ25hbDtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0T3duZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgU3ltYm9sICYmIFN5bWJvbC5mb3IpIHtcbiAgICAgIHZhciBzeW1ib2xGb3IgPSBTeW1ib2wuZm9yO1xuICAgICAgc3ltYm9sRm9yKFwic2VsZWN0b3IuY29tcG9uZW50XCIpO1xuICAgICAgc3ltYm9sRm9yKFwic2VsZWN0b3IuaGFzX3BzZXVkb19jbGFzc1wiKTtcbiAgICAgIHN5bWJvbEZvcihcInNlbGVjdG9yLnJvbGVcIik7XG4gICAgICBzeW1ib2xGb3IoXCJzZWxlY3Rvci50ZXN0X2lkXCIpO1xuICAgICAgc3ltYm9sRm9yKFwic2VsZWN0b3IudGV4dFwiKTtcbiAgICB9XG4gICAgdmFyIGNvbW1pdEhvb2tzID0gW10sXG4gICAgICBQb3NzaWJseVdlYWtNYXAgPSBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBXZWFrTWFwID8gV2Vha01hcCA6IE1hcCxcbiAgICAgIE5vQ29udGV4dCA9IDAsXG4gICAgICBSZW5kZXJDb250ZXh0ID0gMixcbiAgICAgIENvbW1pdENvbnRleHQgPSA0LFxuICAgICAgUm9vdEluUHJvZ3Jlc3MgPSAwLFxuICAgICAgUm9vdEZhdGFsRXJyb3JlZCA9IDEsXG4gICAgICBSb290RXJyb3JlZCA9IDIsXG4gICAgICBSb290U3VzcGVuZGVkID0gMyxcbiAgICAgIFJvb3RTdXNwZW5kZWRXaXRoRGVsYXkgPSA0LFxuICAgICAgUm9vdFN1c3BlbmRlZEF0VGhlU2hlbGwgPSA2LFxuICAgICAgUm9vdENvbXBsZXRlZCA9IDUsXG4gICAgICBleGVjdXRpb25Db250ZXh0ID0gTm9Db250ZXh0LFxuICAgICAgd29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbCxcbiAgICAgIHdvcmtJblByb2dyZXNzID0gbnVsbCxcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gMCxcbiAgICAgIE5vdFN1c3BlbmRlZCA9IDAsXG4gICAgICBTdXNwZW5kZWRPbkVycm9yID0gMSxcbiAgICAgIFN1c3BlbmRlZE9uRGF0YSA9IDIsXG4gICAgICBTdXNwZW5kZWRPbkltbWVkaWF0ZSA9IDMsXG4gICAgICBTdXNwZW5kZWRPbkluc3RhbmNlID0gNCxcbiAgICAgIFN1c3BlbmRlZE9uSW5zdGFuY2VBbmRSZWFkeVRvQ29udGludWUgPSA1LFxuICAgICAgU3VzcGVuZGVkT25EZXByZWNhdGVkVGhyb3dQcm9taXNlID0gNixcbiAgICAgIFN1c3BlbmRlZEFuZFJlYWR5VG9Db250aW51ZSA9IDcsXG4gICAgICBTdXNwZW5kZWRPbkh5ZHJhdGlvbiA9IDgsXG4gICAgICBTdXNwZW5kZWRPbkFjdGlvbiA9IDksXG4gICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IE5vdFN1c3BlbmRlZCxcbiAgICAgIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsLFxuICAgICAgd29ya0luUHJvZ3Jlc3NSb290RGlkU2tpcFN1c3BlbmRlZFNpYmxpbmdzID0gITEsXG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RJc1ByZXJlbmRlcmluZyA9ICExLFxuICAgICAgd29ya0luUHJvZ3Jlc3NSb290RGlkQXR0YWNoUGluZ0xpc3RlbmVyID0gITEsXG4gICAgICBlbnRhbmdsZWRSZW5kZXJMYW5lcyA9IDAsXG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEluUHJvZ3Jlc3MsXG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgPSAwLFxuICAgICAgd29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMgPSAwLFxuICAgICAgd29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMgPSAwLFxuICAgICAgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUgPSAwLFxuICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZXRyeUxhbmVzID0gMCxcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdENvbmN1cnJlbnRFcnJvcnMgPSBudWxsLFxuICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMgPSBudWxsLFxuICAgICAgd29ya0luUHJvZ3Jlc3NSb290RGlkSW5jbHVkZVJlY3Vyc2l2ZVJlbmRlclVwZGF0ZSA9ICExLFxuICAgICAgZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSA9IDAsXG4gICAgICBGQUxMQkFDS19USFJPVFRMRV9NUyA9IDMwMCxcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlclRhcmdldFRpbWUgPSBJbmZpbml0eSxcbiAgICAgIFJFTkRFUl9USU1FT1VUX01TID0gNTAwLFxuICAgICAgd29ya0luUHJvZ3Jlc3NUcmFuc2l0aW9ucyA9IG51bGwsXG4gICAgICBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCA9IG51bGwsXG4gICAgICBJTU1FRElBVEVfQ09NTUlUID0gMCxcbiAgICAgIFNVU1BFTkRFRF9DT01NSVQgPSAxLFxuICAgICAgVEhST1RUTEVEX0NPTU1JVCA9IDIsXG4gICAgICBOT19QRU5ESU5HX0VGRkVDVFMgPSAwLFxuICAgICAgUEVORElOR19NVVRBVElPTl9QSEFTRSA9IDEsXG4gICAgICBQRU5ESU5HX0xBWU9VVF9QSEFTRSA9IDIsXG4gICAgICBQRU5ESU5HX0FGVEVSX01VVEFUSU9OX1BIQVNFID0gMyxcbiAgICAgIFBFTkRJTkdfU1BBV05FRF9XT1JLID0gNCxcbiAgICAgIFBFTkRJTkdfUEFTU0lWRV9QSEFTRSA9IDUsXG4gICAgICBwZW5kaW5nRWZmZWN0c1N0YXR1cyA9IDAsXG4gICAgICBwZW5kaW5nRWZmZWN0c1Jvb3QgPSBudWxsLFxuICAgICAgcGVuZGluZ0ZpbmlzaGVkV29yayA9IG51bGwsXG4gICAgICBwZW5kaW5nRWZmZWN0c0xhbmVzID0gMCxcbiAgICAgIHBlbmRpbmdFZmZlY3RzUmVtYWluaW5nTGFuZXMgPSAwLFxuICAgICAgcGVuZGluZ1Bhc3NpdmVUcmFuc2l0aW9ucyA9IG51bGwsXG4gICAgICBwZW5kaW5nUmVjb3ZlcmFibGVFcnJvcnMgPSBudWxsLFxuICAgICAgTkVTVEVEX1VQREFURV9MSU1JVCA9IDUwLFxuICAgICAgbmVzdGVkVXBkYXRlQ291bnQgPSAwLFxuICAgICAgcm9vdFdpdGhOZXN0ZWRVcGRhdGVzID0gbnVsbCxcbiAgICAgIGlzRmx1c2hpbmdQYXNzaXZlRWZmZWN0cyA9ICExLFxuICAgICAgZGlkU2NoZWR1bGVVcGRhdGVEdXJpbmdQYXNzaXZlRWZmZWN0cyA9ICExLFxuICAgICAgTkVTVEVEX1BBU1NJVkVfVVBEQVRFX0xJTUlUID0gNTAsXG4gICAgICBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPSAwLFxuICAgICAgcm9vdFdpdGhQYXNzaXZlTmVzdGVkVXBkYXRlcyA9IG51bGwsXG4gICAgICBpc1J1bm5pbmdJbnNlcnRpb25FZmZlY3QgPSAhMSxcbiAgICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQgPSBudWxsLFxuICAgICAgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXIgPSAhMTtcbiAgICB2YXIgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXJGb3JBbm90aGVyQ29tcG9uZW50ID0gbmV3IFNldCgpO1xuICAgIHZhciBmYWtlQWN0Q2FsbGJhY2tOb2RlJDEgPSB7fSxcbiAgICAgIGZpcnN0U2NoZWR1bGVkUm9vdCA9IG51bGwsXG4gICAgICBsYXN0U2NoZWR1bGVkUm9vdCA9IG51bGwsXG4gICAgICBkaWRTY2hlZHVsZU1pY3JvdGFzayA9ICExLFxuICAgICAgZGlkU2NoZWR1bGVNaWNyb3Rhc2tfYWN0ID0gITEsXG4gICAgICBtaWdodEhhdmVQZW5kaW5nU3luY1dvcmsgPSAhMSxcbiAgICAgIGlzRmx1c2hpbmdXb3JrID0gITEsXG4gICAgICBjdXJyZW50RXZlbnRUcmFuc2l0aW9uTGFuZSA9IDAsXG4gICAgICBmYWtlQWN0Q2FsbGJhY2tOb2RlID0ge307XG4gICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2ltcGxlRXZlbnRQbHVnaW5FdmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGV2ZW50TmFtZSA9IHNpbXBsZUV2ZW50UGx1Z2luRXZlbnRzW2ldLFxuICAgICAgICAgIGRvbUV2ZW50TmFtZSA9IGV2ZW50TmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBldmVudE5hbWUgPSBldmVudE5hbWVbMF0udG9VcHBlckNhc2UoKSArIGV2ZW50TmFtZS5zbGljZSgxKTtcbiAgICAgICAgcmVnaXN0ZXJTaW1wbGVFdmVudChkb21FdmVudE5hbWUsIFwib25cIiArIGV2ZW50TmFtZSk7XG4gICAgICB9XG4gICAgICByZWdpc3RlclNpbXBsZUV2ZW50KEFOSU1BVElPTl9FTkQsIFwib25BbmltYXRpb25FbmRcIik7XG4gICAgICByZWdpc3RlclNpbXBsZUV2ZW50KEFOSU1BVElPTl9JVEVSQVRJT04sIFwib25BbmltYXRpb25JdGVyYXRpb25cIik7XG4gICAgICByZWdpc3RlclNpbXBsZUV2ZW50KEFOSU1BVElPTl9TVEFSVCwgXCJvbkFuaW1hdGlvblN0YXJ0XCIpO1xuICAgICAgcmVnaXN0ZXJTaW1wbGVFdmVudChcImRibGNsaWNrXCIsIFwib25Eb3VibGVDbGlja1wiKTtcbiAgICAgIHJlZ2lzdGVyU2ltcGxlRXZlbnQoXCJmb2N1c2luXCIsIFwib25Gb2N1c1wiKTtcbiAgICAgIHJlZ2lzdGVyU2ltcGxlRXZlbnQoXCJmb2N1c291dFwiLCBcIm9uQmx1clwiKTtcbiAgICAgIHJlZ2lzdGVyU2ltcGxlRXZlbnQoVFJBTlNJVElPTl9SVU4sIFwib25UcmFuc2l0aW9uUnVuXCIpO1xuICAgICAgcmVnaXN0ZXJTaW1wbGVFdmVudChUUkFOU0lUSU9OX1NUQVJULCBcIm9uVHJhbnNpdGlvblN0YXJ0XCIpO1xuICAgICAgcmVnaXN0ZXJTaW1wbGVFdmVudChUUkFOU0lUSU9OX0NBTkNFTCwgXCJvblRyYW5zaXRpb25DYW5jZWxcIik7XG4gICAgICByZWdpc3RlclNpbXBsZUV2ZW50KFRSQU5TSVRJT05fRU5ELCBcIm9uVHJhbnNpdGlvbkVuZFwiKTtcbiAgICB9KSgpO1xuICAgIHJlZ2lzdGVyRGlyZWN0RXZlbnQoXCJvbk1vdXNlRW50ZXJcIiwgW1wibW91c2VvdXRcIiwgXCJtb3VzZW92ZXJcIl0pO1xuICAgIHJlZ2lzdGVyRGlyZWN0RXZlbnQoXCJvbk1vdXNlTGVhdmVcIiwgW1wibW91c2VvdXRcIiwgXCJtb3VzZW92ZXJcIl0pO1xuICAgIHJlZ2lzdGVyRGlyZWN0RXZlbnQoXCJvblBvaW50ZXJFbnRlclwiLCBbXCJwb2ludGVyb3V0XCIsIFwicG9pbnRlcm92ZXJcIl0pO1xuICAgIHJlZ2lzdGVyRGlyZWN0RXZlbnQoXCJvblBvaW50ZXJMZWF2ZVwiLCBbXCJwb2ludGVyb3V0XCIsIFwicG9pbnRlcm92ZXJcIl0pO1xuICAgIHJlZ2lzdGVyVHdvUGhhc2VFdmVudChcbiAgICAgIFwib25DaGFuZ2VcIixcbiAgICAgIFwiY2hhbmdlIGNsaWNrIGZvY3VzaW4gZm9jdXNvdXQgaW5wdXQga2V5ZG93biBrZXl1cCBzZWxlY3Rpb25jaGFuZ2VcIi5zcGxpdChcbiAgICAgICAgXCIgXCJcbiAgICAgIClcbiAgICApO1xuICAgIHJlZ2lzdGVyVHdvUGhhc2VFdmVudChcbiAgICAgIFwib25TZWxlY3RcIixcbiAgICAgIFwiZm9jdXNvdXQgY29udGV4dG1lbnUgZHJhZ2VuZCBmb2N1c2luIGtleWRvd24ga2V5dXAgbW91c2Vkb3duIG1vdXNldXAgc2VsZWN0aW9uY2hhbmdlXCIuc3BsaXQoXG4gICAgICAgIFwiIFwiXG4gICAgICApXG4gICAgKTtcbiAgICByZWdpc3RlclR3b1BoYXNlRXZlbnQoXCJvbkJlZm9yZUlucHV0XCIsIFtcbiAgICAgIFwiY29tcG9zaXRpb25lbmRcIixcbiAgICAgIFwia2V5cHJlc3NcIixcbiAgICAgIFwidGV4dElucHV0XCIsXG4gICAgICBcInBhc3RlXCJcbiAgICBdKTtcbiAgICByZWdpc3RlclR3b1BoYXNlRXZlbnQoXG4gICAgICBcIm9uQ29tcG9zaXRpb25FbmRcIixcbiAgICAgIFwiY29tcG9zaXRpb25lbmQgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd25cIi5zcGxpdChcIiBcIilcbiAgICApO1xuICAgIHJlZ2lzdGVyVHdvUGhhc2VFdmVudChcbiAgICAgIFwib25Db21wb3NpdGlvblN0YXJ0XCIsXG4gICAgICBcImNvbXBvc2l0aW9uc3RhcnQgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd25cIi5zcGxpdChcIiBcIilcbiAgICApO1xuICAgIHJlZ2lzdGVyVHdvUGhhc2VFdmVudChcbiAgICAgIFwib25Db21wb3NpdGlvblVwZGF0ZVwiLFxuICAgICAgXCJjb21wb3NpdGlvbnVwZGF0ZSBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93blwiLnNwbGl0KFwiIFwiKVxuICAgICk7XG4gICAgdmFyIG1lZGlhRXZlbnRUeXBlcyA9XG4gICAgICAgIFwiYWJvcnQgY2FucGxheSBjYW5wbGF5dGhyb3VnaCBkdXJhdGlvbmNoYW5nZSBlbXB0aWVkIGVuY3J5cHRlZCBlbmRlZCBlcnJvciBsb2FkZWRkYXRhIGxvYWRlZG1ldGFkYXRhIGxvYWRzdGFydCBwYXVzZSBwbGF5IHBsYXlpbmcgcHJvZ3Jlc3MgcmF0ZWNoYW5nZSByZXNpemUgc2Vla2VkIHNlZWtpbmcgc3RhbGxlZCBzdXNwZW5kIHRpbWV1cGRhdGUgdm9sdW1lY2hhbmdlIHdhaXRpbmdcIi5zcGxpdChcbiAgICAgICAgICBcIiBcIlxuICAgICAgICApLFxuICAgICAgbm9uRGVsZWdhdGVkRXZlbnRzID0gbmV3IFNldChcbiAgICAgICAgXCJiZWZvcmV0b2dnbGUgY2FuY2VsIGNsb3NlIGludmFsaWQgbG9hZCBzY3JvbGwgc2Nyb2xsZW5kIHRvZ2dsZVwiXG4gICAgICAgICAgLnNwbGl0KFwiIFwiKVxuICAgICAgICAgIC5jb25jYXQobWVkaWFFdmVudFR5cGVzKVxuICAgICAgKSxcbiAgICAgIGxpc3RlbmluZ01hcmtlciA9IFwiX3JlYWN0TGlzdGVuaW5nXCIgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKSxcbiAgICAgIGRpZFdhcm5Db250cm9sbGVkVG9VbmNvbnRyb2xsZWQgPSAhMSxcbiAgICAgIGRpZFdhcm5VbmNvbnRyb2xsZWRUb0NvbnRyb2xsZWQgPSAhMSxcbiAgICAgIGRpZFdhcm5Gb3JtQWN0aW9uVHlwZSA9ICExLFxuICAgICAgZGlkV2FybkZvcm1BY3Rpb25OYW1lID0gITEsXG4gICAgICBkaWRXYXJuRm9ybUFjdGlvblRhcmdldCA9ICExLFxuICAgICAgZGlkV2FybkZvcm1BY3Rpb25NZXRob2QgPSAhMSxcbiAgICAgIGRpZFdhcm5Qb3BvdmVyVGFyZ2V0T2JqZWN0ID0gITE7XG4gICAgdmFyIGRpZFdhcm5Gb3JOZXdCb29sZWFuUHJvcHNXaXRoRW1wdHlWYWx1ZSA9IHt9O1xuICAgIHZhciBOT1JNQUxJWkVfTkVXTElORVNfUkVHRVggPSAvXFxyXFxuPy9nLFxuICAgICAgTk9STUFMSVpFX05VTExfQU5EX1JFUExBQ0VNRU5UX1JFR0VYID0gL1xcdTAwMDB8XFx1RkZGRC9nLFxuICAgICAgeGxpbmtOYW1lc3BhY2UgPSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgICAgIHhtbE5hbWVzcGFjZSA9IFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIsXG4gICAgICBFWFBFQ1RFRF9GT1JNX0FDVElPTl9VUkwgPVxuICAgICAgICBcImphdmFzY3JpcHQ6dGhyb3cgbmV3IEVycm9yKCdSZWFjdCBmb3JtIHVuZXhwZWN0ZWRseSBzdWJtaXR0ZWQuJylcIixcbiAgICAgIFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HID0gXCJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmdcIixcbiAgICAgIEFDVElWSVRZX1NUQVJUX0RBVEEgPSBcIiZcIixcbiAgICAgIEFDVElWSVRZX0VORF9EQVRBID0gXCIvJlwiLFxuICAgICAgU1VTUEVOU0VfU1RBUlRfREFUQSA9IFwiJFwiLFxuICAgICAgU1VTUEVOU0VfRU5EX0RBVEEgPSBcIi8kXCIsXG4gICAgICBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEEgPSBcIiQ/XCIsXG4gICAgICBTVVNQRU5TRV9RVUVVRURfU1RBUlRfREFUQSA9IFwiJH5cIixcbiAgICAgIFNVU1BFTlNFX0ZBTExCQUNLX1NUQVJUX0RBVEEgPSBcIiQhXCIsXG4gICAgICBQUkVBTUJMRV9DT05UUklCVVRJT05fSFRNTCA9IFwiaHRtbFwiLFxuICAgICAgUFJFQU1CTEVfQ09OVFJJQlVUSU9OX0JPRFkgPSBcImJvZHlcIixcbiAgICAgIFBSRUFNQkxFX0NPTlRSSUJVVElPTl9IRUFEID0gXCJoZWFkXCIsXG4gICAgICBGT1JNX1NUQVRFX0lTX01BVENISU5HID0gXCJGIVwiLFxuICAgICAgRk9STV9TVEFURV9JU19OT1RfTUFUQ0hJTkcgPSBcIkZcIixcbiAgICAgIERPQ1VNRU5UX1JFQURZX1NUQVRFX0xPQURJTkcgPSBcImxvYWRpbmdcIixcbiAgICAgIFNUWUxFID0gXCJzdHlsZVwiLFxuICAgICAgSG9zdENvbnRleHROYW1lc3BhY2VOb25lID0gMCxcbiAgICAgIEhvc3RDb250ZXh0TmFtZXNwYWNlU3ZnID0gMSxcbiAgICAgIEhvc3RDb250ZXh0TmFtZXNwYWNlTWF0aCA9IDIsXG4gICAgICBldmVudHNFbmFibGVkID0gbnVsbCxcbiAgICAgIHNlbGVjdGlvbkluZm9ybWF0aW9uID0gbnVsbCxcbiAgICAgIHdhcm5lZFVua25vd25UYWdzID0geyBkaWFsb2c6ICEwLCB3ZWJ2aWV3OiAhMCB9LFxuICAgICAgY3VycmVudFBvcHN0YXRlVHJhbnNpdGlvbkV2ZW50ID0gbnVsbCxcbiAgICAgIHNjaGVkdWxlVGltZW91dCA9IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHNldFRpbWVvdXQgPyBzZXRUaW1lb3V0IDogdm9pZCAwLFxuICAgICAgY2FuY2VsVGltZW91dCA9XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGNsZWFyVGltZW91dCA/IGNsZWFyVGltZW91dCA6IHZvaWQgMCxcbiAgICAgIG5vVGltZW91dCA9IC0xLFxuICAgICAgbG9jYWxQcm9taXNlID0gXCJmdW5jdGlvblwiID09PSB0eXBlb2YgUHJvbWlzZSA/IFByb21pc2UgOiB2b2lkIDAsXG4gICAgICBzY2hlZHVsZU1pY3JvdGFzayA9XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHF1ZXVlTWljcm90YXNrXG4gICAgICAgICAgPyBxdWV1ZU1pY3JvdGFza1xuICAgICAgICAgIDogXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIGxvY2FsUHJvbWlzZVxuICAgICAgICAgICAgPyBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxQcm9taXNlXG4gICAgICAgICAgICAgICAgICAucmVzb2x2ZShudWxsKVxuICAgICAgICAgICAgICAgICAgLnRoZW4oY2FsbGJhY2spXG4gICAgICAgICAgICAgICAgICAuY2F0Y2goaGFuZGxlRXJyb3JJbk5leHRUaWNrKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBzY2hlZHVsZVRpbWVvdXQsXG4gICAgICBwcmV2aW91c0h5ZHJhdGFibGVPbkVudGVyaW5nU2NvcGVkU2luZ2xldG9uID0gbnVsbCxcbiAgICAgIE5vdExvYWRlZCA9IDAsXG4gICAgICBMb2FkZWQgPSAxLFxuICAgICAgRXJyb3JlZCA9IDIsXG4gICAgICBTZXR0bGVkID0gMyxcbiAgICAgIEluc2VydGVkID0gNCxcbiAgICAgIHByZWxvYWRQcm9wc01hcCA9IG5ldyBNYXAoKSxcbiAgICAgIHByZWNvbm5lY3RzU2V0ID0gbmV3IFNldCgpLFxuICAgICAgcHJldmlvdXNEaXNwYXRjaGVyID0gUmVhY3RET01TaGFyZWRJbnRlcm5hbHMuZDtcbiAgICBSZWFjdERPTVNoYXJlZEludGVybmFscy5kID0ge1xuICAgICAgZjogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcHJldmlvdXNXYXNSZW5kZXJpbmcgPSBwcmV2aW91c0Rpc3BhdGNoZXIuZigpLFxuICAgICAgICAgIHdhc1JlbmRlcmluZyA9IGZsdXNoU3luY1dvcmskMSgpO1xuICAgICAgICByZXR1cm4gcHJldmlvdXNXYXNSZW5kZXJpbmcgfHwgd2FzUmVuZGVyaW5nO1xuICAgICAgfSxcbiAgICAgIHI6IGZ1bmN0aW9uIChmb3JtKSB7XG4gICAgICAgIHZhciBmb3JtSW5zdCA9IGdldEluc3RhbmNlRnJvbU5vZGUoZm9ybSk7XG4gICAgICAgIG51bGwgIT09IGZvcm1JbnN0ICYmIDUgPT09IGZvcm1JbnN0LnRhZyAmJiBcImZvcm1cIiA9PT0gZm9ybUluc3QudHlwZVxuICAgICAgICAgID8gcmVxdWVzdEZvcm1SZXNldCQxKGZvcm1JbnN0KVxuICAgICAgICAgIDogcHJldmlvdXNEaXNwYXRjaGVyLnIoZm9ybSk7XG4gICAgICB9LFxuICAgICAgRDogZnVuY3Rpb24gKGhyZWYpIHtcbiAgICAgICAgcHJldmlvdXNEaXNwYXRjaGVyLkQoaHJlZik7XG4gICAgICAgIHByZWNvbm5lY3RBcyhcImRucy1wcmVmZXRjaFwiLCBocmVmLCBudWxsKTtcbiAgICAgIH0sXG4gICAgICBDOiBmdW5jdGlvbiAoaHJlZiwgY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgcHJldmlvdXNEaXNwYXRjaGVyLkMoaHJlZiwgY3Jvc3NPcmlnaW4pO1xuICAgICAgICBwcmVjb25uZWN0QXMoXCJwcmVjb25uZWN0XCIsIGhyZWYsIGNyb3NzT3JpZ2luKTtcbiAgICAgIH0sXG4gICAgICBMOiBmdW5jdGlvbiAoaHJlZiwgYXMsIG9wdGlvbnMpIHtcbiAgICAgICAgcHJldmlvdXNEaXNwYXRjaGVyLkwoaHJlZiwgYXMsIG9wdGlvbnMpO1xuICAgICAgICB2YXIgb3duZXJEb2N1bWVudCA9IGdsb2JhbERvY3VtZW50O1xuICAgICAgICBpZiAob3duZXJEb2N1bWVudCAmJiBocmVmICYmIGFzKSB7XG4gICAgICAgICAgdmFyIHByZWxvYWRTZWxlY3RvciA9XG4gICAgICAgICAgICAnbGlua1tyZWw9XCJwcmVsb2FkXCJdW2FzPVwiJyArXG4gICAgICAgICAgICBlc2NhcGVTZWxlY3RvckF0dHJpYnV0ZVZhbHVlSW5zaWRlRG91YmxlUXVvdGVzKGFzKSArXG4gICAgICAgICAgICAnXCJdJztcbiAgICAgICAgICBcImltYWdlXCIgPT09IGFzXG4gICAgICAgICAgICA/IG9wdGlvbnMgJiYgb3B0aW9ucy5pbWFnZVNyY1NldFxuICAgICAgICAgICAgICA/ICgocHJlbG9hZFNlbGVjdG9yICs9XG4gICAgICAgICAgICAgICAgICAnW2ltYWdlc3Jjc2V0PVwiJyArXG4gICAgICAgICAgICAgICAgICBlc2NhcGVTZWxlY3RvckF0dHJpYnV0ZVZhbHVlSW5zaWRlRG91YmxlUXVvdGVzKFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmltYWdlU3JjU2V0XG4gICAgICAgICAgICAgICAgICApICtcbiAgICAgICAgICAgICAgICAgICdcIl0nKSxcbiAgICAgICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5pbWFnZVNpemVzICYmXG4gICAgICAgICAgICAgICAgICAocHJlbG9hZFNlbGVjdG9yICs9XG4gICAgICAgICAgICAgICAgICAgICdbaW1hZ2VzaXplcz1cIicgK1xuICAgICAgICAgICAgICAgICAgICBlc2NhcGVTZWxlY3RvckF0dHJpYnV0ZVZhbHVlSW5zaWRlRG91YmxlUXVvdGVzKFxuICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuaW1hZ2VTaXplc1xuICAgICAgICAgICAgICAgICAgICApICtcbiAgICAgICAgICAgICAgICAgICAgJ1wiXScpKVxuICAgICAgICAgICAgICA6IChwcmVsb2FkU2VsZWN0b3IgKz1cbiAgICAgICAgICAgICAgICAgICdbaHJlZj1cIicgK1xuICAgICAgICAgICAgICAgICAgZXNjYXBlU2VsZWN0b3JBdHRyaWJ1dGVWYWx1ZUluc2lkZURvdWJsZVF1b3RlcyhocmVmKSArXG4gICAgICAgICAgICAgICAgICAnXCJdJylcbiAgICAgICAgICAgIDogKHByZWxvYWRTZWxlY3RvciArPVxuICAgICAgICAgICAgICAgICdbaHJlZj1cIicgK1xuICAgICAgICAgICAgICAgIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXMoaHJlZikgK1xuICAgICAgICAgICAgICAgICdcIl0nKTtcbiAgICAgICAgICB2YXIga2V5ID0gcHJlbG9hZFNlbGVjdG9yO1xuICAgICAgICAgIHN3aXRjaCAoYXMpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzdHlsZVwiOlxuICAgICAgICAgICAgICBrZXkgPSBnZXRTdHlsZUtleShocmVmKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwic2NyaXB0XCI6XG4gICAgICAgICAgICAgIGtleSA9IGdldFNjcmlwdEtleShocmVmKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJlbG9hZFByb3BzTWFwLmhhcyhrZXkpIHx8XG4gICAgICAgICAgICAoKGhyZWYgPSBhc3NpZ24oXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZWw6IFwicHJlbG9hZFwiLFxuICAgICAgICAgICAgICAgIGhyZWY6XG4gICAgICAgICAgICAgICAgICBcImltYWdlXCIgPT09IGFzICYmIG9wdGlvbnMgJiYgb3B0aW9ucy5pbWFnZVNyY1NldFxuICAgICAgICAgICAgICAgICAgICA/IHZvaWQgMFxuICAgICAgICAgICAgICAgICAgICA6IGhyZWYsXG4gICAgICAgICAgICAgICAgYXM6IGFzXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgcHJlbG9hZFByb3BzTWFwLnNldChrZXksIGhyZWYpLFxuICAgICAgICAgICAgbnVsbCAhPT0gb3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKHByZWxvYWRTZWxlY3RvcikgfHxcbiAgICAgICAgICAgICAgKFwic3R5bGVcIiA9PT0gYXMgJiZcbiAgICAgICAgICAgICAgICBvd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICAgICAgICBnZXRTdHlsZXNoZWV0U2VsZWN0b3JGcm9tS2V5KGtleSlcbiAgICAgICAgICAgICAgICApKSB8fFxuICAgICAgICAgICAgICAoXCJzY3JpcHRcIiA9PT0gYXMgJiZcbiAgICAgICAgICAgICAgICBvd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZ2V0U2NyaXB0U2VsZWN0b3JGcm9tS2V5KGtleSkpKSB8fFxuICAgICAgICAgICAgICAoKGFzID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKSksXG4gICAgICAgICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKGFzLCBcImxpbmtcIiwgaHJlZiksXG4gICAgICAgICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUoYXMpLFxuICAgICAgICAgICAgICBvd25lckRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoYXMpKSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBtOiBmdW5jdGlvbiAoaHJlZiwgb3B0aW9ucykge1xuICAgICAgICBwcmV2aW91c0Rpc3BhdGNoZXIubShocmVmLCBvcHRpb25zKTtcbiAgICAgICAgdmFyIG93bmVyRG9jdW1lbnQgPSBnbG9iYWxEb2N1bWVudDtcbiAgICAgICAgaWYgKG93bmVyRG9jdW1lbnQgJiYgaHJlZikge1xuICAgICAgICAgIHZhciBhcyA9XG4gICAgICAgICAgICAgIG9wdGlvbnMgJiYgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMuYXMgPyBvcHRpb25zLmFzIDogXCJzY3JpcHRcIixcbiAgICAgICAgICAgIHByZWxvYWRTZWxlY3RvciA9XG4gICAgICAgICAgICAgICdsaW5rW3JlbD1cIm1vZHVsZXByZWxvYWRcIl1bYXM9XCInICtcbiAgICAgICAgICAgICAgZXNjYXBlU2VsZWN0b3JBdHRyaWJ1dGVWYWx1ZUluc2lkZURvdWJsZVF1b3RlcyhhcykgK1xuICAgICAgICAgICAgICAnXCJdW2hyZWY9XCInICtcbiAgICAgICAgICAgICAgZXNjYXBlU2VsZWN0b3JBdHRyaWJ1dGVWYWx1ZUluc2lkZURvdWJsZVF1b3RlcyhocmVmKSArXG4gICAgICAgICAgICAgICdcIl0nLFxuICAgICAgICAgICAga2V5ID0gcHJlbG9hZFNlbGVjdG9yO1xuICAgICAgICAgIHN3aXRjaCAoYXMpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhdWRpb3dvcmtsZXRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJwYWludHdvcmtsZXRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzZXJ2aWNld29ya2VyXCI6XG4gICAgICAgICAgICBjYXNlIFwic2hhcmVkd29ya2VyXCI6XG4gICAgICAgICAgICBjYXNlIFwid29ya2VyXCI6XG4gICAgICAgICAgICBjYXNlIFwic2NyaXB0XCI6XG4gICAgICAgICAgICAgIGtleSA9IGdldFNjcmlwdEtleShocmVmKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXByZWxvYWRQcm9wc01hcC5oYXMoa2V5KSAmJlxuICAgICAgICAgICAgKChocmVmID0gYXNzaWduKHsgcmVsOiBcIm1vZHVsZXByZWxvYWRcIiwgaHJlZjogaHJlZiB9LCBvcHRpb25zKSksXG4gICAgICAgICAgICBwcmVsb2FkUHJvcHNNYXAuc2V0KGtleSwgaHJlZiksXG4gICAgICAgICAgICBudWxsID09PSBvd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IocHJlbG9hZFNlbGVjdG9yKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHN3aXRjaCAoYXMpIHtcbiAgICAgICAgICAgICAgY2FzZSBcImF1ZGlvd29ya2xldFwiOlxuICAgICAgICAgICAgICBjYXNlIFwicGFpbnR3b3JrbGV0XCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJzZXJ2aWNld29ya2VyXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJzaGFyZWR3b3JrZXJcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIndvcmtlclwiOlxuICAgICAgICAgICAgICBjYXNlIFwic2NyaXB0XCI6XG4gICAgICAgICAgICAgICAgaWYgKG93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvcihnZXRTY3JpcHRTZWxlY3RvckZyb21LZXkoa2V5KSkpXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhcyA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIik7XG4gICAgICAgICAgICBzZXRJbml0aWFsUHJvcGVydGllcyhhcywgXCJsaW5rXCIsIGhyZWYpO1xuICAgICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShhcyk7XG4gICAgICAgICAgICBvd25lckRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoYXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFg6IGZ1bmN0aW9uIChzcmMsIG9wdGlvbnMpIHtcbiAgICAgICAgcHJldmlvdXNEaXNwYXRjaGVyLlgoc3JjLCBvcHRpb25zKTtcbiAgICAgICAgdmFyIG93bmVyRG9jdW1lbnQgPSBnbG9iYWxEb2N1bWVudDtcbiAgICAgICAgaWYgKG93bmVyRG9jdW1lbnQgJiYgc3JjKSB7XG4gICAgICAgICAgdmFyIHNjcmlwdHMgPSBnZXRSZXNvdXJjZXNGcm9tUm9vdChvd25lckRvY3VtZW50KS5ob2lzdGFibGVTY3JpcHRzLFxuICAgICAgICAgICAga2V5ID0gZ2V0U2NyaXB0S2V5KHNyYyksXG4gICAgICAgICAgICByZXNvdXJjZSA9IHNjcmlwdHMuZ2V0KGtleSk7XG4gICAgICAgICAgcmVzb3VyY2UgfHxcbiAgICAgICAgICAgICgocmVzb3VyY2UgPSBvd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICAgIGdldFNjcmlwdFNlbGVjdG9yRnJvbUtleShrZXkpXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIHJlc291cmNlIHx8XG4gICAgICAgICAgICAgICgoc3JjID0gYXNzaWduKHsgc3JjOiBzcmMsIGFzeW5jOiAhMCB9LCBvcHRpb25zKSksXG4gICAgICAgICAgICAgIChvcHRpb25zID0gcHJlbG9hZFByb3BzTWFwLmdldChrZXkpKSAmJlxuICAgICAgICAgICAgICAgIGFkb3B0UHJlbG9hZFByb3BzRm9yU2NyaXB0KHNyYywgb3B0aW9ucyksXG4gICAgICAgICAgICAgIChyZXNvdXJjZSA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSksXG4gICAgICAgICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUocmVzb3VyY2UpLFxuICAgICAgICAgICAgICBzZXRJbml0aWFsUHJvcGVydGllcyhyZXNvdXJjZSwgXCJsaW5rXCIsIHNyYyksXG4gICAgICAgICAgICAgIG93bmVyRG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChyZXNvdXJjZSkpLFxuICAgICAgICAgICAgKHJlc291cmNlID0ge1xuICAgICAgICAgICAgICB0eXBlOiBcInNjcmlwdFwiLFxuICAgICAgICAgICAgICBpbnN0YW5jZTogcmVzb3VyY2UsXG4gICAgICAgICAgICAgIGNvdW50OiAxLFxuICAgICAgICAgICAgICBzdGF0ZTogbnVsbFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBzY3JpcHRzLnNldChrZXksIHJlc291cmNlKSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBTOiBmdW5jdGlvbiAoaHJlZiwgcHJlY2VkZW5jZSwgb3B0aW9ucykge1xuICAgICAgICBwcmV2aW91c0Rpc3BhdGNoZXIuUyhocmVmLCBwcmVjZWRlbmNlLCBvcHRpb25zKTtcbiAgICAgICAgdmFyIG93bmVyRG9jdW1lbnQgPSBnbG9iYWxEb2N1bWVudDtcbiAgICAgICAgaWYgKG93bmVyRG9jdW1lbnQgJiYgaHJlZikge1xuICAgICAgICAgIHZhciBzdHlsZXMgPSBnZXRSZXNvdXJjZXNGcm9tUm9vdChvd25lckRvY3VtZW50KS5ob2lzdGFibGVTdHlsZXMsXG4gICAgICAgICAgICBrZXkgPSBnZXRTdHlsZUtleShocmVmKTtcbiAgICAgICAgICBwcmVjZWRlbmNlID0gcHJlY2VkZW5jZSB8fCBcImRlZmF1bHRcIjtcbiAgICAgICAgICB2YXIgcmVzb3VyY2UgPSBzdHlsZXMuZ2V0KGtleSk7XG4gICAgICAgICAgaWYgKCFyZXNvdXJjZSkge1xuICAgICAgICAgICAgdmFyIHN0YXRlID0geyBsb2FkaW5nOiBOb3RMb2FkZWQsIHByZWxvYWQ6IG51bGwgfTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKHJlc291cmNlID0gb3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgICAgIGdldFN0eWxlc2hlZXRTZWxlY3RvckZyb21LZXkoa2V5KVxuICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzdGF0ZS5sb2FkaW5nID0gTG9hZGVkIHwgSW5zZXJ0ZWQ7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgaHJlZiA9IGFzc2lnbihcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICByZWw6IFwic3R5bGVzaGVldFwiLFxuICAgICAgICAgICAgICAgICAgaHJlZjogaHJlZixcbiAgICAgICAgICAgICAgICAgIFwiZGF0YS1wcmVjZWRlbmNlXCI6IHByZWNlZGVuY2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgKG9wdGlvbnMgPSBwcmVsb2FkUHJvcHNNYXAuZ2V0KGtleSkpICYmXG4gICAgICAgICAgICAgICAgYWRvcHRQcmVsb2FkUHJvcHNGb3JTdHlsZXNoZWV0KGhyZWYsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICB2YXIgbGluayA9IChyZXNvdXJjZSA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIikpO1xuICAgICAgICAgICAgICBtYXJrTm9kZUFzSG9pc3RhYmxlKGxpbmspO1xuICAgICAgICAgICAgICBzZXRJbml0aWFsUHJvcGVydGllcyhsaW5rLCBcImxpbmtcIiwgaHJlZik7XG4gICAgICAgICAgICAgIGxpbmsuX3AgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgbGluay5vbmxvYWQgPSByZXNvbHZlO1xuICAgICAgICAgICAgICAgIGxpbmsub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN0YXRlLmxvYWRpbmcgfD0gTG9hZGVkO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgbGluay5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN0YXRlLmxvYWRpbmcgfD0gRXJyb3JlZDtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHN0YXRlLmxvYWRpbmcgfD0gSW5zZXJ0ZWQ7XG4gICAgICAgICAgICAgIGluc2VydFN0eWxlc2hlZXQocmVzb3VyY2UsIHByZWNlZGVuY2UsIG93bmVyRG9jdW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb3VyY2UgPSB7XG4gICAgICAgICAgICAgIHR5cGU6IFwic3R5bGVzaGVldFwiLFxuICAgICAgICAgICAgICBpbnN0YW5jZTogcmVzb3VyY2UsXG4gICAgICAgICAgICAgIGNvdW50OiAxLFxuICAgICAgICAgICAgICBzdGF0ZTogc3RhdGVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBzdHlsZXMuc2V0KGtleSwgcmVzb3VyY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIE06IGZ1bmN0aW9uIChzcmMsIG9wdGlvbnMpIHtcbiAgICAgICAgcHJldmlvdXNEaXNwYXRjaGVyLk0oc3JjLCBvcHRpb25zKTtcbiAgICAgICAgdmFyIG93bmVyRG9jdW1lbnQgPSBnbG9iYWxEb2N1bWVudDtcbiAgICAgICAgaWYgKG93bmVyRG9jdW1lbnQgJiYgc3JjKSB7XG4gICAgICAgICAgdmFyIHNjcmlwdHMgPSBnZXRSZXNvdXJjZXNGcm9tUm9vdChvd25lckRvY3VtZW50KS5ob2lzdGFibGVTY3JpcHRzLFxuICAgICAgICAgICAga2V5ID0gZ2V0U2NyaXB0S2V5KHNyYyksXG4gICAgICAgICAgICByZXNvdXJjZSA9IHNjcmlwdHMuZ2V0KGtleSk7XG4gICAgICAgICAgcmVzb3VyY2UgfHxcbiAgICAgICAgICAgICgocmVzb3VyY2UgPSBvd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICAgIGdldFNjcmlwdFNlbGVjdG9yRnJvbUtleShrZXkpXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIHJlc291cmNlIHx8XG4gICAgICAgICAgICAgICgoc3JjID0gYXNzaWduKHsgc3JjOiBzcmMsIGFzeW5jOiAhMCwgdHlwZTogXCJtb2R1bGVcIiB9LCBvcHRpb25zKSksXG4gICAgICAgICAgICAgIChvcHRpb25zID0gcHJlbG9hZFByb3BzTWFwLmdldChrZXkpKSAmJlxuICAgICAgICAgICAgICAgIGFkb3B0UHJlbG9hZFByb3BzRm9yU2NyaXB0KHNyYywgb3B0aW9ucyksXG4gICAgICAgICAgICAgIChyZXNvdXJjZSA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSksXG4gICAgICAgICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUocmVzb3VyY2UpLFxuICAgICAgICAgICAgICBzZXRJbml0aWFsUHJvcGVydGllcyhyZXNvdXJjZSwgXCJsaW5rXCIsIHNyYyksXG4gICAgICAgICAgICAgIG93bmVyRG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChyZXNvdXJjZSkpLFxuICAgICAgICAgICAgKHJlc291cmNlID0ge1xuICAgICAgICAgICAgICB0eXBlOiBcInNjcmlwdFwiLFxuICAgICAgICAgICAgICBpbnN0YW5jZTogcmVzb3VyY2UsXG4gICAgICAgICAgICAgIGNvdW50OiAxLFxuICAgICAgICAgICAgICBzdGF0ZTogbnVsbFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBzY3JpcHRzLnNldChrZXksIHJlc291cmNlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBnbG9iYWxEb2N1bWVudCA9IFwidW5kZWZpbmVkXCIgPT09IHR5cGVvZiBkb2N1bWVudCA/IG51bGwgOiBkb2N1bWVudCxcbiAgICAgIHRhZ0NhY2hlcyA9IG51bGwsXG4gICAgICBzdXNwZW5kZWRTdGF0ZSA9IG51bGwsXG4gICAgICBMQVNUX1BSRUNFREVOQ0UgPSBudWxsLFxuICAgICAgcHJlY2VkZW5jZXNCeVJvb3QgPSBudWxsLFxuICAgICAgTm90UGVuZGluZ1RyYW5zaXRpb24gPSBOb3RQZW5kaW5nLFxuICAgICAgSG9zdFRyYW5zaXRpb25Db250ZXh0ID0ge1xuICAgICAgICAkJHR5cGVvZjogUkVBQ1RfQ09OVEVYVF9UWVBFLFxuICAgICAgICBQcm92aWRlcjogbnVsbCxcbiAgICAgICAgQ29uc3VtZXI6IG51bGwsXG4gICAgICAgIF9jdXJyZW50VmFsdWU6IE5vdFBlbmRpbmdUcmFuc2l0aW9uLFxuICAgICAgICBfY3VycmVudFZhbHVlMjogTm90UGVuZGluZ1RyYW5zaXRpb24sXG4gICAgICAgIF90aHJlYWRDb3VudDogMFxuICAgICAgfSxcbiAgICAgIGJhZGdlRm9ybWF0ID0gXCIlYyVzJWMgXCIsXG4gICAgICBiYWRnZVN0eWxlID1cbiAgICAgICAgXCJiYWNrZ3JvdW5kOiAjZTZlNmU2O2JhY2tncm91bmQ6IGxpZ2h0LWRhcmsocmdiYSgwLDAsMCwwLjEpLCByZ2JhKDI1NSwyNTUsMjU1LDAuMjUpKTtjb2xvcjogIzAwMDAwMDtjb2xvcjogbGlnaHQtZGFyaygjMDAwMDAwLCAjZmZmZmZmKTtib3JkZXItcmFkaXVzOiAycHhcIixcbiAgICAgIHJlc2V0U3R5bGUgPSBcIlwiLFxuICAgICAgcGFkID0gXCIgXCIsXG4gICAgICBiaW5kID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7XG4gICAgdmFyIGRpZFdhcm5BYm91dE5lc3RlZFVwZGF0ZXMgPSAhMTtcbiAgICB2YXIgb3ZlcnJpZGVIb29rU3RhdGUgPSBudWxsLFxuICAgICAgb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoID0gbnVsbCxcbiAgICAgIG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aCA9IG51bGwsXG4gICAgICBvdmVycmlkZVByb3BzID0gbnVsbCxcbiAgICAgIG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoID0gbnVsbCxcbiAgICAgIG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoID0gbnVsbCxcbiAgICAgIHNjaGVkdWxlVXBkYXRlID0gbnVsbCxcbiAgICAgIHNldEVycm9ySGFuZGxlciA9IG51bGwsXG4gICAgICBzZXRTdXNwZW5zZUhhbmRsZXIgPSBudWxsO1xuICAgIG92ZXJyaWRlSG9va1N0YXRlID0gZnVuY3Rpb24gKGZpYmVyLCBpZCwgcGF0aCwgdmFsdWUpIHtcbiAgICAgIGlkID0gZmluZEhvb2soZmliZXIsIGlkKTtcbiAgICAgIG51bGwgIT09IGlkICYmXG4gICAgICAgICgocGF0aCA9IGNvcHlXaXRoU2V0SW1wbChpZC5tZW1vaXplZFN0YXRlLCBwYXRoLCAwLCB2YWx1ZSkpLFxuICAgICAgICAoaWQubWVtb2l6ZWRTdGF0ZSA9IHBhdGgpLFxuICAgICAgICAoaWQuYmFzZVN0YXRlID0gcGF0aCksXG4gICAgICAgIChmaWJlci5tZW1vaXplZFByb3BzID0gYXNzaWduKHt9LCBmaWJlci5tZW1vaXplZFByb3BzKSksXG4gICAgICAgIChwYXRoID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCAyKSksXG4gICAgICAgIG51bGwgIT09IHBhdGggJiYgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHBhdGgsIGZpYmVyLCAyKSk7XG4gICAgfTtcbiAgICBvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGggPSBmdW5jdGlvbiAoZmliZXIsIGlkLCBwYXRoKSB7XG4gICAgICBpZCA9IGZpbmRIb29rKGZpYmVyLCBpZCk7XG4gICAgICBudWxsICE9PSBpZCAmJlxuICAgICAgICAoKHBhdGggPSBjb3B5V2l0aERlbGV0ZUltcGwoaWQubWVtb2l6ZWRTdGF0ZSwgcGF0aCwgMCkpLFxuICAgICAgICAoaWQubWVtb2l6ZWRTdGF0ZSA9IHBhdGgpLFxuICAgICAgICAoaWQuYmFzZVN0YXRlID0gcGF0aCksXG4gICAgICAgIChmaWJlci5tZW1vaXplZFByb3BzID0gYXNzaWduKHt9LCBmaWJlci5tZW1vaXplZFByb3BzKSksXG4gICAgICAgIChwYXRoID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCAyKSksXG4gICAgICAgIG51bGwgIT09IHBhdGggJiYgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHBhdGgsIGZpYmVyLCAyKSk7XG4gICAgfTtcbiAgICBvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGggPSBmdW5jdGlvbiAoZmliZXIsIGlkLCBvbGRQYXRoLCBuZXdQYXRoKSB7XG4gICAgICBpZCA9IGZpbmRIb29rKGZpYmVyLCBpZCk7XG4gICAgICBudWxsICE9PSBpZCAmJlxuICAgICAgICAoKG9sZFBhdGggPSBjb3B5V2l0aFJlbmFtZShpZC5tZW1vaXplZFN0YXRlLCBvbGRQYXRoLCBuZXdQYXRoKSksXG4gICAgICAgIChpZC5tZW1vaXplZFN0YXRlID0gb2xkUGF0aCksXG4gICAgICAgIChpZC5iYXNlU3RhdGUgPSBvbGRQYXRoKSxcbiAgICAgICAgKGZpYmVyLm1lbW9pemVkUHJvcHMgPSBhc3NpZ24oe30sIGZpYmVyLm1lbW9pemVkUHJvcHMpKSxcbiAgICAgICAgKG9sZFBhdGggPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIDIpKSxcbiAgICAgICAgbnVsbCAhPT0gb2xkUGF0aCAmJiBzY2hlZHVsZVVwZGF0ZU9uRmliZXIob2xkUGF0aCwgZmliZXIsIDIpKTtcbiAgICB9O1xuICAgIG92ZXJyaWRlUHJvcHMgPSBmdW5jdGlvbiAoZmliZXIsIHBhdGgsIHZhbHVlKSB7XG4gICAgICBmaWJlci5wZW5kaW5nUHJvcHMgPSBjb3B5V2l0aFNldEltcGwoZmliZXIubWVtb2l6ZWRQcm9wcywgcGF0aCwgMCwgdmFsdWUpO1xuICAgICAgZmliZXIuYWx0ZXJuYXRlICYmIChmaWJlci5hbHRlcm5hdGUucGVuZGluZ1Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzKTtcbiAgICAgIHBhdGggPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIDIpO1xuICAgICAgbnVsbCAhPT0gcGF0aCAmJiBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocGF0aCwgZmliZXIsIDIpO1xuICAgIH07XG4gICAgb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGggPSBmdW5jdGlvbiAoZmliZXIsIHBhdGgpIHtcbiAgICAgIGZpYmVyLnBlbmRpbmdQcm9wcyA9IGNvcHlXaXRoRGVsZXRlSW1wbChmaWJlci5tZW1vaXplZFByb3BzLCBwYXRoLCAwKTtcbiAgICAgIGZpYmVyLmFsdGVybmF0ZSAmJiAoZmliZXIuYWx0ZXJuYXRlLnBlbmRpbmdQcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcyk7XG4gICAgICBwYXRoID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCAyKTtcbiAgICAgIG51bGwgIT09IHBhdGggJiYgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHBhdGgsIGZpYmVyLCAyKTtcbiAgICB9O1xuICAgIG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoID0gZnVuY3Rpb24gKGZpYmVyLCBvbGRQYXRoLCBuZXdQYXRoKSB7XG4gICAgICBmaWJlci5wZW5kaW5nUHJvcHMgPSBjb3B5V2l0aFJlbmFtZShcbiAgICAgICAgZmliZXIubWVtb2l6ZWRQcm9wcyxcbiAgICAgICAgb2xkUGF0aCxcbiAgICAgICAgbmV3UGF0aFxuICAgICAgKTtcbiAgICAgIGZpYmVyLmFsdGVybmF0ZSAmJiAoZmliZXIuYWx0ZXJuYXRlLnBlbmRpbmdQcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcyk7XG4gICAgICBvbGRQYXRoID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCAyKTtcbiAgICAgIG51bGwgIT09IG9sZFBhdGggJiYgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKG9sZFBhdGgsIGZpYmVyLCAyKTtcbiAgICB9O1xuICAgIHNjaGVkdWxlVXBkYXRlID0gZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICB2YXIgcm9vdCA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShmaWJlciwgMik7XG4gICAgICBudWxsICE9PSByb290ICYmIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgMik7XG4gICAgfTtcbiAgICBzZXRFcnJvckhhbmRsZXIgPSBmdW5jdGlvbiAobmV3U2hvdWxkRXJyb3JJbXBsKSB7XG4gICAgICBzaG91bGRFcnJvckltcGwgPSBuZXdTaG91bGRFcnJvckltcGw7XG4gICAgfTtcbiAgICBzZXRTdXNwZW5zZUhhbmRsZXIgPSBmdW5jdGlvbiAobmV3U2hvdWxkU3VzcGVuZEltcGwpIHtcbiAgICAgIHNob3VsZFN1c3BlbmRJbXBsID0gbmV3U2hvdWxkU3VzcGVuZEltcGw7XG4gICAgfTtcbiAgICB2YXIgX2VuYWJsZWQgPSAhMCxcbiAgICAgIHJldHVybl90YXJnZXRJbnN0ID0gbnVsbCxcbiAgICAgIGhhc1NjaGVkdWxlZFJlcGxheUF0dGVtcHQgPSAhMSxcbiAgICAgIHF1ZXVlZEZvY3VzID0gbnVsbCxcbiAgICAgIHF1ZXVlZERyYWcgPSBudWxsLFxuICAgICAgcXVldWVkTW91c2UgPSBudWxsLFxuICAgICAgcXVldWVkUG9pbnRlcnMgPSBuZXcgTWFwKCksXG4gICAgICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMgPSBuZXcgTWFwKCksXG4gICAgICBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHMgPSBbXSxcbiAgICAgIGRpc2NyZXRlUmVwbGF5YWJsZUV2ZW50cyA9XG4gICAgICAgIFwibW91c2Vkb3duIG1vdXNldXAgdG91Y2hjYW5jZWwgdG91Y2hlbmQgdG91Y2hzdGFydCBhdXhjbGljayBkYmxjbGljayBwb2ludGVyY2FuY2VsIHBvaW50ZXJkb3duIHBvaW50ZXJ1cCBkcmFnZW5kIGRyYWdzdGFydCBkcm9wIGNvbXBvc2l0aW9uZW5kIGNvbXBvc2l0aW9uc3RhcnQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBpbnB1dCB0ZXh0SW5wdXQgY29weSBjdXQgcGFzdGUgY2xpY2sgY2hhbmdlIGNvbnRleHRtZW51IHJlc2V0XCIuc3BsaXQoXG4gICAgICAgICAgXCIgXCJcbiAgICAgICAgKSxcbiAgICAgIGxhc3RTY2hlZHVsZWRSZXBsYXlRdWV1ZSA9IG51bGw7XG4gICAgUmVhY3RET01IeWRyYXRpb25Sb290LnByb3RvdHlwZS5yZW5kZXIgPSBSZWFjdERPTVJvb3QucHJvdG90eXBlLnJlbmRlciA9XG4gICAgICBmdW5jdGlvbiAoY2hpbGRyZW4pIHtcbiAgICAgICAgdmFyIHJvb3QgPSB0aGlzLl9pbnRlcm5hbFJvb3Q7XG4gICAgICAgIGlmIChudWxsID09PSByb290KSB0aHJvdyBFcnJvcihcIkNhbm5vdCB1cGRhdGUgYW4gdW5tb3VudGVkIHJvb3QuXCIpO1xuICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgYXJnc1sxXVxuICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJkb2VzIG5vdCBzdXBwb3J0IHRoZSBzZWNvbmQgY2FsbGJhY2sgYXJndW1lbnQuIFRvIGV4ZWN1dGUgYSBzaWRlIGVmZmVjdCBhZnRlciByZW5kZXJpbmcsIGRlY2xhcmUgaXQgaW4gYSBjb21wb25lbnQgYm9keSB3aXRoIHVzZUVmZmVjdCgpLlwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBpc1ZhbGlkQ29udGFpbmVyKGFyZ3NbMV0pXG4gICAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJZb3UgcGFzc2VkIGEgY29udGFpbmVyIHRvIHRoZSBzZWNvbmQgYXJndW1lbnQgb2Ygcm9vdC5yZW5kZXIoLi4uKS4gWW91IGRvbid0IG5lZWQgdG8gcGFzcyBpdCBhZ2FpbiBzaW5jZSB5b3UgYWxyZWFkeSBwYXNzZWQgaXQgdG8gY3JlYXRlIHRoZSByb290LlwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIGFyZ3NbMV0gJiZcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIllvdSBwYXNzZWQgYSBzZWNvbmQgYXJndW1lbnQgdG8gcm9vdC5yZW5kZXIoLi4uKSBidXQgaXQgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICBhcmdzID0gY2hpbGRyZW47XG4gICAgICAgIHZhciBjdXJyZW50ID0gcm9vdC5jdXJyZW50LFxuICAgICAgICAgIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShjdXJyZW50KTtcbiAgICAgICAgdXBkYXRlQ29udGFpbmVySW1wbChjdXJyZW50LCBsYW5lLCBhcmdzLCByb290LCBudWxsLCBudWxsKTtcbiAgICAgIH07XG4gICAgUmVhY3RET01IeWRyYXRpb25Sb290LnByb3RvdHlwZS51bm1vdW50ID0gUmVhY3RET01Sb290LnByb3RvdHlwZS51bm1vdW50ID1cbiAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGFyZ3NbMF0gJiZcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJkb2VzIG5vdCBzdXBwb3J0IGEgY2FsbGJhY2sgYXJndW1lbnQuIFRvIGV4ZWN1dGUgYSBzaWRlIGVmZmVjdCBhZnRlciByZW5kZXJpbmcsIGRlY2xhcmUgaXQgaW4gYSBjb21wb25lbnQgYm9keSB3aXRoIHVzZUVmZmVjdCgpLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgYXJncyA9IHRoaXMuX2ludGVybmFsUm9vdDtcbiAgICAgICAgaWYgKG51bGwgIT09IGFyZ3MpIHtcbiAgICAgICAgICB0aGlzLl9pbnRlcm5hbFJvb3QgPSBudWxsO1xuICAgICAgICAgIHZhciBjb250YWluZXIgPSBhcmdzLmNvbnRhaW5lckluZm87XG4gICAgICAgICAgKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSAhPT0gTm9Db250ZXh0ICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkF0dGVtcHRlZCB0byBzeW5jaHJvbm91c2x5IHVubW91bnQgYSByb290IHdoaWxlIFJlYWN0IHdhcyBhbHJlYWR5IHJlbmRlcmluZy4gUmVhY3QgY2Fubm90IGZpbmlzaCB1bm1vdW50aW5nIHRoZSByb290IHVudGlsIHRoZSBjdXJyZW50IHJlbmRlciBoYXMgY29tcGxldGVkLCB3aGljaCBtYXkgbGVhZCB0byBhIHJhY2UgY29uZGl0aW9uLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHVwZGF0ZUNvbnRhaW5lckltcGwoYXJncy5jdXJyZW50LCAyLCBudWxsLCBhcmdzLCBudWxsLCBudWxsKTtcbiAgICAgICAgICBmbHVzaFN5bmNXb3JrJDEoKTtcbiAgICAgICAgICBjb250YWluZXJbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV0gPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIFJlYWN0RE9NSHlkcmF0aW9uUm9vdC5wcm90b3R5cGUudW5zdGFibGVfc2NoZWR1bGVIeWRyYXRpb24gPSBmdW5jdGlvbiAoXG4gICAgICB0YXJnZXRcbiAgICApIHtcbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgdmFyIHVwZGF0ZVByaW9yaXR5ID0gcmVzb2x2ZVVwZGF0ZVByaW9yaXR5KCk7XG4gICAgICAgIHRhcmdldCA9IHsgYmxvY2tlZE9uOiBudWxsLCB0YXJnZXQ6IHRhcmdldCwgcHJpb3JpdHk6IHVwZGF0ZVByaW9yaXR5IH07XG4gICAgICAgIGZvciAoXG4gICAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICAgIGkgPCBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHMubGVuZ3RoICYmXG4gICAgICAgICAgMCAhPT0gdXBkYXRlUHJpb3JpdHkgJiZcbiAgICAgICAgICB1cGRhdGVQcmlvcml0eSA8IHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0c1tpXS5wcmlvcml0eTtcbiAgICAgICAgICBpKytcbiAgICAgICAgKTtcbiAgICAgICAgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzLnNwbGljZShpLCAwLCB0YXJnZXQpO1xuICAgICAgICAwID09PSBpICYmIGF0dGVtcHRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldCh0YXJnZXQpO1xuICAgICAgfVxuICAgIH07XG4gICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBpc29tb3JwaGljUmVhY3RQYWNrYWdlVmVyc2lvbiA9IFJlYWN0LnZlcnNpb247XG4gICAgICBpZiAoXCIxOS4yLjAtY2FuYXJ5LTk3Y2RkNWQzLTIwMjUwNzEwXCIgIT09IGlzb21vcnBoaWNSZWFjdFBhY2thZ2VWZXJzaW9uKVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAnSW5jb21wYXRpYmxlIFJlYWN0IHZlcnNpb25zOiBUaGUgXCJyZWFjdFwiIGFuZCBcInJlYWN0LWRvbVwiIHBhY2thZ2VzIG11c3QgaGF2ZSB0aGUgZXhhY3Qgc2FtZSB2ZXJzaW9uLiBJbnN0ZWFkIGdvdDpcXG4gIC0gcmVhY3Q6ICAgICAgJyArXG4gICAgICAgICAgICAoaXNvbW9ycGhpY1JlYWN0UGFja2FnZVZlcnNpb24gK1xuICAgICAgICAgICAgICBcIlxcbiAgLSByZWFjdC1kb206ICAxOS4yLjAtY2FuYXJ5LTk3Y2RkNWQzLTIwMjUwNzEwXFxuTGVhcm4gbW9yZTogaHR0cHM6Ly9yZWFjdC5kZXYvd2FybmluZ3MvdmVyc2lvbi1taXNtYXRjaFwiKVxuICAgICAgICApO1xuICAgIH0pKCk7XG4gICAgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIE1hcCAmJlxuICAgICAgbnVsbCAhPSBNYXAucHJvdG90eXBlICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBNYXAucHJvdG90eXBlLmZvckVhY2ggJiZcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFNldCAmJlxuICAgICAgbnVsbCAhPSBTZXQucHJvdG90eXBlICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBTZXQucHJvdG90eXBlLmNsZWFyICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBTZXQucHJvdG90eXBlLmZvckVhY2gpIHx8XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBcIlJlYWN0IGRlcGVuZHMgb24gTWFwIGFuZCBTZXQgYnVpbHQtaW4gdHlwZXMuIE1ha2Ugc3VyZSB0aGF0IHlvdSBsb2FkIGEgcG9seWZpbGwgaW4gb2xkZXIgYnJvd3NlcnMuIGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvcmVhY3QtcG9seWZpbGxzXCJcbiAgICAgICk7XG4gICAgUmVhY3RET01TaGFyZWRJbnRlcm5hbHMuZmluZERPTU5vZGUgPSBmdW5jdGlvbiAoY29tcG9uZW50T3JFbGVtZW50KSB7XG4gICAgICB2YXIgZmliZXIgPSBjb21wb25lbnRPckVsZW1lbnQuX3JlYWN0SW50ZXJuYWxzO1xuICAgICAgaWYgKHZvaWQgMCA9PT0gZmliZXIpIHtcbiAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGNvbXBvbmVudE9yRWxlbWVudC5yZW5kZXIpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXCIpO1xuICAgICAgICBjb21wb25lbnRPckVsZW1lbnQgPSBPYmplY3Qua2V5cyhjb21wb25lbnRPckVsZW1lbnQpLmpvaW4oXCIsXCIpO1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIkFyZ3VtZW50IGFwcGVhcnMgdG8gbm90IGJlIGEgUmVhY3RDb21wb25lbnQuIEtleXM6IFwiICtcbiAgICAgICAgICAgIGNvbXBvbmVudE9yRWxlbWVudFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29tcG9uZW50T3JFbGVtZW50ID0gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGgoZmliZXIpO1xuICAgICAgY29tcG9uZW50T3JFbGVtZW50ID1cbiAgICAgICAgbnVsbCAhPT0gY29tcG9uZW50T3JFbGVtZW50XG4gICAgICAgICAgPyBmaW5kQ3VycmVudEhvc3RGaWJlckltcGwoY29tcG9uZW50T3JFbGVtZW50KVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgIGNvbXBvbmVudE9yRWxlbWVudCA9XG4gICAgICAgIG51bGwgPT09IGNvbXBvbmVudE9yRWxlbWVudCA/IG51bGwgOiBjb21wb25lbnRPckVsZW1lbnQuc3RhdGVOb2RlO1xuICAgICAgcmV0dXJuIGNvbXBvbmVudE9yRWxlbWVudDtcbiAgICB9O1xuICAgIGlmIChcbiAgICAgICEoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaW50ZXJuYWxzID0ge1xuICAgICAgICAgIGJ1bmRsZVR5cGU6IDEsXG4gICAgICAgICAgdmVyc2lvbjogXCIxOS4yLjAtY2FuYXJ5LTk3Y2RkNWQzLTIwMjUwNzEwXCIsXG4gICAgICAgICAgcmVuZGVyZXJQYWNrYWdlTmFtZTogXCJyZWFjdC1kb21cIixcbiAgICAgICAgICBjdXJyZW50RGlzcGF0Y2hlclJlZjogUmVhY3RTaGFyZWRJbnRlcm5hbHMsXG4gICAgICAgICAgcmVjb25jaWxlclZlcnNpb246IFwiMTkuMi4wLWNhbmFyeS05N2NkZDVkMy0yMDI1MDcxMFwiXG4gICAgICAgIH07XG4gICAgICAgIGludGVybmFscy5vdmVycmlkZUhvb2tTdGF0ZSA9IG92ZXJyaWRlSG9va1N0YXRlO1xuICAgICAgICBpbnRlcm5hbHMub3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoID0gb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoO1xuICAgICAgICBpbnRlcm5hbHMub3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoID0gb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoO1xuICAgICAgICBpbnRlcm5hbHMub3ZlcnJpZGVQcm9wcyA9IG92ZXJyaWRlUHJvcHM7XG4gICAgICAgIGludGVybmFscy5vdmVycmlkZVByb3BzRGVsZXRlUGF0aCA9IG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoO1xuICAgICAgICBpbnRlcm5hbHMub3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGggPSBvdmVycmlkZVByb3BzUmVuYW1lUGF0aDtcbiAgICAgICAgaW50ZXJuYWxzLnNjaGVkdWxlVXBkYXRlID0gc2NoZWR1bGVVcGRhdGU7XG4gICAgICAgIGludGVybmFscy5zZXRFcnJvckhhbmRsZXIgPSBzZXRFcnJvckhhbmRsZXI7XG4gICAgICAgIGludGVybmFscy5zZXRTdXNwZW5zZUhhbmRsZXIgPSBzZXRTdXNwZW5zZUhhbmRsZXI7XG4gICAgICAgIGludGVybmFscy5zY2hlZHVsZVJlZnJlc2ggPSBzY2hlZHVsZVJlZnJlc2g7XG4gICAgICAgIGludGVybmFscy5zY2hlZHVsZVJvb3QgPSBzY2hlZHVsZVJvb3Q7XG4gICAgICAgIGludGVybmFscy5zZXRSZWZyZXNoSGFuZGxlciA9IHNldFJlZnJlc2hIYW5kbGVyO1xuICAgICAgICBpbnRlcm5hbHMuZ2V0Q3VycmVudEZpYmVyID0gZ2V0Q3VycmVudEZpYmVyRm9yRGV2VG9vbHM7XG4gICAgICAgIGludGVybmFscy5nZXRMYW5lTGFiZWxNYXAgPSBnZXRMYW5lTGFiZWxNYXA7XG4gICAgICAgIGludGVybmFscy5pbmplY3RQcm9maWxpbmdIb29rcyA9IGluamVjdFByb2ZpbGluZ0hvb2tzO1xuICAgICAgICByZXR1cm4gaW5qZWN0SW50ZXJuYWxzKGludGVybmFscyk7XG4gICAgICB9KSgpICYmXG4gICAgICBjYW5Vc2VET00gJiZcbiAgICAgIHdpbmRvdy50b3AgPT09IHdpbmRvdy5zZWxmICYmXG4gICAgICAoKC0xIDwgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKFwiQ2hyb21lXCIpICYmXG4gICAgICAgIC0xID09PSBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoXCJFZGdlXCIpKSB8fFxuICAgICAgICAtMSA8IG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZihcIkZpcmVmb3hcIikpXG4gICAgKSB7XG4gICAgICB2YXIgcHJvdG9jb2wgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2w7XG4gICAgICAvXihodHRwcz98ZmlsZSk6JC8udGVzdChwcm90b2NvbCkgJiZcbiAgICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICAgIFwiJWNEb3dubG9hZCB0aGUgUmVhY3QgRGV2VG9vbHMgZm9yIGEgYmV0dGVyIGRldmVsb3BtZW50IGV4cGVyaWVuY2U6IGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvcmVhY3QtZGV2dG9vbHNcIiArXG4gICAgICAgICAgICAoXCJmaWxlOlwiID09PSBwcm90b2NvbFxuICAgICAgICAgICAgICA/IFwiXFxuWW91IG1pZ2h0IG5lZWQgdG8gdXNlIGEgbG9jYWwgSFRUUCBzZXJ2ZXIgKGluc3RlYWQgb2YgZmlsZTovLyk6IGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvcmVhY3QtZGV2dG9vbHMtZmFxXCJcbiAgICAgICAgICAgICAgOiBcIlwiKSxcbiAgICAgICAgICBcImZvbnQtd2VpZ2h0OmJvbGRcIlxuICAgICAgICApO1xuICAgIH1cbiAgICBleHBvcnRzLmNyZWF0ZVJvb3QgPSBmdW5jdGlvbiAoY29udGFpbmVyLCBvcHRpb25zKSB7XG4gICAgICBpZiAoIWlzVmFsaWRDb250YWluZXIoY29udGFpbmVyKSlcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LlwiKTtcbiAgICAgIHdhcm5JZlJlYWN0RE9NQ29udGFpbmVySW5ERVYoY29udGFpbmVyKTtcbiAgICAgIHZhciBpc1N0cmljdE1vZGUgPSAhMSxcbiAgICAgICAgaWRlbnRpZmllclByZWZpeCA9IFwiXCIsXG4gICAgICAgIG9uVW5jYXVnaHRFcnJvciA9IGRlZmF1bHRPblVuY2F1Z2h0RXJyb3IsXG4gICAgICAgIG9uQ2F1Z2h0RXJyb3IgPSBkZWZhdWx0T25DYXVnaHRFcnJvcixcbiAgICAgICAgb25SZWNvdmVyYWJsZUVycm9yID0gZGVmYXVsdE9uUmVjb3ZlcmFibGVFcnJvcjtcbiAgICAgIG51bGwgIT09IG9wdGlvbnMgJiZcbiAgICAgICAgdm9pZCAwICE9PSBvcHRpb25zICYmXG4gICAgICAgIChvcHRpb25zLmh5ZHJhdGVcbiAgICAgICAgICA/IGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgXCJoeWRyYXRlIHRocm91Z2ggY3JlYXRlUm9vdCBpcyBkZXByZWNhdGVkLiBVc2UgUmVhY3RET01DbGllbnQuaHlkcmF0ZVJvb3QoY29udGFpbmVyLCA8QXBwIC8+KSBpbnN0ZWFkLlwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBcIm9iamVjdFwiID09PSB0eXBlb2Ygb3B0aW9ucyAmJlxuICAgICAgICAgICAgbnVsbCAhPT0gb3B0aW9ucyAmJlxuICAgICAgICAgICAgb3B0aW9ucy4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIllvdSBwYXNzZWQgYSBKU1ggZWxlbWVudCB0byBjcmVhdGVSb290LiBZb3UgcHJvYmFibHkgbWVhbnQgdG8gY2FsbCByb290LnJlbmRlciBpbnN0ZWFkLiBFeGFtcGxlIHVzYWdlOlxcblxcbiAgbGV0IHJvb3QgPSBjcmVhdGVSb290KGRvbUNvbnRhaW5lcik7XFxuICByb290LnJlbmRlcig8QXBwIC8+KTtcIlxuICAgICAgICAgICAgKSxcbiAgICAgICAgITAgPT09IG9wdGlvbnMudW5zdGFibGVfc3RyaWN0TW9kZSAmJiAoaXNTdHJpY3RNb2RlID0gITApLFxuICAgICAgICB2b2lkIDAgIT09IG9wdGlvbnMuaWRlbnRpZmllclByZWZpeCAmJlxuICAgICAgICAgIChpZGVudGlmaWVyUHJlZml4ID0gb3B0aW9ucy5pZGVudGlmaWVyUHJlZml4KSxcbiAgICAgICAgdm9pZCAwICE9PSBvcHRpb25zLm9uVW5jYXVnaHRFcnJvciAmJlxuICAgICAgICAgIChvblVuY2F1Z2h0RXJyb3IgPSBvcHRpb25zLm9uVW5jYXVnaHRFcnJvciksXG4gICAgICAgIHZvaWQgMCAhPT0gb3B0aW9ucy5vbkNhdWdodEVycm9yICYmXG4gICAgICAgICAgKG9uQ2F1Z2h0RXJyb3IgPSBvcHRpb25zLm9uQ2F1Z2h0RXJyb3IpLFxuICAgICAgICB2b2lkIDAgIT09IG9wdGlvbnMub25SZWNvdmVyYWJsZUVycm9yICYmXG4gICAgICAgICAgKG9uUmVjb3ZlcmFibGVFcnJvciA9IG9wdGlvbnMub25SZWNvdmVyYWJsZUVycm9yKSk7XG4gICAgICBvcHRpb25zID0gY3JlYXRlRmliZXJSb290KFxuICAgICAgICBjb250YWluZXIsXG4gICAgICAgIDEsXG4gICAgICAgICExLFxuICAgICAgICBudWxsLFxuICAgICAgICBudWxsLFxuICAgICAgICBpc1N0cmljdE1vZGUsXG4gICAgICAgIGlkZW50aWZpZXJQcmVmaXgsXG4gICAgICAgIG51bGwsXG4gICAgICAgIG9uVW5jYXVnaHRFcnJvcixcbiAgICAgICAgb25DYXVnaHRFcnJvcixcbiAgICAgICAgb25SZWNvdmVyYWJsZUVycm9yLFxuICAgICAgICBkZWZhdWx0T25EZWZhdWx0VHJhbnNpdGlvbkluZGljYXRvclxuICAgICAgKTtcbiAgICAgIGNvbnRhaW5lcltpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSA9IG9wdGlvbnMuY3VycmVudDtcbiAgICAgIGxpc3RlblRvQWxsU3VwcG9ydGVkRXZlbnRzKGNvbnRhaW5lcik7XG4gICAgICByZXR1cm4gbmV3IFJlYWN0RE9NUm9vdChvcHRpb25zKTtcbiAgICB9O1xuICAgIGV4cG9ydHMuaHlkcmF0ZVJvb3QgPSBmdW5jdGlvbiAoY29udGFpbmVyLCBpbml0aWFsQ2hpbGRyZW4sIG9wdGlvbnMpIHtcbiAgICAgIGlmICghaXNWYWxpZENvbnRhaW5lcihjb250YWluZXIpKVxuICAgICAgICB0aHJvdyBFcnJvcihcIlRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuXCIpO1xuICAgICAgd2FybklmUmVhY3RET01Db250YWluZXJJbkRFVihjb250YWluZXIpO1xuICAgICAgdm9pZCAwID09PSBpbml0aWFsQ2hpbGRyZW4gJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIk11c3QgcHJvdmlkZSBpbml0aWFsIGNoaWxkcmVuIGFzIHNlY29uZCBhcmd1bWVudCB0byBoeWRyYXRlUm9vdC4gRXhhbXBsZSB1c2FnZTogaHlkcmF0ZVJvb3QoZG9tQ29udGFpbmVyLCA8QXBwIC8+KVwiXG4gICAgICAgICk7XG4gICAgICB2YXIgaXNTdHJpY3RNb2RlID0gITEsXG4gICAgICAgIGlkZW50aWZpZXJQcmVmaXggPSBcIlwiLFxuICAgICAgICBvblVuY2F1Z2h0RXJyb3IgPSBkZWZhdWx0T25VbmNhdWdodEVycm9yLFxuICAgICAgICBvbkNhdWdodEVycm9yID0gZGVmYXVsdE9uQ2F1Z2h0RXJyb3IsXG4gICAgICAgIG9uUmVjb3ZlcmFibGVFcnJvciA9IGRlZmF1bHRPblJlY292ZXJhYmxlRXJyb3IsXG4gICAgICAgIGZvcm1TdGF0ZSA9IG51bGw7XG4gICAgICBudWxsICE9PSBvcHRpb25zICYmXG4gICAgICAgIHZvaWQgMCAhPT0gb3B0aW9ucyAmJlxuICAgICAgICAoITAgPT09IG9wdGlvbnMudW5zdGFibGVfc3RyaWN0TW9kZSAmJiAoaXNTdHJpY3RNb2RlID0gITApLFxuICAgICAgICB2b2lkIDAgIT09IG9wdGlvbnMuaWRlbnRpZmllclByZWZpeCAmJlxuICAgICAgICAgIChpZGVudGlmaWVyUHJlZml4ID0gb3B0aW9ucy5pZGVudGlmaWVyUHJlZml4KSxcbiAgICAgICAgdm9pZCAwICE9PSBvcHRpb25zLm9uVW5jYXVnaHRFcnJvciAmJlxuICAgICAgICAgIChvblVuY2F1Z2h0RXJyb3IgPSBvcHRpb25zLm9uVW5jYXVnaHRFcnJvciksXG4gICAgICAgIHZvaWQgMCAhPT0gb3B0aW9ucy5vbkNhdWdodEVycm9yICYmXG4gICAgICAgICAgKG9uQ2F1Z2h0RXJyb3IgPSBvcHRpb25zLm9uQ2F1Z2h0RXJyb3IpLFxuICAgICAgICB2b2lkIDAgIT09IG9wdGlvbnMub25SZWNvdmVyYWJsZUVycm9yICYmXG4gICAgICAgICAgKG9uUmVjb3ZlcmFibGVFcnJvciA9IG9wdGlvbnMub25SZWNvdmVyYWJsZUVycm9yKSxcbiAgICAgICAgdm9pZCAwICE9PSBvcHRpb25zLmZvcm1TdGF0ZSAmJiAoZm9ybVN0YXRlID0gb3B0aW9ucy5mb3JtU3RhdGUpKTtcbiAgICAgIGluaXRpYWxDaGlsZHJlbiA9IGNyZWF0ZUZpYmVyUm9vdChcbiAgICAgICAgY29udGFpbmVyLFxuICAgICAgICAxLFxuICAgICAgICAhMCxcbiAgICAgICAgaW5pdGlhbENoaWxkcmVuLFxuICAgICAgICBudWxsICE9IG9wdGlvbnMgPyBvcHRpb25zIDogbnVsbCxcbiAgICAgICAgaXNTdHJpY3RNb2RlLFxuICAgICAgICBpZGVudGlmaWVyUHJlZml4LFxuICAgICAgICBmb3JtU3RhdGUsXG4gICAgICAgIG9uVW5jYXVnaHRFcnJvcixcbiAgICAgICAgb25DYXVnaHRFcnJvcixcbiAgICAgICAgb25SZWNvdmVyYWJsZUVycm9yLFxuICAgICAgICBkZWZhdWx0T25EZWZhdWx0VHJhbnNpdGlvbkluZGljYXRvclxuICAgICAgKTtcbiAgICAgIGluaXRpYWxDaGlsZHJlbi5jb250ZXh0ID0gZ2V0Q29udGV4dEZvclN1YnRyZWUobnVsbCk7XG4gICAgICBvcHRpb25zID0gaW5pdGlhbENoaWxkcmVuLmN1cnJlbnQ7XG4gICAgICBpc1N0cmljdE1vZGUgPSByZXF1ZXN0VXBkYXRlTGFuZShvcHRpb25zKTtcbiAgICAgIGlzU3RyaWN0TW9kZSA9IGdldEJ1bXBlZExhbmVGb3JIeWRyYXRpb25CeUxhbmUoaXNTdHJpY3RNb2RlKTtcbiAgICAgIGlkZW50aWZpZXJQcmVmaXggPSBjcmVhdGVVcGRhdGUoaXNTdHJpY3RNb2RlKTtcbiAgICAgIGlkZW50aWZpZXJQcmVmaXguY2FsbGJhY2sgPSBudWxsO1xuICAgICAgZW5xdWV1ZVVwZGF0ZShvcHRpb25zLCBpZGVudGlmaWVyUHJlZml4LCBpc1N0cmljdE1vZGUpO1xuICAgICAgb3B0aW9ucyA9IGlzU3RyaWN0TW9kZTtcbiAgICAgIGluaXRpYWxDaGlsZHJlbi5jdXJyZW50LmxhbmVzID0gb3B0aW9ucztcbiAgICAgIG1hcmtSb290VXBkYXRlZCQxKGluaXRpYWxDaGlsZHJlbiwgb3B0aW9ucyk7XG4gICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQoaW5pdGlhbENoaWxkcmVuKTtcbiAgICAgIGNvbnRhaW5lcltpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSA9IGluaXRpYWxDaGlsZHJlbi5jdXJyZW50O1xuICAgICAgbGlzdGVuVG9BbGxTdXBwb3J0ZWRFdmVudHMoY29udGFpbmVyKTtcbiAgICAgIHJldHVybiBuZXcgUmVhY3RET01IeWRyYXRpb25Sb290KGluaXRpYWxDaGlsZHJlbik7XG4gICAgfTtcbiAgICBleHBvcnRzLnZlcnNpb24gPSBcIjE5LjIuMC1jYW5hcnktOTdjZGQ1ZDMtMjAyNTA3MTBcIjtcbiAgICBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0b3AgJiZcbiAgICAgIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RvcChFcnJvcigpKTtcbiAgfSkoKTtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom-client.development.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js":
|
||
/*!********************************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js ***!
|
||
\********************************************************************************/
|
||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * @license React\n * react-dom.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n true &&\n (function () {\n function noop() {}\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function createPortal$1(children, containerInfo, implementation) {\n var key =\n 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;\n try {\n testStringCoercion(key);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n JSCompiler_inline_result &&\n (console.error(\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n key[Symbol.toStringTag]) ||\n key.constructor.name ||\n \"Object\"\n ),\n testStringCoercion(key));\n return {\n $$typeof: REACT_PORTAL_TYPE,\n key: null == key ? null : \"\" + key,\n children: children,\n containerInfo: containerInfo,\n implementation: implementation\n };\n }\n function getCrossOriginStringAs(as, input) {\n if (\"font\" === as) return \"\";\n if (\"string\" === typeof input)\n return \"use-credentials\" === input ? input : \"\";\n }\n function getValueDescriptorExpectingObjectForWarning(thing) {\n return null === thing\n ? \"`null`\"\n : void 0 === thing\n ? \"`undefined`\"\n : \"\" === thing\n ? \"an empty string\"\n : 'something with type \"' + typeof thing + '\"';\n }\n function getValueDescriptorExpectingEnumForWarning(thing) {\n return null === thing\n ? \"`null`\"\n : void 0 === thing\n ? \"`undefined`\"\n : \"\" === thing\n ? \"an empty string\"\n : \"string\" === typeof thing\n ? JSON.stringify(thing)\n : \"number\" === typeof thing\n ? \"`\" + thing + \"`\"\n : 'something with type \"' + typeof thing + '\"';\n }\n function resolveDispatcher() {\n var dispatcher = ReactSharedInternals.H;\n null === dispatcher &&\n console.error(\n \"Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.\"\n );\n return dispatcher;\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = __webpack_require__(/*! next/dist/compiled/react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"),\n Internals = {\n d: {\n f: noop,\n r: function () {\n throw Error(\n \"Invalid form element. requestFormReset must be passed a form that was rendered by React.\"\n );\n },\n D: noop,\n C: noop,\n L: noop,\n m: noop,\n X: noop,\n S: noop,\n M: noop\n },\n p: 0,\n findDOMNode: null\n },\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\n (\"function\" === typeof Map &&\n null != Map.prototype &&\n \"function\" === typeof Map.prototype.forEach &&\n \"function\" === typeof Set &&\n null != Set.prototype &&\n \"function\" === typeof Set.prototype.clear &&\n \"function\" === typeof Set.prototype.forEach) ||\n console.error(\n \"React depends on Map and Set built-in types. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills\"\n );\n exports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n Internals;\n exports.createPortal = function (children, container) {\n var key =\n 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;\n if (\n !container ||\n (1 !== container.nodeType &&\n 9 !== container.nodeType &&\n 11 !== container.nodeType)\n )\n throw Error(\"Target container is not a DOM element.\");\n return createPortal$1(children, container, null, key);\n };\n exports.flushSync = function (fn) {\n var previousTransition = ReactSharedInternals.T,\n previousUpdatePriority = Internals.p;\n try {\n if (((ReactSharedInternals.T = null), (Internals.p = 2), fn))\n return fn();\n } finally {\n (ReactSharedInternals.T = previousTransition),\n (Internals.p = previousUpdatePriority),\n Internals.d.f() &&\n console.error(\n \"flushSync was called from inside a lifecycle method. React cannot flush when React is already rendering. Consider moving this call to a scheduler task or micro task.\"\n );\n }\n };\n exports.preconnect = function (href, options) {\n \"string\" === typeof href && href\n ? null != options && \"object\" !== typeof options\n ? console.error(\n \"ReactDOM.preconnect(): Expected the `options` argument (second) to be an object but encountered %s instead. The only supported option at this time is `crossOrigin` which accepts a string.\",\n getValueDescriptorExpectingEnumForWarning(options)\n )\n : null != options &&\n \"string\" !== typeof options.crossOrigin &&\n console.error(\n \"ReactDOM.preconnect(): Expected the `crossOrigin` option (second argument) to be a string but encountered %s instead. Try removing this option or passing a string value instead.\",\n getValueDescriptorExpectingObjectForWarning(options.crossOrigin)\n )\n : console.error(\n \"ReactDOM.preconnect(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.\",\n getValueDescriptorExpectingObjectForWarning(href)\n );\n \"string\" === typeof href &&\n (options\n ? ((options = options.crossOrigin),\n (options =\n \"string\" === typeof options\n ? \"use-credentials\" === options\n ? options\n : \"\"\n : void 0))\n : (options = null),\n Internals.d.C(href, options));\n };\n exports.prefetchDNS = function (href) {\n if (\"string\" !== typeof href || !href)\n console.error(\n \"ReactDOM.prefetchDNS(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.\",\n getValueDescriptorExpectingObjectForWarning(href)\n );\n else if (1 < arguments.length) {\n var options = arguments[1];\n \"object\" === typeof options && options.hasOwnProperty(\"crossOrigin\")\n ? console.error(\n \"ReactDOM.prefetchDNS(): Expected only one argument, `href`, but encountered %s as a second argument instead. This argument is reserved for future options and is currently disallowed. It looks like the you are attempting to set a crossOrigin property for this DNS lookup hint. Browsers do not perform DNS queries using CORS and setting this attribute on the resource hint has no effect. Try calling ReactDOM.prefetchDNS() with just a single string argument, `href`.\",\n getValueDescriptorExpectingEnumForWarning(options)\n )\n : console.error(\n \"ReactDOM.prefetchDNS(): Expected only one argument, `href`, but encountered %s as a second argument instead. This argument is reserved for future options and is currently disallowed. Try calling ReactDOM.prefetchDNS() with just a single string argument, `href`.\",\n getValueDescriptorExpectingEnumForWarning(options)\n );\n }\n \"string\" === typeof href && Internals.d.D(href);\n };\n exports.preinit = function (href, options) {\n \"string\" === typeof href && href\n ? null == options || \"object\" !== typeof options\n ? console.error(\n \"ReactDOM.preinit(): Expected the `options` argument (second) to be an object with an `as` property describing the type of resource to be preinitialized but encountered %s instead.\",\n getValueDescriptorExpectingEnumForWarning(options)\n )\n : \"style\" !== options.as &&\n \"script\" !== options.as &&\n console.error(\n 'ReactDOM.preinit(): Expected the `as` property in the `options` argument (second) to contain a valid value describing the type of resource to be preinitialized but encountered %s instead. Valid values for `as` are \"style\" and \"script\".',\n getValueDescriptorExpectingEnumForWarning(options.as)\n )\n : console.error(\n \"ReactDOM.preinit(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.\",\n getValueDescriptorExpectingObjectForWarning(href)\n );\n if (\n \"string\" === typeof href &&\n options &&\n \"string\" === typeof options.as\n ) {\n var as = options.as,\n crossOrigin = getCrossOriginStringAs(as, options.crossOrigin),\n integrity =\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n fetchPriority =\n \"string\" === typeof options.fetchPriority\n ? options.fetchPriority\n : void 0;\n \"style\" === as\n ? Internals.d.S(\n href,\n \"string\" === typeof options.precedence\n ? options.precedence\n : void 0,\n {\n crossOrigin: crossOrigin,\n integrity: integrity,\n fetchPriority: fetchPriority\n }\n )\n : \"script\" === as &&\n Internals.d.X(href, {\n crossOrigin: crossOrigin,\n integrity: integrity,\n fetchPriority: fetchPriority,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n });\n }\n };\n exports.preinitModule = function (href, options) {\n var encountered = \"\";\n (\"string\" === typeof href && href) ||\n (encountered +=\n \" The `href` argument encountered was \" +\n getValueDescriptorExpectingObjectForWarning(href) +\n \".\");\n void 0 !== options && \"object\" !== typeof options\n ? (encountered +=\n \" The `options` argument encountered was \" +\n getValueDescriptorExpectingObjectForWarning(options) +\n \".\")\n : options &&\n \"as\" in options &&\n \"script\" !== options.as &&\n (encountered +=\n \" The `as` option encountered was \" +\n getValueDescriptorExpectingEnumForWarning(options.as) +\n \".\");\n if (encountered)\n console.error(\n \"ReactDOM.preinitModule(): Expected up to two arguments, a non-empty `href` string and, optionally, an `options` object with a valid `as` property.%s\",\n encountered\n );\n else\n switch (\n ((encountered =\n options && \"string\" === typeof options.as ? options.as : \"script\"),\n encountered)\n ) {\n case \"script\":\n break;\n default:\n (encountered =\n getValueDescriptorExpectingEnumForWarning(encountered)),\n console.error(\n 'ReactDOM.preinitModule(): Currently the only supported \"as\" type for this function is \"script\" but received \"%s\" instead. This warning was generated for `href` \"%s\". In the future other module types will be supported, aligning with the import-attributes proposal. Learn more here: (https://github.com/tc39/proposal-import-attributes)',\n encountered,\n href\n );\n }\n if (\"string\" === typeof href)\n if (\"object\" === typeof options && null !== options) {\n if (null == options.as || \"script\" === options.as)\n (encountered = getCrossOriginStringAs(\n options.as,\n options.crossOrigin\n )),\n Internals.d.M(href, {\n crossOrigin: encountered,\n integrity:\n \"string\" === typeof options.integrity\n ? options.integrity\n : void 0,\n nonce:\n \"string\" === typeof options.nonce ? options.nonce : void 0\n });\n } else null == options && Internals.d.M(href);\n };\n exports.preload = function (href, options) {\n var encountered = \"\";\n (\"string\" === typeof href && href) ||\n (encountered +=\n \" The `href` argument encountered was \" +\n getValueDescriptorExpectingObjectForWarning(href) +\n \".\");\n null == options || \"object\" !== typeof options\n ? (encountered +=\n \" The `options` argument encountered was \" +\n getValueDescriptorExpectingObjectForWarning(options) +\n \".\")\n : (\"string\" === typeof options.as && options.as) ||\n (encountered +=\n \" The `as` option encountered was \" +\n getValueDescriptorExpectingObjectForWarning(options.as) +\n \".\");\n encountered &&\n console.error(\n 'ReactDOM.preload(): Expected two arguments, a non-empty `href` string and an `options` object with an `as` property valid for a `<link rel=\"preload\" as=\"...\" />` tag.%s',\n encountered\n );\n if (\n \"string\" === typeof href &&\n \"object\" === typeof options &&\n null !== options &&\n \"string\" === typeof options.as\n ) {\n encountered = options.as;\n var crossOrigin = getCrossOriginStringAs(\n encountered,\n options.crossOrigin\n );\n Internals.d.L(href, encountered, {\n crossOrigin: crossOrigin,\n integrity:\n \"string\" === typeof options.integrity ? options.integrity : void 0,\n nonce: \"string\" === typeof options.nonce ? options.nonce : void 0,\n type: \"string\" === typeof options.type ? options.type : void 0,\n fetchPriority:\n \"string\" === typeof options.fetchPriority\n ? options.fetchPriority\n : void 0,\n referrerPolicy:\n \"string\" === typeof options.referrerPolicy\n ? options.referrerPolicy\n : void 0,\n imageSrcSet:\n \"string\" === typeof options.imageSrcSet\n ? options.imageSrcSet\n : void 0,\n imageSizes:\n \"string\" === typeof options.imageSizes\n ? options.imageSizes\n : void 0,\n media: \"string\" === typeof options.media ? options.media : void 0\n });\n }\n };\n exports.preloadModule = function (href, options) {\n var encountered = \"\";\n (\"string\" === typeof href && href) ||\n (encountered +=\n \" The `href` argument encountered was \" +\n getValueDescriptorExpectingObjectForWarning(href) +\n \".\");\n void 0 !== options && \"object\" !== typeof options\n ? (encountered +=\n \" The `options` argument encountered was \" +\n getValueDescriptorExpectingObjectForWarning(options) +\n \".\")\n : options &&\n \"as\" in options &&\n \"string\" !== typeof options.as &&\n (encountered +=\n \" The `as` option encountered was \" +\n getValueDescriptorExpectingObjectForWarning(options.as) +\n \".\");\n encountered &&\n console.error(\n 'ReactDOM.preloadModule(): Expected two arguments, a non-empty `href` string and, optionally, an `options` object with an `as` property valid for a `<link rel=\"modulepreload\" as=\"...\" />` tag.%s',\n encountered\n );\n \"string\" === typeof href &&\n (options\n ? ((encountered = getCrossOriginStringAs(\n options.as,\n options.crossOrigin\n )),\n Internals.d.m(href, {\n as:\n \"string\" === typeof options.as && \"script\" !== options.as\n ? options.as\n : void 0,\n crossOrigin: encountered,\n integrity:\n \"string\" === typeof options.integrity\n ? options.integrity\n : void 0\n }))\n : Internals.d.m(href));\n };\n exports.requestFormReset = function (form) {\n Internals.d.r(form);\n };\n exports.unstable_batchedUpdates = function (fn, a) {\n return fn(a);\n };\n exports.useFormState = function (action, initialState, permalink) {\n return resolveDispatcher().useFormState(action, initialState, permalink);\n };\n exports.useFormStatus = function () {\n return resolveDispatcher().useHostTransitionStatus();\n };\n exports.version = \"19.2.0-canary-97cdd5d3-20250710\";\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QtZG9tL2Nqcy9yZWFjdC1kb20uZGV2ZWxvcG1lbnQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhO0FBQ2IsS0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMsc0dBQTBCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLG9FQUFvRTtBQUN4RTtBQUNBLElBQUksb0JBQW9CO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGlCQUFpQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGtCQUFrQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksbUJBQW1CO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxlQUFlO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLElBQUkscUJBQXFCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmLFVBQVU7QUFDVjtBQUNBLElBQUksZUFBZTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsSUFBSSxxQkFBcUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxJQUFJLHdCQUF3QjtBQUM1QjtBQUNBO0FBQ0EsSUFBSSwrQkFBK0I7QUFDbkM7QUFDQTtBQUNBLElBQUksb0JBQW9CO0FBQ3hCO0FBQ0E7QUFDQSxJQUFJLHFCQUFxQjtBQUN6QjtBQUNBO0FBQ0EsSUFBSSxlQUFlO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvRG9jdW1lbnRzL0Rldi9iaW9oYXphcmQtdmZ4LTEvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC1kb20vY2pzL3JlYWN0LWRvbS5kZXZlbG9wbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC1kb20uZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cblwidXNlIHN0cmljdFwiO1xuXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WICYmXG4gIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gbm9vcCgpIHt9XG4gICAgZnVuY3Rpb24gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gXCJcIiArIHZhbHVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVQb3J0YWwkMShjaGlsZHJlbiwgY29udGFpbmVySW5mbywgaW1wbGVtZW50YXRpb24pIHtcbiAgICAgIHZhciBrZXkgPVxuICAgICAgICAzIDwgYXJndW1lbnRzLmxlbmd0aCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1szXSA/IGFyZ3VtZW50c1szXSA6IG51bGw7XG4gICAgICB0cnkge1xuICAgICAgICB0ZXN0U3RyaW5nQ29lcmNpb24oa2V5KTtcbiAgICAgICAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9ICExO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSAhMDtcbiAgICAgIH1cbiAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCAmJlxuICAgICAgICAoY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIlRoZSBwcm92aWRlZCBrZXkgaXMgYW4gdW5zdXBwb3J0ZWQgdHlwZSAlcy4gVGhpcyB2YWx1ZSBtdXN0IGJlIGNvZXJjZWQgdG8gYSBzdHJpbmcgYmVmb3JlIHVzaW5nIGl0IGhlcmUuXCIsXG4gICAgICAgICAgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFN5bWJvbCAmJlxuICAgICAgICAgICAgU3ltYm9sLnRvU3RyaW5nVGFnICYmXG4gICAgICAgICAgICBrZXlbU3ltYm9sLnRvU3RyaW5nVGFnXSkgfHxcbiAgICAgICAgICAgIGtleS5jb25zdHJ1Y3Rvci5uYW1lIHx8XG4gICAgICAgICAgICBcIk9iamVjdFwiXG4gICAgICAgICksXG4gICAgICAgIHRlc3RTdHJpbmdDb2VyY2lvbihrZXkpKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICQkdHlwZW9mOiBSRUFDVF9QT1JUQUxfVFlQRSxcbiAgICAgICAga2V5OiBudWxsID09IGtleSA/IG51bGwgOiBcIlwiICsga2V5LFxuICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW4sXG4gICAgICAgIGNvbnRhaW5lckluZm86IGNvbnRhaW5lckluZm8sXG4gICAgICAgIGltcGxlbWVudGF0aW9uOiBpbXBsZW1lbnRhdGlvblxuICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Q3Jvc3NPcmlnaW5TdHJpbmdBcyhhcywgaW5wdXQpIHtcbiAgICAgIGlmIChcImZvbnRcIiA9PT0gYXMpIHJldHVybiBcIlwiO1xuICAgICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBpbnB1dClcbiAgICAgICAgcmV0dXJuIFwidXNlLWNyZWRlbnRpYWxzXCIgPT09IGlucHV0ID8gaW5wdXQgOiBcIlwiO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdPYmplY3RGb3JXYXJuaW5nKHRoaW5nKSB7XG4gICAgICByZXR1cm4gbnVsbCA9PT0gdGhpbmdcbiAgICAgICAgPyBcImBudWxsYFwiXG4gICAgICAgIDogdm9pZCAwID09PSB0aGluZ1xuICAgICAgICAgID8gXCJgdW5kZWZpbmVkYFwiXG4gICAgICAgICAgOiBcIlwiID09PSB0aGluZ1xuICAgICAgICAgICAgPyBcImFuIGVtcHR5IHN0cmluZ1wiXG4gICAgICAgICAgICA6ICdzb21ldGhpbmcgd2l0aCB0eXBlIFwiJyArIHR5cGVvZiB0aGluZyArICdcIic7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ0VudW1Gb3JXYXJuaW5nKHRoaW5nKSB7XG4gICAgICByZXR1cm4gbnVsbCA9PT0gdGhpbmdcbiAgICAgICAgPyBcImBudWxsYFwiXG4gICAgICAgIDogdm9pZCAwID09PSB0aGluZ1xuICAgICAgICAgID8gXCJgdW5kZWZpbmVkYFwiXG4gICAgICAgICAgOiBcIlwiID09PSB0aGluZ1xuICAgICAgICAgICAgPyBcImFuIGVtcHR5IHN0cmluZ1wiXG4gICAgICAgICAgICA6IFwic3RyaW5nXCIgPT09IHR5cGVvZiB0aGluZ1xuICAgICAgICAgICAgICA/IEpTT04uc3RyaW5naWZ5KHRoaW5nKVxuICAgICAgICAgICAgICA6IFwibnVtYmVyXCIgPT09IHR5cGVvZiB0aGluZ1xuICAgICAgICAgICAgICAgID8gXCJgXCIgKyB0aGluZyArIFwiYFwiXG4gICAgICAgICAgICAgICAgOiAnc29tZXRoaW5nIHdpdGggdHlwZSBcIicgKyB0eXBlb2YgdGhpbmcgKyAnXCInO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlRGlzcGF0Y2hlcigpIHtcbiAgICAgIHZhciBkaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgIG51bGwgPT09IGRpc3BhdGNoZXIgJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkludmFsaWQgaG9vayBjYWxsLiBIb29rcyBjYW4gb25seSBiZSBjYWxsZWQgaW5zaWRlIG9mIHRoZSBib2R5IG9mIGEgZnVuY3Rpb24gY29tcG9uZW50LiBUaGlzIGNvdWxkIGhhcHBlbiBmb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcXG4xLiBZb3UgbWlnaHQgaGF2ZSBtaXNtYXRjaGluZyB2ZXJzaW9ucyBvZiBSZWFjdCBhbmQgdGhlIHJlbmRlcmVyIChzdWNoIGFzIFJlYWN0IERPTSlcXG4yLiBZb3UgbWlnaHQgYmUgYnJlYWtpbmcgdGhlIFJ1bGVzIG9mIEhvb2tzXFxuMy4gWW91IG1pZ2h0IGhhdmUgbW9yZSB0aGFuIG9uZSBjb3B5IG9mIFJlYWN0IGluIHRoZSBzYW1lIGFwcFxcblNlZSBodHRwczovL3JlYWN0LmRldi9saW5rL2ludmFsaWQtaG9vay1jYWxsIGZvciB0aXBzIGFib3V0IGhvdyB0byBkZWJ1ZyBhbmQgZml4IHRoaXMgcHJvYmxlbS5cIlxuICAgICAgICApO1xuICAgICAgcmV0dXJuIGRpc3BhdGNoZXI7XG4gICAgfVxuICAgIFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gJiZcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT1cbiAgICAgICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RhcnQgJiZcbiAgICAgIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RhcnQoRXJyb3IoKSk7XG4gICAgdmFyIFJlYWN0ID0gcmVxdWlyZShcIm5leHQvZGlzdC9jb21waWxlZC9yZWFjdFwiKSxcbiAgICAgIEludGVybmFscyA9IHtcbiAgICAgICAgZDoge1xuICAgICAgICAgIGY6IG5vb3AsXG4gICAgICAgICAgcjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgIFwiSW52YWxpZCBmb3JtIGVsZW1lbnQuIHJlcXVlc3RGb3JtUmVzZXQgbXVzdCBiZSBwYXNzZWQgYSBmb3JtIHRoYXQgd2FzIHJlbmRlcmVkIGJ5IFJlYWN0LlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgRDogbm9vcCxcbiAgICAgICAgICBDOiBub29wLFxuICAgICAgICAgIEw6IG5vb3AsXG4gICAgICAgICAgbTogbm9vcCxcbiAgICAgICAgICBYOiBub29wLFxuICAgICAgICAgIFM6IG5vb3AsXG4gICAgICAgICAgTTogbm9vcFxuICAgICAgICB9LFxuICAgICAgICBwOiAwLFxuICAgICAgICBmaW5kRE9NTm9kZTogbnVsbFxuICAgICAgfSxcbiAgICAgIFJFQUNUX1BPUlRBTF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKSxcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzID1cbiAgICAgICAgUmVhY3QuX19DTElFTlRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFO1xuICAgIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBNYXAgJiZcbiAgICAgIG51bGwgIT0gTWFwLnByb3RvdHlwZSAmJlxuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgTWFwLnByb3RvdHlwZS5mb3JFYWNoICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBTZXQgJiZcbiAgICAgIG51bGwgIT0gU2V0LnByb3RvdHlwZSAmJlxuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgU2V0LnByb3RvdHlwZS5jbGVhciAmJlxuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgU2V0LnByb3RvdHlwZS5mb3JFYWNoKSB8fFxuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCJSZWFjdCBkZXBlbmRzIG9uIE1hcCBhbmQgU2V0IGJ1aWx0LWluIHR5cGVzLiBNYWtlIHN1cmUgdGhhdCB5b3UgbG9hZCBhIHBvbHlmaWxsIGluIG9sZGVyIGJyb3dzZXJzLiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtcG9seWZpbGxzXCJcbiAgICAgICk7XG4gICAgZXhwb3J0cy5fX0RPTV9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9XQVJOX1VTRVJTX1RIRVlfQ0FOTk9UX1VQR1JBREUgPVxuICAgICAgSW50ZXJuYWxzO1xuICAgIGV4cG9ydHMuY3JlYXRlUG9ydGFsID0gZnVuY3Rpb24gKGNoaWxkcmVuLCBjb250YWluZXIpIHtcbiAgICAgIHZhciBrZXkgPVxuICAgICAgICAyIDwgYXJndW1lbnRzLmxlbmd0aCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1syXSA/IGFyZ3VtZW50c1syXSA6IG51bGw7XG4gICAgICBpZiAoXG4gICAgICAgICFjb250YWluZXIgfHxcbiAgICAgICAgKDEgIT09IGNvbnRhaW5lci5ub2RlVHlwZSAmJlxuICAgICAgICAgIDkgIT09IGNvbnRhaW5lci5ub2RlVHlwZSAmJlxuICAgICAgICAgIDExICE9PSBjb250YWluZXIubm9kZVR5cGUpXG4gICAgICApXG4gICAgICAgIHRocm93IEVycm9yKFwiVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC5cIik7XG4gICAgICByZXR1cm4gY3JlYXRlUG9ydGFsJDEoY2hpbGRyZW4sIGNvbnRhaW5lciwgbnVsbCwga2V5KTtcbiAgICB9O1xuICAgIGV4cG9ydHMuZmx1c2hTeW5jID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICB2YXIgcHJldmlvdXNUcmFuc2l0aW9uID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCxcbiAgICAgICAgcHJldmlvdXNVcGRhdGVQcmlvcml0eSA9IEludGVybmFscy5wO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCgoUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IG51bGwpLCAoSW50ZXJuYWxzLnAgPSAyKSwgZm4pKVxuICAgICAgICAgIHJldHVybiBmbigpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSBwcmV2aW91c1RyYW5zaXRpb24pLFxuICAgICAgICAgIChJbnRlcm5hbHMucCA9IHByZXZpb3VzVXBkYXRlUHJpb3JpdHkpLFxuICAgICAgICAgIEludGVybmFscy5kLmYoKSAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJmbHVzaFN5bmMgd2FzIGNhbGxlZCBmcm9tIGluc2lkZSBhIGxpZmVjeWNsZSBtZXRob2QuIFJlYWN0IGNhbm5vdCBmbHVzaCB3aGVuIFJlYWN0IGlzIGFscmVhZHkgcmVuZGVyaW5nLiBDb25zaWRlciBtb3ZpbmcgdGhpcyBjYWxsIHRvIGEgc2NoZWR1bGVyIHRhc2sgb3IgbWljcm8gdGFzay5cIlxuICAgICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGV4cG9ydHMucHJlY29ubmVjdCA9IGZ1bmN0aW9uIChocmVmLCBvcHRpb25zKSB7XG4gICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgaHJlZiAmJiBocmVmXG4gICAgICAgID8gbnVsbCAhPSBvcHRpb25zICYmIFwib2JqZWN0XCIgIT09IHR5cGVvZiBvcHRpb25zXG4gICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlJlYWN0RE9NLnByZWNvbm5lY3QoKTogRXhwZWN0ZWQgdGhlIGBvcHRpb25zYCBhcmd1bWVudCAoc2Vjb25kKSB0byBiZSBhbiBvYmplY3QgYnV0IGVuY291bnRlcmVkICVzIGluc3RlYWQuIFRoZSBvbmx5IHN1cHBvcnRlZCBvcHRpb24gYXQgdGhpcyB0aW1lIGlzIGBjcm9zc09yaWdpbmAgd2hpY2ggYWNjZXB0cyBhIHN0cmluZy5cIixcbiAgICAgICAgICAgICAgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nRW51bUZvcldhcm5pbmcob3B0aW9ucylcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IG51bGwgIT0gb3B0aW9ucyAmJlxuICAgICAgICAgICAgXCJzdHJpbmdcIiAhPT0gdHlwZW9mIG9wdGlvbnMuY3Jvc3NPcmlnaW4gJiZcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVhY3RET00ucHJlY29ubmVjdCgpOiBFeHBlY3RlZCB0aGUgYGNyb3NzT3JpZ2luYCBvcHRpb24gKHNlY29uZCBhcmd1bWVudCkgdG8gYmUgYSBzdHJpbmcgYnV0IGVuY291bnRlcmVkICVzIGluc3RlYWQuIFRyeSByZW1vdmluZyB0aGlzIG9wdGlvbiBvciBwYXNzaW5nIGEgc3RyaW5nIHZhbHVlIGluc3RlYWQuXCIsXG4gICAgICAgICAgICAgIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ09iamVjdEZvcldhcm5pbmcob3B0aW9ucy5jcm9zc09yaWdpbilcbiAgICAgICAgICAgIClcbiAgICAgICAgOiBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJSZWFjdERPTS5wcmVjb25uZWN0KCk6IEV4cGVjdGVkIHRoZSBgaHJlZmAgYXJndW1lbnQgKGZpcnN0KSB0byBiZSBhIG5vbi1lbXB0eSBzdHJpbmcgYnV0IGVuY291bnRlcmVkICVzIGluc3RlYWQuXCIsXG4gICAgICAgICAgICBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdPYmplY3RGb3JXYXJuaW5nKGhyZWYpXG4gICAgICAgICAgKTtcbiAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBocmVmICYmXG4gICAgICAgIChvcHRpb25zXG4gICAgICAgICAgPyAoKG9wdGlvbnMgPSBvcHRpb25zLmNyb3NzT3JpZ2luKSxcbiAgICAgICAgICAgIChvcHRpb25zID1cbiAgICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnNcbiAgICAgICAgICAgICAgICA/IFwidXNlLWNyZWRlbnRpYWxzXCIgPT09IG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgID8gb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgICAgICAgOiB2b2lkIDApKVxuICAgICAgICAgIDogKG9wdGlvbnMgPSBudWxsKSxcbiAgICAgICAgSW50ZXJuYWxzLmQuQyhocmVmLCBvcHRpb25zKSk7XG4gICAgfTtcbiAgICBleHBvcnRzLnByZWZldGNoRE5TID0gZnVuY3Rpb24gKGhyZWYpIHtcbiAgICAgIGlmIChcInN0cmluZ1wiICE9PSB0eXBlb2YgaHJlZiB8fCAhaHJlZilcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIlJlYWN0RE9NLnByZWZldGNoRE5TKCk6IEV4cGVjdGVkIHRoZSBgaHJlZmAgYXJndW1lbnQgKGZpcnN0KSB0byBiZSBhIG5vbi1lbXB0eSBzdHJpbmcgYnV0IGVuY291bnRlcmVkICVzIGluc3RlYWQuXCIsXG4gICAgICAgICAgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nT2JqZWN0Rm9yV2FybmluZyhocmVmKVxuICAgICAgICApO1xuICAgICAgZWxzZSBpZiAoMSA8IGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHNbMV07XG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBvcHRpb25zICYmIG9wdGlvbnMuaGFzT3duUHJvcGVydHkoXCJjcm9zc09yaWdpblwiKVxuICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJSZWFjdERPTS5wcmVmZXRjaEROUygpOiBFeHBlY3RlZCBvbmx5IG9uZSBhcmd1bWVudCwgYGhyZWZgLCBidXQgZW5jb3VudGVyZWQgJXMgYXMgYSBzZWNvbmQgYXJndW1lbnQgaW5zdGVhZC4gVGhpcyBhcmd1bWVudCBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIG9wdGlvbnMgYW5kIGlzIGN1cnJlbnRseSBkaXNhbGxvd2VkLiBJdCBsb29rcyBsaWtlIHRoZSB5b3UgYXJlIGF0dGVtcHRpbmcgdG8gc2V0IGEgY3Jvc3NPcmlnaW4gcHJvcGVydHkgZm9yIHRoaXMgRE5TIGxvb2t1cCBoaW50LiBCcm93c2VycyBkbyBub3QgcGVyZm9ybSBETlMgcXVlcmllcyB1c2luZyBDT1JTIGFuZCBzZXR0aW5nIHRoaXMgYXR0cmlidXRlIG9uIHRoZSByZXNvdXJjZSBoaW50IGhhcyBubyBlZmZlY3QuIFRyeSBjYWxsaW5nIFJlYWN0RE9NLnByZWZldGNoRE5TKCkgd2l0aCBqdXN0IGEgc2luZ2xlIHN0cmluZyBhcmd1bWVudCwgYGhyZWZgLlwiLFxuICAgICAgICAgICAgICBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdFbnVtRm9yV2FybmluZyhvcHRpb25zKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJSZWFjdERPTS5wcmVmZXRjaEROUygpOiBFeHBlY3RlZCBvbmx5IG9uZSBhcmd1bWVudCwgYGhyZWZgLCBidXQgZW5jb3VudGVyZWQgJXMgYXMgYSBzZWNvbmQgYXJndW1lbnQgaW5zdGVhZC4gVGhpcyBhcmd1bWVudCBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIG9wdGlvbnMgYW5kIGlzIGN1cnJlbnRseSBkaXNhbGxvd2VkLiBUcnkgY2FsbGluZyBSZWFjdERPTS5wcmVmZXRjaEROUygpIHdpdGgganVzdCBhIHNpbmdsZSBzdHJpbmcgYXJndW1lbnQsIGBocmVmYC5cIixcbiAgICAgICAgICAgICAgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nRW51bUZvcldhcm5pbmcob3B0aW9ucylcbiAgICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgaHJlZiAmJiBJbnRlcm5hbHMuZC5EKGhyZWYpO1xuICAgIH07XG4gICAgZXhwb3J0cy5wcmVpbml0ID0gZnVuY3Rpb24gKGhyZWYsIG9wdGlvbnMpIHtcbiAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBocmVmICYmIGhyZWZcbiAgICAgICAgPyBudWxsID09IG9wdGlvbnMgfHwgXCJvYmplY3RcIiAhPT0gdHlwZW9mIG9wdGlvbnNcbiAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVhY3RET00ucHJlaW5pdCgpOiBFeHBlY3RlZCB0aGUgYG9wdGlvbnNgIGFyZ3VtZW50IChzZWNvbmQpIHRvIGJlIGFuIG9iamVjdCB3aXRoIGFuIGBhc2AgcHJvcGVydHkgZGVzY3JpYmluZyB0aGUgdHlwZSBvZiByZXNvdXJjZSB0byBiZSBwcmVpbml0aWFsaXplZCBidXQgZW5jb3VudGVyZWQgJXMgaW5zdGVhZC5cIixcbiAgICAgICAgICAgICAgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nRW51bUZvcldhcm5pbmcob3B0aW9ucylcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IFwic3R5bGVcIiAhPT0gb3B0aW9ucy5hcyAmJlxuICAgICAgICAgICAgXCJzY3JpcHRcIiAhPT0gb3B0aW9ucy5hcyAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgJ1JlYWN0RE9NLnByZWluaXQoKTogRXhwZWN0ZWQgdGhlIGBhc2AgcHJvcGVydHkgaW4gdGhlIGBvcHRpb25zYCBhcmd1bWVudCAoc2Vjb25kKSB0byBjb250YWluIGEgdmFsaWQgdmFsdWUgZGVzY3JpYmluZyB0aGUgdHlwZSBvZiByZXNvdXJjZSB0byBiZSBwcmVpbml0aWFsaXplZCBidXQgZW5jb3VudGVyZWQgJXMgaW5zdGVhZC4gVmFsaWQgdmFsdWVzIGZvciBgYXNgIGFyZSBcInN0eWxlXCIgYW5kIFwic2NyaXB0XCIuJyxcbiAgICAgICAgICAgICAgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nRW51bUZvcldhcm5pbmcob3B0aW9ucy5hcylcbiAgICAgICAgICAgIClcbiAgICAgICAgOiBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJSZWFjdERPTS5wcmVpbml0KCk6IEV4cGVjdGVkIHRoZSBgaHJlZmAgYXJndW1lbnQgKGZpcnN0KSB0byBiZSBhIG5vbi1lbXB0eSBzdHJpbmcgYnV0IGVuY291bnRlcmVkICVzIGluc3RlYWQuXCIsXG4gICAgICAgICAgICBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdPYmplY3RGb3JXYXJuaW5nKGhyZWYpXG4gICAgICAgICAgKTtcbiAgICAgIGlmIChcbiAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGhyZWYgJiZcbiAgICAgICAgb3B0aW9ucyAmJlxuICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5hc1xuICAgICAgKSB7XG4gICAgICAgIHZhciBhcyA9IG9wdGlvbnMuYXMsXG4gICAgICAgICAgY3Jvc3NPcmlnaW4gPSBnZXRDcm9zc09yaWdpblN0cmluZ0FzKGFzLCBvcHRpb25zLmNyb3NzT3JpZ2luKSxcbiAgICAgICAgICBpbnRlZ3JpdHkgPVxuICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMuaW50ZWdyaXR5ID8gb3B0aW9ucy5pbnRlZ3JpdHkgOiB2b2lkIDAsXG4gICAgICAgICAgZmV0Y2hQcmlvcml0eSA9XG4gICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5mZXRjaFByaW9yaXR5XG4gICAgICAgICAgICAgID8gb3B0aW9ucy5mZXRjaFByaW9yaXR5XG4gICAgICAgICAgICAgIDogdm9pZCAwO1xuICAgICAgICBcInN0eWxlXCIgPT09IGFzXG4gICAgICAgICAgPyBJbnRlcm5hbHMuZC5TKFxuICAgICAgICAgICAgICBocmVmLFxuICAgICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5wcmVjZWRlbmNlXG4gICAgICAgICAgICAgICAgPyBvcHRpb25zLnByZWNlZGVuY2VcbiAgICAgICAgICAgICAgICA6IHZvaWQgMCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiBjcm9zc09yaWdpbixcbiAgICAgICAgICAgICAgICBpbnRlZ3JpdHk6IGludGVncml0eSxcbiAgICAgICAgICAgICAgICBmZXRjaFByaW9yaXR5OiBmZXRjaFByaW9yaXR5XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IFwic2NyaXB0XCIgPT09IGFzICYmXG4gICAgICAgICAgICBJbnRlcm5hbHMuZC5YKGhyZWYsIHtcbiAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IGNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgICBpbnRlZ3JpdHk6IGludGVncml0eSxcbiAgICAgICAgICAgICAgZmV0Y2hQcmlvcml0eTogZmV0Y2hQcmlvcml0eSxcbiAgICAgICAgICAgICAgbm9uY2U6IFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLm5vbmNlID8gb3B0aW9ucy5ub25jZSA6IHZvaWQgMFxuICAgICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBleHBvcnRzLnByZWluaXRNb2R1bGUgPSBmdW5jdGlvbiAoaHJlZiwgb3B0aW9ucykge1xuICAgICAgdmFyIGVuY291bnRlcmVkID0gXCJcIjtcbiAgICAgIChcInN0cmluZ1wiID09PSB0eXBlb2YgaHJlZiAmJiBocmVmKSB8fFxuICAgICAgICAoZW5jb3VudGVyZWQgKz1cbiAgICAgICAgICBcIiBUaGUgYGhyZWZgIGFyZ3VtZW50IGVuY291bnRlcmVkIHdhcyBcIiArXG4gICAgICAgICAgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nT2JqZWN0Rm9yV2FybmluZyhocmVmKSArXG4gICAgICAgICAgXCIuXCIpO1xuICAgICAgdm9pZCAwICE9PSBvcHRpb25zICYmIFwib2JqZWN0XCIgIT09IHR5cGVvZiBvcHRpb25zXG4gICAgICAgID8gKGVuY291bnRlcmVkICs9XG4gICAgICAgICAgICBcIiBUaGUgYG9wdGlvbnNgIGFyZ3VtZW50IGVuY291bnRlcmVkIHdhcyBcIiArXG4gICAgICAgICAgICBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdPYmplY3RGb3JXYXJuaW5nKG9wdGlvbnMpICtcbiAgICAgICAgICAgIFwiLlwiKVxuICAgICAgICA6IG9wdGlvbnMgJiZcbiAgICAgICAgICBcImFzXCIgaW4gb3B0aW9ucyAmJlxuICAgICAgICAgIFwic2NyaXB0XCIgIT09IG9wdGlvbnMuYXMgJiZcbiAgICAgICAgICAoZW5jb3VudGVyZWQgKz1cbiAgICAgICAgICAgIFwiIFRoZSBgYXNgIG9wdGlvbiBlbmNvdW50ZXJlZCB3YXMgXCIgK1xuICAgICAgICAgICAgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nRW51bUZvcldhcm5pbmcob3B0aW9ucy5hcykgK1xuICAgICAgICAgICAgXCIuXCIpO1xuICAgICAgaWYgKGVuY291bnRlcmVkKVxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiUmVhY3RET00ucHJlaW5pdE1vZHVsZSgpOiBFeHBlY3RlZCB1cCB0byB0d28gYXJndW1lbnRzLCBhIG5vbi1lbXB0eSBgaHJlZmAgc3RyaW5nIGFuZCwgb3B0aW9uYWxseSwgYW4gYG9wdGlvbnNgIG9iamVjdCB3aXRoIGEgdmFsaWQgYGFzYCBwcm9wZXJ0eS4lc1wiLFxuICAgICAgICAgIGVuY291bnRlcmVkXG4gICAgICAgICk7XG4gICAgICBlbHNlXG4gICAgICAgIHN3aXRjaCAoXG4gICAgICAgICAgKChlbmNvdW50ZXJlZCA9XG4gICAgICAgICAgICBvcHRpb25zICYmIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLmFzID8gb3B0aW9ucy5hcyA6IFwic2NyaXB0XCIpLFxuICAgICAgICAgIGVuY291bnRlcmVkKVxuICAgICAgICApIHtcbiAgICAgICAgICBjYXNlIFwic2NyaXB0XCI6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgKGVuY291bnRlcmVkID1cbiAgICAgICAgICAgICAgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nRW51bUZvcldhcm5pbmcoZW5jb3VudGVyZWQpKSxcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAnUmVhY3RET00ucHJlaW5pdE1vZHVsZSgpOiBDdXJyZW50bHkgdGhlIG9ubHkgc3VwcG9ydGVkIFwiYXNcIiB0eXBlIGZvciB0aGlzIGZ1bmN0aW9uIGlzIFwic2NyaXB0XCIgYnV0IHJlY2VpdmVkIFwiJXNcIiBpbnN0ZWFkLiBUaGlzIHdhcm5pbmcgd2FzIGdlbmVyYXRlZCBmb3IgYGhyZWZgIFwiJXNcIi4gSW4gdGhlIGZ1dHVyZSBvdGhlciBtb2R1bGUgdHlwZXMgd2lsbCBiZSBzdXBwb3J0ZWQsIGFsaWduaW5nIHdpdGggdGhlIGltcG9ydC1hdHRyaWJ1dGVzIHByb3Bvc2FsLiBMZWFybiBtb3JlIGhlcmU6IChodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1pbXBvcnQtYXR0cmlidXRlcyknLFxuICAgICAgICAgICAgICAgIGVuY291bnRlcmVkLFxuICAgICAgICAgICAgICAgIGhyZWZcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBocmVmKVxuICAgICAgICBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIG9wdGlvbnMgJiYgbnVsbCAhPT0gb3B0aW9ucykge1xuICAgICAgICAgIGlmIChudWxsID09IG9wdGlvbnMuYXMgfHwgXCJzY3JpcHRcIiA9PT0gb3B0aW9ucy5hcylcbiAgICAgICAgICAgIChlbmNvdW50ZXJlZCA9IGdldENyb3NzT3JpZ2luU3RyaW5nQXMoXG4gICAgICAgICAgICAgIG9wdGlvbnMuYXMsXG4gICAgICAgICAgICAgIG9wdGlvbnMuY3Jvc3NPcmlnaW5cbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICBJbnRlcm5hbHMuZC5NKGhyZWYsIHtcbiAgICAgICAgICAgICAgICBjcm9zc09yaWdpbjogZW5jb3VudGVyZWQsXG4gICAgICAgICAgICAgICAgaW50ZWdyaXR5OlxuICAgICAgICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMuaW50ZWdyaXR5XG4gICAgICAgICAgICAgICAgICAgID8gb3B0aW9ucy5pbnRlZ3JpdHlcbiAgICAgICAgICAgICAgICAgICAgOiB2b2lkIDAsXG4gICAgICAgICAgICAgICAgbm9uY2U6XG4gICAgICAgICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5ub25jZSA/IG9wdGlvbnMubm9uY2UgOiB2b2lkIDBcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBudWxsID09IG9wdGlvbnMgJiYgSW50ZXJuYWxzLmQuTShocmVmKTtcbiAgICB9O1xuICAgIGV4cG9ydHMucHJlbG9hZCA9IGZ1bmN0aW9uIChocmVmLCBvcHRpb25zKSB7XG4gICAgICB2YXIgZW5jb3VudGVyZWQgPSBcIlwiO1xuICAgICAgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBocmVmICYmIGhyZWYpIHx8XG4gICAgICAgIChlbmNvdW50ZXJlZCArPVxuICAgICAgICAgIFwiIFRoZSBgaHJlZmAgYXJndW1lbnQgZW5jb3VudGVyZWQgd2FzIFwiICtcbiAgICAgICAgICBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdPYmplY3RGb3JXYXJuaW5nKGhyZWYpICtcbiAgICAgICAgICBcIi5cIik7XG4gICAgICBudWxsID09IG9wdGlvbnMgfHwgXCJvYmplY3RcIiAhPT0gdHlwZW9mIG9wdGlvbnNcbiAgICAgICAgPyAoZW5jb3VudGVyZWQgKz1cbiAgICAgICAgICAgIFwiIFRoZSBgb3B0aW9uc2AgYXJndW1lbnQgZW5jb3VudGVyZWQgd2FzIFwiICtcbiAgICAgICAgICAgIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ09iamVjdEZvcldhcm5pbmcob3B0aW9ucykgK1xuICAgICAgICAgICAgXCIuXCIpXG4gICAgICAgIDogKFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLmFzICYmIG9wdGlvbnMuYXMpIHx8XG4gICAgICAgICAgKGVuY291bnRlcmVkICs9XG4gICAgICAgICAgICBcIiBUaGUgYGFzYCBvcHRpb24gZW5jb3VudGVyZWQgd2FzIFwiICtcbiAgICAgICAgICAgIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ09iamVjdEZvcldhcm5pbmcob3B0aW9ucy5hcykgK1xuICAgICAgICAgICAgXCIuXCIpO1xuICAgICAgZW5jb3VudGVyZWQgJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAnUmVhY3RET00ucHJlbG9hZCgpOiBFeHBlY3RlZCB0d28gYXJndW1lbnRzLCBhIG5vbi1lbXB0eSBgaHJlZmAgc3RyaW5nIGFuZCBhbiBgb3B0aW9uc2Agb2JqZWN0IHdpdGggYW4gYGFzYCBwcm9wZXJ0eSB2YWxpZCBmb3IgYSBgPGxpbmsgcmVsPVwicHJlbG9hZFwiIGFzPVwiLi4uXCIgLz5gIHRhZy4lcycsXG4gICAgICAgICAgZW5jb3VudGVyZWRcbiAgICAgICAgKTtcbiAgICAgIGlmIChcbiAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGhyZWYgJiZcbiAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIG9wdGlvbnMgJiZcbiAgICAgICAgbnVsbCAhPT0gb3B0aW9ucyAmJlxuICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5hc1xuICAgICAgKSB7XG4gICAgICAgIGVuY291bnRlcmVkID0gb3B0aW9ucy5hcztcbiAgICAgICAgdmFyIGNyb3NzT3JpZ2luID0gZ2V0Q3Jvc3NPcmlnaW5TdHJpbmdBcyhcbiAgICAgICAgICBlbmNvdW50ZXJlZCxcbiAgICAgICAgICBvcHRpb25zLmNyb3NzT3JpZ2luXG4gICAgICAgICk7XG4gICAgICAgIEludGVybmFscy5kLkwoaHJlZiwgZW5jb3VudGVyZWQsIHtcbiAgICAgICAgICBjcm9zc09yaWdpbjogY3Jvc3NPcmlnaW4sXG4gICAgICAgICAgaW50ZWdyaXR5OlxuICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMuaW50ZWdyaXR5ID8gb3B0aW9ucy5pbnRlZ3JpdHkgOiB2b2lkIDAsXG4gICAgICAgICAgbm9uY2U6IFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLm5vbmNlID8gb3B0aW9ucy5ub25jZSA6IHZvaWQgMCxcbiAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy50eXBlID8gb3B0aW9ucy50eXBlIDogdm9pZCAwLFxuICAgICAgICAgIGZldGNoUHJpb3JpdHk6XG4gICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5mZXRjaFByaW9yaXR5XG4gICAgICAgICAgICAgID8gb3B0aW9ucy5mZXRjaFByaW9yaXR5XG4gICAgICAgICAgICAgIDogdm9pZCAwLFxuICAgICAgICAgIHJlZmVycmVyUG9saWN5OlxuICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMucmVmZXJyZXJQb2xpY3lcbiAgICAgICAgICAgICAgPyBvcHRpb25zLnJlZmVycmVyUG9saWN5XG4gICAgICAgICAgICAgIDogdm9pZCAwLFxuICAgICAgICAgIGltYWdlU3JjU2V0OlxuICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMuaW1hZ2VTcmNTZXRcbiAgICAgICAgICAgICAgPyBvcHRpb25zLmltYWdlU3JjU2V0XG4gICAgICAgICAgICAgIDogdm9pZCAwLFxuICAgICAgICAgIGltYWdlU2l6ZXM6XG4gICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5pbWFnZVNpemVzXG4gICAgICAgICAgICAgID8gb3B0aW9ucy5pbWFnZVNpemVzXG4gICAgICAgICAgICAgIDogdm9pZCAwLFxuICAgICAgICAgIG1lZGlhOiBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5tZWRpYSA/IG9wdGlvbnMubWVkaWEgOiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBleHBvcnRzLnByZWxvYWRNb2R1bGUgPSBmdW5jdGlvbiAoaHJlZiwgb3B0aW9ucykge1xuICAgICAgdmFyIGVuY291bnRlcmVkID0gXCJcIjtcbiAgICAgIChcInN0cmluZ1wiID09PSB0eXBlb2YgaHJlZiAmJiBocmVmKSB8fFxuICAgICAgICAoZW5jb3VudGVyZWQgKz1cbiAgICAgICAgICBcIiBUaGUgYGhyZWZgIGFyZ3VtZW50IGVuY291bnRlcmVkIHdhcyBcIiArXG4gICAgICAgICAgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nT2JqZWN0Rm9yV2FybmluZyhocmVmKSArXG4gICAgICAgICAgXCIuXCIpO1xuICAgICAgdm9pZCAwICE9PSBvcHRpb25zICYmIFwib2JqZWN0XCIgIT09IHR5cGVvZiBvcHRpb25zXG4gICAgICAgID8gKGVuY291bnRlcmVkICs9XG4gICAgICAgICAgICBcIiBUaGUgYG9wdGlvbnNgIGFyZ3VtZW50IGVuY291bnRlcmVkIHdhcyBcIiArXG4gICAgICAgICAgICBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdPYmplY3RGb3JXYXJuaW5nKG9wdGlvbnMpICtcbiAgICAgICAgICAgIFwiLlwiKVxuICAgICAgICA6IG9wdGlvbnMgJiZcbiAgICAgICAgICBcImFzXCIgaW4gb3B0aW9ucyAmJlxuICAgICAgICAgIFwic3RyaW5nXCIgIT09IHR5cGVvZiBvcHRpb25zLmFzICYmXG4gICAgICAgICAgKGVuY291bnRlcmVkICs9XG4gICAgICAgICAgICBcIiBUaGUgYGFzYCBvcHRpb24gZW5jb3VudGVyZWQgd2FzIFwiICtcbiAgICAgICAgICAgIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ09iamVjdEZvcldhcm5pbmcob3B0aW9ucy5hcykgK1xuICAgICAgICAgICAgXCIuXCIpO1xuICAgICAgZW5jb3VudGVyZWQgJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAnUmVhY3RET00ucHJlbG9hZE1vZHVsZSgpOiBFeHBlY3RlZCB0d28gYXJndW1lbnRzLCBhIG5vbi1lbXB0eSBgaHJlZmAgc3RyaW5nIGFuZCwgb3B0aW9uYWxseSwgYW4gYG9wdGlvbnNgIG9iamVjdCB3aXRoIGFuIGBhc2AgcHJvcGVydHkgdmFsaWQgZm9yIGEgYDxsaW5rIHJlbD1cIm1vZHVsZXByZWxvYWRcIiBhcz1cIi4uLlwiIC8+YCB0YWcuJXMnLFxuICAgICAgICAgIGVuY291bnRlcmVkXG4gICAgICAgICk7XG4gICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgaHJlZiAmJlxuICAgICAgICAob3B0aW9uc1xuICAgICAgICAgID8gKChlbmNvdW50ZXJlZCA9IGdldENyb3NzT3JpZ2luU3RyaW5nQXMoXG4gICAgICAgICAgICAgIG9wdGlvbnMuYXMsXG4gICAgICAgICAgICAgIG9wdGlvbnMuY3Jvc3NPcmlnaW5cbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgSW50ZXJuYWxzLmQubShocmVmLCB7XG4gICAgICAgICAgICAgIGFzOlxuICAgICAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLmFzICYmIFwic2NyaXB0XCIgIT09IG9wdGlvbnMuYXNcbiAgICAgICAgICAgICAgICAgID8gb3B0aW9ucy5hc1xuICAgICAgICAgICAgICAgICAgOiB2b2lkIDAsXG4gICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiBlbmNvdW50ZXJlZCxcbiAgICAgICAgICAgICAgaW50ZWdyaXR5OlxuICAgICAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLmludGVncml0eVxuICAgICAgICAgICAgICAgICAgPyBvcHRpb25zLmludGVncml0eVxuICAgICAgICAgICAgICAgICAgOiB2b2lkIDBcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIDogSW50ZXJuYWxzLmQubShocmVmKSk7XG4gICAgfTtcbiAgICBleHBvcnRzLnJlcXVlc3RGb3JtUmVzZXQgPSBmdW5jdGlvbiAoZm9ybSkge1xuICAgICAgSW50ZXJuYWxzLmQucihmb3JtKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMgPSBmdW5jdGlvbiAoZm4sIGEpIHtcbiAgICAgIHJldHVybiBmbihhKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudXNlRm9ybVN0YXRlID0gZnVuY3Rpb24gKGFjdGlvbiwgaW5pdGlhbFN0YXRlLCBwZXJtYWxpbmspIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZUZvcm1TdGF0ZShhY3Rpb24sIGluaXRpYWxTdGF0ZSwgcGVybWFsaW5rKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudXNlRm9ybVN0YXR1cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzKCk7XG4gICAgfTtcbiAgICBleHBvcnRzLnZlcnNpb24gPSBcIjE5LjIuMC1jYW5hcnktOTdjZGQ1ZDMtMjAyNTA3MTBcIjtcbiAgICBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0b3AgJiZcbiAgICAgIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RvcChFcnJvcigpKTtcbiAgfSkoKTtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react-dom/client.js":
|
||
/*!*************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/react-dom/client.js ***!
|
||
\*************************************************************/
|
||
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (true) {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-dom-client.development.js */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom-client.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QtZG9tL2NsaWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxJQUFxQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJLEtBQXFDLEVBQUUsRUFLMUMsQ0FBQztBQUNGLEVBQUUsd0xBQWlFO0FBQ25FIiwic291cmNlcyI6WyIvaG9tZS9OaWNob2xhaS9Eb2N1bWVudHMvRGV2L2Jpb2hhemFyZC12ZngtMS9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0LWRvbS9jbGllbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBjaGVja0RDRSgpIHtcbiAgLyogZ2xvYmFsIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAqL1xuICBpZiAoXG4gICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFICE9PSAnZnVuY3Rpb24nXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIFRoaXMgYnJhbmNoIGlzIHVucmVhY2hhYmxlIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZFxuICAgIC8vIGluIHByb2R1Y3Rpb24sIGJ1dCB0aGUgY29uZGl0aW9uIGlzIHRydWUgb25seSBpbiBkZXZlbG9wbWVudC5cbiAgICAvLyBUaGVyZWZvcmUgaWYgdGhlIGJyYW5jaCBpcyBzdGlsbCBoZXJlLCBkZWFkIGNvZGUgZWxpbWluYXRpb24gd2Fzbid0XG4gICAgLy8gcHJvcGVybHkgYXBwbGllZC5cbiAgICAvLyBEb24ndCBjaGFuZ2UgdGhlIG1lc3NhZ2UuIFJlYWN0IERldlRvb2xzIHJlbGllcyBvbiBpdC4gQWxzbyBtYWtlIHN1cmVcbiAgICAvLyB0aGlzIG1lc3NhZ2UgZG9lc24ndCBvY2N1ciBlbHNld2hlcmUgaW4gdGhpcyBmdW5jdGlvbiwgb3IgaXQgd2lsbCBjYXVzZVxuICAgIC8vIGEgZmFsc2UgcG9zaXRpdmUuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdeX14nKTtcbiAgfVxuICB0cnkge1xuICAgIC8vIFZlcmlmeSB0aGF0IHRoZSBjb2RlIGFib3ZlIGhhcyBiZWVuIGRlYWQgY29kZSBlbGltaW5hdGVkIChEQ0UnZCkuXG4gICAgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFKGNoZWNrRENFKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gRGV2VG9vbHMgc2hvdWxkbid0IGNyYXNoIFJlYWN0LCBubyBtYXR0ZXIgd2hhdC5cbiAgICAvLyBXZSBzaG91bGQgc3RpbGwgcmVwb3J0IGluIGNhc2Ugd2UgYnJlYWsgdGhpcyBjb2RlLlxuICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgfVxufVxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICAvLyBEQ0UgY2hlY2sgc2hvdWxkIGhhcHBlbiBiZWZvcmUgUmVhY3RET00gYnVuZGxlIGV4ZWN1dGVzIHNvIHRoYXRcbiAgLy8gRGV2VG9vbHMgY2FuIHJlcG9ydCBiYWQgbWluaWZpY2F0aW9uIGR1cmluZyBpbmplY3Rpb24uXG4gIGNoZWNrRENFKCk7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtZG9tLWNsaWVudC5wcm9kdWN0aW9uLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWRvbS1jbGllbnQuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react-dom/client.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react-dom/index.js":
|
||
/*!************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/react-dom/index.js ***!
|
||
\************************************************************/
|
||
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (true) {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-dom.development.js */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QtZG9tL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLElBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLElBQUksS0FBcUMsRUFBRSxFQUsxQyxDQUFDO0FBQ0YsRUFBRSwwS0FBMEQ7QUFDNUQiLCJzb3VyY2VzIjpbIi9ob21lL05pY2hvbGFpL0RvY3VtZW50cy9EZXYvYmlvaGF6YXJkLXZmeC0xL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QtZG9tL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gY2hlY2tEQ0UoKSB7XG4gIC8qIGdsb2JhbCBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gKi9cbiAgaWYgKFxuICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gPT09ICd1bmRlZmluZWQnIHx8XG4gICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRSAhPT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBUaGlzIGJyYW5jaCBpcyB1bnJlYWNoYWJsZSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWRcbiAgICAvLyBpbiBwcm9kdWN0aW9uLCBidXQgdGhlIGNvbmRpdGlvbiBpcyB0cnVlIG9ubHkgaW4gZGV2ZWxvcG1lbnQuXG4gICAgLy8gVGhlcmVmb3JlIGlmIHRoZSBicmFuY2ggaXMgc3RpbGwgaGVyZSwgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIHdhc24ndFxuICAgIC8vIHByb3Blcmx5IGFwcGxpZWQuXG4gICAgLy8gRG9uJ3QgY2hhbmdlIHRoZSBtZXNzYWdlLiBSZWFjdCBEZXZUb29scyByZWxpZXMgb24gaXQuIEFsc28gbWFrZSBzdXJlXG4gICAgLy8gdGhpcyBtZXNzYWdlIGRvZXNuJ3Qgb2NjdXIgZWxzZXdoZXJlIGluIHRoaXMgZnVuY3Rpb24sIG9yIGl0IHdpbGwgY2F1c2VcbiAgICAvLyBhIGZhbHNlIHBvc2l0aXZlLlxuICAgIHRocm93IG5ldyBFcnJvcignXl9eJyk7XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyBWZXJpZnkgdGhhdCB0aGUgY29kZSBhYm92ZSBoYXMgYmVlbiBkZWFkIGNvZGUgZWxpbWluYXRlZCAoRENFJ2QpLlxuICAgIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRShjaGVja0RDRSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIERldlRvb2xzIHNob3VsZG4ndCBjcmFzaCBSZWFjdCwgbm8gbWF0dGVyIHdoYXQuXG4gICAgLy8gV2Ugc2hvdWxkIHN0aWxsIHJlcG9ydCBpbiBjYXNlIHdlIGJyZWFrIHRoaXMgY29kZS5cbiAgICBjb25zb2xlLmVycm9yKGVycik7XG4gIH1cbn1cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgLy8gRENFIGNoZWNrIHNob3VsZCBoYXBwZW4gYmVmb3JlIFJlYWN0RE9NIGJ1bmRsZSBleGVjdXRlcyBzbyB0aGF0XG4gIC8vIERldlRvb2xzIGNhbiByZXBvcnQgYmFkIG1pbmlmaWNhdGlvbiBkdXJpbmcgaW5qZWN0aW9uLlxuICBjaGVja0RDRSgpO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWRvbS5wcm9kdWN0aW9uLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWRvbS5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react-dom/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react-refresh/cjs/react-refresh-runtime.development.js":
|
||
/*!************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/react-refresh/cjs/react-refresh-runtime.development.js ***!
|
||
\************************************************************************************************/
|
||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * @license React\n * react-refresh-runtime.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nif (true) {\n (function() {\n'use strict';\n\n// ATTENTION\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\n\nvar PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map; // We never remove these associations.\n// It's OK to reference families, but use WeakMap/Set for types.\n\nvar allFamiliesByID = new Map();\nvar allFamiliesByType = new PossiblyWeakMap();\nvar allSignaturesByType = new PossiblyWeakMap(); // This WeakMap is read by React, so we only put families\n// that have actually been edited here. This keeps checks fast.\n// $FlowIssue\n\nvar updatedFamiliesByType = new PossiblyWeakMap(); // This is cleared on every performReactRefresh() call.\n// It is an array of [Family, NextType] tuples.\n\nvar pendingUpdates = []; // This is injected by the renderer via DevTools global hook.\n\nvar helpersByRendererID = new Map();\nvar helpersByRoot = new Map(); // We keep track of mounted roots so we can schedule updates.\n\nvar mountedRoots = new Set(); // If a root captures an error, we remember it so we can retry on edit.\n\nvar failedRoots = new Set(); // In environments that support WeakMap, we also remember the last element for every root.\n// It needs to be weak because we do this even for roots that failed to mount.\n// If there is no WeakMap, we won't attempt to do retrying.\n// $FlowIssue\n\nvar rootElements = // $FlowIssue\ntypeof WeakMap === 'function' ? new WeakMap() : null;\nvar isPerformingRefresh = false;\n\nfunction computeFullKey(signature) {\n if (signature.fullKey !== null) {\n return signature.fullKey;\n }\n\n var fullKey = signature.ownKey;\n var hooks;\n\n try {\n hooks = signature.getCustomHooks();\n } catch (err) {\n // This can happen in an edge case, e.g. if expression like Foo.useSomething\n // depends on Foo which is lazily initialized during rendering.\n // In that case just assume we'll have to remount.\n signature.forceReset = true;\n signature.fullKey = fullKey;\n return fullKey;\n }\n\n for (var i = 0; i < hooks.length; i++) {\n var hook = hooks[i];\n\n if (typeof hook !== 'function') {\n // Something's wrong. Assume we need to remount.\n signature.forceReset = true;\n signature.fullKey = fullKey;\n return fullKey;\n }\n\n var nestedHookSignature = allSignaturesByType.get(hook);\n\n if (nestedHookSignature === undefined) {\n // No signature means Hook wasn't in the source code, e.g. in a library.\n // We'll skip it because we can assume it won't change during this session.\n continue;\n }\n\n var nestedHookKey = computeFullKey(nestedHookSignature);\n\n if (nestedHookSignature.forceReset) {\n signature.forceReset = true;\n }\n\n fullKey += '\\n---\\n' + nestedHookKey;\n }\n\n signature.fullKey = fullKey;\n return fullKey;\n}\n\nfunction haveEqualSignatures(prevType, nextType) {\n var prevSignature = allSignaturesByType.get(prevType);\n var nextSignature = allSignaturesByType.get(nextType);\n\n if (prevSignature === undefined && nextSignature === undefined) {\n return true;\n }\n\n if (prevSignature === undefined || nextSignature === undefined) {\n return false;\n }\n\n if (computeFullKey(prevSignature) !== computeFullKey(nextSignature)) {\n return false;\n }\n\n if (nextSignature.forceReset) {\n return false;\n }\n\n return true;\n}\n\nfunction isReactClass(type) {\n return type.prototype && type.prototype.isReactComponent;\n}\n\nfunction canPreserveStateBetween(prevType, nextType) {\n if (isReactClass(prevType) || isReactClass(nextType)) {\n return false;\n }\n\n if (haveEqualSignatures(prevType, nextType)) {\n return true;\n }\n\n return false;\n}\n\nfunction resolveFamily(type) {\n // Only check updated types to keep lookups fast.\n return updatedFamiliesByType.get(type);\n} // If we didn't care about IE11, we could use new Map/Set(iterable).\n\n\nfunction cloneMap(map) {\n var clone = new Map();\n map.forEach(function (value, key) {\n clone.set(key, value);\n });\n return clone;\n}\n\nfunction cloneSet(set) {\n var clone = new Set();\n set.forEach(function (value) {\n clone.add(value);\n });\n return clone;\n} // This is a safety mechanism to protect against rogue getters and Proxies.\n\n\nfunction getProperty(object, property) {\n try {\n return object[property];\n } catch (err) {\n // Intentionally ignore.\n return undefined;\n }\n}\n\nfunction performReactRefresh() {\n\n if (pendingUpdates.length === 0) {\n return null;\n }\n\n if (isPerformingRefresh) {\n return null;\n }\n\n isPerformingRefresh = true;\n\n try {\n var staleFamilies = new Set();\n var updatedFamilies = new Set();\n var updates = pendingUpdates;\n pendingUpdates = [];\n updates.forEach(function (_ref) {\n var family = _ref[0],\n nextType = _ref[1];\n // Now that we got a real edit, we can create associations\n // that will be read by the React reconciler.\n var prevType = family.current;\n updatedFamiliesByType.set(prevType, family);\n updatedFamiliesByType.set(nextType, family);\n family.current = nextType; // Determine whether this should be a re-render or a re-mount.\n\n if (canPreserveStateBetween(prevType, nextType)) {\n updatedFamilies.add(family);\n } else {\n staleFamilies.add(family);\n }\n }); // TODO: rename these fields to something more meaningful.\n\n var update = {\n updatedFamilies: updatedFamilies,\n // Families that will re-render preserving state\n staleFamilies: staleFamilies // Families that will be remounted\n\n };\n helpersByRendererID.forEach(function (helpers) {\n // Even if there are no roots, set the handler on first update.\n // This ensures that if *new* roots are mounted, they'll use the resolve handler.\n helpers.setRefreshHandler(resolveFamily);\n });\n var didError = false;\n var firstError = null; // We snapshot maps and sets that are mutated during commits.\n // If we don't do this, there is a risk they will be mutated while\n // we iterate over them. For example, trying to recover a failed root\n // may cause another root to be added to the failed list -- an infinite loop.\n\n var failedRootsSnapshot = cloneSet(failedRoots);\n var mountedRootsSnapshot = cloneSet(mountedRoots);\n var helpersByRootSnapshot = cloneMap(helpersByRoot);\n failedRootsSnapshot.forEach(function (root) {\n var helpers = helpersByRootSnapshot.get(root);\n\n if (helpers === undefined) {\n throw new Error('Could not find helpers for a root. This is a bug in React Refresh.');\n }\n\n if (!failedRoots.has(root)) {// No longer failed.\n }\n\n if (rootElements === null) {\n return;\n }\n\n if (!rootElements.has(root)) {\n return;\n }\n\n var element = rootElements.get(root);\n\n try {\n helpers.scheduleRoot(root, element);\n } catch (err) {\n if (!didError) {\n didError = true;\n firstError = err;\n } // Keep trying other roots.\n\n }\n });\n mountedRootsSnapshot.forEach(function (root) {\n var helpers = helpersByRootSnapshot.get(root);\n\n if (helpers === undefined) {\n throw new Error('Could not find helpers for a root. This is a bug in React Refresh.');\n }\n\n if (!mountedRoots.has(root)) {// No longer mounted.\n }\n\n try {\n helpers.scheduleRefresh(root, update);\n } catch (err) {\n if (!didError) {\n didError = true;\n firstError = err;\n } // Keep trying other roots.\n\n }\n });\n\n if (didError) {\n throw firstError;\n }\n\n return update;\n } finally {\n isPerformingRefresh = false;\n }\n}\nfunction register(type, id) {\n {\n if (type === null) {\n return;\n }\n\n if (typeof type !== 'function' && typeof type !== 'object') {\n return;\n } // This can happen in an edge case, e.g. if we register\n // return value of a HOC but it returns a cached component.\n // Ignore anything but the first registration for each type.\n\n\n if (allFamiliesByType.has(type)) {\n return;\n } // Create family or remember to update it.\n // None of this bookkeeping affects reconciliation\n // until the first performReactRefresh() call above.\n\n\n var family = allFamiliesByID.get(id);\n\n if (family === undefined) {\n family = {\n current: type\n };\n allFamiliesByID.set(id, family);\n } else {\n pendingUpdates.push([family, type]);\n }\n\n allFamiliesByType.set(type, family); // Visit inner types because we might not have registered them.\n\n if (typeof type === 'object' && type !== null) {\n switch (getProperty(type, '$$typeof')) {\n case REACT_FORWARD_REF_TYPE:\n register(type.render, id + '$render');\n break;\n\n case REACT_MEMO_TYPE:\n register(type.type, id + '$type');\n break;\n }\n }\n }\n}\nfunction setSignature(type, key) {\n var forceReset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var getCustomHooks = arguments.length > 3 ? arguments[3] : undefined;\n\n {\n if (!allSignaturesByType.has(type)) {\n allSignaturesByType.set(type, {\n forceReset: forceReset,\n ownKey: key,\n fullKey: null,\n getCustomHooks: getCustomHooks || function () {\n return [];\n }\n });\n } // Visit inner types because we might not have signed them.\n\n\n if (typeof type === 'object' && type !== null) {\n switch (getProperty(type, '$$typeof')) {\n case REACT_FORWARD_REF_TYPE:\n setSignature(type.render, key, forceReset, getCustomHooks);\n break;\n\n case REACT_MEMO_TYPE:\n setSignature(type.type, key, forceReset, getCustomHooks);\n break;\n }\n }\n }\n} // This is lazily called during first render for a type.\n// It captures Hook list at that time so inline requires don't break comparisons.\n\nfunction collectCustomHooksForSignature(type) {\n {\n var signature = allSignaturesByType.get(type);\n\n if (signature !== undefined) {\n computeFullKey(signature);\n }\n }\n}\nfunction getFamilyByID(id) {\n {\n return allFamiliesByID.get(id);\n }\n}\nfunction getFamilyByType(type) {\n {\n return allFamiliesByType.get(type);\n }\n}\nfunction findAffectedHostInstances(families) {\n {\n var affectedInstances = new Set();\n mountedRoots.forEach(function (root) {\n var helpers = helpersByRoot.get(root);\n\n if (helpers === undefined) {\n throw new Error('Could not find helpers for a root. This is a bug in React Refresh.');\n }\n\n var instancesForRoot = helpers.findHostInstancesForRefresh(root, families);\n instancesForRoot.forEach(function (inst) {\n affectedInstances.add(inst);\n });\n });\n return affectedInstances;\n }\n}\nfunction injectIntoGlobalHook(globalObject) {\n {\n // For React Native, the global hook will be set up by require('react-devtools-core').\n // That code will run before us. So we need to monkeypatch functions on existing hook.\n // For React Web, the global hook will be set up by the extension.\n // This will also run before us.\n var hook = globalObject.__REACT_DEVTOOLS_GLOBAL_HOOK__;\n\n if (hook === undefined) {\n // However, if there is no DevTools extension, we'll need to set up the global hook ourselves.\n // Note that in this case it's important that renderer code runs *after* this method call.\n // Otherwise, the renderer will think that there is no global hook, and won't do the injection.\n var nextID = 0;\n globalObject.__REACT_DEVTOOLS_GLOBAL_HOOK__ = hook = {\n renderers: new Map(),\n supportsFiber: true,\n inject: function (injected) {\n return nextID++;\n },\n onScheduleFiberRoot: function (id, root, children) {},\n onCommitFiberRoot: function (id, root, maybePriorityLevel, didError) {},\n onCommitFiberUnmount: function () {}\n };\n }\n\n if (hook.isDisabled) {\n // This isn't a real property on the hook, but it can be set to opt out\n // of DevTools integration and associated warnings and logs.\n // Using console['warn'] to evade Babel and ESLint\n console['warn']('Something has shimmed the React DevTools global hook (__REACT_DEVTOOLS_GLOBAL_HOOK__). ' + 'Fast Refresh is not compatible with this shim and will be disabled.');\n return;\n } // Here, we just want to get a reference to scheduleRefresh.\n\n\n var oldInject = hook.inject;\n\n hook.inject = function (injected) {\n var id = oldInject.apply(this, arguments);\n\n if (typeof injected.scheduleRefresh === 'function' && typeof injected.setRefreshHandler === 'function') {\n // This version supports React Refresh.\n helpersByRendererID.set(id, injected);\n }\n\n return id;\n }; // Do the same for any already injected roots.\n // This is useful if ReactDOM has already been initialized.\n // https://github.com/facebook/react/issues/17626\n\n\n hook.renderers.forEach(function (injected, id) {\n if (typeof injected.scheduleRefresh === 'function' && typeof injected.setRefreshHandler === 'function') {\n // This version supports React Refresh.\n helpersByRendererID.set(id, injected);\n }\n }); // We also want to track currently mounted roots.\n\n var oldOnCommitFiberRoot = hook.onCommitFiberRoot;\n\n var oldOnScheduleFiberRoot = hook.onScheduleFiberRoot || function () {};\n\n hook.onScheduleFiberRoot = function (id, root, children) {\n if (!isPerformingRefresh) {\n // If it was intentionally scheduled, don't attempt to restore.\n // This includes intentionally scheduled unmounts.\n failedRoots.delete(root);\n\n if (rootElements !== null) {\n rootElements.set(root, children);\n }\n }\n\n return oldOnScheduleFiberRoot.apply(this, arguments);\n };\n\n hook.onCommitFiberRoot = function (id, root, maybePriorityLevel, didError) {\n var helpers = helpersByRendererID.get(id);\n\n if (helpers !== undefined) {\n helpersByRoot.set(root, helpers);\n var current = root.current;\n var alternate = current.alternate; // We need to determine whether this root has just (un)mounted.\n // This logic is copy-pasted from similar logic in the DevTools backend.\n // If this breaks with some refactoring, you'll want to update DevTools too.\n\n if (alternate !== null) {\n var wasMounted = alternate.memoizedState != null && alternate.memoizedState.element != null && mountedRoots.has(root);\n var isMounted = current.memoizedState != null && current.memoizedState.element != null;\n\n if (!wasMounted && isMounted) {\n // Mount a new root.\n mountedRoots.add(root);\n failedRoots.delete(root);\n } else if (wasMounted && isMounted) ; else if (wasMounted && !isMounted) {\n // Unmount an existing root.\n mountedRoots.delete(root);\n\n if (didError) {\n // We'll remount it on future edits.\n failedRoots.add(root);\n } else {\n helpersByRoot.delete(root);\n }\n } else if (!wasMounted && !isMounted) {\n if (didError) {\n // We'll remount it on future edits.\n failedRoots.add(root);\n }\n }\n } else {\n // Mount a new root.\n mountedRoots.add(root);\n }\n } // Always call the decorated DevTools hook.\n\n\n return oldOnCommitFiberRoot.apply(this, arguments);\n };\n }\n}\nfunction hasUnrecoverableErrors() {\n // TODO: delete this after removing dependency in RN.\n return false;\n} // Exposed for testing.\n\nfunction _getMountedRootCount() {\n {\n return mountedRoots.size;\n }\n} // This is a wrapper over more primitive functions for setting signature.\n// Signatures let us decide whether the Hook order has changed on refresh.\n//\n// This function is intended to be used as a transform target, e.g.:\n// var _s = createSignatureFunctionForTransform()\n//\n// function Hello() {\n// const [foo, setFoo] = useState(0);\n// const value = useCustomHook();\n// _s(); /* Call without arguments triggers collecting the custom Hook list.\n// * This doesn't happen during the module evaluation because we\n// * don't want to change the module order with inline requires.\n// * Next calls are noops. */\n// return <h1>Hi</h1>;\n// }\n//\n// /* Call with arguments attaches the signature to the type: */\n// _s(\n// Hello,\n// 'useState{[foo, setFoo]}(0)',\n// () => [useCustomHook], /* Lazy to avoid triggering inline requires */\n// );\n\nfunction createSignatureFunctionForTransform() {\n {\n var savedType;\n var hasCustomHooks;\n var didCollectHooks = false;\n return function (type, key, forceReset, getCustomHooks) {\n if (typeof key === 'string') {\n // We're in the initial phase that associates signatures\n // with the functions. Note this may be called multiple times\n // in HOC chains like _s(hoc1(_s(hoc2(_s(actualFunction))))).\n if (!savedType) {\n // We're in the innermost call, so this is the actual type.\n savedType = type;\n hasCustomHooks = typeof getCustomHooks === 'function';\n } // Set the signature for all types (even wrappers!) in case\n // they have no signatures of their own. This is to prevent\n // problems like https://github.com/facebook/react/issues/20417.\n\n\n if (type != null && (typeof type === 'function' || typeof type === 'object')) {\n setSignature(type, key, forceReset, getCustomHooks);\n }\n\n return type;\n } else {\n // We're in the _s() call without arguments, which means\n // this is the time to collect custom Hook signatures.\n // Only do this once. This path is hot and runs *inside* every render!\n if (!didCollectHooks && hasCustomHooks) {\n didCollectHooks = true;\n collectCustomHooksForSignature(savedType);\n }\n }\n };\n }\n}\nfunction isLikelyComponentType(type) {\n {\n switch (typeof type) {\n case 'function':\n {\n // First, deal with classes.\n if (type.prototype != null) {\n if (type.prototype.isReactComponent) {\n // React class.\n return true;\n }\n\n var ownNames = Object.getOwnPropertyNames(type.prototype);\n\n if (ownNames.length > 1 || ownNames[0] !== 'constructor') {\n // This looks like a class.\n return false;\n } // eslint-disable-next-line no-proto\n\n\n if (type.prototype.__proto__ !== Object.prototype) {\n // It has a superclass.\n return false;\n } // Pass through.\n // This looks like a regular function with empty prototype.\n\n } // For plain functions and arrows, use name as a heuristic.\n\n\n var name = type.name || type.displayName;\n return typeof name === 'string' && /^[A-Z]/.test(name);\n }\n\n case 'object':\n {\n if (type != null) {\n switch (getProperty(type, '$$typeof')) {\n case REACT_FORWARD_REF_TYPE:\n case REACT_MEMO_TYPE:\n // Definitely React components.\n return true;\n\n default:\n return false;\n }\n }\n\n return false;\n }\n\n default:\n {\n return false;\n }\n }\n }\n}\n\nexports._getMountedRootCount = _getMountedRootCount;\nexports.collectCustomHooksForSignature = collectCustomHooksForSignature;\nexports.createSignatureFunctionForTransform = createSignatureFunctionForTransform;\nexports.findAffectedHostInstances = findAffectedHostInstances;\nexports.getFamilyByID = getFamilyByID;\nexports.getFamilyByType = getFamilyByType;\nexports.hasUnrecoverableErrors = hasUnrecoverableErrors;\nexports.injectIntoGlobalHook = injectIntoGlobalHook;\nexports.isLikelyComponentType = isLikelyComponentType;\nexports.performReactRefresh = performReactRefresh;\nexports.register = register;\nexports.setSignature = setSignature;\n })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QtcmVmcmVzaC9janMvcmVhY3QtcmVmcmVzaC1ydW50aW1lLmRldmVsb3BtZW50LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTs7QUFFYixJQUFJLElBQXFDO0FBQ3pDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFFQUFxRTtBQUNyRTs7QUFFQTtBQUNBO0FBQ0EsaURBQWlEO0FBQ2pEO0FBQ0E7O0FBRUEsbURBQW1EO0FBQ25EOztBQUVBLHlCQUF5Qjs7QUFFekI7QUFDQSwrQkFBK0I7O0FBRS9CLDhCQUE4Qjs7QUFFOUIsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixrQkFBa0I7QUFDcEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDOztBQUVqQztBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLLEdBQUc7O0FBRVI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsbUNBQW1DO0FBQ25DOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxVQUFVOztBQUVWO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLG9DQUFvQztBQUNwQzs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLFVBQVU7O0FBRVY7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7O0FBR0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUEseUNBQXlDOztBQUV6QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxNQUFNOzs7QUFHTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCw2REFBNkQ7QUFDN0QsK0VBQStFO0FBQy9FO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLEdBQUc7O0FBRVI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxvQ0FBb0M7QUFDaEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLFFBQVE7OztBQUdSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsY0FBYztBQUM3QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7OztBQUdkO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDs7QUFFQSxZQUFZOzs7QUFHWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDRCQUE0QjtBQUM1QixzQ0FBc0M7QUFDdEMsMkNBQTJDO0FBQzNDLGlDQUFpQztBQUNqQyxxQkFBcUI7QUFDckIsdUJBQXVCO0FBQ3ZCLDhCQUE4QjtBQUM5Qiw0QkFBNEI7QUFDNUIsNkJBQTZCO0FBQzdCLDJCQUEyQjtBQUMzQixnQkFBZ0I7QUFDaEIsb0JBQW9CO0FBQ3BCLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvRG9jdW1lbnRzL0Rldi9iaW9oYXphcmQtdmZ4LTEvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC1yZWZyZXNoL2Nqcy9yZWFjdC1yZWZyZXNoLXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QtcmVmcmVzaC1ydW50aW1lLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxuLy8gQVRURU5USU9OXG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmZvcndhcmRfcmVmJyk7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gU3ltYm9sLmZvcigncmVhY3QubWVtbycpO1xuXG52YXIgUG9zc2libHlXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgPyBXZWFrTWFwIDogTWFwOyAvLyBXZSBuZXZlciByZW1vdmUgdGhlc2UgYXNzb2NpYXRpb25zLlxuLy8gSXQncyBPSyB0byByZWZlcmVuY2UgZmFtaWxpZXMsIGJ1dCB1c2UgV2Vha01hcC9TZXQgZm9yIHR5cGVzLlxuXG52YXIgYWxsRmFtaWxpZXNCeUlEID0gbmV3IE1hcCgpO1xudmFyIGFsbEZhbWlsaWVzQnlUeXBlID0gbmV3IFBvc3NpYmx5V2Vha01hcCgpO1xudmFyIGFsbFNpZ25hdHVyZXNCeVR5cGUgPSBuZXcgUG9zc2libHlXZWFrTWFwKCk7IC8vIFRoaXMgV2Vha01hcCBpcyByZWFkIGJ5IFJlYWN0LCBzbyB3ZSBvbmx5IHB1dCBmYW1pbGllc1xuLy8gdGhhdCBoYXZlIGFjdHVhbGx5IGJlZW4gZWRpdGVkIGhlcmUuIFRoaXMga2VlcHMgY2hlY2tzIGZhc3QuXG4vLyAkRmxvd0lzc3VlXG5cbnZhciB1cGRhdGVkRmFtaWxpZXNCeVR5cGUgPSBuZXcgUG9zc2libHlXZWFrTWFwKCk7IC8vIFRoaXMgaXMgY2xlYXJlZCBvbiBldmVyeSBwZXJmb3JtUmVhY3RSZWZyZXNoKCkgY2FsbC5cbi8vIEl0IGlzIGFuIGFycmF5IG9mIFtGYW1pbHksIE5leHRUeXBlXSB0dXBsZXMuXG5cbnZhciBwZW5kaW5nVXBkYXRlcyA9IFtdOyAvLyBUaGlzIGlzIGluamVjdGVkIGJ5IHRoZSByZW5kZXJlciB2aWEgRGV2VG9vbHMgZ2xvYmFsIGhvb2suXG5cbnZhciBoZWxwZXJzQnlSZW5kZXJlcklEID0gbmV3IE1hcCgpO1xudmFyIGhlbHBlcnNCeVJvb3QgPSBuZXcgTWFwKCk7IC8vIFdlIGtlZXAgdHJhY2sgb2YgbW91bnRlZCByb290cyBzbyB3ZSBjYW4gc2NoZWR1bGUgdXBkYXRlcy5cblxudmFyIG1vdW50ZWRSb290cyA9IG5ldyBTZXQoKTsgLy8gSWYgYSByb290IGNhcHR1cmVzIGFuIGVycm9yLCB3ZSByZW1lbWJlciBpdCBzbyB3ZSBjYW4gcmV0cnkgb24gZWRpdC5cblxudmFyIGZhaWxlZFJvb3RzID0gbmV3IFNldCgpOyAvLyBJbiBlbnZpcm9ubWVudHMgdGhhdCBzdXBwb3J0IFdlYWtNYXAsIHdlIGFsc28gcmVtZW1iZXIgdGhlIGxhc3QgZWxlbWVudCBmb3IgZXZlcnkgcm9vdC5cbi8vIEl0IG5lZWRzIHRvIGJlIHdlYWsgYmVjYXVzZSB3ZSBkbyB0aGlzIGV2ZW4gZm9yIHJvb3RzIHRoYXQgZmFpbGVkIHRvIG1vdW50LlxuLy8gSWYgdGhlcmUgaXMgbm8gV2Vha01hcCwgd2Ugd29uJ3QgYXR0ZW1wdCB0byBkbyByZXRyeWluZy5cbi8vICRGbG93SXNzdWVcblxudmFyIHJvb3RFbGVtZW50cyA9IC8vICRGbG93SXNzdWVcbnR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gbmV3IFdlYWtNYXAoKSA6IG51bGw7XG52YXIgaXNQZXJmb3JtaW5nUmVmcmVzaCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBjb21wdXRlRnVsbEtleShzaWduYXR1cmUpIHtcbiAgaWYgKHNpZ25hdHVyZS5mdWxsS2V5ICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHNpZ25hdHVyZS5mdWxsS2V5O1xuICB9XG5cbiAgdmFyIGZ1bGxLZXkgPSBzaWduYXR1cmUub3duS2V5O1xuICB2YXIgaG9va3M7XG5cbiAgdHJ5IHtcbiAgICBob29rcyA9IHNpZ25hdHVyZS5nZXRDdXN0b21Ib29rcygpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaW4gYW4gZWRnZSBjYXNlLCBlLmcuIGlmIGV4cHJlc3Npb24gbGlrZSBGb28udXNlU29tZXRoaW5nXG4gICAgLy8gZGVwZW5kcyBvbiBGb28gd2hpY2ggaXMgbGF6aWx5IGluaXRpYWxpemVkIGR1cmluZyByZW5kZXJpbmcuXG4gICAgLy8gSW4gdGhhdCBjYXNlIGp1c3QgYXNzdW1lIHdlJ2xsIGhhdmUgdG8gcmVtb3VudC5cbiAgICBzaWduYXR1cmUuZm9yY2VSZXNldCA9IHRydWU7XG4gICAgc2lnbmF0dXJlLmZ1bGxLZXkgPSBmdWxsS2V5O1xuICAgIHJldHVybiBmdWxsS2V5O1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBob29rcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBob29rID0gaG9va3NbaV07XG5cbiAgICBpZiAodHlwZW9mIGhvb2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIFNvbWV0aGluZydzIHdyb25nLiBBc3N1bWUgd2UgbmVlZCB0byByZW1vdW50LlxuICAgICAgc2lnbmF0dXJlLmZvcmNlUmVzZXQgPSB0cnVlO1xuICAgICAgc2lnbmF0dXJlLmZ1bGxLZXkgPSBmdWxsS2V5O1xuICAgICAgcmV0dXJuIGZ1bGxLZXk7XG4gICAgfVxuXG4gICAgdmFyIG5lc3RlZEhvb2tTaWduYXR1cmUgPSBhbGxTaWduYXR1cmVzQnlUeXBlLmdldChob29rKTtcblxuICAgIGlmIChuZXN0ZWRIb29rU2lnbmF0dXJlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIE5vIHNpZ25hdHVyZSBtZWFucyBIb29rIHdhc24ndCBpbiB0aGUgc291cmNlIGNvZGUsIGUuZy4gaW4gYSBsaWJyYXJ5LlxuICAgICAgLy8gV2UnbGwgc2tpcCBpdCBiZWNhdXNlIHdlIGNhbiBhc3N1bWUgaXQgd29uJ3QgY2hhbmdlIGR1cmluZyB0aGlzIHNlc3Npb24uXG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgbmVzdGVkSG9va0tleSA9IGNvbXB1dGVGdWxsS2V5KG5lc3RlZEhvb2tTaWduYXR1cmUpO1xuXG4gICAgaWYgKG5lc3RlZEhvb2tTaWduYXR1cmUuZm9yY2VSZXNldCkge1xuICAgICAgc2lnbmF0dXJlLmZvcmNlUmVzZXQgPSB0cnVlO1xuICAgIH1cblxuICAgIGZ1bGxLZXkgKz0gJ1xcbi0tLVxcbicgKyBuZXN0ZWRIb29rS2V5O1xuICB9XG5cbiAgc2lnbmF0dXJlLmZ1bGxLZXkgPSBmdWxsS2V5O1xuICByZXR1cm4gZnVsbEtleTtcbn1cblxuZnVuY3Rpb24gaGF2ZUVxdWFsU2lnbmF0dXJlcyhwcmV2VHlwZSwgbmV4dFR5cGUpIHtcbiAgdmFyIHByZXZTaWduYXR1cmUgPSBhbGxTaWduYXR1cmVzQnlUeXBlLmdldChwcmV2VHlwZSk7XG4gIHZhciBuZXh0U2lnbmF0dXJlID0gYWxsU2lnbmF0dXJlc0J5VHlwZS5nZXQobmV4dFR5cGUpO1xuXG4gIGlmIChwcmV2U2lnbmF0dXJlID09PSB1bmRlZmluZWQgJiYgbmV4dFNpZ25hdHVyZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAocHJldlNpZ25hdHVyZSA9PT0gdW5kZWZpbmVkIHx8IG5leHRTaWduYXR1cmUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChjb21wdXRlRnVsbEtleShwcmV2U2lnbmF0dXJlKSAhPT0gY29tcHV0ZUZ1bGxLZXkobmV4dFNpZ25hdHVyZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAobmV4dFNpZ25hdHVyZS5mb3JjZVJlc2V0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzUmVhY3RDbGFzcyh0eXBlKSB7XG4gIHJldHVybiB0eXBlLnByb3RvdHlwZSAmJiB0eXBlLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50O1xufVxuXG5mdW5jdGlvbiBjYW5QcmVzZXJ2ZVN0YXRlQmV0d2VlbihwcmV2VHlwZSwgbmV4dFR5cGUpIHtcbiAgaWYgKGlzUmVhY3RDbGFzcyhwcmV2VHlwZSkgfHwgaXNSZWFjdENsYXNzKG5leHRUeXBlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChoYXZlRXF1YWxTaWduYXR1cmVzKHByZXZUeXBlLCBuZXh0VHlwZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUZhbWlseSh0eXBlKSB7XG4gIC8vIE9ubHkgY2hlY2sgdXBkYXRlZCB0eXBlcyB0byBrZWVwIGxvb2t1cHMgZmFzdC5cbiAgcmV0dXJuIHVwZGF0ZWRGYW1pbGllc0J5VHlwZS5nZXQodHlwZSk7XG59IC8vIElmIHdlIGRpZG4ndCBjYXJlIGFib3V0IElFMTEsIHdlIGNvdWxkIHVzZSBuZXcgTWFwL1NldChpdGVyYWJsZSkuXG5cblxuZnVuY3Rpb24gY2xvbmVNYXAobWFwKSB7XG4gIHZhciBjbG9uZSA9IG5ldyBNYXAoKTtcbiAgbWFwLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICBjbG9uZS5zZXQoa2V5LCB2YWx1ZSk7XG4gIH0pO1xuICByZXR1cm4gY2xvbmU7XG59XG5cbmZ1bmN0aW9uIGNsb25lU2V0KHNldCkge1xuICB2YXIgY2xvbmUgPSBuZXcgU2V0KCk7XG4gIHNldC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGNsb25lLmFkZCh2YWx1ZSk7XG4gIH0pO1xuICByZXR1cm4gY2xvbmU7XG59IC8vIFRoaXMgaXMgYSBzYWZldHkgbWVjaGFuaXNtIHRvIHByb3RlY3QgYWdhaW5zdCByb2d1ZSBnZXR0ZXJzIGFuZCBQcm94aWVzLlxuXG5cbmZ1bmN0aW9uIGdldFByb3BlcnR5KG9iamVjdCwgcHJvcGVydHkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gb2JqZWN0W3Byb3BlcnR5XTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gSW50ZW50aW9uYWxseSBpZ25vcmUuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwZXJmb3JtUmVhY3RSZWZyZXNoKCkge1xuXG4gIGlmIChwZW5kaW5nVXBkYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChpc1BlcmZvcm1pbmdSZWZyZXNoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpc1BlcmZvcm1pbmdSZWZyZXNoID0gdHJ1ZTtcblxuICB0cnkge1xuICAgIHZhciBzdGFsZUZhbWlsaWVzID0gbmV3IFNldCgpO1xuICAgIHZhciB1cGRhdGVkRmFtaWxpZXMgPSBuZXcgU2V0KCk7XG4gICAgdmFyIHVwZGF0ZXMgPSBwZW5kaW5nVXBkYXRlcztcbiAgICBwZW5kaW5nVXBkYXRlcyA9IFtdO1xuICAgIHVwZGF0ZXMuZm9yRWFjaChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIGZhbWlseSA9IF9yZWZbMF0sXG4gICAgICAgICAgbmV4dFR5cGUgPSBfcmVmWzFdO1xuICAgICAgLy8gTm93IHRoYXQgd2UgZ290IGEgcmVhbCBlZGl0LCB3ZSBjYW4gY3JlYXRlIGFzc29jaWF0aW9uc1xuICAgICAgLy8gdGhhdCB3aWxsIGJlIHJlYWQgYnkgdGhlIFJlYWN0IHJlY29uY2lsZXIuXG4gICAgICB2YXIgcHJldlR5cGUgPSBmYW1pbHkuY3VycmVudDtcbiAgICAgIHVwZGF0ZWRGYW1pbGllc0J5VHlwZS5zZXQocHJldlR5cGUsIGZhbWlseSk7XG4gICAgICB1cGRhdGVkRmFtaWxpZXNCeVR5cGUuc2V0KG5leHRUeXBlLCBmYW1pbHkpO1xuICAgICAgZmFtaWx5LmN1cnJlbnQgPSBuZXh0VHlwZTsgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBzaG91bGQgYmUgYSByZS1yZW5kZXIgb3IgYSByZS1tb3VudC5cblxuICAgICAgaWYgKGNhblByZXNlcnZlU3RhdGVCZXR3ZWVuKHByZXZUeXBlLCBuZXh0VHlwZSkpIHtcbiAgICAgICAgdXBkYXRlZEZhbWlsaWVzLmFkZChmYW1pbHkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhbGVGYW1pbGllcy5hZGQoZmFtaWx5KTtcbiAgICAgIH1cbiAgICB9KTsgLy8gVE9ETzogcmVuYW1lIHRoZXNlIGZpZWxkcyB0byBzb21ldGhpbmcgbW9yZSBtZWFuaW5nZnVsLlxuXG4gICAgdmFyIHVwZGF0ZSA9IHtcbiAgICAgIHVwZGF0ZWRGYW1pbGllczogdXBkYXRlZEZhbWlsaWVzLFxuICAgICAgLy8gRmFtaWxpZXMgdGhhdCB3aWxsIHJlLXJlbmRlciBwcmVzZXJ2aW5nIHN0YXRlXG4gICAgICBzdGFsZUZhbWlsaWVzOiBzdGFsZUZhbWlsaWVzIC8vIEZhbWlsaWVzIHRoYXQgd2lsbCBiZSByZW1vdW50ZWRcblxuICAgIH07XG4gICAgaGVscGVyc0J5UmVuZGVyZXJJRC5mb3JFYWNoKGZ1bmN0aW9uIChoZWxwZXJzKSB7XG4gICAgICAvLyBFdmVuIGlmIHRoZXJlIGFyZSBubyByb290cywgc2V0IHRoZSBoYW5kbGVyIG9uIGZpcnN0IHVwZGF0ZS5cbiAgICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IGlmICpuZXcqIHJvb3RzIGFyZSBtb3VudGVkLCB0aGV5J2xsIHVzZSB0aGUgcmVzb2x2ZSBoYW5kbGVyLlxuICAgICAgaGVscGVycy5zZXRSZWZyZXNoSGFuZGxlcihyZXNvbHZlRmFtaWx5KTtcbiAgICB9KTtcbiAgICB2YXIgZGlkRXJyb3IgPSBmYWxzZTtcbiAgICB2YXIgZmlyc3RFcnJvciA9IG51bGw7IC8vIFdlIHNuYXBzaG90IG1hcHMgYW5kIHNldHMgdGhhdCBhcmUgbXV0YXRlZCBkdXJpbmcgY29tbWl0cy5cbiAgICAvLyBJZiB3ZSBkb24ndCBkbyB0aGlzLCB0aGVyZSBpcyBhIHJpc2sgdGhleSB3aWxsIGJlIG11dGF0ZWQgd2hpbGVcbiAgICAvLyB3ZSBpdGVyYXRlIG92ZXIgdGhlbS4gRm9yIGV4YW1wbGUsIHRyeWluZyB0byByZWNvdmVyIGEgZmFpbGVkIHJvb3RcbiAgICAvLyBtYXkgY2F1c2UgYW5vdGhlciByb290IHRvIGJlIGFkZGVkIHRvIHRoZSBmYWlsZWQgbGlzdCAtLSBhbiBpbmZpbml0ZSBsb29wLlxuXG4gICAgdmFyIGZhaWxlZFJvb3RzU25hcHNob3QgPSBjbG9uZVNldChmYWlsZWRSb290cyk7XG4gICAgdmFyIG1vdW50ZWRSb290c1NuYXBzaG90ID0gY2xvbmVTZXQobW91bnRlZFJvb3RzKTtcbiAgICB2YXIgaGVscGVyc0J5Um9vdFNuYXBzaG90ID0gY2xvbmVNYXAoaGVscGVyc0J5Um9vdCk7XG4gICAgZmFpbGVkUm9vdHNTbmFwc2hvdC5mb3JFYWNoKGZ1bmN0aW9uIChyb290KSB7XG4gICAgICB2YXIgaGVscGVycyA9IGhlbHBlcnNCeVJvb3RTbmFwc2hvdC5nZXQocm9vdCk7XG5cbiAgICAgIGlmIChoZWxwZXJzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBoZWxwZXJzIGZvciBhIHJvb3QuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QgUmVmcmVzaC4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFmYWlsZWRSb290cy5oYXMocm9vdCkpIHsvLyBObyBsb25nZXIgZmFpbGVkLlxuICAgICAgfVxuXG4gICAgICBpZiAocm9vdEVsZW1lbnRzID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyb290RWxlbWVudHMuaGFzKHJvb3QpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGVsZW1lbnQgPSByb290RWxlbWVudHMuZ2V0KHJvb3QpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBoZWxwZXJzLnNjaGVkdWxlUm9vdChyb290LCBlbGVtZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoIWRpZEVycm9yKSB7XG4gICAgICAgICAgZGlkRXJyb3IgPSB0cnVlO1xuICAgICAgICAgIGZpcnN0RXJyb3IgPSBlcnI7XG4gICAgICAgIH0gLy8gS2VlcCB0cnlpbmcgb3RoZXIgcm9vdHMuXG5cbiAgICAgIH1cbiAgICB9KTtcbiAgICBtb3VudGVkUm9vdHNTbmFwc2hvdC5mb3JFYWNoKGZ1bmN0aW9uIChyb290KSB7XG4gICAgICB2YXIgaGVscGVycyA9IGhlbHBlcnNCeVJvb3RTbmFwc2hvdC5nZXQocm9vdCk7XG5cbiAgICAgIGlmIChoZWxwZXJzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBoZWxwZXJzIGZvciBhIHJvb3QuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QgUmVmcmVzaC4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFtb3VudGVkUm9vdHMuaGFzKHJvb3QpKSB7Ly8gTm8gbG9uZ2VyIG1vdW50ZWQuXG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGhlbHBlcnMuc2NoZWR1bGVSZWZyZXNoKHJvb3QsIHVwZGF0ZSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKCFkaWRFcnJvcikge1xuICAgICAgICAgIGRpZEVycm9yID0gdHJ1ZTtcbiAgICAgICAgICBmaXJzdEVycm9yID0gZXJyO1xuICAgICAgICB9IC8vIEtlZXAgdHJ5aW5nIG90aGVyIHJvb3RzLlxuXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoZGlkRXJyb3IpIHtcbiAgICAgIHRocm93IGZpcnN0RXJyb3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpc1BlcmZvcm1pbmdSZWZyZXNoID0gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlZ2lzdGVyKHR5cGUsIGlkKSB7XG4gIHtcbiAgICBpZiAodHlwZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdHlwZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgdHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFRoaXMgY2FuIGhhcHBlbiBpbiBhbiBlZGdlIGNhc2UsIGUuZy4gaWYgd2UgcmVnaXN0ZXJcbiAgICAvLyByZXR1cm4gdmFsdWUgb2YgYSBIT0MgYnV0IGl0IHJldHVybnMgYSBjYWNoZWQgY29tcG9uZW50LlxuICAgIC8vIElnbm9yZSBhbnl0aGluZyBidXQgdGhlIGZpcnN0IHJlZ2lzdHJhdGlvbiBmb3IgZWFjaCB0eXBlLlxuXG5cbiAgICBpZiAoYWxsRmFtaWxpZXNCeVR5cGUuaGFzKHR5cGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBDcmVhdGUgZmFtaWx5IG9yIHJlbWVtYmVyIHRvIHVwZGF0ZSBpdC5cbiAgICAvLyBOb25lIG9mIHRoaXMgYm9va2tlZXBpbmcgYWZmZWN0cyByZWNvbmNpbGlhdGlvblxuICAgIC8vIHVudGlsIHRoZSBmaXJzdCBwZXJmb3JtUmVhY3RSZWZyZXNoKCkgY2FsbCBhYm92ZS5cblxuXG4gICAgdmFyIGZhbWlseSA9IGFsbEZhbWlsaWVzQnlJRC5nZXQoaWQpO1xuXG4gICAgaWYgKGZhbWlseSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmYW1pbHkgPSB7XG4gICAgICAgIGN1cnJlbnQ6IHR5cGVcbiAgICAgIH07XG4gICAgICBhbGxGYW1pbGllc0J5SUQuc2V0KGlkLCBmYW1pbHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwZW5kaW5nVXBkYXRlcy5wdXNoKFtmYW1pbHksIHR5cGVdKTtcbiAgICB9XG5cbiAgICBhbGxGYW1pbGllc0J5VHlwZS5zZXQodHlwZSwgZmFtaWx5KTsgLy8gVmlzaXQgaW5uZXIgdHlwZXMgYmVjYXVzZSB3ZSBtaWdodCBub3QgaGF2ZSByZWdpc3RlcmVkIHRoZW0uXG5cbiAgICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwpIHtcbiAgICAgIHN3aXRjaCAoZ2V0UHJvcGVydHkodHlwZSwgJyQkdHlwZW9mJykpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgIHJlZ2lzdGVyKHR5cGUucmVuZGVyLCBpZCArICckcmVuZGVyJyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgcmVnaXN0ZXIodHlwZS50eXBlLCBpZCArICckdHlwZScpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gc2V0U2lnbmF0dXJlKHR5cGUsIGtleSkge1xuICB2YXIgZm9yY2VSZXNldCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG4gIHZhciBnZXRDdXN0b21Ib29rcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAzID8gYXJndW1lbnRzWzNdIDogdW5kZWZpbmVkO1xuXG4gIHtcbiAgICBpZiAoIWFsbFNpZ25hdHVyZXNCeVR5cGUuaGFzKHR5cGUpKSB7XG4gICAgICBhbGxTaWduYXR1cmVzQnlUeXBlLnNldCh0eXBlLCB7XG4gICAgICAgIGZvcmNlUmVzZXQ6IGZvcmNlUmVzZXQsXG4gICAgICAgIG93bktleToga2V5LFxuICAgICAgICBmdWxsS2V5OiBudWxsLFxuICAgICAgICBnZXRDdXN0b21Ib29rczogZ2V0Q3VzdG9tSG9va3MgfHwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSAvLyBWaXNpdCBpbm5lciB0eXBlcyBiZWNhdXNlIHdlIG1pZ2h0IG5vdCBoYXZlIHNpZ25lZCB0aGVtLlxuXG5cbiAgICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwpIHtcbiAgICAgIHN3aXRjaCAoZ2V0UHJvcGVydHkodHlwZSwgJyQkdHlwZW9mJykpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgIHNldFNpZ25hdHVyZSh0eXBlLnJlbmRlciwga2V5LCBmb3JjZVJlc2V0LCBnZXRDdXN0b21Ib29rcyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgc2V0U2lnbmF0dXJlKHR5cGUudHlwZSwga2V5LCBmb3JjZVJlc2V0LCBnZXRDdXN0b21Ib29rcyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG59IC8vIFRoaXMgaXMgbGF6aWx5IGNhbGxlZCBkdXJpbmcgZmlyc3QgcmVuZGVyIGZvciBhIHR5cGUuXG4vLyBJdCBjYXB0dXJlcyBIb29rIGxpc3QgYXQgdGhhdCB0aW1lIHNvIGlubGluZSByZXF1aXJlcyBkb24ndCBicmVhayBjb21wYXJpc29ucy5cblxuZnVuY3Rpb24gY29sbGVjdEN1c3RvbUhvb2tzRm9yU2lnbmF0dXJlKHR5cGUpIHtcbiAge1xuICAgIHZhciBzaWduYXR1cmUgPSBhbGxTaWduYXR1cmVzQnlUeXBlLmdldCh0eXBlKTtcblxuICAgIGlmIChzaWduYXR1cmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29tcHV0ZUZ1bGxLZXkoc2lnbmF0dXJlKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEZhbWlseUJ5SUQoaWQpIHtcbiAge1xuICAgIHJldHVybiBhbGxGYW1pbGllc0J5SUQuZ2V0KGlkKTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0RmFtaWx5QnlUeXBlKHR5cGUpIHtcbiAge1xuICAgIHJldHVybiBhbGxGYW1pbGllc0J5VHlwZS5nZXQodHlwZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGZpbmRBZmZlY3RlZEhvc3RJbnN0YW5jZXMoZmFtaWxpZXMpIHtcbiAge1xuICAgIHZhciBhZmZlY3RlZEluc3RhbmNlcyA9IG5ldyBTZXQoKTtcbiAgICBtb3VudGVkUm9vdHMuZm9yRWFjaChmdW5jdGlvbiAocm9vdCkge1xuICAgICAgdmFyIGhlbHBlcnMgPSBoZWxwZXJzQnlSb290LmdldChyb290KTtcblxuICAgICAgaWYgKGhlbHBlcnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIGhlbHBlcnMgZm9yIGEgcm9vdC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdCBSZWZyZXNoLicpO1xuICAgICAgfVxuXG4gICAgICB2YXIgaW5zdGFuY2VzRm9yUm9vdCA9IGhlbHBlcnMuZmluZEhvc3RJbnN0YW5jZXNGb3JSZWZyZXNoKHJvb3QsIGZhbWlsaWVzKTtcbiAgICAgIGluc3RhbmNlc0ZvclJvb3QuZm9yRWFjaChmdW5jdGlvbiAoaW5zdCkge1xuICAgICAgICBhZmZlY3RlZEluc3RhbmNlcy5hZGQoaW5zdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWZmZWN0ZWRJbnN0YW5jZXM7XG4gIH1cbn1cbmZ1bmN0aW9uIGluamVjdEludG9HbG9iYWxIb29rKGdsb2JhbE9iamVjdCkge1xuICB7XG4gICAgLy8gRm9yIFJlYWN0IE5hdGl2ZSwgdGhlIGdsb2JhbCBob29rIHdpbGwgYmUgc2V0IHVwIGJ5IHJlcXVpcmUoJ3JlYWN0LWRldnRvb2xzLWNvcmUnKS5cbiAgICAvLyBUaGF0IGNvZGUgd2lsbCBydW4gYmVmb3JlIHVzLiBTbyB3ZSBuZWVkIHRvIG1vbmtleXBhdGNoIGZ1bmN0aW9ucyBvbiBleGlzdGluZyBob29rLlxuICAgIC8vIEZvciBSZWFjdCBXZWIsIHRoZSBnbG9iYWwgaG9vayB3aWxsIGJlIHNldCB1cCBieSB0aGUgZXh0ZW5zaW9uLlxuICAgIC8vIFRoaXMgd2lsbCBhbHNvIHJ1biBiZWZvcmUgdXMuXG4gICAgdmFyIGhvb2sgPSBnbG9iYWxPYmplY3QuX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fO1xuXG4gICAgaWYgKGhvb2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gSG93ZXZlciwgaWYgdGhlcmUgaXMgbm8gRGV2VG9vbHMgZXh0ZW5zaW9uLCB3ZSdsbCBuZWVkIHRvIHNldCB1cCB0aGUgZ2xvYmFsIGhvb2sgb3Vyc2VsdmVzLlxuICAgICAgLy8gTm90ZSB0aGF0IGluIHRoaXMgY2FzZSBpdCdzIGltcG9ydGFudCB0aGF0IHJlbmRlcmVyIGNvZGUgcnVucyAqYWZ0ZXIqIHRoaXMgbWV0aG9kIGNhbGwuXG4gICAgICAvLyBPdGhlcndpc2UsIHRoZSByZW5kZXJlciB3aWxsIHRoaW5rIHRoYXQgdGhlcmUgaXMgbm8gZ2xvYmFsIGhvb2ssIGFuZCB3b24ndCBkbyB0aGUgaW5qZWN0aW9uLlxuICAgICAgdmFyIG5leHRJRCA9IDA7XG4gICAgICBnbG9iYWxPYmplY3QuX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fID0gaG9vayA9IHtcbiAgICAgICAgcmVuZGVyZXJzOiBuZXcgTWFwKCksXG4gICAgICAgIHN1cHBvcnRzRmliZXI6IHRydWUsXG4gICAgICAgIGluamVjdDogZnVuY3Rpb24gKGluamVjdGVkKSB7XG4gICAgICAgICAgcmV0dXJuIG5leHRJRCsrO1xuICAgICAgICB9LFxuICAgICAgICBvblNjaGVkdWxlRmliZXJSb290OiBmdW5jdGlvbiAoaWQsIHJvb3QsIGNoaWxkcmVuKSB7fSxcbiAgICAgICAgb25Db21taXRGaWJlclJvb3Q6IGZ1bmN0aW9uIChpZCwgcm9vdCwgbWF5YmVQcmlvcml0eUxldmVsLCBkaWRFcnJvcikge30sXG4gICAgICAgIG9uQ29tbWl0RmliZXJVbm1vdW50OiBmdW5jdGlvbiAoKSB7fVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoaG9vay5pc0Rpc2FibGVkKSB7XG4gICAgICAvLyBUaGlzIGlzbid0IGEgcmVhbCBwcm9wZXJ0eSBvbiB0aGUgaG9vaywgYnV0IGl0IGNhbiBiZSBzZXQgdG8gb3B0IG91dFxuICAgICAgLy8gb2YgRGV2VG9vbHMgaW50ZWdyYXRpb24gYW5kIGFzc29jaWF0ZWQgd2FybmluZ3MgYW5kIGxvZ3MuXG4gICAgICAvLyBVc2luZyBjb25zb2xlWyd3YXJuJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuICAgICAgY29uc29sZVsnd2FybiddKCdTb21ldGhpbmcgaGFzIHNoaW1tZWQgdGhlIFJlYWN0IERldlRvb2xzIGdsb2JhbCBob29rIChfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18pLiAnICsgJ0Zhc3QgUmVmcmVzaCBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoaXMgc2hpbSBhbmQgd2lsbCBiZSBkaXNhYmxlZC4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEhlcmUsIHdlIGp1c3Qgd2FudCB0byBnZXQgYSByZWZlcmVuY2UgdG8gc2NoZWR1bGVSZWZyZXNoLlxuXG5cbiAgICB2YXIgb2xkSW5qZWN0ID0gaG9vay5pbmplY3Q7XG5cbiAgICBob29rLmluamVjdCA9IGZ1bmN0aW9uIChpbmplY3RlZCkge1xuICAgICAgdmFyIGlkID0gb2xkSW5qZWN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAgIGlmICh0eXBlb2YgaW5qZWN0ZWQuc2NoZWR1bGVSZWZyZXNoID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBpbmplY3RlZC5zZXRSZWZyZXNoSGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBUaGlzIHZlcnNpb24gc3VwcG9ydHMgUmVhY3QgUmVmcmVzaC5cbiAgICAgICAgaGVscGVyc0J5UmVuZGVyZXJJRC5zZXQoaWQsIGluamVjdGVkKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGlkO1xuICAgIH07IC8vIERvIHRoZSBzYW1lIGZvciBhbnkgYWxyZWFkeSBpbmplY3RlZCByb290cy5cbiAgICAvLyBUaGlzIGlzIHVzZWZ1bCBpZiBSZWFjdERPTSBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTc2MjZcblxuXG4gICAgaG9vay5yZW5kZXJlcnMuZm9yRWFjaChmdW5jdGlvbiAoaW5qZWN0ZWQsIGlkKSB7XG4gICAgICBpZiAodHlwZW9mIGluamVjdGVkLnNjaGVkdWxlUmVmcmVzaCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgaW5qZWN0ZWQuc2V0UmVmcmVzaEhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVGhpcyB2ZXJzaW9uIHN1cHBvcnRzIFJlYWN0IFJlZnJlc2guXG4gICAgICAgIGhlbHBlcnNCeVJlbmRlcmVySUQuc2V0KGlkLCBpbmplY3RlZCk7XG4gICAgICB9XG4gICAgfSk7IC8vIFdlIGFsc28gd2FudCB0byB0cmFjayBjdXJyZW50bHkgbW91bnRlZCByb290cy5cblxuICAgIHZhciBvbGRPbkNvbW1pdEZpYmVyUm9vdCA9IGhvb2sub25Db21taXRGaWJlclJvb3Q7XG5cbiAgICB2YXIgb2xkT25TY2hlZHVsZUZpYmVyUm9vdCA9IGhvb2sub25TY2hlZHVsZUZpYmVyUm9vdCB8fCBmdW5jdGlvbiAoKSB7fTtcblxuICAgIGhvb2sub25TY2hlZHVsZUZpYmVyUm9vdCA9IGZ1bmN0aW9uIChpZCwgcm9vdCwgY2hpbGRyZW4pIHtcbiAgICAgIGlmICghaXNQZXJmb3JtaW5nUmVmcmVzaCkge1xuICAgICAgICAvLyBJZiBpdCB3YXMgaW50ZW50aW9uYWxseSBzY2hlZHVsZWQsIGRvbid0IGF0dGVtcHQgdG8gcmVzdG9yZS5cbiAgICAgICAgLy8gVGhpcyBpbmNsdWRlcyBpbnRlbnRpb25hbGx5IHNjaGVkdWxlZCB1bm1vdW50cy5cbiAgICAgICAgZmFpbGVkUm9vdHMuZGVsZXRlKHJvb3QpO1xuXG4gICAgICAgIGlmIChyb290RWxlbWVudHMgIT09IG51bGwpIHtcbiAgICAgICAgICByb290RWxlbWVudHMuc2V0KHJvb3QsIGNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2xkT25TY2hlZHVsZUZpYmVyUm9vdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG5cbiAgICBob29rLm9uQ29tbWl0RmliZXJSb290ID0gZnVuY3Rpb24gKGlkLCByb290LCBtYXliZVByaW9yaXR5TGV2ZWwsIGRpZEVycm9yKSB7XG4gICAgICB2YXIgaGVscGVycyA9IGhlbHBlcnNCeVJlbmRlcmVySUQuZ2V0KGlkKTtcblxuICAgICAgaWYgKGhlbHBlcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBoZWxwZXJzQnlSb290LnNldChyb290LCBoZWxwZXJzKTtcbiAgICAgICAgdmFyIGN1cnJlbnQgPSByb290LmN1cnJlbnQ7XG4gICAgICAgIHZhciBhbHRlcm5hdGUgPSBjdXJyZW50LmFsdGVybmF0ZTsgLy8gV2UgbmVlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGlzIHJvb3QgaGFzIGp1c3QgKHVuKW1vdW50ZWQuXG4gICAgICAgIC8vIFRoaXMgbG9naWMgaXMgY29weS1wYXN0ZWQgZnJvbSBzaW1pbGFyIGxvZ2ljIGluIHRoZSBEZXZUb29scyBiYWNrZW5kLlxuICAgICAgICAvLyBJZiB0aGlzIGJyZWFrcyB3aXRoIHNvbWUgcmVmYWN0b3JpbmcsIHlvdSdsbCB3YW50IHRvIHVwZGF0ZSBEZXZUb29scyB0b28uXG5cbiAgICAgICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciB3YXNNb3VudGVkID0gYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUgIT0gbnVsbCAmJiBhbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZS5lbGVtZW50ICE9IG51bGwgJiYgbW91bnRlZFJvb3RzLmhhcyhyb290KTtcbiAgICAgICAgICB2YXIgaXNNb3VudGVkID0gY3VycmVudC5tZW1vaXplZFN0YXRlICE9IG51bGwgJiYgY3VycmVudC5tZW1vaXplZFN0YXRlLmVsZW1lbnQgIT0gbnVsbDtcblxuICAgICAgICAgIGlmICghd2FzTW91bnRlZCAmJiBpc01vdW50ZWQpIHtcbiAgICAgICAgICAgIC8vIE1vdW50IGEgbmV3IHJvb3QuXG4gICAgICAgICAgICBtb3VudGVkUm9vdHMuYWRkKHJvb3QpO1xuICAgICAgICAgICAgZmFpbGVkUm9vdHMuZGVsZXRlKHJvb3QpO1xuICAgICAgICAgIH0gZWxzZSBpZiAod2FzTW91bnRlZCAmJiBpc01vdW50ZWQpIDsgZWxzZSBpZiAod2FzTW91bnRlZCAmJiAhaXNNb3VudGVkKSB7XG4gICAgICAgICAgICAvLyBVbm1vdW50IGFuIGV4aXN0aW5nIHJvb3QuXG4gICAgICAgICAgICBtb3VudGVkUm9vdHMuZGVsZXRlKHJvb3QpO1xuXG4gICAgICAgICAgICBpZiAoZGlkRXJyb3IpIHtcbiAgICAgICAgICAgICAgLy8gV2UnbGwgcmVtb3VudCBpdCBvbiBmdXR1cmUgZWRpdHMuXG4gICAgICAgICAgICAgIGZhaWxlZFJvb3RzLmFkZChyb290KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGhlbHBlcnNCeVJvb3QuZGVsZXRlKHJvb3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoIXdhc01vdW50ZWQgJiYgIWlzTW91bnRlZCkge1xuICAgICAgICAgICAgaWYgKGRpZEVycm9yKSB7XG4gICAgICAgICAgICAgIC8vIFdlJ2xsIHJlbW91bnQgaXQgb24gZnV0dXJlIGVkaXRzLlxuICAgICAgICAgICAgICBmYWlsZWRSb290cy5hZGQocm9vdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE1vdW50IGEgbmV3IHJvb3QuXG4gICAgICAgICAgbW91bnRlZFJvb3RzLmFkZChyb290KTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBBbHdheXMgY2FsbCB0aGUgZGVjb3JhdGVkIERldlRvb2xzIGhvb2suXG5cblxuICAgICAgcmV0dXJuIG9sZE9uQ29tbWl0RmliZXJSb290LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfVxufVxuZnVuY3Rpb24gaGFzVW5yZWNvdmVyYWJsZUVycm9ycygpIHtcbiAgLy8gVE9ETzogZGVsZXRlIHRoaXMgYWZ0ZXIgcmVtb3ZpbmcgZGVwZW5kZW5jeSBpbiBSTi5cbiAgcmV0dXJuIGZhbHNlO1xufSAvLyBFeHBvc2VkIGZvciB0ZXN0aW5nLlxuXG5mdW5jdGlvbiBfZ2V0TW91bnRlZFJvb3RDb3VudCgpIHtcbiAge1xuICAgIHJldHVybiBtb3VudGVkUm9vdHMuc2l6ZTtcbiAgfVxufSAvLyBUaGlzIGlzIGEgd3JhcHBlciBvdmVyIG1vcmUgcHJpbWl0aXZlIGZ1bmN0aW9ucyBmb3Igc2V0dGluZyBzaWduYXR1cmUuXG4vLyBTaWduYXR1cmVzIGxldCB1cyBkZWNpZGUgd2hldGhlciB0aGUgSG9vayBvcmRlciBoYXMgY2hhbmdlZCBvbiByZWZyZXNoLlxuLy9cbi8vIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBhcyBhIHRyYW5zZm9ybSB0YXJnZXQsIGUuZy46XG4vLyB2YXIgX3MgPSBjcmVhdGVTaWduYXR1cmVGdW5jdGlvbkZvclRyYW5zZm9ybSgpXG4vL1xuLy8gZnVuY3Rpb24gSGVsbG8oKSB7XG4vLyAgIGNvbnN0IFtmb28sIHNldEZvb10gPSB1c2VTdGF0ZSgwKTtcbi8vICAgY29uc3QgdmFsdWUgPSB1c2VDdXN0b21Ib29rKCk7XG4vLyAgIF9zKCk7IC8qIENhbGwgd2l0aG91dCBhcmd1bWVudHMgdHJpZ2dlcnMgY29sbGVjdGluZyB0aGUgY3VzdG9tIEhvb2sgbGlzdC5cbi8vICAgICAgICAgICogVGhpcyBkb2Vzbid0IGhhcHBlbiBkdXJpbmcgdGhlIG1vZHVsZSBldmFsdWF0aW9uIGJlY2F1c2Ugd2Vcbi8vICAgICAgICAgICogZG9uJ3Qgd2FudCB0byBjaGFuZ2UgdGhlIG1vZHVsZSBvcmRlciB3aXRoIGlubGluZSByZXF1aXJlcy5cbi8vICAgICAgICAgICogTmV4dCBjYWxscyBhcmUgbm9vcHMuICovXG4vLyAgIHJldHVybiA8aDE+SGk8L2gxPjtcbi8vIH1cbi8vXG4vLyAvKiBDYWxsIHdpdGggYXJndW1lbnRzIGF0dGFjaGVzIHRoZSBzaWduYXR1cmUgdG8gdGhlIHR5cGU6ICovXG4vLyBfcyhcbi8vICAgSGVsbG8sXG4vLyAgICd1c2VTdGF0ZXtbZm9vLCBzZXRGb29dfSgwKScsXG4vLyAgICgpID0+IFt1c2VDdXN0b21Ib29rXSwgLyogTGF6eSB0byBhdm9pZCB0cmlnZ2VyaW5nIGlubGluZSByZXF1aXJlcyAqL1xuLy8gKTtcblxuZnVuY3Rpb24gY3JlYXRlU2lnbmF0dXJlRnVuY3Rpb25Gb3JUcmFuc2Zvcm0oKSB7XG4gIHtcbiAgICB2YXIgc2F2ZWRUeXBlO1xuICAgIHZhciBoYXNDdXN0b21Ib29rcztcbiAgICB2YXIgZGlkQ29sbGVjdEhvb2tzID0gZmFsc2U7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0eXBlLCBrZXksIGZvcmNlUmVzZXQsIGdldEN1c3RvbUhvb2tzKSB7XG4gICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gV2UncmUgaW4gdGhlIGluaXRpYWwgcGhhc2UgdGhhdCBhc3NvY2lhdGVzIHNpZ25hdHVyZXNcbiAgICAgICAgLy8gd2l0aCB0aGUgZnVuY3Rpb25zLiBOb3RlIHRoaXMgbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lc1xuICAgICAgICAvLyBpbiBIT0MgY2hhaW5zIGxpa2UgX3MoaG9jMShfcyhob2MyKF9zKGFjdHVhbEZ1bmN0aW9uKSkpKSkuXG4gICAgICAgIGlmICghc2F2ZWRUeXBlKSB7XG4gICAgICAgICAgLy8gV2UncmUgaW4gdGhlIGlubmVybW9zdCBjYWxsLCBzbyB0aGlzIGlzIHRoZSBhY3R1YWwgdHlwZS5cbiAgICAgICAgICBzYXZlZFR5cGUgPSB0eXBlO1xuICAgICAgICAgIGhhc0N1c3RvbUhvb2tzID0gdHlwZW9mIGdldEN1c3RvbUhvb2tzID09PSAnZnVuY3Rpb24nO1xuICAgICAgICB9IC8vIFNldCB0aGUgc2lnbmF0dXJlIGZvciBhbGwgdHlwZXMgKGV2ZW4gd3JhcHBlcnMhKSBpbiBjYXNlXG4gICAgICAgIC8vIHRoZXkgaGF2ZSBubyBzaWduYXR1cmVzIG9mIHRoZWlyIG93bi4gVGhpcyBpcyB0byBwcmV2ZW50XG4gICAgICAgIC8vIHByb2JsZW1zIGxpa2UgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8yMDQxNy5cblxuXG4gICAgICAgIGlmICh0eXBlICE9IG51bGwgJiYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JykpIHtcbiAgICAgICAgICBzZXRTaWduYXR1cmUodHlwZSwga2V5LCBmb3JjZVJlc2V0LCBnZXRDdXN0b21Ib29rcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFdlJ3JlIGluIHRoZSBfcygpIGNhbGwgd2l0aG91dCBhcmd1bWVudHMsIHdoaWNoIG1lYW5zXG4gICAgICAgIC8vIHRoaXMgaXMgdGhlIHRpbWUgdG8gY29sbGVjdCBjdXN0b20gSG9vayBzaWduYXR1cmVzLlxuICAgICAgICAvLyBPbmx5IGRvIHRoaXMgb25jZS4gVGhpcyBwYXRoIGlzIGhvdCBhbmQgcnVucyAqaW5zaWRlKiBldmVyeSByZW5kZXIhXG4gICAgICAgIGlmICghZGlkQ29sbGVjdEhvb2tzICYmIGhhc0N1c3RvbUhvb2tzKSB7XG4gICAgICAgICAgZGlkQ29sbGVjdEhvb2tzID0gdHJ1ZTtcbiAgICAgICAgICBjb2xsZWN0Q3VzdG9tSG9va3NGb3JTaWduYXR1cmUoc2F2ZWRUeXBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cbmZ1bmN0aW9uIGlzTGlrZWx5Q29tcG9uZW50VHlwZSh0eXBlKSB7XG4gIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiB0eXBlKSB7XG4gICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBGaXJzdCwgZGVhbCB3aXRoIGNsYXNzZXMuXG4gICAgICAgICAgaWYgKHR5cGUucHJvdG90eXBlICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KSB7XG4gICAgICAgICAgICAgIC8vIFJlYWN0IGNsYXNzLlxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG93bk5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModHlwZS5wcm90b3R5cGUpO1xuXG4gICAgICAgICAgICBpZiAob3duTmFtZXMubGVuZ3RoID4gMSB8fCBvd25OYW1lc1swXSAhPT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICAgICAgICAvLyBUaGlzIGxvb2tzIGxpa2UgYSBjbGFzcy5cbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG9cblxuXG4gICAgICAgICAgICBpZiAodHlwZS5wcm90b3R5cGUuX19wcm90b19fICE9PSBPYmplY3QucHJvdG90eXBlKSB7XG4gICAgICAgICAgICAgIC8vIEl0IGhhcyBhIHN1cGVyY2xhc3MuXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0gLy8gUGFzcyB0aHJvdWdoLlxuICAgICAgICAgICAgLy8gVGhpcyBsb29rcyBsaWtlIGEgcmVndWxhciBmdW5jdGlvbiB3aXRoIGVtcHR5IHByb3RvdHlwZS5cblxuICAgICAgICAgIH0gLy8gRm9yIHBsYWluIGZ1bmN0aW9ucyBhbmQgYXJyb3dzLCB1c2UgbmFtZSBhcyBhIGhldXJpc3RpYy5cblxuXG4gICAgICAgICAgdmFyIG5hbWUgPSB0eXBlLm5hbWUgfHwgdHlwZS5kaXNwbGF5TmFtZTtcbiAgICAgICAgICByZXR1cm4gdHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnICYmIC9eW0EtWl0vLnRlc3QobmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAge1xuICAgICAgICAgIGlmICh0eXBlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoZ2V0UHJvcGVydHkodHlwZSwgJyQkdHlwZW9mJykpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgICAgICAvLyBEZWZpbml0ZWx5IFJlYWN0IGNvbXBvbmVudHMuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0cy5fZ2V0TW91bnRlZFJvb3RDb3VudCA9IF9nZXRNb3VudGVkUm9vdENvdW50O1xuZXhwb3J0cy5jb2xsZWN0Q3VzdG9tSG9va3NGb3JTaWduYXR1cmUgPSBjb2xsZWN0Q3VzdG9tSG9va3NGb3JTaWduYXR1cmU7XG5leHBvcnRzLmNyZWF0ZVNpZ25hdHVyZUZ1bmN0aW9uRm9yVHJhbnNmb3JtID0gY3JlYXRlU2lnbmF0dXJlRnVuY3Rpb25Gb3JUcmFuc2Zvcm07XG5leHBvcnRzLmZpbmRBZmZlY3RlZEhvc3RJbnN0YW5jZXMgPSBmaW5kQWZmZWN0ZWRIb3N0SW5zdGFuY2VzO1xuZXhwb3J0cy5nZXRGYW1pbHlCeUlEID0gZ2V0RmFtaWx5QnlJRDtcbmV4cG9ydHMuZ2V0RmFtaWx5QnlUeXBlID0gZ2V0RmFtaWx5QnlUeXBlO1xuZXhwb3J0cy5oYXNVbnJlY292ZXJhYmxlRXJyb3JzID0gaGFzVW5yZWNvdmVyYWJsZUVycm9ycztcbmV4cG9ydHMuaW5qZWN0SW50b0dsb2JhbEhvb2sgPSBpbmplY3RJbnRvR2xvYmFsSG9vaztcbmV4cG9ydHMuaXNMaWtlbHlDb21wb25lbnRUeXBlID0gaXNMaWtlbHlDb21wb25lbnRUeXBlO1xuZXhwb3J0cy5wZXJmb3JtUmVhY3RSZWZyZXNoID0gcGVyZm9ybVJlYWN0UmVmcmVzaDtcbmV4cG9ydHMucmVnaXN0ZXIgPSByZWdpc3RlcjtcbmV4cG9ydHMuc2V0U2lnbmF0dXJlID0gc2V0U2lnbmF0dXJlO1xuICB9KSgpO1xufVxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react-refresh/cjs/react-refresh-runtime.development.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react-refresh/runtime.js":
|
||
/*!******************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/react-refresh/runtime.js ***!
|
||
\******************************************************************/
|
||
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-refresh-runtime.development.js */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react-refresh/cjs/react-refresh-runtime.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QtcmVmcmVzaC9ydW50aW1lLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLElBQUksS0FBcUMsRUFBRSxFQUUxQyxDQUFDO0FBQ0YsRUFBRSxzTUFBc0U7QUFDeEUiLCJzb3VyY2VzIjpbIi9ob21lL05pY2hvbGFpL0RvY3VtZW50cy9EZXYvYmlvaGF6YXJkLXZmeC0xL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QtcmVmcmVzaC9ydW50aW1lLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1yZWZyZXNoLXJ1bnRpbWUucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtcmVmcmVzaC1ydW50aW1lLmRldmVsb3BtZW50LmpzJyk7XG59XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react-refresh/runtime.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js":
|
||
/*!*****************************************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js ***!
|
||
\*****************************************************************************************************************************/
|
||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * @license React\n * react-server-dom-webpack-client.browser.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n true &&\n (function () {\n function resolveClientReference(bundlerConfig, metadata) {\n if (bundlerConfig) {\n var moduleExports = bundlerConfig[metadata[0]];\n if ((bundlerConfig = moduleExports && moduleExports[metadata[2]]))\n moduleExports = bundlerConfig.name;\n else {\n bundlerConfig = moduleExports && moduleExports[\"*\"];\n if (!bundlerConfig)\n throw Error(\n 'Could not find the module \"' +\n metadata[0] +\n '\" in the React Server Consumer Manifest. This is probably a bug in the React Server Components bundler.'\n );\n moduleExports = metadata[2];\n }\n return 4 === metadata.length\n ? [bundlerConfig.id, bundlerConfig.chunks, moduleExports, 1]\n : [bundlerConfig.id, bundlerConfig.chunks, moduleExports];\n }\n return metadata;\n }\n function resolveServerReference(bundlerConfig, id) {\n var name = \"\",\n resolvedModuleData = bundlerConfig[id];\n if (resolvedModuleData) name = resolvedModuleData.name;\n else {\n var idx = id.lastIndexOf(\"#\");\n -1 !== idx &&\n ((name = id.slice(idx + 1)),\n (resolvedModuleData = bundlerConfig[id.slice(0, idx)]));\n if (!resolvedModuleData)\n throw Error(\n 'Could not find the module \"' +\n id +\n '\" in the React Server Manifest. This is probably a bug in the React Server Components bundler.'\n );\n }\n return resolvedModuleData.async\n ? [resolvedModuleData.id, resolvedModuleData.chunks, name, 1]\n : [resolvedModuleData.id, resolvedModuleData.chunks, name];\n }\n function requireAsyncModule(id) {\n var promise = __webpack_require__(id);\n if (\"function\" !== typeof promise.then || \"fulfilled\" === promise.status)\n return null;\n promise.then(\n function (value) {\n promise.status = \"fulfilled\";\n promise.value = value;\n },\n function (reason) {\n promise.status = \"rejected\";\n promise.reason = reason;\n }\n );\n return promise;\n }\n function ignoreReject() {}\n function preloadModule(metadata) {\n for (\n var chunks = metadata[1], promises = [], i = 0;\n i < chunks.length;\n\n ) {\n var chunkId = chunks[i++],\n chunkFilename = chunks[i++],\n entry = chunkCache.get(chunkId);\n void 0 === entry\n ? ((chunkFilename = loadChunk(chunkId, chunkFilename)),\n promises.push(chunkFilename),\n (entry = chunkCache.set.bind(chunkCache, chunkId, null)),\n chunkFilename.then(entry, ignoreReject),\n chunkCache.set(chunkId, chunkFilename))\n : null !== entry && promises.push(entry);\n }\n return 4 === metadata.length\n ? 0 === promises.length\n ? requireAsyncModule(metadata[0])\n : Promise.all(promises).then(function () {\n return requireAsyncModule(metadata[0]);\n })\n : 0 < promises.length\n ? Promise.all(promises)\n : null;\n }\n function requireModule(metadata) {\n var moduleExports = __webpack_require__(metadata[0]);\n if (4 === metadata.length && \"function\" === typeof moduleExports.then)\n if (\"fulfilled\" === moduleExports.status)\n moduleExports = moduleExports.value;\n else throw moduleExports.reason;\n return \"*\" === metadata[2]\n ? moduleExports\n : \"\" === metadata[2]\n ? moduleExports.__esModule\n ? moduleExports.default\n : moduleExports\n : moduleExports[metadata[2]];\n }\n function loadChunk(chunkId, filename) {\n chunkMap.set(chunkId, filename);\n return __webpack_require__.e(chunkId);\n }\n function getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable)\n return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n }\n function isObjectPrototype(object) {\n if (!object) return !1;\n var ObjectPrototype = Object.prototype;\n if (object === ObjectPrototype) return !0;\n if (getPrototypeOf(object)) return !1;\n object = Object.getOwnPropertyNames(object);\n for (var i = 0; i < object.length; i++)\n if (!(object[i] in ObjectPrototype)) return !1;\n return !0;\n }\n function isSimpleObject(object) {\n if (!isObjectPrototype(getPrototypeOf(object))) return !1;\n for (\n var names = Object.getOwnPropertyNames(object), i = 0;\n i < names.length;\n i++\n ) {\n var descriptor = Object.getOwnPropertyDescriptor(object, names[i]);\n if (\n !descriptor ||\n (!descriptor.enumerable &&\n ((\"key\" !== names[i] && \"ref\" !== names[i]) ||\n \"function\" !== typeof descriptor.get))\n )\n return !1;\n }\n return !0;\n }\n function objectName(object) {\n object = Object.prototype.toString.call(object);\n return object.slice(8, object.length - 1);\n }\n function describeKeyForErrorMessage(key) {\n var encodedKey = JSON.stringify(key);\n return '\"' + key + '\"' === encodedKey ? key : encodedKey;\n }\n function describeValueForErrorMessage(value) {\n switch (typeof value) {\n case \"string\":\n return JSON.stringify(\n 10 >= value.length ? value : value.slice(0, 10) + \"...\"\n );\n case \"object\":\n if (isArrayImpl(value)) return \"[...]\";\n if (null !== value && value.$$typeof === CLIENT_REFERENCE_TAG)\n return \"client\";\n value = objectName(value);\n return \"Object\" === value ? \"{...}\" : value;\n case \"function\":\n return value.$$typeof === CLIENT_REFERENCE_TAG\n ? \"client\"\n : (value = value.displayName || value.name)\n ? \"function \" + value\n : \"function\";\n default:\n return String(value);\n }\n }\n function describeElementType(type) {\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n }\n if (\"object\" === typeof type)\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return describeElementType(type.render);\n case REACT_MEMO_TYPE:\n return describeElementType(type.type);\n case REACT_LAZY_TYPE:\n var payload = type._payload;\n type = type._init;\n try {\n return describeElementType(type(payload));\n } catch (x) {}\n }\n return \"\";\n }\n function describeObjectForErrorMessage(objectOrArray, expandedName) {\n var objKind = objectName(objectOrArray);\n if (\"Object\" !== objKind && \"Array\" !== objKind) return objKind;\n var start = -1,\n length = 0;\n if (isArrayImpl(objectOrArray))\n if (jsxChildrenParents.has(objectOrArray)) {\n var type = jsxChildrenParents.get(objectOrArray);\n objKind = \"<\" + describeElementType(type) + \">\";\n for (var i = 0; i < objectOrArray.length; i++) {\n var value = objectOrArray[i];\n value =\n \"string\" === typeof value\n ? value\n : \"object\" === typeof value && null !== value\n ? \"{\" + describeObjectForErrorMessage(value) + \"}\"\n : \"{\" + describeValueForErrorMessage(value) + \"}\";\n \"\" + i === expandedName\n ? ((start = objKind.length),\n (length = value.length),\n (objKind += value))\n : (objKind =\n 15 > value.length && 40 > objKind.length + value.length\n ? objKind + value\n : objKind + \"{...}\");\n }\n objKind += \"</\" + describeElementType(type) + \">\";\n } else {\n objKind = \"[\";\n for (type = 0; type < objectOrArray.length; type++)\n 0 < type && (objKind += \", \"),\n (i = objectOrArray[type]),\n (i =\n \"object\" === typeof i && null !== i\n ? describeObjectForErrorMessage(i)\n : describeValueForErrorMessage(i)),\n \"\" + type === expandedName\n ? ((start = objKind.length),\n (length = i.length),\n (objKind += i))\n : (objKind =\n 10 > i.length && 40 > objKind.length + i.length\n ? objKind + i\n : objKind + \"...\");\n objKind += \"]\";\n }\n else if (objectOrArray.$$typeof === REACT_ELEMENT_TYPE)\n objKind = \"<\" + describeElementType(objectOrArray.type) + \"/>\";\n else {\n if (objectOrArray.$$typeof === CLIENT_REFERENCE_TAG) return \"client\";\n if (jsxPropsParents.has(objectOrArray)) {\n objKind = jsxPropsParents.get(objectOrArray);\n objKind = \"<\" + (describeElementType(objKind) || \"...\");\n type = Object.keys(objectOrArray);\n for (i = 0; i < type.length; i++) {\n objKind += \" \";\n value = type[i];\n objKind += describeKeyForErrorMessage(value) + \"=\";\n var _value2 = objectOrArray[value];\n var _substr2 =\n value === expandedName &&\n \"object\" === typeof _value2 &&\n null !== _value2\n ? describeObjectForErrorMessage(_value2)\n : describeValueForErrorMessage(_value2);\n \"string\" !== typeof _value2 && (_substr2 = \"{\" + _substr2 + \"}\");\n value === expandedName\n ? ((start = objKind.length),\n (length = _substr2.length),\n (objKind += _substr2))\n : (objKind =\n 10 > _substr2.length && 40 > objKind.length + _substr2.length\n ? objKind + _substr2\n : objKind + \"...\");\n }\n objKind += \">\";\n } else {\n objKind = \"{\";\n type = Object.keys(objectOrArray);\n for (i = 0; i < type.length; i++)\n 0 < i && (objKind += \", \"),\n (value = type[i]),\n (objKind += describeKeyForErrorMessage(value) + \": \"),\n (_value2 = objectOrArray[value]),\n (_value2 =\n \"object\" === typeof _value2 && null !== _value2\n ? describeObjectForErrorMessage(_value2)\n : describeValueForErrorMessage(_value2)),\n value === expandedName\n ? ((start = objKind.length),\n (length = _value2.length),\n (objKind += _value2))\n : (objKind =\n 10 > _value2.length && 40 > objKind.length + _value2.length\n ? objKind + _value2\n : objKind + \"...\");\n objKind += \"}\";\n }\n }\n return void 0 === expandedName\n ? objKind\n : -1 < start && 0 < length\n ? ((objectOrArray = \" \".repeat(start) + \"^\".repeat(length)),\n \"\\n \" + objKind + \"\\n \" + objectOrArray)\n : \"\\n \" + objKind;\n }\n function serializeNumber(number) {\n return Number.isFinite(number)\n ? 0 === number && -Infinity === 1 / number\n ? \"$-0\"\n : number\n : Infinity === number\n ? \"$Infinity\"\n : -Infinity === number\n ? \"$-Infinity\"\n : \"$NaN\";\n }\n function processReply(\n root,\n formFieldPrefix,\n temporaryReferences,\n resolve,\n reject\n ) {\n function serializeTypedArray(tag, typedArray) {\n typedArray = new Blob([\n new Uint8Array(\n typedArray.buffer,\n typedArray.byteOffset,\n typedArray.byteLength\n )\n ]);\n var blobId = nextPartId++;\n null === formData && (formData = new FormData());\n formData.append(formFieldPrefix + blobId, typedArray);\n return \"$\" + tag + blobId.toString(16);\n }\n function serializeBinaryReader(reader) {\n function progress(entry) {\n entry.done\n ? ((entry = nextPartId++),\n data.append(formFieldPrefix + entry, new Blob(buffer)),\n data.append(\n formFieldPrefix + streamId,\n '\"$o' + entry.toString(16) + '\"'\n ),\n data.append(formFieldPrefix + streamId, \"C\"),\n pendingParts--,\n 0 === pendingParts && resolve(data))\n : (buffer.push(entry.value),\n reader.read(new Uint8Array(1024)).then(progress, reject));\n }\n null === formData && (formData = new FormData());\n var data = formData;\n pendingParts++;\n var streamId = nextPartId++,\n buffer = [];\n reader.read(new Uint8Array(1024)).then(progress, reject);\n return \"$r\" + streamId.toString(16);\n }\n function serializeReader(reader) {\n function progress(entry) {\n if (entry.done)\n data.append(formFieldPrefix + streamId, \"C\"),\n pendingParts--,\n 0 === pendingParts && resolve(data);\n else\n try {\n var partJSON = JSON.stringify(entry.value, resolveToJSON);\n data.append(formFieldPrefix + streamId, partJSON);\n reader.read().then(progress, reject);\n } catch (x) {\n reject(x);\n }\n }\n null === formData && (formData = new FormData());\n var data = formData;\n pendingParts++;\n var streamId = nextPartId++;\n reader.read().then(progress, reject);\n return \"$R\" + streamId.toString(16);\n }\n function serializeReadableStream(stream) {\n try {\n var binaryReader = stream.getReader({ mode: \"byob\" });\n } catch (x) {\n return serializeReader(stream.getReader());\n }\n return serializeBinaryReader(binaryReader);\n }\n function serializeAsyncIterable(iterable, iterator) {\n function progress(entry) {\n if (entry.done) {\n if (void 0 === entry.value)\n data.append(formFieldPrefix + streamId, \"C\");\n else\n try {\n var partJSON = JSON.stringify(entry.value, resolveToJSON);\n data.append(formFieldPrefix + streamId, \"C\" + partJSON);\n } catch (x) {\n reject(x);\n return;\n }\n pendingParts--;\n 0 === pendingParts && resolve(data);\n } else\n try {\n var _partJSON = JSON.stringify(entry.value, resolveToJSON);\n data.append(formFieldPrefix + streamId, _partJSON);\n iterator.next().then(progress, reject);\n } catch (x$0) {\n reject(x$0);\n }\n }\n null === formData && (formData = new FormData());\n var data = formData;\n pendingParts++;\n var streamId = nextPartId++;\n iterable = iterable === iterator;\n iterator.next().then(progress, reject);\n return \"$\" + (iterable ? \"x\" : \"X\") + streamId.toString(16);\n }\n function resolveToJSON(key, value) {\n var originalValue = this[key];\n \"object\" !== typeof originalValue ||\n originalValue === value ||\n originalValue instanceof Date ||\n (\"Object\" !== objectName(originalValue)\n ? console.error(\n \"Only plain objects can be passed to Server Functions from the Client. %s objects are not supported.%s\",\n objectName(originalValue),\n describeObjectForErrorMessage(this, key)\n )\n : console.error(\n \"Only plain objects can be passed to Server Functions from the Client. Objects with toJSON methods are not supported. Convert it manually to a simple value before passing it to props.%s\",\n describeObjectForErrorMessage(this, key)\n ));\n if (null === value) return null;\n if (\"object\" === typeof value) {\n switch (value.$$typeof) {\n case REACT_ELEMENT_TYPE:\n if (void 0 !== temporaryReferences && -1 === key.indexOf(\":\")) {\n var parentReference = writtenObjects.get(this);\n if (void 0 !== parentReference)\n return (\n temporaryReferences.set(parentReference + \":\" + key, value),\n \"$T\"\n );\n }\n throw Error(\n \"React Element cannot be passed to Server Functions from the Client without a temporary reference set. Pass a TemporaryReferenceSet to the options.\" +\n describeObjectForErrorMessage(this, key)\n );\n case REACT_LAZY_TYPE:\n originalValue = value._payload;\n var init = value._init;\n null === formData && (formData = new FormData());\n pendingParts++;\n try {\n parentReference = init(originalValue);\n var lazyId = nextPartId++,\n partJSON = serializeModel(parentReference, lazyId);\n formData.append(formFieldPrefix + lazyId, partJSON);\n return \"$\" + lazyId.toString(16);\n } catch (x) {\n if (\n \"object\" === typeof x &&\n null !== x &&\n \"function\" === typeof x.then\n ) {\n pendingParts++;\n var _lazyId = nextPartId++;\n parentReference = function () {\n try {\n var _partJSON2 = serializeModel(value, _lazyId),\n _data = formData;\n _data.append(formFieldPrefix + _lazyId, _partJSON2);\n pendingParts--;\n 0 === pendingParts && resolve(_data);\n } catch (reason) {\n reject(reason);\n }\n };\n x.then(parentReference, parentReference);\n return \"$\" + _lazyId.toString(16);\n }\n reject(x);\n return null;\n } finally {\n pendingParts--;\n }\n }\n if (\"function\" === typeof value.then) {\n null === formData && (formData = new FormData());\n pendingParts++;\n var promiseId = nextPartId++;\n value.then(function (partValue) {\n try {\n var _partJSON3 = serializeModel(partValue, promiseId);\n partValue = formData;\n partValue.append(formFieldPrefix + promiseId, _partJSON3);\n pendingParts--;\n 0 === pendingParts && resolve(partValue);\n } catch (reason) {\n reject(reason);\n }\n }, reject);\n return \"$@\" + promiseId.toString(16);\n }\n parentReference = writtenObjects.get(value);\n if (void 0 !== parentReference)\n if (modelRoot === value) modelRoot = null;\n else return parentReference;\n else\n -1 === key.indexOf(\":\") &&\n ((parentReference = writtenObjects.get(this)),\n void 0 !== parentReference &&\n ((parentReference = parentReference + \":\" + key),\n writtenObjects.set(value, parentReference),\n void 0 !== temporaryReferences &&\n temporaryReferences.set(parentReference, value)));\n if (isArrayImpl(value)) return value;\n if (value instanceof FormData) {\n null === formData && (formData = new FormData());\n var _data3 = formData;\n key = nextPartId++;\n var prefix = formFieldPrefix + key + \"_\";\n value.forEach(function (originalValue, originalKey) {\n _data3.append(prefix + originalKey, originalValue);\n });\n return \"$K\" + key.toString(16);\n }\n if (value instanceof Map)\n return (\n (key = nextPartId++),\n (parentReference = serializeModel(Array.from(value), key)),\n null === formData && (formData = new FormData()),\n formData.append(formFieldPrefix + key, parentReference),\n \"$Q\" + key.toString(16)\n );\n if (value instanceof Set)\n return (\n (key = nextPartId++),\n (parentReference = serializeModel(Array.from(value), key)),\n null === formData && (formData = new FormData()),\n formData.append(formFieldPrefix + key, parentReference),\n \"$W\" + key.toString(16)\n );\n if (value instanceof ArrayBuffer)\n return (\n (key = new Blob([value])),\n (parentReference = nextPartId++),\n null === formData && (formData = new FormData()),\n formData.append(formFieldPrefix + parentReference, key),\n \"$A\" + parentReference.toString(16)\n );\n if (value instanceof Int8Array)\n return serializeTypedArray(\"O\", value);\n if (value instanceof Uint8Array)\n return serializeTypedArray(\"o\", value);\n if (value instanceof Uint8ClampedArray)\n return serializeTypedArray(\"U\", value);\n if (value instanceof Int16Array)\n return serializeTypedArray(\"S\", value);\n if (value instanceof Uint16Array)\n return serializeTypedArray(\"s\", value);\n if (value instanceof Int32Array)\n return serializeTypedArray(\"L\", value);\n if (value instanceof Uint32Array)\n return serializeTypedArray(\"l\", value);\n if (value instanceof Float32Array)\n return serializeTypedArray(\"G\", value);\n if (value instanceof Float64Array)\n return serializeTypedArray(\"g\", value);\n if (value instanceof BigInt64Array)\n return serializeTypedArray(\"M\", value);\n if (value instanceof BigUint64Array)\n return serializeTypedArray(\"m\", value);\n if (value instanceof DataView) return serializeTypedArray(\"V\", value);\n if (\"function\" === typeof Blob && value instanceof Blob)\n return (\n null === formData && (formData = new FormData()),\n (key = nextPartId++),\n formData.append(formFieldPrefix + key, value),\n \"$B\" + key.toString(16)\n );\n if ((parentReference = getIteratorFn(value)))\n return (\n (parentReference = parentReference.call(value)),\n parentReference === value\n ? ((key = nextPartId++),\n (parentReference = serializeModel(\n Array.from(parentReference),\n key\n )),\n null === formData && (formData = new FormData()),\n formData.append(formFieldPrefix + key, parentReference),\n \"$i\" + key.toString(16))\n : Array.from(parentReference)\n );\n if (\n \"function\" === typeof ReadableStream &&\n value instanceof ReadableStream\n )\n return serializeReadableStream(value);\n parentReference = value[ASYNC_ITERATOR];\n if (\"function\" === typeof parentReference)\n return serializeAsyncIterable(value, parentReference.call(value));\n parentReference = getPrototypeOf(value);\n if (\n parentReference !== ObjectPrototype &&\n (null === parentReference ||\n null !== getPrototypeOf(parentReference))\n ) {\n if (void 0 === temporaryReferences)\n throw Error(\n \"Only plain objects, and a few built-ins, can be passed to Server Functions. Classes or null prototypes are not supported.\" +\n describeObjectForErrorMessage(this, key)\n );\n return \"$T\";\n }\n value.$$typeof === REACT_CONTEXT_TYPE\n ? console.error(\n \"React Context Providers cannot be passed to Server Functions from the Client.%s\",\n describeObjectForErrorMessage(this, key)\n )\n : \"Object\" !== objectName(value)\n ? console.error(\n \"Only plain objects can be passed to Server Functions from the Client. %s objects are not supported.%s\",\n objectName(value),\n describeObjectForErrorMessage(this, key)\n )\n : isSimpleObject(value)\n ? Object.getOwnPropertySymbols &&\n ((parentReference = Object.getOwnPropertySymbols(value)),\n 0 < parentReference.length &&\n console.error(\n \"Only plain objects can be passed to Server Functions from the Client. Objects with symbol properties like %s are not supported.%s\",\n parentReference[0].description,\n describeObjectForErrorMessage(this, key)\n ))\n : console.error(\n \"Only plain objects can be passed to Server Functions from the Client. Classes or other objects with methods are not supported.%s\",\n describeObjectForErrorMessage(this, key)\n );\n return value;\n }\n if (\"string\" === typeof value) {\n if (\"Z\" === value[value.length - 1] && this[key] instanceof Date)\n return \"$D\" + value;\n key = \"$\" === value[0] ? \"$\" + value : value;\n return key;\n }\n if (\"boolean\" === typeof value) return value;\n if (\"number\" === typeof value) return serializeNumber(value);\n if (\"undefined\" === typeof value) return \"$undefined\";\n if (\"function\" === typeof value) {\n parentReference = knownServerReferences.get(value);\n if (void 0 !== parentReference)\n return (\n (key = JSON.stringify(\n { id: parentReference.id, bound: parentReference.bound },\n resolveToJSON\n )),\n null === formData && (formData = new FormData()),\n (parentReference = nextPartId++),\n formData.set(formFieldPrefix + parentReference, key),\n \"$F\" + parentReference.toString(16)\n );\n if (\n void 0 !== temporaryReferences &&\n -1 === key.indexOf(\":\") &&\n ((parentReference = writtenObjects.get(this)),\n void 0 !== parentReference)\n )\n return (\n temporaryReferences.set(parentReference + \":\" + key, value), \"$T\"\n );\n throw Error(\n \"Client Functions cannot be passed directly to Server Functions. Only Functions passed from the Server can be passed back again.\"\n );\n }\n if (\"symbol\" === typeof value) {\n if (\n void 0 !== temporaryReferences &&\n -1 === key.indexOf(\":\") &&\n ((parentReference = writtenObjects.get(this)),\n void 0 !== parentReference)\n )\n return (\n temporaryReferences.set(parentReference + \":\" + key, value), \"$T\"\n );\n throw Error(\n \"Symbols cannot be passed to a Server Function without a temporary reference set. Pass a TemporaryReferenceSet to the options.\" +\n describeObjectForErrorMessage(this, key)\n );\n }\n if (\"bigint\" === typeof value) return \"$n\" + value.toString(10);\n throw Error(\n \"Type \" +\n typeof value +\n \" is not supported as an argument to a Server Function.\"\n );\n }\n function serializeModel(model, id) {\n \"object\" === typeof model &&\n null !== model &&\n ((id = \"$\" + id.toString(16)),\n writtenObjects.set(model, id),\n void 0 !== temporaryReferences && temporaryReferences.set(id, model));\n modelRoot = model;\n return JSON.stringify(model, resolveToJSON);\n }\n var nextPartId = 1,\n pendingParts = 0,\n formData = null,\n writtenObjects = new WeakMap(),\n modelRoot = root,\n json = serializeModel(root, 0);\n null === formData\n ? resolve(json)\n : (formData.set(formFieldPrefix + \"0\", json),\n 0 === pendingParts && resolve(formData));\n return function () {\n 0 < pendingParts &&\n ((pendingParts = 0),\n null === formData ? resolve(json) : resolve(formData));\n };\n }\n function createFakeServerFunction(\n name,\n filename,\n sourceMap,\n line,\n col,\n environmentName,\n innerFunction\n ) {\n name || (name = \"<anonymous>\");\n var encodedName = JSON.stringify(name);\n 1 >= line\n ? ((line = encodedName.length + 7),\n (col =\n \"s=>({\" +\n encodedName +\n \" \".repeat(col < line ? 0 : col - line) +\n \":(...args) => s(...args)})\\n/* This module is a proxy to a Server Action. Turn on Source Maps to see the server source. */\"))\n : (col =\n \"/* This module is a proxy to a Server Action. Turn on Source Maps to see the server source. */\" +\n \"\\n\".repeat(line - 2) +\n \"server=>({\" +\n encodedName +\n \":\\n\" +\n \" \".repeat(1 > col ? 0 : col - 1) +\n \"(...args) => server(...args)})\");\n filename.startsWith(\"/\") && (filename = \"file://\" + filename);\n sourceMap\n ? ((col +=\n \"\\n//# sourceURL=rsc://React/\" +\n encodeURIComponent(environmentName) +\n \"/\" +\n encodeURI(filename) +\n \"?s\" +\n fakeServerFunctionIdx++),\n (col += \"\\n//# sourceMappingURL=\" + sourceMap))\n : filename && (col += \"\\n//# sourceURL=\" + filename);\n try {\n return (0, eval)(col)(innerFunction)[name];\n } catch (x) {\n return innerFunction;\n }\n }\n function registerBoundServerReference(reference, id, bound) {\n knownServerReferences.has(reference) ||\n knownServerReferences.set(reference, {\n id: id,\n originalBind: reference.bind,\n bound: bound\n });\n }\n function createBoundServerReference(\n metaData,\n callServer,\n encodeFormAction,\n findSourceMapURL\n ) {\n function action() {\n var args = Array.prototype.slice.call(arguments);\n return bound\n ? \"fulfilled\" === bound.status\n ? callServer(id, bound.value.concat(args))\n : Promise.resolve(bound).then(function (boundArgs) {\n return callServer(id, boundArgs.concat(args));\n })\n : callServer(id, args);\n }\n var id = metaData.id,\n bound = metaData.bound,\n location = metaData.location;\n if (location) {\n encodeFormAction = metaData.name || \"\";\n var filename = location[1],\n line = location[2];\n location = location[3];\n metaData = metaData.env || \"Server\";\n findSourceMapURL =\n null == findSourceMapURL\n ? null\n : findSourceMapURL(filename, metaData);\n action = createFakeServerFunction(\n encodeFormAction,\n filename,\n findSourceMapURL,\n line,\n location,\n metaData,\n action\n );\n }\n registerBoundServerReference(action, id, bound);\n return action;\n }\n function parseStackLocation(error) {\n error = error.stack;\n error.startsWith(\"Error: react-stack-top-frame\\n\") &&\n (error = error.slice(29));\n var endOfFirst = error.indexOf(\"\\n\");\n if (-1 !== endOfFirst) {\n var endOfSecond = error.indexOf(\"\\n\", endOfFirst + 1);\n endOfFirst =\n -1 === endOfSecond\n ? error.slice(endOfFirst + 1)\n : error.slice(endOfFirst + 1, endOfSecond);\n } else endOfFirst = error;\n error = v8FrameRegExp.exec(endOfFirst);\n if (\n !error &&\n ((error = jscSpiderMonkeyFrameRegExp.exec(endOfFirst)), !error)\n )\n return null;\n endOfFirst = error[1] || \"\";\n \"<anonymous>\" === endOfFirst && (endOfFirst = \"\");\n endOfSecond = error[2] || error[5] || \"\";\n \"<anonymous>\" === endOfSecond && (endOfSecond = \"\");\n return [\n endOfFirst,\n endOfSecond,\n +(error[3] || error[6]),\n +(error[4] || error[7])\n ];\n }\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function ReactPromise(status, value, reason) {\n this.status = status;\n this.value = value;\n this.reason = reason;\n this._debugInfo = null;\n }\n function unwrapWeakResponse(weakResponse) {\n weakResponse = weakResponse.weak.deref();\n if (void 0 === weakResponse)\n throw Error(\n \"We did not expect to receive new data after GC:ing the response.\"\n );\n return weakResponse;\n }\n function cleanupDebugChannel(debugChannel) {\n debugChannel(\"\");\n }\n function readChunk(chunk) {\n switch (chunk.status) {\n case \"resolved_model\":\n initializeModelChunk(chunk);\n break;\n case \"resolved_module\":\n initializeModuleChunk(chunk);\n }\n switch (chunk.status) {\n case \"fulfilled\":\n return chunk.value;\n case \"pending\":\n case \"blocked\":\n case \"halted\":\n throw chunk;\n default:\n throw chunk.reason;\n }\n }\n function getRoot(weakResponse) {\n weakResponse = unwrapWeakResponse(weakResponse);\n return getChunk(weakResponse, 0);\n }\n function createPendingChunk(response) {\n 0 === response._pendingChunks++ &&\n ((response._weakResponse.response = response),\n null !== response._pendingInitialRender &&\n (clearTimeout(response._pendingInitialRender),\n (response._pendingInitialRender = null)));\n return new ReactPromise(\"pending\", null, null);\n }\n function releasePendingChunk(response, chunk) {\n \"pending\" === chunk.status &&\n 0 === --response._pendingChunks &&\n ((response._weakResponse.response = null),\n (response._pendingInitialRender = setTimeout(\n flushInitialRenderPerformance.bind(null, response),\n 100\n )));\n }\n function wakeChunk(listeners, value) {\n for (var i = 0; i < listeners.length; i++) {\n var listener = listeners[i];\n \"function\" === typeof listener\n ? listener(value)\n : fulfillReference(listener, value);\n }\n }\n function rejectChunk(listeners, error) {\n for (var i = 0; i < listeners.length; i++) {\n var listener = listeners[i];\n \"function\" === typeof listener\n ? listener(error)\n : rejectReference(listener, error);\n }\n }\n function resolveBlockedCycle(resolvedChunk, reference) {\n var referencedChunk = reference.handler.chunk;\n if (null === referencedChunk) return null;\n if (referencedChunk === resolvedChunk) return reference.handler;\n reference = referencedChunk.value;\n if (null !== reference)\n for (\n referencedChunk = 0;\n referencedChunk < reference.length;\n referencedChunk++\n ) {\n var listener = reference[referencedChunk];\n if (\n \"function\" !== typeof listener &&\n ((listener = resolveBlockedCycle(resolvedChunk, listener)),\n null !== listener)\n )\n return listener;\n }\n return null;\n }\n function wakeChunkIfInitialized(chunk, resolveListeners, rejectListeners) {\n switch (chunk.status) {\n case \"fulfilled\":\n wakeChunk(resolveListeners, chunk.value);\n break;\n case \"blocked\":\n for (var i = 0; i < resolveListeners.length; i++) {\n var listener = resolveListeners[i];\n if (\"function\" !== typeof listener) {\n var cyclicHandler = resolveBlockedCycle(chunk, listener);\n null !== cyclicHandler &&\n (fulfillReference(listener, cyclicHandler.value),\n resolveListeners.splice(i, 1),\n i--,\n null !== rejectListeners &&\n ((listener = rejectListeners.indexOf(listener)),\n -1 !== listener && rejectListeners.splice(listener, 1)));\n }\n }\n case \"pending\":\n if (chunk.value)\n for (i = 0; i < resolveListeners.length; i++)\n chunk.value.push(resolveListeners[i]);\n else chunk.value = resolveListeners;\n if (chunk.reason) {\n if (rejectListeners)\n for (\n resolveListeners = 0;\n resolveListeners < rejectListeners.length;\n resolveListeners++\n )\n chunk.reason.push(rejectListeners[resolveListeners]);\n } else chunk.reason = rejectListeners;\n break;\n case \"rejected\":\n rejectListeners && rejectChunk(rejectListeners, chunk.reason);\n }\n }\n function triggerErrorOnChunk(response, chunk, error) {\n \"pending\" !== chunk.status && \"blocked\" !== chunk.status\n ? chunk.reason.error(error)\n : (releasePendingChunk(response, chunk),\n (response = chunk.reason),\n (chunk.status = \"rejected\"),\n (chunk.reason = error),\n null !== response && rejectChunk(response, error));\n }\n function createResolvedIteratorResultChunk(response, value, done) {\n return new ReactPromise(\n \"resolved_model\",\n (done ? '{\"done\":true,\"value\":' : '{\"done\":false,\"value\":') +\n value +\n \"}\",\n response\n );\n }\n function resolveIteratorResultChunk(response, chunk, value, done) {\n resolveModelChunk(\n response,\n chunk,\n (done ? '{\"done\":true,\"value\":' : '{\"done\":false,\"value\":') +\n value +\n \"}\"\n );\n }\n function resolveModelChunk(response, chunk, value) {\n if (\"pending\" !== chunk.status) chunk.reason.enqueueModel(value);\n else {\n releasePendingChunk(response, chunk);\n var resolveListeners = chunk.value,\n rejectListeners = chunk.reason;\n chunk.status = \"resolved_model\";\n chunk.value = value;\n chunk.reason = response;\n null !== resolveListeners &&\n (initializeModelChunk(chunk),\n wakeChunkIfInitialized(chunk, resolveListeners, rejectListeners));\n }\n }\n function resolveModuleChunk(response, chunk, value) {\n if (\"pending\" === chunk.status || \"blocked\" === chunk.status) {\n releasePendingChunk(response, chunk);\n response = chunk.value;\n var rejectListeners = chunk.reason;\n chunk.status = \"resolved_module\";\n chunk.value = value;\n null !== response &&\n (initializeModuleChunk(chunk),\n wakeChunkIfInitialized(chunk, response, rejectListeners));\n }\n }\n function initializeModelChunk(chunk) {\n var prevHandler = initializingHandler;\n initializingHandler = null;\n var resolvedModel = chunk.value,\n response = chunk.reason;\n chunk.status = \"blocked\";\n chunk.value = null;\n chunk.reason = null;\n try {\n var value = JSON.parse(resolvedModel, response._fromJSON),\n resolveListeners = chunk.value;\n null !== resolveListeners &&\n ((chunk.value = null),\n (chunk.reason = null),\n wakeChunk(resolveListeners, value));\n if (null !== initializingHandler) {\n if (initializingHandler.errored) throw initializingHandler.value;\n if (0 < initializingHandler.deps) {\n initializingHandler.value = value;\n initializingHandler.chunk = chunk;\n return;\n }\n }\n chunk.status = \"fulfilled\";\n chunk.value = value;\n } catch (error) {\n (chunk.status = \"rejected\"), (chunk.reason = error);\n } finally {\n initializingHandler = prevHandler;\n }\n }\n function initializeModuleChunk(chunk) {\n try {\n var value = requireModule(chunk.value);\n chunk.status = \"fulfilled\";\n chunk.value = value;\n } catch (error) {\n (chunk.status = \"rejected\"), (chunk.reason = error);\n }\n }\n function reportGlobalError(weakResponse, error) {\n if (void 0 !== weakResponse.weak.deref()) {\n var response = unwrapWeakResponse(weakResponse);\n response._closed = !0;\n response._closedReason = error;\n response._chunks.forEach(function (chunk) {\n \"pending\" === chunk.status &&\n triggerErrorOnChunk(response, chunk, error);\n });\n weakResponse = response._debugChannel;\n void 0 !== weakResponse &&\n (weakResponse(\"\"), (response._debugChannel = void 0));\n }\n }\n function nullRefGetter() {\n return null;\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\"function\" === typeof type) return '\"use client\"';\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return type._init === readChunk ? '\"use client\"' : \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function initializeElement(response, element) {\n var stack = element._debugStack,\n owner = element._owner;\n null === owner && (element._owner = response._debugRootOwner);\n var env = response._rootEnvironmentName;\n null !== owner && null != owner.env && (env = owner.env);\n var normalizedStackTrace = null;\n null === owner && null != response._debugRootStack\n ? (normalizedStackTrace = response._debugRootStack)\n : null !== stack &&\n (normalizedStackTrace = createFakeJSXCallStackInDEV(\n response,\n stack,\n env\n ));\n element._debugStack = normalizedStackTrace;\n normalizedStackTrace = null;\n supportsCreateTask &&\n null !== stack &&\n ((normalizedStackTrace = console.createTask.bind(\n console,\n getTaskName(element.type)\n )),\n (stack = buildFakeCallStack(\n response,\n stack,\n env,\n !1,\n normalizedStackTrace\n )),\n (env = null === owner ? null : initializeFakeTask(response, owner)),\n null === env\n ? ((env = response._debugRootTask),\n (normalizedStackTrace = null != env ? env.run(stack) : stack()))\n : (normalizedStackTrace = env.run(stack)));\n element._debugTask = normalizedStackTrace;\n null !== owner && initializeFakeStack(response, owner);\n Object.freeze(element.props);\n }\n function createLazyChunkWrapper(chunk) {\n var lazyType = {\n $$typeof: REACT_LAZY_TYPE,\n _payload: chunk,\n _init: readChunk\n };\n chunk = chunk._debugInfo || (chunk._debugInfo = []);\n lazyType._debugInfo = chunk;\n return lazyType;\n }\n function getChunk(response, id) {\n var chunks = response._chunks,\n chunk = chunks.get(id);\n chunk ||\n ((chunk = response._closed\n ? new ReactPromise(\"rejected\", null, response._closedReason)\n : createPendingChunk(response)),\n chunks.set(id, chunk));\n return chunk;\n }\n function fulfillReference(reference, value) {\n for (\n var response = reference.response,\n handler = reference.handler,\n parentObject = reference.parentObject,\n key = reference.key,\n map = reference.map,\n path = reference.path,\n i = 1;\n i < path.length;\n i++\n ) {\n for (; value.$$typeof === REACT_LAZY_TYPE; )\n if (((value = value._payload), value === handler.chunk))\n value = handler.value;\n else {\n switch (value.status) {\n case \"resolved_model\":\n initializeModelChunk(value);\n break;\n case \"resolved_module\":\n initializeModuleChunk(value);\n }\n switch (value.status) {\n case \"fulfilled\":\n value = value.value;\n continue;\n case \"blocked\":\n var cyclicHandler = resolveBlockedCycle(value, reference);\n if (null !== cyclicHandler) {\n value = cyclicHandler.value;\n continue;\n }\n case \"pending\":\n path.splice(0, i - 1);\n null === value.value\n ? (value.value = [reference])\n : value.value.push(reference);\n null === value.reason\n ? (value.reason = [reference])\n : value.reason.push(reference);\n return;\n case \"halted\":\n return;\n default:\n rejectReference(reference, value.reason);\n return;\n }\n }\n value = value[path[i]];\n }\n reference = map(response, value, parentObject, key);\n parentObject[key] = reference;\n \"\" === key && null === handler.value && (handler.value = reference);\n if (\n parentObject[0] === REACT_ELEMENT_TYPE &&\n \"object\" === typeof handler.value &&\n null !== handler.value &&\n handler.value.$$typeof === REACT_ELEMENT_TYPE\n )\n switch (((parentObject = handler.value), key)) {\n case \"3\":\n parentObject.props = reference;\n break;\n case \"4\":\n parentObject._owner = reference;\n break;\n case \"5\":\n parentObject._debugStack = reference;\n }\n handler.deps--;\n 0 === handler.deps &&\n ((key = handler.chunk),\n null !== key &&\n \"blocked\" === key.status &&\n ((parentObject = key.value),\n (key.status = \"fulfilled\"),\n (key.value = handler.value),\n null !== parentObject && wakeChunk(parentObject, handler.value)));\n }\n function rejectReference(reference, error) {\n var handler = reference.handler;\n reference = reference.response;\n if (!handler.errored) {\n var blockedValue = handler.value;\n handler.errored = !0;\n handler.value = error;\n handler = handler.chunk;\n if (null !== handler && \"blocked\" === handler.status) {\n if (\n \"object\" === typeof blockedValue &&\n null !== blockedValue &&\n blockedValue.$$typeof === REACT_ELEMENT_TYPE\n ) {\n var erroredComponent = {\n name: getComponentNameFromType(blockedValue.type) || \"\",\n owner: blockedValue._owner\n };\n erroredComponent.debugStack = blockedValue._debugStack;\n supportsCreateTask &&\n (erroredComponent.debugTask = blockedValue._debugTask);\n (handler._debugInfo || (handler._debugInfo = [])).push(\n erroredComponent\n );\n }\n triggerErrorOnChunk(reference, handler, error);\n }\n }\n }\n function waitForReference(\n referencedChunk,\n parentObject,\n key,\n response,\n map,\n path\n ) {\n if (initializingHandler) {\n var handler = initializingHandler;\n handler.deps++;\n } else\n handler = initializingHandler = {\n parent: null,\n chunk: null,\n value: null,\n deps: 1,\n errored: !1\n };\n parentObject = {\n response: response,\n handler: handler,\n parentObject: parentObject,\n key: key,\n map: map,\n path: path\n };\n null === referencedChunk.value\n ? (referencedChunk.value = [parentObject])\n : referencedChunk.value.push(parentObject);\n null === referencedChunk.reason\n ? (referencedChunk.reason = [parentObject])\n : referencedChunk.reason.push(parentObject);\n return null;\n }\n function loadServerReference(response, metaData, parentObject, key) {\n if (!response._serverReferenceConfig)\n return createBoundServerReference(\n metaData,\n response._callServer,\n response._encodeFormAction,\n response._debugFindSourceMapURL\n );\n var serverReference = resolveServerReference(\n response._serverReferenceConfig,\n metaData.id\n ),\n promise = preloadModule(serverReference);\n if (promise)\n metaData.bound && (promise = Promise.all([promise, metaData.bound]));\n else if (metaData.bound) promise = Promise.resolve(metaData.bound);\n else\n return (\n (promise = requireModule(serverReference)),\n registerBoundServerReference(promise, metaData.id, metaData.bound),\n promise\n );\n if (initializingHandler) {\n var handler = initializingHandler;\n handler.deps++;\n } else\n handler = initializingHandler = {\n parent: null,\n chunk: null,\n value: null,\n deps: 1,\n errored: !1\n };\n promise.then(\n function () {\n var resolvedValue = requireModule(serverReference);\n if (metaData.bound) {\n var boundArgs = metaData.bound.value.slice(0);\n boundArgs.unshift(null);\n resolvedValue = resolvedValue.bind.apply(resolvedValue, boundArgs);\n }\n registerBoundServerReference(\n resolvedValue,\n metaData.id,\n metaData.bound\n );\n parentObject[key] = resolvedValue;\n \"\" === key &&\n null === handler.value &&\n (handler.value = resolvedValue);\n if (\n parentObject[0] === REACT_ELEMENT_TYPE &&\n \"object\" === typeof handler.value &&\n null !== handler.value &&\n handler.value.$$typeof === REACT_ELEMENT_TYPE\n )\n switch (((boundArgs = handler.value), key)) {\n case \"3\":\n boundArgs.props = resolvedValue;\n break;\n case \"4\":\n boundArgs._owner = resolvedValue;\n }\n handler.deps--;\n 0 === handler.deps &&\n ((resolvedValue = handler.chunk),\n null !== resolvedValue &&\n \"blocked\" === resolvedValue.status &&\n ((boundArgs = resolvedValue.value),\n (resolvedValue.status = \"fulfilled\"),\n (resolvedValue.value = handler.value),\n null !== boundArgs && wakeChunk(boundArgs, handler.value)));\n },\n function (error) {\n if (!handler.errored) {\n var blockedValue = handler.value;\n handler.errored = !0;\n handler.value = error;\n var chunk = handler.chunk;\n if (null !== chunk && \"blocked\" === chunk.status) {\n if (\n \"object\" === typeof blockedValue &&\n null !== blockedValue &&\n blockedValue.$$typeof === REACT_ELEMENT_TYPE\n ) {\n var erroredComponent = {\n name: getComponentNameFromType(blockedValue.type) || \"\",\n owner: blockedValue._owner\n };\n erroredComponent.debugStack = blockedValue._debugStack;\n supportsCreateTask &&\n (erroredComponent.debugTask = blockedValue._debugTask);\n (chunk._debugInfo || (chunk._debugInfo = [])).push(\n erroredComponent\n );\n }\n triggerErrorOnChunk(response, chunk, error);\n }\n }\n }\n );\n return null;\n }\n function getOutlinedModel(response, reference, parentObject, key, map) {\n reference = reference.split(\":\");\n var id = parseInt(reference[0], 16);\n id = getChunk(response, id);\n switch (id.status) {\n case \"resolved_model\":\n initializeModelChunk(id);\n break;\n case \"resolved_module\":\n initializeModuleChunk(id);\n }\n switch (id.status) {\n case \"fulfilled\":\n for (var value = id.value, i = 1; i < reference.length; i++) {\n for (; value.$$typeof === REACT_LAZY_TYPE; ) {\n value = value._payload;\n switch (value.status) {\n case \"resolved_model\":\n initializeModelChunk(value);\n break;\n case \"resolved_module\":\n initializeModuleChunk(value);\n }\n switch (value.status) {\n case \"fulfilled\":\n value = value.value;\n break;\n case \"blocked\":\n case \"pending\":\n return waitForReference(\n value,\n parentObject,\n key,\n response,\n map,\n reference.slice(i - 1)\n );\n case \"halted\":\n return (\n initializingHandler\n ? ((response = initializingHandler), response.deps++)\n : (initializingHandler = {\n parent: null,\n chunk: null,\n value: null,\n deps: 1,\n errored: !1\n }),\n null\n );\n default:\n return (\n initializingHandler\n ? ((initializingHandler.errored = !0),\n (initializingHandler.value = value.reason))\n : (initializingHandler = {\n parent: null,\n chunk: null,\n value: value.reason,\n deps: 0,\n errored: !0\n }),\n null\n );\n }\n }\n value = value[reference[i]];\n }\n response = map(response, value, parentObject, key);\n id._debugInfo &&\n (\"object\" !== typeof response ||\n null === response ||\n (!isArrayImpl(response) &&\n \"function\" !== typeof response[ASYNC_ITERATOR] &&\n response.$$typeof !== REACT_ELEMENT_TYPE) ||\n response._debugInfo ||\n Object.defineProperty(response, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: id._debugInfo\n }));\n return response;\n case \"pending\":\n case \"blocked\":\n return waitForReference(\n id,\n parentObject,\n key,\n response,\n map,\n reference\n );\n case \"halted\":\n return (\n initializingHandler\n ? ((response = initializingHandler), response.deps++)\n : (initializingHandler = {\n parent: null,\n chunk: null,\n value: null,\n deps: 1,\n errored: !1\n }),\n null\n );\n default:\n return (\n initializingHandler\n ? ((initializingHandler.errored = !0),\n (initializingHandler.value = id.reason))\n : (initializingHandler = {\n parent: null,\n chunk: null,\n value: id.reason,\n deps: 0,\n errored: !0\n }),\n null\n );\n }\n }\n function createMap(response, model) {\n return new Map(model);\n }\n function createSet(response, model) {\n return new Set(model);\n }\n function createBlob(response, model) {\n return new Blob(model.slice(1), { type: model[0] });\n }\n function createFormData(response, model) {\n response = new FormData();\n for (var i = 0; i < model.length; i++)\n response.append(model[i][0], model[i][1]);\n return response;\n }\n function applyConstructor(response, model, parentObject) {\n Object.setPrototypeOf(parentObject, model.prototype);\n }\n function defineLazyGetter(response, chunk, parentObject, key) {\n Object.defineProperty(parentObject, key, {\n get: function () {\n \"resolved_model\" === chunk.status && initializeModelChunk(chunk);\n switch (chunk.status) {\n case \"fulfilled\":\n return chunk.value;\n case \"rejected\":\n throw chunk.reason;\n }\n return \"This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects.\";\n },\n enumerable: !0,\n configurable: !1\n });\n return null;\n }\n function extractIterator(response, model) {\n return model[Symbol.iterator]();\n }\n function createModel(response, model) {\n return model;\n }\n function parseModelString(response, parentObject, key, value) {\n if (\"$\" === value[0]) {\n if (\"$\" === value)\n return (\n null !== initializingHandler &&\n \"0\" === key &&\n (initializingHandler = {\n parent: initializingHandler,\n chunk: null,\n value: null,\n deps: 0,\n errored: !1\n }),\n REACT_ELEMENT_TYPE\n );\n switch (value[1]) {\n case \"$\":\n return value.slice(1);\n case \"L\":\n return (\n (parentObject = parseInt(value.slice(2), 16)),\n (response = getChunk(response, parentObject)),\n createLazyChunkWrapper(response)\n );\n case \"@\":\n return (\n (parentObject = parseInt(value.slice(2), 16)),\n getChunk(response, parentObject)\n );\n case \"S\":\n return Symbol.for(value.slice(2));\n case \"F\":\n var ref = value.slice(2);\n return getOutlinedModel(\n response,\n ref,\n parentObject,\n key,\n loadServerReference\n );\n case \"T\":\n parentObject = \"$\" + value.slice(2);\n response = response._tempRefs;\n if (null == response)\n throw Error(\n \"Missing a temporary reference set but the RSC response returned a temporary reference. Pass a temporaryReference option with the set that was used with the reply.\"\n );\n return response.get(parentObject);\n case \"Q\":\n return (\n (ref = value.slice(2)),\n getOutlinedModel(response, ref, parentObject, key, createMap)\n );\n case \"W\":\n return (\n (ref = value.slice(2)),\n getOutlinedModel(response, ref, parentObject, key, createSet)\n );\n case \"B\":\n return (\n (ref = value.slice(2)),\n getOutlinedModel(response, ref, parentObject, key, createBlob)\n );\n case \"K\":\n return (\n (ref = value.slice(2)),\n getOutlinedModel(response, ref, parentObject, key, createFormData)\n );\n case \"Z\":\n return (\n (ref = value.slice(2)),\n getOutlinedModel(\n response,\n ref,\n parentObject,\n key,\n resolveErrorDev\n )\n );\n case \"i\":\n return (\n (ref = value.slice(2)),\n getOutlinedModel(\n response,\n ref,\n parentObject,\n key,\n extractIterator\n )\n );\n case \"I\":\n return Infinity;\n case \"-\":\n return \"$-0\" === value ? -0 : -Infinity;\n case \"N\":\n return NaN;\n case \"u\":\n return;\n case \"D\":\n return new Date(Date.parse(value.slice(2)));\n case \"n\":\n return BigInt(value.slice(2));\n case \"P\":\n return (\n (ref = value.slice(2)),\n getOutlinedModel(\n response,\n ref,\n parentObject,\n key,\n applyConstructor\n )\n );\n case \"E\":\n response = value.slice(2);\n try {\n return (0, eval)(response);\n } catch (x) {\n if (response.startsWith(\"(async function\")) {\n if (\n ((parentObject = response.indexOf(\"(\", 15)),\n -1 !== parentObject)\n )\n return (\n (response = response.slice(15, parentObject).trim()),\n (0, eval)(\n \"({\" + JSON.stringify(response) + \":async function(){}})\"\n )[response]\n );\n } else if (response.startsWith(\"(function\")) {\n if (\n ((parentObject = response.indexOf(\"(\", 9)),\n -1 !== parentObject)\n )\n return (\n (response = response.slice(9, parentObject).trim()),\n (0, eval)(\n \"({\" + JSON.stringify(response) + \":function(){}})\"\n )[response]\n );\n } else if (\n response.startsWith(\"(class\") &&\n ((parentObject = response.indexOf(\"{\", 6)), -1 !== parentObject)\n )\n return (\n (response = response.slice(6, parentObject).trim()),\n (0, eval)(\"({\" + JSON.stringify(response) + \":class{}})\")[\n response\n ]\n );\n return function () {};\n }\n case \"Y\":\n if (2 < value.length && (ref = response._debugChannel)) {\n if (\"@\" === value[2])\n return (\n (parentObject = value.slice(3)),\n (key = parseInt(parentObject, 16)),\n response._chunks.has(key) || ref(\"P:\" + parentObject),\n getChunk(response, key)\n );\n value = value.slice(2);\n var _id2 = parseInt(value, 16);\n response._chunks.has(_id2) || ref(\"Q:\" + value);\n ref = getChunk(response, _id2);\n return \"fulfilled\" === ref.status\n ? ref.value\n : defineLazyGetter(response, ref, parentObject, key);\n }\n Object.defineProperty(parentObject, key, {\n get: function () {\n return \"This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects.\";\n },\n enumerable: !0,\n configurable: !1\n });\n return null;\n default:\n return (\n (ref = value.slice(1)),\n getOutlinedModel(response, ref, parentObject, key, createModel)\n );\n }\n }\n return value;\n }\n function missingCall() {\n throw Error(\n 'Trying to call a function from \"use server\" but the callServer option was not implemented in your router runtime.'\n );\n }\n function ResponseInstance(\n bundlerConfig,\n serverReferenceConfig,\n moduleLoading,\n callServer,\n encodeFormAction,\n nonce,\n temporaryReferences,\n findSourceMapURL,\n replayConsole,\n environmentName,\n debugChannel\n ) {\n var chunks = new Map();\n this._bundlerConfig = bundlerConfig;\n this._serverReferenceConfig = serverReferenceConfig;\n this._moduleLoading = moduleLoading;\n this._callServer = void 0 !== callServer ? callServer : missingCall;\n this._encodeFormAction = encodeFormAction;\n this._nonce = nonce;\n this._chunks = chunks;\n this._stringDecoder = new TextDecoder();\n this._fromJSON = null;\n this._closed = !1;\n this._closedReason = null;\n this._tempRefs = temporaryReferences;\n this._pendingChunks = 0;\n this._weakResponse = { weak: new WeakRef(this), response: this };\n this._debugRootOwner = bundlerConfig =\n void 0 === ReactSharedInteralsServer ||\n null === ReactSharedInteralsServer.A\n ? null\n : ReactSharedInteralsServer.A.getOwner();\n this._debugRootStack =\n null !== bundlerConfig ? Error(\"react-stack-top-frame\") : null;\n environmentName = void 0 === environmentName ? \"Server\" : environmentName;\n supportsCreateTask &&\n (this._debugRootTask = console.createTask(\n '\"use ' + environmentName.toLowerCase() + '\"'\n ));\n this._debugFindSourceMapURL = findSourceMapURL;\n this._debugChannel = debugChannel;\n this._replayConsole = replayConsole;\n this._rootEnvironmentName = environmentName;\n debugChannel &&\n (null === debugChannelRegistry\n ? (debugChannel(\"\"), (this._debugChannel = void 0))\n : debugChannelRegistry.register(this, debugChannel));\n this._fromJSON = createFromJSONCallback(this);\n }\n function createStreamState() {\n return {\n _rowState: 0,\n _rowID: 0,\n _rowTag: 0,\n _rowLength: 0,\n _buffer: []\n };\n }\n function resolveDebugHalt(response, id) {\n var chunks = response._chunks,\n chunk = chunks.get(id);\n chunk || chunks.set(id, (chunk = createPendingChunk(response)));\n if (\"pending\" === chunk.status || \"blocked\" === chunk.status)\n releasePendingChunk(response, chunk),\n (response = chunk),\n (response.status = \"halted\"),\n (response.value = null),\n (response.reason = null);\n }\n function resolveModel(response, id, model) {\n var chunks = response._chunks,\n chunk = chunks.get(id);\n chunk\n ? resolveModelChunk(response, chunk, model)\n : chunks.set(id, new ReactPromise(\"resolved_model\", model, response));\n }\n function resolveText(response, id, text) {\n var chunks = response._chunks,\n chunk = chunks.get(id);\n chunk && \"pending\" !== chunk.status\n ? chunk.reason.enqueueValue(text)\n : (chunk && releasePendingChunk(response, chunk),\n chunks.set(id, new ReactPromise(\"fulfilled\", text, null)));\n }\n function resolveBuffer(response, id, buffer) {\n var chunks = response._chunks,\n chunk = chunks.get(id);\n chunk && \"pending\" !== chunk.status\n ? chunk.reason.enqueueValue(buffer)\n : (chunk && releasePendingChunk(response, chunk),\n chunks.set(id, new ReactPromise(\"fulfilled\", buffer, null)));\n }\n function resolveModule(response, id, model) {\n var chunks = response._chunks,\n chunk = chunks.get(id);\n model = JSON.parse(model, response._fromJSON);\n var clientReference = resolveClientReference(\n response._bundlerConfig,\n model\n );\n if ((model = preloadModule(clientReference))) {\n if (chunk) {\n releasePendingChunk(response, chunk);\n var blockedChunk = chunk;\n blockedChunk.status = \"blocked\";\n } else\n (blockedChunk = new ReactPromise(\"blocked\", null, null)),\n chunks.set(id, blockedChunk);\n model.then(\n function () {\n return resolveModuleChunk(response, blockedChunk, clientReference);\n },\n function (error) {\n return triggerErrorOnChunk(response, blockedChunk, error);\n }\n );\n } else\n chunk\n ? resolveModuleChunk(response, chunk, clientReference)\n : chunks.set(\n id,\n new ReactPromise(\"resolved_module\", clientReference, null)\n );\n }\n function resolveStream(response, id, stream, controller) {\n var chunks = response._chunks,\n chunk = chunks.get(id);\n chunk\n ? \"pending\" === chunk.status &&\n (releasePendingChunk(response, chunk),\n (response = chunk.value),\n (chunk.status = \"fulfilled\"),\n (chunk.value = stream),\n (chunk.reason = controller),\n null !== response && wakeChunk(response, chunk.value))\n : chunks.set(id, new ReactPromise(\"fulfilled\", stream, controller));\n }\n function startReadableStream(response, id, type) {\n var controller = null;\n type = new ReadableStream({\n type: type,\n start: function (c) {\n controller = c;\n }\n });\n var previousBlockedChunk = null;\n resolveStream(response, id, type, {\n enqueueValue: function (value) {\n null === previousBlockedChunk\n ? controller.enqueue(value)\n : previousBlockedChunk.then(function () {\n controller.enqueue(value);\n });\n },\n enqueueModel: function (json) {\n if (null === previousBlockedChunk) {\n var chunk = new ReactPromise(\"resolved_model\", json, response);\n initializeModelChunk(chunk);\n \"fulfilled\" === chunk.status\n ? controller.enqueue(chunk.value)\n : (chunk.then(\n function (v) {\n return controller.enqueue(v);\n },\n function (e) {\n return controller.error(e);\n }\n ),\n (previousBlockedChunk = chunk));\n } else {\n chunk = previousBlockedChunk;\n var _chunk3 = createPendingChunk(response);\n _chunk3.then(\n function (v) {\n return controller.enqueue(v);\n },\n function (e) {\n return controller.error(e);\n }\n );\n previousBlockedChunk = _chunk3;\n chunk.then(function () {\n previousBlockedChunk === _chunk3 && (previousBlockedChunk = null);\n resolveModelChunk(response, _chunk3, json);\n });\n }\n },\n close: function () {\n if (null === previousBlockedChunk) controller.close();\n else {\n var blockedChunk = previousBlockedChunk;\n previousBlockedChunk = null;\n blockedChunk.then(function () {\n return controller.close();\n });\n }\n },\n error: function (error) {\n if (null === previousBlockedChunk) controller.error(error);\n else {\n var blockedChunk = previousBlockedChunk;\n previousBlockedChunk = null;\n blockedChunk.then(function () {\n return controller.error(error);\n });\n }\n }\n });\n }\n function asyncIterator() {\n return this;\n }\n function createIterator(next) {\n next = { next: next };\n next[ASYNC_ITERATOR] = asyncIterator;\n return next;\n }\n function startAsyncIterable(response, id, iterator) {\n var buffer = [],\n closed = !1,\n nextWriteIndex = 0,\n iterable = {};\n iterable[ASYNC_ITERATOR] = function () {\n var nextReadIndex = 0;\n return createIterator(function (arg) {\n if (void 0 !== arg)\n throw Error(\n \"Values cannot be passed to next() of AsyncIterables passed to Client Components.\"\n );\n if (nextReadIndex === buffer.length) {\n if (closed)\n return new ReactPromise(\n \"fulfilled\",\n { done: !0, value: void 0 },\n null\n );\n buffer[nextReadIndex] = createPendingChunk(response);\n }\n return buffer[nextReadIndex++];\n });\n };\n resolveStream(\n response,\n id,\n iterator ? iterable[ASYNC_ITERATOR]() : iterable,\n {\n enqueueValue: function (value) {\n if (nextWriteIndex === buffer.length)\n buffer[nextWriteIndex] = new ReactPromise(\n \"fulfilled\",\n { done: !1, value: value },\n null\n );\n else {\n var chunk = buffer[nextWriteIndex],\n resolveListeners = chunk.value,\n rejectListeners = chunk.reason;\n chunk.status = \"fulfilled\";\n chunk.value = { done: !1, value: value };\n null !== resolveListeners &&\n wakeChunkIfInitialized(\n chunk,\n resolveListeners,\n rejectListeners\n );\n }\n nextWriteIndex++;\n },\n enqueueModel: function (value) {\n nextWriteIndex === buffer.length\n ? (buffer[nextWriteIndex] = createResolvedIteratorResultChunk(\n response,\n value,\n !1\n ))\n : resolveIteratorResultChunk(\n response,\n buffer[nextWriteIndex],\n value,\n !1\n );\n nextWriteIndex++;\n },\n close: function (value) {\n closed = !0;\n nextWriteIndex === buffer.length\n ? (buffer[nextWriteIndex] = createResolvedIteratorResultChunk(\n response,\n value,\n !0\n ))\n : resolveIteratorResultChunk(\n response,\n buffer[nextWriteIndex],\n value,\n !0\n );\n for (nextWriteIndex++; nextWriteIndex < buffer.length; )\n resolveIteratorResultChunk(\n response,\n buffer[nextWriteIndex++],\n '\"$undefined\"',\n !0\n );\n },\n error: function (error) {\n closed = !0;\n for (\n nextWriteIndex === buffer.length &&\n (buffer[nextWriteIndex] = createPendingChunk(response));\n nextWriteIndex < buffer.length;\n\n )\n triggerErrorOnChunk(response, buffer[nextWriteIndex++], error);\n }\n }\n );\n }\n function stopStream(response, id, row) {\n (response = response._chunks.get(id)) &&\n \"fulfilled\" === response.status &&\n response.reason.close(\"\" === row ? '\"$undefined\"' : row);\n }\n function resolveErrorDev(response, errorInfo) {\n var name = errorInfo.name,\n env = errorInfo.env;\n errorInfo = buildFakeCallStack(\n response,\n errorInfo.stack,\n env,\n !1,\n Error.bind(\n null,\n errorInfo.message ||\n \"An error occurred in the Server Components render but no message was provided\"\n )\n );\n response = getRootTask(response, env);\n response = null != response ? response.run(errorInfo) : errorInfo();\n response.name = name;\n response.environmentName = env;\n return response;\n }\n function resolveHint(response, code, model) {\n response = JSON.parse(model, response._fromJSON);\n model = ReactDOMSharedInternals.d;\n switch (code) {\n case \"D\":\n model.D(response);\n break;\n case \"C\":\n \"string\" === typeof response\n ? model.C(response)\n : model.C(response[0], response[1]);\n break;\n case \"L\":\n code = response[0];\n var as = response[1];\n 3 === response.length\n ? model.L(code, as, response[2])\n : model.L(code, as);\n break;\n case \"m\":\n \"string\" === typeof response\n ? model.m(response)\n : model.m(response[0], response[1]);\n break;\n case \"X\":\n \"string\" === typeof response\n ? model.X(response)\n : model.X(response[0], response[1]);\n break;\n case \"S\":\n \"string\" === typeof response\n ? model.S(response)\n : model.S(\n response[0],\n 0 === response[1] ? void 0 : response[1],\n 3 === response.length ? response[2] : void 0\n );\n break;\n case \"M\":\n \"string\" === typeof response\n ? model.M(response)\n : model.M(response[0], response[1]);\n }\n }\n function createFakeFunction(\n name,\n filename,\n sourceMap,\n line,\n col,\n enclosingLine,\n enclosingCol,\n environmentName\n ) {\n name || (name = \"<anonymous>\");\n var encodedName = JSON.stringify(name);\n 1 > enclosingLine ? (enclosingLine = 0) : enclosingLine--;\n 1 > enclosingCol ? (enclosingCol = 0) : enclosingCol--;\n 1 > line ? (line = 0) : line--;\n 1 > col ? (col = 0) : col--;\n if (\n line < enclosingLine ||\n (line === enclosingLine && col < enclosingCol)\n )\n enclosingCol = enclosingLine = 0;\n 1 > line\n ? ((line = encodedName.length + 3),\n (enclosingCol -= line),\n 0 > enclosingCol && (enclosingCol = 0),\n (col = col - enclosingCol - line - 3),\n 0 > col && (col = 0),\n (encodedName =\n \"({\" +\n encodedName +\n \":\" +\n \" \".repeat(enclosingCol) +\n \"_=>\" +\n \" \".repeat(col) +\n \"_()})\"))\n : 1 > enclosingLine\n ? ((enclosingCol -= encodedName.length + 3),\n 0 > enclosingCol && (enclosingCol = 0),\n (encodedName =\n \"({\" +\n encodedName +\n \":\" +\n \" \".repeat(enclosingCol) +\n \"_=>\" +\n \"\\n\".repeat(line - enclosingLine) +\n \" \".repeat(col) +\n \"_()})\"))\n : enclosingLine === line\n ? ((col = col - enclosingCol - 3),\n 0 > col && (col = 0),\n (encodedName =\n \"\\n\".repeat(enclosingLine - 1) +\n \"({\" +\n encodedName +\n \":\\n\" +\n \" \".repeat(enclosingCol) +\n \"_=>\" +\n \" \".repeat(col) +\n \"_()})\"))\n : (encodedName =\n \"\\n\".repeat(enclosingLine - 1) +\n \"({\" +\n encodedName +\n \":\\n\" +\n \" \".repeat(enclosingCol) +\n \"_=>\" +\n \"\\n\".repeat(line - enclosingLine) +\n \" \".repeat(col) +\n \"_()})\");\n encodedName =\n 1 > enclosingLine\n ? encodedName +\n \"\\n/* This module was rendered by a Server Component. Turn on Source Maps to see the server source. */\"\n : \"/* This module was rendered by a Server Component. Turn on Source Maps to see the server source. */\" +\n encodedName;\n filename.startsWith(\"/\") && (filename = \"file://\" + filename);\n sourceMap\n ? ((encodedName +=\n \"\\n//# sourceURL=rsc://React/\" +\n encodeURIComponent(environmentName) +\n \"/\" +\n encodeURI(filename) +\n \"?\" +\n fakeFunctionIdx++),\n (encodedName += \"\\n//# sourceMappingURL=\" + sourceMap))\n : (encodedName = filename\n ? encodedName + (\"\\n//# sourceURL=\" + encodeURI(filename))\n : encodedName + \"\\n//# sourceURL=<anonymous>\");\n try {\n var fn = (0, eval)(encodedName)[name];\n } catch (x) {\n fn = function (_) {\n return _();\n };\n }\n return fn;\n }\n function buildFakeCallStack(\n response,\n stack,\n environmentName,\n useEnclosingLine,\n innerCall\n ) {\n for (var i = 0; i < stack.length; i++) {\n var frame = stack[i],\n frameKey =\n frame.join(\"-\") +\n \"-\" +\n environmentName +\n (useEnclosingLine ? \"-e\" : \"-n\"),\n fn = fakeFunctionCache.get(frameKey);\n if (void 0 === fn) {\n fn = frame[0];\n var filename = frame[1],\n line = frame[2],\n col = frame[3],\n enclosingLine = frame[4];\n frame = frame[5];\n var findSourceMapURL = response._debugFindSourceMapURL;\n findSourceMapURL = findSourceMapURL\n ? findSourceMapURL(filename, environmentName)\n : null;\n fn = createFakeFunction(\n fn,\n filename,\n findSourceMapURL,\n line,\n col,\n useEnclosingLine ? line : enclosingLine,\n useEnclosingLine ? col : frame,\n environmentName\n );\n fakeFunctionCache.set(frameKey, fn);\n }\n innerCall = fn.bind(null, innerCall);\n }\n return innerCall;\n }\n function getRootTask(response, childEnvironmentName) {\n var rootTask = response._debugRootTask;\n return rootTask\n ? response._rootEnvironmentName !== childEnvironmentName\n ? ((response = console.createTask.bind(\n console,\n '\"use ' + childEnvironmentName.toLowerCase() + '\"'\n )),\n rootTask.run(response))\n : rootTask\n : null;\n }\n function initializeFakeTask(response, debugInfo) {\n if (!supportsCreateTask || null == debugInfo.stack) return null;\n var cachedEntry = debugInfo.debugTask;\n if (void 0 !== cachedEntry) return cachedEntry;\n var useEnclosingLine = void 0 === debugInfo.key,\n stack = debugInfo.stack,\n env =\n null == debugInfo.env ? response._rootEnvironmentName : debugInfo.env;\n cachedEntry =\n null == debugInfo.owner || null == debugInfo.owner.env\n ? response._rootEnvironmentName\n : debugInfo.owner.env;\n var ownerTask =\n null == debugInfo.owner\n ? null\n : initializeFakeTask(response, debugInfo.owner);\n env =\n env !== cachedEntry\n ? '\"use ' + env.toLowerCase() + '\"'\n : void 0 !== debugInfo.key\n ? \"<\" + (debugInfo.name || \"...\") + \">\"\n : void 0 !== debugInfo.name\n ? debugInfo.name || \"unknown\"\n : \"await \" + (debugInfo.awaited.name || \"unknown\");\n env = console.createTask.bind(console, env);\n useEnclosingLine = buildFakeCallStack(\n response,\n stack,\n cachedEntry,\n useEnclosingLine,\n env\n );\n null === ownerTask\n ? ((response = getRootTask(response, cachedEntry)),\n (response =\n null != response\n ? response.run(useEnclosingLine)\n : useEnclosingLine()))\n : (response = ownerTask.run(useEnclosingLine));\n return (debugInfo.debugTask = response);\n }\n function fakeJSXCallSite() {\n return Error(\"react-stack-top-frame\");\n }\n function initializeFakeStack(response, debugInfo) {\n if (void 0 === debugInfo.debugStack) {\n null != debugInfo.stack &&\n (debugInfo.debugStack = createFakeJSXCallStackInDEV(\n response,\n debugInfo.stack,\n null == debugInfo.env ? \"\" : debugInfo.env\n ));\n var owner = debugInfo.owner;\n null != owner &&\n (initializeFakeStack(response, owner),\n void 0 === owner.debugLocation &&\n null != debugInfo.debugStack &&\n (owner.debugLocation = debugInfo.debugStack));\n }\n }\n function resolveDebugInfo(response, id, debugInfo) {\n void 0 !== debugInfo.stack && initializeFakeTask(response, debugInfo);\n null == debugInfo.owner && null != response._debugRootOwner\n ? ((debugInfo.owner = response._debugRootOwner),\n (debugInfo.stack = null),\n (debugInfo.debugStack = response._debugRootStack),\n (debugInfo.debugTask = response._debugRootTask))\n : void 0 !== debugInfo.stack &&\n initializeFakeStack(response, debugInfo);\n response = getChunk(response, id);\n (response._debugInfo || (response._debugInfo = [])).push(debugInfo);\n }\n function getCurrentStackInDEV() {\n var owner = currentOwnerInDEV;\n if (null === owner) return \"\";\n try {\n var info = \"\";\n if (owner.owner || \"string\" !== typeof owner.name) {\n for (; owner; ) {\n var ownerStack = owner.debugStack;\n if (null != ownerStack) {\n if ((owner = owner.owner)) {\n var JSCompiler_temp_const = info;\n var error = ownerStack,\n prevPrepareStackTrace = Error.prepareStackTrace;\n Error.prepareStackTrace = void 0;\n var stack = error.stack;\n Error.prepareStackTrace = prevPrepareStackTrace;\n stack.startsWith(\"Error: react-stack-top-frame\\n\") &&\n (stack = stack.slice(29));\n var idx = stack.indexOf(\"\\n\");\n -1 !== idx && (stack = stack.slice(idx + 1));\n idx = stack.indexOf(\"react_stack_bottom_frame\");\n -1 !== idx && (idx = stack.lastIndexOf(\"\\n\", idx));\n var JSCompiler_inline_result =\n -1 !== idx ? (stack = stack.slice(0, idx)) : \"\";\n info =\n JSCompiler_temp_const + (\"\\n\" + JSCompiler_inline_result);\n }\n } else break;\n }\n var JSCompiler_inline_result$jscomp$0 = info;\n } else {\n JSCompiler_temp_const = owner.name;\n if (void 0 === prefix)\n try {\n throw Error();\n } catch (x) {\n (prefix =\n ((error = x.stack.trim().match(/\\n( *(at )?)/)) && error[1]) ||\n \"\"),\n (suffix =\n -1 < x.stack.indexOf(\"\\n at\")\n ? \" (<anonymous>)\"\n : -1 < x.stack.indexOf(\"@\")\n ? \"@unknown:0:0\"\n : \"\");\n }\n JSCompiler_inline_result$jscomp$0 =\n \"\\n\" + prefix + JSCompiler_temp_const + suffix;\n }\n } catch (x) {\n JSCompiler_inline_result$jscomp$0 =\n \"\\nError generating stack: \" + x.message + \"\\n\" + x.stack;\n }\n return JSCompiler_inline_result$jscomp$0;\n }\n function resolveConsoleEntry(response, value) {\n if (response._replayConsole) {\n var payload = JSON.parse(value, response._fromJSON);\n value = payload[0];\n var stackTrace = payload[1],\n owner = payload[2],\n env = payload[3];\n payload = payload.slice(4);\n replayConsoleWithCallStackInDEV(\n response,\n value,\n stackTrace,\n owner,\n env,\n payload\n );\n }\n }\n function mergeBuffer(buffer, lastChunk) {\n for (\n var l = buffer.length, byteLength = lastChunk.length, i = 0;\n i < l;\n i++\n )\n byteLength += buffer[i].byteLength;\n byteLength = new Uint8Array(byteLength);\n for (var _i3 = (i = 0); _i3 < l; _i3++) {\n var chunk = buffer[_i3];\n byteLength.set(chunk, i);\n i += chunk.byteLength;\n }\n byteLength.set(lastChunk, i);\n return byteLength;\n }\n function resolveTypedArray(\n response,\n id,\n buffer,\n lastChunk,\n constructor,\n bytesPerElement\n ) {\n buffer =\n 0 === buffer.length && 0 === lastChunk.byteOffset % bytesPerElement\n ? lastChunk\n : mergeBuffer(buffer, lastChunk);\n constructor = new constructor(\n buffer.buffer,\n buffer.byteOffset,\n buffer.byteLength / bytesPerElement\n );\n resolveBuffer(response, id, constructor);\n }\n function flushInitialRenderPerformance() {}\n function processFullBinaryRow(response, id, tag, buffer, chunk) {\n switch (tag) {\n case 65:\n resolveBuffer(response, id, mergeBuffer(buffer, chunk).buffer);\n return;\n case 79:\n resolveTypedArray(response, id, buffer, chunk, Int8Array, 1);\n return;\n case 111:\n resolveBuffer(\n response,\n id,\n 0 === buffer.length ? chunk : mergeBuffer(buffer, chunk)\n );\n return;\n case 85:\n resolveTypedArray(response, id, buffer, chunk, Uint8ClampedArray, 1);\n return;\n case 83:\n resolveTypedArray(response, id, buffer, chunk, Int16Array, 2);\n return;\n case 115:\n resolveTypedArray(response, id, buffer, chunk, Uint16Array, 2);\n return;\n case 76:\n resolveTypedArray(response, id, buffer, chunk, Int32Array, 4);\n return;\n case 108:\n resolveTypedArray(response, id, buffer, chunk, Uint32Array, 4);\n return;\n case 71:\n resolveTypedArray(response, id, buffer, chunk, Float32Array, 4);\n return;\n case 103:\n resolveTypedArray(response, id, buffer, chunk, Float64Array, 8);\n return;\n case 77:\n resolveTypedArray(response, id, buffer, chunk, BigInt64Array, 8);\n return;\n case 109:\n resolveTypedArray(response, id, buffer, chunk, BigUint64Array, 8);\n return;\n case 86:\n resolveTypedArray(response, id, buffer, chunk, DataView, 1);\n return;\n }\n for (\n var stringDecoder = response._stringDecoder, row = \"\", i = 0;\n i < buffer.length;\n i++\n )\n row += stringDecoder.decode(buffer[i], decoderOptions);\n row += stringDecoder.decode(chunk);\n processFullStringRow(response, id, tag, row);\n }\n function processFullStringRow(response, id, tag, row) {\n switch (tag) {\n case 73:\n resolveModule(response, id, row);\n break;\n case 72:\n resolveHint(response, row[0], row.slice(1));\n break;\n case 69:\n row = JSON.parse(row);\n tag = resolveErrorDev(response, row);\n tag.digest = row.digest;\n row = response._chunks;\n var chunk = row.get(id);\n chunk\n ? triggerErrorOnChunk(response, chunk, tag)\n : row.set(id, new ReactPromise(\"rejected\", null, tag));\n break;\n case 84:\n resolveText(response, id, row);\n break;\n case 78:\n case 68:\n tag = new ReactPromise(\"resolved_model\", row, response);\n initializeModelChunk(tag);\n \"fulfilled\" === tag.status\n ? resolveDebugInfo(response, id, tag.value)\n : tag.then(\n function (v) {\n return resolveDebugInfo(response, id, v);\n },\n function () {}\n );\n break;\n case 74:\n case 87:\n resolveConsoleEntry(response, row);\n break;\n case 82:\n startReadableStream(response, id, void 0);\n break;\n case 114:\n startReadableStream(response, id, \"bytes\");\n break;\n case 88:\n startAsyncIterable(response, id, !1);\n break;\n case 120:\n startAsyncIterable(response, id, !0);\n break;\n case 67:\n stopStream(response, id, row);\n break;\n default:\n \"\" === row\n ? resolveDebugHalt(response, id)\n : resolveModel(response, id, row);\n }\n }\n function processBinaryChunk(weakResponse, streamState, chunk) {\n if (void 0 !== weakResponse.weak.deref()) {\n var response = unwrapWeakResponse(weakResponse),\n i = 0,\n rowState = streamState._rowState;\n weakResponse = streamState._rowID;\n for (\n var rowTag = streamState._rowTag,\n rowLength = streamState._rowLength,\n buffer = streamState._buffer,\n chunkLength = chunk.length;\n i < chunkLength;\n\n ) {\n var lastIdx = -1;\n switch (rowState) {\n case 0:\n lastIdx = chunk[i++];\n 58 === lastIdx\n ? (rowState = 1)\n : (weakResponse =\n (weakResponse << 4) |\n (96 < lastIdx ? lastIdx - 87 : lastIdx - 48));\n continue;\n case 1:\n rowState = chunk[i];\n 84 === rowState ||\n 65 === rowState ||\n 79 === rowState ||\n 111 === rowState ||\n 85 === rowState ||\n 83 === rowState ||\n 115 === rowState ||\n 76 === rowState ||\n 108 === rowState ||\n 71 === rowState ||\n 103 === rowState ||\n 77 === rowState ||\n 109 === rowState ||\n 86 === rowState\n ? ((rowTag = rowState), (rowState = 2), i++)\n : (64 < rowState && 91 > rowState) ||\n 35 === rowState ||\n 114 === rowState ||\n 120 === rowState\n ? ((rowTag = rowState), (rowState = 3), i++)\n : ((rowTag = 0), (rowState = 3));\n continue;\n case 2:\n lastIdx = chunk[i++];\n 44 === lastIdx\n ? (rowState = 4)\n : (rowLength =\n (rowLength << 4) |\n (96 < lastIdx ? lastIdx - 87 : lastIdx - 48));\n continue;\n case 3:\n lastIdx = chunk.indexOf(10, i);\n break;\n case 4:\n (lastIdx = i + rowLength),\n lastIdx > chunk.length && (lastIdx = -1);\n }\n var offset = chunk.byteOffset + i;\n if (-1 < lastIdx)\n (rowLength = new Uint8Array(chunk.buffer, offset, lastIdx - i)),\n processFullBinaryRow(\n response,\n weakResponse,\n rowTag,\n buffer,\n rowLength\n ),\n (i = lastIdx),\n 3 === rowState && i++,\n (rowLength = weakResponse = rowTag = rowState = 0),\n (buffer.length = 0);\n else {\n chunk = new Uint8Array(chunk.buffer, offset, chunk.byteLength - i);\n buffer.push(chunk);\n rowLength -= chunk.byteLength;\n break;\n }\n }\n streamState._rowState = rowState;\n streamState._rowID = weakResponse;\n streamState._rowTag = rowTag;\n streamState._rowLength = rowLength;\n }\n }\n function createFromJSONCallback(response) {\n return function (key, value) {\n if (\"string\" === typeof value)\n return parseModelString(response, this, key, value);\n if (\"object\" === typeof value && null !== value) {\n if (value[0] === REACT_ELEMENT_TYPE)\n b: {\n var owner = value[4];\n key = value[5];\n var validated = value[6];\n value = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: value[1],\n key: value[2],\n props: value[3],\n _owner: void 0 === owner ? null : owner\n };\n Object.defineProperty(value, \"ref\", {\n enumerable: !1,\n get: nullRefGetter\n });\n value._store = {};\n Object.defineProperty(value._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: validated\n });\n Object.defineProperty(value, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(value, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: void 0 === key ? null : key\n });\n Object.defineProperty(value, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n if (null !== initializingHandler) {\n validated = initializingHandler;\n initializingHandler = validated.parent;\n if (validated.errored) {\n key = new ReactPromise(\"rejected\", null, validated.value);\n initializeElement(response, value);\n validated = {\n name: getComponentNameFromType(value.type) || \"\",\n owner: value._owner\n };\n validated.debugStack = value._debugStack;\n supportsCreateTask &&\n (validated.debugTask = value._debugTask);\n key._debugInfo = [validated];\n value = createLazyChunkWrapper(key);\n break b;\n }\n if (0 < validated.deps) {\n key = new ReactPromise(\"blocked\", null, null);\n validated.value = value;\n validated.chunk = key;\n value = initializeElement.bind(null, response, value);\n key.then(value, value);\n value = createLazyChunkWrapper(key);\n break b;\n }\n }\n initializeElement(response, value);\n }\n return value;\n }\n return value;\n };\n }\n function close(weakResponse) {\n reportGlobalError(weakResponse, Error(\"Connection closed.\"));\n }\n function createDebugCallbackFromWritableStream(debugWritable) {\n var textEncoder = new TextEncoder(),\n writer = debugWritable.getWriter();\n return function (message) {\n \"\" === message\n ? writer.close()\n : writer\n .write(textEncoder.encode(message + \"\\n\"))\n .catch(console.error);\n };\n }\n function createResponseFromOptions(options) {\n var debugChannel =\n options &&\n void 0 !== options.debugChannel &&\n void 0 !== options.debugChannel.writable\n ? createDebugCallbackFromWritableStream(options.debugChannel.writable)\n : void 0;\n return new ResponseInstance(\n null,\n null,\n null,\n options && options.callServer ? options.callServer : void 0,\n void 0,\n void 0,\n options && options.temporaryReferences\n ? options.temporaryReferences\n : void 0,\n options && options.findSourceMapURL ? options.findSourceMapURL : void 0,\n options ? !1 !== options.replayConsoleLogs : !0,\n options && options.environmentName ? options.environmentName : void 0,\n debugChannel\n )._weakResponse;\n }\n function startReadingFromUniversalStream(response$jscomp$0, stream) {\n function progress(_ref) {\n var value = _ref.value;\n if (_ref.done) close(response$jscomp$0);\n else {\n if (value instanceof ArrayBuffer)\n processBinaryChunk(\n response$jscomp$0,\n streamState,\n new Uint8Array(value)\n );\n else if (\"string\" === typeof value) {\n if (\n ((_ref = streamState), void 0 !== response$jscomp$0.weak.deref())\n ) {\n for (\n var response = unwrapWeakResponse(response$jscomp$0),\n i = 0,\n rowState = _ref._rowState,\n rowID = _ref._rowID,\n rowTag = _ref._rowTag,\n rowLength = _ref._rowLength,\n buffer = _ref._buffer,\n chunkLength = value.length;\n i < chunkLength;\n\n ) {\n var lastIdx = -1;\n switch (rowState) {\n case 0:\n lastIdx = value.charCodeAt(i++);\n 58 === lastIdx\n ? (rowState = 1)\n : (rowID =\n (rowID << 4) |\n (96 < lastIdx ? lastIdx - 87 : lastIdx - 48));\n continue;\n case 1:\n rowState = value.charCodeAt(i);\n 84 === rowState ||\n 65 === rowState ||\n 79 === rowState ||\n 111 === rowState ||\n 85 === rowState ||\n 83 === rowState ||\n 115 === rowState ||\n 76 === rowState ||\n 108 === rowState ||\n 71 === rowState ||\n 103 === rowState ||\n 77 === rowState ||\n 109 === rowState ||\n 86 === rowState\n ? ((rowTag = rowState), (rowState = 2), i++)\n : (64 < rowState && 91 > rowState) ||\n 114 === rowState ||\n 120 === rowState\n ? ((rowTag = rowState), (rowState = 3), i++)\n : ((rowTag = 0), (rowState = 3));\n continue;\n case 2:\n lastIdx = value.charCodeAt(i++);\n 44 === lastIdx\n ? (rowState = 4)\n : (rowLength =\n (rowLength << 4) |\n (96 < lastIdx ? lastIdx - 87 : lastIdx - 48));\n continue;\n case 3:\n lastIdx = value.indexOf(\"\\n\", i);\n break;\n case 4:\n if (84 !== rowTag)\n throw Error(\n \"Binary RSC chunks cannot be encoded as strings. This is a bug in the wiring of the React streams.\"\n );\n if (\n rowLength < value.length ||\n value.length > 3 * rowLength\n )\n throw Error(\n \"String chunks need to be passed in their original shape. Not split into smaller string chunks. This is a bug in the wiring of the React streams.\"\n );\n lastIdx = value.length;\n }\n if (-1 < lastIdx) {\n if (0 < buffer.length)\n throw Error(\n \"String chunks need to be passed in their original shape. Not split into smaller string chunks. This is a bug in the wiring of the React streams.\"\n );\n i = value.slice(i, lastIdx);\n processFullStringRow(response, rowID, rowTag, i);\n i = lastIdx;\n 3 === rowState && i++;\n rowLength = rowID = rowTag = rowState = 0;\n buffer.length = 0;\n } else if (value.length !== i)\n throw Error(\n \"String chunks need to be passed in their original shape. Not split into smaller string chunks. This is a bug in the wiring of the React streams.\"\n );\n }\n _ref._rowState = rowState;\n _ref._rowID = rowID;\n _ref._rowTag = rowTag;\n _ref._rowLength = rowLength;\n }\n } else processBinaryChunk(response$jscomp$0, streamState, value);\n return reader.read().then(progress).catch(error);\n }\n }\n function error(e) {\n reportGlobalError(response$jscomp$0, e);\n }\n var streamState = createStreamState(),\n reader = stream.getReader();\n reader.read().then(progress).catch(error);\n }\n function startReadingFromStream(response, stream, isSecondaryStream) {\n function progress(_ref2) {\n var value = _ref2.value;\n if (_ref2.done) isSecondaryStream || close(response);\n else\n return (\n processBinaryChunk(response, streamState, value),\n reader.read().then(progress).catch(error)\n );\n }\n function error(e) {\n reportGlobalError(response, e);\n }\n var streamState = createStreamState(),\n reader = stream.getReader();\n reader.read().then(progress).catch(error);\n }\n var React = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"),\n ReactDOM = __webpack_require__(/*! react-dom */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react-dom/index.js\"),\n decoderOptions = { stream: !0 },\n bind = Function.prototype.bind,\n chunkCache = new Map(),\n chunkMap = new Map(),\n webpackGetChunkFilename = __webpack_require__.u;\n __webpack_require__.u = function (chunkId) {\n var flightChunk = chunkMap.get(chunkId);\n return void 0 !== flightChunk\n ? flightChunk\n : webpackGetChunkFilename(chunkId);\n };\n var ReactDOMSharedInternals =\n ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n MAYBE_ITERATOR_SYMBOL = Symbol.iterator,\n ASYNC_ITERATOR = Symbol.asyncIterator,\n isArrayImpl = Array.isArray,\n getPrototypeOf = Object.getPrototypeOf,\n jsxPropsParents = new WeakMap(),\n jsxChildrenParents = new WeakMap(),\n CLIENT_REFERENCE_TAG = Symbol.for(\"react.client.reference\"),\n ObjectPrototype = Object.prototype,\n knownServerReferences = new WeakMap(),\n fakeServerFunctionIdx = 0,\n v8FrameRegExp =\n /^ {3} at (?:(.+) \\((.+):(\\d+):(\\d+)\\)|(?:async )?(.+):(\\d+):(\\d+))$/,\n jscSpiderMonkeyFrameRegExp = /(?:(.*)@)?(.*):(\\d+):(\\d+)/,\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n prefix,\n suffix;\n new (\"function\" === typeof WeakMap ? WeakMap : Map)();\n var ReactSharedInteralsServer =\n React.__SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE ||\n ReactSharedInteralsServer;\n ReactPromise.prototype = Object.create(Promise.prototype);\n ReactPromise.prototype.then = function (resolve, reject) {\n switch (this.status) {\n case \"resolved_model\":\n initializeModelChunk(this);\n break;\n case \"resolved_module\":\n initializeModuleChunk(this);\n }\n switch (this.status) {\n case \"fulfilled\":\n \"function\" === typeof resolve && resolve(this.value);\n break;\n case \"pending\":\n case \"blocked\":\n \"function\" === typeof resolve &&\n (null === this.value && (this.value = []),\n this.value.push(resolve));\n \"function\" === typeof reject &&\n (null === this.reason && (this.reason = []),\n this.reason.push(reject));\n break;\n case \"halted\":\n break;\n default:\n \"function\" === typeof reject && reject(this.reason);\n }\n };\n var debugChannelRegistry =\n \"function\" === typeof FinalizationRegistry\n ? new FinalizationRegistry(cleanupDebugChannel)\n : null,\n initializingHandler = null,\n supportsCreateTask = !!console.createTask,\n fakeFunctionCache = new Map(),\n fakeFunctionIdx = 0,\n createFakeJSXCallStack = {\n react_stack_bottom_frame: function (response, stack, environmentName) {\n return buildFakeCallStack(\n response,\n stack,\n environmentName,\n !1,\n fakeJSXCallSite\n )();\n }\n },\n createFakeJSXCallStackInDEV =\n createFakeJSXCallStack.react_stack_bottom_frame.bind(\n createFakeJSXCallStack\n ),\n currentOwnerInDEV = null,\n replayConsoleWithCallStack = {\n react_stack_bottom_frame: function (\n response,\n methodName,\n stackTrace,\n owner,\n env,\n args\n ) {\n var prevStack = ReactSharedInternals.getCurrentStack;\n ReactSharedInternals.getCurrentStack = getCurrentStackInDEV;\n currentOwnerInDEV = null === owner ? response._debugRootOwner : owner;\n try {\n a: {\n var offset = 0;\n switch (methodName) {\n case \"dir\":\n case \"dirxml\":\n case \"groupEnd\":\n case \"table\":\n var JSCompiler_inline_result = bind.apply(\n console[methodName],\n [console].concat(args)\n );\n break a;\n case \"assert\":\n offset = 1;\n }\n var newArgs = args.slice(0);\n \"string\" === typeof newArgs[offset]\n ? newArgs.splice(\n offset,\n 1,\n \"%c%s%c \" + newArgs[offset],\n \"background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px\",\n \" \" + env + \" \",\n \"\"\n )\n : newArgs.splice(\n offset,\n 0,\n \"%c%s%c \",\n \"background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px\",\n \" \" + env + \" \",\n \"\"\n );\n newArgs.unshift(console);\n JSCompiler_inline_result = bind.apply(\n console[methodName],\n newArgs\n );\n }\n var callStack = buildFakeCallStack(\n response,\n stackTrace,\n env,\n !1,\n JSCompiler_inline_result\n );\n if (null != owner) {\n var task = initializeFakeTask(response, owner);\n initializeFakeStack(response, owner);\n if (null !== task) {\n task.run(callStack);\n return;\n }\n }\n var rootTask = getRootTask(response, env);\n null != rootTask ? rootTask.run(callStack) : callStack();\n } finally {\n (currentOwnerInDEV = null),\n (ReactSharedInternals.getCurrentStack = prevStack);\n }\n }\n },\n replayConsoleWithCallStackInDEV =\n replayConsoleWithCallStack.react_stack_bottom_frame.bind(\n replayConsoleWithCallStack\n );\n (function (internals) {\n if (\"undefined\" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) return !1;\n var hook = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n if (hook.isDisabled || !hook.supportsFlight) return !0;\n try {\n hook.inject(internals);\n } catch (err) {\n console.error(\"React instrumentation encountered an error: %s.\", err);\n }\n return hook.checkDCE ? !0 : !1;\n })({\n bundleType: 1,\n version: \"19.2.0-canary-97cdd5d3-20250710\",\n rendererPackageName: \"react-server-dom-webpack\",\n currentDispatcherRef: ReactSharedInternals,\n reconcilerVersion: \"19.2.0-canary-97cdd5d3-20250710\",\n getCurrentComponentInfo: function () {\n return currentOwnerInDEV;\n }\n });\n exports.createFromFetch = function (promiseForResponse, options) {\n var response = createResponseFromOptions(options);\n promiseForResponse.then(\n function (r) {\n options && options.debugChannel && options.debugChannel.readable\n ? (startReadingFromUniversalStream(\n response,\n options.debugChannel.readable\n ),\n startReadingFromStream(response, r.body, !0))\n : startReadingFromStream(response, r.body, !1);\n },\n function (e) {\n reportGlobalError(response, e);\n }\n );\n return getRoot(response);\n };\n exports.createFromReadableStream = function (stream, options) {\n var response = createResponseFromOptions(options);\n options && options.debugChannel && options.debugChannel.readable\n ? (startReadingFromUniversalStream(\n response,\n options.debugChannel.readable\n ),\n startReadingFromStream(response, stream, !0))\n : startReadingFromStream(response, stream, !1);\n return getRoot(response);\n };\n exports.createServerReference = function (\n id,\n callServer,\n encodeFormAction,\n findSourceMapURL,\n functionName\n ) {\n function action() {\n var args = Array.prototype.slice.call(arguments);\n return callServer(id, args);\n }\n var location = parseStackLocation(Error(\"react-stack-top-frame\"));\n if (null !== location) {\n encodeFormAction = location[1];\n var line = location[2];\n location = location[3];\n findSourceMapURL =\n null == findSourceMapURL\n ? null\n : findSourceMapURL(encodeFormAction, \"Client\");\n action = createFakeServerFunction(\n functionName || \"\",\n encodeFormAction,\n findSourceMapURL,\n line,\n location,\n \"Client\",\n action\n );\n }\n registerBoundServerReference(action, id, null);\n return action;\n };\n exports.createTemporaryReferenceSet = function () {\n return new Map();\n };\n exports.encodeReply = function (value, options) {\n return new Promise(function (resolve, reject) {\n var abort = processReply(\n value,\n \"\",\n options && options.temporaryReferences\n ? options.temporaryReferences\n : void 0,\n resolve,\n reject\n );\n if (options && options.signal) {\n var signal = options.signal;\n if (signal.aborted) abort(signal.reason);\n else {\n var listener = function () {\n abort(signal.reason);\n signal.removeEventListener(\"abort\", listener);\n };\n signal.addEventListener(\"abort\", listener);\n }\n }\n });\n };\n exports.registerServerReference = function (reference, id) {\n registerBoundServerReference(reference, id, null);\n return reference;\n };\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrL2Nqcy9yZWFjdC1zZXJ2ZXItZG9tLXdlYnBhY2stY2xpZW50LmJyb3dzZXIuZGV2ZWxvcG1lbnQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhO0FBQ2IsS0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsbUJBQW1CO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLG1CQUFtQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxxQkFBc0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLG1CQUFtQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxJQUFJO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLDBCQUEwQjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLDZDQUE2QztBQUNuRSxzQkFBc0IsNENBQTRDO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLElBQUk7QUFDdEM7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLHlCQUF5Qiw2QkFBNkI7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLGlCQUFpQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RCxpQkFBaUI7QUFDMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Ysc0JBQXNCO0FBQ3RCO0FBQ0Esc0JBQXNCLGlCQUFpQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxjQUFjO0FBQzlELFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLHNEQUFzRDtBQUN4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLHNCQUFzQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixzQkFBc0I7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLDZCQUE2QjtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDZCQUE2QjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLDBCQUEwQjtBQUM1QztBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQiwwQkFBMEI7QUFDNUM7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQ0FBb0M7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLFNBQVM7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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bkM7QUFDQTtBQUNBO0FBQ0EsR0FBRyIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvRG9jdW1lbnRzL0Rldi9iaW9oYXphcmQtdmZ4LTEvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC1zZXJ2ZXItZG9tLXdlYnBhY2svY2pzL3JlYWN0LXNlcnZlci1kb20td2VicGFjay1jbGllbnQuYnJvd3Nlci5kZXZlbG9wbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC1zZXJ2ZXItZG9tLXdlYnBhY2stY2xpZW50LmJyb3dzZXIuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cblwidXNlIHN0cmljdFwiO1xuXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WICYmXG4gIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gcmVzb2x2ZUNsaWVudFJlZmVyZW5jZShidW5kbGVyQ29uZmlnLCBtZXRhZGF0YSkge1xuICAgICAgaWYgKGJ1bmRsZXJDb25maWcpIHtcbiAgICAgICAgdmFyIG1vZHVsZUV4cG9ydHMgPSBidW5kbGVyQ29uZmlnW21ldGFkYXRhWzBdXTtcbiAgICAgICAgaWYgKChidW5kbGVyQ29uZmlnID0gbW9kdWxlRXhwb3J0cyAmJiBtb2R1bGVFeHBvcnRzW21ldGFkYXRhWzJdXSkpXG4gICAgICAgICAgbW9kdWxlRXhwb3J0cyA9IGJ1bmRsZXJDb25maWcubmFtZTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgYnVuZGxlckNvbmZpZyA9IG1vZHVsZUV4cG9ydHMgJiYgbW9kdWxlRXhwb3J0c1tcIipcIl07XG4gICAgICAgICAgaWYgKCFidW5kbGVyQ29uZmlnKVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICdDb3VsZCBub3QgZmluZCB0aGUgbW9kdWxlIFwiJyArXG4gICAgICAgICAgICAgICAgbWV0YWRhdGFbMF0gK1xuICAgICAgICAgICAgICAgICdcIiBpbiB0aGUgUmVhY3QgU2VydmVyIENvbnN1bWVyIE1hbmlmZXN0LiBUaGlzIGlzIHByb2JhYmx5IGEgYnVnIGluIHRoZSBSZWFjdCBTZXJ2ZXIgQ29tcG9uZW50cyBidW5kbGVyLidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgbW9kdWxlRXhwb3J0cyA9IG1ldGFkYXRhWzJdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiA0ID09PSBtZXRhZGF0YS5sZW5ndGhcbiAgICAgICAgICA/IFtidW5kbGVyQ29uZmlnLmlkLCBidW5kbGVyQ29uZmlnLmNodW5rcywgbW9kdWxlRXhwb3J0cywgMV1cbiAgICAgICAgICA6IFtidW5kbGVyQ29uZmlnLmlkLCBidW5kbGVyQ29uZmlnLmNodW5rcywgbW9kdWxlRXhwb3J0c107XG4gICAgICB9XG4gICAgICByZXR1cm4gbWV0YWRhdGE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc29sdmVTZXJ2ZXJSZWZlcmVuY2UoYnVuZGxlckNvbmZpZywgaWQpIHtcbiAgICAgIHZhciBuYW1lID0gXCJcIixcbiAgICAgICAgcmVzb2x2ZWRNb2R1bGVEYXRhID0gYnVuZGxlckNvbmZpZ1tpZF07XG4gICAgICBpZiAocmVzb2x2ZWRNb2R1bGVEYXRhKSBuYW1lID0gcmVzb2x2ZWRNb2R1bGVEYXRhLm5hbWU7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGlkeCA9IGlkLmxhc3RJbmRleE9mKFwiI1wiKTtcbiAgICAgICAgLTEgIT09IGlkeCAmJlxuICAgICAgICAgICgobmFtZSA9IGlkLnNsaWNlKGlkeCArIDEpKSxcbiAgICAgICAgICAocmVzb2x2ZWRNb2R1bGVEYXRhID0gYnVuZGxlckNvbmZpZ1tpZC5zbGljZSgwLCBpZHgpXSkpO1xuICAgICAgICBpZiAoIXJlc29sdmVkTW9kdWxlRGF0YSlcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICdDb3VsZCBub3QgZmluZCB0aGUgbW9kdWxlIFwiJyArXG4gICAgICAgICAgICAgIGlkICtcbiAgICAgICAgICAgICAgJ1wiIGluIHRoZSBSZWFjdCBTZXJ2ZXIgTWFuaWZlc3QuIFRoaXMgaXMgcHJvYmFibHkgYSBidWcgaW4gdGhlIFJlYWN0IFNlcnZlciBDb21wb25lbnRzIGJ1bmRsZXIuJ1xuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzb2x2ZWRNb2R1bGVEYXRhLmFzeW5jXG4gICAgICAgID8gW3Jlc29sdmVkTW9kdWxlRGF0YS5pZCwgcmVzb2x2ZWRNb2R1bGVEYXRhLmNodW5rcywgbmFtZSwgMV1cbiAgICAgICAgOiBbcmVzb2x2ZWRNb2R1bGVEYXRhLmlkLCByZXNvbHZlZE1vZHVsZURhdGEuY2h1bmtzLCBuYW1lXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVxdWlyZUFzeW5jTW9kdWxlKGlkKSB7XG4gICAgICB2YXIgcHJvbWlzZSA9IF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHByb21pc2UudGhlbiB8fCBcImZ1bGZpbGxlZFwiID09PSBwcm9taXNlLnN0YXR1cylcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBwcm9taXNlLnRoZW4oXG4gICAgICAgIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIHByb21pc2Uuc3RhdHVzID0gXCJmdWxmaWxsZWRcIjtcbiAgICAgICAgICBwcm9taXNlLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICBwcm9taXNlLnN0YXR1cyA9IFwicmVqZWN0ZWRcIjtcbiAgICAgICAgICBwcm9taXNlLnJlYXNvbiA9IHJlYXNvbjtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpZ25vcmVSZWplY3QoKSB7fVxuICAgIGZ1bmN0aW9uIHByZWxvYWRNb2R1bGUobWV0YWRhdGEpIHtcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciBjaHVua3MgPSBtZXRhZGF0YVsxXSwgcHJvbWlzZXMgPSBbXSwgaSA9IDA7XG4gICAgICAgIGkgPCBjaHVua3MubGVuZ3RoO1xuXG4gICAgICApIHtcbiAgICAgICAgdmFyIGNodW5rSWQgPSBjaHVua3NbaSsrXSxcbiAgICAgICAgICBjaHVua0ZpbGVuYW1lID0gY2h1bmtzW2krK10sXG4gICAgICAgICAgZW50cnkgPSBjaHVua0NhY2hlLmdldChjaHVua0lkKTtcbiAgICAgICAgdm9pZCAwID09PSBlbnRyeVxuICAgICAgICAgID8gKChjaHVua0ZpbGVuYW1lID0gbG9hZENodW5rKGNodW5rSWQsIGNodW5rRmlsZW5hbWUpKSxcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goY2h1bmtGaWxlbmFtZSksXG4gICAgICAgICAgICAoZW50cnkgPSBjaHVua0NhY2hlLnNldC5iaW5kKGNodW5rQ2FjaGUsIGNodW5rSWQsIG51bGwpKSxcbiAgICAgICAgICAgIGNodW5rRmlsZW5hbWUudGhlbihlbnRyeSwgaWdub3JlUmVqZWN0KSxcbiAgICAgICAgICAgIGNodW5rQ2FjaGUuc2V0KGNodW5rSWQsIGNodW5rRmlsZW5hbWUpKVxuICAgICAgICAgIDogbnVsbCAhPT0gZW50cnkgJiYgcHJvbWlzZXMucHVzaChlbnRyeSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gNCA9PT0gbWV0YWRhdGEubGVuZ3RoXG4gICAgICAgID8gMCA9PT0gcHJvbWlzZXMubGVuZ3RoXG4gICAgICAgICAgPyByZXF1aXJlQXN5bmNNb2R1bGUobWV0YWRhdGFbMF0pXG4gICAgICAgICAgOiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHJldHVybiByZXF1aXJlQXN5bmNNb2R1bGUobWV0YWRhdGFbMF0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgOiAwIDwgcHJvbWlzZXMubGVuZ3RoXG4gICAgICAgICAgPyBQcm9taXNlLmFsbChwcm9taXNlcylcbiAgICAgICAgICA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcXVpcmVNb2R1bGUobWV0YWRhdGEpIHtcbiAgICAgIHZhciBtb2R1bGVFeHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyhtZXRhZGF0YVswXSk7XG4gICAgICBpZiAoNCA9PT0gbWV0YWRhdGEubGVuZ3RoICYmIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG1vZHVsZUV4cG9ydHMudGhlbilcbiAgICAgICAgaWYgKFwiZnVsZmlsbGVkXCIgPT09IG1vZHVsZUV4cG9ydHMuc3RhdHVzKVxuICAgICAgICAgIG1vZHVsZUV4cG9ydHMgPSBtb2R1bGVFeHBvcnRzLnZhbHVlO1xuICAgICAgICBlbHNlIHRocm93IG1vZHVsZUV4cG9ydHMucmVhc29uO1xuICAgICAgcmV0dXJuIFwiKlwiID09PSBtZXRhZGF0YVsyXVxuICAgICAgICA/IG1vZHVsZUV4cG9ydHNcbiAgICAgICAgOiBcIlwiID09PSBtZXRhZGF0YVsyXVxuICAgICAgICAgID8gbW9kdWxlRXhwb3J0cy5fX2VzTW9kdWxlXG4gICAgICAgICAgICA/IG1vZHVsZUV4cG9ydHMuZGVmYXVsdFxuICAgICAgICAgICAgOiBtb2R1bGVFeHBvcnRzXG4gICAgICAgICAgOiBtb2R1bGVFeHBvcnRzW21ldGFkYXRhWzJdXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbG9hZENodW5rKGNodW5rSWQsIGZpbGVuYW1lKSB7XG4gICAgICBjaHVua01hcC5zZXQoY2h1bmtJZCwgZmlsZW5hbWUpO1xuICAgICAgcmV0dXJuIF9fd2VicGFja19jaHVua19sb2FkX18oY2h1bmtJZCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICAgICAgaWYgKG51bGwgPT09IG1heWJlSXRlcmFibGUgfHwgXCJvYmplY3RcIiAhPT0gdHlwZW9mIG1heWJlSXRlcmFibGUpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgbWF5YmVJdGVyYWJsZSA9XG4gICAgICAgIChNQVlCRV9JVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtNQVlCRV9JVEVSQVRPUl9TWU1CT0xdKSB8fFxuICAgICAgICBtYXliZUl0ZXJhYmxlW1wiQEBpdGVyYXRvclwiXTtcbiAgICAgIHJldHVybiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBtYXliZUl0ZXJhYmxlID8gbWF5YmVJdGVyYWJsZSA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzT2JqZWN0UHJvdG90eXBlKG9iamVjdCkge1xuICAgICAgaWYgKCFvYmplY3QpIHJldHVybiAhMTtcbiAgICAgIHZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xuICAgICAgaWYgKG9iamVjdCA9PT0gT2JqZWN0UHJvdG90eXBlKSByZXR1cm4gITA7XG4gICAgICBpZiAoZ2V0UHJvdG90eXBlT2Yob2JqZWN0KSkgcmV0dXJuICExO1xuICAgICAgb2JqZWN0ID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqZWN0Lmxlbmd0aDsgaSsrKVxuICAgICAgICBpZiAoIShvYmplY3RbaV0gaW4gT2JqZWN0UHJvdG90eXBlKSkgcmV0dXJuICExO1xuICAgICAgcmV0dXJuICEwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc1NpbXBsZU9iamVjdChvYmplY3QpIHtcbiAgICAgIGlmICghaXNPYmplY3RQcm90b3R5cGUoZ2V0UHJvdG90eXBlT2Yob2JqZWN0KSkpIHJldHVybiAhMTtcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciBuYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCksIGkgPSAwO1xuICAgICAgICBpIDwgbmFtZXMubGVuZ3RoO1xuICAgICAgICBpKytcbiAgICAgICkge1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBuYW1lc1tpXSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhZGVzY3JpcHRvciB8fFxuICAgICAgICAgICghZGVzY3JpcHRvci5lbnVtZXJhYmxlICYmXG4gICAgICAgICAgICAoKFwia2V5XCIgIT09IG5hbWVzW2ldICYmIFwicmVmXCIgIT09IG5hbWVzW2ldKSB8fFxuICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBkZXNjcmlwdG9yLmdldCkpXG4gICAgICAgIClcbiAgICAgICAgICByZXR1cm4gITE7XG4gICAgICB9XG4gICAgICByZXR1cm4gITA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG9iamVjdE5hbWUob2JqZWN0KSB7XG4gICAgICBvYmplY3QgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KTtcbiAgICAgIHJldHVybiBvYmplY3Quc2xpY2UoOCwgb2JqZWN0Lmxlbmd0aCAtIDEpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZUtleUZvckVycm9yTWVzc2FnZShrZXkpIHtcbiAgICAgIHZhciBlbmNvZGVkS2V5ID0gSlNPTi5zdHJpbmdpZnkoa2V5KTtcbiAgICAgIHJldHVybiAnXCInICsga2V5ICsgJ1wiJyA9PT0gZW5jb2RlZEtleSA/IGtleSA6IGVuY29kZWRLZXk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlVmFsdWVGb3JFcnJvck1lc3NhZ2UodmFsdWUpIHtcbiAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAxMCA+PSB2YWx1ZS5sZW5ndGggPyB2YWx1ZSA6IHZhbHVlLnNsaWNlKDAsIDEwKSArIFwiLi4uXCJcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgaWYgKGlzQXJyYXlJbXBsKHZhbHVlKSkgcmV0dXJuIFwiWy4uLl1cIjtcbiAgICAgICAgICBpZiAobnVsbCAhPT0gdmFsdWUgJiYgdmFsdWUuJCR0eXBlb2YgPT09IENMSUVOVF9SRUZFUkVOQ0VfVEFHKVxuICAgICAgICAgICAgcmV0dXJuIFwiY2xpZW50XCI7XG4gICAgICAgICAgdmFsdWUgPSBvYmplY3ROYW1lKHZhbHVlKTtcbiAgICAgICAgICByZXR1cm4gXCJPYmplY3RcIiA9PT0gdmFsdWUgPyBcInsuLi59XCIgOiB2YWx1ZTtcbiAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgcmV0dXJuIHZhbHVlLiQkdHlwZW9mID09PSBDTElFTlRfUkVGRVJFTkNFX1RBR1xuICAgICAgICAgICAgPyBcImNsaWVudFwiXG4gICAgICAgICAgICA6ICh2YWx1ZSA9IHZhbHVlLmRpc3BsYXlOYW1lIHx8IHZhbHVlLm5hbWUpXG4gICAgICAgICAgICAgID8gXCJmdW5jdGlvbiBcIiArIHZhbHVlXG4gICAgICAgICAgICAgIDogXCJmdW5jdGlvblwiO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZUVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgICAgIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgdHlwZSkgcmV0dXJuIHR5cGU7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlXCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlTGlzdFwiO1xuICAgICAgfVxuICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiB0eXBlKVxuICAgICAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpYmVFbGVtZW50VHlwZSh0eXBlLnJlbmRlcik7XG4gICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpYmVFbGVtZW50VHlwZSh0eXBlLnR5cGUpO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgdmFyIHBheWxvYWQgPSB0eXBlLl9wYXlsb2FkO1xuICAgICAgICAgICAgdHlwZSA9IHR5cGUuX2luaXQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gZGVzY3JpYmVFbGVtZW50VHlwZSh0eXBlKHBheWxvYWQpKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHt9XG4gICAgICAgIH1cbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZU9iamVjdEZvckVycm9yTWVzc2FnZShvYmplY3RPckFycmF5LCBleHBhbmRlZE5hbWUpIHtcbiAgICAgIHZhciBvYmpLaW5kID0gb2JqZWN0TmFtZShvYmplY3RPckFycmF5KTtcbiAgICAgIGlmIChcIk9iamVjdFwiICE9PSBvYmpLaW5kICYmIFwiQXJyYXlcIiAhPT0gb2JqS2luZCkgcmV0dXJuIG9iaktpbmQ7XG4gICAgICB2YXIgc3RhcnQgPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gMDtcbiAgICAgIGlmIChpc0FycmF5SW1wbChvYmplY3RPckFycmF5KSlcbiAgICAgICAgaWYgKGpzeENoaWxkcmVuUGFyZW50cy5oYXMob2JqZWN0T3JBcnJheSkpIHtcbiAgICAgICAgICB2YXIgdHlwZSA9IGpzeENoaWxkcmVuUGFyZW50cy5nZXQob2JqZWN0T3JBcnJheSk7XG4gICAgICAgICAgb2JqS2luZCA9IFwiPFwiICsgZGVzY3JpYmVFbGVtZW50VHlwZSh0eXBlKSArIFwiPlwiO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqZWN0T3JBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gb2JqZWN0T3JBcnJheVtpXTtcbiAgICAgICAgICAgIHZhbHVlID1cbiAgICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHZhbHVlXG4gICAgICAgICAgICAgICAgPyB2YWx1ZVxuICAgICAgICAgICAgICAgIDogXCJvYmplY3RcIiA9PT0gdHlwZW9mIHZhbHVlICYmIG51bGwgIT09IHZhbHVlXG4gICAgICAgICAgICAgICAgICA/IFwie1wiICsgZGVzY3JpYmVPYmplY3RGb3JFcnJvck1lc3NhZ2UodmFsdWUpICsgXCJ9XCJcbiAgICAgICAgICAgICAgICAgIDogXCJ7XCIgKyBkZXNjcmliZVZhbHVlRm9yRXJyb3JNZXNzYWdlKHZhbHVlKSArIFwifVwiO1xuICAgICAgICAgICAgXCJcIiArIGkgPT09IGV4cGFuZGVkTmFtZVxuICAgICAgICAgICAgICA/ICgoc3RhcnQgPSBvYmpLaW5kLmxlbmd0aCksXG4gICAgICAgICAgICAgICAgKGxlbmd0aCA9IHZhbHVlLmxlbmd0aCksXG4gICAgICAgICAgICAgICAgKG9iaktpbmQgKz0gdmFsdWUpKVxuICAgICAgICAgICAgICA6IChvYmpLaW5kID1cbiAgICAgICAgICAgICAgICAgIDE1ID4gdmFsdWUubGVuZ3RoICYmIDQwID4gb2JqS2luZC5sZW5ndGggKyB2YWx1ZS5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgPyBvYmpLaW5kICsgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgOiBvYmpLaW5kICsgXCJ7Li4ufVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb2JqS2luZCArPSBcIjwvXCIgKyBkZXNjcmliZUVsZW1lbnRUeXBlKHR5cGUpICsgXCI+XCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2JqS2luZCA9IFwiW1wiO1xuICAgICAgICAgIGZvciAodHlwZSA9IDA7IHR5cGUgPCBvYmplY3RPckFycmF5Lmxlbmd0aDsgdHlwZSsrKVxuICAgICAgICAgICAgMCA8IHR5cGUgJiYgKG9iaktpbmQgKz0gXCIsIFwiKSxcbiAgICAgICAgICAgICAgKGkgPSBvYmplY3RPckFycmF5W3R5cGVdKSxcbiAgICAgICAgICAgICAgKGkgPVxuICAgICAgICAgICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBpICYmIG51bGwgIT09IGlcbiAgICAgICAgICAgICAgICAgID8gZGVzY3JpYmVPYmplY3RGb3JFcnJvck1lc3NhZ2UoaSlcbiAgICAgICAgICAgICAgICAgIDogZGVzY3JpYmVWYWx1ZUZvckVycm9yTWVzc2FnZShpKSksXG4gICAgICAgICAgICAgIFwiXCIgKyB0eXBlID09PSBleHBhbmRlZE5hbWVcbiAgICAgICAgICAgICAgICA/ICgoc3RhcnQgPSBvYmpLaW5kLmxlbmd0aCksXG4gICAgICAgICAgICAgICAgICAobGVuZ3RoID0gaS5sZW5ndGgpLFxuICAgICAgICAgICAgICAgICAgKG9iaktpbmQgKz0gaSkpXG4gICAgICAgICAgICAgICAgOiAob2JqS2luZCA9XG4gICAgICAgICAgICAgICAgICAgIDEwID4gaS5sZW5ndGggJiYgNDAgPiBvYmpLaW5kLmxlbmd0aCArIGkubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgPyBvYmpLaW5kICsgaVxuICAgICAgICAgICAgICAgICAgICAgIDogb2JqS2luZCArIFwiLi4uXCIpO1xuICAgICAgICAgIG9iaktpbmQgKz0gXCJdXCI7XG4gICAgICAgIH1cbiAgICAgIGVsc2UgaWYgKG9iamVjdE9yQXJyYXkuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRSlcbiAgICAgICAgb2JqS2luZCA9IFwiPFwiICsgZGVzY3JpYmVFbGVtZW50VHlwZShvYmplY3RPckFycmF5LnR5cGUpICsgXCIvPlwiO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmIChvYmplY3RPckFycmF5LiQkdHlwZW9mID09PSBDTElFTlRfUkVGRVJFTkNFX1RBRykgcmV0dXJuIFwiY2xpZW50XCI7XG4gICAgICAgIGlmIChqc3hQcm9wc1BhcmVudHMuaGFzKG9iamVjdE9yQXJyYXkpKSB7XG4gICAgICAgICAgb2JqS2luZCA9IGpzeFByb3BzUGFyZW50cy5nZXQob2JqZWN0T3JBcnJheSk7XG4gICAgICAgICAgb2JqS2luZCA9IFwiPFwiICsgKGRlc2NyaWJlRWxlbWVudFR5cGUob2JqS2luZCkgfHwgXCIuLi5cIik7XG4gICAgICAgICAgdHlwZSA9IE9iamVjdC5rZXlzKG9iamVjdE9yQXJyYXkpO1xuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0eXBlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBvYmpLaW5kICs9IFwiIFwiO1xuICAgICAgICAgICAgdmFsdWUgPSB0eXBlW2ldO1xuICAgICAgICAgICAgb2JqS2luZCArPSBkZXNjcmliZUtleUZvckVycm9yTWVzc2FnZSh2YWx1ZSkgKyBcIj1cIjtcbiAgICAgICAgICAgIHZhciBfdmFsdWUyID0gb2JqZWN0T3JBcnJheVt2YWx1ZV07XG4gICAgICAgICAgICB2YXIgX3N1YnN0cjIgPVxuICAgICAgICAgICAgICB2YWx1ZSA9PT0gZXhwYW5kZWROYW1lICYmXG4gICAgICAgICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBfdmFsdWUyICYmXG4gICAgICAgICAgICAgIG51bGwgIT09IF92YWx1ZTJcbiAgICAgICAgICAgICAgICA/IGRlc2NyaWJlT2JqZWN0Rm9yRXJyb3JNZXNzYWdlKF92YWx1ZTIpXG4gICAgICAgICAgICAgICAgOiBkZXNjcmliZVZhbHVlRm9yRXJyb3JNZXNzYWdlKF92YWx1ZTIpO1xuICAgICAgICAgICAgXCJzdHJpbmdcIiAhPT0gdHlwZW9mIF92YWx1ZTIgJiYgKF9zdWJzdHIyID0gXCJ7XCIgKyBfc3Vic3RyMiArIFwifVwiKTtcbiAgICAgICAgICAgIHZhbHVlID09PSBleHBhbmRlZE5hbWVcbiAgICAgICAgICAgICAgPyAoKHN0YXJ0ID0gb2JqS2luZC5sZW5ndGgpLFxuICAgICAgICAgICAgICAgIChsZW5ndGggPSBfc3Vic3RyMi5sZW5ndGgpLFxuICAgICAgICAgICAgICAgIChvYmpLaW5kICs9IF9zdWJzdHIyKSlcbiAgICAgICAgICAgICAgOiAob2JqS2luZCA9XG4gICAgICAgICAgICAgICAgICAxMCA+IF9zdWJzdHIyLmxlbmd0aCAmJiA0MCA+IG9iaktpbmQubGVuZ3RoICsgX3N1YnN0cjIubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gb2JqS2luZCArIF9zdWJzdHIyXG4gICAgICAgICAgICAgICAgICAgIDogb2JqS2luZCArIFwiLi4uXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvYmpLaW5kICs9IFwiPlwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9iaktpbmQgPSBcIntcIjtcbiAgICAgICAgICB0eXBlID0gT2JqZWN0LmtleXMob2JqZWN0T3JBcnJheSk7XG4gICAgICAgICAgZm9yIChpID0gMDsgaSA8IHR5cGUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAwIDwgaSAmJiAob2JqS2luZCArPSBcIiwgXCIpLFxuICAgICAgICAgICAgICAodmFsdWUgPSB0eXBlW2ldKSxcbiAgICAgICAgICAgICAgKG9iaktpbmQgKz0gZGVzY3JpYmVLZXlGb3JFcnJvck1lc3NhZ2UodmFsdWUpICsgXCI6IFwiKSxcbiAgICAgICAgICAgICAgKF92YWx1ZTIgPSBvYmplY3RPckFycmF5W3ZhbHVlXSksXG4gICAgICAgICAgICAgIChfdmFsdWUyID1cbiAgICAgICAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgX3ZhbHVlMiAmJiBudWxsICE9PSBfdmFsdWUyXG4gICAgICAgICAgICAgICAgICA/IGRlc2NyaWJlT2JqZWN0Rm9yRXJyb3JNZXNzYWdlKF92YWx1ZTIpXG4gICAgICAgICAgICAgICAgICA6IGRlc2NyaWJlVmFsdWVGb3JFcnJvck1lc3NhZ2UoX3ZhbHVlMikpLFxuICAgICAgICAgICAgICB2YWx1ZSA9PT0gZXhwYW5kZWROYW1lXG4gICAgICAgICAgICAgICAgPyAoKHN0YXJ0ID0gb2JqS2luZC5sZW5ndGgpLFxuICAgICAgICAgICAgICAgICAgKGxlbmd0aCA9IF92YWx1ZTIubGVuZ3RoKSxcbiAgICAgICAgICAgICAgICAgIChvYmpLaW5kICs9IF92YWx1ZTIpKVxuICAgICAgICAgICAgICAgIDogKG9iaktpbmQgPVxuICAgICAgICAgICAgICAgICAgICAxMCA+IF92YWx1ZTIubGVuZ3RoICYmIDQwID4gb2JqS2luZC5sZW5ndGggKyBfdmFsdWUyLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgID8gb2JqS2luZCArIF92YWx1ZTJcbiAgICAgICAgICAgICAgICAgICAgICA6IG9iaktpbmQgKyBcIi4uLlwiKTtcbiAgICAgICAgICBvYmpLaW5kICs9IFwifVwiO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdm9pZCAwID09PSBleHBhbmRlZE5hbWVcbiAgICAgICAgPyBvYmpLaW5kXG4gICAgICAgIDogLTEgPCBzdGFydCAmJiAwIDwgbGVuZ3RoXG4gICAgICAgICAgPyAoKG9iamVjdE9yQXJyYXkgPSBcIiBcIi5yZXBlYXQoc3RhcnQpICsgXCJeXCIucmVwZWF0KGxlbmd0aCkpLFxuICAgICAgICAgICAgXCJcXG4gIFwiICsgb2JqS2luZCArIFwiXFxuICBcIiArIG9iamVjdE9yQXJyYXkpXG4gICAgICAgICAgOiBcIlxcbiAgXCIgKyBvYmpLaW5kO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXJpYWxpemVOdW1iZXIobnVtYmVyKSB7XG4gICAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG51bWJlcilcbiAgICAgICAgPyAwID09PSBudW1iZXIgJiYgLUluZmluaXR5ID09PSAxIC8gbnVtYmVyXG4gICAgICAgICAgPyBcIiQtMFwiXG4gICAgICAgICAgOiBudW1iZXJcbiAgICAgICAgOiBJbmZpbml0eSA9PT0gbnVtYmVyXG4gICAgICAgICAgPyBcIiRJbmZpbml0eVwiXG4gICAgICAgICAgOiAtSW5maW5pdHkgPT09IG51bWJlclxuICAgICAgICAgICAgPyBcIiQtSW5maW5pdHlcIlxuICAgICAgICAgICAgOiBcIiROYU5cIjtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHJvY2Vzc1JlcGx5KFxuICAgICAgcm9vdCxcbiAgICAgIGZvcm1GaWVsZFByZWZpeCxcbiAgICAgIHRlbXBvcmFyeVJlZmVyZW5jZXMsXG4gICAgICByZXNvbHZlLFxuICAgICAgcmVqZWN0XG4gICAgKSB7XG4gICAgICBmdW5jdGlvbiBzZXJpYWxpemVUeXBlZEFycmF5KHRhZywgdHlwZWRBcnJheSkge1xuICAgICAgICB0eXBlZEFycmF5ID0gbmV3IEJsb2IoW1xuICAgICAgICAgIG5ldyBVaW50OEFycmF5KFxuICAgICAgICAgICAgdHlwZWRBcnJheS5idWZmZXIsXG4gICAgICAgICAgICB0eXBlZEFycmF5LmJ5dGVPZmZzZXQsXG4gICAgICAgICAgICB0eXBlZEFycmF5LmJ5dGVMZW5ndGhcbiAgICAgICAgICApXG4gICAgICAgIF0pO1xuICAgICAgICB2YXIgYmxvYklkID0gbmV4dFBhcnRJZCsrO1xuICAgICAgICBudWxsID09PSBmb3JtRGF0YSAmJiAoZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKSk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChmb3JtRmllbGRQcmVmaXggKyBibG9iSWQsIHR5cGVkQXJyYXkpO1xuICAgICAgICByZXR1cm4gXCIkXCIgKyB0YWcgKyBibG9iSWQudG9TdHJpbmcoMTYpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gc2VyaWFsaXplQmluYXJ5UmVhZGVyKHJlYWRlcikge1xuICAgICAgICBmdW5jdGlvbiBwcm9ncmVzcyhlbnRyeSkge1xuICAgICAgICAgIGVudHJ5LmRvbmVcbiAgICAgICAgICAgID8gKChlbnRyeSA9IG5leHRQYXJ0SWQrKyksXG4gICAgICAgICAgICAgIGRhdGEuYXBwZW5kKGZvcm1GaWVsZFByZWZpeCArIGVudHJ5LCBuZXcgQmxvYihidWZmZXIpKSxcbiAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoXG4gICAgICAgICAgICAgICAgZm9ybUZpZWxkUHJlZml4ICsgc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgJ1wiJG8nICsgZW50cnkudG9TdHJpbmcoMTYpICsgJ1wiJ1xuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBkYXRhLmFwcGVuZChmb3JtRmllbGRQcmVmaXggKyBzdHJlYW1JZCwgXCJDXCIpLFxuICAgICAgICAgICAgICBwZW5kaW5nUGFydHMtLSxcbiAgICAgICAgICAgICAgMCA9PT0gcGVuZGluZ1BhcnRzICYmIHJlc29sdmUoZGF0YSkpXG4gICAgICAgICAgICA6IChidWZmZXIucHVzaChlbnRyeS52YWx1ZSksXG4gICAgICAgICAgICAgIHJlYWRlci5yZWFkKG5ldyBVaW50OEFycmF5KDEwMjQpKS50aGVuKHByb2dyZXNzLCByZWplY3QpKTtcbiAgICAgICAgfVxuICAgICAgICBudWxsID09PSBmb3JtRGF0YSAmJiAoZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKSk7XG4gICAgICAgIHZhciBkYXRhID0gZm9ybURhdGE7XG4gICAgICAgIHBlbmRpbmdQYXJ0cysrO1xuICAgICAgICB2YXIgc3RyZWFtSWQgPSBuZXh0UGFydElkKyssXG4gICAgICAgICAgYnVmZmVyID0gW107XG4gICAgICAgIHJlYWRlci5yZWFkKG5ldyBVaW50OEFycmF5KDEwMjQpKS50aGVuKHByb2dyZXNzLCByZWplY3QpO1xuICAgICAgICByZXR1cm4gXCIkclwiICsgc3RyZWFtSWQudG9TdHJpbmcoMTYpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gc2VyaWFsaXplUmVhZGVyKHJlYWRlcikge1xuICAgICAgICBmdW5jdGlvbiBwcm9ncmVzcyhlbnRyeSkge1xuICAgICAgICAgIGlmIChlbnRyeS5kb25lKVxuICAgICAgICAgICAgZGF0YS5hcHBlbmQoZm9ybUZpZWxkUHJlZml4ICsgc3RyZWFtSWQsIFwiQ1wiKSxcbiAgICAgICAgICAgICAgcGVuZGluZ1BhcnRzLS0sXG4gICAgICAgICAgICAgIDAgPT09IHBlbmRpbmdQYXJ0cyAmJiByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHZhciBwYXJ0SlNPTiA9IEpTT04uc3RyaW5naWZ5KGVudHJ5LnZhbHVlLCByZXNvbHZlVG9KU09OKTtcbiAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoZm9ybUZpZWxkUHJlZml4ICsgc3RyZWFtSWQsIHBhcnRKU09OKTtcbiAgICAgICAgICAgICAgcmVhZGVyLnJlYWQoKS50aGVuKHByb2dyZXNzLCByZWplY3QpO1xuICAgICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgICByZWplY3QoeCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbnVsbCA9PT0gZm9ybURhdGEgJiYgKGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCkpO1xuICAgICAgICB2YXIgZGF0YSA9IGZvcm1EYXRhO1xuICAgICAgICBwZW5kaW5nUGFydHMrKztcbiAgICAgICAgdmFyIHN0cmVhbUlkID0gbmV4dFBhcnRJZCsrO1xuICAgICAgICByZWFkZXIucmVhZCgpLnRoZW4ocHJvZ3Jlc3MsIHJlamVjdCk7XG4gICAgICAgIHJldHVybiBcIiRSXCIgKyBzdHJlYW1JZC50b1N0cmluZygxNik7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBzZXJpYWxpemVSZWFkYWJsZVN0cmVhbShzdHJlYW0pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YXIgYmluYXJ5UmVhZGVyID0gc3RyZWFtLmdldFJlYWRlcih7IG1vZGU6IFwiYnlvYlwiIH0pO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZVJlYWRlcihzdHJlYW0uZ2V0UmVhZGVyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVCaW5hcnlSZWFkZXIoYmluYXJ5UmVhZGVyKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHNlcmlhbGl6ZUFzeW5jSXRlcmFibGUoaXRlcmFibGUsIGl0ZXJhdG9yKSB7XG4gICAgICAgIGZ1bmN0aW9uIHByb2dyZXNzKGVudHJ5KSB7XG4gICAgICAgICAgaWYgKGVudHJ5LmRvbmUpIHtcbiAgICAgICAgICAgIGlmICh2b2lkIDAgPT09IGVudHJ5LnZhbHVlKVxuICAgICAgICAgICAgICBkYXRhLmFwcGVuZChmb3JtRmllbGRQcmVmaXggKyBzdHJlYW1JZCwgXCJDXCIpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHZhciBwYXJ0SlNPTiA9IEpTT04uc3RyaW5naWZ5KGVudHJ5LnZhbHVlLCByZXNvbHZlVG9KU09OKTtcbiAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZChmb3JtRmllbGRQcmVmaXggKyBzdHJlYW1JZCwgXCJDXCIgKyBwYXJ0SlNPTik7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgICAgICByZWplY3QoeCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBwZW5kaW5nUGFydHMtLTtcbiAgICAgICAgICAgIDAgPT09IHBlbmRpbmdQYXJ0cyAmJiByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdmFyIF9wYXJ0SlNPTiA9IEpTT04uc3RyaW5naWZ5KGVudHJ5LnZhbHVlLCByZXNvbHZlVG9KU09OKTtcbiAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoZm9ybUZpZWxkUHJlZml4ICsgc3RyZWFtSWQsIF9wYXJ0SlNPTik7XG4gICAgICAgICAgICAgIGl0ZXJhdG9yLm5leHQoKS50aGVuKHByb2dyZXNzLCByZWplY3QpO1xuICAgICAgICAgICAgfSBjYXRjaCAoeCQwKSB7XG4gICAgICAgICAgICAgIHJlamVjdCh4JDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG51bGwgPT09IGZvcm1EYXRhICYmIChmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpKTtcbiAgICAgICAgdmFyIGRhdGEgPSBmb3JtRGF0YTtcbiAgICAgICAgcGVuZGluZ1BhcnRzKys7XG4gICAgICAgIHZhciBzdHJlYW1JZCA9IG5leHRQYXJ0SWQrKztcbiAgICAgICAgaXRlcmFibGUgPSBpdGVyYWJsZSA9PT0gaXRlcmF0b3I7XG4gICAgICAgIGl0ZXJhdG9yLm5leHQoKS50aGVuKHByb2dyZXNzLCByZWplY3QpO1xuICAgICAgICByZXR1cm4gXCIkXCIgKyAoaXRlcmFibGUgPyBcInhcIiA6IFwiWFwiKSArIHN0cmVhbUlkLnRvU3RyaW5nKDE2KTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHJlc29sdmVUb0pTT04oa2V5LCB2YWx1ZSkge1xuICAgICAgICB2YXIgb3JpZ2luYWxWYWx1ZSA9IHRoaXNba2V5XTtcbiAgICAgICAgXCJvYmplY3RcIiAhPT0gdHlwZW9mIG9yaWdpbmFsVmFsdWUgfHxcbiAgICAgICAgICBvcmlnaW5hbFZhbHVlID09PSB2YWx1ZSB8fFxuICAgICAgICAgIG9yaWdpbmFsVmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgICAgKFwiT2JqZWN0XCIgIT09IG9iamVjdE5hbWUob3JpZ2luYWxWYWx1ZSlcbiAgICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIk9ubHkgcGxhaW4gb2JqZWN0cyBjYW4gYmUgcGFzc2VkIHRvIFNlcnZlciBGdW5jdGlvbnMgZnJvbSB0aGUgQ2xpZW50LiAlcyBvYmplY3RzIGFyZSBub3Qgc3VwcG9ydGVkLiVzXCIsXG4gICAgICAgICAgICAgICAgb2JqZWN0TmFtZShvcmlnaW5hbFZhbHVlKSxcbiAgICAgICAgICAgICAgICBkZXNjcmliZU9iamVjdEZvckVycm9yTWVzc2FnZSh0aGlzLCBrZXkpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIk9ubHkgcGxhaW4gb2JqZWN0cyBjYW4gYmUgcGFzc2VkIHRvIFNlcnZlciBGdW5jdGlvbnMgZnJvbSB0aGUgQ2xpZW50LiBPYmplY3RzIHdpdGggdG9KU09OIG1ldGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQuIENvbnZlcnQgaXQgbWFudWFsbHkgdG8gYSBzaW1wbGUgdmFsdWUgYmVmb3JlIHBhc3NpbmcgaXQgdG8gcHJvcHMuJXNcIixcbiAgICAgICAgICAgICAgICBkZXNjcmliZU9iamVjdEZvckVycm9yTWVzc2FnZSh0aGlzLCBrZXkpXG4gICAgICAgICAgICAgICkpO1xuICAgICAgICBpZiAobnVsbCA9PT0gdmFsdWUpIHJldHVybiBudWxsO1xuICAgICAgICBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgc3dpdGNoICh2YWx1ZS4kJHR5cGVvZikge1xuICAgICAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAgICAgIGlmICh2b2lkIDAgIT09IHRlbXBvcmFyeVJlZmVyZW5jZXMgJiYgLTEgPT09IGtleS5pbmRleE9mKFwiOlwiKSkge1xuICAgICAgICAgICAgICAgIHZhciBwYXJlbnRSZWZlcmVuY2UgPSB3cml0dGVuT2JqZWN0cy5nZXQodGhpcyk7XG4gICAgICAgICAgICAgICAgaWYgKHZvaWQgMCAhPT0gcGFyZW50UmVmZXJlbmNlKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgdGVtcG9yYXJ5UmVmZXJlbmNlcy5zZXQocGFyZW50UmVmZXJlbmNlICsgXCI6XCIgKyBrZXksIHZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgXCIkVFwiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiUmVhY3QgRWxlbWVudCBjYW5ub3QgYmUgcGFzc2VkIHRvIFNlcnZlciBGdW5jdGlvbnMgZnJvbSB0aGUgQ2xpZW50IHdpdGhvdXQgYSB0ZW1wb3JhcnkgcmVmZXJlbmNlIHNldC4gUGFzcyBhIFRlbXBvcmFyeVJlZmVyZW5jZVNldCB0byB0aGUgb3B0aW9ucy5cIiArXG4gICAgICAgICAgICAgICAgICBkZXNjcmliZU9iamVjdEZvckVycm9yTWVzc2FnZSh0aGlzLCBrZXkpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgb3JpZ2luYWxWYWx1ZSA9IHZhbHVlLl9wYXlsb2FkO1xuICAgICAgICAgICAgICB2YXIgaW5pdCA9IHZhbHVlLl9pbml0O1xuICAgICAgICAgICAgICBudWxsID09PSBmb3JtRGF0YSAmJiAoZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKSk7XG4gICAgICAgICAgICAgIHBlbmRpbmdQYXJ0cysrO1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcmVudFJlZmVyZW5jZSA9IGluaXQob3JpZ2luYWxWYWx1ZSk7XG4gICAgICAgICAgICAgICAgdmFyIGxhenlJZCA9IG5leHRQYXJ0SWQrKyxcbiAgICAgICAgICAgICAgICAgIHBhcnRKU09OID0gc2VyaWFsaXplTW9kZWwocGFyZW50UmVmZXJlbmNlLCBsYXp5SWQpO1xuICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChmb3JtRmllbGRQcmVmaXggKyBsYXp5SWQsIHBhcnRKU09OKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCIkXCIgKyBsYXp5SWQudG9TdHJpbmcoMTYpO1xuICAgICAgICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHggJiZcbiAgICAgICAgICAgICAgICAgIG51bGwgIT09IHggJiZcbiAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHgudGhlblxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgcGVuZGluZ1BhcnRzKys7XG4gICAgICAgICAgICAgICAgICB2YXIgX2xhenlJZCA9IG5leHRQYXJ0SWQrKztcbiAgICAgICAgICAgICAgICAgIHBhcmVudFJlZmVyZW5jZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgX3BhcnRKU09OMiA9IHNlcmlhbGl6ZU1vZGVsKHZhbHVlLCBfbGF6eUlkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9kYXRhID0gZm9ybURhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgX2RhdGEuYXBwZW5kKGZvcm1GaWVsZFByZWZpeCArIF9sYXp5SWQsIF9wYXJ0SlNPTjIpO1xuICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdQYXJ0cy0tO1xuICAgICAgICAgICAgICAgICAgICAgIDAgPT09IHBlbmRpbmdQYXJ0cyAmJiByZXNvbHZlKF9kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICB4LnRoZW4ocGFyZW50UmVmZXJlbmNlLCBwYXJlbnRSZWZlcmVuY2UpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiJFwiICsgX2xhenlJZC50b1N0cmluZygxNik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlamVjdCh4KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICBwZW5kaW5nUGFydHMtLTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdmFsdWUudGhlbikge1xuICAgICAgICAgICAgbnVsbCA9PT0gZm9ybURhdGEgJiYgKGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCkpO1xuICAgICAgICAgICAgcGVuZGluZ1BhcnRzKys7XG4gICAgICAgICAgICB2YXIgcHJvbWlzZUlkID0gbmV4dFBhcnRJZCsrO1xuICAgICAgICAgICAgdmFsdWUudGhlbihmdW5jdGlvbiAocGFydFZhbHVlKSB7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdmFyIF9wYXJ0SlNPTjMgPSBzZXJpYWxpemVNb2RlbChwYXJ0VmFsdWUsIHByb21pc2VJZCk7XG4gICAgICAgICAgICAgICAgcGFydFZhbHVlID0gZm9ybURhdGE7XG4gICAgICAgICAgICAgICAgcGFydFZhbHVlLmFwcGVuZChmb3JtRmllbGRQcmVmaXggKyBwcm9taXNlSWQsIF9wYXJ0SlNPTjMpO1xuICAgICAgICAgICAgICAgIHBlbmRpbmdQYXJ0cy0tO1xuICAgICAgICAgICAgICAgIDAgPT09IHBlbmRpbmdQYXJ0cyAmJiByZXNvbHZlKHBhcnRWYWx1ZSk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKHJlYXNvbikge1xuICAgICAgICAgICAgICAgIHJlamVjdChyZWFzb24pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCByZWplY3QpO1xuICAgICAgICAgICAgcmV0dXJuIFwiJEBcIiArIHByb21pc2VJZC50b1N0cmluZygxNik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhcmVudFJlZmVyZW5jZSA9IHdyaXR0ZW5PYmplY3RzLmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHZvaWQgMCAhPT0gcGFyZW50UmVmZXJlbmNlKVxuICAgICAgICAgICAgaWYgKG1vZGVsUm9vdCA9PT0gdmFsdWUpIG1vZGVsUm9vdCA9IG51bGw7XG4gICAgICAgICAgICBlbHNlIHJldHVybiBwYXJlbnRSZWZlcmVuY2U7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgLTEgPT09IGtleS5pbmRleE9mKFwiOlwiKSAmJlxuICAgICAgICAgICAgICAoKHBhcmVudFJlZmVyZW5jZSA9IHdyaXR0ZW5PYmplY3RzLmdldCh0aGlzKSksXG4gICAgICAgICAgICAgIHZvaWQgMCAhPT0gcGFyZW50UmVmZXJlbmNlICYmXG4gICAgICAgICAgICAgICAgKChwYXJlbnRSZWZlcmVuY2UgPSBwYXJlbnRSZWZlcmVuY2UgKyBcIjpcIiArIGtleSksXG4gICAgICAgICAgICAgICAgd3JpdHRlbk9iamVjdHMuc2V0KHZhbHVlLCBwYXJlbnRSZWZlcmVuY2UpLFxuICAgICAgICAgICAgICAgIHZvaWQgMCAhPT0gdGVtcG9yYXJ5UmVmZXJlbmNlcyAmJlxuICAgICAgICAgICAgICAgICAgdGVtcG9yYXJ5UmVmZXJlbmNlcy5zZXQocGFyZW50UmVmZXJlbmNlLCB2YWx1ZSkpKTtcbiAgICAgICAgICBpZiAoaXNBcnJheUltcGwodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRm9ybURhdGEpIHtcbiAgICAgICAgICAgIG51bGwgPT09IGZvcm1EYXRhICYmIChmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpKTtcbiAgICAgICAgICAgIHZhciBfZGF0YTMgPSBmb3JtRGF0YTtcbiAgICAgICAgICAgIGtleSA9IG5leHRQYXJ0SWQrKztcbiAgICAgICAgICAgIHZhciBwcmVmaXggPSBmb3JtRmllbGRQcmVmaXggKyBrZXkgKyBcIl9cIjtcbiAgICAgICAgICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24gKG9yaWdpbmFsVmFsdWUsIG9yaWdpbmFsS2V5KSB7XG4gICAgICAgICAgICAgIF9kYXRhMy5hcHBlbmQocHJlZml4ICsgb3JpZ2luYWxLZXksIG9yaWdpbmFsVmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gXCIkS1wiICsga2V5LnRvU3RyaW5nKDE2KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTWFwKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKGtleSA9IG5leHRQYXJ0SWQrKyksXG4gICAgICAgICAgICAgIChwYXJlbnRSZWZlcmVuY2UgPSBzZXJpYWxpemVNb2RlbChBcnJheS5mcm9tKHZhbHVlKSwga2V5KSksXG4gICAgICAgICAgICAgIG51bGwgPT09IGZvcm1EYXRhICYmIChmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpKSxcbiAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGZvcm1GaWVsZFByZWZpeCArIGtleSwgcGFyZW50UmVmZXJlbmNlKSxcbiAgICAgICAgICAgICAgXCIkUVwiICsga2V5LnRvU3RyaW5nKDE2KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTZXQpXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAoa2V5ID0gbmV4dFBhcnRJZCsrKSxcbiAgICAgICAgICAgICAgKHBhcmVudFJlZmVyZW5jZSA9IHNlcmlhbGl6ZU1vZGVsKEFycmF5LmZyb20odmFsdWUpLCBrZXkpKSxcbiAgICAgICAgICAgICAgbnVsbCA9PT0gZm9ybURhdGEgJiYgKGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCkpLFxuICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoZm9ybUZpZWxkUHJlZml4ICsga2V5LCBwYXJlbnRSZWZlcmVuY2UpLFxuICAgICAgICAgICAgICBcIiRXXCIgKyBrZXkudG9TdHJpbmcoMTYpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKGtleSA9IG5ldyBCbG9iKFt2YWx1ZV0pKSxcbiAgICAgICAgICAgICAgKHBhcmVudFJlZmVyZW5jZSA9IG5leHRQYXJ0SWQrKyksXG4gICAgICAgICAgICAgIG51bGwgPT09IGZvcm1EYXRhICYmIChmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpKSxcbiAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGZvcm1GaWVsZFByZWZpeCArIHBhcmVudFJlZmVyZW5jZSwga2V5KSxcbiAgICAgICAgICAgICAgXCIkQVwiICsgcGFyZW50UmVmZXJlbmNlLnRvU3RyaW5nKDE2KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBJbnQ4QXJyYXkpXG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplVHlwZWRBcnJheShcIk9cIiwgdmFsdWUpO1xuICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpXG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplVHlwZWRBcnJheShcIm9cIiwgdmFsdWUpO1xuICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KVxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZVR5cGVkQXJyYXkoXCJVXCIsIHZhbHVlKTtcbiAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBJbnQxNkFycmF5KVxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZVR5cGVkQXJyYXkoXCJTXCIsIHZhbHVlKTtcbiAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBVaW50MTZBcnJheSlcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVUeXBlZEFycmF5KFwic1wiLCB2YWx1ZSk7XG4gICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgSW50MzJBcnJheSlcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVUeXBlZEFycmF5KFwiTFwiLCB2YWx1ZSk7XG4gICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVWludDMyQXJyYXkpXG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplVHlwZWRBcnJheShcImxcIiwgdmFsdWUpO1xuICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVUeXBlZEFycmF5KFwiR1wiLCB2YWx1ZSk7XG4gICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5KVxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZVR5cGVkQXJyYXkoXCJnXCIsIHZhbHVlKTtcbiAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBCaWdJbnQ2NEFycmF5KVxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZVR5cGVkQXJyYXkoXCJNXCIsIHZhbHVlKTtcbiAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBCaWdVaW50NjRBcnJheSlcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVUeXBlZEFycmF5KFwibVwiLCB2YWx1ZSk7XG4gICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0YVZpZXcpIHJldHVybiBzZXJpYWxpemVUeXBlZEFycmF5KFwiVlwiLCB2YWx1ZSk7XG4gICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIEJsb2IgJiYgdmFsdWUgaW5zdGFuY2VvZiBCbG9iKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgbnVsbCA9PT0gZm9ybURhdGEgJiYgKGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCkpLFxuICAgICAgICAgICAgICAoa2V5ID0gbmV4dFBhcnRJZCsrKSxcbiAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGZvcm1GaWVsZFByZWZpeCArIGtleSwgdmFsdWUpLFxuICAgICAgICAgICAgICBcIiRCXCIgKyBrZXkudG9TdHJpbmcoMTYpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGlmICgocGFyZW50UmVmZXJlbmNlID0gZ2V0SXRlcmF0b3JGbih2YWx1ZSkpKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKHBhcmVudFJlZmVyZW5jZSA9IHBhcmVudFJlZmVyZW5jZS5jYWxsKHZhbHVlKSksXG4gICAgICAgICAgICAgIHBhcmVudFJlZmVyZW5jZSA9PT0gdmFsdWVcbiAgICAgICAgICAgICAgICA/ICgoa2V5ID0gbmV4dFBhcnRJZCsrKSxcbiAgICAgICAgICAgICAgICAgIChwYXJlbnRSZWZlcmVuY2UgPSBzZXJpYWxpemVNb2RlbChcbiAgICAgICAgICAgICAgICAgICAgQXJyYXkuZnJvbShwYXJlbnRSZWZlcmVuY2UpLFxuICAgICAgICAgICAgICAgICAgICBrZXlcbiAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgbnVsbCA9PT0gZm9ybURhdGEgJiYgKGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCkpLFxuICAgICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGZvcm1GaWVsZFByZWZpeCArIGtleSwgcGFyZW50UmVmZXJlbmNlKSxcbiAgICAgICAgICAgICAgICAgIFwiJGlcIiArIGtleS50b1N0cmluZygxNikpXG4gICAgICAgICAgICAgICAgOiBBcnJheS5mcm9tKHBhcmVudFJlZmVyZW5jZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgUmVhZGFibGVTdHJlYW0gJiZcbiAgICAgICAgICAgIHZhbHVlIGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW1cbiAgICAgICAgICApXG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplUmVhZGFibGVTdHJlYW0odmFsdWUpO1xuICAgICAgICAgIHBhcmVudFJlZmVyZW5jZSA9IHZhbHVlW0FTWU5DX0lURVJBVE9SXTtcbiAgICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcGFyZW50UmVmZXJlbmNlKVxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZUFzeW5jSXRlcmFibGUodmFsdWUsIHBhcmVudFJlZmVyZW5jZS5jYWxsKHZhbHVlKSk7XG4gICAgICAgICAgcGFyZW50UmVmZXJlbmNlID0gZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhcmVudFJlZmVyZW5jZSAhPT0gT2JqZWN0UHJvdG90eXBlICYmXG4gICAgICAgICAgICAobnVsbCA9PT0gcGFyZW50UmVmZXJlbmNlIHx8XG4gICAgICAgICAgICAgIG51bGwgIT09IGdldFByb3RvdHlwZU9mKHBhcmVudFJlZmVyZW5jZSkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAodm9pZCAwID09PSB0ZW1wb3JhcnlSZWZlcmVuY2VzKVxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIk9ubHkgcGxhaW4gb2JqZWN0cywgYW5kIGEgZmV3IGJ1aWx0LWlucywgY2FuIGJlIHBhc3NlZCB0byBTZXJ2ZXIgRnVuY3Rpb25zLiBDbGFzc2VzIG9yIG51bGwgcHJvdG90eXBlcyBhcmUgbm90IHN1cHBvcnRlZC5cIiArXG4gICAgICAgICAgICAgICAgICBkZXNjcmliZU9iamVjdEZvckVycm9yTWVzc2FnZSh0aGlzLCBrZXkpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gXCIkVFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YWx1ZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFXG4gICAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJSZWFjdCBDb250ZXh0IFByb3ZpZGVycyBjYW5ub3QgYmUgcGFzc2VkIHRvIFNlcnZlciBGdW5jdGlvbnMgZnJvbSB0aGUgQ2xpZW50LiVzXCIsXG4gICAgICAgICAgICAgICAgZGVzY3JpYmVPYmplY3RGb3JFcnJvck1lc3NhZ2UodGhpcywga2V5KVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IFwiT2JqZWN0XCIgIT09IG9iamVjdE5hbWUodmFsdWUpXG4gICAgICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgIFwiT25seSBwbGFpbiBvYmplY3RzIGNhbiBiZSBwYXNzZWQgdG8gU2VydmVyIEZ1bmN0aW9ucyBmcm9tIHRoZSBDbGllbnQuICVzIG9iamVjdHMgYXJlIG5vdCBzdXBwb3J0ZWQuJXNcIixcbiAgICAgICAgICAgICAgICAgIG9iamVjdE5hbWUodmFsdWUpLFxuICAgICAgICAgICAgICAgICAgZGVzY3JpYmVPYmplY3RGb3JFcnJvck1lc3NhZ2UodGhpcywga2V5KVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBpc1NpbXBsZU9iamVjdCh2YWx1ZSlcbiAgICAgICAgICAgICAgICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiZcbiAgICAgICAgICAgICAgICAgICgocGFyZW50UmVmZXJlbmNlID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh2YWx1ZSkpLFxuICAgICAgICAgICAgICAgICAgMCA8IHBhcmVudFJlZmVyZW5jZS5sZW5ndGggJiZcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICBcIk9ubHkgcGxhaW4gb2JqZWN0cyBjYW4gYmUgcGFzc2VkIHRvIFNlcnZlciBGdW5jdGlvbnMgZnJvbSB0aGUgQ2xpZW50LiBPYmplY3RzIHdpdGggc3ltYm9sIHByb3BlcnRpZXMgbGlrZSAlcyBhcmUgbm90IHN1cHBvcnRlZC4lc1wiLFxuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFJlZmVyZW5jZVswXS5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICBkZXNjcmliZU9iamVjdEZvckVycm9yTWVzc2FnZSh0aGlzLCBrZXkpXG4gICAgICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgOiBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICBcIk9ubHkgcGxhaW4gb2JqZWN0cyBjYW4gYmUgcGFzc2VkIHRvIFNlcnZlciBGdW5jdGlvbnMgZnJvbSB0aGUgQ2xpZW50LiBDbGFzc2VzIG9yIG90aGVyIG9iamVjdHMgd2l0aCBtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkLiVzXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaWJlT2JqZWN0Rm9yRXJyb3JNZXNzYWdlKHRoaXMsIGtleSlcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICBpZiAoXCJaXCIgPT09IHZhbHVlW3ZhbHVlLmxlbmd0aCAtIDFdICYmIHRoaXNba2V5XSBpbnN0YW5jZW9mIERhdGUpXG4gICAgICAgICAgICByZXR1cm4gXCIkRFwiICsgdmFsdWU7XG4gICAgICAgICAga2V5ID0gXCIkXCIgPT09IHZhbHVlWzBdID8gXCIkXCIgKyB2YWx1ZSA6IHZhbHVlO1xuICAgICAgICAgIHJldHVybiBrZXk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFwiYm9vbGVhblwiID09PSB0eXBlb2YgdmFsdWUpIHJldHVybiB2YWx1ZTtcbiAgICAgICAgaWYgKFwibnVtYmVyXCIgPT09IHR5cGVvZiB2YWx1ZSkgcmV0dXJuIHNlcmlhbGl6ZU51bWJlcih2YWx1ZSk7XG4gICAgICAgIGlmIChcInVuZGVmaW5lZFwiID09PSB0eXBlb2YgdmFsdWUpIHJldHVybiBcIiR1bmRlZmluZWRcIjtcbiAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgcGFyZW50UmVmZXJlbmNlID0ga25vd25TZXJ2ZXJSZWZlcmVuY2VzLmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHZvaWQgMCAhPT0gcGFyZW50UmVmZXJlbmNlKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKGtleSA9IEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgICAgIHsgaWQ6IHBhcmVudFJlZmVyZW5jZS5pZCwgYm91bmQ6IHBhcmVudFJlZmVyZW5jZS5ib3VuZCB9LFxuICAgICAgICAgICAgICAgIHJlc29sdmVUb0pTT05cbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIG51bGwgPT09IGZvcm1EYXRhICYmIChmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpKSxcbiAgICAgICAgICAgICAgKHBhcmVudFJlZmVyZW5jZSA9IG5leHRQYXJ0SWQrKyksXG4gICAgICAgICAgICAgIGZvcm1EYXRhLnNldChmb3JtRmllbGRQcmVmaXggKyBwYXJlbnRSZWZlcmVuY2UsIGtleSksXG4gICAgICAgICAgICAgIFwiJEZcIiArIHBhcmVudFJlZmVyZW5jZS50b1N0cmluZygxNilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdm9pZCAwICE9PSB0ZW1wb3JhcnlSZWZlcmVuY2VzICYmXG4gICAgICAgICAgICAtMSA9PT0ga2V5LmluZGV4T2YoXCI6XCIpICYmXG4gICAgICAgICAgICAoKHBhcmVudFJlZmVyZW5jZSA9IHdyaXR0ZW5PYmplY3RzLmdldCh0aGlzKSksXG4gICAgICAgICAgICB2b2lkIDAgIT09IHBhcmVudFJlZmVyZW5jZSlcbiAgICAgICAgICApXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICB0ZW1wb3JhcnlSZWZlcmVuY2VzLnNldChwYXJlbnRSZWZlcmVuY2UgKyBcIjpcIiArIGtleSwgdmFsdWUpLCBcIiRUXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcIkNsaWVudCBGdW5jdGlvbnMgY2Fubm90IGJlIHBhc3NlZCBkaXJlY3RseSB0byBTZXJ2ZXIgRnVuY3Rpb25zLiBPbmx5IEZ1bmN0aW9ucyBwYXNzZWQgZnJvbSB0aGUgU2VydmVyIGNhbiBiZSBwYXNzZWQgYmFjayBhZ2Fpbi5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFwic3ltYm9sXCIgPT09IHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHZvaWQgMCAhPT0gdGVtcG9yYXJ5UmVmZXJlbmNlcyAmJlxuICAgICAgICAgICAgLTEgPT09IGtleS5pbmRleE9mKFwiOlwiKSAmJlxuICAgICAgICAgICAgKChwYXJlbnRSZWZlcmVuY2UgPSB3cml0dGVuT2JqZWN0cy5nZXQodGhpcykpLFxuICAgICAgICAgICAgdm9pZCAwICE9PSBwYXJlbnRSZWZlcmVuY2UpXG4gICAgICAgICAgKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgdGVtcG9yYXJ5UmVmZXJlbmNlcy5zZXQocGFyZW50UmVmZXJlbmNlICsgXCI6XCIgKyBrZXksIHZhbHVlKSwgXCIkVFwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJTeW1ib2xzIGNhbm5vdCBiZSBwYXNzZWQgdG8gYSBTZXJ2ZXIgRnVuY3Rpb24gd2l0aG91dCBhIHRlbXBvcmFyeSByZWZlcmVuY2Ugc2V0LiBQYXNzIGEgVGVtcG9yYXJ5UmVmZXJlbmNlU2V0IHRvIHRoZSBvcHRpb25zLlwiICtcbiAgICAgICAgICAgICAgZGVzY3JpYmVPYmplY3RGb3JFcnJvck1lc3NhZ2UodGhpcywga2V5KVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFwiYmlnaW50XCIgPT09IHR5cGVvZiB2YWx1ZSkgcmV0dXJuIFwiJG5cIiArIHZhbHVlLnRvU3RyaW5nKDEwKTtcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJUeXBlIFwiICtcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSArXG4gICAgICAgICAgICBcIiBpcyBub3Qgc3VwcG9ydGVkIGFzIGFuIGFyZ3VtZW50IHRvIGEgU2VydmVyIEZ1bmN0aW9uLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBzZXJpYWxpemVNb2RlbChtb2RlbCwgaWQpIHtcbiAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIG1vZGVsICYmXG4gICAgICAgICAgbnVsbCAhPT0gbW9kZWwgJiZcbiAgICAgICAgICAoKGlkID0gXCIkXCIgKyBpZC50b1N0cmluZygxNikpLFxuICAgICAgICAgIHdyaXR0ZW5PYmplY3RzLnNldChtb2RlbCwgaWQpLFxuICAgICAgICAgIHZvaWQgMCAhPT0gdGVtcG9yYXJ5UmVmZXJlbmNlcyAmJiB0ZW1wb3JhcnlSZWZlcmVuY2VzLnNldChpZCwgbW9kZWwpKTtcbiAgICAgICAgbW9kZWxSb290ID0gbW9kZWw7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShtb2RlbCwgcmVzb2x2ZVRvSlNPTik7XG4gICAgICB9XG4gICAgICB2YXIgbmV4dFBhcnRJZCA9IDEsXG4gICAgICAgIHBlbmRpbmdQYXJ0cyA9IDAsXG4gICAgICAgIGZvcm1EYXRhID0gbnVsbCxcbiAgICAgICAgd3JpdHRlbk9iamVjdHMgPSBuZXcgV2Vha01hcCgpLFxuICAgICAgICBtb2RlbFJvb3QgPSByb290LFxuICAgICAgICBqc29uID0gc2VyaWFsaXplTW9kZWwocm9vdCwgMCk7XG4gICAgICBudWxsID09PSBmb3JtRGF0YVxuICAgICAgICA/IHJlc29sdmUoanNvbilcbiAgICAgICAgOiAoZm9ybURhdGEuc2V0KGZvcm1GaWVsZFByZWZpeCArIFwiMFwiLCBqc29uKSxcbiAgICAgICAgICAwID09PSBwZW5kaW5nUGFydHMgJiYgcmVzb2x2ZShmb3JtRGF0YSkpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgMCA8IHBlbmRpbmdQYXJ0cyAmJlxuICAgICAgICAgICgocGVuZGluZ1BhcnRzID0gMCksXG4gICAgICAgICAgbnVsbCA9PT0gZm9ybURhdGEgPyByZXNvbHZlKGpzb24pIDogcmVzb2x2ZShmb3JtRGF0YSkpO1xuICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRmFrZVNlcnZlckZ1bmN0aW9uKFxuICAgICAgbmFtZSxcbiAgICAgIGZpbGVuYW1lLFxuICAgICAgc291cmNlTWFwLFxuICAgICAgbGluZSxcbiAgICAgIGNvbCxcbiAgICAgIGVudmlyb25tZW50TmFtZSxcbiAgICAgIGlubmVyRnVuY3Rpb25cbiAgICApIHtcbiAgICAgIG5hbWUgfHwgKG5hbWUgPSBcIjxhbm9ueW1vdXM+XCIpO1xuICAgICAgdmFyIGVuY29kZWROYW1lID0gSlNPTi5zdHJpbmdpZnkobmFtZSk7XG4gICAgICAxID49IGxpbmVcbiAgICAgICAgPyAoKGxpbmUgPSBlbmNvZGVkTmFtZS5sZW5ndGggKyA3KSxcbiAgICAgICAgICAoY29sID1cbiAgICAgICAgICAgIFwicz0+KHtcIiArXG4gICAgICAgICAgICBlbmNvZGVkTmFtZSArXG4gICAgICAgICAgICBcIiBcIi5yZXBlYXQoY29sIDwgbGluZSA/IDAgOiBjb2wgLSBsaW5lKSArXG4gICAgICAgICAgICBcIjooLi4uYXJncykgPT4gcyguLi5hcmdzKX0pXFxuLyogVGhpcyBtb2R1bGUgaXMgYSBwcm94eSB0byBhIFNlcnZlciBBY3Rpb24uIFR1cm4gb24gU291cmNlIE1hcHMgdG8gc2VlIHRoZSBzZXJ2ZXIgc291cmNlLiAqL1wiKSlcbiAgICAgICAgOiAoY29sID1cbiAgICAgICAgICAgIFwiLyogVGhpcyBtb2R1bGUgaXMgYSBwcm94eSB0byBhIFNlcnZlciBBY3Rpb24uIFR1cm4gb24gU291cmNlIE1hcHMgdG8gc2VlIHRoZSBzZXJ2ZXIgc291cmNlLiAqL1wiICtcbiAgICAgICAgICAgIFwiXFxuXCIucmVwZWF0KGxpbmUgLSAyKSArXG4gICAgICAgICAgICBcInNlcnZlcj0+KHtcIiArXG4gICAgICAgICAgICBlbmNvZGVkTmFtZSArXG4gICAgICAgICAgICBcIjpcXG5cIiArXG4gICAgICAgICAgICBcIiBcIi5yZXBlYXQoMSA+IGNvbCA/IDAgOiBjb2wgLSAxKSArXG4gICAgICAgICAgICBcIiguLi5hcmdzKSA9PiBzZXJ2ZXIoLi4uYXJncyl9KVwiKTtcbiAgICAgIGZpbGVuYW1lLnN0YXJ0c1dpdGgoXCIvXCIpICYmIChmaWxlbmFtZSA9IFwiZmlsZTovL1wiICsgZmlsZW5hbWUpO1xuICAgICAgc291cmNlTWFwXG4gICAgICAgID8gKChjb2wgKz1cbiAgICAgICAgICAgIFwiXFxuLy8jIHNvdXJjZVVSTD1yc2M6Ly9SZWFjdC9cIiArXG4gICAgICAgICAgICBlbmNvZGVVUklDb21wb25lbnQoZW52aXJvbm1lbnROYW1lKSArXG4gICAgICAgICAgICBcIi9cIiArXG4gICAgICAgICAgICBlbmNvZGVVUkkoZmlsZW5hbWUpICtcbiAgICAgICAgICAgIFwiP3NcIiArXG4gICAgICAgICAgICBmYWtlU2VydmVyRnVuY3Rpb25JZHgrKyksXG4gICAgICAgICAgKGNvbCArPSBcIlxcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVwiICsgc291cmNlTWFwKSlcbiAgICAgICAgOiBmaWxlbmFtZSAmJiAoY29sICs9IFwiXFxuLy8jIHNvdXJjZVVSTD1cIiArIGZpbGVuYW1lKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiAoMCwgZXZhbCkoY29sKShpbm5lckZ1bmN0aW9uKVtuYW1lXTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgcmV0dXJuIGlubmVyRnVuY3Rpb247XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlZ2lzdGVyQm91bmRTZXJ2ZXJSZWZlcmVuY2UocmVmZXJlbmNlLCBpZCwgYm91bmQpIHtcbiAgICAgIGtub3duU2VydmVyUmVmZXJlbmNlcy5oYXMocmVmZXJlbmNlKSB8fFxuICAgICAgICBrbm93blNlcnZlclJlZmVyZW5jZXMuc2V0KHJlZmVyZW5jZSwge1xuICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICBvcmlnaW5hbEJpbmQ6IHJlZmVyZW5jZS5iaW5kLFxuICAgICAgICAgIGJvdW5kOiBib3VuZFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQm91bmRTZXJ2ZXJSZWZlcmVuY2UoXG4gICAgICBtZXRhRGF0YSxcbiAgICAgIGNhbGxTZXJ2ZXIsXG4gICAgICBlbmNvZGVGb3JtQWN0aW9uLFxuICAgICAgZmluZFNvdXJjZU1hcFVSTFxuICAgICkge1xuICAgICAgZnVuY3Rpb24gYWN0aW9uKCkge1xuICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgIHJldHVybiBib3VuZFxuICAgICAgICAgID8gXCJmdWxmaWxsZWRcIiA9PT0gYm91bmQuc3RhdHVzXG4gICAgICAgICAgICA/IGNhbGxTZXJ2ZXIoaWQsIGJvdW5kLnZhbHVlLmNvbmNhdChhcmdzKSlcbiAgICAgICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKGJvdW5kKS50aGVuKGZ1bmN0aW9uIChib3VuZEFyZ3MpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbFNlcnZlcihpZCwgYm91bmRBcmdzLmNvbmNhdChhcmdzKSk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBjYWxsU2VydmVyKGlkLCBhcmdzKTtcbiAgICAgIH1cbiAgICAgIHZhciBpZCA9IG1ldGFEYXRhLmlkLFxuICAgICAgICBib3VuZCA9IG1ldGFEYXRhLmJvdW5kLFxuICAgICAgICBsb2NhdGlvbiA9IG1ldGFEYXRhLmxvY2F0aW9uO1xuICAgICAgaWYgKGxvY2F0aW9uKSB7XG4gICAgICAgIGVuY29kZUZvcm1BY3Rpb24gPSBtZXRhRGF0YS5uYW1lIHx8IFwiXCI7XG4gICAgICAgIHZhciBmaWxlbmFtZSA9IGxvY2F0aW9uWzFdLFxuICAgICAgICAgIGxpbmUgPSBsb2NhdGlvblsyXTtcbiAgICAgICAgbG9jYXRpb24gPSBsb2NhdGlvblszXTtcbiAgICAgICAgbWV0YURhdGEgPSBtZXRhRGF0YS5lbnYgfHwgXCJTZXJ2ZXJcIjtcbiAgICAgICAgZmluZFNvdXJjZU1hcFVSTCA9XG4gICAgICAgICAgbnVsbCA9PSBmaW5kU291cmNlTWFwVVJMXG4gICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgIDogZmluZFNvdXJjZU1hcFVSTChmaWxlbmFtZSwgbWV0YURhdGEpO1xuICAgICAgICBhY3Rpb24gPSBjcmVhdGVGYWtlU2VydmVyRnVuY3Rpb24oXG4gICAgICAgICAgZW5jb2RlRm9ybUFjdGlvbixcbiAgICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgICBmaW5kU291cmNlTWFwVVJMLFxuICAgICAgICAgIGxpbmUsXG4gICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgbWV0YURhdGEsXG4gICAgICAgICAgYWN0aW9uXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZWdpc3RlckJvdW5kU2VydmVyUmVmZXJlbmNlKGFjdGlvbiwgaWQsIGJvdW5kKTtcbiAgICAgIHJldHVybiBhY3Rpb247XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlU3RhY2tMb2NhdGlvbihlcnJvcikge1xuICAgICAgZXJyb3IgPSBlcnJvci5zdGFjaztcbiAgICAgIGVycm9yLnN0YXJ0c1dpdGgoXCJFcnJvcjogcmVhY3Qtc3RhY2stdG9wLWZyYW1lXFxuXCIpICYmXG4gICAgICAgIChlcnJvciA9IGVycm9yLnNsaWNlKDI5KSk7XG4gICAgICB2YXIgZW5kT2ZGaXJzdCA9IGVycm9yLmluZGV4T2YoXCJcXG5cIik7XG4gICAgICBpZiAoLTEgIT09IGVuZE9mRmlyc3QpIHtcbiAgICAgICAgdmFyIGVuZE9mU2Vjb25kID0gZXJyb3IuaW5kZXhPZihcIlxcblwiLCBlbmRPZkZpcnN0ICsgMSk7XG4gICAgICAgIGVuZE9mRmlyc3QgPVxuICAgICAgICAgIC0xID09PSBlbmRPZlNlY29uZFxuICAgICAgICAgICAgPyBlcnJvci5zbGljZShlbmRPZkZpcnN0ICsgMSlcbiAgICAgICAgICAgIDogZXJyb3Iuc2xpY2UoZW5kT2ZGaXJzdCArIDEsIGVuZE9mU2Vjb25kKTtcbiAgICAgIH0gZWxzZSBlbmRPZkZpcnN0ID0gZXJyb3I7XG4gICAgICBlcnJvciA9IHY4RnJhbWVSZWdFeHAuZXhlYyhlbmRPZkZpcnN0KTtcbiAgICAgIGlmIChcbiAgICAgICAgIWVycm9yICYmXG4gICAgICAgICgoZXJyb3IgPSBqc2NTcGlkZXJNb25rZXlGcmFtZVJlZ0V4cC5leGVjKGVuZE9mRmlyc3QpKSwgIWVycm9yKVxuICAgICAgKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIGVuZE9mRmlyc3QgPSBlcnJvclsxXSB8fCBcIlwiO1xuICAgICAgXCI8YW5vbnltb3VzPlwiID09PSBlbmRPZkZpcnN0ICYmIChlbmRPZkZpcnN0ID0gXCJcIik7XG4gICAgICBlbmRPZlNlY29uZCA9IGVycm9yWzJdIHx8IGVycm9yWzVdIHx8IFwiXCI7XG4gICAgICBcIjxhbm9ueW1vdXM+XCIgPT09IGVuZE9mU2Vjb25kICYmIChlbmRPZlNlY29uZCA9IFwiXCIpO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgZW5kT2ZGaXJzdCxcbiAgICAgICAgZW5kT2ZTZWNvbmQsXG4gICAgICAgICsoZXJyb3JbM10gfHwgZXJyb3JbNl0pLFxuICAgICAgICArKGVycm9yWzRdIHx8IGVycm9yWzddKVxuICAgICAgXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpIHtcbiAgICAgIGlmIChudWxsID09IHR5cGUpIHJldHVybiBudWxsO1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHR5cGUpXG4gICAgICAgIHJldHVybiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DTElFTlRfUkVGRVJFTkNFXG4gICAgICAgICAgPyBudWxsXG4gICAgICAgICAgOiB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBudWxsO1xuICAgICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiB0eXBlKSByZXR1cm4gdHlwZTtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiRnJhZ21lbnRcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlByb2ZpbGVyXCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJTdHJpY3RNb2RlXCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJTdXNwZW5zZVwiO1xuICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJTdXNwZW5zZUxpc3RcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9BQ1RJVklUWV9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIkFjdGl2aXR5XCI7XG4gICAgICB9XG4gICAgICBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIHR5cGUpXG4gICAgICAgIHN3aXRjaCAoXG4gICAgICAgICAgKFwibnVtYmVyXCIgPT09IHR5cGVvZiB0eXBlLnRhZyAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJSZWNlaXZlZCBhbiB1bmV4cGVjdGVkIG9iamVjdCBpbiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoKS4gVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICApLFxuICAgICAgICAgIHR5cGUuJCR0eXBlb2YpXG4gICAgICAgICkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gXCJQb3J0YWxcIjtcbiAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8IFwiQ29udGV4dFwiO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OU1VNRVJfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAodHlwZS5fY29udGV4dC5kaXNwbGF5TmFtZSB8fCBcIkNvbnRleHRcIikgKyBcIi5Db25zdW1lclwiO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgIHZhciBpbm5lclR5cGUgPSB0eXBlLnJlbmRlcjtcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlLmRpc3BsYXlOYW1lO1xuICAgICAgICAgICAgdHlwZSB8fFxuICAgICAgICAgICAgICAoKHR5cGUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgXCJcIiksXG4gICAgICAgICAgICAgICh0eXBlID0gXCJcIiAhPT0gdHlwZSA/IFwiRm9yd2FyZFJlZihcIiArIHR5cGUgKyBcIilcIiA6IFwiRm9yd2FyZFJlZlwiKSk7XG4gICAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChpbm5lclR5cGUgPSB0eXBlLmRpc3BsYXlOYW1lIHx8IG51bGwpLFxuICAgICAgICAgICAgICBudWxsICE9PSBpbm5lclR5cGVcbiAgICAgICAgICAgICAgICA/IGlubmVyVHlwZVxuICAgICAgICAgICAgICAgIDogZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUudHlwZSkgfHwgXCJNZW1vXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICBpbm5lclR5cGUgPSB0eXBlLl9wYXlsb2FkO1xuICAgICAgICAgICAgdHlwZSA9IHR5cGUuX2luaXQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUoaW5uZXJUeXBlKSk7XG4gICAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gUmVhY3RQcm9taXNlKHN0YXR1cywgdmFsdWUsIHJlYXNvbikge1xuICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLnJlYXNvbiA9IHJlYXNvbjtcbiAgICAgIHRoaXMuX2RlYnVnSW5mbyA9IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVud3JhcFdlYWtSZXNwb25zZSh3ZWFrUmVzcG9uc2UpIHtcbiAgICAgIHdlYWtSZXNwb25zZSA9IHdlYWtSZXNwb25zZS53ZWFrLmRlcmVmKCk7XG4gICAgICBpZiAodm9pZCAwID09PSB3ZWFrUmVzcG9uc2UpXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiV2UgZGlkIG5vdCBleHBlY3QgdG8gcmVjZWl2ZSBuZXcgZGF0YSBhZnRlciBHQzppbmcgdGhlIHJlc3BvbnNlLlwiXG4gICAgICAgICk7XG4gICAgICByZXR1cm4gd2Vha1Jlc3BvbnNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjbGVhbnVwRGVidWdDaGFubmVsKGRlYnVnQ2hhbm5lbCkge1xuICAgICAgZGVidWdDaGFubmVsKFwiXCIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkQ2h1bmsoY2h1bmspIHtcbiAgICAgIHN3aXRjaCAoY2h1bmsuc3RhdHVzKSB7XG4gICAgICAgIGNhc2UgXCJyZXNvbHZlZF9tb2RlbFwiOlxuICAgICAgICAgIGluaXRpYWxpemVNb2RlbENodW5rKGNodW5rKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInJlc29sdmVkX21vZHVsZVwiOlxuICAgICAgICAgIGluaXRpYWxpemVNb2R1bGVDaHVuayhjaHVuayk7XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKGNodW5rLnN0YXR1cykge1xuICAgICAgICBjYXNlIFwiZnVsZmlsbGVkXCI6XG4gICAgICAgICAgcmV0dXJuIGNodW5rLnZhbHVlO1xuICAgICAgICBjYXNlIFwicGVuZGluZ1wiOlxuICAgICAgICBjYXNlIFwiYmxvY2tlZFwiOlxuICAgICAgICBjYXNlIFwiaGFsdGVkXCI6XG4gICAgICAgICAgdGhyb3cgY2h1bms7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgY2h1bmsucmVhc29uO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRSb290KHdlYWtSZXNwb25zZSkge1xuICAgICAgd2Vha1Jlc3BvbnNlID0gdW53cmFwV2Vha1Jlc3BvbnNlKHdlYWtSZXNwb25zZSk7XG4gICAgICByZXR1cm4gZ2V0Q2h1bmsod2Vha1Jlc3BvbnNlLCAwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlUGVuZGluZ0NodW5rKHJlc3BvbnNlKSB7XG4gICAgICAwID09PSByZXNwb25zZS5fcGVuZGluZ0NodW5rcysrICYmXG4gICAgICAgICgocmVzcG9uc2UuX3dlYWtSZXNwb25zZS5yZXNwb25zZSA9IHJlc3BvbnNlKSxcbiAgICAgICAgbnVsbCAhPT0gcmVzcG9uc2UuX3BlbmRpbmdJbml0aWFsUmVuZGVyICYmXG4gICAgICAgICAgKGNsZWFyVGltZW91dChyZXNwb25zZS5fcGVuZGluZ0luaXRpYWxSZW5kZXIpLFxuICAgICAgICAgIChyZXNwb25zZS5fcGVuZGluZ0luaXRpYWxSZW5kZXIgPSBudWxsKSkpO1xuICAgICAgcmV0dXJuIG5ldyBSZWFjdFByb21pc2UoXCJwZW5kaW5nXCIsIG51bGwsIG51bGwpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWxlYXNlUGVuZGluZ0NodW5rKHJlc3BvbnNlLCBjaHVuaykge1xuICAgICAgXCJwZW5kaW5nXCIgPT09IGNodW5rLnN0YXR1cyAmJlxuICAgICAgICAwID09PSAtLXJlc3BvbnNlLl9wZW5kaW5nQ2h1bmtzICYmXG4gICAgICAgICgocmVzcG9uc2UuX3dlYWtSZXNwb25zZS5yZXNwb25zZSA9IG51bGwpLFxuICAgICAgICAocmVzcG9uc2UuX3BlbmRpbmdJbml0aWFsUmVuZGVyID0gc2V0VGltZW91dChcbiAgICAgICAgICBmbHVzaEluaXRpYWxSZW5kZXJQZXJmb3JtYW5jZS5iaW5kKG51bGwsIHJlc3BvbnNlKSxcbiAgICAgICAgICAxMDBcbiAgICAgICAgKSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3YWtlQ2h1bmsobGlzdGVuZXJzLCB2YWx1ZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGxpc3RlbmVyID0gbGlzdGVuZXJzW2ldO1xuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBsaXN0ZW5lclxuICAgICAgICAgID8gbGlzdGVuZXIodmFsdWUpXG4gICAgICAgICAgOiBmdWxmaWxsUmVmZXJlbmNlKGxpc3RlbmVyLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlamVjdENodW5rKGxpc3RlbmVycywgZXJyb3IpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBsaXN0ZW5lciA9IGxpc3RlbmVyc1tpXTtcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbGlzdGVuZXJcbiAgICAgICAgICA/IGxpc3RlbmVyKGVycm9yKVxuICAgICAgICAgIDogcmVqZWN0UmVmZXJlbmNlKGxpc3RlbmVyLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc29sdmVCbG9ja2VkQ3ljbGUocmVzb2x2ZWRDaHVuaywgcmVmZXJlbmNlKSB7XG4gICAgICB2YXIgcmVmZXJlbmNlZENodW5rID0gcmVmZXJlbmNlLmhhbmRsZXIuY2h1bms7XG4gICAgICBpZiAobnVsbCA9PT0gcmVmZXJlbmNlZENodW5rKSByZXR1cm4gbnVsbDtcbiAgICAgIGlmIChyZWZlcmVuY2VkQ2h1bmsgPT09IHJlc29sdmVkQ2h1bmspIHJldHVybiByZWZlcmVuY2UuaGFuZGxlcjtcbiAgICAgIHJlZmVyZW5jZSA9IHJlZmVyZW5jZWRDaHVuay52YWx1ZTtcbiAgICAgIGlmIChudWxsICE9PSByZWZlcmVuY2UpXG4gICAgICAgIGZvciAoXG4gICAgICAgICAgcmVmZXJlbmNlZENodW5rID0gMDtcbiAgICAgICAgICByZWZlcmVuY2VkQ2h1bmsgPCByZWZlcmVuY2UubGVuZ3RoO1xuICAgICAgICAgIHJlZmVyZW5jZWRDaHVuaysrXG4gICAgICAgICkge1xuICAgICAgICAgIHZhciBsaXN0ZW5lciA9IHJlZmVyZW5jZVtyZWZlcmVuY2VkQ2h1bmtdO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGxpc3RlbmVyICYmXG4gICAgICAgICAgICAoKGxpc3RlbmVyID0gcmVzb2x2ZUJsb2NrZWRDeWNsZShyZXNvbHZlZENodW5rLCBsaXN0ZW5lcikpLFxuICAgICAgICAgICAgbnVsbCAhPT0gbGlzdGVuZXIpXG4gICAgICAgICAgKVxuICAgICAgICAgICAgcmV0dXJuIGxpc3RlbmVyO1xuICAgICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2FrZUNodW5rSWZJbml0aWFsaXplZChjaHVuaywgcmVzb2x2ZUxpc3RlbmVycywgcmVqZWN0TGlzdGVuZXJzKSB7XG4gICAgICBzd2l0Y2ggKGNodW5rLnN0YXR1cykge1xuICAgICAgICBjYXNlIFwiZnVsZmlsbGVkXCI6XG4gICAgICAgICAgd2FrZUNodW5rKHJlc29sdmVMaXN0ZW5lcnMsIGNodW5rLnZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImJsb2NrZWRcIjpcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc29sdmVMaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IHJlc29sdmVMaXN0ZW5lcnNbaV07XG4gICAgICAgICAgICBpZiAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgbGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgdmFyIGN5Y2xpY0hhbmRsZXIgPSByZXNvbHZlQmxvY2tlZEN5Y2xlKGNodW5rLCBsaXN0ZW5lcik7XG4gICAgICAgICAgICAgIG51bGwgIT09IGN5Y2xpY0hhbmRsZXIgJiZcbiAgICAgICAgICAgICAgICAoZnVsZmlsbFJlZmVyZW5jZShsaXN0ZW5lciwgY3ljbGljSGFuZGxlci52YWx1ZSksXG4gICAgICAgICAgICAgICAgcmVzb2x2ZUxpc3RlbmVycy5zcGxpY2UoaSwgMSksXG4gICAgICAgICAgICAgICAgaS0tLFxuICAgICAgICAgICAgICAgIG51bGwgIT09IHJlamVjdExpc3RlbmVycyAmJlxuICAgICAgICAgICAgICAgICAgKChsaXN0ZW5lciA9IHJlamVjdExpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKSksXG4gICAgICAgICAgICAgICAgICAtMSAhPT0gbGlzdGVuZXIgJiYgcmVqZWN0TGlzdGVuZXJzLnNwbGljZShsaXN0ZW5lciwgMSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJwZW5kaW5nXCI6XG4gICAgICAgICAgaWYgKGNodW5rLnZhbHVlKVxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlc29sdmVMaXN0ZW5lcnMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgIGNodW5rLnZhbHVlLnB1c2gocmVzb2x2ZUxpc3RlbmVyc1tpXSk7XG4gICAgICAgICAgZWxzZSBjaHVuay52YWx1ZSA9IHJlc29sdmVMaXN0ZW5lcnM7XG4gICAgICAgICAgaWYgKGNodW5rLnJlYXNvbikge1xuICAgICAgICAgICAgaWYgKHJlamVjdExpc3RlbmVycylcbiAgICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICByZXNvbHZlTGlzdGVuZXJzID0gMDtcbiAgICAgICAgICAgICAgICByZXNvbHZlTGlzdGVuZXJzIDwgcmVqZWN0TGlzdGVuZXJzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICByZXNvbHZlTGlzdGVuZXJzKytcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGNodW5rLnJlYXNvbi5wdXNoKHJlamVjdExpc3RlbmVyc1tyZXNvbHZlTGlzdGVuZXJzXSk7XG4gICAgICAgICAgfSBlbHNlIGNodW5rLnJlYXNvbiA9IHJlamVjdExpc3RlbmVycztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInJlamVjdGVkXCI6XG4gICAgICAgICAgcmVqZWN0TGlzdGVuZXJzICYmIHJlamVjdENodW5rKHJlamVjdExpc3RlbmVycywgY2h1bmsucmVhc29uKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdHJpZ2dlckVycm9yT25DaHVuayhyZXNwb25zZSwgY2h1bmssIGVycm9yKSB7XG4gICAgICBcInBlbmRpbmdcIiAhPT0gY2h1bmsuc3RhdHVzICYmIFwiYmxvY2tlZFwiICE9PSBjaHVuay5zdGF0dXNcbiAgICAgICAgPyBjaHVuay5yZWFzb24uZXJyb3IoZXJyb3IpXG4gICAgICAgIDogKHJlbGVhc2VQZW5kaW5nQ2h1bmsocmVzcG9uc2UsIGNodW5rKSxcbiAgICAgICAgICAocmVzcG9uc2UgPSBjaHVuay5yZWFzb24pLFxuICAgICAgICAgIChjaHVuay5zdGF0dXMgPSBcInJlamVjdGVkXCIpLFxuICAgICAgICAgIChjaHVuay5yZWFzb24gPSBlcnJvciksXG4gICAgICAgICAgbnVsbCAhPT0gcmVzcG9uc2UgJiYgcmVqZWN0Q2h1bmsocmVzcG9uc2UsIGVycm9yKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZVJlc29sdmVkSXRlcmF0b3JSZXN1bHRDaHVuayhyZXNwb25zZSwgdmFsdWUsIGRvbmUpIHtcbiAgICAgIHJldHVybiBuZXcgUmVhY3RQcm9taXNlKFxuICAgICAgICBcInJlc29sdmVkX21vZGVsXCIsXG4gICAgICAgIChkb25lID8gJ3tcImRvbmVcIjp0cnVlLFwidmFsdWVcIjonIDogJ3tcImRvbmVcIjpmYWxzZSxcInZhbHVlXCI6JykgK1xuICAgICAgICAgIHZhbHVlICtcbiAgICAgICAgICBcIn1cIixcbiAgICAgICAgcmVzcG9uc2VcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc29sdmVJdGVyYXRvclJlc3VsdENodW5rKHJlc3BvbnNlLCBjaHVuaywgdmFsdWUsIGRvbmUpIHtcbiAgICAgIHJlc29sdmVNb2RlbENodW5rKFxuICAgICAgICByZXNwb25zZSxcbiAgICAgICAgY2h1bmssXG4gICAgICAgIChkb25lID8gJ3tcImRvbmVcIjp0cnVlLFwidmFsdWVcIjonIDogJ3tcImRvbmVcIjpmYWxzZSxcInZhbHVlXCI6JykgK1xuICAgICAgICAgIHZhbHVlICtcbiAgICAgICAgICBcIn1cIlxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZU1vZGVsQ2h1bmsocmVzcG9uc2UsIGNodW5rLCB2YWx1ZSkge1xuICAgICAgaWYgKFwicGVuZGluZ1wiICE9PSBjaHVuay5zdGF0dXMpIGNodW5rLnJlYXNvbi5lbnF1ZXVlTW9kZWwodmFsdWUpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHJlbGVhc2VQZW5kaW5nQ2h1bmsocmVzcG9uc2UsIGNodW5rKTtcbiAgICAgICAgdmFyIHJlc29sdmVMaXN0ZW5lcnMgPSBjaHVuay52YWx1ZSxcbiAgICAgICAgICByZWplY3RMaXN0ZW5lcnMgPSBjaHVuay5yZWFzb247XG4gICAgICAgIGNodW5rLnN0YXR1cyA9IFwicmVzb2x2ZWRfbW9kZWxcIjtcbiAgICAgICAgY2h1bmsudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgY2h1bmsucmVhc29uID0gcmVzcG9uc2U7XG4gICAgICAgIG51bGwgIT09IHJlc29sdmVMaXN0ZW5lcnMgJiZcbiAgICAgICAgICAoaW5pdGlhbGl6ZU1vZGVsQ2h1bmsoY2h1bmspLFxuICAgICAgICAgIHdha2VDaHVua0lmSW5pdGlhbGl6ZWQoY2h1bmssIHJlc29sdmVMaXN0ZW5lcnMsIHJlamVjdExpc3RlbmVycykpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlTW9kdWxlQ2h1bmsocmVzcG9uc2UsIGNodW5rLCB2YWx1ZSkge1xuICAgICAgaWYgKFwicGVuZGluZ1wiID09PSBjaHVuay5zdGF0dXMgfHwgXCJibG9ja2VkXCIgPT09IGNodW5rLnN0YXR1cykge1xuICAgICAgICByZWxlYXNlUGVuZGluZ0NodW5rKHJlc3BvbnNlLCBjaHVuayk7XG4gICAgICAgIHJlc3BvbnNlID0gY2h1bmsudmFsdWU7XG4gICAgICAgIHZhciByZWplY3RMaXN0ZW5lcnMgPSBjaHVuay5yZWFzb247XG4gICAgICAgIGNodW5rLnN0YXR1cyA9IFwicmVzb2x2ZWRfbW9kdWxlXCI7XG4gICAgICAgIGNodW5rLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIG51bGwgIT09IHJlc3BvbnNlICYmXG4gICAgICAgICAgKGluaXRpYWxpemVNb2R1bGVDaHVuayhjaHVuayksXG4gICAgICAgICAgd2FrZUNodW5rSWZJbml0aWFsaXplZChjaHVuaywgcmVzcG9uc2UsIHJlamVjdExpc3RlbmVycykpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpbml0aWFsaXplTW9kZWxDaHVuayhjaHVuaykge1xuICAgICAgdmFyIHByZXZIYW5kbGVyID0gaW5pdGlhbGl6aW5nSGFuZGxlcjtcbiAgICAgIGluaXRpYWxpemluZ0hhbmRsZXIgPSBudWxsO1xuICAgICAgdmFyIHJlc29sdmVkTW9kZWwgPSBjaHVuay52YWx1ZSxcbiAgICAgICAgcmVzcG9uc2UgPSBjaHVuay5yZWFzb247XG4gICAgICBjaHVuay5zdGF0dXMgPSBcImJsb2NrZWRcIjtcbiAgICAgIGNodW5rLnZhbHVlID0gbnVsbDtcbiAgICAgIGNodW5rLnJlYXNvbiA9IG51bGw7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgdmFsdWUgPSBKU09OLnBhcnNlKHJlc29sdmVkTW9kZWwsIHJlc3BvbnNlLl9mcm9tSlNPTiksXG4gICAgICAgICAgcmVzb2x2ZUxpc3RlbmVycyA9IGNodW5rLnZhbHVlO1xuICAgICAgICBudWxsICE9PSByZXNvbHZlTGlzdGVuZXJzICYmXG4gICAgICAgICAgKChjaHVuay52YWx1ZSA9IG51bGwpLFxuICAgICAgICAgIChjaHVuay5yZWFzb24gPSBudWxsKSxcbiAgICAgICAgICB3YWtlQ2h1bmsocmVzb2x2ZUxpc3RlbmVycywgdmFsdWUpKTtcbiAgICAgICAgaWYgKG51bGwgIT09IGluaXRpYWxpemluZ0hhbmRsZXIpIHtcbiAgICAgICAgICBpZiAoaW5pdGlhbGl6aW5nSGFuZGxlci5lcnJvcmVkKSB0aHJvdyBpbml0aWFsaXppbmdIYW5kbGVyLnZhbHVlO1xuICAgICAgICAgIGlmICgwIDwgaW5pdGlhbGl6aW5nSGFuZGxlci5kZXBzKSB7XG4gICAgICAgICAgICBpbml0aWFsaXppbmdIYW5kbGVyLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICBpbml0aWFsaXppbmdIYW5kbGVyLmNodW5rID0gY2h1bms7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNodW5rLnN0YXR1cyA9IFwiZnVsZmlsbGVkXCI7XG4gICAgICAgIGNodW5rLnZhbHVlID0gdmFsdWU7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAoY2h1bmsuc3RhdHVzID0gXCJyZWplY3RlZFwiKSwgKGNodW5rLnJlYXNvbiA9IGVycm9yKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGluaXRpYWxpemluZ0hhbmRsZXIgPSBwcmV2SGFuZGxlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaW5pdGlhbGl6ZU1vZHVsZUNodW5rKGNodW5rKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgdmFsdWUgPSByZXF1aXJlTW9kdWxlKGNodW5rLnZhbHVlKTtcbiAgICAgICAgY2h1bmsuc3RhdHVzID0gXCJmdWxmaWxsZWRcIjtcbiAgICAgICAgY2h1bmsudmFsdWUgPSB2YWx1ZTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIChjaHVuay5zdGF0dXMgPSBcInJlamVjdGVkXCIpLCAoY2h1bmsucmVhc29uID0gZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZXBvcnRHbG9iYWxFcnJvcih3ZWFrUmVzcG9uc2UsIGVycm9yKSB7XG4gICAgICBpZiAodm9pZCAwICE9PSB3ZWFrUmVzcG9uc2Uud2Vhay5kZXJlZigpKSB7XG4gICAgICAgIHZhciByZXNwb25zZSA9IHVud3JhcFdlYWtSZXNwb25zZSh3ZWFrUmVzcG9uc2UpO1xuICAgICAgICByZXNwb25zZS5fY2xvc2VkID0gITA7XG4gICAgICAgIHJlc3BvbnNlLl9jbG9zZWRSZWFzb24gPSBlcnJvcjtcbiAgICAgICAgcmVzcG9uc2UuX2NodW5rcy5mb3JFYWNoKGZ1bmN0aW9uIChjaHVuaykge1xuICAgICAgICAgIFwicGVuZGluZ1wiID09PSBjaHVuay5zdGF0dXMgJiZcbiAgICAgICAgICAgIHRyaWdnZXJFcnJvck9uQ2h1bmsocmVzcG9uc2UsIGNodW5rLCBlcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgICB3ZWFrUmVzcG9uc2UgPSByZXNwb25zZS5fZGVidWdDaGFubmVsO1xuICAgICAgICB2b2lkIDAgIT09IHdlYWtSZXNwb25zZSAmJlxuICAgICAgICAgICh3ZWFrUmVzcG9uc2UoXCJcIiksIChyZXNwb25zZS5fZGVidWdDaGFubmVsID0gdm9pZCAwKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIG51bGxSZWZHZXR0ZXIoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0VGFza05hbWUodHlwZSkge1xuICAgICAgaWYgKHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHJldHVybiBcIjw+XCI7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdHlwZSkgcmV0dXJuICdcInVzZSBjbGllbnRcIic7XG4gICAgICBpZiAoXG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiB0eXBlICYmXG4gICAgICAgIG51bGwgIT09IHR5cGUgJiZcbiAgICAgICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFXG4gICAgICApXG4gICAgICAgIHJldHVybiB0eXBlLl9pbml0ID09PSByZWFkQ2h1bmsgPyAnXCJ1c2UgY2xpZW50XCInIDogXCI8Li4uPlwiO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSk7XG4gICAgICAgIHJldHVybiBuYW1lID8gXCI8XCIgKyBuYW1lICsgXCI+XCIgOiBcIjwuLi4+XCI7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIHJldHVybiBcIjwuLi4+XCI7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluaXRpYWxpemVFbGVtZW50KHJlc3BvbnNlLCBlbGVtZW50KSB7XG4gICAgICB2YXIgc3RhY2sgPSBlbGVtZW50Ll9kZWJ1Z1N0YWNrLFxuICAgICAgICBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgbnVsbCA9PT0gb3duZXIgJiYgKGVsZW1lbnQuX293bmVyID0gcmVzcG9uc2UuX2RlYnVnUm9vdE93bmVyKTtcbiAgICAgIHZhciBlbnYgPSByZXNwb25zZS5fcm9vdEVudmlyb25tZW50TmFtZTtcbiAgICAgIG51bGwgIT09IG93bmVyICYmIG51bGwgIT0gb3duZXIuZW52ICYmIChlbnYgPSBvd25lci5lbnYpO1xuICAgICAgdmFyIG5vcm1hbGl6ZWRTdGFja1RyYWNlID0gbnVsbDtcbiAgICAgIG51bGwgPT09IG93bmVyICYmIG51bGwgIT0gcmVzcG9uc2UuX2RlYnVnUm9vdFN0YWNrXG4gICAgICAgID8gKG5vcm1hbGl6ZWRTdGFja1RyYWNlID0gcmVzcG9uc2UuX2RlYnVnUm9vdFN0YWNrKVxuICAgICAgICA6IG51bGwgIT09IHN0YWNrICYmXG4gICAgICAgICAgKG5vcm1hbGl6ZWRTdGFja1RyYWNlID0gY3JlYXRlRmFrZUpTWENhbGxTdGFja0luREVWKFxuICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICBzdGFjayxcbiAgICAgICAgICAgIGVudlxuICAgICAgICAgICkpO1xuICAgICAgZWxlbWVudC5fZGVidWdTdGFjayA9IG5vcm1hbGl6ZWRTdGFja1RyYWNlO1xuICAgICAgbm9ybWFsaXplZFN0YWNrVHJhY2UgPSBudWxsO1xuICAgICAgc3VwcG9ydHNDcmVhdGVUYXNrICYmXG4gICAgICAgIG51bGwgIT09IHN0YWNrICYmXG4gICAgICAgICgobm9ybWFsaXplZFN0YWNrVHJhY2UgPSBjb25zb2xlLmNyZWF0ZVRhc2suYmluZChcbiAgICAgICAgICBjb25zb2xlLFxuICAgICAgICAgIGdldFRhc2tOYW1lKGVsZW1lbnQudHlwZSlcbiAgICAgICAgKSksXG4gICAgICAgIChzdGFjayA9IGJ1aWxkRmFrZUNhbGxTdGFjayhcbiAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICBzdGFjayxcbiAgICAgICAgICBlbnYsXG4gICAgICAgICAgITEsXG4gICAgICAgICAgbm9ybWFsaXplZFN0YWNrVHJhY2VcbiAgICAgICAgKSksXG4gICAgICAgIChlbnYgPSBudWxsID09PSBvd25lciA/IG51bGwgOiBpbml0aWFsaXplRmFrZVRhc2socmVzcG9uc2UsIG93bmVyKSksXG4gICAgICAgIG51bGwgPT09IGVudlxuICAgICAgICAgID8gKChlbnYgPSByZXNwb25zZS5fZGVidWdSb290VGFzayksXG4gICAgICAgICAgICAobm9ybWFsaXplZFN0YWNrVHJhY2UgPSBudWxsICE9IGVudiA/IGVudi5ydW4oc3RhY2spIDogc3RhY2soKSkpXG4gICAgICAgICAgOiAobm9ybWFsaXplZFN0YWNrVHJhY2UgPSBlbnYucnVuKHN0YWNrKSkpO1xuICAgICAgZWxlbWVudC5fZGVidWdUYXNrID0gbm9ybWFsaXplZFN0YWNrVHJhY2U7XG4gICAgICBudWxsICE9PSBvd25lciAmJiBpbml0aWFsaXplRmFrZVN0YWNrKHJlc3BvbnNlLCBvd25lcik7XG4gICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQucHJvcHMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVMYXp5Q2h1bmtXcmFwcGVyKGNodW5rKSB7XG4gICAgICB2YXIgbGF6eVR5cGUgPSB7XG4gICAgICAgICQkdHlwZW9mOiBSRUFDVF9MQVpZX1RZUEUsXG4gICAgICAgIF9wYXlsb2FkOiBjaHVuayxcbiAgICAgICAgX2luaXQ6IHJlYWRDaHVua1xuICAgICAgfTtcbiAgICAgIGNodW5rID0gY2h1bmsuX2RlYnVnSW5mbyB8fCAoY2h1bmsuX2RlYnVnSW5mbyA9IFtdKTtcbiAgICAgIGxhenlUeXBlLl9kZWJ1Z0luZm8gPSBjaHVuaztcbiAgICAgIHJldHVybiBsYXp5VHlwZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Q2h1bmsocmVzcG9uc2UsIGlkKSB7XG4gICAgICB2YXIgY2h1bmtzID0gcmVzcG9uc2UuX2NodW5rcyxcbiAgICAgICAgY2h1bmsgPSBjaHVua3MuZ2V0KGlkKTtcbiAgICAgIGNodW5rIHx8XG4gICAgICAgICgoY2h1bmsgPSByZXNwb25zZS5fY2xvc2VkXG4gICAgICAgICAgPyBuZXcgUmVhY3RQcm9taXNlKFwicmVqZWN0ZWRcIiwgbnVsbCwgcmVzcG9uc2UuX2Nsb3NlZFJlYXNvbilcbiAgICAgICAgICA6IGNyZWF0ZVBlbmRpbmdDaHVuayhyZXNwb25zZSkpLFxuICAgICAgICBjaHVua3Muc2V0KGlkLCBjaHVuaykpO1xuICAgICAgcmV0dXJuIGNodW5rO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmdWxmaWxsUmVmZXJlbmNlKHJlZmVyZW5jZSwgdmFsdWUpIHtcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciByZXNwb25zZSA9IHJlZmVyZW5jZS5yZXNwb25zZSxcbiAgICAgICAgICBoYW5kbGVyID0gcmVmZXJlbmNlLmhhbmRsZXIsXG4gICAgICAgICAgcGFyZW50T2JqZWN0ID0gcmVmZXJlbmNlLnBhcmVudE9iamVjdCxcbiAgICAgICAgICBrZXkgPSByZWZlcmVuY2Uua2V5LFxuICAgICAgICAgIG1hcCA9IHJlZmVyZW5jZS5tYXAsXG4gICAgICAgICAgcGF0aCA9IHJlZmVyZW5jZS5wYXRoLFxuICAgICAgICAgIGkgPSAxO1xuICAgICAgICBpIDwgcGF0aC5sZW5ndGg7XG4gICAgICAgIGkrK1xuICAgICAgKSB7XG4gICAgICAgIGZvciAoOyB2YWx1ZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFOyApXG4gICAgICAgICAgaWYgKCgodmFsdWUgPSB2YWx1ZS5fcGF5bG9hZCksIHZhbHVlID09PSBoYW5kbGVyLmNodW5rKSlcbiAgICAgICAgICAgIHZhbHVlID0gaGFuZGxlci52YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN3aXRjaCAodmFsdWUuc3RhdHVzKSB7XG4gICAgICAgICAgICAgIGNhc2UgXCJyZXNvbHZlZF9tb2RlbFwiOlxuICAgICAgICAgICAgICAgIGluaXRpYWxpemVNb2RlbENodW5rKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcInJlc29sdmVkX21vZHVsZVwiOlxuICAgICAgICAgICAgICAgIGluaXRpYWxpemVNb2R1bGVDaHVuayh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLnN0YXR1cykge1xuICAgICAgICAgICAgICBjYXNlIFwiZnVsZmlsbGVkXCI6XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS52YWx1ZTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgY2FzZSBcImJsb2NrZWRcIjpcbiAgICAgICAgICAgICAgICB2YXIgY3ljbGljSGFuZGxlciA9IHJlc29sdmVCbG9ja2VkQ3ljbGUodmFsdWUsIHJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgaWYgKG51bGwgIT09IGN5Y2xpY0hhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlID0gY3ljbGljSGFuZGxlci52YWx1ZTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBcInBlbmRpbmdcIjpcbiAgICAgICAgICAgICAgICBwYXRoLnNwbGljZSgwLCBpIC0gMSk7XG4gICAgICAgICAgICAgICAgbnVsbCA9PT0gdmFsdWUudmFsdWVcbiAgICAgICAgICAgICAgICAgID8gKHZhbHVlLnZhbHVlID0gW3JlZmVyZW5jZV0pXG4gICAgICAgICAgICAgICAgICA6IHZhbHVlLnZhbHVlLnB1c2gocmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBudWxsID09PSB2YWx1ZS5yZWFzb25cbiAgICAgICAgICAgICAgICAgID8gKHZhbHVlLnJlYXNvbiA9IFtyZWZlcmVuY2VdKVxuICAgICAgICAgICAgICAgICAgOiB2YWx1ZS5yZWFzb24ucHVzaChyZWZlcmVuY2UpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgY2FzZSBcImhhbHRlZFwiOlxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZWplY3RSZWZlcmVuY2UocmVmZXJlbmNlLCB2YWx1ZS5yZWFzb24pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIHZhbHVlID0gdmFsdWVbcGF0aFtpXV07XG4gICAgICB9XG4gICAgICByZWZlcmVuY2UgPSBtYXAocmVzcG9uc2UsIHZhbHVlLCBwYXJlbnRPYmplY3QsIGtleSk7XG4gICAgICBwYXJlbnRPYmplY3Rba2V5XSA9IHJlZmVyZW5jZTtcbiAgICAgIFwiXCIgPT09IGtleSAmJiBudWxsID09PSBoYW5kbGVyLnZhbHVlICYmIChoYW5kbGVyLnZhbHVlID0gcmVmZXJlbmNlKTtcbiAgICAgIGlmIChcbiAgICAgICAgcGFyZW50T2JqZWN0WzBdID09PSBSRUFDVF9FTEVNRU5UX1RZUEUgJiZcbiAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIGhhbmRsZXIudmFsdWUgJiZcbiAgICAgICAgbnVsbCAhPT0gaGFuZGxlci52YWx1ZSAmJlxuICAgICAgICBoYW5kbGVyLnZhbHVlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEVcbiAgICAgIClcbiAgICAgICAgc3dpdGNoICgoKHBhcmVudE9iamVjdCA9IGhhbmRsZXIudmFsdWUpLCBrZXkpKSB7XG4gICAgICAgICAgY2FzZSBcIjNcIjpcbiAgICAgICAgICAgIHBhcmVudE9iamVjdC5wcm9wcyA9IHJlZmVyZW5jZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgXCI0XCI6XG4gICAgICAgICAgICBwYXJlbnRPYmplY3QuX293bmVyID0gcmVmZXJlbmNlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBcIjVcIjpcbiAgICAgICAgICAgIHBhcmVudE9iamVjdC5fZGVidWdTdGFjayA9IHJlZmVyZW5jZTtcbiAgICAgICAgfVxuICAgICAgaGFuZGxlci5kZXBzLS07XG4gICAgICAwID09PSBoYW5kbGVyLmRlcHMgJiZcbiAgICAgICAgKChrZXkgPSBoYW5kbGVyLmNodW5rKSxcbiAgICAgICAgbnVsbCAhPT0ga2V5ICYmXG4gICAgICAgICAgXCJibG9ja2VkXCIgPT09IGtleS5zdGF0dXMgJiZcbiAgICAgICAgICAoKHBhcmVudE9iamVjdCA9IGtleS52YWx1ZSksXG4gICAgICAgICAgKGtleS5zdGF0dXMgPSBcImZ1bGZpbGxlZFwiKSxcbiAgICAgICAgICAoa2V5LnZhbHVlID0gaGFuZGxlci52YWx1ZSksXG4gICAgICAgICAgbnVsbCAhPT0gcGFyZW50T2JqZWN0ICYmIHdha2VDaHVuayhwYXJlbnRPYmplY3QsIGhhbmRsZXIudmFsdWUpKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlamVjdFJlZmVyZW5jZShyZWZlcmVuY2UsIGVycm9yKSB7XG4gICAgICB2YXIgaGFuZGxlciA9IHJlZmVyZW5jZS5oYW5kbGVyO1xuICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlLnJlc3BvbnNlO1xuICAgICAgaWYgKCFoYW5kbGVyLmVycm9yZWQpIHtcbiAgICAgICAgdmFyIGJsb2NrZWRWYWx1ZSA9IGhhbmRsZXIudmFsdWU7XG4gICAgICAgIGhhbmRsZXIuZXJyb3JlZCA9ICEwO1xuICAgICAgICBoYW5kbGVyLnZhbHVlID0gZXJyb3I7XG4gICAgICAgIGhhbmRsZXIgPSBoYW5kbGVyLmNodW5rO1xuICAgICAgICBpZiAobnVsbCAhPT0gaGFuZGxlciAmJiBcImJsb2NrZWRcIiA9PT0gaGFuZGxlci5zdGF0dXMpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgYmxvY2tlZFZhbHVlICYmXG4gICAgICAgICAgICBudWxsICE9PSBibG9ja2VkVmFsdWUgJiZcbiAgICAgICAgICAgIGJsb2NrZWRWYWx1ZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB2YXIgZXJyb3JlZENvbXBvbmVudCA9IHtcbiAgICAgICAgICAgICAgbmFtZTogZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKGJsb2NrZWRWYWx1ZS50eXBlKSB8fCBcIlwiLFxuICAgICAgICAgICAgICBvd25lcjogYmxvY2tlZFZhbHVlLl9vd25lclxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGVycm9yZWRDb21wb25lbnQuZGVidWdTdGFjayA9IGJsb2NrZWRWYWx1ZS5fZGVidWdTdGFjaztcbiAgICAgICAgICAgIHN1cHBvcnRzQ3JlYXRlVGFzayAmJlxuICAgICAgICAgICAgICAoZXJyb3JlZENvbXBvbmVudC5kZWJ1Z1Rhc2sgPSBibG9ja2VkVmFsdWUuX2RlYnVnVGFzayk7XG4gICAgICAgICAgICAoaGFuZGxlci5fZGVidWdJbmZvIHx8IChoYW5kbGVyLl9kZWJ1Z0luZm8gPSBbXSkpLnB1c2goXG4gICAgICAgICAgICAgIGVycm9yZWRDb21wb25lbnRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRyaWdnZXJFcnJvck9uQ2h1bmsocmVmZXJlbmNlLCBoYW5kbGVyLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gd2FpdEZvclJlZmVyZW5jZShcbiAgICAgIHJlZmVyZW5jZWRDaHVuayxcbiAgICAgIHBhcmVudE9iamVjdCxcbiAgICAgIGtleSxcbiAgICAgIHJlc3BvbnNlLFxuICAgICAgbWFwLFxuICAgICAgcGF0aFxuICAgICkge1xuICAgICAgaWYgKGluaXRpYWxpemluZ0hhbmRsZXIpIHtcbiAgICAgICAgdmFyIGhhbmRsZXIgPSBpbml0aWFsaXppbmdIYW5kbGVyO1xuICAgICAgICBoYW5kbGVyLmRlcHMrKztcbiAgICAgIH0gZWxzZVxuICAgICAgICBoYW5kbGVyID0gaW5pdGlhbGl6aW5nSGFuZGxlciA9IHtcbiAgICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgICAgY2h1bms6IG51bGwsXG4gICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgZGVwczogMSxcbiAgICAgICAgICBlcnJvcmVkOiAhMVxuICAgICAgICB9O1xuICAgICAgcGFyZW50T2JqZWN0ID0ge1xuICAgICAgICByZXNwb25zZTogcmVzcG9uc2UsXG4gICAgICAgIGhhbmRsZXI6IGhhbmRsZXIsXG4gICAgICAgIHBhcmVudE9iamVjdDogcGFyZW50T2JqZWN0LFxuICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgbWFwOiBtYXAsXG4gICAgICAgIHBhdGg6IHBhdGhcbiAgICAgIH07XG4gICAgICBudWxsID09PSByZWZlcmVuY2VkQ2h1bmsudmFsdWVcbiAgICAgICAgPyAocmVmZXJlbmNlZENodW5rLnZhbHVlID0gW3BhcmVudE9iamVjdF0pXG4gICAgICAgIDogcmVmZXJlbmNlZENodW5rLnZhbHVlLnB1c2gocGFyZW50T2JqZWN0KTtcbiAgICAgIG51bGwgPT09IHJlZmVyZW5jZWRDaHVuay5yZWFzb25cbiAgICAgICAgPyAocmVmZXJlbmNlZENodW5rLnJlYXNvbiA9IFtwYXJlbnRPYmplY3RdKVxuICAgICAgICA6IHJlZmVyZW5jZWRDaHVuay5yZWFzb24ucHVzaChwYXJlbnRPYmplY3QpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGxvYWRTZXJ2ZXJSZWZlcmVuY2UocmVzcG9uc2UsIG1ldGFEYXRhLCBwYXJlbnRPYmplY3QsIGtleSkge1xuICAgICAgaWYgKCFyZXNwb25zZS5fc2VydmVyUmVmZXJlbmNlQ29uZmlnKVxuICAgICAgICByZXR1cm4gY3JlYXRlQm91bmRTZXJ2ZXJSZWZlcmVuY2UoXG4gICAgICAgICAgbWV0YURhdGEsXG4gICAgICAgICAgcmVzcG9uc2UuX2NhbGxTZXJ2ZXIsXG4gICAgICAgICAgcmVzcG9uc2UuX2VuY29kZUZvcm1BY3Rpb24sXG4gICAgICAgICAgcmVzcG9uc2UuX2RlYnVnRmluZFNvdXJjZU1hcFVSTFxuICAgICAgICApO1xuICAgICAgdmFyIHNlcnZlclJlZmVyZW5jZSA9IHJlc29sdmVTZXJ2ZXJSZWZlcmVuY2UoXG4gICAgICAgICAgcmVzcG9uc2UuX3NlcnZlclJlZmVyZW5jZUNvbmZpZyxcbiAgICAgICAgICBtZXRhRGF0YS5pZFxuICAgICAgICApLFxuICAgICAgICBwcm9taXNlID0gcHJlbG9hZE1vZHVsZShzZXJ2ZXJSZWZlcmVuY2UpO1xuICAgICAgaWYgKHByb21pc2UpXG4gICAgICAgIG1ldGFEYXRhLmJvdW5kICYmIChwcm9taXNlID0gUHJvbWlzZS5hbGwoW3Byb21pc2UsIG1ldGFEYXRhLmJvdW5kXSkpO1xuICAgICAgZWxzZSBpZiAobWV0YURhdGEuYm91bmQpIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUobWV0YURhdGEuYm91bmQpO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIChwcm9taXNlID0gcmVxdWlyZU1vZHVsZShzZXJ2ZXJSZWZlcmVuY2UpKSxcbiAgICAgICAgICByZWdpc3RlckJvdW5kU2VydmVyUmVmZXJlbmNlKHByb21pc2UsIG1ldGFEYXRhLmlkLCBtZXRhRGF0YS5ib3VuZCksXG4gICAgICAgICAgcHJvbWlzZVxuICAgICAgICApO1xuICAgICAgaWYgKGluaXRpYWxpemluZ0hhbmRsZXIpIHtcbiAgICAgICAgdmFyIGhhbmRsZXIgPSBpbml0aWFsaXppbmdIYW5kbGVyO1xuICAgICAgICBoYW5kbGVyLmRlcHMrKztcbiAgICAgIH0gZWxzZVxuICAgICAgICBoYW5kbGVyID0gaW5pdGlhbGl6aW5nSGFuZGxlciA9IHtcbiAgICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgICAgY2h1bms6IG51bGwsXG4gICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgZGVwczogMSxcbiAgICAgICAgICBlcnJvcmVkOiAhMVxuICAgICAgICB9O1xuICAgICAgcHJvbWlzZS50aGVuKFxuICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIHJlc29sdmVkVmFsdWUgPSByZXF1aXJlTW9kdWxlKHNlcnZlclJlZmVyZW5jZSk7XG4gICAgICAgICAgaWYgKG1ldGFEYXRhLmJvdW5kKSB7XG4gICAgICAgICAgICB2YXIgYm91bmRBcmdzID0gbWV0YURhdGEuYm91bmQudmFsdWUuc2xpY2UoMCk7XG4gICAgICAgICAgICBib3VuZEFyZ3MudW5zaGlmdChudWxsKTtcbiAgICAgICAgICAgIHJlc29sdmVkVmFsdWUgPSByZXNvbHZlZFZhbHVlLmJpbmQuYXBwbHkocmVzb2x2ZWRWYWx1ZSwgYm91bmRBcmdzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVnaXN0ZXJCb3VuZFNlcnZlclJlZmVyZW5jZShcbiAgICAgICAgICAgIHJlc29sdmVkVmFsdWUsXG4gICAgICAgICAgICBtZXRhRGF0YS5pZCxcbiAgICAgICAgICAgIG1ldGFEYXRhLmJvdW5kXG4gICAgICAgICAgKTtcbiAgICAgICAgICBwYXJlbnRPYmplY3Rba2V5XSA9IHJlc29sdmVkVmFsdWU7XG4gICAgICAgICAgXCJcIiA9PT0ga2V5ICYmXG4gICAgICAgICAgICBudWxsID09PSBoYW5kbGVyLnZhbHVlICYmXG4gICAgICAgICAgICAoaGFuZGxlci52YWx1ZSA9IHJlc29sdmVkVmFsdWUpO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhcmVudE9iamVjdFswXSA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFICYmXG4gICAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgaGFuZGxlci52YWx1ZSAmJlxuICAgICAgICAgICAgbnVsbCAhPT0gaGFuZGxlci52YWx1ZSAmJlxuICAgICAgICAgICAgaGFuZGxlci52YWx1ZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFXG4gICAgICAgICAgKVxuICAgICAgICAgICAgc3dpdGNoICgoKGJvdW5kQXJncyA9IGhhbmRsZXIudmFsdWUpLCBrZXkpKSB7XG4gICAgICAgICAgICAgIGNhc2UgXCIzXCI6XG4gICAgICAgICAgICAgICAgYm91bmRBcmdzLnByb3BzID0gcmVzb2x2ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIjRcIjpcbiAgICAgICAgICAgICAgICBib3VuZEFyZ3MuX293bmVyID0gcmVzb2x2ZWRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBoYW5kbGVyLmRlcHMtLTtcbiAgICAgICAgICAwID09PSBoYW5kbGVyLmRlcHMgJiZcbiAgICAgICAgICAgICgocmVzb2x2ZWRWYWx1ZSA9IGhhbmRsZXIuY2h1bmspLFxuICAgICAgICAgICAgbnVsbCAhPT0gcmVzb2x2ZWRWYWx1ZSAmJlxuICAgICAgICAgICAgICBcImJsb2NrZWRcIiA9PT0gcmVzb2x2ZWRWYWx1ZS5zdGF0dXMgJiZcbiAgICAgICAgICAgICAgKChib3VuZEFyZ3MgPSByZXNvbHZlZFZhbHVlLnZhbHVlKSxcbiAgICAgICAgICAgICAgKHJlc29sdmVkVmFsdWUuc3RhdHVzID0gXCJmdWxmaWxsZWRcIiksXG4gICAgICAgICAgICAgIChyZXNvbHZlZFZhbHVlLnZhbHVlID0gaGFuZGxlci52YWx1ZSksXG4gICAgICAgICAgICAgIG51bGwgIT09IGJvdW5kQXJncyAmJiB3YWtlQ2h1bmsoYm91bmRBcmdzLCBoYW5kbGVyLnZhbHVlKSkpO1xuICAgICAgICB9LFxuICAgICAgICBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAoIWhhbmRsZXIuZXJyb3JlZCkge1xuICAgICAgICAgICAgdmFyIGJsb2NrZWRWYWx1ZSA9IGhhbmRsZXIudmFsdWU7XG4gICAgICAgICAgICBoYW5kbGVyLmVycm9yZWQgPSAhMDtcbiAgICAgICAgICAgIGhhbmRsZXIudmFsdWUgPSBlcnJvcjtcbiAgICAgICAgICAgIHZhciBjaHVuayA9IGhhbmRsZXIuY2h1bms7XG4gICAgICAgICAgICBpZiAobnVsbCAhPT0gY2h1bmsgJiYgXCJibG9ja2VkXCIgPT09IGNodW5rLnN0YXR1cykge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIGJsb2NrZWRWYWx1ZSAmJlxuICAgICAgICAgICAgICAgIG51bGwgIT09IGJsb2NrZWRWYWx1ZSAmJlxuICAgICAgICAgICAgICAgIGJsb2NrZWRWYWx1ZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhciBlcnJvcmVkQ29tcG9uZW50ID0ge1xuICAgICAgICAgICAgICAgICAgbmFtZTogZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKGJsb2NrZWRWYWx1ZS50eXBlKSB8fCBcIlwiLFxuICAgICAgICAgICAgICAgICAgb3duZXI6IGJsb2NrZWRWYWx1ZS5fb3duZXJcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGVycm9yZWRDb21wb25lbnQuZGVidWdTdGFjayA9IGJsb2NrZWRWYWx1ZS5fZGVidWdTdGFjaztcbiAgICAgICAgICAgICAgICBzdXBwb3J0c0NyZWF0ZVRhc2sgJiZcbiAgICAgICAgICAgICAgICAgIChlcnJvcmVkQ29tcG9uZW50LmRlYnVnVGFzayA9IGJsb2NrZWRWYWx1ZS5fZGVidWdUYXNrKTtcbiAgICAgICAgICAgICAgICAoY2h1bmsuX2RlYnVnSW5mbyB8fCAoY2h1bmsuX2RlYnVnSW5mbyA9IFtdKSkucHVzaChcbiAgICAgICAgICAgICAgICAgIGVycm9yZWRDb21wb25lbnRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRyaWdnZXJFcnJvck9uQ2h1bmsocmVzcG9uc2UsIGNodW5rLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldE91dGxpbmVkTW9kZWwocmVzcG9uc2UsIHJlZmVyZW5jZSwgcGFyZW50T2JqZWN0LCBrZXksIG1hcCkge1xuICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlLnNwbGl0KFwiOlwiKTtcbiAgICAgIHZhciBpZCA9IHBhcnNlSW50KHJlZmVyZW5jZVswXSwgMTYpO1xuICAgICAgaWQgPSBnZXRDaHVuayhyZXNwb25zZSwgaWQpO1xuICAgICAgc3dpdGNoIChpZC5zdGF0dXMpIHtcbiAgICAgICAgY2FzZSBcInJlc29sdmVkX21vZGVsXCI6XG4gICAgICAgICAgaW5pdGlhbGl6ZU1vZGVsQ2h1bmsoaWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwicmVzb2x2ZWRfbW9kdWxlXCI6XG4gICAgICAgICAgaW5pdGlhbGl6ZU1vZHVsZUNodW5rKGlkKTtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAoaWQuc3RhdHVzKSB7XG4gICAgICAgIGNhc2UgXCJmdWxmaWxsZWRcIjpcbiAgICAgICAgICBmb3IgKHZhciB2YWx1ZSA9IGlkLnZhbHVlLCBpID0gMTsgaSA8IHJlZmVyZW5jZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZm9yICg7IHZhbHVlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEU7ICkge1xuICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLl9wYXlsb2FkO1xuICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLnN0YXR1cykge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJyZXNvbHZlZF9tb2RlbFwiOlxuICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZU1vZGVsQ2h1bmsodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInJlc29sdmVkX21vZHVsZVwiOlxuICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZU1vZHVsZUNodW5rKHZhbHVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLnN0YXR1cykge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJmdWxmaWxsZWRcIjpcbiAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudmFsdWU7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiYmxvY2tlZFwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJwZW5kaW5nXCI6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gd2FpdEZvclJlZmVyZW5jZShcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudE9iamVjdCxcbiAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgbWFwLFxuICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2Uuc2xpY2UoaSAtIDEpXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJoYWx0ZWRcIjpcbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemluZ0hhbmRsZXJcbiAgICAgICAgICAgICAgICAgICAgICA/ICgocmVzcG9uc2UgPSBpbml0aWFsaXppbmdIYW5kbGVyKSwgcmVzcG9uc2UuZGVwcysrKVxuICAgICAgICAgICAgICAgICAgICAgIDogKGluaXRpYWxpemluZ0hhbmRsZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bms6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBzOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcmVkOiAhMVxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemluZ0hhbmRsZXJcbiAgICAgICAgICAgICAgICAgICAgICA/ICgoaW5pdGlhbGl6aW5nSGFuZGxlci5lcnJvcmVkID0gITApLFxuICAgICAgICAgICAgICAgICAgICAgICAgKGluaXRpYWxpemluZ0hhbmRsZXIudmFsdWUgPSB2YWx1ZS5yZWFzb24pKVxuICAgICAgICAgICAgICAgICAgICAgIDogKGluaXRpYWxpemluZ0hhbmRsZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bms6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS5yZWFzb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHM6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yZWQ6ICEwXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVtyZWZlcmVuY2VbaV1dO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXNwb25zZSA9IG1hcChyZXNwb25zZSwgdmFsdWUsIHBhcmVudE9iamVjdCwga2V5KTtcbiAgICAgICAgICBpZC5fZGVidWdJbmZvICYmXG4gICAgICAgICAgICAoXCJvYmplY3RcIiAhPT0gdHlwZW9mIHJlc3BvbnNlIHx8XG4gICAgICAgICAgICAgIG51bGwgPT09IHJlc3BvbnNlIHx8XG4gICAgICAgICAgICAgICghaXNBcnJheUltcGwocmVzcG9uc2UpICYmXG4gICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgcmVzcG9uc2VbQVNZTkNfSVRFUkFUT1JdICYmXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UuJCR0eXBlb2YgIT09IFJFQUNUX0VMRU1FTlRfVFlQRSkgfHxcbiAgICAgICAgICAgICAgcmVzcG9uc2UuX2RlYnVnSW5mbyB8fFxuICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVzcG9uc2UsIFwiX2RlYnVnSW5mb1wiLCB7XG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiAhMSxcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogITAsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGlkLl9kZWJ1Z0luZm9cbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgY2FzZSBcInBlbmRpbmdcIjpcbiAgICAgICAgY2FzZSBcImJsb2NrZWRcIjpcbiAgICAgICAgICByZXR1cm4gd2FpdEZvclJlZmVyZW5jZShcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgcGFyZW50T2JqZWN0LFxuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICBtYXAsXG4gICAgICAgICAgICByZWZlcmVuY2VcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIFwiaGFsdGVkXCI6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGluaXRpYWxpemluZ0hhbmRsZXJcbiAgICAgICAgICAgICAgPyAoKHJlc3BvbnNlID0gaW5pdGlhbGl6aW5nSGFuZGxlciksIHJlc3BvbnNlLmRlcHMrKylcbiAgICAgICAgICAgICAgOiAoaW5pdGlhbGl6aW5nSGFuZGxlciA9IHtcbiAgICAgICAgICAgICAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgICAgICAgICAgICAgIGNodW5rOiBudWxsLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgICAgICAgICBkZXBzOiAxLFxuICAgICAgICAgICAgICAgICAgZXJyb3JlZDogITFcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG51bGxcbiAgICAgICAgICApO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpbml0aWFsaXppbmdIYW5kbGVyXG4gICAgICAgICAgICAgID8gKChpbml0aWFsaXppbmdIYW5kbGVyLmVycm9yZWQgPSAhMCksXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemluZ0hhbmRsZXIudmFsdWUgPSBpZC5yZWFzb24pKVxuICAgICAgICAgICAgICA6IChpbml0aWFsaXppbmdIYW5kbGVyID0ge1xuICAgICAgICAgICAgICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgICAgICAgICAgICAgY2h1bms6IG51bGwsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogaWQucmVhc29uLFxuICAgICAgICAgICAgICAgICAgZGVwczogMCxcbiAgICAgICAgICAgICAgICAgIGVycm9yZWQ6ICEwXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBudWxsXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlTWFwKHJlc3BvbnNlLCBtb2RlbCkge1xuICAgICAgcmV0dXJuIG5ldyBNYXAobW9kZWwpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVTZXQocmVzcG9uc2UsIG1vZGVsKSB7XG4gICAgICByZXR1cm4gbmV3IFNldChtb2RlbCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUJsb2IocmVzcG9uc2UsIG1vZGVsKSB7XG4gICAgICByZXR1cm4gbmV3IEJsb2IobW9kZWwuc2xpY2UoMSksIHsgdHlwZTogbW9kZWxbMF0gfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZvcm1EYXRhKHJlc3BvbnNlLCBtb2RlbCkge1xuICAgICAgcmVzcG9uc2UgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbW9kZWwubGVuZ3RoOyBpKyspXG4gICAgICAgIHJlc3BvbnNlLmFwcGVuZChtb2RlbFtpXVswXSwgbW9kZWxbaV1bMV0pO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhcHBseUNvbnN0cnVjdG9yKHJlc3BvbnNlLCBtb2RlbCwgcGFyZW50T2JqZWN0KSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YocGFyZW50T2JqZWN0LCBtb2RlbC5wcm90b3R5cGUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZWZpbmVMYXp5R2V0dGVyKHJlc3BvbnNlLCBjaHVuaywgcGFyZW50T2JqZWN0LCBrZXkpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwYXJlbnRPYmplY3QsIGtleSwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBcInJlc29sdmVkX21vZGVsXCIgPT09IGNodW5rLnN0YXR1cyAmJiBpbml0aWFsaXplTW9kZWxDaHVuayhjaHVuayk7XG4gICAgICAgICAgc3dpdGNoIChjaHVuay5zdGF0dXMpIHtcbiAgICAgICAgICAgIGNhc2UgXCJmdWxmaWxsZWRcIjpcbiAgICAgICAgICAgICAgcmV0dXJuIGNodW5rLnZhbHVlO1xuICAgICAgICAgICAgY2FzZSBcInJlamVjdGVkXCI6XG4gICAgICAgICAgICAgIHRocm93IGNodW5rLnJlYXNvbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFwiVGhpcyBvYmplY3QgaGFzIGJlZW4gb21pdHRlZCBieSBSZWFjdCBpbiB0aGUgY29uc29sZSBsb2cgdG8gYXZvaWQgc2VuZGluZyB0b28gbXVjaCBkYXRhIGZyb20gdGhlIHNlcnZlci4gVHJ5IGxvZ2dpbmcgc21hbGxlciBvciBtb3JlIHNwZWNpZmljIG9iamVjdHMuXCI7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6ICEwLFxuICAgICAgICBjb25maWd1cmFibGU6ICExXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBleHRyYWN0SXRlcmF0b3IocmVzcG9uc2UsIG1vZGVsKSB7XG4gICAgICByZXR1cm4gbW9kZWxbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVNb2RlbChyZXNwb25zZSwgbW9kZWwpIHtcbiAgICAgIHJldHVybiBtb2RlbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VNb2RlbFN0cmluZyhyZXNwb25zZSwgcGFyZW50T2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gICAgICBpZiAoXCIkXCIgPT09IHZhbHVlWzBdKSB7XG4gICAgICAgIGlmIChcIiRcIiA9PT0gdmFsdWUpXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIG51bGwgIT09IGluaXRpYWxpemluZ0hhbmRsZXIgJiZcbiAgICAgICAgICAgICAgXCIwXCIgPT09IGtleSAmJlxuICAgICAgICAgICAgICAoaW5pdGlhbGl6aW5nSGFuZGxlciA9IHtcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IGluaXRpYWxpemluZ0hhbmRsZXIsXG4gICAgICAgICAgICAgICAgY2h1bms6IG51bGwsXG4gICAgICAgICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgICAgICAgZGVwczogMCxcbiAgICAgICAgICAgICAgICBlcnJvcmVkOiAhMVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIFJFQUNUX0VMRU1FTlRfVFlQRVxuICAgICAgICAgICk7XG4gICAgICAgIHN3aXRjaCAodmFsdWVbMV0pIHtcbiAgICAgICAgICBjYXNlIFwiJFwiOlxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnNsaWNlKDEpO1xuICAgICAgICAgIGNhc2UgXCJMXCI6XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAocGFyZW50T2JqZWN0ID0gcGFyc2VJbnQodmFsdWUuc2xpY2UoMiksIDE2KSksXG4gICAgICAgICAgICAgIChyZXNwb25zZSA9IGdldENodW5rKHJlc3BvbnNlLCBwYXJlbnRPYmplY3QpKSxcbiAgICAgICAgICAgICAgY3JlYXRlTGF6eUNodW5rV3JhcHBlcihyZXNwb25zZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY2FzZSBcIkBcIjpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChwYXJlbnRPYmplY3QgPSBwYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgMTYpKSxcbiAgICAgICAgICAgICAgZ2V0Q2h1bmsocmVzcG9uc2UsIHBhcmVudE9iamVjdClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY2FzZSBcIlNcIjpcbiAgICAgICAgICAgIHJldHVybiBTeW1ib2wuZm9yKHZhbHVlLnNsaWNlKDIpKTtcbiAgICAgICAgICBjYXNlIFwiRlwiOlxuICAgICAgICAgICAgdmFyIHJlZiA9IHZhbHVlLnNsaWNlKDIpO1xuICAgICAgICAgICAgcmV0dXJuIGdldE91dGxpbmVkTW9kZWwoXG4gICAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgICByZWYsXG4gICAgICAgICAgICAgIHBhcmVudE9iamVjdCxcbiAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICBsb2FkU2VydmVyUmVmZXJlbmNlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGNhc2UgXCJUXCI6XG4gICAgICAgICAgICBwYXJlbnRPYmplY3QgPSBcIiRcIiArIHZhbHVlLnNsaWNlKDIpO1xuICAgICAgICAgICAgcmVzcG9uc2UgPSByZXNwb25zZS5fdGVtcFJlZnM7XG4gICAgICAgICAgICBpZiAobnVsbCA9PSByZXNwb25zZSlcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJNaXNzaW5nIGEgdGVtcG9yYXJ5IHJlZmVyZW5jZSBzZXQgYnV0IHRoZSBSU0MgcmVzcG9uc2UgcmV0dXJuZWQgYSB0ZW1wb3JhcnkgcmVmZXJlbmNlLiBQYXNzIGEgdGVtcG9yYXJ5UmVmZXJlbmNlIG9wdGlvbiB3aXRoIHRoZSBzZXQgdGhhdCB3YXMgdXNlZCB3aXRoIHRoZSByZXBseS5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmdldChwYXJlbnRPYmplY3QpO1xuICAgICAgICAgIGNhc2UgXCJRXCI6XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAocmVmID0gdmFsdWUuc2xpY2UoMikpLFxuICAgICAgICAgICAgICBnZXRPdXRsaW5lZE1vZGVsKHJlc3BvbnNlLCByZWYsIHBhcmVudE9iamVjdCwga2V5LCBjcmVhdGVNYXApXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGNhc2UgXCJXXCI6XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAocmVmID0gdmFsdWUuc2xpY2UoMikpLFxuICAgICAgICAgICAgICBnZXRPdXRsaW5lZE1vZGVsKHJlc3BvbnNlLCByZWYsIHBhcmVudE9iamVjdCwga2V5LCBjcmVhdGVTZXQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGNhc2UgXCJCXCI6XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAocmVmID0gdmFsdWUuc2xpY2UoMikpLFxuICAgICAgICAgICAgICBnZXRPdXRsaW5lZE1vZGVsKHJlc3BvbnNlLCByZWYsIHBhcmVudE9iamVjdCwga2V5LCBjcmVhdGVCbG9iKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBjYXNlIFwiS1wiOlxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKHJlZiA9IHZhbHVlLnNsaWNlKDIpKSxcbiAgICAgICAgICAgICAgZ2V0T3V0bGluZWRNb2RlbChyZXNwb25zZSwgcmVmLCBwYXJlbnRPYmplY3QsIGtleSwgY3JlYXRlRm9ybURhdGEpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGNhc2UgXCJaXCI6XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAocmVmID0gdmFsdWUuc2xpY2UoMikpLFxuICAgICAgICAgICAgICBnZXRPdXRsaW5lZE1vZGVsKFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgIHJlZixcbiAgICAgICAgICAgICAgICBwYXJlbnRPYmplY3QsXG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIHJlc29sdmVFcnJvckRldlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGNhc2UgXCJpXCI6XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAocmVmID0gdmFsdWUuc2xpY2UoMikpLFxuICAgICAgICAgICAgICBnZXRPdXRsaW5lZE1vZGVsKFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgIHJlZixcbiAgICAgICAgICAgICAgICBwYXJlbnRPYmplY3QsXG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIGV4dHJhY3RJdGVyYXRvclxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGNhc2UgXCJJXCI6XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgICAgICAgY2FzZSBcIi1cIjpcbiAgICAgICAgICAgIHJldHVybiBcIiQtMFwiID09PSB2YWx1ZSA/IC0wIDogLUluZmluaXR5O1xuICAgICAgICAgIGNhc2UgXCJOXCI6XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICAgIGNhc2UgXCJ1XCI6XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgY2FzZSBcIkRcIjpcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLnBhcnNlKHZhbHVlLnNsaWNlKDIpKSk7XG4gICAgICAgICAgY2FzZSBcIm5cIjpcbiAgICAgICAgICAgIHJldHVybiBCaWdJbnQodmFsdWUuc2xpY2UoMikpO1xuICAgICAgICAgIGNhc2UgXCJQXCI6XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAocmVmID0gdmFsdWUuc2xpY2UoMikpLFxuICAgICAgICAgICAgICBnZXRPdXRsaW5lZE1vZGVsKFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgIHJlZixcbiAgICAgICAgICAgICAgICBwYXJlbnRPYmplY3QsXG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIGFwcGx5Q29uc3RydWN0b3JcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBjYXNlIFwiRVwiOlxuICAgICAgICAgICAgcmVzcG9uc2UgPSB2YWx1ZS5zbGljZSgyKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiAoMCwgZXZhbCkocmVzcG9uc2UpO1xuICAgICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhcnRzV2l0aChcIihhc3luYyBmdW5jdGlvblwiKSkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICgocGFyZW50T2JqZWN0ID0gcmVzcG9uc2UuaW5kZXhPZihcIihcIiwgMTUpKSxcbiAgICAgICAgICAgICAgICAgIC0xICE9PSBwYXJlbnRPYmplY3QpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgKHJlc3BvbnNlID0gcmVzcG9uc2Uuc2xpY2UoMTUsIHBhcmVudE9iamVjdCkudHJpbSgpKSxcbiAgICAgICAgICAgICAgICAgICAgKDAsIGV2YWwpKFxuICAgICAgICAgICAgICAgICAgICAgIFwiKHtcIiArIEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlKSArIFwiOmFzeW5jIGZ1bmN0aW9uKCl7fX0pXCJcbiAgICAgICAgICAgICAgICAgICAgKVtyZXNwb25zZV1cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2Uuc3RhcnRzV2l0aChcIihmdW5jdGlvblwiKSkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICgocGFyZW50T2JqZWN0ID0gcmVzcG9uc2UuaW5kZXhPZihcIihcIiwgOSkpLFxuICAgICAgICAgICAgICAgICAgLTEgIT09IHBhcmVudE9iamVjdClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAocmVzcG9uc2UgPSByZXNwb25zZS5zbGljZSg5LCBwYXJlbnRPYmplY3QpLnRyaW0oKSksXG4gICAgICAgICAgICAgICAgICAgICgwLCBldmFsKShcbiAgICAgICAgICAgICAgICAgICAgICBcIih7XCIgKyBKU09OLnN0cmluZ2lmeShyZXNwb25zZSkgKyBcIjpmdW5jdGlvbigpe319KVwiXG4gICAgICAgICAgICAgICAgICAgIClbcmVzcG9uc2VdXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLnN0YXJ0c1dpdGgoXCIoY2xhc3NcIikgJiZcbiAgICAgICAgICAgICAgICAoKHBhcmVudE9iamVjdCA9IHJlc3BvbnNlLmluZGV4T2YoXCJ7XCIsIDYpKSwgLTEgIT09IHBhcmVudE9iamVjdClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAocmVzcG9uc2UgPSByZXNwb25zZS5zbGljZSg2LCBwYXJlbnRPYmplY3QpLnRyaW0oKSksXG4gICAgICAgICAgICAgICAgICAoMCwgZXZhbCkoXCIoe1wiICsgSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UpICsgXCI6Y2xhc3N7fX0pXCIpW1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIFwiWVwiOlxuICAgICAgICAgICAgaWYgKDIgPCB2YWx1ZS5sZW5ndGggJiYgKHJlZiA9IHJlc3BvbnNlLl9kZWJ1Z0NoYW5uZWwpKSB7XG4gICAgICAgICAgICAgIGlmIChcIkBcIiA9PT0gdmFsdWVbMl0pXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIChwYXJlbnRPYmplY3QgPSB2YWx1ZS5zbGljZSgzKSksXG4gICAgICAgICAgICAgICAgICAoa2V5ID0gcGFyc2VJbnQocGFyZW50T2JqZWN0LCAxNikpLFxuICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuX2NodW5rcy5oYXMoa2V5KSB8fCByZWYoXCJQOlwiICsgcGFyZW50T2JqZWN0KSxcbiAgICAgICAgICAgICAgICAgIGdldENodW5rKHJlc3BvbnNlLCBrZXkpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgyKTtcbiAgICAgICAgICAgICAgdmFyIF9pZDIgPSBwYXJzZUludCh2YWx1ZSwgMTYpO1xuICAgICAgICAgICAgICByZXNwb25zZS5fY2h1bmtzLmhhcyhfaWQyKSB8fCByZWYoXCJROlwiICsgdmFsdWUpO1xuICAgICAgICAgICAgICByZWYgPSBnZXRDaHVuayhyZXNwb25zZSwgX2lkMik7XG4gICAgICAgICAgICAgIHJldHVybiBcImZ1bGZpbGxlZFwiID09PSByZWYuc3RhdHVzXG4gICAgICAgICAgICAgICAgPyByZWYudmFsdWVcbiAgICAgICAgICAgICAgICA6IGRlZmluZUxhenlHZXR0ZXIocmVzcG9uc2UsIHJlZiwgcGFyZW50T2JqZWN0LCBrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHBhcmVudE9iamVjdCwga2V5LCB7XG4gICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBcIlRoaXMgb2JqZWN0IGhhcyBiZWVuIG9taXR0ZWQgYnkgUmVhY3QgaW4gdGhlIGNvbnNvbGUgbG9nIHRvIGF2b2lkIHNlbmRpbmcgdG9vIG11Y2ggZGF0YSBmcm9tIHRoZSBzZXJ2ZXIuIFRyeSBsb2dnaW5nIHNtYWxsZXIgb3IgbW9yZSBzcGVjaWZpYyBvYmplY3RzLlwiO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiAhMVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKHJlZiA9IHZhbHVlLnNsaWNlKDEpKSxcbiAgICAgICAgICAgICAgZ2V0T3V0bGluZWRNb2RlbChyZXNwb25zZSwgcmVmLCBwYXJlbnRPYmplY3QsIGtleSwgY3JlYXRlTW9kZWwpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1pc3NpbmdDYWxsKCkge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdUcnlpbmcgdG8gY2FsbCBhIGZ1bmN0aW9uIGZyb20gXCJ1c2Ugc2VydmVyXCIgYnV0IHRoZSBjYWxsU2VydmVyIG9wdGlvbiB3YXMgbm90IGltcGxlbWVudGVkIGluIHlvdXIgcm91dGVyIHJ1bnRpbWUuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gUmVzcG9uc2VJbnN0YW5jZShcbiAgICAgIGJ1bmRsZXJDb25maWcsXG4gICAgICBzZXJ2ZXJSZWZlcmVuY2VDb25maWcsXG4gICAgICBtb2R1bGVMb2FkaW5nLFxuICAgICAgY2FsbFNlcnZlcixcbiAgICAgIGVuY29kZUZvcm1BY3Rpb24sXG4gICAgICBub25jZSxcbiAgICAgIHRlbXBvcmFyeVJlZmVyZW5jZXMsXG4gICAgICBmaW5kU291cmNlTWFwVVJMLFxuICAgICAgcmVwbGF5Q29uc29sZSxcbiAgICAgIGVudmlyb25tZW50TmFtZSxcbiAgICAgIGRlYnVnQ2hhbm5lbFxuICAgICkge1xuICAgICAgdmFyIGNodW5rcyA9IG5ldyBNYXAoKTtcbiAgICAgIHRoaXMuX2J1bmRsZXJDb25maWcgPSBidW5kbGVyQ29uZmlnO1xuICAgICAgdGhpcy5fc2VydmVyUmVmZXJlbmNlQ29uZmlnID0gc2VydmVyUmVmZXJlbmNlQ29uZmlnO1xuICAgICAgdGhpcy5fbW9kdWxlTG9hZGluZyA9IG1vZHVsZUxvYWRpbmc7XG4gICAgICB0aGlzLl9jYWxsU2VydmVyID0gdm9pZCAwICE9PSBjYWxsU2VydmVyID8gY2FsbFNlcnZlciA6IG1pc3NpbmdDYWxsO1xuICAgICAgdGhpcy5fZW5jb2RlRm9ybUFjdGlvbiA9IGVuY29kZUZvcm1BY3Rpb247XG4gICAgICB0aGlzLl9ub25jZSA9IG5vbmNlO1xuICAgICAgdGhpcy5fY2h1bmtzID0gY2h1bmtzO1xuICAgICAgdGhpcy5fc3RyaW5nRGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xuICAgICAgdGhpcy5fZnJvbUpTT04gPSBudWxsO1xuICAgICAgdGhpcy5fY2xvc2VkID0gITE7XG4gICAgICB0aGlzLl9jbG9zZWRSZWFzb24gPSBudWxsO1xuICAgICAgdGhpcy5fdGVtcFJlZnMgPSB0ZW1wb3JhcnlSZWZlcmVuY2VzO1xuICAgICAgdGhpcy5fcGVuZGluZ0NodW5rcyA9IDA7XG4gICAgICB0aGlzLl93ZWFrUmVzcG9uc2UgPSB7IHdlYWs6IG5ldyBXZWFrUmVmKHRoaXMpLCByZXNwb25zZTogdGhpcyB9O1xuICAgICAgdGhpcy5fZGVidWdSb290T3duZXIgPSBidW5kbGVyQ29uZmlnID1cbiAgICAgICAgdm9pZCAwID09PSBSZWFjdFNoYXJlZEludGVyYWxzU2VydmVyIHx8XG4gICAgICAgIG51bGwgPT09IFJlYWN0U2hhcmVkSW50ZXJhbHNTZXJ2ZXIuQVxuICAgICAgICAgID8gbnVsbFxuICAgICAgICAgIDogUmVhY3RTaGFyZWRJbnRlcmFsc1NlcnZlci5BLmdldE93bmVyKCk7XG4gICAgICB0aGlzLl9kZWJ1Z1Jvb3RTdGFjayA9XG4gICAgICAgIG51bGwgIT09IGJ1bmRsZXJDb25maWcgPyBFcnJvcihcInJlYWN0LXN0YWNrLXRvcC1mcmFtZVwiKSA6IG51bGw7XG4gICAgICBlbnZpcm9ubWVudE5hbWUgPSB2b2lkIDAgPT09IGVudmlyb25tZW50TmFtZSA/IFwiU2VydmVyXCIgOiBlbnZpcm9ubWVudE5hbWU7XG4gICAgICBzdXBwb3J0c0NyZWF0ZVRhc2sgJiZcbiAgICAgICAgKHRoaXMuX2RlYnVnUm9vdFRhc2sgPSBjb25zb2xlLmNyZWF0ZVRhc2soXG4gICAgICAgICAgJ1widXNlICcgKyBlbnZpcm9ubWVudE5hbWUudG9Mb3dlckNhc2UoKSArICdcIidcbiAgICAgICAgKSk7XG4gICAgICB0aGlzLl9kZWJ1Z0ZpbmRTb3VyY2VNYXBVUkwgPSBmaW5kU291cmNlTWFwVVJMO1xuICAgICAgdGhpcy5fZGVidWdDaGFubmVsID0gZGVidWdDaGFubmVsO1xuICAgICAgdGhpcy5fcmVwbGF5Q29uc29sZSA9IHJlcGxheUNvbnNvbGU7XG4gICAgICB0aGlzLl9yb290RW52aXJvbm1lbnROYW1lID0gZW52aXJvbm1lbnROYW1lO1xuICAgICAgZGVidWdDaGFubmVsICYmXG4gICAgICAgIChudWxsID09PSBkZWJ1Z0NoYW5uZWxSZWdpc3RyeVxuICAgICAgICAgID8gKGRlYnVnQ2hhbm5lbChcIlwiKSwgKHRoaXMuX2RlYnVnQ2hhbm5lbCA9IHZvaWQgMCkpXG4gICAgICAgICAgOiBkZWJ1Z0NoYW5uZWxSZWdpc3RyeS5yZWdpc3Rlcih0aGlzLCBkZWJ1Z0NoYW5uZWwpKTtcbiAgICAgIHRoaXMuX2Zyb21KU09OID0gY3JlYXRlRnJvbUpTT05DYWxsYmFjayh0aGlzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlU3RyZWFtU3RhdGUoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBfcm93U3RhdGU6IDAsXG4gICAgICAgIF9yb3dJRDogMCxcbiAgICAgICAgX3Jvd1RhZzogMCxcbiAgICAgICAgX3Jvd0xlbmd0aDogMCxcbiAgICAgICAgX2J1ZmZlcjogW11cbiAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc29sdmVEZWJ1Z0hhbHQocmVzcG9uc2UsIGlkKSB7XG4gICAgICB2YXIgY2h1bmtzID0gcmVzcG9uc2UuX2NodW5rcyxcbiAgICAgICAgY2h1bmsgPSBjaHVua3MuZ2V0KGlkKTtcbiAgICAgIGNodW5rIHx8IGNodW5rcy5zZXQoaWQsIChjaHVuayA9IGNyZWF0ZVBlbmRpbmdDaHVuayhyZXNwb25zZSkpKTtcbiAgICAgIGlmIChcInBlbmRpbmdcIiA9PT0gY2h1bmsuc3RhdHVzIHx8IFwiYmxvY2tlZFwiID09PSBjaHVuay5zdGF0dXMpXG4gICAgICAgIHJlbGVhc2VQZW5kaW5nQ2h1bmsocmVzcG9uc2UsIGNodW5rKSxcbiAgICAgICAgICAocmVzcG9uc2UgPSBjaHVuayksXG4gICAgICAgICAgKHJlc3BvbnNlLnN0YXR1cyA9IFwiaGFsdGVkXCIpLFxuICAgICAgICAgIChyZXNwb25zZS52YWx1ZSA9IG51bGwpLFxuICAgICAgICAgIChyZXNwb25zZS5yZWFzb24gPSBudWxsKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZU1vZGVsKHJlc3BvbnNlLCBpZCwgbW9kZWwpIHtcbiAgICAgIHZhciBjaHVua3MgPSByZXNwb25zZS5fY2h1bmtzLFxuICAgICAgICBjaHVuayA9IGNodW5rcy5nZXQoaWQpO1xuICAgICAgY2h1bmtcbiAgICAgICAgPyByZXNvbHZlTW9kZWxDaHVuayhyZXNwb25zZSwgY2h1bmssIG1vZGVsKVxuICAgICAgICA6IGNodW5rcy5zZXQoaWQsIG5ldyBSZWFjdFByb21pc2UoXCJyZXNvbHZlZF9tb2RlbFwiLCBtb2RlbCwgcmVzcG9uc2UpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZVRleHQocmVzcG9uc2UsIGlkLCB0ZXh0KSB7XG4gICAgICB2YXIgY2h1bmtzID0gcmVzcG9uc2UuX2NodW5rcyxcbiAgICAgICAgY2h1bmsgPSBjaHVua3MuZ2V0KGlkKTtcbiAgICAgIGNodW5rICYmIFwicGVuZGluZ1wiICE9PSBjaHVuay5zdGF0dXNcbiAgICAgICAgPyBjaHVuay5yZWFzb24uZW5xdWV1ZVZhbHVlKHRleHQpXG4gICAgICAgIDogKGNodW5rICYmIHJlbGVhc2VQZW5kaW5nQ2h1bmsocmVzcG9uc2UsIGNodW5rKSxcbiAgICAgICAgICBjaHVua3Muc2V0KGlkLCBuZXcgUmVhY3RQcm9taXNlKFwiZnVsZmlsbGVkXCIsIHRleHQsIG51bGwpKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc29sdmVCdWZmZXIocmVzcG9uc2UsIGlkLCBidWZmZXIpIHtcbiAgICAgIHZhciBjaHVua3MgPSByZXNwb25zZS5fY2h1bmtzLFxuICAgICAgICBjaHVuayA9IGNodW5rcy5nZXQoaWQpO1xuICAgICAgY2h1bmsgJiYgXCJwZW5kaW5nXCIgIT09IGNodW5rLnN0YXR1c1xuICAgICAgICA/IGNodW5rLnJlYXNvbi5lbnF1ZXVlVmFsdWUoYnVmZmVyKVxuICAgICAgICA6IChjaHVuayAmJiByZWxlYXNlUGVuZGluZ0NodW5rKHJlc3BvbnNlLCBjaHVuayksXG4gICAgICAgICAgY2h1bmtzLnNldChpZCwgbmV3IFJlYWN0UHJvbWlzZShcImZ1bGZpbGxlZFwiLCBidWZmZXIsIG51bGwpKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc29sdmVNb2R1bGUocmVzcG9uc2UsIGlkLCBtb2RlbCkge1xuICAgICAgdmFyIGNodW5rcyA9IHJlc3BvbnNlLl9jaHVua3MsXG4gICAgICAgIGNodW5rID0gY2h1bmtzLmdldChpZCk7XG4gICAgICBtb2RlbCA9IEpTT04ucGFyc2UobW9kZWwsIHJlc3BvbnNlLl9mcm9tSlNPTik7XG4gICAgICB2YXIgY2xpZW50UmVmZXJlbmNlID0gcmVzb2x2ZUNsaWVudFJlZmVyZW5jZShcbiAgICAgICAgcmVzcG9uc2UuX2J1bmRsZXJDb25maWcsXG4gICAgICAgIG1vZGVsXG4gICAgICApO1xuICAgICAgaWYgKChtb2RlbCA9IHByZWxvYWRNb2R1bGUoY2xpZW50UmVmZXJlbmNlKSkpIHtcbiAgICAgICAgaWYgKGNodW5rKSB7XG4gICAgICAgICAgcmVsZWFzZVBlbmRpbmdDaHVuayhyZXNwb25zZSwgY2h1bmspO1xuICAgICAgICAgIHZhciBibG9ja2VkQ2h1bmsgPSBjaHVuaztcbiAgICAgICAgICBibG9ja2VkQ2h1bmsuc3RhdHVzID0gXCJibG9ja2VkXCI7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIChibG9ja2VkQ2h1bmsgPSBuZXcgUmVhY3RQcm9taXNlKFwiYmxvY2tlZFwiLCBudWxsLCBudWxsKSksXG4gICAgICAgICAgICBjaHVua3Muc2V0KGlkLCBibG9ja2VkQ2h1bmspO1xuICAgICAgICBtb2RlbC50aGVuKFxuICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlTW9kdWxlQ2h1bmsocmVzcG9uc2UsIGJsb2NrZWRDaHVuaywgY2xpZW50UmVmZXJlbmNlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIHRyaWdnZXJFcnJvck9uQ2h1bmsocmVzcG9uc2UsIGJsb2NrZWRDaHVuaywgZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZVxuICAgICAgICBjaHVua1xuICAgICAgICAgID8gcmVzb2x2ZU1vZHVsZUNodW5rKHJlc3BvbnNlLCBjaHVuaywgY2xpZW50UmVmZXJlbmNlKVxuICAgICAgICAgIDogY2h1bmtzLnNldChcbiAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgIG5ldyBSZWFjdFByb21pc2UoXCJyZXNvbHZlZF9tb2R1bGVcIiwgY2xpZW50UmVmZXJlbmNlLCBudWxsKVxuICAgICAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZVN0cmVhbShyZXNwb25zZSwgaWQsIHN0cmVhbSwgY29udHJvbGxlcikge1xuICAgICAgdmFyIGNodW5rcyA9IHJlc3BvbnNlLl9jaHVua3MsXG4gICAgICAgIGNodW5rID0gY2h1bmtzLmdldChpZCk7XG4gICAgICBjaHVua1xuICAgICAgICA/IFwicGVuZGluZ1wiID09PSBjaHVuay5zdGF0dXMgJiZcbiAgICAgICAgICAocmVsZWFzZVBlbmRpbmdDaHVuayhyZXNwb25zZSwgY2h1bmspLFxuICAgICAgICAgIChyZXNwb25zZSA9IGNodW5rLnZhbHVlKSxcbiAgICAgICAgICAoY2h1bmsuc3RhdHVzID0gXCJmdWxmaWxsZWRcIiksXG4gICAgICAgICAgKGNodW5rLnZhbHVlID0gc3RyZWFtKSxcbiAgICAgICAgICAoY2h1bmsucmVhc29uID0gY29udHJvbGxlciksXG4gICAgICAgICAgbnVsbCAhPT0gcmVzcG9uc2UgJiYgd2FrZUNodW5rKHJlc3BvbnNlLCBjaHVuay52YWx1ZSkpXG4gICAgICAgIDogY2h1bmtzLnNldChpZCwgbmV3IFJlYWN0UHJvbWlzZShcImZ1bGZpbGxlZFwiLCBzdHJlYW0sIGNvbnRyb2xsZXIpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3RhcnRSZWFkYWJsZVN0cmVhbShyZXNwb25zZSwgaWQsIHR5cGUpIHtcbiAgICAgIHZhciBjb250cm9sbGVyID0gbnVsbDtcbiAgICAgIHR5cGUgPSBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICBzdGFydDogZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgICBjb250cm9sbGVyID0gYztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB2YXIgcHJldmlvdXNCbG9ja2VkQ2h1bmsgPSBudWxsO1xuICAgICAgcmVzb2x2ZVN0cmVhbShyZXNwb25zZSwgaWQsIHR5cGUsIHtcbiAgICAgICAgZW5xdWV1ZVZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBudWxsID09PSBwcmV2aW91c0Jsb2NrZWRDaHVua1xuICAgICAgICAgICAgPyBjb250cm9sbGVyLmVucXVldWUodmFsdWUpXG4gICAgICAgICAgICA6IHByZXZpb3VzQmxvY2tlZENodW5rLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBlbnF1ZXVlTW9kZWw6IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgICAgICAgaWYgKG51bGwgPT09IHByZXZpb3VzQmxvY2tlZENodW5rKSB7XG4gICAgICAgICAgICB2YXIgY2h1bmsgPSBuZXcgUmVhY3RQcm9taXNlKFwicmVzb2x2ZWRfbW9kZWxcIiwganNvbiwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgaW5pdGlhbGl6ZU1vZGVsQ2h1bmsoY2h1bmspO1xuICAgICAgICAgICAgXCJmdWxmaWxsZWRcIiA9PT0gY2h1bmsuc3RhdHVzXG4gICAgICAgICAgICAgID8gY29udHJvbGxlci5lbnF1ZXVlKGNodW5rLnZhbHVlKVxuICAgICAgICAgICAgICA6IChjaHVuay50aGVuKFxuICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIuZW5xdWV1ZSh2KTtcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udHJvbGxlci5lcnJvcihlKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIChwcmV2aW91c0Jsb2NrZWRDaHVuayA9IGNodW5rKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNodW5rID0gcHJldmlvdXNCbG9ja2VkQ2h1bms7XG4gICAgICAgICAgICB2YXIgX2NodW5rMyA9IGNyZWF0ZVBlbmRpbmdDaHVuayhyZXNwb25zZSk7XG4gICAgICAgICAgICBfY2h1bmszLnRoZW4oXG4gICAgICAgICAgICAgIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIuZW5xdWV1ZSh2KTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udHJvbGxlci5lcnJvcihlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHByZXZpb3VzQmxvY2tlZENodW5rID0gX2NodW5rMztcbiAgICAgICAgICAgIGNodW5rLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBwcmV2aW91c0Jsb2NrZWRDaHVuayA9PT0gX2NodW5rMyAmJiAocHJldmlvdXNCbG9ja2VkQ2h1bmsgPSBudWxsKTtcbiAgICAgICAgICAgICAgcmVzb2x2ZU1vZGVsQ2h1bmsocmVzcG9uc2UsIF9jaHVuazMsIGpzb24pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjbG9zZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChudWxsID09PSBwcmV2aW91c0Jsb2NrZWRDaHVuaykgY29udHJvbGxlci5jbG9zZSgpO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGJsb2NrZWRDaHVuayA9IHByZXZpb3VzQmxvY2tlZENodW5rO1xuICAgICAgICAgICAgcHJldmlvdXNCbG9ja2VkQ2h1bmsgPSBudWxsO1xuICAgICAgICAgICAgYmxvY2tlZENodW5rLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICByZXR1cm4gY29udHJvbGxlci5jbG9zZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgaWYgKG51bGwgPT09IHByZXZpb3VzQmxvY2tlZENodW5rKSBjb250cm9sbGVyLmVycm9yKGVycm9yKTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBibG9ja2VkQ2h1bmsgPSBwcmV2aW91c0Jsb2NrZWRDaHVuaztcbiAgICAgICAgICAgIHByZXZpb3VzQmxvY2tlZENodW5rID0gbnVsbDtcbiAgICAgICAgICAgIGJsb2NrZWRDaHVuay50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYXN5bmNJdGVyYXRvcigpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVJdGVyYXRvcihuZXh0KSB7XG4gICAgICBuZXh0ID0geyBuZXh0OiBuZXh0IH07XG4gICAgICBuZXh0W0FTWU5DX0lURVJBVE9SXSA9IGFzeW5jSXRlcmF0b3I7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3RhcnRBc3luY0l0ZXJhYmxlKHJlc3BvbnNlLCBpZCwgaXRlcmF0b3IpIHtcbiAgICAgIHZhciBidWZmZXIgPSBbXSxcbiAgICAgICAgY2xvc2VkID0gITEsXG4gICAgICAgIG5leHRXcml0ZUluZGV4ID0gMCxcbiAgICAgICAgaXRlcmFibGUgPSB7fTtcbiAgICAgIGl0ZXJhYmxlW0FTWU5DX0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG5leHRSZWFkSW5kZXggPSAwO1xuICAgICAgICByZXR1cm4gY3JlYXRlSXRlcmF0b3IoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgIGlmICh2b2lkIDAgIT09IGFyZylcbiAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICBcIlZhbHVlcyBjYW5ub3QgYmUgcGFzc2VkIHRvIG5leHQoKSBvZiBBc3luY0l0ZXJhYmxlcyBwYXNzZWQgdG8gQ2xpZW50IENvbXBvbmVudHMuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG5leHRSZWFkSW5kZXggPT09IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChjbG9zZWQpXG4gICAgICAgICAgICAgIHJldHVybiBuZXcgUmVhY3RQcm9taXNlKFxuICAgICAgICAgICAgICAgIFwiZnVsZmlsbGVkXCIsXG4gICAgICAgICAgICAgICAgeyBkb25lOiAhMCwgdmFsdWU6IHZvaWQgMCB9LFxuICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJ1ZmZlcltuZXh0UmVhZEluZGV4XSA9IGNyZWF0ZVBlbmRpbmdDaHVuayhyZXNwb25zZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBidWZmZXJbbmV4dFJlYWRJbmRleCsrXTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgcmVzb2x2ZVN0cmVhbShcbiAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgIGlkLFxuICAgICAgICBpdGVyYXRvciA/IGl0ZXJhYmxlW0FTWU5DX0lURVJBVE9SXSgpIDogaXRlcmFibGUsXG4gICAgICAgIHtcbiAgICAgICAgICBlbnF1ZXVlVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKG5leHRXcml0ZUluZGV4ID09PSBidWZmZXIubGVuZ3RoKVxuICAgICAgICAgICAgICBidWZmZXJbbmV4dFdyaXRlSW5kZXhdID0gbmV3IFJlYWN0UHJvbWlzZShcbiAgICAgICAgICAgICAgICBcImZ1bGZpbGxlZFwiLFxuICAgICAgICAgICAgICAgIHsgZG9uZTogITEsIHZhbHVlOiB2YWx1ZSB9LFxuICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgY2h1bmsgPSBidWZmZXJbbmV4dFdyaXRlSW5kZXhdLFxuICAgICAgICAgICAgICAgIHJlc29sdmVMaXN0ZW5lcnMgPSBjaHVuay52YWx1ZSxcbiAgICAgICAgICAgICAgICByZWplY3RMaXN0ZW5lcnMgPSBjaHVuay5yZWFzb247XG4gICAgICAgICAgICAgIGNodW5rLnN0YXR1cyA9IFwiZnVsZmlsbGVkXCI7XG4gICAgICAgICAgICAgIGNodW5rLnZhbHVlID0geyBkb25lOiAhMSwgdmFsdWU6IHZhbHVlIH07XG4gICAgICAgICAgICAgIG51bGwgIT09IHJlc29sdmVMaXN0ZW5lcnMgJiZcbiAgICAgICAgICAgICAgICB3YWtlQ2h1bmtJZkluaXRpYWxpemVkKFxuICAgICAgICAgICAgICAgICAgY2h1bmssXG4gICAgICAgICAgICAgICAgICByZXNvbHZlTGlzdGVuZXJzLFxuICAgICAgICAgICAgICAgICAgcmVqZWN0TGlzdGVuZXJzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5leHRXcml0ZUluZGV4Kys7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlbnF1ZXVlTW9kZWw6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgbmV4dFdyaXRlSW5kZXggPT09IGJ1ZmZlci5sZW5ndGhcbiAgICAgICAgICAgICAgPyAoYnVmZmVyW25leHRXcml0ZUluZGV4XSA9IGNyZWF0ZVJlc29sdmVkSXRlcmF0b3JSZXN1bHRDaHVuayhcbiAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAhMVxuICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgIDogcmVzb2x2ZUl0ZXJhdG9yUmVzdWx0Q2h1bmsoXG4gICAgICAgICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgIGJ1ZmZlcltuZXh0V3JpdGVJbmRleF0sXG4gICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICExXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG5leHRXcml0ZUluZGV4Kys7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjbG9zZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBjbG9zZWQgPSAhMDtcbiAgICAgICAgICAgIG5leHRXcml0ZUluZGV4ID09PSBidWZmZXIubGVuZ3RoXG4gICAgICAgICAgICAgID8gKGJ1ZmZlcltuZXh0V3JpdGVJbmRleF0gPSBjcmVhdGVSZXNvbHZlZEl0ZXJhdG9yUmVzdWx0Q2h1bmsoXG4gICAgICAgICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgITBcbiAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICA6IHJlc29sdmVJdGVyYXRvclJlc3VsdENodW5rKFxuICAgICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgICBidWZmZXJbbmV4dFdyaXRlSW5kZXhdLFxuICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAhMFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBmb3IgKG5leHRXcml0ZUluZGV4Kys7IG5leHRXcml0ZUluZGV4IDwgYnVmZmVyLmxlbmd0aDsgKVxuICAgICAgICAgICAgICByZXNvbHZlSXRlcmF0b3JSZXN1bHRDaHVuayhcbiAgICAgICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgICAgICBidWZmZXJbbmV4dFdyaXRlSW5kZXgrK10sXG4gICAgICAgICAgICAgICAgJ1wiJHVuZGVmaW5lZFwiJyxcbiAgICAgICAgICAgICAgICAhMFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgY2xvc2VkID0gITA7XG4gICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICBuZXh0V3JpdGVJbmRleCA9PT0gYnVmZmVyLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAoYnVmZmVyW25leHRXcml0ZUluZGV4XSA9IGNyZWF0ZVBlbmRpbmdDaHVuayhyZXNwb25zZSkpO1xuICAgICAgICAgICAgICBuZXh0V3JpdGVJbmRleCA8IGJ1ZmZlci5sZW5ndGg7XG5cbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgdHJpZ2dlckVycm9yT25DaHVuayhyZXNwb25zZSwgYnVmZmVyW25leHRXcml0ZUluZGV4KytdLCBlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzdG9wU3RyZWFtKHJlc3BvbnNlLCBpZCwgcm93KSB7XG4gICAgICAocmVzcG9uc2UgPSByZXNwb25zZS5fY2h1bmtzLmdldChpZCkpICYmXG4gICAgICAgIFwiZnVsZmlsbGVkXCIgPT09IHJlc3BvbnNlLnN0YXR1cyAmJlxuICAgICAgICByZXNwb25zZS5yZWFzb24uY2xvc2UoXCJcIiA9PT0gcm93ID8gJ1wiJHVuZGVmaW5lZFwiJyA6IHJvdyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc29sdmVFcnJvckRldihyZXNwb25zZSwgZXJyb3JJbmZvKSB7XG4gICAgICB2YXIgbmFtZSA9IGVycm9ySW5mby5uYW1lLFxuICAgICAgICBlbnYgPSBlcnJvckluZm8uZW52O1xuICAgICAgZXJyb3JJbmZvID0gYnVpbGRGYWtlQ2FsbFN0YWNrKFxuICAgICAgICByZXNwb25zZSxcbiAgICAgICAgZXJyb3JJbmZvLnN0YWNrLFxuICAgICAgICBlbnYsXG4gICAgICAgICExLFxuICAgICAgICBFcnJvci5iaW5kKFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgZXJyb3JJbmZvLm1lc3NhZ2UgfHxcbiAgICAgICAgICAgIFwiQW4gZXJyb3Igb2NjdXJyZWQgaW4gdGhlIFNlcnZlciBDb21wb25lbnRzIHJlbmRlciBidXQgbm8gbWVzc2FnZSB3YXMgcHJvdmlkZWRcIlxuICAgICAgICApXG4gICAgICApO1xuICAgICAgcmVzcG9uc2UgPSBnZXRSb290VGFzayhyZXNwb25zZSwgZW52KTtcbiAgICAgIHJlc3BvbnNlID0gbnVsbCAhPSByZXNwb25zZSA/IHJlc3BvbnNlLnJ1bihlcnJvckluZm8pIDogZXJyb3JJbmZvKCk7XG4gICAgICByZXNwb25zZS5uYW1lID0gbmFtZTtcbiAgICAgIHJlc3BvbnNlLmVudmlyb25tZW50TmFtZSA9IGVudjtcbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZUhpbnQocmVzcG9uc2UsIGNvZGUsIG1vZGVsKSB7XG4gICAgICByZXNwb25zZSA9IEpTT04ucGFyc2UobW9kZWwsIHJlc3BvbnNlLl9mcm9tSlNPTik7XG4gICAgICBtb2RlbCA9IFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLmQ7XG4gICAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgICAgY2FzZSBcIkRcIjpcbiAgICAgICAgICBtb2RlbC5EKHJlc3BvbnNlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkNcIjpcbiAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgcmVzcG9uc2VcbiAgICAgICAgICAgID8gbW9kZWwuQyhyZXNwb25zZSlcbiAgICAgICAgICAgIDogbW9kZWwuQyhyZXNwb25zZVswXSwgcmVzcG9uc2VbMV0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTFwiOlxuICAgICAgICAgIGNvZGUgPSByZXNwb25zZVswXTtcbiAgICAgICAgICB2YXIgYXMgPSByZXNwb25zZVsxXTtcbiAgICAgICAgICAzID09PSByZXNwb25zZS5sZW5ndGhcbiAgICAgICAgICAgID8gbW9kZWwuTChjb2RlLCBhcywgcmVzcG9uc2VbMl0pXG4gICAgICAgICAgICA6IG1vZGVsLkwoY29kZSwgYXMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwibVwiOlxuICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiByZXNwb25zZVxuICAgICAgICAgICAgPyBtb2RlbC5tKHJlc3BvbnNlKVxuICAgICAgICAgICAgOiBtb2RlbC5tKHJlc3BvbnNlWzBdLCByZXNwb25zZVsxXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJYXCI6XG4gICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHJlc3BvbnNlXG4gICAgICAgICAgICA/IG1vZGVsLlgocmVzcG9uc2UpXG4gICAgICAgICAgICA6IG1vZGVsLlgocmVzcG9uc2VbMF0sIHJlc3BvbnNlWzFdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlNcIjpcbiAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgcmVzcG9uc2VcbiAgICAgICAgICAgID8gbW9kZWwuUyhyZXNwb25zZSlcbiAgICAgICAgICAgIDogbW9kZWwuUyhcbiAgICAgICAgICAgICAgICByZXNwb25zZVswXSxcbiAgICAgICAgICAgICAgICAwID09PSByZXNwb25zZVsxXSA/IHZvaWQgMCA6IHJlc3BvbnNlWzFdLFxuICAgICAgICAgICAgICAgIDMgPT09IHJlc3BvbnNlLmxlbmd0aCA/IHJlc3BvbnNlWzJdIDogdm9pZCAwXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJNXCI6XG4gICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHJlc3BvbnNlXG4gICAgICAgICAgICA/IG1vZGVsLk0ocmVzcG9uc2UpXG4gICAgICAgICAgICA6IG1vZGVsLk0ocmVzcG9uc2VbMF0sIHJlc3BvbnNlWzFdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRmFrZUZ1bmN0aW9uKFxuICAgICAgbmFtZSxcbiAgICAgIGZpbGVuYW1lLFxuICAgICAgc291cmNlTWFwLFxuICAgICAgbGluZSxcbiAgICAgIGNvbCxcbiAgICAgIGVuY2xvc2luZ0xpbmUsXG4gICAgICBlbmNsb3NpbmdDb2wsXG4gICAgICBlbnZpcm9ubWVudE5hbWVcbiAgICApIHtcbiAgICAgIG5hbWUgfHwgKG5hbWUgPSBcIjxhbm9ueW1vdXM+XCIpO1xuICAgICAgdmFyIGVuY29kZWROYW1lID0gSlNPTi5zdHJpbmdpZnkobmFtZSk7XG4gICAgICAxID4gZW5jbG9zaW5nTGluZSA/IChlbmNsb3NpbmdMaW5lID0gMCkgOiBlbmNsb3NpbmdMaW5lLS07XG4gICAgICAxID4gZW5jbG9zaW5nQ29sID8gKGVuY2xvc2luZ0NvbCA9IDApIDogZW5jbG9zaW5nQ29sLS07XG4gICAgICAxID4gbGluZSA/IChsaW5lID0gMCkgOiBsaW5lLS07XG4gICAgICAxID4gY29sID8gKGNvbCA9IDApIDogY29sLS07XG4gICAgICBpZiAoXG4gICAgICAgIGxpbmUgPCBlbmNsb3NpbmdMaW5lIHx8XG4gICAgICAgIChsaW5lID09PSBlbmNsb3NpbmdMaW5lICYmIGNvbCA8IGVuY2xvc2luZ0NvbClcbiAgICAgIClcbiAgICAgICAgZW5jbG9zaW5nQ29sID0gZW5jbG9zaW5nTGluZSA9IDA7XG4gICAgICAxID4gbGluZVxuICAgICAgICA/ICgobGluZSA9IGVuY29kZWROYW1lLmxlbmd0aCArIDMpLFxuICAgICAgICAgIChlbmNsb3NpbmdDb2wgLT0gbGluZSksXG4gICAgICAgICAgMCA+IGVuY2xvc2luZ0NvbCAmJiAoZW5jbG9zaW5nQ29sID0gMCksXG4gICAgICAgICAgKGNvbCA9IGNvbCAtIGVuY2xvc2luZ0NvbCAtIGxpbmUgLSAzKSxcbiAgICAgICAgICAwID4gY29sICYmIChjb2wgPSAwKSxcbiAgICAgICAgICAoZW5jb2RlZE5hbWUgPVxuICAgICAgICAgICAgXCIoe1wiICtcbiAgICAgICAgICAgIGVuY29kZWROYW1lICtcbiAgICAgICAgICAgIFwiOlwiICtcbiAgICAgICAgICAgIFwiIFwiLnJlcGVhdChlbmNsb3NpbmdDb2wpICtcbiAgICAgICAgICAgIFwiXz0+XCIgK1xuICAgICAgICAgICAgXCIgXCIucmVwZWF0KGNvbCkgK1xuICAgICAgICAgICAgXCJfKCl9KVwiKSlcbiAgICAgICAgOiAxID4gZW5jbG9zaW5nTGluZVxuICAgICAgICAgID8gKChlbmNsb3NpbmdDb2wgLT0gZW5jb2RlZE5hbWUubGVuZ3RoICsgMyksXG4gICAgICAgICAgICAwID4gZW5jbG9zaW5nQ29sICYmIChlbmNsb3NpbmdDb2wgPSAwKSxcbiAgICAgICAgICAgIChlbmNvZGVkTmFtZSA9XG4gICAgICAgICAgICAgIFwiKHtcIiArXG4gICAgICAgICAgICAgIGVuY29kZWROYW1lICtcbiAgICAgICAgICAgICAgXCI6XCIgK1xuICAgICAgICAgICAgICBcIiBcIi5yZXBlYXQoZW5jbG9zaW5nQ29sKSArXG4gICAgICAgICAgICAgIFwiXz0+XCIgK1xuICAgICAgICAgICAgICBcIlxcblwiLnJlcGVhdChsaW5lIC0gZW5jbG9zaW5nTGluZSkgK1xuICAgICAgICAgICAgICBcIiBcIi5yZXBlYXQoY29sKSArXG4gICAgICAgICAgICAgIFwiXygpfSlcIikpXG4gICAgICAgICAgOiBlbmNsb3NpbmdMaW5lID09PSBsaW5lXG4gICAgICAgICAgICA/ICgoY29sID0gY29sIC0gZW5jbG9zaW5nQ29sIC0gMyksXG4gICAgICAgICAgICAgIDAgPiBjb2wgJiYgKGNvbCA9IDApLFxuICAgICAgICAgICAgICAoZW5jb2RlZE5hbWUgPVxuICAgICAgICAgICAgICAgIFwiXFxuXCIucmVwZWF0KGVuY2xvc2luZ0xpbmUgLSAxKSArXG4gICAgICAgICAgICAgICAgXCIoe1wiICtcbiAgICAgICAgICAgICAgICBlbmNvZGVkTmFtZSArXG4gICAgICAgICAgICAgICAgXCI6XFxuXCIgK1xuICAgICAgICAgICAgICAgIFwiIFwiLnJlcGVhdChlbmNsb3NpbmdDb2wpICtcbiAgICAgICAgICAgICAgICBcIl89PlwiICtcbiAgICAgICAgICAgICAgICBcIiBcIi5yZXBlYXQoY29sKSArXG4gICAgICAgICAgICAgICAgXCJfKCl9KVwiKSlcbiAgICAgICAgICAgIDogKGVuY29kZWROYW1lID1cbiAgICAgICAgICAgICAgICBcIlxcblwiLnJlcGVhdChlbmNsb3NpbmdMaW5lIC0gMSkgK1xuICAgICAgICAgICAgICAgIFwiKHtcIiArXG4gICAgICAgICAgICAgICAgZW5jb2RlZE5hbWUgK1xuICAgICAgICAgICAgICAgIFwiOlxcblwiICtcbiAgICAgICAgICAgICAgICBcIiBcIi5yZXBlYXQoZW5jbG9zaW5nQ29sKSArXG4gICAgICAgICAgICAgICAgXCJfPT5cIiArXG4gICAgICAgICAgICAgICAgXCJcXG5cIi5yZXBlYXQobGluZSAtIGVuY2xvc2luZ0xpbmUpICtcbiAgICAgICAgICAgICAgICBcIiBcIi5yZXBlYXQoY29sKSArXG4gICAgICAgICAgICAgICAgXCJfKCl9KVwiKTtcbiAgICAgIGVuY29kZWROYW1lID1cbiAgICAgICAgMSA+IGVuY2xvc2luZ0xpbmVcbiAgICAgICAgICA/IGVuY29kZWROYW1lICtcbiAgICAgICAgICAgIFwiXFxuLyogVGhpcyBtb2R1bGUgd2FzIHJlbmRlcmVkIGJ5IGEgU2VydmVyIENvbXBvbmVudC4gVHVybiBvbiBTb3VyY2UgTWFwcyB0byBzZWUgdGhlIHNlcnZlciBzb3VyY2UuICovXCJcbiAgICAgICAgICA6IFwiLyogVGhpcyBtb2R1bGUgd2FzIHJlbmRlcmVkIGJ5IGEgU2VydmVyIENvbXBvbmVudC4gVHVybiBvbiBTb3VyY2UgTWFwcyB0byBzZWUgdGhlIHNlcnZlciBzb3VyY2UuICovXCIgK1xuICAgICAgICAgICAgZW5jb2RlZE5hbWU7XG4gICAgICBmaWxlbmFtZS5zdGFydHNXaXRoKFwiL1wiKSAmJiAoZmlsZW5hbWUgPSBcImZpbGU6Ly9cIiArIGZpbGVuYW1lKTtcbiAgICAgIHNvdXJjZU1hcFxuICAgICAgICA/ICgoZW5jb2RlZE5hbWUgKz1cbiAgICAgICAgICAgIFwiXFxuLy8jIHNvdXJjZVVSTD1yc2M6Ly9SZWFjdC9cIiArXG4gICAgICAgICAgICBlbmNvZGVVUklDb21wb25lbnQoZW52aXJvbm1lbnROYW1lKSArXG4gICAgICAgICAgICBcIi9cIiArXG4gICAgICAgICAgICBlbmNvZGVVUkkoZmlsZW5hbWUpICtcbiAgICAgICAgICAgIFwiP1wiICtcbiAgICAgICAgICAgIGZha2VGdW5jdGlvbklkeCsrKSxcbiAgICAgICAgICAoZW5jb2RlZE5hbWUgKz0gXCJcXG4vLyMgc291cmNlTWFwcGluZ1VSTD1cIiArIHNvdXJjZU1hcCkpXG4gICAgICAgIDogKGVuY29kZWROYW1lID0gZmlsZW5hbWVcbiAgICAgICAgICAgID8gZW5jb2RlZE5hbWUgKyAoXCJcXG4vLyMgc291cmNlVVJMPVwiICsgZW5jb2RlVVJJKGZpbGVuYW1lKSlcbiAgICAgICAgICAgIDogZW5jb2RlZE5hbWUgKyBcIlxcbi8vIyBzb3VyY2VVUkw9PGFub255bW91cz5cIik7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgZm4gPSAoMCwgZXZhbCkoZW5jb2RlZE5hbWUpW25hbWVdO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICBmbiA9IGZ1bmN0aW9uIChfKSB7XG4gICAgICAgICAgcmV0dXJuIF8oKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmbjtcbiAgICB9XG4gICAgZnVuY3Rpb24gYnVpbGRGYWtlQ2FsbFN0YWNrKFxuICAgICAgcmVzcG9uc2UsXG4gICAgICBzdGFjayxcbiAgICAgIGVudmlyb25tZW50TmFtZSxcbiAgICAgIHVzZUVuY2xvc2luZ0xpbmUsXG4gICAgICBpbm5lckNhbGxcbiAgICApIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhY2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGZyYW1lID0gc3RhY2tbaV0sXG4gICAgICAgICAgZnJhbWVLZXkgPVxuICAgICAgICAgICAgZnJhbWUuam9pbihcIi1cIikgK1xuICAgICAgICAgICAgXCItXCIgK1xuICAgICAgICAgICAgZW52aXJvbm1lbnROYW1lICtcbiAgICAgICAgICAgICh1c2VFbmNsb3NpbmdMaW5lID8gXCItZVwiIDogXCItblwiKSxcbiAgICAgICAgICBmbiA9IGZha2VGdW5jdGlvbkNhY2hlLmdldChmcmFtZUtleSk7XG4gICAgICAgIGlmICh2b2lkIDAgPT09IGZuKSB7XG4gICAgICAgICAgZm4gPSBmcmFtZVswXTtcbiAgICAgICAgICB2YXIgZmlsZW5hbWUgPSBmcmFtZVsxXSxcbiAgICAgICAgICAgIGxpbmUgPSBmcmFtZVsyXSxcbiAgICAgICAgICAgIGNvbCA9IGZyYW1lWzNdLFxuICAgICAgICAgICAgZW5jbG9zaW5nTGluZSA9IGZyYW1lWzRdO1xuICAgICAgICAgIGZyYW1lID0gZnJhbWVbNV07XG4gICAgICAgICAgdmFyIGZpbmRTb3VyY2VNYXBVUkwgPSByZXNwb25zZS5fZGVidWdGaW5kU291cmNlTWFwVVJMO1xuICAgICAgICAgIGZpbmRTb3VyY2VNYXBVUkwgPSBmaW5kU291cmNlTWFwVVJMXG4gICAgICAgICAgICA/IGZpbmRTb3VyY2VNYXBVUkwoZmlsZW5hbWUsIGVudmlyb25tZW50TmFtZSlcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICBmbiA9IGNyZWF0ZUZha2VGdW5jdGlvbihcbiAgICAgICAgICAgIGZuLFxuICAgICAgICAgICAgZmlsZW5hbWUsXG4gICAgICAgICAgICBmaW5kU291cmNlTWFwVVJMLFxuICAgICAgICAgICAgbGluZSxcbiAgICAgICAgICAgIGNvbCxcbiAgICAgICAgICAgIHVzZUVuY2xvc2luZ0xpbmUgPyBsaW5lIDogZW5jbG9zaW5nTGluZSxcbiAgICAgICAgICAgIHVzZUVuY2xvc2luZ0xpbmUgPyBjb2wgOiBmcmFtZSxcbiAgICAgICAgICAgIGVudmlyb25tZW50TmFtZVxuICAgICAgICAgICk7XG4gICAgICAgICAgZmFrZUZ1bmN0aW9uQ2FjaGUuc2V0KGZyYW1lS2V5LCBmbik7XG4gICAgICAgIH1cbiAgICAgICAgaW5uZXJDYWxsID0gZm4uYmluZChudWxsLCBpbm5lckNhbGwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlubmVyQ2FsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Um9vdFRhc2socmVzcG9uc2UsIGNoaWxkRW52aXJvbm1lbnROYW1lKSB7XG4gICAgICB2YXIgcm9vdFRhc2sgPSByZXNwb25zZS5fZGVidWdSb290VGFzaztcbiAgICAgIHJldHVybiByb290VGFza1xuICAgICAgICA/IHJlc3BvbnNlLl9yb290RW52aXJvbm1lbnROYW1lICE9PSBjaGlsZEVudmlyb25tZW50TmFtZVxuICAgICAgICAgID8gKChyZXNwb25zZSA9IGNvbnNvbGUuY3JlYXRlVGFzay5iaW5kKFxuICAgICAgICAgICAgICBjb25zb2xlLFxuICAgICAgICAgICAgICAnXCJ1c2UgJyArIGNoaWxkRW52aXJvbm1lbnROYW1lLnRvTG93ZXJDYXNlKCkgKyAnXCInXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIHJvb3RUYXNrLnJ1bihyZXNwb25zZSkpXG4gICAgICAgICAgOiByb290VGFza1xuICAgICAgICA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluaXRpYWxpemVGYWtlVGFzayhyZXNwb25zZSwgZGVidWdJbmZvKSB7XG4gICAgICBpZiAoIXN1cHBvcnRzQ3JlYXRlVGFzayB8fCBudWxsID09IGRlYnVnSW5mby5zdGFjaykgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgY2FjaGVkRW50cnkgPSBkZWJ1Z0luZm8uZGVidWdUYXNrO1xuICAgICAgaWYgKHZvaWQgMCAhPT0gY2FjaGVkRW50cnkpIHJldHVybiBjYWNoZWRFbnRyeTtcbiAgICAgIHZhciB1c2VFbmNsb3NpbmdMaW5lID0gdm9pZCAwID09PSBkZWJ1Z0luZm8ua2V5LFxuICAgICAgICBzdGFjayA9IGRlYnVnSW5mby5zdGFjayxcbiAgICAgICAgZW52ID1cbiAgICAgICAgICBudWxsID09IGRlYnVnSW5mby5lbnYgPyByZXNwb25zZS5fcm9vdEVudmlyb25tZW50TmFtZSA6IGRlYnVnSW5mby5lbnY7XG4gICAgICBjYWNoZWRFbnRyeSA9XG4gICAgICAgIG51bGwgPT0gZGVidWdJbmZvLm93bmVyIHx8IG51bGwgPT0gZGVidWdJbmZvLm93bmVyLmVudlxuICAgICAgICAgID8gcmVzcG9uc2UuX3Jvb3RFbnZpcm9ubWVudE5hbWVcbiAgICAgICAgICA6IGRlYnVnSW5mby5vd25lci5lbnY7XG4gICAgICB2YXIgb3duZXJUYXNrID1cbiAgICAgICAgbnVsbCA9PSBkZWJ1Z0luZm8ub3duZXJcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6IGluaXRpYWxpemVGYWtlVGFzayhyZXNwb25zZSwgZGVidWdJbmZvLm93bmVyKTtcbiAgICAgIGVudiA9XG4gICAgICAgIGVudiAhPT0gY2FjaGVkRW50cnlcbiAgICAgICAgICA/ICdcInVzZSAnICsgZW52LnRvTG93ZXJDYXNlKCkgKyAnXCInXG4gICAgICAgICAgOiB2b2lkIDAgIT09IGRlYnVnSW5mby5rZXlcbiAgICAgICAgICAgID8gXCI8XCIgKyAoZGVidWdJbmZvLm5hbWUgfHwgXCIuLi5cIikgKyBcIj5cIlxuICAgICAgICAgICAgOiB2b2lkIDAgIT09IGRlYnVnSW5mby5uYW1lXG4gICAgICAgICAgICAgID8gZGVidWdJbmZvLm5hbWUgfHwgXCJ1bmtub3duXCJcbiAgICAgICAgICAgICAgOiBcImF3YWl0IFwiICsgKGRlYnVnSW5mby5hd2FpdGVkLm5hbWUgfHwgXCJ1bmtub3duXCIpO1xuICAgICAgZW52ID0gY29uc29sZS5jcmVhdGVUYXNrLmJpbmQoY29uc29sZSwgZW52KTtcbiAgICAgIHVzZUVuY2xvc2luZ0xpbmUgPSBidWlsZEZha2VDYWxsU3RhY2soXG4gICAgICAgIHJlc3BvbnNlLFxuICAgICAgICBzdGFjayxcbiAgICAgICAgY2FjaGVkRW50cnksXG4gICAgICAgIHVzZUVuY2xvc2luZ0xpbmUsXG4gICAgICAgIGVudlxuICAgICAgKTtcbiAgICAgIG51bGwgPT09IG93bmVyVGFza1xuICAgICAgICA/ICgocmVzcG9uc2UgPSBnZXRSb290VGFzayhyZXNwb25zZSwgY2FjaGVkRW50cnkpKSxcbiAgICAgICAgICAocmVzcG9uc2UgPVxuICAgICAgICAgICAgbnVsbCAhPSByZXNwb25zZVxuICAgICAgICAgICAgICA/IHJlc3BvbnNlLnJ1bih1c2VFbmNsb3NpbmdMaW5lKVxuICAgICAgICAgICAgICA6IHVzZUVuY2xvc2luZ0xpbmUoKSkpXG4gICAgICAgIDogKHJlc3BvbnNlID0gb3duZXJUYXNrLnJ1bih1c2VFbmNsb3NpbmdMaW5lKSk7XG4gICAgICByZXR1cm4gKGRlYnVnSW5mby5kZWJ1Z1Rhc2sgPSByZXNwb25zZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZha2VKU1hDYWxsU2l0ZSgpIHtcbiAgICAgIHJldHVybiBFcnJvcihcInJlYWN0LXN0YWNrLXRvcC1mcmFtZVwiKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaW5pdGlhbGl6ZUZha2VTdGFjayhyZXNwb25zZSwgZGVidWdJbmZvKSB7XG4gICAgICBpZiAodm9pZCAwID09PSBkZWJ1Z0luZm8uZGVidWdTdGFjaykge1xuICAgICAgICBudWxsICE9IGRlYnVnSW5mby5zdGFjayAmJlxuICAgICAgICAgIChkZWJ1Z0luZm8uZGVidWdTdGFjayA9IGNyZWF0ZUZha2VKU1hDYWxsU3RhY2tJbkRFVihcbiAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgZGVidWdJbmZvLnN0YWNrLFxuICAgICAgICAgICAgbnVsbCA9PSBkZWJ1Z0luZm8uZW52ID8gXCJcIiA6IGRlYnVnSW5mby5lbnZcbiAgICAgICAgICApKTtcbiAgICAgICAgdmFyIG93bmVyID0gZGVidWdJbmZvLm93bmVyO1xuICAgICAgICBudWxsICE9IG93bmVyICYmXG4gICAgICAgICAgKGluaXRpYWxpemVGYWtlU3RhY2socmVzcG9uc2UsIG93bmVyKSxcbiAgICAgICAgICB2b2lkIDAgPT09IG93bmVyLmRlYnVnTG9jYXRpb24gJiZcbiAgICAgICAgICAgIG51bGwgIT0gZGVidWdJbmZvLmRlYnVnU3RhY2sgJiZcbiAgICAgICAgICAgIChvd25lci5kZWJ1Z0xvY2F0aW9uID0gZGVidWdJbmZvLmRlYnVnU3RhY2spKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZURlYnVnSW5mbyhyZXNwb25zZSwgaWQsIGRlYnVnSW5mbykge1xuICAgICAgdm9pZCAwICE9PSBkZWJ1Z0luZm8uc3RhY2sgJiYgaW5pdGlhbGl6ZUZha2VUYXNrKHJlc3BvbnNlLCBkZWJ1Z0luZm8pO1xuICAgICAgbnVsbCA9PSBkZWJ1Z0luZm8ub3duZXIgJiYgbnVsbCAhPSByZXNwb25zZS5fZGVidWdSb290T3duZXJcbiAgICAgICAgPyAoKGRlYnVnSW5mby5vd25lciA9IHJlc3BvbnNlLl9kZWJ1Z1Jvb3RPd25lciksXG4gICAgICAgICAgKGRlYnVnSW5mby5zdGFjayA9IG51bGwpLFxuICAgICAgICAgIChkZWJ1Z0luZm8uZGVidWdTdGFjayA9IHJlc3BvbnNlLl9kZWJ1Z1Jvb3RTdGFjayksXG4gICAgICAgICAgKGRlYnVnSW5mby5kZWJ1Z1Rhc2sgPSByZXNwb25zZS5fZGVidWdSb290VGFzaykpXG4gICAgICAgIDogdm9pZCAwICE9PSBkZWJ1Z0luZm8uc3RhY2sgJiZcbiAgICAgICAgICBpbml0aWFsaXplRmFrZVN0YWNrKHJlc3BvbnNlLCBkZWJ1Z0luZm8pO1xuICAgICAgcmVzcG9uc2UgPSBnZXRDaHVuayhyZXNwb25zZSwgaWQpO1xuICAgICAgKHJlc3BvbnNlLl9kZWJ1Z0luZm8gfHwgKHJlc3BvbnNlLl9kZWJ1Z0luZm8gPSBbXSkpLnB1c2goZGVidWdJbmZvKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Q3VycmVudFN0YWNrSW5ERVYoKSB7XG4gICAgICB2YXIgb3duZXIgPSBjdXJyZW50T3duZXJJbkRFVjtcbiAgICAgIGlmIChudWxsID09PSBvd25lcikgcmV0dXJuIFwiXCI7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgaW5mbyA9IFwiXCI7XG4gICAgICAgIGlmIChvd25lci5vd25lciB8fCBcInN0cmluZ1wiICE9PSB0eXBlb2Ygb3duZXIubmFtZSkge1xuICAgICAgICAgIGZvciAoOyBvd25lcjsgKSB7XG4gICAgICAgICAgICB2YXIgb3duZXJTdGFjayA9IG93bmVyLmRlYnVnU3RhY2s7XG4gICAgICAgICAgICBpZiAobnVsbCAhPSBvd25lclN0YWNrKSB7XG4gICAgICAgICAgICAgIGlmICgob3duZXIgPSBvd25lci5vd25lcikpIHtcbiAgICAgICAgICAgICAgICB2YXIgSlNDb21waWxlcl90ZW1wX2NvbnN0ID0gaW5mbztcbiAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSBvd25lclN0YWNrLFxuICAgICAgICAgICAgICAgICAgcHJldlByZXBhcmVTdGFja1RyYWNlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7XG4gICAgICAgICAgICAgICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgdmFyIHN0YWNrID0gZXJyb3Iuc3RhY2s7XG4gICAgICAgICAgICAgICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBwcmV2UHJlcGFyZVN0YWNrVHJhY2U7XG4gICAgICAgICAgICAgICAgc3RhY2suc3RhcnRzV2l0aChcIkVycm9yOiByZWFjdC1zdGFjay10b3AtZnJhbWVcXG5cIikgJiZcbiAgICAgICAgICAgICAgICAgIChzdGFjayA9IHN0YWNrLnNsaWNlKDI5KSk7XG4gICAgICAgICAgICAgICAgdmFyIGlkeCA9IHN0YWNrLmluZGV4T2YoXCJcXG5cIik7XG4gICAgICAgICAgICAgICAgLTEgIT09IGlkeCAmJiAoc3RhY2sgPSBzdGFjay5zbGljZShpZHggKyAxKSk7XG4gICAgICAgICAgICAgICAgaWR4ID0gc3RhY2suaW5kZXhPZihcInJlYWN0X3N0YWNrX2JvdHRvbV9mcmFtZVwiKTtcbiAgICAgICAgICAgICAgICAtMSAhPT0gaWR4ICYmIChpZHggPSBzdGFjay5sYXN0SW5kZXhPZihcIlxcblwiLCBpZHgpKTtcbiAgICAgICAgICAgICAgICB2YXIgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID1cbiAgICAgICAgICAgICAgICAgIC0xICE9PSBpZHggPyAoc3RhY2sgPSBzdGFjay5zbGljZSgwLCBpZHgpKSA6IFwiXCI7XG4gICAgICAgICAgICAgICAgaW5mbyA9XG4gICAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX3RlbXBfY29uc3QgKyAoXCJcXG5cIiArIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCRqc2NvbXAkMCA9IGluZm87XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgSlNDb21waWxlcl90ZW1wX2NvbnN0ID0gb3duZXIubmFtZTtcbiAgICAgICAgICBpZiAodm9pZCAwID09PSBwcmVmaXgpXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgICAocHJlZml4ID1cbiAgICAgICAgICAgICAgICAoKGVycm9yID0geC5zdGFjay50cmltKCkubWF0Y2goL1xcbiggKihhdCApPykvKSkgJiYgZXJyb3JbMV0pIHx8XG4gICAgICAgICAgICAgICAgXCJcIiksXG4gICAgICAgICAgICAgICAgKHN1ZmZpeCA9XG4gICAgICAgICAgICAgICAgICAtMSA8IHguc3RhY2suaW5kZXhPZihcIlxcbiAgICBhdFwiKVxuICAgICAgICAgICAgICAgICAgICA/IFwiICg8YW5vbnltb3VzPilcIlxuICAgICAgICAgICAgICAgICAgICA6IC0xIDwgeC5zdGFjay5pbmRleE9mKFwiQFwiKVxuICAgICAgICAgICAgICAgICAgICAgID8gXCJAdW5rbm93bjowOjBcIlxuICAgICAgICAgICAgICAgICAgICAgIDogXCJcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0JGpzY29tcCQwID1cbiAgICAgICAgICAgIFwiXFxuXCIgKyBwcmVmaXggKyBKU0NvbXBpbGVyX3RlbXBfY29uc3QgKyBzdWZmaXg7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0JGpzY29tcCQwID1cbiAgICAgICAgICBcIlxcbkVycm9yIGdlbmVyYXRpbmcgc3RhY2s6IFwiICsgeC5tZXNzYWdlICsgXCJcXG5cIiArIHguc3RhY2s7XG4gICAgICB9XG4gICAgICByZXR1cm4gSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0JGpzY29tcCQwO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlQ29uc29sZUVudHJ5KHJlc3BvbnNlLCB2YWx1ZSkge1xuICAgICAgaWYgKHJlc3BvbnNlLl9yZXBsYXlDb25zb2xlKSB7XG4gICAgICAgIHZhciBwYXlsb2FkID0gSlNPTi5wYXJzZSh2YWx1ZSwgcmVzcG9uc2UuX2Zyb21KU09OKTtcbiAgICAgICAgdmFsdWUgPSBwYXlsb2FkWzBdO1xuICAgICAgICB2YXIgc3RhY2tUcmFjZSA9IHBheWxvYWRbMV0sXG4gICAgICAgICAgb3duZXIgPSBwYXlsb2FkWzJdLFxuICAgICAgICAgIGVudiA9IHBheWxvYWRbM107XG4gICAgICAgIHBheWxvYWQgPSBwYXlsb2FkLnNsaWNlKDQpO1xuICAgICAgICByZXBsYXlDb25zb2xlV2l0aENhbGxTdGFja0luREVWKFxuICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIHN0YWNrVHJhY2UsXG4gICAgICAgICAgb3duZXIsXG4gICAgICAgICAgZW52LFxuICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gbWVyZ2VCdWZmZXIoYnVmZmVyLCBsYXN0Q2h1bmspIHtcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciBsID0gYnVmZmVyLmxlbmd0aCwgYnl0ZUxlbmd0aCA9IGxhc3RDaHVuay5sZW5ndGgsIGkgPSAwO1xuICAgICAgICBpIDwgbDtcbiAgICAgICAgaSsrXG4gICAgICApXG4gICAgICAgIGJ5dGVMZW5ndGggKz0gYnVmZmVyW2ldLmJ5dGVMZW5ndGg7XG4gICAgICBieXRlTGVuZ3RoID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZUxlbmd0aCk7XG4gICAgICBmb3IgKHZhciBfaTMgPSAoaSA9IDApOyBfaTMgPCBsOyBfaTMrKykge1xuICAgICAgICB2YXIgY2h1bmsgPSBidWZmZXJbX2kzXTtcbiAgICAgICAgYnl0ZUxlbmd0aC5zZXQoY2h1bmssIGkpO1xuICAgICAgICBpICs9IGNodW5rLmJ5dGVMZW5ndGg7XG4gICAgICB9XG4gICAgICBieXRlTGVuZ3RoLnNldChsYXN0Q2h1bmssIGkpO1xuICAgICAgcmV0dXJuIGJ5dGVMZW5ndGg7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc29sdmVUeXBlZEFycmF5KFxuICAgICAgcmVzcG9uc2UsXG4gICAgICBpZCxcbiAgICAgIGJ1ZmZlcixcbiAgICAgIGxhc3RDaHVuayxcbiAgICAgIGNvbnN0cnVjdG9yLFxuICAgICAgYnl0ZXNQZXJFbGVtZW50XG4gICAgKSB7XG4gICAgICBidWZmZXIgPVxuICAgICAgICAwID09PSBidWZmZXIubGVuZ3RoICYmIDAgPT09IGxhc3RDaHVuay5ieXRlT2Zmc2V0ICUgYnl0ZXNQZXJFbGVtZW50XG4gICAgICAgICAgPyBsYXN0Q2h1bmtcbiAgICAgICAgICA6IG1lcmdlQnVmZmVyKGJ1ZmZlciwgbGFzdENodW5rKTtcbiAgICAgIGNvbnN0cnVjdG9yID0gbmV3IGNvbnN0cnVjdG9yKFxuICAgICAgICBidWZmZXIuYnVmZmVyLFxuICAgICAgICBidWZmZXIuYnl0ZU9mZnNldCxcbiAgICAgICAgYnVmZmVyLmJ5dGVMZW5ndGggLyBieXRlc1BlckVsZW1lbnRcbiAgICAgICk7XG4gICAgICByZXNvbHZlQnVmZmVyKHJlc3BvbnNlLCBpZCwgY29uc3RydWN0b3IpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmbHVzaEluaXRpYWxSZW5kZXJQZXJmb3JtYW5jZSgpIHt9XG4gICAgZnVuY3Rpb24gcHJvY2Vzc0Z1bGxCaW5hcnlSb3cocmVzcG9uc2UsIGlkLCB0YWcsIGJ1ZmZlciwgY2h1bmspIHtcbiAgICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICAgIGNhc2UgNjU6XG4gICAgICAgICAgcmVzb2x2ZUJ1ZmZlcihyZXNwb25zZSwgaWQsIG1lcmdlQnVmZmVyKGJ1ZmZlciwgY2h1bmspLmJ1ZmZlcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIDc5OlxuICAgICAgICAgIHJlc29sdmVUeXBlZEFycmF5KHJlc3BvbnNlLCBpZCwgYnVmZmVyLCBjaHVuaywgSW50OEFycmF5LCAxKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgMTExOlxuICAgICAgICAgIHJlc29sdmVCdWZmZXIoXG4gICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgMCA9PT0gYnVmZmVyLmxlbmd0aCA/IGNodW5rIDogbWVyZ2VCdWZmZXIoYnVmZmVyLCBjaHVuaylcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSA4NTpcbiAgICAgICAgICByZXNvbHZlVHlwZWRBcnJheShyZXNwb25zZSwgaWQsIGJ1ZmZlciwgY2h1bmssIFVpbnQ4Q2xhbXBlZEFycmF5LCAxKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgODM6XG4gICAgICAgICAgcmVzb2x2ZVR5cGVkQXJyYXkocmVzcG9uc2UsIGlkLCBidWZmZXIsIGNodW5rLCBJbnQxNkFycmF5LCAyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgMTE1OlxuICAgICAgICAgIHJlc29sdmVUeXBlZEFycmF5KHJlc3BvbnNlLCBpZCwgYnVmZmVyLCBjaHVuaywgVWludDE2QXJyYXksIDIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSA3NjpcbiAgICAgICAgICByZXNvbHZlVHlwZWRBcnJheShyZXNwb25zZSwgaWQsIGJ1ZmZlciwgY2h1bmssIEludDMyQXJyYXksIDQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSAxMDg6XG4gICAgICAgICAgcmVzb2x2ZVR5cGVkQXJyYXkocmVzcG9uc2UsIGlkLCBidWZmZXIsIGNodW5rLCBVaW50MzJBcnJheSwgNCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIDcxOlxuICAgICAgICAgIHJlc29sdmVUeXBlZEFycmF5KHJlc3BvbnNlLCBpZCwgYnVmZmVyLCBjaHVuaywgRmxvYXQzMkFycmF5LCA0KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgMTAzOlxuICAgICAgICAgIHJlc29sdmVUeXBlZEFycmF5KHJlc3BvbnNlLCBpZCwgYnVmZmVyLCBjaHVuaywgRmxvYXQ2NEFycmF5LCA4KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgNzc6XG4gICAgICAgICAgcmVzb2x2ZVR5cGVkQXJyYXkocmVzcG9uc2UsIGlkLCBidWZmZXIsIGNodW5rLCBCaWdJbnQ2NEFycmF5LCA4KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgMTA5OlxuICAgICAgICAgIHJlc29sdmVUeXBlZEFycmF5KHJlc3BvbnNlLCBpZCwgYnVmZmVyLCBjaHVuaywgQmlnVWludDY0QXJyYXksIDgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSA4NjpcbiAgICAgICAgICByZXNvbHZlVHlwZWRBcnJheShyZXNwb25zZSwgaWQsIGJ1ZmZlciwgY2h1bmssIERhdGFWaWV3LCAxKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgc3RyaW5nRGVjb2RlciA9IHJlc3BvbnNlLl9zdHJpbmdEZWNvZGVyLCByb3cgPSBcIlwiLCBpID0gMDtcbiAgICAgICAgaSA8IGJ1ZmZlci5sZW5ndGg7XG4gICAgICAgIGkrK1xuICAgICAgKVxuICAgICAgICByb3cgKz0gc3RyaW5nRGVjb2Rlci5kZWNvZGUoYnVmZmVyW2ldLCBkZWNvZGVyT3B0aW9ucyk7XG4gICAgICByb3cgKz0gc3RyaW5nRGVjb2Rlci5kZWNvZGUoY2h1bmspO1xuICAgICAgcHJvY2Vzc0Z1bGxTdHJpbmdSb3cocmVzcG9uc2UsIGlkLCB0YWcsIHJvdyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByb2Nlc3NGdWxsU3RyaW5nUm93KHJlc3BvbnNlLCBpZCwgdGFnLCByb3cpIHtcbiAgICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICAgIGNhc2UgNzM6XG4gICAgICAgICAgcmVzb2x2ZU1vZHVsZShyZXNwb25zZSwgaWQsIHJvdyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNzI6XG4gICAgICAgICAgcmVzb2x2ZUhpbnQocmVzcG9uc2UsIHJvd1swXSwgcm93LnNsaWNlKDEpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2OTpcbiAgICAgICAgICByb3cgPSBKU09OLnBhcnNlKHJvdyk7XG4gICAgICAgICAgdGFnID0gcmVzb2x2ZUVycm9yRGV2KHJlc3BvbnNlLCByb3cpO1xuICAgICAgICAgIHRhZy5kaWdlc3QgPSByb3cuZGlnZXN0O1xuICAgICAgICAgIHJvdyA9IHJlc3BvbnNlLl9jaHVua3M7XG4gICAgICAgICAgdmFyIGNodW5rID0gcm93LmdldChpZCk7XG4gICAgICAgICAgY2h1bmtcbiAgICAgICAgICAgID8gdHJpZ2dlckVycm9yT25DaHVuayhyZXNwb25zZSwgY2h1bmssIHRhZylcbiAgICAgICAgICAgIDogcm93LnNldChpZCwgbmV3IFJlYWN0UHJvbWlzZShcInJlamVjdGVkXCIsIG51bGwsIHRhZykpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDg0OlxuICAgICAgICAgIHJlc29sdmVUZXh0KHJlc3BvbnNlLCBpZCwgcm93KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3ODpcbiAgICAgICAgY2FzZSA2ODpcbiAgICAgICAgICB0YWcgPSBuZXcgUmVhY3RQcm9taXNlKFwicmVzb2x2ZWRfbW9kZWxcIiwgcm93LCByZXNwb25zZSk7XG4gICAgICAgICAgaW5pdGlhbGl6ZU1vZGVsQ2h1bmsodGFnKTtcbiAgICAgICAgICBcImZ1bGZpbGxlZFwiID09PSB0YWcuc3RhdHVzXG4gICAgICAgICAgICA/IHJlc29sdmVEZWJ1Z0luZm8ocmVzcG9uc2UsIGlkLCB0YWcudmFsdWUpXG4gICAgICAgICAgICA6IHRhZy50aGVuKFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZURlYnVnSW5mbyhyZXNwb25zZSwgaWQsIHYpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge31cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3NDpcbiAgICAgICAgY2FzZSA4NzpcbiAgICAgICAgICByZXNvbHZlQ29uc29sZUVudHJ5KHJlc3BvbnNlLCByb3cpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDgyOlxuICAgICAgICAgIHN0YXJ0UmVhZGFibGVTdHJlYW0ocmVzcG9uc2UsIGlkLCB2b2lkIDApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDExNDpcbiAgICAgICAgICBzdGFydFJlYWRhYmxlU3RyZWFtKHJlc3BvbnNlLCBpZCwgXCJieXRlc1wiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA4ODpcbiAgICAgICAgICBzdGFydEFzeW5jSXRlcmFibGUocmVzcG9uc2UsIGlkLCAhMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTIwOlxuICAgICAgICAgIHN0YXJ0QXN5bmNJdGVyYWJsZShyZXNwb25zZSwgaWQsICEwKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA2NzpcbiAgICAgICAgICBzdG9wU3RyZWFtKHJlc3BvbnNlLCBpZCwgcm93KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBcIlwiID09PSByb3dcbiAgICAgICAgICAgID8gcmVzb2x2ZURlYnVnSGFsdChyZXNwb25zZSwgaWQpXG4gICAgICAgICAgICA6IHJlc29sdmVNb2RlbChyZXNwb25zZSwgaWQsIHJvdyk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByb2Nlc3NCaW5hcnlDaHVuayh3ZWFrUmVzcG9uc2UsIHN0cmVhbVN0YXRlLCBjaHVuaykge1xuICAgICAgaWYgKHZvaWQgMCAhPT0gd2Vha1Jlc3BvbnNlLndlYWsuZGVyZWYoKSkge1xuICAgICAgICB2YXIgcmVzcG9uc2UgPSB1bndyYXBXZWFrUmVzcG9uc2Uod2Vha1Jlc3BvbnNlKSxcbiAgICAgICAgICBpID0gMCxcbiAgICAgICAgICByb3dTdGF0ZSA9IHN0cmVhbVN0YXRlLl9yb3dTdGF0ZTtcbiAgICAgICAgd2Vha1Jlc3BvbnNlID0gc3RyZWFtU3RhdGUuX3Jvd0lEO1xuICAgICAgICBmb3IgKFxuICAgICAgICAgIHZhciByb3dUYWcgPSBzdHJlYW1TdGF0ZS5fcm93VGFnLFxuICAgICAgICAgICAgcm93TGVuZ3RoID0gc3RyZWFtU3RhdGUuX3Jvd0xlbmd0aCxcbiAgICAgICAgICAgIGJ1ZmZlciA9IHN0cmVhbVN0YXRlLl9idWZmZXIsXG4gICAgICAgICAgICBjaHVua0xlbmd0aCA9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgICBpIDwgY2h1bmtMZW5ndGg7XG5cbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFyIGxhc3RJZHggPSAtMTtcbiAgICAgICAgICBzd2l0Y2ggKHJvd1N0YXRlKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIGxhc3RJZHggPSBjaHVua1tpKytdO1xuICAgICAgICAgICAgICA1OCA9PT0gbGFzdElkeFxuICAgICAgICAgICAgICAgID8gKHJvd1N0YXRlID0gMSlcbiAgICAgICAgICAgICAgICA6ICh3ZWFrUmVzcG9uc2UgPVxuICAgICAgICAgICAgICAgICAgICAod2Vha1Jlc3BvbnNlIDw8IDQpIHxcbiAgICAgICAgICAgICAgICAgICAgKDk2IDwgbGFzdElkeCA/IGxhc3RJZHggLSA4NyA6IGxhc3RJZHggLSA0OCkpO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgcm93U3RhdGUgPSBjaHVua1tpXTtcbiAgICAgICAgICAgICAgODQgPT09IHJvd1N0YXRlIHx8XG4gICAgICAgICAgICAgIDY1ID09PSByb3dTdGF0ZSB8fFxuICAgICAgICAgICAgICA3OSA9PT0gcm93U3RhdGUgfHxcbiAgICAgICAgICAgICAgMTExID09PSByb3dTdGF0ZSB8fFxuICAgICAgICAgICAgICA4NSA9PT0gcm93U3RhdGUgfHxcbiAgICAgICAgICAgICAgODMgPT09IHJvd1N0YXRlIHx8XG4gICAgICAgICAgICAgIDExNSA9PT0gcm93U3RhdGUgfHxcbiAgICAgICAgICAgICAgNzYgPT09IHJvd1N0YXRlIHx8XG4gICAgICAgICAgICAgIDEwOCA9PT0gcm93U3RhdGUgfHxcbiAgICAgICAgICAgICAgNzEgPT09IHJvd1N0YXRlIHx8XG4gICAgICAgICAgICAgIDEwMyA9PT0gcm93U3RhdGUgfHxcbiAgICAgICAgICAgICAgNzcgPT09IHJvd1N0YXRlIHx8XG4gICAgICAgICAgICAgIDEwOSA9PT0gcm93U3RhdGUgfHxcbiAgICAgICAgICAgICAgODYgPT09IHJvd1N0YXRlXG4gICAgICAgICAgICAgICAgPyAoKHJvd1RhZyA9IHJvd1N0YXRlKSwgKHJvd1N0YXRlID0gMiksIGkrKylcbiAgICAgICAgICAgICAgICA6ICg2NCA8IHJvd1N0YXRlICYmIDkxID4gcm93U3RhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgIDM1ID09PSByb3dTdGF0ZSB8fFxuICAgICAgICAgICAgICAgICAgICAxMTQgPT09IHJvd1N0YXRlIHx8XG4gICAgICAgICAgICAgICAgICAgIDEyMCA9PT0gcm93U3RhdGVcbiAgICAgICAgICAgICAgICAgID8gKChyb3dUYWcgPSByb3dTdGF0ZSksIChyb3dTdGF0ZSA9IDMpLCBpKyspXG4gICAgICAgICAgICAgICAgICA6ICgocm93VGFnID0gMCksIChyb3dTdGF0ZSA9IDMpKTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgIGxhc3RJZHggPSBjaHVua1tpKytdO1xuICAgICAgICAgICAgICA0NCA9PT0gbGFzdElkeFxuICAgICAgICAgICAgICAgID8gKHJvd1N0YXRlID0gNClcbiAgICAgICAgICAgICAgICA6IChyb3dMZW5ndGggPVxuICAgICAgICAgICAgICAgICAgICAocm93TGVuZ3RoIDw8IDQpIHxcbiAgICAgICAgICAgICAgICAgICAgKDk2IDwgbGFzdElkeCA/IGxhc3RJZHggLSA4NyA6IGxhc3RJZHggLSA0OCkpO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgbGFzdElkeCA9IGNodW5rLmluZGV4T2YoMTAsIGkpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgKGxhc3RJZHggPSBpICsgcm93TGVuZ3RoKSxcbiAgICAgICAgICAgICAgICBsYXN0SWR4ID4gY2h1bmsubGVuZ3RoICYmIChsYXN0SWR4ID0gLTEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgb2Zmc2V0ID0gY2h1bmsuYnl0ZU9mZnNldCArIGk7XG4gICAgICAgICAgaWYgKC0xIDwgbGFzdElkeClcbiAgICAgICAgICAgIChyb3dMZW5ndGggPSBuZXcgVWludDhBcnJheShjaHVuay5idWZmZXIsIG9mZnNldCwgbGFzdElkeCAtIGkpKSxcbiAgICAgICAgICAgICAgcHJvY2Vzc0Z1bGxCaW5hcnlSb3coXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgd2Vha1Jlc3BvbnNlLFxuICAgICAgICAgICAgICAgIHJvd1RhZyxcbiAgICAgICAgICAgICAgICBidWZmZXIsXG4gICAgICAgICAgICAgICAgcm93TGVuZ3RoXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIChpID0gbGFzdElkeCksXG4gICAgICAgICAgICAgIDMgPT09IHJvd1N0YXRlICYmIGkrKyxcbiAgICAgICAgICAgICAgKHJvd0xlbmd0aCA9IHdlYWtSZXNwb25zZSA9IHJvd1RhZyA9IHJvd1N0YXRlID0gMCksXG4gICAgICAgICAgICAgIChidWZmZXIubGVuZ3RoID0gMCk7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjaHVuayA9IG5ldyBVaW50OEFycmF5KGNodW5rLmJ1ZmZlciwgb2Zmc2V0LCBjaHVuay5ieXRlTGVuZ3RoIC0gaSk7XG4gICAgICAgICAgICBidWZmZXIucHVzaChjaHVuayk7XG4gICAgICAgICAgICByb3dMZW5ndGggLT0gY2h1bmsuYnl0ZUxlbmd0aDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdHJlYW1TdGF0ZS5fcm93U3RhdGUgPSByb3dTdGF0ZTtcbiAgICAgICAgc3RyZWFtU3RhdGUuX3Jvd0lEID0gd2Vha1Jlc3BvbnNlO1xuICAgICAgICBzdHJlYW1TdGF0ZS5fcm93VGFnID0gcm93VGFnO1xuICAgICAgICBzdHJlYW1TdGF0ZS5fcm93TGVuZ3RoID0gcm93TGVuZ3RoO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVGcm9tSlNPTkNhbGxiYWNrKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiB2YWx1ZSlcbiAgICAgICAgICByZXR1cm4gcGFyc2VNb2RlbFN0cmluZyhyZXNwb25zZSwgdGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2YgdmFsdWUgJiYgbnVsbCAhPT0gdmFsdWUpIHtcbiAgICAgICAgICBpZiAodmFsdWVbMF0gPT09IFJFQUNUX0VMRU1FTlRfVFlQRSlcbiAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgdmFyIG93bmVyID0gdmFsdWVbNF07XG4gICAgICAgICAgICAgIGtleSA9IHZhbHVlWzVdO1xuICAgICAgICAgICAgICB2YXIgdmFsaWRhdGVkID0gdmFsdWVbNl07XG4gICAgICAgICAgICAgIHZhbHVlID0ge1xuICAgICAgICAgICAgICAgICQkdHlwZW9mOiBSRUFDVF9FTEVNRU5UX1RZUEUsXG4gICAgICAgICAgICAgICAgdHlwZTogdmFsdWVbMV0sXG4gICAgICAgICAgICAgICAga2V5OiB2YWx1ZVsyXSxcbiAgICAgICAgICAgICAgICBwcm9wczogdmFsdWVbM10sXG4gICAgICAgICAgICAgICAgX293bmVyOiB2b2lkIDAgPT09IG93bmVyID8gbnVsbCA6IG93bmVyXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgXCJyZWZcIiwge1xuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICAgICAgICAgIGdldDogbnVsbFJlZkdldHRlclxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgdmFsdWUuX3N0b3JlID0ge307XG4gICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2YWx1ZS5fc3RvcmUsIFwidmFsaWRhdGVkXCIsIHtcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6ICExLFxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiAhMCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsaWRhdGVkXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmFsdWUsIFwiX2RlYnVnSW5mb1wiLCB7XG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiAhMSxcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogITAsXG4gICAgICAgICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgXCJfZGVidWdTdGFja1wiLCB7XG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiAhMSxcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogITAsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZvaWQgMCA9PT0ga2V5ID8gbnVsbCA6IGtleVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbHVlLCBcIl9kZWJ1Z1Rhc2tcIiwge1xuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogITEsXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgICAgICAgICAgd3JpdGFibGU6ICEwLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBpZiAobnVsbCAhPT0gaW5pdGlhbGl6aW5nSGFuZGxlcikge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRlZCA9IGluaXRpYWxpemluZ0hhbmRsZXI7XG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6aW5nSGFuZGxlciA9IHZhbGlkYXRlZC5wYXJlbnQ7XG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlZC5lcnJvcmVkKSB7XG4gICAgICAgICAgICAgICAgICBrZXkgPSBuZXcgUmVhY3RQcm9taXNlKFwicmVqZWN0ZWRcIiwgbnVsbCwgdmFsaWRhdGVkLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgIGluaXRpYWxpemVFbGVtZW50KHJlc3BvbnNlLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICB2YWxpZGF0ZWQgPSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh2YWx1ZS50eXBlKSB8fCBcIlwiLFxuICAgICAgICAgICAgICAgICAgICBvd25lcjogdmFsdWUuX293bmVyXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgdmFsaWRhdGVkLmRlYnVnU3RhY2sgPSB2YWx1ZS5fZGVidWdTdGFjaztcbiAgICAgICAgICAgICAgICAgIHN1cHBvcnRzQ3JlYXRlVGFzayAmJlxuICAgICAgICAgICAgICAgICAgICAodmFsaWRhdGVkLmRlYnVnVGFzayA9IHZhbHVlLl9kZWJ1Z1Rhc2spO1xuICAgICAgICAgICAgICAgICAga2V5Ll9kZWJ1Z0luZm8gPSBbdmFsaWRhdGVkXTtcbiAgICAgICAgICAgICAgICAgIHZhbHVlID0gY3JlYXRlTGF6eUNodW5rV3JhcHBlcihrZXkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWsgYjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKDAgPCB2YWxpZGF0ZWQuZGVwcykge1xuICAgICAgICAgICAgICAgICAga2V5ID0gbmV3IFJlYWN0UHJvbWlzZShcImJsb2NrZWRcIiwgbnVsbCwgbnVsbCk7XG4gICAgICAgICAgICAgICAgICB2YWxpZGF0ZWQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgIHZhbGlkYXRlZC5jaHVuayA9IGtleTtcbiAgICAgICAgICAgICAgICAgIHZhbHVlID0gaW5pdGlhbGl6ZUVsZW1lbnQuYmluZChudWxsLCByZXNwb25zZSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAga2V5LnRoZW4odmFsdWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgIHZhbHVlID0gY3JlYXRlTGF6eUNodW5rV3JhcHBlcihrZXkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWsgYjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaW5pdGlhbGl6ZUVsZW1lbnQocmVzcG9uc2UsIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2xvc2Uod2Vha1Jlc3BvbnNlKSB7XG4gICAgICByZXBvcnRHbG9iYWxFcnJvcih3ZWFrUmVzcG9uc2UsIEVycm9yKFwiQ29ubmVjdGlvbiBjbG9zZWQuXCIpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRGVidWdDYWxsYmFja0Zyb21Xcml0YWJsZVN0cmVhbShkZWJ1Z1dyaXRhYmxlKSB7XG4gICAgICB2YXIgdGV4dEVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKSxcbiAgICAgICAgd3JpdGVyID0gZGVidWdXcml0YWJsZS5nZXRXcml0ZXIoKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAobWVzc2FnZSkge1xuICAgICAgICBcIlwiID09PSBtZXNzYWdlXG4gICAgICAgICAgPyB3cml0ZXIuY2xvc2UoKVxuICAgICAgICAgIDogd3JpdGVyXG4gICAgICAgICAgICAgIC53cml0ZSh0ZXh0RW5jb2Rlci5lbmNvZGUobWVzc2FnZSArIFwiXFxuXCIpKVxuICAgICAgICAgICAgICAuY2F0Y2goY29uc29sZS5lcnJvcik7XG4gICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVSZXNwb25zZUZyb21PcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgIHZhciBkZWJ1Z0NoYW5uZWwgPVxuICAgICAgICBvcHRpb25zICYmXG4gICAgICAgIHZvaWQgMCAhPT0gb3B0aW9ucy5kZWJ1Z0NoYW5uZWwgJiZcbiAgICAgICAgdm9pZCAwICE9PSBvcHRpb25zLmRlYnVnQ2hhbm5lbC53cml0YWJsZVxuICAgICAgICAgID8gY3JlYXRlRGVidWdDYWxsYmFja0Zyb21Xcml0YWJsZVN0cmVhbShvcHRpb25zLmRlYnVnQ2hhbm5lbC53cml0YWJsZSlcbiAgICAgICAgICA6IHZvaWQgMDtcbiAgICAgIHJldHVybiBuZXcgUmVzcG9uc2VJbnN0YW5jZShcbiAgICAgICAgbnVsbCxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLmNhbGxTZXJ2ZXIgPyBvcHRpb25zLmNhbGxTZXJ2ZXIgOiB2b2lkIDAsXG4gICAgICAgIHZvaWQgMCxcbiAgICAgICAgdm9pZCAwLFxuICAgICAgICBvcHRpb25zICYmIG9wdGlvbnMudGVtcG9yYXJ5UmVmZXJlbmNlc1xuICAgICAgICAgID8gb3B0aW9ucy50ZW1wb3JhcnlSZWZlcmVuY2VzXG4gICAgICAgICAgOiB2b2lkIDAsXG4gICAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5maW5kU291cmNlTWFwVVJMID8gb3B0aW9ucy5maW5kU291cmNlTWFwVVJMIDogdm9pZCAwLFxuICAgICAgICBvcHRpb25zID8gITEgIT09IG9wdGlvbnMucmVwbGF5Q29uc29sZUxvZ3MgOiAhMCxcbiAgICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLmVudmlyb25tZW50TmFtZSA/IG9wdGlvbnMuZW52aXJvbm1lbnROYW1lIDogdm9pZCAwLFxuICAgICAgICBkZWJ1Z0NoYW5uZWxcbiAgICAgICkuX3dlYWtSZXNwb25zZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3RhcnRSZWFkaW5nRnJvbVVuaXZlcnNhbFN0cmVhbShyZXNwb25zZSRqc2NvbXAkMCwgc3RyZWFtKSB7XG4gICAgICBmdW5jdGlvbiBwcm9ncmVzcyhfcmVmKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IF9yZWYudmFsdWU7XG4gICAgICAgIGlmIChfcmVmLmRvbmUpIGNsb3NlKHJlc3BvbnNlJGpzY29tcCQwKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpXG4gICAgICAgICAgICBwcm9jZXNzQmluYXJ5Q2h1bmsoXG4gICAgICAgICAgICAgIHJlc3BvbnNlJGpzY29tcCQwLFxuICAgICAgICAgICAgICBzdHJlYW1TdGF0ZSxcbiAgICAgICAgICAgICAgbmV3IFVpbnQ4QXJyYXkodmFsdWUpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGVsc2UgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoKF9yZWYgPSBzdHJlYW1TdGF0ZSksIHZvaWQgMCAhPT0gcmVzcG9uc2UkanNjb21wJDAud2Vhay5kZXJlZigpKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gdW53cmFwV2Vha1Jlc3BvbnNlKHJlc3BvbnNlJGpzY29tcCQwKSxcbiAgICAgICAgICAgICAgICAgIGkgPSAwLFxuICAgICAgICAgICAgICAgICAgcm93U3RhdGUgPSBfcmVmLl9yb3dTdGF0ZSxcbiAgICAgICAgICAgICAgICAgIHJvd0lEID0gX3JlZi5fcm93SUQsXG4gICAgICAgICAgICAgICAgICByb3dUYWcgPSBfcmVmLl9yb3dUYWcsXG4gICAgICAgICAgICAgICAgICByb3dMZW5ndGggPSBfcmVmLl9yb3dMZW5ndGgsXG4gICAgICAgICAgICAgICAgICBidWZmZXIgPSBfcmVmLl9idWZmZXIsXG4gICAgICAgICAgICAgICAgICBjaHVua0xlbmd0aCA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBpIDwgY2h1bmtMZW5ndGg7XG5cbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxhc3RJZHggPSAtMTtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHJvd1N0YXRlKSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIGxhc3RJZHggPSB2YWx1ZS5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICAgICAgICAgICAgICAgIDU4ID09PSBsYXN0SWR4XG4gICAgICAgICAgICAgICAgICAgICAgPyAocm93U3RhdGUgPSAxKVxuICAgICAgICAgICAgICAgICAgICAgIDogKHJvd0lEID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHJvd0lEIDw8IDQpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKDk2IDwgbGFzdElkeCA/IGxhc3RJZHggLSA4NyA6IGxhc3RJZHggLSA0OCkpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgcm93U3RhdGUgPSB2YWx1ZS5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAgICAgICAgICAgICA4NCA9PT0gcm93U3RhdGUgfHxcbiAgICAgICAgICAgICAgICAgICAgNjUgPT09IHJvd1N0YXRlIHx8XG4gICAgICAgICAgICAgICAgICAgIDc5ID09PSByb3dTdGF0ZSB8fFxuICAgICAgICAgICAgICAgICAgICAxMTEgPT09IHJvd1N0YXRlIHx8XG4gICAgICAgICAgICAgICAgICAgIDg1ID09PSByb3dTdGF0ZSB8fFxuICAgICAgICAgICAgICAgICAgICA4MyA9PT0gcm93U3RhdGUgfHxcbiAgICAgICAgICAgICAgICAgICAgMTE1ID09PSByb3dTdGF0ZSB8fFxuICAgICAgICAgICAgICAgICAgICA3NiA9PT0gcm93U3RhdGUgfHxcbiAgICAgICAgICAgICAgICAgICAgMTA4ID09PSByb3dTdGF0ZSB8fFxuICAgICAgICAgICAgICAgICAgICA3MSA9PT0gcm93U3RhdGUgfHxcbiAgICAgICAgICAgICAgICAgICAgMTAzID09PSByb3dTdGF0ZSB8fFxuICAgICAgICAgICAgICAgICAgICA3NyA9PT0gcm93U3RhdGUgfHxcbiAgICAgICAgICAgICAgICAgICAgMTA5ID09PSByb3dTdGF0ZSB8fFxuICAgICAgICAgICAgICAgICAgICA4NiA9PT0gcm93U3RhdGVcbiAgICAgICAgICAgICAgICAgICAgICA/ICgocm93VGFnID0gcm93U3RhdGUpLCAocm93U3RhdGUgPSAyKSwgaSsrKVxuICAgICAgICAgICAgICAgICAgICAgIDogKDY0IDwgcm93U3RhdGUgJiYgOTEgPiByb3dTdGF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgMTE0ID09PSByb3dTdGF0ZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAxMjAgPT09IHJvd1N0YXRlXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICgocm93VGFnID0gcm93U3RhdGUpLCAocm93U3RhdGUgPSAzKSwgaSsrKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAoKHJvd1RhZyA9IDApLCAocm93U3RhdGUgPSAzKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBsYXN0SWR4ID0gdmFsdWUuY2hhckNvZGVBdChpKyspO1xuICAgICAgICAgICAgICAgICAgICA0NCA9PT0gbGFzdElkeFxuICAgICAgICAgICAgICAgICAgICAgID8gKHJvd1N0YXRlID0gNClcbiAgICAgICAgICAgICAgICAgICAgICA6IChyb3dMZW5ndGggPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAocm93TGVuZ3RoIDw8IDQpIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKDk2IDwgbGFzdElkeCA/IGxhc3RJZHggLSA4NyA6IGxhc3RJZHggLSA0OCkpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgbGFzdElkeCA9IHZhbHVlLmluZGV4T2YoXCJcXG5cIiwgaSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoODQgIT09IHJvd1RhZylcbiAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQmluYXJ5IFJTQyBjaHVua3MgY2Fubm90IGJlIGVuY29kZWQgYXMgc3RyaW5ncy4gVGhpcyBpcyBhIGJ1ZyBpbiB0aGUgd2lyaW5nIG9mIHRoZSBSZWFjdCBzdHJlYW1zLlwiXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgIHJvd0xlbmd0aCA8IHZhbHVlLmxlbmd0aCB8fFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmxlbmd0aCA+IDMgKiByb3dMZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJTdHJpbmcgY2h1bmtzIG5lZWQgdG8gYmUgcGFzc2VkIGluIHRoZWlyIG9yaWdpbmFsIHNoYXBlLiBOb3Qgc3BsaXQgaW50byBzbWFsbGVyIHN0cmluZyBjaHVua3MuIFRoaXMgaXMgYSBidWcgaW4gdGhlIHdpcmluZyBvZiB0aGUgUmVhY3Qgc3RyZWFtcy5cIlxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RJZHggPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgtMSA8IGxhc3RJZHgpIHtcbiAgICAgICAgICAgICAgICAgIGlmICgwIDwgYnVmZmVyLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgXCJTdHJpbmcgY2h1bmtzIG5lZWQgdG8gYmUgcGFzc2VkIGluIHRoZWlyIG9yaWdpbmFsIHNoYXBlLiBOb3Qgc3BsaXQgaW50byBzbWFsbGVyIHN0cmluZyBjaHVua3MuIFRoaXMgaXMgYSBidWcgaW4gdGhlIHdpcmluZyBvZiB0aGUgUmVhY3Qgc3RyZWFtcy5cIlxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgaSA9IHZhbHVlLnNsaWNlKGksIGxhc3RJZHgpO1xuICAgICAgICAgICAgICAgICAgcHJvY2Vzc0Z1bGxTdHJpbmdSb3cocmVzcG9uc2UsIHJvd0lELCByb3dUYWcsIGkpO1xuICAgICAgICAgICAgICAgICAgaSA9IGxhc3RJZHg7XG4gICAgICAgICAgICAgICAgICAzID09PSByb3dTdGF0ZSAmJiBpKys7XG4gICAgICAgICAgICAgICAgICByb3dMZW5ndGggPSByb3dJRCA9IHJvd1RhZyA9IHJvd1N0YXRlID0gMDtcbiAgICAgICAgICAgICAgICAgIGJ1ZmZlci5sZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUubGVuZ3RoICE9PSBpKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiU3RyaW5nIGNodW5rcyBuZWVkIHRvIGJlIHBhc3NlZCBpbiB0aGVpciBvcmlnaW5hbCBzaGFwZS4gTm90IHNwbGl0IGludG8gc21hbGxlciBzdHJpbmcgY2h1bmtzLiBUaGlzIGlzIGEgYnVnIGluIHRoZSB3aXJpbmcgb2YgdGhlIFJlYWN0IHN0cmVhbXMuXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgX3JlZi5fcm93U3RhdGUgPSByb3dTdGF0ZTtcbiAgICAgICAgICAgICAgX3JlZi5fcm93SUQgPSByb3dJRDtcbiAgICAgICAgICAgICAgX3JlZi5fcm93VGFnID0gcm93VGFnO1xuICAgICAgICAgICAgICBfcmVmLl9yb3dMZW5ndGggPSByb3dMZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHByb2Nlc3NCaW5hcnlDaHVuayhyZXNwb25zZSRqc2NvbXAkMCwgc3RyZWFtU3RhdGUsIHZhbHVlKTtcbiAgICAgICAgICByZXR1cm4gcmVhZGVyLnJlYWQoKS50aGVuKHByb2dyZXNzKS5jYXRjaChlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGVycm9yKGUpIHtcbiAgICAgICAgcmVwb3J0R2xvYmFsRXJyb3IocmVzcG9uc2UkanNjb21wJDAsIGUpO1xuICAgICAgfVxuICAgICAgdmFyIHN0cmVhbVN0YXRlID0gY3JlYXRlU3RyZWFtU3RhdGUoKSxcbiAgICAgICAgcmVhZGVyID0gc3RyZWFtLmdldFJlYWRlcigpO1xuICAgICAgcmVhZGVyLnJlYWQoKS50aGVuKHByb2dyZXNzKS5jYXRjaChlcnJvcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHN0YXJ0UmVhZGluZ0Zyb21TdHJlYW0ocmVzcG9uc2UsIHN0cmVhbSwgaXNTZWNvbmRhcnlTdHJlYW0pIHtcbiAgICAgIGZ1bmN0aW9uIHByb2dyZXNzKF9yZWYyKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IF9yZWYyLnZhbHVlO1xuICAgICAgICBpZiAoX3JlZjIuZG9uZSkgaXNTZWNvbmRhcnlTdHJlYW0gfHwgY2xvc2UocmVzcG9uc2UpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHByb2Nlc3NCaW5hcnlDaHVuayhyZXNwb25zZSwgc3RyZWFtU3RhdGUsIHZhbHVlKSxcbiAgICAgICAgICAgIHJlYWRlci5yZWFkKCkudGhlbihwcm9ncmVzcykuY2F0Y2goZXJyb3IpXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGVycm9yKGUpIHtcbiAgICAgICAgcmVwb3J0R2xvYmFsRXJyb3IocmVzcG9uc2UsIGUpO1xuICAgICAgfVxuICAgICAgdmFyIHN0cmVhbVN0YXRlID0gY3JlYXRlU3RyZWFtU3RhdGUoKSxcbiAgICAgICAgcmVhZGVyID0gc3RyZWFtLmdldFJlYWRlcigpO1xuICAgICAgcmVhZGVyLnJlYWQoKS50aGVuKHByb2dyZXNzKS5jYXRjaChlcnJvcik7XG4gICAgfVxuICAgIHZhciBSZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKSxcbiAgICAgIFJlYWN0RE9NID0gcmVxdWlyZShcInJlYWN0LWRvbVwiKSxcbiAgICAgIGRlY29kZXJPcHRpb25zID0geyBzdHJlYW06ICEwIH0sXG4gICAgICBiaW5kID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQsXG4gICAgICBjaHVua0NhY2hlID0gbmV3IE1hcCgpLFxuICAgICAgY2h1bmtNYXAgPSBuZXcgTWFwKCksXG4gICAgICB3ZWJwYWNrR2V0Q2h1bmtGaWxlbmFtZSA9IF9fd2VicGFja19yZXF1aXJlX18udTtcbiAgICBfX3dlYnBhY2tfcmVxdWlyZV9fLnUgPSBmdW5jdGlvbiAoY2h1bmtJZCkge1xuICAgICAgdmFyIGZsaWdodENodW5rID0gY2h1bmtNYXAuZ2V0KGNodW5rSWQpO1xuICAgICAgcmV0dXJuIHZvaWQgMCAhPT0gZmxpZ2h0Q2h1bmtcbiAgICAgICAgPyBmbGlnaHRDaHVua1xuICAgICAgICA6IHdlYnBhY2tHZXRDaHVua0ZpbGVuYW1lKGNodW5rSWQpO1xuICAgIH07XG4gICAgdmFyIFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzID1cbiAgICAgICAgUmVhY3RET00uX19ET01fSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFLFxuICAgICAgUkVBQ1RfRUxFTUVOVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnRyYW5zaXRpb25hbC5lbGVtZW50XCIpLFxuICAgICAgUkVBQ1RfUE9SVEFMX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpLFxuICAgICAgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKSxcbiAgICAgIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIiksXG4gICAgICBSRUFDVF9QUk9GSUxFUl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpLFxuICAgICAgUkVBQ1RfQ09OU1VNRVJfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jb25zdW1lclwiKSxcbiAgICAgIFJFQUNUX0NPTlRFWFRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpLFxuICAgICAgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKSxcbiAgICAgIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIiksXG4gICAgICBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VfbGlzdFwiKSxcbiAgICAgIFJFQUNUX01FTU9fVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpLFxuICAgICAgUkVBQ1RfTEFaWV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmxhenlcIiksXG4gICAgICBSRUFDVF9BQ1RJVklUWV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmFjdGl2aXR5XCIpLFxuICAgICAgTUFZQkVfSVRFUkFUT1JfU1lNQk9MID0gU3ltYm9sLml0ZXJhdG9yLFxuICAgICAgQVNZTkNfSVRFUkFUT1IgPSBTeW1ib2wuYXN5bmNJdGVyYXRvcixcbiAgICAgIGlzQXJyYXlJbXBsID0gQXJyYXkuaXNBcnJheSxcbiAgICAgIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mLFxuICAgICAganN4UHJvcHNQYXJlbnRzID0gbmV3IFdlYWtNYXAoKSxcbiAgICAgIGpzeENoaWxkcmVuUGFyZW50cyA9IG5ldyBXZWFrTWFwKCksXG4gICAgICBDTElFTlRfUkVGRVJFTkNFX1RBRyA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jbGllbnQucmVmZXJlbmNlXCIpLFxuICAgICAgT2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZSxcbiAgICAgIGtub3duU2VydmVyUmVmZXJlbmNlcyA9IG5ldyBXZWFrTWFwKCksXG4gICAgICBmYWtlU2VydmVyRnVuY3Rpb25JZHggPSAwLFxuICAgICAgdjhGcmFtZVJlZ0V4cCA9XG4gICAgICAgIC9eIHszfSBhdCAoPzooLispIFxcKCguKyk6KFxcZCspOihcXGQrKVxcKXwoPzphc3luYyApPyguKyk6KFxcZCspOihcXGQrKSkkLyxcbiAgICAgIGpzY1NwaWRlck1vbmtleUZyYW1lUmVnRXhwID0gLyg/OiguKilAKT8oLiopOihcXGQrKTooXFxkKykvLFxuICAgICAgUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jbGllbnQucmVmZXJlbmNlXCIpLFxuICAgICAgcHJlZml4LFxuICAgICAgc3VmZml4O1xuICAgIG5ldyAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgV2Vha01hcCA/IFdlYWtNYXAgOiBNYXApKCk7XG4gICAgdmFyIFJlYWN0U2hhcmVkSW50ZXJhbHNTZXJ2ZXIgPVxuICAgICAgICBSZWFjdC5fX1NFUlZFUl9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9XQVJOX1VTRVJTX1RIRVlfQ0FOTk9UX1VQR1JBREUsXG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscyA9XG4gICAgICAgIFJlYWN0Ll9fQ0xJRU5UX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERSB8fFxuICAgICAgICBSZWFjdFNoYXJlZEludGVyYWxzU2VydmVyO1xuICAgIFJlYWN0UHJvbWlzZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFByb21pc2UucHJvdG90eXBlKTtcbiAgICBSZWFjdFByb21pc2UucHJvdG90eXBlLnRoZW4gPSBmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBzd2l0Y2ggKHRoaXMuc3RhdHVzKSB7XG4gICAgICAgIGNhc2UgXCJyZXNvbHZlZF9tb2RlbFwiOlxuICAgICAgICAgIGluaXRpYWxpemVNb2RlbENodW5rKHRoaXMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwicmVzb2x2ZWRfbW9kdWxlXCI6XG4gICAgICAgICAgaW5pdGlhbGl6ZU1vZHVsZUNodW5rKHRoaXMpO1xuICAgICAgfVxuICAgICAgc3dpdGNoICh0aGlzLnN0YXR1cykge1xuICAgICAgICBjYXNlIFwiZnVsZmlsbGVkXCI6XG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmVzb2x2ZSAmJiByZXNvbHZlKHRoaXMudmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwicGVuZGluZ1wiOlxuICAgICAgICBjYXNlIFwiYmxvY2tlZFwiOlxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHJlc29sdmUgJiZcbiAgICAgICAgICAgIChudWxsID09PSB0aGlzLnZhbHVlICYmICh0aGlzLnZhbHVlID0gW10pLFxuICAgICAgICAgICAgdGhpcy52YWx1ZS5wdXNoKHJlc29sdmUpKTtcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiByZWplY3QgJiZcbiAgICAgICAgICAgIChudWxsID09PSB0aGlzLnJlYXNvbiAmJiAodGhpcy5yZWFzb24gPSBbXSksXG4gICAgICAgICAgICB0aGlzLnJlYXNvbi5wdXNoKHJlamVjdCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaGFsdGVkXCI6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmVqZWN0ICYmIHJlamVjdCh0aGlzLnJlYXNvbik7XG4gICAgICB9XG4gICAgfTtcbiAgICB2YXIgZGVidWdDaGFubmVsUmVnaXN0cnkgPVxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeVxuICAgICAgICAgID8gbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KGNsZWFudXBEZWJ1Z0NoYW5uZWwpXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgaW5pdGlhbGl6aW5nSGFuZGxlciA9IG51bGwsXG4gICAgICBzdXBwb3J0c0NyZWF0ZVRhc2sgPSAhIWNvbnNvbGUuY3JlYXRlVGFzayxcbiAgICAgIGZha2VGdW5jdGlvbkNhY2hlID0gbmV3IE1hcCgpLFxuICAgICAgZmFrZUZ1bmN0aW9uSWR4ID0gMCxcbiAgICAgIGNyZWF0ZUZha2VKU1hDYWxsU3RhY2sgPSB7XG4gICAgICAgIHJlYWN0X3N0YWNrX2JvdHRvbV9mcmFtZTogZnVuY3Rpb24gKHJlc3BvbnNlLCBzdGFjaywgZW52aXJvbm1lbnROYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIGJ1aWxkRmFrZUNhbGxTdGFjayhcbiAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgc3RhY2ssXG4gICAgICAgICAgICBlbnZpcm9ubWVudE5hbWUsXG4gICAgICAgICAgICAhMSxcbiAgICAgICAgICAgIGZha2VKU1hDYWxsU2l0ZVxuICAgICAgICAgICkoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNyZWF0ZUZha2VKU1hDYWxsU3RhY2tJbkRFViA9XG4gICAgICAgIGNyZWF0ZUZha2VKU1hDYWxsU3RhY2sucmVhY3Rfc3RhY2tfYm90dG9tX2ZyYW1lLmJpbmQoXG4gICAgICAgICAgY3JlYXRlRmFrZUpTWENhbGxTdGFja1xuICAgICAgICApLFxuICAgICAgY3VycmVudE93bmVySW5ERVYgPSBudWxsLFxuICAgICAgcmVwbGF5Q29uc29sZVdpdGhDYWxsU3RhY2sgPSB7XG4gICAgICAgIHJlYWN0X3N0YWNrX2JvdHRvbV9mcmFtZTogZnVuY3Rpb24gKFxuICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgIG1ldGhvZE5hbWUsXG4gICAgICAgICAgc3RhY2tUcmFjZSxcbiAgICAgICAgICBvd25lcixcbiAgICAgICAgICBlbnYsXG4gICAgICAgICAgYXJnc1xuICAgICAgICApIHtcbiAgICAgICAgICB2YXIgcHJldlN0YWNrID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuZ2V0Q3VycmVudFN0YWNrO1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLmdldEN1cnJlbnRTdGFjayA9IGdldEN1cnJlbnRTdGFja0luREVWO1xuICAgICAgICAgIGN1cnJlbnRPd25lckluREVWID0gbnVsbCA9PT0gb3duZXIgPyByZXNwb25zZS5fZGVidWdSb290T3duZXIgOiBvd25lcjtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgc3dpdGNoIChtZXRob2ROYW1lKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcImRpclwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJkaXJ4bWxcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiZ3JvdXBFbmRcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwidGFibGVcIjpcbiAgICAgICAgICAgICAgICAgIHZhciBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSBiaW5kLmFwcGx5KFxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlW21ldGhvZE5hbWVdLFxuICAgICAgICAgICAgICAgICAgICBbY29uc29sZV0uY29uY2F0KGFyZ3MpXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICBjYXNlIFwiYXNzZXJ0XCI6XG4gICAgICAgICAgICAgICAgICBvZmZzZXQgPSAxO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZhciBuZXdBcmdzID0gYXJncy5zbGljZSgwKTtcbiAgICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG5ld0FyZ3Nbb2Zmc2V0XVxuICAgICAgICAgICAgICAgID8gbmV3QXJncy5zcGxpY2UoXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgXCIlYyVzJWMgXCIgKyBuZXdBcmdzW29mZnNldF0sXG4gICAgICAgICAgICAgICAgICAgIFwiYmFja2dyb3VuZDogI2U2ZTZlNjtiYWNrZ3JvdW5kOiBsaWdodC1kYXJrKHJnYmEoMCwwLDAsMC4xKSwgcmdiYSgyNTUsMjU1LDI1NSwwLjI1KSk7Y29sb3I6ICMwMDAwMDA7Y29sb3I6IGxpZ2h0LWRhcmsoIzAwMDAwMCwgI2ZmZmZmZik7Ym9yZGVyLXJhZGl1czogMnB4XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiIFwiICsgZW52ICsgXCIgXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiXCJcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IG5ld0FyZ3Muc3BsaWNlKFxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgIFwiJWMlcyVjIFwiLFxuICAgICAgICAgICAgICAgICAgICBcImJhY2tncm91bmQ6ICNlNmU2ZTY7YmFja2dyb3VuZDogbGlnaHQtZGFyayhyZ2JhKDAsMCwwLDAuMSksIHJnYmEoMjU1LDI1NSwyNTUsMC4yNSkpO2NvbG9yOiAjMDAwMDAwO2NvbG9yOiBsaWdodC1kYXJrKCMwMDAwMDAsICNmZmZmZmYpO2JvcmRlci1yYWRpdXM6IDJweFwiLFxuICAgICAgICAgICAgICAgICAgICBcIiBcIiArIGVudiArIFwiIFwiLFxuICAgICAgICAgICAgICAgICAgICBcIlwiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBuZXdBcmdzLnVuc2hpZnQoY29uc29sZSk7XG4gICAgICAgICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IGJpbmQuYXBwbHkoXG4gICAgICAgICAgICAgICAgY29uc29sZVttZXRob2ROYW1lXSxcbiAgICAgICAgICAgICAgICBuZXdBcmdzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgY2FsbFN0YWNrID0gYnVpbGRGYWtlQ2FsbFN0YWNrKFxuICAgICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgICAgc3RhY2tUcmFjZSxcbiAgICAgICAgICAgICAgZW52LFxuICAgICAgICAgICAgICAhMSxcbiAgICAgICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKG51bGwgIT0gb3duZXIpIHtcbiAgICAgICAgICAgICAgdmFyIHRhc2sgPSBpbml0aWFsaXplRmFrZVRhc2socmVzcG9uc2UsIG93bmVyKTtcbiAgICAgICAgICAgICAgaW5pdGlhbGl6ZUZha2VTdGFjayhyZXNwb25zZSwgb3duZXIpO1xuICAgICAgICAgICAgICBpZiAobnVsbCAhPT0gdGFzaykge1xuICAgICAgICAgICAgICAgIHRhc2sucnVuKGNhbGxTdGFjayk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgcm9vdFRhc2sgPSBnZXRSb290VGFzayhyZXNwb25zZSwgZW52KTtcbiAgICAgICAgICAgIG51bGwgIT0gcm9vdFRhc2sgPyByb290VGFzay5ydW4oY2FsbFN0YWNrKSA6IGNhbGxTdGFjaygpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAoY3VycmVudE93bmVySW5ERVYgPSBudWxsKSxcbiAgICAgICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLmdldEN1cnJlbnRTdGFjayA9IHByZXZTdGFjayk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcmVwbGF5Q29uc29sZVdpdGhDYWxsU3RhY2tJbkRFViA9XG4gICAgICAgIHJlcGxheUNvbnNvbGVXaXRoQ2FsbFN0YWNrLnJlYWN0X3N0YWNrX2JvdHRvbV9mcmFtZS5iaW5kKFxuICAgICAgICAgIHJlcGxheUNvbnNvbGVXaXRoQ2FsbFN0YWNrXG4gICAgICAgICk7XG4gICAgKGZ1bmN0aW9uIChpbnRlcm5hbHMpIHtcbiAgICAgIGlmIChcInVuZGVmaW5lZFwiID09PSB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fKSByZXR1cm4gITE7XG4gICAgICB2YXIgaG9vayA9IF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcbiAgICAgIGlmIChob29rLmlzRGlzYWJsZWQgfHwgIWhvb2suc3VwcG9ydHNGbGlnaHQpIHJldHVybiAhMDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGhvb2suaW5qZWN0KGludGVybmFscyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIlJlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXMuXCIsIGVycik7XG4gICAgICB9XG4gICAgICByZXR1cm4gaG9vay5jaGVja0RDRSA/ICEwIDogITE7XG4gICAgfSkoe1xuICAgICAgYnVuZGxlVHlwZTogMSxcbiAgICAgIHZlcnNpb246IFwiMTkuMi4wLWNhbmFyeS05N2NkZDVkMy0yMDI1MDcxMFwiLFxuICAgICAgcmVuZGVyZXJQYWNrYWdlTmFtZTogXCJyZWFjdC1zZXJ2ZXItZG9tLXdlYnBhY2tcIixcbiAgICAgIGN1cnJlbnREaXNwYXRjaGVyUmVmOiBSZWFjdFNoYXJlZEludGVybmFscyxcbiAgICAgIHJlY29uY2lsZXJWZXJzaW9uOiBcIjE5LjIuMC1jYW5hcnktOTdjZGQ1ZDMtMjAyNTA3MTBcIixcbiAgICAgIGdldEN1cnJlbnRDb21wb25lbnRJbmZvOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50T3duZXJJbkRFVjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBleHBvcnRzLmNyZWF0ZUZyb21GZXRjaCA9IGZ1bmN0aW9uIChwcm9taXNlRm9yUmVzcG9uc2UsIG9wdGlvbnMpIHtcbiAgICAgIHZhciByZXNwb25zZSA9IGNyZWF0ZVJlc3BvbnNlRnJvbU9wdGlvbnMob3B0aW9ucyk7XG4gICAgICBwcm9taXNlRm9yUmVzcG9uc2UudGhlbihcbiAgICAgICAgZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgICBvcHRpb25zICYmIG9wdGlvbnMuZGVidWdDaGFubmVsICYmIG9wdGlvbnMuZGVidWdDaGFubmVsLnJlYWRhYmxlXG4gICAgICAgICAgICA/IChzdGFydFJlYWRpbmdGcm9tVW5pdmVyc2FsU3RyZWFtKFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgIG9wdGlvbnMuZGVidWdDaGFubmVsLnJlYWRhYmxlXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIHN0YXJ0UmVhZGluZ0Zyb21TdHJlYW0ocmVzcG9uc2UsIHIuYm9keSwgITApKVxuICAgICAgICAgICAgOiBzdGFydFJlYWRpbmdGcm9tU3RyZWFtKHJlc3BvbnNlLCByLmJvZHksICExKTtcbiAgICAgICAgfSxcbiAgICAgICAgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICByZXBvcnRHbG9iYWxFcnJvcihyZXNwb25zZSwgZSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICByZXR1cm4gZ2V0Um9vdChyZXNwb25zZSk7XG4gICAgfTtcbiAgICBleHBvcnRzLmNyZWF0ZUZyb21SZWFkYWJsZVN0cmVhbSA9IGZ1bmN0aW9uIChzdHJlYW0sIG9wdGlvbnMpIHtcbiAgICAgIHZhciByZXNwb25zZSA9IGNyZWF0ZVJlc3BvbnNlRnJvbU9wdGlvbnMob3B0aW9ucyk7XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMuZGVidWdDaGFubmVsICYmIG9wdGlvbnMuZGVidWdDaGFubmVsLnJlYWRhYmxlXG4gICAgICAgID8gKHN0YXJ0UmVhZGluZ0Zyb21Vbml2ZXJzYWxTdHJlYW0oXG4gICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgIG9wdGlvbnMuZGVidWdDaGFubmVsLnJlYWRhYmxlXG4gICAgICAgICAgKSxcbiAgICAgICAgICBzdGFydFJlYWRpbmdGcm9tU3RyZWFtKHJlc3BvbnNlLCBzdHJlYW0sICEwKSlcbiAgICAgICAgOiBzdGFydFJlYWRpbmdGcm9tU3RyZWFtKHJlc3BvbnNlLCBzdHJlYW0sICExKTtcbiAgICAgIHJldHVybiBnZXRSb290KHJlc3BvbnNlKTtcbiAgICB9O1xuICAgIGV4cG9ydHMuY3JlYXRlU2VydmVyUmVmZXJlbmNlID0gZnVuY3Rpb24gKFxuICAgICAgaWQsXG4gICAgICBjYWxsU2VydmVyLFxuICAgICAgZW5jb2RlRm9ybUFjdGlvbixcbiAgICAgIGZpbmRTb3VyY2VNYXBVUkwsXG4gICAgICBmdW5jdGlvbk5hbWVcbiAgICApIHtcbiAgICAgIGZ1bmN0aW9uIGFjdGlvbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICByZXR1cm4gY2FsbFNlcnZlcihpZCwgYXJncyk7XG4gICAgICB9XG4gICAgICB2YXIgbG9jYXRpb24gPSBwYXJzZVN0YWNrTG9jYXRpb24oRXJyb3IoXCJyZWFjdC1zdGFjay10b3AtZnJhbWVcIikpO1xuICAgICAgaWYgKG51bGwgIT09IGxvY2F0aW9uKSB7XG4gICAgICAgIGVuY29kZUZvcm1BY3Rpb24gPSBsb2NhdGlvblsxXTtcbiAgICAgICAgdmFyIGxpbmUgPSBsb2NhdGlvblsyXTtcbiAgICAgICAgbG9jYXRpb24gPSBsb2NhdGlvblszXTtcbiAgICAgICAgZmluZFNvdXJjZU1hcFVSTCA9XG4gICAgICAgICAgbnVsbCA9PSBmaW5kU291cmNlTWFwVVJMXG4gICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgIDogZmluZFNvdXJjZU1hcFVSTChlbmNvZGVGb3JtQWN0aW9uLCBcIkNsaWVudFwiKTtcbiAgICAgICAgYWN0aW9uID0gY3JlYXRlRmFrZVNlcnZlckZ1bmN0aW9uKFxuICAgICAgICAgIGZ1bmN0aW9uTmFtZSB8fCBcIlwiLFxuICAgICAgICAgIGVuY29kZUZvcm1BY3Rpb24sXG4gICAgICAgICAgZmluZFNvdXJjZU1hcFVSTCxcbiAgICAgICAgICBsaW5lLFxuICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgIFwiQ2xpZW50XCIsXG4gICAgICAgICAgYWN0aW9uXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZWdpc3RlckJvdW5kU2VydmVyUmVmZXJlbmNlKGFjdGlvbiwgaWQsIG51bGwpO1xuICAgICAgcmV0dXJuIGFjdGlvbjtcbiAgICB9O1xuICAgIGV4cG9ydHMuY3JlYXRlVGVtcG9yYXJ5UmVmZXJlbmNlU2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIG5ldyBNYXAoKTtcbiAgICB9O1xuICAgIGV4cG9ydHMuZW5jb2RlUmVwbHkgPSBmdW5jdGlvbiAodmFsdWUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciBhYm9ydCA9IHByb2Nlc3NSZXBseShcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBcIlwiLFxuICAgICAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy50ZW1wb3JhcnlSZWZlcmVuY2VzXG4gICAgICAgICAgICA/IG9wdGlvbnMudGVtcG9yYXJ5UmVmZXJlbmNlc1xuICAgICAgICAgICAgOiB2b2lkIDAsXG4gICAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgICByZWplY3RcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zaWduYWwpIHtcbiAgICAgICAgICB2YXIgc2lnbmFsID0gb3B0aW9ucy5zaWduYWw7XG4gICAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSBhYm9ydChzaWduYWwucmVhc29uKTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgYWJvcnQoc2lnbmFsLnJlYXNvbik7XG4gICAgICAgICAgICAgIHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgbGlzdGVuZXIpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgbGlzdGVuZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBleHBvcnRzLnJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlID0gZnVuY3Rpb24gKHJlZmVyZW5jZSwgaWQpIHtcbiAgICAgIHJlZ2lzdGVyQm91bmRTZXJ2ZXJSZWZlcmVuY2UocmVmZXJlbmNlLCBpZCwgbnVsbCk7XG4gICAgICByZXR1cm4gcmVmZXJlbmNlO1xuICAgIH07XG4gIH0pKCk7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react-server-dom-webpack/client.browser.js":
|
||
/*!************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/react-server-dom-webpack/client.browser.js ***!
|
||
\************************************************************************************/
|
||
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-server-dom-webpack-client.browser.development.js */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrL2NsaWVudC5icm93c2VyLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLElBQUksS0FBcUMsRUFBRSxFQUUxQyxDQUFDO0FBQ0YsRUFBRSxxUEFBd0Y7QUFDMUYiLCJzb3VyY2VzIjpbIi9ob21lL05pY2hvbGFpL0RvY3VtZW50cy9EZXYvYmlvaGF6YXJkLXZmeC0xL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrL2NsaWVudC5icm93c2VyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1zZXJ2ZXItZG9tLXdlYnBhY2stY2xpZW50LmJyb3dzZXIucHJvZHVjdGlvbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1zZXJ2ZXItZG9tLXdlYnBhY2stY2xpZW50LmJyb3dzZXIuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react-server-dom-webpack/client.browser.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-runtime.development.js":
|
||
/*!************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/react/cjs/react-jsx-runtime.development.js ***!
|
||
\************************************************************************************/
|
||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n true &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(\n type,\n key,\n self,\n source,\n owner,\n props,\n debugStack,\n debugTask\n ) {\n self = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== self ? self : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n source,\n self,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n self,\n source,\n getOwner(),\n maybeKey,\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_ELEMENT_TYPE &&\n node._store &&\n (node._store.validated = 1);\n }\n var React = __webpack_require__(/*! next/dist/compiled/react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n react_stack_bottom_frame: function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey, source, self) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !1,\n source,\n self,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.jsxs = function (type, config, maybeKey, source, self) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !0,\n source,\n self,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvY2pzL3JlYWN0LWpzeC1ydW50aW1lLmRldmVsb3BtZW50LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTtBQUNiLEtBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLCtDQUErQyw2QkFBNkI7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxnQkFBZ0IsZ0RBQWdEO0FBQ2hFLGdCQUFnQixhQUFhO0FBQzdCO0FBQ0E7QUFDQSxnQ0FBZ0Msa0NBQWtDLE9BQU87QUFDekU7QUFDQSxnR0FBZ0csU0FBUyxVQUFVLHNGQUFzRixhQUFhLFVBQVUsVUFBVTtBQUMxTztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixtQkFBTyxDQUFDLHNHQUEwQjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGdCQUFnQjtBQUNwQixJQUFJLFdBQVc7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFlBQVk7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvRG9jdW1lbnRzL0Rldi9iaW9oYXphcmQtdmZ4LTEvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC9janMvcmVhY3QtanN4LXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QtanN4LXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cblwidXNlIHN0cmljdFwiO1xuXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WICYmXG4gIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpIHtcbiAgICAgIGlmIChudWxsID09IHR5cGUpIHJldHVybiBudWxsO1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHR5cGUpXG4gICAgICAgIHJldHVybiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DTElFTlRfUkVGRVJFTkNFXG4gICAgICAgICAgPyBudWxsXG4gICAgICAgICAgOiB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBudWxsO1xuICAgICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiB0eXBlKSByZXR1cm4gdHlwZTtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiRnJhZ21lbnRcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlByb2ZpbGVyXCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJTdHJpY3RNb2RlXCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJTdXNwZW5zZVwiO1xuICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJTdXNwZW5zZUxpc3RcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9BQ1RJVklUWV9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIkFjdGl2aXR5XCI7XG4gICAgICB9XG4gICAgICBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIHR5cGUpXG4gICAgICAgIHN3aXRjaCAoXG4gICAgICAgICAgKFwibnVtYmVyXCIgPT09IHR5cGVvZiB0eXBlLnRhZyAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJSZWNlaXZlZCBhbiB1bmV4cGVjdGVkIG9iamVjdCBpbiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoKS4gVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICApLFxuICAgICAgICAgIHR5cGUuJCR0eXBlb2YpXG4gICAgICAgICkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gXCJQb3J0YWxcIjtcbiAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8IFwiQ29udGV4dFwiO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OU1VNRVJfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAodHlwZS5fY29udGV4dC5kaXNwbGF5TmFtZSB8fCBcIkNvbnRleHRcIikgKyBcIi5Db25zdW1lclwiO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgIHZhciBpbm5lclR5cGUgPSB0eXBlLnJlbmRlcjtcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlLmRpc3BsYXlOYW1lO1xuICAgICAgICAgICAgdHlwZSB8fFxuICAgICAgICAgICAgICAoKHR5cGUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgXCJcIiksXG4gICAgICAgICAgICAgICh0eXBlID0gXCJcIiAhPT0gdHlwZSA/IFwiRm9yd2FyZFJlZihcIiArIHR5cGUgKyBcIilcIiA6IFwiRm9yd2FyZFJlZlwiKSk7XG4gICAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChpbm5lclR5cGUgPSB0eXBlLmRpc3BsYXlOYW1lIHx8IG51bGwpLFxuICAgICAgICAgICAgICBudWxsICE9PSBpbm5lclR5cGVcbiAgICAgICAgICAgICAgICA/IGlubmVyVHlwZVxuICAgICAgICAgICAgICAgIDogZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUudHlwZSkgfHwgXCJNZW1vXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICBpbm5lclR5cGUgPSB0eXBlLl9wYXlsb2FkO1xuICAgICAgICAgICAgdHlwZSA9IHR5cGUuX2luaXQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUoaW5uZXJUeXBlKSk7XG4gICAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gXCJcIiArIHZhbHVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja0tleVN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpO1xuICAgICAgICB2YXIgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gITE7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9ICEwO1xuICAgICAgfVxuICAgICAgaWYgKEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCkge1xuICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSBjb25zb2xlO1xuICAgICAgICB2YXIgSlNDb21waWxlcl90ZW1wX2NvbnN0ID0gSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0LmVycm9yO1xuICAgICAgICB2YXIgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0JGpzY29tcCQwID1cbiAgICAgICAgICAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgU3ltYm9sICYmXG4gICAgICAgICAgICBTeW1ib2wudG9TdHJpbmdUYWcgJiZcbiAgICAgICAgICAgIHZhbHVlW1N5bWJvbC50b1N0cmluZ1RhZ10pIHx8XG4gICAgICAgICAgdmFsdWUuY29uc3RydWN0b3IubmFtZSB8fFxuICAgICAgICAgIFwiT2JqZWN0XCI7XG4gICAgICAgIEpTQ29tcGlsZXJfdGVtcF9jb25zdC5jYWxsKFxuICAgICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCxcbiAgICAgICAgICBcIlRoZSBwcm92aWRlZCBrZXkgaXMgYW4gdW5zdXBwb3J0ZWQgdHlwZSAlcy4gVGhpcyB2YWx1ZSBtdXN0IGJlIGNvZXJjZWQgdG8gYSBzdHJpbmcgYmVmb3JlIHVzaW5nIGl0IGhlcmUuXCIsXG4gICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0JGpzY29tcCQwXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRUYXNrTmFtZSh0eXBlKSB7XG4gICAgICBpZiAodHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSkgcmV0dXJuIFwiPD5cIjtcbiAgICAgIGlmIChcbiAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHR5cGUgJiZcbiAgICAgICAgbnVsbCAhPT0gdHlwZSAmJlxuICAgICAgICB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEVcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIFwiPC4uLj5cIjtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpO1xuICAgICAgICByZXR1cm4gbmFtZSA/IFwiPFwiICsgbmFtZSArIFwiPlwiIDogXCI8Li4uPlwiO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICByZXR1cm4gXCI8Li4uPlwiO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRPd25lcigpIHtcbiAgICAgIHZhciBkaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuQTtcbiAgICAgIHJldHVybiBudWxsID09PSBkaXNwYXRjaGVyID8gbnVsbCA6IGRpc3BhdGNoZXIuZ2V0T3duZXIoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gVW5rbm93bk93bmVyKCkge1xuICAgICAgcmV0dXJuIEVycm9yKFwicmVhY3Qtc3RhY2stdG9wLWZyYW1lXCIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoYXNWYWxpZEtleShjb25maWcpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgXCJrZXlcIikpIHtcbiAgICAgICAgdmFyIGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY29uZmlnLCBcImtleVwiKS5nZXQ7XG4gICAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSByZXR1cm4gITE7XG4gICAgICB9XG4gICAgICByZXR1cm4gdm9pZCAwICE9PSBjb25maWcua2V5O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpIHtcbiAgICAgIGZ1bmN0aW9uIHdhcm5BYm91dEFjY2Vzc2luZ0tleSgpIHtcbiAgICAgICAgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24gfHxcbiAgICAgICAgICAoKHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duID0gITApLFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzOiBga2V5YCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0IGluIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgdmFsdWUgd2l0aGluIHRoZSBjaGlsZCBjb21wb25lbnQsIHlvdSBzaG91bGQgcGFzcyBpdCBhcyBhIGRpZmZlcmVudCBwcm9wLiAoaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9zcGVjaWFsLXByb3BzKVwiLFxuICAgICAgICAgICAgZGlzcGxheU5hbWVcbiAgICAgICAgICApKTtcbiAgICAgIH1cbiAgICAgIHdhcm5BYm91dEFjY2Vzc2luZ0tleS5pc1JlYWN0V2FybmluZyA9ICEwO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCBcImtleVwiLCB7XG4gICAgICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nS2V5LFxuICAgICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZWxlbWVudFJlZkdldHRlcldpdGhEZXByZWNhdGlvbldhcm5pbmcoKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0aGlzLnR5cGUpO1xuICAgICAgZGlkV2FybkFib3V0RWxlbWVudFJlZltjb21wb25lbnROYW1lXSB8fFxuICAgICAgICAoKGRpZFdhcm5BYm91dEVsZW1lbnRSZWZbY29tcG9uZW50TmFtZV0gPSAhMCksXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJBY2Nlc3NpbmcgZWxlbWVudC5yZWYgd2FzIHJlbW92ZWQgaW4gUmVhY3QgMTkuIHJlZiBpcyBub3cgYSByZWd1bGFyIHByb3AuIEl0IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBKU1ggRWxlbWVudCB0eXBlIGluIGEgZnV0dXJlIHJlbGVhc2UuXCJcbiAgICAgICAgKSk7XG4gICAgICBjb21wb25lbnROYW1lID0gdGhpcy5wcm9wcy5yZWY7XG4gICAgICByZXR1cm4gdm9pZCAwICE9PSBjb21wb25lbnROYW1lID8gY29tcG9uZW50TmFtZSA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFJlYWN0RWxlbWVudChcbiAgICAgIHR5cGUsXG4gICAgICBrZXksXG4gICAgICBzZWxmLFxuICAgICAgc291cmNlLFxuICAgICAgb3duZXIsXG4gICAgICBwcm9wcyxcbiAgICAgIGRlYnVnU3RhY2ssXG4gICAgICBkZWJ1Z1Rhc2tcbiAgICApIHtcbiAgICAgIHNlbGYgPSBwcm9wcy5yZWY7XG4gICAgICB0eXBlID0ge1xuICAgICAgICAkJHR5cGVvZjogUkVBQ1RfRUxFTUVOVF9UWVBFLFxuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgcHJvcHM6IHByb3BzLFxuICAgICAgICBfb3duZXI6IG93bmVyXG4gICAgICB9O1xuICAgICAgbnVsbCAhPT0gKHZvaWQgMCAhPT0gc2VsZiA/IHNlbGYgOiBudWxsKVxuICAgICAgICA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0eXBlLCBcInJlZlwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgICAgICAgIGdldDogZWxlbWVudFJlZkdldHRlcldpdGhEZXByZWNhdGlvbldhcm5pbmdcbiAgICAgICAgICB9KVxuICAgICAgICA6IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0eXBlLCBcInJlZlwiLCB7IGVudW1lcmFibGU6ICExLCB2YWx1ZTogbnVsbCB9KTtcbiAgICAgIHR5cGUuX3N0b3JlID0ge307XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodHlwZS5fc3RvcmUsIFwidmFsaWRhdGVkXCIsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiAhMSxcbiAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgIHdyaXRhYmxlOiAhMCxcbiAgICAgICAgdmFsdWU6IDBcbiAgICAgIH0pO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHR5cGUsIFwiX2RlYnVnSW5mb1wiLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogITEsXG4gICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICB3cml0YWJsZTogITAsXG4gICAgICAgIHZhbHVlOiBudWxsXG4gICAgICB9KTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0eXBlLCBcIl9kZWJ1Z1N0YWNrXCIsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiAhMSxcbiAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgIHdyaXRhYmxlOiAhMCxcbiAgICAgICAgdmFsdWU6IGRlYnVnU3RhY2tcbiAgICAgIH0pO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHR5cGUsIFwiX2RlYnVnVGFza1wiLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogITEsXG4gICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICB3cml0YWJsZTogITAsXG4gICAgICAgIHZhbHVlOiBkZWJ1Z1Rhc2tcbiAgICAgIH0pO1xuICAgICAgT2JqZWN0LmZyZWV6ZSAmJiAoT2JqZWN0LmZyZWV6ZSh0eXBlLnByb3BzKSwgT2JqZWN0LmZyZWV6ZSh0eXBlKSk7XG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG4gICAgZnVuY3Rpb24ganN4REVWSW1wbChcbiAgICAgIHR5cGUsXG4gICAgICBjb25maWcsXG4gICAgICBtYXliZUtleSxcbiAgICAgIGlzU3RhdGljQ2hpbGRyZW4sXG4gICAgICBzb3VyY2UsXG4gICAgICBzZWxmLFxuICAgICAgZGVidWdTdGFjayxcbiAgICAgIGRlYnVnVGFza1xuICAgICkge1xuICAgICAgdmFyIGNoaWxkcmVuID0gY29uZmlnLmNoaWxkcmVuO1xuICAgICAgaWYgKHZvaWQgMCAhPT0gY2hpbGRyZW4pXG4gICAgICAgIGlmIChpc1N0YXRpY0NoaWxkcmVuKVxuICAgICAgICAgIGlmIChpc0FycmF5SW1wbChjaGlsZHJlbikpIHtcbiAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgIGlzU3RhdGljQ2hpbGRyZW4gPSAwO1xuICAgICAgICAgICAgICBpc1N0YXRpY0NoaWxkcmVuIDwgY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICAgICAgICBpc1N0YXRpY0NoaWxkcmVuKytcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgdmFsaWRhdGVDaGlsZEtleXMoY2hpbGRyZW5baXNTdGF0aWNDaGlsZHJlbl0pO1xuICAgICAgICAgICAgT2JqZWN0LmZyZWV6ZSAmJiBPYmplY3QuZnJlZXplKGNoaWxkcmVuKTtcbiAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVhY3QuanN4OiBTdGF0aWMgY2hpbGRyZW4gc2hvdWxkIGFsd2F5cyBiZSBhbiBhcnJheS4gWW91IGFyZSBsaWtlbHkgZXhwbGljaXRseSBjYWxsaW5nIFJlYWN0LmpzeHMgb3IgUmVhY3QuanN4REVWLiBVc2UgdGhlIEJhYmVsIHRyYW5zZm9ybSBpbnN0ZWFkLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICBlbHNlIHZhbGlkYXRlQ2hpbGRLZXlzKGNoaWxkcmVuKTtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgXCJrZXlcIikpIHtcbiAgICAgICAgY2hpbGRyZW4gPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSk7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoY29uZmlnKS5maWx0ZXIoZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICByZXR1cm4gXCJrZXlcIiAhPT0gaztcbiAgICAgICAgfSk7XG4gICAgICAgIGlzU3RhdGljQ2hpbGRyZW4gPVxuICAgICAgICAgIDAgPCBrZXlzLmxlbmd0aFxuICAgICAgICAgICAgPyBcIntrZXk6IHNvbWVLZXksIFwiICsga2V5cy5qb2luKFwiOiAuLi4sIFwiKSArIFwiOiAuLi59XCJcbiAgICAgICAgICAgIDogXCJ7a2V5OiBzb21lS2V5fVwiO1xuICAgICAgICBkaWRXYXJuQWJvdXRLZXlTcHJlYWRbY2hpbGRyZW4gKyBpc1N0YXRpY0NoaWxkcmVuXSB8fFxuICAgICAgICAgICgoa2V5cyA9XG4gICAgICAgICAgICAwIDwga2V5cy5sZW5ndGggPyBcIntcIiArIGtleXMuam9pbihcIjogLi4uLCBcIikgKyBcIjogLi4ufVwiIDogXCJ7fVwiKSxcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgJ0EgcHJvcHMgb2JqZWN0IGNvbnRhaW5pbmcgYSBcImtleVwiIHByb3AgaXMgYmVpbmcgc3ByZWFkIGludG8gSlNYOlxcbiAgbGV0IHByb3BzID0gJXM7XFxuICA8JXMgey4uLnByb3BzfSAvPlxcblJlYWN0IGtleXMgbXVzdCBiZSBwYXNzZWQgZGlyZWN0bHkgdG8gSlNYIHdpdGhvdXQgdXNpbmcgc3ByZWFkOlxcbiAgbGV0IHByb3BzID0gJXM7XFxuICA8JXMga2V5PXtzb21lS2V5fSB7Li4ucHJvcHN9IC8+JyxcbiAgICAgICAgICAgIGlzU3RhdGljQ2hpbGRyZW4sXG4gICAgICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgICAgIGtleXMsXG4gICAgICAgICAgICBjaGlsZHJlblxuICAgICAgICAgICksXG4gICAgICAgICAgKGRpZFdhcm5BYm91dEtleVNwcmVhZFtjaGlsZHJlbiArIGlzU3RhdGljQ2hpbGRyZW5dID0gITApKTtcbiAgICAgIH1cbiAgICAgIGNoaWxkcmVuID0gbnVsbDtcbiAgICAgIHZvaWQgMCAhPT0gbWF5YmVLZXkgJiZcbiAgICAgICAgKGNoZWNrS2V5U3RyaW5nQ29lcmNpb24obWF5YmVLZXkpLCAoY2hpbGRyZW4gPSBcIlwiICsgbWF5YmVLZXkpKTtcbiAgICAgIGhhc1ZhbGlkS2V5KGNvbmZpZykgJiZcbiAgICAgICAgKGNoZWNrS2V5U3RyaW5nQ29lcmNpb24oY29uZmlnLmtleSksIChjaGlsZHJlbiA9IFwiXCIgKyBjb25maWcua2V5KSk7XG4gICAgICBpZiAoXCJrZXlcIiBpbiBjb25maWcpIHtcbiAgICAgICAgbWF5YmVLZXkgPSB7fTtcbiAgICAgICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gY29uZmlnKVxuICAgICAgICAgIFwia2V5XCIgIT09IHByb3BOYW1lICYmIChtYXliZUtleVtwcm9wTmFtZV0gPSBjb25maWdbcHJvcE5hbWVdKTtcbiAgICAgIH0gZWxzZSBtYXliZUtleSA9IGNvbmZpZztcbiAgICAgIGNoaWxkcmVuICYmXG4gICAgICAgIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKFxuICAgICAgICAgIG1heWJlS2V5LFxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHR5cGVcbiAgICAgICAgICAgID8gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgXCJVbmtub3duXCJcbiAgICAgICAgICAgIDogdHlwZVxuICAgICAgICApO1xuICAgICAgcmV0dXJuIFJlYWN0RWxlbWVudChcbiAgICAgICAgdHlwZSxcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIHNlbGYsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgZ2V0T3duZXIoKSxcbiAgICAgICAgbWF5YmVLZXksXG4gICAgICAgIGRlYnVnU3RhY2ssXG4gICAgICAgIGRlYnVnVGFza1xuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVDaGlsZEtleXMobm9kZSkge1xuICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIG5vZGUgJiZcbiAgICAgICAgbnVsbCAhPT0gbm9kZSAmJlxuICAgICAgICBub2RlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEUgJiZcbiAgICAgICAgbm9kZS5fc3RvcmUgJiZcbiAgICAgICAgKG5vZGUuX3N0b3JlLnZhbGlkYXRlZCA9IDEpO1xuICAgIH1cbiAgICB2YXIgUmVhY3QgPSByZXF1aXJlKFwibmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0XCIpLFxuICAgICAgUkVBQ1RfRUxFTUVOVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnRyYW5zaXRpb25hbC5lbGVtZW50XCIpLFxuICAgICAgUkVBQ1RfUE9SVEFMX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpLFxuICAgICAgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKSxcbiAgICAgIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIiksXG4gICAgICBSRUFDVF9QUk9GSUxFUl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpLFxuICAgICAgUkVBQ1RfQ09OU1VNRVJfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jb25zdW1lclwiKSxcbiAgICAgIFJFQUNUX0NPTlRFWFRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpLFxuICAgICAgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKSxcbiAgICAgIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIiksXG4gICAgICBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VfbGlzdFwiKSxcbiAgICAgIFJFQUNUX01FTU9fVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpLFxuICAgICAgUkVBQ1RfTEFaWV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmxhenlcIiksXG4gICAgICBSRUFDVF9BQ1RJVklUWV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmFjdGl2aXR5XCIpLFxuICAgICAgUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jbGllbnQucmVmZXJlbmNlXCIpLFxuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPVxuICAgICAgICBSZWFjdC5fX0NMSUVOVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9XQVJOX1VTRVJTX1RIRVlfQ0FOTk9UX1VQR1JBREUsXG4gICAgICBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksXG4gICAgICBpc0FycmF5SW1wbCA9IEFycmF5LmlzQXJyYXksXG4gICAgICBjcmVhdGVUYXNrID0gY29uc29sZS5jcmVhdGVUYXNrXG4gICAgICAgID8gY29uc29sZS5jcmVhdGVUYXNrXG4gICAgICAgIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfTtcbiAgICBSZWFjdCA9IHtcbiAgICAgIHJlYWN0X3N0YWNrX2JvdHRvbV9mcmFtZTogZnVuY3Rpb24gKGNhbGxTdGFja0ZvckVycm9yKSB7XG4gICAgICAgIHJldHVybiBjYWxsU3RhY2tGb3JFcnJvcigpO1xuICAgICAgfVxuICAgIH07XG4gICAgdmFyIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duO1xuICAgIHZhciBkaWRXYXJuQWJvdXRFbGVtZW50UmVmID0ge307XG4gICAgdmFyIHVua25vd25Pd25lckRlYnVnU3RhY2sgPSBSZWFjdC5yZWFjdF9zdGFja19ib3R0b21fZnJhbWUuYmluZChcbiAgICAgIFJlYWN0LFxuICAgICAgVW5rbm93bk93bmVyXG4gICAgKSgpO1xuICAgIHZhciB1bmtub3duT3duZXJEZWJ1Z1Rhc2sgPSBjcmVhdGVUYXNrKGdldFRhc2tOYW1lKFVua25vd25Pd25lcikpO1xuICAgIHZhciBkaWRXYXJuQWJvdXRLZXlTcHJlYWQgPSB7fTtcbiAgICBleHBvcnRzLkZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbiAgICBleHBvcnRzLmpzeCA9IGZ1bmN0aW9uICh0eXBlLCBjb25maWcsIG1heWJlS2V5LCBzb3VyY2UsIHNlbGYpIHtcbiAgICAgIHZhciB0cmFja0FjdHVhbE93bmVyID1cbiAgICAgICAgMWU0ID4gUmVhY3RTaGFyZWRJbnRlcm5hbHMucmVjZW50bHlDcmVhdGVkT3duZXJTdGFja3MrKztcbiAgICAgIHJldHVybiBqc3hERVZJbXBsKFxuICAgICAgICB0eXBlLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIG1heWJlS2V5LFxuICAgICAgICAhMSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBzZWxmLFxuICAgICAgICB0cmFja0FjdHVhbE93bmVyXG4gICAgICAgICAgPyBFcnJvcihcInJlYWN0LXN0YWNrLXRvcC1mcmFtZVwiKVxuICAgICAgICAgIDogdW5rbm93bk93bmVyRGVidWdTdGFjayxcbiAgICAgICAgdHJhY2tBY3R1YWxPd25lciA/IGNyZWF0ZVRhc2soZ2V0VGFza05hbWUodHlwZSkpIDogdW5rbm93bk93bmVyRGVidWdUYXNrXG4gICAgICApO1xuICAgIH07XG4gICAgZXhwb3J0cy5qc3hzID0gZnVuY3Rpb24gKHR5cGUsIGNvbmZpZywgbWF5YmVLZXksIHNvdXJjZSwgc2VsZikge1xuICAgICAgdmFyIHRyYWNrQWN0dWFsT3duZXIgPVxuICAgICAgICAxZTQgPiBSZWFjdFNoYXJlZEludGVybmFscy5yZWNlbnRseUNyZWF0ZWRPd25lclN0YWNrcysrO1xuICAgICAgcmV0dXJuIGpzeERFVkltcGwoXG4gICAgICAgIHR5cGUsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgbWF5YmVLZXksXG4gICAgICAgICEwLFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIHNlbGYsXG4gICAgICAgIHRyYWNrQWN0dWFsT3duZXJcbiAgICAgICAgICA/IEVycm9yKFwicmVhY3Qtc3RhY2stdG9wLWZyYW1lXCIpXG4gICAgICAgICAgOiB1bmtub3duT3duZXJEZWJ1Z1N0YWNrLFxuICAgICAgICB0cmFja0FjdHVhbE93bmVyID8gY3JlYXRlVGFzayhnZXRUYXNrTmFtZSh0eXBlKSkgOiB1bmtub3duT3duZXJEZWJ1Z1Rhc2tcbiAgICAgICk7XG4gICAgfTtcbiAgfSkoKTtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-runtime.development.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react.development.js":
|
||
/*!************************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/react/cjs/react.development.js ***!
|
||
\************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/* module decorator */ module = __webpack_require__.nmd(module);\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n/**\n * @license React\n * react.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n true &&\n (function () {\n function defineDeprecationWarning(methodName, info) {\n Object.defineProperty(Component.prototype, methodName, {\n get: function () {\n console.warn(\n \"%s(...) is deprecated in plain JavaScript React classes. %s\",\n info[0],\n info[1]\n );\n }\n });\n }\n function getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable)\n return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n }\n function warnNoop(publicInstance, callerName) {\n publicInstance =\n ((publicInstance = publicInstance.constructor) &&\n (publicInstance.displayName || publicInstance.name)) ||\n \"ReactClass\";\n var warningKey = publicInstance + \".\" + callerName;\n didWarnStateUpdateForUnmountedComponent[warningKey] ||\n (console.error(\n \"Can't call %s on a component that is not yet mounted. This is a no-op, but it might indicate a bug in your application. Instead, assign to `this.state` directly or define a `state = {};` class property with the desired state in the %s component.\",\n callerName,\n publicInstance\n ),\n (didWarnStateUpdateForUnmountedComponent[warningKey] = !0));\n }\n function Component(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n }\n function ComponentDummy() {}\n function PureComponent(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n }\n function noop() {}\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(\n type,\n key,\n self,\n source,\n owner,\n props,\n debugStack,\n debugTask\n ) {\n self = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== self ? self : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function cloneAndReplaceKey(oldElement, newKey) {\n newKey = ReactElement(\n oldElement.type,\n newKey,\n void 0,\n void 0,\n oldElement._owner,\n oldElement.props,\n oldElement._debugStack,\n oldElement._debugTask\n );\n oldElement._store &&\n (newKey._store.validated = oldElement._store.validated);\n return newKey;\n }\n function isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n }\n function escape(key) {\n var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n return (\n \"$\" +\n key.replace(/[=:]/g, function (match) {\n return escaperLookup[match];\n })\n );\n }\n function getElementKey(element, index) {\n return \"object\" === typeof element &&\n null !== element &&\n null != element.key\n ? (checkKeyStringCoercion(element.key), escape(\"\" + element.key))\n : index.toString(36);\n }\n function resolveThenable(thenable) {\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n default:\n switch (\n (\"string\" === typeof thenable.status\n ? thenable.then(noop, noop)\n : ((thenable.status = \"pending\"),\n thenable.then(\n function (fulfilledValue) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"fulfilled\"),\n (thenable.value = fulfilledValue));\n },\n function (error) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"rejected\"),\n (thenable.reason = error));\n }\n )),\n thenable.status)\n ) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n }\n }\n throw thenable;\n }\n function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n var type = typeof children;\n if (\"undefined\" === type || \"boolean\" === type) children = null;\n var invokeCallback = !1;\n if (null === children) invokeCallback = !0;\n else\n switch (type) {\n case \"bigint\":\n case \"string\":\n case \"number\":\n invokeCallback = !0;\n break;\n case \"object\":\n switch (children.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n invokeCallback = !0;\n break;\n case REACT_LAZY_TYPE:\n return (\n (invokeCallback = children._init),\n mapIntoArray(\n invokeCallback(children._payload),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n )\n );\n }\n }\n if (invokeCallback) {\n invokeCallback = children;\n callback = callback(invokeCallback);\n var childKey =\n \"\" === nameSoFar ? \".\" + getElementKey(invokeCallback, 0) : nameSoFar;\n isArrayImpl(callback)\n ? ((escapedPrefix = \"\"),\n null != childKey &&\n (escapedPrefix =\n childKey.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n return c;\n }))\n : null != callback &&\n (isValidElement(callback) &&\n (null != callback.key &&\n ((invokeCallback && invokeCallback.key === callback.key) ||\n checkKeyStringCoercion(callback.key)),\n (escapedPrefix = cloneAndReplaceKey(\n callback,\n escapedPrefix +\n (null == callback.key ||\n (invokeCallback && invokeCallback.key === callback.key)\n ? \"\"\n : (\"\" + callback.key).replace(\n userProvidedKeyEscapeRegex,\n \"$&/\"\n ) + \"/\") +\n childKey\n )),\n \"\" !== nameSoFar &&\n null != invokeCallback &&\n isValidElement(invokeCallback) &&\n null == invokeCallback.key &&\n invokeCallback._store &&\n !invokeCallback._store.validated &&\n (escapedPrefix._store.validated = 2),\n (callback = escapedPrefix)),\n array.push(callback));\n return 1;\n }\n invokeCallback = 0;\n childKey = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n if (isArrayImpl(children))\n for (var i = 0; i < children.length; i++)\n (nameSoFar = children[i]),\n (type = childKey + getElementKey(nameSoFar, i)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n for (\n i === children.entries &&\n (didWarnAboutMaps ||\n console.warn(\n \"Using Maps as children is not supported. Use an array of keyed ReactElements instead.\"\n ),\n (didWarnAboutMaps = !0)),\n children = i.call(children),\n i = 0;\n !(nameSoFar = children.next()).done;\n\n )\n (nameSoFar = nameSoFar.value),\n (type = childKey + getElementKey(nameSoFar, i++)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (\"object\" === type) {\n if (\"function\" === typeof children.then)\n return mapIntoArray(\n resolveThenable(children),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n );\n array = String(children);\n throw Error(\n \"Objects are not valid as a React child (found: \" +\n (\"[object Object]\" === array\n ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n : array) +\n \"). If you meant to render a collection of children, use an array instead.\"\n );\n }\n return invokeCallback;\n }\n function mapChildren(children, func, context) {\n if (null == children) return children;\n var result = [],\n count = 0;\n mapIntoArray(children, result, \"\", \"\", function (child) {\n return func.call(context, child, count++);\n });\n return result;\n }\n function lazyInitializer(payload) {\n if (-1 === payload._status) {\n var ctor = payload._result;\n ctor = ctor();\n ctor.then(\n function (moduleObject) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 1), (payload._result = moduleObject);\n },\n function (error) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 2), (payload._result = error);\n }\n );\n -1 === payload._status &&\n ((payload._status = 0), (payload._result = ctor));\n }\n if (1 === payload._status)\n return (\n (ctor = payload._result),\n void 0 === ctor &&\n console.error(\n \"lazy: Expected the result of a dynamic import() call. Instead received: %s\\n\\nYour code should look like: \\n const MyComponent = lazy(() => import('./MyComponent'))\\n\\nDid you accidentally put curly braces around the import?\",\n ctor\n ),\n \"default\" in ctor ||\n console.error(\n \"lazy: Expected the result of a dynamic import() call. Instead received: %s\\n\\nYour code should look like: \\n const MyComponent = lazy(() => import('./MyComponent'))\",\n ctor\n ),\n ctor.default\n );\n throw payload._result;\n }\n function resolveDispatcher() {\n var dispatcher = ReactSharedInternals.H;\n null === dispatcher &&\n console.error(\n \"Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.\"\n );\n return dispatcher;\n }\n function releaseAsyncTransition() {\n ReactSharedInternals.asyncTransitions--;\n }\n function enqueueTask(task) {\n if (null === enqueueTaskImpl)\n try {\n var requireString = (\"require\" + Math.random()).slice(0, 7);\n enqueueTaskImpl = (module && module[requireString]).call(\n module,\n \"timers\"\n ).setImmediate;\n } catch (_err) {\n enqueueTaskImpl = function (callback) {\n !1 === didWarnAboutMessageChannel &&\n ((didWarnAboutMessageChannel = !0),\n \"undefined\" === typeof MessageChannel &&\n console.error(\n \"This browser does not have a MessageChannel implementation, so enqueuing tasks via await act(async () => ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning.\"\n ));\n var channel = new MessageChannel();\n channel.port1.onmessage = callback;\n channel.port2.postMessage(void 0);\n };\n }\n return enqueueTaskImpl(task);\n }\n function aggregateErrors(errors) {\n return 1 < errors.length && \"function\" === typeof AggregateError\n ? new AggregateError(errors)\n : errors[0];\n }\n function popActScope(prevActQueue, prevActScopeDepth) {\n prevActScopeDepth !== actScopeDepth - 1 &&\n console.error(\n \"You seem to have overlapping act() calls, this is not supported. Be sure to await previous act() calls before making a new one. \"\n );\n actScopeDepth = prevActScopeDepth;\n }\n function recursivelyFlushAsyncActWork(returnValue, resolve, reject) {\n var queue = ReactSharedInternals.actQueue;\n if (null !== queue)\n if (0 !== queue.length)\n try {\n flushActQueue(queue);\n enqueueTask(function () {\n return recursivelyFlushAsyncActWork(returnValue, resolve, reject);\n });\n return;\n } catch (error) {\n ReactSharedInternals.thrownErrors.push(error);\n }\n else ReactSharedInternals.actQueue = null;\n 0 < ReactSharedInternals.thrownErrors.length\n ? ((queue = aggregateErrors(ReactSharedInternals.thrownErrors)),\n (ReactSharedInternals.thrownErrors.length = 0),\n reject(queue))\n : resolve(returnValue);\n }\n function flushActQueue(queue) {\n if (!isFlushing) {\n isFlushing = !0;\n var i = 0;\n try {\n for (; i < queue.length; i++) {\n var callback = queue[i];\n do {\n ReactSharedInternals.didUsePromise = !1;\n var continuation = callback(!1);\n if (null !== continuation) {\n if (ReactSharedInternals.didUsePromise) {\n queue[i] = callback;\n queue.splice(0, i);\n return;\n }\n callback = continuation;\n } else break;\n } while (1);\n }\n queue.length = 0;\n } catch (error) {\n queue.splice(0, i + 1), ReactSharedInternals.thrownErrors.push(error);\n } finally {\n isFlushing = !1;\n }\n }\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n MAYBE_ITERATOR_SYMBOL = Symbol.iterator,\n didWarnStateUpdateForUnmountedComponent = {},\n ReactNoopUpdateQueue = {\n isMounted: function () {\n return !1;\n },\n enqueueForceUpdate: function (publicInstance) {\n warnNoop(publicInstance, \"forceUpdate\");\n },\n enqueueReplaceState: function (publicInstance) {\n warnNoop(publicInstance, \"replaceState\");\n },\n enqueueSetState: function (publicInstance) {\n warnNoop(publicInstance, \"setState\");\n }\n },\n assign = Object.assign,\n emptyObject = {};\n Object.freeze(emptyObject);\n Component.prototype.isReactComponent = {};\n Component.prototype.setState = function (partialState, callback) {\n if (\n \"object\" !== typeof partialState &&\n \"function\" !== typeof partialState &&\n null != partialState\n )\n throw Error(\n \"takes an object of state variables to update or a function which returns an object of state variables.\"\n );\n this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n };\n Component.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n };\n var deprecatedAPIs = {\n isMounted: [\n \"isMounted\",\n \"Instead, make sure to clean up subscriptions and pending requests in componentWillUnmount to prevent memory leaks.\"\n ],\n replaceState: [\n \"replaceState\",\n \"Refactor your code to use setState instead (see https://github.com/facebook/react/issues/3236).\"\n ]\n },\n fnName;\n for (fnName in deprecatedAPIs)\n deprecatedAPIs.hasOwnProperty(fnName) &&\n defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\n ComponentDummy.prototype = Component.prototype;\n deprecatedAPIs = PureComponent.prototype = new ComponentDummy();\n deprecatedAPIs.constructor = PureComponent;\n assign(deprecatedAPIs, Component.prototype);\n deprecatedAPIs.isPureReactComponent = !0;\n var isArrayImpl = Array.isArray,\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals = {\n H: null,\n A: null,\n T: null,\n S: null,\n actQueue: null,\n asyncTransitions: 0,\n isBatchingLegacy: !1,\n didScheduleLegacyUpdate: !1,\n didUsePromise: !1,\n thrownErrors: [],\n getCurrentStack: null,\n recentlyCreatedOwnerStacks: 0\n },\n hasOwnProperty = Object.prototype.hasOwnProperty,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n deprecatedAPIs = {\n react_stack_bottom_frame: function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown, didWarnAboutOldJSXRuntime;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = deprecatedAPIs.react_stack_bottom_frame.bind(\n deprecatedAPIs,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutMaps = !1,\n userProvidedKeyEscapeRegex = /\\/+/g,\n reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n },\n didWarnAboutMessageChannel = !1,\n enqueueTaskImpl = null,\n actScopeDepth = 0,\n didWarnNoAwaitAct = !1,\n isFlushing = !1,\n queueSeveralMicrotasks =\n \"function\" === typeof queueMicrotask\n ? function (callback) {\n queueMicrotask(function () {\n return queueMicrotask(callback);\n });\n }\n : enqueueTask;\n deprecatedAPIs = Object.freeze({\n __proto__: null,\n c: function (size) {\n return resolveDispatcher().useMemoCache(size);\n }\n });\n exports.Children = {\n map: mapChildren,\n forEach: function (children, forEachFunc, forEachContext) {\n mapChildren(\n children,\n function () {\n forEachFunc.apply(this, arguments);\n },\n forEachContext\n );\n },\n count: function (children) {\n var n = 0;\n mapChildren(children, function () {\n n++;\n });\n return n;\n },\n toArray: function (children) {\n return (\n mapChildren(children, function (child) {\n return child;\n }) || []\n );\n },\n only: function (children) {\n if (!isValidElement(children))\n throw Error(\n \"React.Children.only expected to receive a single React element child.\"\n );\n return children;\n }\n };\n exports.Component = Component;\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.Profiler = REACT_PROFILER_TYPE;\n exports.PureComponent = PureComponent;\n exports.StrictMode = REACT_STRICT_MODE_TYPE;\n exports.Suspense = REACT_SUSPENSE_TYPE;\n exports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n ReactSharedInternals;\n exports.__COMPILER_RUNTIME = deprecatedAPIs;\n exports.act = function (callback) {\n var prevActQueue = ReactSharedInternals.actQueue,\n prevActScopeDepth = actScopeDepth;\n actScopeDepth++;\n var queue = (ReactSharedInternals.actQueue =\n null !== prevActQueue ? prevActQueue : []),\n didAwaitActCall = !1;\n try {\n var result = callback();\n } catch (error) {\n ReactSharedInternals.thrownErrors.push(error);\n }\n if (0 < ReactSharedInternals.thrownErrors.length)\n throw (\n (popActScope(prevActQueue, prevActScopeDepth),\n (callback = aggregateErrors(ReactSharedInternals.thrownErrors)),\n (ReactSharedInternals.thrownErrors.length = 0),\n callback)\n );\n if (\n null !== result &&\n \"object\" === typeof result &&\n \"function\" === typeof result.then\n ) {\n var thenable = result;\n queueSeveralMicrotasks(function () {\n didAwaitActCall ||\n didWarnNoAwaitAct ||\n ((didWarnNoAwaitAct = !0),\n console.error(\n \"You called act(async () => ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);\"\n ));\n });\n return {\n then: function (resolve, reject) {\n didAwaitActCall = !0;\n thenable.then(\n function (returnValue) {\n popActScope(prevActQueue, prevActScopeDepth);\n if (0 === prevActScopeDepth) {\n try {\n flushActQueue(queue),\n enqueueTask(function () {\n return recursivelyFlushAsyncActWork(\n returnValue,\n resolve,\n reject\n );\n });\n } catch (error$0) {\n ReactSharedInternals.thrownErrors.push(error$0);\n }\n if (0 < ReactSharedInternals.thrownErrors.length) {\n var _thrownError = aggregateErrors(\n ReactSharedInternals.thrownErrors\n );\n ReactSharedInternals.thrownErrors.length = 0;\n reject(_thrownError);\n }\n } else resolve(returnValue);\n },\n function (error) {\n popActScope(prevActQueue, prevActScopeDepth);\n 0 < ReactSharedInternals.thrownErrors.length\n ? ((error = aggregateErrors(\n ReactSharedInternals.thrownErrors\n )),\n (ReactSharedInternals.thrownErrors.length = 0),\n reject(error))\n : reject(error);\n }\n );\n }\n };\n }\n var returnValue$jscomp$0 = result;\n popActScope(prevActQueue, prevActScopeDepth);\n 0 === prevActScopeDepth &&\n (flushActQueue(queue),\n 0 !== queue.length &&\n queueSeveralMicrotasks(function () {\n didAwaitActCall ||\n didWarnNoAwaitAct ||\n ((didWarnNoAwaitAct = !0),\n console.error(\n \"A component suspended inside an `act` scope, but the `act` call was not awaited. When testing React components that depend on asynchronous data, you must await the result:\\n\\nawait act(() => ...)\"\n ));\n }),\n (ReactSharedInternals.actQueue = null));\n if (0 < ReactSharedInternals.thrownErrors.length)\n throw (\n ((callback = aggregateErrors(ReactSharedInternals.thrownErrors)),\n (ReactSharedInternals.thrownErrors.length = 0),\n callback)\n );\n return {\n then: function (resolve, reject) {\n didAwaitActCall = !0;\n 0 === prevActScopeDepth\n ? ((ReactSharedInternals.actQueue = queue),\n enqueueTask(function () {\n return recursivelyFlushAsyncActWork(\n returnValue$jscomp$0,\n resolve,\n reject\n );\n }))\n : resolve(returnValue$jscomp$0);\n }\n };\n };\n exports.cache = function (fn) {\n return function () {\n return fn.apply(null, arguments);\n };\n };\n exports.cacheSignal = function () {\n return null;\n };\n exports.captureOwnerStack = function () {\n var getCurrentStack = ReactSharedInternals.getCurrentStack;\n return null === getCurrentStack ? null : getCurrentStack();\n };\n exports.cloneElement = function (element, config, children) {\n if (null === element || void 0 === element)\n throw Error(\n \"The argument must be a React element, but you passed \" +\n element +\n \".\"\n );\n var props = assign({}, element.props),\n key = element.key,\n owner = element._owner;\n if (null != config) {\n var JSCompiler_inline_result;\n a: {\n if (\n hasOwnProperty.call(config, \"ref\") &&\n (JSCompiler_inline_result = Object.getOwnPropertyDescriptor(\n config,\n \"ref\"\n ).get) &&\n JSCompiler_inline_result.isReactWarning\n ) {\n JSCompiler_inline_result = !1;\n break a;\n }\n JSCompiler_inline_result = void 0 !== config.ref;\n }\n JSCompiler_inline_result && (owner = getOwner());\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (key = \"\" + config.key));\n for (propName in config)\n !hasOwnProperty.call(config, propName) ||\n \"key\" === propName ||\n \"__self\" === propName ||\n \"__source\" === propName ||\n (\"ref\" === propName && void 0 === config.ref) ||\n (props[propName] = config[propName]);\n }\n var propName = arguments.length - 2;\n if (1 === propName) props.children = children;\n else if (1 < propName) {\n JSCompiler_inline_result = Array(propName);\n for (var i = 0; i < propName; i++)\n JSCompiler_inline_result[i] = arguments[i + 2];\n props.children = JSCompiler_inline_result;\n }\n props = ReactElement(\n element.type,\n key,\n void 0,\n void 0,\n owner,\n props,\n element._debugStack,\n element._debugTask\n );\n for (key = 2; key < arguments.length; key++)\n (owner = arguments[key]),\n isValidElement(owner) && owner._store && (owner._store.validated = 1);\n return props;\n };\n exports.createContext = function (defaultValue) {\n defaultValue = {\n $$typeof: REACT_CONTEXT_TYPE,\n _currentValue: defaultValue,\n _currentValue2: defaultValue,\n _threadCount: 0,\n Provider: null,\n Consumer: null\n };\n defaultValue.Provider = defaultValue;\n defaultValue.Consumer = {\n $$typeof: REACT_CONSUMER_TYPE,\n _context: defaultValue\n };\n defaultValue._currentRenderer = null;\n defaultValue._currentRenderer2 = null;\n return defaultValue;\n };\n exports.createElement = function (type, config, children) {\n for (var i = 2; i < arguments.length; i++) {\n var node = arguments[i];\n isValidElement(node) && node._store && (node._store.validated = 1);\n }\n i = {};\n node = null;\n if (null != config)\n for (propName in (didWarnAboutOldJSXRuntime ||\n !(\"__self\" in config) ||\n \"key\" in config ||\n ((didWarnAboutOldJSXRuntime = !0),\n console.warn(\n \"Your app (or one of its dependencies) is using an outdated JSX transform. Update to the modern JSX transform for faster performance: https://react.dev/link/new-jsx-transform\"\n )),\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (node = \"\" + config.key)),\n config))\n hasOwnProperty.call(config, propName) &&\n \"key\" !== propName &&\n \"__self\" !== propName &&\n \"__source\" !== propName &&\n (i[propName] = config[propName]);\n var childrenLength = arguments.length - 2;\n if (1 === childrenLength) i.children = children;\n else if (1 < childrenLength) {\n for (\n var childArray = Array(childrenLength), _i = 0;\n _i < childrenLength;\n _i++\n )\n childArray[_i] = arguments[_i + 2];\n Object.freeze && Object.freeze(childArray);\n i.children = childArray;\n }\n if (type && type.defaultProps)\n for (propName in ((childrenLength = type.defaultProps), childrenLength))\n void 0 === i[propName] && (i[propName] = childrenLength[propName]);\n node &&\n defineKeyPropWarningGetter(\n i,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n var propName = 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return ReactElement(\n type,\n node,\n void 0,\n void 0,\n getOwner(),\n i,\n propName ? Error(\"react-stack-top-frame\") : unknownOwnerDebugStack,\n propName ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.createRef = function () {\n var refObject = { current: null };\n Object.seal(refObject);\n return refObject;\n };\n exports.forwardRef = function (render) {\n null != render && render.$$typeof === REACT_MEMO_TYPE\n ? console.error(\n \"forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...)).\"\n )\n : \"function\" !== typeof render\n ? console.error(\n \"forwardRef requires a render function but was given %s.\",\n null === render ? \"null\" : typeof render\n )\n : 0 !== render.length &&\n 2 !== render.length &&\n console.error(\n \"forwardRef render functions accept exactly two parameters: props and ref. %s\",\n 1 === render.length\n ? \"Did you forget to use the ref parameter?\"\n : \"Any additional parameter will be undefined.\"\n );\n null != render &&\n null != render.defaultProps &&\n console.error(\n \"forwardRef render functions do not support defaultProps. Did you accidentally pass a React component?\"\n );\n var elementType = { $$typeof: REACT_FORWARD_REF_TYPE, render: render },\n ownName;\n Object.defineProperty(elementType, \"displayName\", {\n enumerable: !1,\n configurable: !0,\n get: function () {\n return ownName;\n },\n set: function (name) {\n ownName = name;\n render.name ||\n render.displayName ||\n (Object.defineProperty(render, \"name\", { value: name }),\n (render.displayName = name));\n }\n });\n return elementType;\n };\n exports.isValidElement = isValidElement;\n exports.lazy = function (ctor) {\n return {\n $$typeof: REACT_LAZY_TYPE,\n _payload: { _status: -1, _result: ctor },\n _init: lazyInitializer\n };\n };\n exports.memo = function (type, compare) {\n null == type &&\n console.error(\n \"memo: The first argument must be a component. Instead received: %s\",\n null === type ? \"null\" : typeof type\n );\n compare = {\n $$typeof: REACT_MEMO_TYPE,\n type: type,\n compare: void 0 === compare ? null : compare\n };\n var ownName;\n Object.defineProperty(compare, \"displayName\", {\n enumerable: !1,\n configurable: !0,\n get: function () {\n return ownName;\n },\n set: function (name) {\n ownName = name;\n type.name ||\n type.displayName ||\n (Object.defineProperty(type, \"name\", { value: name }),\n (type.displayName = name));\n }\n });\n return compare;\n };\n exports.startTransition = function (scope) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n currentTransition._updatedFibers = new Set();\n ReactSharedInternals.T = currentTransition;\n try {\n var returnValue = scope(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n (ReactSharedInternals.asyncTransitions++,\n returnValue.then(releaseAsyncTransition, releaseAsyncTransition),\n returnValue.then(noop, reportGlobalError));\n } catch (error) {\n reportGlobalError(error);\n } finally {\n null === prevTransition &&\n currentTransition._updatedFibers &&\n ((scope = currentTransition._updatedFibers.size),\n currentTransition._updatedFibers.clear(),\n 10 < scope &&\n console.warn(\n \"Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table.\"\n )),\n null !== prevTransition &&\n null !== currentTransition.types &&\n (null !== prevTransition.types &&\n prevTransition.types !== currentTransition.types &&\n console.error(\n \"We expected inner Transitions to have transferred the outer types set and that you cannot add to the outer Transition while inside the inner.This is a bug in React.\"\n ),\n (prevTransition.types = currentTransition.types)),\n (ReactSharedInternals.T = prevTransition);\n }\n };\n exports.unstable_useCacheRefresh = function () {\n return resolveDispatcher().useCacheRefresh();\n };\n exports.use = function (usable) {\n return resolveDispatcher().use(usable);\n };\n exports.useActionState = function (action, initialState, permalink) {\n return resolveDispatcher().useActionState(\n action,\n initialState,\n permalink\n );\n };\n exports.useCallback = function (callback, deps) {\n return resolveDispatcher().useCallback(callback, deps);\n };\n exports.useContext = function (Context) {\n var dispatcher = resolveDispatcher();\n Context.$$typeof === REACT_CONSUMER_TYPE &&\n console.error(\n \"Calling useContext(Context.Consumer) is not supported and will cause bugs. Did you mean to call useContext(Context) instead?\"\n );\n return dispatcher.useContext(Context);\n };\n exports.useDebugValue = function (value, formatterFn) {\n return resolveDispatcher().useDebugValue(value, formatterFn);\n };\n exports.useDeferredValue = function (value, initialValue) {\n return resolveDispatcher().useDeferredValue(value, initialValue);\n };\n exports.useEffect = function (create, deps) {\n null == create &&\n console.warn(\n \"React Hook useEffect requires an effect callback. Did you forget to pass a callback to the hook?\"\n );\n return resolveDispatcher().useEffect(create, deps);\n };\n exports.useId = function () {\n return resolveDispatcher().useId();\n };\n exports.useImperativeHandle = function (ref, create, deps) {\n return resolveDispatcher().useImperativeHandle(ref, create, deps);\n };\n exports.useInsertionEffect = function (create, deps) {\n null == create &&\n console.warn(\n \"React Hook useInsertionEffect requires an effect callback. Did you forget to pass a callback to the hook?\"\n );\n return resolveDispatcher().useInsertionEffect(create, deps);\n };\n exports.useLayoutEffect = function (create, deps) {\n null == create &&\n console.warn(\n \"React Hook useLayoutEffect requires an effect callback. Did you forget to pass a callback to the hook?\"\n );\n return resolveDispatcher().useLayoutEffect(create, deps);\n };\n exports.useMemo = function (create, deps) {\n return resolveDispatcher().useMemo(create, deps);\n };\n exports.useOptimistic = function (passthrough, reducer) {\n return resolveDispatcher().useOptimistic(passthrough, reducer);\n };\n exports.useReducer = function (reducer, initialArg, init) {\n return resolveDispatcher().useReducer(reducer, initialArg, init);\n };\n exports.useRef = function (initialValue) {\n return resolveDispatcher().useRef(initialValue);\n };\n exports.useState = function (initialState) {\n return resolveDispatcher().useState(initialState);\n };\n exports.useSyncExternalStore = function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n ) {\n return resolveDispatcher().useSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n };\n exports.useTransition = function () {\n return resolveDispatcher().useTransition();\n };\n exports.version = \"19.2.0-canary-97cdd5d3-20250710\";\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvY2pzL3JlYWN0LmRldmVsb3BtZW50LmpzIiwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhO0FBQ2IsS0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9NQUFvTTtBQUNwTTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCwrQ0FBK0MsNkJBQTZCO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IscUJBQXFCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyx5Q0FBeUM7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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LHFCQUFxQjtBQUN6QjtBQUNBO0FBQ0EsSUFBSSxrQkFBa0I7QUFDdEI7QUFDQTtBQUNBLElBQUksY0FBYztBQUNsQjtBQUNBO0FBQ0EsSUFBSSxnQkFBZ0I7QUFDcEI7QUFDQTtBQUNBLElBQUksNEJBQTRCO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxxQkFBcUI7QUFDekI7QUFDQTtBQUNBLElBQUksZUFBZTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUciLCJzb3VyY2VzIjpbIi9ob21lL05pY2hvbGFpL0RvY3VtZW50cy9EZXYvYmlvaGF6YXJkLXZmeC0xL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvY2pzL3JlYWN0LmRldmVsb3BtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHJlYWN0LmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViAmJlxuICAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIGRlZmluZURlcHJlY2F0aW9uV2FybmluZyhtZXRob2ROYW1lLCBpbmZvKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29tcG9uZW50LnByb3RvdHlwZSwgbWV0aG9kTmFtZSwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBcIiVzKC4uLikgaXMgZGVwcmVjYXRlZCBpbiBwbGFpbiBKYXZhU2NyaXB0IFJlYWN0IGNsYXNzZXMuICVzXCIsXG4gICAgICAgICAgICBpbmZvWzBdLFxuICAgICAgICAgICAgaW5mb1sxXVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgICAgIGlmIChudWxsID09PSBtYXliZUl0ZXJhYmxlIHx8IFwib2JqZWN0XCIgIT09IHR5cGVvZiBtYXliZUl0ZXJhYmxlKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIG1heWJlSXRlcmFibGUgPVxuICAgICAgICAoTUFZQkVfSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbTUFZQkVfSVRFUkFUT1JfU1lNQk9MXSkgfHxcbiAgICAgICAgbWF5YmVJdGVyYWJsZVtcIkBAaXRlcmF0b3JcIl07XG4gICAgICByZXR1cm4gXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbWF5YmVJdGVyYWJsZSA/IG1heWJlSXRlcmFibGUgOiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgY2FsbGVyTmFtZSkge1xuICAgICAgcHVibGljSW5zdGFuY2UgPVxuICAgICAgICAoKHB1YmxpY0luc3RhbmNlID0gcHVibGljSW5zdGFuY2UuY29uc3RydWN0b3IpICYmXG4gICAgICAgICAgKHB1YmxpY0luc3RhbmNlLmRpc3BsYXlOYW1lIHx8IHB1YmxpY0luc3RhbmNlLm5hbWUpKSB8fFxuICAgICAgICBcIlJlYWN0Q2xhc3NcIjtcbiAgICAgIHZhciB3YXJuaW5nS2V5ID0gcHVibGljSW5zdGFuY2UgKyBcIi5cIiArIGNhbGxlck5hbWU7XG4gICAgICBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnRbd2FybmluZ0tleV0gfHxcbiAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJDYW4ndCBjYWxsICVzIG9uIGEgY29tcG9uZW50IHRoYXQgaXMgbm90IHlldCBtb3VudGVkLiBUaGlzIGlzIGEgbm8tb3AsIGJ1dCBpdCBtaWdodCBpbmRpY2F0ZSBhIGJ1ZyBpbiB5b3VyIGFwcGxpY2F0aW9uLiBJbnN0ZWFkLCBhc3NpZ24gdG8gYHRoaXMuc3RhdGVgIGRpcmVjdGx5IG9yIGRlZmluZSBhIGBzdGF0ZSA9IHt9O2AgY2xhc3MgcHJvcGVydHkgd2l0aCB0aGUgZGVzaXJlZCBzdGF0ZSBpbiB0aGUgJXMgY29tcG9uZW50LlwiLFxuICAgICAgICAgIGNhbGxlck5hbWUsXG4gICAgICAgICAgcHVibGljSW5zdGFuY2VcbiAgICAgICAgKSxcbiAgICAgICAgKGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudFt3YXJuaW5nS2V5XSA9ICEwKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIENvbXBvbmVudChwcm9wcywgY29udGV4dCwgdXBkYXRlcikge1xuICAgICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgIHRoaXMucmVmcyA9IGVtcHR5T2JqZWN0O1xuICAgICAgdGhpcy51cGRhdGVyID0gdXBkYXRlciB8fCBSZWFjdE5vb3BVcGRhdGVRdWV1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gQ29tcG9uZW50RHVtbXkoKSB7fVxuICAgIGZ1bmN0aW9uIFB1cmVDb21wb25lbnQocHJvcHMsIGNvbnRleHQsIHVwZGF0ZXIpIHtcbiAgICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICB0aGlzLnJlZnMgPSBlbXB0eU9iamVjdDtcbiAgICAgIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vb3AoKSB7fVxuICAgIGZ1bmN0aW9uIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIFwiXCIgKyB2YWx1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tLZXlTdHJpbmdDb2VyY2lvbih2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKTtcbiAgICAgICAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9ICExO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSAhMDtcbiAgICAgIH1cbiAgICAgIGlmIChKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQpIHtcbiAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gY29uc29sZTtcbiAgICAgICAgdmFyIEpTQ29tcGlsZXJfdGVtcF9jb25zdCA9IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdC5lcnJvcjtcbiAgICAgICAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCRqc2NvbXAkMCA9XG4gICAgICAgICAgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFN5bWJvbCAmJlxuICAgICAgICAgICAgU3ltYm9sLnRvU3RyaW5nVGFnICYmXG4gICAgICAgICAgICB2YWx1ZVtTeW1ib2wudG9TdHJpbmdUYWddKSB8fFxuICAgICAgICAgIHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUgfHxcbiAgICAgICAgICBcIk9iamVjdFwiO1xuICAgICAgICBKU0NvbXBpbGVyX3RlbXBfY29uc3QuY2FsbChcbiAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQsXG4gICAgICAgICAgXCJUaGUgcHJvdmlkZWQga2V5IGlzIGFuIHVuc3VwcG9ydGVkIHR5cGUgJXMuIFRoaXMgdmFsdWUgbXVzdCBiZSBjb2VyY2VkIHRvIGEgc3RyaW5nIGJlZm9yZSB1c2luZyBpdCBoZXJlLlwiLFxuICAgICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCRqc2NvbXAkMFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpIHtcbiAgICAgIGlmIChudWxsID09IHR5cGUpIHJldHVybiBudWxsO1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHR5cGUpXG4gICAgICAgIHJldHVybiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DTElFTlRfUkVGRVJFTkNFXG4gICAgICAgICAgPyBudWxsXG4gICAgICAgICAgOiB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBudWxsO1xuICAgICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiB0eXBlKSByZXR1cm4gdHlwZTtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiRnJhZ21lbnRcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlByb2ZpbGVyXCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJTdHJpY3RNb2RlXCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJTdXNwZW5zZVwiO1xuICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJTdXNwZW5zZUxpc3RcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9BQ1RJVklUWV9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIkFjdGl2aXR5XCI7XG4gICAgICB9XG4gICAgICBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIHR5cGUpXG4gICAgICAgIHN3aXRjaCAoXG4gICAgICAgICAgKFwibnVtYmVyXCIgPT09IHR5cGVvZiB0eXBlLnRhZyAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJSZWNlaXZlZCBhbiB1bmV4cGVjdGVkIG9iamVjdCBpbiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoKS4gVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICApLFxuICAgICAgICAgIHR5cGUuJCR0eXBlb2YpXG4gICAgICAgICkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gXCJQb3J0YWxcIjtcbiAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8IFwiQ29udGV4dFwiO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OU1VNRVJfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAodHlwZS5fY29udGV4dC5kaXNwbGF5TmFtZSB8fCBcIkNvbnRleHRcIikgKyBcIi5Db25zdW1lclwiO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgIHZhciBpbm5lclR5cGUgPSB0eXBlLnJlbmRlcjtcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlLmRpc3BsYXlOYW1lO1xuICAgICAgICAgICAgdHlwZSB8fFxuICAgICAgICAgICAgICAoKHR5cGUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgXCJcIiksXG4gICAgICAgICAgICAgICh0eXBlID0gXCJcIiAhPT0gdHlwZSA/IFwiRm9yd2FyZFJlZihcIiArIHR5cGUgKyBcIilcIiA6IFwiRm9yd2FyZFJlZlwiKSk7XG4gICAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChpbm5lclR5cGUgPSB0eXBlLmRpc3BsYXlOYW1lIHx8IG51bGwpLFxuICAgICAgICAgICAgICBudWxsICE9PSBpbm5lclR5cGVcbiAgICAgICAgICAgICAgICA/IGlubmVyVHlwZVxuICAgICAgICAgICAgICAgIDogZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUudHlwZSkgfHwgXCJNZW1vXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICBpbm5lclR5cGUgPSB0eXBlLl9wYXlsb2FkO1xuICAgICAgICAgICAgdHlwZSA9IHR5cGUuX2luaXQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUoaW5uZXJUeXBlKSk7XG4gICAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0VGFza05hbWUodHlwZSkge1xuICAgICAgaWYgKHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHJldHVybiBcIjw+XCI7XG4gICAgICBpZiAoXG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiB0eXBlICYmXG4gICAgICAgIG51bGwgIT09IHR5cGUgJiZcbiAgICAgICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFXG4gICAgICApXG4gICAgICAgIHJldHVybiBcIjwuLi4+XCI7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKTtcbiAgICAgICAgcmV0dXJuIG5hbWUgPyBcIjxcIiArIG5hbWUgKyBcIj5cIiA6IFwiPC4uLj5cIjtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgcmV0dXJuIFwiPC4uLj5cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0T3duZXIoKSB7XG4gICAgICB2YXIgZGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkE7XG4gICAgICByZXR1cm4gbnVsbCA9PT0gZGlzcGF0Y2hlciA/IG51bGwgOiBkaXNwYXRjaGVyLmdldE93bmVyKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFVua25vd25Pd25lcigpIHtcbiAgICAgIHJldHVybiBFcnJvcihcInJlYWN0LXN0YWNrLXRvcC1mcmFtZVwiKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaGFzVmFsaWRLZXkoY29uZmlnKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIFwia2V5XCIpKSB7XG4gICAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgXCJrZXlcIikuZ2V0O1xuICAgICAgICBpZiAoZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0V2FybmluZykgcmV0dXJuICExO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZvaWQgMCAhPT0gY29uZmlnLmtleTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gICAgICBmdW5jdGlvbiB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkoKSB7XG4gICAgICAgIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duIHx8XG4gICAgICAgICAgKChzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biA9ICEwKSxcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlczogYGtleWAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCBpbiBgdW5kZWZpbmVkYCBiZWluZyByZXR1cm5lZC4gSWYgeW91IG5lZWQgdG8gYWNjZXNzIHRoZSBzYW1lIHZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgcHJvcC4gKGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvc3BlY2lhbC1wcm9wcylcIixcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lXG4gICAgICAgICAgKSk7XG4gICAgICB9XG4gICAgICB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkuaXNSZWFjdFdhcm5pbmcgPSAhMDtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgXCJrZXlcIiwge1xuICAgICAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ0tleSxcbiAgICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVsZW1lbnRSZWZHZXR0ZXJXaXRoRGVwcmVjYXRpb25XYXJuaW5nKCkge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodGhpcy50eXBlKTtcbiAgICAgIGRpZFdhcm5BYm91dEVsZW1lbnRSZWZbY29tcG9uZW50TmFtZV0gfHxcbiAgICAgICAgKChkaWRXYXJuQWJvdXRFbGVtZW50UmVmW2NvbXBvbmVudE5hbWVdID0gITApLFxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiQWNjZXNzaW5nIGVsZW1lbnQucmVmIHdhcyByZW1vdmVkIGluIFJlYWN0IDE5LiByZWYgaXMgbm93IGEgcmVndWxhciBwcm9wLiBJdCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgSlNYIEVsZW1lbnQgdHlwZSBpbiBhIGZ1dHVyZSByZWxlYXNlLlwiXG4gICAgICAgICkpO1xuICAgICAgY29tcG9uZW50TmFtZSA9IHRoaXMucHJvcHMucmVmO1xuICAgICAgcmV0dXJuIHZvaWQgMCAhPT0gY29tcG9uZW50TmFtZSA/IGNvbXBvbmVudE5hbWUgOiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBSZWFjdEVsZW1lbnQoXG4gICAgICB0eXBlLFxuICAgICAga2V5LFxuICAgICAgc2VsZixcbiAgICAgIHNvdXJjZSxcbiAgICAgIG93bmVyLFxuICAgICAgcHJvcHMsXG4gICAgICBkZWJ1Z1N0YWNrLFxuICAgICAgZGVidWdUYXNrXG4gICAgKSB7XG4gICAgICBzZWxmID0gcHJvcHMucmVmO1xuICAgICAgdHlwZSA9IHtcbiAgICAgICAgJCR0eXBlb2Y6IFJFQUNUX0VMRU1FTlRfVFlQRSxcbiAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIHByb3BzOiBwcm9wcyxcbiAgICAgICAgX293bmVyOiBvd25lclxuICAgICAgfTtcbiAgICAgIG51bGwgIT09ICh2b2lkIDAgIT09IHNlbGYgPyBzZWxmIDogbnVsbClcbiAgICAgICAgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkodHlwZSwgXCJyZWZcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgICAgICBnZXQ6IGVsZW1lbnRSZWZHZXR0ZXJXaXRoRGVwcmVjYXRpb25XYXJuaW5nXG4gICAgICAgICAgfSlcbiAgICAgICAgOiBPYmplY3QuZGVmaW5lUHJvcGVydHkodHlwZSwgXCJyZWZcIiwgeyBlbnVtZXJhYmxlOiAhMSwgdmFsdWU6IG51bGwgfSk7XG4gICAgICB0eXBlLl9zdG9yZSA9IHt9O1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHR5cGUuX3N0b3JlLCBcInZhbGlkYXRlZFwiLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogITEsXG4gICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICB3cml0YWJsZTogITAsXG4gICAgICAgIHZhbHVlOiAwXG4gICAgICB9KTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0eXBlLCBcIl9kZWJ1Z0luZm9cIiwge1xuICAgICAgICBjb25maWd1cmFibGU6ICExLFxuICAgICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgICAgd3JpdGFibGU6ICEwLFxuICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgfSk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodHlwZSwgXCJfZGVidWdTdGFja1wiLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogITEsXG4gICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICB3cml0YWJsZTogITAsXG4gICAgICAgIHZhbHVlOiBkZWJ1Z1N0YWNrXG4gICAgICB9KTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0eXBlLCBcIl9kZWJ1Z1Rhc2tcIiwge1xuICAgICAgICBjb25maWd1cmFibGU6ICExLFxuICAgICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgICAgd3JpdGFibGU6ICEwLFxuICAgICAgICB2YWx1ZTogZGVidWdUYXNrXG4gICAgICB9KTtcbiAgICAgIE9iamVjdC5mcmVlemUgJiYgKE9iamVjdC5mcmVlemUodHlwZS5wcm9wcyksIE9iamVjdC5mcmVlemUodHlwZSkpO1xuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNsb25lQW5kUmVwbGFjZUtleShvbGRFbGVtZW50LCBuZXdLZXkpIHtcbiAgICAgIG5ld0tleSA9IFJlYWN0RWxlbWVudChcbiAgICAgICAgb2xkRWxlbWVudC50eXBlLFxuICAgICAgICBuZXdLZXksXG4gICAgICAgIHZvaWQgMCxcbiAgICAgICAgdm9pZCAwLFxuICAgICAgICBvbGRFbGVtZW50Ll9vd25lcixcbiAgICAgICAgb2xkRWxlbWVudC5wcm9wcyxcbiAgICAgICAgb2xkRWxlbWVudC5fZGVidWdTdGFjayxcbiAgICAgICAgb2xkRWxlbWVudC5fZGVidWdUYXNrXG4gICAgICApO1xuICAgICAgb2xkRWxlbWVudC5fc3RvcmUgJiZcbiAgICAgICAgKG5ld0tleS5fc3RvcmUudmFsaWRhdGVkID0gb2xkRWxlbWVudC5fc3RvcmUudmFsaWRhdGVkKTtcbiAgICAgIHJldHVybiBuZXdLZXk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50KG9iamVjdCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIG9iamVjdCAmJlxuICAgICAgICBudWxsICE9PSBvYmplY3QgJiZcbiAgICAgICAgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEVcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVzY2FwZShrZXkpIHtcbiAgICAgIHZhciBlc2NhcGVyTG9va3VwID0geyBcIj1cIjogXCI9MFwiLCBcIjpcIjogXCI9MlwiIH07XG4gICAgICByZXR1cm4gKFxuICAgICAgICBcIiRcIiArXG4gICAgICAgIGtleS5yZXBsYWNlKC9bPTpdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgIHJldHVybiBlc2NhcGVyTG9va3VwW21hdGNoXTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEVsZW1lbnRLZXkoZWxlbWVudCwgaW5kZXgpIHtcbiAgICAgIHJldHVybiBcIm9iamVjdFwiID09PSB0eXBlb2YgZWxlbWVudCAmJlxuICAgICAgICBudWxsICE9PSBlbGVtZW50ICYmXG4gICAgICAgIG51bGwgIT0gZWxlbWVudC5rZXlcbiAgICAgICAgPyAoY2hlY2tLZXlTdHJpbmdDb2VyY2lvbihlbGVtZW50LmtleSksIGVzY2FwZShcIlwiICsgZWxlbWVudC5rZXkpKVxuICAgICAgICA6IGluZGV4LnRvU3RyaW5nKDM2KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZVRoZW5hYmxlKHRoZW5hYmxlKSB7XG4gICAgICBzd2l0Y2ggKHRoZW5hYmxlLnN0YXR1cykge1xuICAgICAgICBjYXNlIFwiZnVsZmlsbGVkXCI6XG4gICAgICAgICAgcmV0dXJuIHRoZW5hYmxlLnZhbHVlO1xuICAgICAgICBjYXNlIFwicmVqZWN0ZWRcIjpcbiAgICAgICAgICB0aHJvdyB0aGVuYWJsZS5yZWFzb247XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgc3dpdGNoIChcbiAgICAgICAgICAgIChcInN0cmluZ1wiID09PSB0eXBlb2YgdGhlbmFibGUuc3RhdHVzXG4gICAgICAgICAgICAgID8gdGhlbmFibGUudGhlbihub29wLCBub29wKVxuICAgICAgICAgICAgICA6ICgodGhlbmFibGUuc3RhdHVzID0gXCJwZW5kaW5nXCIpLFxuICAgICAgICAgICAgICAgIHRoZW5hYmxlLnRoZW4oXG4gICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoZnVsZmlsbGVkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgXCJwZW5kaW5nXCIgPT09IHRoZW5hYmxlLnN0YXR1cyAmJlxuICAgICAgICAgICAgICAgICAgICAgICgodGhlbmFibGUuc3RhdHVzID0gXCJmdWxmaWxsZWRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgKHRoZW5hYmxlLnZhbHVlID0gZnVsZmlsbGVkVmFsdWUpKTtcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgXCJwZW5kaW5nXCIgPT09IHRoZW5hYmxlLnN0YXR1cyAmJlxuICAgICAgICAgICAgICAgICAgICAgICgodGhlbmFibGUuc3RhdHVzID0gXCJyZWplY3RlZFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAodGhlbmFibGUucmVhc29uID0gZXJyb3IpKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgIHRoZW5hYmxlLnN0YXR1cylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNhc2UgXCJmdWxmaWxsZWRcIjpcbiAgICAgICAgICAgICAgcmV0dXJuIHRoZW5hYmxlLnZhbHVlO1xuICAgICAgICAgICAgY2FzZSBcInJlamVjdGVkXCI6XG4gICAgICAgICAgICAgIHRocm93IHRoZW5hYmxlLnJlYXNvbjtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyB0aGVuYWJsZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFwSW50b0FycmF5KGNoaWxkcmVuLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgbmFtZVNvRmFyLCBjYWxsYmFjaykge1xuICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgY2hpbGRyZW47XG4gICAgICBpZiAoXCJ1bmRlZmluZWRcIiA9PT0gdHlwZSB8fCBcImJvb2xlYW5cIiA9PT0gdHlwZSkgY2hpbGRyZW4gPSBudWxsO1xuICAgICAgdmFyIGludm9rZUNhbGxiYWNrID0gITE7XG4gICAgICBpZiAobnVsbCA9PT0gY2hpbGRyZW4pIGludm9rZUNhbGxiYWNrID0gITA7XG4gICAgICBlbHNlXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgXCJiaWdpbnRcIjpcbiAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgaW52b2tlQ2FsbGJhY2sgPSAhMDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICAgIHN3aXRjaCAoY2hpbGRyZW4uJCR0eXBlb2YpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgICAgICAgaW52b2tlQ2FsbGJhY2sgPSAhMDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIChpbnZva2VDYWxsYmFjayA9IGNoaWxkcmVuLl9pbml0KSxcbiAgICAgICAgICAgICAgICAgIG1hcEludG9BcnJheShcbiAgICAgICAgICAgICAgICAgICAgaW52b2tlQ2FsbGJhY2soY2hpbGRyZW4uX3BheWxvYWQpLFxuICAgICAgICAgICAgICAgICAgICBhcnJheSxcbiAgICAgICAgICAgICAgICAgICAgZXNjYXBlZFByZWZpeCxcbiAgICAgICAgICAgICAgICAgICAgbmFtZVNvRmFyLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGlmIChpbnZva2VDYWxsYmFjaykge1xuICAgICAgICBpbnZva2VDYWxsYmFjayA9IGNoaWxkcmVuO1xuICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrKGludm9rZUNhbGxiYWNrKTtcbiAgICAgICAgdmFyIGNoaWxkS2V5ID1cbiAgICAgICAgICBcIlwiID09PSBuYW1lU29GYXIgPyBcIi5cIiArIGdldEVsZW1lbnRLZXkoaW52b2tlQ2FsbGJhY2ssIDApIDogbmFtZVNvRmFyO1xuICAgICAgICBpc0FycmF5SW1wbChjYWxsYmFjaylcbiAgICAgICAgICA/ICgoZXNjYXBlZFByZWZpeCA9IFwiXCIpLFxuICAgICAgICAgICAgbnVsbCAhPSBjaGlsZEtleSAmJlxuICAgICAgICAgICAgICAoZXNjYXBlZFByZWZpeCA9XG4gICAgICAgICAgICAgICAgY2hpbGRLZXkucmVwbGFjZSh1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCwgXCIkJi9cIikgKyBcIi9cIiksXG4gICAgICAgICAgICBtYXBJbnRvQXJyYXkoY2FsbGJhY2ssIGFycmF5LCBlc2NhcGVkUHJlZml4LCBcIlwiLCBmdW5jdGlvbiAoYykge1xuICAgICAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIDogbnVsbCAhPSBjYWxsYmFjayAmJlxuICAgICAgICAgICAgKGlzVmFsaWRFbGVtZW50KGNhbGxiYWNrKSAmJlxuICAgICAgICAgICAgICAobnVsbCAhPSBjYWxsYmFjay5rZXkgJiZcbiAgICAgICAgICAgICAgICAoKGludm9rZUNhbGxiYWNrICYmIGludm9rZUNhbGxiYWNrLmtleSA9PT0gY2FsbGJhY2sua2V5KSB8fFxuICAgICAgICAgICAgICAgICAgY2hlY2tLZXlTdHJpbmdDb2VyY2lvbihjYWxsYmFjay5rZXkpKSxcbiAgICAgICAgICAgICAgKGVzY2FwZWRQcmVmaXggPSBjbG9uZUFuZFJlcGxhY2VLZXkoXG4gICAgICAgICAgICAgICAgY2FsbGJhY2ssXG4gICAgICAgICAgICAgICAgZXNjYXBlZFByZWZpeCArXG4gICAgICAgICAgICAgICAgICAobnVsbCA9PSBjYWxsYmFjay5rZXkgfHxcbiAgICAgICAgICAgICAgICAgIChpbnZva2VDYWxsYmFjayAmJiBpbnZva2VDYWxsYmFjay5rZXkgPT09IGNhbGxiYWNrLmtleSlcbiAgICAgICAgICAgICAgICAgICAgPyBcIlwiXG4gICAgICAgICAgICAgICAgICAgIDogKFwiXCIgKyBjYWxsYmFjay5rZXkpLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiJCYvXCJcbiAgICAgICAgICAgICAgICAgICAgICApICsgXCIvXCIpICtcbiAgICAgICAgICAgICAgICAgIGNoaWxkS2V5XG4gICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICBcIlwiICE9PSBuYW1lU29GYXIgJiZcbiAgICAgICAgICAgICAgICBudWxsICE9IGludm9rZUNhbGxiYWNrICYmXG4gICAgICAgICAgICAgICAgaXNWYWxpZEVsZW1lbnQoaW52b2tlQ2FsbGJhY2spICYmXG4gICAgICAgICAgICAgICAgbnVsbCA9PSBpbnZva2VDYWxsYmFjay5rZXkgJiZcbiAgICAgICAgICAgICAgICBpbnZva2VDYWxsYmFjay5fc3RvcmUgJiZcbiAgICAgICAgICAgICAgICAhaW52b2tlQ2FsbGJhY2suX3N0b3JlLnZhbGlkYXRlZCAmJlxuICAgICAgICAgICAgICAgIChlc2NhcGVkUHJlZml4Ll9zdG9yZS52YWxpZGF0ZWQgPSAyKSxcbiAgICAgICAgICAgICAgKGNhbGxiYWNrID0gZXNjYXBlZFByZWZpeCkpLFxuICAgICAgICAgICAgYXJyYXkucHVzaChjYWxsYmFjaykpO1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cbiAgICAgIGludm9rZUNhbGxiYWNrID0gMDtcbiAgICAgIGNoaWxkS2V5ID0gXCJcIiA9PT0gbmFtZVNvRmFyID8gXCIuXCIgOiBuYW1lU29GYXIgKyBcIjpcIjtcbiAgICAgIGlmIChpc0FycmF5SW1wbChjaGlsZHJlbikpXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspXG4gICAgICAgICAgKG5hbWVTb0ZhciA9IGNoaWxkcmVuW2ldKSxcbiAgICAgICAgICAgICh0eXBlID0gY2hpbGRLZXkgKyBnZXRFbGVtZW50S2V5KG5hbWVTb0ZhciwgaSkpLFxuICAgICAgICAgICAgKGludm9rZUNhbGxiYWNrICs9IG1hcEludG9BcnJheShcbiAgICAgICAgICAgICAgbmFtZVNvRmFyLFxuICAgICAgICAgICAgICBhcnJheSxcbiAgICAgICAgICAgICAgZXNjYXBlZFByZWZpeCxcbiAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgICAgICkpO1xuICAgICAgZWxzZSBpZiAoKChpID0gZ2V0SXRlcmF0b3JGbihjaGlsZHJlbikpLCBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpKSlcbiAgICAgICAgZm9yIChcbiAgICAgICAgICBpID09PSBjaGlsZHJlbi5lbnRyaWVzICYmXG4gICAgICAgICAgICAoZGlkV2FybkFib3V0TWFwcyB8fFxuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgXCJVc2luZyBNYXBzIGFzIGNoaWxkcmVuIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhbiBhcnJheSBvZiBrZXllZCBSZWFjdEVsZW1lbnRzIGluc3RlYWQuXCJcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIChkaWRXYXJuQWJvdXRNYXBzID0gITApKSxcbiAgICAgICAgICAgIGNoaWxkcmVuID0gaS5jYWxsKGNoaWxkcmVuKSxcbiAgICAgICAgICAgIGkgPSAwO1xuICAgICAgICAgICEobmFtZVNvRmFyID0gY2hpbGRyZW4ubmV4dCgpKS5kb25lO1xuXG4gICAgICAgIClcbiAgICAgICAgICAobmFtZVNvRmFyID0gbmFtZVNvRmFyLnZhbHVlKSxcbiAgICAgICAgICAgICh0eXBlID0gY2hpbGRLZXkgKyBnZXRFbGVtZW50S2V5KG5hbWVTb0ZhciwgaSsrKSksXG4gICAgICAgICAgICAoaW52b2tlQ2FsbGJhY2sgKz0gbWFwSW50b0FycmF5KFxuICAgICAgICAgICAgICBuYW1lU29GYXIsXG4gICAgICAgICAgICAgIGFycmF5LFxuICAgICAgICAgICAgICBlc2NhcGVkUHJlZml4LFxuICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICAgKSk7XG4gICAgICBlbHNlIGlmIChcIm9iamVjdFwiID09PSB0eXBlKSB7XG4gICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjaGlsZHJlbi50aGVuKVxuICAgICAgICAgIHJldHVybiBtYXBJbnRvQXJyYXkoXG4gICAgICAgICAgICByZXNvbHZlVGhlbmFibGUoY2hpbGRyZW4pLFxuICAgICAgICAgICAgYXJyYXksXG4gICAgICAgICAgICBlc2NhcGVkUHJlZml4LFxuICAgICAgICAgICAgbmFtZVNvRmFyLFxuICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgICApO1xuICAgICAgICBhcnJheSA9IFN0cmluZyhjaGlsZHJlbik7XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiT2JqZWN0cyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQgKGZvdW5kOiBcIiArXG4gICAgICAgICAgICAoXCJbb2JqZWN0IE9iamVjdF1cIiA9PT0gYXJyYXlcbiAgICAgICAgICAgICAgPyBcIm9iamVjdCB3aXRoIGtleXMge1wiICsgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmpvaW4oXCIsIFwiKSArIFwifVwiXG4gICAgICAgICAgICAgIDogYXJyYXkpICtcbiAgICAgICAgICAgIFwiKS4gSWYgeW91IG1lYW50IHRvIHJlbmRlciBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4sIHVzZSBhbiBhcnJheSBpbnN0ZWFkLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaW52b2tlQ2FsbGJhY2s7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jLCBjb250ZXh0KSB7XG4gICAgICBpZiAobnVsbCA9PSBjaGlsZHJlbikgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgdmFyIHJlc3VsdCA9IFtdLFxuICAgICAgICBjb3VudCA9IDA7XG4gICAgICBtYXBJbnRvQXJyYXkoY2hpbGRyZW4sIHJlc3VsdCwgXCJcIiwgXCJcIiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgY2hpbGQsIGNvdW50KyspO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBsYXp5SW5pdGlhbGl6ZXIocGF5bG9hZCkge1xuICAgICAgaWYgKC0xID09PSBwYXlsb2FkLl9zdGF0dXMpIHtcbiAgICAgICAgdmFyIGN0b3IgPSBwYXlsb2FkLl9yZXN1bHQ7XG4gICAgICAgIGN0b3IgPSBjdG9yKCk7XG4gICAgICAgIGN0b3IudGhlbihcbiAgICAgICAgICBmdW5jdGlvbiAobW9kdWxlT2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoMCA9PT0gcGF5bG9hZC5fc3RhdHVzIHx8IC0xID09PSBwYXlsb2FkLl9zdGF0dXMpXG4gICAgICAgICAgICAgIChwYXlsb2FkLl9zdGF0dXMgPSAxKSwgKHBheWxvYWQuX3Jlc3VsdCA9IG1vZHVsZU9iamVjdCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICgwID09PSBwYXlsb2FkLl9zdGF0dXMgfHwgLTEgPT09IHBheWxvYWQuX3N0YXR1cylcbiAgICAgICAgICAgICAgKHBheWxvYWQuX3N0YXR1cyA9IDIpLCAocGF5bG9hZC5fcmVzdWx0ID0gZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgLTEgPT09IHBheWxvYWQuX3N0YXR1cyAmJlxuICAgICAgICAgICgocGF5bG9hZC5fc3RhdHVzID0gMCksIChwYXlsb2FkLl9yZXN1bHQgPSBjdG9yKSk7XG4gICAgICB9XG4gICAgICBpZiAoMSA9PT0gcGF5bG9hZC5fc3RhdHVzKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIChjdG9yID0gcGF5bG9hZC5fcmVzdWx0KSxcbiAgICAgICAgICB2b2lkIDAgPT09IGN0b3IgJiZcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwibGF6eTogRXhwZWN0ZWQgdGhlIHJlc3VsdCBvZiBhIGR5bmFtaWMgaW1wb3J0KCkgY2FsbC4gSW5zdGVhZCByZWNlaXZlZDogJXNcXG5cXG5Zb3VyIGNvZGUgc2hvdWxkIGxvb2sgbGlrZTogXFxuICBjb25zdCBNeUNvbXBvbmVudCA9IGxhenkoKCkgPT4gaW1wb3J0KCcuL015Q29tcG9uZW50JykpXFxuXFxuRGlkIHlvdSBhY2NpZGVudGFsbHkgcHV0IGN1cmx5IGJyYWNlcyBhcm91bmQgdGhlIGltcG9ydD9cIixcbiAgICAgICAgICAgICAgY3RvclxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBcImRlZmF1bHRcIiBpbiBjdG9yIHx8XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcImxhenk6IEV4cGVjdGVkIHRoZSByZXN1bHQgb2YgYSBkeW5hbWljIGltcG9ydCgpIGNhbGwuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzXFxuXFxuWW91ciBjb2RlIHNob3VsZCBsb29rIGxpa2U6IFxcbiAgY29uc3QgTXlDb21wb25lbnQgPSBsYXp5KCgpID0+IGltcG9ydCgnLi9NeUNvbXBvbmVudCcpKVwiLFxuICAgICAgICAgICAgICBjdG9yXG4gICAgICAgICAgICApLFxuICAgICAgICAgIGN0b3IuZGVmYXVsdFxuICAgICAgICApO1xuICAgICAgdGhyb3cgcGF5bG9hZC5fcmVzdWx0O1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlRGlzcGF0Y2hlcigpIHtcbiAgICAgIHZhciBkaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgIG51bGwgPT09IGRpc3BhdGNoZXIgJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkludmFsaWQgaG9vayBjYWxsLiBIb29rcyBjYW4gb25seSBiZSBjYWxsZWQgaW5zaWRlIG9mIHRoZSBib2R5IG9mIGEgZnVuY3Rpb24gY29tcG9uZW50LiBUaGlzIGNvdWxkIGhhcHBlbiBmb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcXG4xLiBZb3UgbWlnaHQgaGF2ZSBtaXNtYXRjaGluZyB2ZXJzaW9ucyBvZiBSZWFjdCBhbmQgdGhlIHJlbmRlcmVyIChzdWNoIGFzIFJlYWN0IERPTSlcXG4yLiBZb3UgbWlnaHQgYmUgYnJlYWtpbmcgdGhlIFJ1bGVzIG9mIEhvb2tzXFxuMy4gWW91IG1pZ2h0IGhhdmUgbW9yZSB0aGFuIG9uZSBjb3B5IG9mIFJlYWN0IGluIHRoZSBzYW1lIGFwcFxcblNlZSBodHRwczovL3JlYWN0LmRldi9saW5rL2ludmFsaWQtaG9vay1jYWxsIGZvciB0aXBzIGFib3V0IGhvdyB0byBkZWJ1ZyBhbmQgZml4IHRoaXMgcHJvYmxlbS5cIlxuICAgICAgICApO1xuICAgICAgcmV0dXJuIGRpc3BhdGNoZXI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbGVhc2VBc3luY1RyYW5zaXRpb24oKSB7XG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscy5hc3luY1RyYW5zaXRpb25zLS07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVucXVldWVUYXNrKHRhc2spIHtcbiAgICAgIGlmIChudWxsID09PSBlbnF1ZXVlVGFza0ltcGwpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFyIHJlcXVpcmVTdHJpbmcgPSAoXCJyZXF1aXJlXCIgKyBNYXRoLnJhbmRvbSgpKS5zbGljZSgwLCA3KTtcbiAgICAgICAgICBlbnF1ZXVlVGFza0ltcGwgPSAobW9kdWxlICYmIG1vZHVsZVtyZXF1aXJlU3RyaW5nXSkuY2FsbChcbiAgICAgICAgICAgIG1vZHVsZSxcbiAgICAgICAgICAgIFwidGltZXJzXCJcbiAgICAgICAgICApLnNldEltbWVkaWF0ZTtcbiAgICAgICAgfSBjYXRjaCAoX2Vycikge1xuICAgICAgICAgIGVucXVldWVUYXNrSW1wbCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgITEgPT09IGRpZFdhcm5BYm91dE1lc3NhZ2VDaGFubmVsICYmXG4gICAgICAgICAgICAgICgoZGlkV2FybkFib3V0TWVzc2FnZUNoYW5uZWwgPSAhMCksXG4gICAgICAgICAgICAgIFwidW5kZWZpbmVkXCIgPT09IHR5cGVvZiBNZXNzYWdlQ2hhbm5lbCAmJlxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICBcIlRoaXMgYnJvd3NlciBkb2VzIG5vdCBoYXZlIGEgTWVzc2FnZUNoYW5uZWwgaW1wbGVtZW50YXRpb24sIHNvIGVucXVldWluZyB0YXNrcyB2aWEgYXdhaXQgYWN0KGFzeW5jICgpID0+IC4uLikgd2lsbCBmYWlsLiBQbGVhc2UgZmlsZSBhbiBpc3N1ZSBhdCBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzIGlmIHlvdSBlbmNvdW50ZXIgdGhpcyB3YXJuaW5nLlwiXG4gICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgICAgICAgICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBjYWxsYmFjaztcbiAgICAgICAgICAgIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2Uodm9pZCAwKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICByZXR1cm4gZW5xdWV1ZVRhc2tJbXBsKHRhc2spO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhZ2dyZWdhdGVFcnJvcnMoZXJyb3JzKSB7XG4gICAgICByZXR1cm4gMSA8IGVycm9ycy5sZW5ndGggJiYgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgQWdncmVnYXRlRXJyb3JcbiAgICAgICAgPyBuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzKVxuICAgICAgICA6IGVycm9yc1swXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcG9wQWN0U2NvcGUocHJldkFjdFF1ZXVlLCBwcmV2QWN0U2NvcGVEZXB0aCkge1xuICAgICAgcHJldkFjdFNjb3BlRGVwdGggIT09IGFjdFNjb3BlRGVwdGggLSAxICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJZb3Ugc2VlbSB0byBoYXZlIG92ZXJsYXBwaW5nIGFjdCgpIGNhbGxzLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQuIEJlIHN1cmUgdG8gYXdhaXQgcHJldmlvdXMgYWN0KCkgY2FsbHMgYmVmb3JlIG1ha2luZyBhIG5ldyBvbmUuIFwiXG4gICAgICAgICk7XG4gICAgICBhY3RTY29wZURlcHRoID0gcHJldkFjdFNjb3BlRGVwdGg7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5Rmx1c2hBc3luY0FjdFdvcmsocmV0dXJuVmFsdWUsIHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHF1ZXVlID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWU7XG4gICAgICBpZiAobnVsbCAhPT0gcXVldWUpXG4gICAgICAgIGlmICgwICE9PSBxdWV1ZS5sZW5ndGgpXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZsdXNoQWN0UXVldWUocXVldWUpO1xuICAgICAgICAgICAgZW5xdWV1ZVRhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICByZXR1cm4gcmVjdXJzaXZlbHlGbHVzaEFzeW5jQWN0V29yayhyZXR1cm5WYWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMucHVzaChlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICBlbHNlIFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFjdFF1ZXVlID0gbnVsbDtcbiAgICAgIDAgPCBSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMubGVuZ3RoXG4gICAgICAgID8gKChxdWV1ZSA9IGFnZ3JlZ2F0ZUVycm9ycyhSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMpKSxcbiAgICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLmxlbmd0aCA9IDApLFxuICAgICAgICAgIHJlamVjdChxdWV1ZSkpXG4gICAgICAgIDogcmVzb2x2ZShyZXR1cm5WYWx1ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZsdXNoQWN0UXVldWUocXVldWUpIHtcbiAgICAgIGlmICghaXNGbHVzaGluZykge1xuICAgICAgICBpc0ZsdXNoaW5nID0gITA7XG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBxdWV1ZVtpXTtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuZGlkVXNlUHJvbWlzZSA9ICExO1xuICAgICAgICAgICAgICB2YXIgY29udGludWF0aW9uID0gY2FsbGJhY2soITEpO1xuICAgICAgICAgICAgICBpZiAobnVsbCAhPT0gY29udGludWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLmRpZFVzZVByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgIHF1ZXVlW2ldID0gY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgICBxdWV1ZS5zcGxpY2UoMCwgaSk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gY29udGludWF0aW9uO1xuICAgICAgICAgICAgICB9IGVsc2UgYnJlYWs7XG4gICAgICAgICAgICB9IHdoaWxlICgxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcXVldWUubGVuZ3RoID0gMDtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBxdWV1ZS5zcGxpY2UoMCwgaSArIDEpLCBSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMucHVzaChlcnJvcik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaXNGbHVzaGluZyA9ICExO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gJiZcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT1cbiAgICAgICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RhcnQgJiZcbiAgICAgIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RhcnQoRXJyb3IoKSk7XG4gICAgdmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC50cmFuc2l0aW9uYWwuZWxlbWVudFwiKSxcbiAgICAgIFJFQUNUX1BPUlRBTF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKSxcbiAgICAgIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIiksXG4gICAgICBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpLFxuICAgICAgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKSxcbiAgICAgIFJFQUNUX0NPTlNVTUVSX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuY29uc3VtZXJcIiksXG4gICAgICBSRUFDVF9DT05URVhUX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKSxcbiAgICAgIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIiksXG4gICAgICBSRUFDVF9TVVNQRU5TRV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpLFxuICAgICAgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlX2xpc3RcIiksXG4gICAgICBSRUFDVF9NRU1PX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKSxcbiAgICAgIFJFQUNUX0xBWllfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpLFxuICAgICAgUkVBQ1RfQUNUSVZJVFlfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5hY3Rpdml0eVwiKSxcbiAgICAgIE1BWUJFX0lURVJBVE9SX1NZTUJPTCA9IFN5bWJvbC5pdGVyYXRvcixcbiAgICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudCA9IHt9LFxuICAgICAgUmVhY3ROb29wVXBkYXRlUXVldWUgPSB7XG4gICAgICAgIGlzTW91bnRlZDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgfSxcbiAgICAgICAgZW5xdWV1ZUZvcmNlVXBkYXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UpIHtcbiAgICAgICAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgXCJmb3JjZVVwZGF0ZVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW5xdWV1ZVJlcGxhY2VTdGF0ZTogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlKSB7XG4gICAgICAgICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsIFwicmVwbGFjZVN0YXRlXCIpO1xuICAgICAgICB9LFxuICAgICAgICBlbnF1ZXVlU2V0U3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSkge1xuICAgICAgICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCBcInNldFN0YXRlXCIpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgYXNzaWduID0gT2JqZWN0LmFzc2lnbixcbiAgICAgIGVtcHR5T2JqZWN0ID0ge307XG4gICAgT2JqZWN0LmZyZWV6ZShlbXB0eU9iamVjdCk7XG4gICAgQ29tcG9uZW50LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50ID0ge307XG4gICAgQ29tcG9uZW50LnByb3RvdHlwZS5zZXRTdGF0ZSA9IGZ1bmN0aW9uIChwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIFwib2JqZWN0XCIgIT09IHR5cGVvZiBwYXJ0aWFsU3RhdGUgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgcGFydGlhbFN0YXRlICYmXG4gICAgICAgIG51bGwgIT0gcGFydGlhbFN0YXRlXG4gICAgICApXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwidGFrZXMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcyB0byB1cGRhdGUgb3IgYSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMuXCJcbiAgICAgICAgKTtcbiAgICAgIHRoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUodGhpcywgcGFydGlhbFN0YXRlLCBjYWxsYmFjaywgXCJzZXRTdGF0ZVwiKTtcbiAgICB9O1xuICAgIENvbXBvbmVudC5wcm90b3R5cGUuZm9yY2VVcGRhdGUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgIHRoaXMudXBkYXRlci5lbnF1ZXVlRm9yY2VVcGRhdGUodGhpcywgY2FsbGJhY2ssIFwiZm9yY2VVcGRhdGVcIik7XG4gICAgfTtcbiAgICB2YXIgZGVwcmVjYXRlZEFQSXMgPSB7XG4gICAgICAgIGlzTW91bnRlZDogW1xuICAgICAgICAgIFwiaXNNb3VudGVkXCIsXG4gICAgICAgICAgXCJJbnN0ZWFkLCBtYWtlIHN1cmUgdG8gY2xlYW4gdXAgc3Vic2NyaXB0aW9ucyBhbmQgcGVuZGluZyByZXF1ZXN0cyBpbiBjb21wb25lbnRXaWxsVW5tb3VudCB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcy5cIlxuICAgICAgICBdLFxuICAgICAgICByZXBsYWNlU3RhdGU6IFtcbiAgICAgICAgICBcInJlcGxhY2VTdGF0ZVwiLFxuICAgICAgICAgIFwiUmVmYWN0b3IgeW91ciBjb2RlIHRvIHVzZSBzZXRTdGF0ZSBpbnN0ZWFkIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zMjM2KS5cIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgZm5OYW1lO1xuICAgIGZvciAoZm5OYW1lIGluIGRlcHJlY2F0ZWRBUElzKVxuICAgICAgZGVwcmVjYXRlZEFQSXMuaGFzT3duUHJvcGVydHkoZm5OYW1lKSAmJlxuICAgICAgICBkZWZpbmVEZXByZWNhdGlvbldhcm5pbmcoZm5OYW1lLCBkZXByZWNhdGVkQVBJc1tmbk5hbWVdKTtcbiAgICBDb21wb25lbnREdW1teS5wcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuICAgIGRlcHJlY2F0ZWRBUElzID0gUHVyZUNvbXBvbmVudC5wcm90b3R5cGUgPSBuZXcgQ29tcG9uZW50RHVtbXkoKTtcbiAgICBkZXByZWNhdGVkQVBJcy5jb25zdHJ1Y3RvciA9IFB1cmVDb21wb25lbnQ7XG4gICAgYXNzaWduKGRlcHJlY2F0ZWRBUElzLCBDb21wb25lbnQucHJvdG90eXBlKTtcbiAgICBkZXByZWNhdGVkQVBJcy5pc1B1cmVSZWFjdENvbXBvbmVudCA9ICEwO1xuICAgIHZhciBpc0FycmF5SW1wbCA9IEFycmF5LmlzQXJyYXksXG4gICAgICBSRUFDVF9DTElFTlRfUkVGRVJFTkNFID0gU3ltYm9sLmZvcihcInJlYWN0LmNsaWVudC5yZWZlcmVuY2VcIiksXG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscyA9IHtcbiAgICAgICAgSDogbnVsbCxcbiAgICAgICAgQTogbnVsbCxcbiAgICAgICAgVDogbnVsbCxcbiAgICAgICAgUzogbnVsbCxcbiAgICAgICAgYWN0UXVldWU6IG51bGwsXG4gICAgICAgIGFzeW5jVHJhbnNpdGlvbnM6IDAsXG4gICAgICAgIGlzQmF0Y2hpbmdMZWdhY3k6ICExLFxuICAgICAgICBkaWRTY2hlZHVsZUxlZ2FjeVVwZGF0ZTogITEsXG4gICAgICAgIGRpZFVzZVByb21pc2U6ICExLFxuICAgICAgICB0aHJvd25FcnJvcnM6IFtdLFxuICAgICAgICBnZXRDdXJyZW50U3RhY2s6IG51bGwsXG4gICAgICAgIHJlY2VudGx5Q3JlYXRlZE93bmVyU3RhY2tzOiAwXG4gICAgICB9LFxuICAgICAgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LFxuICAgICAgY3JlYXRlVGFzayA9IGNvbnNvbGUuY3JlYXRlVGFza1xuICAgICAgICA/IGNvbnNvbGUuY3JlYXRlVGFza1xuICAgICAgICA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH07XG4gICAgZGVwcmVjYXRlZEFQSXMgPSB7XG4gICAgICByZWFjdF9zdGFja19ib3R0b21fZnJhbWU6IGZ1bmN0aW9uIChjYWxsU3RhY2tGb3JFcnJvcikge1xuICAgICAgICByZXR1cm4gY2FsbFN0YWNrRm9yRXJyb3IoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biwgZGlkV2FybkFib3V0T2xkSlNYUnVudGltZTtcbiAgICB2YXIgZGlkV2FybkFib3V0RWxlbWVudFJlZiA9IHt9O1xuICAgIHZhciB1bmtub3duT3duZXJEZWJ1Z1N0YWNrID0gZGVwcmVjYXRlZEFQSXMucmVhY3Rfc3RhY2tfYm90dG9tX2ZyYW1lLmJpbmQoXG4gICAgICBkZXByZWNhdGVkQVBJcyxcbiAgICAgIFVua25vd25Pd25lclxuICAgICkoKTtcbiAgICB2YXIgdW5rbm93bk93bmVyRGVidWdUYXNrID0gY3JlYXRlVGFzayhnZXRUYXNrTmFtZShVbmtub3duT3duZXIpKTtcbiAgICB2YXIgZGlkV2FybkFib3V0TWFwcyA9ICExLFxuICAgICAgdXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXggPSAvXFwvKy9nLFxuICAgICAgcmVwb3J0R2xvYmFsRXJyb3IgPVxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiByZXBvcnRFcnJvclxuICAgICAgICAgID8gcmVwb3J0RXJyb3JcbiAgICAgICAgICA6IGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHdpbmRvdyAmJlxuICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHdpbmRvdy5FcnJvckV2ZW50XG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhciBldmVudCA9IG5ldyB3aW5kb3cuRXJyb3JFdmVudChcImVycm9yXCIsIHtcbiAgICAgICAgICAgICAgICAgIGJ1YmJsZXM6ICEwLFxuICAgICAgICAgICAgICAgICAgY2FuY2VsYWJsZTogITAsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgZXJyb3IgJiZcbiAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gZXJyb3IgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGVycm9yLm1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICA/IFN0cmluZyhlcnJvci5tZXNzYWdlKVxuICAgICAgICAgICAgICAgICAgICAgIDogU3RyaW5nKGVycm9yKSxcbiAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvclxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICghd2luZG93LmRpc3BhdGNoRXZlbnQoZXZlbnQpKSByZXR1cm47XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHByb2Nlc3MgJiZcbiAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBwcm9jZXNzLmVtaXRcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5lbWl0KFwidW5jYXVnaHRFeGNlcHRpb25cIiwgZXJyb3IpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH0sXG4gICAgICBkaWRXYXJuQWJvdXRNZXNzYWdlQ2hhbm5lbCA9ICExLFxuICAgICAgZW5xdWV1ZVRhc2tJbXBsID0gbnVsbCxcbiAgICAgIGFjdFNjb3BlRGVwdGggPSAwLFxuICAgICAgZGlkV2Fybk5vQXdhaXRBY3QgPSAhMSxcbiAgICAgIGlzRmx1c2hpbmcgPSAhMSxcbiAgICAgIHF1ZXVlU2V2ZXJhbE1pY3JvdGFza3MgPVxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBxdWV1ZU1pY3JvdGFza1xuICAgICAgICAgID8gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIHF1ZXVlTWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcXVldWVNaWNyb3Rhc2soY2FsbGJhY2spO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IGVucXVldWVUYXNrO1xuICAgIGRlcHJlY2F0ZWRBUElzID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgICBfX3Byb3RvX186IG51bGwsXG4gICAgICBjOiBmdW5jdGlvbiAoc2l6ZSkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2VNZW1vQ2FjaGUoc2l6ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZXhwb3J0cy5DaGlsZHJlbiA9IHtcbiAgICAgIG1hcDogbWFwQ2hpbGRyZW4sXG4gICAgICBmb3JFYWNoOiBmdW5jdGlvbiAoY2hpbGRyZW4sIGZvckVhY2hGdW5jLCBmb3JFYWNoQ29udGV4dCkge1xuICAgICAgICBtYXBDaGlsZHJlbihcbiAgICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBmb3JFYWNoRnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZm9yRWFjaENvbnRleHRcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBjb3VudDogZnVuY3Rpb24gKGNoaWxkcmVuKSB7XG4gICAgICAgIHZhciBuID0gMDtcbiAgICAgICAgbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBuKys7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbjtcbiAgICAgIH0sXG4gICAgICB0b0FycmF5OiBmdW5jdGlvbiAoY2hpbGRyZW4pIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBtYXBDaGlsZHJlbihjaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgICAgfSkgfHwgW11cbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBvbmx5OiBmdW5jdGlvbiAoY2hpbGRyZW4pIHtcbiAgICAgICAgaWYgKCFpc1ZhbGlkRWxlbWVudChjaGlsZHJlbikpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcIlJlYWN0LkNoaWxkcmVuLm9ubHkgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIHNpbmdsZSBSZWFjdCBlbGVtZW50IGNoaWxkLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgfVxuICAgIH07XG4gICAgZXhwb3J0cy5Db21wb25lbnQgPSBDb21wb25lbnQ7XG4gICAgZXhwb3J0cy5GcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG4gICAgZXhwb3J0cy5Qcm9maWxlciA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG4gICAgZXhwb3J0cy5QdXJlQ29tcG9uZW50ID0gUHVyZUNvbXBvbmVudDtcbiAgICBleHBvcnRzLlN0cmljdE1vZGUgPSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xuICAgIGV4cG9ydHMuU3VzcGVuc2UgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xuICAgIGV4cG9ydHMuX19DTElFTlRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFID1cbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzO1xuICAgIGV4cG9ydHMuX19DT01QSUxFUl9SVU5USU1FID0gZGVwcmVjYXRlZEFQSXM7XG4gICAgZXhwb3J0cy5hY3QgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgIHZhciBwcmV2QWN0UXVldWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZSxcbiAgICAgICAgcHJldkFjdFNjb3BlRGVwdGggPSBhY3RTY29wZURlcHRoO1xuICAgICAgYWN0U2NvcGVEZXB0aCsrO1xuICAgICAgdmFyIHF1ZXVlID0gKFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFjdFF1ZXVlID1cbiAgICAgICAgICBudWxsICE9PSBwcmV2QWN0UXVldWUgPyBwcmV2QWN0UXVldWUgOiBbXSksXG4gICAgICAgIGRpZEF3YWl0QWN0Q2FsbCA9ICExO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGNhbGxiYWNrKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMucHVzaChlcnJvcik7XG4gICAgICB9XG4gICAgICBpZiAoMCA8IFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9ycy5sZW5ndGgpXG4gICAgICAgIHRocm93IChcbiAgICAgICAgICAocG9wQWN0U2NvcGUocHJldkFjdFF1ZXVlLCBwcmV2QWN0U2NvcGVEZXB0aCksXG4gICAgICAgICAgKGNhbGxiYWNrID0gYWdncmVnYXRlRXJyb3JzKFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9ycykpLFxuICAgICAgICAgIChSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMubGVuZ3RoID0gMCksXG4gICAgICAgICAgY2FsbGJhY2spXG4gICAgICAgICk7XG4gICAgICBpZiAoXG4gICAgICAgIG51bGwgIT09IHJlc3VsdCAmJlxuICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgcmVzdWx0ICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHJlc3VsdC50aGVuXG4gICAgICApIHtcbiAgICAgICAgdmFyIHRoZW5hYmxlID0gcmVzdWx0O1xuICAgICAgICBxdWV1ZVNldmVyYWxNaWNyb3Rhc2tzKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBkaWRBd2FpdEFjdENhbGwgfHxcbiAgICAgICAgICAgIGRpZFdhcm5Ob0F3YWl0QWN0IHx8XG4gICAgICAgICAgICAoKGRpZFdhcm5Ob0F3YWl0QWN0ID0gITApLFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJZb3UgY2FsbGVkIGFjdChhc3luYyAoKSA9PiAuLi4pIHdpdGhvdXQgYXdhaXQuIFRoaXMgY291bGQgbGVhZCB0byB1bmV4cGVjdGVkIHRlc3RpbmcgYmVoYXZpb3VyLCBpbnRlcmxlYXZpbmcgbXVsdGlwbGUgYWN0IGNhbGxzIGFuZCBtaXhpbmcgdGhlaXIgc2NvcGVzLiBZb3Ugc2hvdWxkIC0gYXdhaXQgYWN0KGFzeW5jICgpID0+IC4uLik7XCJcbiAgICAgICAgICAgICkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0aGVuOiBmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICBkaWRBd2FpdEFjdENhbGwgPSAhMDtcbiAgICAgICAgICAgIHRoZW5hYmxlLnRoZW4oXG4gICAgICAgICAgICAgIGZ1bmN0aW9uIChyZXR1cm5WYWx1ZSkge1xuICAgICAgICAgICAgICAgIHBvcEFjdFNjb3BlKHByZXZBY3RRdWV1ZSwgcHJldkFjdFNjb3BlRGVwdGgpO1xuICAgICAgICAgICAgICAgIGlmICgwID09PSBwcmV2QWN0U2NvcGVEZXB0aCkge1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZmx1c2hBY3RRdWV1ZShxdWV1ZSksXG4gICAgICAgICAgICAgICAgICAgICAgZW5xdWV1ZVRhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlY3Vyc2l2ZWx5Rmx1c2hBc3luY0FjdFdvcmsoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvciQwKSB7XG4gICAgICAgICAgICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9ycy5wdXNoKGVycm9yJDApO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKDAgPCBSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfdGhyb3duRXJyb3IgPSBhZ2dyZWdhdGVFcnJvcnMoXG4gICAgICAgICAgICAgICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9ycy5sZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoX3Rocm93bkVycm9yKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXR1cm5WYWx1ZSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHBvcEFjdFNjb3BlKHByZXZBY3RRdWV1ZSwgcHJldkFjdFNjb3BlRGVwdGgpO1xuICAgICAgICAgICAgICAgIDAgPCBSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMubGVuZ3RoXG4gICAgICAgICAgICAgICAgICA/ICgoZXJyb3IgPSBhZ2dyZWdhdGVFcnJvcnMoXG4gICAgICAgICAgICAgICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLmxlbmd0aCA9IDApLFxuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpKVxuICAgICAgICAgICAgICAgICAgOiByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHZhciByZXR1cm5WYWx1ZSRqc2NvbXAkMCA9IHJlc3VsdDtcbiAgICAgIHBvcEFjdFNjb3BlKHByZXZBY3RRdWV1ZSwgcHJldkFjdFNjb3BlRGVwdGgpO1xuICAgICAgMCA9PT0gcHJldkFjdFNjb3BlRGVwdGggJiZcbiAgICAgICAgKGZsdXNoQWN0UXVldWUocXVldWUpLFxuICAgICAgICAwICE9PSBxdWV1ZS5sZW5ndGggJiZcbiAgICAgICAgICBxdWV1ZVNldmVyYWxNaWNyb3Rhc2tzKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRpZEF3YWl0QWN0Q2FsbCB8fFxuICAgICAgICAgICAgICBkaWRXYXJuTm9Bd2FpdEFjdCB8fFxuICAgICAgICAgICAgICAoKGRpZFdhcm5Ob0F3YWl0QWN0ID0gITApLFxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiQSBjb21wb25lbnQgc3VzcGVuZGVkIGluc2lkZSBhbiBgYWN0YCBzY29wZSwgYnV0IHRoZSBgYWN0YCBjYWxsIHdhcyBub3QgYXdhaXRlZC4gV2hlbiB0ZXN0aW5nIFJlYWN0IGNvbXBvbmVudHMgdGhhdCBkZXBlbmQgb24gYXN5bmNocm9ub3VzIGRhdGEsIHlvdSBtdXN0IGF3YWl0IHRoZSByZXN1bHQ6XFxuXFxuYXdhaXQgYWN0KCgpID0+IC4uLilcIlxuICAgICAgICAgICAgICApKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFjdFF1ZXVlID0gbnVsbCkpO1xuICAgICAgaWYgKDAgPCBSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMubGVuZ3RoKVxuICAgICAgICB0aHJvdyAoXG4gICAgICAgICAgKChjYWxsYmFjayA9IGFnZ3JlZ2F0ZUVycm9ycyhSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMpKSxcbiAgICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLmxlbmd0aCA9IDApLFxuICAgICAgICAgIGNhbGxiYWNrKVxuICAgICAgICApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGhlbjogZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIGRpZEF3YWl0QWN0Q2FsbCA9ICEwO1xuICAgICAgICAgIDAgPT09IHByZXZBY3RTY29wZURlcHRoXG4gICAgICAgICAgICA/ICgoUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWUgPSBxdWV1ZSksXG4gICAgICAgICAgICAgIGVucXVldWVUYXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVjdXJzaXZlbHlGbHVzaEFzeW5jQWN0V29yayhcbiAgICAgICAgICAgICAgICAgIHJldHVyblZhbHVlJGpzY29tcCQwLFxuICAgICAgICAgICAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgICAgICAgICAgIHJlamVjdFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgOiByZXNvbHZlKHJldHVyblZhbHVlJGpzY29tcCQwKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGV4cG9ydHMuY2FjaGUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICB9O1xuICAgIGV4cG9ydHMuY2FjaGVTaWduYWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIGV4cG9ydHMuY2FwdHVyZU93bmVyU3RhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgZ2V0Q3VycmVudFN0YWNrID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuZ2V0Q3VycmVudFN0YWNrO1xuICAgICAgcmV0dXJuIG51bGwgPT09IGdldEN1cnJlbnRTdGFjayA/IG51bGwgOiBnZXRDdXJyZW50U3RhY2soKTtcbiAgICB9O1xuICAgIGV4cG9ydHMuY2xvbmVFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIGNvbmZpZywgY2hpbGRyZW4pIHtcbiAgICAgIGlmIChudWxsID09PSBlbGVtZW50IHx8IHZvaWQgMCA9PT0gZWxlbWVudClcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJUaGUgYXJndW1lbnQgbXVzdCBiZSBhIFJlYWN0IGVsZW1lbnQsIGJ1dCB5b3UgcGFzc2VkIFwiICtcbiAgICAgICAgICAgIGVsZW1lbnQgK1xuICAgICAgICAgICAgXCIuXCJcbiAgICAgICAgKTtcbiAgICAgIHZhciBwcm9wcyA9IGFzc2lnbih7fSwgZWxlbWVudC5wcm9wcyksXG4gICAgICAgIGtleSA9IGVsZW1lbnQua2V5LFxuICAgICAgICBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgaWYgKG51bGwgIT0gY29uZmlnKSB7XG4gICAgICAgIHZhciBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQ7XG4gICAgICAgIGE6IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgXCJyZWZcIikgJiZcbiAgICAgICAgICAgIChKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgIFwicmVmXCJcbiAgICAgICAgICAgICkuZ2V0KSAmJlxuICAgICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0LmlzUmVhY3RXYXJuaW5nXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSAhMTtcbiAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgfVxuICAgICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IHZvaWQgMCAhPT0gY29uZmlnLnJlZjtcbiAgICAgICAgfVxuICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgJiYgKG93bmVyID0gZ2V0T3duZXIoKSk7XG4gICAgICAgIGhhc1ZhbGlkS2V5KGNvbmZpZykgJiZcbiAgICAgICAgICAoY2hlY2tLZXlTdHJpbmdDb2VyY2lvbihjb25maWcua2V5KSwgKGtleSA9IFwiXCIgKyBjb25maWcua2V5KSk7XG4gICAgICAgIGZvciAocHJvcE5hbWUgaW4gY29uZmlnKVxuICAgICAgICAgICFoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpIHx8XG4gICAgICAgICAgICBcImtleVwiID09PSBwcm9wTmFtZSB8fFxuICAgICAgICAgICAgXCJfX3NlbGZcIiA9PT0gcHJvcE5hbWUgfHxcbiAgICAgICAgICAgIFwiX19zb3VyY2VcIiA9PT0gcHJvcE5hbWUgfHxcbiAgICAgICAgICAgIChcInJlZlwiID09PSBwcm9wTmFtZSAmJiB2b2lkIDAgPT09IGNvbmZpZy5yZWYpIHx8XG4gICAgICAgICAgICAocHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXSk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcE5hbWUgPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcbiAgICAgIGlmICgxID09PSBwcm9wTmFtZSkgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICAgIGVsc2UgaWYgKDEgPCBwcm9wTmFtZSkge1xuICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSBBcnJheShwcm9wTmFtZSk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcE5hbWU7IGkrKylcbiAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHRbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgICAgICBwcm9wcy5jaGlsZHJlbiA9IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdDtcbiAgICAgIH1cbiAgICAgIHByb3BzID0gUmVhY3RFbGVtZW50KFxuICAgICAgICBlbGVtZW50LnR5cGUsXG4gICAgICAgIGtleSxcbiAgICAgICAgdm9pZCAwLFxuICAgICAgICB2b2lkIDAsXG4gICAgICAgIG93bmVyLFxuICAgICAgICBwcm9wcyxcbiAgICAgICAgZWxlbWVudC5fZGVidWdTdGFjayxcbiAgICAgICAgZWxlbWVudC5fZGVidWdUYXNrXG4gICAgICApO1xuICAgICAgZm9yIChrZXkgPSAyOyBrZXkgPCBhcmd1bWVudHMubGVuZ3RoOyBrZXkrKylcbiAgICAgICAgKG93bmVyID0gYXJndW1lbnRzW2tleV0pLFxuICAgICAgICAgIGlzVmFsaWRFbGVtZW50KG93bmVyKSAmJiBvd25lci5fc3RvcmUgJiYgKG93bmVyLl9zdG9yZS52YWxpZGF0ZWQgPSAxKTtcbiAgICAgIHJldHVybiBwcm9wcztcbiAgICB9O1xuICAgIGV4cG9ydHMuY3JlYXRlQ29udGV4dCA9IGZ1bmN0aW9uIChkZWZhdWx0VmFsdWUpIHtcbiAgICAgIGRlZmF1bHRWYWx1ZSA9IHtcbiAgICAgICAgJCR0eXBlb2Y6IFJFQUNUX0NPTlRFWFRfVFlQRSxcbiAgICAgICAgX2N1cnJlbnRWYWx1ZTogZGVmYXVsdFZhbHVlLFxuICAgICAgICBfY3VycmVudFZhbHVlMjogZGVmYXVsdFZhbHVlLFxuICAgICAgICBfdGhyZWFkQ291bnQ6IDAsXG4gICAgICAgIFByb3ZpZGVyOiBudWxsLFxuICAgICAgICBDb25zdW1lcjogbnVsbFxuICAgICAgfTtcbiAgICAgIGRlZmF1bHRWYWx1ZS5Qcm92aWRlciA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgIGRlZmF1bHRWYWx1ZS5Db25zdW1lciA9IHtcbiAgICAgICAgJCR0eXBlb2Y6IFJFQUNUX0NPTlNVTUVSX1RZUEUsXG4gICAgICAgIF9jb250ZXh0OiBkZWZhdWx0VmFsdWVcbiAgICAgIH07XG4gICAgICBkZWZhdWx0VmFsdWUuX2N1cnJlbnRSZW5kZXJlciA9IG51bGw7XG4gICAgICBkZWZhdWx0VmFsdWUuX2N1cnJlbnRSZW5kZXJlcjIgPSBudWxsO1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9O1xuICAgIGV4cG9ydHMuY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlLCBjb25maWcsIGNoaWxkcmVuKSB7XG4gICAgICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbm9kZSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgaXNWYWxpZEVsZW1lbnQobm9kZSkgJiYgbm9kZS5fc3RvcmUgJiYgKG5vZGUuX3N0b3JlLnZhbGlkYXRlZCA9IDEpO1xuICAgICAgfVxuICAgICAgaSA9IHt9O1xuICAgICAgbm9kZSA9IG51bGw7XG4gICAgICBpZiAobnVsbCAhPSBjb25maWcpXG4gICAgICAgIGZvciAocHJvcE5hbWUgaW4gKGRpZFdhcm5BYm91dE9sZEpTWFJ1bnRpbWUgfHxcbiAgICAgICAgICAhKFwiX19zZWxmXCIgaW4gY29uZmlnKSB8fFxuICAgICAgICAgIFwia2V5XCIgaW4gY29uZmlnIHx8XG4gICAgICAgICAgKChkaWRXYXJuQWJvdXRPbGRKU1hSdW50aW1lID0gITApLFxuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIFwiWW91ciBhcHAgKG9yIG9uZSBvZiBpdHMgZGVwZW5kZW5jaWVzKSBpcyB1c2luZyBhbiBvdXRkYXRlZCBKU1ggdHJhbnNmb3JtLiBVcGRhdGUgdG8gdGhlIG1vZGVybiBKU1ggdHJhbnNmb3JtIGZvciBmYXN0ZXIgcGVyZm9ybWFuY2U6IGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvbmV3LWpzeC10cmFuc2Zvcm1cIlxuICAgICAgICAgICkpLFxuICAgICAgICBoYXNWYWxpZEtleShjb25maWcpICYmXG4gICAgICAgICAgKGNoZWNrS2V5U3RyaW5nQ29lcmNpb24oY29uZmlnLmtleSksIChub2RlID0gXCJcIiArIGNvbmZpZy5rZXkpKSxcbiAgICAgICAgY29uZmlnKSlcbiAgICAgICAgICBoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpICYmXG4gICAgICAgICAgICBcImtleVwiICE9PSBwcm9wTmFtZSAmJlxuICAgICAgICAgICAgXCJfX3NlbGZcIiAhPT0gcHJvcE5hbWUgJiZcbiAgICAgICAgICAgIFwiX19zb3VyY2VcIiAhPT0gcHJvcE5hbWUgJiZcbiAgICAgICAgICAgIChpW3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV0pO1xuICAgICAgdmFyIGNoaWxkcmVuTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCAtIDI7XG4gICAgICBpZiAoMSA9PT0gY2hpbGRyZW5MZW5ndGgpIGkuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICAgIGVsc2UgaWYgKDEgPCBjaGlsZHJlbkxlbmd0aCkge1xuICAgICAgICBmb3IgKFxuICAgICAgICAgIHZhciBjaGlsZEFycmF5ID0gQXJyYXkoY2hpbGRyZW5MZW5ndGgpLCBfaSA9IDA7XG4gICAgICAgICAgX2kgPCBjaGlsZHJlbkxlbmd0aDtcbiAgICAgICAgICBfaSsrXG4gICAgICAgIClcbiAgICAgICAgICBjaGlsZEFycmF5W19pXSA9IGFyZ3VtZW50c1tfaSArIDJdO1xuICAgICAgICBPYmplY3QuZnJlZXplICYmIE9iamVjdC5mcmVlemUoY2hpbGRBcnJheSk7XG4gICAgICAgIGkuY2hpbGRyZW4gPSBjaGlsZEFycmF5O1xuICAgICAgfVxuICAgICAgaWYgKHR5cGUgJiYgdHlwZS5kZWZhdWx0UHJvcHMpXG4gICAgICAgIGZvciAocHJvcE5hbWUgaW4gKChjaGlsZHJlbkxlbmd0aCA9IHR5cGUuZGVmYXVsdFByb3BzKSwgY2hpbGRyZW5MZW5ndGgpKVxuICAgICAgICAgIHZvaWQgMCA9PT0gaVtwcm9wTmFtZV0gJiYgKGlbcHJvcE5hbWVdID0gY2hpbGRyZW5MZW5ndGhbcHJvcE5hbWVdKTtcbiAgICAgIG5vZGUgJiZcbiAgICAgICAgZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIoXG4gICAgICAgICAgaSxcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0eXBlXG4gICAgICAgICAgICA/IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IFwiVW5rbm93blwiXG4gICAgICAgICAgICA6IHR5cGVcbiAgICAgICAgKTtcbiAgICAgIHZhciBwcm9wTmFtZSA9IDFlNCA+IFJlYWN0U2hhcmVkSW50ZXJuYWxzLnJlY2VudGx5Q3JlYXRlZE93bmVyU3RhY2tzKys7XG4gICAgICByZXR1cm4gUmVhY3RFbGVtZW50KFxuICAgICAgICB0eXBlLFxuICAgICAgICBub2RlLFxuICAgICAgICB2b2lkIDAsXG4gICAgICAgIHZvaWQgMCxcbiAgICAgICAgZ2V0T3duZXIoKSxcbiAgICAgICAgaSxcbiAgICAgICAgcHJvcE5hbWUgPyBFcnJvcihcInJlYWN0LXN0YWNrLXRvcC1mcmFtZVwiKSA6IHVua25vd25Pd25lckRlYnVnU3RhY2ssXG4gICAgICAgIHByb3BOYW1lID8gY3JlYXRlVGFzayhnZXRUYXNrTmFtZSh0eXBlKSkgOiB1bmtub3duT3duZXJEZWJ1Z1Rhc2tcbiAgICAgICk7XG4gICAgfTtcbiAgICBleHBvcnRzLmNyZWF0ZVJlZiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciByZWZPYmplY3QgPSB7IGN1cnJlbnQ6IG51bGwgfTtcbiAgICAgIE9iamVjdC5zZWFsKHJlZk9iamVjdCk7XG4gICAgICByZXR1cm4gcmVmT2JqZWN0O1xuICAgIH07XG4gICAgZXhwb3J0cy5mb3J3YXJkUmVmID0gZnVuY3Rpb24gKHJlbmRlcikge1xuICAgICAgbnVsbCAhPSByZW5kZXIgJiYgcmVuZGVyLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEVcbiAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJmb3J3YXJkUmVmIHJlcXVpcmVzIGEgcmVuZGVyIGZ1bmN0aW9uIGJ1dCByZWNlaXZlZCBhIGBtZW1vYCBjb21wb25lbnQuIEluc3RlYWQgb2YgZm9yd2FyZFJlZihtZW1vKC4uLikpLCB1c2UgbWVtbyhmb3J3YXJkUmVmKC4uLikpLlwiXG4gICAgICAgICAgKVxuICAgICAgICA6IFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHJlbmRlclxuICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJmb3J3YXJkUmVmIHJlcXVpcmVzIGEgcmVuZGVyIGZ1bmN0aW9uIGJ1dCB3YXMgZ2l2ZW4gJXMuXCIsXG4gICAgICAgICAgICAgIG51bGwgPT09IHJlbmRlciA/IFwibnVsbFwiIDogdHlwZW9mIHJlbmRlclxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogMCAhPT0gcmVuZGVyLmxlbmd0aCAmJlxuICAgICAgICAgICAgMiAhPT0gcmVuZGVyLmxlbmd0aCAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJmb3J3YXJkUmVmIHJlbmRlciBmdW5jdGlvbnMgYWNjZXB0IGV4YWN0bHkgdHdvIHBhcmFtZXRlcnM6IHByb3BzIGFuZCByZWYuICVzXCIsXG4gICAgICAgICAgICAgIDEgPT09IHJlbmRlci5sZW5ndGhcbiAgICAgICAgICAgICAgICA/IFwiRGlkIHlvdSBmb3JnZXQgdG8gdXNlIHRoZSByZWYgcGFyYW1ldGVyP1wiXG4gICAgICAgICAgICAgICAgOiBcIkFueSBhZGRpdGlvbmFsIHBhcmFtZXRlciB3aWxsIGJlIHVuZGVmaW5lZC5cIlxuICAgICAgICAgICAgKTtcbiAgICAgIG51bGwgIT0gcmVuZGVyICYmXG4gICAgICAgIG51bGwgIT0gcmVuZGVyLmRlZmF1bHRQcm9wcyAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiZm9yd2FyZFJlZiByZW5kZXIgZnVuY3Rpb25zIGRvIG5vdCBzdXBwb3J0IGRlZmF1bHRQcm9wcy4gRGlkIHlvdSBhY2NpZGVudGFsbHkgcGFzcyBhIFJlYWN0IGNvbXBvbmVudD9cIlxuICAgICAgICApO1xuICAgICAgdmFyIGVsZW1lbnRUeXBlID0geyAkJHR5cGVvZjogUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSwgcmVuZGVyOiByZW5kZXIgfSxcbiAgICAgICAgb3duTmFtZTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50VHlwZSwgXCJkaXNwbGF5TmFtZVwiLCB7XG4gICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gb3duTmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgIG93bk5hbWUgPSBuYW1lO1xuICAgICAgICAgIHJlbmRlci5uYW1lIHx8XG4gICAgICAgICAgICByZW5kZXIuZGlzcGxheU5hbWUgfHxcbiAgICAgICAgICAgIChPYmplY3QuZGVmaW5lUHJvcGVydHkocmVuZGVyLCBcIm5hbWVcIiwgeyB2YWx1ZTogbmFtZSB9KSxcbiAgICAgICAgICAgIChyZW5kZXIuZGlzcGxheU5hbWUgPSBuYW1lKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGVsZW1lbnRUeXBlO1xuICAgIH07XG4gICAgZXhwb3J0cy5pc1ZhbGlkRWxlbWVudCA9IGlzVmFsaWRFbGVtZW50O1xuICAgIGV4cG9ydHMubGF6eSA9IGZ1bmN0aW9uIChjdG9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAkJHR5cGVvZjogUkVBQ1RfTEFaWV9UWVBFLFxuICAgICAgICBfcGF5bG9hZDogeyBfc3RhdHVzOiAtMSwgX3Jlc3VsdDogY3RvciB9LFxuICAgICAgICBfaW5pdDogbGF6eUluaXRpYWxpemVyXG4gICAgICB9O1xuICAgIH07XG4gICAgZXhwb3J0cy5tZW1vID0gZnVuY3Rpb24gKHR5cGUsIGNvbXBhcmUpIHtcbiAgICAgIG51bGwgPT0gdHlwZSAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwibWVtbzogVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBjb21wb25lbnQuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzXCIsXG4gICAgICAgICAgbnVsbCA9PT0gdHlwZSA/IFwibnVsbFwiIDogdHlwZW9mIHR5cGVcbiAgICAgICAgKTtcbiAgICAgIGNvbXBhcmUgPSB7XG4gICAgICAgICQkdHlwZW9mOiBSRUFDVF9NRU1PX1RZUEUsXG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIGNvbXBhcmU6IHZvaWQgMCA9PT0gY29tcGFyZSA/IG51bGwgOiBjb21wYXJlXG4gICAgICB9O1xuICAgICAgdmFyIG93bk5hbWU7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29tcGFyZSwgXCJkaXNwbGF5TmFtZVwiLCB7XG4gICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gb3duTmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgIG93bk5hbWUgPSBuYW1lO1xuICAgICAgICAgIHR5cGUubmFtZSB8fFxuICAgICAgICAgICAgdHlwZS5kaXNwbGF5TmFtZSB8fFxuICAgICAgICAgICAgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0eXBlLCBcIm5hbWVcIiwgeyB2YWx1ZTogbmFtZSB9KSxcbiAgICAgICAgICAgICh0eXBlLmRpc3BsYXlOYW1lID0gbmFtZSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjb21wYXJlO1xuICAgIH07XG4gICAgZXhwb3J0cy5zdGFydFRyYW5zaXRpb24gPSBmdW5jdGlvbiAoc2NvcGUpIHtcbiAgICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQsXG4gICAgICAgIGN1cnJlbnRUcmFuc2l0aW9uID0ge307XG4gICAgICBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycyA9IG5ldyBTZXQoKTtcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSBjdXJyZW50VHJhbnNpdGlvbjtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciByZXR1cm5WYWx1ZSA9IHNjb3BlKCksXG4gICAgICAgICAgb25TdGFydFRyYW5zaXRpb25GaW5pc2ggPSBSZWFjdFNoYXJlZEludGVybmFscy5TO1xuICAgICAgICBudWxsICE9PSBvblN0YXJ0VHJhbnNpdGlvbkZpbmlzaCAmJlxuICAgICAgICAgIG9uU3RhcnRUcmFuc2l0aW9uRmluaXNoKGN1cnJlbnRUcmFuc2l0aW9uLCByZXR1cm5WYWx1ZSk7XG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiByZXR1cm5WYWx1ZSAmJlxuICAgICAgICAgIG51bGwgIT09IHJldHVyblZhbHVlICYmXG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmV0dXJuVmFsdWUudGhlbiAmJlxuICAgICAgICAgIChSZWFjdFNoYXJlZEludGVybmFscy5hc3luY1RyYW5zaXRpb25zKyssXG4gICAgICAgICAgcmV0dXJuVmFsdWUudGhlbihyZWxlYXNlQXN5bmNUcmFuc2l0aW9uLCByZWxlYXNlQXN5bmNUcmFuc2l0aW9uKSxcbiAgICAgICAgICByZXR1cm5WYWx1ZS50aGVuKG5vb3AsIHJlcG9ydEdsb2JhbEVycm9yKSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZXBvcnRHbG9iYWxFcnJvcihlcnJvcik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBudWxsID09PSBwcmV2VHJhbnNpdGlvbiAmJlxuICAgICAgICAgIGN1cnJlbnRUcmFuc2l0aW9uLl91cGRhdGVkRmliZXJzICYmXG4gICAgICAgICAgKChzY29wZSA9IGN1cnJlbnRUcmFuc2l0aW9uLl91cGRhdGVkRmliZXJzLnNpemUpLFxuICAgICAgICAgIGN1cnJlbnRUcmFuc2l0aW9uLl91cGRhdGVkRmliZXJzLmNsZWFyKCksXG4gICAgICAgICAgMTAgPCBzY29wZSAmJlxuICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICBcIkRldGVjdGVkIGEgbGFyZ2UgbnVtYmVyIG9mIHVwZGF0ZXMgaW5zaWRlIHN0YXJ0VHJhbnNpdGlvbi4gSWYgdGhpcyBpcyBkdWUgdG8gYSBzdWJzY3JpcHRpb24gcGxlYXNlIHJlLXdyaXRlIGl0IHRvIHVzZSBSZWFjdCBwcm92aWRlZCBob29rcy4gT3RoZXJ3aXNlIGNvbmN1cnJlbnQgbW9kZSBndWFyYW50ZWVzIGFyZSBvZmYgdGhlIHRhYmxlLlwiXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICBudWxsICE9PSBwcmV2VHJhbnNpdGlvbiAmJlxuICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudFRyYW5zaXRpb24udHlwZXMgJiZcbiAgICAgICAgICAgIChudWxsICE9PSBwcmV2VHJhbnNpdGlvbi50eXBlcyAmJlxuICAgICAgICAgICAgICBwcmV2VHJhbnNpdGlvbi50eXBlcyAhPT0gY3VycmVudFRyYW5zaXRpb24udHlwZXMgJiZcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIldlIGV4cGVjdGVkIGlubmVyIFRyYW5zaXRpb25zIHRvIGhhdmUgdHJhbnNmZXJyZWQgdGhlIG91dGVyIHR5cGVzIHNldCBhbmQgdGhhdCB5b3UgY2Fubm90IGFkZCB0byB0aGUgb3V0ZXIgVHJhbnNpdGlvbiB3aGlsZSBpbnNpZGUgdGhlIGlubmVyLlRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIChwcmV2VHJhbnNpdGlvbi50eXBlcyA9IGN1cnJlbnRUcmFuc2l0aW9uLnR5cGVzKSksXG4gICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSBwcmV2VHJhbnNpdGlvbik7XG4gICAgICB9XG4gICAgfTtcbiAgICBleHBvcnRzLnVuc3RhYmxlX3VzZUNhY2hlUmVmcmVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZUNhY2hlUmVmcmVzaCgpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2UgPSBmdW5jdGlvbiAodXNhYmxlKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2UodXNhYmxlKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudXNlQWN0aW9uU3RhdGUgPSBmdW5jdGlvbiAoYWN0aW9uLCBpbml0aWFsU3RhdGUsIHBlcm1hbGluaykge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlQWN0aW9uU3RhdGUoXG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgaW5pdGlhbFN0YXRlLFxuICAgICAgICBwZXJtYWxpbmtcbiAgICAgICk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZUNhbGxiYWNrID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2VDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZUNvbnRleHQgPSBmdW5jdGlvbiAoQ29udGV4dCkge1xuICAgICAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICAgICAgQ29udGV4dC4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OU1VNRVJfVFlQRSAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiQ2FsbGluZyB1c2VDb250ZXh0KENvbnRleHQuQ29uc3VtZXIpIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgY2F1c2UgYnVncy4gRGlkIHlvdSBtZWFuIHRvIGNhbGwgdXNlQ29udGV4dChDb250ZXh0KSBpbnN0ZWFkP1wiXG4gICAgICAgICk7XG4gICAgICByZXR1cm4gZGlzcGF0Y2hlci51c2VDb250ZXh0KENvbnRleHQpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VEZWJ1Z1ZhbHVlID0gZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlRGVidWdWYWx1ZSh2YWx1ZSwgZm9ybWF0dGVyRm4pO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VEZWZlcnJlZFZhbHVlID0gZnVuY3Rpb24gKHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZURlZmVycmVkVmFsdWUodmFsdWUsIGluaXRpYWxWYWx1ZSk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZUVmZmVjdCA9IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIG51bGwgPT0gY3JlYXRlICYmXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBcIlJlYWN0IEhvb2sgdXNlRWZmZWN0IHJlcXVpcmVzIGFuIGVmZmVjdCBjYWxsYmFjay4gRGlkIHlvdSBmb3JnZXQgdG8gcGFzcyBhIGNhbGxiYWNrIHRvIHRoZSBob29rP1wiXG4gICAgICAgICk7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2VFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudXNlSWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2VJZCgpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VJbXBlcmF0aXZlSGFuZGxlID0gZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudXNlSW5zZXJ0aW9uRWZmZWN0ID0gZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgbnVsbCA9PSBjcmVhdGUgJiZcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIFwiUmVhY3QgSG9vayB1c2VJbnNlcnRpb25FZmZlY3QgcmVxdWlyZXMgYW4gZWZmZWN0IGNhbGxiYWNrLiBEaWQgeW91IGZvcmdldCB0byBwYXNzIGEgY2FsbGJhY2sgdG8gdGhlIGhvb2s/XCJcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZUluc2VydGlvbkVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VMYXlvdXRFZmZlY3QgPSBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBudWxsID09IGNyZWF0ZSAmJlxuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgXCJSZWFjdCBIb29rIHVzZUxheW91dEVmZmVjdCByZXF1aXJlcyBhbiBlZmZlY3QgY2FsbGJhY2suIERpZCB5b3UgZm9yZ2V0IHRvIHBhc3MgYSBjYWxsYmFjayB0byB0aGUgaG9vaz9cIlxuICAgICAgICApO1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZU1lbW8gPSBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2VNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZU9wdGltaXN0aWMgPSBmdW5jdGlvbiAocGFzc3Rocm91Z2gsIHJlZHVjZXIpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZU9wdGltaXN0aWMocGFzc3Rocm91Z2gsIHJlZHVjZXIpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VSZWR1Y2VyID0gZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZVJlZiA9IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZVJlZihpbml0aWFsVmFsdWUpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VTdGF0ZSA9IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZVN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZVN5bmNFeHRlcm5hbFN0b3JlID0gZnVuY3Rpb24gKFxuICAgICAgc3Vic2NyaWJlLFxuICAgICAgZ2V0U25hcHNob3QsXG4gICAgICBnZXRTZXJ2ZXJTbmFwc2hvdFxuICAgICkge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlU3luY0V4dGVybmFsU3RvcmUoXG4gICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgZ2V0U25hcHNob3QsXG4gICAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgICApO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VUcmFuc2l0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlVHJhbnNpdGlvbigpO1xuICAgIH07XG4gICAgZXhwb3J0cy52ZXJzaW9uID0gXCIxOS4yLjAtY2FuYXJ5LTk3Y2RkNWQzLTIwMjUwNzEwXCI7XG4gICAgXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAmJlxuICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdG9wICYmXG4gICAgICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0b3AoRXJyb3IoKSk7XG4gIH0pKCk7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react.development.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js":
|
||
/*!********************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/react/index.js ***!
|
||
\********************************************************/
|
||
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react.development.js */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsSUFBSSxLQUFxQyxFQUFFLEVBRTFDLENBQUM7QUFDRixFQUFFLDhKQUFzRDtBQUN4RCIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvRG9jdW1lbnRzL0Rldi9iaW9oYXphcmQtdmZ4LTEvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QucHJvZHVjdGlvbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js":
|
||
/*!**************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/react/jsx-runtime.js ***!
|
||
\**************************************************************/
|
||
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-jsx-runtime.development.js */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-runtime.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvanN4LXJ1bnRpbWUuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsSUFBSSxLQUFxQyxFQUFFLEVBRTFDLENBQUM7QUFDRixFQUFFLHNMQUFrRTtBQUNwRSIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvRG9jdW1lbnRzL0Rldi9iaW9oYXphcmQtdmZ4LTEvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC9qc3gtcnVudGltZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtanN4LXJ1bnRpbWUucHJvZHVjdGlvbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1qc3gtcnVudGltZS5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/safe-stable-stringify/index.js":
|
||
/*!************************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/safe-stable-stringify/index.js ***!
|
||
\************************************************************************/
|
||
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
||
|
||
eval(__webpack_require__.ts("var __dirname = \"/\";\n(function(){\"use strict\";var e={879:function(e,t){const{hasOwnProperty:n}=Object.prototype;const r=configure();r.configure=configure;r.stringify=r;r.default=r;t.stringify=r;t.configure=configure;e.exports=r;const i=/[\\u0000-\\u001f\\u0022\\u005c\\ud800-\\udfff]/;function strEscape(e){if(e.length<5e3&&!i.test(e)){return`\"${e}\"`}return JSON.stringify(e)}function sort(e,t){if(e.length>200||t){return e.sort(t)}for(let t=1;t<e.length;t++){const n=e[t];let r=t;while(r!==0&&e[r-1]>n){e[r]=e[r-1];r--}e[r]=n}return e}const f=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(Object.getPrototypeOf(new Int8Array)),Symbol.toStringTag).get;function isTypedArrayWithEntries(e){return f.call(e)!==undefined&&e.length!==0}function stringifyTypedArray(e,t,n){if(e.length<n){n=e.length}const r=t===\",\"?\"\":\" \";let i=`\"0\":${r}${e[0]}`;for(let f=1;f<n;f++){i+=`${t}\"${f}\":${r}${e[f]}`}return i}function getCircularValueOption(e){if(n.call(e,\"circularValue\")){const t=e.circularValue;if(typeof t===\"string\"){return`\"${t}\"`}if(t==null){return t}if(t===Error||t===TypeError){return{toString(){throw new TypeError(\"Converting circular structure to JSON\")}}}throw new TypeError('The \"circularValue\" argument must be of type string or the value null or undefined')}return'\"[Circular]\"'}function getDeterministicOption(e){let t;if(n.call(e,\"deterministic\")){t=e.deterministic;if(typeof t!==\"boolean\"&&typeof t!==\"function\"){throw new TypeError('The \"deterministic\" argument must be of type boolean or comparator function')}}return t===undefined?true:t}function getBooleanOption(e,t){let r;if(n.call(e,t)){r=e[t];if(typeof r!==\"boolean\"){throw new TypeError(`The \"${t}\" argument must be of type boolean`)}}return r===undefined?true:r}function getPositiveIntegerOption(e,t){let r;if(n.call(e,t)){r=e[t];if(typeof r!==\"number\"){throw new TypeError(`The \"${t}\" argument must be of type number`)}if(!Number.isInteger(r)){throw new TypeError(`The \"${t}\" argument must be an integer`)}if(r<1){throw new RangeError(`The \"${t}\" argument must be >= 1`)}}return r===undefined?Infinity:r}function getItemCount(e){if(e===1){return\"1 item\"}return`${e} items`}function getUniqueReplacerSet(e){const t=new Set;for(const n of e){if(typeof n===\"string\"||typeof n===\"number\"){t.add(String(n))}}return t}function getStrictOption(e){if(n.call(e,\"strict\")){const t=e.strict;if(typeof t!==\"boolean\"){throw new TypeError('The \"strict\" argument must be of type boolean')}if(t){return e=>{let t=`Object can not safely be stringified. Received type ${typeof e}`;if(typeof e!==\"function\")t+=` (${e.toString()})`;throw new Error(t)}}}}function configure(e){e={...e};const t=getStrictOption(e);if(t){if(e.bigint===undefined){e.bigint=false}if(!(\"circularValue\"in e)){e.circularValue=Error}}const n=getCircularValueOption(e);const r=getBooleanOption(e,\"bigint\");const i=getDeterministicOption(e);const f=typeof i===\"function\"?i:undefined;const u=getPositiveIntegerOption(e,\"maximumDepth\");const o=getPositiveIntegerOption(e,\"maximumBreadth\");function stringifyFnReplacer(e,s,l,c,a,g){let p=s[e];if(typeof p===\"object\"&&p!==null&&typeof p.toJSON===\"function\"){p=p.toJSON(e)}p=c.call(s,e,p);switch(typeof p){case\"string\":return strEscape(p);case\"object\":{if(p===null){return\"null\"}if(l.indexOf(p)!==-1){return n}let e=\"\";let t=\",\";const r=g;if(Array.isArray(p)){if(p.length===0){return\"[]\"}if(u<l.length+1){return'\"[Array]\"'}l.push(p);if(a!==\"\"){g+=a;e+=`\\n${g}`;t=`,\\n${g}`}const n=Math.min(p.length,o);let i=0;for(;i<n-1;i++){const n=stringifyFnReplacer(String(i),p,l,c,a,g);e+=n!==undefined?n:\"null\";e+=t}const f=stringifyFnReplacer(String(i),p,l,c,a,g);e+=f!==undefined?f:\"null\";if(p.length-1>o){const n=p.length-o-1;e+=`${t}\"... ${getItemCount(n)} not stringified\"`}if(a!==\"\"){e+=`\\n${r}`}l.pop();return`[${e}]`}let s=Object.keys(p);const y=s.length;if(y===0){return\"{}\"}if(u<l.length+1){return'\"[Object]\"'}let d=\"\";let h=\"\";if(a!==\"\"){g+=a;t=`,\\n${g}`;d=\" \"}const $=Math.min(y,o);if(i&&!isTypedArrayWithEntries(p)){s=sort(s,f)}l.push(p);for(let n=0;n<$;n++){const r=s[n];const i=stringifyFnReplacer(r,p,l,c,a,g);if(i!==undefined){e+=`${h}${strEscape(r)}:${d}${i}`;h=t}}if(y>o){const n=y-o;e+=`${h}\"...\":${d}\"${getItemCount(n)} not stringified\"`;h=t}if(a!==\"\"&&h.length>1){e=`\\n${g}${e}\\n${r}`}l.pop();return`{${e}}`}case\"number\":return isFinite(p)?String(p):t?t(p):\"null\";case\"boolean\":return p===true?\"true\":\"false\";case\"undefined\":return undefined;case\"bigint\":if(r){return String(p)}default:return t?t(p):undefined}}function stringifyArrayReplacer(e,i,f,s,l,c){if(typeof i===\"object\"&&i!==null&&typeof i.toJSON===\"function\"){i=i.toJSON(e)}switch(typeof i){case\"string\":return strEscape(i);case\"object\":{if(i===null){return\"null\"}if(f.indexOf(i)!==-1){return n}const e=c;let t=\"\";let r=\",\";if(Array.isArray(i)){if(i.length===0){return\"[]\"}if(u<f.length+1){return'\"[Array]\"'}f.push(i);if(l!==\"\"){c+=l;t+=`\\n${c}`;r=`,\\n${c}`}const n=Math.min(i.length,o);let a=0;for(;a<n-1;a++){const e=stringifyArrayReplacer(String(a),i[a],f,s,l,c);t+=e!==undefined?e:\"null\";t+=r}const g=stringifyArrayReplacer(String(a),i[a],f,s,l,c);t+=g!==undefined?g:\"null\";if(i.length-1>o){const e=i.length-o-1;t+=`${r}\"... ${getItemCount(e)} not stringified\"`}if(l!==\"\"){t+=`\\n${e}`}f.pop();return`[${t}]`}f.push(i);let a=\"\";if(l!==\"\"){c+=l;r=`,\\n${c}`;a=\" \"}let g=\"\";for(const e of s){const n=stringifyArrayReplacer(e,i[e],f,s,l,c);if(n!==undefined){t+=`${g}${strEscape(e)}:${a}${n}`;g=r}}if(l!==\"\"&&g.length>1){t=`\\n${c}${t}\\n${e}`}f.pop();return`{${t}}`}case\"number\":return isFinite(i)?String(i):t?t(i):\"null\";case\"boolean\":return i===true?\"true\":\"false\";case\"undefined\":return undefined;case\"bigint\":if(r){return String(i)}default:return t?t(i):undefined}}function stringifyIndent(e,s,l,c,a){switch(typeof s){case\"string\":return strEscape(s);case\"object\":{if(s===null){return\"null\"}if(typeof s.toJSON===\"function\"){s=s.toJSON(e);if(typeof s!==\"object\"){return stringifyIndent(e,s,l,c,a)}if(s===null){return\"null\"}}if(l.indexOf(s)!==-1){return n}const t=a;if(Array.isArray(s)){if(s.length===0){return\"[]\"}if(u<l.length+1){return'\"[Array]\"'}l.push(s);a+=c;let e=`\\n${a}`;const n=`,\\n${a}`;const r=Math.min(s.length,o);let i=0;for(;i<r-1;i++){const t=stringifyIndent(String(i),s[i],l,c,a);e+=t!==undefined?t:\"null\";e+=n}const f=stringifyIndent(String(i),s[i],l,c,a);e+=f!==undefined?f:\"null\";if(s.length-1>o){const t=s.length-o-1;e+=`${n}\"... ${getItemCount(t)} not stringified\"`}e+=`\\n${t}`;l.pop();return`[${e}]`}let r=Object.keys(s);const g=r.length;if(g===0){return\"{}\"}if(u<l.length+1){return'\"[Object]\"'}a+=c;const p=`,\\n${a}`;let y=\"\";let d=\"\";let h=Math.min(g,o);if(isTypedArrayWithEntries(s)){y+=stringifyTypedArray(s,p,o);r=r.slice(s.length);h-=s.length;d=p}if(i){r=sort(r,f)}l.push(s);for(let e=0;e<h;e++){const t=r[e];const n=stringifyIndent(t,s[t],l,c,a);if(n!==undefined){y+=`${d}${strEscape(t)}: ${n}`;d=p}}if(g>o){const e=g-o;y+=`${d}\"...\": \"${getItemCount(e)} not stringified\"`;d=p}if(d!==\"\"){y=`\\n${a}${y}\\n${t}`}l.pop();return`{${y}}`}case\"number\":return isFinite(s)?String(s):t?t(s):\"null\";case\"boolean\":return s===true?\"true\":\"false\";case\"undefined\":return undefined;case\"bigint\":if(r){return String(s)}default:return t?t(s):undefined}}function stringifySimple(e,s,l){switch(typeof s){case\"string\":return strEscape(s);case\"object\":{if(s===null){return\"null\"}if(typeof s.toJSON===\"function\"){s=s.toJSON(e);if(typeof s!==\"object\"){return stringifySimple(e,s,l)}if(s===null){return\"null\"}}if(l.indexOf(s)!==-1){return n}let t=\"\";const r=s.length!==undefined;if(r&&Array.isArray(s)){if(s.length===0){return\"[]\"}if(u<l.length+1){return'\"[Array]\"'}l.push(s);const e=Math.min(s.length,o);let n=0;for(;n<e-1;n++){const e=stringifySimple(String(n),s[n],l);t+=e!==undefined?e:\"null\";t+=\",\"}const r=stringifySimple(String(n),s[n],l);t+=r!==undefined?r:\"null\";if(s.length-1>o){const e=s.length-o-1;t+=`,\"... ${getItemCount(e)} not stringified\"`}l.pop();return`[${t}]`}let c=Object.keys(s);const a=c.length;if(a===0){return\"{}\"}if(u<l.length+1){return'\"[Object]\"'}let g=\"\";let p=Math.min(a,o);if(r&&isTypedArrayWithEntries(s)){t+=stringifyTypedArray(s,\",\",o);c=c.slice(s.length);p-=s.length;g=\",\"}if(i){c=sort(c,f)}l.push(s);for(let e=0;e<p;e++){const n=c[e];const r=stringifySimple(n,s[n],l);if(r!==undefined){t+=`${g}${strEscape(n)}:${r}`;g=\",\"}}if(a>o){const e=a-o;t+=`${g}\"...\":\"${getItemCount(e)} not stringified\"`}l.pop();return`{${t}}`}case\"number\":return isFinite(s)?String(s):t?t(s):\"null\";case\"boolean\":return s===true?\"true\":\"false\";case\"undefined\":return undefined;case\"bigint\":if(r){return String(s)}default:return t?t(s):undefined}}function stringify(e,t,n){if(arguments.length>1){let r=\"\";if(typeof n===\"number\"){r=\" \".repeat(Math.min(n,10))}else if(typeof n===\"string\"){r=n.slice(0,10)}if(t!=null){if(typeof t===\"function\"){return stringifyFnReplacer(\"\",{\"\":e},[],t,r,\"\")}if(Array.isArray(t)){return stringifyArrayReplacer(\"\",e,[],getUniqueReplacerSet(t),r,\"\")}}if(r.length!==0){return stringifyIndent(\"\",e,[],r,\"\")}}return stringifySimple(\"\",e,[])}return stringify}}};var t={};function __nccwpck_require__(n){var r=t[n];if(r!==undefined){return r.exports}var i=t[n]={exports:{}};var f=true;try{e[n](i,i.exports,__nccwpck_require__);f=false}finally{if(f)delete t[n]}return i.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var n=__nccwpck_require__(879);module.exports=n})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvc2FmZS1zdGFibGUtc3RyaW5naWZ5L2luZGV4LmpzIiwibWFwcGluZ3MiOiI7QUFBQSxZQUFZLGFBQWEsT0FBTyxrQkFBa0IsTUFBTSxpQkFBaUIsa0JBQWtCLG9CQUFvQixzQkFBc0IsY0FBYyxZQUFZLGNBQWMsc0JBQXNCLFlBQVksbURBQW1ELHNCQUFzQiw2QkFBNkIsVUFBVSxFQUFFLEdBQUcseUJBQXlCLG1CQUFtQixvQkFBb0IsaUJBQWlCLFlBQVksV0FBVyxLQUFLLGFBQWEsUUFBUSx1QkFBdUIsWUFBWSxJQUFJLE9BQU8sU0FBUyw0SEFBNEgsb0NBQW9DLDJDQUEyQyxvQ0FBb0MsZUFBZSxXQUFXLHVCQUF1QixhQUFhLEVBQUUsRUFBRSxLQUFLLEVBQUUsWUFBWSxJQUFJLEtBQUssTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxtQ0FBbUMsOEJBQThCLHdCQUF3Qix3QkFBd0IsVUFBVSxFQUFFLEdBQUcsWUFBWSxTQUFTLDZCQUE2QixPQUFPLFdBQVcsK0RBQStELDBHQUEwRyxxQkFBcUIsbUNBQW1DLE1BQU0sOEJBQThCLGtCQUFrQixnREFBZ0Qsb0dBQW9HLDRCQUE0QiwrQkFBK0IsTUFBTSxnQkFBZ0IsT0FBTyx5QkFBeUIsNEJBQTRCLEVBQUUsc0NBQXNDLDRCQUE0Qix1Q0FBdUMsTUFBTSxnQkFBZ0IsT0FBTyx3QkFBd0IsNEJBQTRCLEVBQUUsb0NBQW9DLHlCQUF5Qiw0QkFBNEIsRUFBRSxnQ0FBZ0MsUUFBUSw2QkFBNkIsRUFBRSwyQkFBMkIsZ0NBQWdDLHlCQUF5QixVQUFVLGVBQWUsU0FBUyxHQUFHLE9BQU8saUNBQWlDLGdCQUFnQixrQkFBa0IsNkNBQTZDLGtCQUFrQixTQUFTLDRCQUE0Qix1QkFBdUIsaUJBQWlCLHlCQUF5QixxRUFBcUUsTUFBTSxXQUFXLDZEQUE2RCxTQUFTLEVBQUUsaUNBQWlD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LGlCQUFpQiIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvRG9jdW1lbnRzL0Rldi9iaW9oYXphcmQtdmZ4LTEvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9zYWZlLXN0YWJsZS1zdHJpbmdpZnkvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGU9ezg3OTpmdW5jdGlvbihlLHQpe2NvbnN0e2hhc093blByb3BlcnR5Om59PU9iamVjdC5wcm90b3R5cGU7Y29uc3Qgcj1jb25maWd1cmUoKTtyLmNvbmZpZ3VyZT1jb25maWd1cmU7ci5zdHJpbmdpZnk9cjtyLmRlZmF1bHQ9cjt0LnN0cmluZ2lmeT1yO3QuY29uZmlndXJlPWNvbmZpZ3VyZTtlLmV4cG9ydHM9cjtjb25zdCBpPS9bXFx1MDAwMC1cXHUwMDFmXFx1MDAyMlxcdTAwNWNcXHVkODAwLVxcdWRmZmZdLztmdW5jdGlvbiBzdHJFc2NhcGUoZSl7aWYoZS5sZW5ndGg8NWUzJiYhaS50ZXN0KGUpKXtyZXR1cm5gXCIke2V9XCJgfXJldHVybiBKU09OLnN0cmluZ2lmeShlKX1mdW5jdGlvbiBzb3J0KGUsdCl7aWYoZS5sZW5ndGg+MjAwfHx0KXtyZXR1cm4gZS5zb3J0KHQpfWZvcihsZXQgdD0xO3Q8ZS5sZW5ndGg7dCsrKXtjb25zdCBuPWVbdF07bGV0IHI9dDt3aGlsZShyIT09MCYmZVtyLTFdPm4pe2Vbcl09ZVtyLTFdO3ItLX1lW3JdPW59cmV0dXJuIGV9Y29uc3QgZj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5nZXRQcm90b3R5cGVPZihPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IEludDhBcnJheSkpLFN5bWJvbC50b1N0cmluZ1RhZykuZ2V0O2Z1bmN0aW9uIGlzVHlwZWRBcnJheVdpdGhFbnRyaWVzKGUpe3JldHVybiBmLmNhbGwoZSkhPT11bmRlZmluZWQmJmUubGVuZ3RoIT09MH1mdW5jdGlvbiBzdHJpbmdpZnlUeXBlZEFycmF5KGUsdCxuKXtpZihlLmxlbmd0aDxuKXtuPWUubGVuZ3RofWNvbnN0IHI9dD09PVwiLFwiP1wiXCI6XCIgXCI7bGV0IGk9YFwiMFwiOiR7cn0ke2VbMF19YDtmb3IobGV0IGY9MTtmPG47ZisrKXtpKz1gJHt0fVwiJHtmfVwiOiR7cn0ke2VbZl19YH1yZXR1cm4gaX1mdW5jdGlvbiBnZXRDaXJjdWxhclZhbHVlT3B0aW9uKGUpe2lmKG4uY2FsbChlLFwiY2lyY3VsYXJWYWx1ZVwiKSl7Y29uc3QgdD1lLmNpcmN1bGFyVmFsdWU7aWYodHlwZW9mIHQ9PT1cInN0cmluZ1wiKXtyZXR1cm5gXCIke3R9XCJgfWlmKHQ9PW51bGwpe3JldHVybiB0fWlmKHQ9PT1FcnJvcnx8dD09PVR5cGVFcnJvcil7cmV0dXJue3RvU3RyaW5nKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkNvbnZlcnRpbmcgY2lyY3VsYXIgc3RydWN0dXJlIHRvIEpTT05cIil9fX10aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJjaXJjdWxhclZhbHVlXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZyBvciB0aGUgdmFsdWUgbnVsbCBvciB1bmRlZmluZWQnKX1yZXR1cm4nXCJbQ2lyY3VsYXJdXCInfWZ1bmN0aW9uIGdldERldGVybWluaXN0aWNPcHRpb24oZSl7bGV0IHQ7aWYobi5jYWxsKGUsXCJkZXRlcm1pbmlzdGljXCIpKXt0PWUuZGV0ZXJtaW5pc3RpYztpZih0eXBlb2YgdCE9PVwiYm9vbGVhblwiJiZ0eXBlb2YgdCE9PVwiZnVuY3Rpb25cIil7dGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiZGV0ZXJtaW5pc3RpY1wiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBib29sZWFuIG9yIGNvbXBhcmF0b3IgZnVuY3Rpb24nKX19cmV0dXJuIHQ9PT11bmRlZmluZWQ/dHJ1ZTp0fWZ1bmN0aW9uIGdldEJvb2xlYW5PcHRpb24oZSx0KXtsZXQgcjtpZihuLmNhbGwoZSx0KSl7cj1lW3RdO2lmKHR5cGVvZiByIT09XCJib29sZWFuXCIpe3Rocm93IG5ldyBUeXBlRXJyb3IoYFRoZSBcIiR7dH1cIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbmApfX1yZXR1cm4gcj09PXVuZGVmaW5lZD90cnVlOnJ9ZnVuY3Rpb24gZ2V0UG9zaXRpdmVJbnRlZ2VyT3B0aW9uKGUsdCl7bGV0IHI7aWYobi5jYWxsKGUsdCkpe3I9ZVt0XTtpZih0eXBlb2YgciE9PVwibnVtYmVyXCIpe3Rocm93IG5ldyBUeXBlRXJyb3IoYFRoZSBcIiR7dH1cIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyYCl9aWYoIU51bWJlci5pc0ludGVnZXIocikpe3Rocm93IG5ldyBUeXBlRXJyb3IoYFRoZSBcIiR7dH1cIiBhcmd1bWVudCBtdXN0IGJlIGFuIGludGVnZXJgKX1pZihyPDEpe3Rocm93IG5ldyBSYW5nZUVycm9yKGBUaGUgXCIke3R9XCIgYXJndW1lbnQgbXVzdCBiZSA+PSAxYCl9fXJldHVybiByPT09dW5kZWZpbmVkP0luZmluaXR5OnJ9ZnVuY3Rpb24gZ2V0SXRlbUNvdW50KGUpe2lmKGU9PT0xKXtyZXR1cm5cIjEgaXRlbVwifXJldHVybmAke2V9IGl0ZW1zYH1mdW5jdGlvbiBnZXRVbmlxdWVSZXBsYWNlclNldChlKXtjb25zdCB0PW5ldyBTZXQ7Zm9yKGNvbnN0IG4gb2YgZSl7aWYodHlwZW9mIG49PT1cInN0cmluZ1wifHx0eXBlb2Ygbj09PVwibnVtYmVyXCIpe3QuYWRkKFN0cmluZyhuKSl9fXJldHVybiB0fWZ1bmN0aW9uIGdldFN0cmljdE9wdGlvbihlKXtpZihuLmNhbGwoZSxcInN0cmljdFwiKSl7Y29uc3QgdD1lLnN0cmljdDtpZih0eXBlb2YgdCE9PVwiYm9vbGVhblwiKXt0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJzdHJpY3RcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbicpfWlmKHQpe3JldHVybiBlPT57bGV0IHQ9YE9iamVjdCBjYW4gbm90IHNhZmVseSBiZSBzdHJpbmdpZmllZC4gUmVjZWl2ZWQgdHlwZSAke3R5cGVvZiBlfWA7aWYodHlwZW9mIGUhPT1cImZ1bmN0aW9uXCIpdCs9YCAoJHtlLnRvU3RyaW5nKCl9KWA7dGhyb3cgbmV3IEVycm9yKHQpfX19fWZ1bmN0aW9uIGNvbmZpZ3VyZShlKXtlPXsuLi5lfTtjb25zdCB0PWdldFN0cmljdE9wdGlvbihlKTtpZih0KXtpZihlLmJpZ2ludD09PXVuZGVmaW5lZCl7ZS5iaWdpbnQ9ZmFsc2V9aWYoIShcImNpcmN1bGFyVmFsdWVcImluIGUpKXtlLmNpcmN1bGFyVmFsdWU9RXJyb3J9fWNvbnN0IG49Z2V0Q2lyY3VsYXJWYWx1ZU9wdGlvbihlKTtjb25zdCByPWdldEJvb2xlYW5PcHRpb24oZSxcImJpZ2ludFwiKTtjb25zdCBpPWdldERldGVybWluaXN0aWNPcHRpb24oZSk7Y29uc3QgZj10eXBlb2YgaT09PVwiZnVuY3Rpb25cIj9pOnVuZGVmaW5lZDtjb25zdCB1PWdldFBvc2l0aXZlSW50ZWdlck9wdGlvbihlLFwibWF4aW11bURlcHRoXCIpO2NvbnN0IG89Z2V0UG9zaXRpdmVJbnRlZ2VyT3B0aW9uKGUsXCJtYXhpbXVtQnJlYWR0aFwiKTtmdW5jdGlvbiBzdHJpbmdpZnlGblJlcGxhY2VyKGUscyxsLGMsYSxnKXtsZXQgcD1zW2VdO2lmKHR5cGVvZiBwPT09XCJvYmplY3RcIiYmcCE9PW51bGwmJnR5cGVvZiBwLnRvSlNPTj09PVwiZnVuY3Rpb25cIil7cD1wLnRvSlNPTihlKX1wPWMuY2FsbChzLGUscCk7c3dpdGNoKHR5cGVvZiBwKXtjYXNlXCJzdHJpbmdcIjpyZXR1cm4gc3RyRXNjYXBlKHApO2Nhc2VcIm9iamVjdFwiOntpZihwPT09bnVsbCl7cmV0dXJuXCJudWxsXCJ9aWYobC5pbmRleE9mKHApIT09LTEpe3JldHVybiBufWxldCBlPVwiXCI7bGV0IHQ9XCIsXCI7Y29uc3Qgcj1nO2lmKEFycmF5LmlzQXJyYXkocCkpe2lmKHAubGVuZ3RoPT09MCl7cmV0dXJuXCJbXVwifWlmKHU8bC5sZW5ndGgrMSl7cmV0dXJuJ1wiW0FycmF5XVwiJ31sLnB1c2gocCk7aWYoYSE9PVwiXCIpe2crPWE7ZSs9YFxcbiR7Z31gO3Q9YCxcXG4ke2d9YH1jb25zdCBuPU1hdGgubWluKHAubGVuZ3RoLG8pO2xldCBpPTA7Zm9yKDtpPG4tMTtpKyspe2NvbnN0IG49c3RyaW5naWZ5Rm5SZXBsYWNlcihTdHJpbmcoaSkscCxsLGMsYSxnKTtlKz1uIT09dW5kZWZpbmVkP246XCJudWxsXCI7ZSs9dH1jb25zdCBmPXN0cmluZ2lmeUZuUmVwbGFjZXIoU3RyaW5nKGkpLHAsbCxjLGEsZyk7ZSs9ZiE9PXVuZGVmaW5lZD9mOlwibnVsbFwiO2lmKHAubGVuZ3RoLTE+byl7Y29uc3Qgbj1wLmxlbmd0aC1vLTE7ZSs9YCR7dH1cIi4uLiAke2dldEl0ZW1Db3VudChuKX0gbm90IHN0cmluZ2lmaWVkXCJgfWlmKGEhPT1cIlwiKXtlKz1gXFxuJHtyfWB9bC5wb3AoKTtyZXR1cm5gWyR7ZX1dYH1sZXQgcz1PYmplY3Qua2V5cyhwKTtjb25zdCB5PXMubGVuZ3RoO2lmKHk9PT0wKXtyZXR1cm5cInt9XCJ9aWYodTxsLmxlbmd0aCsxKXtyZXR1cm4nXCJbT2JqZWN0XVwiJ31sZXQgZD1cIlwiO2xldCBoPVwiXCI7aWYoYSE9PVwiXCIpe2crPWE7dD1gLFxcbiR7Z31gO2Q9XCIgXCJ9Y29uc3QgJD1NYXRoLm1pbih5LG8pO2lmKGkmJiFpc1R5cGVkQXJyYXlXaXRoRW50cmllcyhwKSl7cz1zb3J0KHMsZil9bC5wdXNoKHApO2ZvcihsZXQgbj0wO248JDtuKyspe2NvbnN0IHI9c1tuXTtjb25zdCBpPXN0cmluZ2lmeUZuUmVwbGFjZXIocixwLGwsYyxhLGcpO2lmKGkhPT11bmRlZmluZWQpe2UrPWAke2h9JHtzdHJFc2NhcGUocil9OiR7ZH0ke2l9YDtoPXR9fWlmKHk+byl7Y29uc3Qgbj15LW87ZSs9YCR7aH1cIi4uLlwiOiR7ZH1cIiR7Z2V0SXRlbUNvdW50KG4pfSBub3Qgc3RyaW5naWZpZWRcImA7aD10fWlmKGEhPT1cIlwiJiZoLmxlbmd0aD4xKXtlPWBcXG4ke2d9JHtlfVxcbiR7cn1gfWwucG9wKCk7cmV0dXJuYHske2V9fWB9Y2FzZVwibnVtYmVyXCI6cmV0dXJuIGlzRmluaXRlKHApP1N0cmluZyhwKTp0P3QocCk6XCJudWxsXCI7Y2FzZVwiYm9vbGVhblwiOnJldHVybiBwPT09dHJ1ZT9cInRydWVcIjpcImZhbHNlXCI7Y2FzZVwidW5kZWZpbmVkXCI6cmV0dXJuIHVuZGVmaW5lZDtjYXNlXCJiaWdpbnRcIjppZihyKXtyZXR1cm4gU3RyaW5nKHApfWRlZmF1bHQ6cmV0dXJuIHQ/dChwKTp1bmRlZmluZWR9fWZ1bmN0aW9uIHN0cmluZ2lmeUFycmF5UmVwbGFjZXIoZSxpLGYscyxsLGMpe2lmKHR5cGVvZiBpPT09XCJvYmplY3RcIiYmaSE9PW51bGwmJnR5cGVvZiBpLnRvSlNPTj09PVwiZnVuY3Rpb25cIil7aT1pLnRvSlNPTihlKX1zd2l0Y2godHlwZW9mIGkpe2Nhc2VcInN0cmluZ1wiOnJldHVybiBzdHJFc2NhcGUoaSk7Y2FzZVwib2JqZWN0XCI6e2lmKGk9PT1udWxsKXtyZXR1cm5cIm51bGxcIn1pZihmLmluZGV4T2YoaSkhPT0tMSl7cmV0dXJuIG59Y29uc3QgZT1jO2xldCB0PVwiXCI7bGV0IHI9XCIsXCI7aWYoQXJyYXkuaXNBcnJheShpKSl7aWYoaS5sZW5ndGg9PT0wKXtyZXR1cm5cIltdXCJ9aWYodTxmLmxlbmd0aCsxKXtyZXR1cm4nXCJbQXJyYXldXCInfWYucHVzaChpKTtpZihsIT09XCJcIil7Yys9bDt0Kz1gXFxuJHtjfWA7cj1gLFxcbiR7Y31gfWNvbnN0IG49TWF0aC5taW4oaS5sZW5ndGgsbyk7bGV0IGE9MDtmb3IoO2E8bi0xO2ErKyl7Y29uc3QgZT1zdHJpbmdpZnlBcnJheVJlcGxhY2VyKFN0cmluZyhhKSxpW2FdLGYscyxsLGMpO3QrPWUhPT11bmRlZmluZWQ/ZTpcIm51bGxcIjt0Kz1yfWNvbnN0IGc9c3RyaW5naWZ5QXJyYXlSZXBsYWNlcihTdHJpbmcoYSksaVthXSxmLHMsbCxjKTt0Kz1nIT09dW5kZWZpbmVkP2c6XCJudWxsXCI7aWYoaS5sZW5ndGgtMT5vKXtjb25zdCBlPWkubGVuZ3RoLW8tMTt0Kz1gJHtyfVwiLi4uICR7Z2V0SXRlbUNvdW50KGUpfSBub3Qgc3RyaW5naWZpZWRcImB9aWYobCE9PVwiXCIpe3QrPWBcXG4ke2V9YH1mLnBvcCgpO3JldHVybmBbJHt0fV1gfWYucHVzaChpKTtsZXQgYT1cIlwiO2lmKGwhPT1cIlwiKXtjKz1sO3I9YCxcXG4ke2N9YDthPVwiIFwifWxldCBnPVwiXCI7Zm9yKGNvbnN0IGUgb2Ygcyl7Y29uc3Qgbj1zdHJpbmdpZnlBcnJheVJlcGxhY2VyKGUsaVtlXSxmLHMsbCxjKTtpZihuIT09dW5kZWZpbmVkKXt0Kz1gJHtnfSR7c3RyRXNjYXBlKGUpfToke2F9JHtufWA7Zz1yfX1pZihsIT09XCJcIiYmZy5sZW5ndGg+MSl7dD1gXFxuJHtjfSR7dH1cXG4ke2V9YH1mLnBvcCgpO3JldHVybmB7JHt0fX1gfWNhc2VcIm51bWJlclwiOnJldHVybiBpc0Zpbml0ZShpKT9TdHJpbmcoaSk6dD90KGkpOlwibnVsbFwiO2Nhc2VcImJvb2xlYW5cIjpyZXR1cm4gaT09PXRydWU/XCJ0cnVlXCI6XCJmYWxzZVwiO2Nhc2VcInVuZGVmaW5lZFwiOnJldHVybiB1bmRlZmluZWQ7Y2FzZVwiYmlnaW50XCI6aWYocil7cmV0dXJuIFN0cmluZyhpKX1kZWZhdWx0OnJldHVybiB0P3QoaSk6dW5kZWZpbmVkfX1mdW5jdGlvbiBzdHJpbmdpZnlJbmRlbnQoZSxzLGwsYyxhKXtzd2l0Y2godHlwZW9mIHMpe2Nhc2VcInN0cmluZ1wiOnJldHVybiBzdHJFc2NhcGUocyk7Y2FzZVwib2JqZWN0XCI6e2lmKHM9PT1udWxsKXtyZXR1cm5cIm51bGxcIn1pZih0eXBlb2Ygcy50b0pTT049PT1cImZ1bmN0aW9uXCIpe3M9cy50b0pTT04oZSk7aWYodHlwZW9mIHMhPT1cIm9iamVjdFwiKXtyZXR1cm4gc3RyaW5naWZ5SW5kZW50KGUscyxsLGMsYSl9aWYocz09PW51bGwpe3JldHVyblwibnVsbFwifX1pZihsLmluZGV4T2YocykhPT0tMSl7cmV0dXJuIG59Y29uc3QgdD1hO2lmKEFycmF5LmlzQXJyYXkocykpe2lmKHMubGVuZ3RoPT09MCl7cmV0dXJuXCJbXVwifWlmKHU8bC5sZW5ndGgrMSl7cmV0dXJuJ1wiW0FycmF5XVwiJ31sLnB1c2gocyk7YSs9YztsZXQgZT1gXFxuJHthfWA7Y29uc3Qgbj1gLFxcbiR7YX1gO2NvbnN0IHI9TWF0aC5taW4ocy5sZW5ndGgsbyk7bGV0IGk9MDtmb3IoO2k8ci0xO2krKyl7Y29uc3QgdD1zdHJpbmdpZnlJbmRlbnQoU3RyaW5nKGkpLHNbaV0sbCxjLGEpO2UrPXQhPT11bmRlZmluZWQ/dDpcIm51bGxcIjtlKz1ufWNvbnN0IGY9c3RyaW5naWZ5SW5kZW50KFN0cmluZyhpKSxzW2ldLGwsYyxhKTtlKz1mIT09dW5kZWZpbmVkP2Y6XCJudWxsXCI7aWYocy5sZW5ndGgtMT5vKXtjb25zdCB0PXMubGVuZ3RoLW8tMTtlKz1gJHtufVwiLi4uICR7Z2V0SXRlbUNvdW50KHQpfSBub3Qgc3RyaW5naWZpZWRcImB9ZSs9YFxcbiR7dH1gO2wucG9wKCk7cmV0dXJuYFske2V9XWB9bGV0IHI9T2JqZWN0LmtleXMocyk7Y29uc3QgZz1yLmxlbmd0aDtpZihnPT09MCl7cmV0dXJuXCJ7fVwifWlmKHU8bC5sZW5ndGgrMSl7cmV0dXJuJ1wiW09iamVjdF1cIid9YSs9Yztjb25zdCBwPWAsXFxuJHthfWA7bGV0IHk9XCJcIjtsZXQgZD1cIlwiO2xldCBoPU1hdGgubWluKGcsbyk7aWYoaXNUeXBlZEFycmF5V2l0aEVudHJpZXMocykpe3krPXN0cmluZ2lmeVR5cGVkQXJyYXkocyxwLG8pO3I9ci5zbGljZShzLmxlbmd0aCk7aC09cy5sZW5ndGg7ZD1wfWlmKGkpe3I9c29ydChyLGYpfWwucHVzaChzKTtmb3IobGV0IGU9MDtlPGg7ZSsrKXtjb25zdCB0PXJbZV07Y29uc3Qgbj1zdHJpbmdpZnlJbmRlbnQodCxzW3RdLGwsYyxhKTtpZihuIT09dW5kZWZpbmVkKXt5Kz1gJHtkfSR7c3RyRXNjYXBlKHQpfTogJHtufWA7ZD1wfX1pZihnPm8pe2NvbnN0IGU9Zy1vO3krPWAke2R9XCIuLi5cIjogXCIke2dldEl0ZW1Db3VudChlKX0gbm90IHN0cmluZ2lmaWVkXCJgO2Q9cH1pZihkIT09XCJcIil7eT1gXFxuJHthfSR7eX1cXG4ke3R9YH1sLnBvcCgpO3JldHVybmB7JHt5fX1gfWNhc2VcIm51bWJlclwiOnJldHVybiBpc0Zpbml0ZShzKT9TdHJpbmcocyk6dD90KHMpOlwibnVsbFwiO2Nhc2VcImJvb2xlYW5cIjpyZXR1cm4gcz09PXRydWU/XCJ0cnVlXCI6XCJmYWxzZVwiO2Nhc2VcInVuZGVmaW5lZFwiOnJldHVybiB1bmRlZmluZWQ7Y2FzZVwiYmlnaW50XCI6aWYocil7cmV0dXJuIFN0cmluZyhzKX1kZWZhdWx0OnJldHVybiB0P3Qocyk6dW5kZWZpbmVkfX1mdW5jdGlvbiBzdHJpbmdpZnlTaW1wbGUoZSxzLGwpe3N3aXRjaCh0eXBlb2Ygcyl7Y2FzZVwic3RyaW5nXCI6cmV0dXJuIHN0ckVzY2FwZShzKTtjYXNlXCJvYmplY3RcIjp7aWYocz09PW51bGwpe3JldHVyblwibnVsbFwifWlmKHR5cGVvZiBzLnRvSlNPTj09PVwiZnVuY3Rpb25cIil7cz1zLnRvSlNPTihlKTtpZih0eXBlb2YgcyE9PVwib2JqZWN0XCIpe3JldHVybiBzdHJpbmdpZnlTaW1wbGUoZSxzLGwpfWlmKHM9PT1udWxsKXtyZXR1cm5cIm51bGxcIn19aWYobC5pbmRleE9mKHMpIT09LTEpe3JldHVybiBufWxldCB0PVwiXCI7Y29uc3Qgcj1zLmxlbmd0aCE9PXVuZGVmaW5lZDtpZihyJiZBcnJheS5pc0FycmF5KHMpKXtpZihzLmxlbmd0aD09PTApe3JldHVyblwiW11cIn1pZih1PGwubGVuZ3RoKzEpe3JldHVybidcIltBcnJheV1cIid9bC5wdXNoKHMpO2NvbnN0IGU9TWF0aC5taW4ocy5sZW5ndGgsbyk7bGV0IG49MDtmb3IoO248ZS0xO24rKyl7Y29uc3QgZT1zdHJpbmdpZnlTaW1wbGUoU3RyaW5nKG4pLHNbbl0sbCk7dCs9ZSE9PXVuZGVmaW5lZD9lOlwibnVsbFwiO3QrPVwiLFwifWNvbnN0IHI9c3RyaW5naWZ5U2ltcGxlKFN0cmluZyhuKSxzW25dLGwpO3QrPXIhPT11bmRlZmluZWQ/cjpcIm51bGxcIjtpZihzLmxlbmd0aC0xPm8pe2NvbnN0IGU9cy5sZW5ndGgtby0xO3QrPWAsXCIuLi4gJHtnZXRJdGVtQ291bnQoZSl9IG5vdCBzdHJpbmdpZmllZFwiYH1sLnBvcCgpO3JldHVybmBbJHt0fV1gfWxldCBjPU9iamVjdC5rZXlzKHMpO2NvbnN0IGE9Yy5sZW5ndGg7aWYoYT09PTApe3JldHVyblwie31cIn1pZih1PGwubGVuZ3RoKzEpe3JldHVybidcIltPYmplY3RdXCInfWxldCBnPVwiXCI7bGV0IHA9TWF0aC5taW4oYSxvKTtpZihyJiZpc1R5cGVkQXJyYXlXaXRoRW50cmllcyhzKSl7dCs9c3RyaW5naWZ5VHlwZWRBcnJheShzLFwiLFwiLG8pO2M9Yy5zbGljZShzLmxlbmd0aCk7cC09cy5sZW5ndGg7Zz1cIixcIn1pZihpKXtjPXNvcnQoYyxmKX1sLnB1c2gocyk7Zm9yKGxldCBlPTA7ZTxwO2UrKyl7Y29uc3Qgbj1jW2VdO2NvbnN0IHI9c3RyaW5naWZ5U2ltcGxlKG4sc1tuXSxsKTtpZihyIT09dW5kZWZpbmVkKXt0Kz1gJHtnfSR7c3RyRXNjYXBlKG4pfToke3J9YDtnPVwiLFwifX1pZihhPm8pe2NvbnN0IGU9YS1vO3QrPWAke2d9XCIuLi5cIjpcIiR7Z2V0SXRlbUNvdW50KGUpfSBub3Qgc3RyaW5naWZpZWRcImB9bC5wb3AoKTtyZXR1cm5geyR7dH19YH1jYXNlXCJudW1iZXJcIjpyZXR1cm4gaXNGaW5pdGUocyk/U3RyaW5nKHMpOnQ/dChzKTpcIm51bGxcIjtjYXNlXCJib29sZWFuXCI6cmV0dXJuIHM9PT10cnVlP1widHJ1ZVwiOlwiZmFsc2VcIjtjYXNlXCJ1bmRlZmluZWRcIjpyZXR1cm4gdW5kZWZpbmVkO2Nhc2VcImJpZ2ludFwiOmlmKHIpe3JldHVybiBTdHJpbmcocyl9ZGVmYXVsdDpyZXR1cm4gdD90KHMpOnVuZGVmaW5lZH19ZnVuY3Rpb24gc3RyaW5naWZ5KGUsdCxuKXtpZihhcmd1bWVudHMubGVuZ3RoPjEpe2xldCByPVwiXCI7aWYodHlwZW9mIG49PT1cIm51bWJlclwiKXtyPVwiIFwiLnJlcGVhdChNYXRoLm1pbihuLDEwKSl9ZWxzZSBpZih0eXBlb2Ygbj09PVwic3RyaW5nXCIpe3I9bi5zbGljZSgwLDEwKX1pZih0IT1udWxsKXtpZih0eXBlb2YgdD09PVwiZnVuY3Rpb25cIil7cmV0dXJuIHN0cmluZ2lmeUZuUmVwbGFjZXIoXCJcIix7XCJcIjplfSxbXSx0LHIsXCJcIil9aWYoQXJyYXkuaXNBcnJheSh0KSl7cmV0dXJuIHN0cmluZ2lmeUFycmF5UmVwbGFjZXIoXCJcIixlLFtdLGdldFVuaXF1ZVJlcGxhY2VyU2V0KHQpLHIsXCJcIil9fWlmKHIubGVuZ3RoIT09MCl7cmV0dXJuIHN0cmluZ2lmeUluZGVudChcIlwiLGUsW10scixcIlwiKX19cmV0dXJuIHN0cmluZ2lmeVNpbXBsZShcIlwiLGUsW10pfXJldHVybiBzdHJpbmdpZnl9fX07dmFyIHQ9e307ZnVuY3Rpb24gX19uY2N3cGNrX3JlcXVpcmVfXyhuKXt2YXIgcj10W25dO2lmKHIhPT11bmRlZmluZWQpe3JldHVybiByLmV4cG9ydHN9dmFyIGk9dFtuXT17ZXhwb3J0czp7fX07dmFyIGY9dHJ1ZTt0cnl7ZVtuXShpLGkuZXhwb3J0cyxfX25jY3dwY2tfcmVxdWlyZV9fKTtmPWZhbHNlfWZpbmFsbHl7aWYoZilkZWxldGUgdFtuXX1yZXR1cm4gaS5leHBvcnRzfWlmKHR5cGVvZiBfX25jY3dwY2tfcmVxdWlyZV9fIT09XCJ1bmRlZmluZWRcIilfX25jY3dwY2tfcmVxdWlyZV9fLmFiPV9fZGlybmFtZStcIi9cIjt2YXIgbj1fX25jY3dwY2tfcmVxdWlyZV9fKDg3OSk7bW9kdWxlLmV4cG9ydHM9bn0pKCk7Il0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/safe-stable-stringify/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/scheduler/cjs/scheduler.development.js":
|
||
/*!********************************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/scheduler/cjs/scheduler.development.js ***!
|
||
\********************************************************************************/
|
||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * @license React\n * scheduler.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n true &&\n (function () {\n function performWorkUntilDeadline() {\n needsPaint = !1;\n if (isMessageLoopRunning) {\n var currentTime = exports.unstable_now();\n startTime = currentTime;\n var hasMoreWork = !0;\n try {\n a: {\n isHostCallbackScheduled = !1;\n isHostTimeoutScheduled &&\n ((isHostTimeoutScheduled = !1),\n localClearTimeout(taskTimeoutID),\n (taskTimeoutID = -1));\n isPerformingWork = !0;\n var previousPriorityLevel = currentPriorityLevel;\n try {\n b: {\n advanceTimers(currentTime);\n for (\n currentTask = peek(taskQueue);\n null !== currentTask &&\n !(\n currentTask.expirationTime > currentTime &&\n shouldYieldToHost()\n );\n\n ) {\n var callback = currentTask.callback;\n if (\"function\" === typeof callback) {\n currentTask.callback = null;\n currentPriorityLevel = currentTask.priorityLevel;\n var continuationCallback = callback(\n currentTask.expirationTime <= currentTime\n );\n currentTime = exports.unstable_now();\n if (\"function\" === typeof continuationCallback) {\n currentTask.callback = continuationCallback;\n advanceTimers(currentTime);\n hasMoreWork = !0;\n break b;\n }\n currentTask === peek(taskQueue) && pop(taskQueue);\n advanceTimers(currentTime);\n } else pop(taskQueue);\n currentTask = peek(taskQueue);\n }\n if (null !== currentTask) hasMoreWork = !0;\n else {\n var firstTimer = peek(timerQueue);\n null !== firstTimer &&\n requestHostTimeout(\n handleTimeout,\n firstTimer.startTime - currentTime\n );\n hasMoreWork = !1;\n }\n }\n break a;\n } finally {\n (currentTask = null),\n (currentPriorityLevel = previousPriorityLevel),\n (isPerformingWork = !1);\n }\n hasMoreWork = void 0;\n }\n } finally {\n hasMoreWork\n ? schedulePerformWorkUntilDeadline()\n : (isMessageLoopRunning = !1);\n }\n }\n }\n function push(heap, node) {\n var index = heap.length;\n heap.push(node);\n a: for (; 0 < index; ) {\n var parentIndex = (index - 1) >>> 1,\n parent = heap[parentIndex];\n if (0 < compare(parent, node))\n (heap[parentIndex] = node),\n (heap[index] = parent),\n (index = parentIndex);\n else break a;\n }\n }\n function peek(heap) {\n return 0 === heap.length ? null : heap[0];\n }\n function pop(heap) {\n if (0 === heap.length) return null;\n var first = heap[0],\n last = heap.pop();\n if (last !== first) {\n heap[0] = last;\n a: for (\n var index = 0, length = heap.length, halfLength = length >>> 1;\n index < halfLength;\n\n ) {\n var leftIndex = 2 * (index + 1) - 1,\n left = heap[leftIndex],\n rightIndex = leftIndex + 1,\n right = heap[rightIndex];\n if (0 > compare(left, last))\n rightIndex < length && 0 > compare(right, left)\n ? ((heap[index] = right),\n (heap[rightIndex] = last),\n (index = rightIndex))\n : ((heap[index] = left),\n (heap[leftIndex] = last),\n (index = leftIndex));\n else if (rightIndex < length && 0 > compare(right, last))\n (heap[index] = right),\n (heap[rightIndex] = last),\n (index = rightIndex);\n else break a;\n }\n }\n return first;\n }\n function compare(a, b) {\n var diff = a.sortIndex - b.sortIndex;\n return 0 !== diff ? diff : a.id - b.id;\n }\n function advanceTimers(currentTime) {\n for (var timer = peek(timerQueue); null !== timer; ) {\n if (null === timer.callback) pop(timerQueue);\n else if (timer.startTime <= currentTime)\n pop(timerQueue),\n (timer.sortIndex = timer.expirationTime),\n push(taskQueue, timer);\n else break;\n timer = peek(timerQueue);\n }\n }\n function handleTimeout(currentTime) {\n isHostTimeoutScheduled = !1;\n advanceTimers(currentTime);\n if (!isHostCallbackScheduled)\n if (null !== peek(taskQueue))\n (isHostCallbackScheduled = !0),\n isMessageLoopRunning ||\n ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline());\n else {\n var firstTimer = peek(timerQueue);\n null !== firstTimer &&\n requestHostTimeout(\n handleTimeout,\n firstTimer.startTime - currentTime\n );\n }\n }\n function shouldYieldToHost() {\n return needsPaint\n ? !0\n : exports.unstable_now() - startTime < frameInterval\n ? !1\n : !0;\n }\n function requestHostTimeout(callback, ms) {\n taskTimeoutID = localSetTimeout(function () {\n callback(exports.unstable_now());\n }, ms);\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n exports.unstable_now = void 0;\n if (\n \"object\" === typeof performance &&\n \"function\" === typeof performance.now\n ) {\n var localPerformance = performance;\n exports.unstable_now = function () {\n return localPerformance.now();\n };\n } else {\n var localDate = Date,\n initialTime = localDate.now();\n exports.unstable_now = function () {\n return localDate.now() - initialTime;\n };\n }\n var taskQueue = [],\n timerQueue = [],\n taskIdCounter = 1,\n currentTask = null,\n currentPriorityLevel = 3,\n isPerformingWork = !1,\n isHostCallbackScheduled = !1,\n isHostTimeoutScheduled = !1,\n needsPaint = !1,\n localSetTimeout = \"function\" === typeof setTimeout ? setTimeout : null,\n localClearTimeout =\n \"function\" === typeof clearTimeout ? clearTimeout : null,\n localSetImmediate =\n \"undefined\" !== typeof setImmediate ? setImmediate : null,\n isMessageLoopRunning = !1,\n taskTimeoutID = -1,\n frameInterval = 5,\n startTime = -1;\n if (\"function\" === typeof localSetImmediate)\n var schedulePerformWorkUntilDeadline = function () {\n localSetImmediate(performWorkUntilDeadline);\n };\n else if (\"undefined\" !== typeof MessageChannel) {\n var channel = new MessageChannel(),\n port = channel.port2;\n channel.port1.onmessage = performWorkUntilDeadline;\n schedulePerformWorkUntilDeadline = function () {\n port.postMessage(null);\n };\n } else\n schedulePerformWorkUntilDeadline = function () {\n localSetTimeout(performWorkUntilDeadline, 0);\n };\n exports.unstable_IdlePriority = 5;\n exports.unstable_ImmediatePriority = 1;\n exports.unstable_LowPriority = 4;\n exports.unstable_NormalPriority = 3;\n exports.unstable_Profiling = null;\n exports.unstable_UserBlockingPriority = 2;\n exports.unstable_cancelCallback = function (task) {\n task.callback = null;\n };\n exports.unstable_forceFrameRate = function (fps) {\n 0 > fps || 125 < fps\n ? console.error(\n \"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"\n )\n : (frameInterval = 0 < fps ? Math.floor(1e3 / fps) : 5);\n };\n exports.unstable_getCurrentPriorityLevel = function () {\n return currentPriorityLevel;\n };\n exports.unstable_next = function (eventHandler) {\n switch (currentPriorityLevel) {\n case 1:\n case 2:\n case 3:\n var priorityLevel = 3;\n break;\n default:\n priorityLevel = currentPriorityLevel;\n }\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n };\n exports.unstable_requestPaint = function () {\n needsPaint = !0;\n };\n exports.unstable_runWithPriority = function (priorityLevel, eventHandler) {\n switch (priorityLevel) {\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n break;\n default:\n priorityLevel = 3;\n }\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n };\n exports.unstable_scheduleCallback = function (\n priorityLevel,\n callback,\n options\n ) {\n var currentTime = exports.unstable_now();\n \"object\" === typeof options && null !== options\n ? ((options = options.delay),\n (options =\n \"number\" === typeof options && 0 < options\n ? currentTime + options\n : currentTime))\n : (options = currentTime);\n switch (priorityLevel) {\n case 1:\n var timeout = -1;\n break;\n case 2:\n timeout = 250;\n break;\n case 5:\n timeout = 1073741823;\n break;\n case 4:\n timeout = 1e4;\n break;\n default:\n timeout = 5e3;\n }\n timeout = options + timeout;\n priorityLevel = {\n id: taskIdCounter++,\n callback: callback,\n priorityLevel: priorityLevel,\n startTime: options,\n expirationTime: timeout,\n sortIndex: -1\n };\n options > currentTime\n ? ((priorityLevel.sortIndex = options),\n push(timerQueue, priorityLevel),\n null === peek(taskQueue) &&\n priorityLevel === peek(timerQueue) &&\n (isHostTimeoutScheduled\n ? (localClearTimeout(taskTimeoutID), (taskTimeoutID = -1))\n : (isHostTimeoutScheduled = !0),\n requestHostTimeout(handleTimeout, options - currentTime)))\n : ((priorityLevel.sortIndex = timeout),\n push(taskQueue, priorityLevel),\n isHostCallbackScheduled ||\n isPerformingWork ||\n ((isHostCallbackScheduled = !0),\n isMessageLoopRunning ||\n ((isMessageLoopRunning = !0),\n schedulePerformWorkUntilDeadline())));\n return priorityLevel;\n };\n exports.unstable_shouldYield = shouldYieldToHost;\n exports.unstable_wrapCallback = function (callback) {\n var parentPriorityLevel = currentPriorityLevel;\n return function () {\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = parentPriorityLevel;\n try {\n return callback.apply(this, arguments);\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n };\n };\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvc2NoZWR1bGVyL2Nqcy9zY2hlZHVsZXIuZGV2ZWxvcG1lbnQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhO0FBQ2IsS0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixXQUFXO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsZ0JBQWdCO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sb0JBQW9CO0FBQzFCO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU0sb0JBQW9CO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsSUFBSSw2QkFBNkI7QUFDakMsSUFBSSxrQ0FBa0M7QUFDdEMsSUFBSSw0QkFBNEI7QUFDaEMsSUFBSSwrQkFBK0I7QUFDbkMsSUFBSSwwQkFBMEI7QUFDOUIsSUFBSSxxQ0FBcUM7QUFDekMsSUFBSSwrQkFBK0I7QUFDbkM7QUFDQTtBQUNBLElBQUksK0JBQStCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksd0NBQXdDO0FBQzVDO0FBQ0E7QUFDQSxJQUFJLHFCQUFxQjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxJQUFJLDZCQUE2QjtBQUNqQztBQUNBO0FBQ0EsSUFBSSxnQ0FBZ0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxJQUFJLGlDQUFpQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSw0QkFBNEI7QUFDaEMsSUFBSSw2QkFBNkI7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHIiwic291cmNlcyI6WyIvaG9tZS9OaWNob2xhaS9Eb2N1bWVudHMvRGV2L2Jpb2hhemFyZC12ZngtMS9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLmRldmVsb3BtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHNjaGVkdWxlci5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgJiZcbiAgKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBwZXJmb3JtV29ya1VudGlsRGVhZGxpbmUoKSB7XG4gICAgICBuZWVkc1BhaW50ID0gITE7XG4gICAgICBpZiAoaXNNZXNzYWdlTG9vcFJ1bm5pbmcpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcbiAgICAgICAgc3RhcnRUaW1lID0gY3VycmVudFRpbWU7XG4gICAgICAgIHZhciBoYXNNb3JlV29yayA9ICEwO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gITE7XG4gICAgICAgICAgICBpc0hvc3RUaW1lb3V0U2NoZWR1bGVkICYmXG4gICAgICAgICAgICAgICgoaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9ICExKSxcbiAgICAgICAgICAgICAgbG9jYWxDbGVhclRpbWVvdXQodGFza1RpbWVvdXRJRCksXG4gICAgICAgICAgICAgICh0YXNrVGltZW91dElEID0gLTEpKTtcbiAgICAgICAgICAgIGlzUGVyZm9ybWluZ1dvcmsgPSAhMDtcbiAgICAgICAgICAgIHZhciBwcmV2aW91c1ByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKTtcbiAgICAgICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgICAgY3VycmVudFRhc2sgPSBwZWVrKHRhc2tRdWV1ZSk7XG4gICAgICAgICAgICAgICAgICBudWxsICE9PSBjdXJyZW50VGFzayAmJlxuICAgICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRhc2suZXhwaXJhdGlvblRpbWUgPiBjdXJyZW50VGltZSAmJlxuICAgICAgICAgICAgICAgICAgICBzaG91bGRZaWVsZFRvSG9zdCgpXG4gICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBjdXJyZW50VGFzay5jYWxsYmFjaztcbiAgICAgICAgICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGFzay5jYWxsYmFjayA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gY3VycmVudFRhc2sucHJpb3JpdHlMZXZlbDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRpbnVhdGlvbkNhbGxiYWNrID0gY2FsbGJhY2soXG4gICAgICAgICAgICAgICAgICAgICAgY3VycmVudFRhc2suZXhwaXJhdGlvblRpbWUgPD0gY3VycmVudFRpbWVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY29udGludWF0aW9uQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGFzay5jYWxsYmFjayA9IGNvbnRpbnVhdGlvbkNhbGxiYWNrO1xuICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpO1xuICAgICAgICAgICAgICAgICAgICAgIGhhc01vcmVXb3JrID0gITA7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGFzayA9PT0gcGVlayh0YXNrUXVldWUpICYmIHBvcCh0YXNrUXVldWUpO1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBwb3AodGFza1F1ZXVlKTtcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRUYXNrID0gcGVlayh0YXNrUXVldWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobnVsbCAhPT0gY3VycmVudFRhc2spIGhhc01vcmVXb3JrID0gITA7XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICB2YXIgZmlyc3RUaW1lciA9IHBlZWsodGltZXJRdWV1ZSk7XG4gICAgICAgICAgICAgICAgICBudWxsICE9PSBmaXJzdFRpbWVyICYmXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RIb3N0VGltZW91dChcbiAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVUaW1lb3V0LFxuICAgICAgICAgICAgICAgICAgICAgIGZpcnN0VGltZXIuc3RhcnRUaW1lIC0gY3VycmVudFRpbWVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGhhc01vcmVXb3JrID0gITE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAoY3VycmVudFRhc2sgPSBudWxsKSxcbiAgICAgICAgICAgICAgICAoY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWwpLFxuICAgICAgICAgICAgICAgIChpc1BlcmZvcm1pbmdXb3JrID0gITEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaGFzTW9yZVdvcmsgPSB2b2lkIDA7XG4gICAgICAgICAgfVxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGhhc01vcmVXb3JrXG4gICAgICAgICAgICA/IHNjaGVkdWxlUGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lKClcbiAgICAgICAgICAgIDogKGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gITEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2goaGVhcCwgbm9kZSkge1xuICAgICAgdmFyIGluZGV4ID0gaGVhcC5sZW5ndGg7XG4gICAgICBoZWFwLnB1c2gobm9kZSk7XG4gICAgICBhOiBmb3IgKDsgMCA8IGluZGV4OyApIHtcbiAgICAgICAgdmFyIHBhcmVudEluZGV4ID0gKGluZGV4IC0gMSkgPj4+IDEsXG4gICAgICAgICAgcGFyZW50ID0gaGVhcFtwYXJlbnRJbmRleF07XG4gICAgICAgIGlmICgwIDwgY29tcGFyZShwYXJlbnQsIG5vZGUpKVxuICAgICAgICAgIChoZWFwW3BhcmVudEluZGV4XSA9IG5vZGUpLFxuICAgICAgICAgICAgKGhlYXBbaW5kZXhdID0gcGFyZW50KSxcbiAgICAgICAgICAgIChpbmRleCA9IHBhcmVudEluZGV4KTtcbiAgICAgICAgZWxzZSBicmVhayBhO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBwZWVrKGhlYXApIHtcbiAgICAgIHJldHVybiAwID09PSBoZWFwLmxlbmd0aCA/IG51bGwgOiBoZWFwWzBdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwb3AoaGVhcCkge1xuICAgICAgaWYgKDAgPT09IGhlYXAubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICAgIHZhciBmaXJzdCA9IGhlYXBbMF0sXG4gICAgICAgIGxhc3QgPSBoZWFwLnBvcCgpO1xuICAgICAgaWYgKGxhc3QgIT09IGZpcnN0KSB7XG4gICAgICAgIGhlYXBbMF0gPSBsYXN0O1xuICAgICAgICBhOiBmb3IgKFxuICAgICAgICAgIHZhciBpbmRleCA9IDAsIGxlbmd0aCA9IGhlYXAubGVuZ3RoLCBoYWxmTGVuZ3RoID0gbGVuZ3RoID4+PiAxO1xuICAgICAgICAgIGluZGV4IDwgaGFsZkxlbmd0aDtcblxuICAgICAgICApIHtcbiAgICAgICAgICB2YXIgbGVmdEluZGV4ID0gMiAqIChpbmRleCArIDEpIC0gMSxcbiAgICAgICAgICAgIGxlZnQgPSBoZWFwW2xlZnRJbmRleF0sXG4gICAgICAgICAgICByaWdodEluZGV4ID0gbGVmdEluZGV4ICsgMSxcbiAgICAgICAgICAgIHJpZ2h0ID0gaGVhcFtyaWdodEluZGV4XTtcbiAgICAgICAgICBpZiAoMCA+IGNvbXBhcmUobGVmdCwgbGFzdCkpXG4gICAgICAgICAgICByaWdodEluZGV4IDwgbGVuZ3RoICYmIDAgPiBjb21wYXJlKHJpZ2h0LCBsZWZ0KVxuICAgICAgICAgICAgICA/ICgoaGVhcFtpbmRleF0gPSByaWdodCksXG4gICAgICAgICAgICAgICAgKGhlYXBbcmlnaHRJbmRleF0gPSBsYXN0KSxcbiAgICAgICAgICAgICAgICAoaW5kZXggPSByaWdodEluZGV4KSlcbiAgICAgICAgICAgICAgOiAoKGhlYXBbaW5kZXhdID0gbGVmdCksXG4gICAgICAgICAgICAgICAgKGhlYXBbbGVmdEluZGV4XSA9IGxhc3QpLFxuICAgICAgICAgICAgICAgIChpbmRleCA9IGxlZnRJbmRleCkpO1xuICAgICAgICAgIGVsc2UgaWYgKHJpZ2h0SW5kZXggPCBsZW5ndGggJiYgMCA+IGNvbXBhcmUocmlnaHQsIGxhc3QpKVxuICAgICAgICAgICAgKGhlYXBbaW5kZXhdID0gcmlnaHQpLFxuICAgICAgICAgICAgICAoaGVhcFtyaWdodEluZGV4XSA9IGxhc3QpLFxuICAgICAgICAgICAgICAoaW5kZXggPSByaWdodEluZGV4KTtcbiAgICAgICAgICBlbHNlIGJyZWFrIGE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmaXJzdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tcGFyZShhLCBiKSB7XG4gICAgICB2YXIgZGlmZiA9IGEuc29ydEluZGV4IC0gYi5zb3J0SW5kZXg7XG4gICAgICByZXR1cm4gMCAhPT0gZGlmZiA/IGRpZmYgOiBhLmlkIC0gYi5pZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWR2YW5jZVRpbWVycyhjdXJyZW50VGltZSkge1xuICAgICAgZm9yICh2YXIgdGltZXIgPSBwZWVrKHRpbWVyUXVldWUpOyBudWxsICE9PSB0aW1lcjsgKSB7XG4gICAgICAgIGlmIChudWxsID09PSB0aW1lci5jYWxsYmFjaykgcG9wKHRpbWVyUXVldWUpO1xuICAgICAgICBlbHNlIGlmICh0aW1lci5zdGFydFRpbWUgPD0gY3VycmVudFRpbWUpXG4gICAgICAgICAgcG9wKHRpbWVyUXVldWUpLFxuICAgICAgICAgICAgKHRpbWVyLnNvcnRJbmRleCA9IHRpbWVyLmV4cGlyYXRpb25UaW1lKSxcbiAgICAgICAgICAgIHB1c2godGFza1F1ZXVlLCB0aW1lcik7XG4gICAgICAgIGVsc2UgYnJlYWs7XG4gICAgICAgIHRpbWVyID0gcGVlayh0aW1lclF1ZXVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaGFuZGxlVGltZW91dChjdXJyZW50VGltZSkge1xuICAgICAgaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9ICExO1xuICAgICAgYWR2YW5jZVRpbWVycyhjdXJyZW50VGltZSk7XG4gICAgICBpZiAoIWlzSG9zdENhbGxiYWNrU2NoZWR1bGVkKVxuICAgICAgICBpZiAobnVsbCAhPT0gcGVlayh0YXNrUXVldWUpKVxuICAgICAgICAgIChpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9ICEwKSxcbiAgICAgICAgICAgIGlzTWVzc2FnZUxvb3BSdW5uaW5nIHx8XG4gICAgICAgICAgICAgICgoaXNNZXNzYWdlTG9vcFJ1bm5pbmcgPSAhMCksIHNjaGVkdWxlUGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lKCkpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB2YXIgZmlyc3RUaW1lciA9IHBlZWsodGltZXJRdWV1ZSk7XG4gICAgICAgICAgbnVsbCAhPT0gZmlyc3RUaW1lciAmJlxuICAgICAgICAgICAgcmVxdWVzdEhvc3RUaW1lb3V0KFxuICAgICAgICAgICAgICBoYW5kbGVUaW1lb3V0LFxuICAgICAgICAgICAgICBmaXJzdFRpbWVyLnN0YXJ0VGltZSAtIGN1cnJlbnRUaW1lXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNob3VsZFlpZWxkVG9Ib3N0KCkge1xuICAgICAgcmV0dXJuIG5lZWRzUGFpbnRcbiAgICAgICAgPyAhMFxuICAgICAgICA6IGV4cG9ydHMudW5zdGFibGVfbm93KCkgLSBzdGFydFRpbWUgPCBmcmFtZUludGVydmFsXG4gICAgICAgICAgPyAhMVxuICAgICAgICAgIDogITA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcXVlc3RIb3N0VGltZW91dChjYWxsYmFjaywgbXMpIHtcbiAgICAgIHRhc2tUaW1lb3V0SUQgPSBsb2NhbFNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBjYWxsYmFjayhleHBvcnRzLnVuc3RhYmxlX25vdygpKTtcbiAgICAgIH0sIG1zKTtcbiAgICB9XG4gICAgXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAmJlxuICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdGFydCAmJlxuICAgICAgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdGFydChFcnJvcigpKTtcbiAgICBleHBvcnRzLnVuc3RhYmxlX25vdyA9IHZvaWQgMDtcbiAgICBpZiAoXG4gICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgcGVyZm9ybWFuY2UgJiZcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHBlcmZvcm1hbmNlLm5vd1xuICAgICkge1xuICAgICAgdmFyIGxvY2FsUGVyZm9ybWFuY2UgPSBwZXJmb3JtYW5jZTtcbiAgICAgIGV4cG9ydHMudW5zdGFibGVfbm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbG9jYWxQZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBsb2NhbERhdGUgPSBEYXRlLFxuICAgICAgICBpbml0aWFsVGltZSA9IGxvY2FsRGF0ZS5ub3coKTtcbiAgICAgIGV4cG9ydHMudW5zdGFibGVfbm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbG9jYWxEYXRlLm5vdygpIC0gaW5pdGlhbFRpbWU7XG4gICAgICB9O1xuICAgIH1cbiAgICB2YXIgdGFza1F1ZXVlID0gW10sXG4gICAgICB0aW1lclF1ZXVlID0gW10sXG4gICAgICB0YXNrSWRDb3VudGVyID0gMSxcbiAgICAgIGN1cnJlbnRUYXNrID0gbnVsbCxcbiAgICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gMyxcbiAgICAgIGlzUGVyZm9ybWluZ1dvcmsgPSAhMSxcbiAgICAgIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gITEsXG4gICAgICBpc0hvc3RUaW1lb3V0U2NoZWR1bGVkID0gITEsXG4gICAgICBuZWVkc1BhaW50ID0gITEsXG4gICAgICBsb2NhbFNldFRpbWVvdXQgPSBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBzZXRUaW1lb3V0ID8gc2V0VGltZW91dCA6IG51bGwsXG4gICAgICBsb2NhbENsZWFyVGltZW91dCA9XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGNsZWFyVGltZW91dCA/IGNsZWFyVGltZW91dCA6IG51bGwsXG4gICAgICBsb2NhbFNldEltbWVkaWF0ZSA9XG4gICAgICAgIFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiBzZXRJbW1lZGlhdGUgPyBzZXRJbW1lZGlhdGUgOiBudWxsLFxuICAgICAgaXNNZXNzYWdlTG9vcFJ1bm5pbmcgPSAhMSxcbiAgICAgIHRhc2tUaW1lb3V0SUQgPSAtMSxcbiAgICAgIGZyYW1lSW50ZXJ2YWwgPSA1LFxuICAgICAgc3RhcnRUaW1lID0gLTE7XG4gICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGxvY2FsU2V0SW1tZWRpYXRlKVxuICAgICAgdmFyIHNjaGVkdWxlUGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBsb2NhbFNldEltbWVkaWF0ZShwZXJmb3JtV29ya1VudGlsRGVhZGxpbmUpO1xuICAgICAgfTtcbiAgICBlbHNlIGlmIChcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgTWVzc2FnZUNoYW5uZWwpIHtcbiAgICAgIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCksXG4gICAgICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBwZXJmb3JtV29ya1VudGlsRGVhZGxpbmU7XG4gICAgICBzY2hlZHVsZVBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcG9ydC5wb3N0TWVzc2FnZShudWxsKTtcbiAgICAgIH07XG4gICAgfSBlbHNlXG4gICAgICBzY2hlZHVsZVBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbG9jYWxTZXRUaW1lb3V0KHBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZSwgMCk7XG4gICAgICB9O1xuICAgIGV4cG9ydHMudW5zdGFibGVfSWRsZVByaW9yaXR5ID0gNTtcbiAgICBleHBvcnRzLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5ID0gMTtcbiAgICBleHBvcnRzLnVuc3RhYmxlX0xvd1ByaW9yaXR5ID0gNDtcbiAgICBleHBvcnRzLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5ID0gMztcbiAgICBleHBvcnRzLnVuc3RhYmxlX1Byb2ZpbGluZyA9IG51bGw7XG4gICAgZXhwb3J0cy51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eSA9IDI7XG4gICAgZXhwb3J0cy51bnN0YWJsZV9jYW5jZWxDYWxsYmFjayA9IGZ1bmN0aW9uICh0YXNrKSB7XG4gICAgICB0YXNrLmNhbGxiYWNrID0gbnVsbDtcbiAgICB9O1xuICAgIGV4cG9ydHMudW5zdGFibGVfZm9yY2VGcmFtZVJhdGUgPSBmdW5jdGlvbiAoZnBzKSB7XG4gICAgICAwID4gZnBzIHx8IDEyNSA8IGZwc1xuICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcImZvcmNlRnJhbWVSYXRlIHRha2VzIGEgcG9zaXRpdmUgaW50IGJldHdlZW4gMCBhbmQgMTI1LCBmb3JjaW5nIGZyYW1lIHJhdGVzIGhpZ2hlciB0aGFuIDEyNSBmcHMgaXMgbm90IHN1cHBvcnRlZFwiXG4gICAgICAgICAgKVxuICAgICAgICA6IChmcmFtZUludGVydmFsID0gMCA8IGZwcyA/IE1hdGguZmxvb3IoMWUzIC8gZnBzKSA6IDUpO1xuICAgIH07XG4gICAgZXhwb3J0cy51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgICB9O1xuICAgIGV4cG9ydHMudW5zdGFibGVfbmV4dCA9IGZ1bmN0aW9uIChldmVudEhhbmRsZXIpIHtcbiAgICAgIHN3aXRjaCAoY3VycmVudFByaW9yaXR5TGV2ZWwpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICBjYXNlIDI6XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICB2YXIgcHJpb3JpdHlMZXZlbCA9IDM7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICAgICAgfVxuICAgICAgdmFyIHByZXZpb3VzUHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICAgICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmlvcml0eUxldmVsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGV2ZW50SGFuZGxlcigpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWw7XG4gICAgICB9XG4gICAgfTtcbiAgICBleHBvcnRzLnVuc3RhYmxlX3JlcXVlc3RQYWludCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG5lZWRzUGFpbnQgPSAhMDtcbiAgICB9O1xuICAgIGV4cG9ydHMudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5ID0gZnVuY3Rpb24gKHByaW9yaXR5TGV2ZWwsIGV2ZW50SGFuZGxlcikge1xuICAgICAgc3dpdGNoIChwcmlvcml0eUxldmVsKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICBjYXNlIDM6XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHByaW9yaXR5TGV2ZWwgPSAzO1xuICAgICAgfVxuICAgICAgdmFyIHByZXZpb3VzUHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICAgICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmlvcml0eUxldmVsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGV2ZW50SGFuZGxlcigpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWw7XG4gICAgICB9XG4gICAgfTtcbiAgICBleHBvcnRzLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoXG4gICAgICBwcmlvcml0eUxldmVsLFxuICAgICAgY2FsbGJhY2ssXG4gICAgICBvcHRpb25zXG4gICAgKSB7XG4gICAgICB2YXIgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpO1xuICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIG9wdGlvbnMgJiYgbnVsbCAhPT0gb3B0aW9uc1xuICAgICAgICA/ICgob3B0aW9ucyA9IG9wdGlvbnMuZGVsYXkpLFxuICAgICAgICAgIChvcHRpb25zID1cbiAgICAgICAgICAgIFwibnVtYmVyXCIgPT09IHR5cGVvZiBvcHRpb25zICYmIDAgPCBvcHRpb25zXG4gICAgICAgICAgICAgID8gY3VycmVudFRpbWUgKyBvcHRpb25zXG4gICAgICAgICAgICAgIDogY3VycmVudFRpbWUpKVxuICAgICAgICA6IChvcHRpb25zID0gY3VycmVudFRpbWUpO1xuICAgICAgc3dpdGNoIChwcmlvcml0eUxldmVsKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICB2YXIgdGltZW91dCA9IC0xO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgdGltZW91dCA9IDI1MDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHRpbWVvdXQgPSAxMDczNzQxODIzO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgdGltZW91dCA9IDFlNDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aW1lb3V0ID0gNWUzO1xuICAgICAgfVxuICAgICAgdGltZW91dCA9IG9wdGlvbnMgKyB0aW1lb3V0O1xuICAgICAgcHJpb3JpdHlMZXZlbCA9IHtcbiAgICAgICAgaWQ6IHRhc2tJZENvdW50ZXIrKyxcbiAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrLFxuICAgICAgICBwcmlvcml0eUxldmVsOiBwcmlvcml0eUxldmVsLFxuICAgICAgICBzdGFydFRpbWU6IG9wdGlvbnMsXG4gICAgICAgIGV4cGlyYXRpb25UaW1lOiB0aW1lb3V0LFxuICAgICAgICBzb3J0SW5kZXg6IC0xXG4gICAgICB9O1xuICAgICAgb3B0aW9ucyA+IGN1cnJlbnRUaW1lXG4gICAgICAgID8gKChwcmlvcml0eUxldmVsLnNvcnRJbmRleCA9IG9wdGlvbnMpLFxuICAgICAgICAgIHB1c2godGltZXJRdWV1ZSwgcHJpb3JpdHlMZXZlbCksXG4gICAgICAgICAgbnVsbCA9PT0gcGVlayh0YXNrUXVldWUpICYmXG4gICAgICAgICAgICBwcmlvcml0eUxldmVsID09PSBwZWVrKHRpbWVyUXVldWUpICYmXG4gICAgICAgICAgICAoaXNIb3N0VGltZW91dFNjaGVkdWxlZFxuICAgICAgICAgICAgICA/IChsb2NhbENsZWFyVGltZW91dCh0YXNrVGltZW91dElEKSwgKHRhc2tUaW1lb3V0SUQgPSAtMSkpXG4gICAgICAgICAgICAgIDogKGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQgPSAhMCksXG4gICAgICAgICAgICByZXF1ZXN0SG9zdFRpbWVvdXQoaGFuZGxlVGltZW91dCwgb3B0aW9ucyAtIGN1cnJlbnRUaW1lKSkpXG4gICAgICAgIDogKChwcmlvcml0eUxldmVsLnNvcnRJbmRleCA9IHRpbWVvdXQpLFxuICAgICAgICAgIHB1c2godGFza1F1ZXVlLCBwcmlvcml0eUxldmVsKSxcbiAgICAgICAgICBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCB8fFxuICAgICAgICAgICAgaXNQZXJmb3JtaW5nV29yayB8fFxuICAgICAgICAgICAgKChpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9ICEwKSxcbiAgICAgICAgICAgIGlzTWVzc2FnZUxvb3BSdW5uaW5nIHx8XG4gICAgICAgICAgICAgICgoaXNNZXNzYWdlTG9vcFJ1bm5pbmcgPSAhMCksXG4gICAgICAgICAgICAgIHNjaGVkdWxlUGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lKCkpKSk7XG4gICAgICByZXR1cm4gcHJpb3JpdHlMZXZlbDtcbiAgICB9O1xuICAgIGV4cG9ydHMudW5zdGFibGVfc2hvdWxkWWllbGQgPSBzaG91bGRZaWVsZFRvSG9zdDtcbiAgICBleHBvcnRzLnVuc3RhYmxlX3dyYXBDYWxsYmFjayA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgdmFyIHBhcmVudFByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwcmV2aW91c1ByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgICAgICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwYXJlbnRQcmlvcml0eUxldmVsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJldmlvdXNQcmlvcml0eUxldmVsO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG4gICAgXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAmJlxuICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdG9wICYmXG4gICAgICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0b3AoRXJyb3IoKSk7XG4gIH0pKCk7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/scheduler/cjs/scheduler.development.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/scheduler/index.js":
|
||
/*!************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/scheduler/index.js ***!
|
||
\************************************************************/
|
||
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/scheduler.development.js */ \"(app-pages-browser)/./node_modules/next/dist/compiled/scheduler/cjs/scheduler.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvc2NoZWR1bGVyL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLElBQUksS0FBcUMsRUFBRSxFQUUxQyxDQUFDO0FBQ0YsRUFBRSwwS0FBMEQ7QUFDNUQiLCJzb3VyY2VzIjpbIi9ob21lL05pY2hvbGFpL0RvY3VtZW50cy9EZXYvYmlvaGF6YXJkLXZmeC0xL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvc2NoZWR1bGVyL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9zY2hlZHVsZXIucHJvZHVjdGlvbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9zY2hlZHVsZXIuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/scheduler/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/strip-ansi/index.js":
|
||
/*!*************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/strip-ansi/index.js ***!
|
||
\*************************************************************/
|
||
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("var __dirname = \"/\";\n\n(()=>{\n \"use strict\";\n var e = {\n 511: (e)=>{\n e.exports = function() {\n let { onlyFirst: e = false } = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};\n const r = [\n \"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)\",\n \"(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))\"\n ].join(\"|\");\n return new RegExp(r, e ? undefined : \"g\");\n };\n },\n 532: (e, r, _)=>{\n const t = _(511);\n e.exports = (e)=>typeof e === \"string\" ? e.replace(t(), \"\") : e;\n }\n };\n var r = {};\n function __nccwpck_require__(_) {\n var t = r[_];\n if (t !== undefined) {\n return t.exports;\n }\n var a = r[_] = {\n exports: {}\n };\n var n = true;\n try {\n e[_](a, a.exports, __nccwpck_require__);\n n = false;\n } finally{\n if (n) delete r[_];\n }\n return a.exports;\n }\n if (typeof __nccwpck_require__ !== \"undefined\") __nccwpck_require__.ab = __dirname + \"/\";\n var _ = __nccwpck_require__(532);\n module.exports = _;\n})();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvc3RyaXAtYW5zaS9pbmRleC5qcyIsIm1hcHBpbmdzIjoiOztBQUFDO0lBQUs7SUFBYSxJQUFJQSxJQUFFO1FBQUMsS0FBSUEsQ0FBQUE7WUFBSUEsRUFBRUMsT0FBTyxHQUFDO29CQUFDLEVBQUNDLFdBQVVGLElBQUUsS0FBSyxFQUFDLG9FQUFDLENBQUM7Z0JBQUssTUFBTUcsSUFBRTtvQkFBQztvQkFBK0g7aUJBQTJELENBQUNDLElBQUksQ0FBQztnQkFBSyxPQUFPLElBQUlDLE9BQU9GLEdBQUVILElBQUVNLFlBQVU7WUFBSTtRQUFDO1FBQUUsS0FBSSxDQUFDTixHQUFFRyxHQUFFSTtZQUFLLE1BQU1DLElBQUVELEVBQUU7WUFBS1AsRUFBRUMsT0FBTyxHQUFDRCxDQUFBQSxJQUFHLE9BQU9BLE1BQUksV0FBU0EsRUFBRVMsT0FBTyxDQUFDRCxLQUFJLE1BQUlSO1FBQUM7SUFBQztJQUFFLElBQUlHLElBQUUsQ0FBQztJQUFFLFNBQVNPLG9CQUFvQkgsQ0FBQztRQUFFLElBQUlDLElBQUVMLENBQUMsQ0FBQ0ksRUFBRTtRQUFDLElBQUdDLE1BQUlGLFdBQVU7WUFBQyxPQUFPRSxFQUFFUCxPQUFPO1FBQUE7UUFBQyxJQUFJVSxJQUFFUixDQUFDLENBQUNJLEVBQUUsR0FBQztZQUFDTixTQUFRLENBQUM7UUFBQztRQUFFLElBQUlXLElBQUU7UUFBSyxJQUFHO1lBQUNaLENBQUMsQ0FBQ08sRUFBRSxDQUFDSSxHQUFFQSxFQUFFVixPQUFPLEVBQUNTO1lBQXFCRSxJQUFFO1FBQUssU0FBUTtZQUFDLElBQUdBLEdBQUUsT0FBT1QsQ0FBQyxDQUFDSSxFQUFFO1FBQUE7UUFBQyxPQUFPSSxFQUFFVixPQUFPO0lBQUE7SUFBQyxJQUFHLE9BQU9TLHdCQUFzQixhQUFZQSxvQkFBb0JHLEVBQUUsR0FBQ0MsU0FBU0EsR0FBQztJQUFJLElBQUlQLElBQUVHLG9CQUFvQjtJQUFLSyxPQUFPZCxPQUFPLEdBQUNNO0FBQUMiLCJzb3VyY2VzIjpbIi9ob21lL05pY2hvbGFpL0RvY3VtZW50cy9EZXYvYmlvaGF6YXJkLXZmeC0xL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvc3RyaXAtYW5zaS9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIoKCk9PntcInVzZSBzdHJpY3RcIjt2YXIgZT17NTExOmU9PntlLmV4cG9ydHM9KHtvbmx5Rmlyc3Q6ZT1mYWxzZX09e30pPT57Y29uc3Qgcj1bXCJbXFxcXHUwMDFCXFxcXHUwMDlCXVtbXFxcXF0oKSM7P10qKD86KD86KD86KD86O1stYS16QS1aXFxcXGRcXFxcLyMmLjo9PyVAfl9dKykqfFthLXpBLVpcXFxcZF0rKD86O1stYS16QS1aXFxcXGRcXFxcLyMmLjo9PyVAfl9dKikqKT9cXFxcdTAwMDcpXCIsXCIoPzooPzpcXFxcZHsxLDR9KD86O1xcXFxkezAsNH0pKik/W1xcXFxkQS1QUi1UWmNmLW50cXJ5PT48fl0pKVwiXS5qb2luKFwifFwiKTtyZXR1cm4gbmV3IFJlZ0V4cChyLGU/dW5kZWZpbmVkOlwiZ1wiKX19LDUzMjooZSxyLF8pPT57Y29uc3QgdD1fKDUxMSk7ZS5leHBvcnRzPWU9PnR5cGVvZiBlPT09XCJzdHJpbmdcIj9lLnJlcGxhY2UodCgpLFwiXCIpOmV9fTt2YXIgcj17fTtmdW5jdGlvbiBfX25jY3dwY2tfcmVxdWlyZV9fKF8pe3ZhciB0PXJbX107aWYodCE9PXVuZGVmaW5lZCl7cmV0dXJuIHQuZXhwb3J0c312YXIgYT1yW19dPXtleHBvcnRzOnt9fTt2YXIgbj10cnVlO3RyeXtlW19dKGEsYS5leHBvcnRzLF9fbmNjd3Bja19yZXF1aXJlX18pO249ZmFsc2V9ZmluYWxseXtpZihuKWRlbGV0ZSByW19dfXJldHVybiBhLmV4cG9ydHN9aWYodHlwZW9mIF9fbmNjd3Bja19yZXF1aXJlX18hPT1cInVuZGVmaW5lZFwiKV9fbmNjd3Bja19yZXF1aXJlX18uYWI9X19kaXJuYW1lK1wiL1wiO3ZhciBfPV9fbmNjd3Bja19yZXF1aXJlX18oNTMyKTttb2R1bGUuZXhwb3J0cz1ffSkoKTsiXSwibmFtZXMiOlsiZSIsImV4cG9ydHMiLCJvbmx5Rmlyc3QiLCJyIiwiam9pbiIsIlJlZ0V4cCIsInVuZGVmaW5lZCIsIl8iLCJ0IiwicmVwbGFjZSIsIl9fbmNjd3Bja19yZXF1aXJlX18iLCJhIiwibiIsImFiIiwiX19kaXJuYW1lIiwibW9kdWxlIl0sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/strip-ansi/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/lib/is-error.js":
|
||
/*!************************************************!*\
|
||
!*** ./node_modules/next/dist/lib/is-error.js ***!
|
||
\************************************************/
|
||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n /**\n * Checks whether the given value is a NextError.\n * This can be used to print a more detailed error message with properties like `code` & `digest`.\n */ default: function() {\n return isError;\n },\n getProperError: function() {\n return getProperError;\n }\n});\nconst _isplainobject = __webpack_require__(/*! ../shared/lib/is-plain-object */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/is-plain-object.js\");\nfunction isError(err) {\n return typeof err === 'object' && err !== null && 'name' in err && 'message' in err;\n}\nfunction safeStringify(obj) {\n const seen = new WeakSet();\n return JSON.stringify(obj, (_key, value)=>{\n // If value is an object and already seen, replace with \"[Circular]\"\n if (typeof value === 'object' && value !== null) {\n if (seen.has(value)) {\n return '[Circular]';\n }\n seen.add(value);\n }\n return value;\n });\n}\nfunction getProperError(err) {\n if (isError(err)) {\n return err;\n }\n if (true) {\n // provide better error for case where `throw undefined`\n // is called in development\n if (typeof err === 'undefined') {\n return Object.defineProperty(new Error('An undefined error was thrown, ' + 'see here for more info: https://nextjs.org/docs/messages/threw-undefined'), \"__NEXT_ERROR_CODE\", {\n value: \"E98\",\n enumerable: false,\n configurable: true\n });\n }\n if (err === null) {\n return Object.defineProperty(new Error('A null error was thrown, ' + 'see here for more info: https://nextjs.org/docs/messages/threw-undefined'), \"__NEXT_ERROR_CODE\", {\n value: \"E336\",\n enumerable: false,\n configurable: true\n });\n }\n }\n return Object.defineProperty(new Error((0, _isplainobject.isPlainObject)(err) ? safeStringify(err) : err + ''), \"__NEXT_ERROR_CODE\", {\n value: \"E394\",\n enumerable: false,\n configurable: true\n });\n}\n\n//# sourceMappingURL=is-error.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbGliL2lzLWVycm9yLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsTUFBTSxDQUdMO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELHVCQUF1QixtQkFBTyxDQUFDLGlIQUErQjtBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQXNDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUEiLCJzb3VyY2VzIjpbIi9ob21lL05pY2hvbGFpL0RvY3VtZW50cy9EZXYvYmlvaGF6YXJkLXZmeC0xL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbGliL2lzLWVycm9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgZGVmYXVsdDogbnVsbCxcbiAgICBnZXRQcm9wZXJFcnJvcjogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICAvKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiB2YWx1ZSBpcyBhIE5leHRFcnJvci5cbiAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gcHJpbnQgYSBtb3JlIGRldGFpbGVkIGVycm9yIG1lc3NhZ2Ugd2l0aCBwcm9wZXJ0aWVzIGxpa2UgYGNvZGVgICYgYGRpZ2VzdGAuXG4gKi8gZGVmYXVsdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpc0Vycm9yO1xuICAgIH0sXG4gICAgZ2V0UHJvcGVyRXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0UHJvcGVyRXJyb3I7XG4gICAgfVxufSk7XG5jb25zdCBfaXNwbGFpbm9iamVjdCA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvbGliL2lzLXBsYWluLW9iamVjdFwiKTtcbmZ1bmN0aW9uIGlzRXJyb3IoZXJyKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBlcnIgPT09ICdvYmplY3QnICYmIGVyciAhPT0gbnVsbCAmJiAnbmFtZScgaW4gZXJyICYmICdtZXNzYWdlJyBpbiBlcnI7XG59XG5mdW5jdGlvbiBzYWZlU3RyaW5naWZ5KG9iaikge1xuICAgIGNvbnN0IHNlZW4gPSBuZXcgV2Vha1NldCgpO1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmosIChfa2V5LCB2YWx1ZSk9PntcbiAgICAgICAgLy8gSWYgdmFsdWUgaXMgYW4gb2JqZWN0IGFuZCBhbHJlYWR5IHNlZW4sIHJlcGxhY2Ugd2l0aCBcIltDaXJjdWxhcl1cIlxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHNlZW4uaGFzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW0NpcmN1bGFyXSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWVuLmFkZCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZ2V0UHJvcGVyRXJyb3IoZXJyKSB7XG4gICAgaWYgKGlzRXJyb3IoZXJyKSkge1xuICAgICAgICByZXR1cm4gZXJyO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgICAgLy8gcHJvdmlkZSBiZXR0ZXIgZXJyb3IgZm9yIGNhc2Ugd2hlcmUgYHRocm93IHVuZGVmaW5lZGBcbiAgICAgICAgLy8gaXMgY2FsbGVkIGluIGRldmVsb3BtZW50XG4gICAgICAgIGlmICh0eXBlb2YgZXJyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZXcgRXJyb3IoJ0FuIHVuZGVmaW5lZCBlcnJvciB3YXMgdGhyb3duLCAnICsgJ3NlZSBoZXJlIGZvciBtb3JlIGluZm86IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL3RocmV3LXVuZGVmaW5lZCcpLCBcIl9fTkVYVF9FUlJPUl9DT0RFXCIsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogXCJFOThcIixcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnIgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3IEVycm9yKCdBIG51bGwgZXJyb3Igd2FzIHRocm93biwgJyArICdzZWUgaGVyZSBmb3IgbW9yZSBpbmZvOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy90aHJldy11bmRlZmluZWQnKSwgXCJfX05FWFRfRVJST1JfQ09ERVwiLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IFwiRTMzNlwiLFxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZXcgRXJyb3IoKDAsIF9pc3BsYWlub2JqZWN0LmlzUGxhaW5PYmplY3QpKGVycikgPyBzYWZlU3RyaW5naWZ5KGVycikgOiBlcnIgKyAnJyksIFwiX19ORVhUX0VSUk9SX0NPREVcIiwge1xuICAgICAgICB2YWx1ZTogXCJFMzk0XCIsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXMtZXJyb3IuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/lib/is-error.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/lib/require-instrumentation-client.js":
|
||
/*!**********************************************************************!*\
|
||
!*** ./node_modules/next/dist/lib/require-instrumentation-client.js ***!
|
||
\**********************************************************************/
|
||
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * This module imports the client instrumentation hook from the project root.\n *\n * The `private-next-instrumentation-client` module is automatically aliased to\n * the `instrumentation-client.ts` file in the project root by webpack or turbopack.\n */ \nif (true) {\n const measureName = 'Client Instrumentation Hook';\n const startTime = performance.now();\n // eslint-disable-next-line @next/internal/typechecked-require -- Not a module.\n module.exports = __webpack_require__(/*! private-next-instrumentation-client */ \"?608e\");\n const endTime = performance.now();\n const duration = endTime - startTime;\n // Using 16ms threshold as it represents one frame (1000ms/60fps)\n // This helps identify if the instrumentation hook initialization\n // could potentially cause frame drops during development.\n const THRESHOLD = 16;\n if (duration > THRESHOLD) {\n console.log(`[${measureName}] Slow execution detected: ${duration.toFixed(0)}ms (Note: Code download overhead is not included in this measurement)`);\n }\n} else {}\n\n//# sourceMappingURL=require-instrumentation-client.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbGliL3JlcXVpcmUtaW5zdHJ1bWVudGF0aW9uLWNsaWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBaUI7QUFDakIsSUFBSSxJQUFzQztBQUMxQztBQUNBO0FBQ0E7QUFDQSxJQUFJLHdGQUErRDtBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixZQUFZLDZCQUE2QixvQkFBb0I7QUFDckY7QUFDQSxFQUFFLEtBQUssRUFHTjs7QUFFRCIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvRG9jdW1lbnRzL0Rldi9iaW9oYXphcmQtdmZ4LTEvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9saWIvcmVxdWlyZS1pbnN0cnVtZW50YXRpb24tY2xpZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpcyBtb2R1bGUgaW1wb3J0cyB0aGUgY2xpZW50IGluc3RydW1lbnRhdGlvbiBob29rIGZyb20gdGhlIHByb2plY3Qgcm9vdC5cbiAqXG4gKiBUaGUgYHByaXZhdGUtbmV4dC1pbnN0cnVtZW50YXRpb24tY2xpZW50YCBtb2R1bGUgaXMgYXV0b21hdGljYWxseSBhbGlhc2VkIHRvXG4gKiB0aGUgYGluc3RydW1lbnRhdGlvbi1jbGllbnQudHNgIGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdCBieSB3ZWJwYWNrIG9yIHR1cmJvcGFjay5cbiAqLyBcInVzZSBzdHJpY3RcIjtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgIGNvbnN0IG1lYXN1cmVOYW1lID0gJ0NsaWVudCBJbnN0cnVtZW50YXRpb24gSG9vayc7XG4gICAgY29uc3Qgc3RhcnRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBuZXh0L2ludGVybmFsL3R5cGVjaGVja2VkLXJlcXVpcmUgLS0gTm90IGEgbW9kdWxlLlxuICAgIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgncHJpdmF0ZS1uZXh0LWluc3RydW1lbnRhdGlvbi1jbGllbnQnKTtcbiAgICBjb25zdCBlbmRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgY29uc3QgZHVyYXRpb24gPSBlbmRUaW1lIC0gc3RhcnRUaW1lO1xuICAgIC8vIFVzaW5nIDE2bXMgdGhyZXNob2xkIGFzIGl0IHJlcHJlc2VudHMgb25lIGZyYW1lICgxMDAwbXMvNjBmcHMpXG4gICAgLy8gVGhpcyBoZWxwcyBpZGVudGlmeSBpZiB0aGUgaW5zdHJ1bWVudGF0aW9uIGhvb2sgaW5pdGlhbGl6YXRpb25cbiAgICAvLyBjb3VsZCBwb3RlbnRpYWxseSBjYXVzZSBmcmFtZSBkcm9wcyBkdXJpbmcgZGV2ZWxvcG1lbnQuXG4gICAgY29uc3QgVEhSRVNIT0xEID0gMTY7XG4gICAgaWYgKGR1cmF0aW9uID4gVEhSRVNIT0xEKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbJHttZWFzdXJlTmFtZX1dIFNsb3cgZXhlY3V0aW9uIGRldGVjdGVkOiAke2R1cmF0aW9uLnRvRml4ZWQoMCl9bXMgKE5vdGU6IENvZGUgZG93bmxvYWQgb3ZlcmhlYWQgaXMgbm90IGluY2x1ZGVkIGluIHRoaXMgbWVhc3VyZW1lbnQpYCk7XG4gICAgfVxufSBlbHNlIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQG5leHQvaW50ZXJuYWwvdHlwZWNoZWNrZWQtcmVxdWlyZSAtLSBOb3QgYSBtb2R1bGUuXG4gICAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdwcml2YXRlLW5leHQtaW5zdHJ1bWVudGF0aW9uLWNsaWVudCcpO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXF1aXJlLWluc3RydW1lbnRhdGlvbi1jbGllbnQuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/lib/require-instrumentation-client.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/next-devtools/shared/console-error.js":
|
||
/*!**********************************************************************!*\
|
||
!*** ./node_modules/next/dist/next-devtools/shared/console-error.js ***!
|
||
\**********************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// To distinguish from React error.digest, we use a different symbol here to determine if the error is from console.error or unhandled promise rejection.\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n createConsoleError: function() {\n return createConsoleError;\n },\n isConsoleError: function() {\n return isConsoleError;\n }\n});\nconst digestSym = Symbol.for('next.console.error.digest');\nfunction createConsoleError(message, environmentName) {\n const error = typeof message === 'string' ? Object.defineProperty(new Error(message), \"__NEXT_ERROR_CODE\", {\n value: \"E394\",\n enumerable: false,\n configurable: true\n }) : message;\n error[digestSym] = 'NEXT_CONSOLE_ERROR';\n if (environmentName && !error.environmentName) {\n error.environmentName = environmentName;\n }\n return error;\n}\nconst isConsoleError = (error)=>{\n return error && error[digestSym] === 'NEXT_CONSOLE_ERROR';\n};\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', { value: true });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n}\n\n//# sourceMappingURL=console-error.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy9zaGFyZWQvY29uc29sZS1lcnJvci5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsTUFBTSxDQUdMO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5REFBeUQsYUFBYTtBQUN0RTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIi9ob21lL05pY2hvbGFpL0RvY3VtZW50cy9EZXYvYmlvaGF6YXJkLXZmeC0xL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy9zaGFyZWQvY29uc29sZS1lcnJvci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUbyBkaXN0aW5ndWlzaCBmcm9tIFJlYWN0IGVycm9yLmRpZ2VzdCwgd2UgdXNlIGEgZGlmZmVyZW50IHN5bWJvbCBoZXJlIHRvIGRldGVybWluZSBpZiB0aGUgZXJyb3IgaXMgZnJvbSBjb25zb2xlLmVycm9yIG9yIHVuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbi5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgY3JlYXRlQ29uc29sZUVycm9yOiBudWxsLFxuICAgIGlzQ29uc29sZUVycm9yOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIGNyZWF0ZUNvbnNvbGVFcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVDb25zb2xlRXJyb3I7XG4gICAgfSxcbiAgICBpc0NvbnNvbGVFcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpc0NvbnNvbGVFcnJvcjtcbiAgICB9XG59KTtcbmNvbnN0IGRpZ2VzdFN5bSA9IFN5bWJvbC5mb3IoJ25leHQuY29uc29sZS5lcnJvci5kaWdlc3QnKTtcbmZ1bmN0aW9uIGNyZWF0ZUNvbnNvbGVFcnJvcihtZXNzYWdlLCBlbnZpcm9ubWVudE5hbWUpIHtcbiAgICBjb25zdCBlcnJvciA9IHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZXcgRXJyb3IobWVzc2FnZSksIFwiX19ORVhUX0VSUk9SX0NPREVcIiwge1xuICAgICAgICB2YWx1ZTogXCJFMzk0XCIsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KSA6IG1lc3NhZ2U7XG4gICAgZXJyb3JbZGlnZXN0U3ltXSA9ICdORVhUX0NPTlNPTEVfRVJST1InO1xuICAgIGlmIChlbnZpcm9ubWVudE5hbWUgJiYgIWVycm9yLmVudmlyb25tZW50TmFtZSkge1xuICAgICAgICBlcnJvci5lbnZpcm9ubWVudE5hbWUgPSBlbnZpcm9ubWVudE5hbWU7XG4gICAgfVxuICAgIHJldHVybiBlcnJvcjtcbn1cbmNvbnN0IGlzQ29uc29sZUVycm9yID0gKGVycm9yKT0+e1xuICAgIHJldHVybiBlcnJvciAmJiBlcnJvcltkaWdlc3RTeW1dID09PSAnTkVYVF9DT05TT0xFX0VSUk9SJztcbn07XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnNvbGUtZXJyb3IuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/next-devtools/shared/console-error.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/next-devtools/shared/forward-logs-shared.js":
|
||
/*!****************************************************************************!*\
|
||
!*** ./node_modules/next/dist/next-devtools/shared/forward-logs-shared.js ***!
|
||
\****************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n UNDEFINED_MARKER: function() {\n return UNDEFINED_MARKER;\n },\n patchConsoleMethod: function() {\n return patchConsoleMethod;\n }\n});\nconst UNDEFINED_MARKER = '__next_tagged_undefined';\nfunction patchConsoleMethod(methodName, wrapper) {\n const descriptor = Object.getOwnPropertyDescriptor(console, methodName);\n if (descriptor && (descriptor.configurable || descriptor.writable) && typeof descriptor.value === 'function') {\n const originalMethod = descriptor.value;\n const originalName = Object.getOwnPropertyDescriptor(originalMethod, 'name');\n const wrapperMethod = function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n wrapper(methodName, ...args);\n originalMethod.apply(this, args);\n };\n if (originalName) {\n Object.defineProperty(wrapperMethod, 'name', originalName);\n }\n Object.defineProperty(console, methodName, {\n value: wrapperMethod\n });\n return ()=>{\n Object.defineProperty(console, methodName, {\n value: originalMethod,\n writable: descriptor.writable,\n configurable: descriptor.configurable\n });\n };\n }\n return ()=>{};\n}\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', { value: true });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n}\n\n//# sourceMappingURL=forward-logs-shared.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy9zaGFyZWQvZm9yd2FyZC1sb2dzLXNoYXJlZC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLE1BQU0sQ0FHTDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtFQUErRSxhQUFhO0FBQzVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5REFBeUQsYUFBYTtBQUN0RTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIi9ob21lL05pY2hvbGFpL0RvY3VtZW50cy9EZXYvYmlvaGF6YXJkLXZmeC0xL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy9zaGFyZWQvZm9yd2FyZC1sb2dzLXNoYXJlZC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIFVOREVGSU5FRF9NQVJLRVI6IG51bGwsXG4gICAgcGF0Y2hDb25zb2xlTWV0aG9kOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIFVOREVGSU5FRF9NQVJLRVI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gVU5ERUZJTkVEX01BUktFUjtcbiAgICB9LFxuICAgIHBhdGNoQ29uc29sZU1ldGhvZDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBwYXRjaENvbnNvbGVNZXRob2Q7XG4gICAgfVxufSk7XG5jb25zdCBVTkRFRklORURfTUFSS0VSID0gJ19fbmV4dF90YWdnZWRfdW5kZWZpbmVkJztcbmZ1bmN0aW9uIHBhdGNoQ29uc29sZU1ldGhvZChtZXRob2ROYW1lLCB3cmFwcGVyKSB7XG4gICAgY29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY29uc29sZSwgbWV0aG9kTmFtZSk7XG4gICAgaWYgKGRlc2NyaXB0b3IgJiYgKGRlc2NyaXB0b3IuY29uZmlndXJhYmxlIHx8IGRlc2NyaXB0b3Iud3JpdGFibGUpICYmIHR5cGVvZiBkZXNjcmlwdG9yLnZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsTWV0aG9kID0gZGVzY3JpcHRvci52YWx1ZTtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxOYW1lID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvcmlnaW5hbE1ldGhvZCwgJ25hbWUnKTtcbiAgICAgICAgY29uc3Qgd3JhcHBlck1ldGhvZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgZm9yKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5Kyspe1xuICAgICAgICAgICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3cmFwcGVyKG1ldGhvZE5hbWUsIC4uLmFyZ3MpO1xuICAgICAgICAgICAgb3JpZ2luYWxNZXRob2QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChvcmlnaW5hbE5hbWUpIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3cmFwcGVyTWV0aG9kLCAnbmFtZScsIG9yaWdpbmFsTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnNvbGUsIG1ldGhvZE5hbWUsIHtcbiAgICAgICAgICAgIHZhbHVlOiB3cmFwcGVyTWV0aG9kXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gKCk9PntcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb25zb2xlLCBtZXRob2ROYW1lLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IG9yaWdpbmFsTWV0aG9kLFxuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiBkZXNjcmlwdG9yLndyaXRhYmxlLFxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZGVzY3JpcHRvci5jb25maWd1cmFibGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gKCk9Pnt9O1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1mb3J3YXJkLWxvZ3Mtc2hhcmVkLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/next-devtools/shared/forward-logs-shared.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/app-dev-overlay-error-boundary.js":
|
||
/*!**********************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/next-devtools/userspace/app/app-dev-overlay-error-boundary.js ***!
|
||
\**********************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"AppDevOverlayErrorBoundary\", ({\n enumerable: true,\n get: function() {\n return AppDevOverlayErrorBoundary;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\nconst _nextdevtools = __webpack_require__(/*! next/dist/compiled/next-devtools */ \"(app-pages-browser)/./node_modules/next/dist/compiled/next-devtools/index.js\");\nconst _runtimeerrorhandler = __webpack_require__(/*! ../../../client/dev/runtime-error-handler */ \"(app-pages-browser)/./node_modules/next/dist/client/dev/runtime-error-handler.js\");\nconst _errorboundary = __webpack_require__(/*! ../../../client/components/error-boundary */ \"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js\");\nconst _globalerror = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../../../client/components/builtin/global-error */ \"(app-pages-browser)/./node_modules/next/dist/client/components/builtin/global-error.js\"));\nconst _segmentexplorernode = __webpack_require__(/*! ./segment-explorer-node */ \"(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js\");\nfunction ErroredHtml(param) {\n let { globalError: [GlobalError, globalErrorStyles], error } = param;\n if (!error) {\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"html\", {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"head\", {}),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"body\", {})\n ]\n });\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_errorboundary.ErrorBoundary, {\n errorComponent: _globalerror.default,\n children: [\n globalErrorStyles,\n /*#__PURE__*/ (0, _jsxruntime.jsx)(GlobalError, {\n error: error\n })\n ]\n });\n}\nclass AppDevOverlayErrorBoundary extends _react.PureComponent {\n static getDerivedStateFromError(error) {\n _runtimeerrorhandler.RuntimeErrorHandler.hadRuntimeError = true;\n return {\n reactError: error\n };\n }\n componentDidCatch(err) {\n if ( true && err.message === _segmentexplorernode.SEGMENT_EXPLORER_SIMULATED_ERROR_MESSAGE) {\n return;\n }\n _nextdevtools.dispatcher.openErrorOverlay();\n }\n render() {\n const { children, globalError } = this.props;\n const { reactError } = this.state;\n const fallback = /*#__PURE__*/ (0, _jsxruntime.jsx)(ErroredHtml, {\n globalError: globalError,\n error: reactError\n });\n return reactError !== null ? fallback : children;\n }\n constructor(...args){\n super(...args), this.state = {\n reactError: null\n };\n }\n}\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', { value: true });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n}\n\n//# sourceMappingURL=app-dev-overlay-error-boundary.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL2FwcC1kZXYtb3ZlcmxheS1lcnJvci1ib3VuZGFyeS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLDhEQUE2RDtBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQztBQUNGLGlDQUFpQyxtQkFBTyxDQUFDLGdJQUF5QztBQUNsRixvQkFBb0IsbUJBQU8sQ0FBQyxxR0FBbUI7QUFDL0MsZUFBZSxtQkFBTyxDQUFDLG1GQUFPO0FBQzlCLHNCQUFzQixtQkFBTyxDQUFDLHNIQUFrQztBQUNoRSw2QkFBNkIsbUJBQU8sQ0FBQyxtSUFBMkM7QUFDaEYsdUJBQXVCLG1CQUFPLENBQUMsbUlBQTJDO0FBQzFFLDhEQUE4RCxtQkFBTyxDQUFDLCtJQUFpRDtBQUN2SCw2QkFBNkIsbUJBQU8sQ0FBQyxrSUFBeUI7QUFDOUQ7QUFDQSxVQUFVLHVEQUF1RDtBQUNqRTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQ7QUFDN0QsNkRBQTZEO0FBQzdEO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksS0FBc0M7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix3QkFBd0I7QUFDeEMsZ0JBQWdCLGFBQWE7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5REFBeUQsYUFBYTtBQUN0RTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIi9ob21lL05pY2hvbGFpL0RvY3VtZW50cy9EZXYvYmlvaGF6YXJkLXZmeC0xL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL2FwcC1kZXYtb3ZlcmxheS1lcnJvci1ib3VuZGFyeS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkFwcERldk92ZXJsYXlFcnJvckJvdW5kYXJ5XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBBcHBEZXZPdmVybGF5RXJyb3JCb3VuZGFyeTtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHRcIik7XG5jb25zdCBfanN4cnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbmNvbnN0IF9yZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcbmNvbnN0IF9uZXh0ZGV2dG9vbHMgPSByZXF1aXJlKFwibmV4dC9kaXN0L2NvbXBpbGVkL25leHQtZGV2dG9vbHNcIik7XG5jb25zdCBfcnVudGltZWVycm9yaGFuZGxlciA9IHJlcXVpcmUoXCIuLi8uLi8uLi9jbGllbnQvZGV2L3J1bnRpbWUtZXJyb3ItaGFuZGxlclwiKTtcbmNvbnN0IF9lcnJvcmJvdW5kYXJ5ID0gcmVxdWlyZShcIi4uLy4uLy4uL2NsaWVudC9jb21wb25lbnRzL2Vycm9yLWJvdW5kYXJ5XCIpO1xuY29uc3QgX2dsb2JhbGVycm9yID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwiLi4vLi4vLi4vY2xpZW50L2NvbXBvbmVudHMvYnVpbHRpbi9nbG9iYWwtZXJyb3JcIikpO1xuY29uc3QgX3NlZ21lbnRleHBsb3Jlcm5vZGUgPSByZXF1aXJlKFwiLi9zZWdtZW50LWV4cGxvcmVyLW5vZGVcIik7XG5mdW5jdGlvbiBFcnJvcmVkSHRtbChwYXJhbSkge1xuICAgIGxldCB7IGdsb2JhbEVycm9yOiBbR2xvYmFsRXJyb3IsIGdsb2JhbEVycm9yU3R5bGVzXSwgZXJyb3IgfSA9IHBhcmFtO1xuICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKFwiaHRtbFwiLCB7XG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJoZWFkXCIsIHt9KSxcbiAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwiYm9keVwiLCB7fSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShfZXJyb3Jib3VuZGFyeS5FcnJvckJvdW5kYXJ5LCB7XG4gICAgICAgIGVycm9yQ29tcG9uZW50OiBfZ2xvYmFsZXJyb3IuZGVmYXVsdCxcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgIGdsb2JhbEVycm9yU3R5bGVzLFxuICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShHbG9iYWxFcnJvciwge1xuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvclxuICAgICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgIH0pO1xufVxuY2xhc3MgQXBwRGV2T3ZlcmxheUVycm9yQm91bmRhcnkgZXh0ZW5kcyBfcmVhY3QuUHVyZUNvbXBvbmVudCB7XG4gICAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihlcnJvcikge1xuICAgICAgICBfcnVudGltZWVycm9yaGFuZGxlci5SdW50aW1lRXJyb3JIYW5kbGVyLmhhZFJ1bnRpbWVFcnJvciA9IHRydWU7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByZWFjdEVycm9yOiBlcnJvclxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb21wb25lbnREaWRDYXRjaChlcnIpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnICYmIGVyci5tZXNzYWdlID09PSBfc2VnbWVudGV4cGxvcmVybm9kZS5TRUdNRU5UX0VYUExPUkVSX1NJTVVMQVRFRF9FUlJPUl9NRVNTQUdFKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgX25leHRkZXZ0b29scy5kaXNwYXRjaGVyLm9wZW5FcnJvck92ZXJsYXkoKTtcbiAgICB9XG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCB7IGNoaWxkcmVuLCBnbG9iYWxFcnJvciB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgY29uc3QgeyByZWFjdEVycm9yIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICBjb25zdCBmYWxsYmFjayA9IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoRXJyb3JlZEh0bWwsIHtcbiAgICAgICAgICAgIGdsb2JhbEVycm9yOiBnbG9iYWxFcnJvcixcbiAgICAgICAgICAgIGVycm9yOiByZWFjdEVycm9yXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVhY3RFcnJvciAhPT0gbnVsbCA/IGZhbGxiYWNrIDogY2hpbGRyZW47XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3Mpe1xuICAgICAgICBzdXBlciguLi5hcmdzKSwgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHJlYWN0RXJyb3I6IG51bGxcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFwcC1kZXYtb3ZlcmxheS1lcnJvci1ib3VuZGFyeS5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/app-dev-overlay-error-boundary.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/app-dev-overlay-setup.js":
|
||
/*!*************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/next-devtools/userspace/app/app-dev-overlay-setup.js ***!
|
||
\*************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nconst _interceptconsoleerror = __webpack_require__(/*! ./errors/intercept-console-error */ \"(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/errors/intercept-console-error.js\");\nconst _useerrorhandler = __webpack_require__(/*! ./errors/use-error-handler */ \"(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/errors/use-error-handler.js\");\nconst _forwardlogs = __webpack_require__(/*! ./forward-logs */ \"(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/forward-logs.js\");\n(0, _useerrorhandler.handleGlobalErrors)();\n(0, _interceptconsoleerror.patchConsoleError)();\nif (_forwardlogs.isTerminalLoggingEnabled) {\n (0, _forwardlogs.initializeDebugLogForwarding)('app');\n}\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', { value: true });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n}\n\n//# sourceMappingURL=app-dev-overlay-setup.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL2FwcC1kZXYtb3ZlcmxheS1zZXR1cC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLCtCQUErQixtQkFBTyxDQUFDLG9KQUFrQztBQUN6RSx5QkFBeUIsbUJBQU8sQ0FBQyx3SUFBNEI7QUFDN0QscUJBQXFCLG1CQUFPLENBQUMsZ0hBQWdCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5REFBeUQsYUFBYTtBQUN0RTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIi9ob21lL05pY2hvbGFpL0RvY3VtZW50cy9EZXYvYmlvaGF6YXJkLXZmeC0xL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL2FwcC1kZXYtb3ZlcmxheS1zZXR1cC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbmNvbnN0IF9pbnRlcmNlcHRjb25zb2xlZXJyb3IgPSByZXF1aXJlKFwiLi9lcnJvcnMvaW50ZXJjZXB0LWNvbnNvbGUtZXJyb3JcIik7XG5jb25zdCBfdXNlZXJyb3JoYW5kbGVyID0gcmVxdWlyZShcIi4vZXJyb3JzL3VzZS1lcnJvci1oYW5kbGVyXCIpO1xuY29uc3QgX2ZvcndhcmRsb2dzID0gcmVxdWlyZShcIi4vZm9yd2FyZC1sb2dzXCIpO1xuKDAsIF91c2VlcnJvcmhhbmRsZXIuaGFuZGxlR2xvYmFsRXJyb3JzKSgpO1xuKDAsIF9pbnRlcmNlcHRjb25zb2xlZXJyb3IucGF0Y2hDb25zb2xlRXJyb3IpKCk7XG5pZiAoX2ZvcndhcmRsb2dzLmlzVGVybWluYWxMb2dnaW5nRW5hYmxlZCkge1xuICAgICgwLCBfZm9yd2FyZGxvZ3MuaW5pdGlhbGl6ZURlYnVnTG9nRm9yd2FyZGluZykoJ2FwcCcpO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcHAtZGV2LW92ZXJsYXktc2V0dXAuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/app-dev-overlay-setup.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/client-entry.js":
|
||
/*!****************************************************************************!*\
|
||
!*** ./node_modules/next/dist/next-devtools/userspace/app/client-entry.js ***!
|
||
\****************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"createRootLevelDevOverlayElement\", ({\n enumerable: true,\n get: function() {\n return createRootLevelDevOverlayElement;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _getsocketurl = __webpack_require__(/*! ../../../client/dev/hot-reloader/get-socket-url */ \"(app-pages-browser)/./node_modules/next/dist/client/dev/hot-reloader/get-socket-url.js\");\nconst _hotreloadertypes = __webpack_require__(/*! ../../../server/dev/hot-reloader-types */ \"(app-pages-browser)/./node_modules/next/dist/server/dev/hot-reloader-types.js\");\nconst _globalerror = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../../../client/components/builtin/global-error */ \"(app-pages-browser)/./node_modules/next/dist/client/components/builtin/global-error.js\"));\nconst _appdevoverlayerrorboundary = __webpack_require__(/*! ./app-dev-overlay-error-boundary */ \"(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/app-dev-overlay-error-boundary.js\");\nfunction createRootLevelDevOverlayElement(reactEl) {\n const socketUrl = (0, _getsocketurl.getSocketUrl)( false || '');\n const socket = new window.WebSocket(\"\" + socketUrl + \"/_next/webpack-hmr\");\n // add minimal \"hot reload\" support for RSC errors\n const handler = (event)=>{\n let obj;\n try {\n obj = JSON.parse(event.data);\n } catch (e) {}\n if (!obj || !('action' in obj)) {\n return;\n }\n if (obj.action === _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SERVER_COMPONENT_CHANGES) {\n window.location.reload();\n }\n };\n socket.addEventListener('message', handler);\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_appdevoverlayerrorboundary.AppDevOverlayErrorBoundary, {\n globalError: [\n _globalerror.default,\n null\n ],\n children: reactEl\n });\n}\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', { value: true });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n}\n\n//# sourceMappingURL=client-entry.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL2NsaWVudC1lbnRyeS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLG9FQUFtRTtBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQztBQUNGLGlDQUFpQyxtQkFBTyxDQUFDLGdJQUF5QztBQUNsRixvQkFBb0IsbUJBQU8sQ0FBQyxxR0FBbUI7QUFDL0Msd0RBQXdELG1CQUFPLENBQUMsbUZBQU87QUFDdkUsc0JBQXNCLG1CQUFPLENBQUMsK0lBQWlEO0FBQy9FLDBCQUEwQixtQkFBTyxDQUFDLDZIQUF3QztBQUMxRSw4REFBOEQsbUJBQU8sQ0FBQywrSUFBaUQ7QUFDdkgsb0NBQW9DLG1CQUFPLENBQUMsb0pBQWtDO0FBQzlFO0FBQ0Esc0RBQXNELE1BQStCO0FBQ3JGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EseURBQXlELGFBQWE7QUFDdEU7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyIvaG9tZS9OaWNob2xhaS9Eb2N1bWVudHMvRGV2L2Jpb2hhemFyZC12ZngtMS9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L25leHQtZGV2dG9vbHMvdXNlcnNwYWNlL2FwcC9jbGllbnQtZW50cnkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSb290TGV2ZWxEZXZPdmVybGF5RWxlbWVudFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlUm9vdExldmVsRGV2T3ZlcmxheUVsZW1lbnQ7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0XCIpO1xuY29uc3QgX2pzeHJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5jb25zdCBfZ2V0c29ja2V0dXJsID0gcmVxdWlyZShcIi4uLy4uLy4uL2NsaWVudC9kZXYvaG90LXJlbG9hZGVyL2dldC1zb2NrZXQtdXJsXCIpO1xuY29uc3QgX2hvdHJlbG9hZGVydHlwZXMgPSByZXF1aXJlKFwiLi4vLi4vLi4vc2VydmVyL2Rldi9ob3QtcmVsb2FkZXItdHlwZXNcIik7XG5jb25zdCBfZ2xvYmFsZXJyb3IgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCIuLi8uLi8uLi9jbGllbnQvY29tcG9uZW50cy9idWlsdGluL2dsb2JhbC1lcnJvclwiKSk7XG5jb25zdCBfYXBwZGV2b3ZlcmxheWVycm9yYm91bmRhcnkgPSByZXF1aXJlKFwiLi9hcHAtZGV2LW92ZXJsYXktZXJyb3ItYm91bmRhcnlcIik7XG5mdW5jdGlvbiBjcmVhdGVSb290TGV2ZWxEZXZPdmVybGF5RWxlbWVudChyZWFjdEVsKSB7XG4gICAgY29uc3Qgc29ja2V0VXJsID0gKDAsIF9nZXRzb2NrZXR1cmwuZ2V0U29ja2V0VXJsKShwcm9jZXNzLmVudi5fX05FWFRfQVNTRVRfUFJFRklYIHx8ICcnKTtcbiAgICBjb25zdCBzb2NrZXQgPSBuZXcgd2luZG93LldlYlNvY2tldChcIlwiICsgc29ja2V0VXJsICsgXCIvX25leHQvd2VicGFjay1obXJcIik7XG4gICAgLy8gYWRkIG1pbmltYWwgXCJob3QgcmVsb2FkXCIgc3VwcG9ydCBmb3IgUlNDIGVycm9yc1xuICAgIGNvbnN0IGhhbmRsZXIgPSAoZXZlbnQpPT57XG4gICAgICAgIGxldCBvYmo7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBvYmogPSBKU09OLnBhcnNlKGV2ZW50LmRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICBpZiAoIW9iaiB8fCAhKCdhY3Rpb24nIGluIG9iaikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAob2JqLmFjdGlvbiA9PT0gX2hvdHJlbG9hZGVydHlwZXMuSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLlNFUlZFUl9DT01QT05FTlRfQ0hBTkdFUykge1xuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBzb2NrZXQuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGhhbmRsZXIpO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9hcHBkZXZvdmVybGF5ZXJyb3Jib3VuZGFyeS5BcHBEZXZPdmVybGF5RXJyb3JCb3VuZGFyeSwge1xuICAgICAgICBnbG9iYWxFcnJvcjogW1xuICAgICAgICAgICAgX2dsb2JhbGVycm9yLmRlZmF1bHQsXG4gICAgICAgICAgICBudWxsXG4gICAgICAgIF0sXG4gICAgICAgIGNoaWxkcmVuOiByZWFjdEVsXG4gICAgfSk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNsaWVudC1lbnRyeS5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/client-entry.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/errors/index.js":
|
||
/*!****************************************************************************!*\
|
||
!*** ./node_modules/next/dist/next-devtools/userspace/app/errors/index.js ***!
|
||
\****************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n decorateDevError: function() {\n return _stitchederror.decorateDevError;\n },\n handleClientError: function() {\n return _useerrorhandler.handleClientError;\n },\n originConsoleError: function() {\n return _interceptconsoleerror.originConsoleError;\n }\n});\nconst _interceptconsoleerror = __webpack_require__(/*! ./intercept-console-error */ \"(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/errors/intercept-console-error.js\");\nconst _useerrorhandler = __webpack_require__(/*! ./use-error-handler */ \"(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/errors/use-error-handler.js\");\nconst _stitchederror = __webpack_require__(/*! ./stitched-error */ \"(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/errors/stitched-error.js\");\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', { value: true });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n}\n\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL2Vycm9ycy9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLE1BQU0sQ0FJTDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELCtCQUErQixtQkFBTyxDQUFDLDZJQUEyQjtBQUNsRSx5QkFBeUIsbUJBQU8sQ0FBQyxpSUFBcUI7QUFDdEQsdUJBQXVCLG1CQUFPLENBQUMsMkhBQWtCOztBQUVqRDtBQUNBLHlEQUF5RCxhQUFhO0FBQ3RFO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvRG9jdW1lbnRzL0Rldi9iaW9oYXphcmQtdmZ4LTEvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9hcHAvZXJyb3JzL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgZGVjb3JhdGVEZXZFcnJvcjogbnVsbCxcbiAgICBoYW5kbGVDbGllbnRFcnJvcjogbnVsbCxcbiAgICBvcmlnaW5Db25zb2xlRXJyb3I6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgZGVjb3JhdGVEZXZFcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfc3RpdGNoZWRlcnJvci5kZWNvcmF0ZURldkVycm9yO1xuICAgIH0sXG4gICAgaGFuZGxlQ2xpZW50RXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX3VzZWVycm9yaGFuZGxlci5oYW5kbGVDbGllbnRFcnJvcjtcbiAgICB9LFxuICAgIG9yaWdpbkNvbnNvbGVFcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfaW50ZXJjZXB0Y29uc29sZWVycm9yLm9yaWdpbkNvbnNvbGVFcnJvcjtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcmNlcHRjb25zb2xlZXJyb3IgPSByZXF1aXJlKFwiLi9pbnRlcmNlcHQtY29uc29sZS1lcnJvclwiKTtcbmNvbnN0IF91c2VlcnJvcmhhbmRsZXIgPSByZXF1aXJlKFwiLi91c2UtZXJyb3ItaGFuZGxlclwiKTtcbmNvbnN0IF9zdGl0Y2hlZGVycm9yID0gcmVxdWlyZShcIi4vc3RpdGNoZWQtZXJyb3JcIik7XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/errors/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/errors/intercept-console-error.js":
|
||
/*!**********************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/next-devtools/userspace/app/errors/intercept-console-error.js ***!
|
||
\**********************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n originConsoleError: function() {\n return originConsoleError;\n },\n patchConsoleError: function() {\n return patchConsoleError;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _iserror = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../../../../lib/is-error */ \"(app-pages-browser)/./node_modules/next/dist/lib/is-error.js\"));\nconst _isnextroutererror = __webpack_require__(/*! ../../../../client/components/is-next-router-error */ \"(app-pages-browser)/./node_modules/next/dist/client/components/is-next-router-error.js\");\nconst _useerrorhandler = __webpack_require__(/*! ./use-error-handler */ \"(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/errors/use-error-handler.js\");\nconst _console = __webpack_require__(/*! ../../../../client/lib/console */ \"(app-pages-browser)/./node_modules/next/dist/client/lib/console.js\");\nconst _forwardlogs = __webpack_require__(/*! ../forward-logs */ \"(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/forward-logs.js\");\nconst originConsoleError = globalThis.console.error;\nfunction patchConsoleError() {\n // Ensure it's only patched once\n if (typeof window === 'undefined') {\n return;\n }\n window.console.error = function error() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n let maybeError;\n if (true) {\n const { error: replayedError } = (0, _console.parseConsoleArgs)(args);\n if (replayedError) {\n maybeError = replayedError;\n } else if ((0, _iserror.default)(args[0])) {\n maybeError = args[0];\n } else {\n // See https://github.com/facebook/react/blob/d50323eb845c5fde0d720cae888bf35dedd05506/packages/react-reconciler/src/ReactFiberErrorLogger.js#L78\n maybeError = args[1];\n }\n } else {}\n if (!(0, _isnextroutererror.isNextRouterError)(maybeError)) {\n if (true) {\n (0, _useerrorhandler.handleConsoleError)(// replayed errors have their own complex format string that should be used,\n // but if we pass the error directly, `handleClientError` will ignore it\n maybeError, args);\n }\n if (_forwardlogs.isTerminalLoggingEnabled) {\n (0, _forwardlogs.forwardErrorLog)(args);\n }\n originConsoleError.apply(window.console, args);\n }\n };\n}\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', { value: true });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n}\n\n//# sourceMappingURL=intercept-console-error.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL2Vycm9ycy9pbnRlcmNlcHQtY29uc29sZS1lcnJvci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLE1BQU0sQ0FHTDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxpQ0FBaUMsbUJBQU8sQ0FBQyxnSUFBeUM7QUFDbEYsMERBQTBELG1CQUFPLENBQUMsOEZBQTBCO0FBQzVGLDJCQUEyQixtQkFBTyxDQUFDLGtKQUFvRDtBQUN2Rix5QkFBeUIsbUJBQU8sQ0FBQyxpSUFBcUI7QUFDdEQsaUJBQWlCLG1CQUFPLENBQUMsMEdBQWdDO0FBQ3pELHFCQUFxQixtQkFBTyxDQUFDLGlIQUFpQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJFQUEyRSxhQUFhO0FBQ3hGO0FBQ0E7QUFDQTtBQUNBLFlBQVksSUFBcUM7QUFDakQsb0JBQW9CLHVCQUF1QjtBQUMzQztBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBLFVBQVUsS0FBSyxFQUVOO0FBQ1Q7QUFDQSxnQkFBZ0IsSUFBcUM7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlEQUF5RCxhQUFhO0FBQ3RFO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvRG9jdW1lbnRzL0Rldi9iaW9oYXphcmQtdmZ4LTEvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9hcHAvZXJyb3JzL2ludGVyY2VwdC1jb25zb2xlLWVycm9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgb3JpZ2luQ29uc29sZUVycm9yOiBudWxsLFxuICAgIHBhdGNoQ29uc29sZUVycm9yOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIG9yaWdpbkNvbnNvbGVFcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBvcmlnaW5Db25zb2xlRXJyb3I7XG4gICAgfSxcbiAgICBwYXRjaENvbnNvbGVFcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBwYXRjaENvbnNvbGVFcnJvcjtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHRcIik7XG5jb25zdCBfaXNlcnJvciA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcIi4uLy4uLy4uLy4uL2xpYi9pcy1lcnJvclwiKSk7XG5jb25zdCBfaXNuZXh0cm91dGVyZXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vY2xpZW50L2NvbXBvbmVudHMvaXMtbmV4dC1yb3V0ZXItZXJyb3JcIik7XG5jb25zdCBfdXNlZXJyb3JoYW5kbGVyID0gcmVxdWlyZShcIi4vdXNlLWVycm9yLWhhbmRsZXJcIik7XG5jb25zdCBfY29uc29sZSA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi9jbGllbnQvbGliL2NvbnNvbGVcIik7XG5jb25zdCBfZm9yd2FyZGxvZ3MgPSByZXF1aXJlKFwiLi4vZm9yd2FyZC1sb2dzXCIpO1xuY29uc3Qgb3JpZ2luQ29uc29sZUVycm9yID0gZ2xvYmFsVGhpcy5jb25zb2xlLmVycm9yO1xuZnVuY3Rpb24gcGF0Y2hDb25zb2xlRXJyb3IoKSB7XG4gICAgLy8gRW5zdXJlIGl0J3Mgb25seSBwYXRjaGVkIG9uY2VcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB3aW5kb3cuY29uc29sZS5lcnJvciA9IGZ1bmN0aW9uIGVycm9yKCkge1xuICAgICAgICBmb3IodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKyl7XG4gICAgICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgICB9XG4gICAgICAgIGxldCBtYXliZUVycm9yO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgY29uc3QgeyBlcnJvcjogcmVwbGF5ZWRFcnJvciB9ID0gKDAsIF9jb25zb2xlLnBhcnNlQ29uc29sZUFyZ3MpKGFyZ3MpO1xuICAgICAgICAgICAgaWYgKHJlcGxheWVkRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBtYXliZUVycm9yID0gcmVwbGF5ZWRFcnJvcjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF9pc2Vycm9yLmRlZmF1bHQpKGFyZ3NbMF0pKSB7XG4gICAgICAgICAgICAgICAgbWF5YmVFcnJvciA9IGFyZ3NbMF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvYmxvYi9kNTAzMjNlYjg0NWM1ZmRlMGQ3MjBjYWU4ODhiZjM1ZGVkZDA1NTA2L3BhY2thZ2VzL3JlYWN0LXJlY29uY2lsZXIvc3JjL1JlYWN0RmliZXJFcnJvckxvZ2dlci5qcyNMNzhcbiAgICAgICAgICAgICAgICBtYXliZUVycm9yID0gYXJnc1sxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1heWJlRXJyb3IgPSBhcmdzWzBdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKDAsIF9pc25leHRyb3V0ZXJlcnJvci5pc05leHRSb3V0ZXJFcnJvcikobWF5YmVFcnJvcikpIHtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgKDAsIF91c2VlcnJvcmhhbmRsZXIuaGFuZGxlQ29uc29sZUVycm9yKSgvLyByZXBsYXllZCBlcnJvcnMgaGF2ZSB0aGVpciBvd24gY29tcGxleCBmb3JtYXQgc3RyaW5nIHRoYXQgc2hvdWxkIGJlIHVzZWQsXG4gICAgICAgICAgICAgICAgLy8gYnV0IGlmIHdlIHBhc3MgdGhlIGVycm9yIGRpcmVjdGx5LCBgaGFuZGxlQ2xpZW50RXJyb3JgIHdpbGwgaWdub3JlIGl0XG4gICAgICAgICAgICAgICAgbWF5YmVFcnJvciwgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoX2ZvcndhcmRsb2dzLmlzVGVybWluYWxMb2dnaW5nRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICgwLCBfZm9yd2FyZGxvZ3MuZm9yd2FyZEVycm9yTG9nKShhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9yaWdpbkNvbnNvbGVFcnJvci5hcHBseSh3aW5kb3cuY29uc29sZSwgYXJncyk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnRlcmNlcHQtY29uc29sZS1lcnJvci5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/errors/intercept-console-error.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/errors/replay-ssr-only-errors.js":
|
||
/*!*********************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/next-devtools/userspace/app/errors/replay-ssr-only-errors.js ***!
|
||
\*********************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"ReplaySsrOnlyErrors\", ({\n enumerable: true,\n get: function() {\n return ReplaySsrOnlyErrors;\n }\n}));\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\nconst _useerrorhandler = __webpack_require__(/*! ./use-error-handler */ \"(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/errors/use-error-handler.js\");\nconst _isnextroutererror = __webpack_require__(/*! ../../../../client/components/is-next-router-error */ \"(app-pages-browser)/./node_modules/next/dist/client/components/is-next-router-error.js\");\nconst _constants = __webpack_require__(/*! ../../../../shared/lib/errors/constants */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/errors/constants.js\");\nfunction readSsrError() {\n if (typeof document === 'undefined') {\n return null;\n }\n const ssrErrorTemplateTag = document.querySelector('template[data-next-error-message]');\n if (ssrErrorTemplateTag) {\n const message = ssrErrorTemplateTag.getAttribute('data-next-error-message');\n const stack = ssrErrorTemplateTag.getAttribute('data-next-error-stack');\n const digest = ssrErrorTemplateTag.getAttribute('data-next-error-digest');\n const error = Object.defineProperty(new Error(message), \"__NEXT_ERROR_CODE\", {\n value: \"E394\",\n enumerable: false,\n configurable: true\n });\n if (digest) {\n ;\n error.digest = digest;\n }\n // Skip Next.js SSR'd internal errors that which will be handled by the error boundaries.\n if ((0, _isnextroutererror.isNextRouterError)(error)) {\n return null;\n }\n error.stack = stack || '';\n return error;\n }\n return null;\n}\nfunction ReplaySsrOnlyErrors(param) {\n let { onBlockingError } = param;\n if (true) {\n // Need to read during render. The attributes will be gone after commit.\n const ssrError = readSsrError();\n // eslint-disable-next-line react-hooks/rules-of-hooks\n (0, _react.useEffect)(()=>{\n if (ssrError !== null) {\n // TODO(veil): Include original Owner Stack (NDX-905)\n // TODO(veil): Mark as recoverable error\n // TODO(veil): console.error\n (0, _useerrorhandler.handleClientError)(ssrError);\n // If it's missing root tags, we can't recover, make it blocking.\n if (ssrError.digest === _constants.MISSING_ROOT_TAGS_ERROR) {\n onBlockingError();\n }\n }\n }, [\n ssrError,\n onBlockingError\n ]);\n }\n return null;\n}\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', { value: true });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n}\n\n//# sourceMappingURL=replay-ssr-only-errors.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL2Vycm9ycy9yZXBsYXktc3NyLW9ubHktZXJyb3JzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsdURBQXNEO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsZUFBZSxtQkFBTyxDQUFDLG1GQUFPO0FBQzlCLHlCQUF5QixtQkFBTyxDQUFDLGlJQUFxQjtBQUN0RCwyQkFBMkIsbUJBQU8sQ0FBQyxrSkFBb0Q7QUFDdkYsbUJBQW1CLG1CQUFPLENBQUMsNEhBQXlDO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLGtCQUFrQjtBQUM1QixRQUFRLElBQXFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EseURBQXlELGFBQWE7QUFDdEU7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyIvaG9tZS9OaWNob2xhaS9Eb2N1bWVudHMvRGV2L2Jpb2hhemFyZC12ZngtMS9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L25leHQtZGV2dG9vbHMvdXNlcnNwYWNlL2FwcC9lcnJvcnMvcmVwbGF5LXNzci1vbmx5LWVycm9ycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlcGxheVNzck9ubHlFcnJvcnNcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJlcGxheVNzck9ubHlFcnJvcnM7XG4gICAgfVxufSk7XG5jb25zdCBfcmVhY3QgPSByZXF1aXJlKFwicmVhY3RcIik7XG5jb25zdCBfdXNlZXJyb3JoYW5kbGVyID0gcmVxdWlyZShcIi4vdXNlLWVycm9yLWhhbmRsZXJcIik7XG5jb25zdCBfaXNuZXh0cm91dGVyZXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vY2xpZW50L2NvbXBvbmVudHMvaXMtbmV4dC1yb3V0ZXItZXJyb3JcIik7XG5jb25zdCBfY29uc3RhbnRzID0gcmVxdWlyZShcIi4uLy4uLy4uLy4uL3NoYXJlZC9saWIvZXJyb3JzL2NvbnN0YW50c1wiKTtcbmZ1bmN0aW9uIHJlYWRTc3JFcnJvcigpIHtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgc3NyRXJyb3JUZW1wbGF0ZVRhZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3RlbXBsYXRlW2RhdGEtbmV4dC1lcnJvci1tZXNzYWdlXScpO1xuICAgIGlmIChzc3JFcnJvclRlbXBsYXRlVGFnKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBzc3JFcnJvclRlbXBsYXRlVGFnLmdldEF0dHJpYnV0ZSgnZGF0YS1uZXh0LWVycm9yLW1lc3NhZ2UnKTtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBzc3JFcnJvclRlbXBsYXRlVGFnLmdldEF0dHJpYnV0ZSgnZGF0YS1uZXh0LWVycm9yLXN0YWNrJyk7XG4gICAgICAgIGNvbnN0IGRpZ2VzdCA9IHNzckVycm9yVGVtcGxhdGVUYWcuZ2V0QXR0cmlidXRlKCdkYXRhLW5leHQtZXJyb3ItZGlnZXN0Jyk7XG4gICAgICAgIGNvbnN0IGVycm9yID0gT2JqZWN0LmRlZmluZVByb3BlcnR5KG5ldyBFcnJvcihtZXNzYWdlKSwgXCJfX05FWFRfRVJST1JfQ09ERVwiLCB7XG4gICAgICAgICAgICB2YWx1ZTogXCJFMzk0XCIsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGRpZ2VzdCkge1xuICAgICAgICAgICAgO1xuICAgICAgICAgICAgZXJyb3IuZGlnZXN0ID0gZGlnZXN0O1xuICAgICAgICB9XG4gICAgICAgIC8vIFNraXAgTmV4dC5qcyBTU1InZCBpbnRlcm5hbCBlcnJvcnMgdGhhdCB3aGljaCB3aWxsIGJlIGhhbmRsZWQgYnkgdGhlIGVycm9yIGJvdW5kYXJpZXMuXG4gICAgICAgIGlmICgoMCwgX2lzbmV4dHJvdXRlcmVycm9yLmlzTmV4dFJvdXRlckVycm9yKShlcnJvcikpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVycm9yLnN0YWNrID0gc3RhY2sgfHwgJyc7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBSZXBsYXlTc3JPbmx5RXJyb3JzKHBhcmFtKSB7XG4gICAgbGV0IHsgb25CbG9ja2luZ0Vycm9yIH0gPSBwYXJhbTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAvLyBOZWVkIHRvIHJlYWQgZHVyaW5nIHJlbmRlci4gVGhlIGF0dHJpYnV0ZXMgd2lsbCBiZSBnb25lIGFmdGVyIGNvbW1pdC5cbiAgICAgICAgY29uc3Qgc3NyRXJyb3IgPSByZWFkU3NyRXJyb3IoKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgICAgICgwLCBfcmVhY3QudXNlRWZmZWN0KSgoKT0+e1xuICAgICAgICAgICAgaWYgKHNzckVycm9yICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETyh2ZWlsKTogSW5jbHVkZSBvcmlnaW5hbCBPd25lciBTdGFjayAoTkRYLTkwNSlcbiAgICAgICAgICAgICAgICAvLyBUT0RPKHZlaWwpOiBNYXJrIGFzIHJlY292ZXJhYmxlIGVycm9yXG4gICAgICAgICAgICAgICAgLy8gVE9ETyh2ZWlsKTogY29uc29sZS5lcnJvclxuICAgICAgICAgICAgICAgICgwLCBfdXNlZXJyb3JoYW5kbGVyLmhhbmRsZUNsaWVudEVycm9yKShzc3JFcnJvcik7XG4gICAgICAgICAgICAgICAgLy8gSWYgaXQncyBtaXNzaW5nIHJvb3QgdGFncywgd2UgY2FuJ3QgcmVjb3ZlciwgbWFrZSBpdCBibG9ja2luZy5cbiAgICAgICAgICAgICAgICBpZiAoc3NyRXJyb3IuZGlnZXN0ID09PSBfY29uc3RhbnRzLk1JU1NJTkdfUk9PVF9UQUdTX0VSUk9SKSB7XG4gICAgICAgICAgICAgICAgICAgIG9uQmxvY2tpbmdFcnJvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgW1xuICAgICAgICAgICAgc3NyRXJyb3IsXG4gICAgICAgICAgICBvbkJsb2NraW5nRXJyb3JcbiAgICAgICAgXSk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXBsYXktc3NyLW9ubHktZXJyb3JzLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/errors/replay-ssr-only-errors.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/errors/stitched-error.js":
|
||
/*!*************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/next-devtools/userspace/app/errors/stitched-error.js ***!
|
||
\*************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n coerceError: function() {\n return coerceError;\n },\n decorateDevError: function() {\n return decorateDevError;\n },\n getComponentStack: function() {\n return getComponentStack;\n },\n getOwnerStack: function() {\n return getOwnerStack;\n },\n setComponentStack: function() {\n return setComponentStack;\n },\n setOwnerStack: function() {\n return setOwnerStack;\n },\n setOwnerStackIfAvailable: function() {\n return setOwnerStackIfAvailable;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _iserror = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../../../../lib/is-error */ \"(app-pages-browser)/./node_modules/next/dist/lib/is-error.js\"));\nconst ownerStacks = new WeakMap();\nconst componentStacks = new WeakMap();\nfunction getComponentStack(error) {\n return componentStacks.get(error);\n}\nfunction setComponentStack(error, stack) {\n componentStacks.set(error, stack);\n}\nfunction getOwnerStack(error) {\n return ownerStacks.get(error);\n}\nfunction setOwnerStack(error, stack) {\n ownerStacks.set(error, stack);\n}\nfunction coerceError(value) {\n return (0, _iserror.default)(value) ? value : Object.defineProperty(new Error('' + value), \"__NEXT_ERROR_CODE\", {\n value: \"E394\",\n enumerable: false,\n configurable: true\n });\n}\nfunction setOwnerStackIfAvailable(error) {\n // React 18 and prod does not have `captureOwnerStack`\n if ('captureOwnerStack' in _react.default) {\n setOwnerStack(error, _react.default.captureOwnerStack());\n }\n}\nfunction decorateDevError(thrownValue, errorInfo) {\n const error = coerceError(thrownValue);\n setOwnerStackIfAvailable(error);\n // TODO: change to passing down errorInfo later\n // In development mode, pass along the component stack to the error\n if (errorInfo.componentStack) {\n setComponentStack(error, errorInfo.componentStack);\n }\n return error;\n}\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', { value: true });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n}\n\n//# sourceMappingURL=stitched-error.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL2Vycm9ycy9zdGl0Y2hlZC1lcnJvci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLE1BQU0sQ0FRTDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsaUNBQWlDLG1CQUFPLENBQUMsZ0lBQXlDO0FBQ2xGLHdEQUF3RCxtQkFBTyxDQUFDLG1GQUFPO0FBQ3ZFLDBEQUEwRCxtQkFBTyxDQUFDLDhGQUEwQjtBQUM1RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EseURBQXlELGFBQWE7QUFDdEU7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyIvaG9tZS9OaWNob2xhaS9Eb2N1bWVudHMvRGV2L2Jpb2hhemFyZC12ZngtMS9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L25leHQtZGV2dG9vbHMvdXNlcnNwYWNlL2FwcC9lcnJvcnMvc3RpdGNoZWQtZXJyb3IuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBjb2VyY2VFcnJvcjogbnVsbCxcbiAgICBkZWNvcmF0ZURldkVycm9yOiBudWxsLFxuICAgIGdldENvbXBvbmVudFN0YWNrOiBudWxsLFxuICAgIGdldE93bmVyU3RhY2s6IG51bGwsXG4gICAgc2V0Q29tcG9uZW50U3RhY2s6IG51bGwsXG4gICAgc2V0T3duZXJTdGFjazogbnVsbCxcbiAgICBzZXRPd25lclN0YWNrSWZBdmFpbGFibGU6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgY29lcmNlRXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gY29lcmNlRXJyb3I7XG4gICAgfSxcbiAgICBkZWNvcmF0ZURldkVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGRlY29yYXRlRGV2RXJyb3I7XG4gICAgfSxcbiAgICBnZXRDb21wb25lbnRTdGFjazogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRDb21wb25lbnRTdGFjaztcbiAgICB9LFxuICAgIGdldE93bmVyU3RhY2s6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0T3duZXJTdGFjaztcbiAgICB9LFxuICAgIHNldENvbXBvbmVudFN0YWNrOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHNldENvbXBvbmVudFN0YWNrO1xuICAgIH0sXG4gICAgc2V0T3duZXJTdGFjazogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzZXRPd25lclN0YWNrO1xuICAgIH0sXG4gICAgc2V0T3duZXJTdGFja0lmQXZhaWxhYmxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHNldE93bmVyU3RhY2tJZkF2YWlsYWJsZTtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHRcIik7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5jb25zdCBfaXNlcnJvciA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcIi4uLy4uLy4uLy4uL2xpYi9pcy1lcnJvclwiKSk7XG5jb25zdCBvd25lclN0YWNrcyA9IG5ldyBXZWFrTWFwKCk7XG5jb25zdCBjb21wb25lbnRTdGFja3MgPSBuZXcgV2Vha01hcCgpO1xuZnVuY3Rpb24gZ2V0Q29tcG9uZW50U3RhY2soZXJyb3IpIHtcbiAgICByZXR1cm4gY29tcG9uZW50U3RhY2tzLmdldChlcnJvcik7XG59XG5mdW5jdGlvbiBzZXRDb21wb25lbnRTdGFjayhlcnJvciwgc3RhY2spIHtcbiAgICBjb21wb25lbnRTdGFja3Muc2V0KGVycm9yLCBzdGFjayk7XG59XG5mdW5jdGlvbiBnZXRPd25lclN0YWNrKGVycm9yKSB7XG4gICAgcmV0dXJuIG93bmVyU3RhY2tzLmdldChlcnJvcik7XG59XG5mdW5jdGlvbiBzZXRPd25lclN0YWNrKGVycm9yLCBzdGFjaykge1xuICAgIG93bmVyU3RhY2tzLnNldChlcnJvciwgc3RhY2spO1xufVxuZnVuY3Rpb24gY29lcmNlRXJyb3IodmFsdWUpIHtcbiAgICByZXR1cm4gKDAsIF9pc2Vycm9yLmRlZmF1bHQpKHZhbHVlKSA/IHZhbHVlIDogT2JqZWN0LmRlZmluZVByb3BlcnR5KG5ldyBFcnJvcignJyArIHZhbHVlKSwgXCJfX05FWFRfRVJST1JfQ09ERVwiLCB7XG4gICAgICAgIHZhbHVlOiBcIkUzOTRcIixcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xufVxuZnVuY3Rpb24gc2V0T3duZXJTdGFja0lmQXZhaWxhYmxlKGVycm9yKSB7XG4gICAgLy8gUmVhY3QgMTggYW5kIHByb2QgZG9lcyBub3QgaGF2ZSBgY2FwdHVyZU93bmVyU3RhY2tgXG4gICAgaWYgKCdjYXB0dXJlT3duZXJTdGFjaycgaW4gX3JlYWN0LmRlZmF1bHQpIHtcbiAgICAgICAgc2V0T3duZXJTdGFjayhlcnJvciwgX3JlYWN0LmRlZmF1bHQuY2FwdHVyZU93bmVyU3RhY2soKSk7XG4gICAgfVxufVxuZnVuY3Rpb24gZGVjb3JhdGVEZXZFcnJvcih0aHJvd25WYWx1ZSwgZXJyb3JJbmZvKSB7XG4gICAgY29uc3QgZXJyb3IgPSBjb2VyY2VFcnJvcih0aHJvd25WYWx1ZSk7XG4gICAgc2V0T3duZXJTdGFja0lmQXZhaWxhYmxlKGVycm9yKTtcbiAgICAvLyBUT0RPOiBjaGFuZ2UgdG8gcGFzc2luZyBkb3duIGVycm9ySW5mbyBsYXRlclxuICAgIC8vIEluIGRldmVsb3BtZW50IG1vZGUsIHBhc3MgYWxvbmcgdGhlIGNvbXBvbmVudCBzdGFjayB0byB0aGUgZXJyb3JcbiAgICBpZiAoZXJyb3JJbmZvLmNvbXBvbmVudFN0YWNrKSB7XG4gICAgICAgIHNldENvbXBvbmVudFN0YWNrKGVycm9yLCBlcnJvckluZm8uY29tcG9uZW50U3RhY2spO1xuICAgIH1cbiAgICByZXR1cm4gZXJyb3I7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0aXRjaGVkLWVycm9yLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/errors/stitched-error.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/errors/use-error-handler.js":
|
||
/*!****************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/next-devtools/userspace/app/errors/use-error-handler.js ***!
|
||
\****************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n handleClientError: function() {\n return handleClientError;\n },\n handleConsoleError: function() {\n return handleConsoleError;\n },\n handleGlobalErrors: function() {\n return handleGlobalErrors;\n },\n useErrorHandler: function() {\n return useErrorHandler;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\nconst _isnextroutererror = __webpack_require__(/*! ../../../../client/components/is-next-router-error */ \"(app-pages-browser)/./node_modules/next/dist/client/components/is-next-router-error.js\");\nconst _console = __webpack_require__(/*! ../../../../client/lib/console */ \"(app-pages-browser)/./node_modules/next/dist/client/lib/console.js\");\nconst _iserror = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../../../../lib/is-error */ \"(app-pages-browser)/./node_modules/next/dist/lib/is-error.js\"));\nconst _consoleerror = __webpack_require__(/*! ../../../shared/console-error */ \"(app-pages-browser)/./node_modules/next/dist/next-devtools/shared/console-error.js\");\nconst _stitchederror = __webpack_require__(/*! ./stitched-error */ \"(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/errors/stitched-error.js\");\nconst _forwardlogs = __webpack_require__(/*! ../forward-logs */ \"(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/forward-logs.js\");\nconst queueMicroTask = globalThis.queueMicrotask || ((cb)=>Promise.resolve().then(cb));\nconst errorQueue = [];\nconst errorHandlers = [];\nconst rejectionQueue = [];\nconst rejectionHandlers = [];\nfunction handleConsoleError(originError, consoleErrorArgs) {\n let error;\n const { environmentName } = (0, _console.parseConsoleArgs)(consoleErrorArgs);\n if ((0, _iserror.default)(originError)) {\n error = (0, _consoleerror.createConsoleError)(originError, environmentName);\n } else {\n error = (0, _consoleerror.createConsoleError)((0, _console.formatConsoleArgs)(consoleErrorArgs), environmentName);\n }\n (0, _stitchederror.setOwnerStackIfAvailable)(error);\n errorQueue.push(error);\n for (const handler of errorHandlers){\n // Delayed the error being passed to React Dev Overlay,\n // avoid the state being synchronously updated in the component.\n queueMicroTask(()=>{\n handler(error);\n });\n }\n}\nfunction handleClientError(error) {\n errorQueue.push(error);\n for (const handler of errorHandlers){\n // Delayed the error being passed to React Dev Overlay,\n // avoid the state being synchronously updated in the component.\n queueMicroTask(()=>{\n handler(error);\n });\n }\n}\nfunction useErrorHandler(handleOnUnhandledError, handleOnUnhandledRejection) {\n (0, _react.useEffect)(()=>{\n // Handle queued errors.\n errorQueue.forEach(handleOnUnhandledError);\n rejectionQueue.forEach(handleOnUnhandledRejection);\n // Listen to new errors.\n errorHandlers.push(handleOnUnhandledError);\n rejectionHandlers.push(handleOnUnhandledRejection);\n return ()=>{\n // Remove listeners.\n errorHandlers.splice(errorHandlers.indexOf(handleOnUnhandledError), 1);\n rejectionHandlers.splice(rejectionHandlers.indexOf(handleOnUnhandledRejection), 1);\n // Reset error queues.\n errorQueue.splice(0, errorQueue.length);\n rejectionQueue.splice(0, rejectionQueue.length);\n };\n }, [\n handleOnUnhandledError,\n handleOnUnhandledRejection\n ]);\n}\nfunction onUnhandledError(event) {\n const thrownValue = event.error;\n if ((0, _isnextroutererror.isNextRouterError)(thrownValue)) {\n event.preventDefault();\n return false;\n }\n // When there's an error property present, we log the error to error overlay.\n // Otherwise we don't do anything as it's not logging in the console either.\n if (thrownValue) {\n const error = (0, _stitchederror.coerceError)(thrownValue);\n (0, _stitchederror.setOwnerStackIfAvailable)(error);\n handleClientError(error);\n if (_forwardlogs.isTerminalLoggingEnabled) {\n (0, _forwardlogs.forwardUnhandledError)(error);\n }\n }\n}\nfunction onUnhandledRejection(ev) {\n const reason = ev == null ? void 0 : ev.reason;\n if ((0, _isnextroutererror.isNextRouterError)(reason)) {\n ev.preventDefault();\n return;\n }\n const error = (0, _stitchederror.coerceError)(reason);\n (0, _stitchederror.setOwnerStackIfAvailable)(error);\n rejectionQueue.push(error);\n for (const handler of rejectionHandlers){\n handler(error);\n }\n if (_forwardlogs.isTerminalLoggingEnabled) {\n (0, _forwardlogs.logUnhandledRejection)(reason);\n }\n}\nfunction handleGlobalErrors() {\n if (typeof window !== 'undefined') {\n try {\n // Increase the number of stack frames on the client\n Error.stackTraceLimit = 50;\n } catch (e) {}\n window.addEventListener('error', onUnhandledError);\n window.addEventListener('unhandledrejection', onUnhandledRejection);\n }\n}\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', { value: true });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n}\n\n//# sourceMappingURL=use-error-handler.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL2Vycm9ycy91c2UtZXJyb3ItaGFuZGxlci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLE1BQU0sQ0FLTDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsaUNBQWlDLG1CQUFPLENBQUMsZ0lBQXlDO0FBQ2xGLGVBQWUsbUJBQU8sQ0FBQyxtRkFBTztBQUM5QiwyQkFBMkIsbUJBQU8sQ0FBQyxrSkFBb0Q7QUFDdkYsaUJBQWlCLG1CQUFPLENBQUMsMEdBQWdDO0FBQ3pELDBEQUEwRCxtQkFBTyxDQUFDLDhGQUEwQjtBQUM1RixzQkFBc0IsbUJBQU8sQ0FBQyx5SEFBK0I7QUFDN0QsdUJBQXVCLG1CQUFPLENBQUMsMkhBQWtCO0FBQ2pELHFCQUFxQixtQkFBTyxDQUFDLGlIQUFpQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksa0JBQWtCO0FBQzlCO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EseURBQXlELGFBQWE7QUFDdEU7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyIvaG9tZS9OaWNob2xhaS9Eb2N1bWVudHMvRGV2L2Jpb2hhemFyZC12ZngtMS9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L25leHQtZGV2dG9vbHMvdXNlcnNwYWNlL2FwcC9lcnJvcnMvdXNlLWVycm9yLWhhbmRsZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBoYW5kbGVDbGllbnRFcnJvcjogbnVsbCxcbiAgICBoYW5kbGVDb25zb2xlRXJyb3I6IG51bGwsXG4gICAgaGFuZGxlR2xvYmFsRXJyb3JzOiBudWxsLFxuICAgIHVzZUVycm9ySGFuZGxlcjogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBoYW5kbGVDbGllbnRFcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVDbGllbnRFcnJvcjtcbiAgICB9LFxuICAgIGhhbmRsZUNvbnNvbGVFcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVDb25zb2xlRXJyb3I7XG4gICAgfSxcbiAgICBoYW5kbGVHbG9iYWxFcnJvcnM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaGFuZGxlR2xvYmFsRXJyb3JzO1xuICAgIH0sXG4gICAgdXNlRXJyb3JIYW5kbGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHVzZUVycm9ySGFuZGxlcjtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHRcIik7XG5jb25zdCBfcmVhY3QgPSByZXF1aXJlKFwicmVhY3RcIik7XG5jb25zdCBfaXNuZXh0cm91dGVyZXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vY2xpZW50L2NvbXBvbmVudHMvaXMtbmV4dC1yb3V0ZXItZXJyb3JcIik7XG5jb25zdCBfY29uc29sZSA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi9jbGllbnQvbGliL2NvbnNvbGVcIik7XG5jb25zdCBfaXNlcnJvciA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcIi4uLy4uLy4uLy4uL2xpYi9pcy1lcnJvclwiKSk7XG5jb25zdCBfY29uc29sZWVycm9yID0gcmVxdWlyZShcIi4uLy4uLy4uL3NoYXJlZC9jb25zb2xlLWVycm9yXCIpO1xuY29uc3QgX3N0aXRjaGVkZXJyb3IgPSByZXF1aXJlKFwiLi9zdGl0Y2hlZC1lcnJvclwiKTtcbmNvbnN0IF9mb3J3YXJkbG9ncyA9IHJlcXVpcmUoXCIuLi9mb3J3YXJkLWxvZ3NcIik7XG5jb25zdCBxdWV1ZU1pY3JvVGFzayA9IGdsb2JhbFRoaXMucXVldWVNaWNyb3Rhc2sgfHwgKChjYik9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oY2IpKTtcbmNvbnN0IGVycm9yUXVldWUgPSBbXTtcbmNvbnN0IGVycm9ySGFuZGxlcnMgPSBbXTtcbmNvbnN0IHJlamVjdGlvblF1ZXVlID0gW107XG5jb25zdCByZWplY3Rpb25IYW5kbGVycyA9IFtdO1xuZnVuY3Rpb24gaGFuZGxlQ29uc29sZUVycm9yKG9yaWdpbkVycm9yLCBjb25zb2xlRXJyb3JBcmdzKSB7XG4gICAgbGV0IGVycm9yO1xuICAgIGNvbnN0IHsgZW52aXJvbm1lbnROYW1lIH0gPSAoMCwgX2NvbnNvbGUucGFyc2VDb25zb2xlQXJncykoY29uc29sZUVycm9yQXJncyk7XG4gICAgaWYgKCgwLCBfaXNlcnJvci5kZWZhdWx0KShvcmlnaW5FcnJvcikpIHtcbiAgICAgICAgZXJyb3IgPSAoMCwgX2NvbnNvbGVlcnJvci5jcmVhdGVDb25zb2xlRXJyb3IpKG9yaWdpbkVycm9yLCBlbnZpcm9ubWVudE5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yID0gKDAsIF9jb25zb2xlZXJyb3IuY3JlYXRlQ29uc29sZUVycm9yKSgoMCwgX2NvbnNvbGUuZm9ybWF0Q29uc29sZUFyZ3MpKGNvbnNvbGVFcnJvckFyZ3MpLCBlbnZpcm9ubWVudE5hbWUpO1xuICAgIH1cbiAgICAoMCwgX3N0aXRjaGVkZXJyb3Iuc2V0T3duZXJTdGFja0lmQXZhaWxhYmxlKShlcnJvcik7XG4gICAgZXJyb3JRdWV1ZS5wdXNoKGVycm9yKTtcbiAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgZXJyb3JIYW5kbGVycyl7XG4gICAgICAgIC8vIERlbGF5ZWQgdGhlIGVycm9yIGJlaW5nIHBhc3NlZCB0byBSZWFjdCBEZXYgT3ZlcmxheSxcbiAgICAgICAgLy8gYXZvaWQgdGhlIHN0YXRlIGJlaW5nIHN5bmNocm9ub3VzbHkgdXBkYXRlZCBpbiB0aGUgY29tcG9uZW50LlxuICAgICAgICBxdWV1ZU1pY3JvVGFzaygoKT0+e1xuICAgICAgICAgICAgaGFuZGxlcihlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGhhbmRsZUNsaWVudEVycm9yKGVycm9yKSB7XG4gICAgZXJyb3JRdWV1ZS5wdXNoKGVycm9yKTtcbiAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgZXJyb3JIYW5kbGVycyl7XG4gICAgICAgIC8vIERlbGF5ZWQgdGhlIGVycm9yIGJlaW5nIHBhc3NlZCB0byBSZWFjdCBEZXYgT3ZlcmxheSxcbiAgICAgICAgLy8gYXZvaWQgdGhlIHN0YXRlIGJlaW5nIHN5bmNocm9ub3VzbHkgdXBkYXRlZCBpbiB0aGUgY29tcG9uZW50LlxuICAgICAgICBxdWV1ZU1pY3JvVGFzaygoKT0+e1xuICAgICAgICAgICAgaGFuZGxlcihlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHVzZUVycm9ySGFuZGxlcihoYW5kbGVPblVuaGFuZGxlZEVycm9yLCBoYW5kbGVPblVuaGFuZGxlZFJlamVjdGlvbikge1xuICAgICgwLCBfcmVhY3QudXNlRWZmZWN0KSgoKT0+e1xuICAgICAgICAvLyBIYW5kbGUgcXVldWVkIGVycm9ycy5cbiAgICAgICAgZXJyb3JRdWV1ZS5mb3JFYWNoKGhhbmRsZU9uVW5oYW5kbGVkRXJyb3IpO1xuICAgICAgICByZWplY3Rpb25RdWV1ZS5mb3JFYWNoKGhhbmRsZU9uVW5oYW5kbGVkUmVqZWN0aW9uKTtcbiAgICAgICAgLy8gTGlzdGVuIHRvIG5ldyBlcnJvcnMuXG4gICAgICAgIGVycm9ySGFuZGxlcnMucHVzaChoYW5kbGVPblVuaGFuZGxlZEVycm9yKTtcbiAgICAgICAgcmVqZWN0aW9uSGFuZGxlcnMucHVzaChoYW5kbGVPblVuaGFuZGxlZFJlamVjdGlvbik7XG4gICAgICAgIHJldHVybiAoKT0+e1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGxpc3RlbmVycy5cbiAgICAgICAgICAgIGVycm9ySGFuZGxlcnMuc3BsaWNlKGVycm9ySGFuZGxlcnMuaW5kZXhPZihoYW5kbGVPblVuaGFuZGxlZEVycm9yKSwgMSk7XG4gICAgICAgICAgICByZWplY3Rpb25IYW5kbGVycy5zcGxpY2UocmVqZWN0aW9uSGFuZGxlcnMuaW5kZXhPZihoYW5kbGVPblVuaGFuZGxlZFJlamVjdGlvbiksIDEpO1xuICAgICAgICAgICAgLy8gUmVzZXQgZXJyb3IgcXVldWVzLlxuICAgICAgICAgICAgZXJyb3JRdWV1ZS5zcGxpY2UoMCwgZXJyb3JRdWV1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgcmVqZWN0aW9uUXVldWUuc3BsaWNlKDAsIHJlamVjdGlvblF1ZXVlLmxlbmd0aCk7XG4gICAgICAgIH07XG4gICAgfSwgW1xuICAgICAgICBoYW5kbGVPblVuaGFuZGxlZEVycm9yLFxuICAgICAgICBoYW5kbGVPblVuaGFuZGxlZFJlamVjdGlvblxuICAgIF0pO1xufVxuZnVuY3Rpb24gb25VbmhhbmRsZWRFcnJvcihldmVudCkge1xuICAgIGNvbnN0IHRocm93blZhbHVlID0gZXZlbnQuZXJyb3I7XG4gICAgaWYgKCgwLCBfaXNuZXh0cm91dGVyZXJyb3IuaXNOZXh0Um91dGVyRXJyb3IpKHRocm93blZhbHVlKSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIFdoZW4gdGhlcmUncyBhbiBlcnJvciBwcm9wZXJ0eSBwcmVzZW50LCB3ZSBsb2cgdGhlIGVycm9yIHRvIGVycm9yIG92ZXJsYXkuXG4gICAgLy8gT3RoZXJ3aXNlIHdlIGRvbid0IGRvIGFueXRoaW5nIGFzIGl0J3Mgbm90IGxvZ2dpbmcgaW4gdGhlIGNvbnNvbGUgZWl0aGVyLlxuICAgIGlmICh0aHJvd25WYWx1ZSkge1xuICAgICAgICBjb25zdCBlcnJvciA9ICgwLCBfc3RpdGNoZWRlcnJvci5jb2VyY2VFcnJvcikodGhyb3duVmFsdWUpO1xuICAgICAgICAoMCwgX3N0aXRjaGVkZXJyb3Iuc2V0T3duZXJTdGFja0lmQXZhaWxhYmxlKShlcnJvcik7XG4gICAgICAgIGhhbmRsZUNsaWVudEVycm9yKGVycm9yKTtcbiAgICAgICAgaWYgKF9mb3J3YXJkbG9ncy5pc1Rlcm1pbmFsTG9nZ2luZ0VuYWJsZWQpIHtcbiAgICAgICAgICAgICgwLCBfZm9yd2FyZGxvZ3MuZm9yd2FyZFVuaGFuZGxlZEVycm9yKShlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBvblVuaGFuZGxlZFJlamVjdGlvbihldikge1xuICAgIGNvbnN0IHJlYXNvbiA9IGV2ID09IG51bGwgPyB2b2lkIDAgOiBldi5yZWFzb247XG4gICAgaWYgKCgwLCBfaXNuZXh0cm91dGVyZXJyb3IuaXNOZXh0Um91dGVyRXJyb3IpKHJlYXNvbikpIHtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBlcnJvciA9ICgwLCBfc3RpdGNoZWRlcnJvci5jb2VyY2VFcnJvcikocmVhc29uKTtcbiAgICAoMCwgX3N0aXRjaGVkZXJyb3Iuc2V0T3duZXJTdGFja0lmQXZhaWxhYmxlKShlcnJvcik7XG4gICAgcmVqZWN0aW9uUXVldWUucHVzaChlcnJvcik7XG4gICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIHJlamVjdGlvbkhhbmRsZXJzKXtcbiAgICAgICAgaGFuZGxlcihlcnJvcik7XG4gICAgfVxuICAgIGlmIChfZm9yd2FyZGxvZ3MuaXNUZXJtaW5hbExvZ2dpbmdFbmFibGVkKSB7XG4gICAgICAgICgwLCBfZm9yd2FyZGxvZ3MubG9nVW5oYW5kbGVkUmVqZWN0aW9uKShyZWFzb24pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGhhbmRsZUdsb2JhbEVycm9ycygpIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIEluY3JlYXNlIHRoZSBudW1iZXIgb2Ygc3RhY2sgZnJhbWVzIG9uIHRoZSBjbGllbnRcbiAgICAgICAgICAgIEVycm9yLnN0YWNrVHJhY2VMaW1pdCA9IDUwO1xuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBvblVuaGFuZGxlZEVycm9yKTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VuaGFuZGxlZHJlamVjdGlvbicsIG9uVW5oYW5kbGVkUmVqZWN0aW9uKTtcbiAgICB9XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZS1lcnJvci1oYW5kbGVyLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/errors/use-error-handler.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/errors/use-forward-console-log.js":
|
||
/*!**********************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/next-devtools/userspace/app/errors/use-forward-console-log.js ***!
|
||
\**********************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"useForwardConsoleLog\", ({\n enumerable: true,\n get: function() {\n return useForwardConsoleLog;\n }\n}));\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\nconst _forwardlogs = __webpack_require__(/*! ../forward-logs */ \"(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/forward-logs.js\");\nconst useForwardConsoleLog = (socketRef)=>{\n (0, _react.useEffect)(()=>{\n if (!_forwardlogs.isTerminalLoggingEnabled) {\n return;\n }\n const socket = socketRef.current;\n if (!socket) {\n return;\n }\n const onOpen = ()=>{\n _forwardlogs.logQueue.onSocketReady(socket);\n };\n socket.addEventListener('open', onOpen);\n return ()=>{\n socket.removeEventListener('open', onOpen);\n };\n }, [\n socketRef\n ]);\n};\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', { value: true });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n}\n\n//# sourceMappingURL=use-forward-console-log.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL2Vycm9ycy91c2UtZm9yd2FyZC1jb25zb2xlLWxvZy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLHdEQUF1RDtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQztBQUNGLGVBQWUsbUJBQU8sQ0FBQyxtRkFBTztBQUM5QixxQkFBcUIsbUJBQU8sQ0FBQyxpSEFBaUI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0EseURBQXlELGFBQWE7QUFDdEU7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyIvaG9tZS9OaWNob2xhaS9Eb2N1bWVudHMvRGV2L2Jpb2hhemFyZC12ZngtMS9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L25leHQtZGV2dG9vbHMvdXNlcnNwYWNlL2FwcC9lcnJvcnMvdXNlLWZvcndhcmQtY29uc29sZS1sb2cuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1c2VGb3J3YXJkQ29uc29sZUxvZ1wiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdXNlRm9yd2FyZENvbnNvbGVMb2c7XG4gICAgfVxufSk7XG5jb25zdCBfcmVhY3QgPSByZXF1aXJlKFwicmVhY3RcIik7XG5jb25zdCBfZm9yd2FyZGxvZ3MgPSByZXF1aXJlKFwiLi4vZm9yd2FyZC1sb2dzXCIpO1xuY29uc3QgdXNlRm9yd2FyZENvbnNvbGVMb2cgPSAoc29ja2V0UmVmKT0+e1xuICAgICgwLCBfcmVhY3QudXNlRWZmZWN0KSgoKT0+e1xuICAgICAgICBpZiAoIV9mb3J3YXJkbG9ncy5pc1Rlcm1pbmFsTG9nZ2luZ0VuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzb2NrZXQgPSBzb2NrZXRSZWYuY3VycmVudDtcbiAgICAgICAgaWYgKCFzb2NrZXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvbk9wZW4gPSAoKT0+e1xuICAgICAgICAgICAgX2ZvcndhcmRsb2dzLmxvZ1F1ZXVlLm9uU29ja2V0UmVhZHkoc29ja2V0KTtcbiAgICAgICAgfTtcbiAgICAgICAgc29ja2V0LmFkZEV2ZW50TGlzdGVuZXIoJ29wZW4nLCBvbk9wZW4pO1xuICAgICAgICByZXR1cm4gKCk9PntcbiAgICAgICAgICAgIHNvY2tldC5yZW1vdmVFdmVudExpc3RlbmVyKCdvcGVuJywgb25PcGVuKTtcbiAgICAgICAgfTtcbiAgICB9LCBbXG4gICAgICAgIHNvY2tldFJlZlxuICAgIF0pO1xufTtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlLWZvcndhcmQtY29uc29sZS1sb2cuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/errors/use-forward-console-log.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/forward-logs.js":
|
||
/*!****************************************************************************!*\
|
||
!*** ./node_modules/next/dist/next-devtools/userspace/app/forward-logs.js ***!
|
||
\****************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n PROMISE_MARKER: function() {\n return PROMISE_MARKER;\n },\n UNAVAILABLE_MARKER: function() {\n return UNAVAILABLE_MARKER;\n },\n forwardErrorLog: function() {\n return forwardErrorLog;\n },\n forwardUnhandledError: function() {\n return forwardUnhandledError;\n },\n initializeDebugLogForwarding: function() {\n return initializeDebugLogForwarding;\n },\n isTerminalLoggingEnabled: function() {\n return isTerminalLoggingEnabled;\n },\n logQueue: function() {\n return logQueue;\n },\n logStringify: function() {\n return logStringify;\n },\n logUnhandledRejection: function() {\n return logUnhandledRejection;\n },\n preLogSerializationClone: function() {\n return preLogSerializationClone;\n }\n});\nconst _safestablestringify = __webpack_require__(/*! next/dist/compiled/safe-stable-stringify */ \"(app-pages-browser)/./node_modules/next/dist/compiled/safe-stable-stringify/index.js\");\nconst _stitchederror = __webpack_require__(/*! ./errors/stitched-error */ \"(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/errors/stitched-error.js\");\nconst _errorsource = __webpack_require__(/*! ../../../shared/lib/error-source */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/error-source.js\");\nconst _terminalloggingconfig = __webpack_require__(/*! ./terminal-logging-config */ \"(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/terminal-logging-config.js\");\nconst _forwardlogsshared = __webpack_require__(/*! ../../shared/forward-logs-shared */ \"(app-pages-browser)/./node_modules/next/dist/next-devtools/shared/forward-logs-shared.js\");\nconst terminalLoggingConfig = (0, _terminalloggingconfig.getTerminalLoggingConfig)();\nconst PROMISE_MARKER = 'Promise {}';\nconst UNAVAILABLE_MARKER = '[Unable to view]';\nconst maximumDepth = typeof terminalLoggingConfig === 'object' && terminalLoggingConfig.depthLimit ? terminalLoggingConfig.depthLimit : 5;\nconst maximumBreadth = typeof terminalLoggingConfig === 'object' && terminalLoggingConfig.edgeLimit ? terminalLoggingConfig.edgeLimit : 100;\nconst stringify = (0, _safestablestringify.configure)({\n maximumDepth,\n maximumBreadth\n});\nconst isTerminalLoggingEnabled = (0, _terminalloggingconfig.getIsTerminalLoggingEnabled)();\nconst methods = [\n 'log',\n 'info',\n 'warn',\n 'debug',\n 'table',\n 'assert',\n 'dir',\n 'dirxml',\n 'group',\n 'groupCollapsed',\n 'groupEnd',\n 'trace'\n];\nfunction preLogSerializationClone(value, seen) {\n if (seen === void 0) seen = new WeakMap();\n if (value === undefined) return _forwardlogsshared.UNDEFINED_MARKER;\n if (value === null || typeof value !== 'object') return value;\n if (seen.has(value)) return seen.get(value);\n try {\n Object.keys(value);\n } catch (e) {\n return UNAVAILABLE_MARKER;\n }\n try {\n if (typeof value.then === 'function') return PROMISE_MARKER;\n } catch (e) {\n return UNAVAILABLE_MARKER;\n }\n if (Array.isArray(value)) {\n const out = [];\n seen.set(value, out);\n for (const item of value){\n try {\n out.push(preLogSerializationClone(item, seen));\n } catch (e) {\n out.push(UNAVAILABLE_MARKER);\n }\n }\n return out;\n }\n const proto = Object.getPrototypeOf(value);\n if (proto === Object.prototype || proto === null) {\n const out = {};\n seen.set(value, out);\n for (const key of Object.keys(value)){\n try {\n out[key] = preLogSerializationClone(value[key], seen);\n } catch (e) {\n out[key] = UNAVAILABLE_MARKER;\n }\n }\n return out;\n }\n return Object.prototype.toString.call(value);\n}\nconst logStringify = (data)=>{\n try {\n const result = stringify(data);\n return result != null ? result : '\"' + UNAVAILABLE_MARKER + '\"';\n } catch (e) {\n return '\"' + UNAVAILABLE_MARKER + '\"';\n }\n};\nconst afterThisFrame = (cb)=>{\n let timeout;\n const rafId = requestAnimationFrame(()=>{\n timeout = setTimeout(()=>{\n cb();\n });\n });\n return ()=>{\n cancelAnimationFrame(rafId);\n clearTimeout(timeout);\n };\n};\nlet isPatched = false;\nconst serializeEntries = (entries)=>entries.map((clientEntry)=>{\n switch(clientEntry.kind){\n case 'any-logged-error':\n case 'console':\n {\n return {\n ...clientEntry,\n args: clientEntry.args.map(stringifyUserArg)\n };\n }\n case 'formatted-error':\n {\n return clientEntry;\n }\n default:\n {\n return null;\n }\n }\n });\nconst logQueue = {\n entries: [],\n flushScheduled: false,\n cancelFlush: null,\n socket: null,\n sourceType: undefined,\n router: null,\n scheduleLogSend: (entry)=>{\n logQueue.entries.push(entry);\n if (logQueue.flushScheduled) {\n return;\n }\n // safe to deref and use in setTimeout closure since we cancel on new socket\n const socket = logQueue.socket;\n if (!socket) {\n return;\n }\n // we probably dont need this\n logQueue.flushScheduled = true;\n // non blocking log flush, runs at most once per frame\n logQueue.cancelFlush = afterThisFrame(()=>{\n logQueue.flushScheduled = false;\n // just incase\n try {\n const payload = JSON.stringify({\n event: 'browser-logs',\n entries: serializeEntries(logQueue.entries),\n router: logQueue.router,\n // needed for source mapping, we just assign the sourceType from the last error for the whole batch\n sourceType: logQueue.sourceType\n });\n socket.send(payload);\n logQueue.entries = [];\n logQueue.sourceType = undefined;\n } catch (e) {\n // error (make sure u don't infinite loop)\n /* noop */ }\n });\n },\n onSocketReady: (socket)=>{\n if (socket.readyState !== WebSocket.OPEN) {\n // invariant\n return;\n }\n // incase an existing timeout was going to run with a stale socket\n logQueue.cancelFlush == null ? void 0 : logQueue.cancelFlush.call(logQueue);\n logQueue.socket = socket;\n try {\n const payload = JSON.stringify({\n event: 'browser-logs',\n entries: serializeEntries(logQueue.entries),\n router: logQueue.router,\n sourceType: logQueue.sourceType\n });\n socket.send(payload);\n logQueue.entries = [];\n logQueue.sourceType = undefined;\n } catch (e) {\n /** noop just incase */ }\n }\n};\nconst stringifyUserArg = (arg)=>{\n if (arg.kind !== 'arg') {\n return arg;\n }\n return {\n ...arg,\n data: logStringify(arg.data)\n };\n};\nconst createErrorArg = (error)=>{\n const stack = stackWithOwners(error);\n return {\n kind: 'formatted-error-arg',\n prefix: error.message ? error.name + \": \" + error.message : \"\" + error.name,\n stack\n };\n};\nconst createLogEntry = (level, args)=>{\n // do not abstract this, it implicitly relies on which functions call it. forcing the inlined implementation makes you think about callers\n // error capture stack trace maybe\n const stack = stackWithOwners(new Error());\n const stackLines = stack == null ? void 0 : stack.split('\\n');\n const cleanStack = stackLines == null ? void 0 : stackLines.slice(3).join('\\n') // this is probably ignored anyways\n ;\n const entry = {\n kind: 'console',\n consoleMethodStack: cleanStack != null ? cleanStack : null,\n method: level,\n args: args.map((arg)=>{\n if (arg instanceof Error) {\n return createErrorArg(arg);\n }\n return {\n kind: 'arg',\n data: preLogSerializationClone(arg)\n };\n })\n };\n logQueue.scheduleLogSend(entry);\n};\nconst forwardErrorLog = (args)=>{\n const errorObjects = args.filter((arg)=>arg instanceof Error);\n const first = errorObjects.at(0);\n if (first) {\n const source = (0, _errorsource.getErrorSource)(first);\n if (source) {\n logQueue.sourceType = source;\n }\n }\n /**\n * browser shows stack regardless of type of data passed to console.error, so we should do the same\n *\n * do not abstract this, it implicitly relies on which functions call it. forcing the inlined implementation makes you think about callers\n */ const stack = stackWithOwners(new Error());\n const stackLines = stack == null ? void 0 : stack.split('\\n');\n const cleanStack = stackLines == null ? void 0 : stackLines.slice(3).join('\\n');\n const entry = {\n kind: 'any-logged-error',\n method: 'error',\n consoleErrorStack: cleanStack != null ? cleanStack : '',\n args: args.map((arg)=>{\n if (arg instanceof Error) {\n return createErrorArg(arg);\n }\n return {\n kind: 'arg',\n data: preLogSerializationClone(arg)\n };\n })\n };\n logQueue.scheduleLogSend(entry);\n};\nconst createUncaughtErrorEntry = (errorName, errorMessage, fullStack)=>{\n const entry = {\n kind: 'formatted-error',\n prefix: \"Uncaught \" + errorName + \": \" + errorMessage,\n stack: fullStack,\n method: 'error'\n };\n logQueue.scheduleLogSend(entry);\n};\nconst stackWithOwners = (error)=>{\n let ownerStack = '';\n (0, _stitchederror.setOwnerStackIfAvailable)(error);\n ownerStack = (0, _stitchederror.getOwnerStack)(error) || '';\n const stack = (error.stack || '') + ownerStack;\n return stack;\n};\nfunction logUnhandledRejection(reason) {\n if (reason instanceof Error) {\n createUnhandledRejectionErrorEntry(reason, stackWithOwners(reason));\n return;\n }\n createUnhandledRejectionNonErrorEntry(reason);\n}\nconst createUnhandledRejectionErrorEntry = (error, fullStack)=>{\n const source = (0, _errorsource.getErrorSource)(error);\n if (source) {\n logQueue.sourceType = source;\n }\n const entry = {\n kind: 'formatted-error',\n prefix: \"⨯ unhandledRejection: \" + error.name + \": \" + error.message,\n stack: fullStack,\n method: 'error'\n };\n logQueue.scheduleLogSend(entry);\n};\nconst createUnhandledRejectionNonErrorEntry = (reason)=>{\n const entry = {\n kind: 'any-logged-error',\n // we can't access the stack since the event is dispatched async and creating an inline error would be meaningless\n consoleErrorStack: '',\n method: 'error',\n args: [\n {\n kind: 'arg',\n data: \"⨯ unhandledRejection:\",\n isRejectionMessage: true\n },\n {\n kind: 'arg',\n data: preLogSerializationClone(reason)\n }\n ]\n };\n logQueue.scheduleLogSend(entry);\n};\nconst isHMR = (args)=>{\n const firstArg = args[0];\n if (typeof firstArg !== 'string') {\n return false;\n }\n if (firstArg.startsWith('[Fast Refresh]')) {\n return true;\n }\n if (firstArg.startsWith('[HMR]')) {\n return true;\n }\n return false;\n};\nconst isIgnoredLog = (args)=>{\n if (args.length < 3) {\n return false;\n }\n const [format, styles, label] = args;\n if (typeof format !== 'string' || typeof styles !== 'string' || typeof label !== 'string') {\n return false;\n }\n // kinda hacky, we should define a common format for these strings so we can safely ignore\n return format.startsWith('%c%s%c') && styles.includes('background:');\n};\nfunction forwardUnhandledError(error) {\n createUncaughtErrorEntry(error.name, error.message, stackWithOwners(error));\n}\nconst initializeDebugLogForwarding = (router)=>{\n // probably don't need this\n if (isPatched) {\n return;\n }\n // TODO(rob): why does this break rendering on server, important to know incase the same bug appears in browser\n if (typeof window === 'undefined') {\n return;\n }\n // better to be safe than sorry\n try {\n methods.forEach((method)=>(0, _forwardlogsshared.patchConsoleMethod)(method, function(_) {\n for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n args[_key - 1] = arguments[_key];\n }\n if (isHMR(args)) {\n return;\n }\n if (isIgnoredLog(args)) {\n return;\n }\n createLogEntry(method, args);\n }));\n } catch (e) {}\n logQueue.router = router;\n isPatched = true;\n};\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', { value: true });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n}\n\n//# sourceMappingURL=forward-logs.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL2ZvcndhcmQtbG9ncy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLE1BQU0sQ0FXTDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsNkJBQTZCLG1CQUFPLENBQUMsc0lBQTBDO0FBQy9FLHVCQUF1QixtQkFBTyxDQUFDLGtJQUF5QjtBQUN4RCxxQkFBcUIsbUJBQU8sQ0FBQyxpSEFBa0M7QUFDL0QsK0JBQStCLG1CQUFPLENBQUMsc0lBQTJCO0FBQ2xFLDJCQUEyQixtQkFBTyxDQUFDLGtJQUFrQztBQUNyRTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzR0FBc0csYUFBYTtBQUNuSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlEQUF5RCxhQUFhO0FBQ3RFO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvRG9jdW1lbnRzL0Rldi9iaW9oYXphcmQtdmZ4LTEvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9hcHAvZm9yd2FyZC1sb2dzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgUFJPTUlTRV9NQVJLRVI6IG51bGwsXG4gICAgVU5BVkFJTEFCTEVfTUFSS0VSOiBudWxsLFxuICAgIGZvcndhcmRFcnJvckxvZzogbnVsbCxcbiAgICBmb3J3YXJkVW5oYW5kbGVkRXJyb3I6IG51bGwsXG4gICAgaW5pdGlhbGl6ZURlYnVnTG9nRm9yd2FyZGluZzogbnVsbCxcbiAgICBpc1Rlcm1pbmFsTG9nZ2luZ0VuYWJsZWQ6IG51bGwsXG4gICAgbG9nUXVldWU6IG51bGwsXG4gICAgbG9nU3RyaW5naWZ5OiBudWxsLFxuICAgIGxvZ1VuaGFuZGxlZFJlamVjdGlvbjogbnVsbCxcbiAgICBwcmVMb2dTZXJpYWxpemF0aW9uQ2xvbmU6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgUFJPTUlTRV9NQVJLRVI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUFJPTUlTRV9NQVJLRVI7XG4gICAgfSxcbiAgICBVTkFWQUlMQUJMRV9NQVJLRVI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gVU5BVkFJTEFCTEVfTUFSS0VSO1xuICAgIH0sXG4gICAgZm9yd2FyZEVycm9yTG9nOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGZvcndhcmRFcnJvckxvZztcbiAgICB9LFxuICAgIGZvcndhcmRVbmhhbmRsZWRFcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBmb3J3YXJkVW5oYW5kbGVkRXJyb3I7XG4gICAgfSxcbiAgICBpbml0aWFsaXplRGVidWdMb2dGb3J3YXJkaW5nOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGluaXRpYWxpemVEZWJ1Z0xvZ0ZvcndhcmRpbmc7XG4gICAgfSxcbiAgICBpc1Rlcm1pbmFsTG9nZ2luZ0VuYWJsZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXNUZXJtaW5hbExvZ2dpbmdFbmFibGVkO1xuICAgIH0sXG4gICAgbG9nUXVldWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbG9nUXVldWU7XG4gICAgfSxcbiAgICBsb2dTdHJpbmdpZnk6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbG9nU3RyaW5naWZ5O1xuICAgIH0sXG4gICAgbG9nVW5oYW5kbGVkUmVqZWN0aW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGxvZ1VuaGFuZGxlZFJlamVjdGlvbjtcbiAgICB9LFxuICAgIHByZUxvZ1NlcmlhbGl6YXRpb25DbG9uZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBwcmVMb2dTZXJpYWxpemF0aW9uQ2xvbmU7XG4gICAgfVxufSk7XG5jb25zdCBfc2FmZXN0YWJsZXN0cmluZ2lmeSA9IHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvc2FmZS1zdGFibGUtc3RyaW5naWZ5XCIpO1xuY29uc3QgX3N0aXRjaGVkZXJyb3IgPSByZXF1aXJlKFwiLi9lcnJvcnMvc3RpdGNoZWQtZXJyb3JcIik7XG5jb25zdCBfZXJyb3Jzb3VyY2UgPSByZXF1aXJlKFwiLi4vLi4vLi4vc2hhcmVkL2xpYi9lcnJvci1zb3VyY2VcIik7XG5jb25zdCBfdGVybWluYWxsb2dnaW5nY29uZmlnID0gcmVxdWlyZShcIi4vdGVybWluYWwtbG9nZ2luZy1jb25maWdcIik7XG5jb25zdCBfZm9yd2FyZGxvZ3NzaGFyZWQgPSByZXF1aXJlKFwiLi4vLi4vc2hhcmVkL2ZvcndhcmQtbG9ncy1zaGFyZWRcIik7XG5jb25zdCB0ZXJtaW5hbExvZ2dpbmdDb25maWcgPSAoMCwgX3Rlcm1pbmFsbG9nZ2luZ2NvbmZpZy5nZXRUZXJtaW5hbExvZ2dpbmdDb25maWcpKCk7XG5jb25zdCBQUk9NSVNFX01BUktFUiA9ICdQcm9taXNlIHt9JztcbmNvbnN0IFVOQVZBSUxBQkxFX01BUktFUiA9ICdbVW5hYmxlIHRvIHZpZXddJztcbmNvbnN0IG1heGltdW1EZXB0aCA9IHR5cGVvZiB0ZXJtaW5hbExvZ2dpbmdDb25maWcgPT09ICdvYmplY3QnICYmIHRlcm1pbmFsTG9nZ2luZ0NvbmZpZy5kZXB0aExpbWl0ID8gdGVybWluYWxMb2dnaW5nQ29uZmlnLmRlcHRoTGltaXQgOiA1O1xuY29uc3QgbWF4aW11bUJyZWFkdGggPSB0eXBlb2YgdGVybWluYWxMb2dnaW5nQ29uZmlnID09PSAnb2JqZWN0JyAmJiB0ZXJtaW5hbExvZ2dpbmdDb25maWcuZWRnZUxpbWl0ID8gdGVybWluYWxMb2dnaW5nQ29uZmlnLmVkZ2VMaW1pdCA6IDEwMDtcbmNvbnN0IHN0cmluZ2lmeSA9ICgwLCBfc2FmZXN0YWJsZXN0cmluZ2lmeS5jb25maWd1cmUpKHtcbiAgICBtYXhpbXVtRGVwdGgsXG4gICAgbWF4aW11bUJyZWFkdGhcbn0pO1xuY29uc3QgaXNUZXJtaW5hbExvZ2dpbmdFbmFibGVkID0gKDAsIF90ZXJtaW5hbGxvZ2dpbmdjb25maWcuZ2V0SXNUZXJtaW5hbExvZ2dpbmdFbmFibGVkKSgpO1xuY29uc3QgbWV0aG9kcyA9IFtcbiAgICAnbG9nJyxcbiAgICAnaW5mbycsXG4gICAgJ3dhcm4nLFxuICAgICdkZWJ1ZycsXG4gICAgJ3RhYmxlJyxcbiAgICAnYXNzZXJ0JyxcbiAgICAnZGlyJyxcbiAgICAnZGlyeG1sJyxcbiAgICAnZ3JvdXAnLFxuICAgICdncm91cENvbGxhcHNlZCcsXG4gICAgJ2dyb3VwRW5kJyxcbiAgICAndHJhY2UnXG5dO1xuZnVuY3Rpb24gcHJlTG9nU2VyaWFsaXphdGlvbkNsb25lKHZhbHVlLCBzZWVuKSB7XG4gICAgaWYgKHNlZW4gPT09IHZvaWQgMCkgc2VlbiA9IG5ldyBXZWFrTWFwKCk7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBfZm9yd2FyZGxvZ3NzaGFyZWQuVU5ERUZJTkVEX01BUktFUjtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIHZhbHVlO1xuICAgIGlmIChzZWVuLmhhcyh2YWx1ZSkpIHJldHVybiBzZWVuLmdldCh2YWx1ZSk7XG4gICAgdHJ5IHtcbiAgICAgICAgT2JqZWN0LmtleXModmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIFVOQVZBSUxBQkxFX01BUktFUjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nKSByZXR1cm4gUFJPTUlTRV9NQVJLRVI7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gVU5BVkFJTEFCTEVfTUFSS0VSO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3Qgb3V0ID0gW107XG4gICAgICAgIHNlZW4uc2V0KHZhbHVlLCBvdXQpO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdmFsdWUpe1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBvdXQucHVzaChwcmVMb2dTZXJpYWxpemF0aW9uQ2xvbmUoaXRlbSwgc2VlbikpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIG91dC5wdXNoKFVOQVZBSUxBQkxFX01BUktFUik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG4gICAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuICAgIGlmIChwcm90byA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fCBwcm90byA9PT0gbnVsbCkge1xuICAgICAgICBjb25zdCBvdXQgPSB7fTtcbiAgICAgICAgc2Vlbi5zZXQodmFsdWUsIG91dCk7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHZhbHVlKSl7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIG91dFtrZXldID0gcHJlTG9nU2VyaWFsaXphdGlvbkNsb25lKHZhbHVlW2tleV0sIHNlZW4pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIG91dFtrZXldID0gVU5BVkFJTEFCTEVfTUFSS0VSO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpO1xufVxuY29uc3QgbG9nU3RyaW5naWZ5ID0gKGRhdGEpPT57XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gc3RyaW5naWZ5KGRhdGEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0ICE9IG51bGwgPyByZXN1bHQgOiAnXCInICsgVU5BVkFJTEFCTEVfTUFSS0VSICsgJ1wiJztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiAnXCInICsgVU5BVkFJTEFCTEVfTUFSS0VSICsgJ1wiJztcbiAgICB9XG59O1xuY29uc3QgYWZ0ZXJUaGlzRnJhbWUgPSAoY2IpPT57XG4gICAgbGV0IHRpbWVvdXQ7XG4gICAgY29uc3QgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntcbiAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQoKCk9PntcbiAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiAoKT0+e1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShyYWZJZCk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICB9O1xufTtcbmxldCBpc1BhdGNoZWQgPSBmYWxzZTtcbmNvbnN0IHNlcmlhbGl6ZUVudHJpZXMgPSAoZW50cmllcyk9PmVudHJpZXMubWFwKChjbGllbnRFbnRyeSk9PntcbiAgICAgICAgc3dpdGNoKGNsaWVudEVudHJ5LmtpbmQpe1xuICAgICAgICAgICAgY2FzZSAnYW55LWxvZ2dlZC1lcnJvcic6XG4gICAgICAgICAgICBjYXNlICdjb25zb2xlJzpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jbGllbnRFbnRyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IGNsaWVudEVudHJ5LmFyZ3MubWFwKHN0cmluZ2lmeVVzZXJBcmcpXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnZm9ybWF0dGVkLWVycm9yJzpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjbGllbnRFbnRyeTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5jb25zdCBsb2dRdWV1ZSA9IHtcbiAgICBlbnRyaWVzOiBbXSxcbiAgICBmbHVzaFNjaGVkdWxlZDogZmFsc2UsXG4gICAgY2FuY2VsRmx1c2g6IG51bGwsXG4gICAgc29ja2V0OiBudWxsLFxuICAgIHNvdXJjZVR5cGU6IHVuZGVmaW5lZCxcbiAgICByb3V0ZXI6IG51bGwsXG4gICAgc2NoZWR1bGVMb2dTZW5kOiAoZW50cnkpPT57XG4gICAgICAgIGxvZ1F1ZXVlLmVudHJpZXMucHVzaChlbnRyeSk7XG4gICAgICAgIGlmIChsb2dRdWV1ZS5mbHVzaFNjaGVkdWxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNhZmUgdG8gZGVyZWYgYW5kIHVzZSBpbiBzZXRUaW1lb3V0IGNsb3N1cmUgc2luY2Ugd2UgY2FuY2VsIG9uIG5ldyBzb2NrZXRcbiAgICAgICAgY29uc3Qgc29ja2V0ID0gbG9nUXVldWUuc29ja2V0O1xuICAgICAgICBpZiAoIXNvY2tldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHdlIHByb2JhYmx5IGRvbnQgbmVlZCB0aGlzXG4gICAgICAgIGxvZ1F1ZXVlLmZsdXNoU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICAgICAgLy8gbm9uIGJsb2NraW5nIGxvZyBmbHVzaCwgcnVucyBhdCBtb3N0IG9uY2UgcGVyIGZyYW1lXG4gICAgICAgIGxvZ1F1ZXVlLmNhbmNlbEZsdXNoID0gYWZ0ZXJUaGlzRnJhbWUoKCk9PntcbiAgICAgICAgICAgIGxvZ1F1ZXVlLmZsdXNoU2NoZWR1bGVkID0gZmFsc2U7XG4gICAgICAgICAgICAvLyBqdXN0IGluY2FzZVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICBldmVudDogJ2Jyb3dzZXItbG9ncycsXG4gICAgICAgICAgICAgICAgICAgIGVudHJpZXM6IHNlcmlhbGl6ZUVudHJpZXMobG9nUXVldWUuZW50cmllcyksXG4gICAgICAgICAgICAgICAgICAgIHJvdXRlcjogbG9nUXVldWUucm91dGVyLFxuICAgICAgICAgICAgICAgICAgICAvLyBuZWVkZWQgZm9yIHNvdXJjZSBtYXBwaW5nLCB3ZSBqdXN0IGFzc2lnbiB0aGUgc291cmNlVHlwZSBmcm9tIHRoZSBsYXN0IGVycm9yIGZvciB0aGUgd2hvbGUgYmF0Y2hcbiAgICAgICAgICAgICAgICAgICAgc291cmNlVHlwZTogbG9nUXVldWUuc291cmNlVHlwZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHNvY2tldC5zZW5kKHBheWxvYWQpO1xuICAgICAgICAgICAgICAgIGxvZ1F1ZXVlLmVudHJpZXMgPSBbXTtcbiAgICAgICAgICAgICAgICBsb2dRdWV1ZS5zb3VyY2VUeXBlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gZXJyb3IgKG1ha2Ugc3VyZSB1IGRvbid0IGluZmluaXRlIGxvb3ApXG4gICAgICAgICAgICAvKiBub29wICovIH1cbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBvblNvY2tldFJlYWR5OiAoc29ja2V0KT0+e1xuICAgICAgICBpZiAoc29ja2V0LnJlYWR5U3RhdGUgIT09IFdlYlNvY2tldC5PUEVOKSB7XG4gICAgICAgICAgICAvLyBpbnZhcmlhbnRcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBpbmNhc2UgYW4gZXhpc3RpbmcgdGltZW91dCB3YXMgZ29pbmcgdG8gcnVuIHdpdGggYSBzdGFsZSBzb2NrZXRcbiAgICAgICAgbG9nUXVldWUuY2FuY2VsRmx1c2ggPT0gbnVsbCA/IHZvaWQgMCA6IGxvZ1F1ZXVlLmNhbmNlbEZsdXNoLmNhbGwobG9nUXVldWUpO1xuICAgICAgICBsb2dRdWV1ZS5zb2NrZXQgPSBzb2NrZXQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwYXlsb2FkID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgIGV2ZW50OiAnYnJvd3Nlci1sb2dzJyxcbiAgICAgICAgICAgICAgICBlbnRyaWVzOiBzZXJpYWxpemVFbnRyaWVzKGxvZ1F1ZXVlLmVudHJpZXMpLFxuICAgICAgICAgICAgICAgIHJvdXRlcjogbG9nUXVldWUucm91dGVyLFxuICAgICAgICAgICAgICAgIHNvdXJjZVR5cGU6IGxvZ1F1ZXVlLnNvdXJjZVR5cGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc29ja2V0LnNlbmQocGF5bG9hZCk7XG4gICAgICAgICAgICBsb2dRdWV1ZS5lbnRyaWVzID0gW107XG4gICAgICAgICAgICBsb2dRdWV1ZS5zb3VyY2VUeXBlID0gdW5kZWZpbmVkO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8qKiBub29wIGp1c3QgaW5jYXNlICovIH1cbiAgICB9XG59O1xuY29uc3Qgc3RyaW5naWZ5VXNlckFyZyA9IChhcmcpPT57XG4gICAgaWYgKGFyZy5raW5kICE9PSAnYXJnJykge1xuICAgICAgICByZXR1cm4gYXJnO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5hcmcsXG4gICAgICAgIGRhdGE6IGxvZ1N0cmluZ2lmeShhcmcuZGF0YSlcbiAgICB9O1xufTtcbmNvbnN0IGNyZWF0ZUVycm9yQXJnID0gKGVycm9yKT0+e1xuICAgIGNvbnN0IHN0YWNrID0gc3RhY2tXaXRoT3duZXJzKGVycm9yKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBraW5kOiAnZm9ybWF0dGVkLWVycm9yLWFyZycsXG4gICAgICAgIHByZWZpeDogZXJyb3IubWVzc2FnZSA/IGVycm9yLm5hbWUgKyBcIjogXCIgKyBlcnJvci5tZXNzYWdlIDogXCJcIiArIGVycm9yLm5hbWUsXG4gICAgICAgIHN0YWNrXG4gICAgfTtcbn07XG5jb25zdCBjcmVhdGVMb2dFbnRyeSA9IChsZXZlbCwgYXJncyk9PntcbiAgICAvLyBkbyBub3QgYWJzdHJhY3QgdGhpcywgaXQgaW1wbGljaXRseSByZWxpZXMgb24gd2hpY2ggZnVuY3Rpb25zIGNhbGwgaXQuIGZvcmNpbmcgdGhlIGlubGluZWQgaW1wbGVtZW50YXRpb24gbWFrZXMgeW91IHRoaW5rIGFib3V0IGNhbGxlcnNcbiAgICAvLyBlcnJvciBjYXB0dXJlIHN0YWNrIHRyYWNlIG1heWJlXG4gICAgY29uc3Qgc3RhY2sgPSBzdGFja1dpdGhPd25lcnMobmV3IEVycm9yKCkpO1xuICAgIGNvbnN0IHN0YWNrTGluZXMgPSBzdGFjayA9PSBudWxsID8gdm9pZCAwIDogc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgIGNvbnN0IGNsZWFuU3RhY2sgPSBzdGFja0xpbmVzID09IG51bGwgPyB2b2lkIDAgOiBzdGFja0xpbmVzLnNsaWNlKDMpLmpvaW4oJ1xcbicpIC8vIHRoaXMgaXMgcHJvYmFibHkgaWdub3JlZCBhbnl3YXlzXG4gICAgO1xuICAgIGNvbnN0IGVudHJ5ID0ge1xuICAgICAgICBraW5kOiAnY29uc29sZScsXG4gICAgICAgIGNvbnNvbGVNZXRob2RTdGFjazogY2xlYW5TdGFjayAhPSBudWxsID8gY2xlYW5TdGFjayA6IG51bGwsXG4gICAgICAgIG1ldGhvZDogbGV2ZWwsXG4gICAgICAgIGFyZ3M6IGFyZ3MubWFwKChhcmcpPT57XG4gICAgICAgICAgICBpZiAoYXJnIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlRXJyb3JBcmcoYXJnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAga2luZDogJ2FyZycsXG4gICAgICAgICAgICAgICAgZGF0YTogcHJlTG9nU2VyaWFsaXphdGlvbkNsb25lKGFyZylcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgfTtcbiAgICBsb2dRdWV1ZS5zY2hlZHVsZUxvZ1NlbmQoZW50cnkpO1xufTtcbmNvbnN0IGZvcndhcmRFcnJvckxvZyA9IChhcmdzKT0+e1xuICAgIGNvbnN0IGVycm9yT2JqZWN0cyA9IGFyZ3MuZmlsdGVyKChhcmcpPT5hcmcgaW5zdGFuY2VvZiBFcnJvcik7XG4gICAgY29uc3QgZmlyc3QgPSBlcnJvck9iamVjdHMuYXQoMCk7XG4gICAgaWYgKGZpcnN0KSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9ICgwLCBfZXJyb3Jzb3VyY2UuZ2V0RXJyb3JTb3VyY2UpKGZpcnN0KTtcbiAgICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICAgICAgbG9nUXVldWUuc291cmNlVHlwZSA9IHNvdXJjZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICogYnJvd3NlciBzaG93cyBzdGFjayByZWdhcmRsZXNzIG9mIHR5cGUgb2YgZGF0YSBwYXNzZWQgdG8gY29uc29sZS5lcnJvciwgc28gd2Ugc2hvdWxkIGRvIHRoZSBzYW1lXG4gICAqXG4gICAqIGRvIG5vdCBhYnN0cmFjdCB0aGlzLCBpdCBpbXBsaWNpdGx5IHJlbGllcyBvbiB3aGljaCBmdW5jdGlvbnMgY2FsbCBpdC4gZm9yY2luZyB0aGUgaW5saW5lZCBpbXBsZW1lbnRhdGlvbiBtYWtlcyB5b3UgdGhpbmsgYWJvdXQgY2FsbGVyc1xuICAgKi8gY29uc3Qgc3RhY2sgPSBzdGFja1dpdGhPd25lcnMobmV3IEVycm9yKCkpO1xuICAgIGNvbnN0IHN0YWNrTGluZXMgPSBzdGFjayA9PSBudWxsID8gdm9pZCAwIDogc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgIGNvbnN0IGNsZWFuU3RhY2sgPSBzdGFja0xpbmVzID09IG51bGwgPyB2b2lkIDAgOiBzdGFja0xpbmVzLnNsaWNlKDMpLmpvaW4oJ1xcbicpO1xuICAgIGNvbnN0IGVudHJ5ID0ge1xuICAgICAgICBraW5kOiAnYW55LWxvZ2dlZC1lcnJvcicsXG4gICAgICAgIG1ldGhvZDogJ2Vycm9yJyxcbiAgICAgICAgY29uc29sZUVycm9yU3RhY2s6IGNsZWFuU3RhY2sgIT0gbnVsbCA/IGNsZWFuU3RhY2sgOiAnJyxcbiAgICAgICAgYXJnczogYXJncy5tYXAoKGFyZyk9PntcbiAgICAgICAgICAgIGlmIChhcmcgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVFcnJvckFyZyhhcmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBraW5kOiAnYXJnJyxcbiAgICAgICAgICAgICAgICBkYXRhOiBwcmVMb2dTZXJpYWxpemF0aW9uQ2xvbmUoYXJnKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICB9O1xuICAgIGxvZ1F1ZXVlLnNjaGVkdWxlTG9nU2VuZChlbnRyeSk7XG59O1xuY29uc3QgY3JlYXRlVW5jYXVnaHRFcnJvckVudHJ5ID0gKGVycm9yTmFtZSwgZXJyb3JNZXNzYWdlLCBmdWxsU3RhY2spPT57XG4gICAgY29uc3QgZW50cnkgPSB7XG4gICAgICAgIGtpbmQ6ICdmb3JtYXR0ZWQtZXJyb3InLFxuICAgICAgICBwcmVmaXg6IFwiVW5jYXVnaHQgXCIgKyBlcnJvck5hbWUgKyBcIjogXCIgKyBlcnJvck1lc3NhZ2UsXG4gICAgICAgIHN0YWNrOiBmdWxsU3RhY2ssXG4gICAgICAgIG1ldGhvZDogJ2Vycm9yJ1xuICAgIH07XG4gICAgbG9nUXVldWUuc2NoZWR1bGVMb2dTZW5kKGVudHJ5KTtcbn07XG5jb25zdCBzdGFja1dpdGhPd25lcnMgPSAoZXJyb3IpPT57XG4gICAgbGV0IG93bmVyU3RhY2sgPSAnJztcbiAgICAoMCwgX3N0aXRjaGVkZXJyb3Iuc2V0T3duZXJTdGFja0lmQXZhaWxhYmxlKShlcnJvcik7XG4gICAgb3duZXJTdGFjayA9ICgwLCBfc3RpdGNoZWRlcnJvci5nZXRPd25lclN0YWNrKShlcnJvcikgfHwgJyc7XG4gICAgY29uc3Qgc3RhY2sgPSAoZXJyb3Iuc3RhY2sgfHwgJycpICsgb3duZXJTdGFjaztcbiAgICByZXR1cm4gc3RhY2s7XG59O1xuZnVuY3Rpb24gbG9nVW5oYW5kbGVkUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmIChyZWFzb24gaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBjcmVhdGVVbmhhbmRsZWRSZWplY3Rpb25FcnJvckVudHJ5KHJlYXNvbiwgc3RhY2tXaXRoT3duZXJzKHJlYXNvbikpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNyZWF0ZVVuaGFuZGxlZFJlamVjdGlvbk5vbkVycm9yRW50cnkocmVhc29uKTtcbn1cbmNvbnN0IGNyZWF0ZVVuaGFuZGxlZFJlamVjdGlvbkVycm9yRW50cnkgPSAoZXJyb3IsIGZ1bGxTdGFjayk9PntcbiAgICBjb25zdCBzb3VyY2UgPSAoMCwgX2Vycm9yc291cmNlLmdldEVycm9yU291cmNlKShlcnJvcik7XG4gICAgaWYgKHNvdXJjZSkge1xuICAgICAgICBsb2dRdWV1ZS5zb3VyY2VUeXBlID0gc291cmNlO1xuICAgIH1cbiAgICBjb25zdCBlbnRyeSA9IHtcbiAgICAgICAga2luZDogJ2Zvcm1hdHRlZC1lcnJvcicsXG4gICAgICAgIHByZWZpeDogXCLiqK8gdW5oYW5kbGVkUmVqZWN0aW9uOiBcIiArIGVycm9yLm5hbWUgKyBcIjogXCIgKyBlcnJvci5tZXNzYWdlLFxuICAgICAgICBzdGFjazogZnVsbFN0YWNrLFxuICAgICAgICBtZXRob2Q6ICdlcnJvcidcbiAgICB9O1xuICAgIGxvZ1F1ZXVlLnNjaGVkdWxlTG9nU2VuZChlbnRyeSk7XG59O1xuY29uc3QgY3JlYXRlVW5oYW5kbGVkUmVqZWN0aW9uTm9uRXJyb3JFbnRyeSA9IChyZWFzb24pPT57XG4gICAgY29uc3QgZW50cnkgPSB7XG4gICAgICAgIGtpbmQ6ICdhbnktbG9nZ2VkLWVycm9yJyxcbiAgICAgICAgLy8gd2UgY2FuJ3QgYWNjZXNzIHRoZSBzdGFjayBzaW5jZSB0aGUgZXZlbnQgaXMgZGlzcGF0Y2hlZCBhc3luYyBhbmQgY3JlYXRpbmcgYW4gaW5saW5lIGVycm9yIHdvdWxkIGJlIG1lYW5pbmdsZXNzXG4gICAgICAgIGNvbnNvbGVFcnJvclN0YWNrOiAnJyxcbiAgICAgICAgbWV0aG9kOiAnZXJyb3InLFxuICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAga2luZDogJ2FyZycsXG4gICAgICAgICAgICAgICAgZGF0YTogXCLiqK8gdW5oYW5kbGVkUmVqZWN0aW9uOlwiLFxuICAgICAgICAgICAgICAgIGlzUmVqZWN0aW9uTWVzc2FnZTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBraW5kOiAnYXJnJyxcbiAgICAgICAgICAgICAgICBkYXRhOiBwcmVMb2dTZXJpYWxpemF0aW9uQ2xvbmUocmVhc29uKVxuICAgICAgICAgICAgfVxuICAgICAgICBdXG4gICAgfTtcbiAgICBsb2dRdWV1ZS5zY2hlZHVsZUxvZ1NlbmQoZW50cnkpO1xufTtcbmNvbnN0IGlzSE1SID0gKGFyZ3MpPT57XG4gICAgY29uc3QgZmlyc3RBcmcgPSBhcmdzWzBdO1xuICAgIGlmICh0eXBlb2YgZmlyc3RBcmcgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGZpcnN0QXJnLnN0YXJ0c1dpdGgoJ1tGYXN0IFJlZnJlc2hdJykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChmaXJzdEFyZy5zdGFydHNXaXRoKCdbSE1SXScpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuY29uc3QgaXNJZ25vcmVkTG9nID0gKGFyZ3MpPT57XG4gICAgaWYgKGFyZ3MubGVuZ3RoIDwgMykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IFtmb3JtYXQsIHN0eWxlcywgbGFiZWxdID0gYXJncztcbiAgICBpZiAodHlwZW9mIGZvcm1hdCAhPT0gJ3N0cmluZycgfHwgdHlwZW9mIHN0eWxlcyAhPT0gJ3N0cmluZycgfHwgdHlwZW9mIGxhYmVsICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIGtpbmRhIGhhY2t5LCB3ZSBzaG91bGQgZGVmaW5lIGEgY29tbW9uIGZvcm1hdCBmb3IgdGhlc2Ugc3RyaW5ncyBzbyB3ZSBjYW4gc2FmZWx5IGlnbm9yZVxuICAgIHJldHVybiBmb3JtYXQuc3RhcnRzV2l0aCgnJWMlcyVjJykgJiYgc3R5bGVzLmluY2x1ZGVzKCdiYWNrZ3JvdW5kOicpO1xufTtcbmZ1bmN0aW9uIGZvcndhcmRVbmhhbmRsZWRFcnJvcihlcnJvcikge1xuICAgIGNyZWF0ZVVuY2F1Z2h0RXJyb3JFbnRyeShlcnJvci5uYW1lLCBlcnJvci5tZXNzYWdlLCBzdGFja1dpdGhPd25lcnMoZXJyb3IpKTtcbn1cbmNvbnN0IGluaXRpYWxpemVEZWJ1Z0xvZ0ZvcndhcmRpbmcgPSAocm91dGVyKT0+e1xuICAgIC8vIHByb2JhYmx5IGRvbid0IG5lZWQgdGhpc1xuICAgIGlmIChpc1BhdGNoZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBUT0RPKHJvYik6IHdoeSBkb2VzIHRoaXMgYnJlYWsgcmVuZGVyaW5nIG9uIHNlcnZlciwgaW1wb3J0YW50IHRvIGtub3cgaW5jYXNlIHRoZSBzYW1lIGJ1ZyBhcHBlYXJzIGluIGJyb3dzZXJcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBiZXR0ZXIgdG8gYmUgc2FmZSB0aGFuIHNvcnJ5XG4gICAgdHJ5IHtcbiAgICAgICAgbWV0aG9kcy5mb3JFYWNoKChtZXRob2QpPT4oMCwgX2ZvcndhcmRsb2dzc2hhcmVkLnBhdGNoQ29uc29sZU1ldGhvZCkobWV0aG9kLCBmdW5jdGlvbihfKSB7XG4gICAgICAgICAgICAgICAgZm9yKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKXtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpc0hNUihhcmdzKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpc0lnbm9yZWRMb2coYXJncykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjcmVhdGVMb2dFbnRyeShtZXRob2QsIGFyZ3MpO1xuICAgICAgICAgICAgfSkpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgbG9nUXVldWUucm91dGVyID0gcm91dGVyO1xuICAgIGlzUGF0Y2hlZCA9IHRydWU7XG59O1xuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1mb3J3YXJkLWxvZ3MuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/forward-logs.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js":
|
||
/*!*************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js ***!
|
||
\*************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nvar _s = $RefreshSig$(), _s1 = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n SEGMENT_EXPLORER_SIMULATED_ERROR_MESSAGE: function() {\n return SEGMENT_EXPLORER_SIMULATED_ERROR_MESSAGE;\n },\n SegmentBoundaryTriggerNode: function() {\n return SegmentBoundaryTriggerNode;\n },\n SegmentStateProvider: function() {\n return SegmentStateProvider;\n },\n SegmentViewNode: function() {\n return SegmentViewNode;\n },\n SegmentViewStateNode: function() {\n return SegmentViewStateNode;\n },\n useSegmentState: function() {\n return useSegmentState;\n }\n});\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\nconst _nextdevtools = __webpack_require__(/*! next/dist/compiled/next-devtools */ \"(app-pages-browser)/./node_modules/next/dist/compiled/next-devtools/index.js\");\nconst _notfound = __webpack_require__(/*! ../../../client/components/not-found */ \"(app-pages-browser)/./node_modules/next/dist/client/components/not-found.js\");\nconst SEGMENT_EXPLORER_SIMULATED_ERROR_MESSAGE = 'NEXT_DEVTOOLS_SIMULATED_ERROR';\nfunction SegmentTrieNode(param) {\n _s();\n let { type, pagePath } = param;\n const { boundaryType, setBoundaryType } = useSegmentState();\n const nodeState = (0, _react.useMemo)(()=>{\n return {\n type,\n pagePath,\n boundaryType,\n setBoundaryType\n };\n }, [\n type,\n pagePath,\n boundaryType,\n setBoundaryType\n ]);\n // Use `useLayoutEffect` to ensure the state is updated during suspense.\n // `useEffect` won't work as the state is preserved during suspense.\n (0, _react.useLayoutEffect)(()=>{\n _nextdevtools.dispatcher.segmentExplorerNodeAdd(nodeState);\n return ()=>{\n _nextdevtools.dispatcher.segmentExplorerNodeRemove(nodeState);\n };\n }, [\n nodeState\n ]);\n return null;\n}\n_s(SegmentTrieNode, \"k23Ctjuj2wqf/SlbAMiKHh9fp5k=\", false, function() {\n return [\n useSegmentState\n ];\n});\n_c = SegmentTrieNode;\nfunction NotFoundSegmentNode() {\n (0, _notfound.notFound)();\n}\n_c1 = NotFoundSegmentNode;\nfunction ErrorSegmentNode() {\n throw Object.defineProperty(new Error(SEGMENT_EXPLORER_SIMULATED_ERROR_MESSAGE), \"__NEXT_ERROR_CODE\", {\n value: \"E394\",\n enumerable: false,\n configurable: true\n });\n}\n_c2 = ErrorSegmentNode;\nconst forever = new Promise(()=>{});\nfunction LoadingSegmentNode() {\n (0, _react.use)(forever);\n return null;\n}\n_c3 = LoadingSegmentNode;\nfunction SegmentViewStateNode(param) {\n let { page } = param;\n (0, _react.useLayoutEffect)(()=>{\n _nextdevtools.dispatcher.segmentExplorerUpdateRouteState(page);\n return ()=>{\n _nextdevtools.dispatcher.segmentExplorerUpdateRouteState('');\n };\n }, [\n page\n ]);\n return null;\n}\n_c4 = SegmentViewStateNode;\nfunction SegmentBoundaryTriggerNode() {\n _s1();\n const { boundaryType } = useSegmentState();\n let segmentNode = null;\n if (boundaryType === 'loading') {\n segmentNode = /*#__PURE__*/ (0, _jsxruntime.jsx)(LoadingSegmentNode, {});\n } else if (boundaryType === 'not-found') {\n segmentNode = /*#__PURE__*/ (0, _jsxruntime.jsx)(NotFoundSegmentNode, {});\n } else if (boundaryType === 'error') {\n segmentNode = /*#__PURE__*/ (0, _jsxruntime.jsx)(ErrorSegmentNode, {});\n }\n return segmentNode;\n}\n_s1(SegmentBoundaryTriggerNode, \"I9LjiBM7JR6BKs6eS8wwgKqR3h4=\", false, function() {\n return [\n useSegmentState\n ];\n});\n_c5 = SegmentBoundaryTriggerNode;\nfunction SegmentViewNode(param) {\n let { type, pagePath, children } = param;\n const segmentNode = /*#__PURE__*/ (0, _jsxruntime.jsx)(SegmentTrieNode, {\n type: type,\n pagePath: pagePath\n }, type);\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n segmentNode,\n children\n ]\n });\n}\n_c6 = SegmentViewNode;\nconst SegmentStateContext = /*#__PURE__*/ (0, _react.createContext)({\n boundaryType: null,\n setBoundaryType: ()=>{}\n});\nfunction SegmentStateProvider(param) {\n let { children } = param;\n const [boundaryType, setBoundaryType] = (0, _react.useState)(null);\n const [errorBoundaryKey, setErrorBoundaryKey] = (0, _react.useState)(0);\n const reloadBoundary = (0, _react.useCallback)(()=>setErrorBoundaryKey((prev)=>prev + 1), []);\n const setBoundaryTypeAndReload = (0, _react.useCallback)((type)=>{\n if (type === null) {\n reloadBoundary();\n }\n setBoundaryType(type);\n }, [\n reloadBoundary\n ]);\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(SegmentStateContext.Provider, {\n value: {\n boundaryType,\n setBoundaryType: setBoundaryTypeAndReload\n },\n children: children\n }, errorBoundaryKey);\n}\n_c7 = SegmentStateProvider;\nfunction useSegmentState() {\n return (0, _react.useContext)(SegmentStateContext);\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=segment-explorer-node.js.map\nvar _c, _c1, _c2, _c3, _c4, _c5, _c6, _c7;\n$RefreshReg$(_c, \"SegmentTrieNode\");\n$RefreshReg$(_c1, \"NotFoundSegmentNode\");\n$RefreshReg$(_c2, \"ErrorSegmentNode\");\n$RefreshReg$(_c3, \"LoadingSegmentNode\");\n$RefreshReg$(_c4, \"SegmentViewStateNode\");\n$RefreshReg$(_c5, \"SegmentBoundaryTriggerNode\");\n$RefreshReg$(_c6, \"SegmentViewNode\");\n$RefreshReg$(_c7, \"SegmentStateProvider\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL3NlZ21lbnQtZXhwbG9yZXItbm9kZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztJQWVhQSx3Q0FBd0M7ZUFBeENBOztJQStER0MsMEJBQTBCO2VBQTFCQTs7SUEwQ0FDLG9CQUFvQjtlQUFwQkE7O0lBN0JBQyxlQUFlO2VBQWZBOztJQXZCQUMsb0JBQW9CO2VBQXBCQTs7SUFzRkFDLGVBQWU7ZUFBZkE7Ozs7bUNBaEpUOzBDQUVvQjtzQ0FDRjtBQUVsQixNQUFNTCwyQ0FDWDtBQVNGLHlCQUF5QixLQU14Qjs7SUFOd0IsTUFDdkJPLElBQUksRUFDSkMsUUFBUSxFQUlULEdBTndCO0lBT3ZCLE1BQU0sRUFBRUMsWUFBWSxFQUFFQyxlQUFlLEVBQUU7SUFDdkMsTUFBTUMsWUFBOEJDLENBQUFBLEdBQUFBLE9BQUFBLE9BQUFBLEVBQVE7UUFDMUMsT0FBTztZQUNMTDtZQUNBQztZQUNBQztZQUNBQztRQUNGO0lBQ0YsR0FBRztRQUFDSDtRQUFNQztRQUFVQztRQUFjQztLQUFnQjtJQUVsRCx3RUFBd0U7SUFDeEUsb0VBQW9FO0lBQ3BFRyxDQUFBQSxHQUFBQSxPQUFBQSxlQUFBQSxFQUFnQjtRQUNkQyxjQUFBQSxVQUFVLENBQUNDLHNCQUFzQixDQUFDSjtRQUNsQyxPQUFPO1lBQ0xHLGNBQUFBLFVBQVUsQ0FBQ0UseUJBQXlCLENBQUNMO1FBQ3ZDO0lBQ0YsR0FBRztRQUFDQTtLQUFVO0lBRWQsT0FBTztBQUNUOzs7UUFwQjRDTjs7O0tBUG5DQztBQTZCVDtJQUNFWSxDQUFBQSxHQUFBQSxVQUFBQSxRQUFBQTtBQUNGO01BRlNEO0FBSVQsU0FBU0U7SUFDUCxNQUFNLHFCQUFtRCxDQUFuRCxJQUFJQyxNQUFNcEIsMkNBQVY7ZUFBQTtvQkFBQTtzQkFBQTtJQUFrRDtBQUMxRDs7QUFFQSxNQUFNcUIsVUFBVSxJQUFJQyxRQUFRLEtBQU87QUFDbkM7SUFDRUUsQ0FBQUEsR0FBQUEsT0FBQUEsR0FBQUEsRUFBSUg7SUFDSixPQUFPO0FBQ1Q7TUFIU0U7QUFLRiw4QkFBOEIsS0FBMEI7SUFBMUIsTUFBRUUsSUFBSSxFQUFvQixHQUExQjtJQUNuQ1osQ0FBQUEsR0FBQUEsT0FBQUEsZUFBQUEsRUFBZ0I7UUFDZEMsY0FBQUEsVUFBVSxDQUFDWSwrQkFBK0IsQ0FBQ0Q7UUFDM0MsT0FBTztZQUNMWCxjQUFBQSxVQUFVLENBQUNZLCtCQUErQixDQUFDO1FBQzdDO0lBQ0YsR0FBRztRQUFDRDtLQUFLO0lBQ1QsT0FBTztBQUNUO01BUmdCckI7QUFVVDs7SUFDTCxNQUFNLEVBQUVLLFlBQVksRUFBRTtJQUN0QixJQUFJa0IsY0FBK0I7SUFDbkMsSUFBSWxCLGlCQUFpQixXQUFXO1FBQzlCa0IsY0FBQUEsV0FBQUEsR0FBYyxxQkFBQ0osb0JBQUFBLENBQUFBO0lBQ2pCLE9BQU8sSUFBSWQsaUJBQWlCLGFBQWE7UUFDdkNrQixjQUFBQSxXQUFBQSxHQUFjLHFCQUFDVixxQkFBQUEsQ0FBQUE7SUFDakIsT0FBTyxJQUFJUixpQkFBaUIsU0FBUztRQUNuQ2tCLGNBQWMsV0FBZEEsR0FBYyxxQkFBQ1Isa0JBQUFBLENBQUFBO0lBQ2pCO0lBQ0EsT0FBT1E7QUFDVDs7O1FBVjJCdEI7OztNQURYSjtBQWFULHlCQUF5QixLQVEvQjtJQVIrQixNQUM5Qk0sSUFBSSxFQUNKQyxRQUFRLEVBQ1JvQixRQUFRLEVBS1QsR0FSK0I7SUFTOUIsTUFBTUQsY0FBQUEsV0FBQUEsR0FDSixxQkFBQ3JCLGlCQUFBQTtRQUEyQkMsTUFBTUE7UUFBTUMsVUFBVUE7T0FBNUJEO0lBR3hCLHFCQUNFOztZQUNHb0I7WUFDQUM7OztBQUdQO01BbkJnQnpCO0FBcUJoQixNQUFNMEIsc0JBQUFBLFdBQUFBLEdBQXNCQyxDQUFBQSxHQUFBQSxPQUFBQSxhQUFBQSxFQUd6QjtJQUNEckIsY0FBYztJQUNkQyxpQkFBaUIsS0FBTztBQUMxQjtBQUVPLDhCQUE4QixLQUFxQztJQUFyQyxNQUFFa0IsUUFBUSxFQUEyQixHQUFyQztJQUNuQyxNQUFNLENBQUNuQixjQUFjQyxnQkFBZ0IsR0FBR3FCLENBQUFBLEdBQUFBLE9BQUFBLFFBQUFBLEVBRXRDO0lBRUYsTUFBTSxDQUFDQyxrQkFBa0JDLG9CQUFvQixHQUFHRixDQUFBQSxHQUFBQSxPQUFBQSxRQUFBQSxFQUFTO0lBQ3pELE1BQU1HLGlCQUFpQkMsQ0FBQUEsR0FBQUEsT0FBQUEsV0FBVyxFQUNoQyxJQUFNRixvQkFBb0IsQ0FBQ0csT0FBU0EsT0FBTyxJQUMzQyxFQUFFO0lBR0osTUFBTUMsMkJBQTJCRixDQUFBQSxHQUFBQSxPQUFBQSxXQUFBQSxFQUMvQixDQUFDNUI7UUFDQyxJQUFJQSxTQUFTLE1BQU07WUFDakIyQjtRQUNGO1FBQ0F4QixnQkFBZ0JIO0lBQ2xCLEdBQ0E7UUFBQzJCO0tBQWU7SUFHbEIscUJBQ0UscUJBQUNMLG9CQUFvQlMsUUFBUTtRQUUzQkMsT0FBTztZQUNMOUI7WUFDQUMsaUJBQWlCMkI7UUFDbkI7a0JBRUNUO09BTklJO0FBU1g7TUFoQ2dCOUI7QUFrQ1QsU0FBU0c7SUFDZCxPQUFPbUMsQ0FBQUEsR0FBQUEsT0FBQUEsVUFBQUEsRUFBV1g7QUFDcEIiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9hcHAvc2VnbWVudC1leHBsb3Jlci1ub2RlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcblxuaW1wb3J0IHR5cGUgeyBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7XG4gIHVzZVN0YXRlLFxuICBjcmVhdGVDb250ZXh0LFxuICB1c2VDb250ZXh0LFxuICB1c2UsXG4gIHVzZU1lbW8sXG4gIHVzZUNhbGxiYWNrLFxufSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUxheW91dEVmZmVjdCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZGlzcGF0Y2hlciB9IGZyb20gJ25leHQvZGlzdC9jb21waWxlZC9uZXh0LWRldnRvb2xzJ1xuaW1wb3J0IHsgbm90Rm91bmQgfSBmcm9tICcuLi8uLi8uLi9jbGllbnQvY29tcG9uZW50cy9ub3QtZm91bmQnXG5cbmV4cG9ydCBjb25zdCBTRUdNRU5UX0VYUExPUkVSX1NJTVVMQVRFRF9FUlJPUl9NRVNTQUdFID1cbiAgJ05FWFRfREVWVE9PTFNfU0lNVUxBVEVEX0VSUk9SJ1xuXG5leHBvcnQgdHlwZSBTZWdtZW50Tm9kZVN0YXRlID0ge1xuICB0eXBlOiBzdHJpbmdcbiAgcGFnZVBhdGg6IHN0cmluZ1xuICBib3VuZGFyeVR5cGU6IHN0cmluZyB8IG51bGxcbiAgc2V0Qm91bmRhcnlUeXBlOiAodHlwZTogJ2Vycm9yJyB8ICdub3QtZm91bmQnIHwgJ2xvYWRpbmcnIHwgbnVsbCkgPT4gdm9pZFxufVxuXG5mdW5jdGlvbiBTZWdtZW50VHJpZU5vZGUoe1xuICB0eXBlLFxuICBwYWdlUGF0aCxcbn06IHtcbiAgdHlwZTogc3RyaW5nXG4gIHBhZ2VQYXRoOiBzdHJpbmdcbn0pOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCB7IGJvdW5kYXJ5VHlwZSwgc2V0Qm91bmRhcnlUeXBlIH0gPSB1c2VTZWdtZW50U3RhdGUoKVxuICBjb25zdCBub2RlU3RhdGU6IFNlZ21lbnROb2RlU3RhdGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZSxcbiAgICAgIHBhZ2VQYXRoLFxuICAgICAgYm91bmRhcnlUeXBlLFxuICAgICAgc2V0Qm91bmRhcnlUeXBlLFxuICAgIH1cbiAgfSwgW3R5cGUsIHBhZ2VQYXRoLCBib3VuZGFyeVR5cGUsIHNldEJvdW5kYXJ5VHlwZV0pXG5cbiAgLy8gVXNlIGB1c2VMYXlvdXRFZmZlY3RgIHRvIGVuc3VyZSB0aGUgc3RhdGUgaXMgdXBkYXRlZCBkdXJpbmcgc3VzcGVuc2UuXG4gIC8vIGB1c2VFZmZlY3RgIHdvbid0IHdvcmsgYXMgdGhlIHN0YXRlIGlzIHByZXNlcnZlZCBkdXJpbmcgc3VzcGVuc2UuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgZGlzcGF0Y2hlci5zZWdtZW50RXhwbG9yZXJOb2RlQWRkKG5vZGVTdGF0ZSlcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZGlzcGF0Y2hlci5zZWdtZW50RXhwbG9yZXJOb2RlUmVtb3ZlKG5vZGVTdGF0ZSlcbiAgICB9XG4gIH0sIFtub2RlU3RhdGVdKVxuXG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIE5vdEZvdW5kU2VnbWVudE5vZGUoKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgbm90Rm91bmQoKVxufVxuXG5mdW5jdGlvbiBFcnJvclNlZ21lbnROb2RlKCk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIHRocm93IG5ldyBFcnJvcihTRUdNRU5UX0VYUExPUkVSX1NJTVVMQVRFRF9FUlJPUl9NRVNTQUdFKVxufVxuXG5jb25zdCBmb3JldmVyID0gbmV3IFByb21pc2UoKCkgPT4ge30pXG5mdW5jdGlvbiBMb2FkaW5nU2VnbWVudE5vZGUoKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgdXNlKGZvcmV2ZXIpXG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTZWdtZW50Vmlld1N0YXRlTm9kZSh7IHBhZ2UgfTogeyBwYWdlOiBzdHJpbmcgfSkge1xuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGRpc3BhdGNoZXIuc2VnbWVudEV4cGxvcmVyVXBkYXRlUm91dGVTdGF0ZShwYWdlKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkaXNwYXRjaGVyLnNlZ21lbnRFeHBsb3JlclVwZGF0ZVJvdXRlU3RhdGUoJycpXG4gICAgfVxuICB9LCBbcGFnZV0pXG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTZWdtZW50Qm91bmRhcnlUcmlnZ2VyTm9kZSgpIHtcbiAgY29uc3QgeyBib3VuZGFyeVR5cGUgfSA9IHVzZVNlZ21lbnRTdGF0ZSgpXG4gIGxldCBzZWdtZW50Tm9kZTogUmVhY3QuUmVhY3ROb2RlID0gbnVsbFxuICBpZiAoYm91bmRhcnlUeXBlID09PSAnbG9hZGluZycpIHtcbiAgICBzZWdtZW50Tm9kZSA9IDxMb2FkaW5nU2VnbWVudE5vZGUgLz5cbiAgfSBlbHNlIGlmIChib3VuZGFyeVR5cGUgPT09ICdub3QtZm91bmQnKSB7XG4gICAgc2VnbWVudE5vZGUgPSA8Tm90Rm91bmRTZWdtZW50Tm9kZSAvPlxuICB9IGVsc2UgaWYgKGJvdW5kYXJ5VHlwZSA9PT0gJ2Vycm9yJykge1xuICAgIHNlZ21lbnROb2RlID0gPEVycm9yU2VnbWVudE5vZGUgLz5cbiAgfVxuICByZXR1cm4gc2VnbWVudE5vZGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFNlZ21lbnRWaWV3Tm9kZSh7XG4gIHR5cGUsXG4gIHBhZ2VQYXRoLFxuICBjaGlsZHJlbixcbn06IHtcbiAgdHlwZTogc3RyaW5nXG4gIHBhZ2VQYXRoOiBzdHJpbmdcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGVcbn0pOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCBzZWdtZW50Tm9kZSA9IChcbiAgICA8U2VnbWVudFRyaWVOb2RlIGtleT17dHlwZX0gdHlwZT17dHlwZX0gcGFnZVBhdGg9e3BhZ2VQYXRofSAvPlxuICApXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge3NlZ21lbnROb2RlfVxuICAgICAge2NoaWxkcmVufVxuICAgIDwvPlxuICApXG59XG5cbmNvbnN0IFNlZ21lbnRTdGF0ZUNvbnRleHQgPSBjcmVhdGVDb250ZXh0PHtcbiAgYm91bmRhcnlUeXBlOiAnbm90LWZvdW5kJyB8ICdlcnJvcicgfCAnbG9hZGluZycgfCBudWxsXG4gIHNldEJvdW5kYXJ5VHlwZTogKHR5cGU6ICdub3QtZm91bmQnIHwgJ2Vycm9yJyB8ICdsb2FkaW5nJyB8IG51bGwpID0+IHZvaWRcbn0+KHtcbiAgYm91bmRhcnlUeXBlOiBudWxsLFxuICBzZXRCb3VuZGFyeVR5cGU6ICgpID0+IHt9LFxufSlcblxuZXhwb3J0IGZ1bmN0aW9uIFNlZ21lbnRTdGF0ZVByb3ZpZGVyKHsgY2hpbGRyZW4gfTogeyBjaGlsZHJlbjogUmVhY3ROb2RlIH0pIHtcbiAgY29uc3QgW2JvdW5kYXJ5VHlwZSwgc2V0Qm91bmRhcnlUeXBlXSA9IHVzZVN0YXRlPFxuICAgICdub3QtZm91bmQnIHwgJ2Vycm9yJyB8ICdsb2FkaW5nJyB8IG51bGxcbiAgPihudWxsKVxuXG4gIGNvbnN0IFtlcnJvckJvdW5kYXJ5S2V5LCBzZXRFcnJvckJvdW5kYXJ5S2V5XSA9IHVzZVN0YXRlKDApXG4gIGNvbnN0IHJlbG9hZEJvdW5kYXJ5ID0gdXNlQ2FsbGJhY2soXG4gICAgKCkgPT4gc2V0RXJyb3JCb3VuZGFyeUtleSgocHJldikgPT4gcHJldiArIDEpLFxuICAgIFtdXG4gIClcblxuICBjb25zdCBzZXRCb3VuZGFyeVR5cGVBbmRSZWxvYWQgPSB1c2VDYWxsYmFjayhcbiAgICAodHlwZTogJ25vdC1mb3VuZCcgfCAnZXJyb3InIHwgJ2xvYWRpbmcnIHwgbnVsbCkgPT4ge1xuICAgICAgaWYgKHR5cGUgPT09IG51bGwpIHtcbiAgICAgICAgcmVsb2FkQm91bmRhcnkoKVxuICAgICAgfVxuICAgICAgc2V0Qm91bmRhcnlUeXBlKHR5cGUpXG4gICAgfSxcbiAgICBbcmVsb2FkQm91bmRhcnldXG4gIClcblxuICByZXR1cm4gKFxuICAgIDxTZWdtZW50U3RhdGVDb250ZXh0LlByb3ZpZGVyXG4gICAgICBrZXk9e2Vycm9yQm91bmRhcnlLZXl9XG4gICAgICB2YWx1ZT17e1xuICAgICAgICBib3VuZGFyeVR5cGUsXG4gICAgICAgIHNldEJvdW5kYXJ5VHlwZTogc2V0Qm91bmRhcnlUeXBlQW5kUmVsb2FkLFxuICAgICAgfX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9TZWdtZW50U3RhdGVDb250ZXh0LlByb3ZpZGVyPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VTZWdtZW50U3RhdGUoKSB7XG4gIHJldHVybiB1c2VDb250ZXh0KFNlZ21lbnRTdGF0ZUNvbnRleHQpXG59XG4iXSwibmFtZXMiOlsiU0VHTUVOVF9FWFBMT1JFUl9TSU1VTEFURURfRVJST1JfTUVTU0FHRSIsIlNlZ21lbnRCb3VuZGFyeVRyaWdnZXJOb2RlIiwiU2VnbWVudFN0YXRlUHJvdmlkZXIiLCJTZWdtZW50Vmlld05vZGUiLCJTZWdtZW50Vmlld1N0YXRlTm9kZSIsInVzZVNlZ21lbnRTdGF0ZSIsIlNlZ21lbnRUcmllTm9kZSIsInR5cGUiLCJwYWdlUGF0aCIsImJvdW5kYXJ5VHlwZSIsInNldEJvdW5kYXJ5VHlwZSIsIm5vZGVTdGF0ZSIsInVzZU1lbW8iLCJ1c2VMYXlvdXRFZmZlY3QiLCJkaXNwYXRjaGVyIiwic2VnbWVudEV4cGxvcmVyTm9kZUFkZCIsInNlZ21lbnRFeHBsb3Jlck5vZGVSZW1vdmUiLCJOb3RGb3VuZFNlZ21lbnROb2RlIiwibm90Rm91bmQiLCJFcnJvclNlZ21lbnROb2RlIiwiRXJyb3IiLCJmb3JldmVyIiwiUHJvbWlzZSIsIkxvYWRpbmdTZWdtZW50Tm9kZSIsInVzZSIsInBhZ2UiLCJzZWdtZW50RXhwbG9yZXJVcGRhdGVSb3V0ZVN0YXRlIiwic2VnbWVudE5vZGUiLCJjaGlsZHJlbiIsIlNlZ21lbnRTdGF0ZUNvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwidXNlU3RhdGUiLCJlcnJvckJvdW5kYXJ5S2V5Iiwic2V0RXJyb3JCb3VuZGFyeUtleSIsInJlbG9hZEJvdW5kYXJ5IiwidXNlQ2FsbGJhY2siLCJwcmV2Iiwic2V0Qm91bmRhcnlUeXBlQW5kUmVsb2FkIiwiUHJvdmlkZXIiLCJ2YWx1ZSIsInVzZUNvbnRleHQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/terminal-logging-config.js":
|
||
/*!***************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/next-devtools/userspace/app/terminal-logging-config.js ***!
|
||
\***************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n getIsTerminalLoggingEnabled: function() {\n return getIsTerminalLoggingEnabled;\n },\n getTerminalLoggingConfig: function() {\n return getTerminalLoggingConfig;\n }\n});\nfunction getTerminalLoggingConfig() {\n try {\n return JSON.parse(\"false\" || 0);\n } catch (e) {\n return false;\n }\n}\nfunction getIsTerminalLoggingEnabled() {\n const config = getTerminalLoggingConfig();\n return Boolean(config);\n}\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', { value: true });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n}\n\n//# sourceMappingURL=terminal-logging-config.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL3Rlcm1pbmFsLWxvZ2dpbmctY29uZmlnLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsTUFBTSxDQUdMO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSwwQkFBMEIsT0FBaUQsSUFBSSxDQUFPO0FBQ3RGLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlEQUF5RCxhQUFhO0FBQ3RFO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvRG9jdW1lbnRzL0Rldi9iaW9oYXphcmQtdmZ4LTEvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9hcHAvdGVybWluYWwtbG9nZ2luZy1jb25maWcuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBnZXRJc1Rlcm1pbmFsTG9nZ2luZ0VuYWJsZWQ6IG51bGwsXG4gICAgZ2V0VGVybWluYWxMb2dnaW5nQ29uZmlnOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIGdldElzVGVybWluYWxMb2dnaW5nRW5hYmxlZDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRJc1Rlcm1pbmFsTG9nZ2luZ0VuYWJsZWQ7XG4gICAgfSxcbiAgICBnZXRUZXJtaW5hbExvZ2dpbmdDb25maWc6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0VGVybWluYWxMb2dnaW5nQ29uZmlnO1xuICAgIH1cbn0pO1xuZnVuY3Rpb24gZ2V0VGVybWluYWxMb2dnaW5nQ29uZmlnKCkge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHByb2Nlc3MuZW52Ll9fTkVYVF9CUk9XU0VSX0RFQlVHX0lORk9fSU5fVEVSTUlOQUwgfHwgJ2ZhbHNlJyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0SXNUZXJtaW5hbExvZ2dpbmdFbmFibGVkKCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IGdldFRlcm1pbmFsTG9nZ2luZ0NvbmZpZygpO1xuICAgIHJldHVybiBCb29sZWFuKGNvbmZpZyk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRlcm1pbmFsLWxvZ2dpbmctY29uZmlnLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/app/terminal-logging-config.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/use-app-dev-rendering-indicator.js":
|
||
/*!*******************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/next-devtools/userspace/use-app-dev-rendering-indicator.js ***!
|
||
\*******************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"useAppDevRenderingIndicator\", ({\n enumerable: true,\n get: function() {\n return useAppDevRenderingIndicator;\n }\n}));\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\nconst _nextdevtools = __webpack_require__(/*! next/dist/compiled/next-devtools */ \"(app-pages-browser)/./node_modules/next/dist/compiled/next-devtools/index.js\");\nconst useAppDevRenderingIndicator = ()=>{\n const [isPending, startTransition] = (0, _react.useTransition)();\n (0, _react.useEffect)(()=>{\n if (isPending) {\n _nextdevtools.dispatcher.renderingIndicatorShow();\n } else {\n _nextdevtools.dispatcher.renderingIndicatorHide();\n }\n }, [\n isPending\n ]);\n return startTransition;\n};\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=use-app-dev-rendering-indicator.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvdXNlLWFwcC1kZXYtcmVuZGVyaW5nLWluZGljYXRvci5qcyIsIm1hcHBpbmdzIjoiOzs7OytEQUthQTs7O2VBQUFBOzs7bUNBSDRCOzBDQUNkO0FBRXBCLE1BQU1BLDhCQUE4QjtJQUN6QyxNQUFNLENBQUNDLFdBQVdDLGdCQUFnQixHQUFHQyxDQUFBQSxHQUFBQSxPQUFBQSxhQUFBQTtJQUVyQ0MsQ0FBQUEsR0FBQUEsT0FBQUEsU0FBQUEsRUFBVTtRQUNSLElBQUlILFdBQVc7WUFDYkksY0FBQUEsVUFBVSxDQUFDQyxzQkFBc0I7UUFDbkMsT0FBTztZQUNMRCxjQUFBQSxVQUFVLENBQUNFLHNCQUFzQjtRQUNuQztJQUNGLEdBQUc7UUFBQ047S0FBVTtJQUVkLE9BQU9DO0FBQ1QiLCJzb3VyY2VzIjpbIi9ob21lL05pY2hvbGFpL3NyYy9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS91c2UtYXBwLWRldi1yZW5kZXJpbmctaW5kaWNhdG9yLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcblxuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VUcmFuc2l0aW9uIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBkaXNwYXRjaGVyIH0gZnJvbSAnbmV4dC9kaXN0L2NvbXBpbGVkL25leHQtZGV2dG9vbHMnXG5cbmV4cG9ydCBjb25zdCB1c2VBcHBEZXZSZW5kZXJpbmdJbmRpY2F0b3IgPSAoKSA9PiB7XG4gIGNvbnN0IFtpc1BlbmRpbmcsIHN0YXJ0VHJhbnNpdGlvbl0gPSB1c2VUcmFuc2l0aW9uKClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc1BlbmRpbmcpIHtcbiAgICAgIGRpc3BhdGNoZXIucmVuZGVyaW5nSW5kaWNhdG9yU2hvdygpXG4gICAgfSBlbHNlIHtcbiAgICAgIGRpc3BhdGNoZXIucmVuZGVyaW5nSW5kaWNhdG9ySGlkZSgpXG4gICAgfVxuICB9LCBbaXNQZW5kaW5nXSlcblxuICByZXR1cm4gc3RhcnRUcmFuc2l0aW9uXG59XG4iXSwibmFtZXMiOlsidXNlQXBwRGV2UmVuZGVyaW5nSW5kaWNhdG9yIiwiaXNQZW5kaW5nIiwic3RhcnRUcmFuc2l0aW9uIiwidXNlVHJhbnNpdGlvbiIsInVzZUVmZmVjdCIsImRpc3BhdGNoZXIiLCJyZW5kZXJpbmdJbmRpY2F0b3JTaG93IiwicmVuZGVyaW5nSW5kaWNhdG9ySGlkZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/next-devtools/userspace/use-app-dev-rendering-indicator.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/server/dev/hot-reloader-types.js":
|
||
/*!*****************************************************************!*\
|
||
!*** ./node_modules/next/dist/server/dev/hot-reloader-types.js ***!
|
||
\*****************************************************************/
|
||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"HMR_ACTIONS_SENT_TO_BROWSER\", ({\n enumerable: true,\n get: function() {\n return HMR_ACTIONS_SENT_TO_BROWSER;\n }\n}));\nvar HMR_ACTIONS_SENT_TO_BROWSER = /*#__PURE__*/ function(HMR_ACTIONS_SENT_TO_BROWSER) {\n HMR_ACTIONS_SENT_TO_BROWSER[\"ADDED_PAGE\"] = \"addedPage\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"REMOVED_PAGE\"] = \"removedPage\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"RELOAD_PAGE\"] = \"reloadPage\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"SERVER_COMPONENT_CHANGES\"] = \"serverComponentChanges\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"MIDDLEWARE_CHANGES\"] = \"middlewareChanges\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"CLIENT_CHANGES\"] = \"clientChanges\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"SERVER_ONLY_CHANGES\"] = \"serverOnlyChanges\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"SYNC\"] = \"sync\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"BUILT\"] = \"built\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"BUILDING\"] = \"building\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"DEV_PAGES_MANIFEST_UPDATE\"] = \"devPagesManifestUpdate\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"TURBOPACK_MESSAGE\"] = \"turbopack-message\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"SERVER_ERROR\"] = \"serverError\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"TURBOPACK_CONNECTED\"] = \"turbopack-connected\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"ISR_MANIFEST\"] = \"isrManifest\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"DEV_INDICATOR\"] = \"devIndicator\";\n return HMR_ACTIONS_SENT_TO_BROWSER;\n}({});\n\n//# sourceMappingURL=hot-reloader-types.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2VydmVyL2Rldi9ob3QtcmVsb2FkZXItdHlwZXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkM7QUFDN0M7QUFDQSxDQUFDLEVBQUM7QUFDRiwrREFBOEQ7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUM7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEdBQUc7O0FBRUoiLCJzb3VyY2VzIjpbIi9ob21lL05pY2hvbGFpL0RvY3VtZW50cy9EZXYvYmlvaGF6YXJkLXZmeC0xL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2VydmVyL2Rldi9ob3QtcmVsb2FkZXItdHlwZXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUjtcbiAgICB9XG59KTtcbnZhciBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIgPSAvKiNfX1BVUkVfXyovIGZ1bmN0aW9uKEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUikge1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIkFEREVEX1BBR0VcIl0gPSBcImFkZGVkUGFnZVwiO1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIlJFTU9WRURfUEFHRVwiXSA9IFwicmVtb3ZlZFBhZ2VcIjtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJSRUxPQURfUEFHRVwiXSA9IFwicmVsb2FkUGFnZVwiO1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIlNFUlZFUl9DT01QT05FTlRfQ0hBTkdFU1wiXSA9IFwic2VydmVyQ29tcG9uZW50Q2hhbmdlc1wiO1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIk1JRERMRVdBUkVfQ0hBTkdFU1wiXSA9IFwibWlkZGxld2FyZUNoYW5nZXNcIjtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJDTElFTlRfQ0hBTkdFU1wiXSA9IFwiY2xpZW50Q2hhbmdlc1wiO1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIlNFUlZFUl9PTkxZX0NIQU5HRVNcIl0gPSBcInNlcnZlck9ubHlDaGFuZ2VzXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiU1lOQ1wiXSA9IFwic3luY1wiO1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIkJVSUxUXCJdID0gXCJidWlsdFwiO1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIkJVSUxESU5HXCJdID0gXCJidWlsZGluZ1wiO1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIkRFVl9QQUdFU19NQU5JRkVTVF9VUERBVEVcIl0gPSBcImRldlBhZ2VzTWFuaWZlc3RVcGRhdGVcIjtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJUVVJCT1BBQ0tfTUVTU0FHRVwiXSA9IFwidHVyYm9wYWNrLW1lc3NhZ2VcIjtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJTRVJWRVJfRVJST1JcIl0gPSBcInNlcnZlckVycm9yXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiVFVSQk9QQUNLX0NPTk5FQ1RFRFwiXSA9IFwidHVyYm9wYWNrLWNvbm5lY3RlZFwiO1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIklTUl9NQU5JRkVTVFwiXSA9IFwiaXNyTWFuaWZlc3RcIjtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJERVZfSU5ESUNBVE9SXCJdID0gXCJkZXZJbmRpY2F0b3JcIjtcbiAgICByZXR1cm4gSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSO1xufSh7fSk7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhvdC1yZWxvYWRlci10eXBlcy5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/server/dev/hot-reloader-types.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js":
|
||
/*!********************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js ***!
|
||
\********************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n AppRouterContext: function() {\n return AppRouterContext;\n },\n GlobalLayoutRouterContext: function() {\n return GlobalLayoutRouterContext;\n },\n LayoutRouterContext: function() {\n return LayoutRouterContext;\n },\n MissingSlotContext: function() {\n return MissingSlotContext;\n },\n TemplateContext: function() {\n return TemplateContext;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst AppRouterContext = _react.default.createContext(null);\nconst LayoutRouterContext = _react.default.createContext(null);\nconst GlobalLayoutRouterContext = _react.default.createContext(null);\nconst TemplateContext = _react.default.createContext(null);\nif (true) {\n AppRouterContext.displayName = 'AppRouterContext';\n LayoutRouterContext.displayName = 'LayoutRouterContext';\n GlobalLayoutRouterContext.displayName = 'GlobalLayoutRouterContext';\n TemplateContext.displayName = 'TemplateContext';\n}\nconst MissingSlotContext = _react.default.createContext(new Set()); //# sourceMappingURL=app-router-context.shared-runtime.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBaUthQSxnQkFBZ0I7ZUFBaEJBOztJQVVBQyx5QkFBeUI7ZUFBekJBOztJQVBBQyxtQkFBbUI7ZUFBbkJBOztJQXNCQUMsa0JBQWtCO2VBQWxCQTs7SUFUQUMsZUFBZTtlQUFmQTs7Ozs0RUF0S0s7QUFzSlgsTUFBTUosbUJBQW1CSyxPQUFBQSxPQUFLLENBQUNDLGFBQWEsQ0FDakQ7QUFFSyxNQUFNSixzQkFBc0JHLE9BQUFBLE9BQUssQ0FBQ0MsYUFBYSxDQUs1QztBQUVILE1BQU1MLDRCQUE0QkksT0FBQUEsT0FBSyxDQUFDQyxhQUFhLENBSXpEO0FBRUksTUFBTUYsa0JBQWtCQyxPQUFBQSxPQUFLLENBQUNDLGFBQWEsQ0FBa0I7QUFFcEUsSUFBSUMsSUFBb0IsRUFBbUI7SUFDekNQLGlCQUFpQlUsV0FBVyxHQUFHO0lBQy9CUixvQkFBb0JRLFdBQVcsR0FBRztJQUNsQ1QsMEJBQTBCUyxXQUFXLEdBQUc7SUFDeENOLGdCQUFnQk0sV0FBVyxHQUFHO0FBQ2hDO0FBRU8sTUFBTVAscUJBQXFCRSxPQUFBQSxPQUFLLENBQUNDLGFBQWEsQ0FBYyxJQUFJSyIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvc3JjL3NoYXJlZC9saWIvYXBwLXJvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgdHlwZSB7IEZldGNoU2VydmVyUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi8uLi9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9mZXRjaC1zZXJ2ZXItcmVzcG9uc2UnXG5pbXBvcnQgdHlwZSB7XG4gIEZvY3VzQW5kU2Nyb2xsUmVmLFxuICBQcmVmZXRjaEtpbmQsXG59IGZyb20gJy4uLy4uL2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3JvdXRlci1yZWR1Y2VyLXR5cGVzJ1xuaW1wb3J0IHR5cGUge1xuICBGbGlnaHRSb3V0ZXJTdGF0ZSxcbiAgRmxpZ2h0U2VnbWVudFBhdGgsXG59IGZyb20gJy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL3R5cGVzJ1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgdHlwZSBDaGlsZFNlZ21lbnRNYXAgPSBNYXA8c3RyaW5nLCBDYWNoZU5vZGU+XG5cbi8qKlxuICogQ2FjaGUgbm9kZSB1c2VkIGluIGFwcC1yb3V0ZXIgLyBsYXlvdXQtcm91dGVyLlxuICovXG5leHBvcnQgdHlwZSBDYWNoZU5vZGUgPSBSZWFkeUNhY2hlTm9kZSB8IExhenlDYWNoZU5vZGVcblxuZXhwb3J0IHR5cGUgTG9hZGluZ01vZHVsZURhdGEgPVxuICB8IFtSZWFjdC5KU1guRWxlbWVudCwgUmVhY3QuUmVhY3ROb2RlLCBSZWFjdC5SZWFjdE5vZGVdXG4gIHwgbnVsbFxuXG4vKiogdmlld3BvcnQgbWV0YWRhdGEgbm9kZSAqL1xuZXhwb3J0IHR5cGUgSGVhZERhdGEgPSBSZWFjdC5SZWFjdE5vZGVcblxuZXhwb3J0IHR5cGUgTGF6eUNhY2hlTm9kZSA9IHtcbiAgLyoqXG4gICAqIFdoZW4gcnNjIGlzIG51bGwsIHRoaXMgaXMgYSBsYXppbHktaW5pdGlhbGl6ZWQgY2FjaGUgbm9kZS5cbiAgICpcbiAgICogSWYgdGhlIGFwcCBhdHRlbXB0cyB0byByZW5kZXIgaXQsIGl0IHRyaWdnZXJzIGEgbGF6eSBkYXRhIGZldGNoLFxuICAgKiBwb3N0cG9uZXMgdGhlIHJlbmRlciwgYW5kIHNjaGVkdWxlcyBhbiB1cGRhdGUgdG8gYSBuZXcgdHJlZS5cbiAgICpcbiAgICogVE9ETzogVGhpcyBtZWNoYW5pc20gc2hvdWxkIG5vdCBiZSB1c2VkIHdoZW4gUFBSIGlzIGVuYWJsZWQsIHRob3VnaCBpdFxuICAgKiBjdXJyZW50bHkgaXMgaW4gc29tZSBjYXNlcyB1bnRpbCB3ZSd2ZSBpbXBsZW1lbnRlZCBwYXJ0aWFsXG4gICAqIHNlZ21lbnQgZmV0Y2hpbmcuXG4gICAqL1xuICByc2M6IG51bGxcblxuICAvKipcbiAgICogQSBwcmVmZXRjaGVkIHZlcnNpb24gb2YgdGhlIHNlZ21lbnQgZGF0YS4gU2VlIGV4cGxhbmF0aW9uIGluIGNvcnJlc3BvbmRpbmdcbiAgICogZmllbGQgb2YgUmVhZHlDYWNoZU5vZGUgKGJlbG93KS5cbiAgICpcbiAgICogU2luY2UgTGF6eUNhY2hlTm9kZSBtb3N0bHkgb25seSBleGlzdHMgaW4gdGhlIG5vbi1QUFIgaW1wbGVtZW50YXRpb24sIHRoaXNcbiAgICogd2lsbCB1c3VhbGx5IGJlIG51bGwsIGJ1dCBpdCBjb3VsZCBoYXZlIGJlZW4gY2xvbmVkIGZyb20gYSBwcmV2aW91c1xuICAgKiBDYWNoZU5vZGUgdGhhdCB3YXMgY3JlYXRlZCBieSB0aGUgUFBSIGltcGxlbWVudGF0aW9uLiBFdmVudHVhbGx5IHdlIHdhbnRcbiAgICogdG8gbWlncmF0ZSBldmVyeXRoaW5nIGF3YXkgZnJvbSBMYXp5Q2FjaGVOb2RlIGVudGlyZWx5LlxuICAgKi9cbiAgcHJlZmV0Y2hSc2M6IFJlYWN0LlJlYWN0Tm9kZVxuXG4gIC8qKlxuICAgKiBBIHBlbmRpbmcgcmVzcG9uc2UgZm9yIHRoZSBsYXp5IGRhdGEgZmV0Y2guIElmIHRoaXMgaXMgbm90IHByZXNlbnRcbiAgICogZHVyaW5nIHJlbmRlciwgaXQgaXMgbGF6aWx5IGNyZWF0ZWQuXG4gICAqL1xuICBsYXp5RGF0YTogUHJvbWlzZTxGZXRjaFNlcnZlclJlc3BvbnNlUmVzdWx0PiB8IG51bGxcblxuICBwcmVmZXRjaEhlYWQ6IEhlYWREYXRhIHwgbnVsbFxuXG4gIGhlYWQ6IEhlYWREYXRhXG5cbiAgbG9hZGluZzogTG9hZGluZ01vZHVsZURhdGEgfCBQcm9taXNlPExvYWRpbmdNb2R1bGVEYXRhPlxuXG4gIC8qKlxuICAgKiBDaGlsZCBwYXJhbGxlbCByb3V0ZXMuXG4gICAqL1xuICBwYXJhbGxlbFJvdXRlczogTWFwPHN0cmluZywgQ2hpbGRTZWdtZW50TWFwPlxuXG4gIC8qKlxuICAgKiBUaGUgdGltZXN0YW1wIG9mIHRoZSBuYXZpZ2F0aW9uIHRoYXQgbGFzdCB1cGRhdGVkIHRoZSBDYWNoZU5vZGUncyBkYXRhLiBJZlxuICAgKiBhIENhY2hlTm9kZSBpcyByZXVzZWQgZnJvbSBhIHByZXZpb3VzIG5hdmlnYXRpb24sIHRoaXMgdmFsdWUgaXMgbm90XG4gICAqIHVwZGF0ZWQuIFVzZWQgdG8gdHJhY2sgdGhlIHN0YWxlbmVzcyBvZiB0aGUgZGF0YS5cbiAgICovXG4gIG5hdmlnYXRlZEF0OiBudW1iZXJcbn1cblxuZXhwb3J0IHR5cGUgUmVhZHlDYWNoZU5vZGUgPSB7XG4gIC8qKlxuICAgKiBXaGVuIHJzYyBpcyBub3QgbnVsbCwgaXQgcmVwcmVzZW50cyB0aGUgUlNDIGRhdGEgZm9yIHRoZVxuICAgKiBjb3JyZXNwb25kaW5nIHNlZ21lbnQuXG4gICAqXG4gICAqIGBudWxsYCBpcyBhIHZhbGlkIFJlYWN0IE5vZGUgYnV0IGJlY2F1c2Ugc2VnbWVudCBkYXRhIGlzIGFsd2F5cyBhXG4gICAqIDxMYXlvdXRSb3V0ZXI+IGNvbXBvbmVudCwgd2UgY2FuIHVzZSBgbnVsbGAgdG8gcmVwcmVzZW50IGVtcHR5LlxuICAgKlxuICAgKiBUT0RPOiBGb3IgYWRkaXRpb25hbCB0eXBlIHNhZmV0eSwgdXBkYXRlIHRoaXMgdHlwZSB0b1xuICAgKiBFeGNsdWRlPFJlYWN0LlJlYWN0Tm9kZSwgbnVsbD4uIE5lZWQgdG8gdXBkYXRlIGNyZWF0ZUVtcHR5Q2FjaGVOb2RlIHRvXG4gICAqIGFjY2VwdCByc2MgYXMgYW4gYXJndW1lbnQsIG9yIGp1c3QgaW5saW5lIHRoZSBjYWxsZXJzLlxuICAgKi9cbiAgcnNjOiBSZWFjdC5SZWFjdE5vZGVcblxuICAvKipcbiAgICogUmVwcmVzZW50cyBhIHN0YXRpYyB2ZXJzaW9uIG9mIHRoZSBzZWdtZW50IHRoYXQgY2FuIGJlIHNob3duIGltbWVkaWF0ZWx5LFxuICAgKiBhbmQgbWF5IG9yIG1heSBub3QgY29udGFpbiBkeW5hbWljIGhvbGVzLiBJdCdzIHByZWZldGNoZWQgYmVmb3JlIGFcbiAgICogbmF2aWdhdGlvbiBvY2N1cnMuXG4gICAqXG4gICAqIER1cmluZyByZW5kZXJpbmcsIHdlIHdpbGwgY2hvb3NlIHdoZXRoZXIgdG8gcmVuZGVyIGByc2NgIG9yIGBwcmVmZXRjaFJzY2BcbiAgICogd2l0aCBgdXNlRGVmZXJyZWRWYWx1ZWAuIEFzIHdpdGggdGhlIGByc2NgIGZpZWxkLCBhIHZhbHVlIG9mIGBudWxsYCBtZWFuc1xuICAgKiBubyB2YWx1ZSB3YXMgcHJvdmlkZWQuIEluIHRoaXMgY2FzZSwgdGhlIExheW91dFJvdXRlciB3aWxsIGdvIHN0cmFpZ2h0IHRvXG4gICAqIHJlbmRlcmluZyB0aGUgYHJzY2AgdmFsdWU7IGlmIHRoYXQgb25lIGlzIGFsc28gbWlzc2luZywgaXQgd2lsbCBzdXNwZW5kIGFuZFxuICAgKiB0cmlnZ2VyIGEgbGF6eSBmZXRjaC5cbiAgICovXG4gIHByZWZldGNoUnNjOiBSZWFjdC5SZWFjdE5vZGVcblxuICAvKipcbiAgICogVGhlcmUgc2hvdWxkIG5ldmVyIGJlIGEgbGF6eSBkYXRhIHJlcXVlc3QgaW4gdGhpcyBjYXNlLlxuICAgKi9cbiAgbGF6eURhdGE6IG51bGxcbiAgcHJlZmV0Y2hIZWFkOiBIZWFkRGF0YSB8IG51bGxcblxuICBoZWFkOiBIZWFkRGF0YVxuXG4gIGxvYWRpbmc6IExvYWRpbmdNb2R1bGVEYXRhIHwgUHJvbWlzZTxMb2FkaW5nTW9kdWxlRGF0YT5cblxuICBwYXJhbGxlbFJvdXRlczogTWFwPHN0cmluZywgQ2hpbGRTZWdtZW50TWFwPlxuXG4gIG5hdmlnYXRlZEF0OiBudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOYXZpZ2F0ZU9wdGlvbnMge1xuICBzY3JvbGw/OiBib29sZWFuXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJlZmV0Y2hPcHRpb25zIHtcbiAga2luZDogUHJlZmV0Y2hLaW5kXG4gIG9uSW52YWxpZGF0ZT86ICgpID0+IHZvaWRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcHBSb3V0ZXJJbnN0YW5jZSB7XG4gIC8qKlxuICAgKiBOYXZpZ2F0ZSB0byB0aGUgcHJldmlvdXMgaGlzdG9yeSBlbnRyeS5cbiAgICovXG4gIGJhY2soKTogdm9pZFxuICAvKipcbiAgICogTmF2aWdhdGUgdG8gdGhlIG5leHQgaGlzdG9yeSBlbnRyeS5cbiAgICovXG4gIGZvcndhcmQoKTogdm9pZFxuICAvKipcbiAgICogUmVmcmVzaCB0aGUgY3VycmVudCBwYWdlLlxuICAgKi9cbiAgcmVmcmVzaCgpOiB2b2lkXG4gIC8qKlxuICAgKiBSZWZyZXNoIHRoZSBjdXJyZW50IHBhZ2UuIFVzZSBpbiBkZXZlbG9wbWVudCBvbmx5LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGhtclJlZnJlc2goKTogdm9pZFxuICAvKipcbiAgICogTmF2aWdhdGUgdG8gdGhlIHByb3ZpZGVkIGhyZWYuXG4gICAqIFB1c2hlcyBhIG5ldyBoaXN0b3J5IGVudHJ5LlxuICAgKi9cbiAgcHVzaChocmVmOiBzdHJpbmcsIG9wdGlvbnM/OiBOYXZpZ2F0ZU9wdGlvbnMpOiB2b2lkXG4gIC8qKlxuICAgKiBOYXZpZ2F0ZSB0byB0aGUgcHJvdmlkZWQgaHJlZi5cbiAgICogUmVwbGFjZXMgdGhlIGN1cnJlbnQgaGlzdG9yeSBlbnRyeS5cbiAgICovXG4gIHJlcGxhY2UoaHJlZjogc3RyaW5nLCBvcHRpb25zPzogTmF2aWdhdGVPcHRpb25zKTogdm9pZFxuICAvKipcbiAgICogUHJlZmV0Y2ggdGhlIHByb3ZpZGVkIGhyZWYuXG4gICAqL1xuICBwcmVmZXRjaChocmVmOiBzdHJpbmcsIG9wdGlvbnM/OiBQcmVmZXRjaE9wdGlvbnMpOiB2b2lkXG59XG5cbmV4cG9ydCBjb25zdCBBcHBSb3V0ZXJDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxBcHBSb3V0ZXJJbnN0YW5jZSB8IG51bGw+KFxuICBudWxsXG4pXG5leHBvcnQgY29uc3QgTGF5b3V0Um91dGVyQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8e1xuICBwYXJlbnRUcmVlOiBGbGlnaHRSb3V0ZXJTdGF0ZVxuICBwYXJlbnRDYWNoZU5vZGU6IENhY2hlTm9kZVxuICBwYXJlbnRTZWdtZW50UGF0aDogRmxpZ2h0U2VnbWVudFBhdGggfCBudWxsXG4gIHVybDogc3RyaW5nXG59IHwgbnVsbD4obnVsbClcblxuZXhwb3J0IGNvbnN0IEdsb2JhbExheW91dFJvdXRlckNvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PHtcbiAgdHJlZTogRmxpZ2h0Um91dGVyU3RhdGVcbiAgZm9jdXNBbmRTY3JvbGxSZWY6IEZvY3VzQW5kU2Nyb2xsUmVmXG4gIG5leHRVcmw6IHN0cmluZyB8IG51bGxcbn0+KG51bGwgYXMgYW55KVxuXG5leHBvcnQgY29uc3QgVGVtcGxhdGVDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxSZWFjdC5SZWFjdE5vZGU+KG51bGwgYXMgYW55KVxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBBcHBSb3V0ZXJDb250ZXh0LmRpc3BsYXlOYW1lID0gJ0FwcFJvdXRlckNvbnRleHQnXG4gIExheW91dFJvdXRlckNvbnRleHQuZGlzcGxheU5hbWUgPSAnTGF5b3V0Um91dGVyQ29udGV4dCdcbiAgR2xvYmFsTGF5b3V0Um91dGVyQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdHbG9iYWxMYXlvdXRSb3V0ZXJDb250ZXh0J1xuICBUZW1wbGF0ZUNvbnRleHQuZGlzcGxheU5hbWUgPSAnVGVtcGxhdGVDb250ZXh0J1xufVxuXG5leHBvcnQgY29uc3QgTWlzc2luZ1Nsb3RDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxTZXQ8c3RyaW5nPj4obmV3IFNldCgpKVxuIl0sIm5hbWVzIjpbIkFwcFJvdXRlckNvbnRleHQiLCJHbG9iYWxMYXlvdXRSb3V0ZXJDb250ZXh0IiwiTGF5b3V0Um91dGVyQ29udGV4dCIsIk1pc3NpbmdTbG90Q29udGV4dCIsIlRlbXBsYXRlQ29udGV4dCIsIlJlYWN0IiwiY3JlYXRlQ29udGV4dCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImRpc3BsYXlOYW1lIiwiU2V0Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/encode-uri-path.js":
|
||
/*!**************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/encode-uri-path.js ***!
|
||
\**************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"encodeURIPath\", ({\n enumerable: true,\n get: function() {\n return encodeURIPath;\n }\n}));\nfunction encodeURIPath(file) {\n return file.split('/').map((p)=>encodeURIComponent(p)).join('/');\n} //# sourceMappingURL=encode-uri-path.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9lbmNvZGUtdXJpLXBhdGguanMiLCJtYXBwaW5ncyI6Ijs7OztpREFBZ0JBOzs7ZUFBQUE7OztBQUFULFNBQVNBLGNBQWNDLElBQVk7SUFDeEMsT0FBT0EsS0FDSkMsS0FBSyxDQUFDLEtBQ05DLEdBQUcsQ0FBQyxDQUFDQyxJQUFNQyxtQkFBbUJELElBQzlCRSxJQUFJLENBQUM7QUFDViIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvc3JjL3NoYXJlZC9saWIvZW5jb2RlLXVyaS1wYXRoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBlbmNvZGVVUklQYXRoKGZpbGU6IHN0cmluZykge1xuICByZXR1cm4gZmlsZVxuICAgIC5zcGxpdCgnLycpXG4gICAgLm1hcCgocCkgPT4gZW5jb2RlVVJJQ29tcG9uZW50KHApKVxuICAgIC5qb2luKCcvJylcbn1cbiJdLCJuYW1lcyI6WyJlbmNvZGVVUklQYXRoIiwiZmlsZSIsInNwbGl0IiwibWFwIiwicCIsImVuY29kZVVSSUNvbXBvbmVudCIsImpvaW4iXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/encode-uri-path.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/error-source.js":
|
||
/*!***********************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/error-source.js ***!
|
||
\***********************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n decorateServerError: function() {\n return decorateServerError;\n },\n getErrorSource: function() {\n return getErrorSource;\n }\n});\nconst symbolError = Symbol.for('NextjsError');\nfunction getErrorSource(error) {\n return error[symbolError] || null;\n}\nfunction decorateServerError(error, type) {\n Object.defineProperty(error, symbolError, {\n writable: false,\n enumerable: false,\n configurable: false,\n value: type\n });\n} //# sourceMappingURL=error-source.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9lcnJvci1zb3VyY2UuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBUWdCQSxtQkFBbUI7ZUFBbkJBOztJQU5BQyxjQUFjO2VBQWRBOzs7QUFGaEIsTUFBTUMsY0FBY0MsT0FBT0MsR0FBRyxDQUFDO0FBRXhCLFNBQVNILGVBQWVJLEtBQVk7SUFDekMsT0FBUUEsS0FBYSxDQUFDSCxZQUFZLElBQUk7QUFDeEM7QUFJTyxTQUFTRixvQkFBb0JLLEtBQVksRUFBRUMsSUFBcUI7SUFDckVDLE9BQU9DLGNBQWMsQ0FBQ0gsT0FBT0gsYUFBYTtRQUN4Q08sVUFBVTtRQUNWQyxZQUFZO1FBQ1pDLGNBQWM7UUFDZEMsT0FBT047SUFDVDtBQUNGIiwic291cmNlcyI6WyIvaG9tZS9OaWNob2xhaS9zcmMvc2hhcmVkL2xpYi9lcnJvci1zb3VyY2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3Qgc3ltYm9sRXJyb3IgPSBTeW1ib2wuZm9yKCdOZXh0anNFcnJvcicpXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFcnJvclNvdXJjZShlcnJvcjogRXJyb3IpOiAnc2VydmVyJyB8ICdlZGdlLXNlcnZlcicgfCBudWxsIHtcbiAgcmV0dXJuIChlcnJvciBhcyBhbnkpW3N5bWJvbEVycm9yXSB8fCBudWxsXG59XG5cbmV4cG9ydCB0eXBlIEVycm9yU291cmNlVHlwZSA9ICdlZGdlLXNlcnZlcicgfCAnc2VydmVyJ1xuXG5leHBvcnQgZnVuY3Rpb24gZGVjb3JhdGVTZXJ2ZXJFcnJvcihlcnJvcjogRXJyb3IsIHR5cGU6IEVycm9yU291cmNlVHlwZSkge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXJyb3IsIHN5bWJvbEVycm9yLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgdmFsdWU6IHR5cGUsXG4gIH0pXG59XG4iXSwibmFtZXMiOlsiZGVjb3JhdGVTZXJ2ZXJFcnJvciIsImdldEVycm9yU291cmNlIiwic3ltYm9sRXJyb3IiLCJTeW1ib2wiLCJmb3IiLCJlcnJvciIsInR5cGUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsIndyaXRhYmxlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsInZhbHVlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/error-source.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/errors/constants.js":
|
||
/*!***************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/errors/constants.js ***!
|
||
\***************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"MISSING_ROOT_TAGS_ERROR\", ({\n enumerable: true,\n get: function() {\n return MISSING_ROOT_TAGS_ERROR;\n }\n}));\nconst MISSING_ROOT_TAGS_ERROR = 'NEXT_MISSING_ROOT_TAGS';\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=constants.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9lcnJvcnMvY29uc3RhbnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7MkRBQWFBOzs7ZUFBQUE7OztBQUFOLE1BQU1BLDBCQUEwQiIsInNvdXJjZXMiOlsiL2hvbWUvc3JjL3NoYXJlZC9saWIvZXJyb3JzL2NvbnN0YW50cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgTUlTU0lOR19ST09UX1RBR1NfRVJST1IgPSAnTkVYVF9NSVNTSU5HX1JPT1RfVEFHUydcbiJdLCJuYW1lcyI6WyJNSVNTSU5HX1JPT1RfVEFHU19FUlJPUiJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/errors/constants.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/format-webpack-messages.js":
|
||
/*!**********************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/format-webpack-messages.js ***!
|
||
\**********************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\nMIT License\n\nCopyright (c) 2015-present, Facebook, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return formatWebpackMessages;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _stripansi = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! next/dist/compiled/strip-ansi */ \"(app-pages-browser)/./node_modules/next/dist/compiled/strip-ansi/index.js\"));\n// This file is based on https://github.com/facebook/create-react-app/blob/7b1a32be6ec9f99a6c9a3c66813f3ac09c4736b9/packages/react-dev-utils/formatWebpackMessages.js\n// It's been edited to remove chalk and CRA-specific logic\nconst friendlySyntaxErrorLabel = 'Syntax error:';\nconst WEBPACK_BREAKING_CHANGE_POLYFILLS = '\\n\\nBREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default.';\nfunction isLikelyASyntaxError(message) {\n return (0, _stripansi.default)(message).includes(friendlySyntaxErrorLabel);\n}\nlet hadMissingSassError = false;\n// Cleans up webpack error messages.\nfunction formatMessage(message, verbose, importTraceNote) {\n // TODO: Replace this once webpack 5 is stable\n if (typeof message === 'object' && message.message) {\n const filteredModuleTrace = message.moduleTrace && message.moduleTrace.filter((trace)=>!/next-(middleware|client-pages|route|edge-function)-loader\\.js/.test(trace.originName));\n let body = message.message;\n const breakingChangeIndex = body.indexOf(WEBPACK_BREAKING_CHANGE_POLYFILLS);\n if (breakingChangeIndex >= 0) {\n body = body.slice(0, breakingChangeIndex);\n }\n message = (message.moduleName ? (0, _stripansi.default)(message.moduleName) + '\\n' : '') + (message.file ? (0, _stripansi.default)(message.file) + '\\n' : '') + body + (message.details && verbose ? '\\n' + message.details : '') + (filteredModuleTrace && filteredModuleTrace.length ? (importTraceNote || '\\n\\nImport trace for requested module:') + filteredModuleTrace.map((trace)=>\"\\n\" + trace.moduleName).join('') : '') + (message.stack && verbose ? '\\n' + message.stack : '');\n }\n let lines = message.split('\\n');\n // Strip Webpack-added headers off errors/warnings\n // https://github.com/webpack/webpack/blob/master/lib/ModuleError.js\n lines = lines.filter((line)=>!/Module [A-z ]+\\(from/.test(line));\n // Transform parsing error into syntax error\n // TODO: move this to our ESLint formatter?\n lines = lines.map((line)=>{\n const parsingError = /Line (\\d+):(?:(\\d+):)?\\s*Parsing error: (.+)$/.exec(line);\n if (!parsingError) {\n return line;\n }\n const [, errorLine, errorColumn, errorMessage] = parsingError;\n return friendlySyntaxErrorLabel + \" \" + errorMessage + \" (\" + errorLine + \":\" + errorColumn + \")\";\n });\n message = lines.join('\\n');\n // Smoosh syntax errors (commonly found in CSS)\n message = message.replace(/SyntaxError\\s+\\((\\d+):(\\d+)\\)\\s*(.+?)\\n/g, \"\" + friendlySyntaxErrorLabel + \" $3 ($1:$2)\\n\");\n // Clean up export errors\n message = message.replace(/^.*export '(.+?)' was not found in '(.+?)'.*$/gm, \"Attempted import error: '$1' is not exported from '$2'.\");\n message = message.replace(/^.*export 'default' \\(imported as '(.+?)'\\) was not found in '(.+?)'.*$/gm, \"Attempted import error: '$2' does not contain a default export (imported as '$1').\");\n message = message.replace(/^.*export '(.+?)' \\(imported as '(.+?)'\\) was not found in '(.+?)'.*$/gm, \"Attempted import error: '$1' is not exported from '$3' (imported as '$2').\");\n lines = message.split('\\n');\n // Remove leading newline\n if (lines.length > 2 && lines[1].trim() === '') {\n lines.splice(1, 1);\n }\n // Cleans up verbose \"module not found\" messages for files and packages.\n if (lines[1] && lines[1].startsWith('Module not found: ')) {\n lines = [\n lines[0],\n lines[1].replace('Error: ', '').replace('Module not found: Cannot find file:', 'Cannot find file:'),\n ...lines.slice(2)\n ];\n }\n // Add helpful message for users trying to use Sass for the first time\n if (lines[1] && lines[1].match(/Cannot find module.+sass/)) {\n // ./file.module.scss (<<loader info>>) => ./file.module.scss\n const firstLine = lines[0].split('!');\n lines[0] = firstLine[firstLine.length - 1];\n lines[1] = \"To use Next.js' built-in Sass support, you first need to install `sass`.\\n\";\n lines[1] += 'Run `npm i sass` or `yarn add sass` inside your workspace.\\n';\n lines[1] += '\\nLearn more: https://nextjs.org/docs/messages/install-sass';\n // dispose of unhelpful stack trace\n lines = lines.slice(0, 2);\n hadMissingSassError = true;\n } else if (hadMissingSassError && message.match(/(sass-loader|resolve-url-loader: CSS error)/)) {\n // dispose of unhelpful stack trace following missing sass module\n lines = [];\n }\n if (!verbose) {\n message = lines.join('\\n');\n // Internal stacks are generally useless so we strip them... with the\n // exception of stacks containing `webpack:` because they're normally\n // from user code generated by Webpack. For more information see\n // https://github.com/facebook/create-react-app/pull/1050\n message = message.replace(/^\\s*at\\s((?!webpack:).)*:\\d+:\\d+[\\s)]*(\\n|$)/gm, '') // at ... ...:x:y\n ;\n message = message.replace(/^\\s*at\\s<anonymous>(\\n|$)/gm, '') // at <anonymous>\n ;\n message = message.replace(/File was processed with these loaders:\\n(.+[\\\\/](next[\\\\/]dist[\\\\/].+|@next[\\\\/]react-refresh-utils[\\\\/]loader)\\.js\\n)*You may need an additional loader to handle the result of these loaders.\\n/g, '');\n lines = message.split('\\n');\n }\n // Remove duplicated newlines\n lines = lines.filter((line, index, arr)=>index === 0 || line.trim() !== '' || line.trim() !== arr[index - 1].trim());\n // Reassemble the message\n message = lines.join('\\n');\n return message.trim();\n}\nfunction formatWebpackMessages(json, verbose) {\n const formattedErrors = json.errors.map((message)=>{\n const isUnknownNextFontError = message.message.includes('An error occurred in `next/font`.');\n return formatMessage(message, isUnknownNextFontError || verbose);\n });\n const formattedWarnings = json.warnings.map((message)=>{\n return formatMessage(message, verbose);\n });\n // Reorder errors to put the most relevant ones first.\n let reactServerComponentsError = -1;\n for(let i = 0; i < formattedErrors.length; i++){\n const error = formattedErrors[i];\n if (error.includes('ReactServerComponentsError')) {\n reactServerComponentsError = i;\n break;\n }\n }\n // Move the reactServerComponentsError to the top if it exists\n if (reactServerComponentsError !== -1) {\n const error = formattedErrors.splice(reactServerComponentsError, 1);\n formattedErrors.unshift(error[0]);\n }\n const result = {\n ...json,\n errors: formattedErrors,\n warnings: formattedWarnings\n };\n if (!verbose && result.errors.some(isLikelyASyntaxError)) {\n // If there are any syntax errors, show just them.\n result.errors = result.errors.filter(isLikelyASyntaxError);\n result.warnings = [];\n }\n return result;\n} //# sourceMappingURL=format-webpack-messages.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9mb3JtYXQtd2VicGFjay1tZXNzYWdlcy5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNCQTs7OzsyQ0FpS0E7OztlQUF3QkE7Ozs7Z0ZBaEtGO0FBQ3RCLHFLQUFxSztBQUNySywwREFBMEQ7QUFFMUQsTUFBTUMsMkJBQTJCO0FBRWpDLE1BQU1DLG9DQUNKO0FBRUYsU0FBU0MscUJBQXFCQyxPQUFlO0lBQzNDLE9BQU9DLENBQUFBLEdBQUFBLFdBQUFBLE9BQUFBLEVBQVVELFNBQVNFLFFBQVEsQ0FBQ0w7QUFDckM7QUFFQSxJQUFJTSxzQkFBc0I7QUFFMUIsb0NBQW9DO0FBQ3BDLFNBQVNDLGNBQ1BKLE9BQVksRUFDWkssT0FBaUIsRUFDakJDLGVBQXlCO0lBRXpCLDhDQUE4QztJQUM5QyxJQUFJLE9BQU9OLFlBQVksWUFBWUEsUUFBUUEsT0FBTyxFQUFFO1FBQ2xELE1BQU1PLHNCQUNKUCxRQUFRUSxXQUFXLElBQ25CUixRQUFRUSxXQUFXLENBQUNDLE1BQU0sQ0FDeEIsQ0FBQ0MsUUFDQyxDQUFDLGdFQUFnRUMsSUFBSSxDQUNuRUQsTUFBTUUsVUFBVTtRQUl4QixJQUFJQyxPQUFPYixRQUFRQSxPQUFPO1FBQzFCLE1BQU1jLHNCQUFzQkQsS0FBS0UsT0FBTyxDQUFDakI7UUFDekMsSUFBSWdCLHVCQUF1QixHQUFHO1lBQzVCRCxPQUFPQSxLQUFLRyxLQUFLLENBQUMsR0FBR0Y7UUFDdkI7UUFFQWQsVUFDR0EsQ0FBQUEsUUFBUWlCLFVBQVUsR0FBR2hCLENBQUFBLEdBQUFBLFdBQUFBLE9BQUFBLEVBQVVELFFBQVFpQixVQUFVLElBQUksT0FBTyxHQUFDLEdBQzdEakIsQ0FBQUEsUUFBUWtCLElBQUksR0FBR2pCLENBQUFBLEdBQUFBLFdBQUFBLE9BQUFBLEVBQVVELFFBQVFrQixJQUFJLElBQUksT0FBTyxHQUFDLEdBQ2xE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QkFBZ0JRLE9BQU8sQ0FBQ0QsS0FBSyxDQUFDLEVBQUU7SUFDbEM7SUFFQSxNQUFNRSxTQUFTO1FBQ2IsR0FBR1YsSUFBSTtRQUNQRSxRQUFRRDtRQUNSSSxVQUFVRDtJQUNaO0lBQ0EsSUFBSSxDQUFDdkMsV0FBVzZDLE9BQU9SLE1BQU0sQ0FBQ1MsSUFBSSxDQUFDcEQsdUJBQXVCO1FBQ3hELGtEQUFrRDtRQUNsRG1ELE9BQU9SLE1BQU0sR0FBR1EsT0FBT1IsTUFBTSxDQUFDakMsTUFBTSxDQUFDVjtRQUNyQ21ELE9BQU9MLFFBQVEsR0FBRyxFQUFFO0lBQ3RCO0lBQ0EsT0FBT0s7QUFDVCIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvc3JjL3NoYXJlZC9saWIvZm9ybWF0LXdlYnBhY2stbWVzc2FnZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG5NSVQgTGljZW5zZVxuXG5Db3B5cmlnaHQgKGMpIDIwMTUtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxub2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xudG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG5mdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG5BVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG5MSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcblNPRlRXQVJFLlxuKi9cbmltcG9ydCBzdHJpcEFuc2kgZnJvbSAnbmV4dC9kaXN0L2NvbXBpbGVkL3N0cmlwLWFuc2knXG4vLyBUaGlzIGZpbGUgaXMgYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2NyZWF0ZS1yZWFjdC1hcHAvYmxvYi83YjFhMzJiZTZlYzlmOTlhNmM5YTNjNjY4MTNmM2FjMDljNDczNmI5L3BhY2thZ2VzL3JlYWN0LWRldi11dGlscy9mb3JtYXRXZWJwYWNrTWVzc2FnZXMuanNcbi8vIEl0J3MgYmVlbiBlZGl0ZWQgdG8gcmVtb3ZlIGNoYWxrIGFuZCBDUkEtc3BlY2lmaWMgbG9naWNcblxuY29uc3QgZnJpZW5kbHlTeW50YXhFcnJvckxhYmVsID0gJ1N5bnRheCBlcnJvcjonXG5cbmNvbnN0IFdFQlBBQ0tfQlJFQUtJTkdfQ0hBTkdFX1BPTFlGSUxMUyA9XG4gICdcXG5cXG5CUkVBS0lORyBDSEFOR0U6IHdlYnBhY2sgPCA1IHVzZWQgdG8gaW5jbHVkZSBwb2x5ZmlsbHMgZm9yIG5vZGUuanMgY29yZSBtb2R1bGVzIGJ5IGRlZmF1bHQuJ1xuXG5mdW5jdGlvbiBpc0xpa2VseUFTeW50YXhFcnJvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmlwQW5zaShtZXNzYWdlKS5pbmNsdWRlcyhmcmllbmRseVN5bnRheEVycm9yTGFiZWwpXG59XG5cbmxldCBoYWRNaXNzaW5nU2Fzc0Vycm9yID0gZmFsc2VcblxuLy8gQ2xlYW5zIHVwIHdlYnBhY2sgZXJyb3IgbWVzc2FnZXMuXG5mdW5jdGlvbiBmb3JtYXRNZXNzYWdlKFxuICBtZXNzYWdlOiBhbnksXG4gIHZlcmJvc2U/OiBib29sZWFuLFxuICBpbXBvcnRUcmFjZU5vdGU/OiBib29sZWFuXG4pIHtcbiAgLy8gVE9ETzogUmVwbGFjZSB0aGlzIG9uY2Ugd2VicGFjayA1IGlzIHN0YWJsZVxuICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09ICdvYmplY3QnICYmIG1lc3NhZ2UubWVzc2FnZSkge1xuICAgIGNvbnN0IGZpbHRlcmVkTW9kdWxlVHJhY2UgPVxuICAgICAgbWVzc2FnZS5tb2R1bGVUcmFjZSAmJlxuICAgICAgbWVzc2FnZS5tb2R1bGVUcmFjZS5maWx0ZXIoXG4gICAgICAgICh0cmFjZTogYW55KSA9PlxuICAgICAgICAgICEvbmV4dC0obWlkZGxld2FyZXxjbGllbnQtcGFnZXN8cm91dGV8ZWRnZS1mdW5jdGlvbiktbG9hZGVyXFwuanMvLnRlc3QoXG4gICAgICAgICAgICB0cmFjZS5vcmlnaW5OYW1lXG4gICAgICAgICAgKVxuICAgICAgKVxuXG4gICAgbGV0IGJvZHkgPSBtZXNzYWdlLm1lc3NhZ2VcbiAgICBjb25zdCBicmVha2luZ0NoYW5nZUluZGV4ID0gYm9keS5pbmRleE9mKFdFQlBBQ0tfQlJFQUtJTkdfQ0hBTkdFX1BPTFlGSUxMUylcbiAgICBpZiAoYnJlYWtpbmdDaGFuZ2VJbmRleCA+PSAwKSB7XG4gICAgICBib2R5ID0gYm9keS5zbGljZSgwLCBicmVha2luZ0NoYW5nZUluZGV4KVxuICAgIH1cblxuICAgIG1lc3NhZ2UgPVxuICAgICAgKG1lc3NhZ2UubW9kdWxlTmFtZSA/IHN0cmlwQW5zaShtZXNzYWdlLm1vZHVsZU5hbWUpICsgJ1xcbicgOiAnJykgK1xuICAgICAgKG1lc3NhZ2UuZmlsZSA/IHN0cmlwQW5zaShtZXNzYWdlLmZpbGUpICsgJ1xcbicgOiAnJykgK1xuICAgICAgYm9keSArXG4gICAgICAobWVzc2FnZS5kZXRhaWxzICYmIHZlcmJvc2UgPyAnXFxuJyArIG1lc3NhZ2UuZGV0YWlscyA6ICcnKSArXG4gICAgICAoZmlsdGVyZWRNb2R1bGVUcmFjZSAmJiBmaWx0ZXJlZE1vZHVsZVRyYWNlLmxlbmd0aFxuICAgICAgICA/IChpbXBvcnRUcmFjZU5vdGUgfHwgJ1xcblxcbkltcG9ydCB0cmFjZSBmb3IgcmVxdWVzdGVkIG1vZHVsZTonKSArXG4gICAgICAgICAgZmlsdGVyZWRNb2R1bGVUcmFjZVxuICAgICAgICAgICAgLm1hcCgodHJhY2U6IGFueSkgPT4gYFxcbiR7dHJhY2UubW9kdWxlTmFtZX1gKVxuICAgICAgICAgICAgLmpvaW4oJycpXG4gICAgICAgIDogJycpICtcbiAgICAgIChtZXNzYWdlLnN0YWNrICYmIHZlcmJvc2UgPyAnXFxuJyArIG1lc3NhZ2Uuc3RhY2sgOiAnJylcbiAgfVxuICBsZXQgbGluZXMgPSBtZXNzYWdlLnNwbGl0KCdcXG4nKVxuXG4gIC8vIFN0cmlwIFdlYnBhY2stYWRkZWQgaGVhZGVycyBvZmYgZXJyb3JzL3dhcm5pbmdzXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrL3dlYnBhY2svYmxvYi9tYXN0ZXIvbGliL01vZHVsZUVycm9yLmpzXG4gIGxpbmVzID0gbGluZXMuZmlsdGVyKChsaW5lOiBzdHJpbmcpID0+ICEvTW9kdWxlIFtBLXogXStcXChmcm9tLy50ZXN0KGxpbmUpKVxuXG4gIC8vIFRyYW5zZm9ybSBwYXJzaW5nIGVycm9yIGludG8gc3ludGF4IGVycm9yXG4gIC8vIFRPRE86IG1vdmUgdGhpcyB0byBvdXIgRVNMaW50IGZvcm1hdHRlcj9cbiAgbGluZXMgPSBsaW5lcy5tYXAoKGxpbmU6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHBhcnNpbmdFcnJvciA9IC9MaW5lIChcXGQrKTooPzooXFxkKyk6KT9cXHMqUGFyc2luZyBlcnJvcjogKC4rKSQvLmV4ZWMoXG4gICAgICBsaW5lXG4gICAgKVxuICAgIGlmICghcGFyc2luZ0Vycm9yKSB7XG4gICAgICByZXR1cm4gbGluZVxuICAgIH1cbiAgICBjb25zdCBbLCBlcnJvckxpbmUsIGVycm9yQ29sdW1uLCBlcnJvck1lc3NhZ2VdID0gcGFyc2luZ0Vycm9yXG4gICAgcmV0dXJuIGAke2ZyaWVuZGx5U3ludGF4RXJyb3JMYWJlbH0gJHtlcnJvck1lc3NhZ2V9ICgke2Vycm9yTGluZX06JHtlcnJvckNvbHVtbn0pYFxuICB9KVxuXG4gIG1lc3NhZ2UgPSBsaW5lcy5qb2luKCdcXG4nKVxuICAvLyBTbW9vc2ggc3ludGF4IGVycm9ycyAoY29tbW9ubHkgZm91bmQgaW4gQ1NTKVxuICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKFxuICAgIC9TeW50YXhFcnJvclxccytcXCgoXFxkKyk6KFxcZCspXFwpXFxzKiguKz8pXFxuL2csXG4gICAgYCR7ZnJpZW5kbHlTeW50YXhFcnJvckxhYmVsfSAkMyAoJDE6JDIpXFxuYFxuICApXG4gIC8vIENsZWFuIHVwIGV4cG9ydCBlcnJvcnNcbiAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZShcbiAgICAvXi4qZXhwb3J0ICcoLis/KScgd2FzIG5vdCBmb3VuZCBpbiAnKC4rPyknLiokL2dtLFxuICAgIGBBdHRlbXB0ZWQgaW1wb3J0IGVycm9yOiAnJDEnIGlzIG5vdCBleHBvcnRlZCBmcm9tICckMicuYFxuICApXG4gIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoXG4gICAgL14uKmV4cG9ydCAnZGVmYXVsdCcgXFwoaW1wb3J0ZWQgYXMgJyguKz8pJ1xcKSB3YXMgbm90IGZvdW5kIGluICcoLis/KScuKiQvZ20sXG4gICAgYEF0dGVtcHRlZCBpbXBvcnQgZXJyb3I6ICckMicgZG9lcyBub3QgY29udGFpbiBhIGRlZmF1bHQgZXhwb3J0IChpbXBvcnRlZCBhcyAnJDEnKS5gXG4gIClcbiAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZShcbiAgICAvXi4qZXhwb3J0ICcoLis/KScgXFwoaW1wb3J0ZWQgYXMgJyguKz8pJ1xcKSB3YXMgbm90IGZvdW5kIGluICcoLis/KScuKiQvZ20sXG4gICAgYEF0dGVtcHRlZCBpbXBvcnQgZXJyb3I6ICckMScgaXMgbm90IGV4cG9ydGVkIGZyb20gJyQzJyAoaW1wb3J0ZWQgYXMgJyQyJykuYFxuICApXG4gIGxpbmVzID0gbWVzc2FnZS5zcGxpdCgnXFxuJylcblxuICAvLyBSZW1vdmUgbGVhZGluZyBuZXdsaW5lXG4gIGlmIChsaW5lcy5sZW5ndGggPiAyICYmIGxpbmVzWzFdLnRyaW0oKSA9PT0gJycpIHtcbiAgICBsaW5lcy5zcGxpY2UoMSwgMSlcbiAgfVxuXG4gIC8vIENsZWFucyB1cCB2ZXJib3NlIFwibW9kdWxlIG5vdCBmb3VuZFwiIG1lc3NhZ2VzIGZvciBmaWxlcyBhbmQgcGFja2FnZXMuXG4gIGlmIChsaW5lc1sxXSAmJiBsaW5lc1sxXS5zdGFydHNXaXRoKCdNb2R1bGUgbm90IGZvdW5kOiAnKSkge1xuICAgIGxpbmVzID0gW1xuICAgICAgbGluZXNbMF0sXG4gICAgICBsaW5lc1sxXVxuICAgICAgICAucmVwbGFjZSgnRXJyb3I6ICcsICcnKVxuICAgICAgICAucmVwbGFjZSgnTW9kdWxlIG5vdCBmb3VuZDogQ2Fubm90IGZpbmQgZmlsZTonLCAnQ2Fubm90IGZpbmQgZmlsZTonKSxcbiAgICAgIC4uLmxpbmVzLnNsaWNlKDIpLFxuICAgIF1cbiAgfVxuXG4gIC8vIEFkZCBoZWxwZnVsIG1lc3NhZ2UgZm9yIHVzZXJzIHRyeWluZyB0byB1c2UgU2FzcyBmb3IgdGhlIGZpcnN0IHRpbWVcbiAgaWYgKGxpbmVzWzFdICYmIGxpbmVzWzFdLm1hdGNoKC9DYW5ub3QgZmluZCBtb2R1bGUuK3Nhc3MvKSkge1xuICAgIC8vIC4vZmlsZS5tb2R1bGUuc2NzcyAoPDxsb2FkZXIgaW5mbz4+KSA9PiAuL2ZpbGUubW9kdWxlLnNjc3NcbiAgICBjb25zdCBmaXJzdExpbmUgPSBsaW5lc1swXS5zcGxpdCgnIScpXG4gICAgbGluZXNbMF0gPSBmaXJzdExpbmVbZmlyc3RMaW5lLmxlbmd0aCAtIDFdXG5cbiAgICBsaW5lc1sxXSA9XG4gICAgICBcIlRvIHVzZSBOZXh0LmpzJyBidWlsdC1pbiBTYXNzIHN1cHBvcnQsIHlvdSBmaXJzdCBuZWVkIHRvIGluc3RhbGwgYHNhc3NgLlxcblwiXG4gICAgbGluZXNbMV0gKz0gJ1J1biBgbnBtIGkgc2Fzc2Agb3IgYHlhcm4gYWRkIHNhc3NgIGluc2lkZSB5b3VyIHdvcmtzcGFjZS5cXG4nXG4gICAgbGluZXNbMV0gKz0gJ1xcbkxlYXJuIG1vcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL2luc3RhbGwtc2FzcydcblxuICAgIC8vIGRpc3Bvc2Ugb2YgdW5oZWxwZnVsIHN0YWNrIHRyYWNlXG4gICAgbGluZXMgPSBsaW5lcy5zbGljZSgwLCAyKVxuICAgIGhhZE1pc3NpbmdTYXNzRXJyb3IgPSB0cnVlXG4gIH0gZWxzZSBpZiAoXG4gICAgaGFkTWlzc2luZ1Nhc3NFcnJvciAmJlxuICAgIG1lc3NhZ2UubWF0Y2goLyhzYXNzLWxvYWRlcnxyZXNvbHZlLXVybC1sb2FkZXI6IENTUyBlcnJvcikvKVxuICApIHtcbiAgICAvLyBkaXNwb3NlIG9mIHVuaGVscGZ1bCBzdGFjayB0cmFjZSBmb2xsb3dpbmcgbWlzc2luZyBzYXNzIG1vZHVsZVxuICAgIGxpbmVzID0gW11cbiAgfVxuXG4gIGlmICghdmVyYm9zZSkge1xuICAgIG1lc3NhZ2UgPSBsaW5lcy5qb2luKCdcXG4nKVxuICAgIC8vIEludGVybmFsIHN0YWNrcyBhcmUgZ2VuZXJhbGx5IHVzZWxlc3Mgc28gd2Ugc3RyaXAgdGhlbS4uLiB3aXRoIHRoZVxuICAgIC8vIGV4Y2VwdGlvbiBvZiBzdGFja3MgY29udGFpbmluZyBgd2VicGFjazpgIGJlY2F1c2UgdGhleSdyZSBub3JtYWxseVxuICAgIC8vIGZyb20gdXNlciBjb2RlIGdlbmVyYXRlZCBieSBXZWJwYWNrLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWVcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svY3JlYXRlLXJlYWN0LWFwcC9wdWxsLzEwNTBcbiAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKFxuICAgICAgL15cXHMqYXRcXHMoKD8hd2VicGFjazopLikqOlxcZCs6XFxkK1tcXHMpXSooXFxufCQpL2dtLFxuICAgICAgJydcbiAgICApIC8vIGF0IC4uLiAuLi46eDp5XG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgvXlxccyphdFxcczxhbm9ueW1vdXM+KFxcbnwkKS9nbSwgJycpIC8vIGF0IDxhbm9ueW1vdXM+XG5cbiAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKFxuICAgICAgL0ZpbGUgd2FzIHByb2Nlc3NlZCB3aXRoIHRoZXNlIGxvYWRlcnM6XFxuKC4rW1xcXFwvXShuZXh0W1xcXFwvXWRpc3RbXFxcXC9dLit8QG5leHRbXFxcXC9dcmVhY3QtcmVmcmVzaC11dGlsc1tcXFxcL11sb2FkZXIpXFwuanNcXG4pKllvdSBtYXkgbmVlZCBhbiBhZGRpdGlvbmFsIGxvYWRlciB0byBoYW5kbGUgdGhlIHJlc3VsdCBvZiB0aGVzZSBsb2FkZXJzLlxcbi9nLFxuICAgICAgJydcbiAgICApXG5cbiAgICBsaW5lcyA9IG1lc3NhZ2Uuc3BsaXQoJ1xcbicpXG4gIH1cblxuICAvLyBSZW1vdmUgZHVwbGljYXRlZCBuZXdsaW5lc1xuICBsaW5lcyA9IChsaW5lcyBhcyBzdHJpbmdbXSkuZmlsdGVyKFxuICAgIChsaW5lLCBpbmRleCwgYXJyKSA9PlxuICAgICAgaW5kZXggPT09IDAgfHwgbGluZS50cmltKCkgIT09ICcnIHx8IGxpbmUudHJpbSgpICE9PSBhcnJbaW5kZXggLSAxXS50cmltKClcbiAgKVxuXG4gIC8vIFJlYXNzZW1ibGUgdGhlIG1lc3NhZ2VcbiAgbWVzc2FnZSA9IGxpbmVzLmpvaW4oJ1xcbicpXG4gIHJldHVybiBtZXNzYWdlLnRyaW0oKVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtYXRXZWJwYWNrTWVzc2FnZXMoanNvbjogYW55LCB2ZXJib3NlPzogYm9vbGVhbikge1xuICBjb25zdCBmb3JtYXR0ZWRFcnJvcnMgPSBqc29uLmVycm9ycy5tYXAoKG1lc3NhZ2U6IGFueSkgPT4ge1xuICAgIGNvbnN0IGlzVW5rbm93bk5leHRGb250RXJyb3IgPSBtZXNzYWdlLm1lc3NhZ2UuaW5jbHVkZXMoXG4gICAgICAnQW4gZXJyb3Igb2NjdXJyZWQgaW4gYG5leHQvZm9udGAuJ1xuICAgIClcbiAgICByZXR1cm4gZm9ybWF0TWVzc2FnZShtZXNzYWdlLCBpc1Vua25vd25OZXh0Rm9udEVycm9yIHx8IHZlcmJvc2UpXG4gIH0pXG4gIGNvbnN0IGZvcm1hdHRlZFdhcm5pbmdzID0ganNvbi53YXJuaW5ncy5tYXAoKG1lc3NhZ2U6IGFueSkgPT4ge1xuICAgIHJldHVybiBmb3JtYXRNZXNzYWdlKG1lc3NhZ2UsIHZlcmJvc2UpXG4gIH0pXG5cbiAgLy8gUmVvcmRlciBlcnJvcnMgdG8gcHV0IHRoZSBtb3N0IHJlbGV2YW50IG9uZXMgZmlyc3QuXG4gIGxldCByZWFjdFNlcnZlckNvbXBvbmVudHNFcnJvciA9IC0xXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb3JtYXR0ZWRFcnJvcnMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBlcnJvciA9IGZvcm1hdHRlZEVycm9yc1tpXVxuICAgIGlmIChlcnJvci5pbmNsdWRlcygnUmVhY3RTZXJ2ZXJDb21wb25lbnRzRXJyb3InKSkge1xuICAgICAgcmVhY3RTZXJ2ZXJDb21wb25lbnRzRXJyb3IgPSBpXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIC8vIE1vdmUgdGhlIHJlYWN0U2VydmVyQ29tcG9uZW50c0Vycm9yIHRvIHRoZSB0b3AgaWYgaXQgZXhpc3RzXG4gIGlmIChyZWFjdFNlcnZlckNvbXBvbmVudHNFcnJvciAhPT0gLTEpIHtcbiAgICBjb25zdCBlcnJvciA9IGZvcm1hdHRlZEVycm9ycy5zcGxpY2UocmVhY3RTZXJ2ZXJDb21wb25lbnRzRXJyb3IsIDEpXG4gICAgZm9ybWF0dGVkRXJyb3JzLnVuc2hpZnQoZXJyb3JbMF0pXG4gIH1cblxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgLi4uanNvbixcbiAgICBlcnJvcnM6IGZvcm1hdHRlZEVycm9ycyxcbiAgICB3YXJuaW5nczogZm9ybWF0dGVkV2FybmluZ3MsXG4gIH1cbiAgaWYgKCF2ZXJib3NlICYmIHJlc3VsdC5lcnJvcnMuc29tZShpc0xpa2VseUFTeW50YXhFcnJvcikpIHtcbiAgICAvLyBJZiB0aGVyZSBhcmUgYW55IHN5bnRheCBlcnJvcnMsIHNob3cganVzdCB0aGVtLlxuICAgIHJlc3VsdC5lcnJvcnMgPSByZXN1bHQuZXJyb3JzLmZpbHRlcihpc0xpa2VseUFTeW50YXhFcnJvcilcbiAgICByZXN1bHQud2FybmluZ3MgPSBbXVxuICB9XG4gIHJldHVybiByZXN1bHRcbn1cbiJdLCJuYW1lcyI6WyJmb3JtYXRXZWJwYWNrTWVzc2FnZXMiLCJmcmllbmRseVN5bnRheEVycm9yTGFiZWwiLCJXRUJQQUNLX0JSRUFLSU5HX0NIQU5HRV9QT0xZRklMTFMiLCJpc0xpa2VseUFTeW50YXhFcnJvciIsIm1lc3NhZ2UiLCJzdHJpcEFuc2kiLCJpbmNsdWRlcyIsImhhZE1pc3NpbmdTYXNzRXJyb3IiLCJmb3JtYXRNZXNzYWdlIiwidmVyYm9zZSIsImltcG9ydFRyYWNlTm90ZSIsImZpbHRlcmVkTW9kdWxlVHJhY2UiLCJtb2R1bGVUcmFjZSIsImZpbHRlciIsInRyYWNlIiwidGVzdCIsIm9yaWdpbk5hbWUiLCJib2R5IiwiYnJlYWtpbmdDaGFuZ2VJbmRleCIsImluZGV4T2YiLCJzbGljZSIsIm1vZHVsZU5hbWUiLCJmaWxlIiwiZGV0YWlscyIsImxlbmd0aCIsIm1hcCIsImpvaW4iLCJzdGFjayIsImxpbmVzIiwic3BsaXQiLCJsaW5lIiwicGFyc2luZ0Vycm9yIiwiZXhlYyIsImVycm9yTGluZSIsImVycm9yQ29sdW1uIiwiZXJyb3JNZXNzYWdlIiwicmVwbGFjZSIsInRyaW0iLCJzcGxpY2UiLCJzdGFydHNXaXRoIiwibWF0Y2giLCJmaXJzdExpbmUiLCJpbmRleCIsImFyciIsImpzb24iLCJmb3JtYXR0ZWRFcnJvcnMiLCJlcnJvcnMiLCJpc1Vua25vd25OZXh0Rm9udEVycm9yIiwiZm9ybWF0dGVkV2FybmluZ3MiLCJ3YXJuaW5ncyIsInJlYWN0U2VydmVyQ29tcG9uZW50c0Vycm9yIiwiaSIsImVycm9yIiwidW5zaGlmdCIsInJlc3VsdCIsInNvbWUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/format-webpack-messages.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/hash.js":
|
||
/*!***************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/hash.js ***!
|
||
\***************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// http://www.cse.yorku.ca/~oz/hash.html\n// More specifically, 32-bit hash via djbxor\n// (ref: https://gist.github.com/eplawless/52813b1d8ad9af510d85?permalink_comment_id=3367765#gistcomment-3367765)\n// This is due to number type differences between rust for turbopack to js number types,\n// where rust does not have easy way to repreesnt js's 53-bit float number type for the matching\n// overflow behavior. This is more `correct` in terms of having canonical hash across different runtime / implementation\n// as can gaurantee determinstic output from 32bit hash.\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n djb2Hash: function() {\n return djb2Hash;\n },\n hexHash: function() {\n return hexHash;\n }\n});\nfunction djb2Hash(str) {\n let hash = 5381;\n for(let i = 0; i < str.length; i++){\n const char = str.charCodeAt(i);\n hash = (hash << 5) + hash + char & 0xffffffff;\n }\n return hash >>> 0;\n}\nfunction hexHash(str) {\n return djb2Hash(str).toString(36).slice(0, 5);\n} //# sourceMappingURL=hash.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9oYXNoLmpzIiwibWFwcGluZ3MiOiJBQUFBLHdDQUF3QztBQUN4Qyw0Q0FBNEM7QUFDNUMsaUhBQWlIO0FBQ2pILHdGQUF3RjtBQUN4RixnR0FBZ0c7QUFDaEcsd0hBQXdIO0FBQ3hILHdEQUF3RDs7Ozs7Ozs7Ozs7OztJQUN4Q0EsUUFBUTtlQUFSQTs7SUFTQUMsT0FBTztlQUFQQTs7O0FBVFQsU0FBU0QsU0FBU0UsR0FBVztJQUNsQyxJQUFJQyxPQUFPO0lBQ1gsSUFBSyxJQUFJQyxJQUFJLEdBQUdBLElBQUlGLElBQUlHLE1BQU0sRUFBRUQsSUFBSztRQUNuQyxNQUFNRSxPQUFPSixJQUFJSyxVQUFVLENBQUNIO1FBQzVCRCxPQUFTQSxDQUFBQSxTQUFRLElBQUtBLE9BQU9HLE9BQVE7SUFDdkM7SUFDQSxPQUFPSCxTQUFTO0FBQ2xCO0FBRU8sU0FBU0YsUUFBUUMsR0FBVztJQUNqQyxPQUFPRixTQUFTRSxLQUFLTSxRQUFRLENBQUMsSUFBSUMsS0FBSyxDQUFDLEdBQUc7QUFDN0MiLCJzb3VyY2VzIjpbIi9ob21lL05pY2hvbGFpL3NyYy9zaGFyZWQvbGliL2hhc2gudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cDovL3d3dy5jc2UueW9ya3UuY2Evfm96L2hhc2guaHRtbFxuLy8gTW9yZSBzcGVjaWZpY2FsbHksIDMyLWJpdCBoYXNoIHZpYSBkamJ4b3Jcbi8vIChyZWY6IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2VwbGF3bGVzcy81MjgxM2IxZDhhZDlhZjUxMGQ4NT9wZXJtYWxpbmtfY29tbWVudF9pZD0zMzY3NzY1I2dpc3Rjb21tZW50LTMzNjc3NjUpXG4vLyBUaGlzIGlzIGR1ZSB0byBudW1iZXIgdHlwZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHJ1c3QgZm9yIHR1cmJvcGFjayB0byBqcyBudW1iZXIgdHlwZXMsXG4vLyB3aGVyZSBydXN0IGRvZXMgbm90IGhhdmUgZWFzeSB3YXkgdG8gcmVwcmVlc250IGpzJ3MgNTMtYml0IGZsb2F0IG51bWJlciB0eXBlIGZvciB0aGUgbWF0Y2hpbmdcbi8vIG92ZXJmbG93IGJlaGF2aW9yLiBUaGlzIGlzIG1vcmUgYGNvcnJlY3RgIGluIHRlcm1zIG9mIGhhdmluZyBjYW5vbmljYWwgaGFzaCBhY3Jvc3MgZGlmZmVyZW50IHJ1bnRpbWUgLyBpbXBsZW1lbnRhdGlvblxuLy8gYXMgY2FuIGdhdXJhbnRlZSBkZXRlcm1pbnN0aWMgb3V0cHV0IGZyb20gMzJiaXQgaGFzaC5cbmV4cG9ydCBmdW5jdGlvbiBkamIySGFzaChzdHI6IHN0cmluZykge1xuICBsZXQgaGFzaCA9IDUzODFcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGFyID0gc3RyLmNoYXJDb2RlQXQoaSlcbiAgICBoYXNoID0gKChoYXNoIDw8IDUpICsgaGFzaCArIGNoYXIpICYgMHhmZmZmZmZmZlxuICB9XG4gIHJldHVybiBoYXNoID4+PiAwXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoZXhIYXNoKHN0cjogc3RyaW5nKSB7XG4gIHJldHVybiBkamIySGFzaChzdHIpLnRvU3RyaW5nKDM2KS5zbGljZSgwLCA1KVxufVxuIl0sIm5hbWVzIjpbImRqYjJIYXNoIiwiaGV4SGFzaCIsInN0ciIsImhhc2giLCJpIiwibGVuZ3RoIiwiY2hhciIsImNoYXJDb2RlQXQiLCJ0b1N0cmluZyIsInNsaWNlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/hash.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js":
|
||
/*!**********************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js ***!
|
||
\**********************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"HeadManagerContext\", ({\n enumerable: true,\n get: function() {\n return HeadManagerContext;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst HeadManagerContext = _react.default.createContext({});\nif (true) {\n HeadManagerContext.displayName = 'HeadManagerContext';\n} //# sourceMappingURL=head-manager-context.shared-runtime.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9oZWFkLW1hbmFnZXItY29udGV4dC5zaGFyZWQtcnVudGltZS5qcyIsIm1hcHBpbmdzIjoiOzs7O3NEQUVhQTs7O2VBQUFBOzs7OzRFQUZLO0FBRVgsTUFBTUEscUJBVVJDLE9BQUFBLE9BQUssQ0FBQ0MsYUFBYSxDQUFDLENBQUM7QUFFMUIsSUFBSUMsSUFBb0IsRUFBbUI7SUFDekNILG1CQUFtQk0sV0FBVyxHQUFHO0FBQ25DIiwic291cmNlcyI6WyIvaG9tZS9OaWNob2xhaS9zcmMvc2hhcmVkL2xpYi9oZWFkLW1hbmFnZXItY29udGV4dC5zaGFyZWQtcnVudGltZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmV4cG9ydCBjb25zdCBIZWFkTWFuYWdlckNvbnRleHQ6IFJlYWN0LkNvbnRleHQ8e1xuICB1cGRhdGVIZWFkPzogKHN0YXRlOiBhbnkpID0+IHZvaWRcbiAgbW91bnRlZEluc3RhbmNlcz86IGFueVxuICB1cGRhdGVTY3JpcHRzPzogKHN0YXRlOiBhbnkpID0+IHZvaWRcbiAgc2NyaXB0cz86IGFueVxuICBnZXRJc1Nzcj86ICgpID0+IGJvb2xlYW5cblxuICAvLyBVc2VkIGluIGFwcCBkaXJlY3RvcnksIHRvIHJlbmRlciBzY3JpcHQgdGFncyBhcyBzZXJ2ZXIgY29tcG9uZW50cy5cbiAgYXBwRGlyPzogYm9vbGVhblxuICBub25jZT86IHN0cmluZ1xufT4gPSBSZWFjdC5jcmVhdGVDb250ZXh0KHt9KVxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBIZWFkTWFuYWdlckNvbnRleHQuZGlzcGxheU5hbWUgPSAnSGVhZE1hbmFnZXJDb250ZXh0J1xufVxuIl0sIm5hbWVzIjpbIkhlYWRNYW5hZ2VyQ29udGV4dCIsIlJlYWN0IiwiY3JlYXRlQ29udGV4dCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImRpc3BsYXlOYW1lIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js":
|
||
/*!**********************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js ***!
|
||
\**********************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n PathParamsContext: function() {\n return PathParamsContext;\n },\n PathnameContext: function() {\n return PathnameContext;\n },\n SearchParamsContext: function() {\n return SearchParamsContext;\n }\n});\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\nconst SearchParamsContext = (0, _react.createContext)(null);\nconst PathnameContext = (0, _react.createContext)(null);\nconst PathParamsContext = (0, _react.createContext)(null);\nif (true) {\n SearchParamsContext.displayName = 'SearchParamsContext';\n PathnameContext.displayName = 'PathnameContext';\n PathParamsContext.displayName = 'PathParamsContext';\n} //# sourceMappingURL=hooks-client-context.shared-runtime.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9ob29rcy1jbGllbnQtY29udGV4dC5zaGFyZWQtcnVudGltZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFPYUEsaUJBQWlCO2VBQWpCQTs7SUFEQUMsZUFBZTtlQUFmQTs7SUFEQUMsbUJBQW1CO2VBQW5CQTs7O21DQUhpQjtBQUd2QixNQUFNQSxzQkFBc0JDLENBQUFBLEdBQUFBLE9BQUFBLGFBQUFBLEVBQXNDO0FBQ2xFLE1BQU1GLGtCQUFrQkUsQ0FBQUEsR0FBQUEsT0FBQUEsYUFBQUEsRUFBNkI7QUFDckQsTUFBTUgsb0JBQW9CRyxDQUFBQSxHQUFBQSxPQUFBQSxhQUFBQSxFQUE2QjtBQUU5RCxJQUFJQyxJQUFvQixFQUFtQjtJQUN6Q0Ysb0JBQW9CSyxXQUFXLEdBQUc7SUFDbENOLGdCQUFnQk0sV0FBVyxHQUFHO0lBQzlCUCxrQkFBa0JPLFdBQVcsR0FBRztBQUNsQyIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvc3JjL3NoYXJlZC9saWIvaG9va3MtY2xpZW50LWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgUGFyYW1zIH0gZnJvbSAnLi4vLi4vc2VydmVyL3JlcXVlc3QvcGFyYW1zJ1xuXG5leHBvcnQgY29uc3QgU2VhcmNoUGFyYW1zQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8VVJMU2VhcmNoUGFyYW1zIHwgbnVsbD4obnVsbClcbmV4cG9ydCBjb25zdCBQYXRobmFtZUNvbnRleHQgPSBjcmVhdGVDb250ZXh0PHN0cmluZyB8IG51bGw+KG51bGwpXG5leHBvcnQgY29uc3QgUGF0aFBhcmFtc0NvbnRleHQgPSBjcmVhdGVDb250ZXh0PFBhcmFtcyB8IG51bGw+KG51bGwpXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIFNlYXJjaFBhcmFtc0NvbnRleHQuZGlzcGxheU5hbWUgPSAnU2VhcmNoUGFyYW1zQ29udGV4dCdcbiAgUGF0aG5hbWVDb250ZXh0LmRpc3BsYXlOYW1lID0gJ1BhdGhuYW1lQ29udGV4dCdcbiAgUGF0aFBhcmFtc0NvbnRleHQuZGlzcGxheU5hbWUgPSAnUGF0aFBhcmFtc0NvbnRleHQnXG59XG4iXSwibmFtZXMiOlsiUGF0aFBhcmFtc0NvbnRleHQiLCJQYXRobmFtZUNvbnRleHQiLCJTZWFyY2hQYXJhbXNDb250ZXh0IiwiY3JlYXRlQ29udGV4dCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImRpc3BsYXlOYW1lIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/is-plain-object.js":
|
||
/*!**************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/is-plain-object.js ***!
|
||
\**************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n getObjectClassLabel: function() {\n return getObjectClassLabel;\n },\n isPlainObject: function() {\n return isPlainObject;\n }\n});\nfunction getObjectClassLabel(value) {\n return Object.prototype.toString.call(value);\n}\nfunction isPlainObject(value) {\n if (getObjectClassLabel(value) !== '[object Object]') {\n return false;\n }\n const prototype = Object.getPrototypeOf(value);\n /**\n * this used to be previously:\n *\n * `return prototype === null || prototype === Object.prototype`\n *\n * but Edge Runtime expose Object from vm, being that kind of type-checking wrongly fail.\n *\n * It was changed to the current implementation since it's resilient to serialization.\n */ return prototype === null || prototype.hasOwnProperty('isPrototypeOf');\n} //# sourceMappingURL=is-plain-object.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9pcy1wbGFpbi1vYmplY3QuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBQWdCQSxtQkFBbUI7ZUFBbkJBOztJQUlBQyxhQUFhO2VBQWJBOzs7QUFKVCxTQUFTRCxvQkFBb0JFLEtBQVU7SUFDNUMsT0FBT0MsT0FBT0MsU0FBUyxDQUFDQyxRQUFRLENBQUNDLElBQUksQ0FBQ0o7QUFDeEM7QUFFTyxTQUFTRCxjQUFjQyxLQUFVO0lBQ3RDLElBQUlGLG9CQUFvQkUsV0FBVyxtQkFBbUI7UUFDcEQsT0FBTztJQUNUO0lBRUEsTUFBTUUsWUFBWUQsT0FBT0ksY0FBYyxDQUFDTDtJQUV4Qzs7Ozs7Ozs7R0FRQyxHQUNELE9BQU9FLGNBQWMsUUFBUUEsVUFBVUksY0FBYyxDQUFDO0FBQ3hEIiwic291cmNlcyI6WyIvaG9tZS9OaWNob2xhaS9zcmMvc2hhcmVkL2xpYi9pcy1wbGFpbi1vYmplY3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGdldE9iamVjdENsYXNzTGFiZWwodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgaWYgKGdldE9iamVjdENsYXNzTGFiZWwodmFsdWUpICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgY29uc3QgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKVxuXG4gIC8qKlxuICAgKiB0aGlzIHVzZWQgdG8gYmUgcHJldmlvdXNseTpcbiAgICpcbiAgICogYHJldHVybiBwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlYFxuICAgKlxuICAgKiBidXQgRWRnZSBSdW50aW1lIGV4cG9zZSBPYmplY3QgZnJvbSB2bSwgYmVpbmcgdGhhdCBraW5kIG9mIHR5cGUtY2hlY2tpbmcgd3JvbmdseSBmYWlsLlxuICAgKlxuICAgKiBJdCB3YXMgY2hhbmdlZCB0byB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBzaW5jZSBpdCdzIHJlc2lsaWVudCB0byBzZXJpYWxpemF0aW9uLlxuICAgKi9cbiAgcmV0dXJuIHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUuaGFzT3duUHJvcGVydHkoJ2lzUHJvdG90eXBlT2YnKVxufVxuIl0sIm5hbWVzIjpbImdldE9iamVjdENsYXNzTGFiZWwiLCJpc1BsYWluT2JqZWN0IiwidmFsdWUiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImNhbGwiLCJnZXRQcm90b3R5cGVPZiIsImhhc093blByb3BlcnR5Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/is-plain-object.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/is-thenable.js":
|
||
/*!**********************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/is-thenable.js ***!
|
||
\**********************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * Check to see if a value is Thenable.\n *\n * @param promise the maybe-thenable value\n * @returns true if the value is thenable\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isThenable\", ({\n enumerable: true,\n get: function() {\n return isThenable;\n }\n}));\nfunction isThenable(promise) {\n return promise !== null && typeof promise === 'object' && 'then' in promise && typeof promise.then === 'function';\n} //# sourceMappingURL=is-thenable.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9pcy10aGVuYWJsZS5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Q0FLQzs7Ozs4Q0FDZUE7OztlQUFBQTs7O0FBQVQsU0FBU0EsV0FDZEMsT0FBdUI7SUFFdkIsT0FDRUEsWUFBWSxRQUNaLE9BQU9BLFlBQVksWUFDbkIsVUFBVUEsV0FDVixPQUFPQSxRQUFRQyxJQUFJLEtBQUs7QUFFNUIiLCJzb3VyY2VzIjpbIi9ob21lL05pY2hvbGFpL3NyYy9zaGFyZWQvbGliL2lzLXRoZW5hYmxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2hlY2sgdG8gc2VlIGlmIGEgdmFsdWUgaXMgVGhlbmFibGUuXG4gKlxuICogQHBhcmFtIHByb21pc2UgdGhlIG1heWJlLXRoZW5hYmxlIHZhbHVlXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZSBpcyB0aGVuYWJsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNUaGVuYWJsZTxUID0gdW5rbm93bj4oXG4gIHByb21pc2U6IFByb21pc2U8VD4gfCBUXG4pOiBwcm9taXNlIGlzIFByb21pc2U8VD4ge1xuICByZXR1cm4gKFxuICAgIHByb21pc2UgIT09IG51bGwgJiZcbiAgICB0eXBlb2YgcHJvbWlzZSA9PT0gJ29iamVjdCcgJiZcbiAgICAndGhlbicgaW4gcHJvbWlzZSAmJlxuICAgIHR5cGVvZiBwcm9taXNlLnRoZW4gPT09ICdmdW5jdGlvbidcbiAgKVxufVxuIl0sIm5hbWVzIjpbImlzVGhlbmFibGUiLCJwcm9taXNlIiwidGhlbiJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/is-thenable.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js":
|
||
/*!**************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js ***!
|
||
\**************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// This has to be a shared module which is shared between client component error boundary and dynamic component\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n BailoutToCSRError: function() {\n return BailoutToCSRError;\n },\n isBailoutToCSRError: function() {\n return isBailoutToCSRError;\n }\n});\nconst BAILOUT_TO_CSR = 'BAILOUT_TO_CLIENT_SIDE_RENDERING';\nclass BailoutToCSRError extends Error {\n constructor(reason){\n super(\"Bail out to client-side rendering: \" + reason), this.reason = reason, this.digest = BAILOUT_TO_CSR;\n }\n}\nfunction isBailoutToCSRError(err) {\n if (typeof err !== 'object' || err === null || !('digest' in err)) {\n return false;\n }\n return err.digest === BAILOUT_TO_CSR;\n} //# sourceMappingURL=bailout-to-csr.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9sYXp5LWR5bmFtaWMvYmFpbG91dC10by1jc3IuanMiLCJtYXBwaW5ncyI6IkFBQUEsK0dBQStHOzs7Ozs7Ozs7Ozs7O0lBSWxHQSxpQkFBaUI7ZUFBakJBOztJQVNHQyxtQkFBbUI7ZUFBbkJBOzs7QUFaaEIsTUFBTUMsaUJBQWlCO0FBR2hCLE1BQU1GLDBCQUEwQkc7SUFHckNDLFlBQTRCQyxNQUFjLENBQUU7UUFDMUMsS0FBSyxDQUFFLHdDQUFxQ0EsU0FBQUEsSUFBQUEsQ0FEbEJBLE1BQUFBLEdBQUFBLFFBQUFBLElBQUFBLENBRlpDLE1BQUFBLEdBQVNKO0lBSXpCO0FBQ0Y7QUFHTyxTQUFTRCxvQkFBb0JNLEdBQVk7SUFDOUMsSUFBSSxPQUFPQSxRQUFRLFlBQVlBLFFBQVEsUUFBUSxDQUFFLGFBQVlBLEdBQUFBLENBQUUsRUFBSTtRQUNqRSxPQUFPO0lBQ1Q7SUFFQSxPQUFPQSxJQUFJRCxNQUFNLEtBQUtKO0FBQ3hCIiwic291cmNlcyI6WyIvaG9tZS9zcmMvc2hhcmVkL2xpYi9sYXp5LWR5bmFtaWMvYmFpbG91dC10by1jc3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyBoYXMgdG8gYmUgYSBzaGFyZWQgbW9kdWxlIHdoaWNoIGlzIHNoYXJlZCBiZXR3ZWVuIGNsaWVudCBjb21wb25lbnQgZXJyb3IgYm91bmRhcnkgYW5kIGR5bmFtaWMgY29tcG9uZW50XG5jb25zdCBCQUlMT1VUX1RPX0NTUiA9ICdCQUlMT1VUX1RPX0NMSUVOVF9TSURFX1JFTkRFUklORydcblxuLyoqIEFuIGVycm9yIHRoYXQgc2hvdWxkIGJlIHRocm93biB3aGVuIHdlIHdhbnQgdG8gYmFpbCBvdXQgdG8gY2xpZW50LXNpZGUgcmVuZGVyaW5nLiAqL1xuZXhwb3J0IGNsYXNzIEJhaWxvdXRUb0NTUkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBwdWJsaWMgcmVhZG9ubHkgZGlnZXN0ID0gQkFJTE9VVF9UT19DU1JcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgcmVhc29uOiBzdHJpbmcpIHtcbiAgICBzdXBlcihgQmFpbCBvdXQgdG8gY2xpZW50LXNpZGUgcmVuZGVyaW5nOiAke3JlYXNvbn1gKVxuICB9XG59XG5cbi8qKiBDaGVja3MgaWYgYSBwYXNzZWQgYXJndW1lbnQgaXMgYW4gZXJyb3IgdGhhdCBpcyB0aHJvd24gaWYgd2Ugd2FudCB0byBiYWlsIG91dCB0byBjbGllbnQtc2lkZSByZW5kZXJpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gaXNCYWlsb3V0VG9DU1JFcnJvcihlcnI6IHVua25vd24pOiBlcnIgaXMgQmFpbG91dFRvQ1NSRXJyb3Ige1xuICBpZiAodHlwZW9mIGVyciAhPT0gJ29iamVjdCcgfHwgZXJyID09PSBudWxsIHx8ICEoJ2RpZ2VzdCcgaW4gZXJyKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIGVyci5kaWdlc3QgPT09IEJBSUxPVVRfVE9fQ1NSXG59XG4iXSwibmFtZXMiOlsiQmFpbG91dFRvQ1NSRXJyb3IiLCJpc0JhaWxvdXRUb0NTUkVycm9yIiwiQkFJTE9VVF9UT19DU1IiLCJFcnJvciIsImNvbnN0cnVjdG9yIiwicmVhc29uIiwiZGlnZXN0IiwiZXJyIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/normalized-asset-prefix.js":
|
||
/*!**********************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/normalized-asset-prefix.js ***!
|
||
\**********************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"normalizedAssetPrefix\", ({\n enumerable: true,\n get: function() {\n return normalizedAssetPrefix;\n }\n}));\nfunction normalizedAssetPrefix(assetPrefix) {\n // remove all leading slashes and trailing slashes\n const escapedAssetPrefix = (assetPrefix == null ? void 0 : assetPrefix.replace(/^\\/+|\\/+$/g, '')) || false;\n // if an assetPrefix was '/', we return empty string\n // because it could be an unnecessary trailing slash\n if (!escapedAssetPrefix) {\n return '';\n }\n if (URL.canParse(escapedAssetPrefix)) {\n const url = new URL(escapedAssetPrefix).toString();\n return url.endsWith('/') ? url.slice(0, -1) : url;\n }\n // assuming assetPrefix here is a pathname-style,\n // restore the leading slash\n return \"/\" + escapedAssetPrefix;\n} //# sourceMappingURL=normalized-asset-prefix.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9ub3JtYWxpemVkLWFzc2V0LXByZWZpeC5qcyIsIm1hcHBpbmdzIjoiOzs7O3lEQUFnQkE7OztlQUFBQTs7O0FBQVQsU0FBU0Esc0JBQXNCQyxXQUErQjtJQUNuRSxrREFBa0Q7SUFDbEQsTUFBTUMscUJBQXFCRCxDQUFBQSxlQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxZQUFhRSxPQUFPLENBQUMsY0FBYyxRQUFPO0lBRXJFLG9EQUFvRDtJQUNwRCxvREFBb0Q7SUFDcEQsSUFBSSxDQUFDRCxvQkFBb0I7UUFDdkIsT0FBTztJQUNUO0lBRUEsSUFBSUUsSUFBSUMsUUFBUSxDQUFDSCxxQkFBcUI7UUFDcEMsTUFBTUksTUFBTSxJQUFJRixJQUFJRixvQkFBb0JLLFFBQVE7UUFDaEQsT0FBT0QsSUFBSUUsUUFBUSxDQUFDLE9BQU9GLElBQUlHLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBS0g7SUFDaEQ7SUFFQSxpREFBaUQ7SUFDakQsNEJBQTRCO0lBQzVCLE9BQVEsTUFBR0o7QUFDYiIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvc3JjL3NoYXJlZC9saWIvbm9ybWFsaXplZC1hc3NldC1wcmVmaXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZWRBc3NldFByZWZpeChhc3NldFByZWZpeDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgLy8gcmVtb3ZlIGFsbCBsZWFkaW5nIHNsYXNoZXMgYW5kIHRyYWlsaW5nIHNsYXNoZXNcbiAgY29uc3QgZXNjYXBlZEFzc2V0UHJlZml4ID0gYXNzZXRQcmVmaXg/LnJlcGxhY2UoL15cXC8rfFxcLyskL2csICcnKSB8fCBmYWxzZVxuXG4gIC8vIGlmIGFuIGFzc2V0UHJlZml4IHdhcyAnLycsIHdlIHJldHVybiBlbXB0eSBzdHJpbmdcbiAgLy8gYmVjYXVzZSBpdCBjb3VsZCBiZSBhbiB1bm5lY2Vzc2FyeSB0cmFpbGluZyBzbGFzaFxuICBpZiAoIWVzY2FwZWRBc3NldFByZWZpeCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKFVSTC5jYW5QYXJzZShlc2NhcGVkQXNzZXRQcmVmaXgpKSB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChlc2NhcGVkQXNzZXRQcmVmaXgpLnRvU3RyaW5nKClcbiAgICByZXR1cm4gdXJsLmVuZHNXaXRoKCcvJykgPyB1cmwuc2xpY2UoMCwgLTEpIDogdXJsXG4gIH1cblxuICAvLyBhc3N1bWluZyBhc3NldFByZWZpeCBoZXJlIGlzIGEgcGF0aG5hbWUtc3R5bGUsXG4gIC8vIHJlc3RvcmUgdGhlIGxlYWRpbmcgc2xhc2hcbiAgcmV0dXJuIGAvJHtlc2NhcGVkQXNzZXRQcmVmaXh9YFxufVxuIl0sIm5hbWVzIjpbIm5vcm1hbGl6ZWRBc3NldFByZWZpeCIsImFzc2V0UHJlZml4IiwiZXNjYXBlZEFzc2V0UHJlZml4IiwicmVwbGFjZSIsIlVSTCIsImNhblBhcnNlIiwidXJsIiwidG9TdHJpbmciLCJlbmRzV2l0aCIsInNsaWNlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/normalized-asset-prefix.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js":
|
||
/*!*****************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js ***!
|
||
\*****************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * For a given page path, this function ensures that there is a leading slash.\n * If there is not a leading slash, one is added, otherwise it is noop.\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"ensureLeadingSlash\", ({\n enumerable: true,\n get: function() {\n return ensureLeadingSlash;\n }\n}));\nfunction ensureLeadingSlash(path) {\n return path.startsWith('/') ? path : \"/\" + path;\n} //# sourceMappingURL=ensure-leading-slash.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9wYWdlLXBhdGgvZW5zdXJlLWxlYWRpbmctc2xhc2guanMiLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDOzs7O3NEQUNlQTs7O2VBQUFBOzs7QUFBVCxTQUFTQSxtQkFBbUJDLElBQVk7SUFDN0MsT0FBT0EsS0FBS0MsVUFBVSxDQUFDLE9BQU9ELE9BQVEsTUFBR0E7QUFDM0MiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9zaGFyZWQvbGliL3BhZ2UtcGF0aC9lbnN1cmUtbGVhZGluZy1zbGFzaC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZvciBhIGdpdmVuIHBhZ2UgcGF0aCwgdGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgdGhlcmUgaXMgYSBsZWFkaW5nIHNsYXNoLlxuICogSWYgdGhlcmUgaXMgbm90IGEgbGVhZGluZyBzbGFzaCwgb25lIGlzIGFkZGVkLCBvdGhlcndpc2UgaXQgaXMgbm9vcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUxlYWRpbmdTbGFzaChwYXRoOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHBhdGguc3RhcnRzV2l0aCgnLycpID8gcGF0aCA6IGAvJHtwYXRofWBcbn1cbiJdLCJuYW1lcyI6WyJlbnN1cmVMZWFkaW5nU2xhc2giLCJwYXRoIiwic3RhcnRzV2l0aCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js":
|
||
/*!***************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js ***!
|
||
\***************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"addPathPrefix\", ({\n enumerable: true,\n get: function() {\n return addPathPrefix;\n }\n}));\nconst _parsepath = __webpack_require__(/*! ./parse-path */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nfunction addPathPrefix(path, prefix) {\n if (!path.startsWith('/') || !prefix) {\n return path;\n }\n const { pathname, query, hash } = (0, _parsepath.parsePath)(path);\n return \"\" + prefix + pathname + query + hash;\n} //# sourceMappingURL=add-path-prefix.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvYWRkLXBhdGgtcHJlZml4LmpzIiwibWFwcGluZ3MiOiI7Ozs7aURBTWdCQTs7O2VBQUFBOzs7dUNBTlU7QUFNbkIsU0FBU0EsY0FBY0MsSUFBWSxFQUFFQyxNQUFlO0lBQ3pELElBQUksQ0FBQ0QsS0FBS0UsVUFBVSxDQUFDLFFBQVEsQ0FBQ0QsUUFBUTtRQUNwQyxPQUFPRDtJQUNUO0lBRUEsTUFBTSxFQUFFRyxRQUFRLEVBQUVDLEtBQUssRUFBRUMsSUFBSSxFQUFFLEdBQUdDLENBQUFBLEdBQUFBLFdBQUFBLFNBQUFBLEVBQVVOO0lBQzVDLE9BQVEsS0FBRUMsU0FBU0UsV0FBV0MsUUFBUUM7QUFDeEMiLCJzb3VyY2VzIjpbIi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvYWRkLXBhdGgtcHJlZml4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHBhcnNlUGF0aCB9IGZyb20gJy4vcGFyc2UtcGF0aCdcblxuLyoqXG4gKiBBZGRzIHRoZSBwcm92aWRlZCBwcmVmaXggdG8gdGhlIGdpdmVuIHBhdGguIEl0IGZpcnN0IGVuc3VyZXMgdGhhdCB0aGUgcGF0aFxuICogaXMgaW5kZWVkIHN0YXJ0aW5nIHdpdGggYSBzbGFzaC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFBhdGhQcmVmaXgocGF0aDogc3RyaW5nLCBwcmVmaXg/OiBzdHJpbmcpIHtcbiAgaWYgKCFwYXRoLnN0YXJ0c1dpdGgoJy8nKSB8fCAhcHJlZml4KSB7XG4gICAgcmV0dXJuIHBhdGhcbiAgfVxuXG4gIGNvbnN0IHsgcGF0aG5hbWUsIHF1ZXJ5LCBoYXNoIH0gPSBwYXJzZVBhdGgocGF0aClcbiAgcmV0dXJuIGAke3ByZWZpeH0ke3BhdGhuYW1lfSR7cXVlcnl9JHtoYXNofWBcbn1cbiJdLCJuYW1lcyI6WyJhZGRQYXRoUHJlZml4IiwicGF0aCIsInByZWZpeCIsInN0YXJ0c1dpdGgiLCJwYXRobmFtZSIsInF1ZXJ5IiwiaGFzaCIsInBhcnNlUGF0aCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/app-paths.js":
|
||
/*!*********************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/app-paths.js ***!
|
||
\*********************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n normalizeAppPath: function() {\n return normalizeAppPath;\n },\n normalizeRscURL: function() {\n return normalizeRscURL;\n }\n});\nconst _ensureleadingslash = __webpack_require__(/*! ../../page-path/ensure-leading-slash */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js\");\nconst _segment = __webpack_require__(/*! ../../segment */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/segment.js\");\nfunction normalizeAppPath(route) {\n return (0, _ensureleadingslash.ensureLeadingSlash)(route.split('/').reduce((pathname, segment, index, segments)=>{\n // Empty segments are ignored.\n if (!segment) {\n return pathname;\n }\n // Groups are ignored.\n if ((0, _segment.isGroupSegment)(segment)) {\n return pathname;\n }\n // Parallel segments are ignored.\n if (segment[0] === '@') {\n return pathname;\n }\n // The last segment (if it's a leaf) should be ignored.\n if ((segment === 'page' || segment === 'route') && index === segments.length - 1) {\n return pathname;\n }\n return pathname + \"/\" + segment;\n }, ''));\n}\nfunction normalizeRscURL(url) {\n return url.replace(/\\.rsc($|\\?)/, '$1');\n} //# sourceMappingURL=app-paths.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvYXBwLXBhdGhzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQXNCZ0JBLGdCQUFnQjtlQUFoQkE7O0lBbUNBQyxlQUFlO2VBQWZBOzs7Z0RBekRtQjtxQ0FDSjtBQXFCeEIsU0FBU0QsaUJBQWlCRSxLQUFhO0lBQzVDLE9BQU9DLENBQUFBLEdBQUFBLG9CQUFBQSxrQkFBQUEsRUFDTEQsTUFBTUUsS0FBSyxDQUFDLEtBQUtDLE1BQU0sQ0FBQyxDQUFDQyxVQUFVQyxTQUFTQyxPQUFPQztRQUNqRCw4QkFBOEI7UUFDOUIsSUFBSSxDQUFDRixTQUFTO1lBQ1osT0FBT0Q7UUFDVDtRQUVBLHNCQUFzQjtRQUN0QixJQUFJSSxDQUFBQSxHQUFBQSxTQUFBQSxjQUFBQSxFQUFlSCxVQUFVO1lBQzNCLE9BQU9EO1FBQ1Q7UUFFQSxpQ0FBaUM7UUFDakMsSUFBSUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxLQUFLO1lBQ3RCLE9BQU9EO1FBQ1Q7UUFFQSx1REFBdUQ7UUFDdkQsSUFDR0MsQ0FBQUEsWUFBWSxVQUFVQSxZQUFZLFFBQU0sSUFDekNDLFVBQVVDLFNBQVNFLE1BQU0sR0FBRyxHQUM1QjtZQUNBLE9BQU9MO1FBQ1Q7UUFFQSxPQUFVQSxXQUFTLE1BQUdDO0lBQ3hCLEdBQUc7QUFFUDtBQU1PLFNBQVNOLGdCQUFnQlcsR0FBVztJQUN6QyxPQUFPQSxJQUFJQyxPQUFPLENBQ2hCLGVBQ0E7QUFHSiIsInNvdXJjZXMiOlsiL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9hcHAtcGF0aHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZW5zdXJlTGVhZGluZ1NsYXNoIH0gZnJvbSAnLi4vLi4vcGFnZS1wYXRoL2Vuc3VyZS1sZWFkaW5nLXNsYXNoJ1xuaW1wb3J0IHsgaXNHcm91cFNlZ21lbnQgfSBmcm9tICcuLi8uLi9zZWdtZW50J1xuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYW4gYXBwIHJvdXRlIHNvIGl0IHJlcHJlc2VudHMgdGhlIGFjdHVhbCByZXF1ZXN0IHBhdGguIEVzc2VudGlhbGx5XG4gKiBwZXJmb3JtaW5nIHRoZSBmb2xsb3dpbmcgdHJhbnNmb3JtYXRpb25zOlxuICpcbiAqIC0gYC8oZGFzaGJvYXJkKS91c2VyL1tpZF0vcGFnZWAgdG8gYC91c2VyL1tpZF1gXG4gKiAtIGAvKGRhc2hib2FyZCkvYWNjb3VudC9wYWdlYCB0byBgL2FjY291bnRgXG4gKiAtIGAvdXNlci9baWRdL3BhZ2VgIHRvIGAvdXNlci9baWRdYFxuICogLSBgL2FjY291bnQvcGFnZWAgdG8gYC9hY2NvdW50YFxuICogLSBgL3BhZ2VgIHRvIGAvYFxuICogLSBgLyhkYXNoYm9hcmQpL3VzZXIvW2lkXS9yb3V0ZWAgdG8gYC91c2VyL1tpZF1gXG4gKiAtIGAvKGRhc2hib2FyZCkvYWNjb3VudC9yb3V0ZWAgdG8gYC9hY2NvdW50YFxuICogLSBgL3VzZXIvW2lkXS9yb3V0ZWAgdG8gYC91c2VyL1tpZF1gXG4gKiAtIGAvYWNjb3VudC9yb3V0ZWAgdG8gYC9hY2NvdW50YFxuICogLSBgL3JvdXRlYCB0byBgL2BcbiAqIC0gYC9gIHRvIGAvYFxuICpcbiAqIEBwYXJhbSByb3V0ZSB0aGUgYXBwIHJvdXRlIHRvIG5vcm1hbGl6ZVxuICogQHJldHVybnMgdGhlIG5vcm1hbGl6ZWQgcGF0aG5hbWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUFwcFBhdGgocm91dGU6IHN0cmluZykge1xuICByZXR1cm4gZW5zdXJlTGVhZGluZ1NsYXNoKFxuICAgIHJvdXRlLnNwbGl0KCcvJykucmVkdWNlKChwYXRobmFtZSwgc2VnbWVudCwgaW5kZXgsIHNlZ21lbnRzKSA9PiB7XG4gICAgICAvLyBFbXB0eSBzZWdtZW50cyBhcmUgaWdub3JlZC5cbiAgICAgIGlmICghc2VnbWVudCkge1xuICAgICAgICByZXR1cm4gcGF0aG5hbWVcbiAgICAgIH1cblxuICAgICAgLy8gR3JvdXBzIGFyZSBpZ25vcmVkLlxuICAgICAgaWYgKGlzR3JvdXBTZWdtZW50KHNlZ21lbnQpKSB7XG4gICAgICAgIHJldHVybiBwYXRobmFtZVxuICAgICAgfVxuXG4gICAgICAvLyBQYXJhbGxlbCBzZWdtZW50cyBhcmUgaWdub3JlZC5cbiAgICAgIGlmIChzZWdtZW50WzBdID09PSAnQCcpIHtcbiAgICAgICAgcmV0dXJuIHBhdGhuYW1lXG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBsYXN0IHNlZ21lbnQgKGlmIGl0J3MgYSBsZWFmKSBzaG91bGQgYmUgaWdub3JlZC5cbiAgICAgIGlmIChcbiAgICAgICAgKHNlZ21lbnQgPT09ICdwYWdlJyB8fCBzZWdtZW50ID09PSAncm91dGUnKSAmJlxuICAgICAgICBpbmRleCA9PT0gc2VnbWVudHMubGVuZ3RoIC0gMVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBwYXRobmFtZVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYCR7cGF0aG5hbWV9LyR7c2VnbWVudH1gXG4gICAgfSwgJycpXG4gIClcbn1cblxuLyoqXG4gKiBTdHJpcHMgdGhlIGAucnNjYCBleHRlbnNpb24gaWYgaXQncyBpbiB0aGUgcGF0aG5hbWUuXG4gKiBTaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgb24gZnVsbCB1cmxzIGl0IGNoZWNrcyBgP2AgZm9yIHNlYXJjaFBhcmFtcyBoYW5kbGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVJzY1VSTCh1cmw6IHN0cmluZykge1xuICByZXR1cm4gdXJsLnJlcGxhY2UoXG4gICAgL1xcLnJzYygkfFxcPykvLFxuICAgIC8vICQxIGVuc3VyZXMgYD9gIGlzIHByZXNlcnZlZFxuICAgICckMSdcbiAgKVxufVxuIl0sIm5hbWVzIjpbIm5vcm1hbGl6ZUFwcFBhdGgiLCJub3JtYWxpemVSc2NVUkwiLCJyb3V0ZSIsImVuc3VyZUxlYWRpbmdTbGFzaCIsInNwbGl0IiwicmVkdWNlIiwicGF0aG5hbWUiLCJzZWdtZW50IiwiaW5kZXgiLCJzZWdtZW50cyIsImlzR3JvdXBTZWdtZW50IiwibGVuZ3RoIiwidXJsIiwicmVwbGFjZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/app-paths.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/cache-busting-search-param.js":
|
||
/*!**************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/cache-busting-search-param.js ***!
|
||
\**************************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"computeCacheBustingSearchParam\", ({\n enumerable: true,\n get: function() {\n return computeCacheBustingSearchParam;\n }\n}));\nconst _hash = __webpack_require__(/*! ../../hash */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/hash.js\");\nfunction computeCacheBustingSearchParam(prefetchHeader, segmentPrefetchHeader, stateTreeHeader, nextUrlHeader) {\n if (prefetchHeader === undefined && segmentPrefetchHeader === undefined && stateTreeHeader === undefined && nextUrlHeader === undefined) {\n return '';\n }\n return (0, _hash.hexHash)([\n prefetchHeader || '0',\n segmentPrefetchHeader || '0',\n stateTreeHeader || '0',\n nextUrlHeader || '0'\n ].join(','));\n} //# sourceMappingURL=cache-busting-search-param.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvY2FjaGUtYnVzdGluZy1zZWFyY2gtcGFyYW0uanMiLCJtYXBwaW5ncyI6Ijs7OztrRUFFZ0JBOzs7ZUFBQUE7OztrQ0FGUTtBQUVqQixTQUFTQSwrQkFDZEMsY0FBNkMsRUFDN0NDLHFCQUFvRCxFQUNwREMsZUFBOEMsRUFDOUNDLGFBQTRDO0lBRTVDLElBQ0VILG1CQUFtQkksYUFDbkJILDBCQUEwQkcsYUFDMUJGLG9CQUFvQkUsYUFDcEJELGtCQUFrQkMsV0FDbEI7UUFDQSxPQUFPO0lBQ1Q7SUFDQSxPQUFPQyxDQUFBQSxHQUFBQSxNQUFBQSxPQUFBQSxFQUNMO1FBQ0VMLGtCQUFrQjtRQUNsQkMseUJBQXlCO1FBQ3pCQyxtQkFBbUI7UUFDbkJDLGlCQUFpQjtLQUNsQixDQUFDRyxJQUFJLENBQUM7QUFFWCIsInNvdXJjZXMiOlsiL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9jYWNoZS1idXN0aW5nLXNlYXJjaC1wYXJhbS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBoZXhIYXNoIH0gZnJvbSAnLi4vLi4vaGFzaCdcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVDYWNoZUJ1c3RpbmdTZWFyY2hQYXJhbShcbiAgcHJlZmV0Y2hIZWFkZXI6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkLFxuICBzZWdtZW50UHJlZmV0Y2hIZWFkZXI6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkLFxuICBzdGF0ZVRyZWVIZWFkZXI6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkLFxuICBuZXh0VXJsSGVhZGVyOiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZFxuKTogc3RyaW5nIHtcbiAgaWYgKFxuICAgIHByZWZldGNoSGVhZGVyID09PSB1bmRlZmluZWQgJiZcbiAgICBzZWdtZW50UHJlZmV0Y2hIZWFkZXIgPT09IHVuZGVmaW5lZCAmJlxuICAgIHN0YXRlVHJlZUhlYWRlciA9PT0gdW5kZWZpbmVkICYmXG4gICAgbmV4dFVybEhlYWRlciA9PT0gdW5kZWZpbmVkXG4gICkge1xuICAgIHJldHVybiAnJ1xuICB9XG4gIHJldHVybiBoZXhIYXNoKFxuICAgIFtcbiAgICAgIHByZWZldGNoSGVhZGVyIHx8ICcwJyxcbiAgICAgIHNlZ21lbnRQcmVmZXRjaEhlYWRlciB8fCAnMCcsXG4gICAgICBzdGF0ZVRyZWVIZWFkZXIgfHwgJzAnLFxuICAgICAgbmV4dFVybEhlYWRlciB8fCAnMCcsXG4gICAgXS5qb2luKCcsJylcbiAgKVxufVxuIl0sIm5hbWVzIjpbImNvbXB1dGVDYWNoZUJ1c3RpbmdTZWFyY2hQYXJhbSIsInByZWZldGNoSGVhZGVyIiwic2VnbWVudFByZWZldGNoSGVhZGVyIiwic3RhdGVUcmVlSGVhZGVyIiwibmV4dFVybEhlYWRlciIsInVuZGVmaW5lZCIsImhleEhhc2giLCJqb2luIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/cache-busting-search-param.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/html-bots.js":
|
||
/*!*********************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/html-bots.js ***!
|
||
\*********************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// This regex contains the bots that we need to do a blocking render for and can't safely stream the response\n// due to how they parse the DOM. For example, they might explicitly check for metadata in the `head` tag, so we can't stream metadata tags after the `head` was sent.\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"HTML_LIMITED_BOT_UA_RE\", ({\n enumerable: true,\n get: function() {\n return HTML_LIMITED_BOT_UA_RE;\n }\n}));\nconst HTML_LIMITED_BOT_UA_RE = /Mediapartners-Google|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti/i; //# sourceMappingURL=html-bots.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaHRtbC1ib3RzLmpzIiwibWFwcGluZ3MiOiJBQUFBLDZHQUE2RztBQUM3RyxzS0FBc0s7Ozs7OzBEQUN6SkE7OztlQUFBQTs7O0FBQU4sTUFBTUEseUJBQ1giLCJzb3VyY2VzIjpbIi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaHRtbC1ib3RzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgcmVnZXggY29udGFpbnMgdGhlIGJvdHMgdGhhdCB3ZSBuZWVkIHRvIGRvIGEgYmxvY2tpbmcgcmVuZGVyIGZvciBhbmQgY2FuJ3Qgc2FmZWx5IHN0cmVhbSB0aGUgcmVzcG9uc2Vcbi8vIGR1ZSB0byBob3cgdGhleSBwYXJzZSB0aGUgRE9NLiBGb3IgZXhhbXBsZSwgdGhleSBtaWdodCBleHBsaWNpdGx5IGNoZWNrIGZvciBtZXRhZGF0YSBpbiB0aGUgYGhlYWRgIHRhZywgc28gd2UgY2FuJ3Qgc3RyZWFtIG1ldGFkYXRhIHRhZ3MgYWZ0ZXIgdGhlIGBoZWFkYCB3YXMgc2VudC5cbmV4cG9ydCBjb25zdCBIVE1MX0xJTUlURURfQk9UX1VBX1JFID1cbiAgL01lZGlhcGFydG5lcnMtR29vZ2xlfENocm9tZS1MaWdodGhvdXNlfFNsdXJwfER1Y2tEdWNrQm90fGJhaWR1c3BpZGVyfHlhbmRleHxzb2dvdXxiaXRseWJvdHx0dW1ibHJ8dmtTaGFyZXxxdW9yYSBsaW5rIHByZXZpZXd8cmVkZGl0Ym90fGlhX2FyY2hpdmVyfEJpbmdib3R8QmluZ1ByZXZpZXd8YXBwbGVib3R8ZmFjZWJvb2tleHRlcm5hbGhpdHxmYWNlYm9va2NhdGFsb2d8VHdpdHRlcmJvdHxMaW5rZWRJbkJvdHxTbGFja2JvdHxEaXNjb3JkYm90fFdoYXRzQXBwfFNreXBlVXJpUHJldmlld3xZZXRpL2lcbiJdLCJuYW1lcyI6WyJIVE1MX0xJTUlURURfQk9UX1VBX1JFIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/html-bots.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/interception-routes.js":
|
||
/*!*******************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/interception-routes.js ***!
|
||
\*******************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n INTERCEPTION_ROUTE_MARKERS: function() {\n return INTERCEPTION_ROUTE_MARKERS;\n },\n extractInterceptionRouteInformation: function() {\n return extractInterceptionRouteInformation;\n },\n isInterceptionRouteAppPath: function() {\n return isInterceptionRouteAppPath;\n }\n});\nconst _apppaths = __webpack_require__(/*! ./app-paths */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/app-paths.js\");\nconst INTERCEPTION_ROUTE_MARKERS = [\n '(..)(..)',\n '(.)',\n '(..)',\n '(...)'\n];\nfunction isInterceptionRouteAppPath(path) {\n // TODO-APP: add more serious validation\n return path.split('/').find((segment)=>INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m))) !== undefined;\n}\nfunction extractInterceptionRouteInformation(path) {\n let interceptingRoute, marker, interceptedRoute;\n for (const segment of path.split('/')){\n marker = INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m));\n if (marker) {\n ;\n [interceptingRoute, interceptedRoute] = path.split(marker, 2);\n break;\n }\n }\n if (!interceptingRoute || !marker || !interceptedRoute) {\n throw Object.defineProperty(new Error(\"Invalid interception route: \" + path + \". Must be in the format /<intercepting route>/(..|...|..)(..)/<intercepted route>\"), \"__NEXT_ERROR_CODE\", {\n value: \"E269\",\n enumerable: false,\n configurable: true\n });\n }\n interceptingRoute = (0, _apppaths.normalizeAppPath)(interceptingRoute) // normalize the path, e.g. /(blog)/feed -> /feed\n ;\n switch(marker){\n case '(.)':\n // (.) indicates that we should match with sibling routes, so we just need to append the intercepted route to the intercepting route\n if (interceptingRoute === '/') {\n interceptedRoute = \"/\" + interceptedRoute;\n } else {\n interceptedRoute = interceptingRoute + '/' + interceptedRoute;\n }\n break;\n case '(..)':\n // (..) indicates that we should match at one level up, so we need to remove the last segment of the intercepting route\n if (interceptingRoute === '/') {\n throw Object.defineProperty(new Error(\"Invalid interception route: \" + path + \". Cannot use (..) marker at the root level, use (.) instead.\"), \"__NEXT_ERROR_CODE\", {\n value: \"E207\",\n enumerable: false,\n configurable: true\n });\n }\n interceptedRoute = interceptingRoute.split('/').slice(0, -1).concat(interceptedRoute).join('/');\n break;\n case '(...)':\n // (...) will match the route segment in the root directory, so we need to use the root directory to prepend the intercepted route\n interceptedRoute = '/' + interceptedRoute;\n break;\n case '(..)(..)':\n // (..)(..) indicates that we should match at two levels up, so we need to remove the last two segments of the intercepting route\n const splitInterceptingRoute = interceptingRoute.split('/');\n if (splitInterceptingRoute.length <= 2) {\n throw Object.defineProperty(new Error(\"Invalid interception route: \" + path + \". Cannot use (..)(..) marker at the root level or one level up.\"), \"__NEXT_ERROR_CODE\", {\n value: \"E486\",\n enumerable: false,\n configurable: true\n });\n }\n interceptedRoute = splitInterceptingRoute.slice(0, -2).concat(interceptedRoute).join('/');\n break;\n default:\n throw Object.defineProperty(new Error('Invariant: unexpected marker'), \"__NEXT_ERROR_CODE\", {\n value: \"E112\",\n enumerable: false,\n configurable: true\n });\n }\n return {\n interceptingRoute,\n interceptedRoute\n };\n} //# sourceMappingURL=interception-routes.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaW50ZXJjZXB0aW9uLXJvdXRlcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFHYUEsMEJBQTBCO2VBQTFCQTs7SUFrQkdDLG1DQUFtQztlQUFuQ0E7O0lBWEFDLDBCQUEwQjtlQUExQkE7OztzQ0FWaUI7QUFHMUIsTUFBTUYsNkJBQTZCO0lBQ3hDO0lBQ0E7SUFDQTtJQUNBO0NBQ0Q7QUFFTSxTQUFTRSwyQkFBMkJDLElBQVk7SUFDckQsd0NBQXdDO0lBQ3hDLE9BQ0VBLEtBQ0dDLEtBQUssQ0FBQyxLQUNOQyxJQUFJLENBQUMsQ0FBQ0MsVUFDTE4sMkJBQTJCSyxJQUFJLENBQUMsQ0FBQ0UsSUFBTUQsUUFBUUUsVUFBVSxDQUFDRCxTQUN0REU7QUFFWjtBQUVPLFNBQVNSLG9DQUFvQ0UsSUFBWTtJQUM5RCxJQUFJTyxtQkFDRkMsUUFDQUM7SUFFRixLQUFLLE1BQU1OLFdBQVdILEtBQUtDLEtBQUssQ0FBQyxLQUFNO1FBQ3JDTyxTQUFTWCwyQkFBMkJLLElBQUksQ0FBQyxDQUFDRSxJQUFNRCxRQUFRRSxVQUFVLENBQUNEO1FBQ25FLElBQUlJLFFBQVE7O1lBQ1QsQ0FBQ0QsbUJBQW1CRSxpQkFBaUIsR0FBR1QsS0FBS0MsS0FBSyxDQUFDTyxRQUFRO1lBQzVEO1FBQ0Y7SUFDRjtJQUVBLElBQUksQ0FBQ0QscUJBQXFCLENBQUNDLFVBQVUsQ0FBQ0Msa0JBQWtCO1FBQ3RELE1BQU0scUJBRUwsQ0FGSyxJQUFJQyxNQUNQLGlDQUE4QlYsT0FBSyxzRkFEaEM7bUJBQUE7d0JBQUE7MEJBQUE7UUFFTjtJQUNGO0lBRUFPLG9CQUFvQkksQ0FBQUEsR0FBQUEsVUFBQUEsZ0JBQUFBLEVBQWlCSixtQkFBbUIsaURBQWlEOztJQUV6RyxPQUFRQztRQUNOLEtBQUs7WUFDSCxvSUFBb0k7WUFDcEksSUFBSUQsc0JBQXNCLEtBQUs7Z0JBQzdCRSxtQkFBb0IsTUFBR0E7WUFDekIsT0FBTztnQkFDTEEsbUJBQW1CRixvQkFBb0IsTUFBTUU7WUFDL0M7WUFDQTtRQUNGLEtBQUs7WUFDSCx1SEFBdUg7WUFDdkgsSUFBSUYsc0JBQXNCLEtBQUs7Z0JBQzdCLE1BQU0scUJBRUwsQ0FGSyxJQUFJRyxNQUNQLGlDQUE4QlYsT0FBSyxpRUFEaEM7MkJBQUE7Z0NBQUE7a0NBQUE7Z0JBRU47WUFDRjtZQUNBUyxtQkFBbUJGLGtCQUNoQk4sS0FBSyxDQUFDLEtBQ05XLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FDVkMsTUFBTSxDQUFDSixrQkFDUEssSUFBSSxDQUFDO1lBQ1I7UUFDRixLQUFLO1lBQ0gsa0lBQWtJO1lBQ2xJTCxtQkFBbUIsTUFBTUE7WUFDekI7UUFDRixLQUFLO1lBQ0gsaUlBQWlJO1lBRWpJLE1BQU1NLHlCQUF5QlIsa0JBQWtCTixLQUFLLENBQUM7WUFDdkQsSUFBSWMsdUJBQXVCQyxNQUFNLElBQUksR0FBRztnQkFDdEMsTUFBTSxxQkFFTCxDQUZLLElBQUlOLE1BQ1AsaUNBQThCVixPQUFLLG9FQURoQzsyQkFBQTtnQ0FBQTtrQ0FBQTtnQkFFTjtZQUNGO1lBRUFTLG1CQUFtQk0sdUJBQ2hCSCxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQ1ZDLE1BQU0sQ0FBQ0osa0JBQ1BLLElBQUksQ0FBQztZQUNSO1FBQ0Y7WUFDRSxNQUFNLHFCQUF5QyxDQUF6QyxJQUFJSixNQUFNLGlDQUFWO3VCQUFBOzRCQUFBOzhCQUFBO1lBQXdDO0lBQ2xEO0lBRUEsT0FBTztRQUFFSDtRQUFtQkU7SUFBaUI7QUFDL0MiLCJzb3VyY2VzIjpbIi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaW50ZXJjZXB0aW9uLXJvdXRlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBub3JtYWxpemVBcHBQYXRoIH0gZnJvbSAnLi9hcHAtcGF0aHMnXG5cbi8vIG9yZGVyIG1hdHRlcnMgaGVyZSwgdGhlIGZpcnN0IG1hdGNoIHdpbGwgYmUgdXNlZFxuZXhwb3J0IGNvbnN0IElOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTID0gW1xuICAnKC4uKSguLiknLFxuICAnKC4pJyxcbiAgJyguLiknLFxuICAnKC4uLiknLFxuXSBhcyBjb25zdFxuXG5leHBvcnQgZnVuY3Rpb24gaXNJbnRlcmNlcHRpb25Sb3V0ZUFwcFBhdGgocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIC8vIFRPRE8tQVBQOiBhZGQgbW9yZSBzZXJpb3VzIHZhbGlkYXRpb25cbiAgcmV0dXJuIChcbiAgICBwYXRoXG4gICAgICAuc3BsaXQoJy8nKVxuICAgICAgLmZpbmQoKHNlZ21lbnQpID0+XG4gICAgICAgIElOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTLmZpbmQoKG0pID0+IHNlZ21lbnQuc3RhcnRzV2l0aChtKSlcbiAgICAgICkgIT09IHVuZGVmaW5lZFxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0SW50ZXJjZXB0aW9uUm91dGVJbmZvcm1hdGlvbihwYXRoOiBzdHJpbmcpIHtcbiAgbGV0IGludGVyY2VwdGluZ1JvdXRlOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgbWFya2VyOiAodHlwZW9mIElOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTKVtudW1iZXJdIHwgdW5kZWZpbmVkLFxuICAgIGludGVyY2VwdGVkUm91dGU6IHN0cmluZyB8IHVuZGVmaW5lZFxuXG4gIGZvciAoY29uc3Qgc2VnbWVudCBvZiBwYXRoLnNwbGl0KCcvJykpIHtcbiAgICBtYXJrZXIgPSBJTlRFUkNFUFRJT05fUk9VVEVfTUFSS0VSUy5maW5kKChtKSA9PiBzZWdtZW50LnN0YXJ0c1dpdGgobSkpXG4gICAgaWYgKG1hcmtlcikge1xuICAgICAgO1tpbnRlcmNlcHRpbmdSb3V0ZSwgaW50ZXJjZXB0ZWRSb3V0ZV0gPSBwYXRoLnNwbGl0KG1hcmtlciwgMilcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKCFpbnRlcmNlcHRpbmdSb3V0ZSB8fCAhbWFya2VyIHx8ICFpbnRlcmNlcHRlZFJvdXRlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgaW50ZXJjZXB0aW9uIHJvdXRlOiAke3BhdGh9LiBNdXN0IGJlIGluIHRoZSBmb3JtYXQgLzxpbnRlcmNlcHRpbmcgcm91dGU+LyguLnwuLi58Li4pKC4uKS88aW50ZXJjZXB0ZWQgcm91dGU+YFxuICAgIClcbiAgfVxuXG4gIGludGVyY2VwdGluZ1JvdXRlID0gbm9ybWFsaXplQXBwUGF0aChpbnRlcmNlcHRpbmdSb3V0ZSkgLy8gbm9ybWFsaXplIHRoZSBwYXRoLCBlLmcuIC8oYmxvZykvZmVlZCAtPiAvZmVlZFxuXG4gIHN3aXRjaCAobWFya2VyKSB7XG4gICAgY2FzZSAnKC4pJzpcbiAgICAgIC8vICguKSBpbmRpY2F0ZXMgdGhhdCB3ZSBzaG91bGQgbWF0Y2ggd2l0aCBzaWJsaW5nIHJvdXRlcywgc28gd2UganVzdCBuZWVkIHRvIGFwcGVuZCB0aGUgaW50ZXJjZXB0ZWQgcm91dGUgdG8gdGhlIGludGVyY2VwdGluZyByb3V0ZVxuICAgICAgaWYgKGludGVyY2VwdGluZ1JvdXRlID09PSAnLycpIHtcbiAgICAgICAgaW50ZXJjZXB0ZWRSb3V0ZSA9IGAvJHtpbnRlcmNlcHRlZFJvdXRlfWBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGludGVyY2VwdGVkUm91dGUgPSBpbnRlcmNlcHRpbmdSb3V0ZSArICcvJyArIGludGVyY2VwdGVkUm91dGVcbiAgICAgIH1cbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnKC4uKSc6XG4gICAgICAvLyAoLi4pIGluZGljYXRlcyB0aGF0IHdlIHNob3VsZCBtYXRjaCBhdCBvbmUgbGV2ZWwgdXAsIHNvIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBsYXN0IHNlZ21lbnQgb2YgdGhlIGludGVyY2VwdGluZyByb3V0ZVxuICAgICAgaWYgKGludGVyY2VwdGluZ1JvdXRlID09PSAnLycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBJbnZhbGlkIGludGVyY2VwdGlvbiByb3V0ZTogJHtwYXRofS4gQ2Fubm90IHVzZSAoLi4pIG1hcmtlciBhdCB0aGUgcm9vdCBsZXZlbCwgdXNlICguKSBpbnN0ZWFkLmBcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgaW50ZXJjZXB0ZWRSb3V0ZSA9IGludGVyY2VwdGluZ1JvdXRlXG4gICAgICAgIC5zcGxpdCgnLycpXG4gICAgICAgIC5zbGljZSgwLCAtMSlcbiAgICAgICAgLmNvbmNhdChpbnRlcmNlcHRlZFJvdXRlKVxuICAgICAgICAuam9pbignLycpXG4gICAgICBicmVha1xuICAgIGNhc2UgJyguLi4pJzpcbiAgICAgIC8vICguLi4pIHdpbGwgbWF0Y2ggdGhlIHJvdXRlIHNlZ21lbnQgaW4gdGhlIHJvb3QgZGlyZWN0b3J5LCBzbyB3ZSBuZWVkIHRvIHVzZSB0aGUgcm9vdCBkaXJlY3RvcnkgdG8gcHJlcGVuZCB0aGUgaW50ZXJjZXB0ZWQgcm91dGVcbiAgICAgIGludGVyY2VwdGVkUm91dGUgPSAnLycgKyBpbnRlcmNlcHRlZFJvdXRlXG4gICAgICBicmVha1xuICAgIGNhc2UgJyguLikoLi4pJzpcbiAgICAgIC8vICguLikoLi4pIGluZGljYXRlcyB0aGF0IHdlIHNob3VsZCBtYXRjaCBhdCB0d28gbGV2ZWxzIHVwLCBzbyB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgbGFzdCB0d28gc2VnbWVudHMgb2YgdGhlIGludGVyY2VwdGluZyByb3V0ZVxuXG4gICAgICBjb25zdCBzcGxpdEludGVyY2VwdGluZ1JvdXRlID0gaW50ZXJjZXB0aW5nUm91dGUuc3BsaXQoJy8nKVxuICAgICAgaWYgKHNwbGl0SW50ZXJjZXB0aW5nUm91dGUubGVuZ3RoIDw9IDIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBJbnZhbGlkIGludGVyY2VwdGlvbiByb3V0ZTogJHtwYXRofS4gQ2Fubm90IHVzZSAoLi4pKC4uKSBtYXJrZXIgYXQgdGhlIHJvb3QgbGV2ZWwgb3Igb25lIGxldmVsIHVwLmBcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpbnRlcmNlcHRlZFJvdXRlID0gc3BsaXRJbnRlcmNlcHRpbmdSb3V0ZVxuICAgICAgICAuc2xpY2UoMCwgLTIpXG4gICAgICAgIC5jb25jYXQoaW50ZXJjZXB0ZWRSb3V0ZSlcbiAgICAgICAgLmpvaW4oJy8nKVxuICAgICAgYnJlYWtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhcmlhbnQ6IHVuZXhwZWN0ZWQgbWFya2VyJylcbiAgfVxuXG4gIHJldHVybiB7IGludGVyY2VwdGluZ1JvdXRlLCBpbnRlcmNlcHRlZFJvdXRlIH1cbn1cbiJdLCJuYW1lcyI6WyJJTlRFUkNFUFRJT05fUk9VVEVfTUFSS0VSUyIsImV4dHJhY3RJbnRlcmNlcHRpb25Sb3V0ZUluZm9ybWF0aW9uIiwiaXNJbnRlcmNlcHRpb25Sb3V0ZUFwcFBhdGgiLCJwYXRoIiwic3BsaXQiLCJmaW5kIiwic2VnbWVudCIsIm0iLCJzdGFydHNXaXRoIiwidW5kZWZpbmVkIiwiaW50ZXJjZXB0aW5nUm91dGUiLCJtYXJrZXIiLCJpbnRlcmNlcHRlZFJvdXRlIiwiRXJyb3IiLCJub3JtYWxpemVBcHBQYXRoIiwic2xpY2UiLCJjb25jYXQiLCJqb2luIiwic3BsaXRJbnRlcmNlcHRpbmdSb3V0ZSIsImxlbmd0aCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/interception-routes.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/is-bot.js":
|
||
/*!******************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/is-bot.js ***!
|
||
\******************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n HTML_LIMITED_BOT_UA_RE: function() {\n return _htmlbots.HTML_LIMITED_BOT_UA_RE;\n },\n HTML_LIMITED_BOT_UA_RE_STRING: function() {\n return HTML_LIMITED_BOT_UA_RE_STRING;\n },\n getBotType: function() {\n return getBotType;\n },\n isBot: function() {\n return isBot;\n }\n});\nconst _htmlbots = __webpack_require__(/*! ./html-bots */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/html-bots.js\");\n// Bot crawler that will spin up a headless browser and execute JS.\n// By default, only googlebots are considered as DOM bots. Blow is where the regex is computed from:\n// x-ref: https://developers.google.com/search/docs/crawling-indexing/google-common-crawlers\nconst HEADLESS_BROWSER_BOT_UA_RE = /google/i;\nconst HTML_LIMITED_BOT_UA_RE_STRING = _htmlbots.HTML_LIMITED_BOT_UA_RE.source;\nfunction isDomBotUA(userAgent) {\n return HEADLESS_BROWSER_BOT_UA_RE.test(userAgent);\n}\nfunction isHtmlLimitedBotUA(userAgent) {\n return _htmlbots.HTML_LIMITED_BOT_UA_RE.test(userAgent);\n}\nfunction isBot(userAgent) {\n return isDomBotUA(userAgent) || isHtmlLimitedBotUA(userAgent);\n}\nfunction getBotType(userAgent) {\n if (isDomBotUA(userAgent)) {\n return 'dom';\n }\n if (isHtmlLimitedBotUA(userAgent)) {\n return 'html';\n }\n return undefined;\n} //# sourceMappingURL=is-bot.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtYm90LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQVNTQSxzQkFBc0I7ZUFBdEJBLFVBQUFBLHNCQUFzQjs7SUFGbEJDLDZCQUE2QjtlQUE3QkE7O0lBZ0JHQyxVQUFVO2VBQVZBOztJQUpBQyxLQUFLO2VBQUxBOzs7c0NBbkJ1QjtBQUV2QyxtRUFBbUU7QUFDbkUsb0dBQW9HO0FBQ3BHLDRGQUE0RjtBQUM1RixNQUFNQyw2QkFBNkI7QUFFNUIsTUFBTUgsZ0NBQWdDRCxVQUFBQSxzQkFBc0IsQ0FBQ0ssTUFBTTtBQUkxRSxTQUFTQyxXQUFXQyxTQUFpQjtJQUNuQyxPQUFPSCwyQkFBMkJJLElBQUksQ0FBQ0Q7QUFDekM7QUFFQSxTQUFTRSxtQkFBbUJGLFNBQWlCO0lBQzNDLE9BQU9QLFVBQUFBLHNCQUFzQixDQUFDUSxJQUFJLENBQUNEO0FBQ3JDO0FBRU8sU0FBU0osTUFBTUksU0FBaUI7SUFDckMsT0FBT0QsV0FBV0MsY0FBY0UsbUJBQW1CRjtBQUNyRDtBQUVPLFNBQVNMLFdBQVdLLFNBQWlCO0lBQzFDLElBQUlELFdBQVdDLFlBQVk7UUFDekIsT0FBTztJQUNUO0lBQ0EsSUFBSUUsbUJBQW1CRixZQUFZO1FBQ2pDLE9BQU87SUFDVDtJQUNBLE9BQU9HO0FBQ1QiLCJzb3VyY2VzIjpbIi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtYm90LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEhUTUxfTElNSVRFRF9CT1RfVUFfUkUgfSBmcm9tICcuL2h0bWwtYm90cydcblxuLy8gQm90IGNyYXdsZXIgdGhhdCB3aWxsIHNwaW4gdXAgYSBoZWFkbGVzcyBicm93c2VyIGFuZCBleGVjdXRlIEpTLlxuLy8gQnkgZGVmYXVsdCwgb25seSBnb29nbGVib3RzIGFyZSBjb25zaWRlcmVkIGFzIERPTSBib3RzLiBCbG93IGlzIHdoZXJlIHRoZSByZWdleCBpcyBjb21wdXRlZCBmcm9tOlxuLy8geC1yZWY6IGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3NlYXJjaC9kb2NzL2NyYXdsaW5nLWluZGV4aW5nL2dvb2dsZS1jb21tb24tY3Jhd2xlcnNcbmNvbnN0IEhFQURMRVNTX0JST1dTRVJfQk9UX1VBX1JFID0gL2dvb2dsZS9pXG5cbmV4cG9ydCBjb25zdCBIVE1MX0xJTUlURURfQk9UX1VBX1JFX1NUUklORyA9IEhUTUxfTElNSVRFRF9CT1RfVUFfUkUuc291cmNlXG5cbmV4cG9ydCB7IEhUTUxfTElNSVRFRF9CT1RfVUFfUkUgfVxuXG5mdW5jdGlvbiBpc0RvbUJvdFVBKHVzZXJBZ2VudDogc3RyaW5nKSB7XG4gIHJldHVybiBIRUFETEVTU19CUk9XU0VSX0JPVF9VQV9SRS50ZXN0KHVzZXJBZ2VudClcbn1cblxuZnVuY3Rpb24gaXNIdG1sTGltaXRlZEJvdFVBKHVzZXJBZ2VudDogc3RyaW5nKSB7XG4gIHJldHVybiBIVE1MX0xJTUlURURfQk9UX1VBX1JFLnRlc3QodXNlckFnZW50KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCb3QodXNlckFnZW50OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzRG9tQm90VUEodXNlckFnZW50KSB8fCBpc0h0bWxMaW1pdGVkQm90VUEodXNlckFnZW50KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Qm90VHlwZSh1c2VyQWdlbnQ6IHN0cmluZyk6ICdkb20nIHwgJ2h0bWwnIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGlzRG9tQm90VUEodXNlckFnZW50KSkge1xuICAgIHJldHVybiAnZG9tJ1xuICB9XG4gIGlmIChpc0h0bWxMaW1pdGVkQm90VUEodXNlckFnZW50KSkge1xuICAgIHJldHVybiAnaHRtbCdcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkXG59XG4iXSwibmFtZXMiOlsiSFRNTF9MSU1JVEVEX0JPVF9VQV9SRSIsIkhUTUxfTElNSVRFRF9CT1RfVUFfUkVfU1RSSU5HIiwiZ2V0Qm90VHlwZSIsImlzQm90IiwiSEVBRExFU1NfQlJPV1NFUl9CT1RfVUFfUkUiLCJzb3VyY2UiLCJpc0RvbUJvdFVBIiwidXNlckFnZW50IiwidGVzdCIsImlzSHRtbExpbWl0ZWRCb3RVQSIsInVuZGVmaW5lZCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/is-bot.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/parse-path.js":
|
||
/*!**********************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/parse-path.js ***!
|
||
\**********************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * Given a path this function will find the pathname, query and hash and return\n * them. This is useful to parse full paths on the client side.\n * @param path A path to parse e.g. /foo/bar?id=1#hash\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"parsePath\", ({\n enumerable: true,\n get: function() {\n return parsePath;\n }\n}));\nfunction parsePath(path) {\n const hashIndex = path.indexOf('#');\n const queryIndex = path.indexOf('?');\n const hasQuery = queryIndex > -1 && (hashIndex < 0 || queryIndex < hashIndex);\n if (hasQuery || hashIndex > -1) {\n return {\n pathname: path.substring(0, hasQuery ? queryIndex : hashIndex),\n query: hasQuery ? path.substring(queryIndex, hashIndex > -1 ? hashIndex : undefined) : '',\n hash: hashIndex > -1 ? path.slice(hashIndex) : ''\n };\n }\n return {\n pathname: path,\n query: '',\n hash: ''\n };\n} //# sourceMappingURL=parse-path.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcGFyc2UtcGF0aC5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7OztDQUlDOzs7OzZDQUNlQTs7O2VBQUFBOzs7QUFBVCxTQUFTQSxVQUFVQyxJQUFZO0lBQ3BDLE1BQU1DLFlBQVlELEtBQUtFLE9BQU8sQ0FBQztJQUMvQixNQUFNQyxhQUFhSCxLQUFLRSxPQUFPLENBQUM7SUFDaEMsTUFBTUUsV0FBV0QsYUFBYSxDQUFDLEtBQU1GLENBQUFBLFlBQVksS0FBS0UsYUFBYUYsU0FBQUEsQ0FBUTtJQUUzRSxJQUFJRyxZQUFZSCxZQUFZLENBQUMsR0FBRztRQUM5QixPQUFPO1lBQ0xJLFVBQVVMLEtBQUtNLFNBQVMsQ0FBQyxHQUFHRixXQUFXRCxhQUFhRjtZQUNwRE0sT0FBT0gsV0FDSEosS0FBS00sU0FBUyxDQUFDSCxZQUFZRixZQUFZLENBQUMsSUFBSUEsWUFBWU8sYUFDeEQ7WUFDSkMsTUFBTVIsWUFBWSxDQUFDLElBQUlELEtBQUtVLEtBQUssQ0FBQ1QsYUFBYTtRQUNqRDtJQUNGO0lBRUEsT0FBTztRQUFFSSxVQUFVTDtRQUFNTyxPQUFPO1FBQUlFLE1BQU07SUFBRztBQUMvQyIsInNvdXJjZXMiOlsiL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9wYXJzZS1wYXRoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2l2ZW4gYSBwYXRoIHRoaXMgZnVuY3Rpb24gd2lsbCBmaW5kIHRoZSBwYXRobmFtZSwgcXVlcnkgYW5kIGhhc2ggYW5kIHJldHVyblxuICogdGhlbS4gVGhpcyBpcyB1c2VmdWwgdG8gcGFyc2UgZnVsbCBwYXRocyBvbiB0aGUgY2xpZW50IHNpZGUuXG4gKiBAcGFyYW0gcGF0aCBBIHBhdGggdG8gcGFyc2UgZS5nLiAvZm9vL2Jhcj9pZD0xI2hhc2hcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGF0aChwYXRoOiBzdHJpbmcpIHtcbiAgY29uc3QgaGFzaEluZGV4ID0gcGF0aC5pbmRleE9mKCcjJylcbiAgY29uc3QgcXVlcnlJbmRleCA9IHBhdGguaW5kZXhPZignPycpXG4gIGNvbnN0IGhhc1F1ZXJ5ID0gcXVlcnlJbmRleCA+IC0xICYmIChoYXNoSW5kZXggPCAwIHx8IHF1ZXJ5SW5kZXggPCBoYXNoSW5kZXgpXG5cbiAgaWYgKGhhc1F1ZXJ5IHx8IGhhc2hJbmRleCA+IC0xKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhdGhuYW1lOiBwYXRoLnN1YnN0cmluZygwLCBoYXNRdWVyeSA/IHF1ZXJ5SW5kZXggOiBoYXNoSW5kZXgpLFxuICAgICAgcXVlcnk6IGhhc1F1ZXJ5XG4gICAgICAgID8gcGF0aC5zdWJzdHJpbmcocXVlcnlJbmRleCwgaGFzaEluZGV4ID4gLTEgPyBoYXNoSW5kZXggOiB1bmRlZmluZWQpXG4gICAgICAgIDogJycsXG4gICAgICBoYXNoOiBoYXNoSW5kZXggPiAtMSA/IHBhdGguc2xpY2UoaGFzaEluZGV4KSA6ICcnLFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IHBhdGhuYW1lOiBwYXRoLCBxdWVyeTogJycsIGhhc2g6ICcnIH1cbn1cbiJdLCJuYW1lcyI6WyJwYXJzZVBhdGgiLCJwYXRoIiwiaGFzaEluZGV4IiwiaW5kZXhPZiIsInF1ZXJ5SW5kZXgiLCJoYXNRdWVyeSIsInBhdGhuYW1lIiwic3Vic3RyaW5nIiwicXVlcnkiLCJ1bmRlZmluZWQiLCJoYXNoIiwic2xpY2UiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/parse-path.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js":
|
||
/*!***************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js ***!
|
||
\***************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"pathHasPrefix\", ({\n enumerable: true,\n get: function() {\n return pathHasPrefix;\n }\n}));\nconst _parsepath = __webpack_require__(/*! ./parse-path */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nfunction pathHasPrefix(path, prefix) {\n if (typeof path !== 'string') {\n return false;\n }\n const { pathname } = (0, _parsepath.parsePath)(path);\n return pathname === prefix || pathname.startsWith(prefix + '/');\n} //# sourceMappingURL=path-has-prefix.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcGF0aC1oYXMtcHJlZml4LmpzIiwibWFwcGluZ3MiOiI7Ozs7aURBU2dCQTs7O2VBQUFBOzs7dUNBVFU7QUFTbkIsU0FBU0EsY0FBY0MsSUFBWSxFQUFFQyxNQUFjO0lBQ3hELElBQUksT0FBT0QsU0FBUyxVQUFVO1FBQzVCLE9BQU87SUFDVDtJQUVBLE1BQU0sRUFBRUUsUUFBUSxFQUFFLEdBQUdDLENBQUFBLEdBQUFBLFdBQUFBLFNBQUFBLEVBQVVIO0lBQy9CLE9BQU9FLGFBQWFELFVBQVVDLFNBQVNFLFVBQVUsQ0FBQ0gsU0FBUztBQUM3RCIsInNvdXJjZXMiOlsiL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9wYXRoLWhhcy1wcmVmaXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcGFyc2VQYXRoIH0gZnJvbSAnLi9wYXJzZS1wYXRoJ1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGdpdmVuIHBhdGggc3RhcnRzIHdpdGggYSBnaXZlbiBwcmVmaXguIEl0IGVuc3VyZXMgaXQgbWF0Y2hlc1xuICogZXhhY3RseSB3aXRob3V0IGNvbnRhaW5pbmcgZXh0cmEgY2hhcnMuIGUuZy4gcHJlZml4IC9kb2NzIHNob3VsZCByZXBsYWNlXG4gKiBmb3IgL2RvY3MsIC9kb2NzLywgL2RvY3MvYSBidXQgbm90IC9kb2Nzc3NcbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuICogQHBhcmFtIHByZWZpeCBUaGUgcHJlZml4IHRvIGNoZWNrIGFnYWluc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXRoSGFzUHJlZml4KHBhdGg6IHN0cmluZywgcHJlZml4OiBzdHJpbmcpIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgY29uc3QgeyBwYXRobmFtZSB9ID0gcGFyc2VQYXRoKHBhdGgpXG4gIHJldHVybiBwYXRobmFtZSA9PT0gcHJlZml4IHx8IHBhdGhuYW1lLnN0YXJ0c1dpdGgocHJlZml4ICsgJy8nKVxufVxuIl0sIm5hbWVzIjpbInBhdGhIYXNQcmVmaXgiLCJwYXRoIiwicHJlZml4IiwicGF0aG5hbWUiLCJwYXJzZVBhdGgiLCJzdGFydHNXaXRoIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js":
|
||
/*!*********************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js ***!
|
||
\*********************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * Removes the trailing slash for a given route or page path. Preserves the\n * root page. Examples:\n * - `/foo/bar/` -> `/foo/bar`\n * - `/foo/bar` -> `/foo/bar`\n * - `/` -> `/`\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"removeTrailingSlash\", ({\n enumerable: true,\n get: function() {\n return removeTrailingSlash;\n }\n}));\nfunction removeTrailingSlash(route) {\n return route.replace(/\\/$/, '') || '/';\n} //# sourceMappingURL=remove-trailing-slash.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcmVtb3ZlLXRyYWlsaW5nLXNsYXNoLmpzIiwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Q0FNQzs7Ozt1REFDZUE7OztlQUFBQTs7O0FBQVQsU0FBU0Esb0JBQW9CQyxLQUFhO0lBQy9DLE9BQU9BLE1BQU1DLE9BQU8sQ0FBQyxPQUFPLE9BQU87QUFDckMiLCJzb3VyY2VzIjpbIi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcmVtb3ZlLXRyYWlsaW5nLXNsYXNoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVtb3ZlcyB0aGUgdHJhaWxpbmcgc2xhc2ggZm9yIGEgZ2l2ZW4gcm91dGUgb3IgcGFnZSBwYXRoLiBQcmVzZXJ2ZXMgdGhlXG4gKiByb290IHBhZ2UuIEV4YW1wbGVzOlxuICogICAtIGAvZm9vL2Jhci9gIC0+IGAvZm9vL2JhcmBcbiAqICAgLSBgL2Zvby9iYXJgIC0+IGAvZm9vL2JhcmBcbiAqICAgLSBgL2AgLT4gYC9gXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVUcmFpbGluZ1NsYXNoKHJvdXRlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHJvdXRlLnJlcGxhY2UoL1xcLyQvLCAnJykgfHwgJy8nXG59XG4iXSwibmFtZXMiOlsicmVtb3ZlVHJhaWxpbmdTbGFzaCIsInJvdXRlIiwicmVwbGFjZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/segment.js":
|
||
/*!******************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/segment.js ***!
|
||
\******************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n DEFAULT_SEGMENT_KEY: function() {\n return DEFAULT_SEGMENT_KEY;\n },\n PAGE_SEGMENT_KEY: function() {\n return PAGE_SEGMENT_KEY;\n },\n addSearchParamsIfPageSegment: function() {\n return addSearchParamsIfPageSegment;\n },\n isGroupSegment: function() {\n return isGroupSegment;\n },\n isParallelRouteSegment: function() {\n return isParallelRouteSegment;\n }\n});\nfunction isGroupSegment(segment) {\n // Use array[0] for performant purpose\n return segment[0] === '(' && segment.endsWith(')');\n}\nfunction isParallelRouteSegment(segment) {\n return segment.startsWith('@') && segment !== '@children';\n}\nfunction addSearchParamsIfPageSegment(segment, searchParams) {\n const isPageSegment = segment.includes(PAGE_SEGMENT_KEY);\n if (isPageSegment) {\n const stringifiedQuery = JSON.stringify(searchParams);\n return stringifiedQuery !== '{}' ? PAGE_SEGMENT_KEY + '?' + stringifiedQuery : PAGE_SEGMENT_KEY;\n }\n return segment;\n}\nconst PAGE_SEGMENT_KEY = '__PAGE__';\nconst DEFAULT_SEGMENT_KEY = '__DEFAULT__'; //# sourceMappingURL=segment.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9zZWdtZW50LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQTRCYUEsbUJBQW1CO2VBQW5CQTs7SUFEQUMsZ0JBQWdCO2VBQWhCQTs7SUFoQkdDLDRCQUE0QjtlQUE1QkE7O0lBVEFDLGNBQWM7ZUFBZEE7O0lBS0FDLHNCQUFzQjtlQUF0QkE7OztBQUxULFNBQVNELGVBQWVFLE9BQWU7SUFDNUMsc0NBQXNDO0lBQ3RDLE9BQU9BLE9BQU8sQ0FBQyxFQUFFLEtBQUssT0FBT0EsUUFBUUMsUUFBUSxDQUFDO0FBQ2hEO0FBRU8sU0FBU0YsdUJBQXVCQyxPQUFlO0lBQ3BELE9BQU9BLFFBQVFFLFVBQVUsQ0FBQyxRQUFRRixZQUFZO0FBQ2hEO0FBRU8sU0FBU0gsNkJBQ2RHLE9BQWdCLEVBQ2hCRyxZQUEyRDtJQUUzRCxNQUFNQyxnQkFBZ0JKLFFBQVFLLFFBQVEsQ0FBQ1Q7SUFFdkMsSUFBSVEsZUFBZTtRQUNqQixNQUFNRSxtQkFBbUJDLEtBQUtDLFNBQVMsQ0FBQ0w7UUFDeEMsT0FBT0cscUJBQXFCLE9BQ3hCVixtQkFBbUIsTUFBTVUsbUJBQ3pCVjtJQUNOO0lBRUEsT0FBT0k7QUFDVDtBQUVPLE1BQU1KLG1CQUFtQjtBQUN6QixNQUFNRCxzQkFBc0IiLCJzb3VyY2VzIjpbIi9ob21lL05pY2hvbGFpL3NyYy9zaGFyZWQvbGliL3NlZ21lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTZWdtZW50IH0gZnJvbSAnLi4vLi4vc2VydmVyL2FwcC1yZW5kZXIvdHlwZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiBpc0dyb3VwU2VnbWVudChzZWdtZW50OiBzdHJpbmcpIHtcbiAgLy8gVXNlIGFycmF5WzBdIGZvciBwZXJmb3JtYW50IHB1cnBvc2VcbiAgcmV0dXJuIHNlZ21lbnRbMF0gPT09ICcoJyAmJiBzZWdtZW50LmVuZHNXaXRoKCcpJylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGFyYWxsZWxSb3V0ZVNlZ21lbnQoc2VnbWVudDogc3RyaW5nKSB7XG4gIHJldHVybiBzZWdtZW50LnN0YXJ0c1dpdGgoJ0AnKSAmJiBzZWdtZW50ICE9PSAnQGNoaWxkcmVuJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkU2VhcmNoUGFyYW1zSWZQYWdlU2VnbWVudChcbiAgc2VnbWVudDogU2VnbWVudCxcbiAgc2VhcmNoUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZD5cbikge1xuICBjb25zdCBpc1BhZ2VTZWdtZW50ID0gc2VnbWVudC5pbmNsdWRlcyhQQUdFX1NFR01FTlRfS0VZKVxuXG4gIGlmIChpc1BhZ2VTZWdtZW50KSB7XG4gICAgY29uc3Qgc3RyaW5naWZpZWRRdWVyeSA9IEpTT04uc3RyaW5naWZ5KHNlYXJjaFBhcmFtcylcbiAgICByZXR1cm4gc3RyaW5naWZpZWRRdWVyeSAhPT0gJ3t9J1xuICAgICAgPyBQQUdFX1NFR01FTlRfS0VZICsgJz8nICsgc3RyaW5naWZpZWRRdWVyeVxuICAgICAgOiBQQUdFX1NFR01FTlRfS0VZXG4gIH1cblxuICByZXR1cm4gc2VnbWVudFxufVxuXG5leHBvcnQgY29uc3QgUEFHRV9TRUdNRU5UX0tFWSA9ICdfX1BBR0VfXydcbmV4cG9ydCBjb25zdCBERUZBVUxUX1NFR01FTlRfS0VZID0gJ19fREVGQVVMVF9fJ1xuIl0sIm5hbWVzIjpbIkRFRkFVTFRfU0VHTUVOVF9LRVkiLCJQQUdFX1NFR01FTlRfS0VZIiwiYWRkU2VhcmNoUGFyYW1zSWZQYWdlU2VnbWVudCIsImlzR3JvdXBTZWdtZW50IiwiaXNQYXJhbGxlbFJvdXRlU2VnbWVudCIsInNlZ21lbnQiLCJlbmRzV2l0aCIsInN0YXJ0c1dpdGgiLCJzZWFyY2hQYXJhbXMiLCJpc1BhZ2VTZWdtZW50IiwiaW5jbHVkZXMiLCJzdHJpbmdpZmllZFF1ZXJ5IiwiSlNPTiIsInN0cmluZ2lmeSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/segment.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.js":
|
||
/*!**********************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.js ***!
|
||
\**********************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n ServerInsertedHTMLContext: function() {\n return ServerInsertedHTMLContext;\n },\n useServerInsertedHTML: function() {\n return useServerInsertedHTML;\n }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst ServerInsertedHTMLContext = /*#__PURE__*/ _react.default.createContext(null);\nfunction useServerInsertedHTML(callback) {\n const addInsertedServerHTMLCallback = (0, _react.useContext)(ServerInsertedHTMLContext);\n // Should have no effects on client where there's no flush effects provider\n if (addInsertedServerHTMLCallback) {\n addInsertedServerHTMLCallback(callback);\n }\n} //# sourceMappingURL=server-inserted-html.shared-runtime.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9zZXJ2ZXItaW5zZXJ0ZWQtaHRtbC5zaGFyZWQtcnVudGltZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFZYUEseUJBQXlCO2VBQXpCQTs7SUFHR0MscUJBQXFCO2VBQXJCQTs7Ozs2RUFia0I7QUFVM0IsTUFBTUQsNEJBQUFBLFdBQUFBLEdBQ1hFLE9BQUFBLE9BQUssQ0FBQ0MsYUFBYSxDQUFnQztBQUU5QyxTQUFTRixzQkFBc0JHLFFBQStCO0lBQ25FLE1BQU1DLGdDQUFnQ0MsQ0FBQUEsR0FBQUEsT0FBQUEsVUFBQUEsRUFBV047SUFDakQsMkVBQTJFO0lBQzNFLElBQUlLLCtCQUErQjtRQUNqQ0EsOEJBQThCRDtJQUNoQztBQUNGIiwic291cmNlcyI6WyIvaG9tZS9OaWNob2xhaS9zcmMvc2hhcmVkL2xpYi9zZXJ2ZXItaW5zZXJ0ZWQtaHRtbC5zaGFyZWQtcnVudGltZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnXG5cbmV4cG9ydCB0eXBlIFNlcnZlckluc2VydGVkSFRNTEhvb2sgPSAoY2FsbGJhY2tzOiAoKSA9PiBSZWFjdC5SZWFjdE5vZGUpID0+IHZvaWRcblxuLy8gVXNlIGBSZWFjdC5jcmVhdGVDb250ZXh0YCB0byBhdm9pZCBlcnJvcnMgZnJvbSB0aGUgUlNDIGNoZWNrcyBiZWNhdXNlXG4vLyBpdCBjYW4ndCBiZSBpbXBvcnRlZCBkaXJlY3RseSBpbiBTZXJ2ZXIgQ29tcG9uZW50czpcbi8vXG4vLyAgIGltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCdcbi8vXG4vLyBNb3JlIGluZm86IGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvbmV4dC5qcy9wdWxsLzQwNjg2XG5leHBvcnQgY29uc3QgU2VydmVySW5zZXJ0ZWRIVE1MQ29udGV4dCA9XG4gIFJlYWN0LmNyZWF0ZUNvbnRleHQ8U2VydmVySW5zZXJ0ZWRIVE1MSG9vayB8IG51bGw+KG51bGwgYXMgYW55KVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlU2VydmVySW5zZXJ0ZWRIVE1MKGNhbGxiYWNrOiAoKSA9PiBSZWFjdC5SZWFjdE5vZGUpOiB2b2lkIHtcbiAgY29uc3QgYWRkSW5zZXJ0ZWRTZXJ2ZXJIVE1MQ2FsbGJhY2sgPSB1c2VDb250ZXh0KFNlcnZlckluc2VydGVkSFRNTENvbnRleHQpXG4gIC8vIFNob3VsZCBoYXZlIG5vIGVmZmVjdHMgb24gY2xpZW50IHdoZXJlIHRoZXJlJ3Mgbm8gZmx1c2ggZWZmZWN0cyBwcm92aWRlclxuICBpZiAoYWRkSW5zZXJ0ZWRTZXJ2ZXJIVE1MQ2FsbGJhY2spIHtcbiAgICBhZGRJbnNlcnRlZFNlcnZlckhUTUxDYWxsYmFjayhjYWxsYmFjaylcbiAgfVxufVxuIl0sIm5hbWVzIjpbIlNlcnZlckluc2VydGVkSFRNTENvbnRleHQiLCJ1c2VTZXJ2ZXJJbnNlcnRlZEhUTUwiLCJSZWFjdCIsImNyZWF0ZUNvbnRleHQiLCJjYWxsYmFjayIsImFkZEluc2VydGVkU2VydmVySFRNTENhbGxiYWNrIiwidXNlQ29udGV4dCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/server-reference-info.js":
|
||
/*!********************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/server-reference-info.js ***!
|
||
\********************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n extractInfoFromServerReferenceId: function() {\n return extractInfoFromServerReferenceId;\n },\n omitUnusedArgs: function() {\n return omitUnusedArgs;\n }\n});\nfunction extractInfoFromServerReferenceId(id) {\n const infoByte = parseInt(id.slice(0, 2), 16);\n const typeBit = infoByte >> 7 & 0x1;\n const argMask = infoByte >> 1 & 0x3f;\n const restArgs = infoByte & 0x1;\n const usedArgs = Array(6);\n for(let index = 0; index < 6; index++){\n const bitPosition = 5 - index;\n const bit = argMask >> bitPosition & 0x1;\n usedArgs[index] = bit === 1;\n }\n return {\n type: typeBit === 1 ? 'use-cache' : 'server-action',\n usedArgs: usedArgs,\n hasRestArgs: restArgs === 1\n };\n}\nfunction omitUnusedArgs(args, info) {\n const filteredArgs = new Array(args.length);\n for(let index = 0; index < args.length; index++){\n if (index < 6 && info.usedArgs[index] || // This assumes that the server reference info byte has the restArgs bit\n // set to 1 if there are more than 6 args.\n index >= 6 && info.hasRestArgs) {\n filteredArgs[index] = args[index];\n }\n }\n return filteredArgs;\n} //# sourceMappingURL=server-reference-info.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9zZXJ2ZXItcmVmZXJlbmNlLWluZm8uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBMEJnQkEsZ0NBQWdDO2VBQWhDQTs7SUFpQ0FDLGNBQWM7ZUFBZEE7OztBQWpDVCxTQUFTRCxpQ0FDZEUsRUFBVTtJQUVWLE1BQU1DLFdBQVdDLFNBQVNGLEdBQUdHLEtBQUssQ0FBQyxHQUFHLElBQUk7SUFDMUMsTUFBTUMsVUFBV0gsWUFBWSxJQUFLO0lBQ2xDLE1BQU1JLFVBQVdKLFlBQVksSUFBSztJQUNsQyxNQUFNSyxXQUFXTCxXQUFXO0lBQzVCLE1BQU1NLFdBQVdDLE1BQU07SUFFdkIsSUFBSyxJQUFJQyxRQUFRLEdBQUdBLFFBQVEsR0FBR0EsUUFBUztRQUN0QyxNQUFNQyxjQUFjLElBQUlEO1FBQ3hCLE1BQU1FLE1BQU9OLFdBQVdLLGNBQWU7UUFDdkNILFFBQVEsQ0FBQ0UsTUFBTSxHQUFHRSxRQUFRO0lBQzVCO0lBRUEsT0FBTztRQUNMQyxNQUFNUixZQUFZLElBQUksY0FBYztRQUNwQ0csVUFBVUE7UUFRVk0sYUFBYVAsYUFBYTtJQUM1QjtBQUNGO0FBTU8sU0FBU1AsZUFDZGUsSUFBZSxFQUNmQyxJQUF5QjtJQUV6QixNQUFNQyxlQUFlLElBQUlSLE1BQU1NLEtBQUtHLE1BQU07SUFFMUMsSUFBSyxJQUFJUixRQUFRLEdBQUdBLFFBQVFLLEtBQUtHLE1BQU0sRUFBRVIsUUFBUztRQUNoRCxJQUNHQSxRQUFRLEtBQUtNLEtBQUtSLFFBQVEsQ0FBQ0UsTUFBTSxJQUNsQyx3RUFBd0U7UUFDeEUsMENBQTBDO1FBQ3pDQSxTQUFTLEtBQUtNLEtBQUtGLFdBQVcsRUFDL0I7WUFDQUcsWUFBWSxDQUFDUCxNQUFNLEdBQUdLLElBQUksQ0FBQ0wsTUFBTTtRQUNuQztJQUNGO0lBRUEsT0FBT087QUFDVCIsInNvdXJjZXMiOlsiL2hvbWUvTmljaG9sYWkvc3JjL3NoYXJlZC9saWIvc2VydmVyLXJlZmVyZW5jZS1pbmZvLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgU2VydmVyUmVmZXJlbmNlSW5mbyB7XG4gIHR5cGU6ICdzZXJ2ZXItYWN0aW9uJyB8ICd1c2UtY2FjaGUnXG4gIHVzZWRBcmdzOiBbYm9vbGVhbiwgYm9vbGVhbiwgYm9vbGVhbiwgYm9vbGVhbiwgYm9vbGVhbiwgYm9vbGVhbl1cbiAgaGFzUmVzdEFyZ3M6IGJvb2xlYW5cbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBpbmZvIGFib3V0IHRoZSBzZXJ2ZXIgcmVmZXJlbmNlIGZvciB0aGUgZ2l2ZW4gc2VydmVyIHJlZmVyZW5jZSBJRCBieVxuICogcGFyc2luZyB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgaGV4LWVuY29kZWQgSUQuXG4gKlxuICogYGBgXG4gKiBCaXQgcG9zaXRpb25zOiBbN10gICAgICBbNl0gWzVdIFs0XSBbM10gWzJdIFsxXSAgWzBdXG4gKiBCaXRzOiAgICAgICAgICB0eXBlQml0ICBhcmdNYXNrICAgICAgICAgICAgICAgICAgcmVzdEFyZ3NcbiAqIGBgYFxuICpcbiAqIElmIHRoZSBgdHlwZUJpdGAgaXMgYDFgIHRoZSBzZXJ2ZXIgcmVmZXJlbmNlIHJlcHJlc2VudHMgYSBgXCJ1c2UgY2FjaGVcImBcbiAqIGZ1bmN0aW9uLCBvdGhlcndpc2UgYSBzZXJ2ZXIgYWN0aW9uLlxuICpcbiAqIFRoZSBgYXJnTWFza2AgZW5jb2RlcyB3aGV0aGVyIHRoZSBmdW5jdGlvbiB1c2VzIHRoZSBhcmd1bWVudCBhdCB0aGVcbiAqIHJlc3BlY3RpdmUgcG9zaXRpb24uXG4gKlxuICogVGhlIGByZXN0QXJnc2AgYml0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBmdW5jdGlvbiB1c2VzIGEgcmVzdCBwYXJhbWV0ZXIuIEl0J3NcbiAqIGFsc28gc2V0IHRvIDEgaWYgdGhlIGZ1bmN0aW9uIGhhcyBtb3JlIHRoYW4gNiBhcmdzLlxuICpcbiAqIEBwYXJhbSBpZCBoZXgtZW5jb2RlZCBzZXJ2ZXIgcmVmZXJlbmNlIElEXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0SW5mb0Zyb21TZXJ2ZXJSZWZlcmVuY2VJZChcbiAgaWQ6IHN0cmluZ1xuKTogU2VydmVyUmVmZXJlbmNlSW5mbyB7XG4gIGNvbnN0IGluZm9CeXRlID0gcGFyc2VJbnQoaWQuc2xpY2UoMCwgMiksIDE2KVxuICBjb25zdCB0eXBlQml0ID0gKGluZm9CeXRlID4+IDcpICYgMHgxXG4gIGNvbnN0IGFyZ01hc2sgPSAoaW5mb0J5dGUgPj4gMSkgJiAweDNmXG4gIGNvbnN0IHJlc3RBcmdzID0gaW5mb0J5dGUgJiAweDFcbiAgY29uc3QgdXNlZEFyZ3MgPSBBcnJheSg2KVxuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCA2OyBpbmRleCsrKSB7XG4gICAgY29uc3QgYml0UG9zaXRpb24gPSA1IC0gaW5kZXhcbiAgICBjb25zdCBiaXQgPSAoYXJnTWFzayA+PiBiaXRQb3NpdGlvbikgJiAweDFcbiAgICB1c2VkQXJnc1tpbmRleF0gPSBiaXQgPT09IDFcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogdHlwZUJpdCA9PT0gMSA/ICd1c2UtY2FjaGUnIDogJ3NlcnZlci1hY3Rpb24nLFxuICAgIHVzZWRBcmdzOiB1c2VkQXJncyBhcyBbXG4gICAgICBib29sZWFuLFxuICAgICAgYm9vbGVhbixcbiAgICAgIGJvb2xlYW4sXG4gICAgICBib29sZWFuLFxuICAgICAgYm9vbGVhbixcbiAgICAgIGJvb2xlYW4sXG4gICAgXSxcbiAgICBoYXNSZXN0QXJnczogcmVzdEFyZ3MgPT09IDEsXG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc3BhcnNlIGFycmF5IGNvbnRhaW5pbmcgb25seSB0aGUgdXNlZCBhcmd1bWVudHMgYmFzZWQgb24gdGhlXG4gKiBwcm92aWRlZCBhY3Rpb24gaW5mby5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9taXRVbnVzZWRBcmdzKFxuICBhcmdzOiB1bmtub3duW10sXG4gIGluZm86IFNlcnZlclJlZmVyZW5jZUluZm9cbik6IHVua25vd25bXSB7XG4gIGNvbnN0IGZpbHRlcmVkQXJncyA9IG5ldyBBcnJheShhcmdzLmxlbmd0aClcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJncy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBpZiAoXG4gICAgICAoaW5kZXggPCA2ICYmIGluZm8udXNlZEFyZ3NbaW5kZXhdKSB8fFxuICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHNlcnZlciByZWZlcmVuY2UgaW5mbyBieXRlIGhhcyB0aGUgcmVzdEFyZ3MgYml0XG4gICAgICAvLyBzZXQgdG8gMSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIDYgYXJncy5cbiAgICAgIChpbmRleCA+PSA2ICYmIGluZm8uaGFzUmVzdEFyZ3MpXG4gICAgKSB7XG4gICAgICBmaWx0ZXJlZEFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmlsdGVyZWRBcmdzXG59XG4iXSwibmFtZXMiOlsiZXh0cmFjdEluZm9Gcm9tU2VydmVyUmVmZXJlbmNlSWQiLCJvbWl0VW51c2VkQXJncyIsImlkIiwiaW5mb0J5dGUiLCJwYXJzZUludCIsInNsaWNlIiwidHlwZUJpdCIsImFyZ01hc2siLCJyZXN0QXJncyIsInVzZWRBcmdzIiwiQXJyYXkiLCJpbmRleCIsImJpdFBvc2l0aW9uIiwiYml0IiwidHlwZSIsImhhc1Jlc3RBcmdzIiwiYXJncyIsImluZm8iLCJmaWx0ZXJlZEFyZ3MiLCJsZW5ndGgiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/server-reference-info.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/utils/warn-once.js":
|
||
/*!**************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/utils/warn-once.js ***!
|
||
\**************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"warnOnce\", ({\n enumerable: true,\n get: function() {\n return warnOnce;\n }\n}));\nlet warnOnce = (_)=>{};\nif (true) {\n const warnings = new Set();\n warnOnce = (msg)=>{\n if (!warnings.has(msg)) {\n console.warn(msg);\n }\n warnings.add(msg);\n };\n} //# sourceMappingURL=warn-once.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi91dGlscy93YXJuLW9uY2UuanMiLCJtYXBwaW5ncyI6Ijs7Ozs0Q0FXU0E7OztlQUFBQTs7O0FBWFQsSUFBSUEsV0FBVyxDQUFDQyxLQUFlO0FBQy9CLElBQUlDLElBQW9CLEVBQW1CO0lBQ3pDLE1BQU1HLFdBQVcsSUFBSUM7SUFDckJOLFdBQVcsQ0FBQ087UUFDVixJQUFJLENBQUNGLFNBQVNHLEdBQUcsQ0FBQ0QsTUFBTTtZQUN0QkUsUUFBUUMsSUFBSSxDQUFDSDtRQUNmO1FBQ0FGLFNBQVNNLEdBQUcsQ0FBQ0o7SUFDZjtBQUNGIiwic291cmNlcyI6WyIvaG9tZS9zcmMvc2hhcmVkL2xpYi91dGlscy93YXJuLW9uY2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsibGV0IHdhcm5PbmNlID0gKF86IHN0cmluZykgPT4ge31cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGNvbnN0IHdhcm5pbmdzID0gbmV3IFNldDxzdHJpbmc+KClcbiAgd2Fybk9uY2UgPSAobXNnOiBzdHJpbmcpID0+IHtcbiAgICBpZiAoIXdhcm5pbmdzLmhhcyhtc2cpKSB7XG4gICAgICBjb25zb2xlLndhcm4obXNnKVxuICAgIH1cbiAgICB3YXJuaW5ncy5hZGQobXNnKVxuICB9XG59XG5cbmV4cG9ydCB7IHdhcm5PbmNlIH1cbiJdLCJuYW1lcyI6WyJ3YXJuT25jZSIsIl8iLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJ3YXJuaW5ncyIsIlNldCIsIm1zZyIsImhhcyIsImNvbnNvbGUiLCJ3YXJuIiwiYWRkIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/utils/warn-once.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "?608e":
|
||
/*!*****************************************************!*\
|
||
!*** private-next-instrumentation-client (ignored) ***!
|
||
\*****************************************************/
|
||
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
|
||
|
||
/* (ignored) */
|
||
|
||
/***/ })
|
||
|
||
},
|
||
/******/ __webpack_require__ => { // webpackRuntimeModules
|
||
/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
|
||
/******/ var __webpack_exports__ = (__webpack_exec__("(app-pages-browser)/./node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"), __webpack_exec__("(app-pages-browser)/./node_modules/next/dist/client/app-next-dev.js"));
|
||
/******/ _N_E = __webpack_exports__;
|
||
/******/ }
|
||
]); |